/** Stable identifier for a visibility-tracked object or camera. */ export type VisibilityId = string | number; /** World-space point; `z` is optional for 2D adapters. */ export interface VisibilityPoint { x: number; y: number; z?: number; } /** Sphere bounds used for visibility/streaming distance checks. */ export interface VisibilityBounds { center: VisibilityPoint; radius: number; } /** A camera's position and reach, as seen by the visibility system. */ export interface CameraVisibilityContext { id: VisibilityId; position: VisibilityPoint; /** Approximate visible radius in world units. Adapters may derive this from a frustum. */ visibleRadius: number; /** Extra distance used to request assets before an object becomes visible. */ preloadMargin?: number; /** Cameras such as editor thumbnails can opt out of influencing streaming. */ influencesStreaming?: boolean; } /** Per-object escape hatches that bypass or tune the default visibility policy. */ export interface VisibilityOverrides { alwaysVisible?: boolean; neverUnload?: boolean; cullingDisabled?: boolean; streamingDisabled?: boolean; minRenderDistance?: number; maxRenderDistance?: number; preloadMargin?: number; } /** An entity/asset tracked by `VisibilitySystem.evaluate`. */ export interface VisibilityObject { id: VisibilityId; bounds: VisibilityBounds; overrides?: VisibilityOverrides; } /** Baseline policy settings a `VisibilitySystem` is constructed with. */ export interface VisibilityDefaults { enabled: boolean; streamingEnabled: boolean; minRenderDistance: number; maxRenderDistance: number; preloadMargin: number; unloadGraceMs: number; hysteresis: number; } /** Default `VisibilityDefaults` a `VisibilitySystem` falls back to when unspecified. */ export declare const DEFAULT_VISIBILITY_SETTINGS: Readonly; /** Result of evaluating one object against the active cameras this tick. */ export interface VisibilityDecision { render: boolean; load: boolean; unload: boolean; reason: "always-visible" | "culling-disabled" | "visible" | "preload" | "distance-culled" | "outside-view" | "grace-period" | "streaming-disabled"; } /** * Engine-level visibility and asset-residency policy. * * Render culling and asset streaming are intentionally separate. This class never * destroys entities or throttles simulation; adapters decide how to apply results. * @internal */ export declare class VisibilitySystem { #private; readonly settings: VisibilityDefaults; constructor(settings?: Partial); evaluate(object: VisibilityObject, cameras: readonly CameraVisibilityContext[], now?: number): VisibilityDecision; setLoaded(id: VisibilityId, loaded: boolean, now?: number): void; forget(id: VisibilityId): void; clear(): void; }