@onerjs/core 8.56.3 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/Animations/animatable.core.js +36 -0
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animationGroup.pure.d.ts +61 -1
  4. package/Animations/animationGroup.pure.js +191 -2
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/index.d.ts +1 -0
  7. package/Animations/index.js +1 -0
  8. package/Animations/index.js.map +1 -1
  9. package/Animations/pure.d.ts +1 -0
  10. package/Animations/pure.js +1 -0
  11. package/Animations/pure.js.map +1 -1
  12. package/Animations/rootMotion.d.ts +560 -0
  13. package/Animations/rootMotion.js +1709 -0
  14. package/Animations/rootMotion.js.map +1 -0
  15. package/Animations/runtimeAnimation.d.ts +57 -0
  16. package/Animations/runtimeAnimation.js +127 -3
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Cameras/arcRotateCamera.pure.d.ts +2 -0
  19. package/Cameras/arcRotateCamera.pure.js +2 -0
  20. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  21. package/Cameras/camera.pure.js +4 -0
  22. package/Cameras/camera.pure.js.map +1 -1
  23. package/Cameras/targetCamera.pure.d.ts +2 -0
  24. package/Cameras/targetCamera.pure.js +7 -1
  25. package/Cameras/targetCamera.pure.js.map +1 -1
  26. package/Collisions/gpuPicker.js +5 -5
  27. package/Collisions/gpuPicker.js.map +1 -1
  28. package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
  29. package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
  30. package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
  31. package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
  32. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
  34. package/Engines/Extensions/engine.multiRender.pure.js +63 -0
  35. package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
  36. package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
  37. package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
  38. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
  39. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
  40. package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
  41. package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
  42. package/Engines/Extensions/index.d.ts +1 -0
  43. package/Engines/Extensions/index.js +1 -0
  44. package/Engines/Extensions/index.js.map +1 -1
  45. package/Engines/Extensions/pure.d.ts +1 -1
  46. package/Engines/Extensions/pure.js +1 -1
  47. package/Engines/Extensions/pure.js.map +1 -1
  48. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
  49. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
  50. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
  51. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
  52. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
  53. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  54. package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
  55. package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
  56. package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
  57. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  58. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  59. package/Engines/WebGPU/Extensions/index.js +1 -0
  60. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  61. package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
  62. package/Engines/WebGPU/Extensions/pure.js +1 -1
  63. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  64. package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
  65. package/Engines/WebGPU/webgpuBundleList.js +4 -0
  66. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
  68. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  69. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
  70. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  71. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  72. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  73. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
  74. package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
  75. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  76. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  77. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  78. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  79. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
  80. package/Engines/WebGPU/webgpuTextureManager.js +286 -13
  81. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  82. package/Engines/abstractEngine.pure.d.ts +2 -0
  83. package/Engines/abstractEngine.pure.js +7 -3
  84. package/Engines/abstractEngine.pure.js.map +1 -1
  85. package/Engines/constants.d.ts +4 -0
  86. package/Engines/constants.js +4 -0
  87. package/Engines/constants.js.map +1 -1
  88. package/Engines/thinEngine.pure.d.ts +14 -0
  89. package/Engines/thinEngine.pure.js +48 -12
  90. package/Engines/thinEngine.pure.js.map +1 -1
  91. package/Engines/thinNativeEngine.pure.d.ts +1 -0
  92. package/Engines/thinNativeEngine.pure.js +7 -1
  93. package/Engines/thinNativeEngine.pure.js.map +1 -1
  94. package/Engines/thinWebGPUEngine.d.ts +4 -0
  95. package/Engines/thinWebGPUEngine.js +10 -1
  96. package/Engines/thinWebGPUEngine.js.map +1 -1
  97. package/Engines/webgpuEngine.pure.d.ts +5 -2
  98. package/Engines/webgpuEngine.pure.js +48 -13
  99. package/Engines/webgpuEngine.pure.js.map +1 -1
  100. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
  101. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
  102. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
  103. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
  104. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
  105. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
  106. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
  107. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
  108. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
  109. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
  110. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
  111. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
  112. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
  113. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
  115. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
  116. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
  117. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
  118. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
  119. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
  120. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +2 -0
  121. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +4 -0
  122. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
  123. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
  124. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
  125. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
  126. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +53 -10
  127. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
  128. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
  129. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
  130. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
  131. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
  132. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
  133. package/FlowGraph/flowGraph.d.ts +4 -0
  134. package/FlowGraph/flowGraph.js +38 -7
  135. package/FlowGraph/flowGraph.js.map +1 -1
  136. package/FlowGraph/flowGraphBlock.js +3 -0
  137. package/FlowGraph/flowGraphBlock.js.map +1 -1
  138. package/FlowGraph/flowGraphConnection.d.ts +7 -0
  139. package/FlowGraph/flowGraphConnection.js +7 -0
  140. package/FlowGraph/flowGraphConnection.js.map +1 -1
  141. package/FlowGraph/flowGraphContext.d.ts +2 -1
  142. package/FlowGraph/flowGraphContext.js +4 -3
  143. package/FlowGraph/flowGraphContext.js.map +1 -1
  144. package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
  145. package/FlowGraph/flowGraphCoordinator.js +47 -16
  146. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  147. package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
  148. package/FlowGraph/flowGraphEventBlock.js +7 -0
  149. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  150. package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
  151. package/FlowGraph/flowGraphHostResolver.js.map +1 -1
  152. package/FlowGraph/flowGraphParser.js +60 -2
  153. package/FlowGraph/flowGraphParser.js.map +1 -1
  154. package/FlowGraph/serialization.d.ts +2 -0
  155. package/FlowGraph/serialization.js +10 -22
  156. package/FlowGraph/serialization.js.map +1 -1
  157. package/FlowGraph/typeDefinitions.d.ts +8 -0
  158. package/FlowGraph/typeDefinitions.js.map +1 -1
  159. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
  160. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
  161. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
  162. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
  163. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
  164. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
  165. package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
  166. package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
  167. package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
  168. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
  169. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  170. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
  171. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
  172. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/allBlocks.pure.js +2 -0
  174. package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
  175. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  176. package/FrameGraph/Node/Blocks/index.js +1 -0
  177. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  178. package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
  179. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  180. package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
  181. package/FrameGraph/Node/Blocks/pure.js +1 -0
  182. package/FrameGraph/Node/Blocks/pure.js.map +1 -1
  183. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
  184. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
  185. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  186. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  187. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  188. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
  189. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
  190. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
  191. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  192. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
  193. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  194. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
  195. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
  196. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
  197. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
  198. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +69 -33
  199. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  200. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
  201. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  202. package/FrameGraph/frameGraphObjectList.d.ts +6 -1
  203. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  204. package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
  205. package/FrameGraph/frameGraphRenderContext.js +5 -5
  206. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  207. package/FrameGraph/index.d.ts +1 -0
  208. package/FrameGraph/index.js +1 -0
  209. package/FrameGraph/index.js.map +1 -1
  210. package/FrameGraph/pure.d.ts +1 -0
  211. package/FrameGraph/pure.js +1 -0
  212. package/FrameGraph/pure.js.map +1 -1
  213. package/Inputs/scene.inputManager.d.ts +4 -0
  214. package/Inputs/scene.inputManager.js +50 -8
  215. package/Inputs/scene.inputManager.js.map +1 -1
  216. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +5 -5
  217. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
  218. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +5 -5
  219. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  220. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
  221. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +151 -47
  222. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  223. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
  224. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  225. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
  226. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  227. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
  228. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  229. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
  230. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  231. package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
  232. package/Materials/Node/nodeMaterial.pure.js +4 -0
  233. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  234. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  235. package/Materials/Node/nodeMaterialBuildState.js +25 -3
  236. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  237. package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
  238. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
  239. package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +13 -14
  240. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +6 -6
  241. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  242. package/Materials/Textures/baseTexture.pure.js +3 -0
  243. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  244. package/Materials/Textures/cubeTexture.pure.js +1 -1
  245. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  246. package/Materials/Textures/internalTexture.d.ts +8 -1
  247. package/Materials/Textures/internalTexture.js +9 -2
  248. package/Materials/Textures/internalTexture.js.map +1 -1
  249. package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
  250. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  251. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  252. package/Materials/Textures/rawTexture3D.js +1 -1
  253. package/Materials/Textures/rawTexture3D.js.map +1 -1
  254. package/Materials/Textures/textureHelper.functions.d.ts +14 -0
  255. package/Materials/Textures/textureHelper.functions.js +24 -0
  256. package/Materials/Textures/textureHelper.functions.js.map +1 -1
  257. package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
  258. package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
  259. package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
  260. package/Materials/index.d.ts +1 -0
  261. package/Materials/index.js +1 -0
  262. package/Materials/index.js.map +1 -1
  263. package/Materials/materialHelper.geometryrendering.d.ts +46 -1
  264. package/Materials/materialHelper.geometryrendering.js +105 -8
  265. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  266. package/Materials/prepass.defines.d.ts +2 -0
  267. package/Materials/prepass.defines.js +2 -0
  268. package/Materials/prepass.defines.js.map +1 -1
  269. package/Materials/pure.d.ts +1 -0
  270. package/Materials/pure.js +1 -0
  271. package/Materials/pure.js.map +1 -1
  272. package/Materials/standardMaterial.pure.d.ts +2 -0
  273. package/Materials/standardMaterial.pure.js +6 -3
  274. package/Materials/standardMaterial.pure.js.map +1 -1
  275. package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
  276. package/Meshes/Builders/polygonBuilder.pure.js +4 -1
  277. package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
  278. package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
  279. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
  280. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
  281. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -14
  282. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +20 -24
  283. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  284. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -0
  285. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +11 -4
  286. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  287. package/Meshes/abstractMesh.pure.d.ts +18 -0
  288. package/Meshes/abstractMesh.pure.js +22 -0
  289. package/Meshes/abstractMesh.pure.js.map +1 -1
  290. package/Meshes/index.d.ts +1 -0
  291. package/Meshes/index.js +1 -0
  292. package/Meshes/index.js.map +1 -1
  293. package/Meshes/instancedMesh.pure.d.ts +5 -0
  294. package/Meshes/instancedMesh.pure.js +12 -0
  295. package/Meshes/instancedMesh.pure.js.map +1 -1
  296. package/Meshes/mesh.pure.js +23 -8
  297. package/Meshes/mesh.pure.js.map +1 -1
  298. package/Meshes/meshBlendingTag.d.ts +47 -0
  299. package/Meshes/meshBlendingTag.js +64 -0
  300. package/Meshes/meshBlendingTag.js.map +1 -0
  301. package/Meshes/polygonMesh.js +2 -2
  302. package/Meshes/polygonMesh.js.map +1 -1
  303. package/Meshes/pure.d.ts +1 -0
  304. package/Meshes/pure.js +1 -0
  305. package/Meshes/pure.js.map +1 -1
  306. package/Misc/fileTools.pure.js +21 -0
  307. package/Misc/fileTools.pure.js.map +1 -1
  308. package/Misc/snapshotRenderingHelper.js +2 -2
  309. package/Misc/snapshotRenderingHelper.js.map +1 -1
  310. package/Misc/tools.pure.js +1 -1
  311. package/Misc/tools.pure.js.map +1 -1
  312. package/Particles/gpuParticleSystem.pure.d.ts +2 -0
  313. package/Particles/gpuParticleSystem.pure.js +89 -28
  314. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  315. package/Particles/thinParticleSystem.pure.d.ts +2 -0
  316. package/Particles/thinParticleSystem.pure.js +84 -19
  317. package/Particles/thinParticleSystem.pure.js.map +1 -1
  318. package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
  319. package/Particles/webgl2ParticleSystem.pure.js +12 -4
  320. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  321. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
  322. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  323. package/PostProcesses/index.d.ts +2 -0
  324. package/PostProcesses/index.js +2 -0
  325. package/PostProcesses/index.js.map +1 -1
  326. package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
  327. package/PostProcesses/meshBlendingBlueNoise.js +77 -0
  328. package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
  329. package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
  330. package/PostProcesses/meshBlendingPostProcess.js +315 -0
  331. package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
  332. package/PostProcesses/pure.d.ts +2 -0
  333. package/PostProcesses/pure.js +2 -0
  334. package/PostProcesses/pure.js.map +1 -1
  335. package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
  336. package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
  337. package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
  338. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
  339. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  340. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +8 -8
  341. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  342. package/Rendering/boundingBoxRenderer.pure.js +2 -1
  343. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  344. package/Rendering/depthRenderer.pure.js +3 -4
  345. package/Rendering/depthRenderer.pure.js.map +1 -1
  346. package/Rendering/edgesRenderer.pure.d.ts +4 -2
  347. package/Rendering/edgesRenderer.pure.js +11 -2
  348. package/Rendering/edgesRenderer.pure.js.map +1 -1
  349. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +10 -0
  350. package/Rendering/fluidRenderer/fluidRenderingObject.js +20 -0
  351. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  352. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +9 -3
  353. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +14 -9
  354. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  355. package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
  356. package/Rendering/geometryBufferRenderer.pure.js +126 -17
  357. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  358. package/Rendering/objectRenderer.d.ts +7 -1
  359. package/Rendering/objectRenderer.js +45 -7
  360. package/Rendering/objectRenderer.js.map +1 -1
  361. package/Rendering/outlineRenderer.pure.js +6 -2
  362. package/Rendering/outlineRenderer.pure.js.map +1 -1
  363. package/Rendering/renderingManager.d.ts +1 -1
  364. package/Rendering/renderingManager.js +5 -4
  365. package/Rendering/renderingManager.js.map +1 -1
  366. package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  367. package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
  368. package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  369. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
  370. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  371. package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
  372. package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
  373. package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  374. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
  375. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  376. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
  377. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  378. package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
  379. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  380. package/Shaders/ShadersInclude/pbrDebug.js +6 -2
  381. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  382. package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
  383. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  384. package/Shaders/default.fragment.js +31 -40
  385. package/Shaders/default.fragment.js.map +1 -1
  386. package/Shaders/depthOfField.fragment.js +13 -9
  387. package/Shaders/depthOfField.fragment.js.map +1 -1
  388. package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
  389. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  390. package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
  391. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  392. package/Shaders/gaussianSplatting.fragment.js +63 -3
  393. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  394. package/Shaders/gaussianSplatting.vertex.js +80 -0
  395. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  396. package/Shaders/geometry.fragment.js +17 -11
  397. package/Shaders/geometry.fragment.js.map +1 -1
  398. package/Shaders/gpuRenderParticles.fragment.js +43 -1
  399. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  400. package/Shaders/gpuRenderParticles.vertex.js +96 -16
  401. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  402. package/Shaders/meshBlending.fragment.d.ts +5 -0
  403. package/Shaders/meshBlending.fragment.js +519 -0
  404. package/Shaders/meshBlending.fragment.js.map +1 -0
  405. package/Shaders/particles.fragment.js +43 -1
  406. package/Shaders/particles.fragment.js.map +1 -1
  407. package/Shaders/particles.vertex.js +84 -3
  408. package/Shaders/particles.vertex.js.map +1 -1
  409. package/Shaders/sprites.fragment.js +52 -2
  410. package/Shaders/sprites.fragment.js.map +1 -1
  411. package/Shaders/sprites.vertex.js +62 -1
  412. package/Shaders/sprites.vertex.js.map +1 -1
  413. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  414. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
  415. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  416. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
  417. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
  418. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  419. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  420. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  421. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
  422. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
  423. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
  424. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
  425. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
  426. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  427. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
  428. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
  429. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  430. package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
  431. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  432. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
  433. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  434. package/ShadersWGSL/default.fragment.js +17 -48
  435. package/ShadersWGSL/default.fragment.js.map +1 -1
  436. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
  437. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  438. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
  439. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  440. package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
  441. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  442. package/ShadersWGSL/gaussianSplatting.vertex.js +80 -0
  443. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  444. package/ShadersWGSL/geometry.fragment.js +37 -2
  445. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  446. package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
  447. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
  448. package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
  449. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
  450. package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
  451. package/ShadersWGSL/meshBlending.fragment.js +576 -0
  452. package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
  453. package/ShadersWGSL/openpbr.fragment.js +2 -1
  454. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  455. package/ShadersWGSL/particles.fragment.js +45 -1
  456. package/ShadersWGSL/particles.fragment.js.map +1 -1
  457. package/ShadersWGSL/particles.vertex.js +86 -4
  458. package/ShadersWGSL/particles.vertex.js.map +1 -1
  459. package/ShadersWGSL/pbr.fragment.js +2 -1
  460. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  461. package/ShadersWGSL/sprites.fragment.js +56 -2
  462. package/ShadersWGSL/sprites.fragment.js.map +1 -1
  463. package/ShadersWGSL/sprites.vertex.js +62 -1
  464. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  465. package/Sprites/spriteManager.d.ts +13 -0
  466. package/Sprites/spriteManager.js +15 -0
  467. package/Sprites/spriteManager.js.map +1 -1
  468. package/Sprites/spriteRenderer.d.ts +24 -1
  469. package/Sprites/spriteRenderer.js +368 -50
  470. package/Sprites/spriteRenderer.js.map +1 -1
  471. package/Sprites/thinSprite.d.ts +4 -0
  472. package/Sprites/thinSprite.js +4 -0
  473. package/Sprites/thinSprite.js.map +1 -1
  474. package/States/alphaCullingState.d.ts +3 -1
  475. package/States/alphaCullingState.js +18 -3
  476. package/States/alphaCullingState.js.map +1 -1
  477. package/XR/webXRDefaultExperience.d.ts +5 -1
  478. package/XR/webXRDefaultExperience.js.map +1 -1
  479. package/XR/webXREnterExitUI.d.ts +2 -1
  480. package/XR/webXREnterExitUI.js.map +1 -1
  481. package/package.json +1 -1
  482. package/scene.pure.d.ts +23 -0
  483. package/scene.pure.js +35 -0
  484. package/scene.pure.js.map +1 -1
@@ -0,0 +1,509 @@
1
+ import { InstancedMesh, RegisterInstancedMesh } from "../Meshes/instancedMesh.pure.js";
2
+ import { Mesh } from "../Meshes/mesh.pure.js";
3
+ import { RegisterThinInstanceMesh } from "../Meshes/thinInstanceMesh.pure.js";
4
+ import { Vector4 } from "../Maths/math.vector.pure.js";
5
+ import { MaterialPluginBase } from "./materialPluginBase.pure.js";
6
+ import { PBRBaseMaterial } from "./PBR/pbrBaseMaterial.pure.js";
7
+ import { StandardMaterial } from "./standardMaterial.pure.js";
8
+ let GlslShaderLoadPromise;
9
+ let WgslShaderLoadPromise;
10
+ const DepthPrePassInjectionPoint = "!#include<depthPrePass>";
11
+ async function _LoadGlslShaderIncludeAsync() {
12
+ await import("../Shaders/ShadersInclude/bayerDitherFunctions.js");
13
+ }
14
+ async function _LoadWgslShaderIncludeAsync() {
15
+ await import("../ShadersWGSL/ShadersInclude/bayerDitherFunctions.js");
16
+ }
17
+ async function _LoadShaderIncludeAsync(shaderLanguage) {
18
+ if (shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
19
+ WgslShaderLoadPromise ?? (WgslShaderLoadPromise = _LoadWgslShaderIncludeAsync());
20
+ await WgslShaderLoadPromise;
21
+ return;
22
+ }
23
+ GlslShaderLoadPromise ?? (GlslShaderLoadPromise = _LoadGlslShaderIncludeAsync());
24
+ await GlslShaderLoadPromise;
25
+ }
26
+ /**
27
+ * Applies an opaque, screen-space dithered fade for tile LOD meshes that share a Standard or PBR material.
28
+ *
29
+ * The plugin keeps depth writing and the material's alpha mode unchanged. It affects the material color and integrated
30
+ * prepass outputs, but not standalone depth, shadow, picking, outline, or custom passes. Tile renderers using those passes
31
+ * must provide equivalent pass-specific coverage or exclude fading tiles from them.
32
+ *
33
+ * Per-mesh bounds are runtime state. Material cloning and serialization do not copy them; use {@link copyToMaterial} to
34
+ * copy the enabled state to a cloned material and then configure bounds for the cloned tile meshes.
35
+ * @see https://playground.babylonjs.com/#HI17VI#0
36
+ */
37
+ export class DitheredTileFadeMaterialPlugin extends MaterialPluginBase {
38
+ /**
39
+ * Gets whether configured fades are applied. Disabling the plugin makes every mesh fully visible without discarding its stored bounds.
40
+ */
41
+ get isEnabled() {
42
+ return this._isEnabled;
43
+ }
44
+ /**
45
+ * Sets whether configured fades are applied. This uniform-only change does not recompile the material.
46
+ */
47
+ set isEnabled(value) {
48
+ this._isEnabled = value;
49
+ }
50
+ /**
51
+ * Creates and attaches a dithered fade plugin.
52
+ * @param material The Standard or PBR material that the plugin will extend.
53
+ * @throws If the material is unsupported or already has a dithered tile fade plugin. Use {@link GetOrCreate} when reuse is intended.
54
+ */
55
+ constructor(material) {
56
+ super(material, DitheredTileFadeMaterialPlugin.Name, 190, undefined, DitheredTileFadeMaterialPlugin._ValidateNewPlugin(material), false, true);
57
+ this._meshBounds = new WeakMap();
58
+ this._instancedBufferSources = new WeakSet();
59
+ this._thinInstanceFadeBuffers = new WeakMap();
60
+ this._generation = 1;
61
+ this._isEnabled = true;
62
+ this._shaderIncludeReady = false;
63
+ this.registerForExtraEvents = true;
64
+ this.doNotSerialize = true;
65
+ void this._loadShaderIncludeAsync(material.shaderLanguage);
66
+ this._enable(true);
67
+ }
68
+ /**
69
+ * Gets the plugin already attached to a material, or creates and attaches one.
70
+ * @param material The Standard or PBR material to extend.
71
+ * @returns The material's dithered fade plugin.
72
+ * @throws If the material is unsupported or another plugin uses the reserved plugin name.
73
+ */
74
+ static GetOrCreate(material) {
75
+ DitheredTileFadeMaterialPlugin._ValidateMaterial(material);
76
+ const existing = material.pluginManager?.getPlugin(DitheredTileFadeMaterialPlugin.Name);
77
+ if (existing) {
78
+ if (!(existing instanceof DitheredTileFadeMaterialPlugin)) {
79
+ throw new Error(`The material "${material.name}" already has an incompatible plugin named "${DitheredTileFadeMaterialPlugin.Name}".`);
80
+ }
81
+ return existing;
82
+ }
83
+ return new DitheredTileFadeMaterialPlugin(material);
84
+ }
85
+ /**
86
+ * Checks whether the plugin supports a shader language.
87
+ * @param shaderLanguage The shader language to check.
88
+ * @returns True for GLSL and WGSL.
89
+ */
90
+ isCompatible(shaderLanguage) {
91
+ return shaderLanguage === 0 /* ShaderLanguage.GLSL */ || shaderLanguage === 1 /* ShaderLanguage.WGSL */;
92
+ }
93
+ /**
94
+ * Sets both normalized Bayer interval bounds for a mesh.
95
+ * @param mesh The tile mesh or hardware instance whose draw calls use the bounds.
96
+ * @param lowerBound The inclusive lower bound in the range [0, 1].
97
+ * @param upperBound The exclusive upper bound in the range [0, 1].
98
+ * @remarks Bounds are independent. A lower bound greater than or equal to the upper bound intentionally produces an empty interval.
99
+ */
100
+ setFadeBounds(mesh, lowerBound, upperBound) {
101
+ this._validateMesh(mesh);
102
+ this._validateBound(lowerBound, "lowerBound");
103
+ this._validateBound(upperBound, "upperBound");
104
+ const bounds = this._meshBounds.get(mesh);
105
+ if (bounds) {
106
+ bounds.lowerBound = lowerBound;
107
+ bounds.upperBound = upperBound;
108
+ }
109
+ else {
110
+ this._meshBounds.set(mesh, { lowerBound, upperBound });
111
+ }
112
+ this._updateInstancedFadeBounds(mesh, lowerBound, upperBound, true);
113
+ }
114
+ /**
115
+ * Sets the normalized inclusive lower Bayer interval bound for a mesh.
116
+ * @param mesh The tile mesh or hardware instance whose draw calls use the bound.
117
+ * @param lowerBound The inclusive lower bound in the range [0, 1].
118
+ */
119
+ setFadeLowerBound(mesh, lowerBound) {
120
+ this.setFadeBounds(mesh, lowerBound, this._meshBounds.get(mesh)?.upperBound ?? 1);
121
+ }
122
+ /**
123
+ * Sets the normalized exclusive upper Bayer interval bound for a mesh.
124
+ * @param mesh The tile mesh or hardware instance whose draw calls use the bound.
125
+ * @param upperBound The exclusive upper bound in the range [0, 1].
126
+ */
127
+ setFadeUpperBound(mesh, upperBound) {
128
+ this.setFadeBounds(mesh, this._meshBounds.get(mesh)?.lowerBound ?? 0, upperBound);
129
+ }
130
+ /**
131
+ * Copies a mesh's current bounds without allocating.
132
+ * @param mesh The mesh whose bounds are queried.
133
+ * @param result The object that receives the bounds.
134
+ * @returns True when the mesh has explicit bounds. Otherwise false is returned with the source mesh's bounds for a hardware instance, or [0, 1].
135
+ */
136
+ getFadeBoundsToRef(mesh, result) {
137
+ this._validateMesh(mesh);
138
+ const explicitBounds = this._meshBounds.get(mesh);
139
+ const bounds = explicitBounds ?? (mesh instanceof InstancedMesh ? this._meshBounds.get(mesh.sourceMesh) : undefined);
140
+ result.lowerBound = bounds?.lowerBound ?? 0;
141
+ result.upperBound = bounds?.upperBound ?? 1;
142
+ return explicitBounds !== undefined;
143
+ }
144
+ /**
145
+ * Removes a mesh's explicit bounds. A hardware instance inherits its source mesh's bounds; a source mesh uses [0, 1].
146
+ * @param mesh The mesh to reset.
147
+ */
148
+ resetFade(mesh) {
149
+ this._validateMesh(mesh);
150
+ this._meshBounds.delete(mesh);
151
+ this._updateInstancedFadeBounds(mesh, 0, 1, false);
152
+ }
153
+ /**
154
+ * Sets normalized Bayer interval bounds for one thin instance.
155
+ * @param mesh The source mesh containing the thin instance.
156
+ * @param index The thin instance index.
157
+ * @param lowerBound The inclusive lower bound in the range [0, 1].
158
+ * @param upperBound The exclusive upper bound in the range [0, 1].
159
+ * @param refresh Whether to immediately upload the updated attribute buffer.
160
+ */
161
+ setThinInstanceFadeBounds(mesh, index, lowerBound, upperBound, refresh = true) {
162
+ this._validateBound(lowerBound, "lowerBound");
163
+ this._validateBound(upperBound, "upperBound");
164
+ this._validateThinInstanceIndex(mesh, index);
165
+ const buffer = this._ensureThinInstanceBuffer(mesh);
166
+ const offset = index * 4;
167
+ buffer[offset] = lowerBound;
168
+ buffer[offset + 1] = upperBound;
169
+ buffer[offset + 2] = 1;
170
+ buffer[offset + 3] = this._generation;
171
+ if (refresh) {
172
+ this.commitThinInstanceFadeBounds(mesh);
173
+ }
174
+ }
175
+ /**
176
+ * Sets normalized Bayer interval bounds for all thin instances from packed lower/upper pairs.
177
+ * @param mesh The source mesh containing the thin instances.
178
+ * @param bounds Packed lower/upper pairs, with two values per thin instance.
179
+ */
180
+ setThinInstanceFadeBoundsBuffer(mesh, bounds) {
181
+ RegisterThinInstanceMesh();
182
+ const instanceCount = mesh.thinInstanceCount;
183
+ if (bounds.length !== instanceCount * 2) {
184
+ throw new RangeError(`bounds must contain exactly ${instanceCount * 2} values.`);
185
+ }
186
+ for (let index = 0; index < instanceCount; index++) {
187
+ const lowerBound = bounds[index * 2];
188
+ const upperBound = bounds[index * 2 + 1];
189
+ this._validateBound(lowerBound, `bounds[${index * 2}]`);
190
+ this._validateBound(upperBound, `bounds[${index * 2 + 1}]`);
191
+ }
192
+ const attributeData = this._ensureThinInstanceBuffer(mesh);
193
+ for (let index = 0; index < instanceCount; index++) {
194
+ const attributeOffset = index * 4;
195
+ attributeData[attributeOffset] = bounds[index * 2];
196
+ attributeData[attributeOffset + 1] = bounds[index * 2 + 1];
197
+ attributeData[attributeOffset + 2] = 1;
198
+ attributeData[attributeOffset + 3] = this._generation;
199
+ }
200
+ this.commitThinInstanceFadeBounds(mesh);
201
+ }
202
+ /**
203
+ * Uploads thin-instance fade changes after one or more setters used `refresh = false`.
204
+ * @param mesh The source mesh whose fade attribute buffer changed.
205
+ */
206
+ commitThinInstanceFadeBounds(mesh) {
207
+ if (!this._thinInstanceFadeBuffers.has(mesh)) {
208
+ throw new Error("No thin-instance fade buffer has been created for this mesh.");
209
+ }
210
+ mesh.thinInstanceBufferUpdated(this._getInstanceAttributeName());
211
+ }
212
+ /**
213
+ * Removes one thin instance's explicit bounds so it inherits the source mesh's bounds.
214
+ * @param mesh The source mesh containing the thin instance.
215
+ * @param index The thin instance index.
216
+ * @param refresh Whether to immediately upload the updated attribute buffer.
217
+ */
218
+ resetThinInstanceFade(mesh, index, refresh = true) {
219
+ this._validateThinInstanceIndex(mesh, index);
220
+ const buffer = this._ensureThinInstanceBuffer(mesh);
221
+ const offset = index * 4;
222
+ buffer[offset] = 0;
223
+ buffer[offset + 1] = 1;
224
+ buffer[offset + 2] = 0;
225
+ buffer[offset + 3] = this._generation;
226
+ if (refresh) {
227
+ this.commitThinInstanceFadeBounds(mesh);
228
+ }
229
+ }
230
+ /**
231
+ * Removes all explicit mesh bounds while keeping the plugin enabled.
232
+ */
233
+ reset() {
234
+ this._meshBounds = new WeakMap();
235
+ this._generation++;
236
+ }
237
+ /**
238
+ * Copies material-level configuration to another supported material.
239
+ *
240
+ * Per-mesh bounds are intentionally not copied because they belong to the source tile meshes.
241
+ * @param material The destination material, including a material clone.
242
+ * @returns The destination material's dithered tile fade plugin.
243
+ */
244
+ copyToMaterial(material) {
245
+ const plugin = DitheredTileFadeMaterialPlugin.GetOrCreate(material);
246
+ plugin.isEnabled = this._isEnabled;
247
+ return plugin;
248
+ }
249
+ /** @internal */
250
+ isReadyForSubMesh(_defines, _scene, _engine, _subMesh) {
251
+ if (this._shaderIncludeError) {
252
+ throw this._shaderIncludeError;
253
+ }
254
+ return this._shaderIncludeReady;
255
+ }
256
+ /**
257
+ * Uploads the current mesh's bounds for every draw, including shared and frozen materials.
258
+ * @param _uniformBuffer The material uniform buffer.
259
+ * @param _scene The scene being rendered.
260
+ * @param _engine The engine being used.
261
+ * @param subMesh The submesh being bound.
262
+ */
263
+ hardBindForSubMesh(_uniformBuffer, _scene, _engine, subMesh) {
264
+ const effect = subMesh.effect;
265
+ if (!effect) {
266
+ return;
267
+ }
268
+ const mesh = subMesh.getMesh();
269
+ const bounds = this._meshBounds.get(mesh);
270
+ effect.setFloat4("ditheredFadeSettings", bounds?.lowerBound ?? 0, bounds?.upperBound ?? 1, this._isEnabled ? 1 : 0, this._generation);
271
+ }
272
+ /**
273
+ * Registers the per-instance fade attribute when a mesh is rendered as a hardware or thin instance batch.
274
+ * @param attributes The attributes used to compile the material.
275
+ * @param _scene The scene containing the mesh.
276
+ * @param mesh The mesh being compiled.
277
+ */
278
+ getAttributes(attributes, _scene, mesh) {
279
+ const source = mesh instanceof InstancedMesh ? mesh.sourceMesh : mesh;
280
+ if (!(source instanceof Mesh)) {
281
+ return;
282
+ }
283
+ if (source.instances.length > 0) {
284
+ this._ensureInstancedBuffer(source);
285
+ }
286
+ if (source.hasThinInstances) {
287
+ this._ensureThinInstanceBuffer(source);
288
+ }
289
+ if (source.instances.length > 0 || source.hasThinInstances) {
290
+ attributes.push(this._getInstanceAttributeName());
291
+ }
292
+ }
293
+ /**
294
+ * Gets the uniforms used by the plugin.
295
+ * @returns The external uniform names.
296
+ */
297
+ getUniforms() {
298
+ return {
299
+ externalUniforms: ["ditheredFadeSettings"],
300
+ };
301
+ }
302
+ /**
303
+ * Gets the shader code injected by the plugin.
304
+ * @param shaderType The shader stage being customized.
305
+ * @param shaderLanguage The material shader language.
306
+ * @returns Fragment customizations, or null for the vertex stage.
307
+ */
308
+ getCustomCode(shaderType, shaderLanguage = 0 /* ShaderLanguage.GLSL */) {
309
+ if (shaderType !== "fragment") {
310
+ const instanceAttributeName = this._getInstanceAttributeName();
311
+ if (shaderType !== "vertex") {
312
+ return null;
313
+ }
314
+ if (shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
315
+ return {
316
+ CUSTOM_VERTEX_DEFINITIONS: `
317
+ #ifdef INSTANCES
318
+ attribute ${instanceAttributeName}: vec4f;
319
+ #endif
320
+ varying vDitheredTileFade: vec4f;
321
+ `,
322
+ CUSTOM_VERTEX_MAIN_BEGIN: `
323
+ #ifdef INSTANCES
324
+ vertexOutputs.vDitheredTileFade = input.${instanceAttributeName};
325
+ #else
326
+ vertexOutputs.vDitheredTileFade = vec4f(0.0);
327
+ #endif
328
+ `,
329
+ };
330
+ }
331
+ return {
332
+ CUSTOM_VERTEX_DEFINITIONS: `
333
+ #ifdef INSTANCES
334
+ attribute vec4 ${instanceAttributeName};
335
+ #endif
336
+ varying vec4 vDitheredTileFade;
337
+ `,
338
+ CUSTOM_VERTEX_MAIN_BEGIN: `
339
+ #ifdef INSTANCES
340
+ vDitheredTileFade = ${instanceAttributeName};
341
+ #else
342
+ vDitheredTileFade = vec4(0.0);
343
+ #endif
344
+ `,
345
+ };
346
+ }
347
+ if (shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
348
+ return {
349
+ CUSTOM_FRAGMENT_DEFINITIONS: `
350
+ #include<bayerDitherFunctions>
351
+ uniform ditheredFadeSettings: vec4f;
352
+ varying vDitheredTileFade: vec4f;
353
+
354
+ fn shouldDiscardDitheredTileFragment(position: vec2f, materialSettings: vec4f, instanceSettings: vec4f) -> bool {
355
+ var bounds = materialSettings.xy;
356
+ #ifdef INSTANCES
357
+ if (instanceSettings.z > 0.5 && instanceSettings.w == materialSettings.w) {
358
+ bounds = instanceSettings.xy;
359
+ }
360
+ #endif
361
+ let ditheredFadeSample = bayerDither8(floor(position)) / 64.0;
362
+ return materialSettings.z > 0.5 && (ditheredFadeSample < bounds.x || ditheredFadeSample >= bounds.y);
363
+ }
364
+ `,
365
+ CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
366
+ if (shouldDiscardDitheredTileFragment(fragmentInputs.position.xy, uniforms.ditheredFadeSettings, fragmentInputs.vDitheredTileFade)) {
367
+ discard;
368
+ }
369
+ `,
370
+ [DepthPrePassInjectionPoint]: `
371
+ #ifdef DEPTHPREPASS
372
+ if (shouldDiscardDitheredTileFragment(fragmentInputs.position.xy, uniforms.ditheredFadeSettings, fragmentInputs.vDitheredTileFade)) {
373
+ discard;
374
+ }
375
+ #endif
376
+ #include<depthPrePass>
377
+ `,
378
+ };
379
+ }
380
+ return {
381
+ CUSTOM_FRAGMENT_DEFINITIONS: `
382
+ #include<bayerDitherFunctions>
383
+ uniform vec4 ditheredFadeSettings;
384
+ varying vec4 vDitheredTileFade;
385
+
386
+ bool shouldDiscardDitheredTileFragment(vec2 position, vec4 materialSettings, vec4 instanceSettings) {
387
+ vec2 bounds = materialSettings.xy;
388
+ #ifdef INSTANCES
389
+ if (instanceSettings.z > 0.5 && instanceSettings.w == materialSettings.w) {
390
+ bounds = instanceSettings.xy;
391
+ }
392
+ #endif
393
+ float ditheredFadeSample = bayerDither8(floor(position)) / 64.0;
394
+ return materialSettings.z > 0.5 && (ditheredFadeSample < bounds.x || ditheredFadeSample >= bounds.y);
395
+ }
396
+ `,
397
+ CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `
398
+ if (shouldDiscardDitheredTileFragment(gl_FragCoord.xy, ditheredFadeSettings, vDitheredTileFade)) {
399
+ discard;
400
+ }
401
+ `,
402
+ [DepthPrePassInjectionPoint]: `
403
+ #ifdef DEPTHPREPASS
404
+ if (shouldDiscardDitheredTileFragment(gl_FragCoord.xy, ditheredFadeSettings, vDitheredTileFade)) {
405
+ discard;
406
+ }
407
+ #endif
408
+ #include<depthPrePass>
409
+ `,
410
+ };
411
+ }
412
+ /**
413
+ * Gets the class name.
414
+ * @returns The class name.
415
+ */
416
+ getClassName() {
417
+ return "DitheredTileFadeMaterialPlugin";
418
+ }
419
+ /**
420
+ * Releases all weakly held runtime fade state and disables fading.
421
+ *
422
+ * The plugin remains attached to its material and can be reused through {@link GetOrCreate}.
423
+ */
424
+ dispose() {
425
+ this.reset();
426
+ this._isEnabled = false;
427
+ }
428
+ static _ValidateNewPlugin(material) {
429
+ DitheredTileFadeMaterialPlugin._ValidateMaterial(material);
430
+ if (material.pluginManager?.getPlugin(DitheredTileFadeMaterialPlugin.Name)) {
431
+ throw new Error(`The material "${material.name}" already has a plugin named "${DitheredTileFadeMaterialPlugin.Name}". Use GetOrCreate to reuse it.`);
432
+ }
433
+ return true;
434
+ }
435
+ static _ValidateMaterial(material) {
436
+ if (!(material instanceof StandardMaterial) && !(material instanceof PBRBaseMaterial)) {
437
+ throw new TypeError("DitheredTileFadeMaterialPlugin supports only StandardMaterial and PBRBaseMaterial-derived materials.");
438
+ }
439
+ }
440
+ _validateMesh(mesh) {
441
+ if (!(mesh instanceof Mesh) && !(mesh instanceof InstancedMesh)) {
442
+ throw new TypeError("DitheredTileFadeMaterialPlugin supports only Mesh and InstancedMesh objects.");
443
+ }
444
+ }
445
+ _validateThinInstanceIndex(mesh, index) {
446
+ RegisterThinInstanceMesh();
447
+ if (!Number.isInteger(index) || index < 0 || index >= mesh.thinInstanceCount) {
448
+ throw new RangeError(`index must identify one of the mesh's ${mesh.thinInstanceCount} thin instances.`);
449
+ }
450
+ }
451
+ _getInstanceAttributeName() {
452
+ return `ditheredTileFade${this._material.uniqueId}`;
453
+ }
454
+ _ensureInstancedBuffer(source) {
455
+ if (this._instancedBufferSources.has(source)) {
456
+ return;
457
+ }
458
+ RegisterInstancedMesh();
459
+ source.registerInstancedBuffer(this._getInstanceAttributeName(), 4);
460
+ this._instancedBufferSources.add(source);
461
+ }
462
+ _ensureThinInstanceBuffer(source) {
463
+ const requiredLength = source.thinInstanceCount * 4;
464
+ const existingBuffer = this._thinInstanceFadeBuffers.get(source);
465
+ if (existingBuffer && existingBuffer.length >= requiredLength) {
466
+ return existingBuffer;
467
+ }
468
+ RegisterThinInstanceMesh();
469
+ const buffer = new Float32Array(Math.max(requiredLength, 32 * 4));
470
+ if (existingBuffer) {
471
+ buffer.set(existingBuffer);
472
+ }
473
+ source.thinInstanceSetBuffer(this._getInstanceAttributeName(), buffer, 4, false);
474
+ this._thinInstanceFadeBuffers.set(source, buffer);
475
+ return buffer;
476
+ }
477
+ _updateInstancedFadeBounds(mesh, lowerBound, upperBound, configured) {
478
+ const source = mesh instanceof InstancedMesh ? mesh.sourceMesh : mesh;
479
+ if (mesh instanceof InstancedMesh || source.instances.length > 0) {
480
+ this._ensureInstancedBuffer(source);
481
+ const current = mesh.instancedBuffers[this._getInstanceAttributeName()];
482
+ if (current instanceof Vector4) {
483
+ current.set(lowerBound, upperBound, configured ? 1 : 0, this._generation);
484
+ }
485
+ else {
486
+ mesh.instancedBuffers[this._getInstanceAttributeName()] = new Vector4(lowerBound, upperBound, configured ? 1 : 0, this._generation);
487
+ }
488
+ }
489
+ }
490
+ _validateBound(value, name) {
491
+ if (!Number.isFinite(value) || value < 0 || value > 1) {
492
+ throw new RangeError(`${name} must be a finite number in the range [0, 1].`);
493
+ }
494
+ }
495
+ async _loadShaderIncludeAsync(shaderLanguage) {
496
+ try {
497
+ await _LoadShaderIncludeAsync(shaderLanguage);
498
+ this._shaderIncludeReady = true;
499
+ }
500
+ catch (error) {
501
+ this._shaderIncludeError = error;
502
+ }
503
+ }
504
+ }
505
+ /**
506
+ * The name used to register the plugin on a material.
507
+ */
508
+ DitheredTileFadeMaterialPlugin.Name = "DitheredTileFade";
509
+ //# sourceMappingURL=ditheredTileFadeMaterialPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ditheredTileFadeMaterialPlugin.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/ditheredTileFadeMaterialPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA4B3D,IAAI,qBAAgD,CAAC;AACrD,IAAI,qBAAgD,CAAC;AACrD,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAE7D,KAAK,UAAU,2BAA2B;IACtC,MAAM,MAAM,CAAC,gDAAgD,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,2BAA2B;IACtC,MAAM,MAAM,CAAC,oDAAoD,CAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,cAA8B;IACjE,IAAI,cAAc,gCAAwB,EAAE,CAAC;QACzC,qBAAqB,KAArB,qBAAqB,GAAK,2BAA2B,EAAE,EAAC;QACxD,MAAM,qBAAqB,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,qBAAqB,KAArB,qBAAqB,GAAK,2BAA2B,EAAE,EAAC;IACxD,MAAM,qBAAqB,CAAC;AAChC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,8BAA+B,SAAQ,kBAAkB;IAclE;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,YAAmB,QAA2C;QAC1D,KAAK,CAAC,QAAQ,EAAE,8BAA8B,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,8BAA8B,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QA5B3I,gBAAW,GAAG,IAAI,OAAO,EAAyC,CAAC;QACnE,4BAAuB,GAAG,IAAI,OAAO,EAAQ,CAAC;QAC9C,6BAAwB,GAAG,IAAI,OAAO,EAAsB,CAAC;QAC7D,gBAAW,GAAG,CAAC,CAAC;QAChB,eAAU,GAAG,IAAI,CAAC;QAClB,wBAAmB,GAAG,KAAK,CAAC;QAyBhC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,KAAK,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,QAA2C;QACjE,8BAA8B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,QAAQ,YAAY,8BAA8B,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,CAAC,IAAI,+CAA+C,8BAA8B,CAAC,IAAI,IAAI,CAAC,CAAC;YAC1I,CAAC;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACa,YAAY,CAAC,cAA8B;QACvD,OAAO,cAAc,gCAAwB,IAAI,cAAc,gCAAwB,CAAC;IAC5F,CAAC;IAED;;;;;;OAMG;IACI,aAAa,CAAC,IAA0B,EAAE,UAAkB,EAAE,UAAkB;QACnF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;YAC/B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QACnC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,IAA0B,EAAE,UAAkB;QACnE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,IAA0B,EAAE,UAAkB;QACnE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IACtF,CAAC;IAED;;;;;OAKG;IACI,kBAAkB,CAAC,IAA0B,EAAE,MAA+B;QACjF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,cAAc,IAAI,CAAC,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrH,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;QAC5C,OAAO,cAAc,KAAK,SAAS,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,IAA0B;QACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;;OAOG;IACI,yBAAyB,CAAC,IAAU,EAAE,KAAa,EAAE,UAAkB,EAAE,UAAkB,EAAE,OAAO,GAAG,IAAI;QAC9G,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;QAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,+BAA+B,CAAC,IAAU,EAAE,MAAoB;QACnE,wBAAwB,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,UAAU,CAAC,+BAA+B,aAAa,GAAG,CAAC,UAAU,CAAC,CAAC;QACrF,CAAC;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC3D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;YACjD,MAAM,eAAe,GAAG,KAAK,GAAG,CAAC,CAAC;YAClC,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACnD,aAAa,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,aAAa,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACvC,aAAa,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,4BAA4B,CAAC,IAAU;QAC1C,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,IAAU,EAAE,KAAa,EAAE,OAAO,GAAG,IAAI;QAClE,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK;QACR,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACI,cAAc,CAAC,QAA2C;QAC7D,MAAM,MAAM,GAAG,8BAA8B,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,gBAAgB;IACA,iBAAiB,CAAC,QAAyB,EAAE,MAAa,EAAE,OAAuB,EAAE,QAAiB;QAClH,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,mBAAmB,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACa,kBAAkB,CAAC,cAA6B,EAAE,MAAa,EAAE,OAAuB,EAAE,OAAgB;QACtH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,sBAAsB,EAAE,MAAM,EAAE,UAAU,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1I,CAAC;IAED;;;;;OAKG;IACa,aAAa,CAAC,UAAoB,EAAE,MAAa,EAAE,IAAkB;QACjF,MAAM,MAAM,GAAG,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,IAAI,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACzD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED;;;OAGG;IACa,WAAW;QACvB,OAAO;YACH,gBAAgB,EAAE,CAAC,sBAAsB,CAAC;SAC7C,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACa,aAAa,CAAC,UAAkB,EAAE,cAAc,8BAAsB;QAClF,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC/D,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,cAAc,gCAAwB,EAAE,CAAC;gBACzC,OAAO;oBACH,yBAAyB,EAAE;;YAEnC,qBAAqB;;;CAGhC;oBACmB,wBAAwB,EAAE;;0CAEJ,qBAAqB;;;;CAI9D;iBACgB,CAAC;YACN,CAAC;YAED,OAAO;gBACH,yBAAyB,EAAE;;iBAE1B,qBAAqB;;;CAGrC;gBACe,wBAAwB,EAAE;;sBAEpB,qBAAqB;;;;CAI1C;aACY,CAAC;QACN,CAAC;QAED,IAAI,cAAc,gCAAwB,EAAE,CAAC;YACzC,OAAO;gBACH,2BAA2B,EAAE;;;;;;;;;;;;;;;CAe5C;gBACe,gCAAgC,EAAE;;;;CAIjD;gBACe,CAAC,0BAA0B,CAAC,EAAE;;;;;;;CAO7C;aACY,CAAC;QACN,CAAC;QAED,OAAO;YACH,2BAA2B,EAAE;;;;;;;;;;;;;;;CAexC;YACW,gCAAgC,EAAE;;;;CAI7C;YACW,CAAC,0BAA0B,CAAC,EAAE;;;;;;;CAOzC;SACQ,CAAC;IACN,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,gCAAgC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACa,OAAO;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,QAA2C;QACzE,8BAA8B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,CAAC,IAAI,iCAAiC,8BAA8B,CAAC,IAAI,iCAAiC,CAAC,CAAC;QACzJ,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,QAA2C;QACxE,IAAI,CAAC,CAAC,QAAQ,YAAY,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,YAAY,eAAe,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,SAAS,CAAC,sGAAsG,CAAC,CAAC;QAChI,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,IAAkB;QACpC,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,aAAa,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,SAAS,CAAC,8EAA8E,CAAC,CAAC;QACxG,CAAC;IACL,CAAC;IAEO,0BAA0B,CAAC,IAAU,EAAE,KAAa;QACxD,wBAAwB,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3E,MAAM,IAAI,UAAU,CAAC,yCAAyC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,CAAC;QAC5G,CAAC;IACL,CAAC;IAEO,yBAAyB;QAC7B,OAAO,mBAAmB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC;IAEO,sBAAsB,CAAC,MAAY;QACvC,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,qBAAqB,EAAE,CAAC;QACxB,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEO,yBAAyB,CAAC,MAAY;QAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YAC5D,OAAO,cAAc,CAAC;QAC1B,CAAC;QAED,wBAAwB,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACjF,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,0BAA0B,CAAC,IAA0B,EAAE,UAAkB,EAAE,UAAkB,EAAE,UAAmB;QACtH,MAAM,MAAM,GAAG,IAAI,YAAY,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,IAAI,IAAI,YAAY,aAAa,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;YACxE,IAAI,OAAO,YAAY,OAAO,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9E,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACxI,CAAC;QACL,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,IAAY;QAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,+CAA+C,CAAC,CAAC;QACjF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,cAA8B;QAChE,IAAI,CAAC;YACD,MAAM,uBAAuB,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;IACL,CAAC;;AAngBD;;GAEG;AACoB,mCAAI,GAAG,kBAAkB,AAArB,CAAsB","sourcesContent":["import { type AbstractEngine } from \"../Engines/abstractEngine.pure\";\r\nimport { type AbstractMesh } from \"../Meshes/abstractMesh.pure\";\r\nimport { InstancedMesh, RegisterInstancedMesh } from \"../Meshes/instancedMesh.pure\";\r\nimport { Mesh } from \"../Meshes/mesh.pure\";\r\nimport { type SubMesh } from \"../Meshes/subMesh.pure\";\r\nimport { RegisterThinInstanceMesh } from \"../Meshes/thinInstanceMesh.pure\";\r\nimport { type Scene } from \"../scene.pure\";\r\nimport { type Nullable } from \"../types\";\r\nimport { Vector4 } from \"../Maths/math.vector.pure\";\r\nimport { MaterialPluginBase } from \"./materialPluginBase.pure\";\r\nimport { type MaterialDefines } from \"./materialDefines\";\r\nimport { PBRBaseMaterial } from \"./PBR/pbrBaseMaterial.pure\";\r\nimport { ShaderLanguage } from \"./shaderLanguage\";\r\nimport { StandardMaterial } from \"./standardMaterial.pure\";\r\nimport { type UniformBuffer } from \"./uniformBuffer\";\r\n\r\n/**\r\n * The material families supported by {@link DitheredTileFadeMaterialPlugin}.\r\n */\r\nexport type DitheredTileFadeSupportedMaterial = StandardMaterial | PBRBaseMaterial;\r\n\r\n/**\r\n * The mesh types that can store independent dithered tile fade bounds.\r\n */\r\nexport type DitheredTileFadeMesh = Mesh | InstancedMesh;\r\n\r\n/**\r\n * Defines a normalized interval in the 8x8 Bayer threshold domain.\r\n */\r\nexport interface IDitheredTileFadeBounds {\r\n /**\r\n * The inclusive lower bound.\r\n */\r\n lowerBound: number;\r\n\r\n /**\r\n * The exclusive upper bound.\r\n */\r\n upperBound: number;\r\n}\r\n\r\nlet GlslShaderLoadPromise: Promise<void> | undefined;\r\nlet WgslShaderLoadPromise: Promise<void> | undefined;\r\nconst DepthPrePassInjectionPoint = \"!#include<depthPrePass>\";\r\n\r\nasync function _LoadGlslShaderIncludeAsync(): Promise<void> {\r\n await import(\"../Shaders/ShadersInclude/bayerDitherFunctions\");\r\n}\r\n\r\nasync function _LoadWgslShaderIncludeAsync(): Promise<void> {\r\n await import(\"../ShadersWGSL/ShadersInclude/bayerDitherFunctions\");\r\n}\r\n\r\nasync function _LoadShaderIncludeAsync(shaderLanguage: ShaderLanguage): Promise<void> {\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n WgslShaderLoadPromise ??= _LoadWgslShaderIncludeAsync();\r\n await WgslShaderLoadPromise;\r\n return;\r\n }\r\n\r\n GlslShaderLoadPromise ??= _LoadGlslShaderIncludeAsync();\r\n await GlslShaderLoadPromise;\r\n}\r\n\r\n/**\r\n * Applies an opaque, screen-space dithered fade for tile LOD meshes that share a Standard or PBR material.\r\n *\r\n * The plugin keeps depth writing and the material's alpha mode unchanged. It affects the material color and integrated\r\n * prepass outputs, but not standalone depth, shadow, picking, outline, or custom passes. Tile renderers using those passes\r\n * must provide equivalent pass-specific coverage or exclude fading tiles from them.\r\n *\r\n * Per-mesh bounds are runtime state. Material cloning and serialization do not copy them; use {@link copyToMaterial} to\r\n * copy the enabled state to a cloned material and then configure bounds for the cloned tile meshes.\r\n * @see https://playground.babylonjs.com/#HI17VI#0\r\n */\r\nexport class DitheredTileFadeMaterialPlugin extends MaterialPluginBase {\r\n /**\r\n * The name used to register the plugin on a material.\r\n */\r\n public static readonly Name = \"DitheredTileFade\";\r\n\r\n private _meshBounds = new WeakMap<AbstractMesh, IDitheredTileFadeBounds>();\r\n private _instancedBufferSources = new WeakSet<Mesh>();\r\n private _thinInstanceFadeBuffers = new WeakMap<Mesh, Float32Array>();\r\n private _generation = 1;\r\n private _isEnabled = true;\r\n private _shaderIncludeReady = false;\r\n private _shaderIncludeError: unknown;\r\n\r\n /**\r\n * Gets whether configured fades are applied. Disabling the plugin makes every mesh fully visible without discarding its stored bounds.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Sets whether configured fades are applied. This uniform-only change does not recompile the material.\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n }\r\n\r\n /**\r\n * Creates and attaches a dithered fade plugin.\r\n * @param material The Standard or PBR material that the plugin will extend.\r\n * @throws If the material is unsupported or already has a dithered tile fade plugin. Use {@link GetOrCreate} when reuse is intended.\r\n */\r\n public constructor(material: DitheredTileFadeSupportedMaterial) {\r\n super(material, DitheredTileFadeMaterialPlugin.Name, 190, undefined, DitheredTileFadeMaterialPlugin._ValidateNewPlugin(material), false, true);\r\n\r\n this.registerForExtraEvents = true;\r\n this.doNotSerialize = true;\r\n void this._loadShaderIncludeAsync(material.shaderLanguage);\r\n this._enable(true);\r\n }\r\n\r\n /**\r\n * Gets the plugin already attached to a material, or creates and attaches one.\r\n * @param material The Standard or PBR material to extend.\r\n * @returns The material's dithered fade plugin.\r\n * @throws If the material is unsupported or another plugin uses the reserved plugin name.\r\n */\r\n public static GetOrCreate(material: DitheredTileFadeSupportedMaterial): DitheredTileFadeMaterialPlugin {\r\n DitheredTileFadeMaterialPlugin._ValidateMaterial(material);\r\n const existing = material.pluginManager?.getPlugin(DitheredTileFadeMaterialPlugin.Name);\r\n if (existing) {\r\n if (!(existing instanceof DitheredTileFadeMaterialPlugin)) {\r\n throw new Error(`The material \"${material.name}\" already has an incompatible plugin named \"${DitheredTileFadeMaterialPlugin.Name}\".`);\r\n }\r\n return existing;\r\n }\r\n return new DitheredTileFadeMaterialPlugin(material);\r\n }\r\n\r\n /**\r\n * Checks whether the plugin supports a shader language.\r\n * @param shaderLanguage The shader language to check.\r\n * @returns True for GLSL and WGSL.\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n return shaderLanguage === ShaderLanguage.GLSL || shaderLanguage === ShaderLanguage.WGSL;\r\n }\r\n\r\n /**\r\n * Sets both normalized Bayer interval bounds for a mesh.\r\n * @param mesh The tile mesh or hardware instance whose draw calls use the bounds.\r\n * @param lowerBound The inclusive lower bound in the range [0, 1].\r\n * @param upperBound The exclusive upper bound in the range [0, 1].\r\n * @remarks Bounds are independent. A lower bound greater than or equal to the upper bound intentionally produces an empty interval.\r\n */\r\n public setFadeBounds(mesh: DitheredTileFadeMesh, lowerBound: number, upperBound: number): void {\r\n this._validateMesh(mesh);\r\n this._validateBound(lowerBound, \"lowerBound\");\r\n this._validateBound(upperBound, \"upperBound\");\r\n\r\n const bounds = this._meshBounds.get(mesh);\r\n if (bounds) {\r\n bounds.lowerBound = lowerBound;\r\n bounds.upperBound = upperBound;\r\n } else {\r\n this._meshBounds.set(mesh, { lowerBound, upperBound });\r\n }\r\n\r\n this._updateInstancedFadeBounds(mesh, lowerBound, upperBound, true);\r\n }\r\n\r\n /**\r\n * Sets the normalized inclusive lower Bayer interval bound for a mesh.\r\n * @param mesh The tile mesh or hardware instance whose draw calls use the bound.\r\n * @param lowerBound The inclusive lower bound in the range [0, 1].\r\n */\r\n public setFadeLowerBound(mesh: DitheredTileFadeMesh, lowerBound: number): void {\r\n this.setFadeBounds(mesh, lowerBound, this._meshBounds.get(mesh)?.upperBound ?? 1);\r\n }\r\n\r\n /**\r\n * Sets the normalized exclusive upper Bayer interval bound for a mesh.\r\n * @param mesh The tile mesh or hardware instance whose draw calls use the bound.\r\n * @param upperBound The exclusive upper bound in the range [0, 1].\r\n */\r\n public setFadeUpperBound(mesh: DitheredTileFadeMesh, upperBound: number): void {\r\n this.setFadeBounds(mesh, this._meshBounds.get(mesh)?.lowerBound ?? 0, upperBound);\r\n }\r\n\r\n /**\r\n * Copies a mesh's current bounds without allocating.\r\n * @param mesh The mesh whose bounds are queried.\r\n * @param result The object that receives the bounds.\r\n * @returns True when the mesh has explicit bounds. Otherwise false is returned with the source mesh's bounds for a hardware instance, or [0, 1].\r\n */\r\n public getFadeBoundsToRef(mesh: DitheredTileFadeMesh, result: IDitheredTileFadeBounds): boolean {\r\n this._validateMesh(mesh);\r\n const explicitBounds = this._meshBounds.get(mesh);\r\n const bounds = explicitBounds ?? (mesh instanceof InstancedMesh ? this._meshBounds.get(mesh.sourceMesh) : undefined);\r\n result.lowerBound = bounds?.lowerBound ?? 0;\r\n result.upperBound = bounds?.upperBound ?? 1;\r\n return explicitBounds !== undefined;\r\n }\r\n\r\n /**\r\n * Removes a mesh's explicit bounds. A hardware instance inherits its source mesh's bounds; a source mesh uses [0, 1].\r\n * @param mesh The mesh to reset.\r\n */\r\n public resetFade(mesh: DitheredTileFadeMesh): void {\r\n this._validateMesh(mesh);\r\n this._meshBounds.delete(mesh);\r\n this._updateInstancedFadeBounds(mesh, 0, 1, false);\r\n }\r\n\r\n /**\r\n * Sets normalized Bayer interval bounds for one thin instance.\r\n * @param mesh The source mesh containing the thin instance.\r\n * @param index The thin instance index.\r\n * @param lowerBound The inclusive lower bound in the range [0, 1].\r\n * @param upperBound The exclusive upper bound in the range [0, 1].\r\n * @param refresh Whether to immediately upload the updated attribute buffer.\r\n */\r\n public setThinInstanceFadeBounds(mesh: Mesh, index: number, lowerBound: number, upperBound: number, refresh = true): void {\r\n this._validateBound(lowerBound, \"lowerBound\");\r\n this._validateBound(upperBound, \"upperBound\");\r\n this._validateThinInstanceIndex(mesh, index);\r\n const buffer = this._ensureThinInstanceBuffer(mesh);\r\n const offset = index * 4;\r\n buffer[offset] = lowerBound;\r\n buffer[offset + 1] = upperBound;\r\n buffer[offset + 2] = 1;\r\n buffer[offset + 3] = this._generation;\r\n if (refresh) {\r\n this.commitThinInstanceFadeBounds(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Sets normalized Bayer interval bounds for all thin instances from packed lower/upper pairs.\r\n * @param mesh The source mesh containing the thin instances.\r\n * @param bounds Packed lower/upper pairs, with two values per thin instance.\r\n */\r\n public setThinInstanceFadeBoundsBuffer(mesh: Mesh, bounds: Float32Array): void {\r\n RegisterThinInstanceMesh();\r\n const instanceCount = mesh.thinInstanceCount;\r\n if (bounds.length !== instanceCount * 2) {\r\n throw new RangeError(`bounds must contain exactly ${instanceCount * 2} values.`);\r\n }\r\n\r\n for (let index = 0; index < instanceCount; index++) {\r\n const lowerBound = bounds[index * 2];\r\n const upperBound = bounds[index * 2 + 1];\r\n this._validateBound(lowerBound, `bounds[${index * 2}]`);\r\n this._validateBound(upperBound, `bounds[${index * 2 + 1}]`);\r\n }\r\n\r\n const attributeData = this._ensureThinInstanceBuffer(mesh);\r\n for (let index = 0; index < instanceCount; index++) {\r\n const attributeOffset = index * 4;\r\n attributeData[attributeOffset] = bounds[index * 2];\r\n attributeData[attributeOffset + 1] = bounds[index * 2 + 1];\r\n attributeData[attributeOffset + 2] = 1;\r\n attributeData[attributeOffset + 3] = this._generation;\r\n }\r\n\r\n this.commitThinInstanceFadeBounds(mesh);\r\n }\r\n\r\n /**\r\n * Uploads thin-instance fade changes after one or more setters used `refresh = false`.\r\n * @param mesh The source mesh whose fade attribute buffer changed.\r\n */\r\n public commitThinInstanceFadeBounds(mesh: Mesh): void {\r\n if (!this._thinInstanceFadeBuffers.has(mesh)) {\r\n throw new Error(\"No thin-instance fade buffer has been created for this mesh.\");\r\n }\r\n mesh.thinInstanceBufferUpdated(this._getInstanceAttributeName());\r\n }\r\n\r\n /**\r\n * Removes one thin instance's explicit bounds so it inherits the source mesh's bounds.\r\n * @param mesh The source mesh containing the thin instance.\r\n * @param index The thin instance index.\r\n * @param refresh Whether to immediately upload the updated attribute buffer.\r\n */\r\n public resetThinInstanceFade(mesh: Mesh, index: number, refresh = true): void {\r\n this._validateThinInstanceIndex(mesh, index);\r\n const buffer = this._ensureThinInstanceBuffer(mesh);\r\n const offset = index * 4;\r\n buffer[offset] = 0;\r\n buffer[offset + 1] = 1;\r\n buffer[offset + 2] = 0;\r\n buffer[offset + 3] = this._generation;\r\n if (refresh) {\r\n this.commitThinInstanceFadeBounds(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all explicit mesh bounds while keeping the plugin enabled.\r\n */\r\n public reset(): void {\r\n this._meshBounds = new WeakMap();\r\n this._generation++;\r\n }\r\n\r\n /**\r\n * Copies material-level configuration to another supported material.\r\n *\r\n * Per-mesh bounds are intentionally not copied because they belong to the source tile meshes.\r\n * @param material The destination material, including a material clone.\r\n * @returns The destination material's dithered tile fade plugin.\r\n */\r\n public copyToMaterial(material: DitheredTileFadeSupportedMaterial): DitheredTileFadeMaterialPlugin {\r\n const plugin = DitheredTileFadeMaterialPlugin.GetOrCreate(material);\r\n plugin.isEnabled = this._isEnabled;\r\n return plugin;\r\n }\r\n\r\n /** @internal */\r\n public override isReadyForSubMesh(_defines: MaterialDefines, _scene: Scene, _engine: AbstractEngine, _subMesh: SubMesh): boolean {\r\n if (this._shaderIncludeError) {\r\n throw this._shaderIncludeError;\r\n }\r\n return this._shaderIncludeReady;\r\n }\r\n\r\n /**\r\n * Uploads the current mesh's bounds for every draw, including shared and frozen materials.\r\n * @param _uniformBuffer The material uniform buffer.\r\n * @param _scene The scene being rendered.\r\n * @param _engine The engine being used.\r\n * @param subMesh The submesh being bound.\r\n */\r\n public override hardBindForSubMesh(_uniformBuffer: UniformBuffer, _scene: Scene, _engine: AbstractEngine, subMesh: SubMesh): void {\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n const mesh = subMesh.getMesh();\r\n const bounds = this._meshBounds.get(mesh);\r\n effect.setFloat4(\"ditheredFadeSettings\", bounds?.lowerBound ?? 0, bounds?.upperBound ?? 1, this._isEnabled ? 1 : 0, this._generation);\r\n }\r\n\r\n /**\r\n * Registers the per-instance fade attribute when a mesh is rendered as a hardware or thin instance batch.\r\n * @param attributes The attributes used to compile the material.\r\n * @param _scene The scene containing the mesh.\r\n * @param mesh The mesh being compiled.\r\n */\r\n public override getAttributes(attributes: string[], _scene: Scene, mesh: AbstractMesh): void {\r\n const source = mesh instanceof InstancedMesh ? mesh.sourceMesh : mesh;\r\n if (!(source instanceof Mesh)) {\r\n return;\r\n }\r\n\r\n if (source.instances.length > 0) {\r\n this._ensureInstancedBuffer(source);\r\n }\r\n if (source.hasThinInstances) {\r\n this._ensureThinInstanceBuffer(source);\r\n }\r\n if (source.instances.length > 0 || source.hasThinInstances) {\r\n attributes.push(this._getInstanceAttributeName());\r\n }\r\n }\r\n\r\n /**\r\n * Gets the uniforms used by the plugin.\r\n * @returns The external uniform names.\r\n */\r\n public override getUniforms(): { externalUniforms: string[] } {\r\n return {\r\n externalUniforms: [\"ditheredFadeSettings\"],\r\n };\r\n }\r\n\r\n /**\r\n * Gets the shader code injected by the plugin.\r\n * @param shaderType The shader stage being customized.\r\n * @param shaderLanguage The material shader language.\r\n * @returns Fragment customizations, or null for the vertex stage.\r\n */\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (shaderType !== \"fragment\") {\r\n const instanceAttributeName = this._getInstanceAttributeName();\r\n if (shaderType !== \"vertex\") {\r\n return null;\r\n }\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n#ifdef INSTANCES\r\nattribute ${instanceAttributeName}: vec4f;\r\n#endif\r\nvarying vDitheredTileFade: vec4f;\r\n`,\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n#ifdef INSTANCES\r\nvertexOutputs.vDitheredTileFade = input.${instanceAttributeName};\r\n#else\r\nvertexOutputs.vDitheredTileFade = vec4f(0.0);\r\n#endif\r\n`,\r\n };\r\n }\r\n\r\n return {\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n#ifdef INSTANCES\r\nattribute vec4 ${instanceAttributeName};\r\n#endif\r\nvarying vec4 vDitheredTileFade;\r\n`,\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n#ifdef INSTANCES\r\nvDitheredTileFade = ${instanceAttributeName};\r\n#else\r\nvDitheredTileFade = vec4(0.0);\r\n#endif\r\n`,\r\n };\r\n }\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n#include<bayerDitherFunctions>\r\nuniform ditheredFadeSettings: vec4f;\r\nvarying vDitheredTileFade: vec4f;\r\n\r\nfn shouldDiscardDitheredTileFragment(position: vec2f, materialSettings: vec4f, instanceSettings: vec4f) -> bool {\r\n var bounds = materialSettings.xy;\r\n#ifdef INSTANCES\r\n if (instanceSettings.z > 0.5 && instanceSettings.w == materialSettings.w) {\r\n bounds = instanceSettings.xy;\r\n }\r\n#endif\r\n let ditheredFadeSample = bayerDither8(floor(position)) / 64.0;\r\n return materialSettings.z > 0.5 && (ditheredFadeSample < bounds.x || ditheredFadeSample >= bounds.y);\r\n}\r\n`,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nif (shouldDiscardDitheredTileFragment(fragmentInputs.position.xy, uniforms.ditheredFadeSettings, fragmentInputs.vDitheredTileFade)) {\r\n discard;\r\n}\r\n`,\r\n [DepthPrePassInjectionPoint]: `\r\n#ifdef DEPTHPREPASS\r\nif (shouldDiscardDitheredTileFragment(fragmentInputs.position.xy, uniforms.ditheredFadeSettings, fragmentInputs.vDitheredTileFade)) {\r\n discard;\r\n}\r\n#endif\r\n#include<depthPrePass>\r\n`,\r\n };\r\n }\r\n\r\n return {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n#include<bayerDitherFunctions>\r\nuniform vec4 ditheredFadeSettings;\r\nvarying vec4 vDitheredTileFade;\r\n\r\nbool shouldDiscardDitheredTileFragment(vec2 position, vec4 materialSettings, vec4 instanceSettings) {\r\n vec2 bounds = materialSettings.xy;\r\n#ifdef INSTANCES\r\n if (instanceSettings.z > 0.5 && instanceSettings.w == materialSettings.w) {\r\n bounds = instanceSettings.xy;\r\n }\r\n#endif\r\n float ditheredFadeSample = bayerDither8(floor(position)) / 64.0;\r\n return materialSettings.z > 0.5 && (ditheredFadeSample < bounds.x || ditheredFadeSample >= bounds.y);\r\n}\r\n`,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\nif (shouldDiscardDitheredTileFragment(gl_FragCoord.xy, ditheredFadeSettings, vDitheredTileFade)) {\r\n discard;\r\n}\r\n`,\r\n [DepthPrePassInjectionPoint]: `\r\n#ifdef DEPTHPREPASS\r\nif (shouldDiscardDitheredTileFragment(gl_FragCoord.xy, ditheredFadeSettings, vDitheredTileFade)) {\r\n discard;\r\n}\r\n#endif\r\n#include<depthPrePass>\r\n`,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the class name.\r\n * @returns The class name.\r\n */\r\n public override getClassName(): string {\r\n return \"DitheredTileFadeMaterialPlugin\";\r\n }\r\n\r\n /**\r\n * Releases all weakly held runtime fade state and disables fading.\r\n *\r\n * The plugin remains attached to its material and can be reused through {@link GetOrCreate}.\r\n */\r\n public override dispose(): void {\r\n this.reset();\r\n this._isEnabled = false;\r\n }\r\n\r\n private static _ValidateNewPlugin(material: DitheredTileFadeSupportedMaterial): true {\r\n DitheredTileFadeMaterialPlugin._ValidateMaterial(material);\r\n if (material.pluginManager?.getPlugin(DitheredTileFadeMaterialPlugin.Name)) {\r\n throw new Error(`The material \"${material.name}\" already has a plugin named \"${DitheredTileFadeMaterialPlugin.Name}\". Use GetOrCreate to reuse it.`);\r\n }\r\n return true;\r\n }\r\n\r\n private static _ValidateMaterial(material: DitheredTileFadeSupportedMaterial): void {\r\n if (!(material instanceof StandardMaterial) && !(material instanceof PBRBaseMaterial)) {\r\n throw new TypeError(\"DitheredTileFadeMaterialPlugin supports only StandardMaterial and PBRBaseMaterial-derived materials.\");\r\n }\r\n }\r\n\r\n private _validateMesh(mesh: AbstractMesh): asserts mesh is DitheredTileFadeMesh {\r\n if (!(mesh instanceof Mesh) && !(mesh instanceof InstancedMesh)) {\r\n throw new TypeError(\"DitheredTileFadeMaterialPlugin supports only Mesh and InstancedMesh objects.\");\r\n }\r\n }\r\n\r\n private _validateThinInstanceIndex(mesh: Mesh, index: number): void {\r\n RegisterThinInstanceMesh();\r\n if (!Number.isInteger(index) || index < 0 || index >= mesh.thinInstanceCount) {\r\n throw new RangeError(`index must identify one of the mesh's ${mesh.thinInstanceCount} thin instances.`);\r\n }\r\n }\r\n\r\n private _getInstanceAttributeName(): string {\r\n return `ditheredTileFade${this._material.uniqueId}`;\r\n }\r\n\r\n private _ensureInstancedBuffer(source: Mesh): void {\r\n if (this._instancedBufferSources.has(source)) {\r\n return;\r\n }\r\n\r\n RegisterInstancedMesh();\r\n source.registerInstancedBuffer(this._getInstanceAttributeName(), 4);\r\n this._instancedBufferSources.add(source);\r\n }\r\n\r\n private _ensureThinInstanceBuffer(source: Mesh): Float32Array {\r\n const requiredLength = source.thinInstanceCount * 4;\r\n const existingBuffer = this._thinInstanceFadeBuffers.get(source);\r\n if (existingBuffer && existingBuffer.length >= requiredLength) {\r\n return existingBuffer;\r\n }\r\n\r\n RegisterThinInstanceMesh();\r\n const buffer = new Float32Array(Math.max(requiredLength, 32 * 4));\r\n if (existingBuffer) {\r\n buffer.set(existingBuffer);\r\n }\r\n source.thinInstanceSetBuffer(this._getInstanceAttributeName(), buffer, 4, false);\r\n this._thinInstanceFadeBuffers.set(source, buffer);\r\n return buffer;\r\n }\r\n\r\n private _updateInstancedFadeBounds(mesh: DitheredTileFadeMesh, lowerBound: number, upperBound: number, configured: boolean): void {\r\n const source = mesh instanceof InstancedMesh ? mesh.sourceMesh : mesh;\r\n if (mesh instanceof InstancedMesh || source.instances.length > 0) {\r\n this._ensureInstancedBuffer(source);\r\n const current = mesh.instancedBuffers[this._getInstanceAttributeName()];\r\n if (current instanceof Vector4) {\r\n current.set(lowerBound, upperBound, configured ? 1 : 0, this._generation);\r\n } else {\r\n mesh.instancedBuffers[this._getInstanceAttributeName()] = new Vector4(lowerBound, upperBound, configured ? 1 : 0, this._generation);\r\n }\r\n }\r\n }\r\n\r\n private _validateBound(value: number, name: string): void {\r\n if (!Number.isFinite(value) || value < 0 || value > 1) {\r\n throw new RangeError(`${name} must be a finite number in the range [0, 1].`);\r\n }\r\n }\r\n\r\n private async _loadShaderIncludeAsync(shaderLanguage: ShaderLanguage): Promise<void> {\r\n try {\r\n await _LoadShaderIncludeAsync(shaderLanguage);\r\n this._shaderIncludeReady = true;\r\n } catch (error) {\r\n this._shaderIncludeError = error;\r\n }\r\n }\r\n}\r\n"]}
@@ -28,6 +28,7 @@ export * from "./drawWrapper.js";
28
28
  export * from "./materialPluginBase.js";
29
29
  export * from "./materialPluginManager.js";
30
30
  export * from "./materialPluginEvent.js";
31
+ export * from "./ditheredTileFadeMaterialPlugin.js";
31
32
  export * from "./material.detailMapConfiguration.js";
32
33
  export * from "./material.decalMapConfiguration.js";
33
34
  export * from "./materialPluginFactoryExport.js";
@@ -29,6 +29,7 @@ export * from "./drawWrapper.js";
29
29
  export * from "./materialPluginBase.js";
30
30
  export * from "./materialPluginManager.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.js";
34
35
  export * from "./materialPluginFactoryExport.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./Background/index\";\r\nexport * from \"./colorCurves\";\r\nexport * from \"./iEffectFallbacks\";\r\nexport * from \"./effectFallbacks\";\r\nexport * from \"./effect\";\r\nexport * from \"./fresnelParameters\";\r\nexport * from \"./imageProcessing\";\r\nexport * from \"./imageProcessingConfiguration\";\r\nexport * from \"./material\";\r\nexport * from \"./materialDefines\";\r\nexport * from \"./clipPlaneMaterialHelper\";\r\nexport * from \"./materialHelper\";\r\nexport * from \"./multiMaterial\";\r\nexport * from \"./Occlusion/index\";\r\nexport * from \"./PBR/index\";\r\nexport * from \"./pushMaterial\";\r\nexport * from \"./shaderLanguage\";\r\nexport * from \"./shaderMaterial\";\r\nexport * from \"./standardMaterial\";\r\nexport * from \"./Textures/index\";\r\nexport * from \"./uniformBuffer\";\r\nexport * from \"./materialFlags\";\r\nexport * from \"./Node/index\";\r\nexport * from \"./effectRenderer\";\r\nexport * from \"./shadowDepthWrapper\";\r\nexport * from \"./drawWrapper.functions\";\r\nexport * from \"./drawWrapper\";\r\nexport * from \"./materialPluginBase\";\r\nexport * from \"./materialPluginManager\";\r\nexport * from \"./materialPluginEvent\";\r\nexport * from \"./material.detailMapConfiguration\";\r\nexport * from \"./material.decalMapConfiguration\";\r\nexport * from \"./materialPluginFactoryExport\";\r\nexport * from \"./GreasedLine/greasedLinePluginMaterial\";\r\nexport * from \"./GreasedLine/greasedLineSimpleMaterial\";\r\nexport * from \"./GreasedLine/greasedLineMaterialInterfaces\";\r\nexport * from \"./GreasedLine/greasedLineMaterialDefaults\";\r\nexport * from \"./meshDebugPluginMaterial\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingMaterial\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingDebugMaterialPlugin\";\r\nexport * from \"./materialHelper.functions\";\r\nexport * from \"./materialHelper.geometryrendering\";\r\nexport * from \"./materialStencilState\";\r\nexport * from \"./uv.defines\";\r\nexport * from \"./floatingOriginMatrixOverrides\";\r\nexport * from \"./vertexPullingHelper.functions\";\r\n\r\n// async-loaded shaders\r\n\r\n// StandardMaterial\r\nexport * from \"../Shaders/default.fragment\";\r\nexport * from \"../Shaders/default.vertex\";\r\nexport * from \"../ShadersWGSL/default.fragment\";\r\nexport * from \"../ShadersWGSL/default.vertex\";\r\n\r\n// GreasedLineSimplMaterial\r\nexport * from \"../Shaders/greasedLine.fragment\";\r\nexport * from \"../Shaders/greasedLine.vertex\";\r\nexport * from \"../ShadersWGSL/greasedLine.fragment\";\r\nexport * from \"../ShadersWGSL/greasedLine.vertex\";\r\n\r\n// Shared shader includes used by external material packages in UMD builds\r\nexport * from \"../Shaders/ShadersInclude/bakedVertexAnimation\";\r\nexport * from \"../Shaders/ShadersInclude/bakedVertexAnimationDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/depthPrePass\";\r\nexport * from \"../Shaders/ShadersInclude/fogFragment\";\r\nexport * from \"../Shaders/ShadersInclude/fogVertex\";\r\nexport * from \"../Shaders/ShadersInclude/fogVertexDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/imageProcessingCompatibility\";\r\nexport * from \"../Shaders/ShadersInclude/instancesDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/instancesVertex\";\r\nexport * from \"../Shaders/ShadersInclude/logDepthFragment\";\r\nexport * from \"../Shaders/ShadersInclude/logDepthVertex\";\r\nexport * from \"../Shaders/ShadersInclude/sceneFragmentDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/sceneUboDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/sceneVertexDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/vertexColorMixing\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/bakedVertexAnimation\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/depthPrePass\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/fogFragment\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/fogVertex\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/fogVertexDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/imageProcessingCompatibility\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/instancesDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/instancesVertex\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/logDepthFragment\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/logDepthVertex\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/sceneUboDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/vertexColorMixing\";\r\n\r\nimport \"./material.decalMap\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./Background/index\";\r\nexport * from \"./colorCurves\";\r\nexport * from \"./iEffectFallbacks\";\r\nexport * from \"./effectFallbacks\";\r\nexport * from \"./effect\";\r\nexport * from \"./fresnelParameters\";\r\nexport * from \"./imageProcessing\";\r\nexport * from \"./imageProcessingConfiguration\";\r\nexport * from \"./material\";\r\nexport * from \"./materialDefines\";\r\nexport * from \"./clipPlaneMaterialHelper\";\r\nexport * from \"./materialHelper\";\r\nexport * from \"./multiMaterial\";\r\nexport * from \"./Occlusion/index\";\r\nexport * from \"./PBR/index\";\r\nexport * from \"./pushMaterial\";\r\nexport * from \"./shaderLanguage\";\r\nexport * from \"./shaderMaterial\";\r\nexport * from \"./standardMaterial\";\r\nexport * from \"./Textures/index\";\r\nexport * from \"./uniformBuffer\";\r\nexport * from \"./materialFlags\";\r\nexport * from \"./Node/index\";\r\nexport * from \"./effectRenderer\";\r\nexport * from \"./shadowDepthWrapper\";\r\nexport * from \"./drawWrapper.functions\";\r\nexport * from \"./drawWrapper\";\r\nexport * from \"./materialPluginBase\";\r\nexport * from \"./materialPluginManager\";\r\nexport * from \"./materialPluginEvent\";\r\nexport * from \"./ditheredTileFadeMaterialPlugin\";\r\nexport * from \"./material.detailMapConfiguration\";\r\nexport * from \"./material.decalMapConfiguration\";\r\nexport * from \"./materialPluginFactoryExport\";\r\nexport * from \"./GreasedLine/greasedLinePluginMaterial\";\r\nexport * from \"./GreasedLine/greasedLineSimpleMaterial\";\r\nexport * from \"./GreasedLine/greasedLineMaterialInterfaces\";\r\nexport * from \"./GreasedLine/greasedLineMaterialDefaults\";\r\nexport * from \"./meshDebugPluginMaterial\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingMaterial\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin\";\r\nexport * from \"./GaussianSplatting/gaussianSplattingDebugMaterialPlugin\";\r\nexport * from \"./materialHelper.functions\";\r\nexport * from \"./materialHelper.geometryrendering\";\r\nexport * from \"./materialStencilState\";\r\nexport * from \"./uv.defines\";\r\nexport * from \"./floatingOriginMatrixOverrides\";\r\nexport * from \"./vertexPullingHelper.functions\";\r\n\r\n// async-loaded shaders\r\n\r\n// StandardMaterial\r\nexport * from \"../Shaders/default.fragment\";\r\nexport * from \"../Shaders/default.vertex\";\r\nexport * from \"../ShadersWGSL/default.fragment\";\r\nexport * from \"../ShadersWGSL/default.vertex\";\r\n\r\n// GreasedLineSimplMaterial\r\nexport * from \"../Shaders/greasedLine.fragment\";\r\nexport * from \"../Shaders/greasedLine.vertex\";\r\nexport * from \"../ShadersWGSL/greasedLine.fragment\";\r\nexport * from \"../ShadersWGSL/greasedLine.vertex\";\r\n\r\n// Shared shader includes used by external material packages in UMD builds\r\nexport * from \"../Shaders/ShadersInclude/bakedVertexAnimation\";\r\nexport * from \"../Shaders/ShadersInclude/bakedVertexAnimationDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/depthPrePass\";\r\nexport * from \"../Shaders/ShadersInclude/fogFragment\";\r\nexport * from \"../Shaders/ShadersInclude/fogVertex\";\r\nexport * from \"../Shaders/ShadersInclude/fogVertexDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/imageProcessingCompatibility\";\r\nexport * from \"../Shaders/ShadersInclude/instancesDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/instancesVertex\";\r\nexport * from \"../Shaders/ShadersInclude/logDepthFragment\";\r\nexport * from \"../Shaders/ShadersInclude/logDepthVertex\";\r\nexport * from \"../Shaders/ShadersInclude/sceneFragmentDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/sceneUboDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/sceneVertexDeclaration\";\r\nexport * from \"../Shaders/ShadersInclude/vertexColorMixing\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/bakedVertexAnimation\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/depthPrePass\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/fogFragment\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/fogVertex\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/fogVertexDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/imageProcessingCompatibility\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/instancesDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/instancesVertex\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/logDepthFragment\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/logDepthVertex\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/sceneUboDeclaration\";\r\nexport * from \"../ShadersWGSL/ShadersInclude/vertexColorMixing\";\r\n\r\nimport \"./material.decalMap\";\r\n"]}