Checking consistency of serializationΒΆ

This test checks the consistency of the internal states between before/after serialization. We render two images. One with normal configuration and the other with deserialized states.

[1]:
import os
import imageio
import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import lmfunctest as ft
import lmscene
import lightmetrica as lm
[2]:
os.getpid()
[2]:
1036
[3]:
%load_ext lightmetrica_jupyter
[4]:
lm.init('user::default', {})
lm.parallel.init('parallel::openmp', {
    'numThreads': -1
})
lm.log.init('logger::jupyter', {})
lm.info()
[I|0.000|114@user  ] Lightmetrica -- Version 3.0.0 (rev. fe30e7c) Linux x64
[5]:
scenes = lmscene.scenes_small()
[6]:
rmse_series = pd.Series(index=scenes)
for scene in scenes:
    print("Testing [scene='{}']".format(scene))

    lm.reset()

    lm.asset('film_output', 'film::bitmap', {
        'w': 1920,
        'h': 1080
    })

    # Load scene and render
    lmscene.load(ft.env.scene_path, scene)
    lm.build('accel::sahbvh', {})
    lm.render('renderer::raycast', {
        'output': lm.asset('film_output')
    })
    img_orig = np.copy(lm.buffer(lm.asset('film_output')))

    # Serialize, reset, deserialize, and render
    lm.serialize('lm.serialized')
    lm.reset()
    lm.deserialize('lm.serialized')
    lm.render('renderer::raycast', {
        'output': lm.asset('film_output')
    })
    img_serial = np.copy(lm.buffer(lm.asset('film_output')))

    # Compare two images
    rmse = ft.rmse(img_orig, img_serial)
    rmse_series[scene] = rmse
Testing [scene='fireplace_room']
[I|0.022|48@assets ] Loading asset [name='film_output']
[I|0.110|48@assets ] Loading asset [name='camera_main']
[I|0.110|48@assets ] Loading asset [name='model_obj']
[I|0.111|29@objload]   Loading OBJ file [path='fireplace_room.obj']
[I|0.111|169@objloa]   Loading MTL file [path='fireplace_room.mtl']
[I|0.111|44@texture]   Loading texture [path='wood.ppm']
[I|0.216|44@texture]   Loading texture [path='leaf.ppm']
[I|0.219|44@texture]   Loading texture [path='picture8.ppm']
[I|0.260|44@texture]   Loading texture [path='wood5.ppm']
[I|0.699|246@scene ] Building acceleration structure [name='accel::sahbvh']
[I|0.699|131@accel_]   Flattening scene
[I|0.729|261@accel_]   Building
[I|1.505|151@user  ] Starting render [name='renderer::raycast']
[I|2.006|125@progre] Processing [iter=493700/2073600, progress=23.8%, ETA=1.6s]
[I|2.507|125@progre] Processing [iter=901400/2073600, progress=43.5%, ETA=1.3s]
[I|3.008|125@progre] Processing [iter=1431700/2073600, progress=69.0%, ETA=0.7s]
[I|3.509|125@progre] Processing [iter=1948600/2073600, progress=94.0%, ETA=0.1s]
[I|3.620|132@progre] Processing [completed]
[I|3.756|179@user  ] Saving state to stream
[I|5.379|186@user  ] Loading state from stream
[I|6.022|151@user  ] Starting render [name='renderer::raycast']
[I|6.523|125@progre] Processing [iter=495400/2073600, progress=23.9%, ETA=1.6s]
[I|7.024|125@progre] Processing [iter=898400/2073600, progress=43.3%, ETA=1.3s]
[I|7.525|125@progre] Processing [iter=1429400/2073600, progress=68.9%, ETA=0.7s]
[I|8.026|125@progre] Processing [iter=1944100/2073600, progress=93.8%, ETA=0.1s]
[I|8.144|132@progre] Processing [completed]
Testing [scene='cornell_box_sphere']
[I|8.317|48@assets ] Loading asset [name='film_output']
[I|8.404|48@assets ] Loading asset [name='camera_main']
[I|8.404|48@assets ] Loading asset [name='model_obj']
[I|8.404|29@objload]   Loading OBJ file [path='CornellBox-Sphere.obj']
[I|8.405|169@objloa]   Loading MTL file [path='CornellBox-Sphere.mtl']
[I|8.407|246@scene ] Building acceleration structure [name='accel::sahbvh']
[I|8.407|131@accel_]   Flattening scene
[I|8.408|261@accel_]   Building
[I|8.414|151@user  ] Starting render [name='renderer::raycast']
[I|8.915|125@progre] Processing [iter=1090700/2073600, progress=52.6%, ETA=0.5s]
[I|9.297|132@progre] Processing [completed]
[I|9.451|179@user  ] Saving state to stream
[I|9.856|186@user  ] Loading state from stream
[I|10.173|151@user  ] Starting render [name='renderer::raycast']
[I|10.674|125@progre] Processing [iter=1095700/2073600, progress=52.8%, ETA=0.4s]
[I|11.047|132@progre] Processing [completed]
Testing [scene='cube']
[I|11.207|48@assets ] Loading asset [name='film_output']
[I|11.294|48@assets ] Loading asset [name='camera_main']
[I|11.295|48@assets ] Loading asset [name='model_obj']
[I|11.295|29@objload]   Loading OBJ file [path='cube.obj']
[I|11.295|169@objloa]   Loading MTL file [path='default.mtl']
[I|11.295|44@texture]   Loading texture [path='default.png']
[I|11.310|246@scene ] Building acceleration structure [name='accel::sahbvh']
[I|11.310|131@accel_]   Flattening scene
[I|11.310|261@accel_]   Building
[I|11.311|151@user  ] Starting render [name='renderer::raycast']
[I|11.812|125@progre] Processing [iter=1265600/2073600, progress=61.0%, ETA=0.3s]
[I|12.129|132@progre] Processing [completed]
[I|12.261|179@user  ] Saving state to stream
[I|12.735|186@user  ] Loading state from stream
[I|13.032|151@user  ] Starting render [name='renderer::raycast']
[I|13.534|125@progre] Processing [iter=1253600/2073600, progress=60.5%, ETA=0.3s]
[I|13.853|132@progre] Processing [completed]
[7]:
rmse_series
[7]:
fireplace_room        0.0
cornell_box_sphere    0.0
cube                  0.0
dtype: float64