Octree removal 5: replace object-cache interest management (VOCache partition cull) #479
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#479
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?
Part of #474. From the 2026-10-06 audit: the octrees are still built and maintained every frame, but almost nothing reads them. Rendering, culling, world picking, LOD, texture priority and lights all run on our own systems.
The core remaining dependency.
LLVOCachePartition::cull(llvocache.cpp ~1011-1076) →region->addVisibleGroup→updateVisibleEntries(llviewerregion.cpp ~1409-1522) →createVisibleObjectsdecides which cached objects get instantiated. It runs every frame fromdriveVulkanWorldVOCacheCull(llappviewer.cpp ~6578-6645).Replace with a flat per-region (or grid-binned) cache-entry container that keeps the same rules:
checkProjectionArea);sRearFarRadius);calcSceneContributionpriority;Eviction already uses our own
killCachedObjectsBeyond. LL's own comment (llvocache.cpp ~555) calls this system redundant with the object cache.Verify with object-count and load-order parity in a busy region, and with the Zindra flight test (#469).
Design (agreed 2026-10-06)
Container: a CPU flat grid, not GPU
Cull
Front:
checkProjectionArea, the same pixel thresholds).Per-entry is more precise than today's per-group octree test.
Back: a sphere query within
sRearFarRadius, time-sliced likeselectBackObjectstoday.Reused unchanged:
mLODPeriod/ idle hash) and cull history;calcSceneContribution, the waiting list, creation time-slicing (sNewObjectCreationThrottle);killCachedObjectsBeyondeviction.Look-ahead (separate toggle, off by default at first)
While moving fast (for example the Zindra flight, #469), bias the front cull and priority toward the direction of travel (velocity x a second or two). Judge it only by outcome metrics, on vs off, so it never contaminates the core change.
Validation
Light invariant checks (debug setting, sampled): no root entry that passes the rules is left unselected without a logged reason, and nothing selected fails every rule.
Outcome metrics (logged, the same for the old and new system, switchable by a setting in one build):
Routes: a busy sim, teleports, region crossings, fast flight.
Detached culling camera (debug switch). The owner wants to see the culling directly:
Rollout
Shipped in 1.1.0 Beta 9 (v1.1.0-beta.9).