fix(examples): disable SSGINode temporal filtering under FSR3 - #14
Merged
Conversation
three's SSGINode.useTemporalFiltering defaults to true — a 6-frame rotating sample pattern whose own docs require a real TRAA to resolve. FSR3-as-resolver does not satisfy that contract: the per-frame GI swing inflates the variance clip at silhouettes and ghost-streaks off moving edges (GPU-verified A/B at render scale 1 and 2, examples 06 + 09). Switch both SSGI examples to three's documented no-TRAA recipe — static pattern + DenoiseNode — with FSR3 converging the residual noise, and correct the example comments that claimed FSR3 resolves the rotation. CLAUDE.md gains the landmine note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The SSGI examples (06, 09) show ghost streaks trailing off moving silhouettes — reported against the deployed gallery and reproduced headlessly on GPU at both render scale 1 and 2. The streaks are gated on SSGI being enabled.
Root cause
three's
SSGINode.useTemporalFilteringdefaults totrue: it rotates the GI sampling pattern on a 6-frame cycle, and its own doc comment states that mode "requires the usage ofTRAANode". Our examples deliberately have no TRAA — FSR3 is the temporal resolver — but FSR3 does not satisfy that contract: the per-frame GI swing inflates the variance-clip AABB exactly where GI gradients are strong (silhouette edges), so stale history survives the clip and streaks out of moving edges.Fix
Set
useTemporalFiltering = falsein both examples — three's documented recipe for the no-TRAA case (static pattern +DenoiseNode, which both examples already run) — and correct the example header comments that claimed FSR3 resolves the rotation. CLAUDE.md gains the landmine note so this doesn't regress.Verification (headless Chrome + CDP, Apple Metal)
lint/typecheckpass; changes are examples + docs only.Note: the
fix:type will auto-publish a patch release on merge even though the npm package content is unchanged (examples aren't packaged) — flagged in review discussion, accepted.🤖 Generated with Claude Code