@babylonjs/core 9.11.0 → 9.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1012) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +8 -5
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Animations/animatable.core.d.ts +1 -1
  5. package/Animations/animatable.core.js +2 -2
  6. package/Animations/animatable.core.js.map +1 -1
  7. package/Animations/animationPropertiesOverride.js +1 -1
  8. package/Animations/animationPropertiesOverride.js.map +1 -1
  9. package/Animations/animatorAvatar.d.ts +2 -2
  10. package/Animations/animatorAvatar.js +3 -3
  11. package/Animations/animatorAvatar.js.map +1 -1
  12. package/Animations/pathCursor.d.ts +1 -1
  13. package/Animations/pathCursor.js +1 -1
  14. package/Animations/pathCursor.js.map +1 -1
  15. package/Animations/runtimeAnimation.d.ts +1 -1
  16. package/Animations/runtimeAnimation.js +2 -2
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Audio/analyser.js +1 -1
  19. package/Audio/analyser.js.map +1 -1
  20. package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js +1 -1
  21. package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js.map +1 -1
  22. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +1 -1
  23. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +1 -1
  24. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
  25. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +1 -1
  26. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +1 -1
  27. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -1
  28. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +1 -1
  29. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +1 -1
  30. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
  31. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +1 -1
  32. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
  33. package/AudioV2/webAudio/webAudioStreamingSound.js +1 -1
  34. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  35. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  36. package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
  37. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  38. package/BakedVertexAnimation/vertexAnimationBaker.js +1 -1
  39. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  40. package/Behaviors/Cameras/bouncingBehavior.js +1 -1
  41. package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
  42. package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
  43. package/Behaviors/Cameras/framingBehavior.js +2 -2
  44. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  45. package/Behaviors/Cameras/interpolatingBehavior.d.ts +13 -1
  46. package/Behaviors/Cameras/interpolatingBehavior.js +13 -1
  47. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  48. package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
  49. package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
  50. package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +3 -3
  51. package/Behaviors/Meshes/baseSixDofDragBehavior.js +4 -4
  52. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  53. package/Behaviors/Meshes/followBehavior.js +1 -1
  54. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  55. package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
  56. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  57. package/Behaviors/Meshes/multiPointerScaleBehavior.js +1 -1
  58. package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
  59. package/Behaviors/Meshes/pointerDragBehavior.d.ts +3 -3
  60. package/Behaviors/Meshes/pointerDragBehavior.js +5 -5
  61. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  62. package/Behaviors/Meshes/sixDofDragBehavior.d.ts +1 -1
  63. package/Behaviors/Meshes/sixDofDragBehavior.js +2 -2
  64. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  65. package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -1
  66. package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
  67. package/Bones/boneIKController.d.ts +1 -1
  68. package/Bones/boneIKController.js +1 -1
  69. package/Bones/boneIKController.js.map +1 -1
  70. package/Bones/boneLookController.d.ts +1 -1
  71. package/Bones/boneLookController.js +1 -1
  72. package/Bones/boneLookController.js.map +1 -1
  73. package/Bones/skeleton.d.ts +2 -2
  74. package/Bones/skeleton.functions.d.ts +1 -1
  75. package/Bones/skeleton.functions.js +3 -3
  76. package/Bones/skeleton.functions.js.map +1 -1
  77. package/Bones/skeleton.js +3 -4
  78. package/Bones/skeleton.js.map +1 -1
  79. package/Buffers/buffer.align.pure.js +6 -0
  80. package/Buffers/buffer.align.pure.js.map +1 -1
  81. package/Buffers/buffer.nonFloatVertexBuffers.js +2 -1
  82. package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
  83. package/Buffers/buffer.pure.d.ts +8 -0
  84. package/Buffers/buffer.pure.js +31 -2
  85. package/Buffers/buffer.pure.js.map +1 -1
  86. package/Buffers/bufferUtils.js +17 -5
  87. package/Buffers/bufferUtils.js.map +1 -1
  88. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +1 -1
  89. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  90. package/Cameras/Inputs/BaseCameraPointersInput.js +1 -1
  91. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  92. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
  93. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  94. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
  95. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  96. package/Cameras/Inputs/flyCameraKeyboardInput.js +2 -2
  97. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  98. package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
  99. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  100. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
  101. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  102. package/Cameras/Inputs/followCameraMouseWheelInput.js +1 -1
  103. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  104. package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
  105. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  106. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +2 -2
  107. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  108. package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
  109. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  110. package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
  111. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  112. package/Cameras/Inputs/freeCameraTouchInput.js +2 -2
  113. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  114. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +1 -1
  115. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  116. package/Cameras/Limits/geospatialLimits.d.ts +1 -1
  117. package/Cameras/Limits/geospatialLimits.js +1 -1
  118. package/Cameras/Limits/geospatialLimits.js.map +1 -1
  119. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +2 -2
  120. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
  121. package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -1
  122. package/Cameras/RigModes/stereoscopicRigMode.js +3 -3
  123. package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
  124. package/Cameras/RigModes/vrRigMode.js +2 -2
  125. package/Cameras/RigModes/vrRigMode.js.map +1 -1
  126. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +3 -3
  127. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +5 -5
  128. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  129. package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
  130. package/Cameras/VR/vrCameraMetrics.js +1 -1
  131. package/Cameras/VR/vrCameraMetrics.js.map +1 -1
  132. package/Cameras/cameraInputsManager.d.ts +1 -1
  133. package/Cameras/cameraInputsManager.js +1 -1
  134. package/Cameras/cameraInputsManager.js.map +1 -1
  135. package/Collisions/collider.d.ts +1 -1
  136. package/Collisions/collider.js +1 -1
  137. package/Collisions/collider.js.map +1 -1
  138. package/Collisions/gpuPicker.d.ts +1 -1
  139. package/Collisions/gpuPicker.js +5 -5
  140. package/Collisions/gpuPicker.js.map +1 -1
  141. package/Collisions/meshCollisionData.d.ts +1 -1
  142. package/Collisions/meshCollisionData.js +1 -1
  143. package/Collisions/meshCollisionData.js.map +1 -1
  144. package/Collisions/pickingInfo.d.ts +1 -1
  145. package/Collisions/pickingInfo.js +2 -2
  146. package/Collisions/pickingInfo.js.map +1 -1
  147. package/Culling/Octrees/octreeBlock.d.ts +1 -1
  148. package/Culling/Octrees/octreeBlock.js +1 -1
  149. package/Culling/Octrees/octreeBlock.js.map +1 -1
  150. package/Culling/boundingBox.d.ts +1 -1
  151. package/Culling/boundingBox.js +1 -1
  152. package/Culling/boundingBox.js.map +1 -1
  153. package/Culling/boundingInfo.d.ts +1 -1
  154. package/Culling/boundingInfo.js +1 -1
  155. package/Culling/boundingInfo.js.map +1 -1
  156. package/Culling/boundingSphere.d.ts +1 -1
  157. package/Culling/boundingSphere.js +1 -1
  158. package/Culling/boundingSphere.js.map +1 -1
  159. package/Culling/ray.core.d.ts +1 -1
  160. package/Culling/ray.core.js +1 -1
  161. package/Culling/ray.core.js.map +1 -1
  162. package/Debug/axesViewer.d.ts +1 -1
  163. package/Debug/axesViewer.js +3 -3
  164. package/Debug/axesViewer.js.map +1 -1
  165. package/Debug/boneAxesViewer.d.ts +1 -1
  166. package/Debug/boneAxesViewer.js +1 -1
  167. package/Debug/boneAxesViewer.js.map +1 -1
  168. package/Debug/directionalLightFrustumViewer.d.ts +1 -1
  169. package/Debug/directionalLightFrustumViewer.js +6 -6
  170. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  171. package/Debug/rayHelper.d.ts +1 -1
  172. package/Debug/rayHelper.js +2 -2
  173. package/Debug/rayHelper.js.map +1 -1
  174. package/Debug/skeletonViewer.d.ts +2 -2
  175. package/Debug/skeletonViewer.js +10 -10
  176. package/Debug/skeletonViewer.js.map +1 -1
  177. package/DeviceInput/internalDeviceSourceManager.d.ts +1 -1
  178. package/DeviceInput/internalDeviceSourceManager.js +0 -1
  179. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  180. package/DeviceInput/webDeviceInputSystem.js +1 -1
  181. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  182. package/Engines/Extensions/engine.views.d.ts +1 -1
  183. package/Engines/Extensions/engine.views.js +1 -1
  184. package/Engines/Extensions/engine.views.js.map +1 -1
  185. package/Engines/Native/nativeHelpers.js +4 -1
  186. package/Engines/Native/nativeHelpers.js.map +1 -1
  187. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  188. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +11 -1
  189. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  190. package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
  191. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  192. package/Engines/WebGPU/webgpuTintWASM.js +1 -1
  193. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  194. package/Engines/abstractEngine.pure.js +2 -2
  195. package/Engines/abstractEngine.pure.js.map +1 -1
  196. package/Engines/constants.d.ts +4 -0
  197. package/Engines/constants.js +4 -0
  198. package/Engines/constants.js.map +1 -1
  199. package/Engines/engineFactory.d.ts +2 -2
  200. package/Engines/engineFactory.js +3 -3
  201. package/Engines/engineFactory.js.map +1 -1
  202. package/Events/pointerEvents.d.ts +1 -1
  203. package/Events/pointerEvents.js +1 -1
  204. package/Events/pointerEvents.js.map +1 -1
  205. package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js +1 -1
  206. package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js.map +1 -1
  207. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +1 -1
  208. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +1 -1
  209. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  210. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js +1 -1
  211. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js.map +1 -1
  212. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.d.ts +1 -1
  213. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
  214. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
  215. package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +1 -1
  216. package/FlowGraph/CustomTypes/flowGraphMatrix.js +1 -1
  217. package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
  218. package/FlowGraph/flowGraphBlock.d.ts +1 -1
  219. package/FlowGraph/flowGraphBlock.js +1 -1
  220. package/FlowGraph/flowGraphBlock.js.map +1 -1
  221. package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -1
  222. package/FlowGraph/flowGraphExecutionBlock.js +1 -1
  223. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  224. package/FlowGraph/flowGraphMath.d.ts +1 -1
  225. package/FlowGraph/flowGraphMath.js +1 -1
  226. package/FlowGraph/flowGraphMath.js.map +1 -1
  227. package/FlowGraph/flowGraphParser.js +1 -1
  228. package/FlowGraph/flowGraphParser.js.map +1 -1
  229. package/FlowGraph/flowGraphPathConverterComponent.d.ts +1 -1
  230. package/FlowGraph/flowGraphPathConverterComponent.js +2 -2
  231. package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
  232. package/FlowGraph/flowGraphValidator.js.map +1 -1
  233. package/FlowGraph/serialization.js +4 -4
  234. package/FlowGraph/serialization.js.map +1 -1
  235. package/FlowGraph/utils.js.map +1 -1
  236. package/FrameGraph/Node/nodeRenderGraph.d.ts +2 -2
  237. package/FrameGraph/Node/nodeRenderGraph.js +7 -7
  238. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  239. package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +30 -0
  240. package/FrameGraph/Tasks/Layers/baseLayerTask.js +28 -1
  241. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  242. package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +2 -2
  243. package/FrameGraph/Tasks/Misc/computeShaderTask.js +2 -2
  244. package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
  245. package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -1
  246. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +2 -2
  247. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  248. package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +7 -0
  249. package/FrameGraph/Tasks/PostProcesses/blurTask.js +8 -1
  250. package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
  251. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
  252. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  253. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +1 -1
  254. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
  255. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -1
  256. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +1 -1
  257. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
  258. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +2 -2
  259. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +3 -3
  260. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  261. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -1
  262. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +2 -2
  263. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  264. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
  265. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +14 -5
  266. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  267. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +1 -1
  268. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +1 -1
  269. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  270. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +1 -1
  271. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +1 -1
  272. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -1
  273. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +1 -1
  274. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +2 -2
  275. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -1
  276. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +1 -1
  277. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +2 -2
  278. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -1
  279. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +7 -1
  280. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +7 -1
  281. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  282. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
  283. package/FrameGraph/Tasks/Texture/clearTextureTask.js +1 -1
  284. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  285. package/FrameGraph/frameGraphRenderContext.js +1 -1
  286. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  287. package/FrameGraph/frameGraphTextureManager.d.ts +1 -1
  288. package/FrameGraph/frameGraphTextureManager.js +1 -1
  289. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  290. package/Gamepads/gamepadManager.js +1 -1
  291. package/Gamepads/gamepadManager.js.map +1 -1
  292. package/Gizmos/axisDragGizmo.d.ts +5 -5
  293. package/Gizmos/axisDragGizmo.js +6 -6
  294. package/Gizmos/axisDragGizmo.js.map +1 -1
  295. package/Gizmos/axisScaleGizmo.d.ts +4 -4
  296. package/Gizmos/axisScaleGizmo.js +6 -6
  297. package/Gizmos/axisScaleGizmo.js.map +1 -1
  298. package/Gizmos/boundingBoxGizmo.d.ts +5 -5
  299. package/Gizmos/boundingBoxGizmo.js +7 -7
  300. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  301. package/Gizmos/cameraGizmo.d.ts +3 -3
  302. package/Gizmos/cameraGizmo.js +7 -7
  303. package/Gizmos/cameraGizmo.js.map +1 -1
  304. package/Gizmos/gizmo.d.ts +2 -2
  305. package/Gizmos/gizmo.js +3 -3
  306. package/Gizmos/gizmo.js.map +1 -1
  307. package/Gizmos/gizmoManager.d.ts +2 -2
  308. package/Gizmos/gizmoManager.js +2 -2
  309. package/Gizmos/gizmoManager.js.map +1 -1
  310. package/Gizmos/lightGizmo.d.ts +4 -4
  311. package/Gizmos/lightGizmo.js +11 -11
  312. package/Gizmos/lightGizmo.js.map +1 -1
  313. package/Gizmos/planeDragGizmo.d.ts +4 -4
  314. package/Gizmos/planeDragGizmo.js +5 -5
  315. package/Gizmos/planeDragGizmo.js.map +1 -1
  316. package/Gizmos/positionGizmo.d.ts +1 -1
  317. package/Gizmos/positionGizmo.js +2 -2
  318. package/Gizmos/positionGizmo.js.map +1 -1
  319. package/Gizmos/rotationGizmo.d.ts +3 -3
  320. package/Gizmos/rotationGizmo.js +3 -3
  321. package/Gizmos/rotationGizmo.js.map +1 -1
  322. package/Gizmos/scaleGizmo.d.ts +2 -2
  323. package/Gizmos/scaleGizmo.js +4 -4
  324. package/Gizmos/scaleGizmo.js.map +1 -1
  325. package/Gizmos/spatialAudioGizmo.d.ts +2 -2
  326. package/Gizmos/spatialAudioGizmo.js +6 -6
  327. package/Gizmos/spatialAudioGizmo.js.map +1 -1
  328. package/Helpers/environmentHelper.d.ts +6 -6
  329. package/Helpers/environmentHelper.js +12 -12
  330. package/Helpers/environmentHelper.js.map +1 -1
  331. package/Helpers/materialConversionHelper.d.ts +1 -1
  332. package/Helpers/materialConversionHelper.js +1 -1
  333. package/Helpers/materialConversionHelper.js.map +1 -1
  334. package/Helpers/photoDome.d.ts +1 -1
  335. package/Helpers/photoDome.js +1 -1
  336. package/Helpers/photoDome.js.map +1 -1
  337. package/Helpers/textureDome.d.ts +4 -4
  338. package/Helpers/textureDome.js +6 -6
  339. package/Helpers/textureDome.js.map +1 -1
  340. package/Helpers/videoDome.d.ts +1 -1
  341. package/Helpers/videoDome.js +2 -2
  342. package/Helpers/videoDome.js.map +1 -1
  343. package/Inputs/scene.inputManager.d.ts +1 -1
  344. package/Inputs/scene.inputManager.js +1 -1
  345. package/Inputs/scene.inputManager.js.map +1 -1
  346. package/Instrumentation/sceneInstrumentation.js +1 -1
  347. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  348. package/Layers/effectLayer.d.ts +1 -1
  349. package/Layers/effectLayer.js +3 -3
  350. package/Layers/effectLayer.js.map +1 -1
  351. package/Layers/layer.d.ts +2 -2
  352. package/Layers/layer.js +4 -4
  353. package/Layers/layer.js.map +1 -1
  354. package/Layers/thinEffectLayer.d.ts +2 -2
  355. package/Layers/thinEffectLayer.js +3 -3
  356. package/Layers/thinEffectLayer.js.map +1 -1
  357. package/Layers/thinGlowLayer.d.ts +1 -1
  358. package/Layers/thinGlowLayer.js +3 -3
  359. package/Layers/thinGlowLayer.js.map +1 -1
  360. package/Layers/thinHighlightLayer.d.ts +1 -1
  361. package/Layers/thinHighlightLayer.js +3 -3
  362. package/Layers/thinHighlightLayer.js.map +1 -1
  363. package/Layers/thinSelectionOutlineLayer.d.ts +1 -1
  364. package/Layers/thinSelectionOutlineLayer.js +3 -3
  365. package/Layers/thinSelectionOutlineLayer.js.map +1 -1
  366. package/Legacy/legacy.js +12 -1
  367. package/Legacy/legacy.js.map +1 -1
  368. package/LensFlares/lensFlare.d.ts +2 -2
  369. package/LensFlares/lensFlare.js +3 -3
  370. package/LensFlares/lensFlare.js.map +1 -1
  371. package/LensFlares/lensFlareSystem.d.ts +1 -1
  372. package/LensFlares/lensFlareSystem.js +6 -6
  373. package/LensFlares/lensFlareSystem.js.map +1 -1
  374. package/Lights/LTC/ltcTextureTool.js +1 -1
  375. package/Lights/LTC/ltcTextureTool.js.map +1 -1
  376. package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -285
  377. package/Lights/Shadows/cascadedShadowGenerator.js +3 -857
  378. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  379. package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +290 -0
  380. package/Lights/Shadows/cascadedShadowGenerator.pure.js +868 -0
  381. package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -0
  382. package/Lights/Shadows/pure.d.ts +1 -0
  383. package/Lights/Shadows/pure.js +1 -0
  384. package/Lights/Shadows/pure.js.map +1 -1
  385. package/Lights/Shadows/shadowGenerator.d.ts +3 -3
  386. package/Lights/Shadows/shadowGenerator.js +7 -7
  387. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  388. package/Lights/areaLight.d.ts +1 -1
  389. package/Lights/areaLight.js +0 -1
  390. package/Lights/areaLight.js.map +1 -1
  391. package/Lights/light.d.ts +2 -2
  392. package/Lights/light.js +2 -2
  393. package/Lights/light.js.map +1 -1
  394. package/Lights/shadowLight.d.ts +1 -1
  395. package/Lights/shadowLight.js +1 -1
  396. package/Lights/shadowLight.js.map +1 -1
  397. package/Loading/sceneLoader.d.ts +2 -2
  398. package/Loading/sceneLoader.js +3 -3
  399. package/Loading/sceneLoader.js.map +1 -1
  400. package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +1 -1
  401. package/Materials/GreasedLine/greasedLineMaterialDefaults.js +1 -1
  402. package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
  403. package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +3 -3
  404. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +3 -3
  405. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  406. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +6 -6
  407. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  408. package/Materials/Node/nodeMaterial.pure.d.ts +12 -0
  409. package/Materials/Node/nodeMaterial.pure.js +68 -13
  410. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  411. package/Materials/Node/nodeMaterialDefault.js +14 -14
  412. package/Materials/Node/nodeMaterialDefault.js.map +1 -1
  413. package/Materials/PBR/openpbrMaterial.pure.js +19 -4
  414. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  415. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +40 -2
  416. package/Materials/PBR/pbrAnisotropicConfiguration.js +41 -3
  417. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  418. package/Materials/PBR/pbrBRDFConfiguration.d.ts +5 -1
  419. package/Materials/PBR/pbrBRDFConfiguration.js +5 -1
  420. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  421. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +2 -2
  422. package/Materials/PBR/pbrBaseSimpleMaterial.js +2 -2
  423. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  424. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +42 -2
  425. package/Materials/PBR/pbrClearCoatConfiguration.js +42 -2
  426. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  427. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +38 -1
  428. package/Materials/PBR/pbrIridescenceConfiguration.js +38 -1
  429. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  430. package/Materials/PBR/pbrSheenConfiguration.d.ts +41 -2
  431. package/Materials/PBR/pbrSheenConfiguration.js +41 -2
  432. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  433. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +41 -2
  434. package/Materials/PBR/pbrSubSurfaceConfiguration.js +42 -3
  435. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  436. package/Materials/Textures/Filtering/hdrFiltering.js +1 -1
  437. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  438. package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -1
  439. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +2 -2
  440. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  441. package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +1 -1
  442. package/Materials/Textures/Loaders/EXR/exrLoader.core.js +5 -109
  443. package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -1
  444. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +1 -1
  445. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -1
  446. package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
  447. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  448. package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
  449. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  450. package/Materials/Textures/Loaders/envTextureLoader.js +3 -1
  451. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  452. package/Materials/Textures/Loaders/ktxTextureLoader.js +11 -2
  453. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  454. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
  455. package/Materials/Textures/MultiviewRenderTarget.js +1 -1
  456. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  457. package/Materials/Textures/Packer/packer.d.ts +1 -1
  458. package/Materials/Textures/Packer/packer.js +6 -6
  459. package/Materials/Textures/Packer/packer.js.map +1 -1
  460. package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
  461. package/Materials/Textures/Procedurals/customProceduralTexture.js +4 -4
  462. package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
  463. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +4 -1
  464. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  465. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
  466. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
  467. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  468. package/Materials/Textures/prePassRenderTarget.js +1 -1
  469. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  470. package/Materials/Textures/rawCubeTexture.d.ts +1 -1
  471. package/Materials/Textures/rawCubeTexture.js +2 -2
  472. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  473. package/Materials/Textures/rawTexture.d.ts +1 -1
  474. package/Materials/Textures/rawTexture.js +1 -1
  475. package/Materials/Textures/rawTexture.js.map +1 -1
  476. package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
  477. package/Materials/Textures/rawTexture2DArray.js +1 -1
  478. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  479. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  480. package/Materials/Textures/rawTexture3D.js +1 -1
  481. package/Materials/Textures/rawTexture3D.js.map +1 -1
  482. package/Materials/Textures/refractionTexture.d.ts +1 -1
  483. package/Materials/Textures/refractionTexture.js +1 -1
  484. package/Materials/Textures/refractionTexture.js.map +1 -1
  485. package/Materials/Textures/textureMerger.d.ts +1 -1
  486. package/Materials/Textures/textureMerger.js +1 -1
  487. package/Materials/Textures/textureMerger.js.map +1 -1
  488. package/Materials/Textures/textureProcessor.d.ts +1 -1
  489. package/Materials/Textures/textureProcessor.js +2 -2
  490. package/Materials/Textures/textureProcessor.js.map +1 -1
  491. package/Materials/Textures/thinRenderTargetTexture.d.ts +4 -4
  492. package/Materials/Textures/thinRenderTargetTexture.js +2 -2
  493. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  494. package/Materials/clipPlaneMaterialHelper.js +1 -1
  495. package/Materials/clipPlaneMaterialHelper.js.map +1 -1
  496. package/Materials/effectRenderer.pure.js +4 -2
  497. package/Materials/effectRenderer.pure.js.map +1 -1
  498. package/Materials/floatingOriginMatrixOverrides.d.ts +1 -1
  499. package/Materials/floatingOriginMatrixOverrides.js +1 -1
  500. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  501. package/Materials/material.detailMapConfiguration.d.ts +39 -1
  502. package/Materials/material.detailMapConfiguration.js +39 -1
  503. package/Materials/material.detailMapConfiguration.js.map +1 -1
  504. package/Materials/materialHelper.functions.js +45 -1
  505. package/Materials/materialHelper.functions.js.map +1 -1
  506. package/Materials/materialHelper.geometryrendering.d.ts +1 -1
  507. package/Materials/materialHelper.geometryrendering.js +1 -1
  508. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  509. package/Materials/materialPluginFactoryExport.js +2 -2
  510. package/Materials/materialPluginFactoryExport.js.map +1 -1
  511. package/Materials/pushMaterial.d.ts +7 -1
  512. package/Materials/pushMaterial.js +7 -1
  513. package/Materials/pushMaterial.js.map +1 -1
  514. package/Materials/uniformBuffer.js +1 -1
  515. package/Materials/uniformBuffer.js.map +1 -1
  516. package/Maths/math.axis.d.ts +1 -1
  517. package/Maths/math.axis.js +1 -1
  518. package/Maths/math.axis.js.map +1 -1
  519. package/Maths/math.d.ts +2 -2
  520. package/Maths/math.functions.d.ts +1 -1
  521. package/Maths/math.functions.js +1 -1
  522. package/Maths/math.functions.js.map +1 -1
  523. package/Maths/math.isovector.d.ts +1 -1
  524. package/Maths/math.isovector.js +1 -1
  525. package/Maths/math.isovector.js.map +1 -1
  526. package/Maths/math.js +2 -2
  527. package/Maths/math.js.map +1 -1
  528. package/Maths/math.path.d.ts +1 -1
  529. package/Maths/math.path.js +1 -1
  530. package/Maths/math.path.js.map +1 -1
  531. package/Maths/math.plane.d.ts +1 -1
  532. package/Maths/math.plane.js +1 -1
  533. package/Maths/math.plane.js.map +1 -1
  534. package/Maths/math.polar.d.ts +1 -1
  535. package/Maths/math.polar.js +1 -1
  536. package/Maths/math.polar.js.map +1 -1
  537. package/Maths/math.vertexFormat.d.ts +1 -1
  538. package/Maths/math.vertexFormat.js +1 -1
  539. package/Maths/math.vertexFormat.js.map +1 -1
  540. package/Maths/pure.d.ts +1 -0
  541. package/Maths/pure.js +1 -0
  542. package/Maths/pure.js.map +1 -1
  543. package/Meshes/Builders/geodesicBuilder.js +1 -1
  544. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  545. package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
  546. package/Meshes/Builders/goldbergBuilder.js +4 -4
  547. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  548. package/Meshes/Builders/greasedLineBuilder.d.ts +4 -4
  549. package/Meshes/Builders/greasedLineBuilder.js +5 -5
  550. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  551. package/Meshes/Builders/textBuilder.d.ts +2 -2
  552. package/Meshes/Builders/textBuilder.js +4 -4
  553. package/Meshes/Builders/textBuilder.js.map +1 -1
  554. package/Meshes/Builders/tiledBoxBuilder.d.ts +3 -3
  555. package/Meshes/Builders/tiledBoxBuilder.js +3 -3
  556. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  557. package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -1
  558. package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
  559. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  560. package/Meshes/Compression/dracoCodec.js +1 -1
  561. package/Meshes/Compression/dracoCodec.js.map +1 -1
  562. package/Meshes/Compression/dracoDecoder.js +1 -1
  563. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  564. package/Meshes/Compression/dracoEncoder.d.ts +1 -1
  565. package/Meshes/Compression/dracoEncoder.js +2 -2
  566. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  567. package/Meshes/Compression/meshoptCompression.js +1 -1
  568. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  569. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +64 -3
  570. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  571. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
  572. package/Meshes/GreasedLine/greasedLineBaseMesh.js +3 -3
  573. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  574. package/Meshes/Node/nodeGeometry.d.ts +2 -2
  575. package/Meshes/Node/nodeGeometry.js +4 -4
  576. package/Meshes/Node/nodeGeometry.js.map +1 -1
  577. package/Meshes/Node/nodeGeometryBuildState.d.ts +1 -1
  578. package/Meshes/Node/nodeGeometryBuildState.js +1 -1
  579. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  580. package/Meshes/abstractMesh.hotSpot.d.ts +1 -1
  581. package/Meshes/abstractMesh.hotSpot.js +2 -2
  582. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  583. package/Meshes/abstractMesh.pure.js +2 -13
  584. package/Meshes/abstractMesh.pure.js.map +1 -1
  585. package/Meshes/buffer.d.ts +1 -1
  586. package/Meshes/buffer.js +1 -1
  587. package/Meshes/buffer.js.map +1 -1
  588. package/Meshes/csg.d.ts +3 -3
  589. package/Meshes/csg.js +4 -4
  590. package/Meshes/csg.js.map +1 -1
  591. package/Meshes/csg2.d.ts +1 -1
  592. package/Meshes/csg2.js +38 -11
  593. package/Meshes/csg2.js.map +1 -1
  594. package/Meshes/geodesicMesh.d.ts +1 -1
  595. package/Meshes/geodesicMesh.js +1 -1
  596. package/Meshes/geodesicMesh.js.map +1 -1
  597. package/Meshes/geometry.d.ts +2 -2
  598. package/Meshes/geometry.js +4 -4
  599. package/Meshes/geometry.js.map +1 -1
  600. package/Meshes/lattice.d.ts +1 -1
  601. package/Meshes/lattice.js +1 -1
  602. package/Meshes/lattice.js.map +1 -1
  603. package/Meshes/lattice.material.d.ts +1 -1
  604. package/Meshes/lattice.material.js +1 -1
  605. package/Meshes/lattice.material.js.map +1 -1
  606. package/Meshes/mesh.vertexData.d.ts +2 -2
  607. package/Meshes/mesh.vertexData.js +3 -4
  608. package/Meshes/mesh.vertexData.js.map +1 -1
  609. package/Meshes/mesh.vertexData.subdivide.js +1 -1
  610. package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
  611. package/Meshes/meshBuilder.d.ts +18 -18
  612. package/Meshes/meshBuilder.js +18 -18
  613. package/Meshes/meshBuilder.js.map +1 -1
  614. package/Meshes/meshSimplification.d.ts +1 -1
  615. package/Meshes/meshSimplification.js +4 -4
  616. package/Meshes/meshSimplification.js.map +1 -1
  617. package/Meshes/meshUVSpaceRenderer.d.ts +1 -1
  618. package/Meshes/meshUVSpaceRenderer.js +0 -1
  619. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  620. package/Meshes/meshUtils.d.ts +1 -1
  621. package/Meshes/meshUtils.js +2 -2
  622. package/Meshes/meshUtils.js.map +1 -1
  623. package/Meshes/polygonMesh.d.ts +2 -2
  624. package/Meshes/polygonMesh.js +3 -3
  625. package/Meshes/polygonMesh.js.map +1 -1
  626. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -2
  627. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  628. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
  629. package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
  630. package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
  631. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  632. package/Misc/areaLightsTextureTools.d.ts +1 -1
  633. package/Misc/areaLightsTextureTools.js +3 -3
  634. package/Misc/areaLightsTextureTools.js.map +1 -1
  635. package/Misc/assetsManager.d.ts +4 -4
  636. package/Misc/assetsManager.js +5 -5
  637. package/Misc/assetsManager.js.map +1 -1
  638. package/Misc/basisWorker.js +1 -1
  639. package/Misc/basisWorker.js.map +1 -1
  640. package/Misc/brdfTextureTools.js +1 -1
  641. package/Misc/brdfTextureTools.js.map +1 -1
  642. package/Misc/copyTextureToTexture.d.ts +1 -1
  643. package/Misc/copyTextureToTexture.js +1 -1
  644. package/Misc/copyTextureToTexture.js.map +1 -1
  645. package/Misc/decorators.serialization.js +2 -2
  646. package/Misc/decorators.serialization.js.map +1 -1
  647. package/Misc/depthReducer.d.ts +2 -2
  648. package/Misc/depthReducer.js +2 -2
  649. package/Misc/depthReducer.js.map +1 -1
  650. package/Misc/gradients.d.ts +1 -1
  651. package/Misc/gradients.js +1 -1
  652. package/Misc/gradients.js.map +1 -1
  653. package/Misc/greasedLineTools.d.ts +1 -1
  654. package/Misc/greasedLineTools.js +3 -3
  655. package/Misc/greasedLineTools.js.map +1 -1
  656. package/Misc/halfFloat.d.ts +17 -0
  657. package/Misc/halfFloat.js +131 -0
  658. package/Misc/halfFloat.js.map +1 -0
  659. package/Misc/khronosTextureContainer2.js +1 -1
  660. package/Misc/khronosTextureContainer2.js.map +1 -1
  661. package/Misc/meshExploder.js +1 -1
  662. package/Misc/meshExploder.js.map +1 -1
  663. package/Misc/pivotTools.js +1 -1
  664. package/Misc/pivotTools.js.map +1 -1
  665. package/Misc/rgbdTextureTools.js +1 -1
  666. package/Misc/rgbdTextureTools.js.map +1 -1
  667. package/Misc/sceneOptimizer.js +1 -1
  668. package/Misc/sceneOptimizer.js.map +1 -1
  669. package/Misc/sceneRecorder.js +7 -7
  670. package/Misc/sceneRecorder.js.map +1 -1
  671. package/Misc/sceneSerializer.js +3 -3
  672. package/Misc/sceneSerializer.js.map +1 -1
  673. package/Misc/snapshotRenderingHelper.js +1 -1
  674. package/Misc/snapshotRenderingHelper.js.map +1 -1
  675. package/Misc/textureTools.d.ts +3 -13
  676. package/Misc/textureTools.js +6 -64
  677. package/Misc/textureTools.js.map +1 -1
  678. package/Misc/thinMinMaxReducer.d.ts +1 -1
  679. package/Misc/thinMinMaxReducer.js +1 -1
  680. package/Misc/thinMinMaxReducer.js.map +1 -1
  681. package/Misc/tools.internals.js +1 -1
  682. package/Misc/tools.internals.js.map +1 -1
  683. package/Misc/tools.pure.js +1 -1
  684. package/Misc/tools.pure.js.map +1 -1
  685. package/Misc/trajectoryClassifier.d.ts +1 -1
  686. package/Misc/trajectoryClassifier.js +1 -1
  687. package/Misc/trajectoryClassifier.js.map +1 -1
  688. package/Misc/videoRecorder.js +1 -1
  689. package/Misc/videoRecorder.js.map +1 -1
  690. package/Misc/virtualJoystick.d.ts +1 -1
  691. package/Misc/virtualJoystick.js +1 -1
  692. package/Misc/virtualJoystick.js.map +1 -1
  693. package/Morph/morphTarget.js +1 -1
  694. package/Morph/morphTarget.js.map +1 -1
  695. package/Navigation/Plugins/recastJSPlugin.d.ts +1 -1
  696. package/Navigation/Plugins/recastJSPlugin.js +2 -2
  697. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  698. package/Particles/EmitterTypes/boxParticleEmitter.d.ts +1 -1
  699. package/Particles/EmitterTypes/boxParticleEmitter.js +1 -1
  700. package/Particles/EmitterTypes/boxParticleEmitter.js.map +1 -1
  701. package/Particles/EmitterTypes/coneParticleEmitter.d.ts +1 -1
  702. package/Particles/EmitterTypes/coneParticleEmitter.js +1 -1
  703. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  704. package/Particles/EmitterTypes/customParticleEmitter.d.ts +1 -1
  705. package/Particles/EmitterTypes/customParticleEmitter.js +1 -1
  706. package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
  707. package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +1 -1
  708. package/Particles/EmitterTypes/cylinderParticleEmitter.js +1 -1
  709. package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
  710. package/Particles/EmitterTypes/hemisphericParticleEmitter.d.ts +1 -1
  711. package/Particles/EmitterTypes/hemisphericParticleEmitter.js +1 -1
  712. package/Particles/EmitterTypes/hemisphericParticleEmitter.js.map +1 -1
  713. package/Particles/EmitterTypes/meshParticleEmitter.d.ts +1 -1
  714. package/Particles/EmitterTypes/meshParticleEmitter.js +2 -2
  715. package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
  716. package/Particles/EmitterTypes/pointParticleEmitter.d.ts +1 -1
  717. package/Particles/EmitterTypes/pointParticleEmitter.js +1 -1
  718. package/Particles/EmitterTypes/pointParticleEmitter.js.map +1 -1
  719. package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +1 -1
  720. package/Particles/EmitterTypes/sphereParticleEmitter.js +1 -1
  721. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  722. package/Particles/Node/nodeParticleBuildState.d.ts +4 -4
  723. package/Particles/Node/nodeParticleBuildState.js +2 -2
  724. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  725. package/Particles/Node/nodeParticleSystemSet.d.ts +2 -2
  726. package/Particles/Node/nodeParticleSystemSet.helper.js +31 -31
  727. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  728. package/Particles/Node/nodeParticleSystemSet.js +8 -8
  729. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  730. package/Particles/attractor.d.ts +1 -1
  731. package/Particles/attractor.js +1 -1
  732. package/Particles/attractor.js.map +1 -1
  733. package/Particles/flowMap.d.ts +7 -1
  734. package/Particles/flowMap.js +7 -1
  735. package/Particles/flowMap.js.map +1 -1
  736. package/Particles/particle.d.ts +2 -2
  737. package/Particles/particle.js +2 -2
  738. package/Particles/particle.js.map +1 -1
  739. package/Particles/particleHelper.js +5 -5
  740. package/Particles/particleHelper.js.map +1 -1
  741. package/Particles/particleSystem.functions.d.ts +1 -1
  742. package/Particles/particleSystem.functions.js +1 -1
  743. package/Particles/particleSystem.functions.js.map +1 -1
  744. package/Particles/particleSystemSet.d.ts +1 -1
  745. package/Particles/particleSystemSet.js +5 -5
  746. package/Particles/particleSystemSet.js.map +1 -1
  747. package/Particles/pointsCloudSystem.d.ts +1 -1
  748. package/Particles/pointsCloudSystem.js +6 -6
  749. package/Particles/pointsCloudSystem.js.map +1 -1
  750. package/Particles/solidParticle.d.ts +2 -2
  751. package/Particles/solidParticle.js +3 -3
  752. package/Particles/solidParticle.js.map +1 -1
  753. package/Particles/solidParticleSystem.d.ts +4 -4
  754. package/Particles/solidParticleSystem.js +7 -7
  755. package/Particles/solidParticleSystem.js.map +1 -1
  756. package/Particles/subEmitter.js +1 -1
  757. package/Particles/subEmitter.js.map +1 -1
  758. package/Particles/thinParticleSystem.function.js +2 -2
  759. package/Particles/thinParticleSystem.function.js.map +1 -1
  760. package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
  761. package/Physics/Plugins/cannonJSPlugin.js +1 -1
  762. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  763. package/Physics/castingResult.d.ts +1 -1
  764. package/Physics/castingResult.js +1 -1
  765. package/Physics/castingResult.js.map +1 -1
  766. package/Physics/physicsHelper.d.ts +1 -1
  767. package/Physics/physicsHelper.js +4 -4
  768. package/Physics/physicsHelper.js.map +1 -1
  769. package/Physics/physicsImpostor.d.ts +1 -1
  770. package/Physics/physicsImpostor.js +1 -1
  771. package/Physics/physicsImpostor.js.map +1 -1
  772. package/Physics/physicsRaycastResult.d.ts +1 -1
  773. package/Physics/physicsRaycastResult.js +1 -1
  774. package/Physics/physicsRaycastResult.js.map +1 -1
  775. package/Physics/v1/Plugins/ammoJSPlugin.d.ts +2 -2
  776. package/Physics/v1/Plugins/ammoJSPlugin.js +5 -5
  777. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  778. package/Physics/v1/Plugins/oimoJSPlugin.d.ts +2 -2
  779. package/Physics/v1/Plugins/oimoJSPlugin.js +2 -2
  780. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  781. package/Physics/v1/physicsEngine.d.ts +1 -1
  782. package/Physics/v1/physicsEngine.js +1 -1
  783. package/Physics/v1/physicsEngine.js.map +1 -1
  784. package/Physics/v2/Plugins/havokPlugin.d.ts +14 -2
  785. package/Physics/v2/Plugins/havokPlugin.js +45 -7
  786. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  787. package/Physics/v2/characterController.d.ts +1 -1
  788. package/Physics/v2/characterController.js +2 -2
  789. package/Physics/v2/characterController.js.map +1 -1
  790. package/Physics/v2/physicsAggregate.d.ts +3 -3
  791. package/Physics/v2/physicsAggregate.js +10 -6
  792. package/Physics/v2/physicsAggregate.js.map +1 -1
  793. package/Physics/v2/physicsBody.d.ts +1 -1
  794. package/Physics/v2/physicsBody.js +1 -1
  795. package/Physics/v2/physicsBody.js.map +1 -1
  796. package/Physics/v2/physicsEngine.d.ts +1 -1
  797. package/Physics/v2/physicsEngine.js +1 -1
  798. package/Physics/v2/physicsEngine.js.map +1 -1
  799. package/Physics/v2/physicsShape.d.ts +1 -1
  800. package/Physics/v2/physicsShape.js +1 -1
  801. package/Physics/v2/physicsShape.js.map +1 -1
  802. package/Physics/v2/ragdoll.d.ts +2 -2
  803. package/Physics/v2/ragdoll.js +2 -2
  804. package/Physics/v2/ragdoll.js.map +1 -1
  805. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.d.ts +1 -0
  806. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +8 -6
  807. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  808. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +1 -1
  809. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -1
  810. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
  811. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  812. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +3 -2
  813. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  814. package/PostProcesses/bloomEffect.d.ts +1 -1
  815. package/PostProcesses/bloomEffect.js +4 -4
  816. package/PostProcesses/bloomEffect.js.map +1 -1
  817. package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
  818. package/PostProcesses/depthOfFieldEffect.js +3 -3
  819. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  820. package/PostProcesses/depthOfFieldMergePostProcess.d.ts +1 -1
  821. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -1
  822. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  823. package/PostProcesses/highlightsPostProcess.d.ts +1 -1
  824. package/PostProcesses/highlightsPostProcess.js +1 -1
  825. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  826. package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
  827. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  828. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  829. package/PostProcesses/postProcessManager.d.ts +3 -0
  830. package/PostProcesses/postProcessManager.js +4 -1
  831. package/PostProcesses/postProcessManager.js.map +1 -1
  832. package/PostProcesses/subSurfaceScatteringPostProcess.pure.d.ts +1 -0
  833. package/PostProcesses/subSurfaceScatteringPostProcess.pure.js +10 -0
  834. package/PostProcesses/subSurfaceScatteringPostProcess.pure.js.map +1 -1
  835. package/PostProcesses/thinAnaglyphPostProcess.d.ts +1 -1
  836. package/PostProcesses/thinAnaglyphPostProcess.js +1 -1
  837. package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -1
  838. package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
  839. package/PostProcesses/thinBlackAndWhitePostProcess.js +1 -1
  840. package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
  841. package/PostProcesses/thinBloomEffect.js +1 -1
  842. package/PostProcesses/thinBloomEffect.js.map +1 -1
  843. package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
  844. package/PostProcesses/thinBloomMergePostProcess.js +1 -1
  845. package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
  846. package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
  847. package/PostProcesses/thinBlurPostProcess.js +1 -1
  848. package/PostProcesses/thinBlurPostProcess.js.map +1 -1
  849. package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +2 -2
  850. package/PostProcesses/thinChromaticAberrationPostProcess.js +2 -2
  851. package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
  852. package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
  853. package/PostProcesses/thinCircleOfConfusionPostProcess.js +1 -1
  854. package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
  855. package/PostProcesses/thinColorCorrectionPostProcess.d.ts +1 -1
  856. package/PostProcesses/thinColorCorrectionPostProcess.js +2 -2
  857. package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -1
  858. package/PostProcesses/thinConvolutionPostProcess.d.ts +1 -1
  859. package/PostProcesses/thinConvolutionPostProcess.js +1 -1
  860. package/PostProcesses/thinConvolutionPostProcess.js.map +1 -1
  861. package/PostProcesses/thinCustomPostProcess.d.ts +1 -1
  862. package/PostProcesses/thinCustomPostProcess.js +1 -1
  863. package/PostProcesses/thinCustomPostProcess.js.map +1 -1
  864. package/PostProcesses/thinDepthOfFieldEffect.d.ts +3 -0
  865. package/PostProcesses/thinDepthOfFieldEffect.js +4 -1
  866. package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
  867. package/PostProcesses/thinDepthOfFieldMergePostProcess.d.ts +1 -1
  868. package/PostProcesses/thinDepthOfFieldMergePostProcess.js +1 -1
  869. package/PostProcesses/thinDepthOfFieldMergePostProcess.js.map +1 -1
  870. package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
  871. package/PostProcesses/thinExtractHighlightsPostProcess.js +1 -1
  872. package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
  873. package/PostProcesses/thinFXAAPostProcess.d.ts +2 -2
  874. package/PostProcesses/thinFXAAPostProcess.js +2 -2
  875. package/PostProcesses/thinFXAAPostProcess.js.map +1 -1
  876. package/PostProcesses/thinFilterPostProcess.d.ts +2 -2
  877. package/PostProcesses/thinFilterPostProcess.js +2 -2
  878. package/PostProcesses/thinFilterPostProcess.js.map +1 -1
  879. package/PostProcesses/thinGrainPostProcess.d.ts +1 -1
  880. package/PostProcesses/thinGrainPostProcess.js +1 -1
  881. package/PostProcesses/thinGrainPostProcess.js.map +1 -1
  882. package/PostProcesses/thinImageProcessingPostProcess.d.ts +2 -2
  883. package/PostProcesses/thinImageProcessingPostProcess.js +2 -2
  884. package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
  885. package/PostProcesses/thinMotionBlurPostProcess.d.ts +1 -1
  886. package/PostProcesses/thinMotionBlurPostProcess.js +2 -2
  887. package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -1
  888. package/PostProcesses/thinPassPostProcess.d.ts +1 -1
  889. package/PostProcesses/thinPassPostProcess.js +1 -1
  890. package/PostProcesses/thinPassPostProcess.js.map +1 -1
  891. package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +1 -1
  892. package/PostProcesses/thinSSAO2BlurPostProcess.js +1 -1
  893. package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -1
  894. package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +1 -1
  895. package/PostProcesses/thinSSAO2CombinePostProcess.js +2 -2
  896. package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -1
  897. package/PostProcesses/thinSSAO2PostProcess.d.ts +7 -2
  898. package/PostProcesses/thinSSAO2PostProcess.js +36 -4
  899. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
  900. package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
  901. package/PostProcesses/thinSSRBlurCombinerPostProcess.js +2 -2
  902. package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
  903. package/PostProcesses/thinSSRBlurPostProcess.d.ts +2 -2
  904. package/PostProcesses/thinSSRBlurPostProcess.js +2 -2
  905. package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
  906. package/PostProcesses/thinSSRPostProcess.d.ts +1 -1
  907. package/PostProcesses/thinSSRPostProcess.js +2 -2
  908. package/PostProcesses/thinSSRPostProcess.js.map +1 -1
  909. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.d.ts +1 -1
  910. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js +1 -1
  911. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js.map +1 -1
  912. package/PostProcesses/thinSharpenPostProcess.d.ts +1 -1
  913. package/PostProcesses/thinSharpenPostProcess.js +1 -1
  914. package/PostProcesses/thinSharpenPostProcess.js.map +1 -1
  915. package/PostProcesses/thinTAAPostProcess.d.ts +3 -3
  916. package/PostProcesses/thinTAAPostProcess.js +4 -4
  917. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  918. package/PostProcesses/thinTonemapPostProcess.d.ts +1 -1
  919. package/PostProcesses/thinTonemapPostProcess.js +1 -1
  920. package/PostProcesses/thinTonemapPostProcess.js.map +1 -1
  921. package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +1 -1
  922. package/PostProcesses/vrDistortionCorrectionPostProcess.js +3 -3
  923. package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
  924. package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +2 -2
  925. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +4 -4
  926. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  927. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +2 -2
  928. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +4 -4
  929. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  930. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +3 -3
  931. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +4 -4
  932. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  933. package/Rendering/depthPeelingRenderer.d.ts +1 -1
  934. package/Rendering/depthPeelingRenderer.js +2 -2
  935. package/Rendering/depthPeelingRenderer.js.map +1 -1
  936. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
  937. package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
  938. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  939. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
  940. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -2
  941. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  942. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +3 -3
  943. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -3
  944. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  945. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
  946. package/Rendering/fluidRenderer/fluidRenderingTextures.js +3 -3
  947. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  948. package/Rendering/iblCdfGenerator.d.ts +3 -3
  949. package/Rendering/iblCdfGenerator.js +5 -5
  950. package/Rendering/iblCdfGenerator.js.map +1 -1
  951. package/Rendering/renderingGroup.js +1 -1
  952. package/Rendering/renderingGroup.js.map +1 -1
  953. package/Rendering/subSurfaceConfiguration.d.ts +2 -2
  954. package/Rendering/subSurfaceConfiguration.js +2 -2
  955. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  956. package/Rendering/utilityLayerRenderer.d.ts +2 -2
  957. package/Rendering/utilityLayerRenderer.js +4 -4
  958. package/Rendering/utilityLayerRenderer.js.map +1 -1
  959. package/Shaders/ssao2.fragment.js +10 -2
  960. package/Shaders/ssao2.fragment.js.map +1 -1
  961. package/ShadersWGSL/ssao2.fragment.js +10 -2
  962. package/ShadersWGSL/ssao2.fragment.js.map +1 -1
  963. package/SmartAssets/smartAssetSerializer.js +1 -1
  964. package/SmartAssets/smartAssetSerializer.js.map +1 -1
  965. package/Sprites/sprite.d.ts +2 -2
  966. package/Sprites/sprite.js +2 -2
  967. package/Sprites/sprite.js.map +1 -1
  968. package/Sprites/spriteManager.d.ts +2 -2
  969. package/Sprites/spriteManager.js +4 -5
  970. package/Sprites/spriteManager.js.map +1 -1
  971. package/Sprites/spritePackedManager.js +1 -1
  972. package/Sprites/spritePackedManager.js.map +1 -1
  973. package/Sprites/spriteRenderer.js +2 -2
  974. package/Sprites/spriteRenderer.js.map +1 -1
  975. package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
  976. package/XR/features/WebXRHitTestLegacy.js +2 -2
  977. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  978. package/XR/motionController/webXRAbstractMotionController.js +2 -2
  979. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  980. package/XR/motionController/webXRGenericMotionController.js +2 -2
  981. package/XR/motionController/webXRGenericMotionController.js.map +1 -1
  982. package/XR/motionController/webXRProfiledMotionController.js +4 -4
  983. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  984. package/XR/webXRCamera.d.ts +3 -3
  985. package/XR/webXRCamera.js +4 -4
  986. package/XR/webXRCamera.js.map +1 -1
  987. package/XR/webXRDefaultExperience.d.ts +4 -4
  988. package/XR/webXRDefaultExperience.js +4 -4
  989. package/XR/webXRDefaultExperience.js.map +1 -1
  990. package/XR/webXREnterExitUI.js +1 -1
  991. package/XR/webXREnterExitUI.js.map +1 -1
  992. package/XR/webXRExperienceHelper.js +2 -2
  993. package/XR/webXRExperienceHelper.js.map +1 -1
  994. package/XR/webXRFeaturesManager.d.ts +47 -0
  995. package/XR/webXRFeaturesManager.js +1 -1
  996. package/XR/webXRFeaturesManager.js.map +1 -1
  997. package/XR/webXRInput.js +1 -1
  998. package/XR/webXRInput.js.map +1 -1
  999. package/XR/webXRInputSource.js +4 -4
  1000. package/XR/webXRInputSource.js.map +1 -1
  1001. package/XR/webXRManagedOutputCanvas.js +1 -1
  1002. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  1003. package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
  1004. package/XR/webXRRenderTargetTextureProvider.js +1 -1
  1005. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  1006. package/assetContainer.d.ts +4 -4
  1007. package/assetContainer.js +6 -6
  1008. package/assetContainer.js.map +1 -1
  1009. package/node.d.ts +1 -1
  1010. package/node.js +6 -2
  1011. package/node.js.map +1 -1
  1012. package/package.json +44 -174
@@ -1 +1 @@
1
- {"version":3,"file":"computeShaderTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type BaseTexture,\r\n type DataBuffer,\r\n type ExternalTexture,\r\n type FrameGraph,\r\n type FrameGraphContext,\r\n type FrameGraphPass,\r\n type IComputeShaderOptions,\r\n type IComputeShaderPath,\r\n type InternalTexture,\r\n type StorageBuffer,\r\n type TextureSampler,\r\n type VideoTexture,\r\n} from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ComputeShader } from \"core/Compute/computeShader\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Task used to execute a compute shader (WebGPU only)\r\n */\r\nexport class FrameGraphComputeShaderTask extends FrameGraphTask {\r\n private readonly _notSupported: boolean;\r\n private readonly _cs: ComputeShader;\r\n private readonly _ubo: { [name: string]: { ubo: UniformBuffer; autoUpdate: boolean } };\r\n\r\n /**\r\n * Defines the dispatch size for the compute shader\r\n */\r\n public dispatchSize = new Vector3(1, 1, 1);\r\n\r\n /**\r\n * Defines an indirect dispatch buffer and offset.\r\n * If set, this will be used instead of the dispatchSize property and an indirect dispatch will be performed.\r\n * \"offset\" is the offset in the buffer where the workgroup counts are stored (default: 0)\r\n */\r\n public indirectDispatch?: { buffer: StorageBuffer | DataBuffer; offset?: number };\r\n\r\n /**\r\n * An optional execute function that will be called at the beginning of the task execution\r\n */\r\n public execute?: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * Gets the compute shader used by the task\r\n */\r\n public get computeShader(): ComputeShader {\r\n return this._cs;\r\n }\r\n\r\n /**\r\n * Gets a uniform buffer created by a call to createUniformBuffer()\r\n * @param name Name of the uniform buffer\r\n * @returns The uniform buffer\r\n */\r\n public getUniformBuffer(name: string): UniformBuffer {\r\n return this._ubo[name]?.ubo;\r\n }\r\n\r\n /**\r\n * Creates a new compute shader task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param shaderPath Defines the route to the shader code in one of three ways:\r\n * * object: \\{ compute: \"custom\" \\}, used with ShaderStore.ShadersStoreWGSL[\"customComputeShader\"]\r\n * * object: \\{ computeElement: \"HTMLElementId\" \\}, used with shader code in script tags\r\n * * object: \\{ computeSource: \"compute shader code string\" \\}, where the string contains the shader code\r\n * * string: try first to find the code in ShaderStore.ShadersStoreWGSL[shaderPath + \"ComputeShader\"]. If not, assumes it is a file with name shaderPath.compute.fx in index.html folder.\r\n * @param options Define the options used to create the shader\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, shaderPath: IComputeShaderPath | string, options: Partial<IComputeShaderOptions> = {}) {\r\n super(name, frameGraph);\r\n\r\n if (!frameGraph.engine.getCaps().supportComputeShaders) {\r\n this._notSupported = true;\r\n Logger.Error(\"This engine does not support compute shaders!\");\r\n return;\r\n }\r\n\r\n this._notSupported = false;\r\n this._cs = new ComputeShader(name + \"_cs\", frameGraph.engine, shaderPath, options);\r\n this._ubo = {};\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this._notSupported ? true : this._cs.isReady();\r\n }\r\n\r\n /**\r\n * Creates a uniform buffer and binds it to the shader\r\n * @param name Name of the uniform buffer\r\n * @param description Description of the uniform buffer: names and sizes (in floats) of the uniforms\r\n * @param autoUpdate If the UBO must be updated automatically before each dispatch (default: true)\r\n * @returns The created uniform buffer\r\n */\r\n public createUniformBuffer(name: string, description: { [name: string]: number }, autoUpdate = true): UniformBuffer {\r\n const uBuffer = new UniformBuffer(this._frameGraph.engine);\r\n\r\n this._ubo[name] = { ubo: uBuffer, autoUpdate };\r\n\r\n for (const key in description) {\r\n uBuffer.addUniform(key, description[key]);\r\n }\r\n\r\n this._cs.setUniformBuffer(name, uBuffer);\r\n\r\n return uBuffer;\r\n }\r\n\r\n /**\r\n * Binds a texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @param bindSampler Bind the sampler corresponding to the texture (default: true). The sampler will be bound just before the binding index of the texture\r\n */\r\n public setTexture(name: string, texture: BaseTexture, bindSampler = true): void {\r\n this._cs.setTexture(name, texture, bindSampler);\r\n }\r\n\r\n /**\r\n * Binds an internal texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setInternalTexture(name: string, texture: InternalTexture): void {\r\n this._cs.setInternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a storage texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setStorageTexture(name: string, texture: BaseTexture): void {\r\n this._cs.setStorageTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds an external texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setExternalTexture(name: string, texture: ExternalTexture): void {\r\n this._cs.setExternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a video texture to the shader (by binding the external texture attached to this video)\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @returns true if the video texture was successfully bound, else false. false will be returned if the current engine does not support external textures\r\n */\r\n public setVideoTexture(name: string, texture: VideoTexture) {\r\n return this._cs.setVideoTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a uniform buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setUniformBuffer(name: string, buffer: UniformBuffer | DataBuffer): void {\r\n this._cs.setUniformBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a storage buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setStorageBuffer(name: string, buffer: StorageBuffer | DataBuffer): void {\r\n this._cs.setStorageBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a texture sampler to the shader\r\n * @param name Binding name of the sampler\r\n * @param sampler Sampler to bind\r\n */\r\n public setTextureSampler(name: string, sampler: TextureSampler): void {\r\n this._cs.setTextureSampler(name, sampler);\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphComputeShaderTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses?: boolean): FrameGraphPass<FrameGraphContext> {\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n if (this._notSupported) {\r\n pass.setExecuteFunc(() => {});\r\n } else {\r\n pass.setExecuteFunc((context) => {\r\n this.execute?.(context);\r\n\r\n for (const key in this._ubo) {\r\n const uboEntry = this._ubo[key];\r\n if (uboEntry.autoUpdate) {\r\n uboEntry.ubo.update();\r\n }\r\n }\r\n\r\n if (this.indirectDispatch) {\r\n context.pushDebugGroup(`Indirect dispatch compute shader (${this.name})`);\r\n this._cs.dispatchIndirect(this.indirectDispatch.buffer, this.indirectDispatch.offset);\r\n context.popDebugGroup();\r\n } else {\r\n context.pushDebugGroup(`Dispatch compute shader (${this.name})`);\r\n this._cs.dispatch(this.dispatchSize.x, this.dispatchSize.y, this.dispatchSize.z);\r\n context.popDebugGroup();\r\n }\r\n });\r\n }\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n for (const key in this._ubo) {\r\n this._ubo[key].ubo.dispose();\r\n }\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"computeShaderTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type BaseTexture,\r\n type DataBuffer,\r\n type ExternalTexture,\r\n type FrameGraph,\r\n type FrameGraphContext,\r\n type FrameGraphPass,\r\n type IComputeShaderOptions,\r\n type IComputeShaderPath,\r\n type InternalTexture,\r\n type StorageBuffer,\r\n type TextureSampler,\r\n type VideoTexture,\r\n} from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ComputeShader } from \"core/Compute/computeShader.pure\";\r\nimport { Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Task used to execute a compute shader (WebGPU only)\r\n */\r\nexport class FrameGraphComputeShaderTask extends FrameGraphTask {\r\n private readonly _notSupported: boolean;\r\n private readonly _cs: ComputeShader;\r\n private readonly _ubo: { [name: string]: { ubo: UniformBuffer; autoUpdate: boolean } };\r\n\r\n /**\r\n * Defines the dispatch size for the compute shader\r\n */\r\n public dispatchSize = new Vector3(1, 1, 1);\r\n\r\n /**\r\n * Defines an indirect dispatch buffer and offset.\r\n * If set, this will be used instead of the dispatchSize property and an indirect dispatch will be performed.\r\n * \"offset\" is the offset in the buffer where the workgroup counts are stored (default: 0)\r\n */\r\n public indirectDispatch?: { buffer: StorageBuffer | DataBuffer; offset?: number };\r\n\r\n /**\r\n * An optional execute function that will be called at the beginning of the task execution\r\n */\r\n public execute?: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * Gets the compute shader used by the task\r\n */\r\n public get computeShader(): ComputeShader {\r\n return this._cs;\r\n }\r\n\r\n /**\r\n * Gets a uniform buffer created by a call to createUniformBuffer()\r\n * @param name Name of the uniform buffer\r\n * @returns The uniform buffer\r\n */\r\n public getUniformBuffer(name: string): UniformBuffer {\r\n return this._ubo[name]?.ubo;\r\n }\r\n\r\n /**\r\n * Creates a new compute shader task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param shaderPath Defines the route to the shader code in one of three ways:\r\n * * object: \\{ compute: \"custom\" \\}, used with ShaderStore.ShadersStoreWGSL[\"customComputeShader\"]\r\n * * object: \\{ computeElement: \"HTMLElementId\" \\}, used with shader code in script tags\r\n * * object: \\{ computeSource: \"compute shader code string\" \\}, where the string contains the shader code\r\n * * string: try first to find the code in ShaderStore.ShadersStoreWGSL[shaderPath + \"ComputeShader\"]. If not, assumes it is a file with name shaderPath.compute.fx in index.html folder.\r\n * @param options Define the options used to create the shader\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, shaderPath: IComputeShaderPath | string, options: Partial<IComputeShaderOptions> = {}) {\r\n super(name, frameGraph);\r\n\r\n if (!frameGraph.engine.getCaps().supportComputeShaders) {\r\n this._notSupported = true;\r\n Logger.Error(\"This engine does not support compute shaders!\");\r\n return;\r\n }\r\n\r\n this._notSupported = false;\r\n this._cs = new ComputeShader(name + \"_cs\", frameGraph.engine, shaderPath, options);\r\n this._ubo = {};\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this._notSupported ? true : this._cs.isReady();\r\n }\r\n\r\n /**\r\n * Creates a uniform buffer and binds it to the shader\r\n * @param name Name of the uniform buffer\r\n * @param description Description of the uniform buffer: names and sizes (in floats) of the uniforms\r\n * @param autoUpdate If the UBO must be updated automatically before each dispatch (default: true)\r\n * @returns The created uniform buffer\r\n */\r\n public createUniformBuffer(name: string, description: { [name: string]: number }, autoUpdate = true): UniformBuffer {\r\n const uBuffer = new UniformBuffer(this._frameGraph.engine);\r\n\r\n this._ubo[name] = { ubo: uBuffer, autoUpdate };\r\n\r\n for (const key in description) {\r\n uBuffer.addUniform(key, description[key]);\r\n }\r\n\r\n this._cs.setUniformBuffer(name, uBuffer);\r\n\r\n return uBuffer;\r\n }\r\n\r\n /**\r\n * Binds a texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @param bindSampler Bind the sampler corresponding to the texture (default: true). The sampler will be bound just before the binding index of the texture\r\n */\r\n public setTexture(name: string, texture: BaseTexture, bindSampler = true): void {\r\n this._cs.setTexture(name, texture, bindSampler);\r\n }\r\n\r\n /**\r\n * Binds an internal texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setInternalTexture(name: string, texture: InternalTexture): void {\r\n this._cs.setInternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a storage texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setStorageTexture(name: string, texture: BaseTexture): void {\r\n this._cs.setStorageTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds an external texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setExternalTexture(name: string, texture: ExternalTexture): void {\r\n this._cs.setExternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a video texture to the shader (by binding the external texture attached to this video)\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @returns true if the video texture was successfully bound, else false. false will be returned if the current engine does not support external textures\r\n */\r\n public setVideoTexture(name: string, texture: VideoTexture) {\r\n return this._cs.setVideoTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a uniform buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setUniformBuffer(name: string, buffer: UniformBuffer | DataBuffer): void {\r\n this._cs.setUniformBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a storage buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setStorageBuffer(name: string, buffer: StorageBuffer | DataBuffer): void {\r\n this._cs.setStorageBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a texture sampler to the shader\r\n * @param name Binding name of the sampler\r\n * @param sampler Sampler to bind\r\n */\r\n public setTextureSampler(name: string, sampler: TextureSampler): void {\r\n this._cs.setTextureSampler(name, sampler);\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphComputeShaderTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses?: boolean): FrameGraphPass<FrameGraphContext> {\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n if (this._notSupported) {\r\n pass.setExecuteFunc(() => {});\r\n } else {\r\n pass.setExecuteFunc((context) => {\r\n this.execute?.(context);\r\n\r\n for (const key in this._ubo) {\r\n const uboEntry = this._ubo[key];\r\n if (uboEntry.autoUpdate) {\r\n uboEntry.ubo.update();\r\n }\r\n }\r\n\r\n if (this.indirectDispatch) {\r\n context.pushDebugGroup(`Indirect dispatch compute shader (${this.name})`);\r\n this._cs.dispatchIndirect(this.indirectDispatch.buffer, this.indirectDispatch.offset);\r\n context.popDebugGroup();\r\n } else {\r\n context.pushDebugGroup(`Dispatch compute shader (${this.name})`);\r\n this._cs.dispatch(this.dispatchSize.x, this.dispatchSize.y, this.dispatchSize.z);\r\n context.popDebugGroup();\r\n }\r\n });\r\n }\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n for (const key in this._ubo) {\r\n this._ubo[key].ubo.dispose();\r\n }\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type FrameGraph, type FrameGraphObjectList, type FrameGraphShadowGeneratorTask } from "../../../index.js";
2
- import { LightingVolume } from "../../../Lights/lightingVolume.js";
2
+ import { LightingVolume } from "../../../Lights/lightingVolume.pure.js";
3
3
  import { FrameGraphTask } from "../../frameGraphTask.js";
4
4
  /**
5
5
  * Task used to create a lighting volume from a directional light's shadow generator.
@@ -1,5 +1,5 @@
1
- import { LightingVolume } from "../../../Lights/lightingVolume.js";
2
- import { DirectionalLight } from "../../../Lights/directionalLight.js";
1
+ import { LightingVolume } from "../../../Lights/lightingVolume.pure.js";
2
+ import { DirectionalLight } from "../../../Lights/directionalLight.pure.js";
3
3
  import { FrameGraphTask } from "../../frameGraphTask.js";
4
4
  /**
5
5
  * Task used to create a lighting volume from a directional light's shadow generator.
@@ -1 +1 @@
1
- {"version":3,"file":"lightingVolumeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,cAAc;IAiB5D,IAAoB,IAAI;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAoB,IAAI,CAAC,IAAY;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAEjE,IAAI,CAAC,wBAAwB,GAAG;YAC5B,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAClC,eAAe,EAAE,EAAE;SACtB,CAAC;IACN,CAAC;IAEe,OAAO;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEe,YAAY;QACxB,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAEzC,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;QAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEvF,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC1D,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEe,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphObjectList, type FrameGraphShadowGeneratorTask } from \"core/index\";\r\nimport { LightingVolume } from \"core/Lights/lightingVolume\";\r\nimport { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to create a lighting volume from a directional light's shadow generator.\r\n */\r\nexport class FrameGraphLightingVolumeTask extends FrameGraphTask {\r\n /**\r\n * The shadow generator used to create the lighting volume.\r\n */\r\n public shadowGenerator: FrameGraphShadowGeneratorTask;\r\n\r\n /**\r\n * The output object list containing the lighting volume mesh.\r\n * You can get the mesh by doing outputMeshLightingVolume.meshes[0]\r\n */\r\n public readonly outputMeshLightingVolume: FrameGraphObjectList;\r\n\r\n /**\r\n * The lighting volume created by this task.\r\n */\r\n public readonly lightingVolume: LightingVolume;\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this.lightingVolume) {\r\n this.lightingVolume.name = name;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new FrameGraphLightingVolumeTask.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph instance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.lightingVolume = new LightingVolume(name, frameGraph.scene);\r\n\r\n this.outputMeshLightingVolume = {\r\n meshes: [this.lightingVolume.mesh],\r\n particleSystems: [],\r\n };\r\n }\r\n\r\n public override isReady() {\r\n const isReady = this.lightingVolume.isReady();\r\n if (isReady) {\r\n this.lightingVolume._setComputeShaderFastMode(true);\r\n }\r\n return isReady;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphLightingVolumeTask\";\r\n }\r\n\r\n public record() {\r\n if (this.shadowGenerator === undefined) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: shadowGenerator is required`);\r\n }\r\n\r\n const light = this.shadowGenerator.light;\r\n\r\n if (!(light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: light must be a directional light`);\r\n }\r\n\r\n this.lightingVolume.shadowGenerator = this.shadowGenerator.shadowGenerator;\r\n\r\n const pass = this._frameGraph.addObjectListPass(this.name);\r\n\r\n pass.setObjectList(this.outputMeshLightingVolume);\r\n pass.setExecuteFunc(() => {\r\n this.lightingVolume.update();\r\n });\r\n\r\n const passDisabled = this._frameGraph.addObjectListPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setObjectList(this.outputMeshLightingVolume);\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.lightingVolume.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"lightingVolumeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,cAAc;IAiB5D,IAAoB,IAAI;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAoB,IAAI,CAAC,IAAY;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAEjE,IAAI,CAAC,wBAAwB,GAAG;YAC5B,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAClC,eAAe,EAAE,EAAE;SACtB,CAAC;IACN,CAAC;IAEe,OAAO;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEe,YAAY;QACxB,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAEzC,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;QAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEvF,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC1D,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEe,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphObjectList, type FrameGraphShadowGeneratorTask } from \"core/index\";\r\nimport { LightingVolume } from \"core/Lights/lightingVolume.pure\";\r\nimport { DirectionalLight } from \"core/Lights/directionalLight.pure\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to create a lighting volume from a directional light's shadow generator.\r\n */\r\nexport class FrameGraphLightingVolumeTask extends FrameGraphTask {\r\n /**\r\n * The shadow generator used to create the lighting volume.\r\n */\r\n public shadowGenerator: FrameGraphShadowGeneratorTask;\r\n\r\n /**\r\n * The output object list containing the lighting volume mesh.\r\n * You can get the mesh by doing outputMeshLightingVolume.meshes[0]\r\n */\r\n public readonly outputMeshLightingVolume: FrameGraphObjectList;\r\n\r\n /**\r\n * The lighting volume created by this task.\r\n */\r\n public readonly lightingVolume: LightingVolume;\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this.lightingVolume) {\r\n this.lightingVolume.name = name;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new FrameGraphLightingVolumeTask.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph instance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.lightingVolume = new LightingVolume(name, frameGraph.scene);\r\n\r\n this.outputMeshLightingVolume = {\r\n meshes: [this.lightingVolume.mesh],\r\n particleSystems: [],\r\n };\r\n }\r\n\r\n public override isReady() {\r\n const isReady = this.lightingVolume.isReady();\r\n if (isReady) {\r\n this.lightingVolume._setComputeShaderFastMode(true);\r\n }\r\n return isReady;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphLightingVolumeTask\";\r\n }\r\n\r\n public record() {\r\n if (this.shadowGenerator === undefined) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: shadowGenerator is required`);\r\n }\r\n\r\n const light = this.shadowGenerator.light;\r\n\r\n if (!(light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: light must be a directional light`);\r\n }\r\n\r\n this.lightingVolume.shadowGenerator = this.shadowGenerator.shadowGenerator;\r\n\r\n const pass = this._frameGraph.addObjectListPass(this.name);\r\n\r\n pass.setObjectList(this.outputMeshLightingVolume);\r\n pass.setExecuteFunc(() => {\r\n this.lightingVolume.update();\r\n });\r\n\r\n const passDisabled = this._frameGraph.addObjectListPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setObjectList(this.outputMeshLightingVolume);\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.lightingVolume.dispose();\r\n }\r\n}\r\n"]}
@@ -14,5 +14,12 @@ export declare class FrameGraphBlurTask extends FrameGraphPostProcessTask {
14
14
  */
15
15
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlurPostProcess);
16
16
  getClassName(): string;
17
+ /**
18
+ * Records the blur task into the frame graph.
19
+ * @param skipCreationOfDisabledPasses defines whether disabled passes should be skipped
20
+ * @param additionalExecute defines an optional callback executed by the pass
21
+ * @param additionalBindings defines an optional callback used to bind extra resources
22
+ * @returns the recorded render pass
23
+ */
17
24
  record(skipCreationOfDisabledPasses?: boolean, additionalExecute?: (context: FrameGraphRenderContext) => void, additionalBindings?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass;
18
25
  }
@@ -1,6 +1,6 @@
1
1
  import { ThinBlurPostProcess } from "../../../PostProcesses/thinBlurPostProcess.js";
2
2
  import { FrameGraphPostProcessTask } from "./postProcessTask.js";
3
- import { Vector2 } from "../../../Maths/math.vector.js";
3
+ import { Vector2 } from "../../../Maths/math.vector.pure.js";
4
4
  /**
5
5
  * Task which applies a blur post process.
6
6
  */
@@ -17,6 +17,13 @@ export class FrameGraphBlurTask extends FrameGraphPostProcessTask {
17
17
  getClassName() {
18
18
  return "FrameGraphBlurTask";
19
19
  }
20
+ /**
21
+ * Records the blur task into the frame graph.
22
+ * @param skipCreationOfDisabledPasses defines whether disabled passes should be skipped
23
+ * @param additionalExecute defines an optional callback executed by the pass
24
+ * @param additionalBindings defines an optional callback used to bind extra resources
25
+ * @returns the recorded render pass
26
+ */
20
27
  record(skipCreationOfDisabledPasses = false, additionalExecute, additionalBindings) {
21
28
  const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);
22
29
  this.postProcess.textureWidth = this._outputWidth; // should be _sourceWidth, but to avoid a breaking change, we use _outputWidth (BlurPostProcess uses _outputTexture to get width/height)
@@ -1 +1 @@
1
- {"version":3,"file":"blurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,yBAAyB;IAG7D;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAqC;QACnF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxH,CAAC;IAEe,YAAY;QACxB,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,wIAAwI;QAC3L,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,2BAA2B;QAEhF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphRenderContext, type FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinBlurPostProcess } from \"core/PostProcesses/thinBlurPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Task which applies a blur post process.\r\n */\r\nexport class FrameGraphBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinBlurPostProcess;\r\n\r\n /**\r\n * Constructs a new blur task.\r\n * @param name Name of the task.\r\n * @param frameGraph Frame graph this task is associated with.\r\n * @param thinPostProcess The thin post process to use for the blur effect.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBlurTask\";\r\n }\r\n\r\n public override record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);\r\n\r\n this.postProcess.textureWidth = this._outputWidth; // should be _sourceWidth, but to avoid a breaking change, we use _outputWidth (BlurPostProcess uses _outputTexture to get width/height)\r\n this.postProcess.textureHeight = this._outputHeight; // same as above for height\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"blurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,yBAAyB;IAG7D;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAqC;QACnF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxH,CAAC;IAEe,YAAY;QACxB,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACa,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,wIAAwI;QAC3L,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,2BAA2B;QAEhF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphRenderContext, type FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinBlurPostProcess } from \"core/PostProcesses/thinBlurPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Vector2 } from \"core/Maths/math.vector.pure\";\r\n\r\n/**\r\n * Task which applies a blur post process.\r\n */\r\nexport class FrameGraphBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinBlurPostProcess;\r\n\r\n /**\r\n * Constructs a new blur task.\r\n * @param name Name of the task.\r\n * @param frameGraph Frame graph this task is associated with.\r\n * @param thinPostProcess The thin post process to use for the blur effect.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBlurTask\";\r\n }\r\n\r\n /**\r\n * Records the blur task into the frame graph.\r\n * @param skipCreationOfDisabledPasses defines whether disabled passes should be skipped\r\n * @param additionalExecute defines an optional callback executed by the pass\r\n * @param additionalBindings defines an optional callback used to bind extra resources\r\n * @returns the recorded render pass\r\n */\r\n public override record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);\r\n\r\n this.postProcess.textureWidth = this._outputWidth; // should be _sourceWidth, but to avoid a breaking change, we use _outputWidth (BlurPostProcess uses _outputTexture to get width/height)\r\n this.postProcess.textureHeight = this._outputHeight; // same as above for height\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { FrameGraphBlurTask } from "./blurTask.js";
3
3
  import { ThinDepthOfFieldBlurPostProcess } from "../../../PostProcesses/thinDepthOfFieldBlurPostProcess.js";
4
- import { Vector2 } from "../../../Maths/math.vector.js";
4
+ import { Vector2 } from "../../../Maths/math.vector.pure.js";
5
5
  /**
6
6
  * @internal
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"depthOfFieldBlurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,oDAAoD,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAKlE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAiD;QAC/F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,+BAA+B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAH7H,kCAA6B,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAI/E,CAAC;IAEe,YAAY;QACxB,OAAO,gCAAgC,CAAC;IAC5C,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,4DAA4D,CAAC,CAAC;QAC9H,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACrB,4BAA4B,EAC5B,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtG,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC/H,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphTextureHandle, type FrameGraphRenderPass } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphBlurTask } from \"./blurTask\";\r\nimport { ThinDepthOfFieldBlurPostProcess } from \"core/PostProcesses/thinDepthOfFieldBlurPostProcess\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphDepthOfFieldBlurTask extends FrameGraphBlurTask {\r\n public circleOfConfusionTexture: FrameGraphTextureHandle;\r\n\r\n public circleOfConfusionSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinDepthOfFieldBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinDepthOfFieldBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphDepthOfFieldBlurTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.circleOfConfusionTexture === undefined) {\r\n throw new Error(`FrameGraphDepthOfFieldBlurTask \"${this.name}\": sourceTexture and circleOfConfusionTexture are required`);\r\n }\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n context.setTextureSamplingMode(this.circleOfConfusionTexture, this.circleOfConfusionSamplingMode);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"circleOfConfusionSampler\", this.circleOfConfusionTexture);\r\n }\r\n );\r\n\r\n pass.addDependencies(this.circleOfConfusionTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"depthOfFieldBlurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,oDAAoD,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAKlE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAiD;QAC/F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,+BAA+B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAH7H,kCAA6B,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAI/E,CAAC;IAEe,YAAY;QACxB,OAAO,gCAAgC,CAAC;IAC5C,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,4DAA4D,CAAC,CAAC;QAC9H,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACrB,4BAA4B,EAC5B,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtG,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC/H,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphTextureHandle, type FrameGraphRenderPass } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphBlurTask } from \"./blurTask\";\r\nimport { ThinDepthOfFieldBlurPostProcess } from \"core/PostProcesses/thinDepthOfFieldBlurPostProcess\";\r\nimport { Vector2 } from \"core/Maths/math.vector.pure\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphDepthOfFieldBlurTask extends FrameGraphBlurTask {\r\n public circleOfConfusionTexture: FrameGraphTextureHandle;\r\n\r\n public circleOfConfusionSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinDepthOfFieldBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinDepthOfFieldBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphDepthOfFieldBlurTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.circleOfConfusionTexture === undefined) {\r\n throw new Error(`FrameGraphDepthOfFieldBlurTask \"${this.name}\": sourceTexture and circleOfConfusionTexture are required`);\r\n }\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n context.setTextureSamplingMode(this.circleOfConfusionTexture, this.circleOfConfusionSamplingMode);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"circleOfConfusionSampler\", this.circleOfConfusionTexture);\r\n }\r\n );\r\n\r\n pass.addDependencies(this.circleOfConfusionTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { FrameGraphPostProcessTask } from "./postProcessTask.js";
2
2
  import { ThinSSRBlurPostProcess } from "../../../PostProcesses/thinSSRBlurPostProcess.js";
3
- import { Vector2 } from "../../../Maths/math.vector.js";
3
+ import { Vector2 } from "../../../Maths/math.vector.pure.js";
4
4
  /**
5
5
  * @internal
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ssrBlurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssrBlurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,yBAAyB;IAGhE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAwC;QACtF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7H,CAAC;IAEe,YAAY;QACxB,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphRenderPass, type FrameGraphRenderContext } from \"core/index\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { ThinSSRBlurPostProcess } from \"core/PostProcesses/thinSSRBlurPostProcess\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphSSRBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinSSRBlurPostProcess;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinSSRBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinSSRBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 0.03));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphSSRBlurTask\";\r\n }\r\n\r\n public override record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);\r\n\r\n this.postProcess.textureWidth = this._sourceWidth;\r\n this.postProcess.textureHeight = this._sourceHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ssrBlurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssrBlurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,yBAAyB;IAGhE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAwC;QACtF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7H,CAAC;IAEe,YAAY;QACxB,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { type FrameGraph, type FrameGraphRenderPass, type FrameGraphRenderContext } from \"core/index\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { ThinSSRBlurPostProcess } from \"core/PostProcesses/thinSSRBlurPostProcess\";\r\nimport { Vector2 } from \"core/Maths/math.vector.pure\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphSSRBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinSSRBlurPostProcess;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinSSRBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinSSRBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 0.03));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphSSRBlurTask\";\r\n }\r\n\r\n public override record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);\r\n\r\n this.postProcess.textureWidth = this._sourceWidth;\r\n this.postProcess.textureHeight = this._sourceHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type AbstractEngine, type Camera, type EffectWrapperCreationOptions, type FrameGraph, type FrameGraphRenderPass, type FrameGraphTextureHandle, type Nullable } from "../../../index.js";
2
- import { Vector3 } from "../../../Maths/math.vector.js";
2
+ import { Vector3 } from "../../../Maths/math.vector.pure.js";
3
3
  import { ThinPassPostProcess } from "../../../PostProcesses/thinPassPostProcess.js";
4
4
  import { FrameGraphPostProcessTask } from "./postProcessTask.js";
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { Vector3, Matrix } from "../../../Maths/math.vector.js";
1
+ import { Vector3, Matrix } from "../../../Maths/math.vector.pure.js";
2
2
 
3
3
  import { ThinPassPostProcess } from "../../../PostProcesses/thinPassPostProcess.js";
4
4
  import { FrameGraphPostProcessTask } from "./postProcessTask.js";
@@ -1 +1 @@
1
- {"version":3,"file":"volumetricLightingBlendVolumeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type AbstractEngine,\r\n type Camera,\r\n type EffectWrapperCreationOptions,\r\n type FrameGraph,\r\n type FrameGraphRenderPass,\r\n type FrameGraphTextureHandle,\r\n type Nullable,\r\n} from \"core/index\";\r\nimport { Vector3, Matrix } from \"core/Maths/math.vector\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { ThinPassPostProcess } from \"core/PostProcesses/thinPassPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * @internal\r\n */\r\nclass VolumetricLightingBlendVolumeThinPostProcess extends ThinPassPostProcess {\r\n public camera: Camera;\r\n\r\n public outputTextureWidth = 0;\r\n\r\n public outputTextureHeight = 0;\r\n\r\n public extinction = new Vector3(0, 0, 0);\r\n\r\n public enableExtinction = false;\r\n\r\n private _invProjection: Matrix;\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(Promise.all([import(\"../../../ShadersWGSL/pass.fragment\"), import(\"../../../ShadersWGSL/volumetricLightingBlendVolume.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../../../Shaders/pass.fragment\"), import(\"../../../Shaders/volumetricLightingBlendVolume.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, enableExtinction = false, options?: EffectWrapperCreationOptions) {\r\n super(name, engine, {\r\n ...options,\r\n fragmentShader: \"volumetricLightingBlendVolume\",\r\n samplers: [\"depthSampler\"],\r\n uniforms: [\"invProjection\", \"outputTextureSize\", \"extinction\"],\r\n defines: enableExtinction ? [\"#define DUAL_SOURCE_BLENDING\", \"#define USE_EXTINCTION\"] : undefined,\r\n });\r\n\r\n this._invProjection = new Matrix();\r\n this.alphaMode = enableExtinction ? Constants.ALPHA_DUAL_SRC0_ADD_SRC1xDST : Constants.ALPHA_ADD;\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this.drawWrapper.effect!;\r\n\r\n this._invProjection.copyFrom(this.camera.getProjectionMatrix());\r\n this._invProjection.invert();\r\n\r\n effect.setMatrix(\"invProjection\", this._invProjection);\r\n effect.setFloat2(\"outputTextureSize\", this.outputTextureWidth, this.outputTextureHeight);\r\n effect.setVector3(\"extinction\", this.extinction);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphVolumetricLightingBlendVolumeTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: VolumetricLightingBlendVolumeThinPostProcess;\r\n\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n public camera: Camera;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) {\r\n super(name, frameGraph, new VolumetricLightingBlendVolumeThinPostProcess(name, frameGraph.engine, enableExtinction));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphVolumetricLightingBlendVolumeTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphVolumetricLightingBlendVolumeTask \"${this.name}\": sourceTexture, depthTexture and camera are required`);\r\n }\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, undefined, (context) => {\r\n this.postProcess.camera = this.camera;\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"depthSampler\", this.depthTexture);\r\n });\r\n\r\n pass.addDependencies(this.depthTexture);\r\n\r\n this.postProcess.outputTextureWidth = this._outputWidth;\r\n this.postProcess.outputTextureHeight = this._outputHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"volumetricLightingBlendVolumeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type AbstractEngine,\r\n type Camera,\r\n type EffectWrapperCreationOptions,\r\n type FrameGraph,\r\n type FrameGraphRenderPass,\r\n type FrameGraphTextureHandle,\r\n type Nullable,\r\n} from \"core/index\";\r\nimport { Vector3, Matrix } from \"core/Maths/math.vector.pure\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { ThinPassPostProcess } from \"core/PostProcesses/thinPassPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * @internal\r\n */\r\nclass VolumetricLightingBlendVolumeThinPostProcess extends ThinPassPostProcess {\r\n public camera: Camera;\r\n\r\n public outputTextureWidth = 0;\r\n\r\n public outputTextureHeight = 0;\r\n\r\n public extinction = new Vector3(0, 0, 0);\r\n\r\n public enableExtinction = false;\r\n\r\n private _invProjection: Matrix;\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(Promise.all([import(\"../../../ShadersWGSL/pass.fragment\"), import(\"../../../ShadersWGSL/volumetricLightingBlendVolume.fragment\")]));\r\n } else {\r\n list.push(Promise.all([import(\"../../../Shaders/pass.fragment\"), import(\"../../../Shaders/volumetricLightingBlendVolume.fragment\")]));\r\n }\r\n\r\n super._gatherImports(useWebGPU, list);\r\n }\r\n\r\n constructor(name: string, engine: Nullable<AbstractEngine> = null, enableExtinction = false, options?: EffectWrapperCreationOptions) {\r\n super(name, engine, {\r\n ...options,\r\n fragmentShader: \"volumetricLightingBlendVolume\",\r\n samplers: [\"depthSampler\"],\r\n uniforms: [\"invProjection\", \"outputTextureSize\", \"extinction\"],\r\n defines: enableExtinction ? [\"#define DUAL_SOURCE_BLENDING\", \"#define USE_EXTINCTION\"] : undefined,\r\n });\r\n\r\n this._invProjection = new Matrix();\r\n this.alphaMode = enableExtinction ? Constants.ALPHA_DUAL_SRC0_ADD_SRC1xDST : Constants.ALPHA_ADD;\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n const effect = this.drawWrapper.effect!;\r\n\r\n this._invProjection.copyFrom(this.camera.getProjectionMatrix());\r\n this._invProjection.invert();\r\n\r\n effect.setMatrix(\"invProjection\", this._invProjection);\r\n effect.setFloat2(\"outputTextureSize\", this.outputTextureWidth, this.outputTextureHeight);\r\n effect.setVector3(\"extinction\", this.extinction);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphVolumetricLightingBlendVolumeTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: VolumetricLightingBlendVolumeThinPostProcess;\r\n\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n public camera: Camera;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) {\r\n super(name, frameGraph, new VolumetricLightingBlendVolumeThinPostProcess(name, frameGraph.engine, enableExtinction));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphVolumetricLightingBlendVolumeTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphVolumetricLightingBlendVolumeTask \"${this.name}\": sourceTexture, depthTexture and camera are required`);\r\n }\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, undefined, (context) => {\r\n this.postProcess.camera = this.camera;\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"depthSampler\", this.depthTexture);\r\n });\r\n\r\n pass.addDependencies(this.depthTexture);\r\n\r\n this.postProcess.outputTextureWidth = this._outputWidth;\r\n this.postProcess.outputTextureHeight = this._outputHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { type AbstractEngine, type Camera, type DirectionalLight, type FrameGraph, type FrameGraphObjectList, type FrameGraphTextureHandle } from "../../../index.js";
2
- import { Vector3 } from "../../../Maths/math.vector.js";
3
- import { Color3 } from "../../../Maths/math.color.js";
2
+ import { Vector3 } from "../../../Maths/math.vector.pure.js";
3
+ import { Color3 } from "../../../Maths/math.color.pure.js";
4
4
  import { FrameGraphTask } from "../../frameGraphTask.js";
5
5
  /**
6
6
  * A frame graph task that performs volumetric lighting.
@@ -1,11 +1,11 @@
1
1
  import { FrameGraphVolumetricLightingBlendVolumeTask } from "./volumetricLightingBlendVolumeTask.js";
2
- import { Matrix, TmpVectors, Vector2, Vector3, Vector4 } from "../../../Maths/math.vector.js";
3
- import { Color3, Color4 } from "../../../Maths/math.color.js";
2
+ import { Matrix, TmpVectors, Vector2, Vector3, Vector4 } from "../../../Maths/math.vector.pure.js";
3
+ import { Color3, Color4 } from "../../../Maths/math.color.pure.js";
4
4
  import { FrameGraphTask } from "../../frameGraphTask.js";
5
5
 
6
6
  import { FrameGraphClearTextureTask } from "../Texture/clearTextureTask.js";
7
7
  import { FrameGraphObjectRendererTask } from "../Rendering/objectRendererTask.js";
8
- import { ShaderMaterial } from "../../../Materials/shaderMaterial.js";
8
+ import { ShaderMaterial } from "../../../Materials/shaderMaterial.pure.js";
9
9
  const InvViewProjectionMatrix = new Matrix();
10
10
  /**
11
11
  * A frame graph task that performs volumetric lighting.
@@ -1 +1 @@
1
- {"version":3,"file":"volumetricLightingTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AbstractEngine, type Camera, type DirectionalLight, type FrameGraph, type FrameGraphObjectList, type FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphVolumetricLightingBlendVolumeTask } from \"./volumetricLightingBlendVolumeTask\";\r\nimport { Matrix, TmpVectors, Vector2, Vector3, Vector4 } from \"core/Maths/math.vector\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphClearTextureTask } from \"../Texture/clearTextureTask\";\r\nimport { FrameGraphObjectRendererTask } from \"../Rendering/objectRendererTask\";\r\nimport { ShaderMaterial } from \"core/Materials/shaderMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nconst InvViewProjectionMatrix = new Matrix();\r\n\r\n/**\r\n * A frame graph task that performs volumetric lighting.\r\n */\r\nexport class FrameGraphVolumetricLightingTask extends FrameGraphTask {\r\n /**\r\n * Returns whether volumetric lighting is supported by the engine.\r\n * @param engine The engine to check for volumetric lighting support.\r\n * @param enableExtinction Whether the extinction/dual-source blending path will be used.\r\n * @returns True if volumetric lighting is supported, false otherwise.\r\n */\r\n public static IsSupported(engine: AbstractEngine, enableExtinction: boolean = false) {\r\n return !enableExtinction || engine.getCaps().dualSourceBlending;\r\n }\r\n\r\n /**\r\n * The target texture to which the volumetric lighting will be applied.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use when blending the volumetric lighting texture with targetTexture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The depth texture used for volumetric lighting calculations.\r\n * It must be the depth texture used to generate targetTexture.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n /**\r\n * The camera used for volumetric lighting calculations.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(value: Camera) {\r\n if (this._camera === value) {\r\n return;\r\n }\r\n this._camera = value;\r\n this._renderLightingVolumeTask.camera = value;\r\n this._blendLightingVolumeTask.camera = value;\r\n }\r\n\r\n /**\r\n * The mesh representing the lighting volume.\r\n * This is the mesh that will be rendered to create the volumetric lighting effect.\r\n */\r\n public lightingVolumeMesh: FrameGraphObjectList;\r\n\r\n /**\r\n * The directional light used for volumetric lighting.\r\n */\r\n public light: DirectionalLight;\r\n\r\n /**\r\n * The lighting volume texture (optional).\r\n * If not provided, a new texture will be created, with the same size, format and type as targetTexture.\r\n * This is the texture that will store the volumetric lighting information, before being blended to targetTexture.\r\n */\r\n public lightingVolumeTexture?: FrameGraphTextureHandle;\r\n\r\n private _extinctionPhaseG = new Vector4(0, 0, 0, 0);\r\n\r\n /**\r\n * The phase G parameter for the volumetric lighting effect (default: 0).\r\n * This parameter controls the anisotropy of the scattering.\r\n * A value of 0 means isotropic scattering, while a value of 1 means forward scattering and -1 means backward scattering.\r\n */\r\n public get phaseG() {\r\n return this._extinctionPhaseG.w;\r\n }\r\n\r\n public set phaseG(value: number) {\r\n this._extinctionPhaseG.w = value;\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n }\r\n\r\n /**\r\n * Whether to enable extinction in the volumetric lighting effect (default: false).\r\n * Read-only property set in the constructor.\r\n */\r\n public readonly enableExtinction: boolean;\r\n\r\n /**\r\n * The extinction coefficient for the volumetric lighting effect (default: (0, 0, 0) - no extinction).\r\n * This parameter controls how much light is absorbed and scattered as it travels through the medium.\r\n * Will only have an effect if enableExtinction is set to true in the constructor!\r\n */\r\n public get extinction() {\r\n return this._blendLightingVolumeTask.postProcess.extinction;\r\n }\r\n\r\n public set extinction(value: Vector3) {\r\n this._extinctionPhaseG.x = Math.max(value.x, 1e-6);\r\n this._extinctionPhaseG.y = Math.max(value.y, 1e-6);\r\n this._extinctionPhaseG.z = Math.max(value.z, 1e-6);\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n this._blendLightingVolumeTask.postProcess.extinction.copyFromFloats(this._extinctionPhaseG.x, this._extinctionPhaseG.y, this._extinctionPhaseG.z);\r\n }\r\n\r\n private _lightPower = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The light power/color for the volumetric lighting effect (default: (1, 1, 1)).\r\n * This parameter controls the intensity and color of the light used for volumetric lighting.\r\n */\r\n public get lightPower() {\r\n return this._lightPower;\r\n }\r\n\r\n public set lightPower(value: Color3) {\r\n this._lightPower.copyFrom(value);\r\n this._renderLightingVolumeMaterial.setColor3(\"lightPower\", this._lightPower);\r\n }\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._renderLightingVolumeMaterial) {\r\n this._renderLightingVolumeMaterial.name = `${name} - render lighting volume`;\r\n }\r\n if (this._clearLightingVolumeTextureTask) {\r\n this._clearLightingVolumeTextureTask.name = `${name} - clear lighting volume texture`;\r\n }\r\n if (this._renderLightingVolumeTask) {\r\n this._renderLightingVolumeTask.name = `${name} - render lighting volume`;\r\n }\r\n if (this._blendLightingVolumeTask) {\r\n this._blendLightingVolumeTask.name = `${name} - blend lighting volume`;\r\n }\r\n }\r\n\r\n /**\r\n * The output texture of the task. It will be the same as targetTexture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n private readonly _clearLightingVolumeTextureTask: FrameGraphClearTextureTask;\r\n private readonly _renderLightingVolumeTask: FrameGraphObjectRendererTask;\r\n private readonly _blendLightingVolumeTask: FrameGraphVolumetricLightingBlendVolumeTask;\r\n private _renderLightingVolumeMaterial: ShaderMaterial;\r\n\r\n /**\r\n * Creates a new FrameGraphVolumetricLightingTask.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph to which the task belongs.\r\n * @param enableExtinction Whether to enable extinction in the volumetric lighting effect (default: false). If you don't plan to set extinction to something different than (0, 0, 0), you can disable this to save some performance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) {\r\n super(name, frameGraph);\r\n\r\n if (!FrameGraphVolumetricLightingTask.IsSupported(frameGraph.engine, enableExtinction)) {\r\n throw new Error(\r\n `FrameGraphVolumetricLightingTask \"${name}\": the current configuration is not supported. Use FrameGraphVolumetricLightingTask.IsSupported(engine, enableExtinction) to check before creating this task.`\r\n );\r\n }\r\n\r\n this.enableExtinction = enableExtinction;\r\n\r\n const isWebGPU = this._frameGraph.engine.isWebGPU;\r\n\r\n this._renderLightingVolumeMaterial = new ShaderMaterial(`${name} - render lighting volume`, this._frameGraph.scene, \"volumetricLightingRenderVolume\", {\r\n attributes: [\"position\"],\r\n uniformBuffers: [\"Scene\", \"Mesh\"],\r\n uniforms: [\"world\", \"viewProjection\", \"vEyePosition\", \"lightDir\", \"invViewProjection\", \"outputTextureSize\", \"extinctionPhaseG\", \"lightPower\", \"textureRatio\"],\r\n samplers: [\"depthTexture\"],\r\n defines: enableExtinction ? [\"USE_EXTINCTION\"] : [],\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n needAlphaBlending: true,\r\n });\r\n this._renderLightingVolumeMaterial.backFaceCulling = false;\r\n this._renderLightingVolumeMaterial.alphaMode = Constants.ALPHA_ADD;\r\n this._renderLightingVolumeMaterial.onBindObservable.add(() => {\r\n this._renderLightingVolumeMaterial.bindEyePosition(this._renderLightingVolumeMaterial.getEffect());\r\n });\r\n\r\n this._clearLightingVolumeTextureTask = new FrameGraphClearTextureTask(`clear lighting volume texture`, frameGraph);\r\n this._renderLightingVolumeTask = new FrameGraphObjectRendererTask(`render lighting volume`, frameGraph, frameGraph.scene);\r\n this._blendLightingVolumeTask = new FrameGraphVolumetricLightingBlendVolumeTask(`blend lighting volume texture`, frameGraph, enableExtinction);\r\n\r\n this.onTexturesAllocatedObservable.add(() => {\r\n this._renderLightingVolumeMaterial.setInternalTexture(\"depthTexture\", frameGraph.textureManager.getTextureFromHandle(this.depthTexture)!);\r\n });\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n\r\n // Triggers the setters to set the uniforms\r\n this.phaseG = this._extinctionPhaseG.w;\r\n this.extinction = new Vector3(this.extinction.x, this.extinction.y, this.extinction.z);\r\n this.lightPower = this._lightPower;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public override initAsync(): Promise<unknown> {\r\n if (this._frameGraph.engine.isWebGPU) {\r\n return Promise.all([import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.vertex\"), import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n return Promise.all([import(\"../../../Shaders/volumetricLightingRenderVolume.vertex\"), import(\"../../../Shaders/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n public override isReady() {\r\n return (\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._clearLightingVolumeTextureTask.isReady() &&\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._blendLightingVolumeTask.isReady()\r\n );\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphVolumetricLightingTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false) {\r\n if (this.targetTexture === undefined || this.depthTexture === undefined || this.camera === undefined || this.lightingVolumeMesh === undefined || this.light === undefined) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": targetTexture, depthTexture, camera, lightingVolumeMesh and light are required`);\r\n }\r\n if (!this.lightingVolumeMesh.meshes || this.lightingVolumeMesh.meshes.length === 0) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": lightingVolumeMesh is empty`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n\r\n let lightingVolumeTexture = this.lightingVolumeTexture;\r\n if (!lightingVolumeTexture) {\r\n const targetTextureCreationOptions = textureManager.getTextureCreationOptions(this.targetTexture);\r\n\r\n targetTextureCreationOptions.options.labels = [\"InScattering\"];\r\n targetTextureCreationOptions.options.samples = 1;\r\n\r\n lightingVolumeTexture = textureManager.createRenderTargetTexture(`${this.name} - lighting volume texture`, targetTextureCreationOptions);\r\n }\r\n\r\n this.lightingVolumeMesh.meshes[0].material = this._renderLightingVolumeMaterial;\r\n\r\n const targetTextureSize = textureManager.getTextureAbsoluteDimensions(this.targetTexture);\r\n const volumeTextureSize = textureManager.getTextureAbsoluteDimensions(lightingVolumeTexture);\r\n\r\n this._renderLightingVolumeMaterial.setVector2(\r\n \"textureRatio\",\r\n new Vector2(targetTextureSize.width / volumeTextureSize.width, targetTextureSize.height / volumeTextureSize.height)\r\n );\r\n this._renderLightingVolumeMaterial.setVector2(\"outputTextureSize\", new Vector2(volumeTextureSize.width, volumeTextureSize.height));\r\n\r\n const passUpdateMaterial = this._frameGraph.addPass(this.name);\r\n\r\n passUpdateMaterial.setExecuteFunc(() => {\r\n this.camera.getTransformationMatrix().invertToRef(InvViewProjectionMatrix);\r\n\r\n this._renderLightingVolumeMaterial.setMatrix(\"invViewProjection\", InvViewProjectionMatrix);\r\n this._renderLightingVolumeMaterial.setVector3(\"lightDir\", this.light.direction.normalizeToRef(TmpVectors.Vector3[0]));\r\n });\r\n\r\n this._clearLightingVolumeTextureTask.clearColor = true;\r\n this._clearLightingVolumeTextureTask.clearStencil = this.enableExtinction;\r\n this._clearLightingVolumeTextureTask.color = new Color4(0, 0, 0, 1);\r\n this._clearLightingVolumeTextureTask.stencilValue = 0;\r\n this._clearLightingVolumeTextureTask.targetTexture = lightingVolumeTexture;\r\n this._clearLightingVolumeTextureTask.record(true);\r\n\r\n this._renderLightingVolumeTask.targetTexture = this._clearLightingVolumeTextureTask.outputTexture;\r\n this._renderLightingVolumeTask.objectList = this.lightingVolumeMesh;\r\n this._renderLightingVolumeTask.camera = this.camera;\r\n this._renderLightingVolumeTask.disableImageProcessing = true;\r\n this._renderLightingVolumeTask.depthTest = false;\r\n this._renderLightingVolumeTask.record(true);\r\n\r\n this._blendLightingVolumeTask.sourceTexture = this._renderLightingVolumeTask.outputTexture;\r\n this._blendLightingVolumeTask.sourceSamplingMode = this.sourceSamplingMode;\r\n this._blendLightingVolumeTask.targetTexture = this.targetTexture;\r\n this._blendLightingVolumeTask.depthTexture = this.depthTexture;\r\n this._blendLightingVolumeTask.camera = this.camera;\r\n this._blendLightingVolumeTask.record(true);\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const disabledPass = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n disabledPass.setExecuteFunc(() => {});\r\n }\r\n }\r\n\r\n public override dispose() {\r\n this._renderLightingVolumeMaterial?.dispose();\r\n this._clearLightingVolumeTextureTask.dispose();\r\n this._renderLightingVolumeTask.dispose();\r\n this._blendLightingVolumeTask.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"volumetricLightingTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AbstractEngine, type Camera, type DirectionalLight, type FrameGraph, type FrameGraphObjectList, type FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphVolumetricLightingBlendVolumeTask } from \"./volumetricLightingBlendVolumeTask\";\r\nimport { Matrix, TmpVectors, Vector2, Vector3, Vector4 } from \"core/Maths/math.vector.pure\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color.pure\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphClearTextureTask } from \"../Texture/clearTextureTask\";\r\nimport { FrameGraphObjectRendererTask } from \"../Rendering/objectRendererTask\";\r\nimport { ShaderMaterial } from \"core/Materials/shaderMaterial.pure\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nconst InvViewProjectionMatrix = new Matrix();\r\n\r\n/**\r\n * A frame graph task that performs volumetric lighting.\r\n */\r\nexport class FrameGraphVolumetricLightingTask extends FrameGraphTask {\r\n /**\r\n * Returns whether volumetric lighting is supported by the engine.\r\n * @param engine The engine to check for volumetric lighting support.\r\n * @param enableExtinction Whether the extinction/dual-source blending path will be used.\r\n * @returns True if volumetric lighting is supported, false otherwise.\r\n */\r\n public static IsSupported(engine: AbstractEngine, enableExtinction: boolean = false) {\r\n return !enableExtinction || engine.getCaps().dualSourceBlending;\r\n }\r\n\r\n /**\r\n * The target texture to which the volumetric lighting will be applied.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use when blending the volumetric lighting texture with targetTexture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The depth texture used for volumetric lighting calculations.\r\n * It must be the depth texture used to generate targetTexture.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n /**\r\n * The camera used for volumetric lighting calculations.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(value: Camera) {\r\n if (this._camera === value) {\r\n return;\r\n }\r\n this._camera = value;\r\n this._renderLightingVolumeTask.camera = value;\r\n this._blendLightingVolumeTask.camera = value;\r\n }\r\n\r\n /**\r\n * The mesh representing the lighting volume.\r\n * This is the mesh that will be rendered to create the volumetric lighting effect.\r\n */\r\n public lightingVolumeMesh: FrameGraphObjectList;\r\n\r\n /**\r\n * The directional light used for volumetric lighting.\r\n */\r\n public light: DirectionalLight;\r\n\r\n /**\r\n * The lighting volume texture (optional).\r\n * If not provided, a new texture will be created, with the same size, format and type as targetTexture.\r\n * This is the texture that will store the volumetric lighting information, before being blended to targetTexture.\r\n */\r\n public lightingVolumeTexture?: FrameGraphTextureHandle;\r\n\r\n private _extinctionPhaseG = new Vector4(0, 0, 0, 0);\r\n\r\n /**\r\n * The phase G parameter for the volumetric lighting effect (default: 0).\r\n * This parameter controls the anisotropy of the scattering.\r\n * A value of 0 means isotropic scattering, while a value of 1 means forward scattering and -1 means backward scattering.\r\n */\r\n public get phaseG() {\r\n return this._extinctionPhaseG.w;\r\n }\r\n\r\n public set phaseG(value: number) {\r\n this._extinctionPhaseG.w = value;\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n }\r\n\r\n /**\r\n * Whether to enable extinction in the volumetric lighting effect (default: false).\r\n * Read-only property set in the constructor.\r\n */\r\n public readonly enableExtinction: boolean;\r\n\r\n /**\r\n * The extinction coefficient for the volumetric lighting effect (default: (0, 0, 0) - no extinction).\r\n * This parameter controls how much light is absorbed and scattered as it travels through the medium.\r\n * Will only have an effect if enableExtinction is set to true in the constructor!\r\n */\r\n public get extinction() {\r\n return this._blendLightingVolumeTask.postProcess.extinction;\r\n }\r\n\r\n public set extinction(value: Vector3) {\r\n this._extinctionPhaseG.x = Math.max(value.x, 1e-6);\r\n this._extinctionPhaseG.y = Math.max(value.y, 1e-6);\r\n this._extinctionPhaseG.z = Math.max(value.z, 1e-6);\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n this._blendLightingVolumeTask.postProcess.extinction.copyFromFloats(this._extinctionPhaseG.x, this._extinctionPhaseG.y, this._extinctionPhaseG.z);\r\n }\r\n\r\n private _lightPower = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The light power/color for the volumetric lighting effect (default: (1, 1, 1)).\r\n * This parameter controls the intensity and color of the light used for volumetric lighting.\r\n */\r\n public get lightPower() {\r\n return this._lightPower;\r\n }\r\n\r\n public set lightPower(value: Color3) {\r\n this._lightPower.copyFrom(value);\r\n this._renderLightingVolumeMaterial.setColor3(\"lightPower\", this._lightPower);\r\n }\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._renderLightingVolumeMaterial) {\r\n this._renderLightingVolumeMaterial.name = `${name} - render lighting volume`;\r\n }\r\n if (this._clearLightingVolumeTextureTask) {\r\n this._clearLightingVolumeTextureTask.name = `${name} - clear lighting volume texture`;\r\n }\r\n if (this._renderLightingVolumeTask) {\r\n this._renderLightingVolumeTask.name = `${name} - render lighting volume`;\r\n }\r\n if (this._blendLightingVolumeTask) {\r\n this._blendLightingVolumeTask.name = `${name} - blend lighting volume`;\r\n }\r\n }\r\n\r\n /**\r\n * The output texture of the task. It will be the same as targetTexture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n private readonly _clearLightingVolumeTextureTask: FrameGraphClearTextureTask;\r\n private readonly _renderLightingVolumeTask: FrameGraphObjectRendererTask;\r\n private readonly _blendLightingVolumeTask: FrameGraphVolumetricLightingBlendVolumeTask;\r\n private _renderLightingVolumeMaterial: ShaderMaterial;\r\n\r\n /**\r\n * Creates a new FrameGraphVolumetricLightingTask.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph to which the task belongs.\r\n * @param enableExtinction Whether to enable extinction in the volumetric lighting effect (default: false). If you don't plan to set extinction to something different than (0, 0, 0), you can disable this to save some performance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) {\r\n super(name, frameGraph);\r\n\r\n if (!FrameGraphVolumetricLightingTask.IsSupported(frameGraph.engine, enableExtinction)) {\r\n throw new Error(\r\n `FrameGraphVolumetricLightingTask \"${name}\": the current configuration is not supported. Use FrameGraphVolumetricLightingTask.IsSupported(engine, enableExtinction) to check before creating this task.`\r\n );\r\n }\r\n\r\n this.enableExtinction = enableExtinction;\r\n\r\n const isWebGPU = this._frameGraph.engine.isWebGPU;\r\n\r\n this._renderLightingVolumeMaterial = new ShaderMaterial(`${name} - render lighting volume`, this._frameGraph.scene, \"volumetricLightingRenderVolume\", {\r\n attributes: [\"position\"],\r\n uniformBuffers: [\"Scene\", \"Mesh\"],\r\n uniforms: [\"world\", \"viewProjection\", \"vEyePosition\", \"lightDir\", \"invViewProjection\", \"outputTextureSize\", \"extinctionPhaseG\", \"lightPower\", \"textureRatio\"],\r\n samplers: [\"depthTexture\"],\r\n defines: enableExtinction ? [\"USE_EXTINCTION\"] : [],\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n needAlphaBlending: true,\r\n });\r\n this._renderLightingVolumeMaterial.backFaceCulling = false;\r\n this._renderLightingVolumeMaterial.alphaMode = Constants.ALPHA_ADD;\r\n this._renderLightingVolumeMaterial.onBindObservable.add(() => {\r\n this._renderLightingVolumeMaterial.bindEyePosition(this._renderLightingVolumeMaterial.getEffect());\r\n });\r\n\r\n this._clearLightingVolumeTextureTask = new FrameGraphClearTextureTask(`clear lighting volume texture`, frameGraph);\r\n this._renderLightingVolumeTask = new FrameGraphObjectRendererTask(`render lighting volume`, frameGraph, frameGraph.scene);\r\n this._blendLightingVolumeTask = new FrameGraphVolumetricLightingBlendVolumeTask(`blend lighting volume texture`, frameGraph, enableExtinction);\r\n\r\n this.onTexturesAllocatedObservable.add(() => {\r\n this._renderLightingVolumeMaterial.setInternalTexture(\"depthTexture\", frameGraph.textureManager.getTextureFromHandle(this.depthTexture)!);\r\n });\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n\r\n // Triggers the setters to set the uniforms\r\n this.phaseG = this._extinctionPhaseG.w;\r\n this.extinction = new Vector3(this.extinction.x, this.extinction.y, this.extinction.z);\r\n this.lightPower = this._lightPower;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public override initAsync(): Promise<unknown> {\r\n if (this._frameGraph.engine.isWebGPU) {\r\n return Promise.all([import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.vertex\"), import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n return Promise.all([import(\"../../../Shaders/volumetricLightingRenderVolume.vertex\"), import(\"../../../Shaders/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n public override isReady() {\r\n return (\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._clearLightingVolumeTextureTask.isReady() &&\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._blendLightingVolumeTask.isReady()\r\n );\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphVolumetricLightingTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false) {\r\n if (this.targetTexture === undefined || this.depthTexture === undefined || this.camera === undefined || this.lightingVolumeMesh === undefined || this.light === undefined) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": targetTexture, depthTexture, camera, lightingVolumeMesh and light are required`);\r\n }\r\n if (!this.lightingVolumeMesh.meshes || this.lightingVolumeMesh.meshes.length === 0) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": lightingVolumeMesh is empty`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n\r\n let lightingVolumeTexture = this.lightingVolumeTexture;\r\n if (!lightingVolumeTexture) {\r\n const targetTextureCreationOptions = textureManager.getTextureCreationOptions(this.targetTexture);\r\n\r\n targetTextureCreationOptions.options.labels = [\"InScattering\"];\r\n targetTextureCreationOptions.options.samples = 1;\r\n\r\n lightingVolumeTexture = textureManager.createRenderTargetTexture(`${this.name} - lighting volume texture`, targetTextureCreationOptions);\r\n }\r\n\r\n this.lightingVolumeMesh.meshes[0].material = this._renderLightingVolumeMaterial;\r\n\r\n const targetTextureSize = textureManager.getTextureAbsoluteDimensions(this.targetTexture);\r\n const volumeTextureSize = textureManager.getTextureAbsoluteDimensions(lightingVolumeTexture);\r\n\r\n this._renderLightingVolumeMaterial.setVector2(\r\n \"textureRatio\",\r\n new Vector2(targetTextureSize.width / volumeTextureSize.width, targetTextureSize.height / volumeTextureSize.height)\r\n );\r\n this._renderLightingVolumeMaterial.setVector2(\"outputTextureSize\", new Vector2(volumeTextureSize.width, volumeTextureSize.height));\r\n\r\n const passUpdateMaterial = this._frameGraph.addPass(this.name);\r\n\r\n passUpdateMaterial.setExecuteFunc(() => {\r\n this.camera.getTransformationMatrix().invertToRef(InvViewProjectionMatrix);\r\n\r\n this._renderLightingVolumeMaterial.setMatrix(\"invViewProjection\", InvViewProjectionMatrix);\r\n this._renderLightingVolumeMaterial.setVector3(\"lightDir\", this.light.direction.normalizeToRef(TmpVectors.Vector3[0]));\r\n });\r\n\r\n this._clearLightingVolumeTextureTask.clearColor = true;\r\n this._clearLightingVolumeTextureTask.clearStencil = this.enableExtinction;\r\n this._clearLightingVolumeTextureTask.color = new Color4(0, 0, 0, 1);\r\n this._clearLightingVolumeTextureTask.stencilValue = 0;\r\n this._clearLightingVolumeTextureTask.targetTexture = lightingVolumeTexture;\r\n this._clearLightingVolumeTextureTask.record(true);\r\n\r\n this._renderLightingVolumeTask.targetTexture = this._clearLightingVolumeTextureTask.outputTexture;\r\n this._renderLightingVolumeTask.objectList = this.lightingVolumeMesh;\r\n this._renderLightingVolumeTask.camera = this.camera;\r\n this._renderLightingVolumeTask.disableImageProcessing = true;\r\n this._renderLightingVolumeTask.depthTest = false;\r\n this._renderLightingVolumeTask.record(true);\r\n\r\n this._blendLightingVolumeTask.sourceTexture = this._renderLightingVolumeTask.outputTexture;\r\n this._blendLightingVolumeTask.sourceSamplingMode = this.sourceSamplingMode;\r\n this._blendLightingVolumeTask.targetTexture = this.targetTexture;\r\n this._blendLightingVolumeTask.depthTexture = this.depthTexture;\r\n this._blendLightingVolumeTask.camera = this.camera;\r\n this._blendLightingVolumeTask.record(true);\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const disabledPass = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n disabledPass.setExecuteFunc(() => {});\r\n }\r\n }\r\n\r\n public override dispose() {\r\n this._renderLightingVolumeMaterial?.dispose();\r\n this._clearLightingVolumeTextureTask.dispose();\r\n this._renderLightingVolumeTask.dispose();\r\n this._blendLightingVolumeTask.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type FrameGraphTextureHandle, type FrameGraph } from "../../../index.js";
2
- import { CascadedShadowGenerator } from "../../../Lights/Shadows/cascadedShadowGenerator.js";
2
+ import { CascadedShadowGenerator } from "../../../Lights/Shadows/cascadedShadowGenerator.pure.js";
3
3
  import { FrameGraphShadowGeneratorTask } from "./shadowGeneratorTask.js";
4
4
  import { DepthTextureType, ThinMinMaxReducer } from "../../../Misc/thinMinMaxReducer.js";
5
5
  /**
@@ -1,6 +1,6 @@
1
- import { CascadedShadowGenerator } from "../../../Lights/Shadows/cascadedShadowGenerator.js";
1
+ import { CascadedShadowGenerator } from "../../../Lights/Shadows/cascadedShadowGenerator.pure.js";
2
2
  import { FrameGraphShadowGeneratorTask } from "./shadowGeneratorTask.js";
3
- import { DirectionalLight } from "../../../Lights/directionalLight.js";
3
+ import { DirectionalLight } from "../../../Lights/directionalLight.pure.js";
4
4
  import { ThinMinMaxReducer } from "../../../Misc/thinMinMaxReducer.js";
5
5
  import { FrameGraphPostProcessTask } from "../PostProcesses/postProcessTask.js";
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"csmShadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type FrameGraphTextureHandle, type FrameGraph } from \"core/index\";\r\nimport { CascadedShadowGenerator } from \"../../../Lights/Shadows/cascadedShadowGenerator\";\r\nimport { FrameGraphShadowGeneratorTask } from \"./shadowGeneratorTask\";\r\nimport { DirectionalLight } from \"../../../Lights/directionalLight\";\r\nimport { DepthTextureType, ThinMinMaxReducer } from \"../../../Misc/thinMinMaxReducer\";\r\nimport { FrameGraphPostProcessTask } from \"../PostProcesses/postProcessTask\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { textureSizeIsObject } from \"../../../Materials/Textures/textureCreationOptions\";\r\n\r\n/**\r\n * Task used to generate a cascaded shadow map from a list of objects.\r\n */\r\nexport class FrameGraphCascadedShadowGeneratorTask extends FrameGraphShadowGeneratorTask {\r\n protected override _shadowGenerator: CascadedShadowGenerator | undefined;\r\n\r\n /**\r\n * Checks if a shadow generator task is a cascaded shadow generator task.\r\n * @param task The task to check.\r\n * @returns True if the task is a cascaded shadow generator task, else false.\r\n */\r\n public static IsCascadedShadowGenerator(task: FrameGraphShadowGeneratorTask): task is FrameGraphCascadedShadowGeneratorTask {\r\n return (task as FrameGraphCascadedShadowGeneratorTask).numCascades !== undefined;\r\n }\r\n\r\n /**\r\n * The depth texture used by the autoCalcDepthBounds feature (optional if autoCalcDepthBounds is set to false).\r\n * This texture is used to compute the min/max depth bounds of the scene to setup the cascaded shadow generator.\r\n * The texture should contain either “view,” “normalized view,” or “screen” depth values - if possible, connect “normalized view,” or “screen” for best performance.\r\n * Warning: Do not set a texture if you are not using the autoCalcDepthBounds feature, to avoid generating a depth texture that will not be used.\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The type of the depth texture used by the autoCalcDepthBounds feature.\r\n */\r\n public depthTextureType: DepthTextureType = DepthTextureType.NormalizedViewDepth;\r\n\r\n private _numCascades = CascadedShadowGenerator.DEFAULT_CASCADES_COUNT;\r\n /**\r\n * The number of cascades.\r\n */\r\n public get numCascades() {\r\n return this._numCascades;\r\n }\r\n\r\n public set numCascades(value: number) {\r\n if (value === this._numCascades) {\r\n return;\r\n }\r\n\r\n this._numCascades = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.numCascades = value;\r\n this._updateShadowMap();\r\n }\r\n }\r\n\r\n private _debug = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should display the cascades.\r\n */\r\n public get debug() {\r\n return this._debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n if (value === this._debug) {\r\n return;\r\n }\r\n\r\n this._debug = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.debug = value;\r\n }\r\n }\r\n\r\n private _stabilizeCascades = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should stabilize the cascades.\r\n */\r\n public get stabilizeCascades() {\r\n return this._stabilizeCascades;\r\n }\r\n\r\n public set stabilizeCascades(value: boolean) {\r\n if (value === this._stabilizeCascades) {\r\n return;\r\n }\r\n\r\n this._stabilizeCascades = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.stabilizeCascades = value;\r\n }\r\n }\r\n\r\n private _lambda = 0.5;\r\n /**\r\n * Gets or sets the lambda parameter of the shadow generator.\r\n */\r\n public get lambda() {\r\n return this._lambda;\r\n }\r\n\r\n public set lambda(value: number) {\r\n if (value === this._lambda) {\r\n return;\r\n }\r\n\r\n this._lambda = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.lambda = value;\r\n }\r\n }\r\n\r\n private _cascadeBlendPercentage = 0.1;\r\n /**\r\n * Gets or sets the cascade blend percentage.\r\n */\r\n public get cascadeBlendPercentage() {\r\n return this._cascadeBlendPercentage;\r\n }\r\n\r\n public set cascadeBlendPercentage(value: number) {\r\n if (value === this._cascadeBlendPercentage) {\r\n return;\r\n }\r\n\r\n this._cascadeBlendPercentage = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.cascadeBlendPercentage = value;\r\n }\r\n }\r\n\r\n private _depthClamp = true;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should use depth clamping.\r\n */\r\n public get depthClamp() {\r\n return this._depthClamp;\r\n }\r\n\r\n public set depthClamp(value: boolean) {\r\n if (value === this._depthClamp) {\r\n return;\r\n }\r\n\r\n this._depthClamp = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.depthClamp = value;\r\n }\r\n }\r\n\r\n private _autoCalcDepthBounds = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should automatically calculate the depth bounds.\r\n */\r\n public get autoCalcDepthBounds() {\r\n return this._autoCalcDepthBounds;\r\n }\r\n\r\n public set autoCalcDepthBounds(value: boolean) {\r\n if (value === this._autoCalcDepthBounds) {\r\n return;\r\n }\r\n\r\n this._autoCalcDepthBounds = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n\r\n if (!value) {\r\n this._shadowGenerator?.setMinMaxDistance(0, 1);\r\n }\r\n\r\n // All passes but the last one are related to min/max reduction and should be enabled/disabled depending on autoCalcDepthBounds value\r\n const passes = this.passes;\r\n for (let i = 0; i < passes.length - 1; ++i) {\r\n passes[i].disabled = !value;\r\n }\r\n }\r\n\r\n private _currentAutoCalcDepthBoundsCounter = 0;\r\n private _autoCalcDepthBoundsRefreshRate = 1;\r\n /**\r\n * Defines the refresh rate of the min/max computation used when autoCalcDepthBounds is set to true\r\n * Use 0 to compute just once, 1 to compute on every frame, 2 to compute every two frames and so on...\r\n */\r\n public get autoCalcDepthBoundsRefreshRate() {\r\n return this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n public set autoCalcDepthBoundsRefreshRate(value: number) {\r\n this._autoCalcDepthBoundsRefreshRate = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n private _shadowMaxZ = 10000;\r\n /**\r\n * Gets or sets the maximum shadow Z value.\r\n */\r\n public get shadowMaxZ() {\r\n return this._shadowMaxZ;\r\n }\r\n\r\n public set shadowMaxZ(value: number) {\r\n if (value === this._shadowMaxZ) {\r\n return;\r\n }\r\n\r\n this._shadowMaxZ = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.shadowMaxZ = value;\r\n }\r\n }\r\n\r\n protected readonly _thinMinMaxReducer: ThinMinMaxReducer;\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this._thinMinMaxReducer = new ThinMinMaxReducer(frameGraph.scene);\r\n\r\n this._thinMinMaxReducer.onAfterReductionPerformed.add((minmax: { min: number; max: number }) => {\r\n if (!this._shadowGenerator) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n\r\n let min = minmax.min,\r\n max = minmax.max;\r\n\r\n if (min >= max) {\r\n min = 0;\r\n max = 1;\r\n } else if (camera && this.depthTextureType !== DepthTextureType.NormalizedViewDepth) {\r\n if (this.depthTextureType === DepthTextureType.ScreenDepth) {\r\n const engine = this._frameGraph.engine;\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n const p2z = projectionMatrix.m[10];\r\n const p3z = projectionMatrix.m[14];\r\n\r\n if (!engine.isNDCHalfZRange) {\r\n // Convert to NDC depth\r\n min = min * 2 - 1;\r\n max = max * 2 - 1;\r\n }\r\n\r\n // Convert to view depth\r\n min = p3z / (min - p2z);\r\n max = p3z / (max - p2z);\r\n }\r\n\r\n // Convert to normalized view depth\r\n const zNear = camera.minZ;\r\n const zFar = camera.maxZ;\r\n\r\n min = (min - zNear) / (zFar - zNear);\r\n max = (max - zNear) / (zFar - zNear);\r\n }\r\n\r\n if (min !== this._shadowGenerator.minDistance || max !== this._shadowGenerator.maxDistance) {\r\n this._shadowGenerator.setMinMaxDistance(min, max);\r\n }\r\n });\r\n }\r\n\r\n protected override _createShadowGeneratorInstance() {\r\n if (!(this.light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: the CSM shadow generator only supports directional lights.`);\r\n }\r\n this._shadowGenerator = new CascadedShadowGenerator(this.mapSize, this.light, this.useFloat32TextureType, this.camera, this.useRedTextureFormat);\r\n }\r\n\r\n protected override _createShadowGenerator() {\r\n if (super._createShadowGenerator()) {\r\n const shadowGenerator = this._shadowGenerator;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n\r\n shadowGenerator.numCascades = this._numCascades;\r\n shadowGenerator.debug = this._debug;\r\n shadowGenerator.stabilizeCascades = this._stabilizeCascades;\r\n shadowGenerator.lambda = this._lambda;\r\n shadowGenerator.cascadeBlendPercentage = this._cascadeBlendPercentage;\r\n shadowGenerator.depthClamp = this._depthClamp;\r\n shadowGenerator.shadowMaxZ = this._shadowMaxZ;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphCascadedShadowGeneratorTask\";\r\n }\r\n\r\n public override record() {\r\n if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: light, objectList and camera are required`);\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.depthTexture);\r\n\r\n const size = !depthTextureCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(depthTextureCreationOptions.size)\r\n ? depthTextureCreationOptions.size\r\n : { width: depthTextureCreationOptions.size, height: depthTextureCreationOptions.size }\r\n : this._frameGraph.textureManager.getAbsoluteDimensions(depthTextureCreationOptions.size);\r\n\r\n const width = size.width;\r\n const height = size.height;\r\n\r\n depthTextureCreationOptions.sizeIsPercentage = false;\r\n depthTextureCreationOptions.options.formats = [Constants.TEXTUREFORMAT_RG];\r\n depthTextureCreationOptions.options.samples = 1;\r\n\r\n this._thinMinMaxReducer.setTextureDimensions(width, height, this.depthTextureType);\r\n\r\n const reductionSteps = this._thinMinMaxReducer.reductionSteps;\r\n\r\n let targetTexture: FrameGraphTextureHandle;\r\n\r\n this._frameGraph.addPass(`${this.name} Before Min Max Reduction`).setExecuteFunc((context) => {\r\n context.pushDebugGroup(`Min Max Reduction`);\r\n });\r\n\r\n for (let i = 0; i < reductionSteps.length - 1; ++i) {\r\n const reductionStep = reductionSteps[i];\r\n\r\n depthTextureCreationOptions.size = { width: reductionSteps[i + 1].textureWidth, height: reductionSteps[i + 1].textureHeight };\r\n\r\n const postProcess = new FrameGraphPostProcessTask(reductionStep.name, this._frameGraph, reductionStep);\r\n\r\n postProcess.sourceTexture = i == 0 ? this.depthTexture : targetTexture!;\r\n postProcess.sourceSamplingMode = Constants.TEXTURE_NEAREST_NEAREST;\r\n postProcess.targetTexture = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} ${reductionStep.name}`, depthTextureCreationOptions);\r\n\r\n postProcess.record(true);\r\n\r\n targetTexture = postProcess.outputTexture;\r\n }\r\n\r\n this._frameGraph.addPass(`${this.name} After Min Max Reduction`).setExecuteFunc((context) => {\r\n context.popDebugGroup();\r\n if (this._autoCalcDepthBounds && this._currentAutoCalcDepthBoundsCounter >= 0) {\r\n if (++this._currentAutoCalcDepthBoundsCounter >= this._autoCalcDepthBoundsRefreshRate) {\r\n const minMaxTexture = context.getTextureFromHandle(targetTexture!);\r\n if (minMaxTexture) {\r\n this._thinMinMaxReducer.readMinMax(minMaxTexture);\r\n }\r\n }\r\n this._currentAutoCalcDepthBoundsCounter %= this._autoCalcDepthBoundsRefreshRate;\r\n if (this._autoCalcDepthBoundsRefreshRate === 0) {\r\n this._currentAutoCalcDepthBoundsCounter = -1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n super.record();\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this._thinMinMaxReducer.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"csmShadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts"],"names":[],"mappings":"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","sourcesContent":["import { type FrameGraphTextureHandle, type FrameGraph } from \"core/index\";\r\nimport { CascadedShadowGenerator } from \"../../../Lights/Shadows/cascadedShadowGenerator.pure\";\r\nimport { FrameGraphShadowGeneratorTask } from \"./shadowGeneratorTask\";\r\nimport { DirectionalLight } from \"../../../Lights/directionalLight.pure\";\r\nimport { DepthTextureType, ThinMinMaxReducer } from \"../../../Misc/thinMinMaxReducer\";\r\nimport { FrameGraphPostProcessTask } from \"../PostProcesses/postProcessTask\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { textureSizeIsObject } from \"../../../Materials/Textures/textureCreationOptions\";\r\n\r\n/**\r\n * Task used to generate a cascaded shadow map from a list of objects.\r\n */\r\nexport class FrameGraphCascadedShadowGeneratorTask extends FrameGraphShadowGeneratorTask {\r\n protected override _shadowGenerator: CascadedShadowGenerator | undefined;\r\n\r\n /**\r\n * Checks if a shadow generator task is a cascaded shadow generator task.\r\n * @param task The task to check.\r\n * @returns True if the task is a cascaded shadow generator task, else false.\r\n */\r\n public static IsCascadedShadowGenerator(task: FrameGraphShadowGeneratorTask): task is FrameGraphCascadedShadowGeneratorTask {\r\n return (task as FrameGraphCascadedShadowGeneratorTask).numCascades !== undefined;\r\n }\r\n\r\n /**\r\n * The depth texture used by the autoCalcDepthBounds feature (optional if autoCalcDepthBounds is set to false).\r\n * This texture is used to compute the min/max depth bounds of the scene to setup the cascaded shadow generator.\r\n * The texture should contain either “view,” “normalized view,” or “screen” depth values - if possible, connect “normalized view,” or “screen” for best performance.\r\n * Warning: Do not set a texture if you are not using the autoCalcDepthBounds feature, to avoid generating a depth texture that will not be used.\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The type of the depth texture used by the autoCalcDepthBounds feature.\r\n */\r\n public depthTextureType: DepthTextureType = DepthTextureType.NormalizedViewDepth;\r\n\r\n private _numCascades = CascadedShadowGenerator.DEFAULT_CASCADES_COUNT;\r\n /**\r\n * The number of cascades.\r\n */\r\n public get numCascades() {\r\n return this._numCascades;\r\n }\r\n\r\n public set numCascades(value: number) {\r\n if (value === this._numCascades) {\r\n return;\r\n }\r\n\r\n this._numCascades = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.numCascades = value;\r\n this._updateShadowMap();\r\n }\r\n }\r\n\r\n private _debug = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should display the cascades.\r\n */\r\n public get debug() {\r\n return this._debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n if (value === this._debug) {\r\n return;\r\n }\r\n\r\n this._debug = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.debug = value;\r\n }\r\n }\r\n\r\n private _stabilizeCascades = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should stabilize the cascades.\r\n */\r\n public get stabilizeCascades() {\r\n return this._stabilizeCascades;\r\n }\r\n\r\n public set stabilizeCascades(value: boolean) {\r\n if (value === this._stabilizeCascades) {\r\n return;\r\n }\r\n\r\n this._stabilizeCascades = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.stabilizeCascades = value;\r\n }\r\n }\r\n\r\n private _lambda = 0.5;\r\n /**\r\n * Gets or sets the lambda parameter of the shadow generator.\r\n */\r\n public get lambda() {\r\n return this._lambda;\r\n }\r\n\r\n public set lambda(value: number) {\r\n if (value === this._lambda) {\r\n return;\r\n }\r\n\r\n this._lambda = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.lambda = value;\r\n }\r\n }\r\n\r\n private _cascadeBlendPercentage = 0.1;\r\n /**\r\n * Gets or sets the cascade blend percentage.\r\n */\r\n public get cascadeBlendPercentage() {\r\n return this._cascadeBlendPercentage;\r\n }\r\n\r\n public set cascadeBlendPercentage(value: number) {\r\n if (value === this._cascadeBlendPercentage) {\r\n return;\r\n }\r\n\r\n this._cascadeBlendPercentage = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.cascadeBlendPercentage = value;\r\n }\r\n }\r\n\r\n private _depthClamp = true;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should use depth clamping.\r\n */\r\n public get depthClamp() {\r\n return this._depthClamp;\r\n }\r\n\r\n public set depthClamp(value: boolean) {\r\n if (value === this._depthClamp) {\r\n return;\r\n }\r\n\r\n this._depthClamp = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.depthClamp = value;\r\n }\r\n }\r\n\r\n private _autoCalcDepthBounds = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should automatically calculate the depth bounds.\r\n */\r\n public get autoCalcDepthBounds() {\r\n return this._autoCalcDepthBounds;\r\n }\r\n\r\n public set autoCalcDepthBounds(value: boolean) {\r\n if (value === this._autoCalcDepthBounds) {\r\n return;\r\n }\r\n\r\n this._autoCalcDepthBounds = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n\r\n if (!value) {\r\n this._shadowGenerator?.setMinMaxDistance(0, 1);\r\n }\r\n\r\n // All passes but the last one are related to min/max reduction and should be enabled/disabled depending on autoCalcDepthBounds value\r\n const passes = this.passes;\r\n for (let i = 0; i < passes.length - 1; ++i) {\r\n passes[i].disabled = !value;\r\n }\r\n }\r\n\r\n private _currentAutoCalcDepthBoundsCounter = 0;\r\n private _autoCalcDepthBoundsRefreshRate = 1;\r\n /**\r\n * Defines the refresh rate of the min/max computation used when autoCalcDepthBounds is set to true\r\n * Use 0 to compute just once, 1 to compute on every frame, 2 to compute every two frames and so on...\r\n */\r\n public get autoCalcDepthBoundsRefreshRate() {\r\n return this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n public set autoCalcDepthBoundsRefreshRate(value: number) {\r\n this._autoCalcDepthBoundsRefreshRate = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n private _shadowMaxZ = 10000;\r\n /**\r\n * Gets or sets the maximum shadow Z value.\r\n */\r\n public get shadowMaxZ() {\r\n return this._shadowMaxZ;\r\n }\r\n\r\n public set shadowMaxZ(value: number) {\r\n if (value === this._shadowMaxZ) {\r\n return;\r\n }\r\n\r\n this._shadowMaxZ = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.shadowMaxZ = value;\r\n }\r\n }\r\n\r\n protected readonly _thinMinMaxReducer: ThinMinMaxReducer;\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this._thinMinMaxReducer = new ThinMinMaxReducer(frameGraph.scene);\r\n\r\n this._thinMinMaxReducer.onAfterReductionPerformed.add((minmax: { min: number; max: number }) => {\r\n if (!this._shadowGenerator) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n\r\n let min = minmax.min,\r\n max = minmax.max;\r\n\r\n if (min >= max) {\r\n min = 0;\r\n max = 1;\r\n } else if (camera && this.depthTextureType !== DepthTextureType.NormalizedViewDepth) {\r\n if (this.depthTextureType === DepthTextureType.ScreenDepth) {\r\n const engine = this._frameGraph.engine;\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n const p2z = projectionMatrix.m[10];\r\n const p3z = projectionMatrix.m[14];\r\n\r\n if (!engine.isNDCHalfZRange) {\r\n // Convert to NDC depth\r\n min = min * 2 - 1;\r\n max = max * 2 - 1;\r\n }\r\n\r\n // Convert to view depth\r\n min = p3z / (min - p2z);\r\n max = p3z / (max - p2z);\r\n }\r\n\r\n // Convert to normalized view depth\r\n const zNear = camera.minZ;\r\n const zFar = camera.maxZ;\r\n\r\n min = (min - zNear) / (zFar - zNear);\r\n max = (max - zNear) / (zFar - zNear);\r\n }\r\n\r\n if (min !== this._shadowGenerator.minDistance || max !== this._shadowGenerator.maxDistance) {\r\n this._shadowGenerator.setMinMaxDistance(min, max);\r\n }\r\n });\r\n }\r\n\r\n protected override _createShadowGeneratorInstance() {\r\n if (!(this.light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: the CSM shadow generator only supports directional lights.`);\r\n }\r\n this._shadowGenerator = new CascadedShadowGenerator(this.mapSize, this.light, this.useFloat32TextureType, this.camera, this.useRedTextureFormat);\r\n }\r\n\r\n protected override _createShadowGenerator() {\r\n if (super._createShadowGenerator()) {\r\n const shadowGenerator = this._shadowGenerator;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n\r\n shadowGenerator.numCascades = this._numCascades;\r\n shadowGenerator.debug = this._debug;\r\n shadowGenerator.stabilizeCascades = this._stabilizeCascades;\r\n shadowGenerator.lambda = this._lambda;\r\n shadowGenerator.cascadeBlendPercentage = this._cascadeBlendPercentage;\r\n shadowGenerator.depthClamp = this._depthClamp;\r\n shadowGenerator.shadowMaxZ = this._shadowMaxZ;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphCascadedShadowGeneratorTask\";\r\n }\r\n\r\n public override record() {\r\n if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: light, objectList and camera are required`);\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.depthTexture);\r\n\r\n const size = !depthTextureCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(depthTextureCreationOptions.size)\r\n ? depthTextureCreationOptions.size\r\n : { width: depthTextureCreationOptions.size, height: depthTextureCreationOptions.size }\r\n : this._frameGraph.textureManager.getAbsoluteDimensions(depthTextureCreationOptions.size);\r\n\r\n const width = size.width;\r\n const height = size.height;\r\n\r\n depthTextureCreationOptions.sizeIsPercentage = false;\r\n depthTextureCreationOptions.options.formats = [Constants.TEXTUREFORMAT_RG];\r\n depthTextureCreationOptions.options.samples = 1;\r\n\r\n this._thinMinMaxReducer.setTextureDimensions(width, height, this.depthTextureType);\r\n\r\n const reductionSteps = this._thinMinMaxReducer.reductionSteps;\r\n\r\n let targetTexture: FrameGraphTextureHandle;\r\n\r\n this._frameGraph.addPass(`${this.name} Before Min Max Reduction`).setExecuteFunc((context) => {\r\n context.pushDebugGroup(`Min Max Reduction`);\r\n });\r\n\r\n for (let i = 0; i < reductionSteps.length - 1; ++i) {\r\n const reductionStep = reductionSteps[i];\r\n\r\n depthTextureCreationOptions.size = { width: reductionSteps[i + 1].textureWidth, height: reductionSteps[i + 1].textureHeight };\r\n\r\n const postProcess = new FrameGraphPostProcessTask(reductionStep.name, this._frameGraph, reductionStep);\r\n\r\n postProcess.sourceTexture = i == 0 ? this.depthTexture : targetTexture!;\r\n postProcess.sourceSamplingMode = Constants.TEXTURE_NEAREST_NEAREST;\r\n postProcess.targetTexture = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} ${reductionStep.name}`, depthTextureCreationOptions);\r\n\r\n postProcess.record(true);\r\n\r\n targetTexture = postProcess.outputTexture;\r\n }\r\n\r\n this._frameGraph.addPass(`${this.name} After Min Max Reduction`).setExecuteFunc((context) => {\r\n context.popDebugGroup();\r\n if (this._autoCalcDepthBounds && this._currentAutoCalcDepthBoundsCounter >= 0) {\r\n if (++this._currentAutoCalcDepthBoundsCounter >= this._autoCalcDepthBoundsRefreshRate) {\r\n const minMaxTexture = context.getTextureFromHandle(targetTexture!);\r\n if (minMaxTexture) {\r\n this._thinMinMaxReducer.readMinMax(minMaxTexture);\r\n }\r\n }\r\n this._currentAutoCalcDepthBoundsCounter %= this._autoCalcDepthBoundsRefreshRate;\r\n if (this._autoCalcDepthBoundsRefreshRate === 0) {\r\n this._currentAutoCalcDepthBoundsCounter = -1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n super.record();\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this._thinMinMaxReducer.dispose();\r\n }\r\n}\r\n"]}
@@ -141,6 +141,12 @@ export declare class FrameGraphGeometryRendererTask extends FrameGraphObjectRend
141
141
  */
142
142
  removeExcludedSkinnedMeshFromVelocityTexture(skinnedMesh: AbstractMesh): void;
143
143
  getClassName(): string;
144
+ /**
145
+ * Records the geometry renderer task into the frame graph.
146
+ * @param skipCreationOfDisabledPasses defines whether disabled passes should be skipped
147
+ * @param additionalExecute defines an optional callback executed by the pass
148
+ * @returns the recorded render pass
149
+ */
144
150
  record(skipCreationOfDisabledPasses?: boolean, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass;
145
151
  dispose(): void;
146
152
  protected _resolveDanglingHandles(_targetTextures: FrameGraphTextureHandle[]): void;