TAA: shimmering / jitter on water and distant mesh #204
Labels
No labels
amd
avatars
bug
builder
cannot-reproduce
crash
epic
feature
from-viewer
gl-removal
known-limitation
monitoring
parity
perf
platform
priority
critical
priority
high
priority
low
priority
medium
provenance
rendering
rt
status
in-progress
status
testing
status
up-next
triage
ui
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sky_line/Slipstream#204
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
With TAA on (RenderFSAAType 3, and upscaling), water and mesh at far distances shimmer and jitter instead of settling to a stable image. Reported by the user in-world on the current build (after the #182 upscaler work).
Likely causes to investigate
Water
Distant mesh
taaLodBias) makes distant textures sharper. Sharper textures plus jitter produce more temporal aliasing. Compare with the bias off.RenderDynamicLOD/ LOD selection by distance can flip per frame near a threshold, making geometry pop rather than shimmer. Rule it out with a fixed LOD.To do
Related: #182 (TAA upscaler), #188 (reversed-Z / precision), #84 (temporal pipeline).
Additional report: moving avatars sometimes ghost (trail a faint copy) with TAA on.
Things to check for this one:
prev_skinned(mPrevSkinPos, written by the pre-skin whenu_previs set). Check whether the previous-frame skinned positions are valid for every rigged instance every frame. A rigged instance's skinned range (rig_dst) is reallocated by the cull each frame, soprev_v[dst]must be written from the previous palette for the same instance in the current range, not read from last frame's buffer at a range that now belongs to someone else. Also check instances that were culled last frame, which have no history.mvFrameis false (no pre-pass) leave the motion target cleared to 0. A moving avatar then reprojects with camera-only motion and drags history.mPrevJoints. When a joint-table slot comes back (copyVKAvatarAlive), check that the previous joints are reset so motion isn't computed from a stale pose.Shipped in a published release and tested; closing (testing-lane sweep 2026-10-11).