/** * Eye-Dome Lighting (EDL) post-pass. * * Standard Potree-style screen-space depth shading: for each pixel, sample * a few neighbouring depths at radius R, compute the mean log-depth-diff, * and darken proportionally. The result is a soft black halo at silhouettes * and gives un-normaled point clouds (and triangle meshes) a strong sense * of depth without needing geometric normals. * * Costs ~9 texture taps per pixel (1 centre + 8 neighbours) at the high * quality setting, ~5 at low. Cheap on any modern GPU. * * Render order: this should run AFTER the existing PostProcessor (which * does contact / separation shading) so EDL also darkens those overlays. * * Reverse-Z note: the main pipeline uses depthCompare 'greater' with * clearValue 0.0. So depth=1 → near plane, depth=0 → far plane. A bigger * neighbour depth means the neighbour is closer; a smaller neighbour depth * means it's further. We darken pixels whose neighbours are further away — * i.e. silhouette edges — by clamping `max(0, log(centre) - log(neighbour))`. */ import { WebGPUDevice } from './device.js'; export interface EdlPassOptions { /** Multiplier on the final darken alpha. 0..3, default 1. */ strength?: number; /** Sample radius in pixels. 1..4, default 1. */ radiusPx?: number; /** When true, sample 8 neighbours; when false, just 4 cardinal. */ highQuality?: boolean; } export interface EdlPassApplyOptions { /** Output target — typically the swap chain texture view. */ targetView: GPUTextureView; /** Depth texture view (must be `aspect: 'depth-only'` for stencil formats). */ depthView: GPUTextureView; } export declare class EdlPass { private device; private colorFormat; private isMultisampled; private uniformBuffer; private uniformStaging; private bindGroupLayout; private pipeline; private cachedBindGroup; private cachedDepthView; private destroyed; constructor(device: WebGPUDevice, sampleCount: number); apply(encoder: GPUCommandEncoder, opts: EdlPassApplyOptions, params: Required): void; destroy(): void; } //# sourceMappingURL=edl-pass.d.ts.map