{ "cells": [ { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. _example_quad:\n", "\n", "Rendering quad\n", "==========================\n", "\n", "This example describes how to render a simple scene containing a quad represented by two triangles. The code starts again with :cpp:func:`lm::init` function." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import imageio\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import lmfunctest as ft\n", "import lightmetrica as lm\n", "%load_ext lightmetrica_jupyter" ] }, { "cell_type": "code", "execution_count": 2, "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()\n", "lm.log.init('logger::jupyter')\n", "lm.progress.init('progress::jupyter')\n", "lm.info()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Similarly we define the assets. In addition to ``film``, we define ``camera``, ``mesh``, and ``material``. Although the types of assets are different, we can use consistent interface to define the assets. Here we prepare for a pinhole camera (``camera::pinhole``), a raw mesh (``mesh::raw``), and a diffuse material (``material::diffuse``) with the corrsponding parameters. Please refer to :ref:`component_ref` for the detailed description of the parameters." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[I|0.014|48@assets ] Loading asset [name='film1']\n", "[I|0.102|48@assets ] Loading asset [name='camera1']\n", "[I|0.105|48@assets ] Loading asset [name='mesh1']\n", "[I|0.106|48@assets ] Loading asset [name='material1']\n" ] }, { "data": { "text/plain": [ "'$.assets.material1'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Film for the rendered image\n", "lm.asset('film1', 'film::bitmap', {\n", " 'w': 1920,\n", " 'h': 1080\n", "})\n", "\n", "# Pinhole camera\n", "lm.asset('camera1', 'camera::pinhole', {\n", " 'position': [0,0,5],\n", " 'center': [0,0,0],\n", " 'up': [0,1,0],\n", " 'vfov': 30\n", "})\n", "\n", "# Load mesh with raw vertex data\n", "lm.asset('mesh1', 'mesh::raw', {\n", " 'ps': [-1,-1,-1,1,-1,-1,1,1,-1,-1,1,-1],\n", " 'ns': [0,0,1],\n", " 'ts': [0,0,1,0,1,1,0,1],\n", " 'fs': {\n", " 'p': [0,1,2,0,2,3],\n", " 'n': [0,0,0,0,0,0],\n", " 't': [0,1,2,0,2,3]\n", " }\n", "})\n", "\n", "# Material\n", "lm.asset('material1', 'material::diffuse', {\n", " 'Kd': [1,1,1]\n", "})" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The scene of Lightmetrica is defined by a set of ``primitives``. A primitive specifies an object inside the scene by associating geometries and materials with transformation. We can define a primitive by :cpp:func:`lm::primitive` function where we specifies transformation matrix and associating assets as arguments.\n", "In this example we define two pritimives; one for camera and the other for quad mesh with diffuse material. Transformation is given by 4x4 matrix. Here we specified identify matrix meaning no transformation.\n", "\n", ".. note::\n", " Specifically, the scene is represented by a *scene graph*, a directed acyclic graph representing spatial structure and attributes of the scene. Each node of the scene graph describes either a primitive or a pritmive group. We provide a set of APIs to manipulate the structure of scene graph for advanced usage like instancing. For detail, please refer to TODO." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Camera\n", "lm.primitive(lm.identity(), {\n", " 'camera': lm.asset('camera1')\n", "})\n", "\n", "# Mesh\n", "lm.primitive(lm.identity(), {\n", " 'mesh': lm.asset('mesh1'),\n", " 'material': lm.asset('material1')\n", "})" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "This example used ``renderer::raycast`` for rendering. \n", "This renderer internally uses acceleration structure for ray-scene intersections. \n", "The acceleration structure can be given by :cpp:func:`lm::build` function. In this example we used ``accel::sahbvh``." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[I|0.129|246@scene ] Building acceleration structure [name='accel::sahbvh']\n", "[I|0.129|131@accel_] Flattening scene\n", "[I|0.129|261@accel_] Building\n", "[I|0.130|151@user ] Starting render [name='renderer::raycast']\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "63b06ab6ff034e15b2be121368302422", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=2073600), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "lm.build('accel::sahbvh', {})\n", "lm.render('renderer::raycast', {\n", " 'output': lm.asset('film1'),\n", " 'color': [0,0,0]\n", "})" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "img = np.copy(lm.buffer(lm.asset('film1')))\n", "f = plt.figure(figsize=(15,15))\n", "ax = f.add_subplot(111)\n", "ax.imshow(np.clip(np.power(img,1/2.2),0,1), origin='lower')\n", "plt.show()" ] } ], "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" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0b6c8b39338e4c059eed76a3ad0b961b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.4.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.1.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "168e7a405c264aa6aa6342de729e1d3d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.1.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.1.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "63b06ab6ff034e15b2be121368302422": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.4.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.4.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_91aa66147f884400a192a99845d5f1cc", "IPY_MODEL_e15c6a2389fc406eb500ffc39306d53b" ], "layout": "IPY_MODEL_b08df4f0d2fd4ddbbf491fd38e535729" } }, "7c8d2585e6ed4ceb8016cd4869e36fd0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.4.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.1.0", "_view_name": "StyleView", "description_width": "" } }, "91aa66147f884400a192a99845d5f1cc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "IntProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.4.0", "_model_name": "IntProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.4.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_168e7a405c264aa6aa6342de729e1d3d", "max": 2073600, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_0b6c8b39338e4c059eed76a3ad0b961b", "value": 2073600 } }, "b08df4f0d2fd4ddbbf491fd38e535729": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.1.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.1.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "cfd212548c2343f4af84cdaca128d9a3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.1.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.1.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.1.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "e15c6a2389fc406eb500ffc39306d53b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.4.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.4.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.4.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_cfd212548c2343f4af84cdaca128d9a3", "placeholder": "​", "style": "IPY_MODEL_7c8d2585e6ed4ceb8016cd4869e36fd0", "value": "100% 2073600/2073600 [00:00<00:00, 2536579.25it/s]" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 2 }