Taos API Reference
    Preparing search index...

    Interface VxgiFeatureOptions

    interface VxgiFeatureOptions {
        requireVolume?: boolean;
        ddgi?: boolean | Partial<DDGISettings>;
        instancedMeshBatches?: () => readonly SkinnedInstancedBatch[];
        resolution?: number;
        center?: Vec3;
        halfSize?: Vec3;
        strength?: number;
        injectStrength?: number;
        bounceStrength?: number;
        emissiveStrength?: number;
        temporalAlpha?: number;
        blur?: boolean;
        aoStrength?: number;
        revoxelizeMode?: "auto" | "always";
    }

    Hierarchy

    • Partial<VXGISettings>
      • VxgiFeatureOptions
    Index

    Properties

    requireVolume?: boolean

    When true, the feature only produces GI if the scene contains an enabled VoxelGiVolume (Godot-VoxelGI-node behavior) — otherwise it's inert. The editor sets this so VXGI activates only when a volume is authored.

    ddgi?: boolean | Partial<DDGISettings>

    Opt into the DDGI output stage: VXGI still builds the voxel grid, but instead of its per-pixel cone trace the indirect is resolved from an irradiance-probe volume that traces that grid (smoother, cheaper per pixel, less leaky). true for defaults, or a DDGISettings subset to size the probe volume. NOTE: VXGI's cone+blur still run (their result is unused) — decoupled by design; a future grid-only flag on VXGIPass can skip them.

    instancedMeshBatches?: () => readonly SkinnedInstancedBatch[]

    Instanced static-mesh batches to voxelize in addition to frame.opaque — the editor renders large levels as instanced-skinned (identity joints), which the mesh-draw voxelizer doesn't see. Supply the same batches the SkinnedGeometryFeature renders so the level gets bounce lighting.

    resolution?: number

    Voxels per axis (cube). Anisotropic VXGI keeps 6 directional grids + a 24-u32/voxel atomic accumulator, so memory grows fast — 64 is a good default, 96 the practical ceiling.

    center?: Vec3

    World-space center of the voxel grid box.

    halfSize?: Vec3

    Half-extent of the grid box on each axis (spans center ± halfSize).

    strength?: number

    Overall multiplier on the cone-traced indirect diffuse (frame.ssgi).

    injectStrength?: number

    Multiplier applied to injected radiance before voxelization.

    bounceStrength?: number

    Multi-bounce feedback strength (Godot VoxelGI "propagation"). Each frame the voxelizer re-gathers last frame's grid and re-injects albedo·indirect·this, so light bounces multiple times (converges over a few frames). 0 = single bounce only. ~1 ≈ Godot's default propagation.

    emissiveStrength?: number

    Multiplier on injected emissive radiance (Godot VoxelGI "emission energy"). Material emissive is already HDR; raise this to make glowing surfaces light the room more strongly via GI. 1 = material value, 0 = ignore emissive.

    temporalAlpha?: number

    World-space temporal blend weight for the new frame's radiance, 0..1. Lower = smoother + more stable but laggier; 1 = no temporal history.

    blur?: boolean

    Edge-aware blur of the GI buffer to smooth voxel blockiness. Default true.

    aoStrength?: number

    Ambient-occlusion contrast from cone occlusion, 0..1. Darkens indirect in enclosed corners/crevices so the room isn't a flat uniform fill.

    revoxelizeMode?: "auto" | "always"

    When to re-run the expensive voxelize→resolve→mip stage:

    • 'always' — every frame (fully dynamic geometry/lighting).
    • 'auto' (default) — only when the voxelization inputs (geometry transforms, materials, lights, bounds, strengths) change; otherwise the cached grid is reused and only the per-pixel cone trace runs. Static scenes voxelize once then idle, a big win when nothing the GI depends on is moving (the camera can still move — the cone trace re-runs every frame). Animated skinned characters aren't voxelized, so they don't force a re-voxelize.