A CPU based offline Renderer for personal interest and education.
- Integrator
- Path Tracing
 - Light Tracing
 - Bidirectional Path Tracing (BDPT)
   
Stick closely to veach97. Learning and Coding refer a lot to https://rendering-memo.blogspot.com/2016/03/bidirectional-path-tracing-1-kickoff.html 0. No t == 0 case 1. Shading normal asymmetric Bsdf correction ✅ 2. Some problem with Microfacet Transmissive material (when path length <= 5 is fine) ❌ TODO 
 - Matertial:
- Lambertain Diffuse (cos weighted)
 - Microfacet Reflection and Transmittance (Cook Torrance Model with GGX distribution).
 - Perfect Reflective
 - Perfect Refractive.
 - Unlit. (incompatible with bdpt)
 
 - Sampling
- Importance Sampling
 - Multiple Importance Sampling
 - Next Event Estimation
 
 - Texture Mapping
- Albedo/Diffuse Map
 - Normal Map
 - Roughness Map
 - Metallicness Map
 
 - Acceleration
- BVH default (midpoint)
 - CPU Multi-Threading (std::thread)
 
 - Post Processing
- Bloom
 - HDR
 - Tone Mapping / Gamma Correction
 
 - Russian Roulette (Throughput) in path tracing
 
- 
Microfacet refractive/translucent ✅
 - 
BDPT ✅
 - 
don't rely on .ppm image file
 - 
6/29/2024:
1.better config file 2.image based lighting 3.Subsurface scattering 4.SAH BVH 
$ ./PathTracing.exe config.txt
Develop Environment: MSVC C++17, Visual Studio 2022
cmakelist or makefile of the latest version is TO-DO in the future
Refer to https://github.com/bobhansky/WhittedStyle_Raytracer/blob/main/README.md for more instruction on configuration file.
left: Whitted style Ray Tracing (shading with Blinn Phong Model)
right: Path Tracing

upperleft: BSDF sampling upperright: light Sampling lowerleft: NEE only lowerright: NEE + MIS














