Rainbow

Rainbow

A physically-based photorealistic global illumination renderer

Rainbow_diffuse.jpg

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

cornell-box sphere-cornell-box veach-mis Veach thesis multiple importance sampling test scene. Rendered using pathtracing with multiple importance sampling. vol-caustic
Homogeneous medium
hetvol
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.