Inspect the relationship#
Rotate a camera volume, switch visibility submission, and inspect an illustrative geometry budget.
Spend work on what you can see This illustration uses canvas. The explanation below describes the same process.
Try these experiments#
- Rotate the camera and narrow its field of view. The accepted point instances change with the viewing volume.
- Disable frustum culling. Outside-view instances are submitted and marked with an orange outline.
- Disable distance LOD. The illustrative triangle budget rises even when the submitted instance set stays the same.
What the illustration calculates#
The top-down view tests each point center against near/far distances and horizontal perspective limits. LOD selects one of three declared geometry costs from distance. The readout is a sum of those illustrative costs, not a measured frame time or hardware benchmark. A production engine tests conservative bounds in a full three-dimensional frustum. Center-point tests can reject an object whose center is offscreen but whose surface is visible. A projected-size or error-based LOD policy also accounts for object size; distance alone is only the teaching proxy here.
Connect it to the renderer#
MeshAsset owns local bounds and LOD data. Scene transforms produce conservative world bounds. VisibilitySystem or a GPU visibility pass selects instances. RenderWorld preserves identities so a capture can relate a culled draw back to its scene object. Occlusion adds another question: is a bound hidden behind depth already known to the renderer? A hierarchical depth buffer can answer conservatively. Reusing old depth needs care for moving cameras and newly visible objects; incorrect conservatism creates visible popping.
The point-model test
near <= cameraZ <= far
abs(cameraX) <= cameraZ * tan(horizontalFov / 2)The native renderer instead tests bounds against frustum planes, with an appropriate plane convention and margin. LOD hysteresis reduces repeated switching at thresholds.
What to inspect when it is wrong#
An object vanishing near an edge suggests bounds or plane sign errors. Rapid LOD switching suggests missing hysteresis. Skinned limbs disappearing suggests bind-pose-only bounds. A slower result after adding culling can mean the original workload was too small to justify the extra work. Read optimization and GPU-driven rendering.