Rendering engine
This page provides some details on my personal academic rendering engine, started and improved over the course of my PhD, and continued for my current research and learning projects. The core source code is composed of 35000 lines of C++, it has been used to render thousands of hours of images and all figures from my academic publications, and used on various machines including the compute cluster IN2P3.
Unfortunately the codebase is not public yet due to two reasons: some unpublished work implemented in it and a lazyness in the code quality that makes some part of it obfuscated. Below are the list of features it includes and some renders produced by the renderer.
However, a small portion of it has been separated and published alongside my publication Volumetric multi-view rendering.
Features
It includes the following list of features:
- Integrators
- Unidirectional volumetric path tracing integrator (vpt) [Miller:2019]
- Multiple view volumetric path tracing integrator (mvpt) and its adaptive version (amvpt) [Fraboni:2021]
- Multiple view path tracing integrator (extended to volumetric support for comparisons) [Fraboni:2019]
- Miscellaneous: Ambient occlusion, Normal, Light tracing, Path tracing, DoF supersampling integrator, Discrete path reusing integrator (surfaces only) [Bekaert:2002]
- Materials
- smooth models: diffuse reflection/transmission, conductor, dielectric with absorption, plastic with absorption, bi-layered model (coating and substrate) with absorption
- rough models: diffuse reflection/transmission, conductor, dielectric with absorption, plastic with absorption, bi-layered model (coating and substrate) with absorption
- microfacet models Beckmann and GGX
- energy compensation [Turquin:2017][Kulla:2017]
- mix BSDF
- thin film interferences
- BSDF validation methods [Heitz:2014]
- BSDF similarity methods [Fraboni:2021]
- Roughness regularization [Kaplanyan:2013][Jendersie:2019]
- Direct illumination techniques
- Homogeneous and heterogeneous participating media
- Spectral absorption, scattering and emission support
- Density functions
- Uniform and 3D textures density
- Sparse voxel density support with NanoVDB [Museth:2021]
- Procedural 3D noise density (value, perlin, simplex, ridged) and 4D for animated media support with FastNoise [Peck:2020][Musgrave:1994]
- Phase functions
- Uniform
- Henyey-Greenstein
- Mie approximation with numerical CDF inversion
- Transmittance estimators
- Textures and UV mapping
- Depth of field with thin lens model [Kolb:1995]
- Time integration for motion blur
- SIMD math library
- Fast ray - scene intersection with Intel Embree 4 [Wald:2014] (and Standalone BVH as well)
- Progressive rendering with interactive OpenGL preview, faster offline batched tiles mode
- Adaptive rendering with various error criteria [Fraboni:2021][Fraboni:2019][Kajiya:1986][Rigau:2003][Heitz:2018]:
Examples
References
[Bekaert:2002] Accelerating Path Tracing by Re-using Paths, Bekaert et al., 2002
[Bitterli:2020] Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting, Bitterli et al., 2020
[Fraboni:2019] Adaptive Multi-view Path Tracing, Basile Fraboni et al., 2019
[Fraboni:2021] Volumetric Multi-view Rendering, Basile Fraboni et al., 2021
[Heitz:2014] Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs, Eric Heitz, 2014
[Heitz:2018] Combining analytic direct illumination and stochastic shadows, Heitz et al., 2018
[Jendersie:2019] Microfacet Model Regularization for Robust Light Transport, Jendersie et al. 2019
[Kajiya:1986] The Rendering Equation , James T. Kajiya, 1986
[Kaplanyan:2013] Path Space Regularization for Holistic and Robust Light Transport, Kaplanyan et al., 2013
[Kettunen:2021] An unbiased ray-marching transmittance estimator, Kettunen et al., 2021, link
[Kolb1995] A Realistic Camera Model for Computer Graphics, Kolb et al., 1995
[Kulla2012] Importance sampling techniques for path tracing in participating media, Kulla et al., 2012
[Miller2019] A null-scattering path integral formulation of light transport, Miller et al., 2019
[Museth2021] NanoVDB: A GPU-Friendly and Portable VDB Data Structure For Real-Time Rendering And Simulation, Ken Museth, 2021
[Musgrave1994] Texturing and modeling: a procedural approach, Musgrave et al., 1994
[Peck2020] FastNoise Lite: a portable open source noise generation library, Jordan Peck, 2020, github
[Rigau2003] Refinement Criteria Based on F-divergences, Rigau et al., 2003
[Shirley1994] Direct lighting calculation by monte carlo integration , Shirley et al., 1994
[Talbot2005] Importance Resampling for Global Illumination, Talbot et al., 2005
[Turquin2017] Practical multiple scattering compensation for microfacet models, Emmanuel Turquin, 2017
[Veach1995] Optimally Combining Sampling Techniques for Monte Carlo Rendering , Veachet al., 1995
[Wald2014] Embree: a kernel framework for efficient CPU ray tracing, Wald et al., 2014