Make held animation frames free: skip pre-skin / weld / BLAS refit for avatars whose pose was not re-evaluated (pelvis-local pre-skin) #632
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#632
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?
Exploration. Proposed by the 2026-10-10 GPU pipeline audit; not yet implemented.
Idea
Pre-skinning writes its output relative to the eye, and the eye moves every frame. So identical poses still produce different output every frame, and nothing can be skipped exactly. Instead:
Why
Measured 2026-10-10 in a ~62-avatar crowd:
c_preskin~1.5-1.7 ms,c_rigweld~0.6 ms andc_blas_refit~1.1-1.3 ms per frame. Avatars standing still (held frames are already counted:avHeldFrame~23-59) would cost nothing. This is the largest remaining GPU lever for crowds.Open questions
RenderVKPreskinPrevHistorystores positions only).RenderVKAvatarAnimScreenLODand the refit throttle.Measure
GPU sub ms/frame line (
c_preskin,c_rigweld,c_blas_refit,total=) in the same crowded sim, before and after.Related: #258 (cheaper rigged skinning), #616, #617, #564.
Explore: pre-skin in pelvis-local space + skip items whose joint palette is unchanged (cut preskin / weld / BLAS refit for idle avatars)to Make held animation frames free: skip pre-skin / weld / BLAS refit for avatars whose pose was not re-evaluated (pelvis-local pre-skin)Re-scoped 2026-10-10
Owner point: nearly every visible avatar has idle motion every frame (breathing, head look-at, eye saccades, blinks, AO stand sway), so "skip when the palette is bitwise unchanged" rarely fires for nearby avatars.
The real skips come from frames where we didn't re-evaluate animation:
In the ~62-avatar crowd,
avAnimEval~23/62 means about half to two-thirds of avatar-frames are held.Scope:
Expected: ~1-1.5 ms of the ~3-3.5 ms (preskin + weld + refit) in crowds, almost all from distant avatars; close-up crowds save little. The weld cost is handled separately by #641 (pairs decided at rest pose).
Started 2026-10-10 together with #641 (rest-pose weld pairs), as one combined agent pass.
Shipped in 1.3.0 Beta 2: avatars on held animation frames reuse an avatar-local skin cache, and the ray-tracing BLAS refit is skipped for them.