UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

262 lines (261 loc) 8.3 kB
/** * A light. * * @ignore */ export class Light { /** * Get conversion factor for luminance -> light specific light unit. * * @param {number} type - The type of light. * @param {number} [outerAngle] - The outer angle of a spot light. * @param {number} [innerAngle] - The inner angle of a spot light. * @returns {number} The scaling factor to multiply with the luminance value. */ static getLightUnitConversion(type: number, outerAngle?: number, innerAngle?: number): number; /** * @param {GraphicsDevice} graphicsDevice - The graphics device. * @param {boolean} clusteredLighting - True if the clustered lighting is enabled. */ constructor(graphicsDevice: GraphicsDevice, clusteredLighting: boolean); /** * The Layers the light is on. * * @type {Set<Layer>} */ layers: Set<Layer>; /** * True if the clustered lighting is enabled. * * @type {boolean} */ clusteredLighting: boolean; /** * The depth state used when rendering the shadow map. * * @type {DepthState} */ shadowDepthState: DepthState; /** * The flags used for clustered lighting. Stored as a bitfield, updated as properties change to * avoid those being updated each frame. * * @type {number} * @ignore */ clusteredFlags: number; /** * Storage data for light properties encoded as a Uint32Array. * * @type {Uint32Array} * @ignore */ clusteredData: Uint32Array; /** * Alias for clusteredData using 16bit unsigned integers. * * @type {Uint16Array} * @ignore */ clusteredData16: Uint16Array; /** * Event handle for device restored event. * * @type {EventHandle|null} * @private */ private _evtDeviceRestored; device: GraphicsDevice; id: number; _type: number; _color: Color; _intensity: number; _affectSpecularity: boolean; _luminance: number; _castShadows: boolean; _enabled: boolean; _mask: number; isStatic: boolean; key: number; bakeDir: boolean; bakeNumSamples: number; bakeArea: number; attenuationStart: number; attenuationEnd: number; _falloffMode: number; _shadowType: number; _vsmBlurSize: number; vsmBlurMode: number; vsmBias: number; _cookie: any; cookieIntensity: number; _cookieFalloff: boolean; _cookieChannel: string; _cookieTransform: any; _cookieTransformUniform: Float32Array<ArrayBuffer>; _cookieOffset: any; _cookieOffsetUniform: Float32Array<ArrayBuffer>; _cookieTransformSet: boolean; _cookieOffsetSet: boolean; _innerConeAngle: number; _outerConeAngle: number; cascades: any; _shadowMatrixPalette: Float32Array<ArrayBuffer>; _shadowCascadeDistances: Float32Array<ArrayBuffer>; set numCascades(value: any); get numCascades(): any; _cascadeBlend: number; cascadeDistribution: number; _shape: number; _colorLinear: Float32Array<ArrayBuffer>; _position: Vec3; _direction: Vec3; _innerConeAngleCos: number; _usePhysicalUnits: any; _shadowMap: any; _shadowRenderParams: any[]; _shadowCameraParams: any[]; shadowDistance: number; _shadowResolution: number; _shadowBias: number; _shadowIntensity: number; _normalOffsetBias: number; shadowUpdateMode: number; shadowUpdateOverrides: any; _isVsm: boolean; _isPcf: boolean; _softShadowParams: Float32Array<ArrayBuffer>; set shadowSamples(value: number); get shadowSamples(): number; set shadowBlockerSamples(value: number); get shadowBlockerSamples(): number; set penumbraSize(value: any); get penumbraSize(): any; set penumbraFalloff(value: number); get penumbraFalloff(): number; _cookieMatrix: Mat4; _atlasViewport: Vec4; atlasViewportAllocated: boolean; atlasVersion: number; atlasSlotIndex: number; atlasSlotUpdated: boolean; _node: any; _renderData: any[]; visibleThisFrame: boolean; maxScreenSize: number; destroy(): void; onDeviceRestored(): void; releaseRenderData(): void; addLayer(layer: any): void; removeLayer(layer: any): void; set shadowBias(value: number); get shadowBias(): number; set cascadeBlend(value: number); get cascadeBlend(): number; set shadowMap(shadowMap: any); get shadowMap(): any; set mask(value: number); get mask(): number; get numShadowFaces(): any; set type(value: number); get type(): number; set shadowType(value: number); get shadowType(): number; set shape(value: number); get shape(): number; set usePhysicalUnits(value: any); get usePhysicalUnits(): any; set enabled(value: boolean); get enabled(): boolean; set castShadows(value: boolean); get castShadows(): boolean; set shadowIntensity(value: number); get shadowIntensity(): number; get bakeShadows(): boolean; set shadowResolution(value: number); get shadowResolution(): number; set vsmBlurSize(value: number); get vsmBlurSize(): number; set normalOffsetBias(value: number); get normalOffsetBias(): number; set falloffMode(value: number); get falloffMode(): number; set innerConeAngle(value: number); get innerConeAngle(): number; set outerConeAngle(value: number); get outerConeAngle(): number; _penumbraSize: any; _updateOuterAngle(angle: any): void; _outerConeAngleCos: number; _outerConeAngleSin: number; set intensity(value: number); get intensity(): number; set affectSpecularity(value: boolean); get affectSpecularity(): boolean; set luminance(value: number); get luminance(): number; get cookieMatrix(): Mat4; get atlasViewport(): Vec4; set cookie(value: any); get cookie(): any; set cookieFalloff(value: boolean); get cookieFalloff(): boolean; set cookieChannel(value: string); get cookieChannel(): string; set cookieTransform(value: any); get cookieTransform(): any; set cookieOffset(value: any); get cookieOffset(): any; beginFrame(): void; _destroyShadowMap(): void; getRenderData(camera: any, face: any): any; /** * Duplicates a light node but does not 'deep copy' the hierarchy. * * @returns {Light} A cloned Light. */ clone(): Light; _getUniformBiasValues(lightRenderData: any): { bias: number; normalBias: number; }; getColor(): Color; getBoundingSphere(sphere: any): void; getBoundingBox(box: any): void; _updateShadowBias(): void; _updateLinearColor(): void; setColor(...args: any[]): void; layersDirty(): void; /** * Updates a integer key for the light. The key is used to identify all shader related features * of the light, and so needs to have all properties that modify the generated shader encoded. * Properties without an effect on the shader (color, shadow intensity) should not be encoded. */ updateKey(): void; /** * Updates 32bit flags used by the clustered lighting. This only stores constant data. * Note: this needs to match shader code in clusteredLight.js */ updateClusteredFlags(): void; /** * Adds per-frame dynamic data to the 32bit flags used by the clustered lighting. */ getClusteredFlags(castShadows: any, useCookie: any): number; updateClusterData(updateColor: any, updateAngles: any): void; } export namespace lightTypes { export { LIGHTTYPE_DIRECTIONAL as directional }; export { LIGHTTYPE_OMNI as omni }; export { LIGHTTYPE_OMNI as point }; export { LIGHTTYPE_SPOT as spot }; } import type { Layer } from './layer.js'; import { DepthState } from '../platform/graphics/depth-state.js'; import type { GraphicsDevice } from '../platform/graphics/graphics-device.js'; import { Color } from '../core/math/color.js'; import { Vec3 } from '../core/math/vec3.js'; import { Mat4 } from '../core/math/mat4.js'; import { Vec4 } from '../core/math/vec4.js'; import { LIGHTTYPE_DIRECTIONAL } from './constants.js'; import { LIGHTTYPE_OMNI } from './constants.js'; import { LIGHTTYPE_SPOT } from './constants.js';