Release notes¶
Being an experimental research framework, Mitsuba 3 does not strictly follow the Semantic Versioning convention. That said, we will strive to document breaking API changes in the release notes below.
Mitsuba 3.7.1¶
October 17, 2025
Upgrade Dr.Jit to version 1.2.0. This release brings several important improvements and several bug fixes:
Event API for fine-grained GPU kernel timing and synchronization, enabling better performance profiling.
Enhanced CUDA-OpenGL interoperability with simplified APIs for efficient data sharing between CUDA and OpenGL.
Register spilling to shared memory on CUDA backend, improving performance for complex kernels with high register pressure.
Memory view support for zero-copy data access from Python.
The remainder lists Mitsuba-specific additions.
Improvements:
Improved bump and normal mapping with two important fixes for more robust and artifact-free rendering. Both the
bumpmapandnormalmapBSDFs now include: (1) Invalid normal flipping - ensures perturbed normals are always consistent with the geometric normal by flipping shading normals when needed, following the approach in Schüssler et al. 2017 [SchusslerHHD17]. (2) Microfacet-based shadowing - smooths shadow terminator artifacts using the shadowing function from Estevez et al. 2019 [ELS19]. Both features are enabled by default but can be disabled via theflip_invalid_normalsanduse_shadowing_functionparameters for backwards compatibility. (commit e32d71807, contributed by Delio Vicini).Improved sunsky documentation. (PR #1743, contributed by Mattéo Santini).
Added support for vcalls of Texture. (commit 6b1603c77).
Added Python bindings for
field<T>types. (PR #1736, contributed by Delio Vicini).Allow multiple Python objects to refer to the same
Object*. (PR #1740).
Bug fixes:
Fixed bug with unintentional reordering of channels when serializing and deserializing a Bitmap with more than 10 channels. (commit e84b18f, contributed by Sebastian Winberg).
Fixed
hide_emittersbehavior forareaemitters inpathintegrator and all other integrators. (commits 3c3bf14c, 0755134e0, c967a0a24).Fixed KDTree reference counting and shutdown procedure. (commit 14c8c9763).
Fixed compilation issues of the KDTree. (commit 65b38126b).
Prevent NaN values for normals of triangles with zero area. (PR #1733, contributed by Delio Vicini).
Prevent users updating the
UniformSpectrumwith a float of size different than 1. (PR #1722, contributed by Mattéo Santini).Added Image manipulation tutorial back in the “How-to Guides”. (commit 465609174, contributed by Baptiste Nicolet).
Add support for JIT-freeting to the sunsky classes. (commit f07f26c5e).
Mitsuba 3.7.0¶
August 7, 2025
Upgrade Dr.Jit to version 1.1.0. The following list summarizes major new features added to Dr.Jit. See the Dr.Jit release notes for additional detail and various smaller features that are not listed here.
Cooperative vectors and a neural network library: Dr.Jit now supports efficient matrix-vector arithmetic that compiles to tensor core machine instructions on NVIDIA GPUs and packet instructions (e.g., AVX512) on the LLVM backend. A modular neural network library facilitates evaluating and optimizing fully fused MLPs in rendering code. (Dr.Jit PR #384, Dr.Jit-Core PR #141).
Hash grid encoding: Neural network hash grid encoding inspired by Instant NGP, including both traditional hash grids and permutohedral encodings for high-dimensional inputs. (Dr.Jit PR #390, contributed by Christian Döring and Merlin Nimier-David).
Function freezing: The
@drjit.freezedecorator eliminates repeated tracing overhead by caching and replaying JIT-compiled kernels, which can dramatically accelerate programs with repeated computations. (Dr.Jit PR #336, Dr.Jit-Core PR #107, contributed by Christian Döring).Shader Execution Reordering (SER):
drjit.reorder_threads()shuffles threads to reduce warp-level divergence, improving performance for branching code. (Dr.Jit PR #395, Dr.Jit-Core PR #145).New random number generation API: The function
drjit.rng()returns adrjit.random.Generatorobject (resembling analogous API in NumPy, PyTorch, etc.) that computes high-quality random variates that are statistically independent within and across parallel streams. (Dr.Jit PR #417).Array resampling and convolution: New functions
drjit.resample()anddrjit.convolve()support differentiable signal processing with various reconstruction filters. (Dr.Jit PRs #358, #378).Gradient-based optimizers: New
drjit.optmodule withdrjit.opt.SGD,drjit.opt.Adam, anddrjit.opt.RMSPropoptimizers. They improve upon the previous Mitsuba versions and include support for adaptive mixed-precision training. (Dr.Jit PRs #345, #402).TensorFlow interoperability:
@drjit.wrapenables seamless integration with TensorFlow. (Dr.Jit PR #301, contributed by Jakob Hoydis).Enhanced tensor operations: New functions
drjit.concat(),drjit.take(),drjit.take_interp(), anddrjit.moveaxis()for tensor manipulation.Performance improvements: Packet scatter-add operations, optimized texture access, and faster
drjit.rsqrt()on the LLVM backend (Dr.Jit PRs #343, #329, #406, Dr.Jit-Core PR #151),
The remainder lists Mitsuba-specific additions.
Function freezing. Using the previously mentioned
@dr.freezefeature, it is now possible to freeze functions that callmi.render(). Rendering another view (e.g., from a different viewpoint or with a different material parameter) then merely launches the previously compiled kernels instead of tracing the rendering process again. This unlocks significant acceleration when repeatedly rendering complex scenes from Python (e.g., in optimization loops or real-time applications). Some related changes in Mitsuba were required to make this possible. (PRs #1477, #1602, #1642, contributed by Christian Döring).AD integrators and moving geometry. All automatic differentiation integrators have been updated to correctly handle continuous derivative terms arising from moving geometry. In particular, the continuous (i.e., non-boundary) derivative of various integrators was missing partial derivative terms that could be required in certain geometry optimization applications. The updated integrators also run ~30% faster thanks to Shader Execution Reordering (SER). (PR #1680). We thank Markus Worchel, Ugo Pavo Finnendahl, and Marc Alexa for bringing this issue to our attention.
Gaussian splatting. Two new shape plugins support volumetric rendering applications based on 3D Gaussian splatting: ellipsoids is an anisotropic ellipsoid primitives using closed-form ray intersection, while ellipsoidsmesh uses a mesh-based representation. The volprim_rf_basic integrator documentation integrator renders emissive volumes based on them (PR #1464, contributed by Sebastien Speierer).
The new sunsky plugin implements Hosek-Wilkie models for the sun and sky, where sampling of the latter is based on Nick Vitsas and Konstantinos Vardis’ Truncated Gaussian Mixture Model. (PR #1473, #1461, #1491, contributed by Mattéo Santini).
Shader Execution Reordering (SER). The
Scene.ray_intersect()andScene.ray_intersect_preliminary()methods now accept areorderparameter to trigger thread reordering on CUDA backends, which shuffles threads into coherent warps based on shape IDs. Performance improvements vary by scene complexity (ranging from 0.67x to 1.95x speedup). SER can be controlled globally via the scene’sallow_thread_reorderingparameter or by disablingdrjit.JitFlag.ShaderExecutionReordering. Most integrators have been updated to use SER by default. (PR #1623).The performance of ray tracing kernels run through the CUDA/OptiX backend was significantly improved. Previously, several design decisions kept Mitsuba off the OptiX “fast path”, which is now fixed. (PRs #1561, #1563, #1568).
Mitsuba now targets the OptiX 8.0 ABI available on NVIDIA driver version 535 or newer. (PR #1480).
Bitmap textures now use half precision by default. (PR #1478.)
Improvements to the
mitsuba.Shapeinterface. (PRs #1484, #1485).The Mitsuba optimizers (e.g. Adam) were removed. They are now aliases to more sophisticated implementations in Dr.Jit. (Mitsuba PR #1569, Dr.Jit PR
#345).The
TransformAPI became more relaxed—for example,Transform4f.scale()andTransform4f().scale()are now both equivalent ways of creating a transformation. This removes an API break introduced in Mitsuba version 3.6.0. (PR #1638).Refactoring. The codebase underwent several major refactoring passes to remove technical debt:
Removal of the legacy thread system and replacement with standard C++ constructs (PR #1622).
Removal of the legacy object system and replacement with standard C++ constructs; rewrite of the
mi.Propertiesand plugin loader implementations (PR #1630).Switched to a new parser and scene IR common to both XML and dictionary parsing; further work on
mi.Properties(PRs #1669, #1676)Replaced
Transform4fby specialized affine and perspective transformations. (PR #1679).Pass over the test suite to accelerate CI test runs (PR #1659)
This is part of an ongoing effort to modernize and improve legacy Mitsuba code.
Added an API to easily read/write tensor files from Python and access them as Dr.Jit tensor instances in Python/C++ code (PR #1705).
The rawconstant texture plugin stores raw 1D/3D values without any color space conversion or spectral upsampling, useful when exact numerical values need to be preserved. (PR #1496, contributed by Merlin Nimier-David).
Various minor improvements and fixes. (PRs #1350, #1495, #1496, #1527, #1540, #1545, #1547, #1528, #1583, #1522, #1600, #1627, #1628, #1656, #1663, #1668, #1678, #1696, and #1702).
Mitsuba 3.6.4¶
February 4, 2025
Mitsuba 3.6.3¶
January 29, 2025
Release was retracted
Mitsuba 3.6.2¶
January 16, 2025
Mitsuba 3.6.1¶
January 16, 2025
Mitsuba 3.6.0¶
November 25, 2024
This release comes with a major overhaul of some of the internal components of Mitsuba 3. Namely, the Python bindings are now created using nanobind and the just-in-time compiler Dr.Jit was updated to version 1.0.0.
These upgrades lead to the following:
Performance boost: 1.2x to 2x speedups depending on the JIT backend and scene size
Improved stubs: auto-completion and type-checking has been greatly improved
More variants on PyPI: thirteen variants are available in the pre-built wheels
Some breaking changes were made in this process. Please refer to the porting guide to get a comprehensive overview of these changes.
This release also includes a series of bug fixes, quality of life improvements and new features. Here’s a non-exhaustive list:
Support for Embree’s robust intersection flag [96e0af2]
Callback system for variant changes #1367
MeshPtrfor vectorizedMeshmethod calls #1319Aliases for the
ArrayXtypes of Dr.Jit [2e86e5e]Fix attribute evaluation for
twosidedBSDFs [5508ee6] .. [7528d9f]batchsensors expose their innerSensorobjects when traversed withmi.traverse()#1297Updated wheel build process with new variants #1355
Mitsuba 3.5.2¶
June 5, 2024
Most likely the last release which uses pybind11.
OptiX scene clean-ups could segfault [03f5e13]
Mitsuba 3.5.1¶
June 5, 2024
Upgrade Dr.Jit to [v0.4.6]
More robust scene clean-up when using Embree [7bb672c]
Support for AOV fields in Python AD integrators [f3b427e]
Fix potential segfault during OptiX scene clean-up [0bcfc72]
Improve and fix Mesh PMF computations [ced7b22] .. [7d2951a]
Shape.parameters_grad_enablednow only applies to parameters that introduce visibility discontinuities [3013adb]The
measuredpolarizedplugin is now supported in vectorized variants [68b3a5f]Fix an issue where the
constantplugin would not reuse kernels [deebe4c]Minor changes to support Nvidia v555 drivers [19bf5a4]
Many numerical and performance improvements to the
sdfgridshape [455de40] .. [9e156bd]
Mitsuba 3.5.0¶
New projective sampling based integrators, see PR #997 for more details. Here’s a brief overview of some of the major or breaking changes:
New
prb_projectiveanddirect_projectiveintegratorsNew curve/shadow optimization tutorial
Removed reparameterizations
Can no longer differentiate
instance,sdfgridandSensor’s positions
Mitsuba 3.4.1¶
December 11, 2023
Upgrade Dr.Jit to [v0.4.4]
Solved threading/concurrency issues which could break loading of large scenes or long running optimizations
Scene’s bounding box now gets updated on parameter changes [97d4b6a]
Python bindings for
mi.lookup_ior[d598d79]Fixes to
maskBSDF when differentiated [ee87f1c]Ray sampling is fixed when
sample_borderis used [c10b87b]Rename OpenEXR shared library [9cc3bf4]
Handle phase function differentiation in
prbvolpath[5f9eebd]Fixes to linear
retarder[8033a80]Avoid copies to host when building 1D distributions [825f44f] .. [8f71fe9]
Fixes to linear
retarder[8033a80]Sensor’s prinicpal point is now exposed throught
m̀i.traverse()[f59faa5]Minor fixes to
ptracerwhich could result in illegal memory accesses [3d902a4]Other various minor bug fixes
Mitsuba 3.4.0¶
August 29, 2023
Upgrade Dr.Jit to v0.4.3
Add
mi.variant_context(): a Python context manager for setting variants [96b219d]Emitters may now define a sampling weight [9a5f4c0]
Fix
bsplinecurveandlinearcurveshading frames [3875f9a]Add implementation of
LargeStepsmethod for mesh optimizations (includes a new tutorial) [48e6428] .. [130ed55]Support for spectral phase functions [c7d5c75]
Additional resource folders can now be specified in
mi.load_dict()[66ea528]BSDFs can expose their attributes through a generic
eval_attributemethod [cfc425a] .. [c345d70]New
sdfgridshape: a signed distance field on a regular grid [272a5bf] .. [618da87]Support for adjoint differentiation methods through the
aovintegrator [c9df8de] .. [bff5cf2]Various fixes to
prbvolpath[6d78f2e], [a946691] , [91b0b7e]Curve shapes (
bsplinecurveandlinearcurve) always have back-face culling enabled [188b254] .. [01ea7ba]Propertiescan now accept tensor objects, currenlty used inbitmap,sdfgridandgridvolume[d030a3a]Improvements to the
batchsensor (performance, documentation, bug fixes) [527ed22] .. [65e0444]Many missing Python bindings were added
Other various minor bug fixes
Mitsuba 3.3.0¶
April 25, 2023
Upgrade Dr.Jit to v0.4.2
Emitters’ members are opaque (fixes long JIT compilation times) [df940c1]
Sensors members are opaque (fixes long JIT compilation times) [c864e08]
Fix
cylinder’s normals [d9ea8e8]Fix next event estimation (NEE) in volume integrators
mi.xml.dict_to_xmlnow supports volumes [15d63df]Allow extending
AdjointIntegratorin Python [15d63df]mi.load_dict()is parallel (by default) [bb672ed]Upsampling routines now support
boxfilters [64e2ab1]The
Mesh.write_ply()function writess, trather thanu, vfields [fe4e448]All shapes can hold
Textureattributes which can be evaluated [f6ec944]Radiative backpropagation style integrators use less memory [c1a9b8f]
New
bsplinecurveandlinearcurveshapes [e4c847f] .. [79eb026]
Mitsuba 3.2.1¶
February 22, 2023
Upgrade Dr.Jit to v0.4.1
Filmplugins can now have error-compensated accumulation in JIT modes [afeefed]Fix and add missing Python bindings for
Endpoint/Emitter/Sensor[8f03c7d]Numerically robust sphere-ray intersections [7d46e10] .. [0b483bf]
Fix parallel scene loading with Python plugins [93bb99b]
Various minor bug fixes
Mitsuba 3.2.0¶
January 6, 2023
Upgrade Dr.Jit to v0.4.0
Various bug fixes
Stability improvements (race conditions, invalid code generation)
Removed 4 billion variable limit
Add missing Python bindings for
ShapeandShapePtr[bdce950]Fix Python bindings for
Scene[4cd5585]Fix bug which would break the AD graph in
spectralvariants [f3ac81b]Parallel scene loading in JIT variants [48c14a7] .. [187da96]
Fix sampling of
hgPhaseFunction[10d3514]Fix
envmapupdating in JIT variants [7bf132f]Expose
PhaseFunctionofMediumobjects throughmi.traverse()[cca5791]
Mitsuba 3.1.1¶
November 25, 2022
Fixed maximum limits for OptiX kernel launches [a8e6989]
Mitsuba 3.1.0¶
New features¶
Enable ray tracing against two different scenes in a single kernel [df79cb3]
Make
ShapeGrouptraversable and updatable [e0871aa]Enable differentiation of
to_worldininstance[54d2d3a]Enable differentiation of
to_worldinsphere,rectangle,diskandcylinder[b5d8c5d] .. [b5d8c]Enable differentiation of
to_worldinperspectiveandthinlens[ea513f7] .. [ea513f]Add
BSDF::eval_diffuse_reflectance()to most BSDF plugins [59af884]Add
mi.OptixDenoiserclass for simple denoising in Python [5529318] .. [55293]envmapplugin can be constructed frommi.Bitmapobject [9389c8d]
Other improvements¶
Major performance improvements in
cuda_*variants with new version of Dr.JitDeprecated
samples_per_passparameter [8ba8528]Fix rendering progress bar on Windows [d8db806]
objfile parsing performance improvements on Windows [28660f3]Fix
mi.luminance()for monochromatic modes [61b9516]Add bindings for
PluginManager.create_object()[4ebf700]Fix
SceneParameters.update()unnecessary hash computation [f57e741]Fix numerical instabilities with
boxfilter splatting [2d89762]Improve
math::bisectalgorithm [7ca09a3]Fix syntax highlighting in documentation and tutorials [5aa2716]
Fix
Optimizer.set_learning_rateforintvalues [53143db]Various minor improvements to the Python typing stub generation [b7ef349] .. [ad72a53]
Minor improvements to the documentation
Various other minor fixes
Mitsuba 3.0.2¶
September 13, 2022
Change behavior of
<spectrum ..>and<rgb ..>tag at scene loading for better consistency between*_rgband*_spectralvariants [f883834]Add PyTorch/Mitsuba interoperability tutorial using
dr.wrap_ad()Fix DLL loading crash when working with Mitsuba and PyTorch in Python [59d7b35]
Fix crash when evaluating Mitsuba ray tracing kernel from another thread in
cudamode. [cd0846f]Add stubs for
Float,ScalarFloatand other builtin types [8249179]Plugins
regularandblackbodyhave renamed parameters:wavelength_min,wavelength_max(previouslylambda_min,lambda_max) [9d3487c]Dr.Jit Python stubs are generated during local builds [4302caa8]
Minor improvements to the documentation
Various other minor fixes
Mitsuba 3.0.1¶
July 27, 2022
Various minor fixes in documentation
Added experimental
batchsensor plugin [0986152]Fix LD sampler for JIT modes [98a8ecb]
Prevent rebuilding of kernels for each sensor in an optimization [152352f]
Fix direction convention in
tabphaseplugin [49e40ba]Create TLS module lookup cache for new threads [6f62749]
Mitsuba 3.0.0¶
July 20, 2022
Initial release