{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
accel::sahbvhaccel::nanortaccel::embreeaccel::embreeinstanced
fireplace_room0.8105820.2688980.06260280.0616238
cornell_box_sphere0.006431510.003781550.001682320.00162151
cube0.0004590360.0003141250.0007044010.000678459
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
accel::sahbvhaccel::nanortaccel::embreeaccel::embreeinstanced
fireplace_room2.12543.097921.373291.4668
cornell_box_sphere0.8972251.051060.9438980.977075
cube0.8609470.8928160.9665721.01791
\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 }