{ "cells": [ { "cell_type": "markdown", "id": "f53b58d7-4a4c-41cd-b689-c42462d7c464", "metadata": {}, "source": [ "# Volumetric inverse rendering" ] }, { "cell_type": "markdown", "id": "2c00d2cc-3e22-464c-bf13-cf703e29cf23", "metadata": {}, "source": [ "## Overview\n", "\n", "In this tutorial, we use Mitsuba's differentiable volumetric path tracer to optimize a scattering volume to match a set of (synthetic) reference images. We will optimize a 3D volume density that's stored on a regular grid. The optimization will account for both direct and indirect illumination by using [path replay backpropagation][1] to compute derivatives of delta tracking and volumetric multiple scattering. The reconstructed volume parameters can then for example be re-rendered using novel illumination conditions.\n", "\n", "\n", "
VolumeGrid
][2] object in conjunction with [TensorXf
][3]. The `VolumeGrid` class is responsible for loading and writing volumes from disk, similar to the `Bitmap` class for images. Using the `grid` property of the [gridvolume
][4] plugin, it is possible to pass it directly to the plugin constructor in Python.\n",
"\n",
"We initialize the extinction `sigma_t` to a low constant value, (e.g. `0.002`). This tends to help the optimization process, as it seems to be easier for the optimizer to increase the volume density rather than remove parts of a very dense volume. \n",
"\n",
"Note that we use a fairly small initial volume resolution here. This is done on purpose since we will upsample the volume grid during the actual optimization process. As explained later, this typically improves the convexity of the volume optimization problem.\n",
"\n",
"[1]: https://mitsuba.readthedocs.io/en/latest/src/generated/plugins_media.html#heterogeneous-medium-heterogeneous\n",
"[2]: https://mitsuba.readthedocs.io/en/latest/src/api_reference.html#mitsuba.VolumeGrid\n",
"[3]: https://mitsuba.readthedocs.io/en/latest/src/api_reference.html#mitsuba.TensorXf\n",
"[4]: https://mitsuba.readthedocs.io/en/latest/src/generated/plugins_media.html#grid-based-volume-data-source-gridvolume"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "82313a97-a314-43a3-8a4b-f4e32305f1a2",
"metadata": {},
"outputs": [],
"source": [
"v_res = 16\n",
"\n",
"# Modify the scene dictionary\n",
"scene_dict['object'] = {\n",
" 'type': 'cube',\n",
" 'interior': {\n",
" 'type': 'heterogeneous',\n",
" 'sigma_t': {\n",
" 'type': 'gridvolume',\n",
" 'grid': mi.VolumeGrid(dr.full(mi.TensorXf, 0.002, (v_res, v_res, v_res, 1))),\n",
" 'to_world': T.translate(-1).scale(2.0)\n",
" },\n",
" 'scale': 40.0,\n",
" },\n",
" 'bsdf': {'type': 'null'}\n",
"}\n",
"\n",
"scene = mi.load_dict(scene_dict)"
]
},
{
"cell_type": "markdown",
"id": "5890a714-a81c-4f37-bc9f-7ec2e4335a6a",
"metadata": {},
"source": [
"We load the modified scene and render it for all view angles. Those are going to be our initial image in the optimization process."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "91050ab4-91ac-413b-89c0-959d024498e0",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"dr.upsample()
][1], a functions for up-sampling tensor and texture data. We can easily create a higher resolution volume by passing the current optimzed tensor and specifying the desired shape (must be powers of two when upsampling `TensorXf`).\n",
"\n",
"[1]: https://drjit.readthedocs.io/en/latest/reference.html#drjit.upsample"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "bbdfe9de-d1b2-4d06-89ed-ce2d93d1c383",
"metadata": {},
"outputs": [],
"source": [
"opt[key] = dr.upsample(opt[key], shape=(64, 64, 64))\n",
"params.update(opt);"
]
},
{
"cell_type": "markdown",
"id": "068b99e7-fb72-4b3f-b166-2d7930daf86d",
"metadata": {},
"source": [
"Rendering the new, upsampled volume we can already notice a slight difference in the apparent sharpness. This is due to the *trilinear* interpolation of density values that is used by the volumetric path tracer."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "352c5176-ded0-4d13-8996-5d4dbe006c3b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"prbvolpath
plugin](https://mitsuba.readthedocs.io/en/latest/src/generated/plugins_integrators.html#path-replay-backpropagation-volumetric-integrator-prbvolpath)\n",
"- [heterogeneous
plugin](https://mitsuba.readthedocs.io/en/latest/src/generated/plugins_media.html#heterogeneous-medium-heterogeneous)\n",
"- [gridvolume
plugin](https://mitsuba.readthedocs.io/en/latest/src/generated/plugins_media.html#grid-based-volume-data-source-gridvolume)\n",
"- [mitsuba.VolumeGrid
](https://mitsuba.readthedocs.io/en/latest/src/api_reference.html#mitsuba.VolumeGrid)\n",
"- [mitsuba.TensorXf
](https://mitsuba.readthedocs.io/en/latest/src/api_reference.html#mitsuba.TensorXf)\n",
"- [dr.upsample
](https://drjit.readthedocs.io/en/latest/reference.html#drjit.upsample)"
]
}
],
"metadata": {
"interpreter": {
"hash": "afd680236861e4ad68138f9ddf1f8bff806918beb77b7f0c16179efa24869fce"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}