A physically-based path tracer with many features, including:
- Anti-Aliasing through Multi-Sampling
- Refractive Object Shading
- Smooth Shading
- Distribution Ray Tracing
- Area Light
- Depth of Field
- Glossy Reflection
- Motion Blur
- Texture Mapping, Bump mapping, Perlin noise
- Different Lighting Methods
- Point Light, Directional light, Spotlight
- Object Lights (Sphere, Mesh), Visible Lights
- Lighting through Environment Radiance Maps
- High Dynamic Range Imaging
- Generating high dynamic range image outputs
- Tonemapping, generating tonemapped HDR outputs
- BRDF (Bidirectional Reflectance Distribution Function)
- Design that allows introducing any BRDF model easily
- 7 different BRDF models
- Path Tracing (Indirect Illumination) with Monte Carlo methods
- Transformation and Instancing
- Acceleration Techniques
- Bounding Volume Hierarchy
- Multi-Threading
The project had 13 milestones, first of which included the principal design and the implementation of the ray tracer. With others, a different challenge was addressed that improves varying aspects of the project including its output quality, performance, and usability.
Link to the blog: https://chasetheray.wordpress.com/
In each post, development of an additional feature was discussed briefly. Output images and performance evaluations were shared.
- First Blood: Basic Ray Tracing: Object-oriented modelling of the problem. Class diagrams and the discussion on the interactions of the classes.
- Accelerating Ray Tracing: Bounding Volume Hierarchy and Multi-Threading: Improving the performance of the project in terms of time efficiency by making use of a special data structure: bounding volume hiearchy, and multithreading.
- Multisampling in Ray Tracing: Improving the output image quality through multisampling (supersampling), which eliminates aliasing artifacts.
- Shading Refractive (Transparent) Shapes: Shading transparent objects using Snell's Law for refraction geometry, Fresnal Equation for reflection and transmission, Schlick's approximation for simpler and faster solution, and Beer's Law for modelling attenuation.
- Smooth Shading: Improving the output image quality through smooth shading, which assigns normal vectors to vertices rather than triangles and computes the surface normal at a point on a triangle as a weighted sum of normals of its vertices.
- Transformation and Instancing: Applying translation, rotation, and scaling transformations to scene objects, and instancing.
- Distribution Ray Tracing: Introducing area light source depth of field, glossy reflection, motion blur effects through multi-sampling tricks.
- All About Textures: Texture Mapping, Bump Mapping, Perlin Noise: Texture mapping on different types of shapes. Bump Mapping. Perlin Noise.
- Glittery Ray Tracer: Directional Light, Spotlight and HDR in Ray Tracing: Different light sources: directional light and spotlight. Tonemapping high dynamic range outputs using Reinhard et al.'s method.
- All About BRDF: Phong, Blinn-Phong, Torrance-Sparrow: Introducing BRDF (Bidirectional Reflectance Distribution Function). Design changes on light modelling to allow working with any BRDF. Implementation of 7 different BRDF models: Phong (original, modified, modified&normalized&energy-conserving), Blinn-Phong (original, modified, modified&normalized&energy-conserving), Torrance-Sparrow.
- Object Lights: Sphere Light, Mesh Light and Environment Map: Objects acting as light sources. Environment Map: object lights with texture as radiance map. Visible light sources.
- Path Tracing with Monte Carlo Methods: Turning the ray tracer into a path tracer: indirect lighting. Application of Monte Carlo methods.
- Exporting Blender 3D Scenes: Exporting Blender 3D scenes to be used as output to the path tracer.
See more in the blog posts.
This project was developed while following the course: CENG795 Special Topics: Advanced Ray Tracing, which was offered by Assoc.Prof. Ahmet Oguz Akyuz at CENG METU.