@babylonjs/core 7.26.5 → 7.27.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.
Files changed (32) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +3 -1
  4. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +49 -10
  5. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  6. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +8 -2
  7. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  8. package/Rendering/geometryBufferRenderer.d.ts +30 -0
  9. package/Rendering/geometryBufferRenderer.js +100 -18
  10. package/Rendering/geometryBufferRenderer.js.map +1 -1
  11. package/Rendering/screenSpaceReflections2Configuration.d.ts +4 -0
  12. package/Rendering/screenSpaceReflections2Configuration.js +6 -2
  13. package/Rendering/screenSpaceReflections2Configuration.js.map +1 -1
  14. package/Shaders/ShadersInclude/screenSpaceRayTrace.js +28 -3
  15. package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  16. package/Shaders/geometry.fragment.js +4 -5
  17. package/Shaders/geometry.fragment.js.map +1 -1
  18. package/Shaders/iblShadowVoxelTracing.fragment.js +12 -2
  19. package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
  20. package/Shaders/screenSpaceReflection2.fragment.js +7 -2
  21. package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
  22. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js +8 -1
  23. package/Shaders/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
  24. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +30 -4
  25. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  26. package/ShadersWGSL/geometry.fragment.js +6 -7
  27. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  28. package/ShadersWGSL/screenSpaceReflection2.fragment.js +7 -2
  29. package/ShadersWGSL/screenSpaceReflection2.fragment.js.map +1 -1
  30. package/ShadersWGSL/screenSpaceReflection2BlurCombiner.fragment.js +8 -1
  31. package/ShadersWGSL/screenSpaceReflection2BlurCombiner.fragment.js.map +1 -1
  32. package/package.json +1 -1
@@ -209,6 +209,9 @@ export class _IblShadowsVoxelTracingPass {
209
209
  }
210
210
  _createTextures() {
211
211
  let defines = "";
212
+ if (this._scene.useRightHandedSystem) {
213
+ defines += "#define RIGHT_HANDED\n";
214
+ }
212
215
  if (this._debugVoxelMarchEnabled) {
213
216
  defines += "#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\n";
214
217
  }
@@ -241,6 +244,9 @@ export class _IblShadowsVoxelTracingPass {
241
244
  });
242
245
  }
243
246
  _updatePostProcess(effect, camera) {
247
+ if (this._scene.useRightHandedSystem) {
248
+ effect.defines = "#define RIGHT_HANDED\n";
249
+ }
244
250
  effect.setMatrix("viewMtx", camera.getViewMatrix());
245
251
  effect.setMatrix("projMtx", camera.getProjectionMatrix());
246
252
  camera.getProjectionMatrix().invertToRef(this._cameraInvProj);
@@ -250,7 +256,7 @@ export class _IblShadowsVoxelTracingPass {
250
256
  effect.setMatrix("wsNormalizationMtx", this._invWorldScaleMatrix);
251
257
  this._frameId++;
252
258
  const downscaleSquared = this._downscale * this._downscale;
253
- let rotation = this._scene.useRightHandedSystem ? -this._envRotation - 0.5 * Math.PI : -this._envRotation - Math.PI;
259
+ let rotation = this._scene.useRightHandedSystem ? -(this._envRotation + 0.5 * Math.PI) : this._envRotation - 0.5 * Math.PI;
254
260
  rotation = rotation % (2.0 * Math.PI);
255
261
  effect.setVector4("shadowParameters", new Vector4(this._sampleDirections, this._frameId / downscaleSquared, this._downscale, rotation));
256
262
  const offset = new Vector2(0.0, 0.0);
@@ -265,7 +271,7 @@ export class _IblShadowsVoxelTracingPass {
265
271
  effect.setTexture("icdfySampler", this._renderPipeline.getIcdfyTexture());
266
272
  effect.setTexture("icdfxSampler", this._renderPipeline.getIcdfxTexture());
267
273
  if (this._debugVoxelMarchEnabled) {
268
- effect.defines = "#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\n";
274
+ effect.defines += "#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\n";
269
275
  }
270
276
  const prePassRenderer = this._scene.prePassRenderer;
271
277
  if (prePassRenderer) {
@@ -1 +1 @@
1
- {"version":3,"file":"iblShadowsVoxelTracingPass.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsVoxelTracingPass.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 { Matrix, Vector2, Vector4 } from \"../../Maths/math.vector\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport type { PostProcessOptions } from \"../../PostProcesses/postProcess\";\r\nimport type { IblShadowsRenderPipeline } from \"./iblShadowsRenderPipeline\";\r\nimport type { Effect } from \"../../Materials/effect\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Build cdf maps for IBL importance sampling during IBL shadow computation.\r\n * This should not be instanciated directly, as it is part of a scene component\r\n * @internal\r\n */\r\nexport class _IblShadowsVoxelTracingPass {\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n private _renderPipeline: IblShadowsRenderPipeline;\r\n private _voxelShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public get voxelShadowOpacity(): number {\r\n return this._voxelShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public set voxelShadowOpacity(value: number) {\r\n this._voxelShadowOpacity = value;\r\n }\r\n private _sssSamples: number = 16;\r\n private _sssStride: number = 8;\r\n private _sssMaxDist: number = 0.05;\r\n private _sssThickness: number = 0.5;\r\n\r\n private _ssShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public get ssShadowOpacity(): number {\r\n return this._ssShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public set ssShadowOpacity(value: number) {\r\n this._ssShadowOpacity = value;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public get sssSamples(): number {\r\n return this._sssSamples;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public set sssSamples(value: number) {\r\n this._sssSamples = value;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public get sssStride(): number {\r\n return this._sssStride;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public set sssStride(value: number) {\r\n this._sssStride = value;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public get sssMaxDist(): number {\r\n return this._sssMaxDist;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public set sssMaxDist(value: number) {\r\n this._sssMaxDist = value;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public get sssThickness(): number {\r\n return this._sssThickness;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public set sssThickness(value: number) {\r\n this._sssThickness = value;\r\n }\r\n\r\n private _outputPP: PostProcess;\r\n private _cameraInvView: Matrix = Matrix.Identity();\r\n private _cameraInvProj: Matrix = Matrix.Identity();\r\n private _invWorldScaleMatrix: Matrix = Matrix.Identity();\r\n private _frameId: number = 0;\r\n private _sampleDirections: number = 4;\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public get sampleDirections(): number {\r\n return this._sampleDirections;\r\n }\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public set sampleDirections(value: number) {\r\n this._sampleDirections = value;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public get envRotation(): number {\r\n return this._envRotation;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public set envRotation(value: number) {\r\n this._envRotation = value;\r\n }\r\n\r\n /** Enable the debug view for this pass */\r\n public debugEnabled: boolean = false;\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. This will create the resources for the pass\r\n * if they don't already exist.\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\r\n private _debugPassName: string = \"Voxel Tracing Debug Pass\";\r\n\r\n /**\r\n * 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 /** The default rotation of the environment map will align the shadows with the default lighting orientation */\r\n private _envRotation: number = 0.0;\r\n private _downscale: number = 1.0;\r\n\r\n /**\r\n * Set the matrix to use for scaling the world space to voxel space\r\n * @param matrix The matrix to use for scaling the world space to voxel space\r\n */\r\n public setWorldScaleMatrix(matrix: Matrix) {\r\n this._invWorldScaleMatrix = matrix;\r\n }\r\n\r\n private _debugVoxelMarchEnabled: 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 const isWebGPU = this._engine.isWebGPU;\r\n if (!this._debugPassPP) {\r\n const debugOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\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 * Instantiates the shadow voxel-tracing pass\r\n * @param scene Scene to attach to\r\n * @param iblShadowsRenderPipeline The IBL shadows render pipeline\r\n * @returns The shadow voxel-tracing pass\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 let defines = \"\";\r\n if (this._debugVoxelMarchEnabled) {\r\n defines += \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\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: [\"viewMtx\", \"projMtx\", \"invProjMtx\", \"invViewMtx\", \"wsNormalizationMtx\", \"shadowParameters\", \"offsetDataParameters\", \"sssParameters\", \"shadowOpacity\"],\r\n samplers: [\"voxelGridSampler\", \"icdfySampler\", \"icdfxSampler\", \"blueNoiseSampler\", \"worldNormalSampler\", \"depthSampler\", \"worldPositionSampler\"],\r\n defines: defines,\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/iblShadowVoxelTracing.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowVoxelTracing.fragment\"));\r\n }\r\n },\r\n };\r\n this._outputPP = new PostProcess(\"voxelTracingPass\", \"iblShadowVoxelTracing\", ppOptions);\r\n this._outputPP.autoClear = false;\r\n this._outputPP.onApplyObservable.add((effect) => {\r\n this._updatePostProcess(effect, this._scene.activeCamera!);\r\n });\r\n }\r\n\r\n private _updatePostProcess(effect: Effect, camera: Camera) {\r\n effect.setMatrix(\"viewMtx\", camera.getViewMatrix());\r\n effect.setMatrix(\"projMtx\", camera.getProjectionMatrix());\r\n camera.getProjectionMatrix().invertToRef(this._cameraInvProj);\r\n camera.getViewMatrix().invertToRef(this._cameraInvView);\r\n effect.setMatrix(\"invProjMtx\", this._cameraInvProj);\r\n effect.setMatrix(\"invViewMtx\", this._cameraInvView);\r\n effect.setMatrix(\"wsNormalizationMtx\", this._invWorldScaleMatrix);\r\n\r\n this._frameId++;\r\n\r\n const downscaleSquared = this._downscale * this._downscale;\r\n let rotation = this._scene.useRightHandedSystem ? -this._envRotation - 0.5 * Math.PI : -this._envRotation - Math.PI;\r\n rotation = rotation % (2.0 * Math.PI);\r\n effect.setVector4(\"shadowParameters\", new Vector4(this._sampleDirections, this._frameId / downscaleSquared, this._downscale, rotation));\r\n const offset = new Vector2(0.0, 0.0);\r\n const voxelGrid = this._renderPipeline!.getVoxelGridTexture();\r\n const highestMip = Math.floor(Math.log2(voxelGrid!.getSize().width));\r\n effect.setVector4(\"offsetDataParameters\", new Vector4(offset.x, offset.y, highestMip, 0.0));\r\n\r\n // SSS Options.\r\n effect.setVector4(\"sssParameters\", new Vector4(this._sssSamples, this._sssStride, this._sssMaxDist, this._sssThickness));\r\n effect.setVector4(\"shadowOpacity\", new Vector4(this._voxelShadowOpacity, this._ssShadowOpacity, 0.0, 0.0));\r\n effect.setTexture(\"voxelGridSampler\", voxelGrid);\r\n effect.setTexture(\"blueNoiseSampler\", (this._renderPipeline as any)._noiseTexture);\r\n effect.setTexture(\"icdfySampler\", this._renderPipeline!.getIcdfyTexture());\r\n effect.setTexture(\"icdfxSampler\", this._renderPipeline!.getIcdfxTexture());\r\n if (this._debugVoxelMarchEnabled) {\r\n effect.defines = \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\r\n\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 clipDepthIndex = prePassRenderer.getIndex(Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE);\r\n const wPositionIndex = prePassRenderer.getIndex(Constants.PREPASS_POSITION_TEXTURE_TYPE);\r\n if (wnormalIndex >= 0) effect.setTexture(\"worldNormalSampler\", prePassRenderer.getRenderTarget().textures[wnormalIndex]);\r\n if (clipDepthIndex >= 0) effect.setTexture(\"depthSampler\", prePassRenderer.getRenderTarget().textures[clipDepthIndex]);\r\n if (wPositionIndex >= 0) effect.setTexture(\"worldPositionSampler\", prePassRenderer.getRenderTarget().textures[wPositionIndex]);\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 (\r\n this._outputPP.isReady() &&\r\n !(this._debugPassPP && !this._debugPassPP.isReady()) &&\r\n this._renderPipeline!.getIcdfyTexture().isReady() &&\r\n this._renderPipeline!.getIcdfxTexture().isReady() &&\r\n this._renderPipeline!.getVoxelGridTexture().isReady()\r\n );\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":"iblShadowsVoxelTracingPass.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/IBLShadows/iblShadowsVoxelTracingPass.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 { Matrix, Vector2, Vector4 } from \"../../Maths/math.vector\";\r\nimport { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport type { PostProcessOptions } from \"../../PostProcesses/postProcess\";\r\nimport type { IblShadowsRenderPipeline } from \"./iblShadowsRenderPipeline\";\r\nimport type { Effect } from \"../../Materials/effect\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Build cdf maps for IBL importance sampling during IBL shadow computation.\r\n * This should not be instanciated directly, as it is part of a scene component\r\n * @internal\r\n */\r\nexport class _IblShadowsVoxelTracingPass {\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n private _renderPipeline: IblShadowsRenderPipeline;\r\n private _voxelShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public get voxelShadowOpacity(): number {\r\n return this._voxelShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the shadow cast from the voxel grid\r\n */\r\n public set voxelShadowOpacity(value: number) {\r\n this._voxelShadowOpacity = value;\r\n }\r\n private _sssSamples: number = 16;\r\n private _sssStride: number = 8;\r\n private _sssMaxDist: number = 0.05;\r\n private _sssThickness: number = 0.5;\r\n\r\n private _ssShadowOpacity: number = 1.0;\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public get ssShadowOpacity(): number {\r\n return this._ssShadowOpacity;\r\n }\r\n /**\r\n * The opacity of the screen-space shadow\r\n */\r\n public set ssShadowOpacity(value: number) {\r\n this._ssShadowOpacity = value;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public get sssSamples(): number {\r\n return this._sssSamples;\r\n }\r\n\r\n /**\r\n * The number of samples used in the screen space shadow pass.\r\n */\r\n public set sssSamples(value: number) {\r\n this._sssSamples = value;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public get sssStride(): number {\r\n return this._sssStride;\r\n }\r\n\r\n /**\r\n * The stride used in the screen space shadow pass. This controls the distance between samples.\r\n */\r\n public set sssStride(value: number) {\r\n this._sssStride = value;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public get sssMaxDist(): number {\r\n return this._sssMaxDist;\r\n }\r\n\r\n /**\r\n * The maximum distance that the screen-space shadow will be able to occlude.\r\n */\r\n public set sssMaxDist(value: number) {\r\n this._sssMaxDist = value;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public get sssThickness(): number {\r\n return this._sssThickness;\r\n }\r\n\r\n /**\r\n * The thickness of the screen-space shadow\r\n */\r\n public set sssThickness(value: number) {\r\n this._sssThickness = value;\r\n }\r\n\r\n private _outputPP: PostProcess;\r\n private _cameraInvView: Matrix = Matrix.Identity();\r\n private _cameraInvProj: Matrix = Matrix.Identity();\r\n private _invWorldScaleMatrix: Matrix = Matrix.Identity();\r\n private _frameId: number = 0;\r\n private _sampleDirections: number = 4;\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public get sampleDirections(): number {\r\n return this._sampleDirections;\r\n }\r\n\r\n /**\r\n * The number of directions to sample for the voxel tracing.\r\n */\r\n public set sampleDirections(value: number) {\r\n this._sampleDirections = value;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public get envRotation(): number {\r\n return this._envRotation;\r\n }\r\n\r\n /**\r\n * The current rotation of the environment map, in radians.\r\n */\r\n public set envRotation(value: number) {\r\n this._envRotation = value;\r\n }\r\n\r\n /** Enable the debug view for this pass */\r\n public debugEnabled: boolean = false;\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. This will create the resources for the pass\r\n * if they don't already exist.\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\r\n private _debugPassName: string = \"Voxel Tracing Debug Pass\";\r\n\r\n /**\r\n * 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 /** The default rotation of the environment map will align the shadows with the default lighting orientation */\r\n private _envRotation: number = 0.0;\r\n private _downscale: number = 1.0;\r\n\r\n /**\r\n * Set the matrix to use for scaling the world space to voxel space\r\n * @param matrix The matrix to use for scaling the world space to voxel space\r\n */\r\n public setWorldScaleMatrix(matrix: Matrix) {\r\n this._invWorldScaleMatrix = matrix;\r\n }\r\n\r\n private _debugVoxelMarchEnabled: 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 const isWebGPU = this._engine.isWebGPU;\r\n if (!this._debugPassPP) {\r\n const debugOptions: PostProcessOptions = {\r\n width: this._engine.getRenderWidth(),\r\n height: this._engine.getRenderHeight(),\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 * Instantiates the shadow voxel-tracing pass\r\n * @param scene Scene to attach to\r\n * @param iblShadowsRenderPipeline The IBL shadows render pipeline\r\n * @returns The shadow voxel-tracing pass\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 let defines = \"\";\r\n if (this._scene.useRightHandedSystem) {\r\n defines += \"#define RIGHT_HANDED\\n\";\r\n }\r\n if (this._debugVoxelMarchEnabled) {\r\n defines += \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\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: [\"viewMtx\", \"projMtx\", \"invProjMtx\", \"invViewMtx\", \"wsNormalizationMtx\", \"shadowParameters\", \"offsetDataParameters\", \"sssParameters\", \"shadowOpacity\"],\r\n samplers: [\"voxelGridSampler\", \"icdfySampler\", \"icdfxSampler\", \"blueNoiseSampler\", \"worldNormalSampler\", \"depthSampler\", \"worldPositionSampler\"],\r\n defines: defines,\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/iblShadowVoxelTracing.fragment\"));\r\n } else {\r\n list.push(import(\"../../Shaders/iblShadowVoxelTracing.fragment\"));\r\n }\r\n },\r\n };\r\n this._outputPP = new PostProcess(\"voxelTracingPass\", \"iblShadowVoxelTracing\", ppOptions);\r\n this._outputPP.autoClear = false;\r\n this._outputPP.onApplyObservable.add((effect) => {\r\n this._updatePostProcess(effect, this._scene.activeCamera!);\r\n });\r\n }\r\n\r\n private _updatePostProcess(effect: Effect, camera: Camera) {\r\n if (this._scene.useRightHandedSystem) {\r\n effect.defines = \"#define RIGHT_HANDED\\n\";\r\n }\r\n effect.setMatrix(\"viewMtx\", camera.getViewMatrix());\r\n effect.setMatrix(\"projMtx\", camera.getProjectionMatrix());\r\n camera.getProjectionMatrix().invertToRef(this._cameraInvProj);\r\n camera.getViewMatrix().invertToRef(this._cameraInvView);\r\n effect.setMatrix(\"invProjMtx\", this._cameraInvProj);\r\n effect.setMatrix(\"invViewMtx\", this._cameraInvView);\r\n effect.setMatrix(\"wsNormalizationMtx\", this._invWorldScaleMatrix);\r\n\r\n this._frameId++;\r\n\r\n const downscaleSquared = this._downscale * this._downscale;\r\n let rotation = this._scene.useRightHandedSystem ? -(this._envRotation + 0.5 * Math.PI) : this._envRotation - 0.5 * Math.PI;\r\n rotation = rotation % (2.0 * Math.PI);\r\n effect.setVector4(\"shadowParameters\", new Vector4(this._sampleDirections, this._frameId / downscaleSquared, this._downscale, rotation));\r\n const offset = new Vector2(0.0, 0.0);\r\n const voxelGrid = this._renderPipeline!.getVoxelGridTexture();\r\n const highestMip = Math.floor(Math.log2(voxelGrid!.getSize().width));\r\n effect.setVector4(\"offsetDataParameters\", new Vector4(offset.x, offset.y, highestMip, 0.0));\r\n\r\n // SSS Options.\r\n effect.setVector4(\"sssParameters\", new Vector4(this._sssSamples, this._sssStride, this._sssMaxDist, this._sssThickness));\r\n effect.setVector4(\"shadowOpacity\", new Vector4(this._voxelShadowOpacity, this._ssShadowOpacity, 0.0, 0.0));\r\n effect.setTexture(\"voxelGridSampler\", voxelGrid);\r\n effect.setTexture(\"blueNoiseSampler\", (this._renderPipeline as any)._noiseTexture);\r\n effect.setTexture(\"icdfySampler\", this._renderPipeline!.getIcdfyTexture());\r\n effect.setTexture(\"icdfxSampler\", this._renderPipeline!.getIcdfxTexture());\r\n if (this._debugVoxelMarchEnabled) {\r\n effect.defines += \"#define VOXEL_MARCH_DIAGNOSTIC_INFO_OPTION 1u\\n\";\r\n }\r\n\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 clipDepthIndex = prePassRenderer.getIndex(Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE);\r\n const wPositionIndex = prePassRenderer.getIndex(Constants.PREPASS_POSITION_TEXTURE_TYPE);\r\n if (wnormalIndex >= 0) effect.setTexture(\"worldNormalSampler\", prePassRenderer.getRenderTarget().textures[wnormalIndex]);\r\n if (clipDepthIndex >= 0) effect.setTexture(\"depthSampler\", prePassRenderer.getRenderTarget().textures[clipDepthIndex]);\r\n if (wPositionIndex >= 0) effect.setTexture(\"worldPositionSampler\", prePassRenderer.getRenderTarget().textures[wPositionIndex]);\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 (\r\n this._outputPP.isReady() &&\r\n !(this._debugPassPP && !this._debugPassPP.isReady()) &&\r\n this._renderPipeline!.getIcdfyTexture().isReady() &&\r\n this._renderPipeline!.getIcdfxTexture().isReady() &&\r\n this._renderPipeline!.getVoxelGridTexture().isReady()\r\n );\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"]}
@@ -49,6 +49,11 @@ export declare class GeometryBufferRenderer {
49
49
  * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)
50
50
  */
51
51
  static readonly REFLECTIVITY_TEXTURE_TYPE = 4;
52
+ /**
53
+ * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array
54
+ * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)
55
+ */
56
+ static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;
52
57
  /**
53
58
  * Dictionary used to store the previous transformation matrices of each rendered mesh
54
59
  * in order to compute objects velocities when enableVelocity is set to "true"
@@ -86,9 +91,12 @@ export declare class GeometryBufferRenderer {
86
91
  private _multiRenderTarget;
87
92
  private _textureTypesAndFormats;
88
93
  private _ratioOrDimensions;
94
+ private _enableDepth;
95
+ private _enableNormal;
89
96
  private _enablePosition;
90
97
  private _enableVelocity;
91
98
  private _enableReflectivity;
99
+ private _enableScreenspaceDepth;
92
100
  private _depthFormat;
93
101
  private _clearColor;
94
102
  private _clearDepthColor;
@@ -97,6 +105,7 @@ export declare class GeometryBufferRenderer {
97
105
  private _reflectivityIndex;
98
106
  private _depthIndex;
99
107
  private _normalIndex;
108
+ private _screenspaceDepthIndex;
100
109
  private _linkedWithPrePass;
101
110
  private _prePassRenderer;
102
111
  private _attachmentsFromPrePass;
@@ -156,6 +165,22 @@ export declare class GeometryBufferRenderer {
156
165
  * @returns the index of the given texture type in the G-Buffer textures array
157
166
  */
158
167
  getTextureIndex(textureType: number): number;
168
+ /**
169
+ * @returns a boolean indicating if object's depths are enabled for the G buffer.
170
+ */
171
+ get enableDepth(): boolean;
172
+ /**
173
+ * Sets whether or not object's depths are enabled for the G buffer.
174
+ */
175
+ set enableDepth(enable: boolean);
176
+ /**
177
+ * @returns a boolean indicating if object's normals are enabled for the G buffer.
178
+ */
179
+ get enableNormal(): boolean;
180
+ /**
181
+ * Sets whether or not object's normals are enabled for the G buffer.
182
+ */
183
+ set enableNormal(enable: boolean);
159
184
  /**
160
185
  * @returns a boolean indicating if objects positions are enabled for the G buffer.
161
186
  */
@@ -184,6 +209,11 @@ export declare class GeometryBufferRenderer {
184
209
  * pbr.useMetallnessFromMetallicTextureBlue = true;
185
210
  */
186
211
  set enableReflectivity(enable: boolean);
212
+ /**
213
+ * Sets whether or not objects screenspace depth are enabled for the G buffer.
214
+ */
215
+ get enableScreenspaceDepth(): boolean;
216
+ set enableScreenspaceDepth(enable: boolean);
187
217
  /**
188
218
  * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)
189
219
  * If set to false, the depth texture is always cleared with 0.
@@ -78,9 +78,12 @@ export class GeometryBufferRenderer {
78
78
  * Resets the geometry buffer layout
79
79
  */
80
80
  _resetLayout() {
81
+ this._enableDepth = true;
82
+ this._enableNormal = true;
81
83
  this._enablePosition = false;
82
84
  this._enableReflectivity = false;
83
85
  this._enableVelocity = false;
86
+ this._enableScreenspaceDepth = false;
84
87
  this._attachmentsFromPrePass = [];
85
88
  }
86
89
  /**
@@ -103,9 +106,15 @@ export class GeometryBufferRenderer {
103
106
  }
104
107
  else if (geometryBufferType === GeometryBufferRenderer.DEPTH_TEXTURE_TYPE) {
105
108
  this._depthIndex = index;
109
+ this._enableDepth = true;
106
110
  }
107
111
  else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {
108
112
  this._normalIndex = index;
113
+ this._enableNormal = true;
114
+ }
115
+ else if (geometryBufferType === GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE) {
116
+ this._screenspaceDepthIndex = index;
117
+ this._enableScreenspaceDepth = true;
109
118
  }
110
119
  }
111
120
  /**
@@ -157,13 +166,47 @@ export class GeometryBufferRenderer {
157
166
  case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:
158
167
  return this._reflectivityIndex;
159
168
  case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:
160
- return this._linkedWithPrePass ? this._depthIndex : 0;
169
+ return this._depthIndex;
161
170
  case GeometryBufferRenderer.NORMAL_TEXTURE_TYPE:
162
- return this._linkedWithPrePass ? this._normalIndex : 1;
171
+ return this._normalIndex;
172
+ case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:
173
+ return this._screenspaceDepthIndex;
163
174
  default:
164
175
  return -1;
165
176
  }
166
177
  }
178
+ /**
179
+ * @returns a boolean indicating if object's depths are enabled for the G buffer.
180
+ */
181
+ get enableDepth() {
182
+ return this._enableDepth;
183
+ }
184
+ /**
185
+ * Sets whether or not object's depths are enabled for the G buffer.
186
+ */
187
+ set enableDepth(enable) {
188
+ this._enableDepth = enable;
189
+ if (!this._linkedWithPrePass) {
190
+ this.dispose();
191
+ this._createRenderTargets();
192
+ }
193
+ }
194
+ /**
195
+ * @returns a boolean indicating if object's normals are enabled for the G buffer.
196
+ */
197
+ get enableNormal() {
198
+ return this._enableNormal;
199
+ }
200
+ /**
201
+ * Sets whether or not object's normals are enabled for the G buffer.
202
+ */
203
+ set enableNormal(enable) {
204
+ this._enableNormal = enable;
205
+ if (!this._linkedWithPrePass) {
206
+ this.dispose();
207
+ this._createRenderTargets();
208
+ }
209
+ }
167
210
  /**
168
211
  * @returns a boolean indicating if objects positions are enabled for the G buffer.
169
212
  */
@@ -221,6 +264,19 @@ export class GeometryBufferRenderer {
221
264
  this._createRenderTargets();
222
265
  }
223
266
  }
267
+ /**
268
+ * Sets whether or not objects screenspace depth are enabled for the G buffer.
269
+ */
270
+ get enableScreenspaceDepth() {
271
+ return this._enableScreenspaceDepth;
272
+ }
273
+ set enableScreenspaceDepth(enable) {
274
+ this._enableScreenspaceDepth = enable;
275
+ if (!this._linkedWithPrePass) {
276
+ this.dispose();
277
+ this._createRenderTargets();
278
+ }
279
+ }
224
280
  /**
225
281
  * Gets the scene associated with the buffer.
226
282
  */
@@ -273,9 +329,12 @@ export class GeometryBufferRenderer {
273
329
  this.generateNormalsInWorldSpace = false;
274
330
  this._normalsAreUnsigned = false;
275
331
  this._resizeObserver = null;
332
+ this._enableDepth = true;
333
+ this._enableNormal = true;
276
334
  this._enablePosition = false;
277
335
  this._enableVelocity = false;
278
336
  this._enableReflectivity = false;
337
+ this._enableScreenspaceDepth = false;
279
338
  this._clearColor = new Color4(0, 0, 0, 0);
280
339
  this._clearDepthColor = new Color4(1e8, 0, 0, 1); // "infinity" value - depth in the depth texture is view.z, not a 0..1 value!
281
340
  this._positionIndex = -1;
@@ -283,6 +342,7 @@ export class GeometryBufferRenderer {
283
342
  this._reflectivityIndex = -1;
284
343
  this._depthIndex = -1;
285
344
  this._normalIndex = -1;
345
+ this._screenspaceDepthIndex = -1;
286
346
  this._linkedWithPrePass = false;
287
347
  /**
288
348
  * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)
@@ -482,19 +542,15 @@ export class GeometryBufferRenderer {
482
542
  }
483
543
  }
484
544
  }
485
- // PrePass
486
- if (this._linkedWithPrePass) {
487
- defines.push("#define PREPASS");
488
- if (this._depthIndex !== -1) {
489
- defines.push("#define DEPTH_INDEX " + this._depthIndex);
490
- defines.push("#define PREPASS_DEPTH");
491
- }
492
- if (this._normalIndex !== -1) {
493
- defines.push("#define NORMAL_INDEX " + this._normalIndex);
494
- defines.push("#define PREPASS_NORMAL");
495
- }
496
- }
497
545
  // Buffers
546
+ if (this._enableDepth) {
547
+ defines.push("#define DEPTH");
548
+ defines.push("#define DEPTH_INDEX " + this._depthIndex);
549
+ }
550
+ if (this._enableNormal) {
551
+ defines.push("#define NORMAL");
552
+ defines.push("#define NORMAL_INDEX " + this._normalIndex);
553
+ }
498
554
  if (this._enablePosition) {
499
555
  defines.push("#define POSITION");
500
556
  defines.push("#define POSITION_INDEX " + this._positionIndex);
@@ -510,6 +566,12 @@ export class GeometryBufferRenderer {
510
566
  defines.push("#define REFLECTIVITY");
511
567
  defines.push("#define REFLECTIVITY_INDEX " + this._reflectivityIndex);
512
568
  }
569
+ if (this._enableScreenspaceDepth) {
570
+ if (this._screenspaceDepthIndex !== -1) {
571
+ defines.push("#define SCREENSPACE_DEPTH_INDEX " + this._screenspaceDepthIndex);
572
+ defines.push("#define SCREENSPACE_DEPTH");
573
+ }
574
+ }
513
575
  if (this.generateNormalsInWorldSpace) {
514
576
  defines.push("#define NORMAL_WORLDSPACE");
515
577
  }
@@ -617,10 +679,19 @@ export class GeometryBufferRenderer {
617
679
  _assignRenderTargetIndices() {
618
680
  const textureNames = [];
619
681
  const textureTypesAndFormats = [];
620
- let count = 2;
621
- textureNames.push("gBuffer_Depth", "gBuffer_Normal");
622
- textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);
623
- textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);
682
+ let count = 0;
683
+ if (this._enableDepth) {
684
+ this._depthIndex = count;
685
+ count++;
686
+ textureNames.push("gBuffer_Depth");
687
+ textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);
688
+ }
689
+ if (this._enableNormal) {
690
+ this._normalIndex = count;
691
+ count++;
692
+ textureNames.push("gBuffer_Normal");
693
+ textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);
694
+ }
624
695
  if (this._enablePosition) {
625
696
  this._positionIndex = count;
626
697
  count++;
@@ -639,6 +710,12 @@ export class GeometryBufferRenderer {
639
710
  textureNames.push("gBuffer_Reflectivity");
640
711
  textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE]);
641
712
  }
713
+ if (this._enableScreenspaceDepth) {
714
+ this._screenspaceDepthIndex = count;
715
+ count++;
716
+ textureNames.push("gBuffer_ScreenspaceDepth");
717
+ textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);
718
+ }
642
719
  return [count, textureNames, textureTypesAndFormats];
643
720
  }
644
721
  _createRenderTargets() {
@@ -999,6 +1076,11 @@ GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE = 3;
999
1076
  * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)
1000
1077
  */
1001
1078
  GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE = 4;
1079
+ /**
1080
+ * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array
1081
+ * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)
1082
+ */
1083
+ GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;
1002
1084
  /**
1003
1085
  * @internal
1004
1086
  */