@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
|
@@ -31,6 +31,19 @@ export class FrameGraphObjectRendererTask extends FrameGraphTask {
|
|
|
31
31
|
this._disableImageProcessing = value;
|
|
32
32
|
this._renderer.disableImageProcessing = value;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Defines if meshes should be rendered (default is true).
|
|
36
|
+
*/
|
|
37
|
+
get renderMeshes() {
|
|
38
|
+
return this._renderMeshes;
|
|
39
|
+
}
|
|
40
|
+
set renderMeshes(value) {
|
|
41
|
+
if (value === this._renderMeshes) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this._renderMeshes = value;
|
|
45
|
+
this._renderer.renderMeshes = value;
|
|
46
|
+
}
|
|
34
47
|
/**
|
|
35
48
|
* Defines if particles should be rendered (default is true).
|
|
36
49
|
*/
|
|
@@ -145,6 +158,7 @@ export class FrameGraphObjectRendererTask extends FrameGraphTask {
|
|
|
145
158
|
* It is also used to determine the main camera used by the frame graph: this is the camera used by the main object renderer.
|
|
146
159
|
*/
|
|
147
160
|
this.isMainObjectRenderer = false;
|
|
161
|
+
this._renderMeshes = true;
|
|
148
162
|
this._renderParticles = true;
|
|
149
163
|
this._renderSprites = true;
|
|
150
164
|
this._forceLayerMaskCheck = true;
|
|
@@ -184,35 +198,17 @@ export class FrameGraphObjectRendererTask extends FrameGraphTask {
|
|
|
184
198
|
isReady() {
|
|
185
199
|
return this._renderer.isReadyForRendering(this._textureWidth, this._textureHeight);
|
|
186
200
|
}
|
|
201
|
+
getClassName() {
|
|
202
|
+
return "FrameGraphObjectRendererTask";
|
|
203
|
+
}
|
|
187
204
|
record(skipCreationOfDisabledPasses = false, additionalExecute) {
|
|
188
|
-
|
|
189
|
-
throw new Error(`FrameGraphObjectRendererTask ${this.name}: targetTexture and objectList are required`);
|
|
190
|
-
}
|
|
205
|
+
this._checkParameters();
|
|
191
206
|
// Make sure the renderList / particleSystemList are set when FrameGraphObjectRendererTask.isReady() is called!
|
|
192
207
|
this._renderer.renderList = this.objectList.meshes;
|
|
193
208
|
this._renderer.particleSystemList = this.objectList.particleSystems;
|
|
194
|
-
const targetTextures =
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
if (this.depthTexture !== undefined) {
|
|
198
|
-
if (this.depthTexture === backbufferDepthStencilTextureHandle && (targetTextures[0] !== backbufferColorTextureHandle || targetTextures.length > 1)) {
|
|
199
|
-
throw new Error(`FrameGraphObjectRendererTask ${this.name}: the back buffer color texture is the only color texture allowed when the depth is the back buffer depth/stencil`);
|
|
200
|
-
}
|
|
201
|
-
if (this.depthTexture !== backbufferDepthStencilTextureHandle && targetTextures[0] === backbufferColorTextureHandle) {
|
|
202
|
-
throw new Error(`FrameGraphObjectRendererTask ${this.name}: the back buffer depth/stencil texture is the only depth texture allowed when the target is the back buffer color`);
|
|
203
|
-
}
|
|
204
|
-
const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);
|
|
205
|
-
if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {
|
|
206
|
-
throw new Error(`FrameGraphObjectRendererTask ${this.name}: the depth texture "${depthTextureDescription.options.labels?.[0] ?? "noname"}" (${depthTextureDescription.options.samples} samples) and the output texture "${outputTextureDescription.options.labels?.[0] ?? "noname"}" (${outputTextureDescription.options.samples} samples) must have the same number of samples`);
|
|
207
|
-
}
|
|
208
|
-
depthEnabled = true;
|
|
209
|
-
}
|
|
210
|
-
this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, targetTextures[0]);
|
|
211
|
-
if (this.depthTexture !== undefined) {
|
|
212
|
-
this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);
|
|
213
|
-
}
|
|
214
|
-
this._textureWidth = outputTextureDescription.size.width;
|
|
215
|
-
this._textureHeight = outputTextureDescription.size.height;
|
|
209
|
+
const targetTextures = this._getTargetHandles();
|
|
210
|
+
const depthEnabled = this._checkTextureCompatibility(targetTextures);
|
|
211
|
+
this._resolveDanglingHandles(targetTextures);
|
|
216
212
|
this._setLightsForShadow();
|
|
217
213
|
const pass = this._frameGraph.addRenderPass(this.name);
|
|
218
214
|
pass.setRenderTarget(targetTextures);
|
|
@@ -231,7 +227,7 @@ export class FrameGraphObjectRendererTask extends FrameGraphTask {
|
|
|
231
227
|
if (boundingBoxRenderer) {
|
|
232
228
|
currentBoundingBoxMeshList.length = boundingBoxRenderer.renderList.length;
|
|
233
229
|
}
|
|
234
|
-
|
|
230
|
+
this._prepareRendering(context, depthEnabled);
|
|
235
231
|
const camera = this._renderer.activeCamera;
|
|
236
232
|
if (camera && camera.cameraRigMode !== 0 && !camera._renderingMultiview) {
|
|
237
233
|
for (let index = 0; index < camera._rigCameras.length; index++) {
|
|
@@ -268,6 +264,49 @@ export class FrameGraphObjectRendererTask extends FrameGraphTask {
|
|
|
268
264
|
}
|
|
269
265
|
super.dispose();
|
|
270
266
|
}
|
|
267
|
+
_resolveDanglingHandles(targetTextures) {
|
|
268
|
+
if (targetTextures.length > 0) {
|
|
269
|
+
this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, targetTextures[0]);
|
|
270
|
+
}
|
|
271
|
+
if (this.depthTexture !== undefined) {
|
|
272
|
+
this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
_checkParameters() {
|
|
276
|
+
if (this.targetTexture === undefined || this.objectList === undefined || this.camera === undefined) {
|
|
277
|
+
throw new Error(`FrameGraphObjectRendererTask ${this.name}: targetTexture, objectList, and camera are required`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
_checkTextureCompatibility(targetTextures) {
|
|
281
|
+
const className = this.getClassName();
|
|
282
|
+
let outputTextureDescription = targetTextures.length > 0 ? this._frameGraph.textureManager.getTextureDescription(targetTextures[0]) : null;
|
|
283
|
+
let depthEnabled = false;
|
|
284
|
+
if (this.depthTexture !== undefined) {
|
|
285
|
+
if (outputTextureDescription && this.depthTexture !== backbufferDepthStencilTextureHandle && targetTextures[0] === backbufferColorTextureHandle) {
|
|
286
|
+
throw new Error(`${className} ${this.name}: the back buffer depth/stencil texture is the only depth texture allowed when the target is the back buffer color`);
|
|
287
|
+
}
|
|
288
|
+
const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);
|
|
289
|
+
if (!outputTextureDescription) {
|
|
290
|
+
outputTextureDescription = depthTextureDescription;
|
|
291
|
+
}
|
|
292
|
+
if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {
|
|
293
|
+
throw new Error(`${className} ${this.name}: the depth texture "${depthTextureDescription.options.labels?.[0] ?? "noname"}" (${depthTextureDescription.options.samples} samples) and the output texture "${outputTextureDescription.options.labels?.[0] ?? "noname"}" (${outputTextureDescription.options.samples} samples) must have the same number of samples`);
|
|
294
|
+
}
|
|
295
|
+
if (depthTextureDescription.size.width !== outputTextureDescription.size.width || depthTextureDescription.size.height !== outputTextureDescription.size.height) {
|
|
296
|
+
throw new Error(`${className} ${this.name}: the depth texture (size: ${depthTextureDescription.size.width}x${depthTextureDescription.size.height}) and the target texture (size: ${outputTextureDescription.size.width}x${outputTextureDescription.size.height}) must have the same dimensions.`);
|
|
297
|
+
}
|
|
298
|
+
depthEnabled = true;
|
|
299
|
+
}
|
|
300
|
+
this._textureWidth = outputTextureDescription?.size.width ?? 1;
|
|
301
|
+
this._textureHeight = outputTextureDescription?.size.height ?? 1;
|
|
302
|
+
return depthEnabled;
|
|
303
|
+
}
|
|
304
|
+
_getTargetHandles() {
|
|
305
|
+
return Array.isArray(this.targetTexture) ? this.targetTexture : [this.targetTexture];
|
|
306
|
+
}
|
|
307
|
+
_prepareRendering(context, depthEnabled) {
|
|
308
|
+
context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);
|
|
309
|
+
}
|
|
271
310
|
_setLightsForShadow() {
|
|
272
311
|
const lightsForShadow = new Set();
|
|
273
312
|
const shadowEnabled = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraph,\r\n FrameGraphTextureHandle,\r\n Scene,\r\n Camera,\r\n FrameGraphObjectList,\r\n FrameGraphRenderContext,\r\n ObjectRendererOptions,\r\n Light,\r\n Nullable,\r\n Observer,\r\n FrameGraphShadowGeneratorTask,\r\n FrameGraphRenderPass,\r\n AbstractEngine,\r\n BoundingBoxRenderer,\r\n ShadowLight,\r\n} from \"core/index\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"../../frameGraphTypes\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ObjectRenderer } from \"../../../Rendering/objectRenderer\";\r\nimport { FrameGraphCascadedShadowGeneratorTask } from \"./csmShadowGeneratorTask\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\n/**\r\n * Task used to render objects to a texture.\r\n */\r\nexport class FrameGraphObjectRendererTask extends FrameGraphTask {\r\n /**\r\n * The target texture where the objects will be rendered.\r\n */\r\n public targetTexture: FrameGraphTextureHandle | FrameGraphTextureHandle[];\r\n\r\n /**\r\n * The depth attachment texture where the objects will be rendered (optional).\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The shadow generators used to render the objects (optional).\r\n */\r\n public shadowGenerators?: FrameGraphShadowGeneratorTask[] = [];\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * Gets or sets the camera used to render the objects.\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 list of objects to render.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n /**\r\n * If depth testing should be enabled (default is true).\r\n */\r\n public depthTest = true;\r\n\r\n /**\r\n * If depth writing should be enabled (default is true).\r\n */\r\n public depthWrite = true;\r\n\r\n /**\r\n * If shadows should be disabled (default is false).\r\n */\r\n public disableShadows = false;\r\n\r\n private _disableImageProcessing = false;\r\n /**\r\n * If image processing should be disabled (default is false).\r\n * false means that the default image processing configuration will be applied (the one from the scene)\r\n */\r\n public get disableImageProcessing() {\r\n return this._disableImageProcessing;\r\n }\r\n\r\n public set disableImageProcessing(value: boolean) {\r\n if (value === this._disableImageProcessing) {\r\n return;\r\n }\r\n\r\n this._disableImageProcessing = value;\r\n this._renderer.disableImageProcessing = value;\r\n }\r\n\r\n /**\r\n * Sets this property to true if this task is the main object renderer of the frame graph.\r\n * It will help to locate the main object renderer in the frame graph when multiple object renderers are used.\r\n * This is useful for the inspector to know which object renderer to use for additional rendering features like wireframe rendering or frustum light debugging.\r\n * It is also used to determine the main camera used by the frame graph: this is the camera used by the main object renderer.\r\n */\r\n public isMainObjectRenderer = false;\r\n\r\n private _renderParticles = true;\r\n /**\r\n * Defines if particles should be rendered (default is true).\r\n */\r\n public get renderParticles() {\r\n return this._renderParticles;\r\n }\r\n\r\n public set renderParticles(value: boolean) {\r\n if (value === this._renderParticles) {\r\n return;\r\n }\r\n\r\n this._renderParticles = value;\r\n this._renderer.renderParticles = value;\r\n }\r\n\r\n private _renderSprites = true;\r\n /**\r\n * Defines if sprites should be rendered (default is true).\r\n */\r\n public get renderSprites() {\r\n return this._renderSprites;\r\n }\r\n\r\n public set renderSprites(value: boolean) {\r\n if (value === this._renderSprites) {\r\n return;\r\n }\r\n\r\n this._renderSprites = value;\r\n this._renderer.renderSprites = value;\r\n }\r\n\r\n private _forceLayerMaskCheck = true;\r\n /**\r\n * Forces 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 _enableBoundingBoxRendering = true;\r\n /**\r\n * Enables the rendering of bounding boxes for meshes (still subject to Mesh.showBoundingBox or scene.forceShowBoundingBoxes). Default is true.\r\n */\r\n public get enableBoundingBoxRendering() {\r\n return this._enableBoundingBoxRendering;\r\n }\r\n\r\n public set enableBoundingBoxRendering(value: boolean) {\r\n if (value === this._enableBoundingBoxRendering) {\r\n return;\r\n }\r\n\r\n this._enableBoundingBoxRendering = value;\r\n this._renderer.enableBoundingBoxRendering = value;\r\n }\r\n\r\n private _enableOutlineRendering = true;\r\n /**\r\n * Enables the rendering of outlines/overlays for meshes (still subject to Mesh.renderOutline/Mesh.renderOverlay). Default is true.\r\n */\r\n public get enableOutlineRendering() {\r\n return this._enableOutlineRendering;\r\n }\r\n\r\n public set enableOutlineRendering(value: boolean) {\r\n if (value === this._enableOutlineRendering) {\r\n return;\r\n }\r\n\r\n this._enableOutlineRendering = value;\r\n this._renderer.enableOutlineRendering = value;\r\n }\r\n\r\n /**\r\n * If true, targetTexture will be resolved at the end of the render pass, if this/these texture(s) is/are MSAA (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 is MSAA (default: false).\r\n */\r\n public resolveMSAADepth = false;\r\n\r\n /**\r\n * The output texture.\r\n * This texture will point to the same texture than the targetTexture property.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output depth 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 object renderer used to render the objects.\r\n */\r\n public get objectRenderer() {\r\n return this._renderer;\r\n }\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 protected readonly _engine: AbstractEngine;\r\n protected readonly _scene: Scene;\r\n protected readonly _renderer: ObjectRenderer;\r\n protected _textureWidth: number;\r\n protected _textureHeight: number;\r\n protected _onBeforeRenderObservable: Nullable<Observer<number>> = null;\r\n protected _onAfterRenderObservable: Nullable<Observer<number>> = null;\r\n protected _externalObjectRenderer = false;\r\n\r\n /**\r\n * Constructs a new object 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);\r\n\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._externalObjectRenderer = !!existingObjectRenderer;\r\n this._renderer = existingObjectRenderer ?? new ObjectRenderer(name, scene, options);\r\n this.name = name;\r\n\r\n this._renderer.disableImageProcessing = this._disableImageProcessing;\r\n this._renderer.renderParticles = this._renderParticles;\r\n this._renderer.renderSprites = this._renderSprites;\r\n this._renderer.enableBoundingBoxRendering = this._enableBoundingBoxRendering;\r\n this._renderer.forceLayerMaskCheck = this._forceLayerMaskCheck;\r\n\r\n if (!this._externalObjectRenderer) {\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\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\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(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass {\r\n if (this.targetTexture === undefined || this.objectList === undefined) {\r\n throw new Error(`FrameGraphObjectRendererTask ${this.name}: targetTexture and objectList are required`);\r\n }\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphObjectRendererTask.isReady() is called!\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n const targetTextures = Array.isArray(this.targetTexture) ? this.targetTexture : [this.targetTexture];\r\n\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(targetTextures[0]);\r\n\r\n let depthEnabled = false;\r\n\r\n if (this.depthTexture !== undefined) {\r\n if (this.depthTexture === backbufferDepthStencilTextureHandle && (targetTextures[0] !== backbufferColorTextureHandle || targetTextures.length > 1)) {\r\n throw new Error(\r\n `FrameGraphObjectRendererTask ${this.name}: the back buffer color texture is the only color texture allowed when the depth is the back buffer depth/stencil`\r\n );\r\n }\r\n if (this.depthTexture !== backbufferDepthStencilTextureHandle && targetTextures[0] === backbufferColorTextureHandle) {\r\n throw new Error(\r\n `FrameGraphObjectRendererTask ${this.name}: the back buffer depth/stencil texture is the only depth texture allowed when the target is the back buffer color`\r\n );\r\n }\r\n\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(\r\n `FrameGraphObjectRendererTask ${this.name}: the depth texture \"${depthTextureDescription.options.labels?.[0] ?? \"noname\"}\" (${depthTextureDescription.options.samples} samples) and the output texture \"${outputTextureDescription.options.labels?.[0] ?? \"noname\"}\" (${outputTextureDescription.options.samples} samples) must have the same number of samples`\r\n );\r\n }\r\n\r\n depthEnabled = true;\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, targetTextures[0]);\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n\r\n this._textureWidth = outputTextureDescription.size.width;\r\n this._textureHeight = outputTextureDescription.size.height;\r\n\r\n this._setLightsForShadow();\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(targetTextures);\r\n pass.setRenderTargetDepth(this.depthTexture);\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 const renderTargetWrapper = pass.frameGraphRenderTarget!.renderTargetWrapper;\r\n if (renderTargetWrapper) {\r\n renderTargetWrapper.resolveMSAAColors = this.resolveMSAAColors;\r\n renderTargetWrapper.resolveMSAADepth = this.resolveMSAADepth;\r\n }\r\n\r\n // The cast to \"any\" is to avoid an error in ES6 in case you don't import boundingBoxRenderer\r\n const boundingBoxRenderer = (this as any).getBoundingBoxRenderer?.() as Nullable<BoundingBoxRenderer>;\r\n\r\n const currentBoundingBoxMeshList = boundingBoxRenderer && boundingBoxRenderer.renderList.length > 0 ? boundingBoxRenderer.renderList.data.slice() : [];\r\n if (boundingBoxRenderer) {\r\n currentBoundingBoxMeshList.length = boundingBoxRenderer.renderList.length;\r\n }\r\n\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n\r\n const camera = this._renderer.activeCamera;\r\n if (camera && camera.cameraRigMode !== Constants.RIG_MODE_NONE && !camera._renderingMultiview) {\r\n for (let index = 0; index < camera._rigCameras.length; index++) {\r\n const rigCamera = camera._rigCameras[index];\r\n\r\n rigCamera.rigParent = undefined; // for some reasons, ObjectRenderer uses the rigParent viewport if rigParent is defined (we want to use rigCamera.viewport instead)\r\n\r\n this._renderer.activeCamera = rigCamera;\r\n\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n\r\n rigCamera.rigParent = camera;\r\n }\r\n this._renderer.activeCamera = camera;\r\n } else {\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n }\r\n\r\n additionalExecute?.(context);\r\n\r\n if (boundingBoxRenderer) {\r\n boundingBoxRenderer.renderList.data = currentBoundingBoxMeshList;\r\n boundingBoxRenderer.renderList.length = currentBoundingBoxMeshList.length;\r\n }\r\n });\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(targetTextures);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n this._renderer.onBeforeRenderObservable.remove(this._onBeforeRenderObservable);\r\n this._renderer.onAfterRenderObservable.remove(this._onAfterRenderObservable);\r\n if (!this._externalObjectRenderer) {\r\n this._renderer.dispose();\r\n }\r\n super.dispose();\r\n }\r\n\r\n protected _setLightsForShadow() {\r\n const lightsForShadow: Set<Light> = new Set();\r\n const shadowEnabled: Map<Light, boolean> = new Map();\r\n\r\n if (this.shadowGenerators) {\r\n for (const shadowGeneratorTask of this.shadowGenerators) {\r\n const shadowGenerator = shadowGeneratorTask.shadowGenerator;\r\n const light = shadowGenerator.getLight();\r\n if (light.isEnabled() && light.shadowEnabled) {\r\n lightsForShadow.add(light);\r\n if (FrameGraphCascadedShadowGeneratorTask.IsCascadedShadowGenerator(shadowGeneratorTask)) {\r\n light._shadowGenerators!.set(shadowGeneratorTask.camera, shadowGenerator);\r\n } else {\r\n light._shadowGenerators!.set(null, shadowGenerator);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._renderer.onBeforeRenderObservable.remove(this._onBeforeRenderObservable);\r\n this._onBeforeRenderObservable = this._renderer.onBeforeRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n if (!(light as ShadowLight).setShadowProjectionMatrix) {\r\n continue; // Ignore lights that cannot cast shadows\r\n }\r\n shadowEnabled.set(light, light.shadowEnabled);\r\n light.shadowEnabled = !this.disableShadows && lightsForShadow.has(light);\r\n }\r\n });\r\n\r\n this._renderer.onAfterRenderObservable.remove(this._onAfterRenderObservable);\r\n this._onAfterRenderObservable = this._renderer.onAfterRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n if (!(light as ShadowLight).setShadowProjectionMatrix) {\r\n continue; // Ignore lights that cannot cast shadows\r\n }\r\n light.shadowEnabled = shadowEnabled.get(light)!;\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"objectRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraph,\r\n FrameGraphTextureHandle,\r\n Scene,\r\n Camera,\r\n FrameGraphObjectList,\r\n FrameGraphRenderContext,\r\n ObjectRendererOptions,\r\n Light,\r\n Nullable,\r\n Observer,\r\n FrameGraphShadowGeneratorTask,\r\n FrameGraphRenderPass,\r\n AbstractEngine,\r\n BoundingBoxRenderer,\r\n ShadowLight,\r\n} from \"core/index\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"../../frameGraphTypes\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ObjectRenderer } from \"../../../Rendering/objectRenderer\";\r\nimport { FrameGraphCascadedShadowGeneratorTask } from \"./csmShadowGeneratorTask\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\n/**\r\n * Task used to render objects to a texture.\r\n */\r\nexport class FrameGraphObjectRendererTask extends FrameGraphTask {\r\n /**\r\n * The target texture where the objects will be rendered.\r\n */\r\n public targetTexture: FrameGraphTextureHandle | FrameGraphTextureHandle[];\r\n\r\n /**\r\n * The depth attachment texture where the objects will be rendered (optional).\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The shadow generators used to render the objects (optional).\r\n */\r\n public shadowGenerators?: FrameGraphShadowGeneratorTask[] = [];\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * Gets or sets the camera used to render the objects.\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 list of objects to render.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n /**\r\n * If depth testing should be enabled (default is true).\r\n */\r\n public depthTest = true;\r\n\r\n /**\r\n * If depth writing should be enabled (default is true).\r\n */\r\n public depthWrite = true;\r\n\r\n /**\r\n * If shadows should be disabled (default is false).\r\n */\r\n public disableShadows = false;\r\n\r\n private _disableImageProcessing = false;\r\n /**\r\n * If image processing should be disabled (default is false).\r\n * false means that the default image processing configuration will be applied (the one from the scene)\r\n */\r\n public get disableImageProcessing() {\r\n return this._disableImageProcessing;\r\n }\r\n\r\n public set disableImageProcessing(value: boolean) {\r\n if (value === this._disableImageProcessing) {\r\n return;\r\n }\r\n\r\n this._disableImageProcessing = value;\r\n this._renderer.disableImageProcessing = value;\r\n }\r\n\r\n /**\r\n * Sets this property to true if this task is the main object renderer of the frame graph.\r\n * It will help to locate the main object renderer in the frame graph when multiple object renderers are used.\r\n * This is useful for the inspector to know which object renderer to use for additional rendering features like wireframe rendering or frustum light debugging.\r\n * It is also used to determine the main camera used by the frame graph: this is the camera used by the main object renderer.\r\n */\r\n public isMainObjectRenderer = false;\r\n\r\n private _renderMeshes = true;\r\n /**\r\n * Defines if meshes should be rendered (default is true).\r\n */\r\n public get renderMeshes() {\r\n return this._renderMeshes;\r\n }\r\n\r\n public set renderMeshes(value: boolean) {\r\n if (value === this._renderMeshes) {\r\n return;\r\n }\r\n\r\n this._renderMeshes = value;\r\n this._renderer.renderMeshes = value;\r\n }\r\n\r\n private _renderParticles = true;\r\n /**\r\n * Defines if particles should be rendered (default is true).\r\n */\r\n public get renderParticles() {\r\n return this._renderParticles;\r\n }\r\n\r\n public set renderParticles(value: boolean) {\r\n if (value === this._renderParticles) {\r\n return;\r\n }\r\n\r\n this._renderParticles = value;\r\n this._renderer.renderParticles = value;\r\n }\r\n\r\n private _renderSprites = true;\r\n /**\r\n * Defines if sprites should be rendered (default is true).\r\n */\r\n public get renderSprites() {\r\n return this._renderSprites;\r\n }\r\n\r\n public set renderSprites(value: boolean) {\r\n if (value === this._renderSprites) {\r\n return;\r\n }\r\n\r\n this._renderSprites = value;\r\n this._renderer.renderSprites = value;\r\n }\r\n\r\n private _forceLayerMaskCheck = true;\r\n /**\r\n * Forces 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 _enableBoundingBoxRendering = true;\r\n /**\r\n * Enables the rendering of bounding boxes for meshes (still subject to Mesh.showBoundingBox or scene.forceShowBoundingBoxes). Default is true.\r\n */\r\n public get enableBoundingBoxRendering() {\r\n return this._enableBoundingBoxRendering;\r\n }\r\n\r\n public set enableBoundingBoxRendering(value: boolean) {\r\n if (value === this._enableBoundingBoxRendering) {\r\n return;\r\n }\r\n\r\n this._enableBoundingBoxRendering = value;\r\n this._renderer.enableBoundingBoxRendering = value;\r\n }\r\n\r\n private _enableOutlineRendering = true;\r\n /**\r\n * Enables the rendering of outlines/overlays for meshes (still subject to Mesh.renderOutline/Mesh.renderOverlay). Default is true.\r\n */\r\n public get enableOutlineRendering() {\r\n return this._enableOutlineRendering;\r\n }\r\n\r\n public set enableOutlineRendering(value: boolean) {\r\n if (value === this._enableOutlineRendering) {\r\n return;\r\n }\r\n\r\n this._enableOutlineRendering = value;\r\n this._renderer.enableOutlineRendering = value;\r\n }\r\n\r\n /**\r\n * If true, targetTexture will be resolved at the end of the render pass, if this/these texture(s) is/are MSAA (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 is MSAA (default: false).\r\n */\r\n public resolveMSAADepth = false;\r\n\r\n /**\r\n * The output texture.\r\n * This texture will point to the same texture than the targetTexture property.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output depth 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 object renderer used to render the objects.\r\n */\r\n public get objectRenderer() {\r\n return this._renderer;\r\n }\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 protected readonly _engine: AbstractEngine;\r\n protected readonly _scene: Scene;\r\n protected readonly _renderer: ObjectRenderer;\r\n protected _textureWidth: number;\r\n protected _textureHeight: number;\r\n protected _onBeforeRenderObservable: Nullable<Observer<number>> = null;\r\n protected _onAfterRenderObservable: Nullable<Observer<number>> = null;\r\n protected _externalObjectRenderer = false;\r\n\r\n /**\r\n * Constructs a new object 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);\r\n\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._externalObjectRenderer = !!existingObjectRenderer;\r\n this._renderer = existingObjectRenderer ?? new ObjectRenderer(name, scene, options);\r\n this.name = name;\r\n\r\n this._renderer.disableImageProcessing = this._disableImageProcessing;\r\n this._renderer.renderParticles = this._renderParticles;\r\n this._renderer.renderSprites = this._renderSprites;\r\n this._renderer.enableBoundingBoxRendering = this._enableBoundingBoxRendering;\r\n this._renderer.forceLayerMaskCheck = this._forceLayerMaskCheck;\r\n\r\n if (!this._externalObjectRenderer) {\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\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\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 override getClassName(): string {\r\n return \"FrameGraphObjectRendererTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass {\r\n this._checkParameters();\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphObjectRendererTask.isReady() is called!\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n const targetTextures = this._getTargetHandles();\r\n\r\n const depthEnabled = this._checkTextureCompatibility(targetTextures);\r\n\r\n this._resolveDanglingHandles(targetTextures);\r\n this._setLightsForShadow();\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(targetTextures);\r\n pass.setRenderTargetDepth(this.depthTexture);\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 const renderTargetWrapper = pass.frameGraphRenderTarget!.renderTargetWrapper;\r\n if (renderTargetWrapper) {\r\n renderTargetWrapper.resolveMSAAColors = this.resolveMSAAColors;\r\n renderTargetWrapper.resolveMSAADepth = this.resolveMSAADepth;\r\n }\r\n\r\n // The cast to \"any\" is to avoid an error in ES6 in case you don't import boundingBoxRenderer\r\n const boundingBoxRenderer = (this as any).getBoundingBoxRenderer?.() as Nullable<BoundingBoxRenderer>;\r\n\r\n const currentBoundingBoxMeshList = boundingBoxRenderer && boundingBoxRenderer.renderList.length > 0 ? boundingBoxRenderer.renderList.data.slice() : [];\r\n if (boundingBoxRenderer) {\r\n currentBoundingBoxMeshList.length = boundingBoxRenderer.renderList.length;\r\n }\r\n\r\n this._prepareRendering(context, depthEnabled);\r\n\r\n const camera = this._renderer.activeCamera;\r\n if (camera && camera.cameraRigMode !== Constants.RIG_MODE_NONE && !camera._renderingMultiview) {\r\n for (let index = 0; index < camera._rigCameras.length; index++) {\r\n const rigCamera = camera._rigCameras[index];\r\n\r\n rigCamera.rigParent = undefined; // for some reasons, ObjectRenderer uses the rigParent viewport if rigParent is defined (we want to use rigCamera.viewport instead)\r\n\r\n this._renderer.activeCamera = rigCamera;\r\n\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n\r\n rigCamera.rigParent = camera;\r\n }\r\n this._renderer.activeCamera = camera;\r\n } else {\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n }\r\n\r\n additionalExecute?.(context);\r\n\r\n if (boundingBoxRenderer) {\r\n boundingBoxRenderer.renderList.data = currentBoundingBoxMeshList;\r\n boundingBoxRenderer.renderList.length = currentBoundingBoxMeshList.length;\r\n }\r\n });\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(targetTextures);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n this._renderer.onBeforeRenderObservable.remove(this._onBeforeRenderObservable);\r\n this._renderer.onAfterRenderObservable.remove(this._onAfterRenderObservable);\r\n if (!this._externalObjectRenderer) {\r\n this._renderer.dispose();\r\n }\r\n super.dispose();\r\n }\r\n\r\n protected _resolveDanglingHandles(targetTextures: FrameGraphTextureHandle[]) {\r\n if (targetTextures.length > 0) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, targetTextures[0]);\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 _checkParameters() {\r\n if (this.targetTexture === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphObjectRendererTask ${this.name}: targetTexture, objectList, and camera are required`);\r\n }\r\n }\r\n\r\n protected _checkTextureCompatibility(targetTextures: FrameGraphTextureHandle[]): boolean {\r\n const className = this.getClassName();\r\n\r\n let outputTextureDescription = targetTextures.length > 0 ? this._frameGraph.textureManager.getTextureDescription(targetTextures[0]) : null;\r\n let depthEnabled = false;\r\n\r\n if (this.depthTexture !== undefined) {\r\n if (outputTextureDescription && this.depthTexture !== backbufferDepthStencilTextureHandle && targetTextures[0] === backbufferColorTextureHandle) {\r\n throw new Error(`${className} ${this.name}: the back buffer depth/stencil texture is the only depth texture allowed when the target is the back buffer color`);\r\n }\r\n\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (!outputTextureDescription) {\r\n outputTextureDescription = depthTextureDescription;\r\n }\r\n if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(\r\n `${className} ${this.name}: the depth texture \"${depthTextureDescription.options.labels?.[0] ?? \"noname\"}\" (${depthTextureDescription.options.samples} samples) and the output texture \"${outputTextureDescription.options.labels?.[0] ?? \"noname\"}\" (${outputTextureDescription.options.samples} samples) must have the same number of samples`\r\n );\r\n }\r\n\r\n if (depthTextureDescription.size.width !== outputTextureDescription.size.width || depthTextureDescription.size.height !== outputTextureDescription.size.height) {\r\n throw new Error(\r\n `${className} ${this.name}: the depth texture (size: ${depthTextureDescription.size.width}x${depthTextureDescription.size.height}) and the target texture (size: ${outputTextureDescription.size.width}x${outputTextureDescription.size.height}) must have the same dimensions.`\r\n );\r\n }\r\n\r\n depthEnabled = true;\r\n }\r\n\r\n this._textureWidth = outputTextureDescription?.size.width ?? 1;\r\n this._textureHeight = outputTextureDescription?.size.height ?? 1;\r\n\r\n return depthEnabled;\r\n }\r\n\r\n protected _getTargetHandles(): FrameGraphTextureHandle[] {\r\n return Array.isArray(this.targetTexture) ? this.targetTexture : [this.targetTexture];\r\n }\r\n\r\n protected _prepareRendering(context: FrameGraphRenderContext, depthEnabled: boolean) {\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n }\r\n\r\n protected _setLightsForShadow() {\r\n const lightsForShadow: Set<Light> = new Set();\r\n const shadowEnabled: Map<Light, boolean> = new Map();\r\n\r\n if (this.shadowGenerators) {\r\n for (const shadowGeneratorTask of this.shadowGenerators) {\r\n const shadowGenerator = shadowGeneratorTask.shadowGenerator;\r\n const light = shadowGenerator.getLight();\r\n if (light.isEnabled() && light.shadowEnabled) {\r\n lightsForShadow.add(light);\r\n if (FrameGraphCascadedShadowGeneratorTask.IsCascadedShadowGenerator(shadowGeneratorTask)) {\r\n light._shadowGenerators!.set(shadowGeneratorTask.camera, shadowGenerator);\r\n } else {\r\n light._shadowGenerators!.set(null, shadowGenerator);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._renderer.onBeforeRenderObservable.remove(this._onBeforeRenderObservable);\r\n this._onBeforeRenderObservable = this._renderer.onBeforeRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n if (!(light as ShadowLight).setShadowProjectionMatrix) {\r\n continue; // Ignore lights that cannot cast shadows\r\n }\r\n shadowEnabled.set(light, light.shadowEnabled);\r\n light.shadowEnabled = !this.disableShadows && lightsForShadow.has(light);\r\n }\r\n });\r\n\r\n this._renderer.onAfterRenderObservable.remove(this._onAfterRenderObservable);\r\n this._onAfterRenderObservable = this._renderer.onAfterRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n if (!(light as ShadowLight).setShadowProjectionMatrix) {\r\n continue; // Ignore lights that cannot cast shadows\r\n }\r\n light.shadowEnabled = shadowEnabled.get(light)!;\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -105,6 +105,7 @@ export declare class FrameGraphShadowGeneratorTask extends FrameGraphTask {
|
|
|
105
105
|
* @param frameGraph The frame graph the task belongs to.
|
|
106
106
|
*/
|
|
107
107
|
constructor(name: string, frameGraph: FrameGraph);
|
|
108
|
+
getClassName(): string;
|
|
108
109
|
record(): void;
|
|
109
110
|
dispose(): void;
|
|
110
111
|
}
|
|
@@ -235,6 +235,9 @@ export class FrameGraphShadowGeneratorTask extends FrameGraphTask {
|
|
|
235
235
|
this._filteringQuality = ShadowGenerator.QUALITY_HIGH;
|
|
236
236
|
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
237
237
|
}
|
|
238
|
+
getClassName() {
|
|
239
|
+
return "FrameGraphShadowGeneratorTask";
|
|
240
|
+
}
|
|
238
241
|
record() {
|
|
239
242
|
if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {
|
|
240
243
|
throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light, objectList and camera are required`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphObjectList, IShadowLight, WritableObject, FrameGraphTextureHandle, Camera } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ShadowGenerator } from \"../../../Lights/Shadows/shadowGenerator\";\r\n\r\n/**\r\n * Task used to generate shadows from a list of objects.\r\n */\r\nexport class FrameGraphShadowGeneratorTask extends FrameGraphTask {\r\n /**\r\n * The object list that generates shadows.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n private _light: IShadowLight;\r\n /**\r\n * The light to generate shadows from.\r\n */\r\n public get light(): IShadowLight {\r\n return this._light;\r\n }\r\n\r\n public set light(value: IShadowLight) {\r\n if (value === this._light) {\r\n return;\r\n }\r\n\r\n this._light = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _camera: Camera;\r\n /**\r\n * Gets or sets the camera used to generate the shadow generator.\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._setupShadowGenerator();\r\n }\r\n\r\n private _mapSize = 1024;\r\n /**\r\n * The size of the shadow map.\r\n */\r\n public get mapSize() {\r\n return this._mapSize;\r\n }\r\n\r\n public set mapSize(value: number) {\r\n if (value === this._mapSize) {\r\n return;\r\n }\r\n\r\n this._mapSize = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useFloat32TextureType = false;\r\n /**\r\n * If true, the shadow map will use a 32 bits float texture type (else, 16 bits float is used if supported).\r\n */\r\n public get useFloat32TextureType() {\r\n return this._useFloat32TextureType;\r\n }\r\n\r\n public set useFloat32TextureType(value: boolean) {\r\n if (value === this._useFloat32TextureType) {\r\n return;\r\n }\r\n\r\n this._useFloat32TextureType = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useRedTextureFormat = true;\r\n /**\r\n * If true, the shadow map will use a red texture format (else, a RGBA format is used).\r\n */\r\n public get useRedTextureFormat() {\r\n return this._useRedTextureFormat;\r\n }\r\n\r\n public set useRedTextureFormat(value: boolean) {\r\n if (value === this._useRedTextureFormat) {\r\n return;\r\n }\r\n\r\n this._useRedTextureFormat = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _bias = 0.01;\r\n /**\r\n * The bias to apply to the shadow map.\r\n */\r\n public get bias() {\r\n return this._bias;\r\n }\r\n\r\n public set bias(value: number) {\r\n if (value === this._bias) {\r\n return;\r\n }\r\n\r\n this._bias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.bias = value;\r\n }\r\n }\r\n\r\n private _normalBias = 0;\r\n /**\r\n * The normal bias to apply to the shadow map.\r\n */\r\n public get normalBias() {\r\n return this._normalBias;\r\n }\r\n\r\n public set normalBias(value: number) {\r\n if (value === this._normalBias) {\r\n return;\r\n }\r\n\r\n this._normalBias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.normalBias = value;\r\n }\r\n }\r\n\r\n private _darkness = 0;\r\n /**\r\n * The darkness of the shadows.\r\n */\r\n public get darkness() {\r\n return this._darkness;\r\n }\r\n\r\n public set darkness(value: number) {\r\n if (value === this._darkness) {\r\n return;\r\n }\r\n\r\n this._darkness = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.darkness = value;\r\n }\r\n }\r\n\r\n private _transparencyShadow = false;\r\n /**\r\n * Gets or sets the ability to have transparent shadow\r\n */\r\n public get transparencyShadow() {\r\n return this._transparencyShadow;\r\n }\r\n\r\n public set transparencyShadow(value: boolean) {\r\n if (value === this._transparencyShadow) {\r\n return;\r\n }\r\n\r\n this._transparencyShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.transparencyShadow = value;\r\n }\r\n }\r\n\r\n private _enableSoftTransparentShadow = false;\r\n /**\r\n * Enables or disables shadows with varying strength based on the transparency\r\n */\r\n public get enableSoftTransparentShadow() {\r\n return this._enableSoftTransparentShadow;\r\n }\r\n\r\n public set enableSoftTransparentShadow(value: boolean) {\r\n if (value === this._enableSoftTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._enableSoftTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.enableSoftTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _useOpacityTextureForTransparentShadow = false;\r\n /**\r\n * If this is true, use the opacity texture's alpha channel for transparent shadows instead of the diffuse one\r\n */\r\n public get useOpacityTextureForTransparentShadow() {\r\n return this._useOpacityTextureForTransparentShadow;\r\n }\r\n\r\n public set useOpacityTextureForTransparentShadow(value: boolean) {\r\n if (value === this._useOpacityTextureForTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._useOpacityTextureForTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.useOpacityTextureForTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _filter = ShadowGenerator.FILTER_PCF;\r\n /**\r\n * The filter to apply to the shadow map.\r\n */\r\n public get filter() {\r\n return this._filter;\r\n }\r\n\r\n public set filter(value: number) {\r\n if (value === this._filter) {\r\n return;\r\n }\r\n\r\n this._filter = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filter = value;\r\n }\r\n }\r\n\r\n private _filteringQuality = ShadowGenerator.QUALITY_HIGH;\r\n /**\r\n * The filtering quality to apply to the filter.\r\n */\r\n public get filteringQuality() {\r\n return this._filteringQuality;\r\n }\r\n\r\n public set filteringQuality(value: number) {\r\n if (value === this._filteringQuality) {\r\n return;\r\n }\r\n\r\n this._filteringQuality = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filteringQuality = value;\r\n }\r\n }\r\n\r\n /**\r\n * The shadow generator.\r\n */\r\n public readonly shadowGenerator: ShadowGenerator;\r\n\r\n /**\r\n * The shadow map texture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n protected _shadowGenerator: ShadowGenerator | undefined;\r\n\r\n protected _createShadowGenerator() {\r\n this._shadowGenerator = new ShadowGenerator(this._mapSize, this._light, this._useFloat32TextureType, undefined, this._useRedTextureFormat);\r\n }\r\n\r\n protected _setupShadowGenerator() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n if (this._light !== undefined) {\r\n this._createShadowGenerator();\r\n const shadowGenerator = this._shadowGenerator as ShadowGenerator | undefined;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n shadowGenerator.bias = this._bias;\r\n shadowGenerator.normalBias = this._normalBias;\r\n shadowGenerator.darkness = this._darkness;\r\n shadowGenerator.transparencyShadow = this._transparencyShadow;\r\n shadowGenerator.enableSoftTransparentShadow = this._enableSoftTransparentShadow;\r\n shadowGenerator.useOpacityTextureForTransparentShadow = this._useOpacityTextureForTransparentShadow;\r\n shadowGenerator.filter = this._filter;\r\n shadowGenerator.filteringQuality = this._filteringQuality;\r\n\r\n const shadowMap = shadowGenerator.getShadowMap()!;\r\n shadowMap._disableEngineStages = true;\r\n shadowMap.cameraForLOD = this._camera;\r\n\r\n (this.shadowGenerator as WritableObject<ShadowGenerator | undefined>) = shadowGenerator;\r\n }\r\n }\r\n\r\n public override isReady(): boolean {\r\n return !!this._shadowGenerator && !!this._shadowGenerator.getShadowMap()?.isReadyForRendering();\r\n }\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public record() {\r\n if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light, objectList and camera are required`);\r\n }\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphShadowGeneratorTask.isReady() is called!\r\n const shadowMap = this._shadowGenerator!.getShadowMap()!;\r\n\r\n shadowMap.renderList = this.objectList.meshes;\r\n shadowMap.particleSystemList = this.objectList.particleSystems;\r\n\r\n const shadowTextureHandle = this._frameGraph.textureManager.importTexture(`${this.name} shadowmap`, this._shadowGenerator!.getShadowMap()!.getInternalTexture()!);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, shadowTextureHandle);\r\n\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n pass.setExecuteFunc((context) => {\r\n if (!this.light.isEnabled() || !this.light.shadowEnabled) {\r\n return;\r\n }\r\n\r\n const shadowMap = this._shadowGenerator!.getShadowMap()!;\r\n\r\n shadowMap.renderList = this.objectList.meshes;\r\n shadowMap.particleSystemList = this.objectList.particleSystems;\r\n\r\n context.saveDepthStates();\r\n context.setDepthStates(true, true);\r\n\r\n context.renderUnmanaged(shadowMap);\r\n\r\n context.restoreDepthStates();\r\n });\r\n\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n public override dispose() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"shadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,cAAc;IAO7D;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK,CAAC,KAAmB;QAChC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,MAAc;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,KAAa;QAC5B,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,qBAAqB;QAC5B,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAED,IAAW,qBAAqB,CAAC,KAAc;QAC3C,IAAI,KAAK,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAc;QACzC,IAAI,KAAK,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,KAAK,CAAC;QACvC,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QAC/B,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC;QAC7C,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAW,QAAQ,CAAC,KAAa;QAC7B,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC3C,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,IAAW,kBAAkB,CAAC,KAAc;QACxC,IAAI,KAAK,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACrD,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,2BAA2B;QAClC,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC7C,CAAC;IAED,IAAW,2BAA2B,CAAC,KAAc;QACjD,IAAI,KAAK,KAAK,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC9C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;QAC1C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,GAAG,KAAK,CAAC;QAC9D,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,qCAAqC;QAC5C,OAAO,IAAI,CAAC,sCAAsC,CAAC;IACvD,CAAC;IAED,IAAW,qCAAqC,CAAC,KAAc;QAC3D,IAAI,KAAK,KAAK,IAAI,CAAC,sCAAsC,EAAE,CAAC;YACxD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,sCAAsC,GAAG,KAAK,CAAC;QACpD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,qCAAqC,GAAG,KAAK,CAAC;QACxE,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAa;QAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,KAAK,CAAC;QACzC,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAa;QACrC,IAAI,KAAK,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,KAAK,CAAC;QACnD,CAAC;IACL,CAAC;IAcS,sBAAsB;QAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC/I,CAAC;IAES,qBAAqB;QAC3B,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,gBAA+C,CAAC;YAC7E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO;YACX,CAAC;YACD,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAClC,eAAe,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC9C,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1C,eAAe,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YAC9D,eAAe,CAAC,2BAA2B,GAAG,IAAI,CAAC,4BAA4B,CAAC;YAChF,eAAe,CAAC,qCAAqC,GAAG,IAAI,CAAC,sCAAsC,CAAC;YACpG,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YACtC,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAE1D,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAG,CAAC;YAClD,SAAS,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACtC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;YAErC,IAAI,CAAC,eAA+D,GAAG,eAAe,CAAC;QAC5F,CAAC;IACL,CAAC;IAEe,OAAO;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,mBAAmB,EAAE,CAAC;IACpG,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QA/PpB,aAAQ,GAAG,IAAI,CAAC;QAiBhB,2BAAsB,GAAG,KAAK,CAAC;QAiB/B,yBAAoB,GAAG,IAAI,CAAC;QAiB5B,UAAK,GAAG,IAAI,CAAC;QAmBb,gBAAW,GAAG,CAAC,CAAC;QAmBhB,cAAS,GAAG,CAAC,CAAC;QAmBd,wBAAmB,GAAG,KAAK,CAAC;QAmB5B,iCAA4B,GAAG,KAAK,CAAC;QAmBrC,2CAAsC,GAAG,KAAK,CAAC;QAmB/C,YAAO,GAAG,eAAe,CAAC,UAAU,CAAC;QAmBrC,sBAAiB,GAAG,eAAe,CAAC,YAAY,CAAC;QAyErD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAChF,CAAC;IAEe,YAAY;QACxB,OAAO,+BAA+B,CAAC;IAC3C,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzF,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,6CAA6C,CAAC,CAAC;QAC7G,CAAC;QAED,gHAAgH;QAChH,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAiB,CAAC,YAAY,EAAG,CAAC;QAEzD,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9C,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAE/D,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,IAAI,YAAY,EAAE,IAAI,CAAC,gBAAiB,CAAC,YAAY,EAAG,CAAC,kBAAkB,EAAG,CAAC,CAAC;QAElK,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAE/F,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBACvD,OAAO;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAiB,CAAC,YAAY,EAAG,CAAC;YAEzD,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9C,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YAE/D,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEnC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAEnC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7E,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAEe,OAAO;QACnB,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACtC,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphObjectList, IShadowLight, WritableObject, FrameGraphTextureHandle, Camera } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ShadowGenerator } from \"../../../Lights/Shadows/shadowGenerator\";\r\n\r\n/**\r\n * Task used to generate shadows from a list of objects.\r\n */\r\nexport class FrameGraphShadowGeneratorTask extends FrameGraphTask {\r\n /**\r\n * The object list that generates shadows.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n private _light: IShadowLight;\r\n /**\r\n * The light to generate shadows from.\r\n */\r\n public get light(): IShadowLight {\r\n return this._light;\r\n }\r\n\r\n public set light(value: IShadowLight) {\r\n if (value === this._light) {\r\n return;\r\n }\r\n\r\n this._light = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _camera: Camera;\r\n /**\r\n * Gets or sets the camera used to generate the shadow generator.\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._setupShadowGenerator();\r\n }\r\n\r\n private _mapSize = 1024;\r\n /**\r\n * The size of the shadow map.\r\n */\r\n public get mapSize() {\r\n return this._mapSize;\r\n }\r\n\r\n public set mapSize(value: number) {\r\n if (value === this._mapSize) {\r\n return;\r\n }\r\n\r\n this._mapSize = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useFloat32TextureType = false;\r\n /**\r\n * If true, the shadow map will use a 32 bits float texture type (else, 16 bits float is used if supported).\r\n */\r\n public get useFloat32TextureType() {\r\n return this._useFloat32TextureType;\r\n }\r\n\r\n public set useFloat32TextureType(value: boolean) {\r\n if (value === this._useFloat32TextureType) {\r\n return;\r\n }\r\n\r\n this._useFloat32TextureType = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useRedTextureFormat = true;\r\n /**\r\n * If true, the shadow map will use a red texture format (else, a RGBA format is used).\r\n */\r\n public get useRedTextureFormat() {\r\n return this._useRedTextureFormat;\r\n }\r\n\r\n public set useRedTextureFormat(value: boolean) {\r\n if (value === this._useRedTextureFormat) {\r\n return;\r\n }\r\n\r\n this._useRedTextureFormat = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _bias = 0.01;\r\n /**\r\n * The bias to apply to the shadow map.\r\n */\r\n public get bias() {\r\n return this._bias;\r\n }\r\n\r\n public set bias(value: number) {\r\n if (value === this._bias) {\r\n return;\r\n }\r\n\r\n this._bias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.bias = value;\r\n }\r\n }\r\n\r\n private _normalBias = 0;\r\n /**\r\n * The normal bias to apply to the shadow map.\r\n */\r\n public get normalBias() {\r\n return this._normalBias;\r\n }\r\n\r\n public set normalBias(value: number) {\r\n if (value === this._normalBias) {\r\n return;\r\n }\r\n\r\n this._normalBias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.normalBias = value;\r\n }\r\n }\r\n\r\n private _darkness = 0;\r\n /**\r\n * The darkness of the shadows.\r\n */\r\n public get darkness() {\r\n return this._darkness;\r\n }\r\n\r\n public set darkness(value: number) {\r\n if (value === this._darkness) {\r\n return;\r\n }\r\n\r\n this._darkness = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.darkness = value;\r\n }\r\n }\r\n\r\n private _transparencyShadow = false;\r\n /**\r\n * Gets or sets the ability to have transparent shadow\r\n */\r\n public get transparencyShadow() {\r\n return this._transparencyShadow;\r\n }\r\n\r\n public set transparencyShadow(value: boolean) {\r\n if (value === this._transparencyShadow) {\r\n return;\r\n }\r\n\r\n this._transparencyShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.transparencyShadow = value;\r\n }\r\n }\r\n\r\n private _enableSoftTransparentShadow = false;\r\n /**\r\n * Enables or disables shadows with varying strength based on the transparency\r\n */\r\n public get enableSoftTransparentShadow() {\r\n return this._enableSoftTransparentShadow;\r\n }\r\n\r\n public set enableSoftTransparentShadow(value: boolean) {\r\n if (value === this._enableSoftTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._enableSoftTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.enableSoftTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _useOpacityTextureForTransparentShadow = false;\r\n /**\r\n * If this is true, use the opacity texture's alpha channel for transparent shadows instead of the diffuse one\r\n */\r\n public get useOpacityTextureForTransparentShadow() {\r\n return this._useOpacityTextureForTransparentShadow;\r\n }\r\n\r\n public set useOpacityTextureForTransparentShadow(value: boolean) {\r\n if (value === this._useOpacityTextureForTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._useOpacityTextureForTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.useOpacityTextureForTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _filter = ShadowGenerator.FILTER_PCF;\r\n /**\r\n * The filter to apply to the shadow map.\r\n */\r\n public get filter() {\r\n return this._filter;\r\n }\r\n\r\n public set filter(value: number) {\r\n if (value === this._filter) {\r\n return;\r\n }\r\n\r\n this._filter = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filter = value;\r\n }\r\n }\r\n\r\n private _filteringQuality = ShadowGenerator.QUALITY_HIGH;\r\n /**\r\n * The filtering quality to apply to the filter.\r\n */\r\n public get filteringQuality() {\r\n return this._filteringQuality;\r\n }\r\n\r\n public set filteringQuality(value: number) {\r\n if (value === this._filteringQuality) {\r\n return;\r\n }\r\n\r\n this._filteringQuality = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filteringQuality = value;\r\n }\r\n }\r\n\r\n /**\r\n * The shadow generator.\r\n */\r\n public readonly shadowGenerator: ShadowGenerator;\r\n\r\n /**\r\n * The shadow map texture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n protected _shadowGenerator: ShadowGenerator | undefined;\r\n\r\n protected _createShadowGenerator() {\r\n this._shadowGenerator = new ShadowGenerator(this._mapSize, this._light, this._useFloat32TextureType, undefined, this._useRedTextureFormat);\r\n }\r\n\r\n protected _setupShadowGenerator() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n if (this._light !== undefined) {\r\n this._createShadowGenerator();\r\n const shadowGenerator = this._shadowGenerator as ShadowGenerator | undefined;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n shadowGenerator.bias = this._bias;\r\n shadowGenerator.normalBias = this._normalBias;\r\n shadowGenerator.darkness = this._darkness;\r\n shadowGenerator.transparencyShadow = this._transparencyShadow;\r\n shadowGenerator.enableSoftTransparentShadow = this._enableSoftTransparentShadow;\r\n shadowGenerator.useOpacityTextureForTransparentShadow = this._useOpacityTextureForTransparentShadow;\r\n shadowGenerator.filter = this._filter;\r\n shadowGenerator.filteringQuality = this._filteringQuality;\r\n\r\n const shadowMap = shadowGenerator.getShadowMap()!;\r\n shadowMap._disableEngineStages = true;\r\n shadowMap.cameraForLOD = this._camera;\r\n\r\n (this.shadowGenerator as WritableObject<ShadowGenerator | undefined>) = shadowGenerator;\r\n }\r\n }\r\n\r\n public override isReady(): boolean {\r\n return !!this._shadowGenerator && !!this._shadowGenerator.getShadowMap()?.isReadyForRendering();\r\n }\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphShadowGeneratorTask\";\r\n }\r\n\r\n public record() {\r\n if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light, objectList and camera are required`);\r\n }\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphShadowGeneratorTask.isReady() is called!\r\n const shadowMap = this._shadowGenerator!.getShadowMap()!;\r\n\r\n shadowMap.renderList = this.objectList.meshes;\r\n shadowMap.particleSystemList = this.objectList.particleSystems;\r\n\r\n const shadowTextureHandle = this._frameGraph.textureManager.importTexture(`${this.name} shadowmap`, this._shadowGenerator!.getShadowMap()!.getInternalTexture()!);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, shadowTextureHandle);\r\n\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n pass.setExecuteFunc((context) => {\r\n if (!this.light.isEnabled() || !this.light.shadowEnabled) {\r\n return;\r\n }\r\n\r\n const shadowMap = this._shadowGenerator!.getShadowMap()!;\r\n\r\n shadowMap.renderList = this.objectList.meshes;\r\n shadowMap.particleSystemList = this.objectList.particleSystems;\r\n\r\n context.saveDepthStates();\r\n context.setDepthStates(true, true);\r\n\r\n context.renderUnmanaged(shadowMap);\r\n\r\n context.restoreDepthStates();\r\n });\r\n\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n public override dispose() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n }\r\n}\r\n"]}
|
|
@@ -32,6 +32,7 @@ export declare class FrameGraphUtilityLayerRendererTask extends FrameGraphTask {
|
|
|
32
32
|
* @param handleEvents If the utility layer should handle events.
|
|
33
33
|
*/
|
|
34
34
|
constructor(name: string, frameGraph: FrameGraph, scene: Scene, handleEvents?: boolean);
|
|
35
|
+
getClassName(): string;
|
|
35
36
|
record(): void;
|
|
36
37
|
dispose(): void;
|
|
37
38
|
}
|
|
@@ -28,6 +28,9 @@ export class FrameGraphUtilityLayerRendererTask extends FrameGraphTask {
|
|
|
28
28
|
this.layer.utilityLayerScene._useCurrentFrameBuffer = true;
|
|
29
29
|
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
30
30
|
}
|
|
31
|
+
getClassName() {
|
|
32
|
+
return "FrameGraphUtilityLayerRendererTask";
|
|
33
|
+
}
|
|
31
34
|
record() {
|
|
32
35
|
if (!this.targetTexture || !this.camera) {
|
|
33
36
|
throw new Error(`FrameGraphUtilityLayerRendererTask "${this.name}": targetTexture and camera are required`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilityLayerRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,mDAA4C;AAE3E;;GAEG;AACH,MAAM,OAAO,kCAAmC,SAAQ,cAAc;IAOlE;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAa;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC;IACtD,CAAC;IAaD;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY,EAAE,YAAY,GAAG,IAAI;QAC/E,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAE3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAChF,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,IAAI,0CAA0C,CAAC,CAAC;QAChH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAE9F,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEnF,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAEe,OAAO;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;CACJ","sourcesContent":["import type { Camera, FrameGraph, FrameGraphTextureHandle, Scene } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { UtilityLayerRenderer } from \"core/Rendering/utilityLayerRenderer\";\r\n\r\n/**\r\n * Task used to render an utility layer.\r\n */\r\nexport class FrameGraphUtilityLayerRendererTask extends FrameGraphTask {\r\n /**\r\n * The target texture of the task.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n /**\r\n * The camera used to render the utility layer.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(value: Camera) {\r\n this._camera = value;\r\n\r\n this.layer.setRenderCamera(value);\r\n this.layer.utilityLayerScene.activeCamera = value;\r\n }\r\n\r\n /**\r\n * The output texture of the task.\r\n * This is the same texture as the target texture, but the handles are different!\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The utility layer renderer.\r\n */\r\n public readonly layer: UtilityLayerRenderer;\r\n\r\n /**\r\n * Creates a new utility layer 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 task belongs to.\r\n * @param handleEvents If the utility layer should handle events.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, handleEvents = true) {\r\n super(name, frameGraph);\r\n\r\n this.layer = new UtilityLayerRenderer(scene, handleEvents, true);\r\n this.layer.utilityLayerScene._useCurrentFrameBuffer = true;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public record(): void {\r\n if (!this.targetTexture || !this.camera) {\r\n throw new Error(`FrameGraphUtilityLayerRendererTask \"${this.name}\": targetTexture and camera are required`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setExecuteFunc((context) => {\r\n context.render(this.layer);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n public override dispose(): void {\r\n this.layer.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"utilityLayerRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,mDAA4C;AAE3E;;GAEG;AACH,MAAM,OAAO,kCAAmC,SAAQ,cAAc;IAOlE;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAa;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC;IACtD,CAAC;IAaD;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY,EAAE,YAAY,GAAG,IAAI;QAC/E,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAE3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAChF,CAAC;IAEe,YAAY;QACxB,OAAO,oCAAoC,CAAC;IAChD,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,IAAI,0CAA0C,CAAC,CAAC;QAChH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAE9F,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEnF,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAEe,OAAO;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;CACJ","sourcesContent":["import type { Camera, FrameGraph, FrameGraphTextureHandle, Scene } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { UtilityLayerRenderer } from \"core/Rendering/utilityLayerRenderer\";\r\n\r\n/**\r\n * Task used to render an utility layer.\r\n */\r\nexport class FrameGraphUtilityLayerRendererTask extends FrameGraphTask {\r\n /**\r\n * The target texture of the task.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n /**\r\n * The camera used to render the utility layer.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(value: Camera) {\r\n this._camera = value;\r\n\r\n this.layer.setRenderCamera(value);\r\n this.layer.utilityLayerScene.activeCamera = value;\r\n }\r\n\r\n /**\r\n * The output texture of the task.\r\n * This is the same texture as the target texture, but the handles are different!\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The utility layer renderer.\r\n */\r\n public readonly layer: UtilityLayerRenderer;\r\n\r\n /**\r\n * Creates a new utility layer 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 task belongs to.\r\n * @param handleEvents If the utility layer should handle events.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, handleEvents = true) {\r\n super(name, frameGraph);\r\n\r\n this.layer = new UtilityLayerRenderer(scene, handleEvents, true);\r\n this.layer.utilityLayerScene._useCurrentFrameBuffer = true;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphUtilityLayerRendererTask\";\r\n }\r\n\r\n public record(): void {\r\n if (!this.targetTexture || !this.camera) {\r\n throw new Error(`FrameGraphUtilityLayerRendererTask \"${this.name}\": targetTexture and camera are required`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setExecuteFunc((context) => {\r\n context.render(this.layer);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n public override dispose(): void {\r\n this.layer.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -51,5 +51,6 @@ export declare class FrameGraphClearTextureTask extends FrameGraphTask {
|
|
|
51
51
|
* @param frameGraph The frame graph the task belongs to.
|
|
52
52
|
*/
|
|
53
53
|
constructor(name: string, frameGraph: FrameGraph);
|
|
54
|
+
getClassName(): string;
|
|
54
55
|
record(skipCreationOfDisabledPasses?: boolean): FrameGraphRenderPass;
|
|
55
56
|
}
|
|
@@ -39,23 +39,32 @@ export class FrameGraphClearTextureTask extends FrameGraphTask {
|
|
|
39
39
|
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
40
40
|
this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
41
41
|
}
|
|
42
|
+
getClassName() {
|
|
43
|
+
return "FrameGraphClearTextureTask";
|
|
44
|
+
}
|
|
42
45
|
record(skipCreationOfDisabledPasses = false) {
|
|
43
46
|
if (this.targetTexture === undefined && this.depthTexture === undefined) {
|
|
44
47
|
throw new Error(`FrameGraphClearTextureTask ${this.name}: targetTexture and depthTexture can't both be undefined.`);
|
|
45
48
|
}
|
|
49
|
+
const textureManager = this._frameGraph.textureManager;
|
|
46
50
|
const targetTextures = this.targetTexture !== undefined ? (Array.isArray(this.targetTexture) ? this.targetTexture : [this.targetTexture]) : undefined;
|
|
47
|
-
let textureSamples = 0;
|
|
48
|
-
let depthSamples = 0;
|
|
49
51
|
if (this.targetTexture !== undefined) {
|
|
50
|
-
|
|
51
|
-
this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, targetTextures[0]);
|
|
52
|
+
textureManager.resolveDanglingHandle(this.outputTexture, targetTextures[0]);
|
|
52
53
|
}
|
|
53
54
|
if (this.depthTexture !== undefined) {
|
|
54
|
-
|
|
55
|
-
this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);
|
|
55
|
+
textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);
|
|
56
56
|
}
|
|
57
|
-
if (
|
|
58
|
-
|
|
57
|
+
if (this.targetTexture !== undefined && this.depthTexture !== undefined) {
|
|
58
|
+
const targetDescription = textureManager.getTextureDescription(targetTextures[0]);
|
|
59
|
+
const depthDescription = textureManager.getTextureDescription(this.depthTexture);
|
|
60
|
+
if (targetDescription.size.width !== depthDescription.size.width || targetDescription.size.height !== depthDescription.size.height) {
|
|
61
|
+
throw new Error(`FrameGraphClearTextureTask ${this.name}: the depth texture (size: ${depthDescription.size.width}x${depthDescription.size.height}) and the target texture (size: ${targetDescription.size.width}x${targetDescription.size.height}) must have the same dimensions.`);
|
|
62
|
+
}
|
|
63
|
+
const textureSamples = targetDescription.options.samples || 1;
|
|
64
|
+
const depthSamples = depthDescription.options.samples || 1;
|
|
65
|
+
if (textureSamples !== depthSamples && textureSamples !== 0 && depthSamples !== 0) {
|
|
66
|
+
throw new Error(`FrameGraphClearTextureTask ${this.name}: the depth texture (${depthSamples} samples) and the target texture (${textureSamples} samples) must have the same number of samples.`);
|
|
67
|
+
}
|
|
59
68
|
}
|
|
60
69
|
const attachments = this._frameGraph.engine.buildTextureLayout(targetTextures ? Array(targetTextures.length).fill(true) : [], this.targetTexture === backbufferColorTextureHandle && !this._frameGraph.textureManager.backBufferTextureOverriden);
|
|
61
70
|
const color = TmpColors.Color4[0];
|
|
@@ -67,6 +76,10 @@ export class FrameGraphClearTextureTask extends FrameGraphTask {
|
|
|
67
76
|
if (this.convertColorToLinearSpace) {
|
|
68
77
|
color.toLinearSpaceToRef(color);
|
|
69
78
|
}
|
|
79
|
+
const renderTargetWrapper = pass.frameGraphRenderTarget.renderTargetWrapper;
|
|
80
|
+
if (renderTargetWrapper) {
|
|
81
|
+
renderTargetWrapper.disableAutomaticMSAAResolve = true;
|
|
82
|
+
}
|
|
70
83
|
context.clearAttachments(color, attachments, !!this.clearColor, !!this.clearDepth, !!this.clearStencil, this.stencilValue);
|
|
71
84
|
});
|
|
72
85
|
if (!skipCreationOfDisabledPasses) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clearTextureTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAErE;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IAmD1D;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAxD5B;;WAEG;QACI,UAAK,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAE5C;;WAEG;QACI,eAAU,GAAG,IAAI,CAAC;QAEzB;;WAEG;QACI,8BAAyB,GAAG,KAAK,CAAC;QAEzC;;WAEG;QACI,eAAU,GAAG,KAAK,CAAC;QAE1B;;WAEG;QACI,iBAAY,GAAG,KAAK,CAAC;QAE5B;;WAEG;QACI,iBAAY,GAAG,CAAC,CAAC;QA8BpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAC5E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACrF,CAAC;IAEM,MAAM,CAAC,4BAA4B,GAAG,KAAK;QAC9C,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,IAAI,2DAA2D,CAAC,CAAC;QACxH,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtJ,IAAI,
|
|
1
|
+
{"version":3,"file":"clearTextureTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, FrameGraphRenderPass } from \"core/index\";\r\nimport { Color4, TmpColors } from \"../../../Maths/math.color\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { backbufferColorTextureHandle } from \"../../frameGraphTypes\";\r\n\r\n/**\r\n * Task used to clear a texture.\r\n */\r\nexport class FrameGraphClearTextureTask extends FrameGraphTask {\r\n /**\r\n * The color to clear the texture with.\r\n */\r\n public color = new Color4(0.2, 0.2, 0.3, 1);\r\n\r\n /**\r\n * If the color should be cleared.\r\n */\r\n public clearColor = true;\r\n\r\n /**\r\n * If the color should be converted to linear space (default: false).\r\n */\r\n public convertColorToLinearSpace = false;\r\n\r\n /**\r\n * If the depth should be cleared.\r\n */\r\n public clearDepth = false;\r\n\r\n /**\r\n * If the stencil should be cleared.\r\n */\r\n public clearStencil = false;\r\n\r\n /**\r\n * The value to use to clear the stencil buffer (default: 0).\r\n */\r\n public stencilValue = 0;\r\n\r\n /**\r\n * The color texture to clear.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle | FrameGraphTextureHandle[];\r\n\r\n /**\r\n * The depth attachment texture to clear.\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture (same as targetTexture, but the handle will be different).\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output depth texture (same as depthTexture, but the handle will be different).\r\n */\r\n public readonly outputDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Constructs a new clear task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphClearTextureTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.targetTexture === undefined && this.depthTexture === undefined) {\r\n throw new Error(`FrameGraphClearTextureTask ${this.name}: targetTexture and depthTexture can't both be undefined.`);\r\n }\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n const targetTextures = this.targetTexture !== undefined ? (Array.isArray(this.targetTexture) ? this.targetTexture : [this.targetTexture]) : undefined;\r\n\r\n if (this.targetTexture !== undefined) {\r\n textureManager.resolveDanglingHandle(this.outputTexture, targetTextures![0]);\r\n }\r\n if (this.depthTexture !== undefined) {\r\n textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n if (this.targetTexture !== undefined && this.depthTexture !== undefined) {\r\n const targetDescription = textureManager.getTextureDescription(targetTextures![0]);\r\n const depthDescription = textureManager.getTextureDescription(this.depthTexture);\r\n\r\n if (targetDescription.size.width !== depthDescription.size.width || targetDescription.size.height !== depthDescription.size.height) {\r\n throw new Error(\r\n `FrameGraphClearTextureTask ${this.name}: the depth texture (size: ${depthDescription.size.width}x${depthDescription.size.height}) and the target texture (size: ${targetDescription.size.width}x${targetDescription.size.height}) must have the same dimensions.`\r\n );\r\n }\r\n\r\n const textureSamples = targetDescription.options.samples || 1;\r\n const depthSamples = depthDescription.options.samples || 1;\r\n\r\n if (textureSamples !== depthSamples && textureSamples !== 0 && depthSamples !== 0) {\r\n throw new Error(\r\n `FrameGraphClearTextureTask ${this.name}: the depth texture (${depthSamples} samples) and the target texture (${textureSamples} samples) must have the same number of samples.`\r\n );\r\n }\r\n }\r\n\r\n const attachments = this._frameGraph.engine.buildTextureLayout(\r\n targetTextures ? Array(targetTextures.length).fill(true) : [],\r\n this.targetTexture === backbufferColorTextureHandle && !this._frameGraph.textureManager.backBufferTextureOverriden\r\n );\r\n\r\n const color = TmpColors.Color4[0];\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(targetTextures);\r\n pass.setRenderTargetDepth(this.depthTexture);\r\n pass.setExecuteFunc((context) => {\r\n color.copyFrom(this.color);\r\n if (this.convertColorToLinearSpace) {\r\n color.toLinearSpaceToRef(color);\r\n }\r\n\r\n const renderTargetWrapper = pass.frameGraphRenderTarget!.renderTargetWrapper;\r\n if (renderTargetWrapper) {\r\n renderTargetWrapper.disableAutomaticMSAAResolve = true;\r\n }\r\n\r\n context.clearAttachments(color, attachments, !!this.clearColor, !!this.clearDepth, !!this.clearStencil, this.stencilValue);\r\n });\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(targetTextures);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
|
|
@@ -4,6 +4,9 @@ import { FrameGraphTask } from "../../frameGraphTask.js";
|
|
|
4
4
|
* Task which copies a texture to the backbuffer color texture.
|
|
5
5
|
*/
|
|
6
6
|
export class FrameGraphCopyToBackbufferColorTask extends FrameGraphTask {
|
|
7
|
+
getClassName() {
|
|
8
|
+
return "FrameGraphCopyToBackbufferColorTask";
|
|
9
|
+
}
|
|
7
10
|
record() {
|
|
8
11
|
if (this.sourceTexture === undefined) {
|
|
9
12
|
throw new Error(`FrameGraphCopyToBackbufferColorTask "${this.name}": sourceTexture is required`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyToBackbufferColorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,cAAc;
|
|
1
|
+
{"version":3,"file":"copyToBackbufferColorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,cAAc;IAMnD,YAAY;QACxB,OAAO,qCAAqC,CAAC;IACjD,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,IAAI,8BAA8B,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEzC,IAAI,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEnF,YAAY,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;QAC3D,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;CACJ","sourcesContent":["import type { FrameGraphTextureHandle } from \"core/index\";\r\nimport { backbufferColorTextureHandle } from \"../../frameGraphTypes\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task which copies a texture to the backbuffer color texture.\r\n */\r\nexport class FrameGraphCopyToBackbufferColorTask extends FrameGraphTask {\r\n /**\r\n * The source texture to copy to the backbuffer color texture.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphCopyToBackbufferColorTask\";\r\n }\r\n\r\n public record() {\r\n if (this.sourceTexture === undefined) {\r\n throw new Error(`FrameGraphCopyToBackbufferColorTask \"${this.name}\": sourceTexture is required`);\r\n }\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.addDependencies(this.sourceTexture);\r\n\r\n pass.setRenderTarget(backbufferColorTextureHandle);\r\n pass.setExecuteFunc((context) => {\r\n if (!context.isBackbuffer(this.sourceTexture)) {\r\n context.copyTexture(this.sourceTexture);\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(backbufferColorTextureHandle);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n}\r\n"]}
|