@babylonjs/core 8.40.0 → 8.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Compute/computeEffect.js +5 -1
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.d.ts +4 -0
- package/Compute/computeShader.js +9 -3
- package/Compute/computeShader.js.map +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +2 -3
- package/Engines/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/ICanvas.d.ts +3 -3
- package/Engines/ICanvas.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +2 -2
- package/Engines/webgpuEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +29 -14
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +12 -41
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +106 -184
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Passes/renderPass.js +5 -3
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +2 -0
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +6 -0
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Layers/glowLayerTask.d.ts +1 -0
- package/FrameGraph/Tasks/Layers/glowLayerTask.js +3 -0
- package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Layers/highlightLayerTask.d.ts +1 -0
- package/FrameGraph/Tasks/Layers/highlightLayerTask.js +3 -0
- package/FrameGraph/Tasks/Layers/highlightLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +1 -0
- package/FrameGraph/Tasks/Misc/computeShaderTask.js +3 -0
- package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.d.ts +1 -0
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +3 -0
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/executeTask.d.ts +1 -0
- package/FrameGraph/Tasks/Misc/executeTask.js +3 -0
- package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -0
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +8 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/anaglyphTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/blurTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/convolutionTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/convolutionTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/convolutionTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/filterTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/filterTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/filterTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/fxaaTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/fxaaTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/fxaaTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/grainTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/grainTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/grainTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/motionBlurTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +2 -0
- package/FrameGraph/Tasks/PostProcesses/passTask.js +6 -0
- package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/sharpenTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/sharpenTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/sharpenTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/ssrTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/taaTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/tonemapTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/tonemapTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/tonemapTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -0
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +12 -6
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -0
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +3 -0
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +18 -58
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +114 -121
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +12 -0
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +65 -26
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +1 -0
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +3 -0
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +1 -0
- package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +3 -0
- package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -0
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +21 -8
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.d.ts +1 -0
- package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js +3 -0
- package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +1 -0
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js +21 -4
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/generateMipMapsTask.d.ts +1 -0
- package/FrameGraph/Tasks/Texture/generateMipMapsTask.js +3 -0
- package/FrameGraph/Tasks/Texture/generateMipMapsTask.js.map +1 -1
- package/FrameGraph/frameGraphContext.js +2 -2
- package/FrameGraph/frameGraphContext.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +1 -0
- package/FrameGraph/frameGraphRenderContext.js +17 -8
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +5 -0
- package/FrameGraph/frameGraphTask.js +9 -0
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphUtils.d.ts +2 -2
- package/FrameGraph/frameGraphUtils.js +6 -6
- package/FrameGraph/frameGraphUtils.js.map +1 -1
- package/Lights/lightingVolume.d.ts +10 -1
- package/Lights/lightingVolume.js +201 -102
- package/Lights/lightingVolume.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +2 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +5 -1
- package/Materials/materialHelper.geometryrendering.js +11 -2
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +2 -1
- package/Meshes/geometry.js +6 -2
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -1
- package/Meshes/mesh.js +4 -3
- package/Meshes/mesh.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +6 -2
- package/Rendering/objectRenderer.js +69 -63
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +2 -2
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/volumetricLightingRenderVolume.fragment.js +2 -2
- package/Shaders/volumetricLightingRenderVolume.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/lightingVolume.compute.js +10 -4
- package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
- package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js +2 -2
- package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js.map +1 -1
- package/States/alphaCullingState.d.ts +1 -0
- package/States/alphaCullingState.js +3 -0
- package/States/alphaCullingState.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,24 +1,12 @@
|
|
|
1
|
-
import { backbufferDepthStencilTextureHandle } from "../../frameGraphTypes.js";
|
|
2
1
|
import { Color4 } from "../../../Maths/math.color.js";
|
|
3
2
|
import { MaterialHelperGeometryRendering } from "../../../Materials/materialHelper.geometryrendering.js";
|
|
4
3
|
|
|
5
|
-
import {
|
|
6
|
-
import { ObjectRenderer } from "../../../Rendering/objectRenderer.js";
|
|
4
|
+
import { FrameGraphObjectRendererTask } from "./objectRendererTask.js";
|
|
7
5
|
const ClearColors = [new Color4(0, 0, 0, 0), new Color4(1, 1, 1, 1), new Color4(0, 0, 0, 0)];
|
|
8
6
|
/**
|
|
9
7
|
* Task used to render geometry to a set of textures.
|
|
10
8
|
*/
|
|
11
|
-
export class FrameGraphGeometryRendererTask extends
|
|
12
|
-
/**
|
|
13
|
-
* Gets or sets the camera used for rendering.
|
|
14
|
-
*/
|
|
15
|
-
get camera() {
|
|
16
|
-
return this._camera;
|
|
17
|
-
}
|
|
18
|
-
set camera(camera) {
|
|
19
|
-
this._camera = camera;
|
|
20
|
-
this._renderer.activeCamera = this.camera;
|
|
21
|
-
}
|
|
9
|
+
export class FrameGraphGeometryRendererTask extends FrameGraphObjectRendererTask {
|
|
22
10
|
/**
|
|
23
11
|
* Whether to reverse culling (default is false).
|
|
24
12
|
*/
|
|
@@ -33,10 +21,16 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
33
21
|
}
|
|
34
22
|
}
|
|
35
23
|
/**
|
|
36
|
-
*
|
|
24
|
+
* Indicates whether the depth pre-pass is disabled (default is true).
|
|
25
|
+
* Materials that require depth pre-pass (Material.needDepthPrePass == true) don't work with the geometry renderer, that's why this setting is true by default.
|
|
26
|
+
* However, if the geometry renderer doesn't generate any geometry textures but only renders to the main target texture, then depth pre-pass can be enabled.
|
|
37
27
|
*/
|
|
38
|
-
get
|
|
39
|
-
return this.
|
|
28
|
+
get disableDepthPrePass() {
|
|
29
|
+
return this._disableDepthPrePass;
|
|
30
|
+
}
|
|
31
|
+
set disableDepthPrePass(value) {
|
|
32
|
+
this._disableDepthPrePass = value;
|
|
33
|
+
this._renderer.disableDepthPrePass = value;
|
|
40
34
|
}
|
|
41
35
|
/**
|
|
42
36
|
* Gets or sets the name of the task.
|
|
@@ -50,36 +44,16 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
50
44
|
this._renderer.name = value;
|
|
51
45
|
}
|
|
52
46
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Force checking the layerMask property even if a custom list of meshes is provided (ie. if renderList is not undefined). Default is true.
|
|
55
|
-
*/
|
|
56
|
-
get forceLayerMaskCheck() {
|
|
57
|
-
return this._forceLayerMaskCheck;
|
|
58
|
-
}
|
|
59
|
-
set forceLayerMaskCheck(value) {
|
|
60
|
-
if (value === this._forceLayerMaskCheck) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
this._forceLayerMaskCheck = value;
|
|
64
|
-
this._renderer.forceLayerMaskCheck = value;
|
|
65
|
-
}
|
|
66
47
|
/**
|
|
67
48
|
* Constructs a new geometry renderer task.
|
|
68
49
|
* @param name The name of the task.
|
|
69
50
|
* @param frameGraph The frame graph the task belongs to.
|
|
70
51
|
* @param scene The scene the frame graph is associated with.
|
|
71
52
|
* @param options The options of the object renderer.
|
|
53
|
+
* @param existingObjectRenderer An existing object renderer to use (optional). If provided, the options parameter will be ignored.
|
|
72
54
|
*/
|
|
73
|
-
constructor(name, frameGraph, scene, options) {
|
|
74
|
-
super(name, frameGraph);
|
|
75
|
-
/**
|
|
76
|
-
* Whether depth testing is enabled (default is true).
|
|
77
|
-
*/
|
|
78
|
-
this.depthTest = true;
|
|
79
|
-
/**
|
|
80
|
-
* Whether depth writing is enabled (default is true).
|
|
81
|
-
*/
|
|
82
|
-
this.depthWrite = true;
|
|
55
|
+
constructor(name, frameGraph, scene, options, existingObjectRenderer) {
|
|
56
|
+
super(name, frameGraph, scene, options, existingObjectRenderer);
|
|
83
57
|
/**
|
|
84
58
|
* The size of the output textures (default is 100% of the back buffer texture size).
|
|
85
59
|
*/
|
|
@@ -97,26 +71,15 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
97
71
|
* Indicates if a mesh shouldn't be rendered when its material has depth write disabled (default is true).
|
|
98
72
|
*/
|
|
99
73
|
this.dontRenderWhenMaterialDepthWriteIsDisabled = true;
|
|
100
|
-
|
|
101
|
-
* If true, the output geometry texture(s) will be resolved at the end of the render pass, if samples is greater than 1 (default: true)
|
|
102
|
-
*/
|
|
103
|
-
this.resolveMSAAColors = true;
|
|
104
|
-
/**
|
|
105
|
-
* If true, depthTexture will be resolved at the end of the render pass, if this texture is provided and samples is greater than 1 (default: true)
|
|
106
|
-
*/
|
|
107
|
-
this.resolveMSAADepth = false;
|
|
74
|
+
this._disableDepthPrePass = true;
|
|
108
75
|
/**
|
|
109
76
|
* The list of texture descriptions used by the geometry renderer task.
|
|
110
77
|
*/
|
|
111
78
|
this.textureDescriptions = [];
|
|
112
|
-
this.
|
|
113
|
-
this.
|
|
114
|
-
this.
|
|
115
|
-
this.
|
|
116
|
-
this._renderer.renderSprites = false;
|
|
117
|
-
this._renderer.renderParticles = false;
|
|
118
|
-
this._renderer.enableBoundingBoxRendering = false;
|
|
119
|
-
this._renderer.enableOutlineRendering = false;
|
|
79
|
+
this.renderSprites = false;
|
|
80
|
+
this.renderParticles = false;
|
|
81
|
+
this.enableBoundingBoxRendering = false;
|
|
82
|
+
this.enableOutlineRendering = false;
|
|
120
83
|
this._renderer.disableDepthPrePass = true;
|
|
121
84
|
this._renderer.customIsReadyFunction = (mesh, refreshRate, preWarm) => {
|
|
122
85
|
if (this.dontRenderWhenMaterialDepthWriteIsDisabled && mesh.material && mesh.material.disableDepthWrite) {
|
|
@@ -129,10 +92,8 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
129
92
|
scene.updateTransformMatrix(true);
|
|
130
93
|
}
|
|
131
94
|
});
|
|
132
|
-
this.name = name;
|
|
133
95
|
this._clearAttachmentsLayout = new Map();
|
|
134
96
|
this._allAttachmentsLayout = [];
|
|
135
|
-
this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
136
97
|
this.geometryViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
137
98
|
this.geometryNormViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
138
99
|
this.geometryScreenDepthTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
@@ -176,31 +137,19 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
176
137
|
list.splice(index, 1);
|
|
177
138
|
}
|
|
178
139
|
}
|
|
179
|
-
|
|
180
|
-
return
|
|
140
|
+
getClassName() {
|
|
141
|
+
return "FrameGraphGeometryRendererTask";
|
|
181
142
|
}
|
|
182
|
-
record() {
|
|
183
|
-
if (this.objectList === undefined) {
|
|
184
|
-
throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object list must be provided`);
|
|
185
|
-
}
|
|
186
|
-
// Make sure the renderList / particleSystemList are set when FrameGraphGeometryRendererTask.isReady() is called!
|
|
187
|
-
this._renderer.renderList = this.objectList.meshes;
|
|
188
|
-
this._renderer.particleSystemList = this.objectList.particleSystems;
|
|
189
|
-
const outputTextureHandle = this._createMultiRenderTargetTexture();
|
|
190
|
-
const depthEnabled = this._checkDepthTextureCompatibility();
|
|
143
|
+
record(skipCreationOfDisabledPasses = false, additionalExecute) {
|
|
191
144
|
this._buildClearAttachmentsLayout();
|
|
192
145
|
this._registerForRenderPassId(this._renderer.renderPassId);
|
|
193
|
-
const outputTextureDescription = outputTextureHandle.length > 0 ? this._frameGraph.textureManager.getTextureDescription(outputTextureHandle[0]) : null;
|
|
194
|
-
this._textureWidth = outputTextureDescription?.size.width ?? 0;
|
|
195
|
-
this._textureHeight = outputTextureDescription?.size.height ?? 0;
|
|
196
|
-
// Create pass
|
|
197
146
|
MaterialHelperGeometryRendering.MarkAsDirty(this._renderer.renderPassId, this.objectList.meshes || this._scene.meshes);
|
|
198
|
-
const pass =
|
|
199
|
-
pass.
|
|
147
|
+
const pass = super.record(skipCreationOfDisabledPasses, additionalExecute);
|
|
148
|
+
const outputTextureHandles = pass.renderTarget;
|
|
200
149
|
let needPreviousWorldMatrices = false;
|
|
201
150
|
for (let i = 0; i < this.textureDescriptions.length; i++) {
|
|
202
151
|
const description = this.textureDescriptions[i];
|
|
203
|
-
const handle =
|
|
152
|
+
const handle = outputTextureHandles[i];
|
|
204
153
|
const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);
|
|
205
154
|
const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];
|
|
206
155
|
switch (geometryDescription.type) {
|
|
@@ -242,30 +191,55 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
242
191
|
}
|
|
243
192
|
}
|
|
244
193
|
this._scene.needsPreviousWorldMatrices = needPreviousWorldMatrices;
|
|
245
|
-
pass
|
|
246
|
-
pass.setExecuteFunc((context) => {
|
|
247
|
-
this._renderer.renderList = this.objectList.meshes;
|
|
248
|
-
this._renderer.particleSystemList = this.objectList.particleSystems;
|
|
249
|
-
pass.frameGraphRenderTarget.renderTargetWrapper.resolveMSAAColors = this.resolveMSAAColors;
|
|
250
|
-
pass.frameGraphRenderTarget.renderTargetWrapper.resolveMSAADepth = this.resolveMSAADepth;
|
|
251
|
-
context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);
|
|
252
|
-
this._clearAttachmentsLayout.forEach((layout, clearType) => {
|
|
253
|
-
context.clearColorAttachments(ClearColors[clearType], layout);
|
|
254
|
-
});
|
|
255
|
-
context.bindAttachments(this._allAttachmentsLayout);
|
|
256
|
-
context.render(this._renderer, this._textureWidth, this._textureHeight);
|
|
257
|
-
});
|
|
258
|
-
const passDisabled = this._frameGraph.addRenderPass(this.name + "_disabled", true);
|
|
259
|
-
passDisabled.setRenderTarget(outputTextureHandle);
|
|
260
|
-
passDisabled.setRenderTargetDepth(this.depthTexture);
|
|
261
|
-
passDisabled.setExecuteFunc((_context) => { });
|
|
194
|
+
return pass;
|
|
262
195
|
}
|
|
263
196
|
dispose() {
|
|
264
197
|
MaterialHelperGeometryRendering.DeleteConfiguration(this._renderer.renderPassId);
|
|
265
198
|
this._renderer.dispose();
|
|
266
199
|
super.dispose();
|
|
267
200
|
}
|
|
268
|
-
|
|
201
|
+
_resolveDanglingHandles(_targetTextures) {
|
|
202
|
+
if (this.targetTexture !== undefined) {
|
|
203
|
+
this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);
|
|
204
|
+
}
|
|
205
|
+
if (this.depthTexture !== undefined) {
|
|
206
|
+
this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
_checkParameters() {
|
|
210
|
+
if (this.objectList === undefined || this.camera === undefined) {
|
|
211
|
+
throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object list and camera must be provided`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
_checkTextureCompatibility(targetTextures) {
|
|
215
|
+
let depthEnabled = false;
|
|
216
|
+
let dimensions = null;
|
|
217
|
+
if (this.targetTexture !== undefined) {
|
|
218
|
+
const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);
|
|
219
|
+
if (this.samples !== outputTextureDescription.options.samples) {
|
|
220
|
+
throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the target texture and the output geometry textures must have the same number of samples`);
|
|
221
|
+
}
|
|
222
|
+
dimensions = outputTextureDescription.size;
|
|
223
|
+
}
|
|
224
|
+
if (this.depthTexture !== undefined) {
|
|
225
|
+
const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);
|
|
226
|
+
if (depthTextureDescription.options.samples !== this.samples && this.textureDescriptions.length > 0) {
|
|
227
|
+
throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth texture and the output geometry textures must have the same number of samples`);
|
|
228
|
+
}
|
|
229
|
+
this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);
|
|
230
|
+
depthEnabled = true;
|
|
231
|
+
dimensions = depthTextureDescription.size;
|
|
232
|
+
}
|
|
233
|
+
const geomTextureDimensions = this.sizeIsPercentage ? this._frameGraph.textureManager.getAbsoluteDimensions(this.size) : this.size;
|
|
234
|
+
if (dimensions !== null) {
|
|
235
|
+
if (geomTextureDimensions.width !== dimensions.width || geomTextureDimensions.height !== dimensions.height) {
|
|
236
|
+
throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the geometry textures (size: ${geomTextureDimensions.width}x${geomTextureDimensions.height}) and the target/depth texture (size: ${dimensions.width}x${dimensions.height}) must have the same dimensions.`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
depthEnabled = depthEnabled || super._checkTextureCompatibility(targetTextures);
|
|
240
|
+
return depthEnabled;
|
|
241
|
+
}
|
|
242
|
+
_getTargetHandles() {
|
|
269
243
|
const types = [];
|
|
270
244
|
const formats = [];
|
|
271
245
|
const labels = [];
|
|
@@ -281,38 +255,40 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
281
255
|
labels[i] = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index].name;
|
|
282
256
|
useSRGBBuffers[i] = false;
|
|
283
257
|
}
|
|
284
|
-
const baseHandle = this._frameGraph.textureManager.createRenderTargetTexture(this.name, {
|
|
285
|
-
size: this.size,
|
|
286
|
-
sizeIsPercentage: this.sizeIsPercentage,
|
|
287
|
-
options: {
|
|
288
|
-
createMipMaps: false,
|
|
289
|
-
samples: this.samples,
|
|
290
|
-
types,
|
|
291
|
-
formats,
|
|
292
|
-
useSRGBBuffers,
|
|
293
|
-
labels,
|
|
294
|
-
},
|
|
295
|
-
});
|
|
296
258
|
const handles = [];
|
|
297
|
-
|
|
298
|
-
|
|
259
|
+
if (this.textureDescriptions.length > 0) {
|
|
260
|
+
const baseHandle = this._frameGraph.textureManager.createRenderTargetTexture(this.name, {
|
|
261
|
+
size: this.size,
|
|
262
|
+
sizeIsPercentage: this.sizeIsPercentage,
|
|
263
|
+
options: {
|
|
264
|
+
createMipMaps: false,
|
|
265
|
+
samples: this.samples,
|
|
266
|
+
types,
|
|
267
|
+
formats,
|
|
268
|
+
useSRGBBuffers,
|
|
269
|
+
labels,
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
for (let i = 0; i < this.textureDescriptions.length; i++) {
|
|
273
|
+
handles.push(baseHandle + i);
|
|
274
|
+
}
|
|
299
275
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
let depthEnabled = false;
|
|
304
|
-
if (this.depthTexture !== undefined) {
|
|
305
|
-
if (this.depthTexture === backbufferDepthStencilTextureHandle) {
|
|
306
|
-
throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth/stencil back buffer is not allowed as a depth texture`);
|
|
276
|
+
if (this.targetTexture !== undefined) {
|
|
277
|
+
if (Array.isArray(this.targetTexture)) {
|
|
278
|
+
handles.push(...this.targetTexture);
|
|
307
279
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth texture and the output texture must have the same number of samples`);
|
|
280
|
+
else {
|
|
281
|
+
handles.push(this.targetTexture);
|
|
311
282
|
}
|
|
312
|
-
this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);
|
|
313
|
-
depthEnabled = true;
|
|
314
283
|
}
|
|
315
|
-
return
|
|
284
|
+
return handles;
|
|
285
|
+
}
|
|
286
|
+
_prepareRendering(context, depthEnabled) {
|
|
287
|
+
context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);
|
|
288
|
+
this._clearAttachmentsLayout.forEach((layout, clearType) => {
|
|
289
|
+
context.clearColorAttachments(ClearColors[clearType], layout);
|
|
290
|
+
});
|
|
291
|
+
context.bindAttachments(this._allAttachmentsLayout);
|
|
316
292
|
}
|
|
317
293
|
_buildClearAttachmentsLayout() {
|
|
318
294
|
const clearAttachmentsLayout = new Map();
|
|
@@ -334,6 +310,20 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
334
310
|
});
|
|
335
311
|
allAttachmentsLayout.push(true);
|
|
336
312
|
}
|
|
313
|
+
if (this.targetTexture !== undefined) {
|
|
314
|
+
let layout = clearAttachmentsLayout.get(0 /* GeometryRenderingTextureClearType.Zero */);
|
|
315
|
+
if (layout === undefined) {
|
|
316
|
+
layout = [];
|
|
317
|
+
clearAttachmentsLayout.set(0 /* GeometryRenderingTextureClearType.Zero */, layout);
|
|
318
|
+
for (let j = 0; j < this.textureDescriptions.length - 1; j++) {
|
|
319
|
+
layout[j] = false;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
clearAttachmentsLayout.forEach((layout) => {
|
|
323
|
+
layout.push(false);
|
|
324
|
+
});
|
|
325
|
+
allAttachmentsLayout.push(true);
|
|
326
|
+
}
|
|
337
327
|
this._clearAttachmentsLayout = new Map();
|
|
338
328
|
clearAttachmentsLayout.forEach((layout, clearType) => {
|
|
339
329
|
this._clearAttachmentsLayout.set(clearType, this._engine.buildTextureLayout(layout));
|
|
@@ -348,6 +338,9 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask {
|
|
|
348
338
|
const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];
|
|
349
339
|
configuration.defines[geometryDescription.defineIndex] = i;
|
|
350
340
|
}
|
|
341
|
+
if (this.targetTexture !== undefined) {
|
|
342
|
+
configuration.defines["PREPASS_COLOR_INDEX"] = this.textureDescriptions.length;
|
|
343
|
+
}
|
|
351
344
|
configuration.reverseCulling = this.reverseCulling;
|
|
352
345
|
}
|
|
353
346
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometryRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraphTextureHandle,\r\n Scene,\r\n Camera,\r\n AbstractEngine,\r\n FrameGraph,\r\n GeometryRenderingTextureClearType,\r\n FrameGraphObjectList,\r\n AbstractMesh,\r\n ObjectRendererOptions,\r\n} from \"core/index\";\r\nimport { backbufferDepthStencilTextureHandle } from \"../../frameGraphTypes\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { MaterialHelperGeometryRendering } from \"core/Materials/materialHelper.geometryrendering\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ObjectRenderer } from \"../../../Rendering/objectRenderer\";\r\n\r\n/**\r\n * Description of a texture used by the geometry renderer task.\r\n */\r\nexport interface IFrameGraphGeometryRendererTextureDescription {\r\n /**\r\n * The type of the texture.\r\n * The value should be one of the Constants.PREPASS_XXX_TEXTURE_TYPE values.\r\n */\r\n type: number;\r\n\r\n /**\r\n * The type of the texture.\r\n */\r\n textureType: number;\r\n\r\n /**\r\n * The format of the texture.\r\n */\r\n textureFormat: number;\r\n}\r\n\r\nconst ClearColors: Color4[] = [new Color4(0, 0, 0, 0), new Color4(1, 1, 1, 1), new Color4(0, 0, 0, 0)];\r\n\r\n/**\r\n * Task used to render geometry to a set of textures.\r\n */\r\nexport class FrameGraphGeometryRendererTask extends FrameGraphTask {\r\n /**\r\n * The depth texture attachment to use for rendering (optional).\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * Gets or sets the camera used for rendering.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n this._camera = camera;\r\n this._renderer.activeCamera = this.camera;\r\n }\r\n\r\n /**\r\n * The object list used for rendering.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n /**\r\n * Whether depth testing is enabled (default is true).\r\n */\r\n public depthTest = true;\r\n\r\n /**\r\n * Whether depth writing is enabled (default is true).\r\n */\r\n public depthWrite = true;\r\n\r\n /**\r\n * The size of the output textures (default is 100% of the back buffer texture size).\r\n */\r\n public size: { width: number; height: number } = { width: 100, height: 100 };\r\n\r\n /**\r\n * Whether the size is a percentage of the back buffer size (default is true).\r\n */\r\n public sizeIsPercentage = true;\r\n\r\n /**\r\n * The number of samples to use for the output textures (default is 1).\r\n */\r\n public samples = 1;\r\n\r\n private _reverseCulling = false;\r\n\r\n /**\r\n * Whether to reverse culling (default is false).\r\n */\r\n public get reverseCulling() {\r\n return this._reverseCulling;\r\n }\r\n\r\n public set reverseCulling(value: boolean) {\r\n this._reverseCulling = value;\r\n\r\n const configuration = MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId);\r\n if (configuration) {\r\n configuration.reverseCulling = value;\r\n }\r\n }\r\n\r\n /**\r\n * Indicates if a mesh shouldn't be rendered when its material has depth write disabled (default is true).\r\n */\r\n public dontRenderWhenMaterialDepthWriteIsDisabled = true;\r\n\r\n /**\r\n * If true, the output geometry texture(s) will be resolved at the end of the render pass, if samples is greater than 1 (default: true)\r\n */\r\n public resolveMSAAColors = true;\r\n\r\n /**\r\n * If true, depthTexture will be resolved at the end of the render pass, if this texture is provided and samples is greater than 1 (default: true)\r\n */\r\n public resolveMSAADepth = false;\r\n\r\n /**\r\n * The list of texture descriptions used by the geometry renderer task.\r\n */\r\n public textureDescriptions: IFrameGraphGeometryRendererTextureDescription[] = [];\r\n\r\n /**\r\n * The output depth texture attachment texture.\r\n * This texture will point to the same texture than the depthTexture property if it is set.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normalized depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n * The normalization is (d - near) / (far - near), where d is the depth value in view space and near and far are the near and far planes of the camera.\r\n */\r\n public readonly geometryNormViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth (in screen space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryScreenDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in local space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLocalPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The albedo output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryAlbedoTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The reflectivity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryReflectivityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The linear velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLinearVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The object renderer used by the geometry renderer task.\r\n */\r\n public get objectRenderer() {\r\n return this._renderer;\r\n }\r\n\r\n /**\r\n * Gets or sets the name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(value: string) {\r\n this._name = value;\r\n if (this._renderer) {\r\n this._renderer.name = value;\r\n }\r\n }\r\n\r\n private _forceLayerMaskCheck = true;\r\n /**\r\n * Force checking the layerMask property even if a custom list of meshes is provided (ie. if renderList is not undefined). Default is true.\r\n */\r\n public get forceLayerMaskCheck() {\r\n return this._forceLayerMaskCheck;\r\n }\r\n\r\n public set forceLayerMaskCheck(value: boolean) {\r\n if (value === this._forceLayerMaskCheck) {\r\n return;\r\n }\r\n\r\n this._forceLayerMaskCheck = value;\r\n this._renderer.forceLayerMaskCheck = value;\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _scene: Scene;\r\n private readonly _renderer: ObjectRenderer;\r\n private _textureWidth: number;\r\n private _textureHeight: number;\r\n private _clearAttachmentsLayout: Map<GeometryRenderingTextureClearType, number[]>;\r\n private _allAttachmentsLayout: number[];\r\n\r\n /**\r\n * Constructs a new geometry renderer task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions) {\r\n super(name, frameGraph);\r\n\r\n this._scene = scene;\r\n this._engine = this._scene.getEngine();\r\n\r\n this._renderer = new ObjectRenderer(name, scene, options);\r\n this._renderer.renderSprites = false;\r\n this._renderer.renderParticles = false;\r\n this._renderer.enableBoundingBoxRendering = false;\r\n this._renderer.enableOutlineRendering = false;\r\n this._renderer.disableDepthPrePass = true;\r\n\r\n this._renderer.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if (this.dontRenderWhenMaterialDepthWriteIsDisabled && mesh.material && mesh.material.disableDepthWrite) {\r\n return !!preWarm;\r\n }\r\n\r\n return mesh.isReady(refreshRate === 0);\r\n };\r\n\r\n this._renderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n if (!this._renderer.options.doNotChangeAspectRatio) {\r\n scene.updateTransformMatrix(true);\r\n }\r\n });\r\n\r\n this.name = name;\r\n this._clearAttachmentsLayout = new Map();\r\n this._allAttachmentsLayout = [];\r\n\r\n this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryNormViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryScreenDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryViewNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLocalPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryAlbedoTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryReflectivityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLinearVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n /**\r\n * Gets the list of excluded meshes from the velocity texture.\r\n */\r\n public get excludedSkinnedMeshFromVelocityTexture(): AbstractMesh[] {\r\n return MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId).excludedSkinnedMesh;\r\n }\r\n\r\n /**\r\n * Excludes the given skinned mesh from computing bones velocities.\r\n * Computing bones velocities can have a cost. The cost can be saved by calling this function and by passing the skinned mesh to ignore.\r\n * @param skinnedMesh The mesh containing the skeleton to ignore when computing the velocity map.\r\n */\r\n public excludeSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n if (skinnedMesh.skeleton) {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n if (list.indexOf(skinnedMesh) === -1) {\r\n list.push(skinnedMesh);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes the given skinned mesh from the excluded meshes to integrate bones velocities while rendering the velocity map.\r\n * @param skinnedMesh The mesh containing the skeleton that has been ignored previously.\r\n * @see excludeSkinnedMesh to exclude a skinned mesh from bones velocity computation.\r\n */\r\n public removeExcludedSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n const index = list.indexOf(skinnedMesh);\r\n if (index !== -1) {\r\n list.splice(index, 1);\r\n }\r\n }\r\n\r\n public override isReady() {\r\n return this._renderer.isReadyForRendering(this._textureWidth, this._textureHeight);\r\n }\r\n\r\n public record() {\r\n if (this.objectList === undefined) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object list must be provided`);\r\n }\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphGeometryRendererTask.isReady() is called!\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n const outputTextureHandle = this._createMultiRenderTargetTexture();\r\n\r\n const depthEnabled = this._checkDepthTextureCompatibility();\r\n\r\n this._buildClearAttachmentsLayout();\r\n\r\n this._registerForRenderPassId(this._renderer.renderPassId);\r\n\r\n const outputTextureDescription = outputTextureHandle.length > 0 ? this._frameGraph.textureManager.getTextureDescription(outputTextureHandle[0]) : null;\r\n\r\n this._textureWidth = outputTextureDescription?.size.width ?? 0;\r\n this._textureHeight = outputTextureDescription?.size.height ?? 0;\r\n\r\n // Create pass\r\n MaterialHelperGeometryRendering.MarkAsDirty(this._renderer.renderPassId, this.objectList.meshes || this._scene.meshes);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(outputTextureHandle);\r\n\r\n let needPreviousWorldMatrices = false;\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const handle = outputTextureHandle[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n switch (geometryDescription.type) {\r\n case Constants.PREPASS_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryNormViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryScreenDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLocalPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_ALBEDO_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryAlbedoTexture, handle);\r\n break;\r\n case Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryReflectivityTexture, handle);\r\n break;\r\n case Constants.PREPASS_VELOCITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n case Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLinearVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n }\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = needPreviousWorldMatrices;\r\n\r\n pass.setRenderTargetDepth(this.depthTexture);\r\n\r\n pass.setExecuteFunc((context) => {\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n pass.frameGraphRenderTarget!.renderTargetWrapper!.resolveMSAAColors = this.resolveMSAAColors;\r\n pass.frameGraphRenderTarget!.renderTargetWrapper!.resolveMSAADepth = this.resolveMSAADepth;\r\n\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n\r\n this._clearAttachmentsLayout.forEach((layout, clearType) => {\r\n context.clearColorAttachments(ClearColors[clearType], layout);\r\n });\r\n\r\n context.bindAttachments(this._allAttachmentsLayout);\r\n\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(outputTextureHandle);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n public override dispose(): void {\r\n MaterialHelperGeometryRendering.DeleteConfiguration(this._renderer.renderPassId);\r\n this._renderer.dispose();\r\n super.dispose();\r\n }\r\n\r\n private _createMultiRenderTargetTexture(): FrameGraphTextureHandle[] {\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const labels: string[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n\r\n if (index === -1) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: unknown texture type ${description.type}`);\r\n }\r\n\r\n types[i] = description.textureType;\r\n formats[i] = description.textureFormat;\r\n labels[i] = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index].name;\r\n useSRGBBuffers[i] = false;\r\n }\r\n\r\n const baseHandle = this._frameGraph.textureManager.createRenderTargetTexture(this.name, {\r\n size: this.size,\r\n sizeIsPercentage: this.sizeIsPercentage,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.samples,\r\n types,\r\n formats,\r\n useSRGBBuffers,\r\n labels,\r\n },\r\n });\r\n\r\n const handles: FrameGraphTextureHandle[] = [];\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n handles.push(baseHandle + i);\r\n }\r\n\r\n return handles;\r\n }\r\n\r\n private _checkDepthTextureCompatibility(): boolean {\r\n let depthEnabled = false;\r\n\r\n if (this.depthTexture !== undefined) {\r\n if (this.depthTexture === backbufferDepthStencilTextureHandle) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth/stencil back buffer is not allowed as a depth texture`);\r\n }\r\n\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== this.samples && this.textureDescriptions.length > 0) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth texture and the output texture must have the same number of samples`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n\r\n depthEnabled = true;\r\n }\r\n\r\n return depthEnabled;\r\n }\r\n\r\n private _buildClearAttachmentsLayout() {\r\n const clearAttachmentsLayout = new Map<GeometryRenderingTextureClearType, boolean[]>();\r\n const allAttachmentsLayout: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n let layout = clearAttachmentsLayout.get(geometryDescription.clearType);\r\n if (layout === undefined) {\r\n layout = [];\r\n clearAttachmentsLayout.set(geometryDescription.clearType, layout);\r\n for (let j = 0; j < i; j++) {\r\n layout[j] = false;\r\n }\r\n }\r\n\r\n clearAttachmentsLayout.forEach((layout, clearType) => {\r\n layout.push(clearType === geometryDescription.clearType);\r\n });\r\n\r\n allAttachmentsLayout.push(true);\r\n }\r\n\r\n this._clearAttachmentsLayout = new Map();\r\n\r\n clearAttachmentsLayout.forEach((layout, clearType) => {\r\n this._clearAttachmentsLayout.set(clearType, this._engine.buildTextureLayout(layout));\r\n });\r\n\r\n this._allAttachmentsLayout = this._engine.buildTextureLayout(allAttachmentsLayout);\r\n }\r\n\r\n private _registerForRenderPassId(renderPassId: number) {\r\n const configuration = MaterialHelperGeometryRendering.CreateConfiguration(renderPassId);\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n configuration.defines[geometryDescription.defineIndex] = i;\r\n }\r\n\r\n configuration.reverseCulling = this.reverseCulling;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"geometryRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraphTextureHandle, Scene, FrameGraph, AbstractMesh, ObjectRendererOptions, FrameGraphRenderContext, FrameGraphRenderPass, ObjectRenderer } from \"core/index\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { MaterialHelperGeometryRendering, GeometryRenderingTextureClearType } from \"core/Materials/materialHelper.geometryrendering\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphObjectRendererTask } from \"./objectRendererTask\";\r\n\r\n/**\r\n * Description of a texture used by the geometry renderer task.\r\n */\r\nexport interface IFrameGraphGeometryRendererTextureDescription {\r\n /**\r\n * The type of the texture.\r\n * The value should be one of the Constants.PREPASS_XXX_TEXTURE_TYPE values.\r\n */\r\n type: number;\r\n\r\n /**\r\n * The type of the texture.\r\n */\r\n textureType: number;\r\n\r\n /**\r\n * The format of the texture.\r\n */\r\n textureFormat: number;\r\n}\r\n\r\nconst ClearColors: Color4[] = [new Color4(0, 0, 0, 0), new Color4(1, 1, 1, 1), new Color4(0, 0, 0, 0)];\r\n\r\n/**\r\n * Task used to render geometry to a set of textures.\r\n */\r\nexport class FrameGraphGeometryRendererTask extends FrameGraphObjectRendererTask {\r\n /**\r\n * The size of the output textures (default is 100% of the back buffer texture size).\r\n */\r\n public size: { width: number; height: number } = { width: 100, height: 100 };\r\n\r\n /**\r\n * Whether the size is a percentage of the back buffer size (default is true).\r\n */\r\n public sizeIsPercentage = true;\r\n\r\n /**\r\n * The number of samples to use for the output textures (default is 1).\r\n */\r\n public samples = 1;\r\n\r\n private _reverseCulling = false;\r\n\r\n /**\r\n * Whether to reverse culling (default is false).\r\n */\r\n public get reverseCulling() {\r\n return this._reverseCulling;\r\n }\r\n\r\n public set reverseCulling(value: boolean) {\r\n this._reverseCulling = value;\r\n\r\n const configuration = MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId);\r\n if (configuration) {\r\n configuration.reverseCulling = value;\r\n }\r\n }\r\n\r\n /**\r\n * Indicates if a mesh shouldn't be rendered when its material has depth write disabled (default is true).\r\n */\r\n public dontRenderWhenMaterialDepthWriteIsDisabled = true;\r\n\r\n private _disableDepthPrePass = true;\r\n /**\r\n * Indicates whether the depth pre-pass is disabled (default is true).\r\n * Materials that require depth pre-pass (Material.needDepthPrePass == true) don't work with the geometry renderer, that's why this setting is true by default.\r\n * However, if the geometry renderer doesn't generate any geometry textures but only renders to the main target texture, then depth pre-pass can be enabled.\r\n */\r\n public get disableDepthPrePass() {\r\n return this._disableDepthPrePass;\r\n }\r\n\r\n public set disableDepthPrePass(value: boolean) {\r\n this._disableDepthPrePass = value;\r\n this._renderer.disableDepthPrePass = value;\r\n }\r\n\r\n /**\r\n * The list of texture descriptions used by the geometry renderer task.\r\n */\r\n public textureDescriptions: IFrameGraphGeometryRendererTextureDescription[] = [];\r\n\r\n /**\r\n * The depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normalized depth (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n * The normalization is (d - near) / (far - near), where d is the depth value in view space and near and far are the near and far planes of the camera.\r\n */\r\n public readonly geometryNormViewDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth (in screen space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryScreenDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in view space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryViewNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldNormalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in local space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLocalPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The position (in world space) output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryWorldPositionTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The albedo output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryAlbedoTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The reflectivity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryReflectivityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The linear velocity output texture. Will point to a valid texture only if that texture has been requested in textureDescriptions!\r\n */\r\n public readonly geometryLinearVelocityTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Gets or sets the name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(value: string) {\r\n this._name = value;\r\n if (this._renderer) {\r\n this._renderer.name = value;\r\n }\r\n }\r\n\r\n private _clearAttachmentsLayout: Map<GeometryRenderingTextureClearType, number[]>;\r\n private _allAttachmentsLayout: number[];\r\n\r\n /**\r\n * Constructs a new geometry renderer task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n * @param existingObjectRenderer An existing object renderer to use (optional). If provided, the options parameter will be ignored.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions, existingObjectRenderer?: ObjectRenderer) {\r\n super(name, frameGraph, scene, options, existingObjectRenderer);\r\n\r\n this.renderSprites = false;\r\n this.renderParticles = false;\r\n this.enableBoundingBoxRendering = false;\r\n this.enableOutlineRendering = false;\r\n this._renderer.disableDepthPrePass = true;\r\n\r\n this._renderer.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if (this.dontRenderWhenMaterialDepthWriteIsDisabled && mesh.material && mesh.material.disableDepthWrite) {\r\n return !!preWarm;\r\n }\r\n\r\n return mesh.isReady(refreshRate === 0);\r\n };\r\n\r\n this._renderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n if (!this._renderer.options.doNotChangeAspectRatio) {\r\n scene.updateTransformMatrix(true);\r\n }\r\n });\r\n\r\n this._clearAttachmentsLayout = new Map();\r\n this._allAttachmentsLayout = [];\r\n\r\n this.geometryViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryNormViewDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryScreenDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryViewNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldNormalTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLocalPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryWorldPositionTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryAlbedoTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryReflectivityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.geometryLinearVelocityTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n /**\r\n * Gets the list of excluded meshes from the velocity texture.\r\n */\r\n public get excludedSkinnedMeshFromVelocityTexture(): AbstractMesh[] {\r\n return MaterialHelperGeometryRendering.GetConfiguration(this._renderer.renderPassId).excludedSkinnedMesh;\r\n }\r\n\r\n /**\r\n * Excludes the given skinned mesh from computing bones velocities.\r\n * Computing bones velocities can have a cost. The cost can be saved by calling this function and by passing the skinned mesh to ignore.\r\n * @param skinnedMesh The mesh containing the skeleton to ignore when computing the velocity map.\r\n */\r\n public excludeSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n if (skinnedMesh.skeleton) {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n if (list.indexOf(skinnedMesh) === -1) {\r\n list.push(skinnedMesh);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes the given skinned mesh from the excluded meshes to integrate bones velocities while rendering the velocity map.\r\n * @param skinnedMesh The mesh containing the skeleton that has been ignored previously.\r\n * @see excludeSkinnedMesh to exclude a skinned mesh from bones velocity computation.\r\n */\r\n public removeExcludedSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void {\r\n const list = this.excludedSkinnedMeshFromVelocityTexture;\r\n const index = list.indexOf(skinnedMesh);\r\n if (index !== -1) {\r\n list.splice(index, 1);\r\n }\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphGeometryRendererTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass {\r\n this._buildClearAttachmentsLayout();\r\n\r\n this._registerForRenderPassId(this._renderer.renderPassId);\r\n\r\n MaterialHelperGeometryRendering.MarkAsDirty(this._renderer.renderPassId, this.objectList.meshes || this._scene.meshes);\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute) as FrameGraphRenderPass;\r\n\r\n const outputTextureHandles = pass.renderTarget as FrameGraphTextureHandle[];\r\n\r\n let needPreviousWorldMatrices = false;\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const handle = outputTextureHandles[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n switch (geometryDescription.type) {\r\n case Constants.PREPASS_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryNormViewDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryScreenDepthTexture, handle);\r\n break;\r\n case Constants.PREPASS_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryViewNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldNormalTexture, handle);\r\n break;\r\n case Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLocalPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_POSITION_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryWorldPositionTexture, handle);\r\n break;\r\n case Constants.PREPASS_ALBEDO_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryAlbedoTexture, handle);\r\n break;\r\n case Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryReflectivityTexture, handle);\r\n break;\r\n case Constants.PREPASS_VELOCITY_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n case Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE:\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.geometryLinearVelocityTexture, handle);\r\n needPreviousWorldMatrices = true;\r\n break;\r\n }\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = needPreviousWorldMatrices;\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n MaterialHelperGeometryRendering.DeleteConfiguration(this._renderer.renderPassId);\r\n this._renderer.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected override _resolveDanglingHandles(_targetTextures: FrameGraphTextureHandle[]) {\r\n if (this.targetTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n }\r\n\r\n protected override _checkParameters() {\r\n if (this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object list and camera must be provided`);\r\n }\r\n }\r\n\r\n protected override _checkTextureCompatibility(targetTextures: FrameGraphTextureHandle[]): boolean {\r\n let depthEnabled = false;\r\n\r\n let dimensions: { width: number; height: number } | null = null;\r\n\r\n if (this.targetTexture !== undefined) {\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(Array.isArray(this.targetTexture) ? this.targetTexture[0] : this.targetTexture);\r\n if (this.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the target texture and the output geometry textures must have the same number of samples`);\r\n }\r\n dimensions = outputTextureDescription.size;\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== this.samples && this.textureDescriptions.length > 0) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: the depth texture and the output geometry textures must have the same number of samples`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n\r\n depthEnabled = true;\r\n dimensions = depthTextureDescription.size;\r\n }\r\n\r\n const geomTextureDimensions = this.sizeIsPercentage ? this._frameGraph.textureManager.getAbsoluteDimensions(this.size) : this.size;\r\n if (dimensions !== null) {\r\n if (geomTextureDimensions.width !== dimensions.width || geomTextureDimensions.height !== dimensions.height) {\r\n throw new Error(\r\n `FrameGraphGeometryRendererTask ${this.name}: the geometry textures (size: ${geomTextureDimensions.width}x${geomTextureDimensions.height}) and the target/depth texture (size: ${dimensions.width}x${dimensions.height}) must have the same dimensions.`\r\n );\r\n }\r\n }\r\n\r\n depthEnabled = depthEnabled || super._checkTextureCompatibility(targetTextures);\r\n\r\n return depthEnabled;\r\n }\r\n\r\n protected override _getTargetHandles(): FrameGraphTextureHandle[] {\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const labels: string[] = [];\r\n const useSRGBBuffers: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n\r\n if (index === -1) {\r\n throw new Error(`FrameGraphGeometryRendererTask ${this.name}: unknown texture type ${description.type}`);\r\n }\r\n\r\n types[i] = description.textureType;\r\n formats[i] = description.textureFormat;\r\n labels[i] = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index].name;\r\n useSRGBBuffers[i] = false;\r\n }\r\n\r\n const handles: FrameGraphTextureHandle[] = [];\r\n\r\n if (this.textureDescriptions.length > 0) {\r\n const baseHandle = this._frameGraph.textureManager.createRenderTargetTexture(this.name, {\r\n size: this.size,\r\n sizeIsPercentage: this.sizeIsPercentage,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.samples,\r\n types,\r\n formats,\r\n useSRGBBuffers,\r\n labels,\r\n },\r\n });\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n handles.push(baseHandle + i);\r\n }\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n if (Array.isArray(this.targetTexture)) {\r\n handles.push(...this.targetTexture);\r\n } else {\r\n handles.push(this.targetTexture);\r\n }\r\n }\r\n\r\n return handles;\r\n }\r\n\r\n protected override _prepareRendering(context: FrameGraphRenderContext, depthEnabled: boolean) {\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n\r\n this._clearAttachmentsLayout.forEach((layout, clearType) => {\r\n context.clearColorAttachments(ClearColors[clearType], layout);\r\n });\r\n\r\n context.bindAttachments(this._allAttachmentsLayout);\r\n }\r\n\r\n private _buildClearAttachmentsLayout() {\r\n const clearAttachmentsLayout = new Map<GeometryRenderingTextureClearType, boolean[]>();\r\n const allAttachmentsLayout: boolean[] = [];\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n let layout = clearAttachmentsLayout.get(geometryDescription.clearType);\r\n if (layout === undefined) {\r\n layout = [];\r\n clearAttachmentsLayout.set(geometryDescription.clearType, layout);\r\n for (let j = 0; j < i; j++) {\r\n layout[j] = false;\r\n }\r\n }\r\n\r\n clearAttachmentsLayout.forEach((layout, clearType) => {\r\n layout.push(clearType === geometryDescription.clearType);\r\n });\r\n\r\n allAttachmentsLayout.push(true);\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n let layout = clearAttachmentsLayout.get(GeometryRenderingTextureClearType.Zero);\r\n if (layout === undefined) {\r\n layout = [];\r\n clearAttachmentsLayout.set(GeometryRenderingTextureClearType.Zero, layout);\r\n for (let j = 0; j < this.textureDescriptions.length - 1; j++) {\r\n layout[j] = false;\r\n }\r\n }\r\n\r\n clearAttachmentsLayout.forEach((layout) => {\r\n layout.push(false);\r\n });\r\n\r\n allAttachmentsLayout.push(true);\r\n }\r\n\r\n this._clearAttachmentsLayout = new Map();\r\n\r\n clearAttachmentsLayout.forEach((layout, clearType) => {\r\n this._clearAttachmentsLayout.set(clearType, this._engine.buildTextureLayout(layout));\r\n });\r\n\r\n this._allAttachmentsLayout = this._engine.buildTextureLayout(allAttachmentsLayout);\r\n }\r\n\r\n private _registerForRenderPassId(renderPassId: number) {\r\n const configuration = MaterialHelperGeometryRendering.CreateConfiguration(renderPassId);\r\n\r\n for (let i = 0; i < this.textureDescriptions.length; i++) {\r\n const description = this.textureDescriptions[i];\r\n const index = MaterialHelperGeometryRendering.GeometryTextureDescriptions.findIndex((f) => f.type === description.type);\r\n const geometryDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[index];\r\n\r\n configuration.defines[geometryDescription.defineIndex] = i;\r\n }\r\n\r\n if (this.targetTexture !== undefined) {\r\n configuration.defines[\"PREPASS_COLOR_INDEX\"] = this.textureDescriptions.length;\r\n }\r\n\r\n configuration.reverseCulling = this.reverseCulling;\r\n }\r\n}\r\n"]}
|
|
@@ -53,6 +53,12 @@ export declare class FrameGraphObjectRendererTask extends FrameGraphTask {
|
|
|
53
53
|
* It is also used to determine the main camera used by the frame graph: this is the camera used by the main object renderer.
|
|
54
54
|
*/
|
|
55
55
|
isMainObjectRenderer: boolean;
|
|
56
|
+
private _renderMeshes;
|
|
57
|
+
/**
|
|
58
|
+
* Defines if meshes should be rendered (default is true).
|
|
59
|
+
*/
|
|
60
|
+
get renderMeshes(): boolean;
|
|
61
|
+
set renderMeshes(value: boolean);
|
|
56
62
|
private _renderParticles;
|
|
57
63
|
/**
|
|
58
64
|
* Defines if particles should be rendered (default is true).
|
|
@@ -127,7 +133,13 @@ export declare class FrameGraphObjectRendererTask extends FrameGraphTask {
|
|
|
127
133
|
*/
|
|
128
134
|
constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions, existingObjectRenderer?: ObjectRenderer);
|
|
129
135
|
isReady(): boolean;
|
|
136
|
+
getClassName(): string;
|
|
130
137
|
record(skipCreationOfDisabledPasses?: boolean, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass;
|
|
131
138
|
dispose(): void;
|
|
139
|
+
protected _resolveDanglingHandles(targetTextures: FrameGraphTextureHandle[]): void;
|
|
140
|
+
protected _checkParameters(): void;
|
|
141
|
+
protected _checkTextureCompatibility(targetTextures: FrameGraphTextureHandle[]): boolean;
|
|
142
|
+
protected _getTargetHandles(): FrameGraphTextureHandle[];
|
|
143
|
+
protected _prepareRendering(context: FrameGraphRenderContext, depthEnabled: boolean): void;
|
|
132
144
|
protected _setLightsForShadow(): void;
|
|
133
145
|
}
|