{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Performance testing of acceleration structures\n",
"\n",
"This test checks performance of acceleration structure implemented in the framework for various scenes."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import imageio\n",
"import pandas as pd\n",
"import numpy as np\n",
"import timeit\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
"import lmfunctest as ft\n",
"import lmscene\n",
"import lightmetrica as lm"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%load_ext lightmetrica_jupyter"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[I|0.000|114@user ] Lightmetrica -- Version 3.0.0 (rev. fe30e7c) Linux x64\n"
]
}
],
"source": [
"lm.init('user::default', {})\n",
"lm.parallel.init('parallel::openmp', {\n",
" 'numThreads': -1\n",
"})\n",
"lm.log.init('logger::jupyter', {})\n",
"lm.info()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[I|0.010|179@compon] Loading plugin [name='accel_nanort']\n",
"[I|0.010|197@compon] Successfully loaded\n",
"[I|0.010|179@compon] Loading plugin [name='accel_embree']\n",
"[I|0.012|197@compon] Successfully loaded\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm.comp.loadPlugin(os.path.join(ft.env.bin_path, 'accel_nanort'))\n",
"lm.comp.loadPlugin(os.path.join(ft.env.bin_path, 'accel_embree'))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"accels = [\n",
" 'accel::sahbvh',\n",
" 'accel::nanort',\n",
" 'accel::embree',\n",
" 'accel::embreeinstanced'\n",
"]\n",
"scenes = lmscene.scenes_small()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[I|0.043|48@assets ] Loading asset [name='camera_main']\n",
"[I|0.043|48@assets ] Loading asset [name='model_obj']\n",
"[I|0.043|29@objload] Loading OBJ file [path='fireplace_room.obj']\n",
"[I|0.043|169@objloa] Loading MTL file [path='fireplace_room.mtl']\n",
"[I|0.043|44@texture] Loading texture [path='wood.ppm']\n",
"[I|0.147|44@texture] Loading texture [path='leaf.ppm']\n",
"[I|0.151|44@texture] Loading texture [path='picture8.ppm']\n",
"[I|0.192|44@texture] Loading texture [path='wood5.ppm']\n",
"[I|0.631|48@assets ] Loading asset [name='film_output']\n",
"[I|0.718|246@scene ] Building acceleration structure [name='accel::sahbvh']\n",
"[I|0.718|131@accel_] Flattening scene\n",
"[I|0.747|261@accel_] Building\n",
"[I|1.529|151@user ] Starting render [name='renderer::raycast']\n",
"[I|2.030|125@progre] Processing [iter=489600/2073600, progress=23.6%, ETA=1.6s]\n",
"[I|2.531|125@progre] Processing [iter=891800/2073600, progress=43.0%, ETA=1.3s]\n",
"[I|3.032|125@progre] Processing [iter=1422700/2073600, progress=68.6%, ETA=0.7s]\n",
"[I|3.533|125@progre] Processing [iter=1938300/2073600, progress=93.5%, ETA=0.1s]\n",
"[I|3.654|132@progre] Processing [completed]\n",
"[I|3.655|48@assets ] Loading asset [name='film_output']\n",
"[I|3.655|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|3.743|246@scene ] Building acceleration structure [name='accel::nanort']\n",
"[I|3.744|38@accel_n] Flattening scene\n",
"[I|3.757|68@accel_n] Building\n",
"[I|4.013|151@user ] Starting render [name='renderer::raycast']\n",
"[I|4.514|125@progre] Processing [iter=361700/2073600, progress=17.4%, ETA=2.4s]\n",
"[I|5.015|125@progre] Processing [iter=649500/2073600, progress=31.3%, ETA=2.2s]\n",
"[I|5.516|125@progre] Processing [iter=950600/2073600, progress=45.8%, ETA=1.8s]\n",
"[I|6.017|125@progre] Processing [iter=1323000/2073600, progress=63.8%, ETA=1.1s]\n",
"[I|6.518|125@progre] Processing [iter=1665200/2073600, progress=80.3%, ETA=0.6s]\n",
"[I|7.019|125@progre] Processing [iter=2005300/2073600, progress=96.7%, ETA=0.1s]\n",
"[I|7.110|132@progre] Processing [completed]\n",
"[I|7.111|48@assets ] Loading asset [name='film_output']\n",
"[I|7.111|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|7.200|246@scene ] Building acceleration structure [name='accel::embree']\n",
"[I|7.202|68@accel_e] Flattening scene\n",
"[I|7.207|102@accel_] Building\n",
"[I|7.263|151@user ] Starting render [name='renderer::raycast']\n",
"[I|7.764|125@progre] Processing [iter=690800/2073600, progress=33.3%, ETA=1.0s]\n",
"[I|8.265|125@progre] Processing [iter=1476100/2073600, progress=71.2%, ETA=0.4s]\n",
"[I|8.636|132@progre] Processing [completed]\n",
"[I|8.637|48@assets ] Loading asset [name='film_output']\n",
"[I|8.637|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|8.725|246@scene ] Building acceleration structure [name='accel::embreeinstanced']\n",
"[I|8.725|72@accel_e] Flattening scene\n",
"[I|8.725|150@accel_] Building\n",
"[I|8.787|151@user ] Starting render [name='renderer::raycast']\n",
"[I|9.288|125@progre] Processing [iter=655500/2073600, progress=31.6%, ETA=1.1s]\n",
"[I|9.789|125@progre] Processing [iter=1382800/2073600, progress=66.7%, ETA=0.5s]\n",
"[I|10.254|132@progre] Processing [completed]\n",
"[I|10.255|48@assets ] Loading asset [name='camera_main']\n",
"[I|10.256|48@assets ] Loading asset [name='model_obj']\n",
"[I|10.256|29@objload] Loading OBJ file [path='CornellBox-Sphere.obj']\n",
"[I|10.256|169@objloa] Loading MTL file [path='CornellBox-Sphere.mtl']\n",
"[I|10.258|48@assets ] Loading asset [name='film_output']\n",
"[I|10.347|246@scene ] Building acceleration structure [name='accel::sahbvh']\n",
"[I|10.348|131@accel_] Flattening scene\n",
"[I|10.348|261@accel_] Building\n",
"[I|10.354|151@user ] Starting render [name='renderer::raycast']\n",
"[I|10.856|125@progre] Processing [iter=1070800/2073600, progress=51.6%, ETA=0.5s]\n",
"[I|11.251|132@progre] Processing [completed]\n",
"[I|11.252|48@assets ] Loading asset [name='film_output']\n",
"[I|11.252|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|11.340|246@scene ] Building acceleration structure [name='accel::nanort']\n",
"[I|11.340|38@accel_n] Flattening scene\n",
"[I|11.340|68@accel_n] Building\n",
"[I|11.345|151@user ] Starting render [name='renderer::raycast']\n",
"[I|11.846|125@progre] Processing [iter=876800/2073600, progress=42.3%, ETA=0.7s]\n",
"[I|12.347|125@progre] Processing [iter=1935200/2073600, progress=93.3%, ETA=0.1s]\n",
"[I|12.395|132@progre] Processing [completed]\n",
"[I|12.396|48@assets ] Loading asset [name='film_output']\n",
"[I|12.396|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|12.485|246@scene ] Building acceleration structure [name='accel::embree']\n",
"[I|12.485|68@accel_e] Flattening scene\n",
"[I|12.485|102@accel_] Building\n",
"[I|12.487|151@user ] Starting render [name='renderer::raycast']\n",
"[I|12.988|125@progre] Processing [iter=1032300/2073600, progress=49.8%, ETA=0.5s]\n",
"[I|13.431|132@progre] Processing [completed]\n",
"[I|13.431|48@assets ] Loading asset [name='film_output']\n",
"[I|13.431|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|13.519|246@scene ] Building acceleration structure [name='accel::embreeinstanced']\n",
"[I|13.519|72@accel_e] Flattening scene\n",
"[I|13.520|150@accel_] Building\n",
"[I|13.522|151@user ] Starting render [name='renderer::raycast']\n",
"[I|14.023|125@progre] Processing [iter=984200/2073600, progress=47.5%, ETA=0.6s]\n",
"[I|14.498|132@progre] Processing [completed]\n",
"[I|14.499|48@assets ] Loading asset [name='camera_main']\n",
"[I|14.499|48@assets ] Loading asset [name='model_obj']\n",
"[I|14.500|29@objload] Loading OBJ file [path='cube.obj']\n",
"[I|14.500|169@objloa] Loading MTL file [path='default.mtl']\n",
"[I|14.500|44@texture] Loading texture [path='default.png']\n",
"[I|14.514|48@assets ] Loading asset [name='film_output']\n",
"[I|14.602|246@scene ] Building acceleration structure [name='accel::sahbvh']\n",
"[I|14.602|131@accel_] Flattening scene\n",
"[I|14.602|261@accel_] Building\n",
"[I|14.603|151@user ] Starting render [name='renderer::raycast']\n",
"[I|15.105|125@progre] Processing [iter=1222100/2073600, progress=58.9%, ETA=0.3s]\n",
"[I|15.464|132@progre] Processing [completed]\n",
"[I|15.464|48@assets ] Loading asset [name='film_output']\n",
"[I|15.465|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|15.562|246@scene ] Building acceleration structure [name='accel::nanort']\n",
"[I|15.563|38@accel_n] Flattening scene\n",
"[I|15.563|68@accel_n] Building\n",
"[I|15.564|151@user ] Starting render [name='renderer::raycast']\n",
"[I|16.065|125@progre] Processing [iter=1133100/2073600, progress=54.6%, ETA=0.4s]\n",
"[I|16.456|132@progre] Processing [completed]\n",
"[I|16.456|48@assets ] Loading asset [name='film_output']\n",
"[I|16.457|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|16.545|246@scene ] Building acceleration structure [name='accel::embree']\n",
"[I|16.545|68@accel_e] Flattening scene\n",
"[I|16.545|102@accel_] Building\n",
"[I|16.546|151@user ] Starting render [name='renderer::raycast']\n",
"[I|17.048|125@progre] Processing [iter=1075900/2073600, progress=51.9%, ETA=0.5s]\n",
"[I|17.512|132@progre] Processing [completed]\n",
"[I|17.513|48@assets ] Loading asset [name='film_output']\n",
"[I|17.513|61@assets ] Asset [name='film_output'] has been already loaded. Replacing..\n",
"[I|17.602|246@scene ] Building acceleration structure [name='accel::embreeinstanced']\n",
"[I|17.602|72@accel_e] Flattening scene\n",
"[I|17.602|150@accel_] Building\n",
"[I|17.603|151@user ] Starting render [name='renderer::raycast']\n",
"[I|18.105|125@progre] Processing [iter=1017300/2073600, progress=49.1%, ETA=0.5s]\n",
"[I|18.606|125@progre] Processing [iter=2039700/2073600, progress=98.4%, ETA=0.0s]\n",
"[I|18.621|132@progre] Processing [completed]\n"
]
}
],
"source": [
"build_time_df = pd.DataFrame(columns=accels, index=scenes)\n",
"render_time_df = pd.DataFrame(columns=accels, index=scenes)\n",
"for scene in scenes:\n",
" lm.reset()\n",
" lmscene.load(ft.env.scene_path, scene)\n",
" for accel in accels:\n",
" lm.asset('film_output', 'film::bitmap', {\n",
" 'w': 1920,\n",
" 'h': 1080\n",
" })\n",
" \n",
" def build():\n",
" lm.build(accel, {})\n",
" build_time = timeit.timeit(stmt=build, number=1)\n",
" build_time_df[accel][scene] = build_time\n",
"\n",
" def render():\n",
" lm.render('renderer::raycast', {\n",
" 'output': lm.asset('film_output')\n",
" })\n",
" render_time = timeit.timeit(stmt=render, number=1)\n",
" render_time_df[accel][scene] = render_time"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" accel::sahbvh | \n",
" accel::nanort | \n",
" accel::embree | \n",
" accel::embreeinstanced | \n",
"
\n",
" \n",
" \n",
" \n",
" | fireplace_room | \n",
" 0.810582 | \n",
" 0.268898 | \n",
" 0.0626028 | \n",
" 0.0616238 | \n",
"
\n",
" \n",
" | cornell_box_sphere | \n",
" 0.00643151 | \n",
" 0.00378155 | \n",
" 0.00168232 | \n",
" 0.00162151 | \n",
"
\n",
" \n",
" | cube | \n",
" 0.000459036 | \n",
" 0.000314125 | \n",
" 0.000704401 | \n",
" 0.000678459 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" accel::sahbvh accel::nanort accel::embree \\\n",
"fireplace_room 0.810582 0.268898 0.0626028 \n",
"cornell_box_sphere 0.00643151 0.00378155 0.00168232 \n",
"cube 0.000459036 0.000314125 0.000704401 \n",
"\n",
" accel::embreeinstanced \n",
"fireplace_room 0.0616238 \n",
"cornell_box_sphere 0.00162151 \n",
"cube 0.000678459 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"build_time_df"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" accel::sahbvh | \n",
" accel::nanort | \n",
" accel::embree | \n",
" accel::embreeinstanced | \n",
"
\n",
" \n",
" \n",
" \n",
" | fireplace_room | \n",
" 2.1254 | \n",
" 3.09792 | \n",
" 1.37329 | \n",
" 1.4668 | \n",
"
\n",
" \n",
" | cornell_box_sphere | \n",
" 0.897225 | \n",
" 1.05106 | \n",
" 0.943898 | \n",
" 0.977075 | \n",
"
\n",
" \n",
" | cube | \n",
" 0.860947 | \n",
" 0.892816 | \n",
" 0.966572 | \n",
" 1.01791 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" accel::sahbvh accel::nanort accel::embree \\\n",
"fireplace_room 2.1254 3.09792 1.37329 \n",
"cornell_box_sphere 0.897225 1.05106 0.943898 \n",
"cube 0.860947 0.892816 0.966572 \n",
"\n",
" accel::embreeinstanced \n",
"fireplace_room 1.4668 \n",
"cornell_box_sphere 0.977075 \n",
"cube 1.01791 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"render_time_df"
]
}
],
"metadata": {
"jupytext": {
"formats": "ipynb,py:light"
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}