123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- import { PrePassRenderTarget } from "../Materials/Textures/prePassRenderTarget";
- import type { Scene } from "../scene";
- import type { Effect } from "../Materials/effect";
- import type { Nullable } from "../types";
- import type { AbstractMesh } from "../Meshes/abstractMesh";
- import type { Camera } from "../Cameras/camera";
- import { Material } from "../Materials/material";
- import type { SubMesh } from "../Meshes/subMesh";
- import type { PrePassEffectConfiguration } from "./prePassEffectConfiguration";
- import type { RenderTargetTexture } from "../Materials/Textures/renderTargetTexture";
- /**
- * Renders a pre pass of the scene
- * This means every mesh in the scene will be rendered to a render target texture
- * And then this texture will be composited to the rendering canvas with post processes
- * It is necessary for effects like subsurface scattering or deferred shading
- */
- export declare class PrePassRenderer {
- /**
- * @internal
- */
- static _SceneComponentInitialization: (scene: Scene) => void;
- /**
- * To save performance, we can excluded skinned meshes from the prepass
- */
- excludedSkinnedMesh: AbstractMesh[];
- /**
- * Force material to be excluded from the prepass
- * Can be useful when `useGeometryBufferFallback` is set to `true`
- * and you don't want a material to show in the effect.
- */
- excludedMaterials: Material[];
- private _scene;
- private _engine;
- /**
- * Number of textures in the multi render target texture where the scene is directly rendered
- */
- mrtCount: number;
- private _mrtTypes;
- private _mrtFormats;
- private _mrtLayout;
- private _mrtNames;
- private _textureIndices;
- private _multiRenderAttachments;
- private _defaultAttachments;
- private _clearAttachments;
- private _clearDepthAttachments;
- private _generateNormalsInWorldSpace;
- /**
- * Indicates if the prepass renderer is generating normals in world space or camera space (default: camera space)
- */
- get generateNormalsInWorldSpace(): boolean;
- set generateNormalsInWorldSpace(value: boolean);
- /**
- * Returns the index of a texture in the multi render target texture array.
- * @param type Texture type
- * @returns The index
- */
- getIndex(type: number): number;
- /**
- * How many samples are used for MSAA of the scene render target
- */
- get samples(): number;
- set samples(n: number);
- private _useSpecificClearForDepthTexture;
- /**
- * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)
- * If set to false, the depth texture is always cleared with 0.
- */
- get useSpecificClearForDepthTexture(): boolean;
- set useSpecificClearForDepthTexture(value: boolean);
- /**
- * Describes the types and formats of the textures used by the pre-pass renderer
- */
- static TextureFormats: {
- purpose: number;
- type: number;
- format: number;
- name: string;
- }[];
- private _isDirty;
- /**
- * The render target where the scene is directly rendered
- */
- defaultRT: PrePassRenderTarget;
- /**
- * Configuration for prepass effects
- */
- private _effectConfigurations;
- /**
- * @returns the prepass render target for the rendering pass.
- * If we are currently rendering a render target, it returns the PrePassRenderTarget
- * associated with that render target. Otherwise, it returns the scene default PrePassRenderTarget
- */
- getRenderTarget(): PrePassRenderTarget;
- /**
- * @internal
- * Managed by the scene component
- * @param prePassRenderTarget
- */
- _setRenderTarget(prePassRenderTarget: Nullable<PrePassRenderTarget>): void;
- /**
- * Returns true if the currently rendered prePassRenderTarget is the one
- * associated with the scene.
- */
- get currentRTisSceneRT(): boolean;
- private _geometryBuffer;
- /**
- * Prevents the PrePassRenderer from using the GeometryBufferRenderer as a fallback
- */
- doNotUseGeometryRendererFallback: boolean;
- private _refreshGeometryBufferRendererLink;
- private _currentTarget;
- /**
- * All the render targets generated by prepass
- */
- renderTargets: PrePassRenderTarget[];
- private readonly _clearColor;
- private readonly _clearDepthColor;
- private _enabled;
- private _needsCompositionForThisPass;
- private _postProcessesSourceForThisPass;
- /**
- * Indicates if the prepass is enabled
- */
- get enabled(): boolean;
- /**
- * Set to true to disable gamma transform in PrePass.
- * Can be useful in case you already proceed to gamma transform on a material level
- * and your post processes don't need to be in linear color space.
- */
- disableGammaTransform: boolean;
- /**
- * Instantiates a prepass renderer
- * @param scene The scene
- */
- constructor(scene: Scene);
- /**
- * Creates a new PrePassRenderTarget
- * This should be the only way to instantiate a `PrePassRenderTarget`
- * @param name Name of the `PrePassRenderTarget`
- * @param renderTargetTexture RenderTarget the `PrePassRenderTarget` will be attached to.
- * Can be `null` if the created `PrePassRenderTarget` is attached to the scene (default framebuffer).
- * @internal
- */
- _createRenderTarget(name: string, renderTargetTexture: Nullable<RenderTargetTexture>): PrePassRenderTarget;
- /**
- * Indicates if rendering a prepass is supported
- */
- get isSupported(): boolean;
- /**
- * Sets the proper output textures to draw in the engine.
- * @param effect The effect that is drawn. It can be or not be compatible with drawing to several output textures.
- * @param subMesh Submesh on which the effect is applied
- */
- bindAttachmentsForEffect(effect: Effect, subMesh: SubMesh): void;
- private _reinitializeAttachments;
- private _resetLayout;
- private _updateGeometryBufferLayout;
- /**
- * Restores attachments for single texture draw.
- */
- restoreAttachments(): void;
- /**
- * @internal
- */
- _beforeDraw(camera?: Camera, faceIndex?: number, layer?: number): void;
- private _prepareFrame;
- /**
- * Sets an intermediary texture between prepass and postprocesses. This texture
- * will be used as input for post processes
- * @param rt The render target texture to use
- * @returns true if there are postprocesses that will use this texture,
- * false if there is no postprocesses - and the function has no effect
- */
- setCustomOutput(rt: RenderTargetTexture): boolean;
- private _renderPostProcesses;
- /**
- * @internal
- */
- _afterDraw(faceIndex?: number, layer?: number): void;
- /**
- * Clears the current prepass render target (in the sense of settings pixels to the scene clear color value)
- * @internal
- */
- _clear(): void;
- private _bindFrameBuffer;
- private _setEnabled;
- private _setRenderTargetEnabled;
- /**
- * Adds an effect configuration to the prepass render target.
- * If an effect has already been added, it won't add it twice and will return the configuration
- * already present.
- * @param cfg the effect configuration
- * @returns the effect configuration now used by the prepass
- */
- addEffectConfiguration(cfg: PrePassEffectConfiguration): PrePassEffectConfiguration;
- /**
- * Retrieves an effect configuration by name
- * @param name the name of the effect configuration
- * @returns the effect configuration, or null if not present
- */
- getEffectConfiguration(name: string): Nullable<PrePassEffectConfiguration>;
- private _enable;
- private _disable;
- private _getPostProcessesSource;
- private _setupOutputForThisPass;
- private _linkInternalTexture;
- /**
- * @internal
- */
- _unlinkInternalTexture(prePassRenderTarget: PrePassRenderTarget): void;
- private _needsImageProcessing;
- private _hasImageProcessing;
- /**
- * Internal, gets the first post proces.
- * @param postProcesses
- * @returns the first post process to be run on this camera.
- */
- private _getFirstPostProcess;
- /**
- * Marks the prepass renderer as dirty, triggering a check if the prepass is necessary for the next rendering.
- */
- markAsDirty(): void;
- /**
- * Enables a texture on the MultiRenderTarget for prepass
- * @param types
- */
- private _enableTextures;
- /**
- * Makes sure that the prepass renderer is up to date if it has been dirtified.
- */
- update(): void;
- private _update;
- private _markAllMaterialsAsPrePassDirty;
- /**
- * Disposes the prepass renderer.
- */
- dispose(): void;
- }
|