@onerjs/core 8.41.6 → 8.41.8

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 (342) hide show
  1. package/Animations/animation.d.ts +6 -2
  2. package/Animations/animation.js +28 -4
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animationGroup.d.ts +2 -1
  5. package/Animations/animationGroup.js +3 -2
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Animations/animatorAvatar.d.ts +161 -0
  8. package/Animations/animatorAvatar.js +573 -0
  9. package/Animations/animatorAvatar.js.map +1 -0
  10. package/Animations/index.d.ts +1 -0
  11. package/Animations/index.js +1 -0
  12. package/Animations/index.js.map +1 -1
  13. package/AudioV2/webAudio/webAudioSoundSource.d.ts +2 -2
  14. package/AudioV2/webAudio/webAudioSoundSource.js +12 -2
  15. package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -1
  16. package/Bones/index.d.ts +1 -0
  17. package/Bones/index.js +1 -0
  18. package/Bones/index.js.map +1 -1
  19. package/Bones/skeleton.d.ts +13 -0
  20. package/Bones/skeleton.functions.d.ts +26 -0
  21. package/Bones/skeleton.functions.js +91 -0
  22. package/Bones/skeleton.functions.js.map +1 -0
  23. package/Bones/skeleton.js +26 -0
  24. package/Bones/skeleton.js.map +1 -1
  25. package/Cameras/geospatialCamera.js +21 -20
  26. package/Cameras/geospatialCamera.js.map +1 -1
  27. package/Cameras/geospatialCameraMovement.d.ts +8 -1
  28. package/Cameras/geospatialCameraMovement.js +29 -8
  29. package/Cameras/geospatialCameraMovement.js.map +1 -1
  30. package/Collisions/gpuPicker.d.ts +11 -0
  31. package/Collisions/gpuPicker.js +148 -19
  32. package/Collisions/gpuPicker.js.map +1 -1
  33. package/Debug/skeletonViewer.d.ts +4 -8
  34. package/Debug/skeletonViewer.js +13 -22
  35. package/Debug/skeletonViewer.js.map +1 -1
  36. package/Engines/AbstractEngine/abstractEngine.views.js +5 -2
  37. package/Engines/AbstractEngine/abstractEngine.views.js.map +1 -1
  38. package/Engines/Extensions/engine.multiview.d.ts +2 -0
  39. package/Engines/Extensions/engine.multiview.js +7 -3
  40. package/Engines/Extensions/engine.multiview.js.map +1 -1
  41. package/Engines/abstractEngine.d.ts +2 -0
  42. package/Engines/abstractEngine.js +11 -2
  43. package/Engines/abstractEngine.js.map +1 -1
  44. package/Engines/constants.d.ts +4 -0
  45. package/Engines/constants.js +4 -0
  46. package/Engines/constants.js.map +1 -1
  47. package/Instrumentation/engineInstrumentation.js +2 -1
  48. package/Instrumentation/engineInstrumentation.js.map +1 -1
  49. package/Layers/effectLayer.js +1 -3
  50. package/Layers/effectLayer.js.map +1 -1
  51. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  52. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  53. package/Lights/Shadows/shadowGenerator.js +2 -3
  54. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  55. package/Materials/Background/backgroundMaterial.js +37 -2
  56. package/Materials/Background/backgroundMaterial.js.map +1 -1
  57. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.d.ts +109 -0
  58. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js +210 -0
  59. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.js.map +1 -0
  60. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +1 -0
  61. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +71 -15
  62. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  63. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +86 -0
  64. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +161 -0
  65. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -0
  66. package/Materials/GreasedLine/greasedLinePluginMaterial.js +0 -6
  67. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  68. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +0 -1
  69. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
  70. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +0 -1
  71. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -1
  72. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +14 -0
  73. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +14 -0
  74. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  75. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +20 -1
  76. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +20 -1
  77. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  78. package/Materials/Node/Blocks/Dual/depthSourceBlock.d.ts +13 -0
  79. package/Materials/Node/Blocks/Dual/depthSourceBlock.js +13 -0
  80. package/Materials/Node/Blocks/Dual/depthSourceBlock.js.map +1 -1
  81. package/Materials/Node/Blocks/Dual/fogBlock.d.ts +21 -0
  82. package/Materials/Node/Blocks/Dual/fogBlock.js +21 -0
  83. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  84. package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +21 -0
  85. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +21 -0
  86. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  87. package/Materials/Node/Blocks/Dual/lightBlock.d.ts +38 -0
  88. package/Materials/Node/Blocks/Dual/lightBlock.js +38 -0
  89. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  90. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +29 -0
  91. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +29 -0
  92. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  93. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.d.ts +5 -0
  94. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +5 -0
  95. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  96. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +16 -0
  97. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +16 -0
  98. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  99. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.d.ts +16 -0
  100. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +16 -0
  101. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
  102. package/Materials/Node/Blocks/Dual/textureBlock.d.ts +34 -0
  103. package/Materials/Node/Blocks/Dual/textureBlock.js +34 -0
  104. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  105. package/Materials/Node/Blocks/Fragment/TBNBlock.d.ts +17 -0
  106. package/Materials/Node/Blocks/Fragment/TBNBlock.js +17 -2
  107. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  108. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.d.ts +7 -0
  109. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.js +7 -0
  110. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +21 -0
  112. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +21 -0
  113. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  114. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.d.ts +10 -0
  115. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +10 -0
  116. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +28 -0
  118. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +28 -0
  119. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  120. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +30 -0
  121. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +30 -1
  122. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/Fragment/screenSizeBlock.d.ts +4 -0
  124. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +4 -0
  125. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +5 -0
  127. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +5 -0
  128. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  129. package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +3 -0
  130. package/Materials/Node/Blocks/Fragment/twirlBlock.js +3 -0
  131. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.d.ts +6 -0
  133. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +6 -0
  134. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
  135. package/Materials/Node/Blocks/Input/inputBlock.d.ts +16 -0
  136. package/Materials/Node/Blocks/Input/inputBlock.js +16 -1
  137. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  138. package/Materials/Node/Blocks/Input/prePassTextureBlock.d.ts +5 -0
  139. package/Materials/Node/Blocks/Input/prePassTextureBlock.js +5 -0
  140. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  141. package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +10 -0
  142. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +10 -1
  143. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +23 -0
  145. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +23 -1
  146. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  147. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +17 -0
  148. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +17 -0
  149. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  150. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +41 -0
  151. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +41 -0
  152. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  153. package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +21 -0
  154. package/Materials/Node/Blocks/PBR/reflectionBlock.js +21 -0
  155. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  156. package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +29 -0
  157. package/Materials/Node/Blocks/PBR/refractionBlock.js +29 -0
  158. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  159. package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +14 -0
  160. package/Materials/Node/Blocks/PBR/sheenBlock.js +14 -0
  161. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  162. package/Materials/Node/Blocks/PBR/subSurfaceBlock.d.ts +7 -0
  163. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +7 -0
  164. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  165. package/Materials/Node/Blocks/Particle/particleTextureBlock.d.ts +23 -0
  166. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +23 -0
  167. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  168. package/Materials/Node/Blocks/Teleport/teleportInBlock.d.ts +6 -0
  169. package/Materials/Node/Blocks/Teleport/teleportInBlock.js +6 -0
  170. package/Materials/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  171. package/Materials/Node/Blocks/Teleport/teleportOutBlock.d.ts +17 -0
  172. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +17 -0
  173. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/Vertex/bonesBlock.d.ts +22 -0
  175. package/Materials/Node/Blocks/Vertex/bonesBlock.js +22 -0
  176. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/Vertex/instancesBlock.d.ts +13 -0
  178. package/Materials/Node/Blocks/Vertex/instancesBlock.js +13 -0
  179. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  180. package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +20 -0
  181. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +20 -0
  182. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  183. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.d.ts +27 -0
  184. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +27 -0
  185. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/clampBlock.d.ts +10 -0
  187. package/Materials/Node/Blocks/clampBlock.js +10 -0
  188. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  189. package/Materials/Node/Blocks/cloudBlock.d.ts +10 -0
  190. package/Materials/Node/Blocks/cloudBlock.js +10 -0
  191. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/colorMergerBlock.d.ts +10 -0
  193. package/Materials/Node/Blocks/colorMergerBlock.js +10 -0
  194. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  195. package/Materials/Node/Blocks/conditionalBlock.d.ts +14 -0
  196. package/Materials/Node/Blocks/conditionalBlock.js +14 -0
  197. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  198. package/Materials/Node/Blocks/curveBlock.d.ts +10 -0
  199. package/Materials/Node/Blocks/curveBlock.js +10 -0
  200. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  201. package/Materials/Node/Blocks/customBlock.d.ts +10 -0
  202. package/Materials/Node/Blocks/customBlock.js +10 -0
  203. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  204. package/Materials/Node/Blocks/debugBlock.d.ts +10 -0
  205. package/Materials/Node/Blocks/debugBlock.js +10 -0
  206. package/Materials/Node/Blocks/debugBlock.js.map +1 -1
  207. package/Materials/Node/Blocks/fresnelBlock.d.ts +4 -0
  208. package/Materials/Node/Blocks/fresnelBlock.js +4 -0
  209. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/gradientBlock.d.ts +10 -0
  211. package/Materials/Node/Blocks/gradientBlock.js +10 -0
  212. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  213. package/Materials/Node/Blocks/loopBlock.d.ts +10 -0
  214. package/Materials/Node/Blocks/loopBlock.js +10 -0
  215. package/Materials/Node/Blocks/loopBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/matrixBuilderBlock.d.ts +1 -0
  217. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -0
  218. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  219. package/Materials/Node/Blocks/meshAttributeExistsBlock.d.ts +10 -0
  220. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +10 -0
  221. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/pannerBlock.d.ts +5 -0
  223. package/Materials/Node/Blocks/pannerBlock.js +5 -0
  224. package/Materials/Node/Blocks/pannerBlock.js.map +1 -1
  225. package/Materials/Node/Blocks/remapBlock.d.ts +10 -0
  226. package/Materials/Node/Blocks/remapBlock.js +10 -0
  227. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/rotate2dBlock.d.ts +1 -0
  229. package/Materials/Node/Blocks/rotate2dBlock.js +1 -0
  230. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  231. package/Materials/Node/Blocks/transformBlock.d.ts +10 -0
  232. package/Materials/Node/Blocks/transformBlock.js +10 -0
  233. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/triPlanarBlock.d.ts +22 -0
  235. package/Materials/Node/Blocks/triPlanarBlock.js +22 -0
  236. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  237. package/Materials/Node/Blocks/trigonometryBlock.d.ts +10 -0
  238. package/Materials/Node/Blocks/trigonometryBlock.js +10 -0
  239. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +10 -0
  241. package/Materials/Node/Blocks/vectorMergerBlock.js +10 -0
  242. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  243. package/Materials/Node/Blocks/viewDirectionBlock.d.ts +5 -0
  244. package/Materials/Node/Blocks/viewDirectionBlock.js +5 -0
  245. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/waveBlock.d.ts +10 -0
  247. package/Materials/Node/Blocks/waveBlock.js +10 -0
  248. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +1 -0
  250. package/Materials/Node/Blocks/worleyNoise3DBlock.js +1 -0
  251. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  252. package/Materials/Node/nodeMaterial.d.ts +13 -0
  253. package/Materials/Node/nodeMaterial.js +14 -2
  254. package/Materials/Node/nodeMaterial.js.map +1 -1
  255. package/Materials/Node/nodeMaterialBlock.d.ts +0 -3
  256. package/Materials/Node/nodeMaterialBlock.js +1 -6
  257. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  258. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +1 -2
  259. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  260. package/Materials/Textures/mirrorTexture.js +1 -1
  261. package/Materials/Textures/mirrorTexture.js.map +1 -1
  262. package/Materials/index.d.ts +2 -0
  263. package/Materials/index.js +2 -0
  264. package/Materials/index.js.map +1 -1
  265. package/Maths/math.constants.d.ts +2 -1
  266. package/Maths/math.constants.js +3 -2
  267. package/Maths/math.constants.js.map +1 -1
  268. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +17 -1
  269. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  270. package/Meshes/instancedMesh.js +1 -0
  271. package/Meshes/instancedMesh.js.map +1 -1
  272. package/Meshes/mesh.d.ts +5 -0
  273. package/Meshes/mesh.js +39 -16
  274. package/Meshes/mesh.js.map +1 -1
  275. package/Misc/dataStorage.d.ts +13 -0
  276. package/Misc/dataStorage.js +25 -0
  277. package/Misc/dataStorage.js.map +1 -1
  278. package/Morph/morphTarget.d.ts +9 -5
  279. package/Morph/morphTarget.js +15 -7
  280. package/Morph/morphTarget.js.map +1 -1
  281. package/Morph/morphTargetManager.d.ts +3 -1
  282. package/Morph/morphTargetManager.js +5 -2
  283. package/Morph/morphTargetManager.js.map +1 -1
  284. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +1 -1
  285. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
  286. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +1 -1
  287. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
  288. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +1 -1
  289. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  290. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +1 -1
  291. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
  292. package/Particles/Node/Blocks/Emitters/emitters.functions.js +3 -3
  293. package/Particles/Node/Blocks/Emitters/emitters.functions.js.map +1 -1
  294. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +1 -1
  295. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
  296. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +1 -1
  297. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
  298. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +1 -1
  299. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  300. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +2 -2
  301. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -1
  302. package/Particles/Node/Blocks/Update/updateNoiseBlock.js +7 -7
  303. package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
  304. package/Particles/Node/Blocks/particleLocalVariableBlock.js +2 -2
  305. package/Particles/Node/Blocks/particleLocalVariableBlock.js.map +1 -1
  306. package/Particles/Node/nodeParticleBuildState.js +7 -7
  307. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  308. package/Particles/Node/nodeParticleSystemSet.helper.js +9 -4
  309. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  310. package/Particles/particle.d.ts +73 -61
  311. package/Particles/particle.js +106 -91
  312. package/Particles/particle.js.map +1 -1
  313. package/Particles/particleSystem.js +5 -5
  314. package/Particles/particleSystem.js.map +1 -1
  315. package/Particles/thinParticleSystem.function.js +83 -83
  316. package/Particles/thinParticleSystem.function.js.map +1 -1
  317. package/Particles/thinParticleSystem.js +8 -8
  318. package/Particles/thinParticleSystem.js.map +1 -1
  319. package/Physics/v2/Plugins/havokPlugin.d.ts +14 -1
  320. package/Physics/v2/Plugins/havokPlugin.js +154 -10
  321. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  322. package/Probes/reflectionProbe.js +9 -6
  323. package/Probes/reflectionProbe.js.map +1 -1
  324. package/Rendering/objectRenderer.d.ts +3 -1
  325. package/Rendering/objectRenderer.js +28 -8
  326. package/Rendering/objectRenderer.js.map +1 -1
  327. package/Rendering/reflectiveShadowMap.js +1 -1
  328. package/Rendering/reflectiveShadowMap.js.map +1 -1
  329. package/Rendering/thinDepthPeelingRenderer.js +8 -0
  330. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  331. package/Shaders/gaussianSplatting.fragment.js +8 -2
  332. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  333. package/Shaders/gaussianSplatting.vertex.js +8 -2
  334. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  335. package/ShadersWGSL/gaussianSplatting.fragment.js +7 -1
  336. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  337. package/ShadersWGSL/gaussianSplatting.vertex.js +8 -2
  338. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  339. package/package.json +1 -1
  340. package/scene.d.ts +22 -1
  341. package/scene.js +15 -15
  342. package/scene.js.map +1 -1
@@ -49,12 +49,21 @@ export class ImageSourceBlock extends NodeMaterialBlock {
49
49
  this.registerOutput("source", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("source", this, 1 /* NodeMaterialConnectionPointDirection.Output */, ImageSourceBlock, "ImageSourceBlock"));
50
50
  this.registerOutput("dimensions", NodeMaterialBlockConnectionPointTypes.Vector2);
51
51
  }
52
+ /**
53
+ * Bind data to effect
54
+ * @param effect - the effect to bind to
55
+ * @param _nodeMaterial - the node material
56
+ */
52
57
  bind(effect, _nodeMaterial) {
53
58
  if (!this.texture) {
54
59
  return;
55
60
  }
56
61
  effect.setTexture(this._samplerName, this.texture);
57
62
  }
63
+ /**
64
+ * Checks if the block is ready
65
+ * @returns true if ready
66
+ */
58
67
  isReady() {
59
68
  if (this.texture && !this.texture.isReadyOrNotBlocking()) {
60
69
  return false;
@@ -125,6 +134,11 @@ export class ImageSourceBlock extends NodeMaterialBlock {
125
134
  codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\n`;
126
135
  return codeString;
127
136
  }
137
+ /**
138
+ * Serializes the block
139
+ * @param ignoreTexture - whether to skip texture serialization
140
+ * @returns the serialized object
141
+ */
128
142
  serialize(ignoreTexture = false) {
129
143
  const serializationObject = super.serialize();
130
144
  if (!ignoreTexture &&
@@ -135,6 +149,13 @@ export class ImageSourceBlock extends NodeMaterialBlock {
135
149
  }
136
150
  return serializationObject;
137
151
  }
152
+ /**
153
+ * Deserializes the block
154
+ * @param serializationObject - the serialization object
155
+ * @param scene - the scene
156
+ * @param rootUrl - the root url
157
+ * @param urlRewriter - optional url rewriter
158
+ */
138
159
  _deserialize(serializationObject, scene, rootUrl, urlRewriter) {
139
160
  super._deserialize(serializationObject, scene, rootUrl, urlRewriter);
140
161
  if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {
@@ -1 +1 @@
1
- {"version":3,"file":"imageSourceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/imageSourceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { NodeMaterial } from \"../../nodeMaterial\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n/**\r\n * Block used to provide an image for a TextureBlock\r\n */\r\nexport class ImageSourceBlock extends NodeMaterialBlock {\r\n private _samplerName: string;\r\n protected _texture: Nullable<Texture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get samplerName(): string {\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Creates a new ImageSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n\r\n this.registerOutput(\"dimensions\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n public override bind(effect: Effect, _nodeMaterial: NodeMaterial) {\r\n if (!this.texture) {\r\n return;\r\n }\r\n\r\n effect.setTexture(this._samplerName, this.texture);\r\n }\r\n\r\n public override isReady() {\r\n if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ImageSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the dimension component\r\n */\r\n public get dimensions(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n this._samplerName = state._getFreeVariableName(this.name);\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (this.dimensions.isConnected) {\r\n let affect: string = \"\";\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;\r\n } else {\r\n affect = `vec2(textureSize(${this._samplerName}, 0).xy)`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(this.dimensions)} = ${affect};\\n`;\r\n }\r\n\r\n if (this._texture?._texture?.is2DArray) {\r\n state._emit2DArraySampler(this._samplerName);\r\n } else {\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode(ignoreTexture = false) {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture || ignoreTexture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(ignoreTexture = false): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (\r\n !ignoreTexture &&\r\n this.texture &&\r\n (NodeMaterial.AllowSerializationOfRenderTargetTextures || !this.texture.isRenderTarget) &&\r\n this.texture.getClassName() !== \"VideoTexture\"\r\n ) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n super._deserialize(serializationObject, scene, rootUrl, urlRewriter);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n if (serializationObject.texture.url !== undefined) {\r\n if (serializationObject.texture.url.indexOf(\"data:\") === 0) {\r\n rootUrl = \"\";\r\n } else if (urlRewriter) {\r\n serializationObject.texture.url = urlRewriter(serializationObject.texture.url);\r\n serializationObject.texture.name = serializationObject.texture.url;\r\n }\r\n }\r\n if (serializationObject.texture.base64String || serializationObject.texture.url !== undefined) {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ImageSourceBlock\", ImageSourceBlock);\r\n"]}
1
+ {"version":3,"file":"imageSourceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/imageSourceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { NodeMaterial } from \"../../nodeMaterial\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n/**\r\n * Block used to provide an image for a TextureBlock\r\n */\r\nexport class ImageSourceBlock extends NodeMaterialBlock {\r\n private _samplerName: string;\r\n protected _texture: Nullable<Texture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get samplerName(): string {\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Creates a new ImageSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n\r\n this.registerOutput(\"dimensions\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param _nodeMaterial - the node material\r\n */\r\n public override bind(effect: Effect, _nodeMaterial: NodeMaterial) {\r\n if (!this.texture) {\r\n return;\r\n }\r\n\r\n effect.setTexture(this._samplerName, this.texture);\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @returns true if ready\r\n */\r\n public override isReady() {\r\n if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ImageSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the dimension component\r\n */\r\n public get dimensions(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n this._samplerName = state._getFreeVariableName(this.name);\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (this.dimensions.isConnected) {\r\n let affect: string = \"\";\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;\r\n } else {\r\n affect = `vec2(textureSize(${this._samplerName}, 0).xy)`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(this.dimensions)} = ${affect};\\n`;\r\n }\r\n\r\n if (this._texture?._texture?.is2DArray) {\r\n state._emit2DArraySampler(this._samplerName);\r\n } else {\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode(ignoreTexture = false) {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture || ignoreTexture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @param ignoreTexture - whether to skip texture serialization\r\n * @returns the serialized object\r\n */\r\n public override serialize(ignoreTexture = false): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (\r\n !ignoreTexture &&\r\n this.texture &&\r\n (NodeMaterial.AllowSerializationOfRenderTargetTextures || !this.texture.isRenderTarget) &&\r\n this.texture.getClassName() !== \"VideoTexture\"\r\n ) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n * @param urlRewriter - optional url rewriter\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n super._deserialize(serializationObject, scene, rootUrl, urlRewriter);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n if (serializationObject.texture.url !== undefined) {\r\n if (serializationObject.texture.url.indexOf(\"data:\") === 0) {\r\n rootUrl = \"\";\r\n } else if (urlRewriter) {\r\n serializationObject.texture.url = urlRewriter(serializationObject.texture.url);\r\n serializationObject.texture.name = serializationObject.texture.url;\r\n }\r\n }\r\n if (serializationObject.texture.base64String || serializationObject.texture.url !== undefined) {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ImageSourceBlock\", ImageSourceBlock);\r\n"]}
@@ -75,15 +75,53 @@ export declare class LightBlock extends NodeMaterialBlock {
75
75
  * Gets the shadow output component
76
76
  */
77
77
  get shadow(): NodeMaterialConnectionPoint;
78
+ /**
79
+ * Initialize the block
80
+ * @param state - the build state
81
+ */
78
82
  initialize(state: NodeMaterialBuildState): void;
79
83
  private _initShaderSourceAsync;
84
+ /**
85
+ * Auto configure the block based on the material
86
+ * @param material - the node material
87
+ * @param additionalFilteringInfo - optional filtering info
88
+ */
80
89
  autoConfigure(material: NodeMaterial, additionalFilteringInfo?: (node: NodeMaterialBlock) => boolean): void;
90
+ /**
91
+ * Prepare the list of defines
92
+ * @param defines - the material defines
93
+ * @param nodeMaterial - the node material
94
+ * @param mesh - the mesh to prepare for
95
+ */
81
96
  prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh): void;
97
+ /**
98
+ * Update the uniforms and samples
99
+ * @param state - the build state
100
+ * @param nodeMaterial - the node material
101
+ * @param defines - the material defines
102
+ * @param uniformBuffers - the uniform buffers
103
+ */
82
104
  updateUniformsAndSamples(state: NodeMaterialBuildState, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines, uniformBuffers: string[]): void;
105
+ /**
106
+ * Bind data to effect
107
+ * @param effect - the effect to bind to
108
+ * @param nodeMaterial - the node material
109
+ * @param mesh - the mesh to bind for
110
+ */
83
111
  bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
84
112
  private _injectVertexCode;
85
113
  private _injectUBODeclaration;
86
114
  protected _buildBlock(state: NodeMaterialBuildState): this | undefined;
115
+ /**
116
+ * Serializes the block
117
+ * @returns the serialized object
118
+ */
87
119
  serialize(): any;
120
+ /**
121
+ * Deserializes the block
122
+ * @param serializationObject - the serialization object
123
+ * @param scene - the scene
124
+ * @param rootUrl - the root url
125
+ */
88
126
  _deserialize(serializationObject: any, scene: Scene, rootUrl: string): void;
89
127
  }
@@ -121,6 +121,10 @@ export class LightBlock extends NodeMaterialBlock {
121
121
  get shadow() {
122
122
  return this._outputs[2];
123
123
  }
124
+ /**
125
+ * Initialize the block
126
+ * @param state - the build state
127
+ */
124
128
  initialize(state) {
125
129
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
126
130
  this._initShaderSourceAsync(state.shaderLanguage);
@@ -155,6 +159,11 @@ export class LightBlock extends NodeMaterialBlock {
155
159
  this._codeIsReady = true;
156
160
  this.onCodeIsReadyObservable.notifyObservers(this);
157
161
  }
162
+ /**
163
+ * Auto configure the block based on the material
164
+ * @param material - the node material
165
+ * @param additionalFilteringInfo - optional filtering info
166
+ */
158
167
  autoConfigure(material, additionalFilteringInfo = () => true) {
159
168
  if (!this.cameraPosition.isConnected) {
160
169
  let cameraPositionInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.CameraPosition && additionalFilteringInfo(b));
@@ -165,6 +174,12 @@ export class LightBlock extends NodeMaterialBlock {
165
174
  cameraPositionInput.output.connectTo(this.cameraPosition);
166
175
  }
167
176
  }
177
+ /**
178
+ * Prepare the list of defines
179
+ * @param defines - the material defines
180
+ * @param nodeMaterial - the node material
181
+ * @param mesh - the mesh to prepare for
182
+ */
168
183
  prepareDefines(defines, nodeMaterial, mesh) {
169
184
  if (!mesh || !defines._areLightsDirty) {
170
185
  return;
@@ -187,6 +202,13 @@ export class LightBlock extends NodeMaterialBlock {
187
202
  }
188
203
  }
189
204
  }
205
+ /**
206
+ * Update the uniforms and samples
207
+ * @param state - the build state
208
+ * @param nodeMaterial - the node material
209
+ * @param defines - the material defines
210
+ * @param uniformBuffers - the uniform buffers
211
+ */
190
212
  updateUniformsAndSamples(state, nodeMaterial, defines, uniformBuffers) {
191
213
  state.samplers.push("areaLightsLTC1Sampler");
192
214
  state.samplers.push("areaLightsLTC2Sampler");
@@ -198,6 +220,12 @@ export class LightBlock extends NodeMaterialBlock {
198
220
  PrepareUniformsAndSamplersForLight(lightIndex, state.uniforms, state.samplers, defines["PROJECTEDLIGHTTEXTURE" + lightIndex], uniformBuffers, onlyUpdateBuffersList, defines["IESLIGHTTEXTURE" + lightIndex], defines["CLUSTLIGHT" + lightIndex], defines["RECTAREALIGHTEMISSIONTEXTURE" + lightIndex]);
199
221
  }
200
222
  }
223
+ /**
224
+ * Bind data to effect
225
+ * @param effect - the effect to bind to
226
+ * @param nodeMaterial - the node material
227
+ * @param mesh - the mesh to bind for
228
+ */
201
229
  bind(effect, nodeMaterial, mesh) {
202
230
  if (!mesh) {
203
231
  return;
@@ -373,6 +401,10 @@ export class LightBlock extends NodeMaterialBlock {
373
401
  }
374
402
  return this;
375
403
  }
404
+ /**
405
+ * Serializes the block
406
+ * @returns the serialized object
407
+ */
376
408
  serialize() {
377
409
  const serializationObject = super.serialize();
378
410
  serializationObject.generateOnlyFragmentCode = this.generateOnlyFragmentCode;
@@ -381,6 +413,12 @@ export class LightBlock extends NodeMaterialBlock {
381
413
  }
382
414
  return serializationObject;
383
415
  }
416
+ /**
417
+ * Deserializes the block
418
+ * @param serializationObject - the serialization object
419
+ * @param scene - the scene
420
+ * @param rootUrl - the root url
421
+ */
384
422
  _deserialize(serializationObject, scene, rootUrl) {
385
423
  super._deserialize(serializationObject, scene, rootUrl);
386
424
  if (serializationObject.lightId) {
@@ -1 +1 @@
1
- {"version":3,"file":"lightBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/lightBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Light } from \"../../../../Lights/light\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { Logger } from \"../../../../Misc/logger\";\r\nimport { BindLight, BindLights, PrepareDefinesForLight, PrepareDefinesForLights, PrepareUniformsAndSamplersForLight } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add light in the fragment shader\r\n */\r\nexport class LightBlock extends NodeMaterialBlock {\r\n private _lightId: number = 0;\r\n\r\n /**\r\n * Gets or sets the light associated with this block\r\n */\r\n public light: Nullable<Light>;\r\n\r\n /** Indicates that no code should be generated in the vertex shader. Can be useful in some specific circumstances (like when doing ray marching for eg) */\r\n @editableInPropertyPage(\"Generate only fragment code\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: { rebuild: true, update: true, onValidation: LightBlock._OnGenerateOnlyFragmentCodeChanged },\r\n })\r\n public generateOnlyFragmentCode = false;\r\n\r\n private static _OnGenerateOnlyFragmentCodeChanged(block: NodeMaterialBlock, _propertyName: string): boolean {\r\n const that = block as LightBlock;\r\n\r\n if (that.worldPosition.isConnected) {\r\n that.generateOnlyFragmentCode = !that.generateOnlyFragmentCode;\r\n Logger.Error(\"The worldPosition input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n that._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n private _setTarget(): void {\r\n this._setInitialTarget(this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.VertexAndFragment);\r\n this.getInputByName(\"worldPosition\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n }\r\n\r\n /**\r\n * Create a new LightBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"cameraPosition\", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"glossiness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"glossPower\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"diffuseColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"specularColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n this.registerOutput(\"diffuseOutput\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"specularOutput\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"shadow\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"LightBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public get cameraPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the glossiness component\r\n */\r\n public get glossiness(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the glossiness power component\r\n */\r\n public get glossPower(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the diffuse color component\r\n */\r\n public get diffuseColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the specular color component\r\n */\r\n public get specularColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the view matrix component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the diffuse output component\r\n */\r\n public get diffuseOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the specular output component\r\n */\r\n public get specularOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the shadow output component\r\n */\r\n public get shadow(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n public override initialize(state: NodeMaterialBuildState) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n\r\n state._excludeVariableName(\"vViewDepth\");\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightFragment\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightUboDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightVxUboDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightsFragmentFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/shadowsFragmentFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/shadowsVertex\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/lightFragmentDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightFragment\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightUboDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightVxUboDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightVxFragmentDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/helperFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightsFragmentFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/shadowsFragmentFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/shadowsVertex\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.cameraPosition.isConnected) {\r\n let cameraPositionInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.CameraPosition && additionalFilteringInfo(b));\r\n\r\n if (!cameraPositionInput) {\r\n cameraPositionInput = new InputBlock(\"cameraPosition\");\r\n cameraPositionInput.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);\r\n }\r\n cameraPositionInput.output.connectTo(this.cameraPosition);\r\n }\r\n }\r\n\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh) {\r\n if (!mesh || !defines._areLightsDirty) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n\r\n if (!this.light) {\r\n PrepareDefinesForLights(scene, mesh, defines, true, nodeMaterial.maxSimultaneousLights);\r\n } else {\r\n const state = {\r\n needNormals: false,\r\n needRebuild: false,\r\n lightmapMode: false,\r\n shadowEnabled: false,\r\n specularEnabled: false,\r\n };\r\n\r\n PrepareDefinesForLight(scene, mesh, this.light, this._lightId, defines, true, state);\r\n\r\n if (state.needRebuild) {\r\n defines.rebuild();\r\n }\r\n }\r\n }\r\n\r\n public override updateUniformsAndSamples(state: NodeMaterialBuildState, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines, uniformBuffers: string[]) {\r\n state.samplers.push(\"areaLightsLTC1Sampler\");\r\n state.samplers.push(\"areaLightsLTC2Sampler\");\r\n for (let lightIndex = 0; lightIndex < nodeMaterial.maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n const onlyUpdateBuffersList = state.uniforms.indexOf(\"vLightData\" + lightIndex) >= 0;\r\n PrepareUniformsAndSamplersForLight(\r\n lightIndex,\r\n state.uniforms,\r\n state.samplers,\r\n defines[\"PROJECTEDLIGHTTEXTURE\" + lightIndex],\r\n uniformBuffers,\r\n onlyUpdateBuffersList,\r\n defines[\"IESLIGHTTEXTURE\" + lightIndex],\r\n defines[\"CLUSTLIGHT\" + lightIndex],\r\n defines[\"RECTAREALIGHTEMISSIONTEXTURE\" + lightIndex]\r\n );\r\n }\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n\r\n if (!this.light) {\r\n BindLights(scene, mesh, effect, true, nodeMaterial.maxSimultaneousLights);\r\n } else {\r\n BindLight(this.light, this._lightId, scene, effect, true);\r\n }\r\n }\r\n\r\n private _injectVertexCode(state: NodeMaterialBuildState) {\r\n const worldPos = this.worldPosition;\r\n const comments = `//${this.name}`;\r\n const scene = state.sharedData.nodeMaterial.getScene();\r\n\r\n // Declaration\r\n if (!this.light) {\r\n // Emit for all lights\r\n state._emitFunctionFromInclude(state.supportUniformBuffers ? \"lightVxUboDeclaration\" : \"lightVxFragmentDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n });\r\n this._lightId = 0;\r\n\r\n state.sharedData.dynamicUniformBlocks.push(this);\r\n } else {\r\n this._lightId = (state.counters[\"lightCounter\"] !== undefined ? state.counters[\"lightCounter\"] : -1) + 1;\r\n state.counters[\"lightCounter\"] = this._lightId;\r\n\r\n state._emitFunctionFromInclude(\r\n state.supportUniformBuffers ? \"lightVxUboDeclaration\" : \"lightVxFragmentDeclaration\",\r\n comments,\r\n {\r\n replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }],\r\n },\r\n this._lightId.toString()\r\n );\r\n }\r\n\r\n // Inject code in vertex\r\n const worldPosVaryingName = \"v_\" + worldPos.associatedVariableName;\r\n\r\n if (state._emitVaryingFromString(worldPosVaryingName, NodeMaterialBlockConnectionPointTypes.Vector4)) {\r\n state.compilationString += (state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\") + `${worldPosVaryingName} = ${worldPos.associatedVariableName};\\n`;\r\n }\r\n\r\n if (this.light) {\r\n state.compilationString += state._emitCodeFromInclude(\"shadowsVertex\", comments, {\r\n replaceStrings: [\r\n { search: /{X}/g, replace: this._lightId.toString() },\r\n { search: /worldPos/g, replace: worldPos.associatedVariableName },\r\n ],\r\n });\r\n } else {\r\n state.compilationString += `${state._declareLocalVar(\"worldPos\", NodeMaterialBlockConnectionPointTypes.Vector4)} = ${worldPos.associatedVariableName};\\n`;\r\n if (this.view.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix)} = ${this.view.associatedVariableName};\\n`;\r\n state._emitVaryingFromString(\"vViewDepth\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state.compilationString +=\r\n (state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\") +\r\n `vViewDepth = ${scene.useRightHandedSystem ? \"-\" : \"\"}(${this.view.associatedVariableName} * ${worldPos.associatedVariableName}).z;\\n`;\r\n }\r\n state.compilationString += state._emitCodeFromInclude(\"shadowsVertex\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n });\r\n }\r\n }\r\n\r\n private _injectUBODeclaration(state: NodeMaterialBuildState) {\r\n const comments = `//${this.name}`;\r\n\r\n if (!this.light) {\r\n // Emit for all lights\r\n state._emitFunctionFromInclude(state.supportUniformBuffers ? \"lightUboDeclaration\" : \"lightFragmentDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n substitutionVars: this.generateOnlyFragmentCode ? \"varying,\" : undefined,\r\n });\r\n } else {\r\n state._emitFunctionFromInclude(\r\n state.supportUniformBuffers ? \"lightUboDeclaration\" : \"lightFragmentDeclaration\",\r\n comments,\r\n {\r\n replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }],\r\n },\r\n this._lightId.toString()\r\n );\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const isWGSL = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const addF = isWGSL ? \"f\" : \"\";\r\n\r\n const comments = `//${this.name}`;\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n // Vertex\r\n this._injectVertexCode(state); // won't be executed if this.generateOnlyFragmentCode is true\r\n return;\r\n }\r\n\r\n if (this.generateOnlyFragmentCode) {\r\n state.sharedData.dynamicUniformBlocks.push(this);\r\n }\r\n // Fragment\r\n const accessor = isWGSL ? \"fragmentInputs.\" : \"\";\r\n state.sharedData.forcedBindableBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n const worldPos = this.worldPosition;\r\n\r\n let worldPosVariableName = worldPos.associatedVariableName;\r\n if (this.generateOnlyFragmentCode) {\r\n worldPosVariableName = state._getFreeVariableName(\"globalWorldPos\");\r\n state._emitFunction(\"light_globalworldpos\", `${state._declareLocalVar(worldPosVariableName, NodeMaterialBlockConnectionPointTypes.Vector3, false, true)};\\n`, comments);\r\n state.compilationString += `${worldPosVariableName} = ${worldPos.associatedVariableName}.xyz;\\n`;\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"shadowsVertex\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n substitutionVars: `worldPos,${worldPos.associatedVariableName}`,\r\n });\r\n } else {\r\n worldPosVariableName = accessor + \"v_\" + worldPosVariableName + \".xyz\";\r\n }\r\n\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n let replaceString = { search: /vPositionW/g, replace: worldPosVariableName };\r\n\r\n if (isWGSL) {\r\n replaceString = { search: /fragmentInputs\\.vPositionW/g, replace: worldPosVariableName };\r\n }\r\n\r\n state._emitFunctionFromInclude(\"lightsFragmentFunctions\", comments, {\r\n replaceStrings: [replaceString],\r\n });\r\n\r\n state._emitFunctionFromInclude(\"shadowsFragmentFunctions\", comments, {\r\n replaceStrings: [replaceString],\r\n });\r\n\r\n this._injectUBODeclaration(state);\r\n\r\n // Code\r\n if (this._lightId === 0) {\r\n if (state._registerTempVariable(\"viewDirectionW\")) {\r\n state.compilationString += `${state._declareLocalVar(\"viewDirectionW\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${this.cameraPosition.associatedVariableName} - ${worldPosVariableName});\\n`;\r\n }\r\n if (this.generateOnlyFragmentCode && this.view.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"vViewDepth\", NodeMaterialBlockConnectionPointTypes.Float)} = (${this.view.associatedVariableName} * ${worldPos.associatedVariableName}).z;\\n`;\r\n }\r\n\r\n state.compilationString += isWGSL ? `var info: lightingInfo;\\n` : `lightingInfo info;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"shadow\", NodeMaterialBlockConnectionPointTypes.Float)} = 1.;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"aggShadow\", NodeMaterialBlockConnectionPointTypes.Float)} = 0.;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"numLights\", NodeMaterialBlockConnectionPointTypes.Float)} = 0.;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"glossiness\", NodeMaterialBlockConnectionPointTypes.Float)} = ${this.glossiness.isConnected ? this.glossiness.associatedVariableName : \"1.0\"} * ${\r\n this.glossPower.isConnected ? this.glossPower.associatedVariableName : \"1024.0\"\r\n };\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"diffuseBase\", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3${addF}(0., 0., 0.);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"specularBase\", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3${addF}(0., 0., 0.);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"normalW\", NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.worldNormal.associatedVariableName}.xyz;\\n`;\r\n }\r\n\r\n if (this.light) {\r\n let replaceString = [{ search: /vPositionW/g, replace: worldPosVariableName + \".xyz\" }];\r\n\r\n if (isWGSL) {\r\n replaceString = [\r\n { search: /fragmentInputs\\.vPositionW/g, replace: worldPosVariableName + \".xyz\" },\r\n { search: /uniforms\\.vReflectivityColor/g, replace: \"vReflectivityColor\" },\r\n ];\r\n }\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"lightFragment\", comments, {\r\n replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }, ...replaceString],\r\n });\r\n } else {\r\n let substitutionVars = `vPositionW,${worldPosVariableName}.xyz`;\r\n\r\n if (isWGSL) {\r\n substitutionVars = `fragmentInputs.vPositionW,${worldPosVariableName}.xyz`;\r\n if (this.generateOnlyFragmentCode) {\r\n substitutionVars += `,fragmentInputs.vViewDepth,vViewDepth`;\r\n }\r\n }\r\n state.compilationString += state._emitCodeFromInclude(\"lightFragment\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n substitutionVars: substitutionVars,\r\n });\r\n }\r\n\r\n if (this._lightId === 0) {\r\n state.compilationString += `aggShadow = aggShadow / numLights;\\n`;\r\n }\r\n\r\n const diffuseOutput = this.diffuseOutput;\r\n const specularOutput = this.specularOutput;\r\n\r\n state.compilationString +=\r\n state._declareOutput(diffuseOutput) + ` = diffuseBase${this.diffuseColor.isConnected ? \" * \" + this.diffuseColor.associatedVariableName : \"\"};\\n`;\r\n if (specularOutput.hasEndpoints) {\r\n state.compilationString +=\r\n state._declareOutput(specularOutput) + ` = specularBase${this.specularColor.isConnected ? \" * \" + this.specularColor.associatedVariableName : \"\"};\\n`;\r\n }\r\n\r\n if (this.shadow.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.shadow) + ` = aggShadow;\\n`;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.generateOnlyFragmentCode = this.generateOnlyFragmentCode;\r\n\r\n if (this.light) {\r\n serializationObject.lightId = this.light.id;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.lightId) {\r\n this.light = scene.getLightById(serializationObject.lightId);\r\n }\r\n\r\n this.generateOnlyFragmentCode = serializationObject.generateOnlyFragmentCode;\r\n\r\n this._setTarget();\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.LightBlock\", LightBlock);\r\n"]}
1
+ {"version":3,"file":"lightBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/lightBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Light } from \"../../../../Lights/light\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { Logger } from \"../../../../Misc/logger\";\r\nimport { BindLight, BindLights, PrepareDefinesForLight, PrepareDefinesForLights, PrepareUniformsAndSamplersForLight } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add light in the fragment shader\r\n */\r\nexport class LightBlock extends NodeMaterialBlock {\r\n private _lightId: number = 0;\r\n\r\n /**\r\n * Gets or sets the light associated with this block\r\n */\r\n public light: Nullable<Light>;\r\n\r\n /** Indicates that no code should be generated in the vertex shader. Can be useful in some specific circumstances (like when doing ray marching for eg) */\r\n @editableInPropertyPage(\"Generate only fragment code\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: { rebuild: true, update: true, onValidation: LightBlock._OnGenerateOnlyFragmentCodeChanged },\r\n })\r\n public generateOnlyFragmentCode = false;\r\n\r\n private static _OnGenerateOnlyFragmentCodeChanged(block: NodeMaterialBlock, _propertyName: string): boolean {\r\n const that = block as LightBlock;\r\n\r\n if (that.worldPosition.isConnected) {\r\n that.generateOnlyFragmentCode = !that.generateOnlyFragmentCode;\r\n Logger.Error(\"The worldPosition input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n that._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n private _setTarget(): void {\r\n this._setInitialTarget(this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.VertexAndFragment);\r\n this.getInputByName(\"worldPosition\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n }\r\n\r\n /**\r\n * Create a new LightBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"cameraPosition\", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"glossiness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"glossPower\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"diffuseColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"specularColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n this.registerOutput(\"diffuseOutput\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"specularOutput\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"shadow\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"LightBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public get cameraPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the glossiness component\r\n */\r\n public get glossiness(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the glossiness power component\r\n */\r\n public get glossPower(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the diffuse color component\r\n */\r\n public get diffuseColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the specular color component\r\n */\r\n public get specularColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the view matrix component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the diffuse output component\r\n */\r\n public get diffuseOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the specular output component\r\n */\r\n public get specularOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the shadow output component\r\n */\r\n public get shadow(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Initialize the block\r\n * @param state - the build state\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n\r\n state._excludeVariableName(\"vViewDepth\");\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightFragment\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightUboDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightVxUboDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/lightsFragmentFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/shadowsFragmentFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/shadowsVertex\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/lightFragmentDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightFragment\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightUboDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightVxUboDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightVxFragmentDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/helperFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/lightsFragmentFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/shadowsFragmentFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/shadowsVertex\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Auto configure the block based on the material\r\n * @param material - the node material\r\n * @param additionalFilteringInfo - optional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.cameraPosition.isConnected) {\r\n let cameraPositionInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.CameraPosition && additionalFilteringInfo(b));\r\n\r\n if (!cameraPositionInput) {\r\n cameraPositionInput = new InputBlock(\"cameraPosition\");\r\n cameraPositionInput.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);\r\n }\r\n cameraPositionInput.output.connectTo(this.cameraPosition);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to prepare for\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh) {\r\n if (!mesh || !defines._areLightsDirty) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n\r\n if (!this.light) {\r\n PrepareDefinesForLights(scene, mesh, defines, true, nodeMaterial.maxSimultaneousLights);\r\n } else {\r\n const state = {\r\n needNormals: false,\r\n needRebuild: false,\r\n lightmapMode: false,\r\n shadowEnabled: false,\r\n specularEnabled: false,\r\n };\r\n\r\n PrepareDefinesForLight(scene, mesh, this.light, this._lightId, defines, true, state);\r\n\r\n if (state.needRebuild) {\r\n defines.rebuild();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update the uniforms and samples\r\n * @param state - the build state\r\n * @param nodeMaterial - the node material\r\n * @param defines - the material defines\r\n * @param uniformBuffers - the uniform buffers\r\n */\r\n public override updateUniformsAndSamples(state: NodeMaterialBuildState, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines, uniformBuffers: string[]) {\r\n state.samplers.push(\"areaLightsLTC1Sampler\");\r\n state.samplers.push(\"areaLightsLTC2Sampler\");\r\n for (let lightIndex = 0; lightIndex < nodeMaterial.maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n const onlyUpdateBuffersList = state.uniforms.indexOf(\"vLightData\" + lightIndex) >= 0;\r\n PrepareUniformsAndSamplersForLight(\r\n lightIndex,\r\n state.uniforms,\r\n state.samplers,\r\n defines[\"PROJECTEDLIGHTTEXTURE\" + lightIndex],\r\n uniformBuffers,\r\n onlyUpdateBuffersList,\r\n defines[\"IESLIGHTTEXTURE\" + lightIndex],\r\n defines[\"CLUSTLIGHT\" + lightIndex],\r\n defines[\"RECTAREALIGHTEMISSIONTEXTURE\" + lightIndex]\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n\r\n if (!this.light) {\r\n BindLights(scene, mesh, effect, true, nodeMaterial.maxSimultaneousLights);\r\n } else {\r\n BindLight(this.light, this._lightId, scene, effect, true);\r\n }\r\n }\r\n\r\n private _injectVertexCode(state: NodeMaterialBuildState) {\r\n const worldPos = this.worldPosition;\r\n const comments = `//${this.name}`;\r\n const scene = state.sharedData.nodeMaterial.getScene();\r\n\r\n // Declaration\r\n if (!this.light) {\r\n // Emit for all lights\r\n state._emitFunctionFromInclude(state.supportUniformBuffers ? \"lightVxUboDeclaration\" : \"lightVxFragmentDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n });\r\n this._lightId = 0;\r\n\r\n state.sharedData.dynamicUniformBlocks.push(this);\r\n } else {\r\n this._lightId = (state.counters[\"lightCounter\"] !== undefined ? state.counters[\"lightCounter\"] : -1) + 1;\r\n state.counters[\"lightCounter\"] = this._lightId;\r\n\r\n state._emitFunctionFromInclude(\r\n state.supportUniformBuffers ? \"lightVxUboDeclaration\" : \"lightVxFragmentDeclaration\",\r\n comments,\r\n {\r\n replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }],\r\n },\r\n this._lightId.toString()\r\n );\r\n }\r\n\r\n // Inject code in vertex\r\n const worldPosVaryingName = \"v_\" + worldPos.associatedVariableName;\r\n\r\n if (state._emitVaryingFromString(worldPosVaryingName, NodeMaterialBlockConnectionPointTypes.Vector4)) {\r\n state.compilationString += (state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\") + `${worldPosVaryingName} = ${worldPos.associatedVariableName};\\n`;\r\n }\r\n\r\n if (this.light) {\r\n state.compilationString += state._emitCodeFromInclude(\"shadowsVertex\", comments, {\r\n replaceStrings: [\r\n { search: /{X}/g, replace: this._lightId.toString() },\r\n { search: /worldPos/g, replace: worldPos.associatedVariableName },\r\n ],\r\n });\r\n } else {\r\n state.compilationString += `${state._declareLocalVar(\"worldPos\", NodeMaterialBlockConnectionPointTypes.Vector4)} = ${worldPos.associatedVariableName};\\n`;\r\n if (this.view.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix)} = ${this.view.associatedVariableName};\\n`;\r\n state._emitVaryingFromString(\"vViewDepth\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state.compilationString +=\r\n (state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\") +\r\n `vViewDepth = ${scene.useRightHandedSystem ? \"-\" : \"\"}(${this.view.associatedVariableName} * ${worldPos.associatedVariableName}).z;\\n`;\r\n }\r\n state.compilationString += state._emitCodeFromInclude(\"shadowsVertex\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n });\r\n }\r\n }\r\n\r\n private _injectUBODeclaration(state: NodeMaterialBuildState) {\r\n const comments = `//${this.name}`;\r\n\r\n if (!this.light) {\r\n // Emit for all lights\r\n state._emitFunctionFromInclude(state.supportUniformBuffers ? \"lightUboDeclaration\" : \"lightFragmentDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n substitutionVars: this.generateOnlyFragmentCode ? \"varying,\" : undefined,\r\n });\r\n } else {\r\n state._emitFunctionFromInclude(\r\n state.supportUniformBuffers ? \"lightUboDeclaration\" : \"lightFragmentDeclaration\",\r\n comments,\r\n {\r\n replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }],\r\n },\r\n this._lightId.toString()\r\n );\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const isWGSL = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const addF = isWGSL ? \"f\" : \"\";\r\n\r\n const comments = `//${this.name}`;\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n // Vertex\r\n this._injectVertexCode(state); // won't be executed if this.generateOnlyFragmentCode is true\r\n return;\r\n }\r\n\r\n if (this.generateOnlyFragmentCode) {\r\n state.sharedData.dynamicUniformBlocks.push(this);\r\n }\r\n // Fragment\r\n const accessor = isWGSL ? \"fragmentInputs.\" : \"\";\r\n state.sharedData.forcedBindableBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n const worldPos = this.worldPosition;\r\n\r\n let worldPosVariableName = worldPos.associatedVariableName;\r\n if (this.generateOnlyFragmentCode) {\r\n worldPosVariableName = state._getFreeVariableName(\"globalWorldPos\");\r\n state._emitFunction(\"light_globalworldpos\", `${state._declareLocalVar(worldPosVariableName, NodeMaterialBlockConnectionPointTypes.Vector3, false, true)};\\n`, comments);\r\n state.compilationString += `${worldPosVariableName} = ${worldPos.associatedVariableName}.xyz;\\n`;\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"shadowsVertex\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n substitutionVars: `worldPos,${worldPos.associatedVariableName}`,\r\n });\r\n } else {\r\n worldPosVariableName = accessor + \"v_\" + worldPosVariableName + \".xyz\";\r\n }\r\n\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n let replaceString = { search: /vPositionW/g, replace: worldPosVariableName };\r\n\r\n if (isWGSL) {\r\n replaceString = { search: /fragmentInputs\\.vPositionW/g, replace: worldPosVariableName };\r\n }\r\n\r\n state._emitFunctionFromInclude(\"lightsFragmentFunctions\", comments, {\r\n replaceStrings: [replaceString],\r\n });\r\n\r\n state._emitFunctionFromInclude(\"shadowsFragmentFunctions\", comments, {\r\n replaceStrings: [replaceString],\r\n });\r\n\r\n this._injectUBODeclaration(state);\r\n\r\n // Code\r\n if (this._lightId === 0) {\r\n if (state._registerTempVariable(\"viewDirectionW\")) {\r\n state.compilationString += `${state._declareLocalVar(\"viewDirectionW\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${this.cameraPosition.associatedVariableName} - ${worldPosVariableName});\\n`;\r\n }\r\n if (this.generateOnlyFragmentCode && this.view.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"vViewDepth\", NodeMaterialBlockConnectionPointTypes.Float)} = (${this.view.associatedVariableName} * ${worldPos.associatedVariableName}).z;\\n`;\r\n }\r\n\r\n state.compilationString += isWGSL ? `var info: lightingInfo;\\n` : `lightingInfo info;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"shadow\", NodeMaterialBlockConnectionPointTypes.Float)} = 1.;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"aggShadow\", NodeMaterialBlockConnectionPointTypes.Float)} = 0.;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"numLights\", NodeMaterialBlockConnectionPointTypes.Float)} = 0.;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"glossiness\", NodeMaterialBlockConnectionPointTypes.Float)} = ${this.glossiness.isConnected ? this.glossiness.associatedVariableName : \"1.0\"} * ${\r\n this.glossPower.isConnected ? this.glossPower.associatedVariableName : \"1024.0\"\r\n };\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"diffuseBase\", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3${addF}(0., 0., 0.);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"specularBase\", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3${addF}(0., 0., 0.);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"normalW\", NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.worldNormal.associatedVariableName}.xyz;\\n`;\r\n }\r\n\r\n if (this.light) {\r\n let replaceString = [{ search: /vPositionW/g, replace: worldPosVariableName + \".xyz\" }];\r\n\r\n if (isWGSL) {\r\n replaceString = [\r\n { search: /fragmentInputs\\.vPositionW/g, replace: worldPosVariableName + \".xyz\" },\r\n { search: /uniforms\\.vReflectivityColor/g, replace: \"vReflectivityColor\" },\r\n ];\r\n }\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"lightFragment\", comments, {\r\n replaceStrings: [{ search: /{X}/g, replace: this._lightId.toString() }, ...replaceString],\r\n });\r\n } else {\r\n let substitutionVars = `vPositionW,${worldPosVariableName}.xyz`;\r\n\r\n if (isWGSL) {\r\n substitutionVars = `fragmentInputs.vPositionW,${worldPosVariableName}.xyz`;\r\n if (this.generateOnlyFragmentCode) {\r\n substitutionVars += `,fragmentInputs.vViewDepth,vViewDepth`;\r\n }\r\n }\r\n state.compilationString += state._emitCodeFromInclude(\"lightFragment\", comments, {\r\n repeatKey: \"maxSimultaneousLights\",\r\n substitutionVars: substitutionVars,\r\n });\r\n }\r\n\r\n if (this._lightId === 0) {\r\n state.compilationString += `aggShadow = aggShadow / numLights;\\n`;\r\n }\r\n\r\n const diffuseOutput = this.diffuseOutput;\r\n const specularOutput = this.specularOutput;\r\n\r\n state.compilationString +=\r\n state._declareOutput(diffuseOutput) + ` = diffuseBase${this.diffuseColor.isConnected ? \" * \" + this.diffuseColor.associatedVariableName : \"\"};\\n`;\r\n if (specularOutput.hasEndpoints) {\r\n state.compilationString +=\r\n state._declareOutput(specularOutput) + ` = specularBase${this.specularColor.isConnected ? \" * \" + this.specularColor.associatedVariableName : \"\"};\\n`;\r\n }\r\n\r\n if (this.shadow.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.shadow) + ` = aggShadow;\\n`;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.generateOnlyFragmentCode = this.generateOnlyFragmentCode;\r\n\r\n if (this.light) {\r\n serializationObject.lightId = this.light.id;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.lightId) {\r\n this.light = scene.getLightById(serializationObject.lightId);\r\n }\r\n\r\n this.generateOnlyFragmentCode = serializationObject.generateOnlyFragmentCode;\r\n\r\n this._setTarget();\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.LightBlock\", LightBlock);\r\n"]}
@@ -100,6 +100,10 @@ export declare abstract class ReflectionTextureBaseBlock extends NodeMaterialBlo
100
100
  */
101
101
  abstract get view(): NodeMaterialConnectionPoint;
102
102
  protected _getTexture(): Nullable<BaseTexture>;
103
+ /**
104
+ * Initialize the block
105
+ * @param state - the build state
106
+ */
103
107
  initialize(state: NodeMaterialBuildState): void;
104
108
  private _initShaderSourceAsync;
105
109
  /**
@@ -108,8 +112,23 @@ export declare abstract class ReflectionTextureBaseBlock extends NodeMaterialBlo
108
112
  * @param additionalFilteringInfo defines additional info to be used when filtering inputs (we might want to skip some non relevant blocks)
109
113
  */
110
114
  autoConfigure(material: NodeMaterial, additionalFilteringInfo?: (node: NodeMaterialBlock) => boolean): void;
115
+ /**
116
+ * Prepare the list of defines
117
+ * @param defines - the material defines
118
+ */
111
119
  prepareDefines(defines: NodeMaterialDefines): void;
120
+ /**
121
+ * Checks if the block is ready
122
+ * @returns true if ready
123
+ */
112
124
  isReady(): boolean;
125
+ /**
126
+ * Bind data to effect
127
+ * @param effect - the effect to bind to
128
+ * @param nodeMaterial - the node material
129
+ * @param mesh - the mesh to bind for
130
+ * @param _subMesh - the submesh
131
+ */
113
132
  bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, _subMesh?: SubMesh): void;
114
133
  /**
115
134
  * Gets the code to inject in the vertex shader
@@ -149,6 +168,16 @@ export declare abstract class ReflectionTextureBaseBlock extends NodeMaterialBlo
149
168
  writeOutputs(state: NodeMaterialBuildState, varName: string): string;
150
169
  protected _buildBlock(state: NodeMaterialBuildState): this;
151
170
  protected _dumpPropertiesCode(): string;
171
+ /**
172
+ * Serializes the block
173
+ * @returns the serialized object
174
+ */
152
175
  serialize(): any;
176
+ /**
177
+ * Deserializes the block
178
+ * @param serializationObject - the serialization object
179
+ * @param scene - the scene
180
+ * @param rootUrl - the root url
181
+ */
153
182
  _deserialize(serializationObject: any, scene: Scene, rootUrl: string): void;
154
183
  }
@@ -68,6 +68,10 @@ export class ReflectionTextureBaseBlock extends NodeMaterialBlock {
68
68
  _getTexture() {
69
69
  return this.texture;
70
70
  }
71
+ /**
72
+ * Initialize the block
73
+ * @param state - the build state
74
+ */
71
75
  initialize(state) {
72
76
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
73
77
  this._initShaderSourceAsync(state.shaderLanguage);
@@ -114,6 +118,10 @@ export class ReflectionTextureBaseBlock extends NodeMaterialBlock {
114
118
  viewInput.output.connectTo(this.view);
115
119
  }
116
120
  }
121
+ /**
122
+ * Prepare the list of defines
123
+ * @param defines - the material defines
124
+ */
117
125
  prepareDefines(defines) {
118
126
  if (!defines._areTexturesDirty) {
119
127
  return;
@@ -135,6 +143,10 @@ export class ReflectionTextureBaseBlock extends NodeMaterialBlock {
135
143
  defines.setValue(this._defineEquirectangularFixedName, texture.coordinatesMode === 8, true);
136
144
  defines.setValue(this._defineMirroredEquirectangularFixedName, texture.coordinatesMode === 9, true);
137
145
  }
146
+ /**
147
+ * Checks if the block is ready
148
+ * @returns true if ready
149
+ */
138
150
  isReady() {
139
151
  const texture = this._getTexture();
140
152
  if (texture && !texture.isReadyOrNotBlocking()) {
@@ -142,6 +154,13 @@ export class ReflectionTextureBaseBlock extends NodeMaterialBlock {
142
154
  }
143
155
  return true;
144
156
  }
157
+ /**
158
+ * Bind data to effect
159
+ * @param effect - the effect to bind to
160
+ * @param nodeMaterial - the node material
161
+ * @param mesh - the mesh to bind for
162
+ * @param _subMesh - the submesh
163
+ */
145
164
  bind(effect, nodeMaterial, mesh, _subMesh) {
146
165
  const texture = this._getTexture();
147
166
  if (!mesh || !texture) {
@@ -403,6 +422,10 @@ export class ReflectionTextureBaseBlock extends NodeMaterialBlock {
403
422
  codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\n`;
404
423
  return codeString;
405
424
  }
425
+ /**
426
+ * Serializes the block
427
+ * @returns the serialized object
428
+ */
406
429
  serialize() {
407
430
  const serializationObject = super.serialize();
408
431
  if (this.texture && !this.texture.isRenderTarget) {
@@ -411,6 +434,12 @@ export class ReflectionTextureBaseBlock extends NodeMaterialBlock {
411
434
  serializationObject.generateOnlyFragmentCode = this.generateOnlyFragmentCode;
412
435
  return serializationObject;
413
436
  }
437
+ /**
438
+ * Deserializes the block
439
+ * @param serializationObject - the serialization object
440
+ * @param scene - the scene
441
+ * @param rootUrl - the root url
442
+ */
414
443
  _deserialize(serializationObject, scene, rootUrl) {
415
444
  super._deserialize(serializationObject, scene, rootUrl);
416
445
  if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {