Performance testing of acceleration structuresΒΆ

This test checks performance of acceleration structure implemented in the framework for various scenes.

[1]:
import os
import imageio
import pandas as pd
import numpy as np
import timeit
%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]:
%load_ext lightmetrica_jupyter
[3]:
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
[4]:
lm.comp.loadPlugin(os.path.join(ft.env.bin_path, 'accel_nanort'))
lm.comp.loadPlugin(os.path.join(ft.env.bin_path, 'accel_embree'))
[I|0.010|179@compon] Loading plugin [name='accel_nanort']
[I|0.010|197@compon]   Successfully loaded
[I|0.010|179@compon] Loading plugin [name='accel_embree']
[I|0.012|197@compon]   Successfully loaded
[4]:
True
[5]:
accels = [
    'accel::sahbvh',
    'accel::nanort',
    'accel::embree',
    'accel::embreeinstanced'
]
scenes = lmscene.scenes_small()
[6]:
build_time_df = pd.DataFrame(columns=accels, index=scenes)
render_time_df = pd.DataFrame(columns=accels, index=scenes)
for scene in scenes:
    lm.reset()
    lmscene.load(ft.env.scene_path, scene)
    for accel in accels:
        lm.asset('film_output', 'film::bitmap', {
            'w': 1920,
            'h': 1080
        })

        def build():
            lm.build(accel, {})
        build_time = timeit.timeit(stmt=build, number=1)
        build_time_df[accel][scene] = build_time

        def render():
            lm.render('renderer::raycast', {
                'output': lm.asset('film_output')
            })
        render_time = timeit.timeit(stmt=render, number=1)
        render_time_df[accel][scene] = render_time
[I|0.043|48@assets ] Loading asset [name='camera_main']
[I|0.043|48@assets ] Loading asset [name='model_obj']
[I|0.043|29@objload]   Loading OBJ file [path='fireplace_room.obj']
[I|0.043|169@objloa]   Loading MTL file [path='fireplace_room.mtl']
[I|0.043|44@texture]   Loading texture [path='wood.ppm']
[I|0.147|44@texture]   Loading texture [path='leaf.ppm']
[I|0.151|44@texture]   Loading texture [path='picture8.ppm']
[I|0.192|44@texture]   Loading texture [path='wood5.ppm']
[I|0.631|48@assets ] Loading asset [name='film_output']
[I|0.718|246@scene ] Building acceleration structure [name='accel::sahbvh']
[I|0.718|131@accel_]   Flattening scene
[I|0.747|261@accel_]   Building
[I|1.529|151@user  ] Starting render [name='renderer::raycast']
[I|2.030|125@progre] Processing [iter=489600/2073600, progress=23.6%, ETA=1.6s]
[I|2.531|125@progre] Processing [iter=891800/2073600, progress=43.0%, ETA=1.3s]
[I|3.032|125@progre] Processing [iter=1422700/2073600, progress=68.6%, ETA=0.7s]
[I|3.533|125@progre] Processing [iter=1938300/2073600, progress=93.5%, ETA=0.1s]
[I|3.654|132@progre] Processing [completed]
[I|3.655|48@assets ] Loading asset [name='film_output']
[I|3.655|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|3.743|246@scene ] Building acceleration structure [name='accel::nanort']
[I|3.744|38@accel_n]   Flattening scene
[I|3.757|68@accel_n]   Building
[I|4.013|151@user  ] Starting render [name='renderer::raycast']
[I|4.514|125@progre] Processing [iter=361700/2073600, progress=17.4%, ETA=2.4s]
[I|5.015|125@progre] Processing [iter=649500/2073600, progress=31.3%, ETA=2.2s]
[I|5.516|125@progre] Processing [iter=950600/2073600, progress=45.8%, ETA=1.8s]
[I|6.017|125@progre] Processing [iter=1323000/2073600, progress=63.8%, ETA=1.1s]
[I|6.518|125@progre] Processing [iter=1665200/2073600, progress=80.3%, ETA=0.6s]
[I|7.019|125@progre] Processing [iter=2005300/2073600, progress=96.7%, ETA=0.1s]
[I|7.110|132@progre] Processing [completed]
[I|7.111|48@assets ] Loading asset [name='film_output']
[I|7.111|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|7.200|246@scene ] Building acceleration structure [name='accel::embree']
[I|7.202|68@accel_e]   Flattening scene
[I|7.207|102@accel_]   Building
[I|7.263|151@user  ] Starting render [name='renderer::raycast']
[I|7.764|125@progre] Processing [iter=690800/2073600, progress=33.3%, ETA=1.0s]
[I|8.265|125@progre] Processing [iter=1476100/2073600, progress=71.2%, ETA=0.4s]
[I|8.636|132@progre] Processing [completed]
[I|8.637|48@assets ] Loading asset [name='film_output']
[I|8.637|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|8.725|246@scene ] Building acceleration structure [name='accel::embreeinstanced']
[I|8.725|72@accel_e]   Flattening scene
[I|8.725|150@accel_]   Building
[I|8.787|151@user  ] Starting render [name='renderer::raycast']
[I|9.288|125@progre] Processing [iter=655500/2073600, progress=31.6%, ETA=1.1s]
[I|9.789|125@progre] Processing [iter=1382800/2073600, progress=66.7%, ETA=0.5s]
[I|10.254|132@progre] Processing [completed]
[I|10.255|48@assets ] Loading asset [name='camera_main']
[I|10.256|48@assets ] Loading asset [name='model_obj']
[I|10.256|29@objload]   Loading OBJ file [path='CornellBox-Sphere.obj']
[I|10.256|169@objloa]   Loading MTL file [path='CornellBox-Sphere.mtl']
[I|10.258|48@assets ] Loading asset [name='film_output']
[I|10.347|246@scene ] Building acceleration structure [name='accel::sahbvh']
[I|10.348|131@accel_]   Flattening scene
[I|10.348|261@accel_]   Building
[I|10.354|151@user  ] Starting render [name='renderer::raycast']
[I|10.856|125@progre] Processing [iter=1070800/2073600, progress=51.6%, ETA=0.5s]
[I|11.251|132@progre] Processing [completed]
[I|11.252|48@assets ] Loading asset [name='film_output']
[I|11.252|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|11.340|246@scene ] Building acceleration structure [name='accel::nanort']
[I|11.340|38@accel_n]   Flattening scene
[I|11.340|68@accel_n]   Building
[I|11.345|151@user  ] Starting render [name='renderer::raycast']
[I|11.846|125@progre] Processing [iter=876800/2073600, progress=42.3%, ETA=0.7s]
[I|12.347|125@progre] Processing [iter=1935200/2073600, progress=93.3%, ETA=0.1s]
[I|12.395|132@progre] Processing [completed]
[I|12.396|48@assets ] Loading asset [name='film_output']
[I|12.396|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|12.485|246@scene ] Building acceleration structure [name='accel::embree']
[I|12.485|68@accel_e]   Flattening scene
[I|12.485|102@accel_]   Building
[I|12.487|151@user  ] Starting render [name='renderer::raycast']
[I|12.988|125@progre] Processing [iter=1032300/2073600, progress=49.8%, ETA=0.5s]
[I|13.431|132@progre] Processing [completed]
[I|13.431|48@assets ] Loading asset [name='film_output']
[I|13.431|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|13.519|246@scene ] Building acceleration structure [name='accel::embreeinstanced']
[I|13.519|72@accel_e]   Flattening scene
[I|13.520|150@accel_]   Building
[I|13.522|151@user  ] Starting render [name='renderer::raycast']
[I|14.023|125@progre] Processing [iter=984200/2073600, progress=47.5%, ETA=0.6s]
[I|14.498|132@progre] Processing [completed]
[I|14.499|48@assets ] Loading asset [name='camera_main']
[I|14.499|48@assets ] Loading asset [name='model_obj']
[I|14.500|29@objload]   Loading OBJ file [path='cube.obj']
[I|14.500|169@objloa]   Loading MTL file [path='default.mtl']
[I|14.500|44@texture]   Loading texture [path='default.png']
[I|14.514|48@assets ] Loading asset [name='film_output']
[I|14.602|246@scene ] Building acceleration structure [name='accel::sahbvh']
[I|14.602|131@accel_]   Flattening scene
[I|14.602|261@accel_]   Building
[I|14.603|151@user  ] Starting render [name='renderer::raycast']
[I|15.105|125@progre] Processing [iter=1222100/2073600, progress=58.9%, ETA=0.3s]
[I|15.464|132@progre] Processing [completed]
[I|15.464|48@assets ] Loading asset [name='film_output']
[I|15.465|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|15.562|246@scene ] Building acceleration structure [name='accel::nanort']
[I|15.563|38@accel_n]   Flattening scene
[I|15.563|68@accel_n]   Building
[I|15.564|151@user  ] Starting render [name='renderer::raycast']
[I|16.065|125@progre] Processing [iter=1133100/2073600, progress=54.6%, ETA=0.4s]
[I|16.456|132@progre] Processing [completed]
[I|16.456|48@assets ] Loading asset [name='film_output']
[I|16.457|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|16.545|246@scene ] Building acceleration structure [name='accel::embree']
[I|16.545|68@accel_e]   Flattening scene
[I|16.545|102@accel_]   Building
[I|16.546|151@user  ] Starting render [name='renderer::raycast']
[I|17.048|125@progre] Processing [iter=1075900/2073600, progress=51.9%, ETA=0.5s]
[I|17.512|132@progre] Processing [completed]
[I|17.513|48@assets ] Loading asset [name='film_output']
[I|17.513|61@assets ]   Asset [name='film_output'] has been already loaded. Replacing..
[I|17.602|246@scene ] Building acceleration structure [name='accel::embreeinstanced']
[I|17.602|72@accel_e]   Flattening scene
[I|17.602|150@accel_]   Building
[I|17.603|151@user  ] Starting render [name='renderer::raycast']
[I|18.105|125@progre] Processing [iter=1017300/2073600, progress=49.1%, ETA=0.5s]
[I|18.606|125@progre] Processing [iter=2039700/2073600, progress=98.4%, ETA=0.0s]
[I|18.621|132@progre] Processing [completed]
[7]:
build_time_df
[7]:
accel::sahbvh accel::nanort accel::embree accel::embreeinstanced
fireplace_room 0.810582 0.268898 0.0626028 0.0616238
cornell_box_sphere 0.00643151 0.00378155 0.00168232 0.00162151
cube 0.000459036 0.000314125 0.000704401 0.000678459
[8]:
render_time_df
[8]:
accel::sahbvh accel::nanort accel::embree accel::embreeinstanced
fireplace_room 2.1254 3.09792 1.37329 1.4668
cornell_box_sphere 0.897225 1.05106 0.943898 0.977075
cube 0.860947 0.892816 0.966572 1.01791