{ "cells": [ { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. _example_blank:\n", "\n", "Rendering blank image\n", "==========================\n", "\n", "Let's start to use Lightmetrica by rendering a blank image.\n", "We first import the ``lightmetrica`` module, where we use ``lm`` as an alias of ``lightmetrica`` for simplicity.\n", "\n", ".. note::\n", " Although we recommend to use Python API to organize the experiments, similar APIs can be accessible from C++. See `example directory`_ for the detail.\n", "\n", " .. _example directory: https://github.com/hi2p-perim/lightmetrica-v3/tree/master/example\n", "\n", ".. note::\n", " ``lmfunctest`` is a simple module to configure Lightmetrica envrionment from a file named ``.lmenv``. You want to create your own ``.lmenv`` file if you want to execute examples or tests by yourself. For detail, see todo." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import lmfunctest as ft" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import lightmetrica as lm" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Lightmetrica offers an extension for the Jupyter notebook to support logging or interactive progress reporting inside the notebook. The extension can be loaded by a line magic command as below." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "%load_ext lightmetrica_jupyter" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "After importing the module, you can initialize the framwork by calling :cpp:func:`lm::init` function. You can pass various arguments to configure the framework to the function, but here we keep it empty so that everything is configured to be default." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "lm.init()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Logging and progress reporting in Jupyter notebook can be enabled by :cpp:func:`lm::log::init` and :cpp:func:`lm::progress::init` functions with corresponding types." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "lm.log.init('logger::jupyter')\n", "lm.progress.init('progress::jupyter')" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Once the framework has been initialized properly, you can get an splash message using :cpp:func:`lm::info()` function." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[I|0.007|114@user ] Lightmetrica -- Version 3.0.0 (rev. fe30e7c) Linux x64\n" ] } ], "source": [ "lm.info()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Next we define `assets` necessary to dispatch renderer, like materials, meshes, etc. In this example, we only need a `film` to which the renderer outputs the image. We can define assets by :cpp:func:`lm::asset` function. The first argument (``film``) specifies the name of the asset to be referenced. The second argument (``film::bitmap``) is given as the type of the assets formatted as ``::`` where the last argument (``{...}``) specifies the parameters passed to the instance. ``film::bitmap`` takes two parameters ``w`` and ``h`` which respectively specify width and height of the film." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[I|0.017|48@assets ] Loading asset [name='film']\n" ] }, { "data": { "text/plain": [ "'$.assets.film'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lm.asset('film', 'film::bitmap', {\n", " 'w': 1920,\n", " 'h': 1080\n", "})" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Now we are ready for rendering. :cpp:func:`lm::render` function dispatches rendering where we speficy type of the renderer and the parameters as arguments. ``renderer::blank`` is a toy renderer that only produces a blank image to the film specifies by ``film`` parameter where we can use predefined ID of the asset. Also, we can specify the background color by ``color`` parameter." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[I|0.151|151@user ] Starting render [name='renderer::blank']\n" ] } ], "source": [ "lm.render('renderer::blank', {\n", " 'output': lm.asset('film'),\n", " 'color': [1,1,1]\n", "})" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "After rendering, the generated image is kept in ``film``. :cpp:func:`lm::save` function outputs this film to the disk as an image." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[I|0.330|97@film_bi] Saving image [file='blank.png']\n" ] } ], "source": [ "lm.save(lm.asset('film'), 'blank.png')" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "You can also visualize the film directly in Jupyter notebook. :cpp:func:`lm::buffer` gets the internal image data as numpy array which you can visualize using matplotlib. We rendered a white blank image thus the following image is as we expected." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 11, "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('film')))\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()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Finally, we gracefully shutdown the framework with :cpp:func:`lm::shutdown` function. Usually you don't want to explicitly call shutdown function." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "lm.shutdown()" ] } ], "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 }