import * as THREE from 'three/webgpu'; import type { GaussianSplatColorNode, GaussianSplatPositionNode, GaussianSplatScaleNode, GaussianSplatsMaterialBuffers, GaussianSplatsMaterialUniforms, GaussianSplatsSourceResource } from './GaussianSplatsMaterial.js'; export type GaussianSplatShadowMode = 'stochastic' | 'clip'; export interface GaussianSplatShadowOptions { enabled?: boolean | undefined; mode?: GaussianSplatShadowMode | undefined; alphaCutoff?: number | undefined; sigmaCoverage?: number | undefined; opacity?: number | undefined; stride?: number | undefined; } interface GaussianSplatShadowMaterialHooks { customPositionNode?: GaussianSplatPositionNode | null | undefined; customScaleNode?: GaussianSplatScaleNode | null | undefined; customColorNode?: GaussianSplatColorNode | null | undefined; } export interface GaussianSplatShadowSource { buffers: GaussianSplatsMaterialBuffers; _sourceResource: GaussianSplatsSourceResource; uniforms: Pick; material?: GaussianSplatShadowMaterialHooks | null | undefined; count: number; matrixWorld: THREE.Matrix4; _coordTransform: THREE.Matrix4; updateWorldMatrix(updateParents: boolean, updateChildren: boolean): void; } export type GaussianSplatShadowLight = THREE.DirectionalLight | THREE.SpotLight | THREE.PointLight; export interface GaussianSplatShadowLightCandidate extends THREE.Light { shadow?: THREE.LightShadow | undefined; readonly isPointLight?: boolean | undefined; readonly isDirectionalLight?: boolean | undefined; readonly isSpotLight?: boolean | undefined; } /** * Alpha-clipped Gaussian shadow material projected from the active light camera. * * @class GaussianSplatShadowMaterial * @short Light-space Gaussian ellipse shadow material * @category GaussianSplatting * @tags Gaussian, Shadow, WebGPU, TSL */ export declare class GaussianSplatShadowMaterial extends THREE.NodeMaterial { readonly isGaussianSplatShadowMaterial: true; map: THREE.Texture | null; alphaCutoffNode: THREE.UniformNode<'float', number>; sigmaCoverageNode: THREE.UniformNode<'float', number>; opacityNodeUniform: THREE.UniformNode<'float', number>; strideNode: THREE.UniformNode<'uint', number>; stochasticNode: THREE.UniformNode<'float', number>; constructor(splats: GaussianSplatShadowSource, options?: GaussianSplatShadowOptions); _buildNodes(splats: GaussianSplatShadowSource): void; } /** * Layer-isolated proxy mesh rendered only by registered shadow cameras. * * @class GaussianSplatShadowCaster * @short Layer-isolated Gaussian shadow-pass proxy * @category GaussianSplatting * @tags Gaussian, Shadow, WebGPU */ export declare class GaussianSplatShadowCaster extends THREE.Mesh { readonly isGaussianSplatShadowCaster: true; splats: GaussianSplatShadowSource; enabled: boolean; shadowRenderCount: number; _stride: number; constructor(splats: GaussianSplatShadowSource, options?: GaussianSplatShadowOptions); setOptions(options?: GaussianSplatShadowOptions): this; sync(): this; dispose(): void; } /** * Light-camera layer coordinator for registered Gaussian shadow casters. * * @class GaussianSplatShadowNode * @short Directional, spot, and point-light Gaussian shadow coordinator * @category GaussianSplatting * @tags Gaussian, Shadow, WebGPU, TSL */ export declare class GaussianSplatShadowNode { readonly isGaussianSplatShadowNode: true; light: GaussianSplatShadowLight; layer: number; casters: Set; registrations: number; _restored: boolean; constructor(light: GaussianSplatShadowLightCandidate); retain(): this; release(): void; addCaster(caster: GaussianSplatShadowCaster): GaussianSplatShadowCaster; removeCaster(caster: GaussianSplatShadowCaster): void; restore(): void; dispose(): void; } export declare function getGaussianSplatShadowNode(light: GaussianSplatShadowLightCandidate): GaussianSplatShadowNode; export {};