@onerjs/core 8.56.4 → 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 (482) 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/targetCamera.pure.d.ts +2 -0
  22. package/Cameras/targetCamera.pure.js +7 -1
  23. package/Cameras/targetCamera.pure.js.map +1 -1
  24. package/Collisions/gpuPicker.js +5 -5
  25. package/Collisions/gpuPicker.js.map +1 -1
  26. package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
  27. package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
  28. package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
  29. package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
  30. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
  31. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
  32. package/Engines/Extensions/engine.multiRender.pure.js +63 -0
  33. package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
  34. package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
  35. package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
  36. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
  37. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
  38. package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
  39. package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
  40. package/Engines/Extensions/index.d.ts +1 -0
  41. package/Engines/Extensions/index.js +1 -0
  42. package/Engines/Extensions/index.js.map +1 -1
  43. package/Engines/Extensions/pure.d.ts +1 -1
  44. package/Engines/Extensions/pure.js +1 -1
  45. package/Engines/Extensions/pure.js.map +1 -1
  46. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
  47. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
  48. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
  49. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
  50. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
  51. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  52. package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
  53. package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
  54. package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
  55. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  56. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  57. package/Engines/WebGPU/Extensions/index.js +1 -0
  58. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  59. package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
  60. package/Engines/WebGPU/Extensions/pure.js +1 -1
  61. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  62. package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
  63. package/Engines/WebGPU/webgpuBundleList.js +4 -0
  64. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  65. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
  66. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  67. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
  68. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  69. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  70. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  71. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
  72. package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
  73. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  74. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  75. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  76. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  77. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
  78. package/Engines/WebGPU/webgpuTextureManager.js +286 -13
  79. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  80. package/Engines/abstractEngine.pure.d.ts +2 -0
  81. package/Engines/abstractEngine.pure.js +7 -3
  82. package/Engines/abstractEngine.pure.js.map +1 -1
  83. package/Engines/constants.d.ts +4 -0
  84. package/Engines/constants.js +4 -0
  85. package/Engines/constants.js.map +1 -1
  86. package/Engines/thinEngine.pure.d.ts +14 -0
  87. package/Engines/thinEngine.pure.js +48 -12
  88. package/Engines/thinEngine.pure.js.map +1 -1
  89. package/Engines/thinNativeEngine.pure.d.ts +1 -0
  90. package/Engines/thinNativeEngine.pure.js +7 -1
  91. package/Engines/thinNativeEngine.pure.js.map +1 -1
  92. package/Engines/thinWebGPUEngine.d.ts +4 -0
  93. package/Engines/thinWebGPUEngine.js +10 -1
  94. package/Engines/thinWebGPUEngine.js.map +1 -1
  95. package/Engines/webgpuEngine.pure.d.ts +5 -2
  96. package/Engines/webgpuEngine.pure.js +48 -13
  97. package/Engines/webgpuEngine.pure.js.map +1 -1
  98. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
  99. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
  100. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
  101. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
  102. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
  103. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
  104. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
  105. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
  106. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
  107. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
  108. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
  109. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
  110. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
  111. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
  112. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
  113. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
  115. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
  116. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
  117. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
  118. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +2 -0
  119. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +4 -0
  120. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
  121. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
  122. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
  123. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
  124. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +53 -10
  125. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
  126. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
  127. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
  128. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
  129. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
  130. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
  131. package/FlowGraph/flowGraph.d.ts +4 -0
  132. package/FlowGraph/flowGraph.js +38 -7
  133. package/FlowGraph/flowGraph.js.map +1 -1
  134. package/FlowGraph/flowGraphBlock.js +3 -0
  135. package/FlowGraph/flowGraphBlock.js.map +1 -1
  136. package/FlowGraph/flowGraphConnection.d.ts +7 -0
  137. package/FlowGraph/flowGraphConnection.js +7 -0
  138. package/FlowGraph/flowGraphConnection.js.map +1 -1
  139. package/FlowGraph/flowGraphContext.d.ts +2 -1
  140. package/FlowGraph/flowGraphContext.js +4 -3
  141. package/FlowGraph/flowGraphContext.js.map +1 -1
  142. package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
  143. package/FlowGraph/flowGraphCoordinator.js +47 -16
  144. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  145. package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
  146. package/FlowGraph/flowGraphEventBlock.js +7 -0
  147. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  148. package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
  149. package/FlowGraph/flowGraphHostResolver.js.map +1 -1
  150. package/FlowGraph/flowGraphParser.js +60 -2
  151. package/FlowGraph/flowGraphParser.js.map +1 -1
  152. package/FlowGraph/serialization.d.ts +2 -0
  153. package/FlowGraph/serialization.js +10 -22
  154. package/FlowGraph/serialization.js.map +1 -1
  155. package/FlowGraph/typeDefinitions.d.ts +8 -0
  156. package/FlowGraph/typeDefinitions.js.map +1 -1
  157. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
  158. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
  159. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
  160. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
  161. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
  162. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
  163. package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
  164. package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
  165. package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
  166. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
  167. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  168. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
  169. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
  170. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  171. package/FrameGraph/Node/Blocks/allBlocks.pure.js +2 -0
  172. package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  174. package/FrameGraph/Node/Blocks/index.js +1 -0
  175. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  176. package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
  177. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  178. package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
  179. package/FrameGraph/Node/Blocks/pure.js +1 -0
  180. package/FrameGraph/Node/Blocks/pure.js.map +1 -1
  181. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
  182. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
  183. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  184. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  185. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  186. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
  187. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
  188. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
  189. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  190. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
  191. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  192. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
  193. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
  194. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
  195. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
  196. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +69 -33
  197. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  198. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
  199. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  200. package/FrameGraph/frameGraphObjectList.d.ts +6 -1
  201. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  202. package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
  203. package/FrameGraph/frameGraphRenderContext.js +5 -5
  204. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  205. package/FrameGraph/index.d.ts +1 -0
  206. package/FrameGraph/index.js +1 -0
  207. package/FrameGraph/index.js.map +1 -1
  208. package/FrameGraph/pure.d.ts +1 -0
  209. package/FrameGraph/pure.js +1 -0
  210. package/FrameGraph/pure.js.map +1 -1
  211. package/Inputs/scene.inputManager.d.ts +4 -0
  212. package/Inputs/scene.inputManager.js +50 -8
  213. package/Inputs/scene.inputManager.js.map +1 -1
  214. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +5 -5
  215. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
  216. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +5 -5
  217. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  218. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
  219. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +151 -47
  220. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  221. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
  222. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  223. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
  224. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  225. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
  226. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  227. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
  228. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  229. package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
  230. package/Materials/Node/nodeMaterial.pure.js +4 -0
  231. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  232. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  233. package/Materials/Node/nodeMaterialBuildState.js +25 -3
  234. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  235. package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
  236. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
  237. package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +13 -14
  238. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +6 -6
  239. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  240. package/Materials/Textures/baseTexture.pure.js +3 -0
  241. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  242. package/Materials/Textures/cubeTexture.pure.js +1 -1
  243. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  244. package/Materials/Textures/internalTexture.d.ts +8 -1
  245. package/Materials/Textures/internalTexture.js +9 -2
  246. package/Materials/Textures/internalTexture.js.map +1 -1
  247. package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
  248. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  249. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  250. package/Materials/Textures/rawTexture3D.js +1 -1
  251. package/Materials/Textures/rawTexture3D.js.map +1 -1
  252. package/Materials/Textures/textureHelper.functions.d.ts +14 -0
  253. package/Materials/Textures/textureHelper.functions.js +24 -0
  254. package/Materials/Textures/textureHelper.functions.js.map +1 -1
  255. package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
  256. package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
  257. package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
  258. package/Materials/index.d.ts +1 -0
  259. package/Materials/index.js +1 -0
  260. package/Materials/index.js.map +1 -1
  261. package/Materials/materialHelper.geometryrendering.d.ts +46 -1
  262. package/Materials/materialHelper.geometryrendering.js +105 -8
  263. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  264. package/Materials/prepass.defines.d.ts +2 -0
  265. package/Materials/prepass.defines.js +2 -0
  266. package/Materials/prepass.defines.js.map +1 -1
  267. package/Materials/pure.d.ts +1 -0
  268. package/Materials/pure.js +1 -0
  269. package/Materials/pure.js.map +1 -1
  270. package/Materials/standardMaterial.pure.d.ts +2 -0
  271. package/Materials/standardMaterial.pure.js +6 -3
  272. package/Materials/standardMaterial.pure.js.map +1 -1
  273. package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
  274. package/Meshes/Builders/polygonBuilder.pure.js +4 -1
  275. package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
  276. package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
  277. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
  278. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
  279. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -14
  280. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +20 -24
  281. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  282. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -0
  283. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +11 -4
  284. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  285. package/Meshes/abstractMesh.pure.d.ts +18 -0
  286. package/Meshes/abstractMesh.pure.js +22 -0
  287. package/Meshes/abstractMesh.pure.js.map +1 -1
  288. package/Meshes/index.d.ts +1 -0
  289. package/Meshes/index.js +1 -0
  290. package/Meshes/index.js.map +1 -1
  291. package/Meshes/instancedMesh.pure.d.ts +5 -0
  292. package/Meshes/instancedMesh.pure.js +12 -0
  293. package/Meshes/instancedMesh.pure.js.map +1 -1
  294. package/Meshes/mesh.pure.js +23 -8
  295. package/Meshes/mesh.pure.js.map +1 -1
  296. package/Meshes/meshBlendingTag.d.ts +47 -0
  297. package/Meshes/meshBlendingTag.js +64 -0
  298. package/Meshes/meshBlendingTag.js.map +1 -0
  299. package/Meshes/polygonMesh.js +2 -2
  300. package/Meshes/polygonMesh.js.map +1 -1
  301. package/Meshes/pure.d.ts +1 -0
  302. package/Meshes/pure.js +1 -0
  303. package/Meshes/pure.js.map +1 -1
  304. package/Misc/fileTools.pure.js +21 -0
  305. package/Misc/fileTools.pure.js.map +1 -1
  306. package/Misc/snapshotRenderingHelper.js +2 -2
  307. package/Misc/snapshotRenderingHelper.js.map +1 -1
  308. package/Misc/tools.pure.js +1 -1
  309. package/Misc/tools.pure.js.map +1 -1
  310. package/Particles/gpuParticleSystem.pure.d.ts +2 -0
  311. package/Particles/gpuParticleSystem.pure.js +89 -28
  312. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  313. package/Particles/thinParticleSystem.pure.d.ts +2 -0
  314. package/Particles/thinParticleSystem.pure.js +84 -19
  315. package/Particles/thinParticleSystem.pure.js.map +1 -1
  316. package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
  317. package/Particles/webgl2ParticleSystem.pure.js +12 -4
  318. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  319. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
  320. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  321. package/PostProcesses/index.d.ts +2 -0
  322. package/PostProcesses/index.js +2 -0
  323. package/PostProcesses/index.js.map +1 -1
  324. package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
  325. package/PostProcesses/meshBlendingBlueNoise.js +77 -0
  326. package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
  327. package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
  328. package/PostProcesses/meshBlendingPostProcess.js +315 -0
  329. package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
  330. package/PostProcesses/pure.d.ts +2 -0
  331. package/PostProcesses/pure.js +2 -0
  332. package/PostProcesses/pure.js.map +1 -1
  333. package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
  334. package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
  335. package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
  336. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
  337. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  338. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +8 -8
  339. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  340. package/Rendering/boundingBoxRenderer.pure.js +2 -1
  341. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  342. package/Rendering/depthRenderer.pure.js +3 -4
  343. package/Rendering/depthRenderer.pure.js.map +1 -1
  344. package/Rendering/edgesRenderer.pure.d.ts +4 -2
  345. package/Rendering/edgesRenderer.pure.js +11 -2
  346. package/Rendering/edgesRenderer.pure.js.map +1 -1
  347. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +10 -0
  348. package/Rendering/fluidRenderer/fluidRenderingObject.js +20 -0
  349. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  350. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +9 -3
  351. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +14 -9
  352. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  353. package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
  354. package/Rendering/geometryBufferRenderer.pure.js +126 -17
  355. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  356. package/Rendering/objectRenderer.d.ts +7 -1
  357. package/Rendering/objectRenderer.js +45 -7
  358. package/Rendering/objectRenderer.js.map +1 -1
  359. package/Rendering/outlineRenderer.pure.js +6 -2
  360. package/Rendering/outlineRenderer.pure.js.map +1 -1
  361. package/Rendering/renderingManager.d.ts +1 -1
  362. package/Rendering/renderingManager.js +5 -4
  363. package/Rendering/renderingManager.js.map +1 -1
  364. package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  365. package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
  366. package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  367. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
  368. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  369. package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
  370. package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
  371. package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  372. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
  373. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  374. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
  375. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  376. package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
  377. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  378. package/Shaders/ShadersInclude/pbrDebug.js +6 -2
  379. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  380. package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
  381. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  382. package/Shaders/default.fragment.js +31 -40
  383. package/Shaders/default.fragment.js.map +1 -1
  384. package/Shaders/depthOfField.fragment.js +13 -9
  385. package/Shaders/depthOfField.fragment.js.map +1 -1
  386. package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
  387. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  388. package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
  389. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  390. package/Shaders/gaussianSplatting.fragment.js +63 -3
  391. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  392. package/Shaders/gaussianSplatting.vertex.js +80 -0
  393. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  394. package/Shaders/geometry.fragment.js +17 -11
  395. package/Shaders/geometry.fragment.js.map +1 -1
  396. package/Shaders/gpuRenderParticles.fragment.js +43 -1
  397. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  398. package/Shaders/gpuRenderParticles.vertex.js +96 -16
  399. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  400. package/Shaders/meshBlending.fragment.d.ts +5 -0
  401. package/Shaders/meshBlending.fragment.js +519 -0
  402. package/Shaders/meshBlending.fragment.js.map +1 -0
  403. package/Shaders/particles.fragment.js +43 -1
  404. package/Shaders/particles.fragment.js.map +1 -1
  405. package/Shaders/particles.vertex.js +84 -3
  406. package/Shaders/particles.vertex.js.map +1 -1
  407. package/Shaders/sprites.fragment.js +52 -2
  408. package/Shaders/sprites.fragment.js.map +1 -1
  409. package/Shaders/sprites.vertex.js +62 -1
  410. package/Shaders/sprites.vertex.js.map +1 -1
  411. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  412. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
  413. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  414. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
  415. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
  416. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  417. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  418. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  419. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
  420. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
  421. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
  422. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
  423. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
  424. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  425. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
  426. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
  427. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  428. package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
  429. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  430. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
  431. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  432. package/ShadersWGSL/default.fragment.js +17 -48
  433. package/ShadersWGSL/default.fragment.js.map +1 -1
  434. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
  435. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  436. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
  437. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  438. package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
  439. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  440. package/ShadersWGSL/gaussianSplatting.vertex.js +80 -0
  441. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  442. package/ShadersWGSL/geometry.fragment.js +37 -2
  443. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  444. package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
  445. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
  446. package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
  447. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
  448. package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
  449. package/ShadersWGSL/meshBlending.fragment.js +576 -0
  450. package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
  451. package/ShadersWGSL/openpbr.fragment.js +2 -1
  452. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  453. package/ShadersWGSL/particles.fragment.js +45 -1
  454. package/ShadersWGSL/particles.fragment.js.map +1 -1
  455. package/ShadersWGSL/particles.vertex.js +86 -4
  456. package/ShadersWGSL/particles.vertex.js.map +1 -1
  457. package/ShadersWGSL/pbr.fragment.js +2 -1
  458. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  459. package/ShadersWGSL/sprites.fragment.js +56 -2
  460. package/ShadersWGSL/sprites.fragment.js.map +1 -1
  461. package/ShadersWGSL/sprites.vertex.js +62 -1
  462. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  463. package/Sprites/spriteManager.d.ts +13 -0
  464. package/Sprites/spriteManager.js +15 -0
  465. package/Sprites/spriteManager.js.map +1 -1
  466. package/Sprites/spriteRenderer.d.ts +24 -1
  467. package/Sprites/spriteRenderer.js +368 -50
  468. package/Sprites/spriteRenderer.js.map +1 -1
  469. package/Sprites/thinSprite.d.ts +4 -0
  470. package/Sprites/thinSprite.js +4 -0
  471. package/Sprites/thinSprite.js.map +1 -1
  472. package/States/alphaCullingState.d.ts +3 -1
  473. package/States/alphaCullingState.js +18 -3
  474. package/States/alphaCullingState.js.map +1 -1
  475. package/XR/webXRDefaultExperience.d.ts +5 -1
  476. package/XR/webXRDefaultExperience.js.map +1 -1
  477. package/XR/webXREnterExitUI.d.ts +2 -1
  478. package/XR/webXREnterExitUI.js.map +1 -1
  479. package/package.json +1 -1
  480. package/scene.pure.d.ts +23 -0
  481. package/scene.pure.js +35 -0
  482. package/scene.pure.js.map +1 -1
@@ -1,16 +1,27 @@
1
- import { type MaterialDefines, type Effect, type Mesh, type AbstractMesh, type Material } from "../index.js";
1
+ import { type MaterialDefines, type Effect, type Mesh, type AbstractMesh, type Material, type AbstractEngine } from "../index.js";
2
2
  import { Matrix } from "../Maths/math.vector.pure.js";
3
3
  /**
4
4
  * Provides the object ID written by geometry rendering for a mesh.
5
5
  *
6
6
  * IDs must be unsigned integers supported by the object ID texture format. ID 0 is reserved for background or excluded meshes.
7
7
  * RGBA textures support IDs up to 0xFFFFFF, while RED textures support IDs up to 0xFF.
8
+ * Instances and thin instances use the source mesh ID, and this callback receives the source mesh for instanced draws.
8
9
  * This callback runs in the render hot path and may be called multiple times for the same mesh in a frame.
9
10
  * It should avoid allocations and return a consistent value for a mesh during a render.
10
11
  */
11
12
  export type GeometryRenderingObjectIdProvider = (mesh: AbstractMesh) => number;
13
+ /**
14
+ * Provides the packed mesh-blending tag written by geometry rendering for a mesh.
15
+ *
16
+ * Tags must be 0 or contain a group ID between 1 and 63 in their low six bits. Tag 0 disables mesh blending.
17
+ * Instances and thin instances use the source mesh tag. This callback receives the source mesh for instanced draws.
18
+ * It runs in the render hot path and should avoid allocations and return a consistent value during a render.
19
+ */
20
+ export type GeometryRenderingMeshBlendTagProvider = (mesh: AbstractMesh) => number;
12
21
  /** @internal */
13
22
  export declare function _GetGeometryRenderingObjectId(mesh: AbstractMesh, provider: GeometryRenderingObjectIdProvider, maxObjectId?: number): number;
23
+ /** @internal */
24
+ export declare function _GetGeometryRenderingMeshBlendTag(mesh: AbstractMesh, provider: GeometryRenderingMeshBlendTagProvider): number;
14
25
  /**
15
26
  * Type of clear operation to perform on a geometry texture.
16
27
  */
@@ -37,6 +48,22 @@ export declare enum GeometryRenderingTextureClearType {
37
48
  * A configuration is created for each rendering pass a geometry rendering is used in.
38
49
  */
39
50
  export type GeometryRenderingConfiguration = {
51
+ /** @internal */
52
+ _attachments?: number[];
53
+ /** @internal */
54
+ _colorAttachments?: number[];
55
+ /** @internal */
56
+ _mrtCount?: number;
57
+ /** @internal */
58
+ _defines?: string;
59
+ /** @internal */
60
+ _currentWorldMatrices?: {
61
+ [index: number]: Matrix;
62
+ };
63
+ /** @internal */
64
+ _worldMatrixFrameIds?: {
65
+ [index: number]: number;
66
+ };
40
67
  /**
41
68
  * Defines used for the geometry rendering.
42
69
  */
@@ -83,6 +110,10 @@ export type GeometryRenderingConfiguration = {
83
110
  * Whether the object ID texture uses the RED format.
84
111
  */
85
112
  objectIdIsRedFormat: boolean;
113
+ /**
114
+ * Provides the packed mesh-blending tag written for each rendered mesh.
115
+ */
116
+ meshBlendTagProvider?: GeometryRenderingMeshBlendTagProvider;
86
117
  };
87
118
  /**
88
119
  * Helper class to manage geometry rendering.
@@ -116,6 +147,20 @@ export declare class MaterialHelperGeometryRendering {
116
147
  * @returns The configuration.
117
148
  */
118
149
  static GetConfiguration(renderPassId: number): GeometryRenderingConfiguration;
150
+ /** @internal */
151
+ static _PrepareConfiguration(renderPassId: number, attachments: number[], colorAttachments: number[]): void;
152
+ /** @internal */
153
+ static _PrepareStringDefines(renderPassId: number, defines: string[]): boolean;
154
+ /** @internal */
155
+ static _BindAttachmentsForEffect(engine: AbstractEngine, effect: Pick<Effect, "_multiTarget">): boolean;
156
+ /** @internal */
157
+ static _RestoreAttachments(engine: AbstractEngine): void;
158
+ /** @internal */
159
+ static _BindColorAttachments(engine: AbstractEngine): boolean;
160
+ /** @internal */
161
+ static _IsColorAttachmentEnabled(engine: AbstractEngine): boolean;
162
+ /** @internal */
163
+ static _BindZeroAlphaDiscard(engine: AbstractEngine, effect: Effect): void;
119
164
  /**
120
165
  * Adds uniforms and samplers for geometry rendering.
121
166
  * @param uniforms The array of uniforms to add to.
@@ -8,6 +8,14 @@ export function _GetGeometryRenderingObjectId(mesh, provider, maxObjectId = 0xff
8
8
  }
9
9
  return objectId;
10
10
  }
11
+ /** @internal */
12
+ export function _GetGeometryRenderingMeshBlendTag(mesh, provider) {
13
+ const tag = provider(mesh);
14
+ if (!Number.isInteger(tag) || tag < 0 || tag > 0xff || (tag !== 0 && (tag & 0x3f) === 0)) {
15
+ throw new Error(`Invalid geometry mesh-blending tag ${tag} for mesh "${mesh.name}". Tags must be 0 or contain a group ID between 1 and 63.`);
16
+ }
17
+ return tag;
18
+ }
11
19
  /**
12
20
  * Type of clear operation to perform on a geometry texture.
13
21
  */
@@ -68,13 +76,83 @@ export class MaterialHelperGeometryRendering {
68
76
  static GetConfiguration(renderPassId) {
69
77
  return MaterialHelperGeometryRendering._Configurations[renderPassId];
70
78
  }
79
+ /** @internal */
80
+ static _PrepareConfiguration(renderPassId, attachments, colorAttachments) {
81
+ const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];
82
+ configuration._attachments = attachments;
83
+ configuration._colorAttachments = colorAttachments;
84
+ configuration._mrtCount = attachments.length;
85
+ let defines = "#define PREPASS\n";
86
+ for (const description of MaterialHelperGeometryRendering.GeometryTextureDescriptions) {
87
+ const index = configuration.defines[description.defineIndex];
88
+ if (index !== undefined) {
89
+ defines += `#define ${description.define}\n#define ${description.defineIndex} ${index}\n`;
90
+ }
91
+ }
92
+ if (configuration.objectIdIsRedFormat) {
93
+ defines += "#define PREPASS_OBJECT_ID_R8\n";
94
+ }
95
+ configuration._defines = defines + `#define SCENE_MRT_COUNT ${attachments.length}\n`;
96
+ }
97
+ /** @internal */
98
+ static _PrepareStringDefines(renderPassId, defines) {
99
+ const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];
100
+ if (!configuration?._defines) {
101
+ return false;
102
+ }
103
+ defines.push(configuration._defines);
104
+ return true;
105
+ }
106
+ /** @internal */
107
+ static _BindAttachmentsForEffect(engine, effect) {
108
+ const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];
109
+ if (!configuration?._attachments) {
110
+ return true;
111
+ }
112
+ engine.bindAttachments(effect._multiTarget ? configuration._attachments : configuration._colorAttachments);
113
+ return effect._multiTarget || configuration.defines["PREPASS_COLOR_INDEX"] !== undefined;
114
+ }
115
+ /** @internal */
116
+ static _RestoreAttachments(engine) {
117
+ const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];
118
+ if (configuration?._colorAttachments) {
119
+ engine.bindAttachments(configuration._colorAttachments);
120
+ }
121
+ }
122
+ /** @internal */
123
+ static _BindColorAttachments(engine) {
124
+ const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];
125
+ if (!configuration?._colorAttachments) {
126
+ return true;
127
+ }
128
+ engine.bindAttachments(configuration._colorAttachments);
129
+ return configuration.defines["PREPASS_COLOR_INDEX"] !== undefined;
130
+ }
131
+ /** @internal */
132
+ static _IsColorAttachmentEnabled(engine) {
133
+ const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];
134
+ return !configuration?._colorAttachments || configuration.defines["PREPASS_COLOR_INDEX"] !== undefined;
135
+ }
136
+ /** @internal */
137
+ static _BindZeroAlphaDiscard(engine, effect) {
138
+ const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];
139
+ if (!configuration) {
140
+ return;
141
+ }
142
+ const alphaMode = engine.getAlphaMode();
143
+ const discard = configuration.defines["PREPASS_COLOR_INDEX"] === undefined ||
144
+ alphaMode === 2 ||
145
+ alphaMode === 1 ||
146
+ alphaMode === 17;
147
+ effect.setFloat("geometryZeroAlphaDiscard", discard ? 1 : 0);
148
+ }
71
149
  /**
72
150
  * Adds uniforms and samplers for geometry rendering.
73
151
  * @param uniforms The array of uniforms to add to.
74
152
  * @param _samplers The array of samplers to add to.
75
153
  */
76
154
  static AddUniformsAndSamplers(uniforms, _samplers) {
77
- uniforms.push("previousWorld", "previousViewProjection", "mPreviousBones", "objectId");
155
+ uniforms.push("previousWorld", "previousViewProjection", "mPreviousBones", "objectId", "meshBlendTag");
78
156
  }
79
157
  /**
80
158
  * Marks a list of meshes as dirty for geometry rendering.
@@ -123,7 +201,7 @@ export class MaterialHelperGeometryRendering {
123
201
  }
124
202
  }
125
203
  defines["PREPASS_OBJECT_ID_R8"] = configuration.objectIdIsRedFormat;
126
- defines["SCENE_MRT_COUNT"] = numMRT;
204
+ defines["SCENE_MRT_COUNT"] = configuration._mrtCount ?? numMRT;
127
205
  defines["BONES_VELOCITY_ENABLED"] =
128
206
  mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;
129
207
  }
@@ -156,15 +234,28 @@ export class MaterialHelperGeometryRendering {
156
234
  }
157
235
  effect.setFloat("objectId", objectId);
158
236
  }
237
+ if (configuration.defines["PREPASS_MESH_BLEND_TAG_INDEX"] !== undefined) {
238
+ const meshBlendTag = configuration.meshBlendTagProvider ? _GetGeometryRenderingMeshBlendTag(mesh, configuration.meshBlendTagProvider) : mesh.meshBlendingTag;
239
+ effect.setInt("meshBlendTag", meshBlendTag);
240
+ }
159
241
  if (configuration.defines["PREPASS_VELOCITY_INDEX"] !== undefined || configuration.defines["PREPASS_VELOCITY_LINEAR_INDEX"] !== undefined) {
160
- if (!configuration.previousWorldMatrices[mesh.uniqueId]) {
242
+ const currentWorldMatrices = (configuration._currentWorldMatrices ?? (configuration._currentWorldMatrices = {}));
243
+ const worldMatrixFrameIds = (configuration._worldMatrixFrameIds ?? (configuration._worldMatrixFrameIds = {}));
244
+ if (!currentWorldMatrices[mesh.uniqueId]) {
245
+ currentWorldMatrices[mesh.uniqueId] = world.clone();
161
246
  configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();
162
247
  }
163
- if (!configuration.previousViewProjection) {
164
- configuration.previousViewProjection = scene.getTransformMatrix().clone();
165
- configuration.currentViewProjection = scene.getTransformMatrix().clone();
248
+ if (worldMatrixFrameIds[mesh.uniqueId] !== engine.frameId) {
249
+ configuration.previousWorldMatrices[mesh.uniqueId].copyFrom(currentWorldMatrices[mesh.uniqueId]);
250
+ worldMatrixFrameIds[mesh.uniqueId] = engine.frameId;
251
+ }
252
+ currentWorldMatrices[mesh.uniqueId].copyFrom(world);
253
+ if (configuration.lastUpdateFrameId === -1) {
254
+ configuration.lastUpdateFrameId = engine.frameId;
255
+ configuration.previousViewProjection.copyFrom(scene.getTransformMatrix());
256
+ configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());
166
257
  }
167
- if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {
258
+ else if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {
168
259
  // First update of the prepass configuration for this rendering pass
169
260
  configuration.lastUpdateFrameId = engine.frameId;
170
261
  configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);
@@ -177,7 +268,6 @@ export class MaterialHelperGeometryRendering {
177
268
  }
178
269
  effect.setMatrix("previousWorld", configuration.previousWorldMatrices[mesh.uniqueId]);
179
270
  effect.setMatrix("previousViewProjection", configuration.previousViewProjection);
180
- configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();
181
271
  if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {
182
272
  const skeleton = mesh.skeleton;
183
273
  if (!skeleton.isUsingTextureForMatrices || effect.getUniformIndex("boneTextureInfo") === -1) {
@@ -310,6 +400,13 @@ MaterialHelperGeometryRendering.GeometryTextureDescriptions = [
310
400
  define: "PREPASS_OBJECT_ID",
311
401
  defineIndex: "PREPASS_OBJECT_ID_INDEX",
312
402
  },
403
+ {
404
+ type: 16,
405
+ name: "MeshBlendTag",
406
+ clearType: 0 /* GeometryRenderingTextureClearType.Zero */,
407
+ define: "PREPASS_MESH_BLEND_TAG",
408
+ defineIndex: "PREPASS_MESH_BLEND_TAG_INDEX",
409
+ },
313
410
  ];
314
411
  MaterialHelperGeometryRendering._Configurations = {};
315
412
  //# sourceMappingURL=materialHelper.geometryrendering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"materialHelper.geometryrendering.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.geometryrendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { type MaterialDefines, type Effect, type Mesh, type AbstractMesh, type Material } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Matrix } from \"core/Maths/math.vector.pure\";\r\n\r\n/**\r\n * Provides the object ID written by geometry rendering for a mesh.\r\n *\r\n * IDs must be unsigned integers supported by the object ID texture format. ID 0 is reserved for background or excluded meshes.\r\n * RGBA textures support IDs up to 0xFFFFFF, while RED textures support IDs up to 0xFF.\r\n * This callback runs in the render hot path and may be called multiple times for the same mesh in a frame.\r\n * It should avoid allocations and return a consistent value for a mesh during a render.\r\n */\r\nexport type GeometryRenderingObjectIdProvider = (mesh: AbstractMesh) => number;\r\n\r\n/** @internal */\r\nexport function _GetGeometryRenderingObjectId(mesh: AbstractMesh, provider: GeometryRenderingObjectIdProvider, maxObjectId = 0xffffff): number {\r\n const objectId = provider(mesh);\r\n\r\n if (!Number.isInteger(objectId) || objectId < 0 || objectId > maxObjectId) {\r\n throw new Error(`Invalid geometry object ID ${objectId} for mesh \"${mesh.name}\". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`);\r\n }\r\n\r\n return objectId;\r\n}\r\n\r\n/**\r\n * Type of clear operation to perform on a geometry texture.\r\n */\r\nexport const enum GeometryRenderingTextureClearType {\r\n /**\r\n * Clear the texture with zero.\r\n */\r\n Zero = 0,\r\n\r\n /**\r\n * Clear the texture with one.\r\n */\r\n One = 1,\r\n\r\n /**\r\n * Clear the texture with the maximum view Z value.\r\n */\r\n MaxViewZ = 2,\r\n\r\n /**\r\n * Do not clear the texture.\r\n */\r\n NoClear = 3,\r\n}\r\n\r\n/**\r\n * Configuration for geometry rendering.\r\n * A configuration is created for each rendering pass a geometry rendering is used in.\r\n */\r\nexport type GeometryRenderingConfiguration = {\r\n /**\r\n * Defines used for the geometry rendering.\r\n */\r\n defines: { [name: string]: number };\r\n\r\n /**\r\n * Previous world matrices for meshes.\r\n */\r\n previousWorldMatrices: { [index: number]: Matrix };\r\n\r\n /**\r\n * Previous view projection matrix.\r\n */\r\n previousViewProjection: Matrix;\r\n\r\n /**\r\n * Current view projection matrix.\r\n */\r\n currentViewProjection: Matrix;\r\n\r\n /**\r\n * Previous bones for skinned meshes.\r\n */\r\n previousBones: { [index: number]: Float32Array };\r\n\r\n /**\r\n * Last frame id the configuration was updated.\r\n */\r\n lastUpdateFrameId: number;\r\n\r\n /**\r\n * List of excluded skinned meshes.\r\n */\r\n excludedSkinnedMesh: AbstractMesh[];\r\n\r\n /**\r\n * Whether to reverse culling for the geometry rendering (meaning, if back faces should be culled, front faces are culled instead, and the other way around).\r\n */\r\n reverseCulling: boolean;\r\n\r\n /**\r\n * Provides the object ID written for each rendered mesh.\r\n */\r\n objectIdProvider?: GeometryRenderingObjectIdProvider;\r\n\r\n /**\r\n * Whether the object ID texture uses the RED format.\r\n */\r\n objectIdIsRedFormat: boolean;\r\n};\r\n\r\n/**\r\n * Helper class to manage geometry rendering.\r\n */\r\nexport class MaterialHelperGeometryRendering {\r\n /**\r\n * Descriptions of the geometry textures.\r\n */\r\n public static readonly GeometryTextureDescriptions = [\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_LEGACY_TEXTURE_TYPE,\r\n name: \"IrradianceLegacy\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE_LEGACY\",\r\n defineIndex: \"PREPASS_IRRADIANCE_LEGACY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n name: \"WorldPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_POSITION\",\r\n defineIndex: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n name: \"Velocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY\",\r\n defineIndex: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n name: \"Reflectivity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n defineIndex: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n name: \"ViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.MaxViewZ,\r\n define: \"PREPASS_DEPTH\",\r\n defineIndex: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n name: \"ViewNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_NORMAL\",\r\n defineIndex: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n name: \"AlbedoSqrt\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n defineIndex: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n name: \"WorldNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n defineIndex: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n name: \"LocalPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n defineIndex: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n name: \"ScreenDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n defineIndex: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n name: \"LinearVelocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n defineIndex: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_TEXTURE_TYPE,\r\n name: \"Albedo\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO\",\r\n defineIndex: \"PREPASS_ALBEDO_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE,\r\n name: \"NormalizedViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_NORMALIZED_VIEW_DEPTH\",\r\n defineIndex: \"PREPASS_NORMALIZED_VIEW_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_COLOR_TEXTURE_TYPE,\r\n name: \"Color\",\r\n clearType: GeometryRenderingTextureClearType.NoClear,\r\n define: \"PREPASS_COLOR\",\r\n defineIndex: \"PREPASS_COLOR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n name: \"Irradiance\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE\",\r\n defineIndex: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_OBJECT_ID_TEXTURE_TYPE,\r\n name: \"ObjectId\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_OBJECT_ID\",\r\n defineIndex: \"PREPASS_OBJECT_ID_INDEX\",\r\n },\r\n ];\r\n\r\n private static _Configurations: { [renderPassId: number]: GeometryRenderingConfiguration } = {};\r\n\r\n /**\r\n * Creates a new geometry rendering configuration.\r\n * @param renderPassId Render pass id the configuration is created for.\r\n * @returns The created configuration.\r\n */\r\n public static CreateConfiguration(renderPassId: number) {\r\n MaterialHelperGeometryRendering._Configurations[renderPassId] = {\r\n defines: {},\r\n previousWorldMatrices: {},\r\n previousViewProjection: Matrix.Zero(),\r\n currentViewProjection: Matrix.Zero(),\r\n previousBones: {},\r\n lastUpdateFrameId: -1,\r\n excludedSkinnedMesh: [],\r\n reverseCulling: false,\r\n objectIdIsRedFormat: false,\r\n };\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Deletes a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to delete.\r\n */\r\n public static DeleteConfiguration(renderPassId: number) {\r\n delete MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Gets a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to get.\r\n * @returns The configuration.\r\n */\r\n public static GetConfiguration(renderPassId: number): GeometryRenderingConfiguration {\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Adds uniforms and samplers for geometry rendering.\r\n * @param uniforms The array of uniforms to add to.\r\n * @param _samplers The array of samplers to add to.\r\n */\r\n public static AddUniformsAndSamplers(uniforms: string[], _samplers: string[]) {\r\n uniforms.push(\"previousWorld\", \"previousViewProjection\", \"mPreviousBones\", \"objectId\");\r\n }\r\n\r\n /**\r\n * Marks a list of meshes as dirty for geometry rendering.\r\n * @param renderPassId The render pass id the meshes are marked as dirty for.\r\n * @param meshes The list of meshes to mark as dirty.\r\n */\r\n public static MarkAsDirty(renderPassId: number, meshes: AbstractMesh[]) {\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh._removeDrawWrapper(renderPassId);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares defines for geometry rendering.\r\n * @param renderPassId The render pass id the defines are prepared for.\r\n * @param mesh The mesh the defines are prepared for.\r\n * @param defines The defines to update according to the geometry rendering configuration.\r\n */\r\n public static PrepareDefines(renderPassId: number, mesh: AbstractMesh, defines: MaterialDefines) {\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n defines[\"PREPASS\"] = true;\r\n\r\n let numMRT = 0;\r\n\r\n for (let i = 0; i < MaterialHelperGeometryRendering.GeometryTextureDescriptions.length; i++) {\r\n const geometryTextureDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[i];\r\n const defineName = geometryTextureDescription.define;\r\n const defineIndex = geometryTextureDescription.defineIndex;\r\n const index = configuration.defines[defineIndex];\r\n\r\n if (index !== undefined) {\r\n defines[defineName] = true;\r\n defines[defineIndex] = index;\r\n numMRT++;\r\n } else {\r\n defines[defineName] = false;\r\n delete defines[defineIndex];\r\n }\r\n }\r\n\r\n defines[\"PREPASS_OBJECT_ID_R8\"] = configuration.objectIdIsRedFormat;\r\n defines[\"SCENE_MRT_COUNT\"] = numMRT;\r\n\r\n defines[\"BONES_VELOCITY_ENABLED\"] =\r\n mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n }\r\n\r\n /**\r\n * Binds geometry rendering data for a mesh.\r\n * @param renderPassId The render pass id the geometry rendering data is bound for.\r\n * @param effect The effect to bind the geometry rendering data to.\r\n * @param mesh The mesh to bind the geometry rendering data for.\r\n * @param world The world matrix of the mesh.\r\n * @param material The material of the mesh.\r\n */\r\n public static Bind(renderPassId: number, effect: Effect, mesh: Mesh, world: Matrix, material: Material) {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (configuration.reverseCulling) {\r\n engine.setStateCullFaceType(scene._mirroredCameraPosition ? material.cullBackFaces : !material.cullBackFaces);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_OBJECT_ID_INDEX\"] !== undefined) {\r\n const maxObjectId = configuration.objectIdIsRedFormat ? 0xff : 0xffffff;\r\n let objectId = mesh.uniqueId;\r\n if (configuration.objectIdProvider) {\r\n objectId = _GetGeometryRenderingObjectId(mesh, configuration.objectIdProvider, maxObjectId);\r\n } else if (objectId > maxObjectId) {\r\n throw new Error(\r\n `Invalid geometry object ID ${objectId} for mesh \"${mesh.name}\". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`\r\n );\r\n }\r\n effect.setFloat(\"objectId\", objectId);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_VELOCITY_INDEX\"] !== undefined || configuration.defines[\"PREPASS_VELOCITY_LINEAR_INDEX\"] !== undefined) {\r\n if (!configuration.previousWorldMatrices[mesh.uniqueId]) {\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n }\r\n\r\n if (!configuration.previousViewProjection) {\r\n configuration.previousViewProjection = scene.getTransformMatrix().clone();\r\n configuration.currentViewProjection = scene.getTransformMatrix().clone();\r\n }\r\n\r\n if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {\r\n // First update of the prepass configuration for this rendering pass\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());\r\n } else if (configuration.lastUpdateFrameId !== engine.frameId) {\r\n // The scene transformation did not change from the previous frame (so no camera motion), we must update previousViewProjection accordingly\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n }\r\n\r\n effect.setMatrix(\"previousWorld\", configuration.previousWorldMatrices[mesh.uniqueId]);\r\n effect.setMatrix(\"previousViewProjection\", configuration.previousViewProjection);\r\n\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (!skeleton.isUsingTextureForMatrices || effect.getUniformIndex(\"boneTextureInfo\") === -1) {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n if (!configuration.previousBones[mesh.uniqueId]) {\r\n configuration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", configuration.previousBones[mesh.uniqueId]);\r\n configuration.previousBones[mesh.uniqueId].set(matrices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"materialHelper.geometryrendering.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.geometryrendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { type MaterialDefines, type Effect, type Mesh, type AbstractMesh, type Material, type AbstractEngine } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Matrix } from \"core/Maths/math.vector.pure\";\r\n\r\n/**\r\n * Provides the object ID written by geometry rendering for a mesh.\r\n *\r\n * IDs must be unsigned integers supported by the object ID texture format. ID 0 is reserved for background or excluded meshes.\r\n * RGBA textures support IDs up to 0xFFFFFF, while RED textures support IDs up to 0xFF.\r\n * Instances and thin instances use the source mesh ID, and this callback receives the source mesh for instanced draws.\r\n * This callback runs in the render hot path and may be called multiple times for the same mesh in a frame.\r\n * It should avoid allocations and return a consistent value for a mesh during a render.\r\n */\r\nexport type GeometryRenderingObjectIdProvider = (mesh: AbstractMesh) => number;\r\n\r\n/**\r\n * Provides the packed mesh-blending tag written by geometry rendering for a mesh.\r\n *\r\n * Tags must be 0 or contain a group ID between 1 and 63 in their low six bits. Tag 0 disables mesh blending.\r\n * Instances and thin instances use the source mesh tag. This callback receives the source mesh for instanced draws.\r\n * It runs in the render hot path and should avoid allocations and return a consistent value during a render.\r\n */\r\nexport type GeometryRenderingMeshBlendTagProvider = (mesh: AbstractMesh) => number;\r\n\r\n/** @internal */\r\nexport function _GetGeometryRenderingObjectId(mesh: AbstractMesh, provider: GeometryRenderingObjectIdProvider, maxObjectId = 0xffffff): number {\r\n const objectId = provider(mesh);\r\n\r\n if (!Number.isInteger(objectId) || objectId < 0 || objectId > maxObjectId) {\r\n throw new Error(`Invalid geometry object ID ${objectId} for mesh \"${mesh.name}\". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`);\r\n }\r\n\r\n return objectId;\r\n}\r\n\r\n/** @internal */\r\nexport function _GetGeometryRenderingMeshBlendTag(mesh: AbstractMesh, provider: GeometryRenderingMeshBlendTagProvider): number {\r\n const tag = provider(mesh);\r\n\r\n if (!Number.isInteger(tag) || tag < 0 || tag > 0xff || (tag !== 0 && (tag & 0x3f) === 0)) {\r\n throw new Error(`Invalid geometry mesh-blending tag ${tag} for mesh \"${mesh.name}\". Tags must be 0 or contain a group ID between 1 and 63.`);\r\n }\r\n\r\n return tag;\r\n}\r\n\r\n/**\r\n * Type of clear operation to perform on a geometry texture.\r\n */\r\nexport const enum GeometryRenderingTextureClearType {\r\n /**\r\n * Clear the texture with zero.\r\n */\r\n Zero = 0,\r\n\r\n /**\r\n * Clear the texture with one.\r\n */\r\n One = 1,\r\n\r\n /**\r\n * Clear the texture with the maximum view Z value.\r\n */\r\n MaxViewZ = 2,\r\n\r\n /**\r\n * Do not clear the texture.\r\n */\r\n NoClear = 3,\r\n}\r\n\r\n/**\r\n * Configuration for geometry rendering.\r\n * A configuration is created for each rendering pass a geometry rendering is used in.\r\n */\r\nexport type GeometryRenderingConfiguration = {\r\n /** @internal */\r\n _attachments?: number[];\r\n\r\n /** @internal */\r\n _colorAttachments?: number[];\r\n\r\n /** @internal */\r\n _mrtCount?: number;\r\n\r\n /** @internal */\r\n _defines?: string;\r\n\r\n /** @internal */\r\n _currentWorldMatrices?: { [index: number]: Matrix };\r\n\r\n /** @internal */\r\n _worldMatrixFrameIds?: { [index: number]: number };\r\n\r\n /**\r\n * Defines used for the geometry rendering.\r\n */\r\n defines: { [name: string]: number };\r\n\r\n /**\r\n * Previous world matrices for meshes.\r\n */\r\n previousWorldMatrices: { [index: number]: Matrix };\r\n\r\n /**\r\n * Previous view projection matrix.\r\n */\r\n previousViewProjection: Matrix;\r\n\r\n /**\r\n * Current view projection matrix.\r\n */\r\n currentViewProjection: Matrix;\r\n\r\n /**\r\n * Previous bones for skinned meshes.\r\n */\r\n previousBones: { [index: number]: Float32Array };\r\n\r\n /**\r\n * Last frame id the configuration was updated.\r\n */\r\n lastUpdateFrameId: number;\r\n\r\n /**\r\n * List of excluded skinned meshes.\r\n */\r\n excludedSkinnedMesh: AbstractMesh[];\r\n\r\n /**\r\n * Whether to reverse culling for the geometry rendering (meaning, if back faces should be culled, front faces are culled instead, and the other way around).\r\n */\r\n reverseCulling: boolean;\r\n\r\n /**\r\n * Provides the object ID written for each rendered mesh.\r\n */\r\n objectIdProvider?: GeometryRenderingObjectIdProvider;\r\n\r\n /**\r\n * Whether the object ID texture uses the RED format.\r\n */\r\n objectIdIsRedFormat: boolean;\r\n\r\n /**\r\n * Provides the packed mesh-blending tag written for each rendered mesh.\r\n */\r\n meshBlendTagProvider?: GeometryRenderingMeshBlendTagProvider;\r\n};\r\n\r\n/**\r\n * Helper class to manage geometry rendering.\r\n */\r\nexport class MaterialHelperGeometryRendering {\r\n /**\r\n * Descriptions of the geometry textures.\r\n */\r\n public static readonly GeometryTextureDescriptions = [\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_LEGACY_TEXTURE_TYPE,\r\n name: \"IrradianceLegacy\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE_LEGACY\",\r\n defineIndex: \"PREPASS_IRRADIANCE_LEGACY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n name: \"WorldPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_POSITION\",\r\n defineIndex: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n name: \"Velocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY\",\r\n defineIndex: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n name: \"Reflectivity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n defineIndex: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n name: \"ViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.MaxViewZ,\r\n define: \"PREPASS_DEPTH\",\r\n defineIndex: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n name: \"ViewNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_NORMAL\",\r\n defineIndex: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n name: \"AlbedoSqrt\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n defineIndex: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n name: \"WorldNormal\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n defineIndex: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n name: \"LocalPosition\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n defineIndex: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n name: \"ScreenDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n defineIndex: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n name: \"LinearVelocity\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n defineIndex: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_TEXTURE_TYPE,\r\n name: \"Albedo\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_ALBEDO\",\r\n defineIndex: \"PREPASS_ALBEDO_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMALIZED_VIEW_DEPTH_TEXTURE_TYPE,\r\n name: \"NormalizedViewDepth\",\r\n clearType: GeometryRenderingTextureClearType.One,\r\n define: \"PREPASS_NORMALIZED_VIEW_DEPTH\",\r\n defineIndex: \"PREPASS_NORMALIZED_VIEW_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_COLOR_TEXTURE_TYPE,\r\n name: \"Color\",\r\n clearType: GeometryRenderingTextureClearType.NoClear,\r\n define: \"PREPASS_COLOR\",\r\n defineIndex: \"PREPASS_COLOR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n name: \"Irradiance\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_IRRADIANCE\",\r\n defineIndex: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_OBJECT_ID_TEXTURE_TYPE,\r\n name: \"ObjectId\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_OBJECT_ID\",\r\n defineIndex: \"PREPASS_OBJECT_ID_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_MESH_BLEND_TAG_TEXTURE_TYPE,\r\n name: \"MeshBlendTag\",\r\n clearType: GeometryRenderingTextureClearType.Zero,\r\n define: \"PREPASS_MESH_BLEND_TAG\",\r\n defineIndex: \"PREPASS_MESH_BLEND_TAG_INDEX\",\r\n },\r\n ];\r\n\r\n private static _Configurations: { [renderPassId: number]: GeometryRenderingConfiguration } = {};\r\n\r\n /**\r\n * Creates a new geometry rendering configuration.\r\n * @param renderPassId Render pass id the configuration is created for.\r\n * @returns The created configuration.\r\n */\r\n public static CreateConfiguration(renderPassId: number) {\r\n MaterialHelperGeometryRendering._Configurations[renderPassId] = {\r\n defines: {},\r\n previousWorldMatrices: {},\r\n previousViewProjection: Matrix.Zero(),\r\n currentViewProjection: Matrix.Zero(),\r\n previousBones: {},\r\n lastUpdateFrameId: -1,\r\n excludedSkinnedMesh: [],\r\n reverseCulling: false,\r\n objectIdIsRedFormat: false,\r\n };\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Deletes a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to delete.\r\n */\r\n public static DeleteConfiguration(renderPassId: number) {\r\n delete MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /**\r\n * Gets a geometry rendering configuration.\r\n * @param renderPassId The render pass id of the configuration to get.\r\n * @returns The configuration.\r\n */\r\n public static GetConfiguration(renderPassId: number): GeometryRenderingConfiguration {\r\n return MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n }\r\n\r\n /** @internal */\r\n public static _PrepareConfiguration(renderPassId: number, attachments: number[], colorAttachments: number[]): void {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n configuration._attachments = attachments;\r\n configuration._colorAttachments = colorAttachments;\r\n configuration._mrtCount = attachments.length;\r\n\r\n let defines = \"#define PREPASS\\n\";\r\n for (const description of MaterialHelperGeometryRendering.GeometryTextureDescriptions) {\r\n const index = configuration.defines[description.defineIndex];\r\n if (index !== undefined) {\r\n defines += `#define ${description.define}\\n#define ${description.defineIndex} ${index}\\n`;\r\n }\r\n }\r\n if (configuration.objectIdIsRedFormat) {\r\n defines += \"#define PREPASS_OBJECT_ID_R8\\n\";\r\n }\r\n configuration._defines = defines + `#define SCENE_MRT_COUNT ${attachments.length}\\n`;\r\n }\r\n\r\n /** @internal */\r\n public static _PrepareStringDefines(renderPassId: number, defines: string[]): boolean {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration?._defines) {\r\n return false;\r\n }\r\n defines.push(configuration._defines);\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public static _BindAttachmentsForEffect(engine: AbstractEngine, effect: Pick<Effect, \"_multiTarget\">): boolean {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];\r\n if (!configuration?._attachments) {\r\n return true;\r\n }\r\n engine.bindAttachments(effect._multiTarget ? configuration._attachments : configuration._colorAttachments!);\r\n return effect._multiTarget || configuration.defines[\"PREPASS_COLOR_INDEX\"] !== undefined;\r\n }\r\n\r\n /** @internal */\r\n public static _RestoreAttachments(engine: AbstractEngine): void {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];\r\n if (configuration?._colorAttachments) {\r\n engine.bindAttachments(configuration._colorAttachments);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static _BindColorAttachments(engine: AbstractEngine): boolean {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];\r\n if (!configuration?._colorAttachments) {\r\n return true;\r\n }\r\n engine.bindAttachments(configuration._colorAttachments);\r\n return configuration.defines[\"PREPASS_COLOR_INDEX\"] !== undefined;\r\n }\r\n\r\n /** @internal */\r\n public static _IsColorAttachmentEnabled(engine: AbstractEngine): boolean {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];\r\n return !configuration?._colorAttachments || configuration.defines[\"PREPASS_COLOR_INDEX\"] !== undefined;\r\n }\r\n\r\n /** @internal */\r\n public static _BindZeroAlphaDiscard(engine: AbstractEngine, effect: Effect): void {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[engine.currentRenderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n const alphaMode = engine.getAlphaMode();\r\n const discard =\r\n configuration.defines[\"PREPASS_COLOR_INDEX\"] === undefined ||\r\n alphaMode === Constants.ALPHA_COMBINE ||\r\n alphaMode === Constants.ALPHA_ADD ||\r\n alphaMode === Constants.ALPHA_LAYER_ACCUMULATE;\r\n effect.setFloat(\"geometryZeroAlphaDiscard\", discard ? 1 : 0);\r\n }\r\n\r\n /**\r\n * Adds uniforms and samplers for geometry rendering.\r\n * @param uniforms The array of uniforms to add to.\r\n * @param _samplers The array of samplers to add to.\r\n */\r\n public static AddUniformsAndSamplers(uniforms: string[], _samplers: string[]) {\r\n uniforms.push(\"previousWorld\", \"previousViewProjection\", \"mPreviousBones\", \"objectId\", \"meshBlendTag\");\r\n }\r\n\r\n /**\r\n * Marks a list of meshes as dirty for geometry rendering.\r\n * @param renderPassId The render pass id the meshes are marked as dirty for.\r\n * @param meshes The list of meshes to mark as dirty.\r\n */\r\n public static MarkAsDirty(renderPassId: number, meshes: AbstractMesh[]) {\r\n for (const mesh of meshes) {\r\n if (!mesh.subMeshes) {\r\n continue;\r\n }\r\n\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh._removeDrawWrapper(renderPassId);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Prepares defines for geometry rendering.\r\n * @param renderPassId The render pass id the defines are prepared for.\r\n * @param mesh The mesh the defines are prepared for.\r\n * @param defines The defines to update according to the geometry rendering configuration.\r\n */\r\n public static PrepareDefines(renderPassId: number, mesh: AbstractMesh, defines: MaterialDefines) {\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n defines[\"PREPASS\"] = true;\r\n\r\n let numMRT = 0;\r\n\r\n for (let i = 0; i < MaterialHelperGeometryRendering.GeometryTextureDescriptions.length; i++) {\r\n const geometryTextureDescription = MaterialHelperGeometryRendering.GeometryTextureDescriptions[i];\r\n const defineName = geometryTextureDescription.define;\r\n const defineIndex = geometryTextureDescription.defineIndex;\r\n const index = configuration.defines[defineIndex];\r\n\r\n if (index !== undefined) {\r\n defines[defineName] = true;\r\n defines[defineIndex] = index;\r\n numMRT++;\r\n } else {\r\n defines[defineName] = false;\r\n delete defines[defineIndex];\r\n }\r\n }\r\n\r\n defines[\"PREPASS_OBJECT_ID_R8\"] = configuration.objectIdIsRedFormat;\r\n defines[\"SCENE_MRT_COUNT\"] = configuration._mrtCount ?? numMRT;\r\n\r\n defines[\"BONES_VELOCITY_ENABLED\"] =\r\n mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n }\r\n\r\n /**\r\n * Binds geometry rendering data for a mesh.\r\n * @param renderPassId The render pass id the geometry rendering data is bound for.\r\n * @param effect The effect to bind the geometry rendering data to.\r\n * @param mesh The mesh to bind the geometry rendering data for.\r\n * @param world The world matrix of the mesh.\r\n * @param material The material of the mesh.\r\n */\r\n public static Bind(renderPassId: number, effect: Effect, mesh: Mesh, world: Matrix, material: Material) {\r\n const configuration = MaterialHelperGeometryRendering._Configurations[renderPassId];\r\n if (!configuration) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (configuration.reverseCulling) {\r\n engine.setStateCullFaceType(scene._mirroredCameraPosition ? material.cullBackFaces : !material.cullBackFaces);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_OBJECT_ID_INDEX\"] !== undefined) {\r\n const maxObjectId = configuration.objectIdIsRedFormat ? 0xff : 0xffffff;\r\n let objectId = mesh.uniqueId;\r\n if (configuration.objectIdProvider) {\r\n objectId = _GetGeometryRenderingObjectId(mesh, configuration.objectIdProvider, maxObjectId);\r\n } else if (objectId > maxObjectId) {\r\n throw new Error(\r\n `Invalid geometry object ID ${objectId} for mesh \"${mesh.name}\". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`\r\n );\r\n }\r\n effect.setFloat(\"objectId\", objectId);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_MESH_BLEND_TAG_INDEX\"] !== undefined) {\r\n const meshBlendTag = configuration.meshBlendTagProvider ? _GetGeometryRenderingMeshBlendTag(mesh, configuration.meshBlendTagProvider) : mesh.meshBlendingTag;\r\n effect.setInt(\"meshBlendTag\", meshBlendTag);\r\n }\r\n\r\n if (configuration.defines[\"PREPASS_VELOCITY_INDEX\"] !== undefined || configuration.defines[\"PREPASS_VELOCITY_LINEAR_INDEX\"] !== undefined) {\r\n const currentWorldMatrices = (configuration._currentWorldMatrices ??= {});\r\n const worldMatrixFrameIds = (configuration._worldMatrixFrameIds ??= {});\r\n if (!currentWorldMatrices[mesh.uniqueId]) {\r\n currentWorldMatrices[mesh.uniqueId] = world.clone();\r\n configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();\r\n }\r\n if (worldMatrixFrameIds[mesh.uniqueId] !== engine.frameId) {\r\n configuration.previousWorldMatrices[mesh.uniqueId].copyFrom(currentWorldMatrices[mesh.uniqueId]);\r\n worldMatrixFrameIds[mesh.uniqueId] = engine.frameId;\r\n }\r\n currentWorldMatrices[mesh.uniqueId].copyFrom(world);\r\n\r\n if (configuration.lastUpdateFrameId === -1) {\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(scene.getTransformMatrix());\r\n configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());\r\n } else if (configuration.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {\r\n // First update of the prepass configuration for this rendering pass\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n configuration.currentViewProjection.copyFrom(scene.getTransformMatrix());\r\n } else if (configuration.lastUpdateFrameId !== engine.frameId) {\r\n // The scene transformation did not change from the previous frame (so no camera motion), we must update previousViewProjection accordingly\r\n configuration.lastUpdateFrameId = engine.frameId;\r\n configuration.previousViewProjection.copyFrom(configuration.currentViewProjection);\r\n }\r\n\r\n effect.setMatrix(\"previousWorld\", configuration.previousWorldMatrices[mesh.uniqueId]);\r\n effect.setMatrix(\"previousViewProjection\", configuration.previousViewProjection);\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (!skeleton.isUsingTextureForMatrices || effect.getUniformIndex(\"boneTextureInfo\") === -1) {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n if (!configuration.previousBones[mesh.uniqueId]) {\r\n configuration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", configuration.previousBones[mesh.uniqueId]);\r\n configuration.previousBones[mesh.uniqueId].set(matrices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -40,6 +40,8 @@ export declare function PrepassDefinesMixin<Tbase extends PrepassDefinesMixinCon
40
40
  PREPASS_OBJECT_ID: boolean;
41
41
  PREPASS_OBJECT_ID_INDEX: number;
42
42
  PREPASS_OBJECT_ID_R8: boolean;
43
+ PREPASS_MESH_BLEND_TAG: boolean;
44
+ PREPASS_MESH_BLEND_TAG_INDEX: number;
43
45
  SCENE_MRT_COUNT: number;
44
46
  };
45
47
  } & Tbase;
@@ -41,6 +41,8 @@ export function PrepassDefinesMixin(base) {
41
41
  this.PREPASS_OBJECT_ID = false;
42
42
  this.PREPASS_OBJECT_ID_INDEX = -1;
43
43
  this.PREPASS_OBJECT_ID_R8 = false;
44
+ this.PREPASS_MESH_BLEND_TAG = false;
45
+ this.PREPASS_MESH_BLEND_TAG_INDEX = -1;
44
46
  this.SCENE_MRT_COUNT = 0;
45
47
  }
46
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"prepass.defines.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/prepass.defines.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAA+C,IAAW;IACzF,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACI,YAAO,GAAG,KAAK,CAAC;YAChB,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,uBAAkB,GAAG,KAAK,CAAC;YAC3B,6BAAwB,GAAG,CAAC,CAAC,CAAC;YAC9B,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,wBAAmB,GAAG,KAAK,CAAC;YAC5B,8BAAyB,GAAG,CAAC,CAAC,CAAC;YAC/B,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,kCAA6B,GAAG,KAAK,CAAC;YACtC,wCAAmC,GAAG,CAAC,CAAC,CAAC;YACzC,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,8BAAyB,GAAG,KAAK,CAAC;YAClC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,2BAAsB,GAAG,KAAK,CAAC;YAC/B,iCAA4B,GAAG,CAAC,CAAC,CAAC;YAClC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,4BAAuB,GAAG,KAAK,CAAC;YAChC,kCAA6B,GAAG,CAAC,CAAC,CAAC;YACnC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,sBAAiB,GAAG,KAAK,CAAC;YAC1B,4BAAuB,GAAG,CAAC,CAAC,CAAC;YAC7B,yBAAoB,GAAG,KAAK,CAAC;YAC7B,oBAAe,GAAG,CAAC,CAAC;QAC/B,CAAC;KAAA,CAAC;AACN,CAAC","sourcesContent":["type PrepassDefinesMixinConstructor<T = {}> = new (...args: any[]) => T;\r\n\r\n/**\r\n * Mixin to add prepass defines to your material defines\r\n * @internal\r\n */\r\nexport function PrepassDefinesMixin<Tbase extends PrepassDefinesMixinConstructor>(base: Tbase) {\r\n return class extends base {\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE_LEGACY = false;\r\n public PREPASS_IRRADIANCE_LEGACY_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public PREPASS_OBJECT_ID = false;\r\n public PREPASS_OBJECT_ID_INDEX = -1;\r\n public PREPASS_OBJECT_ID_R8 = false;\r\n public SCENE_MRT_COUNT = 0;\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"prepass.defines.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/prepass.defines.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAA+C,IAAW;IACzF,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACI,YAAO,GAAG,KAAK,CAAC;YAChB,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,uBAAkB,GAAG,KAAK,CAAC;YAC3B,6BAAwB,GAAG,CAAC,CAAC,CAAC;YAC9B,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,wBAAmB,GAAG,KAAK,CAAC;YAC5B,8BAAyB,GAAG,CAAC,CAAC,CAAC;YAC/B,kBAAa,GAAG,KAAK,CAAC;YACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;YACzB,8BAAyB,GAAG,KAAK,CAAC;YAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;YACrC,kCAA6B,GAAG,KAAK,CAAC;YACtC,wCAAmC,GAAG,CAAC,CAAC,CAAC;YACzC,mBAAc,GAAG,KAAK,CAAC;YACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;YAC1B,8BAAyB,GAAG,KAAK,CAAC;YAClC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,2BAAsB,GAAG,KAAK,CAAC;YAC/B,iCAA4B,GAAG,CAAC,CAAC,CAAC;YAClC,qBAAgB,GAAG,KAAK,CAAC;YACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;YAC5B,4BAAuB,GAAG,KAAK,CAAC;YAChC,kCAA6B,GAAG,CAAC,CAAC,CAAC;YACnC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;YAChC,sBAAiB,GAAG,KAAK,CAAC;YAC1B,4BAAuB,GAAG,CAAC,CAAC,CAAC;YAC7B,yBAAoB,GAAG,KAAK,CAAC;YAC7B,2BAAsB,GAAG,KAAK,CAAC;YAC/B,iCAA4B,GAAG,CAAC,CAAC,CAAC;YAClC,oBAAe,GAAG,CAAC,CAAC;QAC/B,CAAC;KAAA,CAAC;AACN,CAAC","sourcesContent":["type PrepassDefinesMixinConstructor<T = {}> = new (...args: any[]) => T;\r\n\r\n/**\r\n * Mixin to add prepass defines to your material defines\r\n * @internal\r\n */\r\nexport function PrepassDefinesMixin<Tbase extends PrepassDefinesMixinConstructor>(base: Tbase) {\r\n return class extends base {\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE_LEGACY = false;\r\n public PREPASS_IRRADIANCE_LEGACY_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public PREPASS_OBJECT_ID = false;\r\n public PREPASS_OBJECT_ID_INDEX = -1;\r\n public PREPASS_OBJECT_ID_R8 = false;\r\n public PREPASS_MESH_BLEND_TAG = false;\r\n public PREPASS_MESH_BLEND_TAG_INDEX = -1;\r\n public SCENE_MRT_COUNT = 0;\r\n };\r\n}\r\n"]}
@@ -29,6 +29,7 @@ export * from "./drawWrapper.js";
29
29
  export * from "./materialPluginBase.pure.js";
30
30
  export * from "./materialPluginManager.pure.js";
31
31
  export * from "./materialPluginEvent.js";
32
+ export * from "./ditheredTileFadeMaterialPlugin.js";
32
33
  export * from "./material.detailMapConfiguration.js";
33
34
  export * from "./material.decalMapConfiguration.pure.js";
34
35
  export * from "./materialPluginFactoryExport.js";
package/Materials/pure.js CHANGED
@@ -30,6 +30,7 @@ export * from "./drawWrapper.js";
30
30
  export * from "./materialPluginBase.pure.js";
31
31
  export * from "./materialPluginManager.pure.js";
32
32
  export * from "./materialPluginEvent.js";
33
+ export * from "./ditheredTileFadeMaterialPlugin.js";
33
34
  export * from "./material.detailMapConfiguration.js";
34
35
  export * from "./material.decalMapConfiguration.pure.js";
35
36
  export * from "./materialPluginFactoryExport.js";
@@ -1 +1 @@
1
- {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAC7D,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oDAAoD,CAAC;AACnE,cAAc,oEAAoE,CAAC;AACnF,cAAc,oEAAoE,CAAC;AACnF,cAAc,+DAA+D,CAAC;AAC9E,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\n/* eslint-disable @typescript-eslint/no-restricted-imports */\nexport * from \"./Background/pure\";\nexport * from \"./colorCurves.pure\";\nexport * from \"./iEffectFallbacks\";\nexport * from \"./effectFallbacks\";\nexport * from \"./effect.pure\";\nexport * from \"./fresnelParameters.pure\";\nexport * from \"./imageProcessing\";\nexport * from \"./imageProcessingConfiguration.pure\";\nexport * from \"./material.pure\";\nexport * from \"./materialDefines\";\nexport * from \"./clipPlaneMaterialHelper\";\nexport * from \"./materialHelper\";\nexport * from \"./multiMaterial.pure\";\nexport * from \"./Occlusion/pure\";\nexport * from \"./PBR/pure\";\nexport * from \"./pushMaterial\";\nexport * from \"./shaderLanguage\";\nexport * from \"./shaderMaterial.pure\";\nexport * from \"./standardMaterial.pure\";\nexport * from \"./Textures/pure\";\nexport * from \"./uniformBuffer\";\nexport * from \"./materialFlags\";\nexport * from \"./Node/pure\";\nexport * from \"./effectRenderer.pure\";\nexport * from \"./shadowDepthWrapper\";\nexport * from \"./drawWrapper.functions\";\nexport * from \"./drawWrapper\";\nexport * from \"./materialPluginBase.pure\";\nexport * from \"./materialPluginManager.pure\";\nexport * from \"./materialPluginEvent\";\nexport * from \"./material.detailMapConfiguration\";\nexport * from \"./material.decalMapConfiguration.pure\";\nexport * from \"./materialPluginFactoryExport\";\nexport * from \"./GreasedLine/greasedLinePluginMaterial.pure\";\nexport * from \"./GreasedLine/greasedLineSimpleMaterial\";\nexport * from \"./GreasedLine/greasedLineMaterialInterfaces\";\nexport * from \"./GreasedLine/greasedLineMaterialDefaults\";\nexport * from \"./meshDebugPluginMaterial.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingMaterial.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure\";\nexport * from \"./materialHelper.functions\";\nexport * from \"./materialHelper.geometryrendering\";\nexport * from \"./materialStencilState\";\nexport * from \"./uv.defines\";\nexport * from \"./floatingOriginMatrixOverrides\";\nexport * from \"./vertexPullingHelper.functions\";\nexport * from \"./effect.webgl.functions.pure\";\nexport * from \"./standardMaterial.decalMap.pure\";\nexport * from \"./GaussianSplatting/pure\";\nexport * from \"./GreasedLine/pure\";\n"]}
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAC7D,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qCAAqC,CAAC;AACpD,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oDAAoD,CAAC;AACnE,cAAc,oEAAoE,CAAC;AACnF,cAAc,oEAAoE,CAAC;AACnF,cAAc,+DAA+D,CAAC;AAC9E,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\n/* eslint-disable @typescript-eslint/no-restricted-imports */\nexport * from \"./Background/pure\";\nexport * from \"./colorCurves.pure\";\nexport * from \"./iEffectFallbacks\";\nexport * from \"./effectFallbacks\";\nexport * from \"./effect.pure\";\nexport * from \"./fresnelParameters.pure\";\nexport * from \"./imageProcessing\";\nexport * from \"./imageProcessingConfiguration.pure\";\nexport * from \"./material.pure\";\nexport * from \"./materialDefines\";\nexport * from \"./clipPlaneMaterialHelper\";\nexport * from \"./materialHelper\";\nexport * from \"./multiMaterial.pure\";\nexport * from \"./Occlusion/pure\";\nexport * from \"./PBR/pure\";\nexport * from \"./pushMaterial\";\nexport * from \"./shaderLanguage\";\nexport * from \"./shaderMaterial.pure\";\nexport * from \"./standardMaterial.pure\";\nexport * from \"./Textures/pure\";\nexport * from \"./uniformBuffer\";\nexport * from \"./materialFlags\";\nexport * from \"./Node/pure\";\nexport * from \"./effectRenderer.pure\";\nexport * from \"./shadowDepthWrapper\";\nexport * from \"./drawWrapper.functions\";\nexport * from \"./drawWrapper\";\nexport * from \"./materialPluginBase.pure\";\nexport * from \"./materialPluginManager.pure\";\nexport * from \"./materialPluginEvent\";\nexport * from \"./ditheredTileFadeMaterialPlugin\";\nexport * from \"./material.detailMapConfiguration\";\nexport * from \"./material.decalMapConfiguration.pure\";\nexport * from \"./materialPluginFactoryExport\";\nexport * from \"./GreasedLine/greasedLinePluginMaterial.pure\";\nexport * from \"./GreasedLine/greasedLineSimpleMaterial\";\nexport * from \"./GreasedLine/greasedLineMaterialInterfaces\";\nexport * from \"./GreasedLine/greasedLineMaterialDefaults\";\nexport * from \"./meshDebugPluginMaterial.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingMaterial.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure\";\nexport * from \"./GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure\";\nexport * from \"./materialHelper.functions\";\nexport * from \"./materialHelper.geometryrendering\";\nexport * from \"./materialStencilState\";\nexport * from \"./uv.defines\";\nexport * from \"./floatingOriginMatrixOverrides\";\nexport * from \"./vertexPullingHelper.functions\";\nexport * from \"./effect.webgl.functions.pure\";\nexport * from \"./standardMaterial.decalMap.pure\";\nexport * from \"./GaussianSplatting/pure\";\nexport * from \"./GreasedLine/pure\";\n"]}
@@ -53,6 +53,8 @@ declare const StandardMaterialDefinesBase_base: {
53
53
  PREPASS_OBJECT_ID: boolean;
54
54
  PREPASS_OBJECT_ID_INDEX: number;
55
55
  PREPASS_OBJECT_ID_R8: boolean;
56
+ PREPASS_MESH_BLEND_TAG: boolean;
57
+ PREPASS_MESH_BLEND_TAG_INDEX: number;
56
58
  SCENE_MRT_COUNT: number;
57
59
  };
58
60
  } & {
@@ -1416,6 +1416,12 @@ let StandardMaterial = (() => {
1416
1416
  ubo.updateColor4("emissiveRightColor", this.emissiveFresnelParameters.rightColor, this.emissiveFresnelParameters.bias);
1417
1417
  }
1418
1418
  }
1419
+ // The alpha test compares against alphaCutOff whatever supplies the alpha: a texture, vertex or
1420
+ // instance color, opacity fresnel or the material alpha. Binding it only when a texture carried
1421
+ // alpha left every other case testing against the default of 0, so nothing was ever discarded.
1422
+ if (defines.ALPHATEST) {
1423
+ ubo.updateFloat("alphaCutOff", this.alphaCutOff);
1424
+ }
1419
1425
  // Textures
1420
1426
  if (scene.texturesEnabled) {
1421
1427
  if (this._diffuseTexture && _a.DiffuseTextureEnabled) {
@@ -1430,9 +1436,6 @@ let StandardMaterial = (() => {
1430
1436
  ubo.updateFloat2("vOpacityInfos", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);
1431
1437
  BindTextureMatrix(this._opacityTexture, ubo, "opacity");
1432
1438
  }
1433
- if (this._hasAlphaChannel()) {
1434
- ubo.updateFloat("alphaCutOff", this.alphaCutOff);
1435
- }
1436
1439
  BindIBLParameters(scene, defines, ubo, Color3.White(), this._reflectionTexture, false, false, true, false, false, false, this.roughness);
1437
1440
  if (!this._reflectionTexture || !_a.ReflectionTextureEnabled) {
1438
1441
  ubo.updateFloat2("vReflectionInfos", 0.0, this.roughness);