Skip to content

A wavefornt path tracer from scratch in C++ & CUDA

Notifications You must be signed in to change notification settings

Rainzor/Renderer-CUDA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CUDA Path Tracer

Features

  • Wavefront Path Tracing

    • Separating mega-kernels into several kernels: RayGen, Intersection, Shade ...
    • Less Warp Divergence: Stream compacting the ray path segments
    • Improve Memory Access Coalescing: SoA data layout and sorting path segments by material type before shading
  • Texture Mapping: More surface color based on CUDA Texture Object

  • Triangle Primitive Mesh: More shapes based on Obj loader

  • Accelerate Data Structure BVH:

    • Binary Radix Tree Construction
    • Parallel Tree Traversal
    • Two Level Acceleration Structures: world level (TLAS) & model level (BLAS)
  • Efficient Monte Carlo Integrator:

    • Next Event Estimation: Shadow rays are explicitly aimed at light sources
    • Multiple Importance Sampling: Combining the PDFs of different sampling techniques
  • Physically Based Rendering:

    • Diffuse (Lambertian)
    • Dielectric
    • Conductor
    • Plastic

    Kulla Conty approximation for multi-scattering is implemented for Dielectrics and Conductors


TODO:

  • Denoiser

  • Material BSDF Data Structure

  • Global Queue

Screenshots

bunny_dielectric

mitsuba_conductor

Dependencies

  • CUDA
  • OpenGL
  • GLFW
  • GLEW
  • GLM
  • ImGui
  • Stb Image
  • Tinyobj loader
  • nlohmann-json

Reference

About

A wavefornt path tracer from scratch in C++ & CUDA

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published