Performance testing of acceleration structures
This test checks performance of acceleration structure implemented in the framework for various scenes.
[1]:
import lmenv
env = lmenv.load('.lmenv')
[2]:
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 lmscene
import lightmetrica as lm
[3]:
%load_ext lightmetrica_jupyter
[4]:
lm.init()
lm.log.init('jupyter')
lm.progress.init('jupyter')
lm.info()
[I|0.000] Lightmetrica -- Version 3.0.0 (rev. 70601db) Linux x64
[5]:
lm.comp.load_plugin(os.path.join(env.bin_path, 'accel_nanort'))
lm.comp.load_plugin(os.path.join(env.bin_path, 'accel_embree'))
[I|0.007] Loading plugin [name='accel_nanort']
[I|0.008] .. Successfully loaded [name='accel_nanort']
[I|0.008] Loading plugin [name='accel_embree']
[I|0.009] .. Successfully loaded [name='accel_embree']
[6]:
accel_names = [
'sahbvh',
'nanort',
'embree',
'embreeinstanced'
]
scene_names = lmscene.scenes_small()
[7]:
build_time_df = pd.DataFrame(columns=accel_names, index=scene_names)
render_time_df = pd.DataFrame(columns=accel_names, index=scene_names)
film = lm.load_film('film_output', 'bitmap', {
'w': 1920,
'h': 1080
})
for scene_name in scene_names:
# Create scene w/o accel
scene = lm.load_scene('scene', 'default', {})
lmscene.load(scene, env.scene_path, scene_name)
renderer = lm.load_renderer('renderer', 'raycast', {
'scene': scene.loc(),
'output': film.loc()
})
for accel_name in accel_names:
accel = lm.load_accel('accel', accel_name, {})
scene.set_accel(accel.loc())
def build():
scene.build()
build_time = timeit.timeit(stmt=build, number=1)
build_time_df[accel_name][scene_name] = build_time
def render():
renderer.render()
render_time = timeit.timeit(stmt=render, number=1)
render_time_df[accel_name][scene_name] = render_time
[I|0.029] Loading asset [name='film_output']
[I|0.107] Loading asset [name='scene']
[I|0.107] Loading asset [name='camera_main']
[I|0.107] Loading asset [name='model_obj']
[I|0.107] .. Loading OBJ file [path='fireplace_room.obj']
[I|0.107] .. Loading MTL file [path='fireplace_room.mtl']
[I|0.431] .. Loading texture [path='wood.ppm']
[I|0.522] .. Loading texture [path='leaf.ppm']
[I|0.525] .. Loading texture [path='picture8.ppm']
[I|0.556] .. Loading texture [path='wood5.ppm']
[I|0.609] Loading asset [name='renderer']
[I|0.609] Loading asset [name='accel']
[I|0.613] Building acceleration structure [name='accel']
[I|0.613] .. Flattening scene
[I|0.640] .. Building
[I|4.021] Loading asset [name='accel']
[I|4.021] .. Asset [name='accel'] has been already loaded. Replacing..
[I|4.026] Building acceleration structure [name='accel']
[I|4.026] .. Flattening scene
[I|4.036] .. Building
[I|8.204] Loading asset [name='accel']
[I|8.204] .. Asset [name='accel'] has been already loaded. Replacing..
[I|8.205] .. {"intcost":1.0,"maxBranchingFactor":2,"maxDepth":18,"maxLeafSize":32,"minLeafSize":1,"quality":1,"sahBlockSize":1,"travcost":1.0}
[I|8.205] .. {"compact":false,"dynamic":false,"filter":false,"robust":false}
[I|8.210] Building acceleration structure [name='accel']
[I|8.210] .. Flattening scene
[I|8.214] .. Building
[I|9.881] Loading asset [name='accel']
[I|9.881] .. Asset [name='accel'] has been already loaded. Replacing..
[I|9.886] Building acceleration structure [name='accel']
[I|9.886] .. Flattening scene
[I|9.886] .. Building
[I|11.628] Loading asset [name='scene']
[I|11.628] .. Asset [name='scene'] has been already loaded. Replacing..
[I|11.628] Loading asset [name='camera_main']
[I|11.628] .. Asset [name='camera_main'] has been already loaded. Replacing..
[I|11.628] Loading asset [name='model_obj']
[I|11.628] .. Asset [name='model_obj'] has been already loaded. Replacing..
[I|11.628] .. Loading OBJ file [path='CornellBox-Sphere.obj']
[I|11.629] .. Loading MTL file [path='CornellBox-Sphere.mtl']
[I|11.632] Loading asset [name='renderer']
[I|11.632] .. Asset [name='renderer'] has been already loaded. Replacing..
[I|11.632] Loading asset [name='accel']
[I|11.633] .. Asset [name='accel'] has been already loaded. Replacing..
[I|11.634] Building acceleration structure [name='accel']
[I|11.634] .. Flattening scene
[I|11.634] .. Building
[I|12.783] Loading asset [name='accel']
[I|12.783] .. Asset [name='accel'] has been already loaded. Replacing..
[I|12.784] Building acceleration structure [name='accel']
[I|12.784] .. Flattening scene
[I|12.784] .. Building
[I|14.103] Loading asset [name='accel']
[I|14.103] .. Asset [name='accel'] has been already loaded. Replacing..
[I|14.103] .. {"intcost":1.0,"maxBranchingFactor":2,"maxDepth":18,"maxLeafSize":32,"minLeafSize":1,"quality":1,"sahBlockSize":1,"travcost":1.0}
[I|14.104] .. {"compact":false,"dynamic":false,"filter":false,"robust":false}
[I|14.104] Building acceleration structure [name='accel']
[I|14.104] .. Flattening scene
[I|14.104] .. Building
[I|15.114] Loading asset [name='accel']
[I|15.115] .. Asset [name='accel'] has been already loaded. Replacing..
[I|15.115] Building acceleration structure [name='accel']
[I|15.115] .. Flattening scene
[I|15.115] .. Building
[I|16.155] Loading asset [name='scene']
[I|16.155] .. Asset [name='scene'] has been already loaded. Replacing..
[I|16.155] Loading asset [name='camera_main']
[I|16.155] .. Asset [name='camera_main'] has been already loaded. Replacing..
[I|16.155] Loading asset [name='model_obj']
[I|16.155] .. Asset [name='model_obj'] has been already loaded. Replacing..
[I|16.155] .. Loading OBJ file [path='cube.obj']
[I|16.155] .. Loading MTL file [path='default.mtl']
[I|16.155] .. Loading texture [path='default.png']
[I|16.168] Loading asset [name='renderer']
[I|16.169] .. Asset [name='renderer'] has been already loaded. Replacing..
[I|16.169] Loading asset [name='accel']
[I|16.169] .. Asset [name='accel'] has been already loaded. Replacing..
[I|16.169] Building acceleration structure [name='accel']
[I|16.169] .. Flattening scene
[I|16.169] .. Building
[I|17.184] Loading asset [name='accel']
[I|17.185] .. Asset [name='accel'] has been already loaded. Replacing..
[I|17.185] Building acceleration structure [name='accel']
[I|17.186] .. Flattening scene
[I|17.186] .. Building
[I|18.236] Loading asset [name='accel']
[I|18.236] .. Asset [name='accel'] has been already loaded. Replacing..
[I|18.237] .. {"intcost":1.0,"maxBranchingFactor":2,"maxDepth":18,"maxLeafSize":32,"minLeafSize":1,"quality":1,"sahBlockSize":1,"travcost":1.0}
[I|18.237] .. {"compact":false,"dynamic":false,"filter":false,"robust":false}
[I|18.237] Building acceleration structure [name='accel']
[I|18.237] .. Flattening scene
[I|18.237] .. Building
[I|19.308] Loading asset [name='accel']
[I|19.308] .. Asset [name='accel'] has been already loaded. Replacing..
[I|19.309] Building acceleration structure [name='accel']
[I|19.309] .. Flattening scene
[I|19.309] .. Building
[8]:
build_time_df
[8]:
sahbvh | nanort | embree | embreeinstanced | |
---|---|---|---|---|
fireplace_room | 0.645609 | 0.216296 | 0.057111 | 0.053923 |
cornell_box_sphere | 0.004559 | 0.0044 | 0.001302 | 0.001325 |
cube | 0.000327 | 0.000361 | 0.000211 | 0.000576 |
[9]:
render_time_df
[9]:
sahbvh | nanort | embree | embreeinstanced | |
---|---|---|---|---|
fireplace_room | 2.764176 | 3.964399 | 1.616974 | 1.691021 |
cornell_box_sphere | 1.143472 | 1.313948 | 1.008554 | 1.037441 |
cube | 1.014187 | 1.049692 | 1.069868 | 1.075038 |