ReadonlynameHuman-readable identifier used in graph node labels and error messages.
Staticcreateradius — world-space sampling radius.
bias — tangent angle bias in radians; horizons within this much of
the tangent plane are treated as unoccluded (suppresses
shimmer on flat surfaces).
strength — multiplier on the averaged occlusion before subtraction
from 1 (higher -> darker).
Insert the pass into graph for one frame. Implementations call
graph.addPass(name, type, b => { ... }) exactly once and use the
supplied PassBuilder to declare reads, writes, transient
resources, and the execute callback.
Graph being built this frame.
Pass-specific dependency record (handles, scene data, etc.).
Pass-specific output record (typically a set of handles downstream passes will consume).
Release every long-lived GPU resource owned by the pass (pipelines, persistent uniform buffers, samplers, BGLs). Called by the factory or application during teardown. Default implementation is a no-op.
HBAO+ (NVIDIA Horizon-Based AO, plus variant).
For each of N screen-space directions (default 8), march a few steps from the pixel and track the maximum "horizon" angle above the tangent plane. The unoccluded contribution from that direction is
max(sin(h) - sin(bias), 0); AO is the averaged occlusion across all directions.The "+" denotes per-pixel jitter (we tile a 4×4 noise texture) and an angle bias to suppress self-occlusion on flat surfaces. Compared to GTAO, the integral is approximate (no projected-normal correction, no cosine weighting) — cheaper, sharper at creases, and slightly more prone to directional banding on grazing surfaces. Compared to classic SSAO, horizon tracking eliminates the noisy variance of independent sample occlusion tests.
Output goes through the same separable bilateral / box-blur pipelines as SSAO so the AO factor is interchangeable downstream.