Feature: GPU occlusion culling (Hi-Z) in the compute cull pass #167
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#167
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?
The Vulkan renderer currently culls only by frustum (and distance/size) in
clean_cull.comp. Everything inside the view frustum is drawn, even when it's completely hidden behind walls, terrain, or other buildings. In dense sims and interiors, most of the submitted geometry is hidden this way, and we pay for it in the depth prepass, pass1 and shadow passes (see #123: depth prepass + pass1 ~21 ms on a GTX 1080 Ti).Proposal
Add GPU-driven occlusion culling to the existing compute cull, in the standard two-phase Hi-Z form:
Details / constraints
RenderVKOcclusionCull) with a debug view/stat showing instances tested / occluded per phase, so wins and false-occlusion bugs are measurable.drawIndirectCount.Measure
Compare against a baseline on the dense test sims:
Related: #123 (geometry cost), #98 (low-end hardware).
Status check (verification sweep): the feature is implemented and shipped (v0.12.0-beta.6 / v1.0.0-beta.1):
09ada3cb38,ea5e528f0f);4e1d35d404,5d1c1b4775), with counters and GPU sub-marks.Still open: both are off by default ("until benchmarked"). The Measure section is outstanding: prepass / pass1 / shadow timings on the dense test sims and a no-popping check. Then decide the default.
Ticket audit 2026-10-07: done and shipped in 1.0.0 Beta 6. Hi-Z and two-phase occlusion, on by default (
09ada3cb38,ea5e528f0f,4e1d35d404,cf18746620). If you still see the problem on the current beta, please reopen or file a new report.