marp | theme | class |
---|---|---|
true |
uncover |
invert |
- Raytracing is slow
- Optimizations:
- Brute Force: more computing power!
- Approximation: cone tracing
- Voxelization using the GPU Hardware Rasterizer
- Hybrid Rendering Pipeline
- Rasterized primary rays for direct lighting
- Cone Traced secondary rays for indirect GI
- Rasterization
- Dominant Axis Projection
- Direct Light Injection and Mipmapping
- Use GPU to generate voxels
- Thin surface voxelization of triangle B with voxel V:
- B’s plane intersects V
- 2D projection of B along it's dominant axis intersects the 2D projection of V.
- Disable depth testing (z-buffer)
- Generate fragments for every pixel touched by a primitive
GL_NV_conservative_raster
Extension- NVIDIA’s new Maxwell architecture (2014 onwards)
...
// select the dominant axis
float axis = max(geometryNormal.x, max(geometryNormal.y, geometryNormal.z));
if (axis == geometryNormal.x) {
gl_Position = vec4(outputPosition.zy, 1.0, 1.0);
} else if (axis == geometryNormal.y) {
gl_Position = vec4(outputPosition.xz, 1.0, 1.0);
} else if (axis == geometryNormal.z) {
gl_Position = vec4(outputPosition.xy, 1.0, 1.0);
}
EmitVertex();
...
- Each projected triangle passed through the standard rasterization pipeline to perform 2D scan conversion
- Compute 3D integer coordinate within the destination voxel image
imageStore()
(OpenGL 4.2+) to write direct lighting to 3D imageglGenerateMipmap()
for automatic mipmap generation
The hemispherical integration can be represented as a summation of 𝑁 cones
We define the diameter d as:
Mipmap LOD for sampling:
Volumetric front-to-back accumulation: