{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Checking consistency of serialization\n", "\n", "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." ] }, { "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", "%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": [ { "data": { "text/plain": [ "1036" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "os.getpid()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "%load_ext lightmetrica_jupyter" ] }, { "cell_type": "code", "execution_count": 4, "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": 5, "metadata": {}, "outputs": [], "source": [ "scenes = lmscene.scenes_small()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing [scene='fireplace_room']\n", "[I|0.022|48@assets ] Loading asset [name='film_output']\n", "[I|0.110|48@assets ] Loading asset [name='camera_main']\n", "[I|0.110|48@assets ] Loading asset [name='model_obj']\n", "[I|0.111|29@objload] Loading OBJ file [path='fireplace_room.obj']\n", "[I|0.111|169@objloa] Loading MTL file [path='fireplace_room.mtl']\n", "[I|0.111|44@texture] Loading texture [path='wood.ppm']\n", "[I|0.216|44@texture] Loading texture [path='leaf.ppm']\n", "[I|0.219|44@texture] Loading texture [path='picture8.ppm']\n", "[I|0.260|44@texture] Loading texture [path='wood5.ppm']\n", "[I|0.699|246@scene ] Building acceleration structure [name='accel::sahbvh']\n", "[I|0.699|131@accel_] Flattening scene\n", "[I|0.729|261@accel_] Building\n", "[I|1.505|151@user ] Starting render [name='renderer::raycast']\n", "[I|2.006|125@progre] Processing [iter=493700/2073600, progress=23.8%, ETA=1.6s]\n", "[I|2.507|125@progre] Processing [iter=901400/2073600, progress=43.5%, ETA=1.3s]\n", "[I|3.008|125@progre] Processing [iter=1431700/2073600, progress=69.0%, ETA=0.7s]\n", "[I|3.509|125@progre] Processing [iter=1948600/2073600, progress=94.0%, ETA=0.1s]\n", "[I|3.620|132@progre] Processing [completed]\n", "[I|3.756|179@user ] Saving state to stream\n", "[I|5.379|186@user ] Loading state from stream\n", "[I|6.022|151@user ] Starting render [name='renderer::raycast']\n", "[I|6.523|125@progre] Processing [iter=495400/2073600, progress=23.9%, ETA=1.6s]\n", "[I|7.024|125@progre] Processing [iter=898400/2073600, progress=43.3%, ETA=1.3s]\n", "[I|7.525|125@progre] Processing [iter=1429400/2073600, progress=68.9%, ETA=0.7s]\n", "[I|8.026|125@progre] Processing [iter=1944100/2073600, progress=93.8%, ETA=0.1s]\n", "[I|8.144|132@progre] Processing [completed]\n", "Testing [scene='cornell_box_sphere']\n", "[I|8.317|48@assets ] Loading asset [name='film_output']\n", "[I|8.404|48@assets ] Loading asset [name='camera_main']\n", "[I|8.404|48@assets ] Loading asset [name='model_obj']\n", "[I|8.404|29@objload] Loading OBJ file [path='CornellBox-Sphere.obj']\n", "[I|8.405|169@objloa] Loading MTL file [path='CornellBox-Sphere.mtl']\n", "[I|8.407|246@scene ] Building acceleration structure [name='accel::sahbvh']\n", "[I|8.407|131@accel_] Flattening scene\n", "[I|8.408|261@accel_] Building\n", "[I|8.414|151@user ] Starting render [name='renderer::raycast']\n", "[I|8.915|125@progre] Processing [iter=1090700/2073600, progress=52.6%, ETA=0.5s]\n", "[I|9.297|132@progre] Processing [completed]\n", "[I|9.451|179@user ] Saving state to stream\n", "[I|9.856|186@user ] Loading state from stream\n", "[I|10.173|151@user ] Starting render [name='renderer::raycast']\n", "[I|10.674|125@progre] Processing [iter=1095700/2073600, progress=52.8%, ETA=0.4s]\n", "[I|11.047|132@progre] Processing [completed]\n", "Testing [scene='cube']\n", "[I|11.207|48@assets ] Loading asset [name='film_output']\n", "[I|11.294|48@assets ] Loading asset [name='camera_main']\n", "[I|11.295|48@assets ] Loading asset [name='model_obj']\n", "[I|11.295|29@objload] Loading OBJ file [path='cube.obj']\n", "[I|11.295|169@objloa] Loading MTL file [path='default.mtl']\n", "[I|11.295|44@texture] Loading texture [path='default.png']\n", "[I|11.310|246@scene ] Building acceleration structure [name='accel::sahbvh']\n", "[I|11.310|131@accel_] Flattening scene\n", "[I|11.310|261@accel_] Building\n", "[I|11.311|151@user ] Starting render [name='renderer::raycast']\n", "[I|11.812|125@progre] Processing [iter=1265600/2073600, progress=61.0%, ETA=0.3s]\n", "[I|12.129|132@progre] Processing [completed]\n", "[I|12.261|179@user ] Saving state to stream\n", "[I|12.735|186@user ] Loading state from stream\n", "[I|13.032|151@user ] Starting render [name='renderer::raycast']\n", "[I|13.534|125@progre] Processing [iter=1253600/2073600, progress=60.5%, ETA=0.3s]\n", "[I|13.853|132@progre] Processing [completed]\n" ] } ], "source": [ "rmse_series = pd.Series(index=scenes)\n", "for scene in scenes:\n", " print(\"Testing [scene='{}']\".format(scene))\n", " \n", " lm.reset()\n", " \n", " lm.asset('film_output', 'film::bitmap', {\n", " 'w': 1920,\n", " 'h': 1080\n", " })\n", " \n", " # Load scene and render\n", " lmscene.load(ft.env.scene_path, scene)\n", " lm.build('accel::sahbvh', {})\n", " lm.render('renderer::raycast', {\n", " 'output': lm.asset('film_output')\n", " })\n", " img_orig = np.copy(lm.buffer(lm.asset('film_output')))\n", " \n", " # Serialize, reset, deserialize, and render\n", " lm.serialize('lm.serialized')\n", " lm.reset()\n", " lm.deserialize('lm.serialized')\n", " lm.render('renderer::raycast', {\n", " 'output': lm.asset('film_output')\n", " })\n", " img_serial = np.copy(lm.buffer(lm.asset('film_output')))\n", " \n", " # Compare two images\n", " rmse = ft.rmse(img_orig, img_serial)\n", " rmse_series[scene] = rmse" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "fireplace_room 0.0\n", "cornell_box_sphere 0.0\n", "cube 0.0\n", "dtype: float64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rmse_series" ] } ], "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 }