Hello, it’s been half a year since last update and now I’m back! I’ve finally finished the project and renamed it to Real-time Path Tracing on GPU. As I told you before, the second part will try to push the boundary of GPU accelerated path tracing to approach real-time performance. I want to clarify here that by “real-time” I don’t mean that you can get same image quality of mainstream game graphics with a speed comparative with rasterized graphics using a ray-tracing technique. However, with proper constraints (limitation of BRDF types, resolution and model complexity) you can actually get a pretty close real-time performance which must be implemented with tons of texture tricks in a rasterization setting (e.g. the 512x512 Cornell box, as I will show below). Besides introducing optimizations I’ve used for such a great leap in speed, I will analyze the gap between current performance and the ideal performance we want to have in future and try provide some suggestions what we can do for the improvement of this technique.
6.1 Objectives of the Second Part of the Project
The main objective of this project is to explore the capability and performance of combination of the power of current GPGPU with existing and new path tracing algorithms in the task of real-time path tracing. To achieve this, a variety of different factors that determines the efficiency of path tracing are studied, amongst which spatial acceleration structures, sampling algorithms, and single-instruction-multiple-data (SIMD) optimization are most important. Since the variable (lighting configuration, scene geometry and material) and measure (frame rate, convergence rate) of path tracing performance are both multi-dimensional, optimization concepts are provided in a case-by-case analysis. A standalone program is written to demonstrate these concepts. To guarantee that the concepts are applicable to general and complex cases, a considerably large subset of all functionalities found in state-of-art path tracers is integrated into the program which includes PBR (physically-based rendering) material and participating media. Besides, bi-directional path tracing and Metropolis light transport are also studied to deal with cases containing difficult lighting configuration and to improve the rendering quality under same time constraints.
6.2 Layout
The main content of the second part will be divided into 6 posts as post 7 – post 12. In post 7, we will have an overview of the workflow of our path tracer, followed by the spatial acceleration structures including SAH-based Kd-Tree and BVH as the first studied factor of optimization in post 8. In post 9, the rendering equation will be reviewed with normal Monte Carlo sampling algorithm, after which advanced sampling techniques - multiple importance sampling, bi-directional path tracing and Metropolis light transport based on Markov Chain Monte Carlo method will be studied in response to difficult rendering cases and noise reduction. Before the discussion of SIMD optimization in post 11, several important shading models including surface-to-surface BSDF, ray-marching volume rendering and a simplification of subsurface scattering will be introduced due to their close relationship with sampling methods. In particular, I will propose a parallel SAH-based Kd-Tree construction algorithm that is suitable for current GPGPU in post 11. In post 12, benchmark methods will be introduced which carry out the comparison between my path tracer, NVIDIA’s Optix path tracing demo, and Cycles Renderer – a free mainstream path tracer.