[Epic] Temporal pipeline: thin G-buffer, motion vectors, jitter, history #84

Open
opened 2026-09-27 05:44:58 +00:00 by backspace119 · 0 comments
Owner

Goal: the shared temporal machinery that TAA, FSR, and every RT denoiser (shadows, AO, GI) need. Build it once, correctly, GPU-driven.

Why this comes first

Today the RT soft shadows are 1 spp with fixed per-pixel noise and no accumulation (grainy); alpha/foliage edges shimmer; FSR is impossible without motion vectors. Every item below is consumed by at least two features.

Components (each a child ticket)

  1. Thin G-buffer from the depth pre-pass. The pre-pass already rasterizes every opaque/mask pixel once. Add MRT outputs: octahedral-encoded normal + roughness/metal (+ material/flags bits) and linear view depth. Forward lighting stays forward; this is side data for denoisers, SSAO/RTAO and TAA rejection. Key design decision - do this before anything else.
  2. Per-instance previous transforms. prev_model_matrix per instance (second SSBO or ring of the instance buffer, swapped per frame); teleport/region-crossing/shiftOrigin resets history. Spinning (target omega) objects use the previous time.
  3. Rigged previous positions. Double-buffer the pre-skin output (or keep previous palettes) so skinned avatars get correct motion.
  4. Motion vector pass. Written by the pre-pass (current vs previous clip position) for opaque/mask/static/rigged/terrain; camera-only fallback from depth for anything without per-object motion. Particles/alpha: reactive mask instead.
  5. Projection jitter. Halton(2,3) sub-pixel jitter on the main projection; unjittered copies for UI/overlays/picking/culling. Jitter-aware texture LOD bias.
  6. History resources. History colour (HDR, pre-tonemap), previous depth/normals, per-pixel history length; resize/teleport invalidation.
  7. Reactive / transparency mask. Alpha-blend, particles, water, animated textures flag pixels where history is unreliable.

Consumers (children)

  • #5 TAA (neighbourhood clamping, disocclusion, sharpen) -> replaces SMAA/FXAA as the default on capable GPUs.
  • #6 FSR (render-scale + upscale; needs MV + depth + reactive mask).
  • RT denoiser epic (temporal accumulation + spatial filter).
  • RT AO epic, RT GI epic.

Risks / notes

  • SL content is highly dynamic (animated textures, scripted motion, flexi); reactive mask quality decides whether TAA ghosts.
  • Mirrors/probe captures don't use jitter/history.
  • Feature-tiered: everything here is raster/compute, works on non-RT GPUs.

Size: L (6-8 tickets). Depends on: nothing. Blocks: #5, #6, denoiser, RTAO, RTGI quality.

**Goal:** the shared temporal machinery that TAA, FSR, and every RT denoiser (shadows, AO, GI) need. Build it once, correctly, GPU-driven. ### Why this comes first Today the RT soft shadows are 1 spp with fixed per-pixel noise and no accumulation (grainy); alpha/foliage edges shimmer; FSR is impossible without motion vectors. Every item below is consumed by at least two features. ### Components (each a child ticket) 1. **Thin G-buffer from the depth pre-pass.** The pre-pass already rasterizes every opaque/mask pixel once. Add MRT outputs: octahedral-encoded normal + roughness/metal (+ material/flags bits) and linear view depth. Forward lighting stays forward; this is side data for denoisers, SSAO/RTAO and TAA rejection. *Key design decision - do this before anything else.* 2. **Per-instance previous transforms.** `prev_model_matrix` per instance (second SSBO or ring of the instance buffer, swapped per frame); teleport/region-crossing/`shiftOrigin` resets history. Spinning (target omega) objects use the previous time. 3. **Rigged previous positions.** Double-buffer the pre-skin output (or keep previous palettes) so skinned avatars get correct motion. 4. **Motion vector pass.** Written by the pre-pass (current vs previous clip position) for opaque/mask/static/rigged/terrain; camera-only fallback from depth for anything without per-object motion. Particles/alpha: reactive mask instead. 5. **Projection jitter.** Halton(2,3) sub-pixel jitter on the main projection; unjittered copies for UI/overlays/picking/culling. Jitter-aware texture LOD bias. 6. **History resources.** History colour (HDR, pre-tonemap), previous depth/normals, per-pixel history length; resize/teleport invalidation. 7. **Reactive / transparency mask.** Alpha-blend, particles, water, animated textures flag pixels where history is unreliable. ### Consumers (children) - #5 TAA (neighbourhood clamping, disocclusion, sharpen) -> replaces SMAA/FXAA as the default on capable GPUs. - #6 FSR (render-scale + upscale; needs MV + depth + reactive mask). - RT denoiser epic (temporal accumulation + spatial filter). - RT AO epic, RT GI epic. ### Risks / notes - SL content is highly dynamic (animated textures, scripted motion, flexi); reactive mask quality decides whether TAA ghosts. - Mirrors/probe captures don't use jitter/history. - Feature-tiered: everything here is raster/compute, works on non-RT GPUs. **Size:** L (6-8 tickets). **Depends on:** nothing. **Blocks:** #5, #6, denoiser, RTAO, RTGI quality.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
backspace119/Slipstream#84
No description provided.