Rainbow
A physically-based photorealistic global illumination renderer
Overview
Rainbow Renderer is a physically-based photorealistic 3D renderer I am writing from scratch in C++. Rainbow is built from the ground up as a global illumination renderer supporting global illumination through light transport algorithms, including volumetric unidirectional pathtracing with multiple importance sampling. The renderer is still a work in progress.
Features
Advanced Global Illumination: Volumetric Unidirectional Path Tracing(Quasi-Monte Carlo), Primary Sample Space Metroplis Light Transport(Kelemen-style MLT).
Geometry: Support triangle and quad meshes with instancing. Also can support sphere and box.
Lights: Support point light, spot light, area light(rectangle and sphere).
Materials and BSDFs: Support physically based BSDFs, including multiple microfacet models (Beckmann), smooth and rough versions of Fresnel conductors, specular dielectrics.
Media: Support homogeneous and heterogeneous medium.
Acceleration Structure System: Use SAH-BVH acceleration.
Render Mode: Adaptive, Progressive and Final mode.
Scene Loading: Uses a XML custom scene format defining geometry, lights, materials, camera settings, render settings.
Select Images
Veach thesis multiple importance sampling test scene. Rendered using pathtracing with multiple importance sampling.
Homogeneous medium
Heterogeneous medium
Rendered using volumetric unidirectional pathtracing.
Resources
Physically Based Rendering: The go-to reference book for rendering, by Matt Pharr, Wenzel Jakob, and Greg Humphreys.
Monte Carlo Methods for Physically Based Volume Rendering: A good note for nearly all researches about volume render.