You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bloom's current TAA path writes full-output-resolution history, but reconstructs each fractional-resolution current frame with a 5-tap Catmull-Rom filter and then applies a conventional temporal blend/neighborhood clamp. The default renderer shades at 0.75 scale and used a strong final unsharp mask to cover reconstruction softness.
The result is materially better than the former 0.50 default, but the rich NVIDIA Bistro scene still exposes the remaining gap:
fine geometry and textures read as pixelated or soft instead of photographic;
high-contrast silhouettes can acquire dark/bright sharpen contours that read as cartoon outlines;
subpixel detail, thin rails/wires, alpha-tested foliage, normal-map highlights, and specular edges do not retain native-like stability under movement;
raising render scale to 1.0 helps image quality but costs the frame time the reconstruction system is supposed to save.
This is not generally caused by low-resolution source art. Bistro's authored texture set is predominantly 1K-4K, is mipmapped, trilinearly filtered, and uses 16x anisotropy on capable hardware. The missing component is a real temporal super-resolution/reconstruction contract comparable in goals to UE TSR, not a stronger sharpen filter.
timestamped GPU sum mean / p95: 56.56 / 63.55 ms (sum overlaps; use pass deltas, not this value as wall time)
TAA pass: 1.58 ms
final composite: 1.47 ms
main HDR: 9.44 ms
bloom: 14.42 ms
The SSGI-stabilized matched run at the same static camera measured wall 19.13 ms, GPU sum 55.94 ms, TAA 1.42 ms, and composite 1.30 ms; run-to-run variance is material, so use multiple alternating pairs for performance claims.
Outcome
A renderer-owned temporal super-resolution path that reconstructs fractional-resolution shading into stable native-output detail without haloing, ghosting, or dependence on aggressive global sharpening. The raylib/Unity-simple contract remains one quality preset or one API call; applications do not author per-pass plumbing.
Do not market the result as UE-equivalent solely because it has a temporal history. Qualify it against native output and motion sequences.
Required reconstruction contract
Resolution and jitter
Maintain explicit input/render and output/display extents in every reconstruction calculation.
Use a documented low-discrepancy jitter sequence whose sample spread is correct in input-pixel and output-pixel units at every supported scale.
Reset or remap history correctly on scale changes, output-size changes, FOV changes, cuts, and projection changes.
Choose a texture LOD/mip-bias policy appropriate for reconstruction scale so authored texture detail reaches the input without uncontrolled aliasing.
camera cut, FOV step, render-scale step, and output resize;
moving rigid and skinned geometry;
animated alpha-tested foliage and reactive transparent/refraction content;
dark interior looking toward bright exterior and emissive on/off;
specular/roughness sweep and minified normal maps;
web/fallback adapter without optional native features.
Store sequences or deterministic per-frame metrics, not only final settled images.
Acceptance criteria
At 0.75 input scale, fixed Bistro/Sponza stills are materially closer to native 1.0 than the current Catmull-Rom TAAU baseline by luminance SSIM, RMSE, OKLab delta, and Sobel-edge delta; attach all four metrics and images.
No hard-silhouette dark/bright sharpen contour is visible. The existing sharpen fixture must keep mean luma delta at or below 1.0 on at least 100 hard-edge pixels while changing at least 2% of ordinary-detail samples.
Slow-pan stable-region mean flicker does not exceed native TAA by more than the approved tolerance, and coherent flicker/moire regions are explicitly bounded.
Fast motion/cuts leave no visible stale-history trail beyond the approved reset/recovery window.
Thin wires, rails, alpha-tested foliage, and repeated floor/cobble patterns remain continuous and do not alternate between sharp/soft phases.
0.75 reconstruction preserves the performance advantage over native 1.0 on the qualification GPU.
Multiple alternating frozen-binary A/B pairs show no statistically significant full-frame CPU/GPU regression versus the current 0.75 path; report p50/p95 and per-pass timings. If the reconstruction pass itself grows, offsetting in-scope savings must be real and measured, not inferred from timestamp noise.
Steady state adds no per-frame allocation, pipeline creation, bind-group creation, graph compile, or CPU-GPU synchronization.
Added persistent/transient memory is fully reported and bounded by quality tier; resize/scale cycling does not leak.
Native Metal, Linux Vulkan, and web/fallback paths pass their supported corpus; unsupported capability choices degrade explicitly and truthfully.
Public usage stays one preset/API call, with individual expert overrides optional.
Likely files
native/shared/src/renderer/shaders/post.rs
native/shared/src/renderer/postfx_chain.rs
native/shared/src/renderer/formats.rs
native/shared/src/renderer/temporal_reactive.rs and temporal diagnostics
Parent: #126
Related: #135, #56, #128
Problem
Bloom's current TAA path writes full-output-resolution history, but reconstructs each fractional-resolution current frame with a 5-tap Catmull-Rom filter and then applies a conventional temporal blend/neighborhood clamp. The default renderer shades at 0.75 scale and used a strong final unsharp mask to cover reconstruction softness.
The result is materially better than the former 0.50 default, but the rich NVIDIA Bistro scene still exposes the remaining gap:
This is not generally caused by low-resolution source art. Bistro's authored texture set is predominantly 1K-4K, is mipmapped, trilinearly filtered, and uses 16x anisotropy on capable hardware. The missing component is a real temporal super-resolution/reconstruction contract comparable in goals to UE TSR, not a stronger sharpen filter.
Current measured baseline
Apple M1 Max / Metal, rich 551-unique-mesh Bistro profile, 1600x900 output, 0.75 render scale, quality preset 3, 60 warm-up + 120 measured uncapped frames:
The SSGI-stabilized matched run at the same static camera measured wall 19.13 ms, GPU sum 55.94 ms, TAA 1.42 ms, and composite 1.30 ms; run-to-run variance is material, so use multiple alternating pairs for performance claims.
Outcome
A renderer-owned temporal super-resolution path that reconstructs fractional-resolution shading into stable native-output detail without haloing, ghosting, or dependence on aggressive global sharpening. The raylib/Unity-simple contract remains one quality preset or one API call; applications do not author per-pass plumbing.
Do not market the result as UE-equivalent solely because it has a temporal history. Qualify it against native output and motion sequences.
Required reconstruction contract
Resolution and jitter
Reprojection inputs
History confidence and locking
Reconstruction and anti-aliasing
Reactive/composition coverage
Sharpening
Debugging and telemetry
Capture-only views:
Telemetry:
Capture-only diagnostics must add zero persistent resources and must be released after readback.
Required corpus
At minimum automate matched native and reconstructed sequences for:
Store sequences or deterministic per-frame metrics, not only final settled images.
Acceptance criteria
Likely files
Non-goals