@babylonjs/core 7.32.2 → 7.32.4
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/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +17 -9
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +3 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Misc/webRequest.d.ts +4 -0
- package/Misc/webRequest.js +6 -0
- package/Misc/webRequest.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +35 -11
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +131 -117
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js +0 -1
- package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +60 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +166 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +97 -56
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +356 -308
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +20 -6
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +67 -35
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +9 -4
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +84 -66
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +31 -6
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +108 -60
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +15 -0
- package/Rendering/geometryBufferRenderer.js +48 -5
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js +2 -4
- package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/instancesVertex.js +3 -6
- package/Shaders/ShadersInclude/instancesVertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +5 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.js +3 -3
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/iblShadowAccumulation.fragment.js +7 -11
- package/Shaders/iblShadowAccumulation.fragment.js.map +1 -1
- package/Shaders/iblShadowGBufferDebug.fragment.js +2 -3
- package/Shaders/iblShadowGBufferDebug.fragment.js.map +1 -1
- package/Shaders/iblShadowSpatialBlur.fragment.js +5 -5
- package/Shaders/iblShadowSpatialBlur.fragment.js.map +1 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js +31 -32
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/Shaders/iblShadowsCombine.fragment.js +2 -2
- package/Shaders/iblShadowsCombine.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +2 -4
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.js +3 -6
- package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +7 -1
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/geometry.vertex.js +3 -3
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/iblShadowAccumulation.fragment.js +5 -10
- package/ShadersWGSL/iblShadowAccumulation.fragment.js.map +1 -1
- package/ShadersWGSL/iblShadowGBufferDebug.fragment.js +2 -3
- package/ShadersWGSL/iblShadowGBufferDebug.fragment.js.map +1 -1
- package/ShadersWGSL/iblShadowSpatialBlur.fragment.js +5 -5
- package/ShadersWGSL/iblShadowSpatialBlur.fragment.js.map +1 -1
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +45 -33
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/iblShadowsCombine.fragment.js +6 -2
- package/ShadersWGSL/iblShadowsCombine.fragment.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iblShadowsSpatialBlurPass.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsSpatialBlurPass.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../../Engines/constants\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Vector4 } from \"../../Maths/math.vector\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport type { PostProcessOptions } from \"../../PostProcesses/postProcess\";\r\nimport type { Effect } from \"../../Materials/effect\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * This should not be instanciated directly, as it is part of a scene component\r\n * @internal\r\n */\r\nexport class _IblShadowsSpatialBlurPass {\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n // private _renderPipeline: IblShadowsRenderPipeline;\r\n private _outputPP: PostProcess;\r\n private _worldScale: number = 1.0;\r\n\r\n /**\r\n * Gets the pass post process\r\n * @returns The post process\r\n */\r\n public getPassPP(): PostProcess {\r\n return this._outputPP;\r\n }\r\n\r\n /**\r\n * Gets the debug pass post process\r\n * @returns The post process\r\n */\r\n public getDebugPassPP(): PostProcess {\r\n if (!this._debugPassPP) {\r\n this._createDebugPass();\r\n }\r\n return this._debugPassPP;\r\n }\r\n private _debugPassName: string = \"Spatial Blur Debug Pass\";\r\n /**\r\n * Sets the name of the debug pass\r\n */\r\n public get debugPassName(): string {\r\n return this._debugPassName;\r\n }\r\n\r\n /**\r\n * The scale of the voxel grid in world space. This is used to scale the blur radius in world space.\r\n * @param scale The scale of the voxel grid in world space.\r\n */\r\n public setWorldScale(scale: number) {\r\n this._worldScale = scale;\r\n }\r\n\r\n /** Enable the debug view for this pass */\r\n public debugEnabled: boolean = false;\r\n private _debugPassPP: PostProcess;\r\n private _debugSizeParams: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n\r\n /**\r\n * Sets params that control the position and scaling of the debug display on the screen.\r\n * @param x Screen X offset of the debug display (0-1)\r\n * @param y Screen Y offset of the debug display (0-1)\r\n * @param widthScale X scale of the debug display (0-1)\r\n * @param heightScale Y scale of the debug display (0-1)\r\n */\r\n public setDebugDisplayParams(x: number, y: number, widthScale: number, heightScale: number) {\r\n this._debugSizeParams.set(x, y, widthScale, heightScale);\r\n }\r\n\r\n /**\r\n * Creates the debug post process effect for this pass\r\n */\r\n private _createDebugPass() {\r\n if (!this._debugPassPP) {\r\n const isWebGPU = this._engine.isWebGPU;\r\n const debugOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n textureFormat: Constants.TEXTUREFORMAT_R,\r\n textureType: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n uniforms: [\"sizeParams\"],\r\n samplers: [\"debugSampler\"],\r\n engine: this._engine,\r\n reusable: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializations: (useWebGPU: boolean, list: Promise<any>[]) => {\r\n if (useWebGPU) {\r\n list.push(import(\"../../ShadersWGSL/iblShadowDebug.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowDebug.fragment\"));\r\n }\r\n },\r\n };\r\n this._debugPassPP = new PostProcess(this.debugPassName, \"iblShadowDebug\", debugOptions);\r\n this._debugPassPP.autoClear = false;\r\n this._debugPassPP.onApplyObservable.add((effect) => {\r\n // update the caustic texture with what we just rendered.\r\n effect.setTextureFromPostProcessOutput(\"debugSampler\", this._outputPP);\r\n effect.setVector4(\"sizeParams\", this._debugSizeParams);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Instanciates the importance sampling renderer\r\n * @param scene Scene to attach to\r\n * @returns The importance sampling renderer\r\n */\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._createTextures();\r\n }\r\n\r\n private _createTextures() {\r\n const isWebGPU = this._engine.isWebGPU;\r\n const ppOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n textureFormat: Constants.TEXTUREFORMAT_RG,\r\n textureType: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n uniforms: [\"blurParameters\"],\r\n samplers: [\"shadowSampler\", \"worldNormalSampler\", \"linearDepthSampler\"],\r\n engine: this._engine,\r\n reusable: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializations: (useWebGPU: boolean, list: Promise<any>[]) => {\r\n if (useWebGPU) {\r\n list.push(import(\"../../ShadersWGSL/iblShadowSpatialBlur.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowSpatialBlur.fragment\"));\r\n }\r\n },\r\n };\r\n this._outputPP = new PostProcess(\"spacialBlurPP\", \"iblShadowSpatialBlur\", ppOptions);\r\n this._outputPP.autoClear = false;\r\n this._outputPP.onApplyObservable.add((effect) => {\r\n this._updatePostProcess(effect);\r\n });\r\n }\r\n\r\n private _updatePostProcess(effect: Effect) {\r\n const iterationCount = 1;\r\n effect.setVector4(\"blurParameters\", new Vector4(iterationCount, this._worldScale, 0.0, 0.0));\r\n const prePassRenderer = this._scene.prePassRenderer;\r\n if (prePassRenderer) {\r\n const wnormalIndex = prePassRenderer.getIndex(Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE);\r\n const depthIndex = prePassRenderer.getIndex(Constants.PREPASS_DEPTH_TEXTURE_TYPE);\r\n if (wnormalIndex >= 0) effect.setTexture(\"worldNormalSampler\", prePassRenderer.getRenderTarget().textures[wnormalIndex]);\r\n if (depthIndex >= 0) effect.setTexture(\"linearDepthSampler\", prePassRenderer.getRenderTarget().textures[depthIndex]);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the pass is ready\r\n * @returns true if the pass is ready\r\n */\r\n public isReady() {\r\n return this._outputPP.isReady() && !(this._debugPassPP && !this._debugPassPP.isReady());\r\n }\r\n\r\n /**\r\n * Disposes the associated resources\r\n */\r\n public dispose() {\r\n this._outputPP.dispose();\r\n if (this._debugPassPP) {\r\n this._debugPassPP.dispose();\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"iblShadowsSpatialBlurPass.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsSpatialBlurPass.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../../Engines/constants\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Vector4 } from \"../../Maths/math.vector\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport type { PostProcessOptions } from \"../../PostProcesses/postProcess\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { GeometryBufferRenderer } from \"../../Rendering/geometryBufferRenderer\";\r\nimport { ProceduralTexture } from \"core/Materials/Textures/Procedurals/proceduralTexture\";\r\nimport type { IProceduralTextureCreationOptions } from \"core/Materials/Textures/Procedurals/proceduralTexture\";\r\nimport type { IblShadowsRenderPipeline } from \"./iblShadowsRenderPipeline\";\r\n\r\n/**\r\n * This should not be instanciated directly, as it is part of a scene component\r\n * @internal\r\n */\r\nexport class _IblShadowsSpatialBlurPass {\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n private _renderPipeline: IblShadowsRenderPipeline;\r\n private _outputTexture: ProceduralTexture;\r\n private _worldScale: number = 1.0;\r\n private _blurParameters: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n\r\n /**\r\n * Is the effect enabled\r\n */\r\n public enabled: boolean = true;\r\n\r\n /**\r\n * Returns the output texture of the pass.\r\n * @returns The output texture.\r\n */\r\n public getOutputTexture(): ProceduralTexture {\r\n return this._outputTexture;\r\n }\r\n\r\n /**\r\n * Gets the debug pass post process\r\n * @returns The post process\r\n */\r\n public getDebugPassPP(): PostProcess {\r\n if (!this._debugPassPP) {\r\n this._createDebugPass();\r\n }\r\n return this._debugPassPP;\r\n }\r\n private _debugPassName: string = \"Spatial Blur Debug Pass\";\r\n /**\r\n * Sets the name of the debug pass\r\n */\r\n public get debugPassName(): string {\r\n return this._debugPassName;\r\n }\r\n\r\n /**\r\n * The scale of the voxel grid in world space. This is used to scale the blur radius in world space.\r\n * @param scale The scale of the voxel grid in world space.\r\n */\r\n public setWorldScale(scale: number) {\r\n this._worldScale = scale;\r\n }\r\n\r\n /** Enable the debug view for this pass */\r\n public debugEnabled: boolean = false;\r\n private _debugPassPP: PostProcess;\r\n private _debugSizeParams: Vector4 = new Vector4(0.0, 0.0, 0.0, 0.0);\r\n\r\n /**\r\n * Sets params that control the position and scaling of the debug display on the screen.\r\n * @param x Screen X offset of the debug display (0-1)\r\n * @param y Screen Y offset of the debug display (0-1)\r\n * @param widthScale X scale of the debug display (0-1)\r\n * @param heightScale Y scale of the debug display (0-1)\r\n */\r\n public setDebugDisplayParams(x: number, y: number, widthScale: number, heightScale: number) {\r\n this._debugSizeParams.set(x, y, widthScale, heightScale);\r\n }\r\n\r\n /**\r\n * Creates the debug post process effect for this pass\r\n */\r\n private _createDebugPass() {\r\n if (!this._debugPassPP) {\r\n const isWebGPU = this._engine.isWebGPU;\r\n const debugOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n textureFormat: Constants.TEXTUREFORMAT_R,\r\n textureType: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n uniforms: [\"sizeParams\"],\r\n samplers: [\"debugSampler\"],\r\n engine: this._engine,\r\n reusable: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializations: (useWebGPU: boolean, list: Promise<any>[]) => {\r\n if (useWebGPU) {\r\n list.push(import(\"../../ShadersWGSL/iblShadowDebug.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowDebug.fragment\"));\r\n }\r\n },\r\n };\r\n this._debugPassPP = new PostProcess(this.debugPassName, \"iblShadowDebug\", debugOptions);\r\n this._debugPassPP.autoClear = false;\r\n this._debugPassPP.onApplyObservable.add((effect) => {\r\n // update the caustic texture with what we just rendered.\r\n effect.setTexture(\"debugSampler\", this._outputTexture);\r\n effect.setVector4(\"sizeParams\", this._debugSizeParams);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Instanciates the importance sampling renderer\r\n * @param scene Scene to attach to\r\n * @param iblShadowsRenderPipeline The IBL shadows render pipeline\r\n * @returns The importance sampling renderer\r\n */\r\n constructor(scene: Scene, iblShadowsRenderPipeline: IblShadowsRenderPipeline) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._renderPipeline = iblShadowsRenderPipeline;\r\n this._createTextures();\r\n }\r\n\r\n private _createTextures() {\r\n const isWebGPU = this._engine.isWebGPU;\r\n const textureOptions: IProceduralTextureCreationOptions = {\r\n type: Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n generateMipMaps: false,\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n extraInitializationsAsync: async () => {\r\n if (isWebGPU) {\r\n await Promise.all([import(\"../../ShadersWGSL/iblShadowSpatialBlur.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/iblShadowSpatialBlur.fragment\")]);\r\n }\r\n },\r\n };\r\n this._outputTexture = new ProceduralTexture(\r\n \"spatialBlurPass\",\r\n {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\r\n },\r\n \"iblShadowSpatialBlur\",\r\n this._scene,\r\n textureOptions,\r\n false,\r\n false,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n this._outputTexture.refreshRate = -1;\r\n this._outputTexture.autoClear = false;\r\n\r\n // Need to set all the textures first so that the effect gets created with the proper uniforms.\r\n this._setBindings();\r\n\r\n let counter = 0;\r\n this._scene.onBeforeRenderObservable.add(() => {\r\n counter = 0;\r\n });\r\n this._scene.onAfterRenderTargetsRenderObservable.add(() => {\r\n if (++counter == 2) {\r\n if (this.enabled && this._outputTexture.isReady()) {\r\n this._setBindings();\r\n this._outputTexture.render();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _setBindings() {\r\n this._outputTexture.setTexture(\"voxelTracingSampler\", this._renderPipeline._getVoxelTracingTexture());\r\n const iterationCount = 1;\r\n this._blurParameters.set(iterationCount, this._worldScale, 0.0, 0.0);\r\n this._outputTexture.setVector4(\"blurParameters\", this._blurParameters);\r\n const geometryBufferRenderer = this._scene.geometryBufferRenderer;\r\n if (!geometryBufferRenderer) {\r\n return;\r\n }\r\n const depthIndex = geometryBufferRenderer.getTextureIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE);\r\n this._outputTexture.setTexture(\"depthSampler\", geometryBufferRenderer.getGBuffer().textures[depthIndex]);\r\n const wnormalIndex = geometryBufferRenderer.getTextureIndex(GeometryBufferRenderer.NORMAL_TEXTURE_TYPE);\r\n this._outputTexture.setTexture(\"worldNormalSampler\", geometryBufferRenderer.getGBuffer().textures[wnormalIndex]);\r\n }\r\n\r\n /**\r\n * Called by render pipeline when canvas resized.\r\n * @param scaleFactor The factor by which to scale the canvas size.\r\n */\r\n public resize(scaleFactor: number = 1.0) {\r\n const newSize = {\r\n width: Math.max(1.0, Math.floor(this._engine.getRenderWidth() * scaleFactor)),\r\n height: Math.max(1.0, Math.floor(this._engine.getRenderHeight() * scaleFactor)),\r\n };\r\n this._outputTexture.resize(newSize, false);\r\n }\r\n\r\n /**\r\n * Checks if the pass is ready\r\n * @returns true if the pass is ready\r\n */\r\n public isReady() {\r\n return this._outputTexture.isReady() && !(this._debugPassPP && !this._debugPassPP.isReady());\r\n }\r\n\r\n /**\r\n * Disposes the associated resources\r\n */\r\n public dispose() {\r\n this._outputTexture.dispose();\r\n if (this._debugPassPP) {\r\n this._debugPassPP.dispose();\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { RenderTargetTexture } from "../../Materials/Textures/renderTargetTexture";
|
|
2
2
|
import { Matrix } from "../../Maths/math.vector";
|
|
3
|
+
import type { Mesh } from "../../Meshes/mesh";
|
|
3
4
|
import type { Scene } from "../../scene";
|
|
4
5
|
import { PostProcess } from "../../PostProcesses/postProcess";
|
|
5
6
|
import { ProceduralTexture } from "../../Materials/Textures/Procedurals/proceduralTexture";
|
|
@@ -13,7 +14,6 @@ import type { IblShadowsRenderPipeline } from "./iblShadowsRenderPipeline";
|
|
|
13
14
|
export declare class _IblShadowsVoxelRenderer {
|
|
14
15
|
private _scene;
|
|
15
16
|
private _engine;
|
|
16
|
-
private _renderPipeline;
|
|
17
17
|
private _voxelGridRT;
|
|
18
18
|
private _voxelGridXaxis;
|
|
19
19
|
private _voxelGridYaxis;
|
|
@@ -23,6 +23,8 @@ export declare class _IblShadowsVoxelRenderer {
|
|
|
23
23
|
private _voxelMrtsZaxis;
|
|
24
24
|
private _isVoxelGrid3D;
|
|
25
25
|
private _renderInFlight;
|
|
26
|
+
private _voxelMaterial;
|
|
27
|
+
private _voxelSlabDebugMaterial;
|
|
26
28
|
/**
|
|
27
29
|
* Return the voxel grid texture.
|
|
28
30
|
* @returns The voxel grid texture.
|
|
@@ -81,6 +83,7 @@ export declare class _IblShadowsVoxelRenderer {
|
|
|
81
83
|
get voxelDebugAxis(): number;
|
|
82
84
|
private _voxelDebugAxis;
|
|
83
85
|
private _debugSizeParams;
|
|
86
|
+
private _includedMeshes;
|
|
84
87
|
/**
|
|
85
88
|
* Sets params that control the position and scaling of the debug display on the screen.
|
|
86
89
|
* @param x Screen X offset of the debug display (0-1)
|
|
@@ -105,6 +108,7 @@ export declare class _IblShadowsVoxelRenderer {
|
|
|
105
108
|
*/
|
|
106
109
|
get voxelDebugEnabled(): boolean;
|
|
107
110
|
set voxelDebugEnabled(enabled: boolean);
|
|
111
|
+
private _setDebugBindingsBound;
|
|
108
112
|
/**
|
|
109
113
|
* Creates the debug post process effect for this pass
|
|
110
114
|
*/
|
|
@@ -126,7 +130,8 @@ export declare class _IblShadowsVoxelRenderer {
|
|
|
126
130
|
private _createTextures;
|
|
127
131
|
private _createVoxelMRTs;
|
|
128
132
|
private _disposeVoxelTextures;
|
|
129
|
-
private
|
|
133
|
+
private _createVoxelMaterials;
|
|
134
|
+
private _setDebugBindings;
|
|
130
135
|
/**
|
|
131
136
|
* Checks if the voxel renderer is ready to voxelize scene
|
|
132
137
|
* @returns true if the voxel renderer is ready to voxelize scene
|
|
@@ -140,9 +145,9 @@ export declare class _IblShadowsVoxelRenderer {
|
|
|
140
145
|
private _removeVoxelRTs;
|
|
141
146
|
/**
|
|
142
147
|
* Renders voxel grid of scene for IBL shadows
|
|
143
|
-
* @param
|
|
148
|
+
* @param includedMeshes
|
|
144
149
|
*/
|
|
145
|
-
updateVoxelGrid(
|
|
150
|
+
updateVoxelGrid(includedMeshes: Mesh[]): void;
|
|
146
151
|
private _renderVoxelGrid;
|
|
147
152
|
private _addRTsForRender;
|
|
148
153
|
/**
|
|
@@ -5,7 +5,6 @@ import { MultiRenderTarget } from "../../Materials/Textures/multiRenderTarget.js
|
|
|
5
5
|
import { RenderTargetTexture } from "../../Materials/Textures/renderTargetTexture.js";
|
|
6
6
|
import { Color4 } from "../../Maths/math.color.js";
|
|
7
7
|
import { Matrix, Vector3, Vector4 } from "../../Maths/math.vector.js";
|
|
8
|
-
import { Mesh } from "../../Meshes/mesh.js";
|
|
9
8
|
import { Texture } from "../../Materials/Textures/texture.js";
|
|
10
9
|
import { Logger } from "../../Misc/logger.js";
|
|
11
10
|
import { PostProcess } from "../../PostProcesses/postProcess.js";
|
|
@@ -56,7 +55,6 @@ export class _IblShadowsVoxelRenderer {
|
|
|
56
55
|
this._triPlanarVoxelization = enabled;
|
|
57
56
|
this._disposeVoxelTextures();
|
|
58
57
|
this._createTextures();
|
|
59
|
-
this._renderPipeline.updateVoxelization();
|
|
60
58
|
}
|
|
61
59
|
/**
|
|
62
60
|
* Set the matrix to use for scaling the world space to voxel space
|
|
@@ -136,19 +134,26 @@ export class _IblShadowsVoxelRenderer {
|
|
|
136
134
|
}
|
|
137
135
|
this._voxelDebugEnabled = enabled;
|
|
138
136
|
if (enabled) {
|
|
139
|
-
this._voxelSlabDebugRT = new RenderTargetTexture("voxelSlabDebug", {
|
|
137
|
+
this._voxelSlabDebugRT = new RenderTargetTexture("voxelSlabDebug", { width: this._engine.getRenderWidth(), height: this._engine.getRenderHeight() }, this._scene, {
|
|
140
138
|
generateDepthBuffer: true,
|
|
141
139
|
generateMipMaps: false,
|
|
142
140
|
type: 0,
|
|
143
|
-
format:
|
|
141
|
+
format: 5,
|
|
144
142
|
samplingMode: 1,
|
|
145
143
|
});
|
|
146
144
|
this._voxelSlabDebugRT.noPrePassRenderer = true;
|
|
147
145
|
}
|
|
146
|
+
if (this._voxelSlabDebugRT) {
|
|
147
|
+
this._removeVoxelRTs([this._voxelSlabDebugRT]);
|
|
148
|
+
}
|
|
149
|
+
// Add the slab debug RT if needed.
|
|
150
|
+
if (this._voxelDebugEnabled) {
|
|
151
|
+
this._addRTsForRender([this._voxelSlabDebugRT], this._includedMeshes, this._voxelDebugAxis, 1, true);
|
|
152
|
+
this._setDebugBindingsBound = this._setDebugBindings.bind(this);
|
|
153
|
+
this._scene.onBeforeRenderObservable.add(this._setDebugBindingsBound);
|
|
154
|
+
}
|
|
148
155
|
else {
|
|
149
|
-
|
|
150
|
-
this._removeVoxelRTs([this._voxelSlabDebugRT]);
|
|
151
|
-
}
|
|
156
|
+
this._scene.onBeforeRenderObservable.removeCallback(this._setDebugBindingsBound);
|
|
152
157
|
}
|
|
153
158
|
}
|
|
154
159
|
/**
|
|
@@ -160,7 +165,7 @@ export class _IblShadowsVoxelRenderer {
|
|
|
160
165
|
const debugOptions = {
|
|
161
166
|
width: this._engine.getRenderWidth(),
|
|
162
167
|
height: this._engine.getRenderHeight(),
|
|
163
|
-
textureFormat:
|
|
168
|
+
textureFormat: 5,
|
|
164
169
|
textureType: 0,
|
|
165
170
|
samplingMode: 1,
|
|
166
171
|
uniforms: ["sizeParams", "mipNumber"],
|
|
@@ -223,18 +228,19 @@ export class _IblShadowsVoxelRenderer {
|
|
|
223
228
|
this._renderTargets = [];
|
|
224
229
|
this._triPlanarVoxelization = true;
|
|
225
230
|
this._voxelizationInProgress = false;
|
|
231
|
+
this._invWorldScaleMatrix = Matrix.Identity();
|
|
226
232
|
this._voxelResolution = 64;
|
|
227
233
|
this._voxelResolutionExp = 6;
|
|
228
234
|
this._mipArray = [];
|
|
229
235
|
this._voxelDebugEnabled = false;
|
|
230
236
|
this._voxelDebugAxis = -1;
|
|
231
237
|
this._debugSizeParams = new Vector4(0.0, 0.0, 0.0, 0.0);
|
|
238
|
+
this._includedMeshes = [];
|
|
232
239
|
this._debugMipNumber = 0;
|
|
233
240
|
this._debugPassName = "Voxelization Debug Pass";
|
|
234
241
|
this._scene = scene;
|
|
235
242
|
this._engine = scene.getEngine();
|
|
236
243
|
this._triPlanarVoxelization = triPlanarVoxelization;
|
|
237
|
-
this._renderPipeline = iblShadowsRenderPipeline;
|
|
238
244
|
if (!this._engine.getCaps().drawBuffersExtension) {
|
|
239
245
|
Logger.Error("Can't do voxel rendering without the draw buffers extension.");
|
|
240
246
|
}
|
|
@@ -398,6 +404,7 @@ export class _IblShadowsVoxelRenderer {
|
|
|
398
404
|
mipTarget.setTexture("srcMip", mipIdx > 1 ? this._mipArray[mipIdx - 2] : this.getVoxelGrid());
|
|
399
405
|
mipTarget.setInt("layerNum", 0);
|
|
400
406
|
}
|
|
407
|
+
this._createVoxelMaterials();
|
|
401
408
|
}
|
|
402
409
|
_createVoxelMRTs(name, voxelRT, numSlabs) {
|
|
403
410
|
voxelRT.wrapU = Texture.CLAMP_ADDRESSMODE;
|
|
@@ -450,14 +457,16 @@ export class _IblShadowsVoxelRenderer {
|
|
|
450
457
|
this._mipArray.forEach((mip) => {
|
|
451
458
|
mip.dispose();
|
|
452
459
|
});
|
|
460
|
+
this._voxelMaterial?.dispose();
|
|
461
|
+
this._voxelSlabDebugMaterial?.dispose();
|
|
453
462
|
this._mipArray = [];
|
|
454
463
|
this._voxelMrtsXaxis = [];
|
|
455
464
|
this._voxelMrtsYaxis = [];
|
|
456
465
|
this._voxelMrtsZaxis = [];
|
|
457
466
|
}
|
|
458
|
-
|
|
467
|
+
_createVoxelMaterials() {
|
|
459
468
|
const isWebGPU = this._engine.isWebGPU;
|
|
460
|
-
|
|
469
|
+
this._voxelMaterial = new ShaderMaterial("voxelization", this._scene, "iblVoxelGrid", {
|
|
461
470
|
uniforms: ["world", "viewMatrix", "invWorldScale", "nearPlane", "farPlane", "stepSize"],
|
|
462
471
|
defines: ["MAX_DRAW_BUFFERS " + this._maxDrawBuffers],
|
|
463
472
|
shaderLanguage: isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
|
|
@@ -470,10 +479,26 @@ export class _IblShadowsVoxelRenderer {
|
|
|
470
479
|
}
|
|
471
480
|
},
|
|
472
481
|
});
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
482
|
+
this._voxelMaterial.cullBackFaces = false;
|
|
483
|
+
this._voxelMaterial.backFaceCulling = false;
|
|
484
|
+
this._voxelMaterial.depthFunction = Engine.ALWAYS;
|
|
485
|
+
this._voxelSlabDebugMaterial = new ShaderMaterial("voxelSlabDebug", this._scene, "iblVoxelSlabDebug", {
|
|
486
|
+
uniforms: ["world", "viewMatrix", "cameraViewMatrix", "projection", "invWorldScale", "nearPlane", "farPlane", "stepSize"],
|
|
487
|
+
defines: ["MAX_DRAW_BUFFERS " + this._maxDrawBuffers],
|
|
488
|
+
shaderLanguage: isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
|
|
489
|
+
extraInitializationsAsync: async () => {
|
|
490
|
+
if (isWebGPU) {
|
|
491
|
+
await Promise.all([import("../../ShadersWGSL/iblVoxelSlabDebug.fragment.js"), import("../../ShadersWGSL/iblVoxelSlabDebug.vertex.js")]);
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
await Promise.all([import("../../Shaders/iblVoxelSlabDebug.fragment.js"), import("../../Shaders/iblVoxelSlabDebug.vertex.js")]);
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
_setDebugBindings() {
|
|
500
|
+
this._voxelSlabDebugMaterial.setMatrix("projection", this._scene.activeCamera.getProjectionMatrix());
|
|
501
|
+
this._voxelSlabDebugMaterial.setMatrix("cameraViewMatrix", this._scene.activeCamera.getViewMatrix());
|
|
477
502
|
}
|
|
478
503
|
/**
|
|
479
504
|
* Checks if the voxel renderer is ready to voxelize scene
|
|
@@ -523,26 +548,24 @@ export class _IblShadowsVoxelRenderer {
|
|
|
523
548
|
}
|
|
524
549
|
/**
|
|
525
550
|
* Renders voxel grid of scene for IBL shadows
|
|
526
|
-
* @param
|
|
551
|
+
* @param includedMeshes
|
|
527
552
|
*/
|
|
528
|
-
updateVoxelGrid(
|
|
553
|
+
updateVoxelGrid(includedMeshes) {
|
|
529
554
|
this._stopVoxelization();
|
|
555
|
+
this._includedMeshes = includedMeshes;
|
|
530
556
|
this._voxelizationInProgress = true;
|
|
531
557
|
if (this._triPlanarVoxelization) {
|
|
532
|
-
this._addRTsForRender(this._voxelMrtsXaxis,
|
|
533
|
-
this._addRTsForRender(this._voxelMrtsYaxis,
|
|
534
|
-
this._addRTsForRender(this._voxelMrtsZaxis,
|
|
558
|
+
this._addRTsForRender(this._voxelMrtsXaxis, includedMeshes, 0);
|
|
559
|
+
this._addRTsForRender(this._voxelMrtsYaxis, includedMeshes, 1);
|
|
560
|
+
this._addRTsForRender(this._voxelMrtsZaxis, includedMeshes, 2);
|
|
535
561
|
}
|
|
536
562
|
else {
|
|
537
|
-
this._addRTsForRender(this._voxelMrtsZaxis,
|
|
563
|
+
this._addRTsForRender(this._voxelMrtsZaxis, includedMeshes, 2);
|
|
538
564
|
}
|
|
539
|
-
// Add the slab debug RT if needed.
|
|
540
565
|
if (this._voxelDebugEnabled) {
|
|
541
|
-
this.
|
|
542
|
-
this._addRTsForRender([this._voxelSlabDebugRT], [], this._voxelDebugAxis, 1, true);
|
|
566
|
+
this._addRTsForRender([this._voxelSlabDebugRT], includedMeshes, this._voxelDebugAxis, 1, true);
|
|
543
567
|
}
|
|
544
|
-
this.
|
|
545
|
-
this._scene.onAfterRenderTargetsRenderObservable.add(this.boundVoxelGridRenderFn);
|
|
568
|
+
this._scene.onAfterRenderTargetsRenderObservable.addOnce(this._renderVoxelGrid.bind(this));
|
|
546
569
|
}
|
|
547
570
|
_renderVoxelGrid() {
|
|
548
571
|
if (this._voxelizationInProgress) {
|
|
@@ -557,7 +580,6 @@ export class _IblShadowsVoxelRenderer {
|
|
|
557
580
|
}
|
|
558
581
|
if (allReady) {
|
|
559
582
|
this._renderInFlight = false;
|
|
560
|
-
this._scene.prePassRenderer._setEnabled(false);
|
|
561
583
|
this._renderTargets.forEach((rt) => {
|
|
562
584
|
rt.render();
|
|
563
585
|
});
|
|
@@ -569,7 +591,6 @@ export class _IblShadowsVoxelRenderer {
|
|
|
569
591
|
this._copyMipMaps();
|
|
570
592
|
this._voxelizationInProgress = false;
|
|
571
593
|
this._scene.onAfterRenderTargetsRenderObservable.removeCallback(this.boundVoxelGridRenderFn);
|
|
572
|
-
this._scene.prePassRenderer._setEnabled(true);
|
|
573
594
|
}
|
|
574
595
|
else if (!this._renderInFlight) {
|
|
575
596
|
this._renderInFlight = true;
|
|
@@ -579,39 +600,21 @@ export class _IblShadowsVoxelRenderer {
|
|
|
579
600
|
}
|
|
580
601
|
}
|
|
581
602
|
}
|
|
582
|
-
_addRTsForRender(mrts,
|
|
603
|
+
_addRTsForRender(mrts, includedMeshes, axis, shaderType = 0, continuousRender = false) {
|
|
583
604
|
const slabSize = 1.0 / this._computeNumberOfSlabs();
|
|
584
|
-
|
|
605
|
+
let voxelMaterial;
|
|
606
|
+
if (shaderType === 0) {
|
|
607
|
+
voxelMaterial = this._voxelMaterial;
|
|
608
|
+
}
|
|
609
|
+
else {
|
|
610
|
+
voxelMaterial = this._voxelSlabDebugMaterial;
|
|
611
|
+
}
|
|
585
612
|
// We need to update the world scale uniform for every mesh being rendered to the voxel grid.
|
|
586
613
|
mrts.forEach((mrt, mrtIndex) => {
|
|
587
614
|
mrt.renderList = [];
|
|
588
615
|
const nearPlane = mrtIndex * slabSize;
|
|
589
616
|
const farPlane = (mrtIndex + 1) * slabSize;
|
|
590
617
|
const stepSize = slabSize / this._maxDrawBuffers;
|
|
591
|
-
let voxelMaterial;
|
|
592
|
-
if (shaderType === 0) {
|
|
593
|
-
voxelMaterial = this._createVoxelMaterial();
|
|
594
|
-
}
|
|
595
|
-
else {
|
|
596
|
-
const isWebGPU = this._engine.isWebGPU;
|
|
597
|
-
voxelMaterial = new ShaderMaterial("voxelSlabDebug", this._scene, "iblVoxelSlabDebug", {
|
|
598
|
-
uniforms: ["world", "viewMatrix", "cameraViewMatrix", "projection", "invWorldScale", "nearPlane", "farPlane", "stepSize"],
|
|
599
|
-
defines: ["MAX_DRAW_BUFFERS " + this._maxDrawBuffers],
|
|
600
|
-
shaderLanguage: isWebGPU ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */,
|
|
601
|
-
extraInitializationsAsync: async () => {
|
|
602
|
-
if (isWebGPU) {
|
|
603
|
-
await Promise.all([import("../../ShadersWGSL/iblVoxelSlabDebug.fragment.js"), import("../../ShadersWGSL/iblVoxelSlabDebug.vertex.js")]);
|
|
604
|
-
}
|
|
605
|
-
else {
|
|
606
|
-
await Promise.all([import("../../Shaders/iblVoxelSlabDebug.fragment.js"), import("../../Shaders/iblVoxelSlabDebug.vertex.js")]);
|
|
607
|
-
}
|
|
608
|
-
},
|
|
609
|
-
});
|
|
610
|
-
this._scene.onBeforeRenderObservable.add(() => {
|
|
611
|
-
voxelMaterial.setMatrix("projection", this._scene.activeCamera.getProjectionMatrix());
|
|
612
|
-
voxelMaterial.setMatrix("cameraViewMatrix", this._scene.activeCamera.getViewMatrix());
|
|
613
|
-
});
|
|
614
|
-
}
|
|
615
618
|
const cameraPosition = new Vector3(0, 0, 0);
|
|
616
619
|
let targetPosition = new Vector3(0, 0, 1);
|
|
617
620
|
if (axis === 0) {
|
|
@@ -624,24 +627,39 @@ export class _IblShadowsVoxelRenderer {
|
|
|
624
627
|
if (axis === 1) {
|
|
625
628
|
upDirection = new Vector3(1, 0, 0);
|
|
626
629
|
}
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
630
|
+
mrt.onBeforeRenderObservable.add(() => {
|
|
631
|
+
voxelMaterial.setMatrix("viewMatrix", Matrix.LookAtLH(cameraPosition, targetPosition, upDirection));
|
|
632
|
+
voxelMaterial.setMatrix("invWorldScale", this._invWorldScaleMatrix);
|
|
633
|
+
voxelMaterial.setFloat("nearPlane", nearPlane);
|
|
634
|
+
voxelMaterial.setFloat("farPlane", farPlane);
|
|
635
|
+
voxelMaterial.setFloat("stepSize", stepSize);
|
|
636
|
+
});
|
|
632
637
|
// Set this material on every mesh in the scene (for this RT)
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
638
|
+
if (includedMeshes.length === 0) {
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
|
+
includedMeshes.forEach((mesh) => {
|
|
642
|
+
if (mesh) {
|
|
643
|
+
if (mesh.subMeshes && mesh.subMeshes.length > 0) {
|
|
644
|
+
mrt.renderList?.push(mesh);
|
|
645
|
+
mrt.setMaterialForRendering(mesh, voxelMaterial);
|
|
646
|
+
}
|
|
647
|
+
mesh.getChildMeshes().forEach((childMesh) => {
|
|
648
|
+
if (childMesh.subMeshes && childMesh.subMeshes.length > 0) {
|
|
649
|
+
mrt.renderList?.push(childMesh);
|
|
650
|
+
mrt.setMaterialForRendering(childMesh, voxelMaterial);
|
|
651
|
+
}
|
|
652
|
+
});
|
|
639
653
|
}
|
|
640
654
|
});
|
|
641
655
|
});
|
|
642
656
|
// Add the MRT's to render.
|
|
643
657
|
if (continuousRender) {
|
|
644
|
-
|
|
658
|
+
mrts.forEach((mrt) => {
|
|
659
|
+
if (this._scene.customRenderTargets.indexOf(mrt) === -1) {
|
|
660
|
+
this._scene.customRenderTargets.push(mrt);
|
|
661
|
+
}
|
|
662
|
+
});
|
|
645
663
|
}
|
|
646
664
|
else {
|
|
647
665
|
this._renderTargets = this._renderTargets.concat(mrts);
|