@babylonjs/core 6.41.0 → 6.41.2

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 (650) hide show
  1. package/Animations/animatable.js +1 -2
  2. package/Animations/animatable.js.map +1 -1
  3. package/Animations/animation.js +4 -6
  4. package/Animations/animation.js.map +1 -1
  5. package/Animations/animationGroup.js +3 -3
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Animations/runtimeAnimation.js +1 -1
  8. package/Animations/runtimeAnimation.js.map +1 -1
  9. package/Audio/audioEngine.js +3 -5
  10. package/Audio/audioEngine.js.map +1 -1
  11. package/Audio/audioSceneComponent.js +1 -2
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/sound.js +48 -74
  14. package/Audio/sound.js.map +1 -1
  15. package/Audio/soundTrack.js +6 -12
  16. package/Audio/soundTrack.js.map +1 -1
  17. package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -2
  18. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  19. package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
  20. package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
  21. package/Behaviors/Meshes/fadeInOutBehavior.js +2 -4
  22. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  23. package/Behaviors/Meshes/followBehavior.js +1 -2
  24. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  25. package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
  26. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  27. package/Bones/bone.js +4 -6
  28. package/Bones/bone.js.map +1 -1
  29. package/Bones/skeleton.js +2 -3
  30. package/Bones/skeleton.js.map +1 -1
  31. package/Buffers/buffer.align.js +5 -8
  32. package/Buffers/buffer.align.js.map +1 -1
  33. package/Buffers/buffer.js +6 -8
  34. package/Buffers/buffer.js.map +1 -1
  35. package/Cameras/Inputs/BaseCameraPointersInput.js +3 -4
  36. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  37. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +3 -5
  38. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  39. package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
  40. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  41. package/Cameras/Inputs/freeCameraMouseInput.js +2 -2
  42. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  43. package/Cameras/arcRotateCamera.js +1 -2
  44. package/Cameras/arcRotateCamera.js.map +1 -1
  45. package/Cameras/camera.d.ts +5 -0
  46. package/Cameras/camera.js +18 -11
  47. package/Cameras/camera.js.map +1 -1
  48. package/Collisions/pickingInfo.js +1 -1
  49. package/Collisions/pickingInfo.js.map +1 -1
  50. package/Compute/computeEffect.js +5 -8
  51. package/Compute/computeEffect.js.map +1 -1
  52. package/Compute/computeShader.js +12 -9
  53. package/Compute/computeShader.js.map +1 -1
  54. package/Culling/Octrees/octreeSceneComponent.js +1 -2
  55. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  56. package/Culling/boundingBox.js +2 -3
  57. package/Culling/boundingBox.js.map +1 -1
  58. package/Culling/ray.d.ts +6 -1
  59. package/Culling/ray.js +9 -4
  60. package/Culling/ray.js.map +1 -1
  61. package/Debug/debugLayer.js +4 -1
  62. package/Debug/debugLayer.js.map +1 -1
  63. package/Debug/directionalLightFrustumViewer.js +7 -9
  64. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  65. package/Debug/physicsViewer.js +5 -7
  66. package/Debug/physicsViewer.js.map +1 -1
  67. package/Debug/rayHelper.js +1 -2
  68. package/Debug/rayHelper.js.map +1 -1
  69. package/Debug/skeletonViewer.js +26 -31
  70. package/Debug/skeletonViewer.js.map +1 -1
  71. package/Decorators/nodeDecorator.js +1 -1
  72. package/Decorators/nodeDecorator.js.map +1 -1
  73. package/DeviceInput/InputDevices/deviceSourceManager.js +3 -5
  74. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  75. package/DeviceInput/eventFactory.js +1 -1
  76. package/DeviceInput/eventFactory.js.map +1 -1
  77. package/DeviceInput/internalDeviceSourceManager.js +1 -2
  78. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  79. package/DeviceInput/webDeviceInputSystem.js +9 -12
  80. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  81. package/Engines/Extensions/engine.cubeTexture.js +6 -1
  82. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  83. package/Engines/Extensions/engine.multiRender.js +3 -4
  84. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  85. package/Engines/Extensions/engine.rawTexture.js +4 -4
  86. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  87. package/Engines/Extensions/engine.readTexture.js +2 -3
  88. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  89. package/Engines/Extensions/engine.renderTarget.js +9 -5
  90. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  91. package/Engines/Extensions/engine.renderTargetCube.js +9 -1
  92. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  93. package/Engines/Extensions/engine.views.js +1 -2
  94. package/Engines/Extensions/engine.views.js.map +1 -1
  95. package/Engines/Processors/shaderCodeNode.js +6 -7
  96. package/Engines/Processors/shaderCodeNode.js.map +1 -1
  97. package/Engines/Processors/shaderProcessor.js +6 -11
  98. package/Engines/Processors/shaderProcessor.js.map +1 -1
  99. package/Engines/WebGL/webGLHardwareTexture.js +1 -2
  100. package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
  101. package/Engines/WebGL/webGLRenderTargetWrapper.js +3 -5
  102. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  103. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +9 -2
  104. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  105. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -2
  106. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  107. package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -6
  108. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  109. package/Engines/WebGPU/Extensions/engine.query.js +2 -4
  110. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  111. package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -4
  112. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  113. package/Engines/WebGPU/Extensions/engine.renderTarget.js +11 -5
  114. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  115. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +11 -3
  116. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  117. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +2 -3
  118. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  119. package/Engines/WebGPU/Extensions/engine.textureSampler.js +1 -2
  120. package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
  121. package/Engines/WebGPU/Extensions/engine.videoTexture.js +1 -2
  122. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  123. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  124. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  125. package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -7
  126. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  127. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +15 -20
  128. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  129. package/Engines/WebGPU/webgpuCacheSampler.js +10 -5
  130. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  131. package/Engines/WebGPU/webgpuClearQuad.js +2 -3
  132. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  133. package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -2
  134. package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
  135. package/Engines/WebGPU/webgpuDepthCullingState.js +2 -2
  136. package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
  137. package/Engines/WebGPU/webgpuDrawContext.js +1 -2
  138. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  139. package/Engines/WebGPU/webgpuHardwareTexture.js +4 -6
  140. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  141. package/Engines/WebGPU/webgpuMaterialContext.js +2 -3
  142. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  143. package/Engines/WebGPU/webgpuOcclusionQuery.js +3 -5
  144. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  145. package/Engines/WebGPU/webgpuPipelineContext.js +2 -4
  146. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  147. package/Engines/WebGPU/webgpuQuerySet.js +1 -1
  148. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  149. package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -4
  150. package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
  151. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -4
  152. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  153. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +5 -4
  154. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  155. package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -2
  156. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  157. package/Engines/WebGPU/webgpuTextureManager.js +40 -43
  158. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  159. package/Engines/WebGPU/webgpuTimestampQuery.js +12 -7
  160. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  161. package/Engines/WebGPU/webgpuTintWASM.js +4 -1
  162. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  163. package/Engines/engine.js +4 -7
  164. package/Engines/engine.js.map +1 -1
  165. package/Engines/nativeEngine.js +16 -22
  166. package/Engines/nativeEngine.js.map +1 -1
  167. package/Engines/nullEngine.js +9 -1
  168. package/Engines/nullEngine.js.map +1 -1
  169. package/Engines/renderTargetWrapper.js +11 -16
  170. package/Engines/renderTargetWrapper.js.map +1 -1
  171. package/Engines/thinEngine.js +32 -44
  172. package/Engines/thinEngine.js.map +1 -1
  173. package/Engines/webgpuEngine.js +77 -95
  174. package/Engines/webgpuEngine.js.map +1 -1
  175. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +2 -3
  176. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  177. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +3 -6
  178. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  179. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +1 -2
  180. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
  181. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js +1 -2
  182. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
  183. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +2 -4
  184. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
  185. package/FlowGraph/flowGraph.js +1 -2
  186. package/FlowGraph/flowGraph.js.map +1 -1
  187. package/FlowGraph/flowGraphBlock.js +2 -4
  188. package/FlowGraph/flowGraphBlock.js.map +1 -1
  189. package/FlowGraph/flowGraphContext.js +1 -2
  190. package/FlowGraph/flowGraphContext.js.map +1 -1
  191. package/FlowGraph/flowGraphCoordinator.js +4 -7
  192. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  193. package/FlowGraph/flowGraphSignalConnection.js +1 -2
  194. package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
  195. package/FlowGraph/serialization.js +2 -3
  196. package/FlowGraph/serialization.js.map +1 -1
  197. package/Gamepads/gamepadManager.js +1 -1
  198. package/Gamepads/gamepadManager.js.map +1 -1
  199. package/Gizmos/axisDragGizmo.js +2 -4
  200. package/Gizmos/axisDragGizmo.js.map +1 -1
  201. package/Gizmos/axisScaleGizmo.js +5 -8
  202. package/Gizmos/axisScaleGizmo.js.map +1 -1
  203. package/Gizmos/boundingBoxGizmo.js +1 -1
  204. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  205. package/Gizmos/cameraGizmo.js +2 -3
  206. package/Gizmos/cameraGizmo.js.map +1 -1
  207. package/Gizmos/gizmo.js +4 -7
  208. package/Gizmos/gizmo.js.map +1 -1
  209. package/Gizmos/gizmoManager.js +3 -4
  210. package/Gizmos/gizmoManager.js.map +1 -1
  211. package/Gizmos/planeDragGizmo.js +2 -4
  212. package/Gizmos/planeDragGizmo.js.map +1 -1
  213. package/Gizmos/planeRotationGizmo.js +2 -4
  214. package/Gizmos/planeRotationGizmo.js.map +1 -1
  215. package/Helpers/environmentHelper.js +8 -2
  216. package/Helpers/environmentHelper.js.map +1 -1
  217. package/Helpers/videoDome.js +1 -2
  218. package/Helpers/videoDome.js.map +1 -1
  219. package/Inputs/scene.inputManager.js +8 -10
  220. package/Inputs/scene.inputManager.js.map +1 -1
  221. package/Layers/effectLayer.js +16 -10
  222. package/Layers/effectLayer.js.map +1 -1
  223. package/Layers/glowLayer.js +16 -6
  224. package/Layers/glowLayer.js.map +1 -1
  225. package/Layers/highlightLayer.js +12 -3
  226. package/Layers/highlightLayer.js.map +1 -1
  227. package/Layers/layer.js +1 -2
  228. package/Layers/layer.js.map +1 -1
  229. package/LensFlares/lensFlareSystem.js +1 -2
  230. package/LensFlares/lensFlareSystem.js.map +1 -1
  231. package/Lights/Shadows/cascadedShadowGenerator.js +21 -25
  232. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  233. package/Lights/Shadows/shadowGenerator.js +18 -21
  234. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  235. package/Lights/light.js +2 -4
  236. package/Lights/light.js.map +1 -1
  237. package/Lights/shadowLight.js +1 -1
  238. package/Lights/shadowLight.js.map +1 -1
  239. package/Loading/Plugins/babylonFileLoader.js +1 -2
  240. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  241. package/Loading/sceneLoader.js +1 -1
  242. package/Loading/sceneLoader.js.map +1 -1
  243. package/Materials/GreasedLine/greasedLinePluginMaterial.js +26 -32
  244. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  245. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +22 -27
  246. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  247. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -7
  248. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -2
  250. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  251. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -2
  252. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -1
  254. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  255. package/Materials/Node/Blocks/Dual/textureBlock.js +10 -16
  256. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -3
  258. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -2
  260. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -4
  262. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/Input/inputBlock.js +1 -2
  264. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +24 -26
  266. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +3 -3
  268. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +45 -49
  270. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  271. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -2
  272. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  273. package/Materials/Node/Blocks/PBR/refractionBlock.js +1 -2
  274. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  275. package/Materials/Node/Blocks/PBR/sheenBlock.js +13 -13
  276. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  277. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +27 -28
  278. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  279. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
  280. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  281. package/Materials/Node/Blocks/Vertex/instancesBlock.js +2 -2
  282. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  283. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +43 -33
  284. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  285. package/Materials/Node/Blocks/biPlanarBlock.js +1 -2
  286. package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
  287. package/Materials/Node/Blocks/cloudBlock.js +2 -3
  288. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  289. package/Materials/Node/Blocks/colorMergerBlock.js +4 -5
  290. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  291. package/Materials/Node/Blocks/customBlock.js +4 -6
  292. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  293. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +2 -4
  294. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/triPlanarBlock.js +14 -23
  296. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/vectorMergerBlock.js +4 -5
  298. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  299. package/Materials/Node/nodeMaterial.js +16 -11
  300. package/Materials/Node/nodeMaterial.js.map +1 -1
  301. package/Materials/Node/nodeMaterialBlock.js +3 -4
  302. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  303. package/Materials/Node/nodeMaterialBuildState.js +1 -1
  304. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  305. package/Materials/PBR/pbrBaseMaterial.js +25 -28
  306. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  307. package/Materials/PBR/pbrClearCoatConfiguration.js +6 -9
  308. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  309. package/Materials/PBR/pbrIridescenceConfiguration.js +4 -7
  310. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  311. package/Materials/PBR/pbrSheenConfiguration.js +4 -7
  312. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  313. package/Materials/Textures/Loaders/envTextureLoader.js +2 -2
  314. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  315. package/Materials/Textures/Packer/packer.js +13 -14
  316. package/Materials/Textures/Packer/packer.js.map +1 -1
  317. package/Materials/Textures/Procedurals/noiseProceduralTexture.js +1 -2
  318. package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
  319. package/Materials/Textures/Procedurals/proceduralTexture.js +19 -11
  320. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  321. package/Materials/Textures/baseTexture.js +2 -4
  322. package/Materials/Textures/baseTexture.js.map +1 -1
  323. package/Materials/Textures/cubeTexture.js +7 -13
  324. package/Materials/Textures/cubeTexture.js.map +1 -1
  325. package/Materials/Textures/dynamicTexture.js +1 -2
  326. package/Materials/Textures/dynamicTexture.js.map +1 -1
  327. package/Materials/Textures/hdrCubeTexture.js +2 -4
  328. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  329. package/Materials/Textures/htmlElementTexture.js +5 -3
  330. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  331. package/Materials/Textures/internalTexture.js +3 -5
  332. package/Materials/Textures/internalTexture.js.map +1 -1
  333. package/Materials/Textures/mirrorTexture.js +3 -6
  334. package/Materials/Textures/mirrorTexture.js.map +1 -1
  335. package/Materials/Textures/multiRenderTarget.js +5 -8
  336. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  337. package/Materials/Textures/rawTexture.js +1 -1
  338. package/Materials/Textures/rawTexture.js.map +1 -1
  339. package/Materials/Textures/renderTargetTexture.js +22 -34
  340. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  341. package/Materials/Textures/texture.js +16 -21
  342. package/Materials/Textures/texture.js.map +1 -1
  343. package/Materials/Textures/thinRenderTargetTexture.js +2 -4
  344. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  345. package/Materials/Textures/thinTexture.js +1 -1
  346. package/Materials/Textures/thinTexture.js.map +1 -1
  347. package/Materials/Textures/videoTexture.js +12 -10
  348. package/Materials/Textures/videoTexture.js.map +1 -1
  349. package/Materials/clipPlaneMaterialHelper.js +18 -21
  350. package/Materials/clipPlaneMaterialHelper.js.map +1 -1
  351. package/Materials/drawWrapper.js +2 -4
  352. package/Materials/drawWrapper.js.map +1 -1
  353. package/Materials/effect.d.ts +4 -0
  354. package/Materials/effect.js +18 -18
  355. package/Materials/effect.js.map +1 -1
  356. package/Materials/effectRenderer.js +2 -3
  357. package/Materials/effectRenderer.js.map +1 -1
  358. package/Materials/material.decalMapConfiguration.js +3 -3
  359. package/Materials/material.decalMapConfiguration.js.map +1 -1
  360. package/Materials/material.detailMapConfiguration.js +1 -2
  361. package/Materials/material.detailMapConfiguration.js.map +1 -1
  362. package/Materials/material.js +7 -4
  363. package/Materials/material.js.map +1 -1
  364. package/Materials/materialDefines.js +5 -6
  365. package/Materials/materialDefines.js.map +1 -1
  366. package/Materials/materialHelper.d.ts +1 -1
  367. package/Materials/materialHelper.js +3 -4
  368. package/Materials/materialHelper.js.map +1 -1
  369. package/Materials/materialPluginManager.js +3 -5
  370. package/Materials/materialPluginManager.js.map +1 -1
  371. package/Materials/meshDebugPluginMaterial.js +13 -14
  372. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  373. package/Materials/multiMaterial.js +1 -2
  374. package/Materials/multiMaterial.js.map +1 -1
  375. package/Materials/shaderMaterial.d.ts +1 -1
  376. package/Materials/shaderMaterial.js +64 -32
  377. package/Materials/shaderMaterial.js.map +1 -1
  378. package/Materials/shadowDepthWrapper.js +24 -23
  379. package/Materials/shadowDepthWrapper.js.map +1 -1
  380. package/Materials/standardMaterial.js +10 -12
  381. package/Materials/standardMaterial.js.map +1 -1
  382. package/Materials/uniformBuffer.js +1 -1
  383. package/Materials/uniformBuffer.js.map +1 -1
  384. package/Maths/math.vector.js +1 -2
  385. package/Maths/math.vector.js.map +1 -1
  386. package/Meshes/Builders/decalBuilder.js +26 -29
  387. package/Meshes/Builders/decalBuilder.js.map +1 -1
  388. package/Meshes/Builders/greasedLineBuilder.js +16 -16
  389. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  390. package/Meshes/Builders/groundBuilder.d.ts +5 -1
  391. package/Meshes/Builders/groundBuilder.js +13 -2
  392. package/Meshes/Builders/groundBuilder.js.map +1 -1
  393. package/Meshes/Builders/textBuilder.js +2 -3
  394. package/Meshes/Builders/textBuilder.js.map +1 -1
  395. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +9 -1
  396. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +141 -12
  397. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  398. package/Meshes/GreasedLine/greasedLineBaseMesh.js +8 -11
  399. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  400. package/Meshes/GreasedLine/greasedLineMesh.js +3 -5
  401. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  402. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +13 -18
  403. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  404. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
  405. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  406. package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +18 -18
  407. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +18 -18
  408. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  409. package/Meshes/Node/nodeGeometry.js +6 -3
  410. package/Meshes/Node/nodeGeometry.js.map +1 -1
  411. package/Meshes/Node/nodeGeometryBlock.js +1 -1
  412. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  413. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +1 -2
  414. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  415. package/Meshes/Node/nodeGeometryBuildState.js +1 -2
  416. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  417. package/Meshes/abstractMesh.js +6 -10
  418. package/Meshes/abstractMesh.js.map +1 -1
  419. package/Meshes/csg.js +1 -2
  420. package/Meshes/csg.js.map +1 -1
  421. package/Meshes/geometry.js +1 -1
  422. package/Meshes/geometry.js.map +1 -1
  423. package/Meshes/instancedMesh.js +5 -10
  424. package/Meshes/instancedMesh.js.map +1 -1
  425. package/Meshes/mesh.js +13 -22
  426. package/Meshes/mesh.js.map +1 -1
  427. package/Meshes/mesh.vertexData.js +3 -4
  428. package/Meshes/mesh.vertexData.js.map +1 -1
  429. package/Meshes/meshUVSpaceRenderer.js +18 -15
  430. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  431. package/Meshes/subMesh.js +8 -14
  432. package/Meshes/subMesh.js.map +1 -1
  433. package/Meshes/thinInstanceMesh.js +12 -18
  434. package/Meshes/thinInstanceMesh.js.map +1 -1
  435. package/Meshes/trailMesh.js +2 -3
  436. package/Meshes/trailMesh.js.map +1 -1
  437. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -2
  438. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  439. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +9 -14
  440. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  441. package/Misc/PerformanceViewer/performanceViewerCollector.js +2 -3
  442. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  443. package/Misc/arrayTools.js +1 -1
  444. package/Misc/arrayTools.js.map +1 -1
  445. package/Misc/basis.js +2 -3
  446. package/Misc/basis.js.map +1 -1
  447. package/Misc/dataStorage.js +1 -1
  448. package/Misc/dataStorage.js.map +1 -1
  449. package/Misc/deepCopier.js +1 -1
  450. package/Misc/deepCopier.js.map +1 -1
  451. package/Misc/environmentTextureTools.js +3 -4
  452. package/Misc/environmentTextureTools.js.map +1 -1
  453. package/Misc/equirectangularCapture.js +2 -3
  454. package/Misc/equirectangularCapture.js.map +1 -1
  455. package/Misc/fileTools.js +4 -4
  456. package/Misc/fileTools.js.map +1 -1
  457. package/Misc/greasedLineTools.js +3 -5
  458. package/Misc/greasedLineTools.js.map +1 -1
  459. package/Misc/logger.js +1 -2
  460. package/Misc/logger.js.map +1 -1
  461. package/Misc/minMaxReducer.js +2 -3
  462. package/Misc/minMaxReducer.js.map +1 -1
  463. package/Misc/pressureObserverWrapper.js +5 -8
  464. package/Misc/pressureObserverWrapper.js.map +1 -1
  465. package/Misc/sceneRecorder.js +1 -1
  466. package/Misc/sceneRecorder.js.map +1 -1
  467. package/Misc/screenshotTools.js +1 -1
  468. package/Misc/screenshotTools.js.map +1 -1
  469. package/Misc/textureTools.js +5 -5
  470. package/Misc/textureTools.js.map +1 -1
  471. package/Misc/timer.js +3 -5
  472. package/Misc/timer.js.map +1 -1
  473. package/Misc/tools.d.ts +3 -2
  474. package/Misc/tools.js +6 -5
  475. package/Misc/tools.js.map +1 -1
  476. package/Misc/trajectoryClassifier.js +3 -3
  477. package/Misc/trajectoryClassifier.js.map +1 -1
  478. package/Misc/videoRecorder.js +6 -4
  479. package/Misc/videoRecorder.js.map +1 -1
  480. package/Misc/virtualJoystick.js +4 -1
  481. package/Misc/virtualJoystick.js.map +1 -1
  482. package/Morph/morphTargetManager.js +1 -2
  483. package/Morph/morphTargetManager.js.map +1 -1
  484. package/Particles/EmitterTypes/meshParticleEmitter.js +1 -2
  485. package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
  486. package/Particles/baseParticleSystem.d.ts +4 -0
  487. package/Particles/baseParticleSystem.js +4 -0
  488. package/Particles/baseParticleSystem.js.map +1 -1
  489. package/Particles/computeShaderParticleSystem.js +3 -6
  490. package/Particles/computeShaderParticleSystem.js.map +1 -1
  491. package/Particles/gpuParticleSystem.d.ts +2 -2
  492. package/Particles/gpuParticleSystem.js +30 -20
  493. package/Particles/gpuParticleSystem.js.map +1 -1
  494. package/Particles/particleSystem.d.ts +3 -2
  495. package/Particles/particleSystem.js +33 -30
  496. package/Particles/particleSystem.js.map +1 -1
  497. package/Particles/particleSystemComponent.js +2 -3
  498. package/Particles/particleSystemComponent.js.map +1 -1
  499. package/Particles/pointsCloudSystem.js +5 -8
  500. package/Particles/pointsCloudSystem.js.map +1 -1
  501. package/Particles/solidParticleSystem.js +5 -7
  502. package/Particles/solidParticleSystem.js.map +1 -1
  503. package/Particles/webgl2ParticleSystem.js +1 -2
  504. package/Particles/webgl2ParticleSystem.js.map +1 -1
  505. package/Physics/castingResult.js +1 -1
  506. package/Physics/castingResult.js.map +1 -1
  507. package/Physics/joinedPhysicsEngineComponent.js +2 -2
  508. package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
  509. package/Physics/physicsHelper.js +19 -21
  510. package/Physics/physicsHelper.js.map +1 -1
  511. package/Physics/v2/IPhysicsEnginePlugin.d.ts +20 -0
  512. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  513. package/Physics/v2/Plugins/havokPlugin.js +48 -35
  514. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  515. package/Physics/v2/physicsAggregate.js +10 -12
  516. package/Physics/v2/physicsAggregate.js.map +1 -1
  517. package/Physics/v2/physicsBody.js +2 -4
  518. package/Physics/v2/physicsBody.js.map +1 -1
  519. package/Physics/v2/physicsShape.js +1 -2
  520. package/Physics/v2/physicsShape.js.map +1 -1
  521. package/Physics/v2/ragdoll.js +6 -8
  522. package/Physics/v2/ragdoll.js.map +1 -1
  523. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +6 -8
  524. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  525. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +14 -22
  526. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  527. package/PostProcesses/colorCorrectionPostProcess.js +1 -1
  528. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  529. package/PostProcesses/postProcess.js +28 -34
  530. package/PostProcesses/postProcess.js.map +1 -1
  531. package/PostProcesses/postProcessManager.js +4 -6
  532. package/PostProcesses/postProcessManager.js.map +1 -1
  533. package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
  534. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  535. package/PostProcesses/volumetricLightScatteringPostProcess.js +4 -7
  536. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  537. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +1 -1
  538. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  539. package/Probes/reflectionProbe.js +2 -4
  540. package/Probes/reflectionProbe.js.map +1 -1
  541. package/Rendering/GlobalIllumination/giRSMManager.js +22 -19
  542. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  543. package/Rendering/boundingBoxRenderer.js +2 -3
  544. package/Rendering/boundingBoxRenderer.js.map +1 -1
  545. package/Rendering/depthPeelingRenderer.js +2 -4
  546. package/Rendering/depthPeelingRenderer.js.map +1 -1
  547. package/Rendering/depthPeelingSceneComponent.js +2 -4
  548. package/Rendering/depthPeelingSceneComponent.js.map +1 -1
  549. package/Rendering/depthRenderer.js +10 -13
  550. package/Rendering/depthRenderer.js.map +1 -1
  551. package/Rendering/edgesRenderer.js +8 -11
  552. package/Rendering/edgesRenderer.js.map +1 -1
  553. package/Rendering/fluidRenderer/fluidRenderer.js +6 -11
  554. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  555. package/Rendering/fluidRenderer/fluidRenderingObject.js +3 -5
  556. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  557. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -4
  558. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  559. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +30 -36
  560. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  561. package/Rendering/fluidRenderer/fluidRenderingTextures.js +5 -7
  562. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  563. package/Rendering/geometryBufferRenderer.js +3 -2
  564. package/Rendering/geometryBufferRenderer.js.map +1 -1
  565. package/Rendering/outlineRenderer.js +5 -4
  566. package/Rendering/outlineRenderer.js.map +1 -1
  567. package/Rendering/prePassRenderer.js +3 -6
  568. package/Rendering/prePassRenderer.js.map +1 -1
  569. package/Rendering/reflectiveShadowMap.d.ts +1 -0
  570. package/Rendering/reflectiveShadowMap.js +5 -5
  571. package/Rendering/reflectiveShadowMap.js.map +1 -1
  572. package/Shaders/color.fragment.d.ts +2 -0
  573. package/Shaders/color.fragment.js +4 -0
  574. package/Shaders/color.fragment.js.map +1 -1
  575. package/Shaders/color.vertex.d.ts +2 -0
  576. package/Shaders/color.vertex.js +7 -0
  577. package/Shaders/color.vertex.js.map +1 -1
  578. package/Shaders/gpuRenderParticles.fragment.d.ts +2 -0
  579. package/Shaders/gpuRenderParticles.fragment.js +4 -0
  580. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  581. package/Shaders/gpuRenderParticles.vertex.d.ts +2 -0
  582. package/Shaders/gpuRenderParticles.vertex.js +5 -1
  583. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  584. package/Shaders/particles.fragment.d.ts +2 -0
  585. package/Shaders/particles.fragment.js +4 -0
  586. package/Shaders/particles.fragment.js.map +1 -1
  587. package/Shaders/particles.vertex.d.ts +2 -0
  588. package/Shaders/particles.vertex.js +5 -1
  589. package/Shaders/particles.vertex.js.map +1 -1
  590. package/Sprites/spriteManager.js +1 -2
  591. package/Sprites/spriteManager.js.map +1 -1
  592. package/Sprites/spriteRenderer.js +5 -7
  593. package/Sprites/spriteRenderer.js.map +1 -1
  594. package/States/stencilStateComposer.js +2 -4
  595. package/States/stencilStateComposer.js.map +1 -1
  596. package/XR/features/WebXRAbstractFeature.js +6 -2
  597. package/XR/features/WebXRAbstractFeature.js.map +1 -1
  598. package/XR/features/WebXRAnchorSystem.js +1 -2
  599. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  600. package/XR/features/WebXRControllerMovement.js +6 -7
  601. package/XR/features/WebXRControllerMovement.js.map +1 -1
  602. package/XR/features/WebXRControllerPhysics.js +17 -10
  603. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  604. package/XR/features/WebXRControllerPointerSelection.js +1 -2
  605. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  606. package/XR/features/WebXRControllerTeleportation.d.ts +1 -0
  607. package/XR/features/WebXRControllerTeleportation.js +6 -3
  608. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  609. package/XR/features/WebXRDepthSensing.js +3 -5
  610. package/XR/features/WebXRDepthSensing.js.map +1 -1
  611. package/XR/features/WebXRHandTracking.d.ts +1 -0
  612. package/XR/features/WebXRHandTracking.js +31 -28
  613. package/XR/features/WebXRHandTracking.js.map +1 -1
  614. package/XR/features/WebXRLayers.js +9 -11
  615. package/XR/features/WebXRLayers.js.map +1 -1
  616. package/XR/features/WebXRLightEstimation.js +3 -6
  617. package/XR/features/WebXRLightEstimation.js.map +1 -1
  618. package/XR/features/WebXRMeshDetector.js +2 -4
  619. package/XR/features/WebXRMeshDetector.js.map +1 -1
  620. package/XR/features/WebXRNearInteraction.js +21 -18
  621. package/XR/features/WebXRNearInteraction.js.map +1 -1
  622. package/XR/features/WebXRPlaneDetector.js +1 -2
  623. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  624. package/XR/features/WebXRRawCameraAccess.js +2 -3
  625. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  626. package/XR/features/WebXRSpaceWarp.js +1 -1
  627. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  628. package/XR/motionController/webXRAbstractMotionController.js +4 -1
  629. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  630. package/XR/native/nativeXRFrame.js +1 -2
  631. package/XR/native/nativeXRFrame.js.map +1 -1
  632. package/XR/webXRCamera.js +1 -2
  633. package/XR/webXRCamera.js.map +1 -1
  634. package/XR/webXRDefaultExperience.js +28 -6
  635. package/XR/webXRDefaultExperience.js.map +1 -1
  636. package/XR/webXRExperienceHelper.js +5 -7
  637. package/XR/webXRExperienceHelper.js.map +1 -1
  638. package/XR/webXRFeaturesManager.js +4 -1
  639. package/XR/webXRFeaturesManager.js.map +1 -1
  640. package/XR/webXRInput.js +6 -1
  641. package/XR/webXRInput.js.map +1 -1
  642. package/XR/webXRInputSource.js +1 -2
  643. package/XR/webXRInputSource.js.map +1 -1
  644. package/XR/webXRSessionManager.js +16 -29
  645. package/XR/webXRSessionManager.js.map +1 -1
  646. package/assetContainer.js +4 -1
  647. package/assetContainer.js.map +1 -1
  648. package/package.json +1 -1
  649. package/scene.js +18 -17
  650. package/scene.js.map +1 -1
@@ -69,13 +69,12 @@ export class PrePassRenderer {
69
69
  * @param prePassRenderTarget
70
70
  */
71
71
  _setRenderTarget(prePassRenderTarget) {
72
- var _a, _b;
73
72
  if (prePassRenderTarget) {
74
73
  this._currentTarget = prePassRenderTarget;
75
74
  }
76
75
  else {
77
76
  this._currentTarget = this.defaultRT;
78
- this._engine.currentRenderPassId = (_b = (_a = this._scene.activeCamera) === null || _a === void 0 ? void 0 : _a.renderPassId) !== null && _b !== void 0 ? _b : this._currentTarget.renderPassId;
77
+ this._engine.currentRenderPassId = this._scene.activeCamera?.renderPassId ?? this._currentTarget.renderPassId;
79
78
  }
80
79
  }
81
80
  /**
@@ -371,7 +370,6 @@ export class PrePassRenderer {
371
370
  return true;
372
371
  }
373
372
  _renderPostProcesses(prePassRenderTarget, faceIndex) {
374
- var _a;
375
373
  const firstPP = this._postProcessesSourceForThisPass[0];
376
374
  const outputTexture = firstPP ? firstPP.inputTexture : prePassRenderTarget.renderTargetTexture ? prePassRenderTarget.renderTargetTexture.renderTarget : null;
377
375
  // Build post process chain for this prepass post draw
@@ -381,7 +379,7 @@ export class PrePassRenderer {
381
379
  }
382
380
  // Activates and renders the chain
383
381
  if (postProcessChain.length) {
384
- this._scene.postProcessManager._prepareFrame((_a = this._currentTarget.renderTarget) === null || _a === void 0 ? void 0 : _a.texture, postProcessChain);
382
+ this._scene.postProcessManager._prepareFrame(this._currentTarget.renderTarget?.texture, postProcessChain);
385
383
  this._scene.postProcessManager.directRender(postProcessChain, outputTexture, false, faceIndex);
386
384
  }
387
385
  }
@@ -588,11 +586,10 @@ export class PrePassRenderer {
588
586
  return false;
589
587
  }
590
588
  _hasImageProcessing(postProcesses) {
591
- var _a;
592
589
  let isIPPAlreadyPresent = false;
593
590
  if (postProcesses) {
594
591
  for (let i = 0; i < postProcesses.length; i++) {
595
- if (((_a = postProcesses[i]) === null || _a === void 0 ? void 0 : _a.getClassName()) === "ImageProcessingPostProcess") {
592
+ if (postProcesses[i]?.getClassName() === "ImageProcessingPostProcess") {
596
593
  isIPPAlreadyPresent = true;
597
594
  break;
598
595
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prePassRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/prePassRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { PrePassRenderTarget } from \"../Materials/Textures/prePassRenderTarget\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Material } from \"../Materials/material\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { PrePassEffectConfiguration } from \"./prePassEffectConfiguration\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { GeometryBufferRenderer } from \"../Rendering/geometryBufferRenderer\";\r\n\r\n/**\r\n * Renders a pre pass of the scene\r\n * This means every mesh in the scene will be rendered to a render target texture\r\n * And then this texture will be composited to the rendering canvas with post processes\r\n * It is necessary for effects like subsurface scattering or deferred shading\r\n */\r\nexport class PrePassRenderer {\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"PrePassRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * To save performance, we can excluded skinned meshes from the prepass\r\n */\r\n public excludedSkinnedMesh: AbstractMesh[] = [];\r\n\r\n /**\r\n * Force material to be excluded from the prepass\r\n * Can be useful when `useGeometryBufferFallback` is set to `true`\r\n * and you don't want a material to show in the effect.\r\n */\r\n public excludedMaterials: Material[] = [];\r\n\r\n private _scene: Scene;\r\n private _engine: Engine;\r\n\r\n /**\r\n * Number of textures in the multi render target texture where the scene is directly rendered\r\n */\r\n public mrtCount: number = 0;\r\n\r\n private _mrtTypes: number[] = [];\r\n private _mrtFormats: number[] = [];\r\n private _mrtLayout: number[] = [];\r\n private _mrtNames: string[] = [];\r\n private _textureIndices: number[] = [];\r\n\r\n private _multiRenderAttachments: number[];\r\n private _defaultAttachments: number[];\r\n private _clearAttachments: number[];\r\n private _clearDepthAttachments: number[];\r\n private _generateNormalsInWorldSpace = false;\r\n\r\n /**\r\n * Indicates if the prepass renderer is generating normals in world space or camera space (default: camera space)\r\n */\r\n public get generateNormalsInWorldSpace() {\r\n return this._generateNormalsInWorldSpace;\r\n }\r\n\r\n public set generateNormalsInWorldSpace(value: boolean) {\r\n if (this._generateNormalsInWorldSpace === value) {\r\n return;\r\n }\r\n\r\n this._generateNormalsInWorldSpace = value;\r\n this._markAllMaterialsAsPrePassDirty();\r\n }\r\n\r\n /**\r\n * Returns the index of a texture in the multi render target texture array.\r\n * @param type Texture type\r\n * @returns The index\r\n */\r\n public getIndex(type: number): number {\r\n return this._textureIndices[type];\r\n }\r\n\r\n /**\r\n * How many samples are used for MSAA of the scene render target\r\n */\r\n public get samples() {\r\n return this.defaultRT.samples;\r\n }\r\n\r\n public set samples(n: number) {\r\n this.defaultRT.samples = n;\r\n }\r\n\r\n private _useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * 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)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public get useSpecificClearForDepthTexture() {\r\n return this._useSpecificClearForDepthTexture;\r\n }\r\n\r\n public set useSpecificClearForDepthTexture(value: boolean) {\r\n if (this._useSpecificClearForDepthTexture === value) {\r\n return;\r\n }\r\n\r\n this._useSpecificClearForDepthTexture = value;\r\n this._isDirty = true;\r\n }\r\n\r\n /**\r\n * Describes the types and formats of the textures used by the pre-pass renderer\r\n */\r\n public static TextureFormats = [\r\n {\r\n purpose: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Irradiance\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Position\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Velocity\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Reflectivity\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_COLOR_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Color\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n format: Constants.TEXTUREFORMAT_R,\r\n name: \"prePass_Depth\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Normal\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Albedo\",\r\n },\r\n ];\r\n\r\n private _isDirty: boolean = true;\r\n\r\n /**\r\n * The render target where the scene is directly rendered\r\n */\r\n public defaultRT: PrePassRenderTarget;\r\n\r\n /**\r\n * Configuration for prepass effects\r\n */\r\n private _effectConfigurations: PrePassEffectConfiguration[] = [];\r\n\r\n /**\r\n * @returns the prepass render target for the rendering pass.\r\n * If we are currently rendering a render target, it returns the PrePassRenderTarget\r\n * associated with that render target. Otherwise, it returns the scene default PrePassRenderTarget\r\n */\r\n public getRenderTarget(): PrePassRenderTarget {\r\n return this._currentTarget;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Managed by the scene component\r\n * @param prePassRenderTarget\r\n */\r\n public _setRenderTarget(prePassRenderTarget: Nullable<PrePassRenderTarget>): void {\r\n if (prePassRenderTarget) {\r\n this._currentTarget = prePassRenderTarget;\r\n } else {\r\n this._currentTarget = this.defaultRT;\r\n this._engine.currentRenderPassId = this._scene.activeCamera?.renderPassId ?? this._currentTarget.renderPassId;\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the currently rendered prePassRenderTarget is the one\r\n * associated with the scene.\r\n */\r\n public get currentRTisSceneRT(): boolean {\r\n return this._currentTarget === this.defaultRT;\r\n }\r\n\r\n private _geometryBuffer: Nullable<GeometryBufferRenderer>;\r\n\r\n /**\r\n * Prevents the PrePassRenderer from using the GeometryBufferRenderer as a fallback\r\n */\r\n public doNotUseGeometryRendererFallback = true;\r\n\r\n private _refreshGeometryBufferRendererLink() {\r\n if (!this.doNotUseGeometryRendererFallback) {\r\n this._geometryBuffer = this._scene.enableGeometryBufferRenderer();\r\n\r\n if (!this._geometryBuffer) {\r\n // Not supported\r\n this.doNotUseGeometryRendererFallback = true;\r\n return;\r\n }\r\n\r\n this._geometryBuffer._linkPrePassRenderer(this);\r\n } else {\r\n if (this._geometryBuffer) {\r\n this._geometryBuffer._unlinkPrePassRenderer();\r\n }\r\n this._geometryBuffer = null;\r\n this._scene.disableGeometryBufferRenderer();\r\n }\r\n }\r\n\r\n private _currentTarget: PrePassRenderTarget;\r\n\r\n /**\r\n * All the render targets generated by prepass\r\n */\r\n public renderTargets: PrePassRenderTarget[] = [];\r\n\r\n private readonly _clearColor = new Color4(0, 0, 0, 0);\r\n private readonly _clearDepthColor = new Color4(1e8, 0, 0, 1); // \"infinity\" value - depth in the depth texture is view.z, not a 0..1 value!\r\n\r\n private _enabled: boolean = false;\r\n\r\n private _needsCompositionForThisPass = false;\r\n private _postProcessesSourceForThisPass: Nullable<PostProcess>[];\r\n\r\n /**\r\n * Indicates if the prepass is enabled\r\n */\r\n public get enabled() {\r\n return this._enabled;\r\n }\r\n\r\n /**\r\n * Set to true to disable gamma transform in PrePass.\r\n * Can be useful in case you already proceed to gamma transform on a material level\r\n * and your post processes don't need to be in linear color space.\r\n */\r\n public disableGammaTransform = false;\r\n\r\n /**\r\n * Instantiates a prepass renderer\r\n * @param scene The scene\r\n */\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (this._engine._caps.textureFloat && this._engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (this._engine._caps.textureHalfFloat && this._engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n for (let i = 0; i < PrePassRenderer.TextureFormats.length; ++i) {\r\n const format = PrePassRenderer.TextureFormats[i].format;\r\n if (PrePassRenderer.TextureFormats[i].type === Constants.TEXTURETYPE_FLOAT) {\r\n PrePassRenderer.TextureFormats[Constants.PREPASS_DEPTH_TEXTURE_TYPE].type = type;\r\n if (\r\n (format === Constants.TEXTUREFORMAT_R || format === Constants.TEXTUREFORMAT_RG || format === Constants.TEXTUREFORMAT_RGBA) &&\r\n !this._engine._caps.supportFloatTexturesResolve\r\n ) {\r\n // We don't know in advance if the texture will be used as a resolve target, so we revert to half_float if the extension to resolve full float textures is not supported\r\n PrePassRenderer.TextureFormats[Constants.PREPASS_DEPTH_TEXTURE_TYPE].type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n }\r\n }\r\n\r\n PrePassRenderer._SceneComponentInitialization(this._scene);\r\n this.defaultRT = this._createRenderTarget(\"sceneprePassRT\", null);\r\n this._currentTarget = this.defaultRT;\r\n }\r\n\r\n /**\r\n * Creates a new PrePassRenderTarget\r\n * This should be the only way to instantiate a `PrePassRenderTarget`\r\n * @param name Name of the `PrePassRenderTarget`\r\n * @param renderTargetTexture RenderTarget the `PrePassRenderTarget` will be attached to.\r\n * Can be `null` if the created `PrePassRenderTarget` is attached to the scene (default framebuffer).\r\n * @internal\r\n */\r\n public _createRenderTarget(name: string, renderTargetTexture: Nullable<RenderTargetTexture>): PrePassRenderTarget {\r\n const rt = new PrePassRenderTarget(name, renderTargetTexture, { width: this._engine.getRenderWidth(), height: this._engine.getRenderHeight() }, 0, this._scene, {\r\n generateMipMaps: false,\r\n generateStencilBuffer: this._engine.isStencilEnable,\r\n defaultType: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n types: [],\r\n drawOnlyOnFirstAttachmentByDefault: true,\r\n });\r\n\r\n this.renderTargets.push(rt);\r\n\r\n if (this._enabled) {\r\n // The pre-pass renderer is already enabled, so make sure we create the render target with the correct number of textures\r\n this._update();\r\n }\r\n\r\n return rt;\r\n }\r\n\r\n /**\r\n * Indicates if rendering a prepass is supported\r\n */\r\n public get isSupported() {\r\n return this._scene.getEngine().getCaps().drawBuffersExtension;\r\n }\r\n\r\n /**\r\n * Sets the proper output textures to draw in the engine.\r\n * @param effect The effect that is drawn. It can be or not be compatible with drawing to several output textures.\r\n * @param subMesh Submesh on which the effect is applied\r\n */\r\n public bindAttachmentsForEffect(effect: Effect, subMesh: SubMesh) {\r\n const material = subMesh.getMaterial();\r\n const isPrePassCapable = material && material.isPrePassCapable;\r\n const excluded = material && this.excludedMaterials.indexOf(material) !== -1;\r\n\r\n if (this.enabled && this._currentTarget.enabled) {\r\n if (effect._multiTarget && isPrePassCapable && !excluded) {\r\n this._engine.bindAttachments(this._multiRenderAttachments);\r\n } else {\r\n if (this._engine._currentRenderTarget) {\r\n this._engine.bindAttachments(this._defaultAttachments);\r\n } else {\r\n this._engine.restoreSingleAttachment();\r\n }\r\n\r\n if (this._geometryBuffer && this.currentRTisSceneRT && !excluded) {\r\n this._geometryBuffer.renderList!.push(subMesh.getRenderingMesh());\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _reinitializeAttachments() {\r\n const multiRenderLayout = [];\r\n const clearLayout = [false];\r\n const clearDepthLayout = [false];\r\n const defaultLayout = [true];\r\n\r\n for (let i = 0; i < this.mrtCount; i++) {\r\n multiRenderLayout.push(true);\r\n\r\n if (i > 0) {\r\n if (this._useSpecificClearForDepthTexture && this._mrtLayout[i] === Constants.PREPASS_DEPTH_TEXTURE_TYPE) {\r\n clearLayout.push(false);\r\n clearDepthLayout.push(true);\r\n } else {\r\n clearLayout.push(true);\r\n clearDepthLayout.push(false);\r\n }\r\n defaultLayout.push(false);\r\n }\r\n }\r\n\r\n this._multiRenderAttachments = this._engine.buildTextureLayout(multiRenderLayout);\r\n this._clearAttachments = this._engine.buildTextureLayout(clearLayout);\r\n this._clearDepthAttachments = this._engine.buildTextureLayout(clearDepthLayout);\r\n this._defaultAttachments = this._engine.buildTextureLayout(defaultLayout);\r\n }\r\n\r\n private _resetLayout() {\r\n for (let i = 0; i < PrePassRenderer.TextureFormats.length; i++) {\r\n this._textureIndices[PrePassRenderer.TextureFormats[i].purpose] = -1;\r\n }\r\n\r\n this._textureIndices[Constants.PREPASS_COLOR_TEXTURE_TYPE] = 0;\r\n this._mrtLayout = [Constants.PREPASS_COLOR_TEXTURE_TYPE];\r\n this._mrtTypes = [PrePassRenderer.TextureFormats[Constants.PREPASS_COLOR_TEXTURE_TYPE].type];\r\n this._mrtFormats = [PrePassRenderer.TextureFormats[Constants.PREPASS_COLOR_TEXTURE_TYPE].format];\r\n this._mrtNames = [PrePassRenderer.TextureFormats[Constants.PREPASS_COLOR_TEXTURE_TYPE].name];\r\n this.mrtCount = 1;\r\n }\r\n\r\n private _updateGeometryBufferLayout() {\r\n this._refreshGeometryBufferRendererLink();\r\n\r\n if (this._geometryBuffer) {\r\n this._geometryBuffer._resetLayout();\r\n\r\n const texturesActivated = [];\r\n\r\n for (let i = 0; i < this._mrtLayout.length; i++) {\r\n texturesActivated.push(false);\r\n }\r\n\r\n this._geometryBuffer._linkInternalTexture(this.defaultRT.getInternalTexture()!);\r\n\r\n const matches = [\r\n {\r\n prePassConstant: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.DEPTH_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.NORMAL_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.POSITION_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE,\r\n },\r\n ];\r\n\r\n // replace textures in the geometryBuffer RT\r\n for (let i = 0; i < matches.length; i++) {\r\n const index = this._mrtLayout.indexOf(matches[i].prePassConstant);\r\n if (index !== -1) {\r\n this._geometryBuffer._forceTextureType(matches[i].geometryBufferConstant, index);\r\n texturesActivated[index] = true;\r\n }\r\n }\r\n\r\n this._geometryBuffer._setAttachments(this._engine.buildTextureLayout(texturesActivated));\r\n }\r\n }\r\n\r\n /**\r\n * Restores attachments for single texture draw.\r\n */\r\n public restoreAttachments() {\r\n if (this.enabled && this._currentTarget.enabled && this._defaultAttachments) {\r\n if (this._engine._currentRenderTarget) {\r\n this._engine.bindAttachments(this._defaultAttachments);\r\n } else {\r\n this._engine.restoreSingleAttachment();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _beforeDraw(camera?: Camera, faceIndex?: number, layer?: number) {\r\n // const previousEnabled = this._enabled && this._currentTarget.enabled;\r\n\r\n if (this._isDirty) {\r\n this._update();\r\n }\r\n\r\n if (!this._enabled || !this._currentTarget.enabled) {\r\n return;\r\n }\r\n\r\n if (this._geometryBuffer) {\r\n this._geometryBuffer.renderList = [];\r\n }\r\n\r\n this._setupOutputForThisPass(this._currentTarget, camera);\r\n }\r\n\r\n private _prepareFrame(prePassRenderTarget: PrePassRenderTarget, faceIndex?: number, layer?: number) {\r\n if (prePassRenderTarget.renderTargetTexture) {\r\n prePassRenderTarget.renderTargetTexture._prepareFrame(this._scene, faceIndex, layer, prePassRenderTarget.renderTargetTexture.useCameraPostProcesses);\r\n } else if (this._postProcessesSourceForThisPass.length) {\r\n this._scene.postProcessManager._prepareFrame();\r\n } else {\r\n this._engine.restoreDefaultFramebuffer();\r\n }\r\n }\r\n\r\n /**\r\n * Sets an intermediary texture between prepass and postprocesses. This texture\r\n * will be used as input for post processes\r\n * @param rt The render target texture to use\r\n * @returns true if there are postprocesses that will use this texture,\r\n * false if there is no postprocesses - and the function has no effect\r\n */\r\n public setCustomOutput(rt: RenderTargetTexture) {\r\n const firstPP = this._postProcessesSourceForThisPass[0];\r\n if (!firstPP) {\r\n return false;\r\n }\r\n\r\n firstPP.inputTexture = rt.renderTarget!;\r\n\r\n return true;\r\n }\r\n\r\n private _renderPostProcesses(prePassRenderTarget: PrePassRenderTarget, faceIndex?: number) {\r\n const firstPP = this._postProcessesSourceForThisPass[0];\r\n const outputTexture = firstPP ? firstPP.inputTexture : prePassRenderTarget.renderTargetTexture ? prePassRenderTarget.renderTargetTexture.renderTarget : null;\r\n\r\n // Build post process chain for this prepass post draw\r\n let postProcessChain = this._currentTarget._beforeCompositionPostProcesses;\r\n\r\n if (this._needsCompositionForThisPass) {\r\n postProcessChain = postProcessChain.concat([this._currentTarget.imageProcessingPostProcess]);\r\n }\r\n\r\n // Activates and renders the chain\r\n if (postProcessChain.length) {\r\n this._scene.postProcessManager._prepareFrame(this._currentTarget.renderTarget?.texture, postProcessChain);\r\n this._scene.postProcessManager.directRender(postProcessChain, outputTexture, false, faceIndex);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _afterDraw(faceIndex?: number, layer?: number) {\r\n if (this._enabled && this._currentTarget.enabled) {\r\n this._prepareFrame(this._currentTarget, faceIndex, layer);\r\n this._renderPostProcesses(this._currentTarget, faceIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Clears the current prepass render target (in the sense of settings pixels to the scene clear color value)\r\n * @internal\r\n */\r\n public _clear() {\r\n if (this._enabled && this._currentTarget.enabled) {\r\n this._bindFrameBuffer();\r\n\r\n // Clearing other attachment with 0 on all other attachments\r\n this._engine.bindAttachments(this._clearAttachments);\r\n this._engine.clear(this._clearColor, true, false, false);\r\n if (this._useSpecificClearForDepthTexture) {\r\n this._engine.bindAttachments(this._clearDepthAttachments);\r\n this._engine.clear(this._clearDepthColor, true, false, false);\r\n }\r\n // Regular clear color with the scene clear color of the 1st attachment\r\n this._engine.bindAttachments(this._defaultAttachments);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _bindFrameBuffer() {\r\n if (this._enabled && this._currentTarget.enabled) {\r\n this._currentTarget._checkSize();\r\n const internalTexture = this._currentTarget.renderTarget;\r\n if (internalTexture) {\r\n this._engine.bindFramebuffer(internalTexture);\r\n }\r\n }\r\n }\r\n\r\n private _setEnabled(enabled: boolean) {\r\n this._enabled = enabled;\r\n }\r\n\r\n private _setRenderTargetEnabled(prePassRenderTarget: PrePassRenderTarget, enabled: boolean) {\r\n prePassRenderTarget.enabled = enabled;\r\n if (!enabled) {\r\n this._unlinkInternalTexture(prePassRenderTarget);\r\n }\r\n }\r\n\r\n /**\r\n * Adds an effect configuration to the prepass render target.\r\n * If an effect has already been added, it won't add it twice and will return the configuration\r\n * already present.\r\n * @param cfg the effect configuration\r\n * @returns the effect configuration now used by the prepass\r\n */\r\n public addEffectConfiguration(cfg: PrePassEffectConfiguration): PrePassEffectConfiguration {\r\n // Do not add twice\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].name === cfg.name) {\r\n return this._effectConfigurations[i];\r\n }\r\n }\r\n\r\n this._effectConfigurations.push(cfg);\r\n return cfg;\r\n }\r\n\r\n /**\r\n * Retrieves an effect configuration by name\r\n * @param name the name of the effect configuration\r\n * @returns the effect configuration, or null if not present\r\n */\r\n public getEffectConfiguration(name: string): Nullable<PrePassEffectConfiguration> {\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].name === name) {\r\n return this._effectConfigurations[i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _enable() {\r\n const previousMrtCount = this.mrtCount;\r\n\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].enabled) {\r\n this._enableTextures(this._effectConfigurations[i].texturesRequired);\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.renderTargets.length; i++) {\r\n if (this.mrtCount !== previousMrtCount || this.renderTargets[i].count !== this.mrtCount) {\r\n this.renderTargets[i].updateCount(this.mrtCount, { types: this._mrtTypes, formats: this._mrtFormats }, this._mrtNames.concat(\"prePass_DepthBuffer\"));\r\n }\r\n\r\n this.renderTargets[i]._resetPostProcessChain();\r\n\r\n for (let j = 0; j < this._effectConfigurations.length; j++) {\r\n if (this._effectConfigurations[j].enabled) {\r\n // TODO : subsurface scattering has 1 scene-wide effect configuration\r\n // solution : do not stock postProcess on effectConfiguration, but in the prepassRenderTarget (hashmap configuration => postProcess)\r\n // And call createPostProcess whenever the post process does not exist in the RT\r\n if (!this._effectConfigurations[j].postProcess && this._effectConfigurations[j].createPostProcess) {\r\n this._effectConfigurations[j].createPostProcess!();\r\n }\r\n\r\n if (this._effectConfigurations[j].postProcess) {\r\n this.renderTargets[i]._beforeCompositionPostProcesses.push(this._effectConfigurations[j].postProcess!);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._reinitializeAttachments();\r\n this._setEnabled(true);\r\n this._updateGeometryBufferLayout();\r\n }\r\n\r\n private _disable() {\r\n this._setEnabled(false);\r\n\r\n for (let i = 0; i < this.renderTargets.length; i++) {\r\n this._setRenderTargetEnabled(this.renderTargets[i], false);\r\n }\r\n\r\n this._resetLayout();\r\n\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n this._effectConfigurations[i].enabled = false;\r\n }\r\n }\r\n\r\n private _getPostProcessesSource(prePassRenderTarget: PrePassRenderTarget, camera?: Camera): Nullable<PostProcess>[] {\r\n if (camera) {\r\n return camera._postProcesses;\r\n } else if (prePassRenderTarget.renderTargetTexture) {\r\n if (prePassRenderTarget.renderTargetTexture.useCameraPostProcesses) {\r\n const camera = prePassRenderTarget.renderTargetTexture.activeCamera ? prePassRenderTarget.renderTargetTexture.activeCamera : this._scene.activeCamera;\r\n return camera ? camera._postProcesses : [];\r\n } else if (prePassRenderTarget.renderTargetTexture.postProcesses) {\r\n return prePassRenderTarget.renderTargetTexture.postProcesses;\r\n } else {\r\n return [];\r\n }\r\n } else {\r\n return this._scene.activeCamera ? this._scene.activeCamera._postProcesses : [];\r\n }\r\n }\r\n\r\n private _setupOutputForThisPass(prePassRenderTarget: PrePassRenderTarget, camera?: Camera) {\r\n // Order is : draw ===> prePassRenderTarget._postProcesses ==> ipp ==> camera._postProcesses\r\n const secondaryCamera = camera && this._scene.activeCameras && !!this._scene.activeCameras.length && this._scene.activeCameras.indexOf(camera) !== 0;\r\n this._postProcessesSourceForThisPass = this._getPostProcessesSource(prePassRenderTarget, camera);\r\n this._postProcessesSourceForThisPass = this._postProcessesSourceForThisPass.filter((pp) => {\r\n return pp != null;\r\n });\r\n this._scene.autoClear = true;\r\n\r\n const cameraHasImageProcessing = this._hasImageProcessing(this._postProcessesSourceForThisPass);\r\n this._needsCompositionForThisPass = !cameraHasImageProcessing && !this.disableGammaTransform && this._needsImageProcessing() && !secondaryCamera;\r\n\r\n const firstCameraPP = this._getFirstPostProcess(this._postProcessesSourceForThisPass);\r\n const firstPrePassPP = prePassRenderTarget._beforeCompositionPostProcesses && prePassRenderTarget._beforeCompositionPostProcesses[0];\r\n let firstPP = null;\r\n\r\n // Setting the scene-wide post process configuration\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = this._needsCompositionForThisPass || cameraHasImageProcessing;\r\n\r\n // Create composition effect if needed\r\n if (this._needsCompositionForThisPass && !prePassRenderTarget.imageProcessingPostProcess) {\r\n prePassRenderTarget._createCompositionEffect();\r\n }\r\n\r\n // Setting the prePassRenderTarget as input texture of the first PP\r\n if (firstPrePassPP) {\r\n firstPP = firstPrePassPP;\r\n } else if (this._needsCompositionForThisPass) {\r\n firstPP = prePassRenderTarget.imageProcessingPostProcess;\r\n } else if (firstCameraPP) {\r\n firstPP = firstCameraPP;\r\n }\r\n\r\n this._bindFrameBuffer();\r\n this._linkInternalTexture(prePassRenderTarget, firstPP);\r\n }\r\n\r\n private _linkInternalTexture(prePassRenderTarget: PrePassRenderTarget, postProcess: Nullable<PostProcess>) {\r\n if (postProcess) {\r\n postProcess.autoClear = false;\r\n postProcess.inputTexture = prePassRenderTarget.renderTarget!;\r\n }\r\n\r\n if (prePassRenderTarget._outputPostProcess !== postProcess) {\r\n if (prePassRenderTarget._outputPostProcess) {\r\n this._unlinkInternalTexture(prePassRenderTarget);\r\n }\r\n prePassRenderTarget._outputPostProcess = postProcess;\r\n }\r\n\r\n if (prePassRenderTarget._internalTextureDirty) {\r\n this._updateGeometryBufferLayout();\r\n prePassRenderTarget._internalTextureDirty = false;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _unlinkInternalTexture(prePassRenderTarget: PrePassRenderTarget) {\r\n if (prePassRenderTarget._outputPostProcess) {\r\n prePassRenderTarget._outputPostProcess.autoClear = true;\r\n prePassRenderTarget._outputPostProcess.restoreDefaultInputTexture();\r\n prePassRenderTarget._outputPostProcess = null;\r\n }\r\n }\r\n\r\n private _needsImageProcessing(): boolean {\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].enabled && this._effectConfigurations[i].needsImageProcessing) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _hasImageProcessing(postProcesses: Nullable<PostProcess>[]): boolean {\r\n let isIPPAlreadyPresent = false;\r\n if (postProcesses) {\r\n for (let i = 0; i < postProcesses.length; i++) {\r\n if (postProcesses[i]?.getClassName() === \"ImageProcessingPostProcess\") {\r\n isIPPAlreadyPresent = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return isIPPAlreadyPresent;\r\n }\r\n\r\n /**\r\n * Internal, gets the first post proces.\r\n * @param postProcesses\r\n * @returns the first post process to be run on this camera.\r\n */\r\n private _getFirstPostProcess(postProcesses: Nullable<PostProcess>[]): Nullable<PostProcess> {\r\n for (let ppIndex = 0; ppIndex < postProcesses.length; ppIndex++) {\r\n if (postProcesses[ppIndex] !== null) {\r\n return postProcesses[ppIndex];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Marks the prepass renderer as dirty, triggering a check if the prepass is necessary for the next rendering.\r\n */\r\n public markAsDirty() {\r\n this._isDirty = true;\r\n }\r\n\r\n /**\r\n * Enables a texture on the MultiRenderTarget for prepass\r\n * @param types\r\n */\r\n private _enableTextures(types: number[]) {\r\n // For velocity : enable storage of previous matrices for instances\r\n this._scene.needsPreviousWorldMatrices = false;\r\n\r\n for (let i = 0; i < types.length; i++) {\r\n const type = types[i];\r\n\r\n if (this._textureIndices[type] === -1) {\r\n this._textureIndices[type] = this._mrtLayout.length;\r\n this._mrtLayout.push(type);\r\n\r\n this._mrtTypes.push(PrePassRenderer.TextureFormats[type].type);\r\n this._mrtFormats.push(PrePassRenderer.TextureFormats[type].format);\r\n this._mrtNames.push(PrePassRenderer.TextureFormats[type].name);\r\n this.mrtCount++;\r\n }\r\n\r\n if (type === Constants.PREPASS_VELOCITY_TEXTURE_TYPE) {\r\n this._scene.needsPreviousWorldMatrices = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Makes sure that the prepass renderer is up to date if it has been dirtified.\r\n */\r\n public update() {\r\n if (this._isDirty) {\r\n this._update();\r\n }\r\n }\r\n\r\n private _update() {\r\n this._disable();\r\n let enablePrePass = false;\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n\r\n if (this._scene._depthPeelingRenderer && this._scene.useOrderIndependentTransparency) {\r\n this._scene._depthPeelingRenderer.setPrePassRenderer(this);\r\n enablePrePass = true;\r\n }\r\n\r\n for (let i = 0; i < this._scene.materials.length; i++) {\r\n if (this._scene.materials[i].setPrePassRenderer(this)) {\r\n enablePrePass = true;\r\n }\r\n }\r\n\r\n if (enablePrePass) {\r\n this._setRenderTargetEnabled(this.defaultRT, true);\r\n }\r\n\r\n let postProcesses;\r\n\r\n for (let i = 0; i < this.renderTargets.length; i++) {\r\n if (this.renderTargets[i].renderTargetTexture) {\r\n postProcesses = this._getPostProcessesSource(this.renderTargets[i]);\r\n } else {\r\n const camera = this._scene.activeCamera;\r\n if (!camera) {\r\n continue;\r\n }\r\n\r\n postProcesses = camera._postProcesses;\r\n }\r\n\r\n if (!postProcesses) {\r\n continue;\r\n }\r\n\r\n postProcesses = <Nullable<PostProcess[]>>postProcesses.filter((pp) => {\r\n return pp != null;\r\n });\r\n\r\n if (postProcesses) {\r\n for (let j = 0; j < postProcesses.length; j++) {\r\n if (postProcesses[j].setPrePassRenderer(this)) {\r\n this._setRenderTargetEnabled(this.renderTargets[i], true);\r\n enablePrePass = true;\r\n }\r\n }\r\n\r\n if (this._hasImageProcessing(postProcesses)) {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n }\r\n\r\n this._markAllMaterialsAsPrePassDirty();\r\n this._isDirty = false;\r\n\r\n if (enablePrePass) {\r\n this._enable();\r\n }\r\n }\r\n\r\n private _markAllMaterialsAsPrePassDirty() {\r\n const materials = this._scene.materials;\r\n\r\n for (let i = 0; i < materials.length; i++) {\r\n materials[i].markAsDirty(Material.PrePassDirtyFlag);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the prepass renderer.\r\n */\r\n public dispose() {\r\n for (let i = this.renderTargets.length - 1; i >= 0; i--) {\r\n this.renderTargets[i].dispose();\r\n }\r\n\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].dispose) {\r\n this._effectConfigurations[i].dispose!();\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"prePassRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/prePassRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { PrePassRenderTarget } from \"../Materials/Textures/prePassRenderTarget\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Material } from \"../Materials/material\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { PrePassEffectConfiguration } from \"./prePassEffectConfiguration\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { GeometryBufferRenderer } from \"../Rendering/geometryBufferRenderer\";\r\n\r\n/**\r\n * Renders a pre pass of the scene\r\n * This means every mesh in the scene will be rendered to a render target texture\r\n * And then this texture will be composited to the rendering canvas with post processes\r\n * It is necessary for effects like subsurface scattering or deferred shading\r\n */\r\nexport class PrePassRenderer {\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"PrePassRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * To save performance, we can excluded skinned meshes from the prepass\r\n */\r\n public excludedSkinnedMesh: AbstractMesh[] = [];\r\n\r\n /**\r\n * Force material to be excluded from the prepass\r\n * Can be useful when `useGeometryBufferFallback` is set to `true`\r\n * and you don't want a material to show in the effect.\r\n */\r\n public excludedMaterials: Material[] = [];\r\n\r\n private _scene: Scene;\r\n private _engine: Engine;\r\n\r\n /**\r\n * Number of textures in the multi render target texture where the scene is directly rendered\r\n */\r\n public mrtCount: number = 0;\r\n\r\n private _mrtTypes: number[] = [];\r\n private _mrtFormats: number[] = [];\r\n private _mrtLayout: number[] = [];\r\n private _mrtNames: string[] = [];\r\n private _textureIndices: number[] = [];\r\n\r\n private _multiRenderAttachments: number[];\r\n private _defaultAttachments: number[];\r\n private _clearAttachments: number[];\r\n private _clearDepthAttachments: number[];\r\n private _generateNormalsInWorldSpace = false;\r\n\r\n /**\r\n * Indicates if the prepass renderer is generating normals in world space or camera space (default: camera space)\r\n */\r\n public get generateNormalsInWorldSpace() {\r\n return this._generateNormalsInWorldSpace;\r\n }\r\n\r\n public set generateNormalsInWorldSpace(value: boolean) {\r\n if (this._generateNormalsInWorldSpace === value) {\r\n return;\r\n }\r\n\r\n this._generateNormalsInWorldSpace = value;\r\n this._markAllMaterialsAsPrePassDirty();\r\n }\r\n\r\n /**\r\n * Returns the index of a texture in the multi render target texture array.\r\n * @param type Texture type\r\n * @returns The index\r\n */\r\n public getIndex(type: number): number {\r\n return this._textureIndices[type];\r\n }\r\n\r\n /**\r\n * How many samples are used for MSAA of the scene render target\r\n */\r\n public get samples() {\r\n return this.defaultRT.samples;\r\n }\r\n\r\n public set samples(n: number) {\r\n this.defaultRT.samples = n;\r\n }\r\n\r\n private _useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * 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)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public get useSpecificClearForDepthTexture() {\r\n return this._useSpecificClearForDepthTexture;\r\n }\r\n\r\n public set useSpecificClearForDepthTexture(value: boolean) {\r\n if (this._useSpecificClearForDepthTexture === value) {\r\n return;\r\n }\r\n\r\n this._useSpecificClearForDepthTexture = value;\r\n this._isDirty = true;\r\n }\r\n\r\n /**\r\n * Describes the types and formats of the textures used by the pre-pass renderer\r\n */\r\n public static TextureFormats = [\r\n {\r\n purpose: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Irradiance\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Position\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Velocity\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Reflectivity\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_COLOR_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Color\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n format: Constants.TEXTUREFORMAT_R,\r\n name: \"prePass_Depth\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_HALF_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Normal\",\r\n },\r\n {\r\n purpose: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n name: \"prePass_Albedo\",\r\n },\r\n ];\r\n\r\n private _isDirty: boolean = true;\r\n\r\n /**\r\n * The render target where the scene is directly rendered\r\n */\r\n public defaultRT: PrePassRenderTarget;\r\n\r\n /**\r\n * Configuration for prepass effects\r\n */\r\n private _effectConfigurations: PrePassEffectConfiguration[] = [];\r\n\r\n /**\r\n * @returns the prepass render target for the rendering pass.\r\n * If we are currently rendering a render target, it returns the PrePassRenderTarget\r\n * associated with that render target. Otherwise, it returns the scene default PrePassRenderTarget\r\n */\r\n public getRenderTarget(): PrePassRenderTarget {\r\n return this._currentTarget;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Managed by the scene component\r\n * @param prePassRenderTarget\r\n */\r\n public _setRenderTarget(prePassRenderTarget: Nullable<PrePassRenderTarget>): void {\r\n if (prePassRenderTarget) {\r\n this._currentTarget = prePassRenderTarget;\r\n } else {\r\n this._currentTarget = this.defaultRT;\r\n this._engine.currentRenderPassId = this._scene.activeCamera?.renderPassId ?? this._currentTarget.renderPassId;\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the currently rendered prePassRenderTarget is the one\r\n * associated with the scene.\r\n */\r\n public get currentRTisSceneRT(): boolean {\r\n return this._currentTarget === this.defaultRT;\r\n }\r\n\r\n private _geometryBuffer: Nullable<GeometryBufferRenderer>;\r\n\r\n /**\r\n * Prevents the PrePassRenderer from using the GeometryBufferRenderer as a fallback\r\n */\r\n public doNotUseGeometryRendererFallback = true;\r\n\r\n private _refreshGeometryBufferRendererLink() {\r\n if (!this.doNotUseGeometryRendererFallback) {\r\n this._geometryBuffer = this._scene.enableGeometryBufferRenderer();\r\n\r\n if (!this._geometryBuffer) {\r\n // Not supported\r\n this.doNotUseGeometryRendererFallback = true;\r\n return;\r\n }\r\n\r\n this._geometryBuffer._linkPrePassRenderer(this);\r\n } else {\r\n if (this._geometryBuffer) {\r\n this._geometryBuffer._unlinkPrePassRenderer();\r\n }\r\n this._geometryBuffer = null;\r\n this._scene.disableGeometryBufferRenderer();\r\n }\r\n }\r\n\r\n private _currentTarget: PrePassRenderTarget;\r\n\r\n /**\r\n * All the render targets generated by prepass\r\n */\r\n public renderTargets: PrePassRenderTarget[] = [];\r\n\r\n private readonly _clearColor = new Color4(0, 0, 0, 0);\r\n private readonly _clearDepthColor = new Color4(1e8, 0, 0, 1); // \"infinity\" value - depth in the depth texture is view.z, not a 0..1 value!\r\n\r\n private _enabled: boolean = false;\r\n\r\n private _needsCompositionForThisPass = false;\r\n private _postProcessesSourceForThisPass: Nullable<PostProcess>[];\r\n\r\n /**\r\n * Indicates if the prepass is enabled\r\n */\r\n public get enabled() {\r\n return this._enabled;\r\n }\r\n\r\n /**\r\n * Set to true to disable gamma transform in PrePass.\r\n * Can be useful in case you already proceed to gamma transform on a material level\r\n * and your post processes don't need to be in linear color space.\r\n */\r\n public disableGammaTransform = false;\r\n\r\n /**\r\n * Instantiates a prepass renderer\r\n * @param scene The scene\r\n */\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (this._engine._caps.textureFloat && this._engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (this._engine._caps.textureHalfFloat && this._engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n for (let i = 0; i < PrePassRenderer.TextureFormats.length; ++i) {\r\n const format = PrePassRenderer.TextureFormats[i].format;\r\n if (PrePassRenderer.TextureFormats[i].type === Constants.TEXTURETYPE_FLOAT) {\r\n PrePassRenderer.TextureFormats[Constants.PREPASS_DEPTH_TEXTURE_TYPE].type = type;\r\n if (\r\n (format === Constants.TEXTUREFORMAT_R || format === Constants.TEXTUREFORMAT_RG || format === Constants.TEXTUREFORMAT_RGBA) &&\r\n !this._engine._caps.supportFloatTexturesResolve\r\n ) {\r\n // We don't know in advance if the texture will be used as a resolve target, so we revert to half_float if the extension to resolve full float textures is not supported\r\n PrePassRenderer.TextureFormats[Constants.PREPASS_DEPTH_TEXTURE_TYPE].type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n }\r\n }\r\n\r\n PrePassRenderer._SceneComponentInitialization(this._scene);\r\n this.defaultRT = this._createRenderTarget(\"sceneprePassRT\", null);\r\n this._currentTarget = this.defaultRT;\r\n }\r\n\r\n /**\r\n * Creates a new PrePassRenderTarget\r\n * This should be the only way to instantiate a `PrePassRenderTarget`\r\n * @param name Name of the `PrePassRenderTarget`\r\n * @param renderTargetTexture RenderTarget the `PrePassRenderTarget` will be attached to.\r\n * Can be `null` if the created `PrePassRenderTarget` is attached to the scene (default framebuffer).\r\n * @internal\r\n */\r\n public _createRenderTarget(name: string, renderTargetTexture: Nullable<RenderTargetTexture>): PrePassRenderTarget {\r\n const rt = new PrePassRenderTarget(name, renderTargetTexture, { width: this._engine.getRenderWidth(), height: this._engine.getRenderHeight() }, 0, this._scene, {\r\n generateMipMaps: false,\r\n generateStencilBuffer: this._engine.isStencilEnable,\r\n defaultType: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n types: [],\r\n drawOnlyOnFirstAttachmentByDefault: true,\r\n });\r\n\r\n this.renderTargets.push(rt);\r\n\r\n if (this._enabled) {\r\n // The pre-pass renderer is already enabled, so make sure we create the render target with the correct number of textures\r\n this._update();\r\n }\r\n\r\n return rt;\r\n }\r\n\r\n /**\r\n * Indicates if rendering a prepass is supported\r\n */\r\n public get isSupported() {\r\n return this._scene.getEngine().getCaps().drawBuffersExtension;\r\n }\r\n\r\n /**\r\n * Sets the proper output textures to draw in the engine.\r\n * @param effect The effect that is drawn. It can be or not be compatible with drawing to several output textures.\r\n * @param subMesh Submesh on which the effect is applied\r\n */\r\n public bindAttachmentsForEffect(effect: Effect, subMesh: SubMesh) {\r\n const material = subMesh.getMaterial();\r\n const isPrePassCapable = material && material.isPrePassCapable;\r\n const excluded = material && this.excludedMaterials.indexOf(material) !== -1;\r\n\r\n if (this.enabled && this._currentTarget.enabled) {\r\n if (effect._multiTarget && isPrePassCapable && !excluded) {\r\n this._engine.bindAttachments(this._multiRenderAttachments);\r\n } else {\r\n if (this._engine._currentRenderTarget) {\r\n this._engine.bindAttachments(this._defaultAttachments);\r\n } else {\r\n this._engine.restoreSingleAttachment();\r\n }\r\n\r\n if (this._geometryBuffer && this.currentRTisSceneRT && !excluded) {\r\n this._geometryBuffer.renderList!.push(subMesh.getRenderingMesh());\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _reinitializeAttachments() {\r\n const multiRenderLayout = [];\r\n const clearLayout = [false];\r\n const clearDepthLayout = [false];\r\n const defaultLayout = [true];\r\n\r\n for (let i = 0; i < this.mrtCount; i++) {\r\n multiRenderLayout.push(true);\r\n\r\n if (i > 0) {\r\n if (this._useSpecificClearForDepthTexture && this._mrtLayout[i] === Constants.PREPASS_DEPTH_TEXTURE_TYPE) {\r\n clearLayout.push(false);\r\n clearDepthLayout.push(true);\r\n } else {\r\n clearLayout.push(true);\r\n clearDepthLayout.push(false);\r\n }\r\n defaultLayout.push(false);\r\n }\r\n }\r\n\r\n this._multiRenderAttachments = this._engine.buildTextureLayout(multiRenderLayout);\r\n this._clearAttachments = this._engine.buildTextureLayout(clearLayout);\r\n this._clearDepthAttachments = this._engine.buildTextureLayout(clearDepthLayout);\r\n this._defaultAttachments = this._engine.buildTextureLayout(defaultLayout);\r\n }\r\n\r\n private _resetLayout() {\r\n for (let i = 0; i < PrePassRenderer.TextureFormats.length; i++) {\r\n this._textureIndices[PrePassRenderer.TextureFormats[i].purpose] = -1;\r\n }\r\n\r\n this._textureIndices[Constants.PREPASS_COLOR_TEXTURE_TYPE] = 0;\r\n this._mrtLayout = [Constants.PREPASS_COLOR_TEXTURE_TYPE];\r\n this._mrtTypes = [PrePassRenderer.TextureFormats[Constants.PREPASS_COLOR_TEXTURE_TYPE].type];\r\n this._mrtFormats = [PrePassRenderer.TextureFormats[Constants.PREPASS_COLOR_TEXTURE_TYPE].format];\r\n this._mrtNames = [PrePassRenderer.TextureFormats[Constants.PREPASS_COLOR_TEXTURE_TYPE].name];\r\n this.mrtCount = 1;\r\n }\r\n\r\n private _updateGeometryBufferLayout() {\r\n this._refreshGeometryBufferRendererLink();\r\n\r\n if (this._geometryBuffer) {\r\n this._geometryBuffer._resetLayout();\r\n\r\n const texturesActivated = [];\r\n\r\n for (let i = 0; i < this._mrtLayout.length; i++) {\r\n texturesActivated.push(false);\r\n }\r\n\r\n this._geometryBuffer._linkInternalTexture(this.defaultRT.getInternalTexture()!);\r\n\r\n const matches = [\r\n {\r\n prePassConstant: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.DEPTH_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.NORMAL_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.POSITION_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE,\r\n },\r\n {\r\n prePassConstant: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n geometryBufferConstant: GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE,\r\n },\r\n ];\r\n\r\n // replace textures in the geometryBuffer RT\r\n for (let i = 0; i < matches.length; i++) {\r\n const index = this._mrtLayout.indexOf(matches[i].prePassConstant);\r\n if (index !== -1) {\r\n this._geometryBuffer._forceTextureType(matches[i].geometryBufferConstant, index);\r\n texturesActivated[index] = true;\r\n }\r\n }\r\n\r\n this._geometryBuffer._setAttachments(this._engine.buildTextureLayout(texturesActivated));\r\n }\r\n }\r\n\r\n /**\r\n * Restores attachments for single texture draw.\r\n */\r\n public restoreAttachments() {\r\n if (this.enabled && this._currentTarget.enabled && this._defaultAttachments) {\r\n if (this._engine._currentRenderTarget) {\r\n this._engine.bindAttachments(this._defaultAttachments);\r\n } else {\r\n this._engine.restoreSingleAttachment();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _beforeDraw(camera?: Camera, faceIndex?: number, layer?: number) {\r\n // const previousEnabled = this._enabled && this._currentTarget.enabled;\r\n\r\n if (this._isDirty) {\r\n this._update();\r\n }\r\n\r\n if (!this._enabled || !this._currentTarget.enabled) {\r\n return;\r\n }\r\n\r\n if (this._geometryBuffer) {\r\n this._geometryBuffer.renderList = [];\r\n }\r\n\r\n this._setupOutputForThisPass(this._currentTarget, camera);\r\n }\r\n\r\n private _prepareFrame(prePassRenderTarget: PrePassRenderTarget, faceIndex?: number, layer?: number) {\r\n if (prePassRenderTarget.renderTargetTexture) {\r\n prePassRenderTarget.renderTargetTexture._prepareFrame(this._scene, faceIndex, layer, prePassRenderTarget.renderTargetTexture.useCameraPostProcesses);\r\n } else if (this._postProcessesSourceForThisPass.length) {\r\n this._scene.postProcessManager._prepareFrame();\r\n } else {\r\n this._engine.restoreDefaultFramebuffer();\r\n }\r\n }\r\n\r\n /**\r\n * Sets an intermediary texture between prepass and postprocesses. This texture\r\n * will be used as input for post processes\r\n * @param rt The render target texture to use\r\n * @returns true if there are postprocesses that will use this texture,\r\n * false if there is no postprocesses - and the function has no effect\r\n */\r\n public setCustomOutput(rt: RenderTargetTexture) {\r\n const firstPP = this._postProcessesSourceForThisPass[0];\r\n if (!firstPP) {\r\n return false;\r\n }\r\n\r\n firstPP.inputTexture = rt.renderTarget!;\r\n\r\n return true;\r\n }\r\n\r\n private _renderPostProcesses(prePassRenderTarget: PrePassRenderTarget, faceIndex?: number) {\r\n const firstPP = this._postProcessesSourceForThisPass[0];\r\n const outputTexture = firstPP ? firstPP.inputTexture : prePassRenderTarget.renderTargetTexture ? prePassRenderTarget.renderTargetTexture.renderTarget : null;\r\n\r\n // Build post process chain for this prepass post draw\r\n let postProcessChain = this._currentTarget._beforeCompositionPostProcesses;\r\n\r\n if (this._needsCompositionForThisPass) {\r\n postProcessChain = postProcessChain.concat([this._currentTarget.imageProcessingPostProcess]);\r\n }\r\n\r\n // Activates and renders the chain\r\n if (postProcessChain.length) {\r\n this._scene.postProcessManager._prepareFrame(this._currentTarget.renderTarget?.texture, postProcessChain);\r\n this._scene.postProcessManager.directRender(postProcessChain, outputTexture, false, faceIndex);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _afterDraw(faceIndex?: number, layer?: number) {\r\n if (this._enabled && this._currentTarget.enabled) {\r\n this._prepareFrame(this._currentTarget, faceIndex, layer);\r\n this._renderPostProcesses(this._currentTarget, faceIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Clears the current prepass render target (in the sense of settings pixels to the scene clear color value)\r\n * @internal\r\n */\r\n public _clear() {\r\n if (this._enabled && this._currentTarget.enabled) {\r\n this._bindFrameBuffer();\r\n\r\n // Clearing other attachment with 0 on all other attachments\r\n this._engine.bindAttachments(this._clearAttachments);\r\n this._engine.clear(this._clearColor, true, false, false);\r\n if (this._useSpecificClearForDepthTexture) {\r\n this._engine.bindAttachments(this._clearDepthAttachments);\r\n this._engine.clear(this._clearDepthColor, true, false, false);\r\n }\r\n // Regular clear color with the scene clear color of the 1st attachment\r\n this._engine.bindAttachments(this._defaultAttachments);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _bindFrameBuffer() {\r\n if (this._enabled && this._currentTarget.enabled) {\r\n this._currentTarget._checkSize();\r\n const internalTexture = this._currentTarget.renderTarget;\r\n if (internalTexture) {\r\n this._engine.bindFramebuffer(internalTexture);\r\n }\r\n }\r\n }\r\n\r\n private _setEnabled(enabled: boolean) {\r\n this._enabled = enabled;\r\n }\r\n\r\n private _setRenderTargetEnabled(prePassRenderTarget: PrePassRenderTarget, enabled: boolean) {\r\n prePassRenderTarget.enabled = enabled;\r\n if (!enabled) {\r\n this._unlinkInternalTexture(prePassRenderTarget);\r\n }\r\n }\r\n\r\n /**\r\n * Adds an effect configuration to the prepass render target.\r\n * If an effect has already been added, it won't add it twice and will return the configuration\r\n * already present.\r\n * @param cfg the effect configuration\r\n * @returns the effect configuration now used by the prepass\r\n */\r\n public addEffectConfiguration(cfg: PrePassEffectConfiguration): PrePassEffectConfiguration {\r\n // Do not add twice\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].name === cfg.name) {\r\n return this._effectConfigurations[i];\r\n }\r\n }\r\n\r\n this._effectConfigurations.push(cfg);\r\n return cfg;\r\n }\r\n\r\n /**\r\n * Retrieves an effect configuration by name\r\n * @param name the name of the effect configuration\r\n * @returns the effect configuration, or null if not present\r\n */\r\n public getEffectConfiguration(name: string): Nullable<PrePassEffectConfiguration> {\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].name === name) {\r\n return this._effectConfigurations[i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _enable() {\r\n const previousMrtCount = this.mrtCount;\r\n\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].enabled) {\r\n this._enableTextures(this._effectConfigurations[i].texturesRequired);\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.renderTargets.length; i++) {\r\n if (this.mrtCount !== previousMrtCount || this.renderTargets[i].count !== this.mrtCount) {\r\n this.renderTargets[i].updateCount(this.mrtCount, { types: this._mrtTypes, formats: this._mrtFormats }, this._mrtNames.concat(\"prePass_DepthBuffer\"));\r\n }\r\n\r\n this.renderTargets[i]._resetPostProcessChain();\r\n\r\n for (let j = 0; j < this._effectConfigurations.length; j++) {\r\n if (this._effectConfigurations[j].enabled) {\r\n // TODO : subsurface scattering has 1 scene-wide effect configuration\r\n // solution : do not stock postProcess on effectConfiguration, but in the prepassRenderTarget (hashmap configuration => postProcess)\r\n // And call createPostProcess whenever the post process does not exist in the RT\r\n if (!this._effectConfigurations[j].postProcess && this._effectConfigurations[j].createPostProcess) {\r\n this._effectConfigurations[j].createPostProcess!();\r\n }\r\n\r\n if (this._effectConfigurations[j].postProcess) {\r\n this.renderTargets[i]._beforeCompositionPostProcesses.push(this._effectConfigurations[j].postProcess!);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._reinitializeAttachments();\r\n this._setEnabled(true);\r\n this._updateGeometryBufferLayout();\r\n }\r\n\r\n private _disable() {\r\n this._setEnabled(false);\r\n\r\n for (let i = 0; i < this.renderTargets.length; i++) {\r\n this._setRenderTargetEnabled(this.renderTargets[i], false);\r\n }\r\n\r\n this._resetLayout();\r\n\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n this._effectConfigurations[i].enabled = false;\r\n }\r\n }\r\n\r\n private _getPostProcessesSource(prePassRenderTarget: PrePassRenderTarget, camera?: Camera): Nullable<PostProcess>[] {\r\n if (camera) {\r\n return camera._postProcesses;\r\n } else if (prePassRenderTarget.renderTargetTexture) {\r\n if (prePassRenderTarget.renderTargetTexture.useCameraPostProcesses) {\r\n const camera = prePassRenderTarget.renderTargetTexture.activeCamera ? prePassRenderTarget.renderTargetTexture.activeCamera : this._scene.activeCamera;\r\n return camera ? camera._postProcesses : [];\r\n } else if (prePassRenderTarget.renderTargetTexture.postProcesses) {\r\n return prePassRenderTarget.renderTargetTexture.postProcesses;\r\n } else {\r\n return [];\r\n }\r\n } else {\r\n return this._scene.activeCamera ? this._scene.activeCamera._postProcesses : [];\r\n }\r\n }\r\n\r\n private _setupOutputForThisPass(prePassRenderTarget: PrePassRenderTarget, camera?: Camera) {\r\n // Order is : draw ===> prePassRenderTarget._postProcesses ==> ipp ==> camera._postProcesses\r\n const secondaryCamera = camera && this._scene.activeCameras && !!this._scene.activeCameras.length && this._scene.activeCameras.indexOf(camera) !== 0;\r\n this._postProcessesSourceForThisPass = this._getPostProcessesSource(prePassRenderTarget, camera);\r\n this._postProcessesSourceForThisPass = this._postProcessesSourceForThisPass.filter((pp) => {\r\n return pp != null;\r\n });\r\n this._scene.autoClear = true;\r\n\r\n const cameraHasImageProcessing = this._hasImageProcessing(this._postProcessesSourceForThisPass);\r\n this._needsCompositionForThisPass = !cameraHasImageProcessing && !this.disableGammaTransform && this._needsImageProcessing() && !secondaryCamera;\r\n\r\n const firstCameraPP = this._getFirstPostProcess(this._postProcessesSourceForThisPass);\r\n const firstPrePassPP = prePassRenderTarget._beforeCompositionPostProcesses && prePassRenderTarget._beforeCompositionPostProcesses[0];\r\n let firstPP = null;\r\n\r\n // Setting the scene-wide post process configuration\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = this._needsCompositionForThisPass || cameraHasImageProcessing;\r\n\r\n // Create composition effect if needed\r\n if (this._needsCompositionForThisPass && !prePassRenderTarget.imageProcessingPostProcess) {\r\n prePassRenderTarget._createCompositionEffect();\r\n }\r\n\r\n // Setting the prePassRenderTarget as input texture of the first PP\r\n if (firstPrePassPP) {\r\n firstPP = firstPrePassPP;\r\n } else if (this._needsCompositionForThisPass) {\r\n firstPP = prePassRenderTarget.imageProcessingPostProcess;\r\n } else if (firstCameraPP) {\r\n firstPP = firstCameraPP;\r\n }\r\n\r\n this._bindFrameBuffer();\r\n this._linkInternalTexture(prePassRenderTarget, firstPP);\r\n }\r\n\r\n private _linkInternalTexture(prePassRenderTarget: PrePassRenderTarget, postProcess: Nullable<PostProcess>) {\r\n if (postProcess) {\r\n postProcess.autoClear = false;\r\n postProcess.inputTexture = prePassRenderTarget.renderTarget!;\r\n }\r\n\r\n if (prePassRenderTarget._outputPostProcess !== postProcess) {\r\n if (prePassRenderTarget._outputPostProcess) {\r\n this._unlinkInternalTexture(prePassRenderTarget);\r\n }\r\n prePassRenderTarget._outputPostProcess = postProcess;\r\n }\r\n\r\n if (prePassRenderTarget._internalTextureDirty) {\r\n this._updateGeometryBufferLayout();\r\n prePassRenderTarget._internalTextureDirty = false;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _unlinkInternalTexture(prePassRenderTarget: PrePassRenderTarget) {\r\n if (prePassRenderTarget._outputPostProcess) {\r\n prePassRenderTarget._outputPostProcess.autoClear = true;\r\n prePassRenderTarget._outputPostProcess.restoreDefaultInputTexture();\r\n prePassRenderTarget._outputPostProcess = null;\r\n }\r\n }\r\n\r\n private _needsImageProcessing(): boolean {\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].enabled && this._effectConfigurations[i].needsImageProcessing) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _hasImageProcessing(postProcesses: Nullable<PostProcess>[]): boolean {\r\n let isIPPAlreadyPresent = false;\r\n if (postProcesses) {\r\n for (let i = 0; i < postProcesses.length; i++) {\r\n if (postProcesses[i]?.getClassName() === \"ImageProcessingPostProcess\") {\r\n isIPPAlreadyPresent = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return isIPPAlreadyPresent;\r\n }\r\n\r\n /**\r\n * Internal, gets the first post proces.\r\n * @param postProcesses\r\n * @returns the first post process to be run on this camera.\r\n */\r\n private _getFirstPostProcess(postProcesses: Nullable<PostProcess>[]): Nullable<PostProcess> {\r\n for (let ppIndex = 0; ppIndex < postProcesses.length; ppIndex++) {\r\n if (postProcesses[ppIndex] !== null) {\r\n return postProcesses[ppIndex];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Marks the prepass renderer as dirty, triggering a check if the prepass is necessary for the next rendering.\r\n */\r\n public markAsDirty() {\r\n this._isDirty = true;\r\n }\r\n\r\n /**\r\n * Enables a texture on the MultiRenderTarget for prepass\r\n * @param types\r\n */\r\n private _enableTextures(types: number[]) {\r\n // For velocity : enable storage of previous matrices for instances\r\n this._scene.needsPreviousWorldMatrices = false;\r\n\r\n for (let i = 0; i < types.length; i++) {\r\n const type = types[i];\r\n\r\n if (this._textureIndices[type] === -1) {\r\n this._textureIndices[type] = this._mrtLayout.length;\r\n this._mrtLayout.push(type);\r\n\r\n this._mrtTypes.push(PrePassRenderer.TextureFormats[type].type);\r\n this._mrtFormats.push(PrePassRenderer.TextureFormats[type].format);\r\n this._mrtNames.push(PrePassRenderer.TextureFormats[type].name);\r\n this.mrtCount++;\r\n }\r\n\r\n if (type === Constants.PREPASS_VELOCITY_TEXTURE_TYPE) {\r\n this._scene.needsPreviousWorldMatrices = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Makes sure that the prepass renderer is up to date if it has been dirtified.\r\n */\r\n public update() {\r\n if (this._isDirty) {\r\n this._update();\r\n }\r\n }\r\n\r\n private _update() {\r\n this._disable();\r\n let enablePrePass = false;\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n\r\n if (this._scene._depthPeelingRenderer && this._scene.useOrderIndependentTransparency) {\r\n this._scene._depthPeelingRenderer.setPrePassRenderer(this);\r\n enablePrePass = true;\r\n }\r\n\r\n for (let i = 0; i < this._scene.materials.length; i++) {\r\n if (this._scene.materials[i].setPrePassRenderer(this)) {\r\n enablePrePass = true;\r\n }\r\n }\r\n\r\n if (enablePrePass) {\r\n this._setRenderTargetEnabled(this.defaultRT, true);\r\n }\r\n\r\n let postProcesses;\r\n\r\n for (let i = 0; i < this.renderTargets.length; i++) {\r\n if (this.renderTargets[i].renderTargetTexture) {\r\n postProcesses = this._getPostProcessesSource(this.renderTargets[i]);\r\n } else {\r\n const camera = this._scene.activeCamera;\r\n if (!camera) {\r\n continue;\r\n }\r\n\r\n postProcesses = camera._postProcesses;\r\n }\r\n\r\n if (!postProcesses) {\r\n continue;\r\n }\r\n\r\n postProcesses = <Nullable<PostProcess[]>>postProcesses.filter((pp) => {\r\n return pp != null;\r\n });\r\n\r\n if (postProcesses) {\r\n for (let j = 0; j < postProcesses.length; j++) {\r\n if (postProcesses[j].setPrePassRenderer(this)) {\r\n this._setRenderTargetEnabled(this.renderTargets[i], true);\r\n enablePrePass = true;\r\n }\r\n }\r\n\r\n if (this._hasImageProcessing(postProcesses)) {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n }\r\n\r\n this._markAllMaterialsAsPrePassDirty();\r\n this._isDirty = false;\r\n\r\n if (enablePrePass) {\r\n this._enable();\r\n }\r\n }\r\n\r\n private _markAllMaterialsAsPrePassDirty() {\r\n const materials = this._scene.materials;\r\n\r\n for (let i = 0; i < materials.length; i++) {\r\n materials[i].markAsDirty(Material.PrePassDirtyFlag);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the prepass renderer.\r\n */\r\n public dispose() {\r\n for (let i = this.renderTargets.length - 1; i >= 0; i--) {\r\n this.renderTargets[i].dispose();\r\n }\r\n\r\n for (let i = 0; i < this._effectConfigurations.length; i++) {\r\n if (this._effectConfigurations[i].dispose) {\r\n this._effectConfigurations[i].dispose!();\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -77,6 +77,7 @@ export declare class ReflectiveShadowMap {
77
77
  addMesh(mesh?: AbstractMesh): void;
78
78
  /**
79
79
  * Recomputes the light transformation matrix. Call this method if you manually changed the light position / direction / etc. and you want to update the RSM textures accordingly.
80
+ * You should also call this method if you add/remove meshes to/from the render list.
80
81
  */
81
82
  updateLightParameters(): void;
82
83
  /**
@@ -95,7 +95,7 @@ export class ReflectiveShadowMap {
95
95
  this._textureDimensions = dimensions;
96
96
  this._disposeMultiRenderTarget();
97
97
  this._createMultiRenderTarget();
98
- renderList === null || renderList === void 0 ? void 0 : renderList.forEach((mesh) => {
98
+ renderList?.forEach((mesh) => {
99
99
  this._addMeshToMRT(mesh);
100
100
  });
101
101
  }
@@ -112,9 +112,11 @@ export class ReflectiveShadowMap {
112
112
  this._addMeshToMRT(mesh);
113
113
  });
114
114
  }
115
+ this._recomputeLightTransformationMatrix();
115
116
  }
116
117
  /**
117
118
  * Recomputes the light transformation matrix. Call this method if you manually changed the light position / direction / etc. and you want to update the RSM textures accordingly.
119
+ * You should also call this method if you add/remove meshes to/from the render list.
118
120
  */
119
121
  updateLightParameters() {
120
122
  this._recomputeLightTransformationMatrix();
@@ -183,13 +185,12 @@ export class ReflectiveShadowMap {
183
185
  }
184
186
  });
185
187
  this._mrt.onAfterUnbindObservable.add(() => {
186
- var _a, _b;
187
188
  if (sceneUBO) {
188
189
  this._scene.setSceneUniformBuffer(currentSceneUBO);
189
190
  }
190
191
  this._scene.updateTransformMatrix(); // restore the view/projection matrices of the active camera
191
192
  this._light.shadowEnabled = shadowEnabled;
192
- this._counters[0].value = (_b = (_a = this._mrt.renderTarget.gpuTimeInFrame) === null || _a === void 0 ? void 0 : _a.counter.lastSecAverage) !== null && _b !== void 0 ? _b : 0;
193
+ this._counters[0].value = this._mrt.renderTarget.gpuTimeInFrame?.counter.lastSecAverage ?? 0;
193
194
  });
194
195
  this._customRenderTarget(true);
195
196
  }
@@ -212,8 +213,7 @@ export class ReflectiveShadowMap {
212
213
  }
213
214
  }
214
215
  _addMeshToMRT(mesh) {
215
- var _a;
216
- (_a = this._mrt.renderList) === null || _a === void 0 ? void 0 : _a.push(mesh);
216
+ this._mrt.renderList?.push(mesh);
217
217
  const material = mesh.material;
218
218
  if (mesh.getTotalVertices() === 0 || !material) {
219
219
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"reflectiveShadowMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/reflectiveShadowMap.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Reflective Shadow Maps were first described in http://www.klayge.org/material/3_12/GI/rsm.pdf by Carsten Dachsbacher and Marc Stamminger\r\n * The ReflectiveShadowMap class only implements the geometry buffer generation part.\r\n * For the global illumination effect, see the GIRSMManager class.\r\n */\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { ShadowLight } from \"core/Lights/shadowLight\";\r\nimport { MultiRenderTarget } from \"core/Materials/Textures/multiRenderTarget\";\r\nimport type { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { Matrix, TmpVectors } from \"core/Maths/math.vector\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { WebGPURenderTargetWrapper } from \"core/Engines/WebGPU/webgpuRenderTargetWrapper\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { SpotLight } from \"core/Lights/spotLight\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { expandToProperty, serialize } from \"core/Misc/decorators\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Light } from \"core/Lights/light\";\r\n\r\n/**\r\n * Class used to generate the RSM (Reflective Shadow Map) textures for a given light.\r\n * The textures are: position (in world space), normal (in world space) and flux (light intensity)\r\n */\r\nexport class ReflectiveShadowMap {\r\n private _scene: Scene;\r\n private _light: ShadowLight;\r\n private _lightTransformMatrix: Matrix = Matrix.Identity();\r\n private _mrt: MultiRenderTarget;\r\n private _textureDimensions: { width: number; height: number };\r\n private _regularMatToMatWithPlugin: Map<Material, Material>;\r\n private _counters: Array<{ name: string; value: number }>;\r\n\r\n private _enable = false;\r\n\r\n /**\r\n * Enables or disables the RSM generation.\r\n */\r\n public get enable() {\r\n return this._enable;\r\n }\r\n\r\n public set enable(value: boolean) {\r\n if (this._enable === value) {\r\n return;\r\n }\r\n\r\n this._enable = value;\r\n this._customRenderTarget(value);\r\n }\r\n\r\n /**\r\n * Gets the position texture generated by the RSM process.\r\n */\r\n public get positionWorldTexture() {\r\n return this._mrt.textures[0];\r\n }\r\n\r\n /**\r\n * Gets the normal texture generated by the RSM process.\r\n */\r\n public get normalWorldTexture() {\r\n return this._mrt.textures[1];\r\n }\r\n\r\n /**\r\n * Gets the flux texture generated by the RSM process.\r\n */\r\n public get fluxTexture() {\r\n return this._mrt.textures[2];\r\n }\r\n\r\n /**\r\n * Gets the render list used to generate the RSM textures.\r\n */\r\n public get renderList() {\r\n return this._mrt.renderList;\r\n }\r\n\r\n /**\r\n * Gets the light used to generate the RSM textures.\r\n */\r\n public get light() {\r\n return this._light;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the light parameters should be recomputed even if the light parameters (position, direction) did not change.\r\n * You should not set this value to true, except for debugging purpose (if you want to see changes from the inspector, for eg).\r\n * Instead, you should call updateLightParameters() explicitely at the right time (once the light parameters changed).\r\n */\r\n public forceUpdateLightParameters = false;\r\n\r\n /**\r\n * Creates a new RSM for the given light.\r\n * @param scene The scene\r\n * @param light The light to use to generate the RSM textures\r\n * @param textureDimensions The dimensions of the textures to generate. Default: \\{ width: 512, height: 512 \\}\r\n */\r\n constructor(scene: Scene, light: ShadowLight, textureDimensions = { width: 512, height: 512 }) {\r\n this._scene = scene;\r\n this._light = light;\r\n this._textureDimensions = textureDimensions;\r\n this._regularMatToMatWithPlugin = new Map();\r\n this._counters = [{ name: \"RSM Generation \" + light.name, value: 0 }];\r\n\r\n this._createMultiRenderTarget();\r\n this._recomputeLightTransformationMatrix();\r\n\r\n this.enable = true;\r\n }\r\n\r\n /**\r\n * Sets the dimensions of the textures to generate.\r\n * @param dimensions The dimensions of the textures to generate.\r\n */\r\n public setTextureDimensions(dimensions: { width: number; height: number }) {\r\n const renderList = this._mrt.renderList;\r\n\r\n this._textureDimensions = dimensions;\r\n this._disposeMultiRenderTarget();\r\n this._createMultiRenderTarget();\r\n\r\n renderList?.forEach((mesh) => {\r\n this._addMeshToMRT(mesh);\r\n });\r\n }\r\n\r\n /**\r\n * Adds the given mesh to the render list used to generate the RSM textures.\r\n * @param mesh The mesh to add to the render list used to generate the RSM textures. If not provided, all scene meshes will be added to the render list.\r\n */\r\n public addMesh(mesh?: AbstractMesh) {\r\n if (mesh) {\r\n this._addMeshToMRT(mesh);\r\n } else {\r\n this._scene.meshes.forEach((mesh) => {\r\n this._addMeshToMRT(mesh);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Recomputes the light transformation matrix. Call this method if you manually changed the light position / direction / etc. and you want to update the RSM textures accordingly.\r\n */\r\n public updateLightParameters() {\r\n this._recomputeLightTransformationMatrix();\r\n }\r\n\r\n /**\r\n * Gets the light transformation matrix used to generate the RSM textures.\r\n */\r\n public get lightTransformationMatrix() {\r\n if (this.forceUpdateLightParameters) {\r\n this.updateLightParameters();\r\n }\r\n return this._lightTransformMatrix;\r\n }\r\n\r\n /**\r\n * Gets the GPU time spent to generate the RSM textures.\r\n */\r\n public get countersGPU(): Array<{ name: string; value: number }> {\r\n return this._counters;\r\n }\r\n\r\n /**\r\n * Disposes the RSM.\r\n */\r\n public dispose() {\r\n this._disposeMultiRenderTarget();\r\n }\r\n\r\n protected _createMultiRenderTarget() {\r\n const name = this._light.name;\r\n\r\n const caps = this._scene.getEngine().getCaps();\r\n\r\n const fluxTextureType = caps.rg11b10ufColorRenderable ? Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV : Constants.TEXTURETYPE_HALF_FLOAT;\r\n const fluxTextureFormat = caps.rg11b10ufColorRenderable ? Constants.TEXTUREFORMAT_RGB : Constants.TEXTUREFORMAT_RGBA;\r\n\r\n this._mrt = new MultiRenderTarget(\r\n \"RSMmrt_\" + name,\r\n this._textureDimensions,\r\n 3, // number of RTT - position / normal / flux\r\n this._scene,\r\n {\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT, Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV, fluxTextureType],\r\n samplingModes: [Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURE_BILINEAR_SAMPLINGMODE],\r\n generateMipMaps: false,\r\n targetTypes: [Constants.TEXTURE_2D, Constants.TEXTURE_2D, Constants.TEXTURE_2D],\r\n formats: [Constants.TEXTUREFORMAT_RGBA, Constants.TEXTUREFORMAT_RGBA, fluxTextureFormat],\r\n },\r\n [\"RSMPosition_\" + name, \"RSMNormal_\" + name, \"RSMFlux_\" + name]\r\n );\r\n\r\n this._mrt.renderList = [];\r\n this._mrt.clearColor = new Color4(0, 0, 0, 1);\r\n this._mrt.noPrePassRenderer = true;\r\n\r\n let sceneUBO: UniformBuffer;\r\n let currentSceneUBO: UniformBuffer;\r\n\r\n const useUBO = this._scene.getEngine().supportsUniformBuffers;\r\n\r\n if (useUBO) {\r\n sceneUBO = this._scene.createSceneUniformBuffer(`Scene for RSM (light \"${name}\")`);\r\n }\r\n\r\n let shadowEnabled: boolean;\r\n\r\n this._mrt.onBeforeBindObservable.add(() => {\r\n currentSceneUBO = this._scene.getSceneUniformBuffer();\r\n shadowEnabled = this._light.shadowEnabled;\r\n this._light.shadowEnabled = false; // we render from the light point of view, so we won't have any shadow anyway!\r\n });\r\n\r\n this._mrt.onBeforeRenderObservable.add((faceIndex: number) => {\r\n if (sceneUBO) {\r\n this._scene.setSceneUniformBuffer(sceneUBO);\r\n }\r\n const viewMatrix = this._light.getViewMatrix(faceIndex);\r\n const projectionMatrix = this._light.getProjectionMatrix(viewMatrix || undefined, this._mrt.renderList || undefined);\r\n if (viewMatrix && projectionMatrix) {\r\n this._scene.setTransformMatrix(viewMatrix, projectionMatrix);\r\n }\r\n if (useUBO) {\r\n this._scene.getSceneUniformBuffer().unbindEffect();\r\n this._scene.finalizeSceneUbo();\r\n }\r\n });\r\n\r\n this._mrt.onAfterUnbindObservable.add(() => {\r\n if (sceneUBO) {\r\n this._scene.setSceneUniformBuffer(currentSceneUBO);\r\n }\r\n this._scene.updateTransformMatrix(); // restore the view/projection matrices of the active camera\r\n this._light.shadowEnabled = shadowEnabled;\r\n this._counters[0].value = (this._mrt.renderTarget as WebGPURenderTargetWrapper).gpuTimeInFrame?.counter.lastSecAverage ?? 0;\r\n });\r\n\r\n this._customRenderTarget(true);\r\n }\r\n\r\n protected _customRenderTarget(add: boolean) {\r\n const idx = this._scene.customRenderTargets.indexOf(this._mrt);\r\n if (add) {\r\n if (idx === -1) {\r\n this._scene.customRenderTargets.push(this._mrt);\r\n }\r\n } else if (idx !== -1) {\r\n this._scene.customRenderTargets.splice(idx, 1);\r\n }\r\n }\r\n\r\n protected _recomputeLightTransformationMatrix() {\r\n const viewMatrix = this._light.getViewMatrix();\r\n const projectionMatrix = this._light.getProjectionMatrix(viewMatrix || undefined, this._mrt.renderList || undefined);\r\n if (viewMatrix && projectionMatrix) {\r\n viewMatrix.multiplyToRef(projectionMatrix, this._lightTransformMatrix);\r\n }\r\n }\r\n\r\n protected _addMeshToMRT(mesh: AbstractMesh) {\r\n this._mrt.renderList?.push(mesh);\r\n\r\n const material = mesh.material;\r\n if (mesh.getTotalVertices() === 0 || !material) {\r\n return;\r\n }\r\n\r\n let rsmMaterial = this._regularMatToMatWithPlugin.get(material);\r\n if (!rsmMaterial) {\r\n rsmMaterial = material.clone(\"RSMCreate_\" + material.name) || undefined;\r\n if (rsmMaterial) {\r\n // Disable the prepass renderer for this material\r\n Object.defineProperty(rsmMaterial, \"canRenderToMRT\", {\r\n get: function () {\r\n return false;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n\r\n (rsmMaterial as any).disableLighting = true;\r\n\r\n const rsmCreatePlugin = new RSMCreatePluginMaterial(rsmMaterial);\r\n\r\n rsmCreatePlugin.isEnabled = true;\r\n rsmCreatePlugin.light = this._light;\r\n\r\n this._regularMatToMatWithPlugin.set(material, rsmMaterial);\r\n }\r\n }\r\n\r\n this._mrt.setMaterialForRendering(mesh, rsmMaterial);\r\n }\r\n\r\n protected _disposeMultiRenderTarget() {\r\n this._customRenderTarget(false);\r\n this._mrt.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nclass MaterialRSMCreateDefines extends MaterialDefines {\r\n public RSMCREATE = false;\r\n public RSMCREATE_PROJTEXTURE = false;\r\n public RSMCREATE_LIGHT_IS_SPOT = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the creation of the RSM textures\r\n */\r\nexport class RSMCreatePluginMaterial extends MaterialPluginBase {\r\n private _varAlbedoName: string;\r\n private _lightColor = new Color3();\r\n private _hasProjectionTexture = false;\r\n\r\n /**\r\n * Defines the name of the plugin.\r\n */\r\n public static readonly Name = \"RSMCreate\";\r\n\r\n /**\r\n * Defines the light that should be used to generate the RSM textures.\r\n */\r\n @serialize()\r\n public light: ShadowLight;\r\n\r\n private _isEnabled = false;\r\n /**\r\n * Defines if the plugin is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isEnabled = false;\r\n\r\n protected _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n\r\n /**\r\n * Create a new RSMCreatePluginMaterial\r\n * @param material Parent material of the plugin\r\n */\r\n constructor(material: Material | StandardMaterial | PBRBaseMaterial) {\r\n super(material, RSMCreatePluginMaterial.Name, 300, new MaterialRSMCreateDefines());\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n\r\n this._varAlbedoName = material instanceof PBRBaseMaterial ? \"surfaceAlbedo\" : \"baseColor.rgb\";\r\n }\r\n\r\n public prepareDefines(defines: MaterialRSMCreateDefines) {\r\n defines.RSMCREATE = this._isEnabled;\r\n\r\n this._hasProjectionTexture = false;\r\n\r\n const isSpot = this.light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT;\r\n if (isSpot) {\r\n const spot = this.light as SpotLight;\r\n this._hasProjectionTexture = spot.projectionTexture ? spot.projectionTexture.isReady() : false;\r\n }\r\n\r\n defines.RSMCREATE_PROJTEXTURE = this._hasProjectionTexture;\r\n defines.RSMCREATE_LIGHT_IS_SPOT = isSpot;\r\n }\r\n\r\n public getClassName() {\r\n return \"RSMCreatePluginMaterial\";\r\n }\r\n\r\n public getUniforms() {\r\n return {\r\n ubo: [\r\n { name: \"rsmTextureProjectionMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"rsmSpotInfo\", size: 4, type: \"vec4\" },\r\n { name: \"rsmLightColor\", size: 3, type: \"vec3\" },\r\n { name: \"rsmLightPosition\", size: 3, type: \"vec3\" },\r\n ],\r\n fragment: `#ifdef RSMCREATE\r\n uniform mat4 rsmTextureProjectionMatrix;\r\n uniform vec4 rsmSpotInfo;\r\n uniform vec3 rsmLightColor;\r\n unfiorm vec3 rsmLightPosition;\r\n #endif`,\r\n };\r\n }\r\n\r\n public getSamplers(samplers: string[]) {\r\n samplers.push(\"rsmTextureProjectionSampler\");\r\n }\r\n\r\n public bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this.light.diffuse.scaleToRef(this.light.getScaledIntensity(), this._lightColor);\r\n uniformBuffer.updateColor3(\"rsmLightColor\", this._lightColor);\r\n\r\n if (this.light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n const spot = this.light as SpotLight;\r\n\r\n if (this._hasProjectionTexture) {\r\n uniformBuffer.updateMatrix(\"rsmTextureProjectionMatrix\", spot.projectionTextureMatrix);\r\n uniformBuffer.setTexture(\"rsmTextureProjectionSampler\", spot.projectionTexture);\r\n }\r\n\r\n const normalizeDirection = TmpVectors.Vector3[0];\r\n\r\n if (spot.computeTransformedInformation()) {\r\n uniformBuffer.updateFloat3(\"rsmLightPosition\", this.light.transformedPosition.x, this.light.transformedPosition.y, this.light.transformedPosition.z);\r\n spot.transformedDirection.normalizeToRef(normalizeDirection);\r\n } else {\r\n uniformBuffer.updateFloat3(\"rsmLightPosition\", this.light.position.x, this.light.position.y, this.light.position.z);\r\n spot.direction.normalizeToRef(normalizeDirection);\r\n }\r\n\r\n uniformBuffer.updateFloat4(\"rsmSpotInfo\", normalizeDirection.x, normalizeDirection.y, normalizeDirection.z, Math.cos(spot.angle * 0.5));\r\n }\r\n }\r\n\r\n public getCustomCode(shaderType: string) {\r\n return shaderType === \"vertex\"\r\n ? null\r\n : {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_BEGIN: `\r\n #ifdef RSMCREATE\r\n #extension GL_EXT_draw_buffers : require\r\n #endif\r\n `,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef RSMCREATE\r\n #ifdef RSMCREATE_PROJTEXTURE\r\n uniform highp sampler2D rsmTextureProjectionSampler; \r\n #endif\r\n layout(location = 0) out highp vec4 glFragData[3];\r\n vec4 glFragColor;\r\n #endif\r\n `,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n #ifdef RSMCREATE\r\n vec3 rsmColor = ${this._varAlbedoName} * rsmLightColor;\r\n #ifdef RSMCREATE_PROJTEXTURE\r\n {\r\n vec4 strq = rsmTextureProjectionMatrix * vec4(vPositionW, 1.0);\r\n strq /= strq.w;\r\n rsmColor *= texture2D(rsmTextureProjectionSampler, strq.xy).rgb;\r\n }\r\n #endif\r\n #ifdef RSMCREATE_LIGHT_IS_SPOT\r\n {\r\n float cosAngle = max(0., dot(rsmSpotInfo.xyz, normalize(vPositionW - rsmLightPosition)));\r\n rsmColor = sign(cosAngle - rsmSpotInfo.w) * rsmColor;\r\n }\r\n #endif\r\n glFragData[0] = vec4(vPositionW, 1.);\r\n glFragData[1] = vec4(normalize(normalW) * 0.5 + 0.5, 1.);\r\n glFragData[2] = vec4(rsmColor, 1.);\r\n #endif\r\n `,\r\n };\r\n }\r\n}\r\n\r\nRegisterClass(`BABYLON.RSMCreatePluginMaterial`, RSMCreatePluginMaterial);\r\n"]}
1
+ {"version":3,"file":"reflectiveShadowMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/reflectiveShadowMap.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Reflective Shadow Maps were first described in http://www.klayge.org/material/3_12/GI/rsm.pdf by Carsten Dachsbacher and Marc Stamminger\r\n * The ReflectiveShadowMap class only implements the geometry buffer generation part.\r\n * For the global illumination effect, see the GIRSMManager class.\r\n */\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { ShadowLight } from \"core/Lights/shadowLight\";\r\nimport { MultiRenderTarget } from \"core/Materials/Textures/multiRenderTarget\";\r\nimport type { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { Matrix, TmpVectors } from \"core/Maths/math.vector\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { WebGPURenderTargetWrapper } from \"core/Engines/WebGPU/webgpuRenderTargetWrapper\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { SpotLight } from \"core/Lights/spotLight\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { expandToProperty, serialize } from \"core/Misc/decorators\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Light } from \"core/Lights/light\";\r\n\r\n/**\r\n * Class used to generate the RSM (Reflective Shadow Map) textures for a given light.\r\n * The textures are: position (in world space), normal (in world space) and flux (light intensity)\r\n */\r\nexport class ReflectiveShadowMap {\r\n private _scene: Scene;\r\n private _light: ShadowLight;\r\n private _lightTransformMatrix: Matrix = Matrix.Identity();\r\n private _mrt: MultiRenderTarget;\r\n private _textureDimensions: { width: number; height: number };\r\n private _regularMatToMatWithPlugin: Map<Material, Material>;\r\n private _counters: Array<{ name: string; value: number }>;\r\n\r\n private _enable = false;\r\n\r\n /**\r\n * Enables or disables the RSM generation.\r\n */\r\n public get enable() {\r\n return this._enable;\r\n }\r\n\r\n public set enable(value: boolean) {\r\n if (this._enable === value) {\r\n return;\r\n }\r\n\r\n this._enable = value;\r\n this._customRenderTarget(value);\r\n }\r\n\r\n /**\r\n * Gets the position texture generated by the RSM process.\r\n */\r\n public get positionWorldTexture() {\r\n return this._mrt.textures[0];\r\n }\r\n\r\n /**\r\n * Gets the normal texture generated by the RSM process.\r\n */\r\n public get normalWorldTexture() {\r\n return this._mrt.textures[1];\r\n }\r\n\r\n /**\r\n * Gets the flux texture generated by the RSM process.\r\n */\r\n public get fluxTexture() {\r\n return this._mrt.textures[2];\r\n }\r\n\r\n /**\r\n * Gets the render list used to generate the RSM textures.\r\n */\r\n public get renderList() {\r\n return this._mrt.renderList;\r\n }\r\n\r\n /**\r\n * Gets the light used to generate the RSM textures.\r\n */\r\n public get light() {\r\n return this._light;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the light parameters should be recomputed even if the light parameters (position, direction) did not change.\r\n * You should not set this value to true, except for debugging purpose (if you want to see changes from the inspector, for eg).\r\n * Instead, you should call updateLightParameters() explicitely at the right time (once the light parameters changed).\r\n */\r\n public forceUpdateLightParameters = false;\r\n\r\n /**\r\n * Creates a new RSM for the given light.\r\n * @param scene The scene\r\n * @param light The light to use to generate the RSM textures\r\n * @param textureDimensions The dimensions of the textures to generate. Default: \\{ width: 512, height: 512 \\}\r\n */\r\n constructor(scene: Scene, light: ShadowLight, textureDimensions = { width: 512, height: 512 }) {\r\n this._scene = scene;\r\n this._light = light;\r\n this._textureDimensions = textureDimensions;\r\n this._regularMatToMatWithPlugin = new Map();\r\n this._counters = [{ name: \"RSM Generation \" + light.name, value: 0 }];\r\n\r\n this._createMultiRenderTarget();\r\n this._recomputeLightTransformationMatrix();\r\n\r\n this.enable = true;\r\n }\r\n\r\n /**\r\n * Sets the dimensions of the textures to generate.\r\n * @param dimensions The dimensions of the textures to generate.\r\n */\r\n public setTextureDimensions(dimensions: { width: number; height: number }) {\r\n const renderList = this._mrt.renderList;\r\n\r\n this._textureDimensions = dimensions;\r\n this._disposeMultiRenderTarget();\r\n this._createMultiRenderTarget();\r\n\r\n renderList?.forEach((mesh) => {\r\n this._addMeshToMRT(mesh);\r\n });\r\n }\r\n\r\n /**\r\n * Adds the given mesh to the render list used to generate the RSM textures.\r\n * @param mesh The mesh to add to the render list used to generate the RSM textures. If not provided, all scene meshes will be added to the render list.\r\n */\r\n public addMesh(mesh?: AbstractMesh) {\r\n if (mesh) {\r\n this._addMeshToMRT(mesh);\r\n } else {\r\n this._scene.meshes.forEach((mesh) => {\r\n this._addMeshToMRT(mesh);\r\n });\r\n }\r\n this._recomputeLightTransformationMatrix();\r\n }\r\n\r\n /**\r\n * Recomputes the light transformation matrix. Call this method if you manually changed the light position / direction / etc. and you want to update the RSM textures accordingly.\r\n * You should also call this method if you add/remove meshes to/from the render list.\r\n */\r\n public updateLightParameters() {\r\n this._recomputeLightTransformationMatrix();\r\n }\r\n\r\n /**\r\n * Gets the light transformation matrix used to generate the RSM textures.\r\n */\r\n public get lightTransformationMatrix() {\r\n if (this.forceUpdateLightParameters) {\r\n this.updateLightParameters();\r\n }\r\n return this._lightTransformMatrix;\r\n }\r\n\r\n /**\r\n * Gets the GPU time spent to generate the RSM textures.\r\n */\r\n public get countersGPU(): Array<{ name: string; value: number }> {\r\n return this._counters;\r\n }\r\n\r\n /**\r\n * Disposes the RSM.\r\n */\r\n public dispose() {\r\n this._disposeMultiRenderTarget();\r\n }\r\n\r\n protected _createMultiRenderTarget() {\r\n const name = this._light.name;\r\n\r\n const caps = this._scene.getEngine().getCaps();\r\n\r\n const fluxTextureType = caps.rg11b10ufColorRenderable ? Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV : Constants.TEXTURETYPE_HALF_FLOAT;\r\n const fluxTextureFormat = caps.rg11b10ufColorRenderable ? Constants.TEXTUREFORMAT_RGB : Constants.TEXTUREFORMAT_RGBA;\r\n\r\n this._mrt = new MultiRenderTarget(\r\n \"RSMmrt_\" + name,\r\n this._textureDimensions,\r\n 3, // number of RTT - position / normal / flux\r\n this._scene,\r\n {\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT, Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV, fluxTextureType],\r\n samplingModes: [Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURE_BILINEAR_SAMPLINGMODE, Constants.TEXTURE_BILINEAR_SAMPLINGMODE],\r\n generateMipMaps: false,\r\n targetTypes: [Constants.TEXTURE_2D, Constants.TEXTURE_2D, Constants.TEXTURE_2D],\r\n formats: [Constants.TEXTUREFORMAT_RGBA, Constants.TEXTUREFORMAT_RGBA, fluxTextureFormat],\r\n },\r\n [\"RSMPosition_\" + name, \"RSMNormal_\" + name, \"RSMFlux_\" + name]\r\n );\r\n\r\n this._mrt.renderList = [];\r\n this._mrt.clearColor = new Color4(0, 0, 0, 1);\r\n this._mrt.noPrePassRenderer = true;\r\n\r\n let sceneUBO: UniformBuffer;\r\n let currentSceneUBO: UniformBuffer;\r\n\r\n const useUBO = this._scene.getEngine().supportsUniformBuffers;\r\n\r\n if (useUBO) {\r\n sceneUBO = this._scene.createSceneUniformBuffer(`Scene for RSM (light \"${name}\")`);\r\n }\r\n\r\n let shadowEnabled: boolean;\r\n\r\n this._mrt.onBeforeBindObservable.add(() => {\r\n currentSceneUBO = this._scene.getSceneUniformBuffer();\r\n shadowEnabled = this._light.shadowEnabled;\r\n this._light.shadowEnabled = false; // we render from the light point of view, so we won't have any shadow anyway!\r\n });\r\n\r\n this._mrt.onBeforeRenderObservable.add((faceIndex: number) => {\r\n if (sceneUBO) {\r\n this._scene.setSceneUniformBuffer(sceneUBO);\r\n }\r\n const viewMatrix = this._light.getViewMatrix(faceIndex);\r\n const projectionMatrix = this._light.getProjectionMatrix(viewMatrix || undefined, this._mrt.renderList || undefined);\r\n if (viewMatrix && projectionMatrix) {\r\n this._scene.setTransformMatrix(viewMatrix, projectionMatrix);\r\n }\r\n if (useUBO) {\r\n this._scene.getSceneUniformBuffer().unbindEffect();\r\n this._scene.finalizeSceneUbo();\r\n }\r\n });\r\n\r\n this._mrt.onAfterUnbindObservable.add(() => {\r\n if (sceneUBO) {\r\n this._scene.setSceneUniformBuffer(currentSceneUBO);\r\n }\r\n this._scene.updateTransformMatrix(); // restore the view/projection matrices of the active camera\r\n this._light.shadowEnabled = shadowEnabled;\r\n this._counters[0].value = (this._mrt.renderTarget as WebGPURenderTargetWrapper).gpuTimeInFrame?.counter.lastSecAverage ?? 0;\r\n });\r\n\r\n this._customRenderTarget(true);\r\n }\r\n\r\n protected _customRenderTarget(add: boolean) {\r\n const idx = this._scene.customRenderTargets.indexOf(this._mrt);\r\n if (add) {\r\n if (idx === -1) {\r\n this._scene.customRenderTargets.push(this._mrt);\r\n }\r\n } else if (idx !== -1) {\r\n this._scene.customRenderTargets.splice(idx, 1);\r\n }\r\n }\r\n\r\n protected _recomputeLightTransformationMatrix() {\r\n const viewMatrix = this._light.getViewMatrix();\r\n const projectionMatrix = this._light.getProjectionMatrix(viewMatrix || undefined, this._mrt.renderList || undefined);\r\n if (viewMatrix && projectionMatrix) {\r\n viewMatrix.multiplyToRef(projectionMatrix, this._lightTransformMatrix);\r\n }\r\n }\r\n\r\n protected _addMeshToMRT(mesh: AbstractMesh) {\r\n this._mrt.renderList?.push(mesh);\r\n\r\n const material = mesh.material;\r\n if (mesh.getTotalVertices() === 0 || !material) {\r\n return;\r\n }\r\n\r\n let rsmMaterial = this._regularMatToMatWithPlugin.get(material);\r\n if (!rsmMaterial) {\r\n rsmMaterial = material.clone(\"RSMCreate_\" + material.name) || undefined;\r\n if (rsmMaterial) {\r\n // Disable the prepass renderer for this material\r\n Object.defineProperty(rsmMaterial, \"canRenderToMRT\", {\r\n get: function () {\r\n return false;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n\r\n (rsmMaterial as any).disableLighting = true;\r\n\r\n const rsmCreatePlugin = new RSMCreatePluginMaterial(rsmMaterial);\r\n\r\n rsmCreatePlugin.isEnabled = true;\r\n rsmCreatePlugin.light = this._light;\r\n\r\n this._regularMatToMatWithPlugin.set(material, rsmMaterial);\r\n }\r\n }\r\n\r\n this._mrt.setMaterialForRendering(mesh, rsmMaterial);\r\n }\r\n\r\n protected _disposeMultiRenderTarget() {\r\n this._customRenderTarget(false);\r\n this._mrt.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nclass MaterialRSMCreateDefines extends MaterialDefines {\r\n public RSMCREATE = false;\r\n public RSMCREATE_PROJTEXTURE = false;\r\n public RSMCREATE_LIGHT_IS_SPOT = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the creation of the RSM textures\r\n */\r\nexport class RSMCreatePluginMaterial extends MaterialPluginBase {\r\n private _varAlbedoName: string;\r\n private _lightColor = new Color3();\r\n private _hasProjectionTexture = false;\r\n\r\n /**\r\n * Defines the name of the plugin.\r\n */\r\n public static readonly Name = \"RSMCreate\";\r\n\r\n /**\r\n * Defines the light that should be used to generate the RSM textures.\r\n */\r\n @serialize()\r\n public light: ShadowLight;\r\n\r\n private _isEnabled = false;\r\n /**\r\n * Defines if the plugin is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isEnabled = false;\r\n\r\n protected _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n\r\n /**\r\n * Create a new RSMCreatePluginMaterial\r\n * @param material Parent material of the plugin\r\n */\r\n constructor(material: Material | StandardMaterial | PBRBaseMaterial) {\r\n super(material, RSMCreatePluginMaterial.Name, 300, new MaterialRSMCreateDefines());\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n\r\n this._varAlbedoName = material instanceof PBRBaseMaterial ? \"surfaceAlbedo\" : \"baseColor.rgb\";\r\n }\r\n\r\n public prepareDefines(defines: MaterialRSMCreateDefines) {\r\n defines.RSMCREATE = this._isEnabled;\r\n\r\n this._hasProjectionTexture = false;\r\n\r\n const isSpot = this.light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT;\r\n if (isSpot) {\r\n const spot = this.light as SpotLight;\r\n this._hasProjectionTexture = spot.projectionTexture ? spot.projectionTexture.isReady() : false;\r\n }\r\n\r\n defines.RSMCREATE_PROJTEXTURE = this._hasProjectionTexture;\r\n defines.RSMCREATE_LIGHT_IS_SPOT = isSpot;\r\n }\r\n\r\n public getClassName() {\r\n return \"RSMCreatePluginMaterial\";\r\n }\r\n\r\n public getUniforms() {\r\n return {\r\n ubo: [\r\n { name: \"rsmTextureProjectionMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"rsmSpotInfo\", size: 4, type: \"vec4\" },\r\n { name: \"rsmLightColor\", size: 3, type: \"vec3\" },\r\n { name: \"rsmLightPosition\", size: 3, type: \"vec3\" },\r\n ],\r\n fragment: `#ifdef RSMCREATE\r\n uniform mat4 rsmTextureProjectionMatrix;\r\n uniform vec4 rsmSpotInfo;\r\n uniform vec3 rsmLightColor;\r\n unfiorm vec3 rsmLightPosition;\r\n #endif`,\r\n };\r\n }\r\n\r\n public getSamplers(samplers: string[]) {\r\n samplers.push(\"rsmTextureProjectionSampler\");\r\n }\r\n\r\n public bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n this.light.diffuse.scaleToRef(this.light.getScaledIntensity(), this._lightColor);\r\n uniformBuffer.updateColor3(\"rsmLightColor\", this._lightColor);\r\n\r\n if (this.light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n const spot = this.light as SpotLight;\r\n\r\n if (this._hasProjectionTexture) {\r\n uniformBuffer.updateMatrix(\"rsmTextureProjectionMatrix\", spot.projectionTextureMatrix);\r\n uniformBuffer.setTexture(\"rsmTextureProjectionSampler\", spot.projectionTexture);\r\n }\r\n\r\n const normalizeDirection = TmpVectors.Vector3[0];\r\n\r\n if (spot.computeTransformedInformation()) {\r\n uniformBuffer.updateFloat3(\"rsmLightPosition\", this.light.transformedPosition.x, this.light.transformedPosition.y, this.light.transformedPosition.z);\r\n spot.transformedDirection.normalizeToRef(normalizeDirection);\r\n } else {\r\n uniformBuffer.updateFloat3(\"rsmLightPosition\", this.light.position.x, this.light.position.y, this.light.position.z);\r\n spot.direction.normalizeToRef(normalizeDirection);\r\n }\r\n\r\n uniformBuffer.updateFloat4(\"rsmSpotInfo\", normalizeDirection.x, normalizeDirection.y, normalizeDirection.z, Math.cos(spot.angle * 0.5));\r\n }\r\n }\r\n\r\n public getCustomCode(shaderType: string) {\r\n return shaderType === \"vertex\"\r\n ? null\r\n : {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_BEGIN: `\r\n #ifdef RSMCREATE\r\n #extension GL_EXT_draw_buffers : require\r\n #endif\r\n `,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef RSMCREATE\r\n #ifdef RSMCREATE_PROJTEXTURE\r\n uniform highp sampler2D rsmTextureProjectionSampler; \r\n #endif\r\n layout(location = 0) out highp vec4 glFragData[3];\r\n vec4 glFragColor;\r\n #endif\r\n `,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n #ifdef RSMCREATE\r\n vec3 rsmColor = ${this._varAlbedoName} * rsmLightColor;\r\n #ifdef RSMCREATE_PROJTEXTURE\r\n {\r\n vec4 strq = rsmTextureProjectionMatrix * vec4(vPositionW, 1.0);\r\n strq /= strq.w;\r\n rsmColor *= texture2D(rsmTextureProjectionSampler, strq.xy).rgb;\r\n }\r\n #endif\r\n #ifdef RSMCREATE_LIGHT_IS_SPOT\r\n {\r\n float cosAngle = max(0., dot(rsmSpotInfo.xyz, normalize(vPositionW - rsmLightPosition)));\r\n rsmColor = sign(cosAngle - rsmSpotInfo.w) * rsmColor;\r\n }\r\n #endif\r\n glFragData[0] = vec4(vPositionW, 1.);\r\n glFragData[1] = vec4(normalize(normalW) * 0.5 + 0.5, 1.);\r\n glFragData[2] = vec4(rsmColor, 1.);\r\n #endif\r\n `,\r\n };\r\n }\r\n}\r\n\r\nRegisterClass(`BABYLON.RSMCreatePluginMaterial`, RSMCreatePluginMaterial);\r\n"]}
@@ -1,5 +1,7 @@
1
1
  import "./ShadersInclude/clipPlaneFragmentDeclaration";
2
+ import "./ShadersInclude/fogFragmentDeclaration";
2
3
  import "./ShadersInclude/clipPlaneFragment";
4
+ import "./ShadersInclude/fogFragment";
3
5
  /** @internal */
4
6
  export declare const colorPixelShader: {
5
7
  name: string;
@@ -1,7 +1,9 @@
1
1
  // Do not edit.
2
2
  import { ShaderStore } from "../Engines/shaderStore.js";
3
3
  import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
4
+ import "./ShadersInclude/fogFragmentDeclaration.js";
4
5
  import "./ShadersInclude/clipPlaneFragment.js";
6
+ import "./ShadersInclude/fogFragment.js";
5
7
  const name = "colorPixelShader";
6
8
  const shader = `#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
7
9
  #define VERTEXCOLOR
@@ -10,6 +12,7 @@ varying vec4 vColor;
10
12
  uniform vec4 color;
11
13
  #endif
12
14
  #include<clipPlaneFragmentDeclaration>
15
+ #include<fogFragmentDeclaration>
13
16
  #define CUSTOM_FRAGMENT_DEFINITIONS
14
17
  void main(void) {
15
18
  #define CUSTOM_FRAGMENT_MAIN_BEGIN
@@ -19,6 +22,7 @@ gl_FragColor=vColor;
19
22
  #else
20
23
  gl_FragColor=color;
21
24
  #endif
25
+ #include<fogFragment>(color,gl_FragColor)
22
26
  #define CUSTOM_FRAGMENT_MAIN_END
23
27
  }`;
24
28
  // Sideeffect
@@ -1 +1 @@
1
- {"version":3,"file":"color.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/color.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,oCAAoC,CAAC;AAE5C,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;EAiBb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"./ShadersInclude/clipPlaneFragment\";\n\nconst name = \"colorPixelShader\";\nconst shader = `#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\n#define VERTEXCOLOR\nvarying vec4 vColor;\n#else\nuniform vec4 color;\n#endif\n#include<clipPlaneFragmentDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\ngl_FragColor=vColor;\n#else\ngl_FragColor=color;\n#endif\n#define CUSTOM_FRAGMENT_MAIN_END\n}`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const colorPixelShader = { name, shader };\n"]}
1
+ {"version":3,"file":"color.fragment.js","sourceRoot":"","sources":["../../../../dev/core/src/Shaders/color.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,yCAAyC,CAAC;AACjD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,8BAA8B,CAAC;AAEtC,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;EAmBb,CAAC;AACH,aAAa;AACb,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../Engines/shaderStore\";\nimport \"./ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"./ShadersInclude/fogFragmentDeclaration\";\nimport \"./ShadersInclude/clipPlaneFragment\";\nimport \"./ShadersInclude/fogFragment\";\n\nconst name = \"colorPixelShader\";\nconst shader = `#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\n#define VERTEXCOLOR\nvarying vec4 vColor;\n#else\nuniform vec4 color;\n#endif\n#include<clipPlaneFragmentDeclaration>\n#include<fogFragmentDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\n#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)\ngl_FragColor=vColor;\n#else\ngl_FragColor=color;\n#endif\n#include<fogFragment>(color,gl_FragColor)\n#define CUSTOM_FRAGMENT_MAIN_END\n}`;\n// Sideeffect\nShaderStore.ShadersStore[name] = shader;\n/** @internal */\nexport const colorPixelShader = { name, shader };\n"]}
@@ -1,11 +1,13 @@
1
1
  import "./ShadersInclude/bonesDeclaration";
2
2
  import "./ShadersInclude/bakedVertexAnimationDeclaration";
3
3
  import "./ShadersInclude/clipPlaneVertexDeclaration";
4
+ import "./ShadersInclude/fogVertexDeclaration";
4
5
  import "./ShadersInclude/instancesDeclaration";
5
6
  import "./ShadersInclude/instancesVertex";
6
7
  import "./ShadersInclude/bonesVertex";
7
8
  import "./ShadersInclude/bakedVertexAnimation";
8
9
  import "./ShadersInclude/clipPlaneVertex";
10
+ import "./ShadersInclude/fogVertex";
9
11
  import "./ShadersInclude/vertexColorMixing";
10
12
  /** @internal */
11
13
  export declare const colorVertexShader: {