import * as THREE from 'three/webgpu'; import type { LightsNode, MeshPhysicalNodeMaterialParameters, NodeBuilder, NodeMaterial } from 'three/webgpu'; import type { TSLFloatNode, TSLNode, TSLVec3Node } from '../types/tsl.js'; /** Fragment-reconstructed surface inputs understood by the deferred adapter. */ export interface DeferredSurfaceNodes { positionWorldNode?: TSLVec3Node | null | undefined; positionViewNode?: TSLVec3Node | null | undefined; viewDirectionViewNode?: TSLVec3Node | null | undefined; normalWorldNode?: TSLVec3Node | null | undefined; normalViewNode?: TSLVec3Node | null | undefined; colorNode?: TSLNode | null | undefined; opacityNode?: TSLFloatNode | null | undefined; depthNode?: TSLFloatNode | null | undefined; roughnessNode?: TSLFloatNode | null | undefined; metalnessNode?: TSLFloatNode | null | undefined; emissiveNode?: TSLNode | null | undefined; aoNode?: TSLFloatNode | null | undefined; envNode?: TSLNode | null | undefined; lightsNode?: LightsNode | null | undefined; receivedShadowPositionNode?: TSLVec3Node | null | undefined; receivedShadowNode?: ((mapShadow: TSLNode) => TSLNode) | null | undefined; castShadowPositionNode?: TSLVec3Node | null | undefined; castShadowNode?: TSLNode | null | undefined; } /** Surface inputs after package-derived view-space and shadow defaults are added. */ export interface ResolvedDeferredSurfaceNodes extends DeferredSurfaceNodes { } export interface DeferredSurfaceNodeMaterialParameters extends MeshPhysicalNodeMaterialParameters { surface?: DeferredSurfaceNodes | null | undefined; } /** * Resolve derived view-space nodes and received-shadow defaults for a deferred surface. * * @param surface Deferred surface node contract. * @returns Resolved surface without mutating the input object. */ export declare function resolveDeferredSurfaceNodes(surface: null | undefined): null; export declare function resolveDeferredSurfaceNodes(surface: DeferredSurfaceNodes): ResolvedDeferredSurfaceNodes; export declare function resolveDeferredSurfaceNodes(surface: DeferredSurfaceNodes | null | undefined): ResolvedDeferredSurfaceNodes | null; /** * Restore the material nodes replaced by applyDeferredSurfaceNodes(). * * @param material Target node material. * @returns The target material. */ export declare function clearDeferredSurfaceNodes(material: TMaterial): TMaterial; /** * Bind the standard parts of a deferred surface contract to any compatible NodeMaterial. * Custom fragment/output nodes remain responsible for consuming the bound properties. * * @param material Target node material. * @param surface Deferred surface node contract. * @returns The target material. */ export declare function applyDeferredSurfaceNodes(material: TMaterial, surface: DeferredSurfaceNodes | null | undefined): TMaterial; /** * Physical NodeMaterial adapter for surfaces reconstructed in the fragment stage. * * @class DeferredSurfaceNodeMaterial * @extends MeshPhysicalNodeMaterial * @short Shades reconstructed deferred surfaces with native Three.js scene lighting. * @category Materials * @tags WebGPU, TSL, Deferred */ export declare class DeferredSurfaceNodeMaterial extends THREE.MeshPhysicalNodeMaterial { static get type(): string; isDeferredSurfaceNodeMaterial: boolean; surface: DeferredSurfaceNodes | null; resolvedSurface: ResolvedDeferredSurfaceNodes | null; /** * Create a deferred-surface physical material. * * @param parameters Physical material parameters plus an optional deferred surface. */ constructor(parameters?: DeferredSurfaceNodeMaterialParameters); /** Bind a deferred surface to this material, or pass null to clear it. */ setSurface(surface: DeferredSurfaceNodes | null | undefined): this; /** Remove the deferred surface and restore the previous material nodes. */ clearSurface(): this; setupLighting(builder: NodeBuilder): TSLNode; copy(source: DeferredSurfaceNodeMaterial): this; }