Renderer on DIRT
A ray tracer implemented in C++ based on Dartmouth Introductory Ray Tracer (DIRT) framework.
​
As an advanced feature, it can perform Monte-Carlo simulations on layered materials in a fast and accurate way, based off work "Position-Free Monte Carlo Simulation for Arbitrary Layered BSDFs" by Guo etc.
This is an individual semester-long project for course "Physics-based rendering" at Carnegie Mellon University, 2023 spring.
Final result submitted to the class rendering contest

This submission was named as one of the three artistic awards.
Renderer Features
Aside from Position-free Monte Carlo, Below are a list of fundamental features built into the renderer by me along with the rendering results.


-Translucent Material +Procedural Perlin Noise
-Ambient Occlusion

-Environment Maps

-Mixed multiple importance sampling

-Next-Event Estimation

-Homogeneous Volumes

-Heterogenous Volumes
Position-Free Monte Carlo Unidirectional Simulation
Assumptions:
-
The displacement of scattering event on surface is ignorable
-
The layer properties are locally uniform
​
Algorithm:
-
Perform Monte-Carlo simulations based on light paths generated by sampling the layers and volumes
-
Perform Next event estimation by inversely sampling the layers
-
Simplification of the model: a unidirectional path tracer with only opaque layered materials and in-between homogeneous medium
​
*A more detailed definition of the model can be found in the original paper.
Results : Validation



Ground Truth Position-free without NEE Position-free with NEE
Validation Conclusions:
-
Our estimator matches the ground truth value
-
Our estimator with NEE is significantly faster.
-
Ground truth uses 500 sample/pixel and takes 6 minutes to render
-
Pos-free with NEE uses 50 sample/pixel and tak​e only 8 seconds to render.
-