import Renderer from '../Renderer'; import Shader, { ShaderPrecision } from '../Shader'; import Material from '../Material'; import Texture2D from '../Texture2D'; import TextureCube, { CubeTarget } from '../TextureCube'; import * as mat4 from '../glmatrix/mat4'; import type Renderable from '../Renderable'; import { Notifier } from '../core'; import Scene from '../Scene'; import Camera from '../Camera'; import Light from '../Light'; import DirectionalLight from '../light/Directional'; import SpotLight from '../light/Spot'; import PointLight from '../light/Point'; /** * Pass rendering shadow map. * * @constructor clay.prePass.ShadowMap * @extends clay.core.Base * @example * const shadowMapPass = new clay.prePass.ShadowMap(); * ... * animation.on('frame', function (frameTime) { * shadowMapPass.render(renderer, scene, camera); * renderer.render(scene, camera); * }); */ declare class ShadowMapPass extends Notifier { lightFrustumBias: number | 'auto'; /** * Light size for pcss shadow. */ PCSSLightSize: number; kernelPCF: Float32Array; precision: ShaderPrecision; intersectCameraBoundingBox: boolean; private _frameBuffer; private _textures; private _shadowMapNumber; private _receivers; private _lightsCastShadow; private _lightCameras; private _lightMaterials; private _texturePool; private _debugPass?; constructor(); /** * Render scene to shadow textures */ render(renderer: Renderer, scene: Scene, sceneCamera?: Camera, notUpdateScene?: boolean): void; /** * Debug rendering of shadow textures */ renderDebug(renderer: Renderer, size?: number): void; updateReceivers(renderer: Renderer, mesh: Renderable): void; _update(renderer: Renderer, scene: Scene): void; _renderShadowPass(renderer: Renderer, scene: Scene, sceneCamera: Camera, notUpdateScene?: boolean): void; renderDirectionalLightShadow(renderer: Renderer, scene: Scene, sceneCamera: Camera, light: DirectionalLight, shadowCascadeClips: number[], directionalLightMatrices: mat4.Mat4Array[], directionalLightShadowMaps: Texture2D[]): void; renderSpotLightShadow(renderer: Renderer, scene: Scene, light: SpotLight, spotLightMatrices: mat4.Mat4Array[], spotLightShadowMaps: Texture2D[]): void; renderPointLightShadow(renderer: Renderer, scene: Scene, light: PointLight, pointLightShadowMaps: TextureCube[]): void; _getDepthMaterial(light: Light): Material, import("../Shader").FragmentShader>>; _getTexture(light: PointLight, cascade?: number): TextureCube; _getTexture(light: DirectionalLight | SpotLight, cascade?: number): Texture2D; _getPointLightCamera(light: PointLight, target: CubeTarget): Camera<"perspective">; _getDirectionalLightCamera(light: DirectionalLight, scene: Scene, sceneCamera: Camera): Camera<"orthographic">; _getSpotLightCamera(light: SpotLight): Camera<"perspective">; /** * @param {clay.Renderer|WebGL2RenderingContext} [renderer] * @memberOf clay.prePass.ShadowMap.prototype */ dispose(renderer: Renderer): void; } export default ShadowMapPass;