/** * Calibration of the output pipeline, in linear scene luminance (1.0 = a white-looking surface at * exposure 1). * * `WHITE_POINT` is the luminance the pipeline prints as display white under AgX. Everything above it * is highlight headroom the tone curve rolls off, so a material meant to read as white is authored at * 1.0 rather than at whatever the sun happened to be set to. * `MID_GREY` is an 18% grey card — the metering target. Clamped auto-exposure drives the frame's key * luminance here, which is what makes one material read the same in a street at noon and a lamp-lit * room. There is one white point and one metering target; a second copy anywhere would make a grade * depend on which stage read it. */ export declare const WHITE_POINT = 1; /** Linear scene luminance of an 18% grey card — the auto-exposure metering target. */ export declare const MID_GREY = 0.18; /** * Pixels count toward metering up to this multiple of {@link WHITE_POINT}. A window or a sun disc sits * far above it and would otherwise pull the whole frame down to a silhouette. */ export declare const METERING_HIGHLIGHT_CEILING: number; /** Bounds and adaptation policy for clamped auto-exposure. */ export interface AutoExposureConfig { /** Lowest exposure multiplier the meter may reach. Default 0.6 (0.7 stops down). */ min?: number; /** Highest exposure multiplier the meter may reach. Default 2.5 (1.3 stops up). */ max?: number; /** Seconds for the meter to cover ~63% of a gap to a new key luminance. Default 0.6. */ adaptationSeconds?: number; } /** * Default clamped auto-exposure. The range is deliberately asymmetric: a bright street is already * readable after AgX's shoulder, while a lamp-lit interior is the case that crushes, so the meter may * lift 1.3 stops but only darken 0.7 — an artist's exposure survives. */ export declare const DEFAULT_AUTO_EXPOSURE: Readonly>; /** * Exposure that places a frame whose key luminance is `keyLuminance` on {@link MID_GREY}, bounded by * the authored range. A dark interior asks for more than `max` and gets `max`; a blown-out exterior * asks for less than `min` and gets `min`, so the frame never runs away at either end. */ export declare function exposureForKey(keyLuminance: number, config?: AutoExposureConfig): number; /** * Frame-rate independent blend of `current` toward `target`, exponential in time so a hitch does not * overshoot and a steady view settles. `deltaSeconds` may be 0..∞; a zero-length step keeps `current`. */ export declare function adaptExposure(current: number, target: number, deltaSeconds: number, adaptationSeconds?: number): number; /** * Key luminance of a metered frame: the median of its samples, each clamped to * {@link METERING_HIGHLIGHT_CEILING}. A median rather than a mean because a bright sky, a window or a * lamp is a large minority of the frame: averaging those in drags an interior down to a silhouette, * where the median still reports the room. */ export declare function keyLuminanceFromSamples(samples: ArrayLike): number;