@onerjs/core 8.56.3 → 9.0.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 (484) hide show
  1. package/Animations/animatable.core.js +36 -0
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animationGroup.pure.d.ts +61 -1
  4. package/Animations/animationGroup.pure.js +191 -2
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/index.d.ts +1 -0
  7. package/Animations/index.js +1 -0
  8. package/Animations/index.js.map +1 -1
  9. package/Animations/pure.d.ts +1 -0
  10. package/Animations/pure.js +1 -0
  11. package/Animations/pure.js.map +1 -1
  12. package/Animations/rootMotion.d.ts +560 -0
  13. package/Animations/rootMotion.js +1709 -0
  14. package/Animations/rootMotion.js.map +1 -0
  15. package/Animations/runtimeAnimation.d.ts +57 -0
  16. package/Animations/runtimeAnimation.js +127 -3
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Cameras/arcRotateCamera.pure.d.ts +2 -0
  19. package/Cameras/arcRotateCamera.pure.js +2 -0
  20. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  21. package/Cameras/camera.pure.js +4 -0
  22. package/Cameras/camera.pure.js.map +1 -1
  23. package/Cameras/targetCamera.pure.d.ts +2 -0
  24. package/Cameras/targetCamera.pure.js +7 -1
  25. package/Cameras/targetCamera.pure.js.map +1 -1
  26. package/Collisions/gpuPicker.js +5 -5
  27. package/Collisions/gpuPicker.js.map +1 -1
  28. package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
  29. package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
  30. package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
  31. package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
  32. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
  34. package/Engines/Extensions/engine.multiRender.pure.js +63 -0
  35. package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
  36. package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
  37. package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
  38. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
  39. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
  40. package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
  41. package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
  42. package/Engines/Extensions/index.d.ts +1 -0
  43. package/Engines/Extensions/index.js +1 -0
  44. package/Engines/Extensions/index.js.map +1 -1
  45. package/Engines/Extensions/pure.d.ts +1 -1
  46. package/Engines/Extensions/pure.js +1 -1
  47. package/Engines/Extensions/pure.js.map +1 -1
  48. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
  49. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
  50. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
  51. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
  52. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
  53. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  54. package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
  55. package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
  56. package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
  57. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  58. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  59. package/Engines/WebGPU/Extensions/index.js +1 -0
  60. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  61. package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
  62. package/Engines/WebGPU/Extensions/pure.js +1 -1
  63. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  64. package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
  65. package/Engines/WebGPU/webgpuBundleList.js +4 -0
  66. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
  68. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  69. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
  70. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  71. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  72. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  73. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
  74. package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
  75. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  76. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  77. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  78. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  79. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
  80. package/Engines/WebGPU/webgpuTextureManager.js +286 -13
  81. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  82. package/Engines/abstractEngine.pure.d.ts +2 -0
  83. package/Engines/abstractEngine.pure.js +7 -3
  84. package/Engines/abstractEngine.pure.js.map +1 -1
  85. package/Engines/constants.d.ts +4 -0
  86. package/Engines/constants.js +4 -0
  87. package/Engines/constants.js.map +1 -1
  88. package/Engines/thinEngine.pure.d.ts +14 -0
  89. package/Engines/thinEngine.pure.js +48 -12
  90. package/Engines/thinEngine.pure.js.map +1 -1
  91. package/Engines/thinNativeEngine.pure.d.ts +1 -0
  92. package/Engines/thinNativeEngine.pure.js +7 -1
  93. package/Engines/thinNativeEngine.pure.js.map +1 -1
  94. package/Engines/thinWebGPUEngine.d.ts +4 -0
  95. package/Engines/thinWebGPUEngine.js +10 -1
  96. package/Engines/thinWebGPUEngine.js.map +1 -1
  97. package/Engines/webgpuEngine.pure.d.ts +5 -2
  98. package/Engines/webgpuEngine.pure.js +48 -13
  99. package/Engines/webgpuEngine.pure.js.map +1 -1
  100. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
  101. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
  102. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
  103. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
  104. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
  105. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
  106. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
  107. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
  108. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
  109. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
  110. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
  111. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
  112. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
  113. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
  115. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
  116. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
  117. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
  118. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
  119. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
  120. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +2 -0
  121. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +4 -0
  122. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
  123. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
  124. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
  125. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
  126. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +53 -10
  127. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
  128. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
  129. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
  130. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
  131. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
  132. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
  133. package/FlowGraph/flowGraph.d.ts +4 -0
  134. package/FlowGraph/flowGraph.js +38 -7
  135. package/FlowGraph/flowGraph.js.map +1 -1
  136. package/FlowGraph/flowGraphBlock.js +3 -0
  137. package/FlowGraph/flowGraphBlock.js.map +1 -1
  138. package/FlowGraph/flowGraphConnection.d.ts +7 -0
  139. package/FlowGraph/flowGraphConnection.js +7 -0
  140. package/FlowGraph/flowGraphConnection.js.map +1 -1
  141. package/FlowGraph/flowGraphContext.d.ts +2 -1
  142. package/FlowGraph/flowGraphContext.js +4 -3
  143. package/FlowGraph/flowGraphContext.js.map +1 -1
  144. package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
  145. package/FlowGraph/flowGraphCoordinator.js +47 -16
  146. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  147. package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
  148. package/FlowGraph/flowGraphEventBlock.js +7 -0
  149. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  150. package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
  151. package/FlowGraph/flowGraphHostResolver.js.map +1 -1
  152. package/FlowGraph/flowGraphParser.js +60 -2
  153. package/FlowGraph/flowGraphParser.js.map +1 -1
  154. package/FlowGraph/serialization.d.ts +2 -0
  155. package/FlowGraph/serialization.js +10 -22
  156. package/FlowGraph/serialization.js.map +1 -1
  157. package/FlowGraph/typeDefinitions.d.ts +8 -0
  158. package/FlowGraph/typeDefinitions.js.map +1 -1
  159. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
  160. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
  161. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
  162. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
  163. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
  164. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
  165. package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
  166. package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
  167. package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
  168. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
  169. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  170. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
  171. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
  172. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/allBlocks.pure.js +2 -0
  174. package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
  175. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  176. package/FrameGraph/Node/Blocks/index.js +1 -0
  177. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  178. package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
  179. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  180. package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
  181. package/FrameGraph/Node/Blocks/pure.js +1 -0
  182. package/FrameGraph/Node/Blocks/pure.js.map +1 -1
  183. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
  184. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
  185. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  186. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  187. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  188. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
  189. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
  190. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
  191. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  192. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
  193. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  194. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
  195. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
  196. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
  197. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
  198. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +69 -33
  199. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  200. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
  201. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  202. package/FrameGraph/frameGraphObjectList.d.ts +6 -1
  203. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  204. package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
  205. package/FrameGraph/frameGraphRenderContext.js +5 -5
  206. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  207. package/FrameGraph/index.d.ts +1 -0
  208. package/FrameGraph/index.js +1 -0
  209. package/FrameGraph/index.js.map +1 -1
  210. package/FrameGraph/pure.d.ts +1 -0
  211. package/FrameGraph/pure.js +1 -0
  212. package/FrameGraph/pure.js.map +1 -1
  213. package/Inputs/scene.inputManager.d.ts +4 -0
  214. package/Inputs/scene.inputManager.js +50 -8
  215. package/Inputs/scene.inputManager.js.map +1 -1
  216. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +5 -5
  217. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
  218. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +5 -5
  219. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  220. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
  221. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +151 -47
  222. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  223. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
  224. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  225. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
  226. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  227. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
  228. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  229. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
  230. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  231. package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
  232. package/Materials/Node/nodeMaterial.pure.js +4 -0
  233. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  234. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  235. package/Materials/Node/nodeMaterialBuildState.js +25 -3
  236. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  237. package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
  238. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
  239. package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +13 -14
  240. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +6 -6
  241. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  242. package/Materials/Textures/baseTexture.pure.js +3 -0
  243. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  244. package/Materials/Textures/cubeTexture.pure.js +1 -1
  245. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  246. package/Materials/Textures/internalTexture.d.ts +8 -1
  247. package/Materials/Textures/internalTexture.js +9 -2
  248. package/Materials/Textures/internalTexture.js.map +1 -1
  249. package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
  250. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  251. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  252. package/Materials/Textures/rawTexture3D.js +1 -1
  253. package/Materials/Textures/rawTexture3D.js.map +1 -1
  254. package/Materials/Textures/textureHelper.functions.d.ts +14 -0
  255. package/Materials/Textures/textureHelper.functions.js +24 -0
  256. package/Materials/Textures/textureHelper.functions.js.map +1 -1
  257. package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
  258. package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
  259. package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
  260. package/Materials/index.d.ts +1 -0
  261. package/Materials/index.js +1 -0
  262. package/Materials/index.js.map +1 -1
  263. package/Materials/materialHelper.geometryrendering.d.ts +46 -1
  264. package/Materials/materialHelper.geometryrendering.js +105 -8
  265. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  266. package/Materials/prepass.defines.d.ts +2 -0
  267. package/Materials/prepass.defines.js +2 -0
  268. package/Materials/prepass.defines.js.map +1 -1
  269. package/Materials/pure.d.ts +1 -0
  270. package/Materials/pure.js +1 -0
  271. package/Materials/pure.js.map +1 -1
  272. package/Materials/standardMaterial.pure.d.ts +2 -0
  273. package/Materials/standardMaterial.pure.js +6 -3
  274. package/Materials/standardMaterial.pure.js.map +1 -1
  275. package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
  276. package/Meshes/Builders/polygonBuilder.pure.js +4 -1
  277. package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
  278. package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
  279. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
  280. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
  281. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -14
  282. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +20 -24
  283. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  284. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -0
  285. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +11 -4
  286. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  287. package/Meshes/abstractMesh.pure.d.ts +18 -0
  288. package/Meshes/abstractMesh.pure.js +22 -0
  289. package/Meshes/abstractMesh.pure.js.map +1 -1
  290. package/Meshes/index.d.ts +1 -0
  291. package/Meshes/index.js +1 -0
  292. package/Meshes/index.js.map +1 -1
  293. package/Meshes/instancedMesh.pure.d.ts +5 -0
  294. package/Meshes/instancedMesh.pure.js +12 -0
  295. package/Meshes/instancedMesh.pure.js.map +1 -1
  296. package/Meshes/mesh.pure.js +23 -8
  297. package/Meshes/mesh.pure.js.map +1 -1
  298. package/Meshes/meshBlendingTag.d.ts +47 -0
  299. package/Meshes/meshBlendingTag.js +64 -0
  300. package/Meshes/meshBlendingTag.js.map +1 -0
  301. package/Meshes/polygonMesh.js +2 -2
  302. package/Meshes/polygonMesh.js.map +1 -1
  303. package/Meshes/pure.d.ts +1 -0
  304. package/Meshes/pure.js +1 -0
  305. package/Meshes/pure.js.map +1 -1
  306. package/Misc/fileTools.pure.js +21 -0
  307. package/Misc/fileTools.pure.js.map +1 -1
  308. package/Misc/snapshotRenderingHelper.js +2 -2
  309. package/Misc/snapshotRenderingHelper.js.map +1 -1
  310. package/Misc/tools.pure.js +1 -1
  311. package/Misc/tools.pure.js.map +1 -1
  312. package/Particles/gpuParticleSystem.pure.d.ts +2 -0
  313. package/Particles/gpuParticleSystem.pure.js +89 -28
  314. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  315. package/Particles/thinParticleSystem.pure.d.ts +2 -0
  316. package/Particles/thinParticleSystem.pure.js +84 -19
  317. package/Particles/thinParticleSystem.pure.js.map +1 -1
  318. package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
  319. package/Particles/webgl2ParticleSystem.pure.js +12 -4
  320. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  321. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
  322. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  323. package/PostProcesses/index.d.ts +2 -0
  324. package/PostProcesses/index.js +2 -0
  325. package/PostProcesses/index.js.map +1 -1
  326. package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
  327. package/PostProcesses/meshBlendingBlueNoise.js +77 -0
  328. package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
  329. package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
  330. package/PostProcesses/meshBlendingPostProcess.js +315 -0
  331. package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
  332. package/PostProcesses/pure.d.ts +2 -0
  333. package/PostProcesses/pure.js +2 -0
  334. package/PostProcesses/pure.js.map +1 -1
  335. package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
  336. package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
  337. package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
  338. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
  339. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  340. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +8 -8
  341. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  342. package/Rendering/boundingBoxRenderer.pure.js +2 -1
  343. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  344. package/Rendering/depthRenderer.pure.js +3 -4
  345. package/Rendering/depthRenderer.pure.js.map +1 -1
  346. package/Rendering/edgesRenderer.pure.d.ts +4 -2
  347. package/Rendering/edgesRenderer.pure.js +11 -2
  348. package/Rendering/edgesRenderer.pure.js.map +1 -1
  349. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +10 -0
  350. package/Rendering/fluidRenderer/fluidRenderingObject.js +20 -0
  351. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  352. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +9 -3
  353. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +14 -9
  354. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  355. package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
  356. package/Rendering/geometryBufferRenderer.pure.js +126 -17
  357. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  358. package/Rendering/objectRenderer.d.ts +7 -1
  359. package/Rendering/objectRenderer.js +45 -7
  360. package/Rendering/objectRenderer.js.map +1 -1
  361. package/Rendering/outlineRenderer.pure.js +6 -2
  362. package/Rendering/outlineRenderer.pure.js.map +1 -1
  363. package/Rendering/renderingManager.d.ts +1 -1
  364. package/Rendering/renderingManager.js +5 -4
  365. package/Rendering/renderingManager.js.map +1 -1
  366. package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  367. package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
  368. package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  369. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
  370. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  371. package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
  372. package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
  373. package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  374. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
  375. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  376. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
  377. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  378. package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
  379. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  380. package/Shaders/ShadersInclude/pbrDebug.js +6 -2
  381. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  382. package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
  383. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  384. package/Shaders/default.fragment.js +31 -40
  385. package/Shaders/default.fragment.js.map +1 -1
  386. package/Shaders/depthOfField.fragment.js +13 -9
  387. package/Shaders/depthOfField.fragment.js.map +1 -1
  388. package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
  389. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  390. package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
  391. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  392. package/Shaders/gaussianSplatting.fragment.js +63 -3
  393. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  394. package/Shaders/gaussianSplatting.vertex.js +80 -0
  395. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  396. package/Shaders/geometry.fragment.js +17 -11
  397. package/Shaders/geometry.fragment.js.map +1 -1
  398. package/Shaders/gpuRenderParticles.fragment.js +43 -1
  399. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  400. package/Shaders/gpuRenderParticles.vertex.js +96 -16
  401. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  402. package/Shaders/meshBlending.fragment.d.ts +5 -0
  403. package/Shaders/meshBlending.fragment.js +519 -0
  404. package/Shaders/meshBlending.fragment.js.map +1 -0
  405. package/Shaders/particles.fragment.js +43 -1
  406. package/Shaders/particles.fragment.js.map +1 -1
  407. package/Shaders/particles.vertex.js +84 -3
  408. package/Shaders/particles.vertex.js.map +1 -1
  409. package/Shaders/sprites.fragment.js +52 -2
  410. package/Shaders/sprites.fragment.js.map +1 -1
  411. package/Shaders/sprites.vertex.js +62 -1
  412. package/Shaders/sprites.vertex.js.map +1 -1
  413. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  414. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
  415. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  416. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
  417. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
  418. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  419. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  420. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  421. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
  422. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
  423. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
  424. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
  425. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
  426. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  427. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
  428. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
  429. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  430. package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
  431. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  432. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
  433. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  434. package/ShadersWGSL/default.fragment.js +17 -48
  435. package/ShadersWGSL/default.fragment.js.map +1 -1
  436. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
  437. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  438. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
  439. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  440. package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
  441. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  442. package/ShadersWGSL/gaussianSplatting.vertex.js +80 -0
  443. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  444. package/ShadersWGSL/geometry.fragment.js +37 -2
  445. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  446. package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
  447. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
  448. package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
  449. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
  450. package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
  451. package/ShadersWGSL/meshBlending.fragment.js +576 -0
  452. package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
  453. package/ShadersWGSL/openpbr.fragment.js +2 -1
  454. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  455. package/ShadersWGSL/particles.fragment.js +45 -1
  456. package/ShadersWGSL/particles.fragment.js.map +1 -1
  457. package/ShadersWGSL/particles.vertex.js +86 -4
  458. package/ShadersWGSL/particles.vertex.js.map +1 -1
  459. package/ShadersWGSL/pbr.fragment.js +2 -1
  460. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  461. package/ShadersWGSL/sprites.fragment.js +56 -2
  462. package/ShadersWGSL/sprites.fragment.js.map +1 -1
  463. package/ShadersWGSL/sprites.vertex.js +62 -1
  464. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  465. package/Sprites/spriteManager.d.ts +13 -0
  466. package/Sprites/spriteManager.js +15 -0
  467. package/Sprites/spriteManager.js.map +1 -1
  468. package/Sprites/spriteRenderer.d.ts +24 -1
  469. package/Sprites/spriteRenderer.js +368 -50
  470. package/Sprites/spriteRenderer.js.map +1 -1
  471. package/Sprites/thinSprite.d.ts +4 -0
  472. package/Sprites/thinSprite.js +4 -0
  473. package/Sprites/thinSprite.js.map +1 -1
  474. package/States/alphaCullingState.d.ts +3 -1
  475. package/States/alphaCullingState.js +18 -3
  476. package/States/alphaCullingState.js.map +1 -1
  477. package/XR/webXRDefaultExperience.d.ts +5 -1
  478. package/XR/webXRDefaultExperience.js.map +1 -1
  479. package/XR/webXREnterExitUI.d.ts +2 -1
  480. package/XR/webXREnterExitUI.js.map +1 -1
  481. package/package.json +1 -1
  482. package/scene.pure.d.ts +23 -0
  483. package/scene.pure.js +35 -0
  484. package/scene.pure.js.map +1 -1
@@ -1,5 +1,4 @@
1
1
 
2
- import { Logger } from "../../Misc/logger.js";
3
2
  import { FluidRenderingObject } from "./fluidRenderingObject.js";
4
3
  /**
5
4
  * Defines a rendering object based on a particle system
@@ -72,15 +71,21 @@ export class FluidRenderingObjectParticleSystem extends FluidRenderingObject {
72
71
  this.useTrueRenderingForDiffuseTexture = false;
73
72
  }
74
73
  /**
75
- * GPUParticleSystem's "size" buffer layout (baseSize, scaleX, scaleY) is incompatible with this feature.
76
- * @returns true if the per-particle size attribute is supported
74
+ * GPUParticleSystem stores "size" as (baseSize, scaleX, scaleY); ParticleSystem as (width, height).
75
+ * @returns the number of components of the "size" attribute
77
76
  */
78
- _supportsPerParticleSizeAttribute() {
79
- if (this._particleSystem.getClassName() === "GPUParticleSystem") {
80
- Logger.Warn("UsePerParticleSizeAttribute is not supported with GPUParticleSystem; falling back to uniform size.");
81
- return false;
82
- }
83
- return true;
77
+ _getPerParticleSizeAttributeSize() {
78
+ return this._isGPUParticleSystem ? 3 : 2;
79
+ }
80
+ /**
81
+ * GPUParticleSystem's "offset" quad is centered ([-0.5, 0.5]); ParticleSystem's is in [0, 1].
82
+ * @returns true if the "offset" attribute is centered
83
+ */
84
+ _usesCenteredOffsetAttribute() {
85
+ return this._isGPUParticleSystem;
86
+ }
87
+ get _isGPUParticleSystem() {
88
+ return this._particleSystem.getClassName() === "GPUParticleSystem";
84
89
  }
85
90
  /**
86
91
  * Indicates if the object is ready to be rendered
@@ -1 +1 @@
1
- {"version":3,"file":"fluidRenderingObjectParticleSystem.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { type VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { type DataBuffer } from \"core/Buffers/dataBuffer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { type Effect } from \"core/Materials/effect\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { type Observer } from \"core/Misc/observable\";\r\nimport { type IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport { type Scene } from \"core/scene\";\r\nimport { type Nullable } from \"core/types\";\r\n\r\nimport { FluidRenderingObject } from \"./fluidRenderingObject\";\r\nimport { type ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Defines a rendering object based on a particle system\r\n */\r\nexport class FluidRenderingObjectParticleSystem extends FluidRenderingObject {\r\n private _particleSystem: IParticleSystem;\r\n private _originalRender: () => number;\r\n private _blendMode: number;\r\n private _onBeforeDrawParticleObserver: Nullable<Observer<Nullable<Effect>>>;\r\n private _updateInAnimate: boolean;\r\n\r\n /** Gets the particle system */\r\n public get particleSystem() {\r\n return this._particleSystem;\r\n }\r\n\r\n /**\r\n * @returns the name of the class\r\n */\r\n public override getClassName(): string {\r\n return \"FluidRenderingObjectParticleSystem\";\r\n }\r\n\r\n private _useTrueRenderingForDiffuseTexture = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the diffuse texture should be generated based on the regular rendering of the particle system (default: true).\r\n * Sometimes, generating the diffuse texture this way may be sub-optimal. In that case, you can disable this property, in which case the particle system will be\r\n * rendered using a ALPHA_COMBINE mode instead of the one used by the particle system.\r\n */\r\n public get useTrueRenderingForDiffuseTexture() {\r\n return this._useTrueRenderingForDiffuseTexture;\r\n }\r\n\r\n public set useTrueRenderingForDiffuseTexture(use: boolean) {\r\n if (this._useTrueRenderingForDiffuseTexture === use) {\r\n return;\r\n }\r\n\r\n this._useTrueRenderingForDiffuseTexture = use;\r\n\r\n if (use) {\r\n this._particleSystem.blendMode = this._blendMode;\r\n this._particleSystem.onBeforeDrawParticlesObservable.remove(this._onBeforeDrawParticleObserver);\r\n this._onBeforeDrawParticleObserver = null;\r\n } else {\r\n this._particleSystem.blendMode = -1;\r\n this._onBeforeDrawParticleObserver = this._particleSystem.onBeforeDrawParticlesObservable.add(() => {\r\n this._engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers\r\n */\r\n public get vertexBuffers(): { [key: string]: VertexBuffer } {\r\n return this._particleSystem.vertexBuffers as { [key: string]: VertexBuffer };\r\n }\r\n\r\n /**\r\n * Gets the index buffer (or null if the object is using instancing)\r\n */\r\n public override get indexBuffer(): Nullable<DataBuffer> {\r\n return this._particleSystem.indexBuffer;\r\n }\r\n\r\n /**\r\n * Creates a new instance of the class\r\n * @param scene The scene the particle system is part of\r\n * @param ps The particle system\r\n * @param shaderLanguage The shader language to use\r\n */\r\n constructor(scene: Scene, ps: IParticleSystem, shaderLanguage?: ShaderLanguage) {\r\n super(scene, shaderLanguage);\r\n\r\n this._particleSystem = ps;\r\n\r\n this._originalRender = ps.render.bind(ps);\r\n this._blendMode = ps.blendMode;\r\n this._onBeforeDrawParticleObserver = null;\r\n this._updateInAnimate = this._particleSystem.updateInAnimate;\r\n this._particleSystem.updateInAnimate = true;\r\n this._particleSystem.render = () => 0;\r\n\r\n this.particleSize = (ps.minSize + ps.maxSize) / 2;\r\n\r\n this.useTrueRenderingForDiffuseTexture = false;\r\n }\r\n\r\n /**\r\n * GPUParticleSystem's \"size\" buffer layout (baseSize, scaleX, scaleY) is incompatible with this feature.\r\n * @returns true if the per-particle size attribute is supported\r\n */\r\n protected override _supportsPerParticleSizeAttribute(): boolean {\r\n if (this._particleSystem.getClassName() === \"GPUParticleSystem\") {\r\n Logger.Warn(\"UsePerParticleSizeAttribute is not supported with GPUParticleSystem; falling back to uniform size.\");\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Indicates if the object is ready to be rendered\r\n * @returns True if everything is ready for the object to be rendered, otherwise false\r\n */\r\n public override isReady(): boolean {\r\n return super.isReady() && this._particleSystem.isReady();\r\n }\r\n\r\n /**\r\n * Gets the number of particles in this particle system\r\n * @returns The number of particles\r\n */\r\n public get numParticles(): number {\r\n return this._particleSystem.getActiveCount();\r\n }\r\n\r\n /**\r\n * Render the diffuse texture for this object\r\n */\r\n public override renderDiffuseTexture(): void {\r\n this._originalRender();\r\n }\r\n\r\n /**\r\n * Releases the resources used by the class\r\n */\r\n public override dispose() {\r\n super.dispose();\r\n\r\n this._particleSystem.onBeforeDrawParticlesObservable.remove(this._onBeforeDrawParticleObserver);\r\n this._onBeforeDrawParticleObserver = null;\r\n this._particleSystem.render = this._originalRender;\r\n this._particleSystem.blendMode = this._blendMode;\r\n this._particleSystem.updateInAnimate = this._updateInAnimate;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fluidRenderingObjectParticleSystem.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { type VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { type DataBuffer } from \"core/Buffers/dataBuffer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { type Effect } from \"core/Materials/effect\";\r\nimport { type Observer } from \"core/Misc/observable\";\r\nimport { type IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport { type Scene } from \"core/scene\";\r\nimport { type Nullable } from \"core/types\";\r\n\r\nimport { FluidRenderingObject } from \"./fluidRenderingObject\";\r\nimport { type ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Defines a rendering object based on a particle system\r\n */\r\nexport class FluidRenderingObjectParticleSystem extends FluidRenderingObject {\r\n private _particleSystem: IParticleSystem;\r\n private _originalRender: () => number;\r\n private _blendMode: number;\r\n private _onBeforeDrawParticleObserver: Nullable<Observer<Nullable<Effect>>>;\r\n private _updateInAnimate: boolean;\r\n\r\n /** Gets the particle system */\r\n public get particleSystem() {\r\n return this._particleSystem;\r\n }\r\n\r\n /**\r\n * @returns the name of the class\r\n */\r\n public override getClassName(): string {\r\n return \"FluidRenderingObjectParticleSystem\";\r\n }\r\n\r\n private _useTrueRenderingForDiffuseTexture = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the diffuse texture should be generated based on the regular rendering of the particle system (default: true).\r\n * Sometimes, generating the diffuse texture this way may be sub-optimal. In that case, you can disable this property, in which case the particle system will be\r\n * rendered using a ALPHA_COMBINE mode instead of the one used by the particle system.\r\n */\r\n public get useTrueRenderingForDiffuseTexture() {\r\n return this._useTrueRenderingForDiffuseTexture;\r\n }\r\n\r\n public set useTrueRenderingForDiffuseTexture(use: boolean) {\r\n if (this._useTrueRenderingForDiffuseTexture === use) {\r\n return;\r\n }\r\n\r\n this._useTrueRenderingForDiffuseTexture = use;\r\n\r\n if (use) {\r\n this._particleSystem.blendMode = this._blendMode;\r\n this._particleSystem.onBeforeDrawParticlesObservable.remove(this._onBeforeDrawParticleObserver);\r\n this._onBeforeDrawParticleObserver = null;\r\n } else {\r\n this._particleSystem.blendMode = -1;\r\n this._onBeforeDrawParticleObserver = this._particleSystem.onBeforeDrawParticlesObservable.add(() => {\r\n this._engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers\r\n */\r\n public get vertexBuffers(): { [key: string]: VertexBuffer } {\r\n return this._particleSystem.vertexBuffers as { [key: string]: VertexBuffer };\r\n }\r\n\r\n /**\r\n * Gets the index buffer (or null if the object is using instancing)\r\n */\r\n public override get indexBuffer(): Nullable<DataBuffer> {\r\n return this._particleSystem.indexBuffer;\r\n }\r\n\r\n /**\r\n * Creates a new instance of the class\r\n * @param scene The scene the particle system is part of\r\n * @param ps The particle system\r\n * @param shaderLanguage The shader language to use\r\n */\r\n constructor(scene: Scene, ps: IParticleSystem, shaderLanguage?: ShaderLanguage) {\r\n super(scene, shaderLanguage);\r\n\r\n this._particleSystem = ps;\r\n\r\n this._originalRender = ps.render.bind(ps);\r\n this._blendMode = ps.blendMode;\r\n this._onBeforeDrawParticleObserver = null;\r\n this._updateInAnimate = this._particleSystem.updateInAnimate;\r\n this._particleSystem.updateInAnimate = true;\r\n this._particleSystem.render = () => 0;\r\n\r\n this.particleSize = (ps.minSize + ps.maxSize) / 2;\r\n\r\n this.useTrueRenderingForDiffuseTexture = false;\r\n }\r\n\r\n /**\r\n * GPUParticleSystem stores \"size\" as (baseSize, scaleX, scaleY); ParticleSystem as (width, height).\r\n * @returns the number of components of the \"size\" attribute\r\n */\r\n protected override _getPerParticleSizeAttributeSize(): number {\r\n return this._isGPUParticleSystem ? 3 : 2;\r\n }\r\n\r\n /**\r\n * GPUParticleSystem's \"offset\" quad is centered ([-0.5, 0.5]); ParticleSystem's is in [0, 1].\r\n * @returns true if the \"offset\" attribute is centered\r\n */\r\n protected override _usesCenteredOffsetAttribute(): boolean {\r\n return this._isGPUParticleSystem;\r\n }\r\n\r\n private get _isGPUParticleSystem(): boolean {\r\n return this._particleSystem.getClassName() === \"GPUParticleSystem\";\r\n }\r\n\r\n /**\r\n * Indicates if the object is ready to be rendered\r\n * @returns True if everything is ready for the object to be rendered, otherwise false\r\n */\r\n public override isReady(): boolean {\r\n return super.isReady() && this._particleSystem.isReady();\r\n }\r\n\r\n /**\r\n * Gets the number of particles in this particle system\r\n * @returns The number of particles\r\n */\r\n public get numParticles(): number {\r\n return this._particleSystem.getActiveCount();\r\n }\r\n\r\n /**\r\n * Render the diffuse texture for this object\r\n */\r\n public override renderDiffuseTexture(): void {\r\n this._originalRender();\r\n }\r\n\r\n /**\r\n * Releases the resources used by the class\r\n */\r\n public override dispose() {\r\n super.dispose();\r\n\r\n this._particleSystem.onBeforeDrawParticlesObservable.remove(this._onBeforeDrawParticleObserver);\r\n this._onBeforeDrawParticleObserver = null;\r\n this._particleSystem.render = this._originalRender;\r\n this._particleSystem.blendMode = this._blendMode;\r\n this._particleSystem.updateInAnimate = this._updateInAnimate;\r\n }\r\n}\r\n"]}
@@ -8,7 +8,7 @@ import { type Scene } from "../scene.pure.js";
8
8
  import { type AbstractMesh } from "../Meshes/abstractMesh.pure.js";
9
9
  import { type Nullable } from "../types.js";
10
10
  import { ShaderLanguage } from "../Materials/shaderLanguage.js";
11
- import { type GeometryRenderingObjectIdProvider } from "../Materials/materialHelper.geometryrendering.js";
11
+ import { type GeometryRenderingMeshBlendTagProvider, type GeometryRenderingObjectIdProvider } from "../Materials/materialHelper.geometryrendering.js";
12
12
  /** @internal */
13
13
  interface ISavedTransformationMatrix {
14
14
  world: Matrix;
@@ -82,6 +82,10 @@ export declare class GeometryBufferRenderer {
82
82
  * Object IDs are stored as 24-bit unsigned integers encoded in the RGB channels.
83
83
  */
84
84
  static readonly OBJECT_ID_TEXTURE_TYPE = 8;
85
+ /**
86
+ * Constant used to retrieve the packed mesh-blending tag texture index in the G-Buffer textures array.
87
+ */
88
+ static readonly MESH_BLEND_TAG_TEXTURE_TYPE = 9;
85
89
  /**
86
90
  * Dictionary used to store the previous transformation matrices of each rendered mesh
87
91
  * in order to compute objects velocities when enableVelocity is set to "true"
@@ -103,8 +107,10 @@ export declare class GeometryBufferRenderer {
103
107
  * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).
104
108
  */
105
109
  excludedSkinnedMeshesFromVelocity: AbstractMesh[];
110
+ private _renderTransparentMeshes;
106
111
  /** Gets or sets a boolean indicating if transparent meshes should be rendered */
107
- renderTransparentMeshes: boolean;
112
+ get renderTransparentMeshes(): boolean;
113
+ set renderTransparentMeshes(value: boolean);
108
114
  /**
109
115
  * Provides the object ID written for each rendered mesh.
110
116
  *
@@ -112,9 +118,18 @@ export declare class GeometryBufferRenderer {
112
118
  * Instances use the ID of their source mesh. The default is the mesh unique ID.
113
119
  * Default IDs are only stable for the lifetime of the current scene and should not be persisted.
114
120
  * The provider runs in the render hot path and may be called multiple times for the same mesh in a frame.
115
- * @see https://playground.babylonjs.com/#REC26C#0
121
+ * @see https://playground.babylonjs.com/?version=preview#SQXZ3X#1
116
122
  */
117
123
  objectIdProvider?: GeometryRenderingObjectIdProvider;
124
+ /**
125
+ * Provides the packed mesh-blending tag written for each rendered mesh.
126
+ *
127
+ * Tags must be 0 or contain a group ID between 1 and 63 in their low six bits. Tag 0 disables mesh blending.
128
+ * By default, meshes use their `meshBlendingTag` property. Instances and thin instances use the source mesh tag.
129
+ * The provider runs in the render hot path and receives the source mesh for instanced draws.
130
+ * It should avoid allocations and return a consistent value for a mesh during a render.
131
+ */
132
+ meshBlendTagProvider?: GeometryRenderingMeshBlendTagProvider;
118
133
  /**
119
134
  * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)
120
135
  */
@@ -138,6 +153,7 @@ export declare class GeometryBufferRenderer {
138
153
  private _enableScreenspaceDepth;
139
154
  private _enableIrradiance;
140
155
  private _enableObjectId;
156
+ private _enableMeshBlendTag;
141
157
  private _depthFormat;
142
158
  private _clearColor;
143
159
  private _clearDepthColor;
@@ -150,6 +166,7 @@ export declare class GeometryBufferRenderer {
150
166
  private _screenspaceDepthIndex;
151
167
  private _irradianceIndex;
152
168
  private _objectIdIndex;
169
+ private _meshBlendTagIndex;
153
170
  private _linkedWithPrePass;
154
171
  private _prePassRenderer;
155
172
  private _attachmentsFromPrePass;
@@ -283,9 +300,25 @@ export declare class GeometryBufferRenderer {
283
300
  *
284
301
  * Object ID rendering currently requires a single-sample G buffer.
285
302
  * Object ID rendering is not supported when the G buffer is linked to the PrePassRenderer.
286
- * @see https://playground.babylonjs.com/#REC26C#0
303
+ * @see https://playground.babylonjs.com/?version=preview#SQXZ3X#1
287
304
  */
288
305
  set enableObjectId(enable: boolean);
306
+ /**
307
+ * Gets whether packed mesh-blending tags are enabled for the G buffer.
308
+ */
309
+ get enableMeshBlendingTag(): boolean;
310
+ /**
311
+ * Sets whether packed mesh-blending tags are enabled for the G buffer.
312
+ *
313
+ * Mesh-blending tags use a single-sample R8UI color attachment and are supported on WebGL2 and WebGPU.
314
+ * Transparent rendering remains controlled by renderTransparentMeshes. Applications are responsible for
315
+ * ensuring that transparent draws do not invalidate the SceneColor and geometry-input correspondence required
316
+ * by the mesh-blending pass. On WebGL2, transparent rendering with this output requires per-target blend parameters.
317
+ *
318
+ * Enabling or disabling this output rebuilds the renderer's targets. The application retains ownership
319
+ * of the GeometryBufferRenderer and of every post process that consumes the output.
320
+ */
321
+ set enableMeshBlendingTag(enable: boolean);
289
322
  /**
290
323
  * This will store a mask in the alpha channel of the irradiance texture to indicate which pixels have
291
324
  * scattering and should be taken into account when applying image-based lighting.
@@ -357,6 +390,7 @@ export declare class GeometryBufferRenderer {
357
390
  dispose(): void;
358
391
  private _assignRenderTargetIndices;
359
392
  protected _createRenderTargets(): void;
393
+ private _getRenderTargetDimensions;
360
394
  private _copyBonesTransformationMatrices;
361
395
  }
362
396
  /**
@@ -11,8 +11,9 @@ import { MaterialFlags } from "../Materials/materialFlags.js";
11
11
  import { BindClipPlane, PrepareStringDefinesForClipPlanes, AddClipPlaneUniforms } from "../Materials/clipPlaneMaterialHelper.js";
12
12
  import { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances, PrepareDefinesForIBL, PrepareUniformsAndSamplersForIBL, } from "../Materials/materialHelper.functions.js";
13
13
  import { RegisterGeometryBufferRendererSceneComponent } from "./geometryBufferRendererSceneComponent.pure.js";
14
- import { IsGaussianSplattingClassName } from "../Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js";
15
- import { _GetGeometryRenderingObjectId } from "../Materials/materialHelper.geometryrendering.js";
14
+ import { _IsGaussianSplattingMesh } from "../Meshes/GaussianSplatting/gaussianSplatting.functions.js";
15
+ import { _IsMeshBlendingSupported } from "../Meshes/meshBlendingTag.js";
16
+ import { _GetGeometryRenderingMeshBlendTag, _GetGeometryRenderingObjectId, } from "../Materials/materialHelper.geometryrendering.js";
16
17
  export const Samplers = [
17
18
  "diffuseSampler",
18
19
  "bumpSampler",
@@ -30,6 +31,7 @@ export const Uniforms = [
30
31
  "mBones",
31
32
  "viewProjection",
32
33
  "diffuseMatrix",
34
+ "alphaCutOff",
33
35
  "view",
34
36
  "previousWorld",
35
37
  "previousViewProjection",
@@ -56,11 +58,22 @@ export const Uniforms = [
56
58
  "morphTargetTextureIndices",
57
59
  "boneTextureInfo",
58
60
  "objectId",
61
+ "meshBlendTag",
59
62
  ];
60
63
  /**
61
64
  * This renderer is helpful to fill one of the render target with a geometry buffer.
62
65
  */
63
66
  export class GeometryBufferRenderer {
67
+ /** Gets or sets a boolean indicating if transparent meshes should be rendered */
68
+ get renderTransparentMeshes() {
69
+ return this._renderTransparentMeshes;
70
+ }
71
+ set renderTransparentMeshes(value) {
72
+ if (value && this._enableMeshBlendTag && !this._scene.getEngine().getCaps().blendParametersPerTarget) {
73
+ throw new Error("GeometryBufferRenderer: transparent mesh-blending tags require per-target blend parameters");
74
+ }
75
+ this._renderTransparentMeshes = value;
76
+ }
64
77
  /**
65
78
  * Gets a boolean indicating if normals are encoded in the [0,1] range in the render target. If true, you should do `normal = normal_rt * 2.0 - 1.0` to get the right normal
66
79
  */
@@ -73,6 +86,9 @@ export class GeometryBufferRenderer {
73
86
  * This method should only be called by the PrePassRenderer itself
74
87
  */
75
88
  _linkPrePassRenderer(prePassRenderer) {
89
+ if (this._enableObjectId || this._enableMeshBlendTag) {
90
+ throw new Error("GeometryBufferRenderer: object ID and mesh-blending tag textures are not supported when linked to the PrePassRenderer");
91
+ }
76
92
  this._linkedWithPrePass = true;
77
93
  this._prePassRenderer = prePassRenderer;
78
94
  if (this._multiRenderTarget) {
@@ -106,6 +122,7 @@ export class GeometryBufferRenderer {
106
122
  this._enableScreenspaceDepth = false;
107
123
  this._enableIrradiance = false;
108
124
  this._enableObjectId = false;
125
+ this._enableMeshBlendTag = false;
109
126
  this._attachmentsFromPrePass = [];
110
127
  }
111
128
  /**
@@ -150,6 +167,10 @@ export class GeometryBufferRenderer {
150
167
  this._objectIdIndex = index;
151
168
  this._enableObjectId = true;
152
169
  }
170
+ else if (geometryBufferType === GeometryBufferRenderer.MESH_BLEND_TAG_TEXTURE_TYPE) {
171
+ this._meshBlendTagIndex = index;
172
+ this._enableMeshBlendTag = true;
173
+ }
153
174
  }
154
175
  /**
155
176
  * @internal
@@ -211,6 +232,8 @@ export class GeometryBufferRenderer {
211
232
  return this._irradianceIndex;
212
233
  case GeometryBufferRenderer.OBJECT_ID_TEXTURE_TYPE:
213
234
  return this._objectIdIndex;
235
+ case GeometryBufferRenderer.MESH_BLEND_TAG_TEXTURE_TYPE:
236
+ return this._meshBlendTagIndex;
214
237
  default:
215
238
  return -1;
216
239
  }
@@ -360,7 +383,7 @@ export class GeometryBufferRenderer {
360
383
  *
361
384
  * Object ID rendering currently requires a single-sample G buffer.
362
385
  * Object ID rendering is not supported when the G buffer is linked to the PrePassRenderer.
363
- * @see https://playground.babylonjs.com/#REC26C#0
386
+ * @see https://playground.babylonjs.com/?version=preview#SQXZ3X#1
364
387
  */
365
388
  set enableObjectId(enable) {
366
389
  if (enable && this._linkedWithPrePass) {
@@ -386,6 +409,58 @@ export class GeometryBufferRenderer {
386
409
  this._createRenderTargets();
387
410
  }
388
411
  }
412
+ /**
413
+ * Gets whether packed mesh-blending tags are enabled for the G buffer.
414
+ */
415
+ get enableMeshBlendingTag() {
416
+ return this._enableMeshBlendTag;
417
+ }
418
+ /**
419
+ * Sets whether packed mesh-blending tags are enabled for the G buffer.
420
+ *
421
+ * Mesh-blending tags use a single-sample R8UI color attachment and are supported on WebGL2 and WebGPU.
422
+ * Transparent rendering remains controlled by renderTransparentMeshes. Applications are responsible for
423
+ * ensuring that transparent draws do not invalidate the SceneColor and geometry-input correspondence required
424
+ * by the mesh-blending pass. On WebGL2, transparent rendering with this output requires per-target blend parameters.
425
+ *
426
+ * Enabling or disabling this output rebuilds the renderer's targets. The application retains ownership
427
+ * of the GeometryBufferRenderer and of every post process that consumes the output.
428
+ */
429
+ set enableMeshBlendingTag(enable) {
430
+ if (this._enableMeshBlendTag === enable) {
431
+ return;
432
+ }
433
+ if (enable) {
434
+ const engine = this._scene.getEngine();
435
+ if (!_IsMeshBlendingSupported(engine)) {
436
+ throw new Error("GeometryBufferRenderer: mesh-blending tag textures require WebGL2 or WebGPU");
437
+ }
438
+ if (this.renderTransparentMeshes && !engine.isWebGPU && !engine.getCaps().blendParametersPerTarget) {
439
+ throw new Error("GeometryBufferRenderer: transparent mesh-blending tags require per-target blend parameters");
440
+ }
441
+ if (this._linkedWithPrePass) {
442
+ throw new Error("GeometryBufferRenderer: mesh-blending tag textures are not supported when linked to the PrePassRenderer");
443
+ }
444
+ if (this.samples !== 1) {
445
+ throw new Error("GeometryBufferRenderer: mesh-blending tag textures require samples to be 1");
446
+ }
447
+ if (!this._enableMeshBlendTag) {
448
+ const maxDrawBuffers = Math.min(engine.getCaps().maxDrawBuffers ?? 1, 8);
449
+ const attachmentCount = this._assignRenderTargetIndices()[0] + 1;
450
+ if (engine.getCaps().drawBuffersExtension && attachmentCount > maxDrawBuffers) {
451
+ throw new Error(`GeometryBufferRenderer: ${attachmentCount} color attachments were requested, but this engine supports at most ${maxDrawBuffers}`);
452
+ }
453
+ }
454
+ }
455
+ this._enableMeshBlendTag = enable;
456
+ if (!enable) {
457
+ this._meshBlendTagIndex = -1;
458
+ }
459
+ if (!this._linkedWithPrePass) {
460
+ this.dispose();
461
+ this._createRenderTargets();
462
+ }
463
+ }
389
464
  /**
390
465
  * Gets the scene associated with the buffer.
391
466
  */
@@ -431,8 +506,7 @@ export class GeometryBufferRenderer {
431
506
  * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).
432
507
  */
433
508
  this.excludedSkinnedMeshesFromVelocity = [];
434
- /** Gets or sets a boolean indicating if transparent meshes should be rendered */
435
- this.renderTransparentMeshes = true;
509
+ this._renderTransparentMeshes = true;
436
510
  /**
437
511
  * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)
438
512
  */
@@ -448,6 +522,7 @@ export class GeometryBufferRenderer {
448
522
  this._enableScreenspaceDepth = false;
449
523
  this._enableIrradiance = false;
450
524
  this._enableObjectId = false;
525
+ this._enableMeshBlendTag = false;
451
526
  this._clearColor = new Color4(0, 0, 0, 0);
452
527
  this._clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ
453
528
  this._positionIndex = -1;
@@ -459,6 +534,7 @@ export class GeometryBufferRenderer {
459
534
  this._screenspaceDepthIndex = -1;
460
535
  this._irradianceIndex = -1;
461
536
  this._objectIdIndex = -1;
537
+ this._meshBlendTagIndex = -1;
462
538
  this._linkedWithPrePass = false;
463
539
  /**
464
540
  * This will store a mask in the alpha channel of the irradiance texture to indicate which pixels have
@@ -514,7 +590,7 @@ export class GeometryBufferRenderer {
514
590
  // The generic geometry.vertex shader misreads this as world coordinates, producing
515
591
  // garbage positions and normals, and thus they should be excluded from the G-buffer
516
592
  // rendering.
517
- if (IsGaussianSplattingClassName(subMesh.getMesh().getClassName())) {
593
+ if (_IsGaussianSplattingMesh(subMesh.getMesh())) {
518
594
  return false;
519
595
  }
520
596
  const defines = [];
@@ -816,6 +892,10 @@ export class GeometryBufferRenderer {
816
892
  defines.push("#define OBJECT_ID");
817
893
  defines.push("#define OBJECT_ID_INDEX " + this._objectIdIndex);
818
894
  }
895
+ if (this._enableMeshBlendTag) {
896
+ defines.push("#define MESH_BLEND_TAG");
897
+ defines.push("#define MESH_BLEND_TAG_INDEX " + this._meshBlendTagIndex);
898
+ }
819
899
  if (this.generateNormalsInWorldSpace) {
820
900
  defines.push("#define NORMAL_WORLDSPACE");
821
901
  }
@@ -906,6 +986,9 @@ export class GeometryBufferRenderer {
906
986
  if (this._enableObjectId && value !== 1) {
907
987
  throw new Error("GeometryBufferRenderer: object ID textures currently require samples to be 1");
908
988
  }
989
+ if (this._enableMeshBlendTag && value !== 1) {
990
+ throw new Error("GeometryBufferRenderer: mesh-blending tag textures require samples to be 1");
991
+ }
909
992
  this._multiRenderTarget.samples = value;
910
993
  }
911
994
  /**
@@ -984,6 +1067,16 @@ export class GeometryBufferRenderer {
984
1067
  samplingMode: 1,
985
1068
  });
986
1069
  }
1070
+ if (this._enableMeshBlendTag) {
1071
+ this._meshBlendTagIndex = count;
1072
+ count++;
1073
+ textureNames.push("gBuffer_MeshBlendTag");
1074
+ textureTypesAndFormats.push({
1075
+ textureType: 0,
1076
+ textureFormat: 8,
1077
+ samplingMode: 1,
1078
+ });
1079
+ }
987
1080
  return [count, textureNames, textureTypesAndFormats];
988
1081
  }
989
1082
  _createRenderTargets() {
@@ -1000,9 +1093,7 @@ export class GeometryBufferRenderer {
1000
1093
  else if (engine._caps.textureHalfFloat && engine._caps.textureHalfFloatLinearFiltering) {
1001
1094
  type = 2;
1002
1095
  }
1003
- const dimensions = this._ratioOrDimensions.width !== undefined
1004
- ? this._ratioOrDimensions
1005
- : { width: engine.getRenderWidth() * this._ratioOrDimensions, height: engine.getRenderHeight() * this._ratioOrDimensions };
1096
+ const dimensions = this._getRenderTargetDimensions();
1006
1097
  const textureTypes = [];
1007
1098
  const textureFormats = [];
1008
1099
  const samplingModes = [];
@@ -1043,20 +1134,16 @@ export class GeometryBufferRenderer {
1043
1134
  const attachmentsAllButDepth = engine.buildTextureLayout(layoutAttachmentsAllButDepth);
1044
1135
  const attachmentsDepthOnly = engine.buildTextureLayout(layoutAttachmentsDepthOnly);
1045
1136
  this._multiRenderTarget.onClearObservable.add((engine) => {
1046
- engine.bindAttachments(this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll);
1047
- engine.clear(this._clearColor, true, true, true);
1137
+ const colorAttachments = this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll;
1138
+ engine.clearAttachments(this._clearColor, colorAttachments, true, true, true);
1048
1139
  if (this.useSpecificClearForDepthTexture) {
1049
- engine.bindAttachments(attachmentsDepthOnly);
1050
- engine.clear(this._clearDepthColor, true, true, true);
1140
+ engine.clearAttachments(this._clearDepthColor, attachmentsDepthOnly, true, false, false);
1051
1141
  }
1052
1142
  engine.bindAttachments(attachmentsAll);
1053
1143
  });
1054
1144
  this._resizeObserver = engine.onResizeObservable.add(() => {
1055
1145
  if (this._multiRenderTarget) {
1056
- const dimensions = this._ratioOrDimensions.width !== undefined
1057
- ? this._ratioOrDimensions
1058
- : { width: engine.getRenderWidth() * this._ratioOrDimensions, height: engine.getRenderHeight() * this._ratioOrDimensions };
1059
- this._multiRenderTarget.resize(dimensions);
1146
+ this._multiRenderTarget.resize(this._getRenderTargetDimensions());
1060
1147
  }
1061
1148
  });
1062
1149
  // Custom render function
@@ -1126,6 +1213,7 @@ export class GeometryBufferRenderer {
1126
1213
  if (alphaTexture) {
1127
1214
  effect.setTexture("diffuseSampler", alphaTexture);
1128
1215
  effect.setMatrix("diffuseMatrix", alphaTexture.getTextureMatrix());
1216
+ effect.setFloat("alphaCutOff", material.alphaCutOff ?? 0.4);
1129
1217
  }
1130
1218
  }
1131
1219
  // Bump
@@ -1353,6 +1441,10 @@ export class GeometryBufferRenderer {
1353
1441
  }
1354
1442
  effect.setFloat("objectId", objectId);
1355
1443
  }
1444
+ if (this._enableMeshBlendTag) {
1445
+ const meshBlendTag = this.meshBlendTagProvider ? _GetGeometryRenderingMeshBlendTag(renderingMesh, this.meshBlendTagProvider) : renderingMesh.meshBlendingTag;
1446
+ effect.setInt("meshBlendTag", meshBlendTag);
1447
+ }
1356
1448
  if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {
1357
1449
  effect.setMatrix("world", world);
1358
1450
  }
@@ -1420,6 +1512,19 @@ export class GeometryBufferRenderer {
1420
1512
  engine.setDepthWrite(true);
1421
1513
  };
1422
1514
  }
1515
+ _getRenderTargetDimensions() {
1516
+ if (typeof this._ratioOrDimensions === "object") {
1517
+ return {
1518
+ width: Math.max(1, Math.floor(this._ratioOrDimensions.width)),
1519
+ height: Math.max(1, Math.floor(this._ratioOrDimensions.height)),
1520
+ };
1521
+ }
1522
+ const engine = this._scene.getEngine();
1523
+ return {
1524
+ width: Math.max(1, Math.floor(engine.getRenderWidth() * this._ratioOrDimensions)),
1525
+ height: Math.max(1, Math.floor(engine.getRenderHeight() * this._ratioOrDimensions)),
1526
+ };
1527
+ }
1423
1528
  // Copies the bones transformation matrices into the target array and returns the target's reference
1424
1529
  _copyBonesTransformationMatrices(source, target) {
1425
1530
  for (let i = 0; i < source.length; i++) {
@@ -1478,6 +1583,10 @@ GeometryBufferRenderer.IRRADIANCE_TEXTURE_TYPE = 7;
1478
1583
  * Object IDs are stored as 24-bit unsigned integers encoded in the RGB channels.
1479
1584
  */
1480
1585
  GeometryBufferRenderer.OBJECT_ID_TEXTURE_TYPE = 8;
1586
+ /**
1587
+ * Constant used to retrieve the packed mesh-blending tag texture index in the G-Buffer textures array.
1588
+ */
1589
+ GeometryBufferRenderer.MESH_BLEND_TAG_TEXTURE_TYPE = 9;
1481
1590
  /**
1482
1591
  * @internal
1483
1592
  */