Video summary

Global Illumination for Poor People | TurboGI Devlog

Main summary

Key takeaways

Technology

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.

Original video