Graphics & Engine•Study date: August 15, 2026•Printable brief ↗Performance Study

Published by Sean Carr

Culling at Scale: Eliminating Edge Pop and Shadow Desync

Crowd rendering telemetry: how light-fit hoisting cut frame recording by 12.5x and SMBB eliminated cull-pop.

Executive Brief

At a Glance

Whole-Frame Latency

31.07 -> 11.20 ms

Whole-frame execution dropped by 64% after hoisting crowd light-fit calculations.

Shadow Recording (B7)

9.60 -> 0.77 ms

Shadow pass command recording accelerated 12.5x by eliminating redundant light-matrix rebuilds.

Frustum Cull-Pop

0 Artifacts

Phase-independent SMBB union volumes eliminated frustum edge culling pop.

Renderables Scanned

3,409 / frame

B6 visibility prep successfully culled non-visible instances across deep crowd arrays.

Empirical Findings TableScroll table →
Telemetry MetricMeasured ValueContext & Observability
Whole-Frame Latency31.07 -> 11.20 msWhole-frame execution dropped by 64% after hoisting crowd light-fit calculations.
Shadow Recording (B7)9.60 -> 0.77 msShadow pass command recording accelerated 12.5x by eliminating redundant light-matrix rebuilds.
Frustum Cull-Pop0 ArtifactsPhase-independent SMBB union volumes eliminated frustum edge culling pop.
Renderables Scanned3,409 / frameB6 visibility prep successfully culled non-visible instances across deep crowd arrays.

Executive Summary & Core Finding

In dense crowd rendering, standard frustum culling frequently introduces edge pop and shadow desynchronization. In Atlas Engine crowd benchmarks across 1,024 animated instances, hoisting light-fit calculations reduced whole-frame time by 64% (31.07 ms to 11.20 ms) and shadow recording by 12.5x, while phase-independent union bounding volumes eliminated cull-pop artifacts entirely.

Method

1

Crowd scaling benchmarks executed across 12, 256, and 1,024 animated crowd instances in Crown and Claim.

2

Instrumented Vulkan command buffer recording and visibility preparation stages (B6 and B7 brackets).

3

Tested phase-dependent bounding boxes against phase-independent Static Mesh Bounding Box (SMBB) union volumes across all atlas animation phases.

4

Monitored frustum edge transitions and shadow caster retention under dynamic camera rotation.

Empirical Telemetry

What We Measured

Crowd rendering telemetry at 1,024 animated instances

Whole-Frame Latency

31.07 -> 11.20 ms

Whole-frame execution dropped by 64% after hoisting crowd light-fit calculations.

Shadow Recording (B7)

9.60 -> 0.77 ms

Shadow pass command recording accelerated 12.5x by eliminating redundant light-matrix rebuilds.

Frustum Cull-Pop

0 Artifacts

Phase-independent SMBB union volumes eliminated frustum edge culling pop.

Renderables Scanned

3,409 / frame

B6 visibility prep successfully culled non-visible instances across deep crowd arrays.

Experimental Notes & Observability Details

  • Phase-dependent bounding boxes caused visible mesh popping near frustum boundaries when animated extremities crossed culling planes.
  • Hoisting BuildGpuLightViewProj crowd calculations out of the per-instance recording loop produced the largest single recording acceleration in the engine's telemetry history.
Interpretation & Working Hypotheses

What We Think It Suggests

  • Hoisting light-fit view projection calculations out of crowd instancing loops provides substantial CPU and GPU command-recording savings.
  • Phase-independent union bounding volumes prevent frustum edge popping without the overhead of dynamic per-phase bounding updates.
Methodology Boundaries

Limits

  • Engine specific: Implemented and profiled within the Atlas Engine Vulkan renderer; other rendering pipelines with different batching strategies may see different ratios.
  • Evaluated up to 1,024 instances: Larger crowds (10,000+ instances) will require GPU-driven indirect culling rather than CPU bounds testing.

Detailed Analysis & Field Observations

Rendering large crowds of animated characters in real time presents dual challenges: CPU command buffer recording bottlenecks and visual culling artifacts. As instance counts scale into the thousands, naive visibility loops can overwhelm CPU frame budgets before GPU rasterization even begins.

In our August 2026 crowd scaling benchmarks on Atlas Engine, rendering 1,024 animated crowd instances initially consumed 31.07 ms per frame, causing severe frame drops. Profiling revealed that the B7 shadow pass was consuming 9.60 ms of CPU recording time alone.

The root cause was redundant work inside the per-instance loop: the engine was recalculating the crowd-caster light-fit projection matrix (BuildGpuLightViewProj) for every single character. By hoisting this calculation outside the crowd loop and binding the light matrix once per shadow cascade, shadow recording dropped from 9.60 ms down to 0.77 ms, a 12.5x acceleration that reduced whole-frame time by 64% (from 31.07 ms to 11.20 ms).

Concurrently, visual testing revealed an edge-popping defect (BUG-0004): characters near the edge of the camera viewport would pop in and out of existence during walk cycles. This occurred because bounding boxes were computed dynamically based on the current animation phase. When an arm or leg swung past the bounding threshold, the instance failed the frustum test.

We resolved this by implementing phase-independent Static Mesh Bounding Box (SMBB) union volumes that encompass all possible animation phases. In subsequent stress testing across 3,409 visibility candidates per frame, frustum edge popping dropped to zero artifacts.

Profiling in this test showed that adding hierarchical prefilters in the culling stage cannot resolve unpartitioned residency sweeps. Effective crowd rendering requires separating view-matrix computation from instance recording and sizing bounding volumes to cover total motion envelopes.