[Epic] Cluster LOD (meshlets + DAG, Nanite-style) for avatars, extensible to dense static mesh #642
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#642
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 / epic. Cluster-based continuous LOD (meshlets + a cluster DAG, Nanite-style) for avatars first, designed so it can extend to dense static mesh later.
Why
Rigged avatars dominate crowd cost:
Cluster LOD gives per-cluster, screen-error-driven detail with crack-free transitions. Vertex work then follows what's visible on screen, not what the creator uploaded.
Concept
Open questions / risks
Measure first
In a crowded venue, record rigged vertex counts per frame, plus
c_preskin/c_rigweld/c_blas_refit/g_gbuf_rigged, against the estimated vertex count a 1-px-error cut would select. Proceed if the cut is well below today's submitted vertices.Related: #561, #612, #613, #611, #618, #632, #641, #256, #296, #581, #98, #274.
Design decision: always on; pressure only moves the tolerance
Always active. The DAG cut is how the mesh is drawn, not a pressure response. At ~1 px of error a cut looks the same as full detail at that distance, and drawing more is pure waste (tiny-triangle quad overdraw, plus skinning, BLAS and shadow work that changes nothing on screen). Most of the crowd win comes in the comfortable case: distant avatars drop to a few percent of their vertices with no visible change.
Pressure is one continuous knob: the pixel tolerance. Normal ~1 px; under GPU-time or VRAM pressure 2 -> 4 -> 8 px. It degrades smoothly and everywhere at once.
"1 px" is not zero error. Things to handle:
Streaming, older hardware, and the rollout rules
Getting clusters onto the GPU without costing FPS
The frame never waits for geometry: if a finer page isn't resident yet, the cut uses its coarser parent for a frame or two.
Expected fixed cost: ~0.2-0.5 ms/frame for selection + culling over tens of thousands of clusters. A small loss in an empty scene, a large win in a crowd.
Older cards (RTX 20 / RX 6000)
On balance a help, most of all on older cards (vertex-, tiny-triangle- and VRAM-limited).
Measurements to take
Rollout rules (owner decision)
RenderVKClusterLOD, default off. The current rigged LOD controller (#561 / #613) stays fully functional with the toggle off. If RT on first-generation cards can't be made decent with clusters, the old controller remains the path that gives those users decent RT in crowds.Work groups
Sub-tickets below; wave 0 lands the shared contract, waves 1 and 2 build on it.
Sub-tickets