top of page

Offline Ray Tracing Renderer

image.png

Example of a scene rendered by this renderer

Introduction

This project implements a full ray tracing pipeline from scratch, including ray generation, acceleration structures, intersection, shading, and recursive light transport.

It supports both Path Tracing and Photon Mapping for global illumination, along with adaptive sampling and depth of field for improved visual quality.

The system is designed to balance physical accuracy, performance, and extensibility.

​Core Features

  •  Full ray tracing pipeline (camera → intersection → shading → recursion)

  • BVH acceleration structure for efficient ray traversal

  • Multi-threaded tile-based parallel rendering

  • Physically-based lighting (reflection, refraction, BRDF)

  • Global illumination (Path Tracing + Photon Mapping)

  • Adaptive sampling with statistical convergence testing

  • Depth of Field using thin lens camera model

Technical Breakdown

Rendering Pipeline

Implemented the core ray tracing pipeline, including ray generation, scene intersection, shading, and recursive ray tracing.

Supports secondary rays for reflection, refraction, and shadow computation, with termination controlled by max depth and Russian roulette.

Screenshot 2026-04-27 225511.png

Rendering Flow

image.png

Parallel Rendering

Acceleration & Performance

Built a Bounding Volume Hierarchy (BVH) using AABB bounding boxes to reduce intersection cost.

Implemented a tile-based parallel rendering system with dynamic scheduling using atomic operations, improving load balancing across threads.

image.png
image.png

Stack-based BVH traversal

Fast ray–AABB intersection

Lighting & Global Illumination

Implemented a Blinn-Phong based shading model combined with recursive ray tracing for realistic lighting.

Supports both Path Tracing and Photon Mapping for global illumination, including indirect lighting and caustics simulation.

RayTracing_BlinnPhong.png

Blinn-Phong shading

image.png

Recursive tracing of reflection

and refraction rays

image.png

Photon Map

image.png

Caustic Map

Adaptive Sampling

Adaptive sampling is used to optimize sample distribution across the image.

Instead of using a fixed number of samples per pixel, the renderer evaluates the variance of each pixel during rendering. A statistical t-test is applied to determine whether the current samples have converged.

Pixels with high variance (e.g., edges, reflections, caustics) receive more samples, while low-variance regions terminate early. This results in better noise reduction and more efficient use of computation resources.

Low-discrepancy sequences (Halton sequence) are used to improve sample distribution quality.

image.png

Taking samples

image.png

Sample Distribution

Conclusion

​Key Features:

  • Built a complete ray tracing renderer from scratch in C++

  • Implemented both physical-based lighting and multiple GI techniques

  • Designed a scalable parallel rendering system

  • Applied acceleration structures (BVH) for performance optimization

  • Demonstrated strong understanding of rendering fundamentals and system design

image.png

Sample scenes

bottom of page