Miguel Crespo      Diego Royo



⚠️ IMPORTANT
This repository is no longer maintained. We have moved it to a new repository.





Introduction

This library adds support to Mitsuba 3 for doing transient simulations.

Usual rendering is referred as steady in terms of the light has infinite propagation speed. In contrast, transient rendering lift this limitation allowing to simulate light in motion (see the teaser image for a visual example).

TODO : improve explanation transient rendering.

TODO : put a video of the resulting simulation.

TODO : improve documentation.

Main features

  • Cross-platform: Mitsuba 3 has been tested on Linux (x86_64), macOS (aarch64, x86_64), and Windows (x86_64).
  • Easy interface to convert your algorithms for the transient domain.
  • Several integrators already implemented including path tracing and volumetric path-tracing.
  • Temporal domain filtering.

Future / missing features

  • Importance sampling of the temporal domain.
  • Differentiation of the transient simulation.
  • Fluorescence BRDF.
  • Non-line-of-sight support (NLOS)

Installation

NOTE: These instructions have been tested on Linux only

After cloning the repo, navigate to the root folder and execute the following commands to build the custom version of Mitsuba 3

git submodule update --init --recursive
cd ext/mitsuba3
mkdir -p build
cd build
cmake -GNinja ..
# Here, edit build/mitsuba.conf and set the enabled variants
# Recommended: scalar_rgb, llvm_rgb and cuda_rgb (FIXME: change to llvm_mono for NLOS?)
ninja

After this you are all set to use our transient version of Mitsuba 3

For NLOS simulations, see https://github.com/diegoroyo/tal

Requirements

  • Python >= 3.8
  • Mitsuba3 == 3.3.0 (included in this repo)
  • (optional) For computation on the GPU: Nvidia driver >= 495.89
  • (optional) For vectorized / parallel computation on the CPU: LLVM >= 11.1

Usage

Here is a simple "Hello World" example that shows how simple it is to render a scene using Mitsuba 3 transient from Python:

# Import the library using the alias "mi"
import mitsuba as mi
# Set the variant of the renderer
mi.set_variant('scalar_rgb')
# Import the package
import MiTransient as mitr
# Load a scene
scene = mi.load_dict(mitr.cornell_box())
# Prepare transient storage
transient_integrator = scene.integrator()
transient_integrator.prepare_transient(scene, 0)
# Render the scene and develop the data
data_steady, data_transient = mi.render(scene)
# Use the resulting tensor (steady: [PixelX, PixelY, Channels], transient: [PixelX, PixelY, TimeBins, Channels]) as you need, where steady is the sum over the temporal axis
...

About

This project was created by Miguel Crespo.

When using Mitsuba 3 transient in academic projects, please cite:

@software{crespo2022mitsuba3transient,
    title = {Mitsuba 3 transient renderer},
    author = {Miguel Crespo},
    note = {https://github.com/mcrescas/mitsuba3-transient},
    version = {0.0.0},
    year = 2022,
}