New developers will want to begin by thoroughly reading the documentation of Enoki before looking at any Mitsuba code. Enoki is a template library for vector and matrix arithmetic that constitutes the foundation of Mitsuba 2. It also drives the code transformations that enable systematic vectorization and automatic differentiation of the renderer.
Mitsuba 2 is a completely new codebase, and existing Mitsuba 0.6 plugins will
require significant changes to be compatible with the architecture of the new
system. Apart from differences in the overall architecture, a superficial
change is that Mitsuba 2 code uses an
underscore_case naming convention for
function names and variables (in contrast to Mitsuba 0.4, which used
camelCase everywhere). We’ve essentially imported Python’s PEP 8 into the C++ side (which does not
specify a recommended naming convention), ensuring that code that uses
functionality from both languages looks natural.
Mitsuba is split into 3 basic support libraries:
The core library (in
src/libcore) implements basic functionality such
as cross-platform file and bitmap I/O, data structures, scheduling, as well
as logging and plugin management.
The rendering library (in
src/librender) contains abstractions needed
to load and represent scenes containing light sources, shapes, materials, and
The python library (in
src/python) contains components of the system
that are written in Python, and which access Mitsuba through bindings. This
includes statistical tests (Chi^2, etc.) and tooling for differentiable