[rendering] Cluster LOD: skinned arena overflows in crowds -> clusters silently not drawn (missing avatar parts, popping eyes) #1010

Open
opened 2026-10-24 02:24:29 +00:00 by sky_line · 0 comments
Owner

At a pony party (~87 avatars on the cluster path, CLOD on at startup, RTX 5090) avatars and animesh had missing parts, and eyes popped in and out. Cause: Cluster LOD skin: skinned arena at its cap (RenderVKClusterSkinArenaMB 256): N clusters were not drawn. It fired 4567 times in ~8 min, i.e. nearly every frame, with on average ~8.9k clusters not drawn per frame (max 40k). Which clusters lose changes frame to frame, so small meshes like eyes flicker. Raising RenderVKClusterSkinArenaMB to 1024 live fixed it.

This is a pony crowd (100-400k verts per avatar). Human avatars are often well over 1M verts each, so any sizeable human crowd will blow through even 1024 MB.

Root problems

  • The arena is sized for the worst case: 2 KB per cluster of every DAG level of each admitted avatar (an upper bound of any cut). It should be sized for the clusters actually in the cut.
  • On overflow, clusters are skipped silently and arbitrarily. The setting text still says "avatars past the cap stay on the legacy path", but with CLOD owning rigged meshes there is no legacy fallback, so they just vanish.
  • The warning says ONCE but logs every frame.

Fix

  1. Size by the cut. Allocate skinned slots (current + previous positions for motion vectors) only for selected, drawn clusters, from a pool that is reused frame to frame: allocation follows cut changes, slots are freed when clusters leave the cut, and previous positions are handled for newly admitted clusters (motion vectors = 0 on the first frame). Expect the footprint to scale with screen error, not with avatar complexity.
  2. Default capacity from VRAM, not a fixed 256 MB. It follows the soft pressure rules: the effective cap drops temporarily under VRAM pressure and restores afterwards.
  3. Never drop arbitrary clusters. When the cut doesn't fit, coarsen the LOD (raise the tolerance) for the least important avatars (far, small on screen, not own avatar) until it fits, applied per avatar so an avatar is always whole: all its meshes at a coarser level, never a random subset of its parts. Feed this into the existing cluster LOD controller (vram pressure input) so it is smooth, with hysteresis.
  4. Audit the other cluster pools for the same failure mode: the RT rig arena (116736 slots cap / 93763 live, 80% at this party), the page pool ("no pool room for root pages yet" at login), the CLAS budgets, and the draw/command buffers. Each must degrade LOD rather than drop geometry, and report live / cap / peak.
  5. Logging: a real once-per-episode warning plus a periodic summary (dropped = should be 0; degraded avatars; arena live/cap/peak). Fix the setting description.

Test: pony party and a large human crowd with CLOD on at startup and default settings: no missing parts or popping eyes; the arena stat stays under the cap; VRAM is reported.

At a pony party (~87 avatars on the cluster path, CLOD on at startup, RTX 5090) avatars and animesh had **missing parts**, and **eyes popped in and out**. Cause: `Cluster LOD skin: skinned arena at its cap (RenderVKClusterSkinArenaMB 256): N clusters were not drawn`. It fired 4567 times in ~8 min, i.e. nearly every frame, with on average ~8.9k clusters not drawn per frame (max 40k). Which clusters lose changes frame to frame, so small meshes like eyes flicker. Raising `RenderVKClusterSkinArenaMB` to 1024 live fixed it. This is a pony crowd (100-400k verts per avatar). Human avatars are often well over 1M verts each, so any sizeable human crowd will blow through even 1024 MB. **Root problems** - The arena is sized for the worst case: 2 KB per cluster of **every DAG level** of each admitted avatar (an upper bound of any cut). It should be sized for the clusters actually in the cut. - On overflow, clusters are skipped silently and arbitrarily. The setting text still says "avatars past the cap stay on the legacy path", but with CLOD owning rigged meshes there is no legacy fallback, so they just vanish. - The warning says ONCE but logs every frame. **Fix** 1. **Size by the cut.** Allocate skinned slots (current + previous positions for motion vectors) only for selected, drawn clusters, from a pool that is reused frame to frame: allocation follows cut changes, slots are freed when clusters leave the cut, and previous positions are handled for newly admitted clusters (motion vectors = 0 on the first frame). Expect the footprint to scale with screen error, not with avatar complexity. 2. **Default capacity from VRAM**, not a fixed 256 MB. It follows the soft pressure rules: the effective cap drops temporarily under VRAM pressure and restores afterwards. 3. **Never drop arbitrary clusters.** When the cut doesn't fit, coarsen the LOD (raise the tolerance) for the least important avatars (far, small on screen, not own avatar) until it fits, applied per avatar so an avatar is always whole: all its meshes at a coarser level, never a random subset of its parts. Feed this into the existing cluster LOD controller (vram pressure input) so it is smooth, with hysteresis. 4. **Audit the other cluster pools for the same failure mode:** the RT rig arena (116736 slots cap / 93763 live, 80% at this party), the page pool ("no pool room for root pages yet" at login), the CLAS budgets, and the draw/command buffers. Each must degrade LOD rather than drop geometry, and report live / cap / peak. 5. **Logging:** a real once-per-episode warning plus a periodic summary (dropped = should be 0; degraded avatars; arena live/cap/peak). Fix the setting description. Test: pony party and a large human crowd with CLOD on at startup and default settings: no missing parts or popping eyes; the arena stat stays under the cap; VRAM is reported.
sky_line added this to the Slipstream project 2026-10-24 02:24:29 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#1010
No description provided.