playcanvas
Version:
PlayCanvas WebGL game engine
105 lines (104 loc) • 4.52 kB
TypeScript
/**
* The lightmapper is used to bake scene lights into textures.
*
* @category Graphics
*/
export class Lightmapper {
/**
* Create a new Lightmapper instance.
*
* @param {GraphicsDevice} device - The graphics device used by the lightmapper.
* @param {Entity} root - The root entity of the scene.
* @param {Scene} scene - The scene to lightmap.
* @param {ForwardRenderer} renderer - The renderer.
* @param {AssetRegistry} assets - Registry of assets to lightmap.
* @ignore
*/
constructor(device: GraphicsDevice, root: Entity, scene: Scene, renderer: ForwardRenderer, assets: AssetRegistry);
device: GraphicsDevice;
root: Entity;
scene: Scene;
renderer: ForwardRenderer;
assets: AssetRegistry;
shadowMapCache: import("../../scene/renderer/shadow-map-cache.js").ShadowMapCache;
_tempSet: Set<any>;
_initCalled: boolean;
passMaterials: any[];
ambientAOMaterial: StandardMaterial;
fog: string;
ambientLight: Color;
renderTargets: Map<any, any>;
stats: {
renderPasses: number;
lightmapCount: number;
totalRenderTime: number;
forwardTime: number;
fboTime: number;
shadowMapTime: number;
compileTime: number;
shadersLinked: number;
};
destroy(): void;
blackTex: Texture;
camera: Camera;
initBake(device: any): void;
bakeHDR: boolean;
lightmapFilters: LightmapFilters;
constantBakeDir: any;
materials: any[];
lightingParams: LightingParams;
worldClusters: WorldClusters;
finishBake(bakeNodes: any): void;
createMaterialForPass(scene: any, pass: any, addAmbient: any): StandardMaterial;
createMaterials(device: any, scene: any, passCount: any): void;
createTexture(size: any, name: any): Texture;
collectModels(node: any, bakeNodes: any, allNodes: any): void;
prepareShadowCasters(nodes: any): any[];
updateTransforms(nodes: any): void;
calculateLightmapSize(node: any): number;
setLightmapping(nodes: any, value: any, passCount: any, shaderDefs: any): void;
/**
* Generates and applies the lightmaps.
*
* @param {Entity[]|null} nodes - An array of entities (with model or render components) to
* render lightmaps for. If not supplied, the entire scene will be baked.
* @param {number} [mode] - Baking mode. Can be:
*
* - {@link BAKE_COLOR}: single color lightmap
* - {@link BAKE_COLORDIR}: single color lightmap + dominant light direction (used for
* bump/specular)
*
* Only lights with bakeDir=true will be used for generating the dominant light direction.
* Defaults to {@link BAKE_COLORDIR}.
*/
bake(nodes: Entity[] | null, mode?: number): void;
allocateTextures(bakeNodes: any, passCount: any): void;
prepareLightsToBake(allLights: any, bakeLights: any): void;
restoreLights(allLights: any): void;
setupScene(): void;
restoreScene(): void;
computeNodeBounds(meshInstances: any): BoundingBox;
computeNodesBounds(nodes: any): void;
computeBounds(meshInstances: any): BoundingBox;
backupMaterials(meshInstances: any): void;
restoreMaterials(meshInstances: any): void;
lightCameraPrepare(device: any, bakeLight: any): any;
lightCameraPrepareAndCull(bakeLight: any, bakeNode: any, shadowCam: any, casterBounds: any): boolean;
setupLightArray(lightArray: any, light: any): void;
renderShadowMap(comp: any, shadowMapRendered: any, casters: any, bakeLight: any): boolean;
postprocessTextures(device: any, bakeNodes: any, passCount: any): void;
bakeInternal(passCount: any, bakeNodes: any, allNodes: any): void;
}
import type { GraphicsDevice } from '../../platform/graphics/graphics-device.js';
import type { Entity } from '../entity.js';
import type { Scene } from '../../scene/scene.js';
import type { ForwardRenderer } from '../../scene/renderer/forward-renderer.js';
import type { AssetRegistry } from '../asset/asset-registry.js';
import { StandardMaterial } from '../../scene/materials/standard-material.js';
import { Color } from '../../core/math/color.js';
import { Texture } from '../../platform/graphics/texture.js';
import { Camera } from '../../scene/camera.js';
import { LightmapFilters } from './lightmap-filters.js';
import { LightingParams } from '../../scene/lighting/lighting-params.js';
import { WorldClusters } from '../../scene/lighting/world-clusters.js';
import { BoundingBox } from '../../core/shape/bounding-box.js';