@babylonjs/core 8.8.0 → 8.8.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 (409) hide show
  1. package/Actions/actionManager.js +2 -0
  2. package/Actions/actionManager.js.map +1 -1
  3. package/Animations/animatable.core.js +1 -1
  4. package/Animations/animatable.core.js.map +1 -1
  5. package/Animations/animation.js +4 -2
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/audioEngine.d.ts +1 -1
  8. package/Audio/audioEngine.js +20 -10
  9. package/Audio/audioEngine.js.map +1 -1
  10. package/Audio/audioSceneComponent.js +2 -0
  11. package/Audio/audioSceneComponent.js.map +1 -1
  12. package/Audio/sound.js +2 -0
  13. package/Audio/sound.js.map +1 -1
  14. package/AudioV2/abstractAudio/audioEngineV2.js +8 -1
  15. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  16. package/AudioV2/abstractAudio/streamingSound.js +3 -1
  17. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  18. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +6 -2
  19. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
  20. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +3 -0
  21. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
  22. package/AudioV2/abstractAudio/subProperties/spatialAudio.js +1 -0
  23. package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -1
  24. package/AudioV2/webAudio/webAudioEngine.js +5 -1
  25. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  26. package/AudioV2/webAudio/webAudioStaticSound.js +2 -0
  27. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  28. package/AudioV2/webAudio/webAudioStreamingSound.js +3 -0
  29. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  30. package/AudioV2/webAudio/webAudioUnmuteUI.js +1 -0
  31. package/AudioV2/webAudio/webAudioUnmuteUI.js.map +1 -1
  32. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +1 -0
  33. package/BakedVertexAnimation/vertexAnimationBaker.js +3 -1
  34. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  35. package/Buffers/buffer.nonFloatVertexBuffers.js +1 -0
  36. package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
  37. package/Buffers/storageBuffer.js +1 -1
  38. package/Buffers/storageBuffer.js.map +1 -1
  39. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +2 -0
  40. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
  41. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +6 -1
  42. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
  43. package/Cameras/VR/vrExperienceHelper.js +2 -0
  44. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  45. package/Collisions/gpuPicker.js +9 -6
  46. package/Collisions/gpuPicker.js.map +1 -1
  47. package/Compute/computeShader.js +1 -1
  48. package/Compute/computeShader.js.map +1 -1
  49. package/Culling/Helper/boundingInfoHelper.js +3 -3
  50. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  51. package/Culling/Helper/computeShaderBoundingHelper.js +3 -1
  52. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  53. package/Culling/Helper/transformFeedbackBoundingHelper.js +3 -0
  54. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  55. package/Debug/debugLayer.js +1 -1
  56. package/Debug/debugLayer.js.map +1 -1
  57. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -0
  58. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  59. package/Engines/Extensions/engine.prefilteredCubeTexture.js +1 -0
  60. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  61. package/Engines/Extensions/engine.readTexture.js +1 -0
  62. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -0
  64. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.readTexture.js +1 -0
  66. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  67. package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -0
  68. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  69. package/Engines/WebGPU/webgpuBufferManager.js +3 -1
  70. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  71. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -0
  72. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  73. package/Engines/WebGPU/webgpuQuerySet.js +15 -9
  74. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  75. package/Engines/WebGPU/webgpuTextureManager.js +1 -0
  76. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  77. package/Engines/WebGPU/webgpuTimestampQuery.js +4 -2
  78. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  79. package/Engines/WebGPU/webgpuTintWASM.js +1 -0
  80. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  81. package/Engines/abstractEngine.js +5 -2
  82. package/Engines/abstractEngine.js.map +1 -1
  83. package/Engines/constants.d.ts +23 -0
  84. package/Engines/constants.js +23 -0
  85. package/Engines/constants.js.map +1 -1
  86. package/Engines/engine.common.js +7 -1
  87. package/Engines/engine.common.js.map +1 -1
  88. package/Engines/engine.js +5 -3
  89. package/Engines/engine.js.map +1 -1
  90. package/Engines/engineFactory.js +1 -1
  91. package/Engines/engineFactory.js.map +1 -1
  92. package/Engines/nativeEngine.js +19 -11
  93. package/Engines/nativeEngine.js.map +1 -1
  94. package/Engines/thinEngine.d.ts +1 -0
  95. package/Engines/thinEngine.js +22 -18
  96. package/Engines/thinEngine.js.map +1 -1
  97. package/Engines/webgpuEngine.js +30 -11
  98. package/Engines/webgpuEngine.js.map +1 -1
  99. package/FlowGraph/flowGraphParser.js +2 -2
  100. package/FlowGraph/flowGraphParser.js.map +1 -1
  101. package/FrameGraph/Node/nodeRenderGraph.js +5 -1
  102. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  103. package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -1
  104. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  105. package/FrameGraph/frameGraph.js +1 -1
  106. package/FrameGraph/frameGraph.js.map +1 -1
  107. package/Helpers/sceneHelpers.js +1 -3
  108. package/Helpers/sceneHelpers.js.map +1 -1
  109. package/Helpers/videoDome.js +1 -0
  110. package/Helpers/videoDome.js.map +1 -1
  111. package/Layers/thinEffectLayer.js +1 -0
  112. package/Layers/thinEffectLayer.js.map +1 -1
  113. package/LensFlares/lensFlareSystem.js +1 -0
  114. package/LensFlares/lensFlareSystem.js.map +1 -1
  115. package/Lights/Shadows/shadowGenerator.js +3 -2
  116. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  117. package/Lights/areaLight.js +2 -0
  118. package/Lights/areaLight.js.map +1 -1
  119. package/Loading/sceneLoader.js +56 -22
  120. package/Loading/sceneLoader.js.map +1 -1
  121. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +15 -1
  122. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +34 -7
  123. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  124. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +1 -0
  125. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Dual/fogBlock.js +1 -0
  127. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  128. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -0
  129. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -0
  131. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +1 -0
  133. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  134. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +1 -0
  135. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  136. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +1 -0
  137. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  138. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +9 -11
  139. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  140. package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -1
  141. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +6 -2
  143. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/Vertex/bonesBlock.js +1 -0
  145. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  146. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +1 -0
  147. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  148. package/Materials/Node/nodeMaterial.js +11 -3
  149. package/Materials/Node/nodeMaterial.js.map +1 -1
  150. package/Materials/Node/nodeMaterialBuildState.js +1 -0
  151. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  152. package/Materials/PBR/pbrBRDFConfiguration.d.ts +11 -0
  153. package/Materials/PBR/pbrBRDFConfiguration.js +16 -0
  154. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  155. package/Materials/PBR/pbrBaseMaterial.d.ts +4 -0
  156. package/Materials/PBR/pbrBaseMaterial.js +12 -8
  157. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  158. package/Materials/PBR/pbrMaterial.d.ts +8 -0
  159. package/Materials/PBR/pbrMaterial.js +16 -0
  160. package/Materials/PBR/pbrMaterial.js.map +1 -1
  161. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +1 -0
  162. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  163. package/Materials/Textures/Loaders/basisTextureLoader.js +4 -0
  164. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  165. package/Materials/Textures/Loaders/envTextureLoader.js +1 -0
  166. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  167. package/Materials/Textures/Loaders/exrTextureLoader.js +2 -0
  168. package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -1
  169. package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -0
  170. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  171. package/Materials/Textures/Loaders/textureLoaderManager.js +9 -9
  172. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
  173. package/Materials/Textures/Packer/packer.js +3 -1
  174. package/Materials/Textures/Packer/packer.js.map +1 -1
  175. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -0
  176. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  177. package/Materials/Textures/baseTexture.polynomial.js +1 -0
  178. package/Materials/Textures/baseTexture.polynomial.js.map +1 -1
  179. package/Materials/Textures/hdrCubeTexture.js +1 -0
  180. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  181. package/Materials/Textures/internalTexture.js +1 -0
  182. package/Materials/Textures/internalTexture.js.map +1 -1
  183. package/Materials/Textures/rawCubeTexture.js +3 -0
  184. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  185. package/Materials/Textures/renderTargetTexture.js +2 -0
  186. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  187. package/Materials/Textures/videoTexture.js +6 -0
  188. package/Materials/Textures/videoTexture.js.map +1 -1
  189. package/Materials/effect.js +2 -1
  190. package/Materials/effect.js.map +1 -1
  191. package/Materials/effect.webgl.functions.js +3 -1
  192. package/Materials/effect.webgl.functions.js.map +1 -1
  193. package/Materials/effectRenderer.js +1 -0
  194. package/Materials/effectRenderer.js.map +1 -1
  195. package/Materials/material.js +2 -1
  196. package/Materials/material.js.map +1 -1
  197. package/Materials/shaderMaterial.js +4 -2
  198. package/Materials/shaderMaterial.js.map +1 -1
  199. package/Meshes/Compression/dracoCodec.js +5 -1
  200. package/Meshes/Compression/dracoCodec.js.map +1 -1
  201. package/Meshes/Compression/dracoCompression.js +4 -3
  202. package/Meshes/Compression/dracoCompression.js.map +1 -1
  203. package/Meshes/Compression/dracoCompressionWorker.js +5 -2
  204. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  205. package/Meshes/Compression/dracoDecoder.js +5 -1
  206. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  207. package/Meshes/Compression/dracoEncoder.js +3 -2
  208. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  209. package/Meshes/Compression/meshoptCompression.js +18 -18
  210. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  211. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +14 -15
  212. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  213. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +20 -10
  214. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  215. package/Meshes/Node/Blocks/booleanGeometryBlock.js +1 -0
  216. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  217. package/Meshes/Node/nodeGeometry.js +5 -1
  218. package/Meshes/Node/nodeGeometry.js.map +1 -1
  219. package/Meshes/mesh.js +2 -2
  220. package/Meshes/mesh.js.map +1 -1
  221. package/Meshes/meshUVSpaceRenderer.js +1 -0
  222. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  223. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -0
  224. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  225. package/Misc/assetsManager.js +2 -1
  226. package/Misc/assetsManager.js.map +1 -1
  227. package/Misc/asyncLock.js +5 -2
  228. package/Misc/asyncLock.js.map +1 -1
  229. package/Misc/basis.js +9 -2
  230. package/Misc/basis.js.map +1 -1
  231. package/Misc/basisWorker.js +3 -1
  232. package/Misc/basisWorker.js.map +1 -1
  233. package/Misc/copyTextureToTexture.js +1 -0
  234. package/Misc/copyTextureToTexture.js.map +1 -1
  235. package/Misc/coroutine.js +2 -1
  236. package/Misc/coroutine.js.map +1 -1
  237. package/Misc/dataReader.js +3 -4
  238. package/Misc/dataReader.js.map +1 -1
  239. package/Misc/dumpTools.js +7 -1
  240. package/Misc/dumpTools.js.map +1 -1
  241. package/Misc/environmentTextureTools.d.ts +0 -2
  242. package/Misc/environmentTextureTools.js +20 -7
  243. package/Misc/environmentTextureTools.js.map +1 -1
  244. package/Misc/equirectangularCapture.js +2 -1
  245. package/Misc/equirectangularCapture.js.map +1 -1
  246. package/Misc/fileTools.js +2 -0
  247. package/Misc/fileTools.js.map +1 -1
  248. package/Misc/filesInput.js +5 -1
  249. package/Misc/filesInput.js.map +1 -1
  250. package/Misc/khronosTextureContainer2.js +10 -3
  251. package/Misc/khronosTextureContainer2.js.map +1 -1
  252. package/Misc/khronosTextureContainer2Worker.js +4 -1
  253. package/Misc/khronosTextureContainer2Worker.js.map +1 -1
  254. package/Misc/minMaxReducer.js +1 -0
  255. package/Misc/minMaxReducer.js.map +1 -1
  256. package/Misc/observable.extensions.js +3 -1
  257. package/Misc/observable.extensions.js.map +1 -1
  258. package/Misc/observable.js +2 -0
  259. package/Misc/observable.js.map +1 -1
  260. package/Misc/observableCoroutine.js +1 -0
  261. package/Misc/observableCoroutine.js.map +1 -1
  262. package/Misc/reflector.js +1 -0
  263. package/Misc/reflector.js.map +1 -1
  264. package/Misc/rgbdTextureTools.js +2 -1
  265. package/Misc/rgbdTextureTools.js.map +1 -1
  266. package/Misc/sceneSerializer.js +2 -2
  267. package/Misc/sceneSerializer.js.map +1 -1
  268. package/Misc/screenshotTools.js +9 -4
  269. package/Misc/screenshotTools.js.map +1 -1
  270. package/Misc/textureTools.js +2 -0
  271. package/Misc/textureTools.js.map +1 -1
  272. package/Misc/tools.internals.js +2 -1
  273. package/Misc/tools.internals.js.map +1 -1
  274. package/Misc/tools.js +9 -3
  275. package/Misc/tools.js.map +1 -1
  276. package/Misc/videoRecorder.js +1 -0
  277. package/Misc/videoRecorder.js.map +1 -1
  278. package/Misc/webRequest.fetch.js +2 -1
  279. package/Misc/webRequest.fetch.js.map +1 -1
  280. package/Misc/workerPool.js +3 -0
  281. package/Misc/workerPool.js.map +1 -1
  282. package/Particles/flowMap.js +1 -1
  283. package/Particles/flowMap.js.map +1 -1
  284. package/Particles/particleHelper.js +7 -0
  285. package/Particles/particleHelper.js.map +1 -1
  286. package/Particles/pointsCloudSystem.js +7 -7
  287. package/Particles/pointsCloudSystem.js.map +1 -1
  288. package/Particles/thinParticleSystem.js +2 -0
  289. package/Particles/thinParticleSystem.js.map +1 -1
  290. package/Physics/physicsHelper.js +2 -2
  291. package/Physics/physicsHelper.js.map +1 -1
  292. package/Physics/v1/Plugins/oimoJSPlugin.js +1 -1
  293. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  294. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  295. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  296. package/Rendering/GlobalIllumination/giRSMManager.js +1 -0
  297. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  298. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +1 -0
  299. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  300. package/Rendering/depthRenderer.js +1 -0
  301. package/Rendering/depthRenderer.js.map +1 -1
  302. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -1
  303. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  304. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  305. package/Rendering/geometryBufferRenderer.js +1 -0
  306. package/Rendering/geometryBufferRenderer.js.map +1 -1
  307. package/Rendering/iblCdfGenerator.js +4 -1
  308. package/Rendering/iblCdfGenerator.js.map +1 -1
  309. package/Shaders/ShadersInclude/lightFragment.js +5 -1
  310. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  311. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +12 -5
  312. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  313. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +3 -0
  314. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  315. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +21 -8
  316. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  317. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -0
  318. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  319. package/Shaders/ShadersInclude/pbrBlockReflectance.js +6 -6
  320. package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  321. package/Shaders/ShadersInclude/pbrBlockReflectance0.js +2 -7
  322. package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  323. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +20 -16
  324. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  325. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +6 -8
  326. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  327. package/Shaders/ShadersInclude/pbrDebug.js +2 -2
  328. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  329. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -5
  330. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  331. package/Shaders/pbr.fragment.js +7 -3
  332. package/Shaders/pbr.fragment.js.map +1 -1
  333. package/ShadersWGSL/ShadersInclude/lightFragment.js +5 -1
  334. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  335. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +5 -5
  336. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  337. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +3 -0
  338. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  339. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +21 -8
  340. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  341. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -0
  342. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  343. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +6 -6
  344. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  345. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js +2 -7
  346. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  347. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +22 -15
  348. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  349. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +6 -8
  350. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  351. package/ShadersWGSL/ShadersInclude/pbrDebug.js +2 -2
  352. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  353. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +1 -7
  354. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  355. package/ShadersWGSL/pbr.fragment.js +7 -3
  356. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  357. package/Sprites/spriteManager.js +5 -1
  358. package/Sprites/spriteManager.js.map +1 -1
  359. package/Sprites/spriteRenderer.js +1 -0
  360. package/Sprites/spriteRenderer.js.map +1 -1
  361. package/XR/features/WebXRAnchorSystem.js +4 -3
  362. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  363. package/XR/features/WebXRDepthSensing.js +1 -1
  364. package/XR/features/WebXRDepthSensing.js.map +1 -1
  365. package/XR/features/WebXRHandTracking.js +4 -1
  366. package/XR/features/WebXRHandTracking.js.map +1 -1
  367. package/XR/features/WebXRHitTest.js +4 -1
  368. package/XR/features/WebXRHitTest.js.map +1 -1
  369. package/XR/features/WebXRHitTestLegacy.js +6 -5
  370. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  371. package/XR/features/WebXRImageTracking.js +2 -1
  372. package/XR/features/WebXRImageTracking.js.map +1 -1
  373. package/XR/features/WebXRLightEstimation.js +3 -0
  374. package/XR/features/WebXRLightEstimation.js.map +1 -1
  375. package/XR/features/WebXRNearInteraction.js +2 -0
  376. package/XR/features/WebXRNearInteraction.js.map +1 -1
  377. package/XR/features/WebXRPlaneDetector.js +2 -2
  378. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  379. package/XR/motionController/webXRAbstractMotionController.js +3 -2
  380. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  381. package/XR/motionController/webXRMicrosoftMixedRealityController.js +6 -6
  382. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  383. package/XR/motionController/webXRMotionControllerManager.js +15 -9
  384. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  385. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  386. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  387. package/XR/native/nativeXRFrame.js +1 -0
  388. package/XR/native/nativeXRFrame.js.map +1 -1
  389. package/XR/webXRDefaultExperience.js +10 -12
  390. package/XR/webXRDefaultExperience.js.map +1 -1
  391. package/XR/webXREnterExitUI.js +2 -1
  392. package/XR/webXREnterExitUI.js.map +1 -1
  393. package/XR/webXRExperienceHelper.js +5 -2
  394. package/XR/webXRExperienceHelper.js.map +1 -1
  395. package/XR/webXRFeaturesManager.js +1 -0
  396. package/XR/webXRFeaturesManager.js.map +1 -1
  397. package/XR/webXRInput.js +1 -0
  398. package/XR/webXRInput.js.map +1 -1
  399. package/XR/webXRInputSource.js +2 -0
  400. package/XR/webXRInputSource.js.map +1 -1
  401. package/XR/webXRManagedOutputCanvas.js +5 -1
  402. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  403. package/XR/webXRSessionManager.js +56 -60
  404. package/XR/webXRSessionManager.js.map +1 -1
  405. package/assetContainer.js +28 -28
  406. package/assetContainer.js.map +1 -1
  407. package/package.json +1 -1
  408. package/scene.js +5 -4
  409. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fluidRenderingTargetRenderer.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingTargetRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"core/Cameras/camera\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { InternalTexture } from \"core/Materials/Textures/internalTexture\";\r\nimport type { ThinTexture } from \"core/Materials/Textures/thinTexture\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { PostProcess } from \"core/PostProcesses/postProcess\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\nimport type { FluidRenderingObject } from \"./fluidRenderingObject\";\r\nimport { FluidRenderingTextures } from \"./fluidRenderingTextures\";\r\nimport type { WebGPUEngine } from \"core/Engines/webgpuEngine\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Textures that can be displayed as a debugging tool\r\n */\r\nexport const enum FluidRenderingDebug {\r\n DepthTexture,\r\n DepthBlurredTexture,\r\n ThicknessTexture,\r\n ThicknessBlurredTexture,\r\n DiffuseTexture,\r\n Normals,\r\n DiffuseRendering,\r\n}\r\n\r\n/**\r\n * Class used to render an object as a fluid thanks to different render target textures (depth, thickness, diffuse)\r\n */\r\nexport class FluidRenderingTargetRenderer {\r\n protected _scene: Scene;\r\n protected _camera: Nullable<Camera>;\r\n protected _engine: AbstractEngine;\r\n\r\n protected _invProjectionMatrix: Matrix;\r\n protected _depthClearColor: Color4;\r\n protected _thicknessClearColor: Color4;\r\n\r\n protected _needInitialization: boolean;\r\n\r\n /**\r\n * Returns true if the class needs to be reinitialized (because of changes in parameterization)\r\n */\r\n public get needInitialization() {\r\n return this._needInitialization;\r\n }\r\n\r\n private _generateDiffuseTexture = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the diffuse texture should be generated and used for the rendering\r\n */\r\n public get generateDiffuseTexture() {\r\n return this._generateDiffuseTexture;\r\n }\r\n\r\n public set generateDiffuseTexture(generate: boolean) {\r\n if (this._generateDiffuseTexture === generate) {\r\n return;\r\n }\r\n\r\n this._generateDiffuseTexture = generate;\r\n this._needInitialization = true;\r\n }\r\n\r\n /**\r\n * Fluid color. Not used if generateDiffuseTexture is true\r\n */\r\n public fluidColor = new Color3(0.085, 0.6375, 0.765);\r\n\r\n /**\r\n * Density of the fluid (positive number). The higher the value, the more opaque the fluid.\r\n */\r\n public density = 2;\r\n\r\n /**\r\n * Strength of the refraction (positive number, but generally between 0 and 0.3).\r\n */\r\n public refractionStrength = 0.1;\r\n\r\n /**\r\n * Strength of the fresnel effect (value between 0 and 1). Lower the value if you want to soften the specular effect\r\n */\r\n public fresnelClamp = 1.0;\r\n\r\n /**\r\n * Strength of the specular power (positive number). Increase the value to make the specular effect more concentrated\r\n */\r\n public specularPower = 250;\r\n\r\n /**\r\n * Minimum thickness of the particles (positive number). If useFixedThickness is true, minimumThickness is the thickness used\r\n */\r\n public minimumThickness = 0;\r\n\r\n /**\r\n * Direction of the light. The fluid is assumed to be lit by a directional light\r\n */\r\n public dirLight: Vector3 = new Vector3(-2, -1, 1).normalize();\r\n\r\n private _debugFeature: FluidRenderingDebug = FluidRenderingDebug.DepthBlurredTexture;\r\n\r\n /**\r\n * Gets or sets the feature (texture) to be debugged. Not used if debug is false\r\n */\r\n public get debugFeature() {\r\n return this._debugFeature;\r\n }\r\n\r\n public set debugFeature(feature: FluidRenderingDebug) {\r\n if (this._debugFeature === feature) {\r\n return;\r\n }\r\n\r\n this._needInitialization = true;\r\n this._debugFeature = feature;\r\n }\r\n\r\n private _debug = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if we should display a specific texture (given by debugFeature) for debugging purpose\r\n */\r\n public get debug() {\r\n return this._debug;\r\n }\r\n\r\n public set debug(debug: boolean) {\r\n if (this._debug === debug) {\r\n return;\r\n }\r\n\r\n this._debug = debug;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _environmentMap?: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Gets or sets the environment map used for the reflection part of the shading\r\n * If null, no map will be used. If undefined, the scene.environmentMap will be used (if defined)\r\n */\r\n public get environmentMap() {\r\n return this._environmentMap;\r\n }\r\n\r\n public set environmentMap(map: Nullable<BaseTexture> | undefined) {\r\n if (this._environmentMap === map) {\r\n return;\r\n }\r\n\r\n this._needInitialization = true;\r\n this._environmentMap = map;\r\n }\r\n\r\n private _enableBlurDepth = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the depth texture should be blurred\r\n */\r\n public get enableBlurDepth() {\r\n return this._enableBlurDepth;\r\n }\r\n\r\n public set enableBlurDepth(enable: boolean) {\r\n if (this._enableBlurDepth === enable) {\r\n return;\r\n }\r\n\r\n this._enableBlurDepth = enable;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurDepthSizeDivisor = 1;\r\n\r\n /**\r\n * Gets or sets the depth size divisor (positive number, generally between 1 and 4), which is used as a divisor when creating the texture used for blurring the depth\r\n * For eg. if blurDepthSizeDivisor=2, the texture used to blur the depth will be half the size of the depth texture\r\n */\r\n public get blurDepthSizeDivisor() {\r\n return this._blurDepthSizeDivisor;\r\n }\r\n\r\n public set blurDepthSizeDivisor(scale: number) {\r\n if (this._blurDepthSizeDivisor === scale) {\r\n return;\r\n }\r\n\r\n this._blurDepthSizeDivisor = scale;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurDepthFilterSize = 7;\r\n\r\n /**\r\n * Size of the kernel used to filter the depth blur texture (positive number, generally between 1 and 20 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurDepthFilterSize() {\r\n return this._blurDepthFilterSize;\r\n }\r\n\r\n public set blurDepthFilterSize(filterSize: number) {\r\n if (this._blurDepthFilterSize === filterSize) {\r\n return;\r\n }\r\n\r\n this._blurDepthFilterSize = filterSize;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurDepthNumIterations = 3;\r\n\r\n /**\r\n * Number of blurring iterations used to generate the depth blur texture (positive number, generally between 1 and 10 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurDepthNumIterations() {\r\n return this._blurDepthNumIterations;\r\n }\r\n\r\n public set blurDepthNumIterations(numIterations: number) {\r\n if (this._blurDepthNumIterations === numIterations) {\r\n return;\r\n }\r\n\r\n this._blurDepthNumIterations = numIterations;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurDepthMaxFilterSize = 100;\r\n\r\n /**\r\n * Maximum size of the kernel used to blur the depth texture (positive number, generally between 1 and 200 - higher values will require more processing power from the GPU when the particles are larger on screen)\r\n */\r\n public get blurDepthMaxFilterSize() {\r\n return this._blurDepthMaxFilterSize;\r\n }\r\n\r\n public set blurDepthMaxFilterSize(maxFilterSize: number) {\r\n if (this._blurDepthMaxFilterSize === maxFilterSize) {\r\n return;\r\n }\r\n\r\n this._blurDepthMaxFilterSize = maxFilterSize;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurDepthDepthScale = 10;\r\n\r\n /**\r\n * Depth weight in the calculation when applying the bilateral blur to generate the depth blur texture (positive number, generally between 0 and 100)\r\n */\r\n public get blurDepthDepthScale() {\r\n return this._blurDepthDepthScale;\r\n }\r\n\r\n public set blurDepthDepthScale(scale: number) {\r\n if (this._blurDepthDepthScale === scale) {\r\n return;\r\n }\r\n\r\n this._blurDepthDepthScale = scale;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _enableBlurThickness = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the thickness texture should be blurred\r\n */\r\n public get enableBlurThickness() {\r\n return this._enableBlurThickness;\r\n }\r\n\r\n public set enableBlurThickness(enable: boolean) {\r\n if (this._enableBlurThickness === enable) {\r\n return;\r\n }\r\n\r\n this._enableBlurThickness = enable;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurThicknessSizeDivisor = 1;\r\n\r\n /**\r\n * Gets or sets the thickness size divisor (positive number, generally between 1 and 4), which is used as a divisor when creating the texture used for blurring the thickness\r\n * For eg. if blurThicknessSizeDivisor=2, the texture used to blur the thickness will be half the size of the thickness texture\r\n */\r\n public get blurThicknessSizeDivisor() {\r\n return this._blurThicknessSizeDivisor;\r\n }\r\n\r\n public set blurThicknessSizeDivisor(scale: number) {\r\n if (this._blurThicknessSizeDivisor === scale) {\r\n return;\r\n }\r\n\r\n this._blurThicknessSizeDivisor = scale;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurThicknessFilterSize = 5;\r\n\r\n /**\r\n * Size of the kernel used to filter the thickness blur texture (positive number, generally between 1 and 20 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurThicknessFilterSize() {\r\n return this._blurThicknessFilterSize;\r\n }\r\n\r\n public set blurThicknessFilterSize(filterSize: number) {\r\n if (this._blurThicknessFilterSize === filterSize) {\r\n return;\r\n }\r\n\r\n this._blurThicknessFilterSize = filterSize;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurThicknessNumIterations = 1;\r\n\r\n /**\r\n * Number of blurring iterations used to generate the thickness blur texture (positive number, generally between 1 and 10 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurThicknessNumIterations() {\r\n return this._blurThicknessNumIterations;\r\n }\r\n\r\n public set blurThicknessNumIterations(numIterations: number) {\r\n if (this._blurThicknessNumIterations === numIterations) {\r\n return;\r\n }\r\n\r\n this._blurThicknessNumIterations = numIterations;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _useFixedThickness = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that a fixed thickness should be used instead of generating a thickness texture\r\n */\r\n public get useFixedThickness() {\r\n return this._useFixedThickness;\r\n }\r\n\r\n public set useFixedThickness(use: boolean) {\r\n if (this._useFixedThickness === use) {\r\n return;\r\n }\r\n\r\n this._useFixedThickness = use;\r\n this._needInitialization = true;\r\n }\r\n\r\n /** @internal */\r\n public _bgDepthTexture: Nullable<InternalTexture>;\r\n\r\n /** @internal */\r\n public _onUseVelocityChanged = new Observable<FluidRenderingTargetRenderer>();\r\n\r\n private _useVelocity = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the velocity should be used when rendering the particles as a fluid.\r\n * Note: the vertex buffers must contain a \"velocity\" buffer for this to work!\r\n */\r\n public get useVelocity() {\r\n return this._useVelocity;\r\n }\r\n\r\n public set useVelocity(use: boolean) {\r\n if (this._useVelocity === use) {\r\n return;\r\n }\r\n\r\n this._useVelocity = use;\r\n this._needInitialization = true;\r\n this._onUseVelocityChanged.notifyObservers(this);\r\n }\r\n\r\n private _depthMapSize: Nullable<number> = null;\r\n\r\n /**\r\n * Defines the size of the depth texture.\r\n * If null, the texture will have the size of the screen\r\n */\r\n public get depthMapSize() {\r\n return this._depthMapSize;\r\n }\r\n\r\n public set depthMapSize(size: Nullable<number>) {\r\n if (this._depthMapSize === size) {\r\n return;\r\n }\r\n\r\n this._depthMapSize = size;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _thicknessMapSize: Nullable<number> = null;\r\n\r\n /**\r\n * Defines the size of the thickness texture.\r\n * If null, the texture will have the size of the screen\r\n */\r\n public get thicknessMapSize() {\r\n return this._thicknessMapSize;\r\n }\r\n\r\n public set thicknessMapSize(size: Nullable<number>) {\r\n if (this._thicknessMapSize === size) {\r\n return;\r\n }\r\n\r\n this._thicknessMapSize = size;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _diffuseMapSize: Nullable<number> = null;\r\n\r\n /**\r\n * Defines the size of the diffuse texture.\r\n * If null, the texture will have the size of the screen\r\n */\r\n public get diffuseMapSize() {\r\n return this._diffuseMapSize;\r\n }\r\n\r\n public set diffuseMapSize(size: Nullable<number>) {\r\n if (this._diffuseMapSize === size) {\r\n return;\r\n }\r\n\r\n this._diffuseMapSize = size;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _samples = 1;\r\n\r\n /**\r\n * Gets or sets the number of samples used by MSAA\r\n * Note: changing this value in WebGL does not work because depth/stencil textures can't be created with MSAA (see https://github.com/BabylonJS/Babylon.js/issues/12444)\r\n */\r\n public get samples() {\r\n return this._samples;\r\n }\r\n\r\n public set samples(samples: number) {\r\n if (this._samples === samples) {\r\n return;\r\n }\r\n\r\n this._samples = samples;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _compositeMode = false;\r\n\r\n /**\r\n * If compositeMode is true (default: false), when the alpha value of the background (the scene rendered without the fluid objects) is 0, the final alpha value of the pixel will be set to the thickness value.\r\n * This way, it is possible to composite the fluid rendering on top of the HTML background.\r\n */\r\n public get compositeMode() {\r\n return this._compositeMode;\r\n }\r\n\r\n public set compositeMode(value: boolean) {\r\n if (this._compositeMode === value) {\r\n return;\r\n }\r\n\r\n this._compositeMode = value;\r\n this._needInitialization = true;\r\n }\r\n\r\n /**\r\n * Gets the camera used for the rendering\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n /** @internal */\r\n public _renderPostProcess: Nullable<PostProcess>;\r\n\r\n /** @internal */\r\n public _depthRenderTarget: Nullable<FluidRenderingTextures>;\r\n\r\n /** @internal */\r\n public _diffuseRenderTarget: Nullable<FluidRenderingTextures>;\r\n\r\n /** @internal */\r\n public _thicknessRenderTarget: Nullable<FluidRenderingTextures>;\r\n\r\n /** Shader language used by the renderer */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * Creates an instance of the class\r\n * @param scene Scene used to render the fluid object into\r\n * @param camera Camera used to render the fluid object. If not provided, use the active camera of the scene instead\r\n * @param shaderLanguage The shader language to use\r\n */\r\n constructor(scene: Scene, camera?: Camera, shaderLanguage?: ShaderLanguage) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._camera = camera ?? scene.activeCamera;\r\n this._needInitialization = true;\r\n this._bgDepthTexture = null;\r\n\r\n this._invProjectionMatrix = new Matrix();\r\n this._depthClearColor = new Color4(1e6, 1e6, 1e6, 1);\r\n this._thicknessClearColor = new Color4(0, 0, 0, 1);\r\n\r\n this._depthRenderTarget = null;\r\n this._diffuseRenderTarget = null;\r\n this._thicknessRenderTarget = null;\r\n\r\n this._renderPostProcess = null;\r\n\r\n this._shaderLanguage = shaderLanguage ?? (this._engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL);\r\n }\r\n\r\n /** @internal */\r\n public _initialize(): void {\r\n this.dispose();\r\n\r\n this._needInitialization = false;\r\n\r\n const depthWidth = this._depthMapSize ?? this._engine.getRenderWidth();\r\n const depthHeight =\r\n this._depthMapSize !== null ? Math.round((this._depthMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth()) : this._engine.getRenderHeight();\r\n\r\n this._depthRenderTarget = new FluidRenderingTextures(\r\n \"Depth\",\r\n this._scene,\r\n depthWidth,\r\n depthHeight,\r\n depthWidth,\r\n depthHeight,\r\n Constants.TEXTURETYPE_FLOAT,\r\n Constants.TEXTUREFORMAT_RG,\r\n Constants.TEXTURETYPE_FLOAT,\r\n Constants.TEXTUREFORMAT_RG,\r\n false,\r\n this._camera,\r\n true,\r\n this._samples,\r\n this._shaderLanguage\r\n );\r\n\r\n this._initializeRenderTarget(this._depthRenderTarget);\r\n\r\n if (this.generateDiffuseTexture) {\r\n const diffuseWidth = this._diffuseMapSize ?? this._engine.getRenderWidth();\r\n const diffuseHeight =\r\n this._diffuseMapSize !== null\r\n ? Math.round((this._diffuseMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth())\r\n : this._engine.getRenderHeight();\r\n\r\n this._diffuseRenderTarget = new FluidRenderingTextures(\r\n \"Diffuse\",\r\n this._scene,\r\n diffuseWidth,\r\n diffuseHeight,\r\n 0,\r\n 0,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n true,\r\n this._camera,\r\n true,\r\n this._samples,\r\n this._shaderLanguage\r\n );\r\n\r\n this._initializeRenderTarget(this._diffuseRenderTarget);\r\n }\r\n\r\n const thicknessWidth = this._thicknessMapSize ?? this._engine.getRenderWidth();\r\n const thicknessHeight =\r\n this._thicknessMapSize !== null\r\n ? Math.round((this._thicknessMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth())\r\n : this._engine.getRenderHeight();\r\n\r\n if (!this._useFixedThickness) {\r\n this._thicknessRenderTarget = new FluidRenderingTextures(\r\n \"Thickness\",\r\n this._scene,\r\n thicknessWidth,\r\n thicknessHeight,\r\n thicknessWidth,\r\n thicknessHeight,\r\n Constants.TEXTURETYPE_HALF_FLOAT,\r\n Constants.TEXTUREFORMAT_R,\r\n Constants.TEXTURETYPE_HALF_FLOAT,\r\n Constants.TEXTUREFORMAT_R,\r\n true,\r\n this._camera,\r\n false,\r\n this._samples,\r\n this._shaderLanguage\r\n );\r\n\r\n this._initializeRenderTarget(this._thicknessRenderTarget);\r\n }\r\n\r\n this._createLiquidRenderingPostProcess();\r\n }\r\n\r\n protected _setBlurParameters(renderTarget: Nullable<FluidRenderingTextures> = null): void {\r\n if (renderTarget === null || renderTarget === this._depthRenderTarget) {\r\n this._setBlurDepthParameters();\r\n }\r\n if (renderTarget === null || renderTarget === this._thicknessRenderTarget) {\r\n this._setBlurThicknessParameters();\r\n }\r\n }\r\n\r\n protected _setBlurDepthParameters(): void {\r\n if (!this._depthRenderTarget) {\r\n return;\r\n }\r\n this._depthRenderTarget.blurFilterSize = this.blurDepthFilterSize;\r\n this._depthRenderTarget.blurMaxFilterSize = this.blurDepthMaxFilterSize;\r\n this._depthRenderTarget.blurNumIterations = this.blurDepthNumIterations;\r\n this._depthRenderTarget.blurDepthScale = this.blurDepthDepthScale;\r\n }\r\n\r\n protected _setBlurThicknessParameters(): void {\r\n if (!this._thicknessRenderTarget) {\r\n return;\r\n }\r\n this._thicknessRenderTarget.blurFilterSize = this.blurThicknessFilterSize;\r\n this._thicknessRenderTarget.blurNumIterations = this.blurThicknessNumIterations;\r\n }\r\n\r\n protected _initializeRenderTarget(renderTarget: FluidRenderingTextures): void {\r\n if (renderTarget !== this._diffuseRenderTarget) {\r\n renderTarget.enableBlur = renderTarget === this._depthRenderTarget ? this.enableBlurDepth : this.enableBlurThickness;\r\n renderTarget.blurSizeDivisor = renderTarget === this._depthRenderTarget ? this.blurDepthSizeDivisor : this.blurThicknessSizeDivisor;\r\n }\r\n\r\n this._setBlurParameters(renderTarget);\r\n\r\n renderTarget.initialize();\r\n }\r\n\r\n protected _createLiquidRenderingPostProcess(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n const uniformNames = [\r\n \"viewMatrix\",\r\n \"projectionMatrix\",\r\n \"invProjectionMatrix\",\r\n \"texelSize\",\r\n \"dirLight\",\r\n \"cameraFar\",\r\n \"density\",\r\n \"refractionStrength\",\r\n \"fresnelClamp\",\r\n \"specularPower\",\r\n ];\r\n const samplerNames = [\"depthSampler\"];\r\n const defines = [];\r\n\r\n this.dispose(true);\r\n\r\n if (!this._camera) {\r\n return;\r\n }\r\n\r\n const texture = this._depthRenderTarget!.enableBlur ? this._depthRenderTarget!.textureBlur! : this._depthRenderTarget!.texture!;\r\n const texelSize = new Vector2(1 / texture.getSize().width, 1 / texture.getSize().height);\r\n\r\n if (this._scene.useRightHandedSystem) {\r\n defines.push(\"#define FLUIDRENDERING_RHS\");\r\n }\r\n\r\n if (this._environmentMap !== null) {\r\n const envMap = this._environmentMap ?? this._scene.environmentTexture;\r\n if (envMap) {\r\n samplerNames.push(\"reflectionSampler\");\r\n defines.push(\"#define FLUIDRENDERING_ENVIRONMENT\");\r\n }\r\n }\r\n\r\n if (this._diffuseRenderTarget) {\r\n samplerNames.push(\"diffuseSampler\");\r\n defines.push(\"#define FLUIDRENDERING_DIFFUSETEXTURE\");\r\n } else {\r\n uniformNames.push(\"diffuseColor\");\r\n }\r\n\r\n if (this._useVelocity) {\r\n samplerNames.push(\"velocitySampler\");\r\n defines.push(\"#define FLUIDRENDERING_VELOCITY\");\r\n }\r\n\r\n if (this._useFixedThickness) {\r\n uniformNames.push(\"thickness\");\r\n samplerNames.push(\"bgDepthSampler\");\r\n defines.push(\"#define FLUIDRENDERING_FIXED_THICKNESS\");\r\n } else {\r\n uniformNames.push(\"minimumThickness\");\r\n samplerNames.push(\"thicknessSampler\");\r\n }\r\n\r\n if (this._compositeMode) {\r\n defines.push(\"#define FLUIDRENDERING_COMPOSITE_MODE\");\r\n }\r\n\r\n if (this._debug) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG\");\r\n if (this._debugFeature === FluidRenderingDebug.Normals) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_SHOWNORMAL\");\r\n } else if (this._debugFeature === FluidRenderingDebug.DiffuseRendering) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_DIFFUSERENDERING\");\r\n } else {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_TEXTURE\");\r\n samplerNames.push(\"debugSampler\");\r\n if (this._debugFeature === FluidRenderingDebug.DepthTexture || this._debugFeature === FluidRenderingDebug.DepthBlurredTexture) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_DEPTH\");\r\n }\r\n }\r\n }\r\n\r\n this._renderPostProcess = new PostProcess(\r\n \"FluidRendering\",\r\n \"fluidRenderingRender\",\r\n uniformNames,\r\n samplerNames,\r\n 1,\r\n null,\r\n Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n null,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n undefined,\r\n undefined,\r\n true,\r\n undefined,\r\n this._shaderLanguage,\r\n async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingRender.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingRender.fragment\");\r\n }\r\n }\r\n );\r\n this._renderPostProcess.updateEffect(defines.join(\"\\n\"));\r\n\r\n this._renderPostProcess.samples = this._samples;\r\n const engineWebGPU = engine as WebGPUEngine;\r\n const setTextureSampler = engineWebGPU.setTextureSampler;\r\n this._renderPostProcess.onApplyObservable.add((effect) => {\r\n this._invProjectionMatrix.copyFrom(this._scene.getProjectionMatrix());\r\n this._invProjectionMatrix.invert();\r\n\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"textureSamplerSampler\", this._renderPostProcess!.inputTexture.texture);\r\n }\r\n\r\n if (!this._depthRenderTarget!.enableBlur) {\r\n effect.setTexture(\"depthSampler\", this._depthRenderTarget!.texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"depthSamplerSampler\", this._depthRenderTarget!.texture?.getInternalTexture() ?? null);\r\n }\r\n } else {\r\n effect.setTexture(\"depthSampler\", this._depthRenderTarget!.textureBlur);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"depthSamplerSampler\", this._depthRenderTarget!.textureBlur?.getInternalTexture() ?? null);\r\n }\r\n }\r\n if (this._diffuseRenderTarget) {\r\n if (!this._diffuseRenderTarget.enableBlur) {\r\n effect.setTexture(\"diffuseSampler\", this._diffuseRenderTarget.texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"diffuseSamplerSampler\", this._diffuseRenderTarget.texture?.getInternalTexture() ?? null);\r\n }\r\n } else {\r\n effect.setTexture(\"diffuseSampler\", this._diffuseRenderTarget.textureBlur);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"diffuseSamplerSampler\", this._diffuseRenderTarget.textureBlur?.getInternalTexture() ?? null);\r\n }\r\n }\r\n } else {\r\n effect.setColor3(\"diffuseColor\", this.fluidColor);\r\n }\r\n if (this._useFixedThickness) {\r\n effect.setFloat(\"thickness\", this.minimumThickness);\r\n effect._bindTexture(\"bgDepthSampler\", this._bgDepthTexture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"bgDepthSamplerSampler\", this._bgDepthTexture ?? null);\r\n }\r\n } else {\r\n if (!this._thicknessRenderTarget!.enableBlur) {\r\n effect.setTexture(\"thicknessSampler\", this._thicknessRenderTarget!.texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"thicknessSamplerSampler\", this._thicknessRenderTarget!.texture?.getInternalTexture() ?? null);\r\n }\r\n } else {\r\n effect.setTexture(\"thicknessSampler\", this._thicknessRenderTarget!.textureBlur);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"thicknessSamplerSampler\", this._thicknessRenderTarget!.textureBlur?.getInternalTexture() ?? null);\r\n }\r\n }\r\n effect.setFloat(\"minimumThickness\", this.minimumThickness);\r\n }\r\n\r\n if (this._environmentMap !== null) {\r\n const envMap = this._environmentMap ?? this._scene.environmentTexture;\r\n if (envMap) {\r\n effect.setTexture(\"reflectionSampler\", envMap);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"reflectionSamplerSampler\", envMap?.getInternalTexture() ?? null);\r\n }\r\n }\r\n }\r\n\r\n effect.setMatrix(\"viewMatrix\", this._scene.getViewMatrix());\r\n effect.setMatrix(\"invProjectionMatrix\", this._invProjectionMatrix);\r\n effect.setMatrix(\"projectionMatrix\", this._scene.getProjectionMatrix());\r\n effect.setVector2(\"texelSize\", texelSize);\r\n effect.setFloat(\"density\", this.density);\r\n effect.setFloat(\"refractionStrength\", this.refractionStrength);\r\n effect.setFloat(\"fresnelClamp\", this.fresnelClamp);\r\n effect.setFloat(\"specularPower\", this.specularPower);\r\n\r\n effect.setVector3(\"dirLight\", this.dirLight);\r\n\r\n effect.setFloat(\"cameraFar\", this._camera!.maxZ);\r\n\r\n if (this._debug) {\r\n let texture: Nullable<ThinTexture> = null;\r\n switch (this._debugFeature) {\r\n case FluidRenderingDebug.DepthTexture:\r\n texture = this._depthRenderTarget!.texture;\r\n break;\r\n case FluidRenderingDebug.DepthBlurredTexture:\r\n texture = this._depthRenderTarget!.enableBlur ? this._depthRenderTarget!.textureBlur : this._depthRenderTarget!.texture;\r\n break;\r\n case FluidRenderingDebug.ThicknessTexture:\r\n texture = this._thicknessRenderTarget?.texture ?? null;\r\n break;\r\n case FluidRenderingDebug.ThicknessBlurredTexture:\r\n texture = this._thicknessRenderTarget?.enableBlur ? (this._thicknessRenderTarget?.textureBlur ?? null) : (this._thicknessRenderTarget?.texture ?? null);\r\n break;\r\n case FluidRenderingDebug.DiffuseTexture:\r\n if (this._diffuseRenderTarget) {\r\n texture = this._diffuseRenderTarget.texture;\r\n }\r\n break;\r\n }\r\n if (this._debugFeature !== FluidRenderingDebug.Normals) {\r\n effect.setTexture(\"debugSampler\", texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"debugSamplerSampler\", texture?.getInternalTexture() ?? null);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n public _clearTargets(): void {\r\n if (this._depthRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._depthRenderTarget.renderTarget);\r\n this._engine.clear(this._depthClearColor, true, true, false);\r\n this._engine.unBindFramebuffer(this._depthRenderTarget.renderTarget);\r\n }\r\n\r\n if (this._diffuseRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n this._engine.clear(this._thicknessClearColor, true, true, false);\r\n this._engine.unBindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n }\r\n\r\n if (this._thicknessRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n // we don't clear the depth buffer because it is the depth buffer that is coming from the scene and that we reuse in the thickness rendering pass\r\n this._engine.clear(this._thicknessClearColor, true, false, false);\r\n this._engine.unBindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _render(fluidObject: FluidRenderingObject): void {\r\n if (this._needInitialization || !fluidObject.isReady()) {\r\n return;\r\n }\r\n\r\n const currentRenderTarget = this._engine._currentRenderTarget;\r\n\r\n this._engine.setState(false, undefined, undefined, undefined, true);\r\n this._engine.setDepthBuffer(true);\r\n this._engine.setDepthWrite(true);\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n\r\n // Render the particles in the depth texture\r\n if (this._depthRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._depthRenderTarget.renderTarget);\r\n\r\n fluidObject.renderDepthTexture();\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.unBindFramebuffer(this._depthRenderTarget.renderTarget);\r\n }\r\n\r\n // Render the particles in the diffuse texture\r\n if (this._diffuseRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n\r\n fluidObject.renderDiffuseTexture();\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.unBindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n }\r\n\r\n // Render the particles in the thickness texture\r\n if (this._thicknessRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n\r\n fluidObject.renderThicknessTexture();\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.unBindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n }\r\n\r\n // Run the blur post processes\r\n this._depthRenderTarget?.applyBlurPostProcesses();\r\n this._diffuseRenderTarget?.applyBlurPostProcesses();\r\n this._thicknessRenderTarget?.applyBlurPostProcesses();\r\n\r\n if (currentRenderTarget) {\r\n this._engine.bindFramebuffer(currentRenderTarget);\r\n }\r\n }\r\n\r\n /**\r\n * Releases all the ressources used by the class\r\n * @param onlyPostProcesses If true, releases only the ressources used by the render post processes\r\n */\r\n public dispose(onlyPostProcesses = false): void {\r\n if (!onlyPostProcesses) {\r\n this._depthRenderTarget?.dispose();\r\n this._depthRenderTarget = null;\r\n\r\n this._diffuseRenderTarget?.dispose();\r\n this._diffuseRenderTarget = null;\r\n\r\n this._thicknessRenderTarget?.dispose();\r\n this._thicknessRenderTarget = null;\r\n }\r\n\r\n if (this._renderPostProcess && this._camera) {\r\n this._camera.detachPostProcess(this._renderPostProcess);\r\n }\r\n this._renderPostProcess?.dispose();\r\n this._renderPostProcess = null;\r\n\r\n this._onUseVelocityChanged.clear();\r\n\r\n this._needInitialization = false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fluidRenderingTargetRenderer.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingTargetRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"core/Cameras/camera\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { InternalTexture } from \"core/Materials/Textures/internalTexture\";\r\nimport type { ThinTexture } from \"core/Materials/Textures/thinTexture\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { PostProcess } from \"core/PostProcesses/postProcess\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\nimport type { FluidRenderingObject } from \"./fluidRenderingObject\";\r\nimport { FluidRenderingTextures } from \"./fluidRenderingTextures\";\r\nimport type { WebGPUEngine } from \"core/Engines/webgpuEngine\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Textures that can be displayed as a debugging tool\r\n */\r\nexport const enum FluidRenderingDebug {\r\n DepthTexture,\r\n DepthBlurredTexture,\r\n ThicknessTexture,\r\n ThicknessBlurredTexture,\r\n DiffuseTexture,\r\n Normals,\r\n DiffuseRendering,\r\n}\r\n\r\n/**\r\n * Class used to render an object as a fluid thanks to different render target textures (depth, thickness, diffuse)\r\n */\r\nexport class FluidRenderingTargetRenderer {\r\n protected _scene: Scene;\r\n protected _camera: Nullable<Camera>;\r\n protected _engine: AbstractEngine;\r\n\r\n protected _invProjectionMatrix: Matrix;\r\n protected _depthClearColor: Color4;\r\n protected _thicknessClearColor: Color4;\r\n\r\n protected _needInitialization: boolean;\r\n\r\n /**\r\n * Returns true if the class needs to be reinitialized (because of changes in parameterization)\r\n */\r\n public get needInitialization() {\r\n return this._needInitialization;\r\n }\r\n\r\n private _generateDiffuseTexture = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the diffuse texture should be generated and used for the rendering\r\n */\r\n public get generateDiffuseTexture() {\r\n return this._generateDiffuseTexture;\r\n }\r\n\r\n public set generateDiffuseTexture(generate: boolean) {\r\n if (this._generateDiffuseTexture === generate) {\r\n return;\r\n }\r\n\r\n this._generateDiffuseTexture = generate;\r\n this._needInitialization = true;\r\n }\r\n\r\n /**\r\n * Fluid color. Not used if generateDiffuseTexture is true\r\n */\r\n public fluidColor = new Color3(0.085, 0.6375, 0.765);\r\n\r\n /**\r\n * Density of the fluid (positive number). The higher the value, the more opaque the fluid.\r\n */\r\n public density = 2;\r\n\r\n /**\r\n * Strength of the refraction (positive number, but generally between 0 and 0.3).\r\n */\r\n public refractionStrength = 0.1;\r\n\r\n /**\r\n * Strength of the fresnel effect (value between 0 and 1). Lower the value if you want to soften the specular effect\r\n */\r\n public fresnelClamp = 1.0;\r\n\r\n /**\r\n * Strength of the specular power (positive number). Increase the value to make the specular effect more concentrated\r\n */\r\n public specularPower = 250;\r\n\r\n /**\r\n * Minimum thickness of the particles (positive number). If useFixedThickness is true, minimumThickness is the thickness used\r\n */\r\n public minimumThickness = 0;\r\n\r\n /**\r\n * Direction of the light. The fluid is assumed to be lit by a directional light\r\n */\r\n public dirLight: Vector3 = new Vector3(-2, -1, 1).normalize();\r\n\r\n private _debugFeature: FluidRenderingDebug = FluidRenderingDebug.DepthBlurredTexture;\r\n\r\n /**\r\n * Gets or sets the feature (texture) to be debugged. Not used if debug is false\r\n */\r\n public get debugFeature() {\r\n return this._debugFeature;\r\n }\r\n\r\n public set debugFeature(feature: FluidRenderingDebug) {\r\n if (this._debugFeature === feature) {\r\n return;\r\n }\r\n\r\n this._needInitialization = true;\r\n this._debugFeature = feature;\r\n }\r\n\r\n private _debug = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if we should display a specific texture (given by debugFeature) for debugging purpose\r\n */\r\n public get debug() {\r\n return this._debug;\r\n }\r\n\r\n public set debug(debug: boolean) {\r\n if (this._debug === debug) {\r\n return;\r\n }\r\n\r\n this._debug = debug;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _environmentMap?: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Gets or sets the environment map used for the reflection part of the shading\r\n * If null, no map will be used. If undefined, the scene.environmentMap will be used (if defined)\r\n */\r\n public get environmentMap() {\r\n return this._environmentMap;\r\n }\r\n\r\n public set environmentMap(map: Nullable<BaseTexture> | undefined) {\r\n if (this._environmentMap === map) {\r\n return;\r\n }\r\n\r\n this._needInitialization = true;\r\n this._environmentMap = map;\r\n }\r\n\r\n private _enableBlurDepth = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the depth texture should be blurred\r\n */\r\n public get enableBlurDepth() {\r\n return this._enableBlurDepth;\r\n }\r\n\r\n public set enableBlurDepth(enable: boolean) {\r\n if (this._enableBlurDepth === enable) {\r\n return;\r\n }\r\n\r\n this._enableBlurDepth = enable;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurDepthSizeDivisor = 1;\r\n\r\n /**\r\n * Gets or sets the depth size divisor (positive number, generally between 1 and 4), which is used as a divisor when creating the texture used for blurring the depth\r\n * For eg. if blurDepthSizeDivisor=2, the texture used to blur the depth will be half the size of the depth texture\r\n */\r\n public get blurDepthSizeDivisor() {\r\n return this._blurDepthSizeDivisor;\r\n }\r\n\r\n public set blurDepthSizeDivisor(scale: number) {\r\n if (this._blurDepthSizeDivisor === scale) {\r\n return;\r\n }\r\n\r\n this._blurDepthSizeDivisor = scale;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurDepthFilterSize = 7;\r\n\r\n /**\r\n * Size of the kernel used to filter the depth blur texture (positive number, generally between 1 and 20 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurDepthFilterSize() {\r\n return this._blurDepthFilterSize;\r\n }\r\n\r\n public set blurDepthFilterSize(filterSize: number) {\r\n if (this._blurDepthFilterSize === filterSize) {\r\n return;\r\n }\r\n\r\n this._blurDepthFilterSize = filterSize;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurDepthNumIterations = 3;\r\n\r\n /**\r\n * Number of blurring iterations used to generate the depth blur texture (positive number, generally between 1 and 10 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurDepthNumIterations() {\r\n return this._blurDepthNumIterations;\r\n }\r\n\r\n public set blurDepthNumIterations(numIterations: number) {\r\n if (this._blurDepthNumIterations === numIterations) {\r\n return;\r\n }\r\n\r\n this._blurDepthNumIterations = numIterations;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurDepthMaxFilterSize = 100;\r\n\r\n /**\r\n * Maximum size of the kernel used to blur the depth texture (positive number, generally between 1 and 200 - higher values will require more processing power from the GPU when the particles are larger on screen)\r\n */\r\n public get blurDepthMaxFilterSize() {\r\n return this._blurDepthMaxFilterSize;\r\n }\r\n\r\n public set blurDepthMaxFilterSize(maxFilterSize: number) {\r\n if (this._blurDepthMaxFilterSize === maxFilterSize) {\r\n return;\r\n }\r\n\r\n this._blurDepthMaxFilterSize = maxFilterSize;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurDepthDepthScale = 10;\r\n\r\n /**\r\n * Depth weight in the calculation when applying the bilateral blur to generate the depth blur texture (positive number, generally between 0 and 100)\r\n */\r\n public get blurDepthDepthScale() {\r\n return this._blurDepthDepthScale;\r\n }\r\n\r\n public set blurDepthDepthScale(scale: number) {\r\n if (this._blurDepthDepthScale === scale) {\r\n return;\r\n }\r\n\r\n this._blurDepthDepthScale = scale;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _enableBlurThickness = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the thickness texture should be blurred\r\n */\r\n public get enableBlurThickness() {\r\n return this._enableBlurThickness;\r\n }\r\n\r\n public set enableBlurThickness(enable: boolean) {\r\n if (this._enableBlurThickness === enable) {\r\n return;\r\n }\r\n\r\n this._enableBlurThickness = enable;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurThicknessSizeDivisor = 1;\r\n\r\n /**\r\n * Gets or sets the thickness size divisor (positive number, generally between 1 and 4), which is used as a divisor when creating the texture used for blurring the thickness\r\n * For eg. if blurThicknessSizeDivisor=2, the texture used to blur the thickness will be half the size of the thickness texture\r\n */\r\n public get blurThicknessSizeDivisor() {\r\n return this._blurThicknessSizeDivisor;\r\n }\r\n\r\n public set blurThicknessSizeDivisor(scale: number) {\r\n if (this._blurThicknessSizeDivisor === scale) {\r\n return;\r\n }\r\n\r\n this._blurThicknessSizeDivisor = scale;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _blurThicknessFilterSize = 5;\r\n\r\n /**\r\n * Size of the kernel used to filter the thickness blur texture (positive number, generally between 1 and 20 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurThicknessFilterSize() {\r\n return this._blurThicknessFilterSize;\r\n }\r\n\r\n public set blurThicknessFilterSize(filterSize: number) {\r\n if (this._blurThicknessFilterSize === filterSize) {\r\n return;\r\n }\r\n\r\n this._blurThicknessFilterSize = filterSize;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _blurThicknessNumIterations = 1;\r\n\r\n /**\r\n * Number of blurring iterations used to generate the thickness blur texture (positive number, generally between 1 and 10 - higher values will require more processing power from the GPU)\r\n */\r\n public get blurThicknessNumIterations() {\r\n return this._blurThicknessNumIterations;\r\n }\r\n\r\n public set blurThicknessNumIterations(numIterations: number) {\r\n if (this._blurThicknessNumIterations === numIterations) {\r\n return;\r\n }\r\n\r\n this._blurThicknessNumIterations = numIterations;\r\n this._setBlurParameters();\r\n }\r\n\r\n private _useFixedThickness = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that a fixed thickness should be used instead of generating a thickness texture\r\n */\r\n public get useFixedThickness() {\r\n return this._useFixedThickness;\r\n }\r\n\r\n public set useFixedThickness(use: boolean) {\r\n if (this._useFixedThickness === use) {\r\n return;\r\n }\r\n\r\n this._useFixedThickness = use;\r\n this._needInitialization = true;\r\n }\r\n\r\n /** @internal */\r\n public _bgDepthTexture: Nullable<InternalTexture>;\r\n\r\n /** @internal */\r\n public _onUseVelocityChanged = new Observable<FluidRenderingTargetRenderer>();\r\n\r\n private _useVelocity = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the velocity should be used when rendering the particles as a fluid.\r\n * Note: the vertex buffers must contain a \"velocity\" buffer for this to work!\r\n */\r\n public get useVelocity() {\r\n return this._useVelocity;\r\n }\r\n\r\n public set useVelocity(use: boolean) {\r\n if (this._useVelocity === use) {\r\n return;\r\n }\r\n\r\n this._useVelocity = use;\r\n this._needInitialization = true;\r\n this._onUseVelocityChanged.notifyObservers(this);\r\n }\r\n\r\n private _depthMapSize: Nullable<number> = null;\r\n\r\n /**\r\n * Defines the size of the depth texture.\r\n * If null, the texture will have the size of the screen\r\n */\r\n public get depthMapSize() {\r\n return this._depthMapSize;\r\n }\r\n\r\n public set depthMapSize(size: Nullable<number>) {\r\n if (this._depthMapSize === size) {\r\n return;\r\n }\r\n\r\n this._depthMapSize = size;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _thicknessMapSize: Nullable<number> = null;\r\n\r\n /**\r\n * Defines the size of the thickness texture.\r\n * If null, the texture will have the size of the screen\r\n */\r\n public get thicknessMapSize() {\r\n return this._thicknessMapSize;\r\n }\r\n\r\n public set thicknessMapSize(size: Nullable<number>) {\r\n if (this._thicknessMapSize === size) {\r\n return;\r\n }\r\n\r\n this._thicknessMapSize = size;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _diffuseMapSize: Nullable<number> = null;\r\n\r\n /**\r\n * Defines the size of the diffuse texture.\r\n * If null, the texture will have the size of the screen\r\n */\r\n public get diffuseMapSize() {\r\n return this._diffuseMapSize;\r\n }\r\n\r\n public set diffuseMapSize(size: Nullable<number>) {\r\n if (this._diffuseMapSize === size) {\r\n return;\r\n }\r\n\r\n this._diffuseMapSize = size;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _samples = 1;\r\n\r\n /**\r\n * Gets or sets the number of samples used by MSAA\r\n * Note: changing this value in WebGL does not work because depth/stencil textures can't be created with MSAA (see https://github.com/BabylonJS/Babylon.js/issues/12444)\r\n */\r\n public get samples() {\r\n return this._samples;\r\n }\r\n\r\n public set samples(samples: number) {\r\n if (this._samples === samples) {\r\n return;\r\n }\r\n\r\n this._samples = samples;\r\n this._needInitialization = true;\r\n }\r\n\r\n private _compositeMode = false;\r\n\r\n /**\r\n * If compositeMode is true (default: false), when the alpha value of the background (the scene rendered without the fluid objects) is 0, the final alpha value of the pixel will be set to the thickness value.\r\n * This way, it is possible to composite the fluid rendering on top of the HTML background.\r\n */\r\n public get compositeMode() {\r\n return this._compositeMode;\r\n }\r\n\r\n public set compositeMode(value: boolean) {\r\n if (this._compositeMode === value) {\r\n return;\r\n }\r\n\r\n this._compositeMode = value;\r\n this._needInitialization = true;\r\n }\r\n\r\n /**\r\n * Gets the camera used for the rendering\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n /** @internal */\r\n public _renderPostProcess: Nullable<PostProcess>;\r\n\r\n /** @internal */\r\n public _depthRenderTarget: Nullable<FluidRenderingTextures>;\r\n\r\n /** @internal */\r\n public _diffuseRenderTarget: Nullable<FluidRenderingTextures>;\r\n\r\n /** @internal */\r\n public _thicknessRenderTarget: Nullable<FluidRenderingTextures>;\r\n\r\n /** Shader language used by the renderer */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * Creates an instance of the class\r\n * @param scene Scene used to render the fluid object into\r\n * @param camera Camera used to render the fluid object. If not provided, use the active camera of the scene instead\r\n * @param shaderLanguage The shader language to use\r\n */\r\n constructor(scene: Scene, camera?: Camera, shaderLanguage?: ShaderLanguage) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._camera = camera ?? scene.activeCamera;\r\n this._needInitialization = true;\r\n this._bgDepthTexture = null;\r\n\r\n this._invProjectionMatrix = new Matrix();\r\n this._depthClearColor = new Color4(1e6, 1e6, 1e6, 1);\r\n this._thicknessClearColor = new Color4(0, 0, 0, 1);\r\n\r\n this._depthRenderTarget = null;\r\n this._diffuseRenderTarget = null;\r\n this._thicknessRenderTarget = null;\r\n\r\n this._renderPostProcess = null;\r\n\r\n this._shaderLanguage = shaderLanguage ?? (this._engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL);\r\n }\r\n\r\n /** @internal */\r\n public _initialize(): void {\r\n this.dispose();\r\n\r\n this._needInitialization = false;\r\n\r\n const depthWidth = this._depthMapSize ?? this._engine.getRenderWidth();\r\n const depthHeight =\r\n this._depthMapSize !== null ? Math.round((this._depthMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth()) : this._engine.getRenderHeight();\r\n\r\n this._depthRenderTarget = new FluidRenderingTextures(\r\n \"Depth\",\r\n this._scene,\r\n depthWidth,\r\n depthHeight,\r\n depthWidth,\r\n depthHeight,\r\n Constants.TEXTURETYPE_FLOAT,\r\n Constants.TEXTUREFORMAT_RG,\r\n Constants.TEXTURETYPE_FLOAT,\r\n Constants.TEXTUREFORMAT_RG,\r\n false,\r\n this._camera,\r\n true,\r\n this._samples,\r\n this._shaderLanguage\r\n );\r\n\r\n this._initializeRenderTarget(this._depthRenderTarget);\r\n\r\n if (this.generateDiffuseTexture) {\r\n const diffuseWidth = this._diffuseMapSize ?? this._engine.getRenderWidth();\r\n const diffuseHeight =\r\n this._diffuseMapSize !== null\r\n ? Math.round((this._diffuseMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth())\r\n : this._engine.getRenderHeight();\r\n\r\n this._diffuseRenderTarget = new FluidRenderingTextures(\r\n \"Diffuse\",\r\n this._scene,\r\n diffuseWidth,\r\n diffuseHeight,\r\n 0,\r\n 0,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n Constants.TEXTUREFORMAT_RGBA,\r\n true,\r\n this._camera,\r\n true,\r\n this._samples,\r\n this._shaderLanguage\r\n );\r\n\r\n this._initializeRenderTarget(this._diffuseRenderTarget);\r\n }\r\n\r\n const thicknessWidth = this._thicknessMapSize ?? this._engine.getRenderWidth();\r\n const thicknessHeight =\r\n this._thicknessMapSize !== null\r\n ? Math.round((this._thicknessMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth())\r\n : this._engine.getRenderHeight();\r\n\r\n if (!this._useFixedThickness) {\r\n this._thicknessRenderTarget = new FluidRenderingTextures(\r\n \"Thickness\",\r\n this._scene,\r\n thicknessWidth,\r\n thicknessHeight,\r\n thicknessWidth,\r\n thicknessHeight,\r\n Constants.TEXTURETYPE_HALF_FLOAT,\r\n Constants.TEXTUREFORMAT_R,\r\n Constants.TEXTURETYPE_HALF_FLOAT,\r\n Constants.TEXTUREFORMAT_R,\r\n true,\r\n this._camera,\r\n false,\r\n this._samples,\r\n this._shaderLanguage\r\n );\r\n\r\n this._initializeRenderTarget(this._thicknessRenderTarget);\r\n }\r\n\r\n this._createLiquidRenderingPostProcess();\r\n }\r\n\r\n protected _setBlurParameters(renderTarget: Nullable<FluidRenderingTextures> = null): void {\r\n if (renderTarget === null || renderTarget === this._depthRenderTarget) {\r\n this._setBlurDepthParameters();\r\n }\r\n if (renderTarget === null || renderTarget === this._thicknessRenderTarget) {\r\n this._setBlurThicknessParameters();\r\n }\r\n }\r\n\r\n protected _setBlurDepthParameters(): void {\r\n if (!this._depthRenderTarget) {\r\n return;\r\n }\r\n this._depthRenderTarget.blurFilterSize = this.blurDepthFilterSize;\r\n this._depthRenderTarget.blurMaxFilterSize = this.blurDepthMaxFilterSize;\r\n this._depthRenderTarget.blurNumIterations = this.blurDepthNumIterations;\r\n this._depthRenderTarget.blurDepthScale = this.blurDepthDepthScale;\r\n }\r\n\r\n protected _setBlurThicknessParameters(): void {\r\n if (!this._thicknessRenderTarget) {\r\n return;\r\n }\r\n this._thicknessRenderTarget.blurFilterSize = this.blurThicknessFilterSize;\r\n this._thicknessRenderTarget.blurNumIterations = this.blurThicknessNumIterations;\r\n }\r\n\r\n protected _initializeRenderTarget(renderTarget: FluidRenderingTextures): void {\r\n if (renderTarget !== this._diffuseRenderTarget) {\r\n renderTarget.enableBlur = renderTarget === this._depthRenderTarget ? this.enableBlurDepth : this.enableBlurThickness;\r\n renderTarget.blurSizeDivisor = renderTarget === this._depthRenderTarget ? this.blurDepthSizeDivisor : this.blurThicknessSizeDivisor;\r\n }\r\n\r\n this._setBlurParameters(renderTarget);\r\n\r\n renderTarget.initialize();\r\n }\r\n\r\n protected _createLiquidRenderingPostProcess(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n const uniformNames = [\r\n \"viewMatrix\",\r\n \"projectionMatrix\",\r\n \"invProjectionMatrix\",\r\n \"texelSize\",\r\n \"dirLight\",\r\n \"cameraFar\",\r\n \"density\",\r\n \"refractionStrength\",\r\n \"fresnelClamp\",\r\n \"specularPower\",\r\n ];\r\n const samplerNames = [\"depthSampler\"];\r\n const defines = [];\r\n\r\n this.dispose(true);\r\n\r\n if (!this._camera) {\r\n return;\r\n }\r\n\r\n const texture = this._depthRenderTarget!.enableBlur ? this._depthRenderTarget!.textureBlur! : this._depthRenderTarget!.texture!;\r\n const texelSize = new Vector2(1 / texture.getSize().width, 1 / texture.getSize().height);\r\n\r\n if (this._scene.useRightHandedSystem) {\r\n defines.push(\"#define FLUIDRENDERING_RHS\");\r\n }\r\n\r\n if (this._environmentMap !== null) {\r\n const envMap = this._environmentMap ?? this._scene.environmentTexture;\r\n if (envMap) {\r\n samplerNames.push(\"reflectionSampler\");\r\n defines.push(\"#define FLUIDRENDERING_ENVIRONMENT\");\r\n }\r\n }\r\n\r\n if (this._diffuseRenderTarget) {\r\n samplerNames.push(\"diffuseSampler\");\r\n defines.push(\"#define FLUIDRENDERING_DIFFUSETEXTURE\");\r\n } else {\r\n uniformNames.push(\"diffuseColor\");\r\n }\r\n\r\n if (this._useVelocity) {\r\n samplerNames.push(\"velocitySampler\");\r\n defines.push(\"#define FLUIDRENDERING_VELOCITY\");\r\n }\r\n\r\n if (this._useFixedThickness) {\r\n uniformNames.push(\"thickness\");\r\n samplerNames.push(\"bgDepthSampler\");\r\n defines.push(\"#define FLUIDRENDERING_FIXED_THICKNESS\");\r\n } else {\r\n uniformNames.push(\"minimumThickness\");\r\n samplerNames.push(\"thicknessSampler\");\r\n }\r\n\r\n if (this._compositeMode) {\r\n defines.push(\"#define FLUIDRENDERING_COMPOSITE_MODE\");\r\n }\r\n\r\n if (this._debug) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG\");\r\n if (this._debugFeature === FluidRenderingDebug.Normals) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_SHOWNORMAL\");\r\n } else if (this._debugFeature === FluidRenderingDebug.DiffuseRendering) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_DIFFUSERENDERING\");\r\n } else {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_TEXTURE\");\r\n samplerNames.push(\"debugSampler\");\r\n if (this._debugFeature === FluidRenderingDebug.DepthTexture || this._debugFeature === FluidRenderingDebug.DepthBlurredTexture) {\r\n defines.push(\"#define FLUIDRENDERING_DEBUG_DEPTH\");\r\n }\r\n }\r\n }\r\n\r\n this._renderPostProcess = new PostProcess(\r\n \"FluidRendering\",\r\n \"fluidRenderingRender\",\r\n uniformNames,\r\n samplerNames,\r\n 1,\r\n null,\r\n Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n null,\r\n Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n undefined,\r\n undefined,\r\n true,\r\n undefined,\r\n this._shaderLanguage,\r\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\r\n async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingRender.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingRender.fragment\");\r\n }\r\n }\r\n );\r\n this._renderPostProcess.updateEffect(defines.join(\"\\n\"));\r\n\r\n this._renderPostProcess.samples = this._samples;\r\n const engineWebGPU = engine as WebGPUEngine;\r\n const setTextureSampler = engineWebGPU.setTextureSampler;\r\n this._renderPostProcess.onApplyObservable.add((effect) => {\r\n this._invProjectionMatrix.copyFrom(this._scene.getProjectionMatrix());\r\n this._invProjectionMatrix.invert();\r\n\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"textureSamplerSampler\", this._renderPostProcess!.inputTexture.texture);\r\n }\r\n\r\n if (!this._depthRenderTarget!.enableBlur) {\r\n effect.setTexture(\"depthSampler\", this._depthRenderTarget!.texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"depthSamplerSampler\", this._depthRenderTarget!.texture?.getInternalTexture() ?? null);\r\n }\r\n } else {\r\n effect.setTexture(\"depthSampler\", this._depthRenderTarget!.textureBlur);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"depthSamplerSampler\", this._depthRenderTarget!.textureBlur?.getInternalTexture() ?? null);\r\n }\r\n }\r\n if (this._diffuseRenderTarget) {\r\n if (!this._diffuseRenderTarget.enableBlur) {\r\n effect.setTexture(\"diffuseSampler\", this._diffuseRenderTarget.texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"diffuseSamplerSampler\", this._diffuseRenderTarget.texture?.getInternalTexture() ?? null);\r\n }\r\n } else {\r\n effect.setTexture(\"diffuseSampler\", this._diffuseRenderTarget.textureBlur);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"diffuseSamplerSampler\", this._diffuseRenderTarget.textureBlur?.getInternalTexture() ?? null);\r\n }\r\n }\r\n } else {\r\n effect.setColor3(\"diffuseColor\", this.fluidColor);\r\n }\r\n if (this._useFixedThickness) {\r\n effect.setFloat(\"thickness\", this.minimumThickness);\r\n effect._bindTexture(\"bgDepthSampler\", this._bgDepthTexture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"bgDepthSamplerSampler\", this._bgDepthTexture ?? null);\r\n }\r\n } else {\r\n if (!this._thicknessRenderTarget!.enableBlur) {\r\n effect.setTexture(\"thicknessSampler\", this._thicknessRenderTarget!.texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"thicknessSamplerSampler\", this._thicknessRenderTarget!.texture?.getInternalTexture() ?? null);\r\n }\r\n } else {\r\n effect.setTexture(\"thicknessSampler\", this._thicknessRenderTarget!.textureBlur);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"thicknessSamplerSampler\", this._thicknessRenderTarget!.textureBlur?.getInternalTexture() ?? null);\r\n }\r\n }\r\n effect.setFloat(\"minimumThickness\", this.minimumThickness);\r\n }\r\n\r\n if (this._environmentMap !== null) {\r\n const envMap = this._environmentMap ?? this._scene.environmentTexture;\r\n if (envMap) {\r\n effect.setTexture(\"reflectionSampler\", envMap);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"reflectionSamplerSampler\", envMap?.getInternalTexture() ?? null);\r\n }\r\n }\r\n }\r\n\r\n effect.setMatrix(\"viewMatrix\", this._scene.getViewMatrix());\r\n effect.setMatrix(\"invProjectionMatrix\", this._invProjectionMatrix);\r\n effect.setMatrix(\"projectionMatrix\", this._scene.getProjectionMatrix());\r\n effect.setVector2(\"texelSize\", texelSize);\r\n effect.setFloat(\"density\", this.density);\r\n effect.setFloat(\"refractionStrength\", this.refractionStrength);\r\n effect.setFloat(\"fresnelClamp\", this.fresnelClamp);\r\n effect.setFloat(\"specularPower\", this.specularPower);\r\n\r\n effect.setVector3(\"dirLight\", this.dirLight);\r\n\r\n effect.setFloat(\"cameraFar\", this._camera!.maxZ);\r\n\r\n if (this._debug) {\r\n let texture: Nullable<ThinTexture> = null;\r\n switch (this._debugFeature) {\r\n case FluidRenderingDebug.DepthTexture:\r\n texture = this._depthRenderTarget!.texture;\r\n break;\r\n case FluidRenderingDebug.DepthBlurredTexture:\r\n texture = this._depthRenderTarget!.enableBlur ? this._depthRenderTarget!.textureBlur : this._depthRenderTarget!.texture;\r\n break;\r\n case FluidRenderingDebug.ThicknessTexture:\r\n texture = this._thicknessRenderTarget?.texture ?? null;\r\n break;\r\n case FluidRenderingDebug.ThicknessBlurredTexture:\r\n texture = this._thicknessRenderTarget?.enableBlur ? (this._thicknessRenderTarget?.textureBlur ?? null) : (this._thicknessRenderTarget?.texture ?? null);\r\n break;\r\n case FluidRenderingDebug.DiffuseTexture:\r\n if (this._diffuseRenderTarget) {\r\n texture = this._diffuseRenderTarget.texture;\r\n }\r\n break;\r\n }\r\n if (this._debugFeature !== FluidRenderingDebug.Normals) {\r\n effect.setTexture(\"debugSampler\", texture);\r\n if (setTextureSampler) {\r\n setTextureSampler.call(engineWebGPU, \"debugSamplerSampler\", texture?.getInternalTexture() ?? null);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n public _clearTargets(): void {\r\n if (this._depthRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._depthRenderTarget.renderTarget);\r\n this._engine.clear(this._depthClearColor, true, true, false);\r\n this._engine.unBindFramebuffer(this._depthRenderTarget.renderTarget);\r\n }\r\n\r\n if (this._diffuseRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n this._engine.clear(this._thicknessClearColor, true, true, false);\r\n this._engine.unBindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n }\r\n\r\n if (this._thicknessRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n // we don't clear the depth buffer because it is the depth buffer that is coming from the scene and that we reuse in the thickness rendering pass\r\n this._engine.clear(this._thicknessClearColor, true, false, false);\r\n this._engine.unBindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _render(fluidObject: FluidRenderingObject): void {\r\n if (this._needInitialization || !fluidObject.isReady()) {\r\n return;\r\n }\r\n\r\n const currentRenderTarget = this._engine._currentRenderTarget;\r\n\r\n this._engine.setState(false, undefined, undefined, undefined, true);\r\n this._engine.setDepthBuffer(true);\r\n this._engine.setDepthWrite(true);\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n\r\n // Render the particles in the depth texture\r\n if (this._depthRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._depthRenderTarget.renderTarget);\r\n\r\n fluidObject.renderDepthTexture();\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.unBindFramebuffer(this._depthRenderTarget.renderTarget);\r\n }\r\n\r\n // Render the particles in the diffuse texture\r\n if (this._diffuseRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n\r\n fluidObject.renderDiffuseTexture();\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.unBindFramebuffer(this._diffuseRenderTarget.renderTarget);\r\n }\r\n\r\n // Render the particles in the thickness texture\r\n if (this._thicknessRenderTarget?.renderTarget) {\r\n this._engine.bindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n\r\n fluidObject.renderThicknessTexture();\r\n\r\n this._engine.unbindInstanceAttributes();\r\n this._engine.unBindFramebuffer(this._thicknessRenderTarget.renderTarget);\r\n }\r\n\r\n // Run the blur post processes\r\n this._depthRenderTarget?.applyBlurPostProcesses();\r\n this._diffuseRenderTarget?.applyBlurPostProcesses();\r\n this._thicknessRenderTarget?.applyBlurPostProcesses();\r\n\r\n if (currentRenderTarget) {\r\n this._engine.bindFramebuffer(currentRenderTarget);\r\n }\r\n }\r\n\r\n /**\r\n * Releases all the ressources used by the class\r\n * @param onlyPostProcesses If true, releases only the ressources used by the render post processes\r\n */\r\n public dispose(onlyPostProcesses = false): void {\r\n if (!onlyPostProcesses) {\r\n this._depthRenderTarget?.dispose();\r\n this._depthRenderTarget = null;\r\n\r\n this._diffuseRenderTarget?.dispose();\r\n this._diffuseRenderTarget = null;\r\n\r\n this._thicknessRenderTarget?.dispose();\r\n this._thicknessRenderTarget = null;\r\n }\r\n\r\n if (this._renderPostProcess && this._camera) {\r\n this._camera.detachPostProcess(this._renderPostProcess);\r\n }\r\n this._renderPostProcess?.dispose();\r\n this._renderPostProcess = null;\r\n\r\n this._onUseVelocityChanged.clear();\r\n\r\n this._needInitialization = false;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fluidRenderingTextures.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingTextures.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"core/Cameras/camera\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { RenderTargetWrapper } from \"core/Engines/renderTargetWrapper\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport type { ThinTexture } from \"core/Materials/Textures/thinTexture\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { PostProcess } from \"core/PostProcesses/postProcess\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\nexport class FluidRenderingTextures {\r\n protected _name: string;\r\n protected _scene: Scene;\r\n protected _camera: Nullable<Camera>;\r\n protected _engine: AbstractEngine;\r\n protected _width: number;\r\n protected _height: number;\r\n protected _blurTextureSizeX: number;\r\n protected _blurTextureSizeY: number;\r\n protected _textureType: number;\r\n protected _textureFormat: number;\r\n protected _blurTextureType: number;\r\n protected _blurTextureFormat: number;\r\n protected _useStandardBlur: boolean;\r\n protected _generateDepthBuffer: boolean;\r\n protected _samples: number;\r\n protected _postProcessRunningIndex: number;\r\n\r\n protected _rt: Nullable<RenderTargetWrapper>;\r\n protected _texture: Nullable<Texture>;\r\n protected _rtBlur: Nullable<RenderTargetWrapper>;\r\n protected _textureBlurred: Nullable<Texture>;\r\n protected _blurPostProcesses: Nullable<PostProcess[]>;\r\n\r\n public enableBlur = true;\r\n\r\n public blurSizeDivisor = 1;\r\n\r\n public blurFilterSize = 7;\r\n\r\n private _blurNumIterations = 3;\r\n\r\n public get blurNumIterations() {\r\n return this._blurNumIterations;\r\n }\r\n\r\n public set blurNumIterations(numIterations: number) {\r\n if (this._blurNumIterations === numIterations) {\r\n return;\r\n }\r\n\r\n this._blurNumIterations = numIterations;\r\n if (this._blurPostProcesses !== null) {\r\n const blurX = this._blurPostProcesses[0];\r\n const blurY = this._blurPostProcesses[1];\r\n\r\n this._blurPostProcesses = [];\r\n for (let i = 0; i < this._blurNumIterations * 2; ++i) {\r\n this._blurPostProcesses[i] = i & 1 ? blurY : blurX;\r\n }\r\n }\r\n }\r\n\r\n public blurMaxFilterSize = 100;\r\n\r\n public blurDepthScale = 10;\r\n\r\n public particleSize = 0.02;\r\n\r\n public onDisposeObservable: Observable<FluidRenderingTextures> = new Observable<FluidRenderingTextures>();\r\n\r\n public get renderTarget() {\r\n return this._rt;\r\n }\r\n\r\n public get renderTargetBlur() {\r\n return this._rtBlur;\r\n }\r\n\r\n public get texture() {\r\n return this._texture;\r\n }\r\n\r\n public get textureBlur() {\r\n return this._textureBlurred;\r\n }\r\n\r\n /** Shader language used by the texture */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in the texture\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n constructor(\r\n name: string,\r\n scene: Scene,\r\n width: number,\r\n height: number,\r\n blurTextureSizeX: number,\r\n blurTextureSizeY: number,\r\n textureType: number = Constants.TEXTURETYPE_FLOAT,\r\n textureFormat: number = Constants.TEXTUREFORMAT_R,\r\n blurTextureType: number = Constants.TEXTURETYPE_FLOAT,\r\n blurTextureFormat: number = Constants.TEXTUREFORMAT_R,\r\n useStandardBlur = false,\r\n camera: Nullable<Camera> = null,\r\n generateDepthBuffer = true,\r\n samples = 1,\r\n shaderLanguage?: ShaderLanguage\r\n ) {\r\n this._name = name;\r\n this._scene = scene;\r\n this._camera = camera;\r\n this._engine = scene.getEngine();\r\n this._width = width;\r\n this._height = height;\r\n this._blurTextureSizeX = blurTextureSizeX;\r\n this._blurTextureSizeY = blurTextureSizeY;\r\n this._textureType = textureType;\r\n this._textureFormat = textureFormat;\r\n this._blurTextureType = blurTextureType;\r\n this._blurTextureFormat = blurTextureFormat;\r\n this._useStandardBlur = useStandardBlur;\r\n this._generateDepthBuffer = generateDepthBuffer;\r\n this._samples = samples;\r\n this._postProcessRunningIndex = 0;\r\n this.enableBlur = blurTextureSizeX !== 0 && blurTextureSizeY !== 0;\r\n\r\n this._rt = null;\r\n this._texture = null;\r\n this._rtBlur = null;\r\n this._textureBlurred = null;\r\n this._blurPostProcesses = null;\r\n\r\n this._shaderLanguage = shaderLanguage ?? (this._engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL);\r\n }\r\n\r\n public initialize(): void {\r\n this.dispose();\r\n\r\n this._createRenderTarget();\r\n\r\n if (this.enableBlur && this._texture) {\r\n const [rtBlur, textureBlurred, blurPostProcesses] = this._createBlurPostProcesses(\r\n this._texture,\r\n this._blurTextureType,\r\n this._blurTextureFormat,\r\n this.blurSizeDivisor,\r\n this._name,\r\n this._useStandardBlur\r\n );\r\n this._rtBlur = rtBlur;\r\n this._textureBlurred = textureBlurred;\r\n this._blurPostProcesses = blurPostProcesses;\r\n }\r\n }\r\n\r\n public applyBlurPostProcesses(): void {\r\n if (this.enableBlur && this._blurPostProcesses) {\r\n this._postProcessRunningIndex = 0;\r\n this._scene.postProcessManager.directRender(this._blurPostProcesses, this._rtBlur, true);\r\n this._engine.unBindFramebuffer(this._rtBlur!);\r\n }\r\n }\r\n\r\n protected _createRenderTarget(): void {\r\n this._rt = this._engine.createRenderTargetTexture(\r\n { width: this._width, height: this._height },\r\n {\r\n generateMipMaps: false,\r\n type: this._textureType,\r\n format: this._textureFormat,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n generateDepthBuffer: this._generateDepthBuffer,\r\n generateStencilBuffer: false,\r\n samples: this._samples,\r\n label: `FluidRenderingRTT-${this._name}`,\r\n }\r\n );\r\n\r\n const renderTexture = this._rt.texture!;\r\n\r\n renderTexture.incrementReferences();\r\n\r\n this._texture = new Texture(null, this._scene);\r\n this._texture.name = \"rtt\" + this._name;\r\n this._texture._texture = renderTexture;\r\n this._texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._texture.anisotropicFilteringLevel = 1;\r\n }\r\n\r\n protected _createBlurPostProcesses(\r\n textureBlurSource: ThinTexture,\r\n textureType: number,\r\n textureFormat: number,\r\n blurSizeDivisor: number,\r\n debugName: string,\r\n useStandardBlur = false\r\n ): [RenderTargetWrapper, Texture, PostProcess[]] {\r\n const engine = this._scene.getEngine();\r\n const targetSize = new Vector2(Math.floor(this._blurTextureSizeX / blurSizeDivisor), Math.floor(this._blurTextureSizeY / blurSizeDivisor));\r\n const useBilinearFiltering =\r\n (textureType === Constants.TEXTURETYPE_FLOAT && engine.getCaps().textureFloatLinearFiltering) ||\r\n (textureType === Constants.TEXTURETYPE_HALF_FLOAT && engine.getCaps().textureHalfFloatLinearFiltering);\r\n\r\n const rtBlur = this._engine.createRenderTargetTexture(\r\n { width: targetSize.x, height: targetSize.y },\r\n {\r\n generateMipMaps: false,\r\n type: textureType,\r\n format: textureFormat,\r\n samplingMode: useBilinearFiltering ? Constants.TEXTURE_BILINEAR_SAMPLINGMODE : Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n generateStencilBuffer: false,\r\n samples: this._samples,\r\n label: `FluidRenderingRTTBlur-${debugName}`,\r\n }\r\n );\r\n\r\n const renderTexture = rtBlur.texture!;\r\n\r\n renderTexture.incrementReferences();\r\n\r\n const texture = new Texture(null, this._scene);\r\n texture.name = \"rttBlurred\" + debugName;\r\n texture._texture = renderTexture;\r\n texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n texture.anisotropicFilteringLevel = 1;\r\n\r\n if (useStandardBlur) {\r\n const kernelBlurXPostprocess = new PostProcess(\r\n \"BilateralBlurX\",\r\n \"fluidRenderingStandardBlur\",\r\n [\"filterSize\", \"blurDir\"],\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n // Keeping this issue for further discussion - extraInitialization should return Promise<void>\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingStandardBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingStandardBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurXPostprocess.samples = this._samples;\r\n kernelBlurXPostprocess.externalTextureSamplerBinding = true;\r\n kernelBlurXPostprocess.onApplyObservable.add((effect) => {\r\n if (this._postProcessRunningIndex === 0) {\r\n effect.setTexture(\"textureSampler\", textureBlurSource);\r\n } else {\r\n effect._bindTexture(\"textureSampler\", kernelBlurXPostprocess.inputTexture.texture);\r\n }\r\n effect.setInt(\"filterSize\", this.blurFilterSize);\r\n effect.setFloat2(\"blurDir\", 1 / this._blurTextureSizeX, 0);\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurXPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurXPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurXPostprocess);\r\n\r\n const kernelBlurYPostprocess = new PostProcess(\r\n \"BilateralBlurY\",\r\n \"fluidRenderingStandardBlur\",\r\n [\"filterSize\", \"blurDir\"],\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingStandardBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingStandardBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurYPostprocess.samples = this._samples;\r\n kernelBlurYPostprocess.onApplyObservable.add((effect) => {\r\n effect.setInt(\"filterSize\", this.blurFilterSize);\r\n effect.setFloat2(\"blurDir\", 0, 1 / this._blurTextureSizeY);\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurYPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurYPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurYPostprocess);\r\n\r\n kernelBlurXPostprocess.autoClear = false;\r\n kernelBlurYPostprocess.autoClear = false;\r\n\r\n const blurList = [];\r\n for (let i = 0; i < this._blurNumIterations * 2; ++i) {\r\n blurList[i] = i & 1 ? kernelBlurYPostprocess : kernelBlurXPostprocess;\r\n }\r\n\r\n return [rtBlur, texture, blurList];\r\n } else {\r\n const uniforms: string[] = [\"maxFilterSize\", \"blurDir\", \"projectedParticleConstant\", \"depthThreshold\"];\r\n\r\n const kernelBlurXPostprocess = new PostProcess(\r\n \"BilateralBlurX\",\r\n \"fluidRenderingBilateralBlur\",\r\n uniforms,\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingBilateralBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingBilateralBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurXPostprocess.samples = this._samples;\r\n kernelBlurXPostprocess.externalTextureSamplerBinding = true;\r\n kernelBlurXPostprocess.onApplyObservable.add((effect) => {\r\n if (this._postProcessRunningIndex === 0) {\r\n effect.setTexture(\"textureSampler\", textureBlurSource);\r\n } else {\r\n effect._bindTexture(\"textureSampler\", kernelBlurXPostprocess.inputTexture.texture);\r\n }\r\n effect.setInt(\"maxFilterSize\", this.blurMaxFilterSize);\r\n effect.setFloat2(\"blurDir\", 1 / this._blurTextureSizeX, 0);\r\n effect.setFloat(\"projectedParticleConstant\", this._getProjectedParticleConstant());\r\n effect.setFloat(\"depthThreshold\", this._getDepthThreshold());\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurXPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurXPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurXPostprocess);\r\n\r\n const kernelBlurYPostprocess = new PostProcess(\r\n \"BilateralBlurY\",\r\n \"fluidRenderingBilateralBlur\",\r\n uniforms,\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingBilateralBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingBilateralBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurYPostprocess.samples = this._samples;\r\n kernelBlurYPostprocess.onApplyObservable.add((effect) => {\r\n effect.setInt(\"maxFilterSize\", this.blurMaxFilterSize);\r\n effect.setFloat2(\"blurDir\", 0, 1 / this._blurTextureSizeY);\r\n effect.setFloat(\"projectedParticleConstant\", this._getProjectedParticleConstant());\r\n effect.setFloat(\"depthThreshold\", this._getDepthThreshold());\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurYPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurYPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurYPostprocess);\r\n\r\n kernelBlurXPostprocess.autoClear = false;\r\n kernelBlurYPostprocess.autoClear = false;\r\n\r\n const blurList = [];\r\n for (let i = 0; i < this._blurNumIterations * 2; ++i) {\r\n blurList[i] = i & 1 ? kernelBlurYPostprocess : kernelBlurXPostprocess;\r\n }\r\n\r\n return [rtBlur, texture, blurList];\r\n }\r\n }\r\n\r\n private _fixReusablePostProcess(pp: PostProcess) {\r\n if (!pp.isReusable()) {\r\n return;\r\n }\r\n\r\n pp.onActivateObservable.add(() => {\r\n // undo what calling activate() does which will make sure we will retrieve the right texture when getting the input for the post process\r\n pp._currentRenderTextureInd = (pp._currentRenderTextureInd + 1) % 2;\r\n });\r\n pp.onApplyObservable.add(() => {\r\n // now we can advance to the next texture\r\n pp._currentRenderTextureInd = (pp._currentRenderTextureInd + 1) % 2;\r\n });\r\n }\r\n\r\n private _getProjectedParticleConstant() {\r\n return (this.blurFilterSize * this.particleSize * 0.05 * (this._height / 2)) / Math.tan((this._camera?.fov ?? (45 * Math.PI) / 180) / 2);\r\n }\r\n\r\n private _getDepthThreshold() {\r\n return (this.particleSize / 2) * this.blurDepthScale;\r\n }\r\n\r\n public dispose(): void {\r\n if (this.onDisposeObservable.hasObservers()) {\r\n this.onDisposeObservable.notifyObservers(this);\r\n }\r\n\r\n this.onDisposeObservable.clear();\r\n\r\n this._rt?.dispose();\r\n this._rt = null;\r\n this._texture?.dispose();\r\n this._texture = null;\r\n this._rtBlur?.dispose();\r\n this._rtBlur = null;\r\n this._textureBlurred?.dispose();\r\n this._textureBlurred = null;\r\n if (this._blurPostProcesses) {\r\n this._blurPostProcesses[0].dispose();\r\n this._blurPostProcesses[1].dispose();\r\n }\r\n this._blurPostProcesses = null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fluidRenderingTextures.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingTextures.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-misused-promises */\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { RenderTargetWrapper } from \"core/Engines/renderTargetWrapper\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport type { ThinTexture } from \"core/Materials/Textures/thinTexture\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { PostProcess } from \"core/PostProcesses/postProcess\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\nexport class FluidRenderingTextures {\r\n protected _name: string;\r\n protected _scene: Scene;\r\n protected _camera: Nullable<Camera>;\r\n protected _engine: AbstractEngine;\r\n protected _width: number;\r\n protected _height: number;\r\n protected _blurTextureSizeX: number;\r\n protected _blurTextureSizeY: number;\r\n protected _textureType: number;\r\n protected _textureFormat: number;\r\n protected _blurTextureType: number;\r\n protected _blurTextureFormat: number;\r\n protected _useStandardBlur: boolean;\r\n protected _generateDepthBuffer: boolean;\r\n protected _samples: number;\r\n protected _postProcessRunningIndex: number;\r\n\r\n protected _rt: Nullable<RenderTargetWrapper>;\r\n protected _texture: Nullable<Texture>;\r\n protected _rtBlur: Nullable<RenderTargetWrapper>;\r\n protected _textureBlurred: Nullable<Texture>;\r\n protected _blurPostProcesses: Nullable<PostProcess[]>;\r\n\r\n public enableBlur = true;\r\n\r\n public blurSizeDivisor = 1;\r\n\r\n public blurFilterSize = 7;\r\n\r\n private _blurNumIterations = 3;\r\n\r\n public get blurNumIterations() {\r\n return this._blurNumIterations;\r\n }\r\n\r\n public set blurNumIterations(numIterations: number) {\r\n if (this._blurNumIterations === numIterations) {\r\n return;\r\n }\r\n\r\n this._blurNumIterations = numIterations;\r\n if (this._blurPostProcesses !== null) {\r\n const blurX = this._blurPostProcesses[0];\r\n const blurY = this._blurPostProcesses[1];\r\n\r\n this._blurPostProcesses = [];\r\n for (let i = 0; i < this._blurNumIterations * 2; ++i) {\r\n this._blurPostProcesses[i] = i & 1 ? blurY : blurX;\r\n }\r\n }\r\n }\r\n\r\n public blurMaxFilterSize = 100;\r\n\r\n public blurDepthScale = 10;\r\n\r\n public particleSize = 0.02;\r\n\r\n public onDisposeObservable: Observable<FluidRenderingTextures> = new Observable<FluidRenderingTextures>();\r\n\r\n public get renderTarget() {\r\n return this._rt;\r\n }\r\n\r\n public get renderTargetBlur() {\r\n return this._rtBlur;\r\n }\r\n\r\n public get texture() {\r\n return this._texture;\r\n }\r\n\r\n public get textureBlur() {\r\n return this._textureBlurred;\r\n }\r\n\r\n /** Shader language used by the texture */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in the texture\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n constructor(\r\n name: string,\r\n scene: Scene,\r\n width: number,\r\n height: number,\r\n blurTextureSizeX: number,\r\n blurTextureSizeY: number,\r\n textureType: number = Constants.TEXTURETYPE_FLOAT,\r\n textureFormat: number = Constants.TEXTUREFORMAT_R,\r\n blurTextureType: number = Constants.TEXTURETYPE_FLOAT,\r\n blurTextureFormat: number = Constants.TEXTUREFORMAT_R,\r\n useStandardBlur = false,\r\n camera: Nullable<Camera> = null,\r\n generateDepthBuffer = true,\r\n samples = 1,\r\n shaderLanguage?: ShaderLanguage\r\n ) {\r\n this._name = name;\r\n this._scene = scene;\r\n this._camera = camera;\r\n this._engine = scene.getEngine();\r\n this._width = width;\r\n this._height = height;\r\n this._blurTextureSizeX = blurTextureSizeX;\r\n this._blurTextureSizeY = blurTextureSizeY;\r\n this._textureType = textureType;\r\n this._textureFormat = textureFormat;\r\n this._blurTextureType = blurTextureType;\r\n this._blurTextureFormat = blurTextureFormat;\r\n this._useStandardBlur = useStandardBlur;\r\n this._generateDepthBuffer = generateDepthBuffer;\r\n this._samples = samples;\r\n this._postProcessRunningIndex = 0;\r\n this.enableBlur = blurTextureSizeX !== 0 && blurTextureSizeY !== 0;\r\n\r\n this._rt = null;\r\n this._texture = null;\r\n this._rtBlur = null;\r\n this._textureBlurred = null;\r\n this._blurPostProcesses = null;\r\n\r\n this._shaderLanguage = shaderLanguage ?? (this._engine.isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL);\r\n }\r\n\r\n public initialize(): void {\r\n this.dispose();\r\n\r\n this._createRenderTarget();\r\n\r\n if (this.enableBlur && this._texture) {\r\n const [rtBlur, textureBlurred, blurPostProcesses] = this._createBlurPostProcesses(\r\n this._texture,\r\n this._blurTextureType,\r\n this._blurTextureFormat,\r\n this.blurSizeDivisor,\r\n this._name,\r\n this._useStandardBlur\r\n );\r\n this._rtBlur = rtBlur;\r\n this._textureBlurred = textureBlurred;\r\n this._blurPostProcesses = blurPostProcesses;\r\n }\r\n }\r\n\r\n public applyBlurPostProcesses(): void {\r\n if (this.enableBlur && this._blurPostProcesses) {\r\n this._postProcessRunningIndex = 0;\r\n this._scene.postProcessManager.directRender(this._blurPostProcesses, this._rtBlur, true);\r\n this._engine.unBindFramebuffer(this._rtBlur!);\r\n }\r\n }\r\n\r\n protected _createRenderTarget(): void {\r\n this._rt = this._engine.createRenderTargetTexture(\r\n { width: this._width, height: this._height },\r\n {\r\n generateMipMaps: false,\r\n type: this._textureType,\r\n format: this._textureFormat,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n generateDepthBuffer: this._generateDepthBuffer,\r\n generateStencilBuffer: false,\r\n samples: this._samples,\r\n label: `FluidRenderingRTT-${this._name}`,\r\n }\r\n );\r\n\r\n const renderTexture = this._rt.texture!;\r\n\r\n renderTexture.incrementReferences();\r\n\r\n this._texture = new Texture(null, this._scene);\r\n this._texture.name = \"rtt\" + this._name;\r\n this._texture._texture = renderTexture;\r\n this._texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._texture.anisotropicFilteringLevel = 1;\r\n }\r\n\r\n protected _createBlurPostProcesses(\r\n textureBlurSource: ThinTexture,\r\n textureType: number,\r\n textureFormat: number,\r\n blurSizeDivisor: number,\r\n debugName: string,\r\n useStandardBlur = false\r\n ): [RenderTargetWrapper, Texture, PostProcess[]] {\r\n const engine = this._scene.getEngine();\r\n const targetSize = new Vector2(Math.floor(this._blurTextureSizeX / blurSizeDivisor), Math.floor(this._blurTextureSizeY / blurSizeDivisor));\r\n const useBilinearFiltering =\r\n (textureType === Constants.TEXTURETYPE_FLOAT && engine.getCaps().textureFloatLinearFiltering) ||\r\n (textureType === Constants.TEXTURETYPE_HALF_FLOAT && engine.getCaps().textureHalfFloatLinearFiltering);\r\n\r\n const rtBlur = this._engine.createRenderTargetTexture(\r\n { width: targetSize.x, height: targetSize.y },\r\n {\r\n generateMipMaps: false,\r\n type: textureType,\r\n format: textureFormat,\r\n samplingMode: useBilinearFiltering ? Constants.TEXTURE_BILINEAR_SAMPLINGMODE : Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n generateStencilBuffer: false,\r\n samples: this._samples,\r\n label: `FluidRenderingRTTBlur-${debugName}`,\r\n }\r\n );\r\n\r\n const renderTexture = rtBlur.texture!;\r\n\r\n renderTexture.incrementReferences();\r\n\r\n const texture = new Texture(null, this._scene);\r\n texture.name = \"rttBlurred\" + debugName;\r\n texture._texture = renderTexture;\r\n texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n texture.anisotropicFilteringLevel = 1;\r\n\r\n if (useStandardBlur) {\r\n const kernelBlurXPostprocess = new PostProcess(\r\n \"BilateralBlurX\",\r\n \"fluidRenderingStandardBlur\",\r\n [\"filterSize\", \"blurDir\"],\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n // Keeping this issue for further discussion - extraInitialization should return Promise<void>\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingStandardBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingStandardBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurXPostprocess.samples = this._samples;\r\n kernelBlurXPostprocess.externalTextureSamplerBinding = true;\r\n kernelBlurXPostprocess.onApplyObservable.add((effect) => {\r\n if (this._postProcessRunningIndex === 0) {\r\n effect.setTexture(\"textureSampler\", textureBlurSource);\r\n } else {\r\n effect._bindTexture(\"textureSampler\", kernelBlurXPostprocess.inputTexture.texture);\r\n }\r\n effect.setInt(\"filterSize\", this.blurFilterSize);\r\n effect.setFloat2(\"blurDir\", 1 / this._blurTextureSizeX, 0);\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurXPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurXPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurXPostprocess);\r\n\r\n const kernelBlurYPostprocess = new PostProcess(\r\n \"BilateralBlurY\",\r\n \"fluidRenderingStandardBlur\",\r\n [\"filterSize\", \"blurDir\"],\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingStandardBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingStandardBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurYPostprocess.samples = this._samples;\r\n kernelBlurYPostprocess.onApplyObservable.add((effect) => {\r\n effect.setInt(\"filterSize\", this.blurFilterSize);\r\n effect.setFloat2(\"blurDir\", 0, 1 / this._blurTextureSizeY);\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurYPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurYPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurYPostprocess);\r\n\r\n kernelBlurXPostprocess.autoClear = false;\r\n kernelBlurYPostprocess.autoClear = false;\r\n\r\n const blurList = [];\r\n for (let i = 0; i < this._blurNumIterations * 2; ++i) {\r\n blurList[i] = i & 1 ? kernelBlurYPostprocess : kernelBlurXPostprocess;\r\n }\r\n\r\n return [rtBlur, texture, blurList];\r\n } else {\r\n const uniforms: string[] = [\"maxFilterSize\", \"blurDir\", \"projectedParticleConstant\", \"depthThreshold\"];\r\n\r\n const kernelBlurXPostprocess = new PostProcess(\r\n \"BilateralBlurX\",\r\n \"fluidRenderingBilateralBlur\",\r\n uniforms,\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingBilateralBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingBilateralBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurXPostprocess.samples = this._samples;\r\n kernelBlurXPostprocess.externalTextureSamplerBinding = true;\r\n kernelBlurXPostprocess.onApplyObservable.add((effect) => {\r\n if (this._postProcessRunningIndex === 0) {\r\n effect.setTexture(\"textureSampler\", textureBlurSource);\r\n } else {\r\n effect._bindTexture(\"textureSampler\", kernelBlurXPostprocess.inputTexture.texture);\r\n }\r\n effect.setInt(\"maxFilterSize\", this.blurMaxFilterSize);\r\n effect.setFloat2(\"blurDir\", 1 / this._blurTextureSizeX, 0);\r\n effect.setFloat(\"projectedParticleConstant\", this._getProjectedParticleConstant());\r\n effect.setFloat(\"depthThreshold\", this._getDepthThreshold());\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurXPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurXPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurXPostprocess);\r\n\r\n const kernelBlurYPostprocess = new PostProcess(\r\n \"BilateralBlurY\",\r\n \"fluidRenderingBilateralBlur\",\r\n uniforms,\r\n null,\r\n 1,\r\n null,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n engine,\r\n true,\r\n null,\r\n textureType,\r\n undefined,\r\n undefined,\r\n undefined,\r\n textureFormat,\r\n this._shaderLanguage,\r\n async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../ShadersWGSL/fluidRenderingBilateralBlur.fragment\");\r\n } else {\r\n await import(\"../../Shaders/fluidRenderingBilateralBlur.fragment\");\r\n }\r\n }\r\n );\r\n kernelBlurYPostprocess.samples = this._samples;\r\n kernelBlurYPostprocess.onApplyObservable.add((effect) => {\r\n effect.setInt(\"maxFilterSize\", this.blurMaxFilterSize);\r\n effect.setFloat2(\"blurDir\", 0, 1 / this._blurTextureSizeY);\r\n effect.setFloat(\"projectedParticleConstant\", this._getProjectedParticleConstant());\r\n effect.setFloat(\"depthThreshold\", this._getDepthThreshold());\r\n this._postProcessRunningIndex++;\r\n });\r\n kernelBlurYPostprocess.onSizeChangedObservable.add(() => {\r\n kernelBlurYPostprocess._textures.forEach((rt) => {\r\n rt.texture!.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n rt.texture!.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n });\r\n });\r\n this._fixReusablePostProcess(kernelBlurYPostprocess);\r\n\r\n kernelBlurXPostprocess.autoClear = false;\r\n kernelBlurYPostprocess.autoClear = false;\r\n\r\n const blurList = [];\r\n for (let i = 0; i < this._blurNumIterations * 2; ++i) {\r\n blurList[i] = i & 1 ? kernelBlurYPostprocess : kernelBlurXPostprocess;\r\n }\r\n\r\n return [rtBlur, texture, blurList];\r\n }\r\n }\r\n\r\n private _fixReusablePostProcess(pp: PostProcess) {\r\n if (!pp.isReusable()) {\r\n return;\r\n }\r\n\r\n pp.onActivateObservable.add(() => {\r\n // undo what calling activate() does which will make sure we will retrieve the right texture when getting the input for the post process\r\n pp._currentRenderTextureInd = (pp._currentRenderTextureInd + 1) % 2;\r\n });\r\n pp.onApplyObservable.add(() => {\r\n // now we can advance to the next texture\r\n pp._currentRenderTextureInd = (pp._currentRenderTextureInd + 1) % 2;\r\n });\r\n }\r\n\r\n private _getProjectedParticleConstant() {\r\n return (this.blurFilterSize * this.particleSize * 0.05 * (this._height / 2)) / Math.tan((this._camera?.fov ?? (45 * Math.PI) / 180) / 2);\r\n }\r\n\r\n private _getDepthThreshold() {\r\n return (this.particleSize / 2) * this.blurDepthScale;\r\n }\r\n\r\n public dispose(): void {\r\n if (this.onDisposeObservable.hasObservers()) {\r\n this.onDisposeObservable.notifyObservers(this);\r\n }\r\n\r\n this.onDisposeObservable.clear();\r\n\r\n this._rt?.dispose();\r\n this._rt = null;\r\n this._texture?.dispose();\r\n this._texture = null;\r\n this._rtBlur?.dispose();\r\n this._rtBlur = null;\r\n this._textureBlurred?.dispose();\r\n this._textureBlurred = null;\r\n if (this._blurPostProcesses) {\r\n this._blurPostProcesses[0].dispose();\r\n this._blurPostProcesses[1].dispose();\r\n }\r\n this._blurPostProcesses = null;\r\n }\r\n}\r\n"]}
@@ -382,6 +382,7 @@ export class GeometryBufferRenderer {
382
382
  this._useUbo = scene.getEngine().supportsUniformBuffers;
383
383
  this._depthFormat = depthFormat;
384
384
  this._textureTypesAndFormats = textureTypesAndFormats || {};
385
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
385
386
  this._initShaderSourceAsync();
386
387
  GeometryBufferRenderer._SceneComponentInitialization(this._scene);
387
388
  // Render target