Per-source-object filled-polygon emission alongside the wireframe edges. The projector derives one fill mesh per source SceneObject from the same depth buffer that drives HLE, so fill silhouettes coincide exactly with the wireframe edges — no halo at occlusion boundaries.

interface FillSpec {
    color?: Vec3;
    minPixelArea?: number;
    opacity?: number;
    resolution?: number;
    simplifyEpsilon?: number;
    tileSize?: number;
}

Properties

color?: Vec3

RGB fill colour (each channel in [0, 1]) applied to every emitted fill mesh. Default [0.92, 0.93, 0.95] — a cool off-white that reads as paper against the line work.

minPixelArea?: number

Skip source SceneObjects whose owner buffer has fewer than this many pixels. Filters out salt-and-pepper noise from triangles that only just-barely win the depth test along an edge they don't really cover. Default 4.

opacity?: number

Fill opacity in [0, 1]. Default 1.0. Lower values let the panel quad behind show through, useful for a ghosted look; opaque fills produce the crispest drawing reads.

resolution?: number

Effective output resolution along the longer (u, v) axis of the basis-rotated AABB, in pixels. Drives fill silhouette precision: 2048 gives ~5 mm/pixel on a 10 m model. Defaults to the matching HLE resolution when hideHidden is enabled, otherwise 2048.

simplifyEpsilon?: number

Douglas-Peucker contour-simplification tolerance, in pixel units. 0.25 (default) preserves sub-pixel detail at the default 2048-px depth-buffer resolution while still collapsing the redundant collinear vertices marching squares emits along straight silhouette edges. 0 keeps every marching-squares vertex (faithful but noisy).

tileSize?: number

Per-tile pixel size (square) for the tiled fill extractor. Memory peaks at O(tileSize²) regardless of resolution, so this is what makes very-high-resolution drawings practical. Default 1024. Set to 0 (or any value ≥ resolution) to disable tiling and use the legacy single-buffer extractor — useful for very small models where the tile overhead doesn't pay back.