Video summary
Global Illumination for Poor People | TurboGI Devlog
Main summary
Key takeaways
Overview
This devlog video documents the process of building global illumination (GI) that can run on very low-end hardware. The author’s key motivation is that their own GPU is too weak to support heavy, traditional GI approaches within a real-time frame budget.
Instead, the focus is on a screen-space GI approach implemented with ReShade, using aggressive performance optimizations and careful quality tradeoffs.
Hardware / constraints driving the design
- The author uses a 40W mobile RTX 3050 with 4GB VRAM.
- Performance is often worse than expected, even compared to older GPUs in some scenarios.
Because the author codes graphics for low-end systems, their GI solution must be:
- Very optimized for low-end hardware
- Within an aggressive per-GPU budget (~1.5 ms)
- Targeting roughly a ~5 FPS drop when running a 60 FPS locked scenario
Quality compromises they accept
- Less detail in shadows
- Low precision
Quality compromises they refuse
- Noisy output
- Noticeable ghosting
Because of this, the implementation heavily emphasizes:
- Denoising
- Temporal stability (without relying too much on temporal accumulation that can ghost)
Chosen approach: Screen-space GI (SSGI) via buffers
The solution is implemented in screen space using typical deferred rendering buffers:
- Depth buffer
- Normals (G-buffers)
- HDR color/intensity buffer
Core idea
Instead of tracing rays through full 3D geometry, the system:
- Reconstructs an approximate scene shape from screen-space pixels
- Traces rays through screen-space textures (depth/normals/color) rather than through triangles
Step-by-step technical pipeline
1. Baseline SSGI (too noisy)
- Starts with a basic screen-space ray tracing approach.
- Main issue: extremely noisy output due to very few samples per pixel.
2. Why brute-force sampling fails
- Increasing samples (to “hundreds/thousands per pixel”) would reduce noise.
- However, it’s not viable in real time:
- The author notes the implementation effectively hits 0 FPS at very high sample counts.
3. Horizon-based optimization (Horizon-based GI)
To reduce wasted rays, the approach is optimized using a horizon concept:
- Treat the depth buffer like a height field
- March across it in slices
- Track a horizon so rays/samples can be determined as blocked/hidden behind previously encountered depth
Benefit
- Each slice guarantees at least one valid hit (often more)
- This improves noise without proportional performance loss
Tradeoffs
- Different falloff behavior and implementation approximations compared to “true” methods
4. Prefiltering (blur sampled GI data)
The author adds prefilter blur to reduce perceived noise:
- Each sample contributes from a larger effective neighborhood
- This reduces visible noise but introduces a precision tradeoff
Performance trick
- Blur is implemented using smaller textures
- Multiple blur levels are generated cheaply (via their described “mapping” technique)
- This enables sampling at different blur levels without heavy cost
5. Denoising strategy: Temporal + Spatial
They use two denoising types:
- Spatial denoising
- Blurs/noise removal across neighboring pixels
- Can blur fine details
- Temporal denoising
- Accumulates across frames
- Doesn’t blur details if the camera stays steady
Ghosting problem & solution
- In games, cameras move almost constantly → temporal methods risk ghosting
- Solution: use motion vectors
- Reject incorrectly reprojected samples to reduce ghosting
Resulting rule of thumb
- Temporal denoising must be used sparingly
- Spatial denoising still remains necessary
6. Joint Bilateral Filter (edge-preserving denoise + guidance)
A joint bilateral filter is used to denoise while preserving edges:
- Standard bilateral weights depend on similarity
- The joint variant also uses guidance features:
- Depth
- Normals
Why depth/normals help
- In this description, depth and normals are low-noise features
- This allows stricter weighting without blurring geometry as much
Combined result
- Temporal + joint bilateral denoising produces a “pretty nice result”
7. Performance problem (still too slow)
Even after optimizations (including a “midm mapping optimization” they mention):
- Cost is about ~14 ms
- This is about 10× slower than the author’s target
8. Resolution reduction + upscaling
To cut cost while keeping output clean, the author reduces GI resolution:
- Render GI at quarter resolution
- Upscale using bilateral upscaling (edge-preserving)
- Compare high-res depth to low-res depth
- Weight how lower-res GI is applied based on depth edges
9. Improving upscale quality using Spherical Harmonics
The author notes the limits of depth-only guidance:
- Depth-only upscaling ignores some geometry edge detail
- Normals-only guidance was tested conceptually, but had issues:
- It can blur at surface boundaries when normals differ significantly
Chosen solution: Spherical Harmonics (SH)
They use Spherical Harmonics to represent lighting more expressively than a single scalar/value:
- SH conceptually models:
- Average brightness over a sphere
- Coefficients describing brightness variation with direction
This better represents directional lighting behavior and can improve how complex geometry contributes to lighting.
They reference a visual example (e.g., lighting detail on a “lion head” showcase/screenshot).
Additional notes / related features mentioned
- They compute Ambient Occlusion (AO) alongside GI “for basically free.”
- They mention that noise function choices and blending choices significantly affect results.
- The video concludes with before/after comparisons integrated into a real scene.
- Links are provided for Patreon, Discord, and GitHub in the description.
Main speakers / sources
- Primary speaker: the author of the “TurboGI Devlog” video (a graphics programmer working on GI for low-end hardware).
- Referenced external source/approach: general SSGI/global illumination concepts (e.g., path tracing and screen-space GI).
- Mentions an NVIDIA upscaling-era perspective, but no specific named technical paper is cited in the subtitles.