@babylonjs/core 8.52.1 → 8.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/Animations/animatorAvatar.d.ts +5 -2
  2. package/Animations/animatorAvatar.js +40 -27
  3. package/Animations/animatorAvatar.js.map +1 -1
  4. package/AudioV2/abstractAudio/abstractSound.js +3 -4
  5. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  6. package/AudioV2/abstractAudio/audioBus.js +3 -0
  7. package/AudioV2/abstractAudio/audioBus.js.map +1 -1
  8. package/AudioV2/abstractAudio/streamingSoundInstance.d.ts +1 -1
  9. package/AudioV2/abstractAudio/streamingSoundInstance.js +2 -2
  10. package/AudioV2/abstractAudio/streamingSoundInstance.js.map +1 -1
  11. package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.d.ts +4 -1
  12. package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.js +5 -2
  13. package/AudioV2/webAudio/components/spatialWebAudioUpdaterComponent.js.map +1 -1
  14. package/AudioV2/webAudio/webAudioStaticSound.js +3 -3
  15. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  16. package/AudioV2/webAudio/webAudioStreamingSound.js +2 -4
  17. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  18. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +6 -3
  19. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  20. package/Cameras/Inputs/geospatialCameraMouseWheelInput.d.ts +1 -2
  21. package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -2
  22. package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
  23. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +0 -4
  24. package/Cameras/Inputs/geospatialCameraPointersInput.js +1 -5
  25. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  26. package/Cameras/cameraMovement.d.ts +1 -4
  27. package/Cameras/cameraMovement.js +1 -4
  28. package/Cameras/cameraMovement.js.map +1 -1
  29. package/Cameras/geospatialCamera.d.ts +22 -2
  30. package/Cameras/geospatialCamera.js +28 -8
  31. package/Cameras/geospatialCamera.js.map +1 -1
  32. package/Cameras/geospatialCameraMovement.d.ts +11 -1
  33. package/Cameras/geospatialCameraMovement.js +26 -6
  34. package/Cameras/geospatialCameraMovement.js.map +1 -1
  35. package/Debug/physicsViewer.d.ts +1 -0
  36. package/Debug/physicsViewer.js +1 -0
  37. package/Debug/physicsViewer.js.map +1 -1
  38. package/Engines/WebGPU/Extensions/engine.debugging.js +35 -13
  39. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  40. package/Engines/WebGPU/webgpuBufferManager.js +3 -1
  41. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  42. package/Engines/abstractEngine.js +2 -2
  43. package/Engines/abstractEngine.js.map +1 -1
  44. package/Engines/engineFeatures.d.ts +0 -2
  45. package/Engines/engineFeatures.js.map +1 -1
  46. package/Engines/nullEngine.js +4 -1
  47. package/Engines/nullEngine.js.map +1 -1
  48. package/Engines/thinEngine.js +0 -1
  49. package/Engines/thinEngine.js.map +1 -1
  50. package/Engines/thinNativeEngine.js +0 -1
  51. package/Engines/thinNativeEngine.js.map +1 -1
  52. package/Engines/thinWebGPUEngine.d.ts +9 -4
  53. package/Engines/thinWebGPUEngine.js +32 -32
  54. package/Engines/thinWebGPUEngine.js.map +1 -1
  55. package/Engines/webgpuEngine.d.ts +1 -0
  56. package/Engines/webgpuEngine.js +26 -167
  57. package/Engines/webgpuEngine.js.map +1 -1
  58. package/FrameGraph/Passes/renderPass.js +0 -3
  59. package/FrameGraph/Passes/renderPass.js.map +1 -1
  60. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +2 -3
  61. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +5 -29
  62. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  63. package/FrameGraph/frameGraph.d.ts +21 -1
  64. package/FrameGraph/frameGraph.js +52 -0
  65. package/FrameGraph/frameGraph.js.map +1 -1
  66. package/FrameGraph/frameGraphContext.js +1 -1
  67. package/FrameGraph/frameGraphContext.js.map +1 -1
  68. package/FrameGraph/frameGraphTask.d.ts +0 -2
  69. package/FrameGraph/frameGraphTask.js +15 -17
  70. package/FrameGraph/frameGraphTask.js.map +1 -1
  71. package/FrameGraph/frameGraphTextureManager.js +1 -1
  72. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  73. package/FrameGraph/frameGraphUtils.d.ts +1 -2
  74. package/FrameGraph/frameGraphUtils.js +2 -27
  75. package/FrameGraph/frameGraphUtils.js.map +1 -1
  76. package/Gizmos/axisScaleGizmo.js +2 -2
  77. package/Gizmos/axisScaleGizmo.js.map +1 -1
  78. package/Gizmos/cameraGizmo.d.ts +1 -1
  79. package/Gizmos/cameraGizmo.js +1 -1
  80. package/Gizmos/cameraGizmo.js.map +1 -1
  81. package/Gizmos/gizmo.d.ts +4 -4
  82. package/Gizmos/gizmo.js +5 -5
  83. package/Gizmos/gizmo.js.map +1 -1
  84. package/Gizmos/gizmoManager.d.ts +2 -2
  85. package/Gizmos/gizmoManager.js +1 -1
  86. package/Gizmos/gizmoManager.js.map +1 -1
  87. package/Gizmos/planeRotationGizmo.d.ts +2 -2
  88. package/Gizmos/planeRotationGizmo.js +2 -3
  89. package/Gizmos/planeRotationGizmo.js.map +1 -1
  90. package/Gizmos/positionGizmo.d.ts +1 -1
  91. package/Gizmos/positionGizmo.js +2 -2
  92. package/Gizmos/positionGizmo.js.map +1 -1
  93. package/Gizmos/rotationGizmo.d.ts +1 -1
  94. package/Gizmos/rotationGizmo.js +3 -3
  95. package/Gizmos/rotationGizmo.js.map +1 -1
  96. package/Gizmos/scaleGizmo.d.ts +1 -1
  97. package/Gizmos/scaleGizmo.js +1 -1
  98. package/Gizmos/scaleGizmo.js.map +1 -1
  99. package/Helpers/environmentHelper.js +7 -0
  100. package/Helpers/environmentHelper.js.map +1 -1
  101. package/Layers/highlightLayer.d.ts +14 -0
  102. package/Layers/highlightLayer.js +20 -0
  103. package/Layers/highlightLayer.js.map +1 -1
  104. package/Layers/selectionOutlineLayer.d.ts +1 -0
  105. package/Layers/selectionOutlineLayer.js +1 -0
  106. package/Layers/selectionOutlineLayer.js.map +1 -1
  107. package/Layers/thinEffectLayer.js +25 -1
  108. package/Layers/thinEffectLayer.js.map +1 -1
  109. package/Layers/thinHighlightLayer.d.ts +9 -0
  110. package/Layers/thinHighlightLayer.js +19 -3
  111. package/Layers/thinHighlightLayer.js.map +1 -1
  112. package/Lights/Clustered/clusteredLightContainer.js +10 -8
  113. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  114. package/Loading/Plugins/babylonFileLoader.d.ts +2 -0
  115. package/Loading/Plugins/babylonFileLoader.js +2 -0
  116. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  117. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +12 -3
  118. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +33 -8
  119. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -1
  120. package/Materials/Node/Blocks/Dual/depthSourceBlock.d.ts +1 -0
  121. package/Materials/Node/Blocks/Dual/depthSourceBlock.js +1 -0
  122. package/Materials/Node/Blocks/Dual/depthSourceBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -0
  124. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -0
  125. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  126. package/Materials/Textures/renderTargetTexture.js +6 -4
  127. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  128. package/Materials/uniformBuffer.d.ts +0 -4
  129. package/Materials/uniformBuffer.js +0 -8
  130. package/Materials/uniformBuffer.js.map +1 -1
  131. package/Materials/vertexPullingHelper.functions.d.ts +4 -0
  132. package/Materials/vertexPullingHelper.functions.js +4 -2
  133. package/Materials/vertexPullingHelper.functions.js.map +1 -1
  134. package/Meshes/mesh.js +1 -1
  135. package/Meshes/mesh.js.map +1 -1
  136. package/Misc/snapshotRenderingHelper.d.ts +5 -3
  137. package/Misc/snapshotRenderingHelper.js +9 -5
  138. package/Misc/snapshotRenderingHelper.js.map +1 -1
  139. package/Navigation/INavigationEngine.d.ts +2 -2
  140. package/Navigation/INavigationEngine.js.map +1 -1
  141. package/Navigation/Plugins/recastJSPlugin.d.ts +2 -2
  142. package/Navigation/Plugins/recastJSPlugin.js +14 -5
  143. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  144. package/Particles/Node/Blocks/index.d.ts +0 -2
  145. package/Particles/Node/Blocks/index.js +0 -2
  146. package/Particles/Node/Blocks/index.js.map +1 -1
  147. package/Particles/Node/Blocks/particleNumberMathBlock.js +16 -0
  148. package/Particles/Node/Blocks/particleNumberMathBlock.js.map +1 -1
  149. package/Particles/Node/Blocks/systemBlock.d.ts +0 -4
  150. package/Particles/Node/Blocks/systemBlock.js +1 -32
  151. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  152. package/Particles/Node/nodeParticleSystemSet.helper.js +2 -89
  153. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  154. package/Physics/castingResult.d.ts +4 -1
  155. package/Physics/castingResult.js +1 -1
  156. package/Physics/castingResult.js.map +1 -1
  157. package/Physics/joinedPhysicsEngineComponent.js +1 -1
  158. package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
  159. package/Physics/physicsHelper.d.ts +8 -8
  160. package/Physics/physicsHelper.js +7 -7
  161. package/Physics/physicsHelper.js.map +1 -1
  162. package/Physics/shapeCastResult.d.ts +4 -0
  163. package/Physics/shapeCastResult.js +7 -0
  164. package/Physics/shapeCastResult.js.map +1 -1
  165. package/Physics/v2/IPhysicsEnginePlugin.d.ts +51 -4
  166. package/Physics/v2/IPhysicsEnginePlugin.js +12 -12
  167. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  168. package/Physics/v2/characterController.js.map +1 -1
  169. package/Physics/v2/physicsBody.js.map +1 -1
  170. package/Physics/v2/physicsConstraint.d.ts +1 -1
  171. package/Physics/v2/physicsConstraint.js +1 -1
  172. package/Physics/v2/physicsConstraint.js.map +1 -1
  173. package/Physics/v2/physicsEngine.d.ts +0 -5
  174. package/Physics/v2/physicsEngine.js +0 -5
  175. package/Physics/v2/physicsEngine.js.map +1 -1
  176. package/Physics/v2/physicsEngineComponent.d.ts +1 -1
  177. package/Physics/v2/physicsEngineComponent.js.map +1 -1
  178. package/Physics/v2/physicsMaterial.d.ts +6 -0
  179. package/Physics/v2/physicsMaterial.js +2 -2
  180. package/Physics/v2/physicsMaterial.js.map +1 -1
  181. package/Physics/v2/ragdoll.js.map +1 -1
  182. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +1 -0
  183. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +1 -0
  184. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  185. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +1 -0
  186. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +1 -0
  187. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  188. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +6 -0
  189. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +8 -0
  190. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  191. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +1 -0
  192. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  193. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  194. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +6 -0
  195. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +8 -0
  196. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  197. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.d.ts +1 -0
  198. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  199. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  200. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +1 -0
  201. package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -0
  202. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  203. package/Rendering/GlobalIllumination/giRSMManager.d.ts +1 -0
  204. package/Rendering/GlobalIllumination/giRSMManager.js +1 -0
  205. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  206. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +7 -3
  207. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  208. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +3 -1
  209. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  210. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +4 -1
  211. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  212. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +3 -1
  213. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  214. package/Rendering/edgesRenderer.js +1 -0
  215. package/Rendering/edgesRenderer.js.map +1 -1
  216. package/Rendering/geometryBufferRenderer.js +3 -0
  217. package/Rendering/geometryBufferRenderer.js.map +1 -1
  218. package/Rendering/objectRenderer.js +8 -4
  219. package/Rendering/objectRenderer.js.map +1 -1
  220. package/Rendering/prePassRenderer.d.ts +1 -0
  221. package/Rendering/prePassRenderer.js +1 -0
  222. package/Rendering/prePassRenderer.js.map +1 -1
  223. package/Rendering/renderingGroup.d.ts +1 -1
  224. package/Rendering/renderingGroup.js +1 -1
  225. package/Rendering/renderingGroup.js.map +1 -1
  226. package/Rendering/renderingManager.d.ts +1 -1
  227. package/Rendering/renderingManager.js.map +1 -1
  228. package/Shaders/iblVoxelGrid.fragment.js +4 -1
  229. package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
  230. package/ShadersWGSL/background.fragment.js +1 -1
  231. package/ShadersWGSL/background.fragment.js.map +1 -1
  232. package/ShadersWGSL/background.vertex.js +8 -8
  233. package/ShadersWGSL/background.vertex.js.map +1 -1
  234. package/ShadersWGSL/boundingBoxRenderer.vertex.js +2 -2
  235. package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
  236. package/ShadersWGSL/clearQuad.vertex.js +1 -1
  237. package/ShadersWGSL/clearQuad.vertex.js.map +1 -1
  238. package/ShadersWGSL/color.vertex.js +1 -1
  239. package/ShadersWGSL/color.vertex.js.map +1 -1
  240. package/ShadersWGSL/depth.vertex.js +3 -3
  241. package/ShadersWGSL/depth.vertex.js.map +1 -1
  242. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +2 -2
  243. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  244. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +2 -2
  245. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  246. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +2 -2
  247. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  248. package/ShadersWGSL/fxaa.vertex.js +1 -1
  249. package/ShadersWGSL/fxaa.vertex.js.map +1 -1
  250. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  251. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  252. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +3 -3
  253. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  254. package/ShadersWGSL/geometry.vertex.js +4 -4
  255. package/ShadersWGSL/geometry.vertex.js.map +1 -1
  256. package/ShadersWGSL/glowMapGeneration.vertex.js +4 -4
  257. package/ShadersWGSL/glowMapGeneration.vertex.js.map +1 -1
  258. package/ShadersWGSL/glowMapMerge.vertex.js +1 -1
  259. package/ShadersWGSL/glowMapMerge.vertex.js.map +1 -1
  260. package/ShadersWGSL/greasedLine.vertex.js +10 -4
  261. package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
  262. package/ShadersWGSL/hdrFiltering.vertex.js +1 -1
  263. package/ShadersWGSL/hdrFiltering.vertex.js.map +1 -1
  264. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +1 -1
  265. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -1
  266. package/ShadersWGSL/iblVoxelGrid.vertex.js +53 -44
  267. package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
  268. package/ShadersWGSL/iblVoxelSlabDebug.vertex.js +1 -1
  269. package/ShadersWGSL/iblVoxelSlabDebug.vertex.js.map +1 -1
  270. package/ShadersWGSL/kernelBlur.vertex.js +2 -2
  271. package/ShadersWGSL/kernelBlur.vertex.js.map +1 -1
  272. package/ShadersWGSL/layer.vertex.js +1 -1
  273. package/ShadersWGSL/layer.vertex.js.map +1 -1
  274. package/ShadersWGSL/lensFlare.vertex.js +1 -1
  275. package/ShadersWGSL/lensFlare.vertex.js.map +1 -1
  276. package/ShadersWGSL/line.vertex.js +2 -2
  277. package/ShadersWGSL/line.vertex.js.map +1 -1
  278. package/ShadersWGSL/meshUVSpaceRenderer.vertex.js +2 -2
  279. package/ShadersWGSL/meshUVSpaceRenderer.vertex.js.map +1 -1
  280. package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js +1 -1
  281. package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js.map +1 -1
  282. package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js +1 -1
  283. package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js.map +1 -1
  284. package/ShadersWGSL/particles.vertex.js +9 -9
  285. package/ShadersWGSL/particles.vertex.js.map +1 -1
  286. package/ShadersWGSL/picking.vertex.js +2 -2
  287. package/ShadersWGSL/picking.vertex.js.map +1 -1
  288. package/ShadersWGSL/procedural.vertex.js +1 -1
  289. package/ShadersWGSL/procedural.vertex.js.map +1 -1
  290. package/ShadersWGSL/shadowMap.vertex.js +4 -4
  291. package/ShadersWGSL/shadowMap.vertex.js.map +1 -1
  292. package/ShadersWGSL/sprites.vertex.js +3 -3
  293. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  294. package/XR/features/WebXRControllerPhysics.d.ts +1 -0
  295. package/XR/features/WebXRControllerPhysics.js +1 -2
  296. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  297. package/XR/features/WebXRControllerTeleportation.js +1 -2
  298. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  299. package/XR/features/WebXRDepthSensing.js +1 -0
  300. package/XR/features/WebXRDepthSensing.js.map +1 -1
  301. package/XR/features/WebXRHandTracking.d.ts +1 -0
  302. package/XR/features/WebXRHandTracking.js +5 -7
  303. package/XR/features/WebXRHandTracking.js.map +1 -1
  304. package/XR/features/WebXRWalkingLocomotion.js +1 -1
  305. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  306. package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
  307. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  308. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  309. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  310. package/XR/webXRCamera.d.ts +1 -0
  311. package/XR/webXRCamera.js +9 -7
  312. package/XR/webXRCamera.js.map +1 -1
  313. package/XR/webXRExperienceHelper.d.ts +4 -0
  314. package/XR/webXRExperienceHelper.js +25 -5
  315. package/XR/webXRExperienceHelper.js.map +1 -1
  316. package/XR/webXRInput.d.ts +1 -0
  317. package/XR/webXRInput.js +6 -0
  318. package/XR/webXRInput.js.map +1 -1
  319. package/XR/webXRSessionManager.js +5 -4
  320. package/XR/webXRSessionManager.js.map +1 -1
  321. package/package.json +1 -1
  322. package/scene.js +21 -2
  323. package/scene.js.map +1 -1
  324. package/Particles/Node/Blocks/Update/updateRemapBlock.d.ts +0 -39
  325. package/Particles/Node/Blocks/Update/updateRemapBlock.js +0 -93
  326. package/Particles/Node/Blocks/Update/updateRemapBlock.js.map +0 -1
  327. package/Particles/Node/Blocks/particleFresnelBlock.d.ts +0 -34
  328. package/Particles/Node/Blocks/particleFresnelBlock.js +0 -74
  329. package/Particles/Node/Blocks/particleFresnelBlock.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ragdoll.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/ragdoll.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Skeleton } from \"../../Bones/skeleton\";\r\nimport { Vector3, Matrix, TmpVectors, Quaternion } from \"../../Maths/math.vector\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { PhysicsAggregate } from \"./physicsAggregate\";\r\nimport { PhysicsConstraint } from \"./physicsConstraint\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { Axis, Space } from \"core/Maths/math.axis\";\r\nimport { PhysicsShapeType, PhysicsConstraintType, PhysicsMotionType } from \"./IPhysicsEnginePlugin\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Bone } from \"../../Bones/bone\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\n\r\n/**\r\n * Ragdoll bone properties\r\n * @experimental\r\n */\r\nexport class RagdollBoneProperties {\r\n /**\r\n * Width of the box shape\r\n */\r\n width?: number;\r\n /**\r\n * depth of the box shape\r\n */\r\n depth?: number;\r\n /**\r\n * height of the box shape\r\n */\r\n height?: number;\r\n /**\r\n * size that will be used of width, depth and height of the shape box\r\n */\r\n size?: number;\r\n /**\r\n * Type of Physics Constraint used between bones\r\n */\r\n joint?: number | undefined | PhysicsConstraintType;\r\n /**\r\n * Main rotation axis used by the constraint, in local space\r\n */\r\n rotationAxis?: Vector3;\r\n /**\r\n * Minimum rotation angle value\r\n */\r\n min?: number;\r\n /**\r\n * Maximum rotation angle value\r\n */\r\n max?: number;\r\n /**\r\n * Offset along local axis\r\n */\r\n boxOffset?: number;\r\n /**\r\n * Axis that need an offset\r\n */\r\n boneOffsetAxis?: Vector3;\r\n}\r\n\r\n/**\r\n * Ragdoll for Physics V2\r\n * @experimental\r\n */\r\nexport class Ragdoll {\r\n private _skeleton: Skeleton;\r\n private _scene: Scene;\r\n private _rootTransformNode: Mesh | TransformNode;\r\n private _config: any;\r\n private _boxConfigs: Array<RagdollBoneProperties> = new Array<RagdollBoneProperties>();\r\n private _constraints: Array<PhysicsConstraint> = new Array<PhysicsConstraint>();\r\n private _bones: Array<Bone> = new Array<Bone>();\r\n private _initialRotation: Array<Quaternion> = new Array<Quaternion>();\r\n // without mesh transform, to figure out later\r\n private _initialRotation2: Array<Quaternion> = new Array<Quaternion>();\r\n private _boneNames: string[] = [];\r\n private _transforms: Array<TransformNode> = new Array<TransformNode>();\r\n private _aggregates: Array<PhysicsAggregate> = new Array<PhysicsAggregate>();\r\n private _ragdollMode: boolean = false;\r\n private _rootBoneName: string = \"\";\r\n private _rootBoneIndex: number = -1;\r\n private _mass: number = 10;\r\n private _restitution: number = 0;\r\n private _beforeRenderObserver: Nullable<Observer<Scene>> = null;\r\n\r\n /**\r\n * Pause synchronization between physics and bone position/orientation\r\n */\r\n public pauseSync: boolean = false;\r\n\r\n private _putBoxesInBoneCenter: boolean;\r\n private _defaultJoint: number = PhysicsConstraintType.HINGE;\r\n private _defaultJointMin: number = -90;\r\n private _defaultJointMax: number = 90;\r\n\r\n /**\r\n * Construct a new Ragdoll object. Once ready, it can be made dynamic by calling `Ragdoll` method\r\n * @param skeleton The skeleton containing bones to be physicalized\r\n * @param rootTransformNode The mesh or its transform used by the skeleton\r\n * @param config an array of `RagdollBoneProperties` corresponding to bones and their properties used to instanciate physics bodies\r\n */\r\n constructor(skeleton: Skeleton, rootTransformNode: Mesh | TransformNode, config: RagdollBoneProperties[]) {\r\n this._skeleton = skeleton;\r\n this._scene = skeleton.getScene();\r\n this._rootTransformNode = rootTransformNode;\r\n this._config = config; // initial, user defined box configs. May have several box configs jammed into 1 index.\r\n this._boxConfigs = []; // final box configs. Every element is a separate box config (this.config may have several configs jammed into 1 index).\r\n this._putBoxesInBoneCenter = false;\r\n this._defaultJoint = PhysicsConstraintType.HINGE;\r\n\r\n this._init();\r\n }\r\n\r\n /**\r\n * returns an array of created constraints\r\n * @returns array of created constraints\r\n */\r\n public getConstraints(): Array<PhysicsConstraint> {\r\n return this._constraints;\r\n }\r\n\r\n /**\r\n * Returns the aggregate corresponding to the ragdoll bone index\r\n * @param index ragdoll bone aggregate index\r\n * @returns the aggregate for the bone index for the root aggregate if index is invalid\r\n */\r\n public getAggregate(index: number): PhysicsAggregate {\r\n if (index < 0 || index >= this._aggregates.length) {\r\n return this._aggregates[this._rootBoneIndex];\r\n }\r\n return this._aggregates[index];\r\n }\r\n\r\n private _createColliders(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n this._skeleton.computeAbsoluteMatrices(true);\r\n this._skeleton.prepare(true);\r\n\r\n const config = this._config;\r\n for (let i = 0; i < config.length; i++) {\r\n const boneNames = config[i].bone !== undefined ? [config[i].bone] : config[i].bones;\r\n\r\n for (let ii = 0; ii < boneNames.length; ii++) {\r\n const currentBone = this._skeleton.bones[this._skeleton.getBoneIndexByName(boneNames[ii])];\r\n if (currentBone == undefined) {\r\n return;\r\n }\r\n\r\n // First define the box dimensions, so we can then use them when calling CreateBox().\r\n const currentRagdollBoneProperties: RagdollBoneProperties = {\r\n width: this._config[i].width,\r\n depth: this._config[i].depth,\r\n height: this._config[i].height,\r\n size: this._config[i].size,\r\n };\r\n\r\n currentRagdollBoneProperties.width = currentRagdollBoneProperties.width ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.depth = currentRagdollBoneProperties.depth ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.height = currentRagdollBoneProperties.height ?? currentRagdollBoneProperties.size;\r\n const transform = new TransformNode(boneNames[ii] + \"_transform\", this._scene);\r\n\r\n // Define the rest of the box properties.\r\n currentRagdollBoneProperties.joint = config[i].joint !== undefined ? config[i].joint : this._defaultJoint;\r\n currentRagdollBoneProperties.rotationAxis = config[i].rotationAxis !== undefined ? config[i].rotationAxis : Axis.X;\r\n currentRagdollBoneProperties.min = config[i].min !== undefined ? config[i].min : this._defaultJointMin;\r\n currentRagdollBoneProperties.max = config[i].max !== undefined ? config[i].max : this._defaultJointMax;\r\n\r\n // Offset value.\r\n let boxOffset = 0;\r\n if ((config[i].putBoxInBoneCenter !== undefined && config[i].putBoxInBoneCenter) || this._putBoxesInBoneCenter) {\r\n if (currentBone.length === undefined) {\r\n Logger.Log(\"The length property is not defined for bone \" + currentBone.name);\r\n }\r\n boxOffset = currentBone.length / 2;\r\n } else if (config[i].boxOffset !== undefined) {\r\n boxOffset = config[i].boxOffset;\r\n }\r\n currentRagdollBoneProperties.boxOffset = boxOffset;\r\n\r\n // Offset axis.\r\n const boneOffsetAxis = config[i].boneOffsetAxis !== undefined ? config[i].boneOffsetAxis : Axis.Y;\r\n const boneDir = currentBone.getDirection(boneOffsetAxis, this._rootTransformNode);\r\n currentRagdollBoneProperties.boneOffsetAxis = boneOffsetAxis;\r\n\r\n transform.position = currentBone.getAbsolutePosition(this._rootTransformNode).add(boneDir.scale(boxOffset));\r\n\r\n const mass = config[i].mass !== undefined ? config[i].mass : this._mass;\r\n const restitution = config[i].restitution !== undefined ? config[i].restitution : this._restitution;\r\n const aggregate = new PhysicsAggregate(\r\n transform,\r\n PhysicsShapeType.BOX,\r\n {\r\n mass: mass,\r\n restitution: restitution,\r\n friction: 0.6,\r\n extents: new Vector3(currentRagdollBoneProperties.width, currentRagdollBoneProperties.height, currentRagdollBoneProperties.depth),\r\n },\r\n this._scene\r\n );\r\n aggregate.body.setCollisionCallbackEnabled(true);\r\n aggregate.body.disablePreStep = false;\r\n aggregate.body.setMotionType(PhysicsMotionType.ANIMATED);\r\n this._aggregates.push(aggregate);\r\n this._bones.push(currentBone);\r\n this._boneNames.push(currentBone.name);\r\n this._transforms.push(transform);\r\n this._boxConfigs.push(currentRagdollBoneProperties);\r\n this._initialRotation.push(currentBone.getRotationQuaternion(Space.WORLD, this._rootTransformNode));\r\n this._initialRotation2.push(currentBone.getRotationQuaternion(Space.WORLD));\r\n }\r\n }\r\n }\r\n\r\n private _initJoints(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // The root bone has no joints.\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n\r\n const nearestParent = this._findNearestParent(i);\r\n\r\n if (nearestParent == null) {\r\n Logger.Warn(\"Couldn't find a nearest parent bone in the configs for bone called \" + this._boneNames[i]);\r\n return;\r\n }\r\n\r\n const boneParentIndex = this._boneNames.indexOf(nearestParent.name);\r\n\r\n let distanceFromParentBoxToBone = this._bones[i].getAbsolutePosition(this._rootTransformNode).subtract(this._transforms[boneParentIndex].position);\r\n\r\n const wmat = this._transforms[boneParentIndex].computeWorldMatrix();\r\n const invertedWorldMat = Matrix.Invert(wmat);\r\n distanceFromParentBoxToBone = Vector3.TransformCoordinates(this._bones[i].getAbsolutePosition(this._rootTransformNode), invertedWorldMat);\r\n\r\n const boneAbsPos = this._bones[i].getAbsolutePosition(this._rootTransformNode);\r\n const boxAbsPos = this._transforms[i].position.clone();\r\n const myConnectedPivot = boneAbsPos.subtract(boxAbsPos);\r\n\r\n const constraintType = this._boxConfigs[i].joint ?? this._defaultJoint;\r\n const constraint = new PhysicsConstraint(\r\n constraintType,\r\n {\r\n pivotA: distanceFromParentBoxToBone,\r\n pivotB: myConnectedPivot,\r\n axisA: this._boxConfigs[i].rotationAxis!,\r\n axisB: this._boxConfigs[i].rotationAxis!,\r\n collision: false,\r\n },\r\n this._scene\r\n );\r\n\r\n this._aggregates[boneParentIndex].body.addConstraint(this._aggregates[i].body, constraint);\r\n constraint.isEnabled = false;\r\n this._constraints.push(constraint);\r\n }\r\n }\r\n\r\n // set physics body orientation/position from bones\r\n private _syncBonesToPhysics(): void {\r\n const rootMatrix = this._rootTransformNode.getWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // position\r\n const transform = this._aggregates[i].transformNode;\r\n const rootPos = this._bones[i].getAbsolutePosition();\r\n Vector3.TransformCoordinatesToRef(rootPos, rootMatrix, transform.position);\r\n\r\n // added offset\r\n this._bones[i].getDirectionToRef(this._boxConfigs[i].boneOffsetAxis!, this._rootTransformNode, TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].scaleInPlace(this._boxConfigs[i].boxOffset ?? 0);\r\n transform.position.addInPlace(TmpVectors.Vector3[0]);\r\n\r\n this._setBoneOrientationToBody(i);\r\n }\r\n }\r\n\r\n private _setBoneOrientationToBody(boneIndex: number): void {\r\n const transform = this._aggregates[boneIndex].transformNode;\r\n const bone = this._bones[boneIndex];\r\n this._initialRotation[boneIndex].conjugateToRef(TmpVectors.Quaternion[0]);\r\n bone.getRotationQuaternionToRef(Space.WORLD, this._rootTransformNode, TmpVectors.Quaternion[1]);\r\n TmpVectors.Quaternion[1].multiplyToRef(TmpVectors.Quaternion[0], transform.rotationQuaternion!);\r\n transform.rotationQuaternion!.normalize();\r\n }\r\n\r\n private _syncBonesAndBoxes(): void {\r\n if (this.pauseSync) {\r\n return;\r\n }\r\n\r\n if (this._ragdollMode) {\r\n this._setBodyOrientationToBone(this._rootBoneIndex);\r\n\r\n const rootPos = this._aggregates[this._rootBoneIndex].body.transformNode.position;\r\n this._rootTransformNode.getWorldMatrix().invertToRef(TmpVectors.Matrix[0]);\r\n\r\n Vector3.TransformCoordinatesToRef(rootPos, TmpVectors.Matrix[0], TmpVectors.Vector3[0]);\r\n this._bones[this._rootBoneIndex].setAbsolutePosition(TmpVectors.Vector3[0]);\r\n\r\n for (let i = 0; i < this._bones.length; i++) {\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n this._setBodyOrientationToBone(i);\r\n }\r\n } else {\r\n this._syncBonesToPhysics();\r\n }\r\n }\r\n\r\n private _setBodyOrientationToBone(boneIndex: number): void {\r\n const qmesh =\r\n this._rootTransformNode.rotationQuaternion ??\r\n Quaternion.FromEulerAngles(this._rootTransformNode.rotation.x, this._rootTransformNode.rotation.y, this._rootTransformNode.rotation.z);\r\n const qbind = this._initialRotation2[boneIndex];\r\n const qphys = this._aggregates[boneIndex].body?.transformNode?.rotationQuaternion;\r\n\r\n qmesh.multiplyToRef(qbind, TmpVectors.Quaternion[1]);\r\n qphys?.multiplyToRef(TmpVectors.Quaternion[1], TmpVectors.Quaternion[0]);\r\n\r\n this._bones[boneIndex].setRotationQuaternion(TmpVectors.Quaternion[0], Space.WORLD, this._rootTransformNode);\r\n }\r\n\r\n // Return true if root bone is valid/exists in this.bonesNames. false otherwise.\r\n private _defineRootBone(): boolean {\r\n const skeletonRoots = this._skeleton.getChildren();\r\n if (skeletonRoots.length != 1) {\r\n Logger.Log(\"Ragdoll creation failed: there can only be one root in the skeleton.\");\r\n return false;\r\n }\r\n\r\n this._rootBoneName = skeletonRoots[0].name;\r\n this._rootBoneIndex = this._boneNames.indexOf(this._rootBoneName);\r\n if (this._rootBoneIndex == -1) {\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands, @typescript-eslint/no-base-to-string\r\n Logger.Log(\"Ragdoll creation failed: the array boneNames doesn't have the root bone. The root bone is \" + this._skeleton.getChildren());\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _findNearestParent(boneIndex: number): any {\r\n let nearestParent: Nullable<Bone> | undefined = this._bones[boneIndex].getParent();\r\n do {\r\n if (nearestParent != null && this._boneNames.includes(nearestParent.name)) {\r\n break;\r\n }\r\n\r\n nearestParent = nearestParent?.getParent();\r\n } while (nearestParent != null);\r\n\r\n return nearestParent;\r\n }\r\n\r\n private _init() {\r\n this._createColliders();\r\n\r\n // If this.defineRootBone() returns ... there is not root bone.\r\n if (!this._defineRootBone()) {\r\n return;\r\n }\r\n\r\n this._initJoints();\r\n this._beforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n this._syncBonesAndBoxes();\r\n });\r\n this._syncBonesToPhysics();\r\n }\r\n\r\n /**\r\n * Enable ragdoll mode. Create physics objects and make them dynamic.\r\n */\r\n public ragdoll(): void {\r\n this._ragdollMode = true;\r\n // detach bones with link transform to let physics have control\r\n for (const bone of this._skeleton.bones) {\r\n bone.linkTransformNode(null);\r\n }\r\n for (let i = 0; i < this._constraints.length; i++) {\r\n this._constraints[i].isEnabled = true;\r\n }\r\n for (let i = 0; i < this._aggregates.length; i++) {\r\n this._aggregates[i].body.setMotionType(PhysicsMotionType.DYNAMIC);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose resources and remove physics objects\r\n */\r\n dispose(): void {\r\n for (const aggregate of this._aggregates) {\r\n aggregate.dispose();\r\n }\r\n this._aggregates.length = 0;\r\n for (const transform of this._transforms) {\r\n transform.dispose();\r\n }\r\n this._transforms.length = 0;\r\n for (const constraint of this._constraints) {\r\n constraint.dispose();\r\n }\r\n this._constraints.length = 0;\r\n\r\n if (this._beforeRenderObserver) {\r\n this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver);\r\n this._beforeRenderObserver = null;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ragdoll.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/ragdoll.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Skeleton } from \"../../Bones/skeleton\";\r\nimport { Vector3, Matrix, TmpVectors, Quaternion } from \"../../Maths/math.vector\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { PhysicsAggregate } from \"./physicsAggregate\";\r\nimport { PhysicsConstraint } from \"./physicsConstraint\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { Axis, Space } from \"../../Maths/math.axis\";\r\nimport { PhysicsShapeType, PhysicsConstraintType, PhysicsMotionType } from \"./IPhysicsEnginePlugin\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Bone } from \"../../Bones/bone\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\n\r\n/**\r\n * Ragdoll bone properties\r\n * @experimental\r\n */\r\nexport class RagdollBoneProperties {\r\n /**\r\n * Width of the box shape\r\n */\r\n width?: number;\r\n /**\r\n * depth of the box shape\r\n */\r\n depth?: number;\r\n /**\r\n * height of the box shape\r\n */\r\n height?: number;\r\n /**\r\n * size that will be used of width, depth and height of the shape box\r\n */\r\n size?: number;\r\n /**\r\n * Type of Physics Constraint used between bones\r\n */\r\n joint?: number | undefined | PhysicsConstraintType;\r\n /**\r\n * Main rotation axis used by the constraint, in local space\r\n */\r\n rotationAxis?: Vector3;\r\n /**\r\n * Minimum rotation angle value\r\n */\r\n min?: number;\r\n /**\r\n * Maximum rotation angle value\r\n */\r\n max?: number;\r\n /**\r\n * Offset along local axis\r\n */\r\n boxOffset?: number;\r\n /**\r\n * Axis that need an offset\r\n */\r\n boneOffsetAxis?: Vector3;\r\n}\r\n\r\n/**\r\n * Ragdoll for Physics V2\r\n * @experimental\r\n */\r\nexport class Ragdoll {\r\n private _skeleton: Skeleton;\r\n private _scene: Scene;\r\n private _rootTransformNode: Mesh | TransformNode;\r\n private _config: any;\r\n private _boxConfigs: Array<RagdollBoneProperties> = new Array<RagdollBoneProperties>();\r\n private _constraints: Array<PhysicsConstraint> = new Array<PhysicsConstraint>();\r\n private _bones: Array<Bone> = new Array<Bone>();\r\n private _initialRotation: Array<Quaternion> = new Array<Quaternion>();\r\n // without mesh transform, to figure out later\r\n private _initialRotation2: Array<Quaternion> = new Array<Quaternion>();\r\n private _boneNames: string[] = [];\r\n private _transforms: Array<TransformNode> = new Array<TransformNode>();\r\n private _aggregates: Array<PhysicsAggregate> = new Array<PhysicsAggregate>();\r\n private _ragdollMode: boolean = false;\r\n private _rootBoneName: string = \"\";\r\n private _rootBoneIndex: number = -1;\r\n private _mass: number = 10;\r\n private _restitution: number = 0;\r\n private _beforeRenderObserver: Nullable<Observer<Scene>> = null;\r\n\r\n /**\r\n * Pause synchronization between physics and bone position/orientation\r\n */\r\n public pauseSync: boolean = false;\r\n\r\n private _putBoxesInBoneCenter: boolean;\r\n private _defaultJoint: number = PhysicsConstraintType.HINGE;\r\n private _defaultJointMin: number = -90;\r\n private _defaultJointMax: number = 90;\r\n\r\n /**\r\n * Construct a new Ragdoll object. Once ready, it can be made dynamic by calling `Ragdoll` method\r\n * @param skeleton The skeleton containing bones to be physicalized\r\n * @param rootTransformNode The mesh or its transform used by the skeleton\r\n * @param config an array of `RagdollBoneProperties` corresponding to bones and their properties used to instanciate physics bodies\r\n */\r\n constructor(skeleton: Skeleton, rootTransformNode: Mesh | TransformNode, config: RagdollBoneProperties[]) {\r\n this._skeleton = skeleton;\r\n this._scene = skeleton.getScene();\r\n this._rootTransformNode = rootTransformNode;\r\n this._config = config; // initial, user defined box configs. May have several box configs jammed into 1 index.\r\n this._boxConfigs = []; // final box configs. Every element is a separate box config (this.config may have several configs jammed into 1 index).\r\n this._putBoxesInBoneCenter = false;\r\n this._defaultJoint = PhysicsConstraintType.HINGE;\r\n\r\n this._init();\r\n }\r\n\r\n /**\r\n * returns an array of created constraints\r\n * @returns array of created constraints\r\n */\r\n public getConstraints(): Array<PhysicsConstraint> {\r\n return this._constraints;\r\n }\r\n\r\n /**\r\n * Returns the aggregate corresponding to the ragdoll bone index\r\n * @param index ragdoll bone aggregate index\r\n * @returns the aggregate for the bone index for the root aggregate if index is invalid\r\n */\r\n public getAggregate(index: number): PhysicsAggregate {\r\n if (index < 0 || index >= this._aggregates.length) {\r\n return this._aggregates[this._rootBoneIndex];\r\n }\r\n return this._aggregates[index];\r\n }\r\n\r\n private _createColliders(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n this._skeleton.computeAbsoluteMatrices(true);\r\n this._skeleton.prepare(true);\r\n\r\n const config = this._config;\r\n for (let i = 0; i < config.length; i++) {\r\n const boneNames = config[i].bone !== undefined ? [config[i].bone] : config[i].bones;\r\n\r\n for (let ii = 0; ii < boneNames.length; ii++) {\r\n const currentBone = this._skeleton.bones[this._skeleton.getBoneIndexByName(boneNames[ii])];\r\n if (currentBone == undefined) {\r\n return;\r\n }\r\n\r\n // First define the box dimensions, so we can then use them when calling CreateBox().\r\n const currentRagdollBoneProperties: RagdollBoneProperties = {\r\n width: this._config[i].width,\r\n depth: this._config[i].depth,\r\n height: this._config[i].height,\r\n size: this._config[i].size,\r\n };\r\n\r\n currentRagdollBoneProperties.width = currentRagdollBoneProperties.width ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.depth = currentRagdollBoneProperties.depth ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.height = currentRagdollBoneProperties.height ?? currentRagdollBoneProperties.size;\r\n const transform = new TransformNode(boneNames[ii] + \"_transform\", this._scene);\r\n\r\n // Define the rest of the box properties.\r\n currentRagdollBoneProperties.joint = config[i].joint !== undefined ? config[i].joint : this._defaultJoint;\r\n currentRagdollBoneProperties.rotationAxis = config[i].rotationAxis !== undefined ? config[i].rotationAxis : Axis.X;\r\n currentRagdollBoneProperties.min = config[i].min !== undefined ? config[i].min : this._defaultJointMin;\r\n currentRagdollBoneProperties.max = config[i].max !== undefined ? config[i].max : this._defaultJointMax;\r\n\r\n // Offset value.\r\n let boxOffset = 0;\r\n if ((config[i].putBoxInBoneCenter !== undefined && config[i].putBoxInBoneCenter) || this._putBoxesInBoneCenter) {\r\n if (currentBone.length === undefined) {\r\n Logger.Log(\"The length property is not defined for bone \" + currentBone.name);\r\n }\r\n boxOffset = currentBone.length / 2;\r\n } else if (config[i].boxOffset !== undefined) {\r\n boxOffset = config[i].boxOffset;\r\n }\r\n currentRagdollBoneProperties.boxOffset = boxOffset;\r\n\r\n // Offset axis.\r\n const boneOffsetAxis = config[i].boneOffsetAxis !== undefined ? config[i].boneOffsetAxis : Axis.Y;\r\n const boneDir = currentBone.getDirection(boneOffsetAxis, this._rootTransformNode);\r\n currentRagdollBoneProperties.boneOffsetAxis = boneOffsetAxis;\r\n\r\n transform.position = currentBone.getAbsolutePosition(this._rootTransformNode).add(boneDir.scale(boxOffset));\r\n\r\n const mass = config[i].mass !== undefined ? config[i].mass : this._mass;\r\n const restitution = config[i].restitution !== undefined ? config[i].restitution : this._restitution;\r\n const aggregate = new PhysicsAggregate(\r\n transform,\r\n PhysicsShapeType.BOX,\r\n {\r\n mass: mass,\r\n restitution: restitution,\r\n friction: 0.6,\r\n extents: new Vector3(currentRagdollBoneProperties.width, currentRagdollBoneProperties.height, currentRagdollBoneProperties.depth),\r\n },\r\n this._scene\r\n );\r\n aggregate.body.setCollisionCallbackEnabled(true);\r\n aggregate.body.disablePreStep = false;\r\n aggregate.body.setMotionType(PhysicsMotionType.ANIMATED);\r\n this._aggregates.push(aggregate);\r\n this._bones.push(currentBone);\r\n this._boneNames.push(currentBone.name);\r\n this._transforms.push(transform);\r\n this._boxConfigs.push(currentRagdollBoneProperties);\r\n this._initialRotation.push(currentBone.getRotationQuaternion(Space.WORLD, this._rootTransformNode));\r\n this._initialRotation2.push(currentBone.getRotationQuaternion(Space.WORLD));\r\n }\r\n }\r\n }\r\n\r\n private _initJoints(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // The root bone has no joints.\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n\r\n const nearestParent = this._findNearestParent(i);\r\n\r\n if (nearestParent == null) {\r\n Logger.Warn(\"Couldn't find a nearest parent bone in the configs for bone called \" + this._boneNames[i]);\r\n return;\r\n }\r\n\r\n const boneParentIndex = this._boneNames.indexOf(nearestParent.name);\r\n\r\n let distanceFromParentBoxToBone = this._bones[i].getAbsolutePosition(this._rootTransformNode).subtract(this._transforms[boneParentIndex].position);\r\n\r\n const wmat = this._transforms[boneParentIndex].computeWorldMatrix();\r\n const invertedWorldMat = Matrix.Invert(wmat);\r\n distanceFromParentBoxToBone = Vector3.TransformCoordinates(this._bones[i].getAbsolutePosition(this._rootTransformNode), invertedWorldMat);\r\n\r\n const boneAbsPos = this._bones[i].getAbsolutePosition(this._rootTransformNode);\r\n const boxAbsPos = this._transforms[i].position.clone();\r\n const myConnectedPivot = boneAbsPos.subtract(boxAbsPos);\r\n\r\n const constraintType = this._boxConfigs[i].joint ?? this._defaultJoint;\r\n const constraint = new PhysicsConstraint(\r\n constraintType,\r\n {\r\n pivotA: distanceFromParentBoxToBone,\r\n pivotB: myConnectedPivot,\r\n axisA: this._boxConfigs[i].rotationAxis!,\r\n axisB: this._boxConfigs[i].rotationAxis!,\r\n collision: false,\r\n },\r\n this._scene\r\n );\r\n\r\n this._aggregates[boneParentIndex].body.addConstraint(this._aggregates[i].body, constraint);\r\n constraint.isEnabled = false;\r\n this._constraints.push(constraint);\r\n }\r\n }\r\n\r\n // set physics body orientation/position from bones\r\n private _syncBonesToPhysics(): void {\r\n const rootMatrix = this._rootTransformNode.getWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // position\r\n const transform = this._aggregates[i].transformNode;\r\n const rootPos = this._bones[i].getAbsolutePosition();\r\n Vector3.TransformCoordinatesToRef(rootPos, rootMatrix, transform.position);\r\n\r\n // added offset\r\n this._bones[i].getDirectionToRef(this._boxConfigs[i].boneOffsetAxis!, this._rootTransformNode, TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].scaleInPlace(this._boxConfigs[i].boxOffset ?? 0);\r\n transform.position.addInPlace(TmpVectors.Vector3[0]);\r\n\r\n this._setBoneOrientationToBody(i);\r\n }\r\n }\r\n\r\n private _setBoneOrientationToBody(boneIndex: number): void {\r\n const transform = this._aggregates[boneIndex].transformNode;\r\n const bone = this._bones[boneIndex];\r\n this._initialRotation[boneIndex].conjugateToRef(TmpVectors.Quaternion[0]);\r\n bone.getRotationQuaternionToRef(Space.WORLD, this._rootTransformNode, TmpVectors.Quaternion[1]);\r\n TmpVectors.Quaternion[1].multiplyToRef(TmpVectors.Quaternion[0], transform.rotationQuaternion!);\r\n transform.rotationQuaternion!.normalize();\r\n }\r\n\r\n private _syncBonesAndBoxes(): void {\r\n if (this.pauseSync) {\r\n return;\r\n }\r\n\r\n if (this._ragdollMode) {\r\n this._setBodyOrientationToBone(this._rootBoneIndex);\r\n\r\n const rootPos = this._aggregates[this._rootBoneIndex].body.transformNode.position;\r\n this._rootTransformNode.getWorldMatrix().invertToRef(TmpVectors.Matrix[0]);\r\n\r\n Vector3.TransformCoordinatesToRef(rootPos, TmpVectors.Matrix[0], TmpVectors.Vector3[0]);\r\n this._bones[this._rootBoneIndex].setAbsolutePosition(TmpVectors.Vector3[0]);\r\n\r\n for (let i = 0; i < this._bones.length; i++) {\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n this._setBodyOrientationToBone(i);\r\n }\r\n } else {\r\n this._syncBonesToPhysics();\r\n }\r\n }\r\n\r\n private _setBodyOrientationToBone(boneIndex: number): void {\r\n const qmesh =\r\n this._rootTransformNode.rotationQuaternion ??\r\n Quaternion.FromEulerAngles(this._rootTransformNode.rotation.x, this._rootTransformNode.rotation.y, this._rootTransformNode.rotation.z);\r\n const qbind = this._initialRotation2[boneIndex];\r\n const qphys = this._aggregates[boneIndex].body?.transformNode?.rotationQuaternion;\r\n\r\n qmesh.multiplyToRef(qbind, TmpVectors.Quaternion[1]);\r\n qphys?.multiplyToRef(TmpVectors.Quaternion[1], TmpVectors.Quaternion[0]);\r\n\r\n this._bones[boneIndex].setRotationQuaternion(TmpVectors.Quaternion[0], Space.WORLD, this._rootTransformNode);\r\n }\r\n\r\n // Return true if root bone is valid/exists in this.bonesNames. false otherwise.\r\n private _defineRootBone(): boolean {\r\n const skeletonRoots = this._skeleton.getChildren();\r\n if (skeletonRoots.length != 1) {\r\n Logger.Log(\"Ragdoll creation failed: there can only be one root in the skeleton.\");\r\n return false;\r\n }\r\n\r\n this._rootBoneName = skeletonRoots[0].name;\r\n this._rootBoneIndex = this._boneNames.indexOf(this._rootBoneName);\r\n if (this._rootBoneIndex == -1) {\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands, @typescript-eslint/no-base-to-string\r\n Logger.Log(\"Ragdoll creation failed: the array boneNames doesn't have the root bone. The root bone is \" + this._skeleton.getChildren());\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _findNearestParent(boneIndex: number): any {\r\n let nearestParent: Nullable<Bone> | undefined = this._bones[boneIndex].getParent();\r\n do {\r\n if (nearestParent != null && this._boneNames.includes(nearestParent.name)) {\r\n break;\r\n }\r\n\r\n nearestParent = nearestParent?.getParent();\r\n } while (nearestParent != null);\r\n\r\n return nearestParent;\r\n }\r\n\r\n private _init() {\r\n this._createColliders();\r\n\r\n // If this.defineRootBone() returns ... there is not root bone.\r\n if (!this._defineRootBone()) {\r\n return;\r\n }\r\n\r\n this._initJoints();\r\n this._beforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n this._syncBonesAndBoxes();\r\n });\r\n this._syncBonesToPhysics();\r\n }\r\n\r\n /**\r\n * Enable ragdoll mode. Create physics objects and make them dynamic.\r\n */\r\n public ragdoll(): void {\r\n this._ragdollMode = true;\r\n // detach bones with link transform to let physics have control\r\n for (const bone of this._skeleton.bones) {\r\n bone.linkTransformNode(null);\r\n }\r\n for (let i = 0; i < this._constraints.length; i++) {\r\n this._constraints[i].isEnabled = true;\r\n }\r\n for (let i = 0; i < this._aggregates.length; i++) {\r\n this._aggregates[i].body.setMotionType(PhysicsMotionType.DYNAMIC);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose resources and remove physics objects\r\n */\r\n dispose(): void {\r\n for (const aggregate of this._aggregates) {\r\n aggregate.dispose();\r\n }\r\n this._aggregates.length = 0;\r\n for (const transform of this._transforms) {\r\n transform.dispose();\r\n }\r\n this._transforms.length = 0;\r\n for (const constraint of this._constraints) {\r\n constraint.dispose();\r\n }\r\n this._constraints.length = 0;\r\n\r\n if (this._beforeRenderObserver) {\r\n this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver);\r\n this._beforeRenderObserver = null;\r\n }\r\n }\r\n}\r\n"]}
@@ -12,6 +12,7 @@ import { FxaaPostProcess } from "../../../PostProcesses/fxaaPostProcess.js";
12
12
  import { PostProcessRenderPipeline } from "../../../PostProcesses/RenderPipeline/postProcessRenderPipeline.js";
13
13
  import { DepthOfFieldEffect, DepthOfFieldEffectBlurLevel } from "../../../PostProcesses/depthOfFieldEffect.js";
14
14
  import "../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js";
15
+ import "../../../Rendering/depthRendererSceneComponent.js";
15
16
  import type { Animation } from "../../../Animations/animation.js";
16
17
  /**
17
18
  * The default rendering pipeline can be added to a scene to apply common post processing effects such as anti-aliasing or depth of field.
@@ -19,6 +19,7 @@ import { RegisterClass } from "../../../Misc/typeStore.js";
19
19
  import { EngineStore } from "../../../Engines/engineStore.js";
20
20
  import { Tools } from "../../../Misc/tools.js";
21
21
  import "../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js";
22
+ import "../../../Rendering/depthRendererSceneComponent.js";
22
23
  /**
23
24
  * The default rendering pipeline can be added to a scene to apply common post processing effects such as anti-aliasing or depth of field.
24
25
  * See https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/defaultRenderingPipeline
@@ -1 +1 @@
1
- {"version":3,"file":"defaultRenderingPipeline.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../../types\";\r\nimport { serialize } from \"../../../Misc/decorators\";\r\nimport { SerializationHelper } from \"../../../Misc/decorators.serialization\";\r\nimport type { Observer } from \"../../../Misc/observable\";\r\nimport { Observable } from \"../../../Misc/observable\";\r\nimport type { IAnimatable } from \"../../../Animations/animatable.interface\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport type { Camera } from \"../../../Cameras/camera\";\r\nimport type { ImageProcessingConfiguration } from \"../../../Materials/imageProcessingConfiguration\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport type { AbstractEngine } from \"../../../Engines/abstractEngine\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport type { IDisposable, Scene } from \"../../../scene\";\r\nimport { GlowLayer } from \"../../../Layers/glowLayer\";\r\n\r\nimport type { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { SharpenPostProcess } from \"../../../PostProcesses/sharpenPostProcess\";\r\nimport { ImageProcessingPostProcess } from \"../../../PostProcesses/imageProcessingPostProcess\";\r\nimport { ChromaticAberrationPostProcess } from \"../../../PostProcesses/chromaticAberrationPostProcess\";\r\nimport { GrainPostProcess } from \"../../../PostProcesses/grainPostProcess\";\r\nimport { FxaaPostProcess } from \"../../../PostProcesses/fxaaPostProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { DepthOfFieldEffect, DepthOfFieldEffectBlurLevel } from \"../../../PostProcesses/depthOfFieldEffect\";\r\nimport { BloomEffect } from \"../../../PostProcesses/bloomEffect\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\nimport { Tools } from \"core/Misc/tools\";\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\nimport type { Animation } from \"../../../Animations/animation\";\r\n\r\n/**\r\n * The default rendering pipeline can be added to a scene to apply common post processing effects such as anti-aliasing or depth of field.\r\n * See https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/defaultRenderingPipeline\r\n */\r\nexport class DefaultRenderingPipeline extends PostProcessRenderPipeline implements IDisposable, IAnimatable {\r\n private _scene: Scene;\r\n private _camerasToBeAttached: Array<Camera> = [];\r\n /**\r\n * ID of the sharpen post process,\r\n */\r\n private readonly SharpenPostProcessId = \"SharpenPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the image processing post process;\r\n */\r\n readonly ImageProcessingPostProcessId = \"ImageProcessingPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the Fast Approximate Anti-Aliasing post process;\r\n */\r\n readonly FxaaPostProcessId = \"FxaaPostProcessEffect\";\r\n /**\r\n * ID of the chromatic aberration post process,\r\n */\r\n private readonly ChromaticAberrationPostProcessId = \"ChromaticAberrationPostProcessEffect\";\r\n /**\r\n * ID of the grain post process\r\n */\r\n private readonly GrainPostProcessId = \"GrainPostProcessEffect\";\r\n\r\n // Post-processes\r\n /**\r\n * Sharpen post process which will apply a sharpen convolution to enhance edges\r\n */\r\n public sharpen: SharpenPostProcess;\r\n private _sharpenEffect: PostProcessRenderEffect;\r\n private bloom: BloomEffect;\r\n /**\r\n * Depth of field effect, applies a blur based on how far away objects are from the focus distance.\r\n */\r\n public depthOfField: DepthOfFieldEffect;\r\n /**\r\n * The Fast Approximate Anti-Aliasing post process which attempts to remove aliasing from an image.\r\n */\r\n public fxaa: FxaaPostProcess;\r\n /**\r\n * Image post processing pass used to perform operations such as tone mapping or color grading.\r\n */\r\n public imageProcessing: ImageProcessingPostProcess;\r\n /**\r\n * Chromatic aberration post process which will shift rgb colors in the image\r\n */\r\n public chromaticAberration: ChromaticAberrationPostProcess;\r\n private _chromaticAberrationEffect: PostProcessRenderEffect;\r\n /**\r\n * Grain post process which add noise to the image\r\n */\r\n public grain: GrainPostProcess;\r\n private _grainEffect: PostProcessRenderEffect;\r\n /**\r\n * Glow post process which adds a glow to emissive areas of the image\r\n */\r\n private _glowLayer: Nullable<GlowLayer> = null;\r\n\r\n /**\r\n * Animations which can be used to tweak settings over a period of time\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _imageProcessingConfigurationObserver: Nullable<Observer<ImageProcessingConfiguration>> = null;\r\n // Values\r\n private _sharpenEnabled: boolean = false;\r\n private _bloomEnabled: boolean = false;\r\n private _depthOfFieldEnabled: boolean = false;\r\n private _depthOfFieldBlurLevel = DepthOfFieldEffectBlurLevel.Low;\r\n private _fxaaEnabled: boolean = false;\r\n private _imageProcessingEnabled: boolean = true;\r\n private _defaultPipelineTextureType: number;\r\n private _bloomScale: number = 0.5;\r\n private _chromaticAberrationEnabled: boolean = false;\r\n private _grainEnabled: boolean = false;\r\n\r\n private _buildAllowed = true;\r\n\r\n /**\r\n * Enable or disable automatic building of the pipeline when effects are enabled and disabled.\r\n * If false, you will have to manually call prepare() to update the pipeline.\r\n */\r\n public get automaticBuild() {\r\n return this._buildAllowed;\r\n }\r\n public set automaticBuild(value: boolean) {\r\n this._buildAllowed = value;\r\n }\r\n\r\n /**\r\n * This is triggered each time the pipeline has been built.\r\n */\r\n public onBuildObservable = new Observable<DefaultRenderingPipeline>();\r\n\r\n /**\r\n * Gets active scene\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Enable or disable the sharpen process from the pipeline\r\n */\r\n public set sharpenEnabled(enabled: boolean) {\r\n if (this._sharpenEnabled === enabled) {\r\n return;\r\n }\r\n this._sharpenEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get sharpenEnabled(): boolean {\r\n return this._sharpenEnabled;\r\n }\r\n\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _hardwareScaleLevel = 1.0;\r\n private _bloomKernel: number = 64;\r\n /**\r\n * Specifies the size of the bloom blur kernel, relative to the final output size\r\n */\r\n @serialize()\r\n public get bloomKernel(): number {\r\n return this._bloomKernel;\r\n }\r\n public set bloomKernel(value: number) {\r\n this._bloomKernel = value;\r\n this.bloom.kernel = value / this._hardwareScaleLevel;\r\n }\r\n\r\n /**\r\n * Specifies the weight of the bloom in the final rendering\r\n */\r\n @serialize()\r\n private _bloomWeight: number = 0.15;\r\n /**\r\n * Specifies the luma threshold for the area that will be blurred by the bloom\r\n */\r\n @serialize()\r\n private _bloomThreshold: number = 0.9;\r\n\r\n @serialize()\r\n private _hdr: boolean;\r\n\r\n /**\r\n * The strength of the bloom.\r\n */\r\n public set bloomWeight(value: number) {\r\n if (this._bloomWeight === value) {\r\n return;\r\n }\r\n this.bloom.weight = value;\r\n\r\n this._bloomWeight = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomWeight(): number {\r\n return this._bloomWeight;\r\n }\r\n\r\n /**\r\n * The luminance threshold to find bright areas of the image to bloom.\r\n */\r\n public set bloomThreshold(value: number) {\r\n if (this._bloomThreshold === value) {\r\n return;\r\n }\r\n this.bloom.threshold = value;\r\n this._bloomThreshold = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomThreshold(): number {\r\n return this._bloomThreshold;\r\n }\r\n\r\n /**\r\n * The scale of the bloom, lower value will provide better performance.\r\n */\r\n public set bloomScale(value: number) {\r\n if (this._bloomScale === value) {\r\n return;\r\n }\r\n this._bloomScale = value;\r\n\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n this._rebuildBloom();\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomScale(): number {\r\n return this._bloomScale;\r\n }\r\n\r\n /**\r\n * Enable or disable the bloom from the pipeline\r\n */\r\n public set bloomEnabled(enabled: boolean) {\r\n if (this._bloomEnabled === enabled) {\r\n return;\r\n }\r\n this._bloomEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomEnabled(): boolean {\r\n return this._bloomEnabled;\r\n }\r\n\r\n private _rebuildBloom() {\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n const oldBloom = this.bloom;\r\n this.bloom = new BloomEffect(this._scene, this.bloomScale, this._bloomWeight, this.bloomKernel / this._hardwareScaleLevel, this._defaultPipelineTextureType, false);\r\n this.bloom.threshold = oldBloom.threshold;\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldBloom.disposeEffects(this._cameras[i]);\r\n }\r\n }\r\n\r\n /**\r\n * If the depth of field is enabled.\r\n */\r\n @serialize()\r\n public get depthOfFieldEnabled(): boolean {\r\n return this._depthOfFieldEnabled;\r\n }\r\n\r\n public set depthOfFieldEnabled(enabled: boolean) {\r\n if (this._depthOfFieldEnabled === enabled) {\r\n return;\r\n }\r\n this._depthOfFieldEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Blur level of the depth of field effect. (Higher blur will effect performance)\r\n */\r\n @serialize()\r\n public get depthOfFieldBlurLevel(): DepthOfFieldEffectBlurLevel {\r\n return this._depthOfFieldBlurLevel;\r\n }\r\n\r\n public set depthOfFieldBlurLevel(value: DepthOfFieldEffectBlurLevel) {\r\n if (this._depthOfFieldBlurLevel === value) {\r\n return;\r\n }\r\n this._depthOfFieldBlurLevel = value;\r\n\r\n // recreate dof and dispose old as this setting is not dynamic\r\n const oldDof = this.depthOfField;\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, false);\r\n this.depthOfField.focalLength = oldDof.focalLength;\r\n this.depthOfField.focusDistance = oldDof.focusDistance;\r\n this.depthOfField.fStop = oldDof.fStop;\r\n this.depthOfField.lensSize = oldDof.lensSize;\r\n\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldDof.disposeEffects(this._cameras[i]);\r\n }\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * If the anti aliasing is enabled.\r\n */\r\n public set fxaaEnabled(enabled: boolean) {\r\n if (this._fxaaEnabled === enabled) {\r\n return;\r\n }\r\n this._fxaaEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get fxaaEnabled(): boolean {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n private _samples = 1;\r\n /**\r\n * MSAA sample count, setting this to 4 will provide 4x anti aliasing. (default: 1)\r\n */\r\n public set samples(sampleCount: number) {\r\n if (this._samples === sampleCount) {\r\n return;\r\n }\r\n this._samples = sampleCount;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * If image processing is enabled.\r\n */\r\n public set imageProcessingEnabled(enabled: boolean) {\r\n if (this._imageProcessingEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._scene.imageProcessingConfiguration.isEnabled = enabled;\r\n }\r\n\r\n @serialize()\r\n public get imageProcessingEnabled(): boolean {\r\n return this._imageProcessingEnabled;\r\n }\r\n\r\n /**\r\n * If glow layer is enabled. (Adds a glow effect to emmissive materials)\r\n */\r\n public set glowLayerEnabled(enabled: boolean) {\r\n if (enabled && !this._glowLayer) {\r\n this._glowLayer = new GlowLayer(\"\", this._scene);\r\n } else if (!enabled && this._glowLayer) {\r\n this._glowLayer.dispose();\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n @serialize()\r\n public get glowLayerEnabled(): boolean {\r\n return this._glowLayer != null;\r\n }\r\n\r\n /**\r\n * Gets the glow layer (or null if not defined)\r\n */\r\n public get glowLayer() {\r\n return this._glowLayer;\r\n }\r\n\r\n /**\r\n * Enable or disable the chromaticAberration process from the pipeline\r\n */\r\n public set chromaticAberrationEnabled(enabled: boolean) {\r\n if (this._chromaticAberrationEnabled === enabled) {\r\n return;\r\n }\r\n this._chromaticAberrationEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get chromaticAberrationEnabled(): boolean {\r\n return this._chromaticAberrationEnabled;\r\n }\r\n /**\r\n * Enable or disable the grain process from the pipeline\r\n */\r\n public set grainEnabled(enabled: boolean) {\r\n if (this._grainEnabled === enabled) {\r\n return;\r\n }\r\n this._grainEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get grainEnabled(): boolean {\r\n return this._grainEnabled;\r\n }\r\n\r\n /**\r\n * Instantiates a DefaultRenderingPipeline.\r\n * @param name The rendering pipeline name (default: \"\")\r\n * @param hdr If high dynamic range textures should be used (default: true)\r\n * @param scene The scene linked to this pipeline (default: the last created scene)\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to (default: scene.cameras)\r\n * @param automaticBuild If false, you will have to manually call prepare() to update the pipeline (default: true)\r\n */\r\n constructor(name = \"\", hdr = true, scene: Scene = EngineStore.LastCreatedScene!, cameras?: Camera[], automaticBuild = true) {\r\n super(scene.getEngine(), name);\r\n this._cameras = cameras || scene.cameras;\r\n this._cameras = this._cameras.slice();\r\n this._camerasToBeAttached = this._cameras.slice();\r\n\r\n this._buildAllowed = automaticBuild;\r\n\r\n // Initialize\r\n this._scene = scene;\r\n const caps = this._scene.getEngine().getCaps();\r\n this._hdr = hdr && (caps.textureHalfFloatRender || caps.textureFloatRender);\r\n\r\n // Misc\r\n if (this._hdr) {\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n } else {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n // Attach\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n // Create post processes before hand so they can be modified before enabled.\r\n // Block compilation flag is set to true to avoid compilation prior to use, these will be updated on first use in build pipeline.\r\n this.sharpen = new SharpenPostProcess(\"sharpen\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._sharpenEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.SharpenPostProcessId,\r\n () => {\r\n return this.sharpen;\r\n },\r\n true\r\n );\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, true);\r\n\r\n // To keep the bloom sizes consistent across different display densities, factor in the hardware scaling level.\r\n this._hardwareScaleLevel = engine.getHardwareScalingLevel();\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n this._hardwareScaleLevel = engine.getHardwareScalingLevel();\r\n this.bloomKernel = this._bloomKernel;\r\n });\r\n\r\n this.bloom = new BloomEffect(this._scene, this._bloomScale, this._bloomWeight, this.bloomKernel / this._hardwareScaleLevel, this._defaultPipelineTextureType, true);\r\n\r\n this.chromaticAberration = new ChromaticAberrationPostProcess(\r\n \"ChromaticAberration\",\r\n engine.getRenderWidth(),\r\n engine.getRenderHeight(),\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n true\r\n );\r\n this._chromaticAberrationEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.ChromaticAberrationPostProcessId,\r\n () => {\r\n return this.chromaticAberration;\r\n },\r\n true\r\n );\r\n\r\n this.grain = new GrainPostProcess(\"Grain\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._grainEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.GrainPostProcessId,\r\n () => {\r\n return this.grain;\r\n },\r\n true\r\n );\r\n\r\n let avoidReentrancyAtConstructionTime = true;\r\n\r\n this._imageProcessingConfigurationObserver = this._scene.imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this.bloom._downscale._exposure = this._scene.imageProcessingConfiguration.exposure;\r\n\r\n if (this.imageProcessingEnabled !== this._scene.imageProcessingConfiguration.isEnabled) {\r\n this._imageProcessingEnabled = this._scene.imageProcessingConfiguration.isEnabled;\r\n // Avoid re-entrant problems by deferring the call to _buildPipeline because the call to _buildPipeline\r\n // at the end of the constructor could end up triggering imageProcessingConfiguration.onUpdateParameters!\r\n // Note that the pipeline could have been disposed before the deferred call was executed, but in that case\r\n // _buildAllowed will have been set to false, preventing _buildPipeline from being executed.\r\n if (avoidReentrancyAtConstructionTime) {\r\n Tools.SetImmediate(() => {\r\n this._buildPipeline();\r\n });\r\n } else {\r\n this._buildPipeline();\r\n }\r\n }\r\n });\r\n\r\n this._buildPipeline();\r\n\r\n avoidReentrancyAtConstructionTime = false;\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"DefaultRenderingPipeline\"\r\n */\r\n public override getClassName(): string {\r\n return \"DefaultRenderingPipeline\";\r\n }\r\n\r\n /**\r\n * Force the compilation of the entire pipeline.\r\n */\r\n public prepare(): void {\r\n const previousState = this._buildAllowed;\r\n this._buildAllowed = true;\r\n this._buildPipeline();\r\n this._buildAllowed = previousState;\r\n }\r\n\r\n private _hasCleared = false;\r\n private _prevPostProcess: Nullable<PostProcess> = null;\r\n private _prevPrevPostProcess: Nullable<PostProcess> = null;\r\n\r\n private _setAutoClearAndTextureSharing(postProcess: PostProcess, skipTextureSharing = false) {\r\n if (this._hasCleared) {\r\n postProcess.autoClear = false;\r\n } else {\r\n postProcess.autoClear = true;\r\n this._scene.autoClear = false;\r\n this._hasCleared = true;\r\n }\r\n\r\n if (!skipTextureSharing) {\r\n if (this._prevPrevPostProcess) {\r\n postProcess.shareOutputWith(this._prevPrevPostProcess);\r\n } else {\r\n postProcess.useOwnOutput();\r\n }\r\n\r\n if (this._prevPostProcess) {\r\n this._prevPrevPostProcess = this._prevPostProcess;\r\n }\r\n this._prevPostProcess = postProcess;\r\n }\r\n }\r\n\r\n private _depthOfFieldSceneObserver: Nullable<Observer<Scene>> = null;\r\n private _activeCameraChangedObserver: Nullable<Observer<Scene>> = null;\r\n private _activeCamerasChangedObserver: Nullable<Observer<Scene>> = null;\r\n\r\n private _buildPipeline() {\r\n if (!this._buildAllowed) {\r\n return;\r\n }\r\n this._scene.autoClear = true;\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._disposePostProcesses();\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n // get back cameras to be used to reattach pipeline\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n this._reset();\r\n this._prevPostProcess = null;\r\n this._prevPrevPostProcess = null;\r\n this._hasCleared = false;\r\n\r\n if (this.depthOfFieldEnabled) {\r\n // Multi camera suport\r\n if (this._cameras.length > 1) {\r\n for (const camera of this._cameras) {\r\n const depthRenderer = this._scene.enableDepthRenderer(camera);\r\n depthRenderer.useOnlyInActiveCamera = true;\r\n }\r\n\r\n this._depthOfFieldSceneObserver = this._scene.onAfterRenderTargetsRenderObservable.add((scene) => {\r\n if (this._cameras.indexOf(scene.activeCamera!) > -1) {\r\n this.depthOfField.depthTexture = scene.enableDepthRenderer(scene.activeCamera).getDepthMap();\r\n }\r\n });\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n const depthRenderer = this._scene.enableDepthRenderer(this._cameras[0]);\r\n this.depthOfField.depthTexture = depthRenderer.getDepthMap();\r\n }\r\n\r\n if (!this.depthOfField._isReady()) {\r\n this.depthOfField._updateEffects();\r\n }\r\n this.addEffect(this.depthOfField);\r\n this._setAutoClearAndTextureSharing(this.depthOfField._effects[0], true);\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n }\r\n\r\n if (this.bloomEnabled) {\r\n if (!this.bloom._isReady()) {\r\n this.bloom._updateEffects();\r\n }\r\n this.addEffect(this.bloom);\r\n this._setAutoClearAndTextureSharing(this.bloom._effects[0], true);\r\n }\r\n\r\n if (this._imageProcessingEnabled) {\r\n this.imageProcessing = new ImageProcessingPostProcess(\r\n \"imageProcessing\",\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n this.scene.imageProcessingConfiguration\r\n );\r\n if (this._hdr) {\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.ImageProcessingPostProcessId,\r\n () => {\r\n return this.imageProcessing;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.imageProcessing);\r\n } else {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this._cameras || this._cameras.length === 0) {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this.imageProcessing.getEffect()) {\r\n this.imageProcessing._updateParameters();\r\n }\r\n }\r\n\r\n if (this.sharpenEnabled) {\r\n if (!this.sharpen.isReady()) {\r\n this.sharpen.updateEffect();\r\n }\r\n this.addEffect(this._sharpenEffect);\r\n this._setAutoClearAndTextureSharing(this.sharpen);\r\n }\r\n\r\n if (this.grainEnabled) {\r\n if (!this.grain.isReady()) {\r\n this.grain.updateEffect();\r\n }\r\n this.addEffect(this._grainEffect);\r\n this._setAutoClearAndTextureSharing(this.grain);\r\n }\r\n\r\n if (this.chromaticAberrationEnabled) {\r\n if (!this.chromaticAberration.isReady()) {\r\n this.chromaticAberration.updateEffect();\r\n }\r\n this.addEffect(this._chromaticAberrationEffect);\r\n this._setAutoClearAndTextureSharing(this.chromaticAberration);\r\n }\r\n\r\n if (this.fxaaEnabled) {\r\n this.fxaa = new FxaaPostProcess(\"fxaa\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType);\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.FxaaPostProcessId,\r\n () => {\r\n return this.fxaa;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.fxaa, true);\r\n }\r\n\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n\r\n // In multicamera mode, the scene needs to autoclear in between cameras.\r\n if ((this._scene.activeCameras && this._scene.activeCameras.length > 1) || (this._scene.activeCamera && this._cameras.indexOf(this._scene.activeCamera) === -1)) {\r\n this._scene.autoClear = true;\r\n }\r\n // The active camera on the scene can be changed anytime\r\n if (!this._activeCameraChangedObserver) {\r\n this._activeCameraChangedObserver = this._scene.onActiveCameraChanged.add(() => {\r\n if (this._scene.activeCamera && this._cameras.indexOf(this._scene.activeCamera) === -1) {\r\n this._scene.autoClear = true;\r\n }\r\n });\r\n }\r\n if (!this._activeCamerasChangedObserver) {\r\n this._activeCamerasChangedObserver = this._scene.onActiveCamerasChanged.add(() => {\r\n if (this._scene.activeCameras && this._scene.activeCameras.length > 1) {\r\n this._scene.autoClear = true;\r\n }\r\n });\r\n }\r\n\r\n this._adaptPostProcessesToViewPort();\r\n\r\n if (!this._enableMSAAOnFirstPostProcess(this.samples) && this.samples > 1) {\r\n Logger.Warn(\"MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0\");\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n }\r\n\r\n private _disposePostProcesses(disposeNonRecreated = false): void {\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n const camera = this._cameras[i];\r\n\r\n if (this.imageProcessing) {\r\n this.imageProcessing.dispose(camera);\r\n }\r\n\r\n if (this.fxaa) {\r\n this.fxaa.dispose(camera);\r\n }\r\n\r\n // These are created in the constructor and should not be disposed on every pipeline change\r\n if (disposeNonRecreated) {\r\n if (this.sharpen) {\r\n this.sharpen.dispose(camera);\r\n }\r\n\r\n if (this.depthOfField) {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n this.depthOfField.disposeEffects(camera);\r\n }\r\n\r\n if (this.bloom) {\r\n this.bloom.disposeEffects(camera);\r\n }\r\n\r\n if (this.chromaticAberration) {\r\n this.chromaticAberration.dispose(camera);\r\n }\r\n\r\n if (this.grain) {\r\n this.grain.dispose(camera);\r\n }\r\n if (this._glowLayer) {\r\n this._glowLayer.dispose();\r\n }\r\n }\r\n }\r\n\r\n (<any>this.imageProcessing) = null;\r\n (<any>this.fxaa) = null;\r\n\r\n if (disposeNonRecreated) {\r\n (<any>this.sharpen) = null;\r\n (<any>this._sharpenEffect) = null;\r\n (<any>this.depthOfField) = null;\r\n (<any>this.bloom) = null;\r\n (<any>this.chromaticAberration) = null;\r\n (<any>this._chromaticAberrationEffect) = null;\r\n (<any>this.grain) = null;\r\n (<any>this._grainEffect) = null;\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a camera to the pipeline\r\n * @param camera the camera to be added\r\n */\r\n public addCamera(camera: Camera): void {\r\n this._camerasToBeAttached.push(camera);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Removes a camera from the pipeline\r\n * @param camera the camera to remove\r\n */\r\n public removeCamera(camera: Camera): void {\r\n const index = this._camerasToBeAttached.indexOf(camera);\r\n this._camerasToBeAttached.splice(index, 1);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Dispose of the pipeline and stop all post processes\r\n */\r\n public override dispose(): void {\r\n this._buildAllowed = false;\r\n this.onBuildObservable.clear();\r\n this._disposePostProcesses(true);\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n this._scene._postProcessRenderPipelineManager.removePipeline(this.name);\r\n this._scene.autoClear = true;\r\n if (this._resizeObserver) {\r\n this._scene.getEngine().onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n\r\n this._scene.onActiveCameraChanged.remove(this._activeCameraChangedObserver);\r\n this._scene.onActiveCamerasChanged.remove(this._activeCamerasChangedObserver);\r\n\r\n this._scene.imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingConfigurationObserver);\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the rendering pipeline (Used when exporting)\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"DefaultRenderingPipeline\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the serialized pipeline\r\n * @param source Source pipeline.\r\n * @param scene The scene to load the pipeline to.\r\n * @param rootUrl The URL of the serialized pipeline.\r\n * @returns An instantiated pipeline from the serialized object.\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string): DefaultRenderingPipeline {\r\n return SerializationHelper.Parse(() => new DefaultRenderingPipeline(source._name, source._name._hdr, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.DefaultRenderingPipeline\", DefaultRenderingPipeline);\r\n"]}
1
+ {"version":3,"file":"defaultRenderingPipeline.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../../types\";\r\nimport { serialize } from \"../../../Misc/decorators\";\r\nimport { SerializationHelper } from \"../../../Misc/decorators.serialization\";\r\nimport type { Observer } from \"../../../Misc/observable\";\r\nimport { Observable } from \"../../../Misc/observable\";\r\nimport type { IAnimatable } from \"../../../Animations/animatable.interface\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport type { Camera } from \"../../../Cameras/camera\";\r\nimport type { ImageProcessingConfiguration } from \"../../../Materials/imageProcessingConfiguration\";\r\nimport { Texture } from \"../../../Materials/Textures/texture\";\r\nimport type { AbstractEngine } from \"../../../Engines/abstractEngine\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport type { IDisposable, Scene } from \"../../../scene\";\r\nimport { GlowLayer } from \"../../../Layers/glowLayer\";\r\n\r\nimport type { PostProcess } from \"../../../PostProcesses/postProcess\";\r\nimport { SharpenPostProcess } from \"../../../PostProcesses/sharpenPostProcess\";\r\nimport { ImageProcessingPostProcess } from \"../../../PostProcesses/imageProcessingPostProcess\";\r\nimport { ChromaticAberrationPostProcess } from \"../../../PostProcesses/chromaticAberrationPostProcess\";\r\nimport { GrainPostProcess } from \"../../../PostProcesses/grainPostProcess\";\r\nimport { FxaaPostProcess } from \"../../../PostProcesses/fxaaPostProcess\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { DepthOfFieldEffect, DepthOfFieldEffectBlurLevel } from \"../../../PostProcesses/depthOfFieldEffect\";\r\nimport { BloomEffect } from \"../../../PostProcesses/bloomEffect\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\nimport { Tools } from \"core/Misc/tools\";\r\n\r\nimport \"../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\nimport \"../../../Rendering/depthRendererSceneComponent\";\r\n\r\nimport type { Animation } from \"../../../Animations/animation\";\r\n\r\n/**\r\n * The default rendering pipeline can be added to a scene to apply common post processing effects such as anti-aliasing or depth of field.\r\n * See https://doc.babylonjs.com/features/featuresDeepDive/postProcesses/defaultRenderingPipeline\r\n */\r\nexport class DefaultRenderingPipeline extends PostProcessRenderPipeline implements IDisposable, IAnimatable {\r\n private _scene: Scene;\r\n private _camerasToBeAttached: Array<Camera> = [];\r\n /**\r\n * ID of the sharpen post process,\r\n */\r\n private readonly SharpenPostProcessId = \"SharpenPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the image processing post process;\r\n */\r\n readonly ImageProcessingPostProcessId = \"ImageProcessingPostProcessEffect\";\r\n /**\r\n * @ignore\r\n * ID of the Fast Approximate Anti-Aliasing post process;\r\n */\r\n readonly FxaaPostProcessId = \"FxaaPostProcessEffect\";\r\n /**\r\n * ID of the chromatic aberration post process,\r\n */\r\n private readonly ChromaticAberrationPostProcessId = \"ChromaticAberrationPostProcessEffect\";\r\n /**\r\n * ID of the grain post process\r\n */\r\n private readonly GrainPostProcessId = \"GrainPostProcessEffect\";\r\n\r\n // Post-processes\r\n /**\r\n * Sharpen post process which will apply a sharpen convolution to enhance edges\r\n */\r\n public sharpen: SharpenPostProcess;\r\n private _sharpenEffect: PostProcessRenderEffect;\r\n private bloom: BloomEffect;\r\n /**\r\n * Depth of field effect, applies a blur based on how far away objects are from the focus distance.\r\n */\r\n public depthOfField: DepthOfFieldEffect;\r\n /**\r\n * The Fast Approximate Anti-Aliasing post process which attempts to remove aliasing from an image.\r\n */\r\n public fxaa: FxaaPostProcess;\r\n /**\r\n * Image post processing pass used to perform operations such as tone mapping or color grading.\r\n */\r\n public imageProcessing: ImageProcessingPostProcess;\r\n /**\r\n * Chromatic aberration post process which will shift rgb colors in the image\r\n */\r\n public chromaticAberration: ChromaticAberrationPostProcess;\r\n private _chromaticAberrationEffect: PostProcessRenderEffect;\r\n /**\r\n * Grain post process which add noise to the image\r\n */\r\n public grain: GrainPostProcess;\r\n private _grainEffect: PostProcessRenderEffect;\r\n /**\r\n * Glow post process which adds a glow to emissive areas of the image\r\n */\r\n private _glowLayer: Nullable<GlowLayer> = null;\r\n\r\n /**\r\n * Animations which can be used to tweak settings over a period of time\r\n */\r\n public animations: Animation[] = [];\r\n\r\n private _imageProcessingConfigurationObserver: Nullable<Observer<ImageProcessingConfiguration>> = null;\r\n // Values\r\n private _sharpenEnabled: boolean = false;\r\n private _bloomEnabled: boolean = false;\r\n private _depthOfFieldEnabled: boolean = false;\r\n private _depthOfFieldBlurLevel = DepthOfFieldEffectBlurLevel.Low;\r\n private _fxaaEnabled: boolean = false;\r\n private _imageProcessingEnabled: boolean = true;\r\n private _defaultPipelineTextureType: number;\r\n private _bloomScale: number = 0.5;\r\n private _chromaticAberrationEnabled: boolean = false;\r\n private _grainEnabled: boolean = false;\r\n\r\n private _buildAllowed = true;\r\n\r\n /**\r\n * Enable or disable automatic building of the pipeline when effects are enabled and disabled.\r\n * If false, you will have to manually call prepare() to update the pipeline.\r\n */\r\n public get automaticBuild() {\r\n return this._buildAllowed;\r\n }\r\n public set automaticBuild(value: boolean) {\r\n this._buildAllowed = value;\r\n }\r\n\r\n /**\r\n * This is triggered each time the pipeline has been built.\r\n */\r\n public onBuildObservable = new Observable<DefaultRenderingPipeline>();\r\n\r\n /**\r\n * Gets active scene\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Enable or disable the sharpen process from the pipeline\r\n */\r\n public set sharpenEnabled(enabled: boolean) {\r\n if (this._sharpenEnabled === enabled) {\r\n return;\r\n }\r\n this._sharpenEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get sharpenEnabled(): boolean {\r\n return this._sharpenEnabled;\r\n }\r\n\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _hardwareScaleLevel = 1.0;\r\n private _bloomKernel: number = 64;\r\n /**\r\n * Specifies the size of the bloom blur kernel, relative to the final output size\r\n */\r\n @serialize()\r\n public get bloomKernel(): number {\r\n return this._bloomKernel;\r\n }\r\n public set bloomKernel(value: number) {\r\n this._bloomKernel = value;\r\n this.bloom.kernel = value / this._hardwareScaleLevel;\r\n }\r\n\r\n /**\r\n * Specifies the weight of the bloom in the final rendering\r\n */\r\n @serialize()\r\n private _bloomWeight: number = 0.15;\r\n /**\r\n * Specifies the luma threshold for the area that will be blurred by the bloom\r\n */\r\n @serialize()\r\n private _bloomThreshold: number = 0.9;\r\n\r\n @serialize()\r\n private _hdr: boolean;\r\n\r\n /**\r\n * The strength of the bloom.\r\n */\r\n public set bloomWeight(value: number) {\r\n if (this._bloomWeight === value) {\r\n return;\r\n }\r\n this.bloom.weight = value;\r\n\r\n this._bloomWeight = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomWeight(): number {\r\n return this._bloomWeight;\r\n }\r\n\r\n /**\r\n * The luminance threshold to find bright areas of the image to bloom.\r\n */\r\n public set bloomThreshold(value: number) {\r\n if (this._bloomThreshold === value) {\r\n return;\r\n }\r\n this.bloom.threshold = value;\r\n this._bloomThreshold = value;\r\n }\r\n\r\n @serialize()\r\n public get bloomThreshold(): number {\r\n return this._bloomThreshold;\r\n }\r\n\r\n /**\r\n * The scale of the bloom, lower value will provide better performance.\r\n */\r\n public set bloomScale(value: number) {\r\n if (this._bloomScale === value) {\r\n return;\r\n }\r\n this._bloomScale = value;\r\n\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n this._rebuildBloom();\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomScale(): number {\r\n return this._bloomScale;\r\n }\r\n\r\n /**\r\n * Enable or disable the bloom from the pipeline\r\n */\r\n public set bloomEnabled(enabled: boolean) {\r\n if (this._bloomEnabled === enabled) {\r\n return;\r\n }\r\n this._bloomEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get bloomEnabled(): boolean {\r\n return this._bloomEnabled;\r\n }\r\n\r\n private _rebuildBloom() {\r\n // recreate bloom and dispose old as this setting is not dynamic\r\n const oldBloom = this.bloom;\r\n this.bloom = new BloomEffect(this._scene, this.bloomScale, this._bloomWeight, this.bloomKernel / this._hardwareScaleLevel, this._defaultPipelineTextureType, false);\r\n this.bloom.threshold = oldBloom.threshold;\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldBloom.disposeEffects(this._cameras[i]);\r\n }\r\n }\r\n\r\n /**\r\n * If the depth of field is enabled.\r\n */\r\n @serialize()\r\n public get depthOfFieldEnabled(): boolean {\r\n return this._depthOfFieldEnabled;\r\n }\r\n\r\n public set depthOfFieldEnabled(enabled: boolean) {\r\n if (this._depthOfFieldEnabled === enabled) {\r\n return;\r\n }\r\n this._depthOfFieldEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Blur level of the depth of field effect. (Higher blur will effect performance)\r\n */\r\n @serialize()\r\n public get depthOfFieldBlurLevel(): DepthOfFieldEffectBlurLevel {\r\n return this._depthOfFieldBlurLevel;\r\n }\r\n\r\n public set depthOfFieldBlurLevel(value: DepthOfFieldEffectBlurLevel) {\r\n if (this._depthOfFieldBlurLevel === value) {\r\n return;\r\n }\r\n this._depthOfFieldBlurLevel = value;\r\n\r\n // recreate dof and dispose old as this setting is not dynamic\r\n const oldDof = this.depthOfField;\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, false);\r\n this.depthOfField.focalLength = oldDof.focalLength;\r\n this.depthOfField.focusDistance = oldDof.focusDistance;\r\n this.depthOfField.fStop = oldDof.fStop;\r\n this.depthOfField.lensSize = oldDof.lensSize;\r\n\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n oldDof.disposeEffects(this._cameras[i]);\r\n }\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * If the anti aliasing is enabled.\r\n */\r\n public set fxaaEnabled(enabled: boolean) {\r\n if (this._fxaaEnabled === enabled) {\r\n return;\r\n }\r\n this._fxaaEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get fxaaEnabled(): boolean {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n private _samples = 1;\r\n /**\r\n * MSAA sample count, setting this to 4 will provide 4x anti aliasing. (default: 1)\r\n */\r\n public set samples(sampleCount: number) {\r\n if (this._samples === sampleCount) {\r\n return;\r\n }\r\n this._samples = sampleCount;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * If image processing is enabled.\r\n */\r\n public set imageProcessingEnabled(enabled: boolean) {\r\n if (this._imageProcessingEnabled === enabled) {\r\n return;\r\n }\r\n\r\n this._scene.imageProcessingConfiguration.isEnabled = enabled;\r\n }\r\n\r\n @serialize()\r\n public get imageProcessingEnabled(): boolean {\r\n return this._imageProcessingEnabled;\r\n }\r\n\r\n /**\r\n * If glow layer is enabled. (Adds a glow effect to emmissive materials)\r\n */\r\n public set glowLayerEnabled(enabled: boolean) {\r\n if (enabled && !this._glowLayer) {\r\n this._glowLayer = new GlowLayer(\"\", this._scene);\r\n } else if (!enabled && this._glowLayer) {\r\n this._glowLayer.dispose();\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n @serialize()\r\n public get glowLayerEnabled(): boolean {\r\n return this._glowLayer != null;\r\n }\r\n\r\n /**\r\n * Gets the glow layer (or null if not defined)\r\n */\r\n public get glowLayer() {\r\n return this._glowLayer;\r\n }\r\n\r\n /**\r\n * Enable or disable the chromaticAberration process from the pipeline\r\n */\r\n public set chromaticAberrationEnabled(enabled: boolean) {\r\n if (this._chromaticAberrationEnabled === enabled) {\r\n return;\r\n }\r\n this._chromaticAberrationEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get chromaticAberrationEnabled(): boolean {\r\n return this._chromaticAberrationEnabled;\r\n }\r\n /**\r\n * Enable or disable the grain process from the pipeline\r\n */\r\n public set grainEnabled(enabled: boolean) {\r\n if (this._grainEnabled === enabled) {\r\n return;\r\n }\r\n this._grainEnabled = enabled;\r\n\r\n this._buildPipeline();\r\n }\r\n\r\n @serialize()\r\n public get grainEnabled(): boolean {\r\n return this._grainEnabled;\r\n }\r\n\r\n /**\r\n * Instantiates a DefaultRenderingPipeline.\r\n * @param name The rendering pipeline name (default: \"\")\r\n * @param hdr If high dynamic range textures should be used (default: true)\r\n * @param scene The scene linked to this pipeline (default: the last created scene)\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to (default: scene.cameras)\r\n * @param automaticBuild If false, you will have to manually call prepare() to update the pipeline (default: true)\r\n */\r\n constructor(name = \"\", hdr = true, scene: Scene = EngineStore.LastCreatedScene!, cameras?: Camera[], automaticBuild = true) {\r\n super(scene.getEngine(), name);\r\n this._cameras = cameras || scene.cameras;\r\n this._cameras = this._cameras.slice();\r\n this._camerasToBeAttached = this._cameras.slice();\r\n\r\n this._buildAllowed = automaticBuild;\r\n\r\n // Initialize\r\n this._scene = scene;\r\n const caps = this._scene.getEngine().getCaps();\r\n this._hdr = hdr && (caps.textureHalfFloatRender || caps.textureFloatRender);\r\n\r\n // Misc\r\n if (this._hdr) {\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n } else {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n // Attach\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n // Create post processes before hand so they can be modified before enabled.\r\n // Block compilation flag is set to true to avoid compilation prior to use, these will be updated on first use in build pipeline.\r\n this.sharpen = new SharpenPostProcess(\"sharpen\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._sharpenEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.SharpenPostProcessId,\r\n () => {\r\n return this.sharpen;\r\n },\r\n true\r\n );\r\n\r\n this.depthOfField = new DepthOfFieldEffect(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, true);\r\n\r\n // To keep the bloom sizes consistent across different display densities, factor in the hardware scaling level.\r\n this._hardwareScaleLevel = engine.getHardwareScalingLevel();\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n this._hardwareScaleLevel = engine.getHardwareScalingLevel();\r\n this.bloomKernel = this._bloomKernel;\r\n });\r\n\r\n this.bloom = new BloomEffect(this._scene, this._bloomScale, this._bloomWeight, this.bloomKernel / this._hardwareScaleLevel, this._defaultPipelineTextureType, true);\r\n\r\n this.chromaticAberration = new ChromaticAberrationPostProcess(\r\n \"ChromaticAberration\",\r\n engine.getRenderWidth(),\r\n engine.getRenderHeight(),\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n true\r\n );\r\n this._chromaticAberrationEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.ChromaticAberrationPostProcessId,\r\n () => {\r\n return this.chromaticAberration;\r\n },\r\n true\r\n );\r\n\r\n this.grain = new GrainPostProcess(\"Grain\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType, true);\r\n this._grainEffect = new PostProcessRenderEffect(\r\n engine,\r\n this.GrainPostProcessId,\r\n () => {\r\n return this.grain;\r\n },\r\n true\r\n );\r\n\r\n let avoidReentrancyAtConstructionTime = true;\r\n\r\n this._imageProcessingConfigurationObserver = this._scene.imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this.bloom._downscale._exposure = this._scene.imageProcessingConfiguration.exposure;\r\n\r\n if (this.imageProcessingEnabled !== this._scene.imageProcessingConfiguration.isEnabled) {\r\n this._imageProcessingEnabled = this._scene.imageProcessingConfiguration.isEnabled;\r\n // Avoid re-entrant problems by deferring the call to _buildPipeline because the call to _buildPipeline\r\n // at the end of the constructor could end up triggering imageProcessingConfiguration.onUpdateParameters!\r\n // Note that the pipeline could have been disposed before the deferred call was executed, but in that case\r\n // _buildAllowed will have been set to false, preventing _buildPipeline from being executed.\r\n if (avoidReentrancyAtConstructionTime) {\r\n Tools.SetImmediate(() => {\r\n this._buildPipeline();\r\n });\r\n } else {\r\n this._buildPipeline();\r\n }\r\n }\r\n });\r\n\r\n this._buildPipeline();\r\n\r\n avoidReentrancyAtConstructionTime = false;\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"DefaultRenderingPipeline\"\r\n */\r\n public override getClassName(): string {\r\n return \"DefaultRenderingPipeline\";\r\n }\r\n\r\n /**\r\n * Force the compilation of the entire pipeline.\r\n */\r\n public prepare(): void {\r\n const previousState = this._buildAllowed;\r\n this._buildAllowed = true;\r\n this._buildPipeline();\r\n this._buildAllowed = previousState;\r\n }\r\n\r\n private _hasCleared = false;\r\n private _prevPostProcess: Nullable<PostProcess> = null;\r\n private _prevPrevPostProcess: Nullable<PostProcess> = null;\r\n\r\n private _setAutoClearAndTextureSharing(postProcess: PostProcess, skipTextureSharing = false) {\r\n if (this._hasCleared) {\r\n postProcess.autoClear = false;\r\n } else {\r\n postProcess.autoClear = true;\r\n this._scene.autoClear = false;\r\n this._hasCleared = true;\r\n }\r\n\r\n if (!skipTextureSharing) {\r\n if (this._prevPrevPostProcess) {\r\n postProcess.shareOutputWith(this._prevPrevPostProcess);\r\n } else {\r\n postProcess.useOwnOutput();\r\n }\r\n\r\n if (this._prevPostProcess) {\r\n this._prevPrevPostProcess = this._prevPostProcess;\r\n }\r\n this._prevPostProcess = postProcess;\r\n }\r\n }\r\n\r\n private _depthOfFieldSceneObserver: Nullable<Observer<Scene>> = null;\r\n private _activeCameraChangedObserver: Nullable<Observer<Scene>> = null;\r\n private _activeCamerasChangedObserver: Nullable<Observer<Scene>> = null;\r\n\r\n private _buildPipeline() {\r\n if (!this._buildAllowed) {\r\n return;\r\n }\r\n this._scene.autoClear = true;\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._disposePostProcesses();\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n // get back cameras to be used to reattach pipeline\r\n this._cameras = this._camerasToBeAttached.slice();\r\n }\r\n this._reset();\r\n this._prevPostProcess = null;\r\n this._prevPrevPostProcess = null;\r\n this._hasCleared = false;\r\n\r\n if (this.depthOfFieldEnabled) {\r\n // Multi camera suport\r\n if (this._cameras.length > 1) {\r\n for (const camera of this._cameras) {\r\n const depthRenderer = this._scene.enableDepthRenderer(camera);\r\n depthRenderer.useOnlyInActiveCamera = true;\r\n }\r\n\r\n this._depthOfFieldSceneObserver = this._scene.onAfterRenderTargetsRenderObservable.add((scene) => {\r\n if (this._cameras.indexOf(scene.activeCamera!) > -1) {\r\n this.depthOfField.depthTexture = scene.enableDepthRenderer(scene.activeCamera).getDepthMap();\r\n }\r\n });\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n const depthRenderer = this._scene.enableDepthRenderer(this._cameras[0]);\r\n this.depthOfField.depthTexture = depthRenderer.getDepthMap();\r\n }\r\n\r\n if (!this.depthOfField._isReady()) {\r\n this.depthOfField._updateEffects();\r\n }\r\n this.addEffect(this.depthOfField);\r\n this._setAutoClearAndTextureSharing(this.depthOfField._effects[0], true);\r\n } else {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n }\r\n\r\n if (this.bloomEnabled) {\r\n if (!this.bloom._isReady()) {\r\n this.bloom._updateEffects();\r\n }\r\n this.addEffect(this.bloom);\r\n this._setAutoClearAndTextureSharing(this.bloom._effects[0], true);\r\n }\r\n\r\n if (this._imageProcessingEnabled) {\r\n this.imageProcessing = new ImageProcessingPostProcess(\r\n \"imageProcessing\",\r\n 1.0,\r\n null,\r\n Texture.BILINEAR_SAMPLINGMODE,\r\n engine,\r\n false,\r\n this._defaultPipelineTextureType,\r\n this.scene.imageProcessingConfiguration\r\n );\r\n if (this._hdr) {\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.ImageProcessingPostProcessId,\r\n () => {\r\n return this.imageProcessing;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.imageProcessing);\r\n } else {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this._cameras || this._cameras.length === 0) {\r\n this._scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n if (!this.imageProcessing.getEffect()) {\r\n this.imageProcessing._updateParameters();\r\n }\r\n }\r\n\r\n if (this.sharpenEnabled) {\r\n if (!this.sharpen.isReady()) {\r\n this.sharpen.updateEffect();\r\n }\r\n this.addEffect(this._sharpenEffect);\r\n this._setAutoClearAndTextureSharing(this.sharpen);\r\n }\r\n\r\n if (this.grainEnabled) {\r\n if (!this.grain.isReady()) {\r\n this.grain.updateEffect();\r\n }\r\n this.addEffect(this._grainEffect);\r\n this._setAutoClearAndTextureSharing(this.grain);\r\n }\r\n\r\n if (this.chromaticAberrationEnabled) {\r\n if (!this.chromaticAberration.isReady()) {\r\n this.chromaticAberration.updateEffect();\r\n }\r\n this.addEffect(this._chromaticAberrationEffect);\r\n this._setAutoClearAndTextureSharing(this.chromaticAberration);\r\n }\r\n\r\n if (this.fxaaEnabled) {\r\n this.fxaa = new FxaaPostProcess(\"fxaa\", 1.0, null, Texture.BILINEAR_SAMPLINGMODE, engine, false, this._defaultPipelineTextureType);\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n engine,\r\n this.FxaaPostProcessId,\r\n () => {\r\n return this.fxaa;\r\n },\r\n true\r\n )\r\n );\r\n this._setAutoClearAndTextureSharing(this.fxaa, true);\r\n }\r\n\r\n if (this._cameras !== null) {\r\n this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras);\r\n }\r\n\r\n // In multicamera mode, the scene needs to autoclear in between cameras.\r\n if ((this._scene.activeCameras && this._scene.activeCameras.length > 1) || (this._scene.activeCamera && this._cameras.indexOf(this._scene.activeCamera) === -1)) {\r\n this._scene.autoClear = true;\r\n }\r\n // The active camera on the scene can be changed anytime\r\n if (!this._activeCameraChangedObserver) {\r\n this._activeCameraChangedObserver = this._scene.onActiveCameraChanged.add(() => {\r\n if (this._scene.activeCamera && this._cameras.indexOf(this._scene.activeCamera) === -1) {\r\n this._scene.autoClear = true;\r\n }\r\n });\r\n }\r\n if (!this._activeCamerasChangedObserver) {\r\n this._activeCamerasChangedObserver = this._scene.onActiveCamerasChanged.add(() => {\r\n if (this._scene.activeCameras && this._scene.activeCameras.length > 1) {\r\n this._scene.autoClear = true;\r\n }\r\n });\r\n }\r\n\r\n this._adaptPostProcessesToViewPort();\r\n\r\n if (!this._enableMSAAOnFirstPostProcess(this.samples) && this.samples > 1) {\r\n Logger.Warn(\"MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0\");\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n }\r\n\r\n private _disposePostProcesses(disposeNonRecreated = false): void {\r\n for (let i = 0; i < this._cameras.length; i++) {\r\n const camera = this._cameras[i];\r\n\r\n if (this.imageProcessing) {\r\n this.imageProcessing.dispose(camera);\r\n }\r\n\r\n if (this.fxaa) {\r\n this.fxaa.dispose(camera);\r\n }\r\n\r\n // These are created in the constructor and should not be disposed on every pipeline change\r\n if (disposeNonRecreated) {\r\n if (this.sharpen) {\r\n this.sharpen.dispose(camera);\r\n }\r\n\r\n if (this.depthOfField) {\r\n this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);\r\n this.depthOfField.disposeEffects(camera);\r\n }\r\n\r\n if (this.bloom) {\r\n this.bloom.disposeEffects(camera);\r\n }\r\n\r\n if (this.chromaticAberration) {\r\n this.chromaticAberration.dispose(camera);\r\n }\r\n\r\n if (this.grain) {\r\n this.grain.dispose(camera);\r\n }\r\n if (this._glowLayer) {\r\n this._glowLayer.dispose();\r\n }\r\n }\r\n }\r\n\r\n (<any>this.imageProcessing) = null;\r\n (<any>this.fxaa) = null;\r\n\r\n if (disposeNonRecreated) {\r\n (<any>this.sharpen) = null;\r\n (<any>this._sharpenEffect) = null;\r\n (<any>this.depthOfField) = null;\r\n (<any>this.bloom) = null;\r\n (<any>this.chromaticAberration) = null;\r\n (<any>this._chromaticAberrationEffect) = null;\r\n (<any>this.grain) = null;\r\n (<any>this._grainEffect) = null;\r\n this._glowLayer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Adds a camera to the pipeline\r\n * @param camera the camera to be added\r\n */\r\n public addCamera(camera: Camera): void {\r\n this._camerasToBeAttached.push(camera);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Removes a camera from the pipeline\r\n * @param camera the camera to remove\r\n */\r\n public removeCamera(camera: Camera): void {\r\n const index = this._camerasToBeAttached.indexOf(camera);\r\n this._camerasToBeAttached.splice(index, 1);\r\n this._buildPipeline();\r\n }\r\n\r\n /**\r\n * Dispose of the pipeline and stop all post processes\r\n */\r\n public override dispose(): void {\r\n this._buildAllowed = false;\r\n this.onBuildObservable.clear();\r\n this._disposePostProcesses(true);\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras);\r\n this._scene._postProcessRenderPipelineManager.removePipeline(this.name);\r\n this._scene.autoClear = true;\r\n if (this._resizeObserver) {\r\n this._scene.getEngine().onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n\r\n this._scene.onActiveCameraChanged.remove(this._activeCameraChangedObserver);\r\n this._scene.onActiveCamerasChanged.remove(this._activeCamerasChangedObserver);\r\n\r\n this._scene.imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingConfigurationObserver);\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Serialize the rendering pipeline (Used when exporting)\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this);\r\n serializationObject.customType = \"DefaultRenderingPipeline\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the serialized pipeline\r\n * @param source Source pipeline.\r\n * @param scene The scene to load the pipeline to.\r\n * @param rootUrl The URL of the serialized pipeline.\r\n * @returns An instantiated pipeline from the serialized object.\r\n */\r\n public static Parse(source: any, scene: Scene, rootUrl: string): DefaultRenderingPipeline {\r\n return SerializationHelper.Parse(() => new DefaultRenderingPipeline(source._name, source._name._hdr, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.DefaultRenderingPipeline\", DefaultRenderingPipeline);\r\n"]}
@@ -2,6 +2,7 @@ import type { Camera } from "../../../Cameras/camera.js";
2
2
  import { PostProcessRenderPipeline } from "../../../PostProcesses/RenderPipeline/postProcessRenderPipeline.js";
3
3
  import type { Scene } from "../../../scene.js";
4
4
  import "../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js";
5
+ import "../../../Rendering/depthRendererSceneComponent.js";
5
6
  import "../../../Shaders/chromaticAberration.fragment.js";
6
7
  import "../../../Shaders/lensHighlights.fragment.js";
7
8
  import "../../../Shaders/depthOfField.fragment.js";
@@ -5,6 +5,7 @@ import { PostProcessRenderEffect } from "../../../PostProcesses/RenderPipeline/p
5
5
  import { RawTexture } from "../../../Materials/Textures/rawTexture.js";
6
6
 
7
7
  import "../../../PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js";
8
+ import "../../../Rendering/depthRendererSceneComponent.js";
8
9
  import "../../../Shaders/chromaticAberration.fragment.js";
9
10
  import "../../../Shaders/lensHighlights.fragment.js";
10
11
  import "../../../Shaders/depthOfField.fragment.js";