GPU Renderer
A physically-based photorealistic global illumination renderer using CUDA

Realtime Progressive


Performance
4-13x speedup compared with CPU unidirectional Path Tracing.

Tips
- 
    
If you haven’t written OOP program using CUDA and now you want to write a renderer using CUDA, I strongly recommend you learning Fermat’s structure before everything starts.
 - CUDA doesn’t support class inheritance, so try to define everything (i.e. material, shape) in some unified method as much as possible.
 - Ray query system roadmap : for loop -> recursive build and simple query BVH -> parallel build and simple query BVH -> parallel build and GPU-optimized query BVH.
 - If you don’t really care GUI, you can learning from CUDA’s SDK volumeRender.
 - Wavefront .obj scene (tiny_obj_loader), partly Mitsuba scene (XML) and custom scene format are easy to parse.
 
Reference
System
Fermat : CUDA renderer system
Megakernels Considered Harmful: Wavefront Path Tracing on GPU : Wavefront path tracer
BVH
Maximizing Parallelism in the Construction of BVHs, Octrees, and k-d Tree : Parallel ontruct BVH using morton code
Understanding the Efficiency of Ray Traversal on GPUs : Some implementation tricks on CUDA
GPU path tracing tutorial 3 : Some implementation tricks on CUDA
Selected images








