@babylonjs/core 8.6.2 → 8.7.1

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 (134) hide show
  1. package/Animations/animatable.core.js +2 -2
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/AudioV2/abstractAudio/abstractSound.d.ts +3 -35
  4. package/AudioV2/abstractAudio/abstractSound.js +2 -58
  5. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  6. package/AudioV2/abstractAudio/abstractSoundSource.d.ts +57 -0
  7. package/AudioV2/abstractAudio/abstractSoundSource.js +72 -0
  8. package/AudioV2/abstractAudio/abstractSoundSource.js.map +1 -0
  9. package/AudioV2/abstractAudio/audioEngineV2.d.ts +33 -0
  10. package/AudioV2/abstractAudio/audioEngineV2.js +23 -0
  11. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  12. package/AudioV2/webAudio/index.d.ts +1 -0
  13. package/AudioV2/webAudio/index.js +1 -0
  14. package/AudioV2/webAudio/index.js.map +1 -1
  15. package/AudioV2/webAudio/webAudioEngine.d.ts +5 -0
  16. package/AudioV2/webAudio/webAudioEngine.js +18 -0
  17. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  18. package/AudioV2/webAudio/webAudioSoundSource.d.ts +41 -0
  19. package/AudioV2/webAudio/webAudioSoundSource.js +115 -0
  20. package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -0
  21. package/AudioV2/webAudio/webAudioStaticSound.js +1 -1
  22. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  23. package/Collisions/collider.d.ts +1 -1
  24. package/Collisions/collider.js +14 -3
  25. package/Collisions/collider.js.map +1 -1
  26. package/Collisions/collisionCoordinator.d.ts +2 -2
  27. package/Collisions/collisionCoordinator.js +9 -5
  28. package/Collisions/collisionCoordinator.js.map +1 -1
  29. package/Culling/ray.core.d.ts +1 -1
  30. package/Culling/ray.core.js +1 -1
  31. package/Culling/ray.core.js.map +1 -1
  32. package/Engines/abstractEngine.d.ts +2 -2
  33. package/Engines/abstractEngine.js +3 -3
  34. package/Engines/abstractEngine.js.map +1 -1
  35. package/Engines/constants.d.ts +1 -1
  36. package/Engines/constants.js +1 -1
  37. package/Engines/constants.js.map +1 -1
  38. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.d.ts +2 -1
  39. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js +4 -3
  40. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js.map +1 -1
  41. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.d.ts +46 -0
  42. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js +107 -0
  43. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.js.map +1 -0
  44. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  45. package/FrameGraph/Node/Blocks/index.js +1 -0
  46. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  47. package/FrameGraph/Passes/renderPass.d.ts +1 -1
  48. package/FrameGraph/Passes/renderPass.js +3 -0
  49. package/FrameGraph/Passes/renderPass.js.map +1 -1
  50. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.d.ts +27 -0
  51. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js +41 -0
  52. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js.map +1 -0
  53. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +12 -0
  54. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +30 -1
  55. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  56. package/FrameGraph/index.d.ts +2 -1
  57. package/FrameGraph/index.js +2 -1
  58. package/FrameGraph/index.js.map +1 -1
  59. package/Gizmos/cameraGizmo.js +2 -2
  60. package/Gizmos/cameraGizmo.js.map +1 -1
  61. package/Maths/ThinMaths/index.d.ts +2 -0
  62. package/Maths/ThinMaths/index.js +3 -0
  63. package/Maths/ThinMaths/index.js.map +1 -0
  64. package/Maths/ThinMaths/thinMath.matrix.d.ts +20 -0
  65. package/Maths/ThinMaths/thinMath.matrix.functions.d.ts +53 -0
  66. package/Maths/ThinMaths/thinMath.matrix.functions.js +190 -0
  67. package/Maths/ThinMaths/thinMath.matrix.functions.js.map +1 -0
  68. package/Maths/ThinMaths/thinMath.matrix.js +23 -0
  69. package/Maths/ThinMaths/thinMath.matrix.js.map +1 -0
  70. package/Maths/index.d.ts +1 -0
  71. package/Maths/index.js +2 -0
  72. package/Maths/index.js.map +1 -1
  73. package/Maths/math.vector.js +7 -89
  74. package/Maths/math.vector.js.map +1 -1
  75. package/Meshes/abstractMesh.d.ts +2 -1
  76. package/Meshes/abstractMesh.js +3 -2
  77. package/Meshes/abstractMesh.js.map +1 -1
  78. package/Misc/screenshotTools.js +2 -0
  79. package/Misc/screenshotTools.js.map +1 -1
  80. package/Particles/flowMap.d.ts +18 -3
  81. package/Particles/flowMap.js +19 -7
  82. package/Particles/flowMap.js.map +1 -1
  83. package/Particles/particleSystem.js +2 -1
  84. package/Particles/particleSystem.js.map +1 -1
  85. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +0 -3
  86. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  87. package/PostProcesses/index.d.ts +1 -0
  88. package/PostProcesses/index.js +1 -0
  89. package/PostProcesses/index.js.map +1 -1
  90. package/PostProcesses/motionBlurPostProcess.d.ts +4 -11
  91. package/PostProcesses/motionBlurPostProcess.js +40 -62
  92. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  93. package/PostProcesses/thinMotionBlurPostProcess.d.ts +67 -0
  94. package/PostProcesses/thinMotionBlurPostProcess.js +127 -0
  95. package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -0
  96. package/PostProcesses/thinSSRPostProcess.js +1 -2
  97. package/PostProcesses/thinSSRPostProcess.js.map +1 -1
  98. package/Rendering/depthRenderer.js +1 -1
  99. package/Rendering/depthRenderer.js.map +1 -1
  100. package/Rendering/geometryBufferRenderer.js +1 -1
  101. package/Rendering/geometryBufferRenderer.js.map +1 -1
  102. package/Rendering/prePassRenderer.js +1 -1
  103. package/Rendering/prePassRenderer.js.map +1 -1
  104. package/Shaders/ShadersInclude/pbrBlockReflection.js +1 -1
  105. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  106. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +5 -5
  107. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  108. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +0 -3
  109. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  110. package/Shaders/ShadersInclude/screenSpaceRayTrace.js +3 -2
  111. package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  112. package/Shaders/motionBlur.fragment.js +6 -17
  113. package/Shaders/motionBlur.fragment.js.map +1 -1
  114. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +4 -4
  115. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  116. package/ShadersWGSL/ShadersInclude/bonesVertex.js +8 -8
  117. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  118. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +1 -1
  119. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  120. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  121. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  122. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +0 -3
  123. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  124. package/ShadersWGSL/ShadersInclude/prePassVertex.js +8 -8
  125. package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -1
  126. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +3 -0
  127. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  128. package/ShadersWGSL/geometry.vertex.js +8 -8
  129. package/ShadersWGSL/geometry.vertex.js.map +1 -1
  130. package/ShadersWGSL/motionBlur.fragment.js +6 -17
  131. package/ShadersWGSL/motionBlur.fragment.js.map +1 -1
  132. package/assetContainer.js +3 -0
  133. package/assetContainer.js.map +1 -1
  134. package/package.json +5 -2
@@ -1 +1 @@
1
- {"version":3,"file":"thinSSRPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinSSRPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { Nullable, Scene, CubeTexture, Camera, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Engine } from \"core/Engines/engine\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Vector3, Matrix, Quaternion, TmpVectors } from \"core/Maths/math.vector\";\r\n\r\nconst Trs = Matrix.Compose(new Vector3(0.5, 0.5, 0.5), Quaternion.Identity(), new Vector3(0.5, 0.5, 0.5));\r\nconst TrsWebGPU = Matrix.Compose(new Vector3(0.5, 0.5, 1), Quaternion.Identity(), new Vector3(0.5, 0.5, 0));\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinSSRPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"screenSpaceReflection2\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\r\n \"projection\",\r\n \"invProjectionMatrix\",\r\n \"view\",\r\n \"invView\",\r\n \"thickness\",\r\n \"reflectionSpecularFalloffExponent\",\r\n \"strength\",\r\n \"stepSize\",\r\n \"maxSteps\",\r\n \"roughnessFactor\",\r\n \"projectionPixel\",\r\n \"nearPlaneZ\",\r\n \"farPlaneZ\",\r\n \"maxDistance\",\r\n \"selfCollisionNumSkip\",\r\n \"vReflectionPosition\",\r\n \"vReflectionSize\",\r\n \"backSizeFactor\",\r\n \"reflectivityThreshold\",\r\n ];\r\n\r\n public static readonly Samplers = [\"textureSampler\", \"normalSampler\", \"reflectivitySampler\", \"depthSampler\", \"envCubeSampler\", \"backDepthSampler\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/screenSpaceReflection2.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/screenSpaceReflection2.fragment\"));\r\n }\r\n }\r\n\r\n public isSSRSupported = true;\r\n\r\n public maxDistance = 1000.0;\r\n\r\n public step = 1.0;\r\n\r\n public thickness = 0.5;\r\n\r\n public strength = 1;\r\n\r\n public reflectionSpecularFalloffExponent = 1;\r\n\r\n public maxSteps = 1000.0;\r\n\r\n public roughnessFactor = 0.2;\r\n\r\n public selfCollisionNumSkip = 1;\r\n\r\n private _reflectivityThreshold = 0.04;\r\n\r\n public get reflectivityThreshold() {\r\n return this._reflectivityThreshold;\r\n }\r\n\r\n public set reflectivityThreshold(threshold: number) {\r\n if (threshold === this._reflectivityThreshold) {\r\n return;\r\n }\r\n\r\n if ((threshold === 0 && this._reflectivityThreshold !== 0) || (threshold !== 0 && this._reflectivityThreshold === 0)) {\r\n this._reflectivityThreshold = threshold;\r\n this._updateEffectDefines();\r\n } else {\r\n this._reflectivityThreshold = threshold;\r\n }\r\n }\r\n\r\n private _useBlur = false;\r\n\r\n public get useBlur() {\r\n return this._useBlur;\r\n }\r\n\r\n public set useBlur(blur: boolean) {\r\n if (this._useBlur === blur) {\r\n return;\r\n }\r\n\r\n this._useBlur = blur;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _enableSmoothReflections = false;\r\n\r\n public get enableSmoothReflections(): boolean {\r\n return this._enableSmoothReflections;\r\n }\r\n\r\n public set enableSmoothReflections(enabled: boolean) {\r\n if (enabled === this._enableSmoothReflections) {\r\n return;\r\n }\r\n\r\n this._enableSmoothReflections = enabled;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _environmentTexture: Nullable<CubeTexture>;\r\n\r\n public get environmentTexture() {\r\n return this._environmentTexture;\r\n }\r\n\r\n public set environmentTexture(texture: Nullable<CubeTexture>) {\r\n this._environmentTexture = texture;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _environmentTextureIsProbe = false;\r\n\r\n public get environmentTextureIsProbe(): boolean {\r\n return this._environmentTextureIsProbe;\r\n }\r\n\r\n public set environmentTextureIsProbe(isProbe: boolean) {\r\n this._environmentTextureIsProbe = isProbe;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateScreenBorders = true;\r\n\r\n public get attenuateScreenBorders() {\r\n return this._attenuateScreenBorders;\r\n }\r\n\r\n public set attenuateScreenBorders(attenuate: boolean) {\r\n if (this._attenuateScreenBorders === attenuate) {\r\n return;\r\n }\r\n this._attenuateScreenBorders = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateIntersectionDistance = true;\r\n\r\n public get attenuateIntersectionDistance() {\r\n return this._attenuateIntersectionDistance;\r\n }\r\n\r\n public set attenuateIntersectionDistance(attenuate: boolean) {\r\n if (this._attenuateIntersectionDistance === attenuate) {\r\n return;\r\n }\r\n this._attenuateIntersectionDistance = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateIntersectionIterations = true;\r\n\r\n public get attenuateIntersectionIterations() {\r\n return this._attenuateIntersectionIterations;\r\n }\r\n\r\n public set attenuateIntersectionIterations(attenuate: boolean) {\r\n if (this._attenuateIntersectionIterations === attenuate) {\r\n return;\r\n }\r\n this._attenuateIntersectionIterations = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateFacingCamera = false;\r\n\r\n public get attenuateFacingCamera() {\r\n return this._attenuateFacingCamera;\r\n }\r\n\r\n public set attenuateFacingCamera(attenuate: boolean) {\r\n if (this._attenuateFacingCamera === attenuate) {\r\n return;\r\n }\r\n this._attenuateFacingCamera = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateBackfaceReflection = false;\r\n\r\n public get attenuateBackfaceReflection() {\r\n return this._attenuateBackfaceReflection;\r\n }\r\n\r\n public set attenuateBackfaceReflection(attenuate: boolean) {\r\n if (this._attenuateBackfaceReflection === attenuate) {\r\n return;\r\n }\r\n this._attenuateBackfaceReflection = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _clipToFrustum = true;\r\n\r\n public get clipToFrustum() {\r\n return this._clipToFrustum;\r\n }\r\n\r\n public set clipToFrustum(clip: boolean) {\r\n if (this._clipToFrustum === clip) {\r\n return;\r\n }\r\n this._clipToFrustum = clip;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _useFresnel = false;\r\n\r\n public get useFresnel() {\r\n return this._useFresnel;\r\n }\r\n\r\n public set useFresnel(fresnel: boolean) {\r\n if (this._useFresnel === fresnel) {\r\n return;\r\n }\r\n this._useFresnel = fresnel;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _enableAutomaticThicknessComputation = false;\r\n\r\n public get enableAutomaticThicknessComputation(): boolean {\r\n return this._enableAutomaticThicknessComputation;\r\n }\r\n\r\n public set enableAutomaticThicknessComputation(automatic: boolean) {\r\n if (this._enableAutomaticThicknessComputation === automatic) {\r\n return;\r\n }\r\n\r\n this._enableAutomaticThicknessComputation = automatic;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _inputTextureColorIsInGammaSpace = true;\r\n\r\n public get inputTextureColorIsInGammaSpace(): boolean {\r\n return this._inputTextureColorIsInGammaSpace;\r\n }\r\n\r\n public set inputTextureColorIsInGammaSpace(gammaSpace: boolean) {\r\n if (this._inputTextureColorIsInGammaSpace === gammaSpace) {\r\n return;\r\n }\r\n\r\n this._inputTextureColorIsInGammaSpace = gammaSpace;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _generateOutputInGammaSpace = true;\r\n\r\n public get generateOutputInGammaSpace(): boolean {\r\n return this._generateOutputInGammaSpace;\r\n }\r\n\r\n public set generateOutputInGammaSpace(gammaSpace: boolean) {\r\n if (this._generateOutputInGammaSpace === gammaSpace) {\r\n return;\r\n }\r\n\r\n this._generateOutputInGammaSpace = gammaSpace;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _debug = false;\r\n\r\n public get debug(): boolean {\r\n return this._debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n if (this._debug === value) {\r\n return;\r\n }\r\n\r\n this._debug = value;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _textureWidth = 0;\r\n\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public set textureWidth(width: number) {\r\n if (this._textureWidth === width) {\r\n return;\r\n }\r\n this._textureWidth = width;\r\n }\r\n\r\n private _textureHeight = 0;\r\n\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n public set textureHeight(height: number) {\r\n if (this._textureHeight === height) {\r\n return;\r\n }\r\n this._textureHeight = height;\r\n }\r\n\r\n public camera: Nullable<Camera> = null;\r\n\r\n private _useScreenspaceDepth = false;\r\n\r\n public get useScreenspaceDepth() {\r\n return this._useScreenspaceDepth;\r\n }\r\n\r\n public set useScreenspaceDepth(value: boolean) {\r\n if (this._useScreenspaceDepth === value) {\r\n return;\r\n }\r\n\r\n this._useScreenspaceDepth = value;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _normalsAreInWorldSpace = false;\r\n\r\n public get normalsAreInWorldSpace() {\r\n return this._normalsAreInWorldSpace;\r\n }\r\n\r\n public set normalsAreInWorldSpace(value: boolean) {\r\n if (this._normalsAreInWorldSpace === value) {\r\n return;\r\n }\r\n\r\n this._normalsAreInWorldSpace = value;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n public set normalsAreUnsigned(value: boolean) {\r\n if (this._normalsAreUnsigned === value) {\r\n return;\r\n }\r\n\r\n this._normalsAreUnsigned = value;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _scene: Scene;\r\n\r\n constructor(name: string, scene: Scene, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: scene.getEngine() || Engine.LastCreatedEngine!,\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinSSRPostProcess.FragmentUrl,\r\n uniforms: ThinSSRPostProcess.Uniforms,\r\n samplers: ThinSSRPostProcess.Samplers,\r\n shaderLanguage: scene.getEngine().isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n\r\n this._scene = scene;\r\n this._updateEffectDefines();\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this._drawWrapper.effect!;\r\n\r\n const camera = this.camera;\r\n if (!camera) {\r\n return;\r\n }\r\n\r\n const viewMatrix = camera.getViewMatrix();\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n\r\n projectionMatrix.invertToRef(TmpVectors.Matrix[0]);\r\n viewMatrix.invertToRef(TmpVectors.Matrix[1]);\r\n\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"invView\", TmpVectors.Matrix[1]);\r\n effect.setMatrix(\"invProjectionMatrix\", TmpVectors.Matrix[0]);\r\n effect.setFloat(\"thickness\", this.thickness);\r\n effect.setFloat(\"reflectionSpecularFalloffExponent\", this.reflectionSpecularFalloffExponent);\r\n effect.setFloat(\"strength\", this.strength);\r\n effect.setFloat(\"stepSize\", this.step);\r\n effect.setFloat(\"maxSteps\", this.maxSteps);\r\n effect.setFloat(\"roughnessFactor\", this.roughnessFactor);\r\n effect.setFloat(\"nearPlaneZ\", camera.minZ);\r\n effect.setFloat(\"farPlaneZ\", camera.maxZ);\r\n effect.setFloat(\"maxDistance\", this.maxDistance);\r\n effect.setFloat(\"selfCollisionNumSkip\", this.selfCollisionNumSkip);\r\n effect.setFloat(\"reflectivityThreshold\", this._reflectivityThreshold);\r\n\r\n Matrix.ScalingToRef(this.textureWidth, this.textureHeight, 1, TmpVectors.Matrix[2]);\r\n\r\n projectionMatrix.multiplyToRef(this._scene.getEngine().isWebGPU ? TrsWebGPU : Trs, TmpVectors.Matrix[3]);\r\n\r\n TmpVectors.Matrix[3].multiplyToRef(TmpVectors.Matrix[2], TmpVectors.Matrix[4]);\r\n\r\n effect.setMatrix(\"projectionPixel\", TmpVectors.Matrix[4]);\r\n\r\n if (this._environmentTexture) {\r\n effect.setTexture(\"envCubeSampler\", this._environmentTexture);\r\n\r\n if (this._environmentTexture.boundingBoxSize) {\r\n effect.setVector3(\"vReflectionPosition\", this._environmentTexture.boundingBoxPosition);\r\n effect.setVector3(\"vReflectionSize\", this._environmentTexture.boundingBoxSize);\r\n }\r\n }\r\n }\r\n\r\n private _updateEffectDefines() {\r\n const defines: string[] = [];\r\n\r\n if (this.isSSRSupported) {\r\n defines.push(\"#define SSR_SUPPORTED\");\r\n }\r\n if (this._enableSmoothReflections) {\r\n defines.push(\"#define SSRAYTRACE_ENABLE_REFINEMENT\");\r\n }\r\n if (this._scene.useRightHandedSystem) {\r\n defines.push(\"#define SSRAYTRACE_RIGHT_HANDED_SCENE\");\r\n }\r\n if (this._useScreenspaceDepth) {\r\n defines.push(\"#define SSRAYTRACE_SCREENSPACE_DEPTH\");\r\n }\r\n if (this._environmentTexture) {\r\n defines.push(\"#define SSR_USE_ENVIRONMENT_CUBE\");\r\n if (this._environmentTexture.boundingBoxSize) {\r\n defines.push(\"#define SSR_USE_LOCAL_REFLECTIONMAP_CUBIC\");\r\n }\r\n if (this._environmentTexture.gammaSpace) {\r\n defines.push(\"#define SSR_ENVIRONMENT_CUBE_IS_GAMMASPACE\");\r\n }\r\n }\r\n if (this._environmentTextureIsProbe) {\r\n defines.push(\"#define SSR_INVERTCUBICMAP\");\r\n }\r\n if (this._enableAutomaticThicknessComputation) {\r\n defines.push(\"#define SSRAYTRACE_USE_BACK_DEPTHBUFFER\");\r\n }\r\n if (this._attenuateScreenBorders) {\r\n defines.push(\"#define SSR_ATTENUATE_SCREEN_BORDERS\");\r\n }\r\n if (this._attenuateIntersectionDistance) {\r\n defines.push(\"#define SSR_ATTENUATE_INTERSECTION_DISTANCE\");\r\n }\r\n if (this._attenuateIntersectionIterations) {\r\n defines.push(\"#define SSR_ATTENUATE_INTERSECTION_NUMITERATIONS\");\r\n }\r\n if (this._attenuateFacingCamera) {\r\n defines.push(\"#define SSR_ATTENUATE_FACING_CAMERA\");\r\n }\r\n if (this._attenuateBackfaceReflection) {\r\n defines.push(\"#define SSR_ATTENUATE_BACKFACE_REFLECTION\");\r\n }\r\n if (this._clipToFrustum) {\r\n defines.push(\"#define SSRAYTRACE_CLIP_TO_FRUSTUM\");\r\n }\r\n if (this.useBlur) {\r\n defines.push(\"#define SSR_USE_BLUR\");\r\n }\r\n if (this._debug) {\r\n defines.push(\"#define SSRAYTRACE_DEBUG\");\r\n }\r\n if (this._inputTextureColorIsInGammaSpace) {\r\n defines.push(\"#define SSR_INPUT_IS_GAMMA_SPACE\");\r\n }\r\n if (this._generateOutputInGammaSpace) {\r\n defines.push(\"#define SSR_OUTPUT_IS_GAMMA_SPACE\");\r\n }\r\n if (this._useFresnel) {\r\n defines.push(\"#define SSR_BLEND_WITH_FRESNEL\");\r\n }\r\n if (this._reflectivityThreshold === 0) {\r\n defines.push(\"#define SSR_DISABLE_REFLECTIVITY_TEST\");\r\n }\r\n\r\n if (this._normalsAreInWorldSpace) {\r\n defines.push(\"#define SSR_NORMAL_IS_IN_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define SSR_DECODE_NORMAL\");\r\n }\r\n\r\n if (this.camera && this.camera.mode === Constants.ORTHOGRAPHIC_CAMERA) {\r\n defines.push(\"#define ORTHOGRAPHIC_CAMERA\");\r\n }\r\n\r\n this.updateEffect(defines.join(\"\\n\"));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"thinSSRPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinSSRPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { Nullable, Scene, CubeTexture, Camera, EffectWrapperCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { Vector3, Matrix, Quaternion, TmpVectors } from \"core/Maths/math.vector\";\r\n\r\nconst Trs = Matrix.Compose(new Vector3(0.5, 0.5, 0.5), Quaternion.Identity(), new Vector3(0.5, 0.5, 0.5));\r\nconst TrsWebGPU = Matrix.Compose(new Vector3(0.5, 0.5, 1), Quaternion.Identity(), new Vector3(0.5, 0.5, 0));\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ThinSSRPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"screenSpaceReflection2\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\r\n \"projection\",\r\n \"invProjectionMatrix\",\r\n \"view\",\r\n \"invView\",\r\n \"thickness\",\r\n \"reflectionSpecularFalloffExponent\",\r\n \"strength\",\r\n \"stepSize\",\r\n \"maxSteps\",\r\n \"roughnessFactor\",\r\n \"projectionPixel\",\r\n \"nearPlaneZ\",\r\n \"farPlaneZ\",\r\n \"maxDistance\",\r\n \"selfCollisionNumSkip\",\r\n \"vReflectionPosition\",\r\n \"vReflectionSize\",\r\n \"backSizeFactor\",\r\n \"reflectivityThreshold\",\r\n ];\r\n\r\n public static readonly Samplers = [\"textureSampler\", \"normalSampler\", \"reflectivitySampler\", \"depthSampler\", \"envCubeSampler\", \"backDepthSampler\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/screenSpaceReflection2.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/screenSpaceReflection2.fragment\"));\r\n }\r\n }\r\n\r\n public isSSRSupported = true;\r\n\r\n public maxDistance = 1000.0;\r\n\r\n public step = 1.0;\r\n\r\n public thickness = 0.5;\r\n\r\n public strength = 1;\r\n\r\n public reflectionSpecularFalloffExponent = 1;\r\n\r\n public maxSteps = 1000.0;\r\n\r\n public roughnessFactor = 0.2;\r\n\r\n public selfCollisionNumSkip = 1;\r\n\r\n private _reflectivityThreshold = 0.04;\r\n\r\n public get reflectivityThreshold() {\r\n return this._reflectivityThreshold;\r\n }\r\n\r\n public set reflectivityThreshold(threshold: number) {\r\n if (threshold === this._reflectivityThreshold) {\r\n return;\r\n }\r\n\r\n if ((threshold === 0 && this._reflectivityThreshold !== 0) || (threshold !== 0 && this._reflectivityThreshold === 0)) {\r\n this._reflectivityThreshold = threshold;\r\n this._updateEffectDefines();\r\n } else {\r\n this._reflectivityThreshold = threshold;\r\n }\r\n }\r\n\r\n private _useBlur = false;\r\n\r\n public get useBlur() {\r\n return this._useBlur;\r\n }\r\n\r\n public set useBlur(blur: boolean) {\r\n if (this._useBlur === blur) {\r\n return;\r\n }\r\n\r\n this._useBlur = blur;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _enableSmoothReflections = false;\r\n\r\n public get enableSmoothReflections(): boolean {\r\n return this._enableSmoothReflections;\r\n }\r\n\r\n public set enableSmoothReflections(enabled: boolean) {\r\n if (enabled === this._enableSmoothReflections) {\r\n return;\r\n }\r\n\r\n this._enableSmoothReflections = enabled;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _environmentTexture: Nullable<CubeTexture>;\r\n\r\n public get environmentTexture() {\r\n return this._environmentTexture;\r\n }\r\n\r\n public set environmentTexture(texture: Nullable<CubeTexture>) {\r\n this._environmentTexture = texture;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _environmentTextureIsProbe = false;\r\n\r\n public get environmentTextureIsProbe(): boolean {\r\n return this._environmentTextureIsProbe;\r\n }\r\n\r\n public set environmentTextureIsProbe(isProbe: boolean) {\r\n this._environmentTextureIsProbe = isProbe;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateScreenBorders = true;\r\n\r\n public get attenuateScreenBorders() {\r\n return this._attenuateScreenBorders;\r\n }\r\n\r\n public set attenuateScreenBorders(attenuate: boolean) {\r\n if (this._attenuateScreenBorders === attenuate) {\r\n return;\r\n }\r\n this._attenuateScreenBorders = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateIntersectionDistance = true;\r\n\r\n public get attenuateIntersectionDistance() {\r\n return this._attenuateIntersectionDistance;\r\n }\r\n\r\n public set attenuateIntersectionDistance(attenuate: boolean) {\r\n if (this._attenuateIntersectionDistance === attenuate) {\r\n return;\r\n }\r\n this._attenuateIntersectionDistance = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateIntersectionIterations = true;\r\n\r\n public get attenuateIntersectionIterations() {\r\n return this._attenuateIntersectionIterations;\r\n }\r\n\r\n public set attenuateIntersectionIterations(attenuate: boolean) {\r\n if (this._attenuateIntersectionIterations === attenuate) {\r\n return;\r\n }\r\n this._attenuateIntersectionIterations = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateFacingCamera = false;\r\n\r\n public get attenuateFacingCamera() {\r\n return this._attenuateFacingCamera;\r\n }\r\n\r\n public set attenuateFacingCamera(attenuate: boolean) {\r\n if (this._attenuateFacingCamera === attenuate) {\r\n return;\r\n }\r\n this._attenuateFacingCamera = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _attenuateBackfaceReflection = false;\r\n\r\n public get attenuateBackfaceReflection() {\r\n return this._attenuateBackfaceReflection;\r\n }\r\n\r\n public set attenuateBackfaceReflection(attenuate: boolean) {\r\n if (this._attenuateBackfaceReflection === attenuate) {\r\n return;\r\n }\r\n this._attenuateBackfaceReflection = attenuate;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _clipToFrustum = true;\r\n\r\n public get clipToFrustum() {\r\n return this._clipToFrustum;\r\n }\r\n\r\n public set clipToFrustum(clip: boolean) {\r\n if (this._clipToFrustum === clip) {\r\n return;\r\n }\r\n this._clipToFrustum = clip;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _useFresnel = false;\r\n\r\n public get useFresnel() {\r\n return this._useFresnel;\r\n }\r\n\r\n public set useFresnel(fresnel: boolean) {\r\n if (this._useFresnel === fresnel) {\r\n return;\r\n }\r\n this._useFresnel = fresnel;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _enableAutomaticThicknessComputation = false;\r\n\r\n public get enableAutomaticThicknessComputation(): boolean {\r\n return this._enableAutomaticThicknessComputation;\r\n }\r\n\r\n public set enableAutomaticThicknessComputation(automatic: boolean) {\r\n if (this._enableAutomaticThicknessComputation === automatic) {\r\n return;\r\n }\r\n\r\n this._enableAutomaticThicknessComputation = automatic;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _inputTextureColorIsInGammaSpace = true;\r\n\r\n public get inputTextureColorIsInGammaSpace(): boolean {\r\n return this._inputTextureColorIsInGammaSpace;\r\n }\r\n\r\n public set inputTextureColorIsInGammaSpace(gammaSpace: boolean) {\r\n if (this._inputTextureColorIsInGammaSpace === gammaSpace) {\r\n return;\r\n }\r\n\r\n this._inputTextureColorIsInGammaSpace = gammaSpace;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _generateOutputInGammaSpace = true;\r\n\r\n public get generateOutputInGammaSpace(): boolean {\r\n return this._generateOutputInGammaSpace;\r\n }\r\n\r\n public set generateOutputInGammaSpace(gammaSpace: boolean) {\r\n if (this._generateOutputInGammaSpace === gammaSpace) {\r\n return;\r\n }\r\n\r\n this._generateOutputInGammaSpace = gammaSpace;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _debug = false;\r\n\r\n public get debug(): boolean {\r\n return this._debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n if (this._debug === value) {\r\n return;\r\n }\r\n\r\n this._debug = value;\r\n\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _textureWidth = 0;\r\n\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public set textureWidth(width: number) {\r\n if (this._textureWidth === width) {\r\n return;\r\n }\r\n this._textureWidth = width;\r\n }\r\n\r\n private _textureHeight = 0;\r\n\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n public set textureHeight(height: number) {\r\n if (this._textureHeight === height) {\r\n return;\r\n }\r\n this._textureHeight = height;\r\n }\r\n\r\n public camera: Nullable<Camera> = null;\r\n\r\n private _useScreenspaceDepth = false;\r\n\r\n public get useScreenspaceDepth() {\r\n return this._useScreenspaceDepth;\r\n }\r\n\r\n public set useScreenspaceDepth(value: boolean) {\r\n if (this._useScreenspaceDepth === value) {\r\n return;\r\n }\r\n\r\n this._useScreenspaceDepth = value;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _normalsAreInWorldSpace = false;\r\n\r\n public get normalsAreInWorldSpace() {\r\n return this._normalsAreInWorldSpace;\r\n }\r\n\r\n public set normalsAreInWorldSpace(value: boolean) {\r\n if (this._normalsAreInWorldSpace === value) {\r\n return;\r\n }\r\n\r\n this._normalsAreInWorldSpace = value;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n public set normalsAreUnsigned(value: boolean) {\r\n if (this._normalsAreUnsigned === value) {\r\n return;\r\n }\r\n\r\n this._normalsAreUnsigned = value;\r\n this._updateEffectDefines();\r\n }\r\n\r\n private _scene: Scene;\r\n\r\n constructor(name: string, scene: Scene, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: scene.getEngine(),\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinSSRPostProcess.FragmentUrl,\r\n uniforms: ThinSSRPostProcess.Uniforms,\r\n samplers: ThinSSRPostProcess.Samplers,\r\n shaderLanguage: scene.getEngine().isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n });\r\n\r\n this._scene = scene;\r\n this._updateEffectDefines();\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this._drawWrapper.effect!;\r\n\r\n const camera = this.camera;\r\n if (!camera) {\r\n return;\r\n }\r\n\r\n const viewMatrix = camera.getViewMatrix();\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n\r\n projectionMatrix.invertToRef(TmpVectors.Matrix[0]);\r\n viewMatrix.invertToRef(TmpVectors.Matrix[1]);\r\n\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"invView\", TmpVectors.Matrix[1]);\r\n effect.setMatrix(\"invProjectionMatrix\", TmpVectors.Matrix[0]);\r\n effect.setFloat(\"thickness\", this.thickness);\r\n effect.setFloat(\"reflectionSpecularFalloffExponent\", this.reflectionSpecularFalloffExponent);\r\n effect.setFloat(\"strength\", this.strength);\r\n effect.setFloat(\"stepSize\", this.step);\r\n effect.setFloat(\"maxSteps\", this.maxSteps);\r\n effect.setFloat(\"roughnessFactor\", this.roughnessFactor);\r\n effect.setFloat(\"nearPlaneZ\", camera.minZ);\r\n effect.setFloat(\"farPlaneZ\", camera.maxZ);\r\n effect.setFloat(\"maxDistance\", this.maxDistance);\r\n effect.setFloat(\"selfCollisionNumSkip\", this.selfCollisionNumSkip);\r\n effect.setFloat(\"reflectivityThreshold\", this._reflectivityThreshold);\r\n\r\n Matrix.ScalingToRef(this.textureWidth, this.textureHeight, 1, TmpVectors.Matrix[2]);\r\n\r\n projectionMatrix.multiplyToRef(this._scene.getEngine().isWebGPU ? TrsWebGPU : Trs, TmpVectors.Matrix[3]);\r\n\r\n TmpVectors.Matrix[3].multiplyToRef(TmpVectors.Matrix[2], TmpVectors.Matrix[4]);\r\n\r\n effect.setMatrix(\"projectionPixel\", TmpVectors.Matrix[4]);\r\n\r\n if (this._environmentTexture) {\r\n effect.setTexture(\"envCubeSampler\", this._environmentTexture);\r\n\r\n if (this._environmentTexture.boundingBoxSize) {\r\n effect.setVector3(\"vReflectionPosition\", this._environmentTexture.boundingBoxPosition);\r\n effect.setVector3(\"vReflectionSize\", this._environmentTexture.boundingBoxSize);\r\n }\r\n }\r\n }\r\n\r\n private _updateEffectDefines() {\r\n const defines: string[] = [];\r\n\r\n if (this.isSSRSupported) {\r\n defines.push(\"#define SSR_SUPPORTED\");\r\n }\r\n if (this._enableSmoothReflections) {\r\n defines.push(\"#define SSRAYTRACE_ENABLE_REFINEMENT\");\r\n }\r\n if (this._scene.useRightHandedSystem) {\r\n defines.push(\"#define SSRAYTRACE_RIGHT_HANDED_SCENE\");\r\n }\r\n if (this._useScreenspaceDepth) {\r\n defines.push(\"#define SSRAYTRACE_SCREENSPACE_DEPTH\");\r\n }\r\n if (this._environmentTexture) {\r\n defines.push(\"#define SSR_USE_ENVIRONMENT_CUBE\");\r\n if (this._environmentTexture.boundingBoxSize) {\r\n defines.push(\"#define SSR_USE_LOCAL_REFLECTIONMAP_CUBIC\");\r\n }\r\n if (this._environmentTexture.gammaSpace) {\r\n defines.push(\"#define SSR_ENVIRONMENT_CUBE_IS_GAMMASPACE\");\r\n }\r\n }\r\n if (this._environmentTextureIsProbe) {\r\n defines.push(\"#define SSR_INVERTCUBICMAP\");\r\n }\r\n if (this._enableAutomaticThicknessComputation) {\r\n defines.push(\"#define SSRAYTRACE_USE_BACK_DEPTHBUFFER\");\r\n }\r\n if (this._attenuateScreenBorders) {\r\n defines.push(\"#define SSR_ATTENUATE_SCREEN_BORDERS\");\r\n }\r\n if (this._attenuateIntersectionDistance) {\r\n defines.push(\"#define SSR_ATTENUATE_INTERSECTION_DISTANCE\");\r\n }\r\n if (this._attenuateIntersectionIterations) {\r\n defines.push(\"#define SSR_ATTENUATE_INTERSECTION_NUMITERATIONS\");\r\n }\r\n if (this._attenuateFacingCamera) {\r\n defines.push(\"#define SSR_ATTENUATE_FACING_CAMERA\");\r\n }\r\n if (this._attenuateBackfaceReflection) {\r\n defines.push(\"#define SSR_ATTENUATE_BACKFACE_REFLECTION\");\r\n }\r\n if (this._clipToFrustum) {\r\n defines.push(\"#define SSRAYTRACE_CLIP_TO_FRUSTUM\");\r\n }\r\n if (this.useBlur) {\r\n defines.push(\"#define SSR_USE_BLUR\");\r\n }\r\n if (this._debug) {\r\n defines.push(\"#define SSRAYTRACE_DEBUG\");\r\n }\r\n if (this._inputTextureColorIsInGammaSpace) {\r\n defines.push(\"#define SSR_INPUT_IS_GAMMA_SPACE\");\r\n }\r\n if (this._generateOutputInGammaSpace) {\r\n defines.push(\"#define SSR_OUTPUT_IS_GAMMA_SPACE\");\r\n }\r\n if (this._useFresnel) {\r\n defines.push(\"#define SSR_BLEND_WITH_FRESNEL\");\r\n }\r\n if (this._reflectivityThreshold === 0) {\r\n defines.push(\"#define SSR_DISABLE_REFLECTIVITY_TEST\");\r\n }\r\n\r\n if (this._normalsAreInWorldSpace) {\r\n defines.push(\"#define SSR_NORMAL_IS_IN_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define SSR_DECODE_NORMAL\");\r\n }\r\n\r\n if (this.camera && this.camera.mode === Constants.ORTHOGRAPHIC_CAMERA) {\r\n defines.push(\"#define ORTHOGRAPHIC_CAMERA\");\r\n }\r\n\r\n this.updateEffect(defines.join(\"\\n\"));\r\n }\r\n}\r\n"]}
@@ -65,7 +65,7 @@ export class DepthRenderer {
65
65
  this.clearColor = new Color4(1.0, 1.0, 1.0, 1.0);
66
66
  }
67
67
  else {
68
- this.clearColor = new Color4(storeCameraSpaceZ ? 1e8 : 1.0, 0.0, 0.0, 1.0);
68
+ this.clearColor = new Color4(storeCameraSpaceZ ? 0.0 : 1.0, 0.0, 0.0, 1.0);
69
69
  }
70
70
  this._initShaderSourceAsync();
71
71
  DepthRenderer._SceneComponentInitialization(this._scene);
@@ -1 +1 @@
1
- {"version":3,"file":"depthRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/depthRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport \"../Shaders/depth.fragment\";\r\nimport \"../Shaders/depth.vertex\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\n\r\nimport type { Material } from \"../Materials/material\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport type { IEffectCreationOptions } from \"core/Materials\";\r\n\r\n/**\r\n * This represents a depth renderer in Babylon.\r\n * A depth renderer will render to it's depth map every frame which can be displayed or used in post processing\r\n */\r\nexport class DepthRenderer {\r\n private _scene: Scene;\r\n private _depthMap: RenderTargetTexture;\r\n private readonly _storeNonLinearDepth: boolean;\r\n private readonly _storeCameraSpaceZ: boolean;\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * Force all the depth renderer to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /** Color used to clear the depth texture. Default: (1,0,0,1) */\r\n public clearColor: Color4;\r\n\r\n /** Get if the depth renderer is using packed depth or not */\r\n public readonly isPacked: boolean;\r\n\r\n private _camera: Nullable<Camera>;\r\n\r\n /** Enable or disable the depth renderer. When disabled, the depth texture is not updated */\r\n public enabled = true;\r\n\r\n /** Force writing the transparent objects into the depth map */\r\n public forceDepthWriteTransparentMeshes = false;\r\n\r\n /**\r\n * Specifies that the depth renderer will only be used within\r\n * the camera it is created for.\r\n * This can help forcing its rendering during the camera processing.\r\n */\r\n public useOnlyInActiveCamera: boolean = false;\r\n\r\n /** If true, reverse the culling of materials before writing to the depth texture.\r\n * So, basically, when \"true\", back facing instead of front facing faces are rasterized into the texture\r\n */\r\n public reverseCulling = false;\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"DepthRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Sets a specific material to be used to render a mesh/a list of meshes by the depth renderer\r\n * @param mesh mesh or array of meshes\r\n * @param material material to use by the depth render when rendering the mesh(es). If undefined is passed, the specific material created by the depth renderer will be used.\r\n */\r\n public setMaterialForRendering(mesh: AbstractMesh | AbstractMesh[], material?: Material): void {\r\n this._depthMap.setMaterialForRendering(mesh, material);\r\n }\r\n\r\n /**\r\n * Instantiates a depth renderer\r\n * @param scene The scene the renderer belongs to\r\n * @param type The texture type of the depth map (default: Engine.TEXTURETYPE_FLOAT)\r\n * @param camera The camera to be used to render the depth map (default: scene's active camera)\r\n * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z\r\n * @param samplingMode The sampling mode to be used with the render target (Linear, Nearest...) (default: TRILINEAR_SAMPLINGMODE)\r\n * @param storeCameraSpaceZ Defines whether the depth stored is the Z coordinate in camera space. If true, storeNonLinearDepth has no effect. (Default: false)\r\n * @param name Name of the render target (default: DepthRenderer)\r\n */\r\n constructor(\r\n scene: Scene,\r\n type: number = Constants.TEXTURETYPE_FLOAT,\r\n camera: Nullable<Camera> = null,\r\n storeNonLinearDepth = false,\r\n samplingMode = Texture.TRILINEAR_SAMPLINGMODE,\r\n storeCameraSpaceZ = false,\r\n name?: string\r\n ) {\r\n this._scene = scene;\r\n this._storeNonLinearDepth = storeNonLinearDepth;\r\n this._storeCameraSpaceZ = storeCameraSpaceZ;\r\n this.isPacked = type === Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (this.isPacked) {\r\n this.clearColor = new Color4(1.0, 1.0, 1.0, 1.0);\r\n } else {\r\n this.clearColor = new Color4(storeCameraSpaceZ ? 1e8 : 1.0, 0.0, 0.0, 1.0);\r\n }\r\n\r\n this._initShaderSourceAsync();\r\n\r\n DepthRenderer._SceneComponentInitialization(this._scene);\r\n\r\n const engine = scene.getEngine();\r\n\r\n this._camera = camera;\r\n\r\n if (samplingMode !== Texture.NEAREST_SAMPLINGMODE) {\r\n if (type === Constants.TEXTURETYPE_FLOAT && !engine._caps.textureFloatLinearFiltering) {\r\n samplingMode = Texture.NEAREST_SAMPLINGMODE;\r\n }\r\n if (type === Constants.TEXTURETYPE_HALF_FLOAT && !engine._caps.textureHalfFloatLinearFiltering) {\r\n samplingMode = Texture.NEAREST_SAMPLINGMODE;\r\n }\r\n }\r\n\r\n // Render target\r\n const format = this.isPacked || !engine._features.supportExtendedTextureFormats ? Constants.TEXTUREFORMAT_RGBA : Constants.TEXTUREFORMAT_R;\r\n this._depthMap = new RenderTargetTexture(\r\n name ?? \"DepthRenderer\",\r\n { width: engine.getRenderWidth(), height: engine.getRenderHeight() },\r\n this._scene,\r\n false,\r\n true,\r\n type,\r\n false,\r\n samplingMode,\r\n undefined,\r\n undefined,\r\n undefined,\r\n format\r\n );\r\n this._depthMap.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._depthMap.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._depthMap.refreshRate = 1;\r\n this._depthMap.renderParticles = false;\r\n this._depthMap.renderList = null;\r\n this._depthMap.noPrePassRenderer = true;\r\n\r\n // Camera to get depth map from to support multiple concurrent cameras\r\n this._depthMap.activeCamera = this._camera;\r\n this._depthMap.ignoreCameraViewport = true;\r\n this._depthMap.useCameraPostProcesses = false;\r\n\r\n // set default depth value to 1.0 (far away)\r\n this._depthMap.onClearObservable.add((engine) => {\r\n engine.clear(this.clearColor, true, true, true);\r\n });\r\n\r\n this._depthMap.onBeforeBindObservable.add(() => {\r\n engine._debugPushGroup?.(\"depth renderer\", 1);\r\n });\r\n\r\n this._depthMap.onAfterUnbindObservable.add(() => {\r\n engine._debugPopGroup?.(1);\r\n });\r\n\r\n this._depthMap.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering =\r\n engine.getCaps().instancedArrays &&\r\n ((batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined) || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = subMesh.getMaterial();\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n if (!material || effectiveMesh.infiniteDistance || material.disableDepthWrite || subMesh.verticesCount === 0 || subMesh._renderId === scene.getRenderId()) {\r\n return;\r\n }\r\n\r\n // Culling\r\n const detNeg = effectiveMesh._getWorldMatrixDeterminant() < 0;\r\n let sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (detNeg) {\r\n sideOrientation =\r\n sideOrientation === Constants.MATERIAL_ClockWiseSideOrientation\r\n ? Constants.MATERIAL_CounterClockWiseSideOrientation\r\n : Constants.MATERIAL_ClockWiseSideOrientation;\r\n }\r\n const reverseSideOrientation = sideOrientation === Constants.MATERIAL_ClockWiseSideOrientation;\r\n\r\n engine.setState(material.backFaceCulling, 0, false, reverseSideOrientation, this.reverseCulling ? !material.cullBackFaces : material.cullBackFaces);\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering =\r\n engine.getCaps().instancedArrays &&\r\n ((batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined) || renderingMesh.hasThinInstances);\r\n\r\n const camera = this._camera || scene.activeCamera;\r\n if (this.isReady(subMesh, hardwareInstancedRendering) && camera) {\r\n subMesh._renderId = scene.getRenderId();\r\n\r\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n let drawWrapper = subMesh._getDrawWrapper();\r\n if (!drawWrapper && renderingMaterial) {\r\n drawWrapper = renderingMaterial._getDrawWrapper();\r\n }\r\n const cameraIsOrtho = camera.mode === Camera.ORTHOGRAPHIC_CAMERA;\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!renderingMaterial) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n if (this._storeCameraSpaceZ) {\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n } else {\r\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\r\n }\r\n\r\n let minZ: number, maxZ: number;\r\n\r\n if (cameraIsOrtho) {\r\n minZ = !engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\r\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\r\n } else {\r\n minZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? camera.minZ : engine.isNDCHalfZRange ? 0 : camera.minZ;\r\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : camera.maxZ;\r\n }\r\n\r\n effect.setFloat2(\"depthValues\", minZ, minZ + maxZ);\r\n\r\n if (!renderingMaterial) {\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bones\r\n BindBonesParameters(renderingMesh, effect);\r\n\r\n // Clip planes\r\n BindClipPlane(effect, material, scene);\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n bvaManager.bind(effect, hardwareInstancedRendering);\r\n }\r\n\r\n // Points cloud rendering\r\n if (material.pointsCloud) {\r\n effect.setFloat(\"pointSize\", material.pointSize);\r\n }\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) =>\r\n effect.setMatrix(\"world\", world)\r\n );\r\n }\r\n };\r\n\r\n this._depthMap.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (depthOnlySubMeshes.length) {\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.forceDepthWriteTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n } else {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n transparentSubMeshes.data[index].getEffectiveMesh()._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n }\r\n }\r\n };\r\n }\r\n\r\n private _shadersLoaded = false;\r\n private async _initShaderSourceAsync(forceGLSL = false) {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !forceGLSL && !DepthRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/depth.vertex\"), import(\"../ShadersWGSL/depth.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/depth.vertex\"), import(\"../Shaders/depth.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Creates the depth rendering effect and checks if the effect is ready.\r\n * @param subMesh The submesh to be used to render the depth map of\r\n * @param useInstances If multiple world instances should be used\r\n * @returns if the depth renderer is ready to render the depth map\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n const mesh = subMesh.getMesh();\r\n const scene = mesh.getScene();\r\n\r\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n if (renderingMaterial) {\r\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\r\n }\r\n\r\n const material = subMesh.getMaterial();\r\n if (!material || material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(mesh) && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = true;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = true;\r\n }\r\n }\r\n\r\n // Bones\r\n const fallbacks = new EffectFallbacks();\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n if (mesh.numBoneInfluencers > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n const skeleton = mesh.skeleton;\r\n if (skeleton.isUsingTextureForMatrices) {\r\n defines.push(\"#define BONETEXTURE\");\r\n } else {\r\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\r\n }\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n false, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Points cloud rendering\r\n if (material.pointsCloud) {\r\n defines.push(\"#define POINTSIZE\");\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = mesh.bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n if (useInstances) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n }\r\n\r\n // None linear depth\r\n if (this._storeNonLinearDepth) {\r\n defines.push(\"#define NONLINEARDEPTH\");\r\n }\r\n\r\n // Store camera space Z coordinate instead of NDC Z\r\n if (this._storeCameraSpaceZ) {\r\n defines.push(\"#define STORE_CAMERASPACE_Z\");\r\n }\r\n\r\n // Float Mode\r\n if (this.isPacked) {\r\n defines.push(\"#define PACKED\");\r\n }\r\n\r\n // Clip planes\r\n PrepareStringDefinesForClipPlanes(material, scene, defines);\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n const uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"boneTextureWidth\",\r\n \"pointSize\",\r\n \"viewProjection\",\r\n \"view\",\r\n \"diffuseMatrix\",\r\n \"depthValues\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"bakedVertexAnimationSettings\",\r\n \"bakedVertexAnimationTextureSizeInverted\",\r\n \"bakedVertexAnimationTime\",\r\n \"bakedVertexAnimationTexture\",\r\n ];\r\n const samplers = [\"diffuseSampler\", \"morphTargets\", \"boneSampler\", \"bakedVertexAnimationTexture\"];\r\n\r\n AddClipPlaneUniforms(uniforms);\r\n\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"depth\",\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [],\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this._shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the texture which the depth map will be written to.\r\n * @returns The depth map texture\r\n */\r\n public getDepthMap(): RenderTargetTexture {\r\n return this._depthMap;\r\n }\r\n\r\n /**\r\n * Disposes of the depth renderer.\r\n */\r\n public dispose(): void {\r\n const keysToDelete = [];\r\n for (const key in this._scene._depthRenderer) {\r\n const depthRenderer = this._scene._depthRenderer[key];\r\n if (depthRenderer === this) {\r\n keysToDelete.push(key);\r\n }\r\n }\r\n\r\n if (keysToDelete.length > 0) {\r\n this._depthMap.dispose();\r\n\r\n for (const key of keysToDelete) {\r\n delete this._scene._depthRenderer[key];\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"depthRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/depthRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport \"../Shaders/depth.fragment\";\r\nimport \"../Shaders/depth.vertex\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\n\r\nimport type { Material } from \"../Materials/material\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { BindBonesParameters, BindMorphTargetParameters, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport type { IEffectCreationOptions } from \"core/Materials\";\r\n\r\n/**\r\n * This represents a depth renderer in Babylon.\r\n * A depth renderer will render to it's depth map every frame which can be displayed or used in post processing\r\n */\r\nexport class DepthRenderer {\r\n private _scene: Scene;\r\n private _depthMap: RenderTargetTexture;\r\n private readonly _storeNonLinearDepth: boolean;\r\n private readonly _storeCameraSpaceZ: boolean;\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * Force all the depth renderer to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /** Color used to clear the depth texture. Default: (1,0,0,1) */\r\n public clearColor: Color4;\r\n\r\n /** Get if the depth renderer is using packed depth or not */\r\n public readonly isPacked: boolean;\r\n\r\n private _camera: Nullable<Camera>;\r\n\r\n /** Enable or disable the depth renderer. When disabled, the depth texture is not updated */\r\n public enabled = true;\r\n\r\n /** Force writing the transparent objects into the depth map */\r\n public forceDepthWriteTransparentMeshes = false;\r\n\r\n /**\r\n * Specifies that the depth renderer will only be used within\r\n * the camera it is created for.\r\n * This can help forcing its rendering during the camera processing.\r\n */\r\n public useOnlyInActiveCamera: boolean = false;\r\n\r\n /** If true, reverse the culling of materials before writing to the depth texture.\r\n * So, basically, when \"true\", back facing instead of front facing faces are rasterized into the texture\r\n */\r\n public reverseCulling = false;\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"DepthRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Sets a specific material to be used to render a mesh/a list of meshes by the depth renderer\r\n * @param mesh mesh or array of meshes\r\n * @param material material to use by the depth render when rendering the mesh(es). If undefined is passed, the specific material created by the depth renderer will be used.\r\n */\r\n public setMaterialForRendering(mesh: AbstractMesh | AbstractMesh[], material?: Material): void {\r\n this._depthMap.setMaterialForRendering(mesh, material);\r\n }\r\n\r\n /**\r\n * Instantiates a depth renderer\r\n * @param scene The scene the renderer belongs to\r\n * @param type The texture type of the depth map (default: Engine.TEXTURETYPE_FLOAT)\r\n * @param camera The camera to be used to render the depth map (default: scene's active camera)\r\n * @param storeNonLinearDepth Defines whether the depth is stored linearly like in Babylon Shadows or directly like glFragCoord.z\r\n * @param samplingMode The sampling mode to be used with the render target (Linear, Nearest...) (default: TRILINEAR_SAMPLINGMODE)\r\n * @param storeCameraSpaceZ Defines whether the depth stored is the Z coordinate in camera space. If true, storeNonLinearDepth has no effect. (Default: false)\r\n * @param name Name of the render target (default: DepthRenderer)\r\n */\r\n constructor(\r\n scene: Scene,\r\n type: number = Constants.TEXTURETYPE_FLOAT,\r\n camera: Nullable<Camera> = null,\r\n storeNonLinearDepth = false,\r\n samplingMode = Texture.TRILINEAR_SAMPLINGMODE,\r\n storeCameraSpaceZ = false,\r\n name?: string\r\n ) {\r\n this._scene = scene;\r\n this._storeNonLinearDepth = storeNonLinearDepth;\r\n this._storeCameraSpaceZ = storeCameraSpaceZ;\r\n this.isPacked = type === Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (this.isPacked) {\r\n this.clearColor = new Color4(1.0, 1.0, 1.0, 1.0);\r\n } else {\r\n this.clearColor = new Color4(storeCameraSpaceZ ? 0.0 : 1.0, 0.0, 0.0, 1.0);\r\n }\r\n\r\n this._initShaderSourceAsync();\r\n\r\n DepthRenderer._SceneComponentInitialization(this._scene);\r\n\r\n const engine = scene.getEngine();\r\n\r\n this._camera = camera;\r\n\r\n if (samplingMode !== Texture.NEAREST_SAMPLINGMODE) {\r\n if (type === Constants.TEXTURETYPE_FLOAT && !engine._caps.textureFloatLinearFiltering) {\r\n samplingMode = Texture.NEAREST_SAMPLINGMODE;\r\n }\r\n if (type === Constants.TEXTURETYPE_HALF_FLOAT && !engine._caps.textureHalfFloatLinearFiltering) {\r\n samplingMode = Texture.NEAREST_SAMPLINGMODE;\r\n }\r\n }\r\n\r\n // Render target\r\n const format = this.isPacked || !engine._features.supportExtendedTextureFormats ? Constants.TEXTUREFORMAT_RGBA : Constants.TEXTUREFORMAT_R;\r\n this._depthMap = new RenderTargetTexture(\r\n name ?? \"DepthRenderer\",\r\n { width: engine.getRenderWidth(), height: engine.getRenderHeight() },\r\n this._scene,\r\n false,\r\n true,\r\n type,\r\n false,\r\n samplingMode,\r\n undefined,\r\n undefined,\r\n undefined,\r\n format\r\n );\r\n this._depthMap.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._depthMap.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._depthMap.refreshRate = 1;\r\n this._depthMap.renderParticles = false;\r\n this._depthMap.renderList = null;\r\n this._depthMap.noPrePassRenderer = true;\r\n\r\n // Camera to get depth map from to support multiple concurrent cameras\r\n this._depthMap.activeCamera = this._camera;\r\n this._depthMap.ignoreCameraViewport = true;\r\n this._depthMap.useCameraPostProcesses = false;\r\n\r\n // set default depth value to 1.0 (far away)\r\n this._depthMap.onClearObservable.add((engine) => {\r\n engine.clear(this.clearColor, true, true, true);\r\n });\r\n\r\n this._depthMap.onBeforeBindObservable.add(() => {\r\n engine._debugPushGroup?.(\"depth renderer\", 1);\r\n });\r\n\r\n this._depthMap.onAfterUnbindObservable.add(() => {\r\n engine._debugPopGroup?.(1);\r\n });\r\n\r\n this._depthMap.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering =\r\n engine.getCaps().instancedArrays &&\r\n ((batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined) || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = subMesh.getMaterial();\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n if (!material || effectiveMesh.infiniteDistance || material.disableDepthWrite || subMesh.verticesCount === 0 || subMesh._renderId === scene.getRenderId()) {\r\n return;\r\n }\r\n\r\n // Culling\r\n const detNeg = effectiveMesh._getWorldMatrixDeterminant() < 0;\r\n let sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (detNeg) {\r\n sideOrientation =\r\n sideOrientation === Constants.MATERIAL_ClockWiseSideOrientation\r\n ? Constants.MATERIAL_CounterClockWiseSideOrientation\r\n : Constants.MATERIAL_ClockWiseSideOrientation;\r\n }\r\n const reverseSideOrientation = sideOrientation === Constants.MATERIAL_ClockWiseSideOrientation;\r\n\r\n engine.setState(material.backFaceCulling, 0, false, reverseSideOrientation, this.reverseCulling ? !material.cullBackFaces : material.cullBackFaces);\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering =\r\n engine.getCaps().instancedArrays &&\r\n ((batch.visibleInstances[subMesh._id] !== null && batch.visibleInstances[subMesh._id] !== undefined) || renderingMesh.hasThinInstances);\r\n\r\n const camera = this._camera || scene.activeCamera;\r\n if (this.isReady(subMesh, hardwareInstancedRendering) && camera) {\r\n subMesh._renderId = scene.getRenderId();\r\n\r\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n let drawWrapper = subMesh._getDrawWrapper();\r\n if (!drawWrapper && renderingMaterial) {\r\n drawWrapper = renderingMaterial._getDrawWrapper();\r\n }\r\n const cameraIsOrtho = camera.mode === Camera.ORTHOGRAPHIC_CAMERA;\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!renderingMaterial) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n if (this._storeCameraSpaceZ) {\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n } else {\r\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\r\n }\r\n\r\n let minZ: number, maxZ: number;\r\n\r\n if (cameraIsOrtho) {\r\n minZ = !engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\r\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : 1;\r\n } else {\r\n minZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? camera.minZ : engine.isNDCHalfZRange ? 0 : camera.minZ;\r\n maxZ = engine.useReverseDepthBuffer && engine.isNDCHalfZRange ? 0 : camera.maxZ;\r\n }\r\n\r\n effect.setFloat2(\"depthValues\", minZ, minZ + maxZ);\r\n\r\n if (!renderingMaterial) {\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bones\r\n BindBonesParameters(renderingMesh, effect);\r\n\r\n // Clip planes\r\n BindClipPlane(effect, material, scene);\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = subMesh.getMesh().bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n bvaManager.bind(effect, hardwareInstancedRendering);\r\n }\r\n\r\n // Points cloud rendering\r\n if (material.pointsCloud) {\r\n effect.setFloat(\"pointSize\", material.pointSize);\r\n }\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, world) =>\r\n effect.setMatrix(\"world\", world)\r\n );\r\n }\r\n };\r\n\r\n this._depthMap.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (depthOnlySubMeshes.length) {\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.forceDepthWriteTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n } else {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n transparentSubMeshes.data[index].getEffectiveMesh()._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n }\r\n }\r\n };\r\n }\r\n\r\n private _shadersLoaded = false;\r\n private async _initShaderSourceAsync(forceGLSL = false) {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !forceGLSL && !DepthRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/depth.vertex\"), import(\"../ShadersWGSL/depth.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/depth.vertex\"), import(\"../Shaders/depth.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Creates the depth rendering effect and checks if the effect is ready.\r\n * @param subMesh The submesh to be used to render the depth map of\r\n * @param useInstances If multiple world instances should be used\r\n * @returns if the depth renderer is ready to render the depth map\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n const mesh = subMesh.getMesh();\r\n const scene = mesh.getScene();\r\n\r\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n if (renderingMaterial) {\r\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\r\n }\r\n\r\n const material = subMesh.getMaterial();\r\n if (!material || material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(mesh) && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = true;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = true;\r\n }\r\n }\r\n\r\n // Bones\r\n const fallbacks = new EffectFallbacks();\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n if (mesh.numBoneInfluencers > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n const skeleton = mesh.skeleton;\r\n if (skeleton.isUsingTextureForMatrices) {\r\n defines.push(\"#define BONETEXTURE\");\r\n } else {\r\n defines.push(\"#define BonesPerMesh \" + (skeleton.bones.length + 1));\r\n }\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n false, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Points cloud rendering\r\n if (material.pointsCloud) {\r\n defines.push(\"#define POINTSIZE\");\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Baked vertex animations\r\n const bvaManager = mesh.bakedVertexAnimationManager;\r\n if (bvaManager && bvaManager.isEnabled) {\r\n defines.push(\"#define BAKED_VERTEX_ANIMATION_TEXTURE\");\r\n if (useInstances) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n }\r\n\r\n // None linear depth\r\n if (this._storeNonLinearDepth) {\r\n defines.push(\"#define NONLINEARDEPTH\");\r\n }\r\n\r\n // Store camera space Z coordinate instead of NDC Z\r\n if (this._storeCameraSpaceZ) {\r\n defines.push(\"#define STORE_CAMERASPACE_Z\");\r\n }\r\n\r\n // Float Mode\r\n if (this.isPacked) {\r\n defines.push(\"#define PACKED\");\r\n }\r\n\r\n // Clip planes\r\n PrepareStringDefinesForClipPlanes(material, scene, defines);\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n const uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"boneTextureWidth\",\r\n \"pointSize\",\r\n \"viewProjection\",\r\n \"view\",\r\n \"diffuseMatrix\",\r\n \"depthValues\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"bakedVertexAnimationSettings\",\r\n \"bakedVertexAnimationTextureSizeInverted\",\r\n \"bakedVertexAnimationTime\",\r\n \"bakedVertexAnimationTexture\",\r\n ];\r\n const samplers = [\"diffuseSampler\", \"morphTargets\", \"boneSampler\", \"bakedVertexAnimationTexture\"];\r\n\r\n AddClipPlaneUniforms(uniforms);\r\n\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"depth\",\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [],\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: { maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this._shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the texture which the depth map will be written to.\r\n * @returns The depth map texture\r\n */\r\n public getDepthMap(): RenderTargetTexture {\r\n return this._depthMap;\r\n }\r\n\r\n /**\r\n * Disposes of the depth renderer.\r\n */\r\n public dispose(): void {\r\n const keysToDelete = [];\r\n for (const key in this._scene._depthRenderer) {\r\n const depthRenderer = this._scene._depthRenderer[key];\r\n if (depthRenderer === this) {\r\n keysToDelete.push(key);\r\n }\r\n }\r\n\r\n if (keysToDelete.length > 0) {\r\n this._depthMap.dispose();\r\n\r\n for (const key of keysToDelete) {\r\n delete this._scene._depthRenderer[key];\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -360,7 +360,7 @@ export class GeometryBufferRenderer {
360
360
  this._enableReflectivity = false;
361
361
  this._enableScreenspaceDepth = false;
362
362
  this._clearColor = new Color4(0, 0, 0, 0);
363
- this._clearDepthColor = new Color4(1e8, 0, 0, 1); // "infinity" value - depth in the depth texture is view.z, not a 0..1 value!
363
+ this._clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ
364
364
  this._positionIndex = -1;
365
365
  this._velocityIndex = -1;
366
366
  this._velocityLinearIndex = -1;