@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
@@ -100,7 +100,18 @@ export declare class ReflectionBlock extends ReflectionTextureBaseBlock {
100
100
  */
101
101
  get reflectionColor(): string;
102
102
  protected _getTexture(): Nullable<BaseTexture>;
103
+ /**
104
+ * Prepare the list of defines
105
+ * @param defines - the list of defines to update
106
+ */
103
107
  prepareDefines(defines: NodeMaterialDefines): void;
108
+ /**
109
+ * Bind data to effect
110
+ * @param effect - the effect to bind data to
111
+ * @param nodeMaterial - the node material
112
+ * @param mesh - the mesh to bind data for
113
+ * @param subMesh - the submesh to bind data for
114
+ */
104
115
  bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh): void;
105
116
  /**
106
117
  * Gets the code to inject in the vertex shader
@@ -117,6 +128,16 @@ export declare class ReflectionBlock extends ReflectionTextureBaseBlock {
117
128
  getCode(state: NodeMaterialBuildState, normalVarName: string): string;
118
129
  protected _buildBlock(state: NodeMaterialBuildState): this;
119
130
  protected _dumpPropertiesCode(): string;
131
+ /**
132
+ * Serializes the block
133
+ * @returns the serialized object
134
+ */
120
135
  serialize(): any;
136
+ /**
137
+ * Deserializes the block
138
+ * @param serializationObject - the object to deserialize from
139
+ * @param scene - the scene to deserialize in
140
+ * @param rootUrl - the root URL for assets
141
+ */
121
142
  _deserialize(serializationObject: any, scene: Scene, rootUrl: string): void;
122
143
  }
@@ -122,6 +122,10 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
122
122
  }
123
123
  return this._scene.environmentTexture;
124
124
  }
125
+ /**
126
+ * Prepare the list of defines
127
+ * @param defines - the list of defines to update
128
+ */
125
129
  prepareDefines(defines) {
126
130
  super.prepareDefines(defines);
127
131
  const reflectionTexture = this._getTexture();
@@ -149,6 +153,13 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
149
153
  }
150
154
  }
151
155
  }
156
+ /**
157
+ * Bind data to effect
158
+ * @param effect - the effect to bind data to
159
+ * @param nodeMaterial - the node material
160
+ * @param mesh - the mesh to bind data for
161
+ * @param subMesh - the submesh to bind data for
162
+ */
152
163
  bind(effect, nodeMaterial, mesh, subMesh) {
153
164
  super.bind(effect, nodeMaterial, mesh);
154
165
  const reflectionTexture = this._getTexture();
@@ -371,6 +382,10 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
371
382
  codeString += `${this._codeVariableName}.forceIrradianceInFragment = ${this.forceIrradianceInFragment};\n`;
372
383
  return codeString;
373
384
  }
385
+ /**
386
+ * Serializes the block
387
+ * @returns the serialized object
388
+ */
374
389
  serialize() {
375
390
  const serializationObject = super.serialize();
376
391
  serializationObject.useSphericalHarmonics = this.useSphericalHarmonics;
@@ -378,6 +393,12 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
378
393
  serializationObject.gammaSpace = this.texture?.gammaSpace ?? true;
379
394
  return serializationObject;
380
395
  }
396
+ /**
397
+ * Deserializes the block
398
+ * @param serializationObject - the object to deserialize from
399
+ * @param scene - the scene to deserialize in
400
+ * @param rootUrl - the root URL for assets
401
+ */
381
402
  _deserialize(serializationObject, scene, rootUrl) {
382
403
  super._deserialize(serializationObject, scene, rootUrl);
383
404
  this.useSphericalHarmonics = serializationObject.useSphericalHarmonics;
@@ -1 +1 @@
1
- {"version":3,"file":"reflectionBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/reflectionBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { ReflectionTextureBaseBlock } from \"../Dual/reflectionTextureBaseBlock\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { SubMesh } from \"../../../../Meshes/subMesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the reflection module of the PBR material\r\n */\r\nexport class ReflectionBlock extends ReflectionTextureBaseBlock {\r\n /** @internal */\r\n public _defineLODReflectionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularReflection: string;\r\n private _vEnvironmentIrradianceName: string;\r\n /** @internal */\r\n public _vReflectionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vReflectionInfosName: string;\r\n /** @internal */\r\n public _vReflectionFilteringInfoName: string;\r\n private _scene: Scene;\r\n private _iblIntensityName: string;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public cameraPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Defines if the material uses spherical harmonics vs spherical polynomials for the\r\n * diffuse part of the IBL.\r\n */\r\n @editableInPropertyPage(\"Spherical Harmonics\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public useSphericalHarmonics: boolean = true;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n */\r\n @editableInPropertyPage(\"Force irradiance in fragment\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected override _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n Logger.Error(\"The position input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n this._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n protected override _setTarget(): void {\r\n super._setTarget();\r\n this.getInputByName(\"position\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n if (this.generateOnlyFragmentCode) {\r\n this.forceIrradianceInFragment = true;\r\n }\r\n }\r\n\r\n /**\r\n * Create a new ReflectionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"reflection\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"reflection\", this, NodeMaterialConnectionPointDirection.Output, ReflectionBlock, \"ReflectionBlock\")\r\n );\r\n\r\n this.position.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\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 \"ReflectionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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.worldPositionConnectionPoint;\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.worldNormalConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public get world(): 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.cameraPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the reflection object output component\r\n */\r\n public get reflection(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture (either its own texture or the environment texture from the scene, if set)\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n /**\r\n * Gets the reflection color (either the name of the variable if the color input is connected, else a default value)\r\n */\r\n public get reflectionColor(): string {\r\n return this.color.isConnected ? this.color.associatedVariableName : \"vec3(1., 1., 1.)\";\r\n }\r\n\r\n protected override _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n super.prepareDefines(defines);\r\n\r\n const reflectionTexture = this._getTexture();\r\n const reflection = reflectionTexture && reflectionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"REFLECTION\", reflection, true);\r\n\r\n if (!reflection) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._defineLODReflectionAlpha, reflectionTexture.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularReflection, reflectionTexture.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem ? !reflectionTexture.invertZ : reflectionTexture.invertZ, true);\r\n\r\n defines.setValue(\"SPHERICAL_HARMONICS\", this.useSphericalHarmonics, true);\r\n defines.setValue(\"GAMMAREFLECTION\", reflectionTexture.gammaSpace, true);\r\n defines.setValue(\"RGBDREFLECTION\", reflectionTexture.isRGBD, true);\r\n\r\n if (reflectionTexture && reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {\r\n if (reflectionTexture.isCube) {\r\n defines.setValue(\"USESPHERICALFROMREFLECTIONMAP\", true);\r\n defines.setValue(\"USEIRRADIANCEMAP\", false);\r\n if (this.forceIrradianceInFragment || this._scene.getEngine().getCaps().maxVaryingVectors <= 8) {\r\n defines.setValue(\"USESPHERICALINVERTEX\", false);\r\n } else {\r\n defines.setValue(\"USESPHERICALINVERTEX\", true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const reflectionTexture = this._getTexture();\r\n\r\n if (!reflectionTexture || !subMesh) {\r\n return;\r\n }\r\n\r\n if (reflectionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, reflectionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, reflectionTexture);\r\n }\r\n\r\n effect.setFloat(this._iblIntensityName, this._scene.iblIntensity * reflectionTexture.level);\r\n\r\n const width = reflectionTexture.getSize().width;\r\n\r\n effect.setFloat3(this._vReflectionMicrosurfaceInfosName, width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);\r\n effect.setFloat2(this._vReflectionFilteringInfoName, width, Math.log2(width));\r\n\r\n const defines = subMesh.materialDefines as NodeMaterialDefines;\r\n\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n effect.setVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n effect.setVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n effect.setVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n effect.setVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n effect.setVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n effect.setVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n effect.setVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n effect.setVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n effect.setVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n effect.setFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n effect.setFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n effect.setFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n effect.setFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n effect.setFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n effect.setFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public override handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n const reflectionVectorName = state._getFreeVariableName(\"reflectionVector\");\r\n\r\n this._vEnvironmentIrradianceName = state._getFreeVariableName(\"vEnvironmentIrradiance\");\r\n\r\n state._emitVaryingFromString(\r\n this._vEnvironmentIrradianceName,\r\n NodeMaterialBlockConnectionPointTypes.Vector3,\r\n \"defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\"\r\n );\r\n\r\n state._emitUniformFromString(\"vSphericalL00\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL1_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL10\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL11\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_2\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL20\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL21\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL22\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n\r\n state._emitUniformFromString(\"vSphericalX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXX_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYY_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n\r\n code += `#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\r\n ${state._declareLocalVar(reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = (${(isWebGPU ? \"uniforms.\" : \"\") + this._reflectionMatrixName} * vec4${state.fSuffix}(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param normalVarName name of the existing variable corresponding to the normal\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, normalVarName: string): string {\r\n let code = \"\";\r\n\r\n this.handleFragmentSideInits(state);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n if (!isWebGPU) {\r\n state._emitFunction(\r\n \"sampleReflection\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflection(s, c) textureCube(s, c)\r\n #else\r\n #define sampleReflection(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleReflectionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflectionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleReflectionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n const computeReflectionCoordsFunc = isWebGPU\r\n ? `\r\n fn computeReflectionCoordsPBR(worldPos: vec4f, worldNormal: vec3f) -> vec3f {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\n`\r\n : `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\n`;\r\n\r\n state._emitFunction(\"computeReflectionCoordsPBR\", computeReflectionCoordsFunc, `//${this.name}`);\r\n\r\n this._vReflectionMicrosurfaceInfosName = state._getFreeVariableName(\"vReflectionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vReflectionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._vReflectionInfosName = state._getFreeVariableName(\"vReflectionInfos\");\r\n\r\n this._vReflectionFilteringInfoName = state._getFreeVariableName(\"vReflectionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vReflectionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._iblIntensityName = state._getFreeVariableName(\"iblIntensity\");\r\n\r\n state._emitUniformFromString(this._iblIntensityName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n code += `#ifdef REFLECTION\r\n ${state._declareLocalVar(this._vReflectionInfosName, NodeMaterialBlockConnectionPointTypes.Vector2)} = vec2${state.fSuffix}(${(isWebGPU ? \"uniforms.\" : \"\") + this._iblIntensityName}, 0.);\r\n\r\n ${isWebGPU ? \"var reflectionOut: reflectionOutParams\" : \"reflectionOutParams reflectionOut\"};\r\n\r\n reflectionOut = reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : (isWebGPU ? \"input.\" : \"\") + \"v_\" + this.worldPosition.associatedVariableName}.xyz\r\n , ${normalVarName}\r\n , alphaG\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + this._vReflectionMicrosurfaceInfosName}\r\n , ${this._vReflectionInfosName}\r\n , ${this.reflectionColor}\r\n #ifdef ANISOTROPIC\r\n ,anisotropicOut\r\n #endif\r\n #if defined(${this._defineLODReflectionAlpha}) && !defined(${this._defineSkyboxName})\r\n ,NdotVUnclamped\r\n #endif\r\n #ifdef ${this._defineLinearSpecularReflection}\r\n , roughness\r\n #endif\r\n #ifdef ${this._define3DName}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n , ${isWebGPU ? \"input.\" : \"\"}${this._vEnvironmentIrradianceName}\r\n #endif\r\n #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))\r\n , ${this._reflectionMatrixName}\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n , irradianceSampler // ** not handled **\r\n ${isWebGPU ? `, irradianceSamplerSampler` : \"\"}\r\n #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION\r\n , vReflectionDominantDirection\r\n #endif\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n , ${this._2DSamplerName} \r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n , ${this._vReflectionFilteringInfoName}\r\n #ifdef IBL_CDF_FILTERING\r\n , icdfSampler // ** not handled **\r\n ${isWebGPU ? `, icdfSamplerSampler` : \"\"}\r\n #endif\r\n #endif\r\n , viewDirectionW\r\n , diffuseRoughness\r\n , surfaceAlbedo\r\n );\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n this._defineLODReflectionAlpha = state._getFreeDefineName(\"LODINREFLECTIONALPHA\");\r\n this._defineLinearSpecularReflection = state._getFreeDefineName(\"LINEARSPECULARREFLECTION\");\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n codeString += `${this._codeVariableName}.texture.gammaSpace = ${this.texture.gammaSpace};\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.useSphericalHarmonics = ${this.useSphericalHarmonics};\\n`;\r\n codeString += `${this._codeVariableName}.forceIrradianceInFragment = ${this.forceIrradianceInFragment};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.useSphericalHarmonics = this.useSphericalHarmonics;\r\n serializationObject.forceIrradianceInFragment = this.forceIrradianceInFragment;\r\n serializationObject.gammaSpace = this.texture?.gammaSpace ?? true;\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 this.useSphericalHarmonics = serializationObject.useSphericalHarmonics;\r\n this.forceIrradianceInFragment = serializationObject.forceIrradianceInFragment;\r\n if (this.texture) {\r\n this.texture.gammaSpace = serializationObject.gammaSpace;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ReflectionBlock\", ReflectionBlock);\r\n"]}
1
+ {"version":3,"file":"reflectionBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/reflectionBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { ReflectionTextureBaseBlock } from \"../Dual/reflectionTextureBaseBlock\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { SubMesh } from \"../../../../Meshes/subMesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the reflection module of the PBR material\r\n */\r\nexport class ReflectionBlock extends ReflectionTextureBaseBlock {\r\n /** @internal */\r\n public _defineLODReflectionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularReflection: string;\r\n private _vEnvironmentIrradianceName: string;\r\n /** @internal */\r\n public _vReflectionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vReflectionInfosName: string;\r\n /** @internal */\r\n public _vReflectionFilteringInfoName: string;\r\n private _scene: Scene;\r\n private _iblIntensityName: string;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public cameraPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Defines if the material uses spherical harmonics vs spherical polynomials for the\r\n * diffuse part of the IBL.\r\n */\r\n @editableInPropertyPage(\"Spherical Harmonics\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public useSphericalHarmonics: boolean = true;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n */\r\n @editableInPropertyPage(\"Force irradiance in fragment\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected override _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n Logger.Error(\"The position input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n this._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n protected override _setTarget(): void {\r\n super._setTarget();\r\n this.getInputByName(\"position\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n if (this.generateOnlyFragmentCode) {\r\n this.forceIrradianceInFragment = true;\r\n }\r\n }\r\n\r\n /**\r\n * Create a new ReflectionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"reflection\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"reflection\", this, NodeMaterialConnectionPointDirection.Output, ReflectionBlock, \"ReflectionBlock\")\r\n );\r\n\r\n this.position.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\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 \"ReflectionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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.worldPositionConnectionPoint;\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.worldNormalConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public get world(): 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.cameraPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the reflection object output component\r\n */\r\n public get reflection(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture (either its own texture or the environment texture from the scene, if set)\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n /**\r\n * Gets the reflection color (either the name of the variable if the color input is connected, else a default value)\r\n */\r\n public get reflectionColor(): string {\r\n return this.color.isConnected ? this.color.associatedVariableName : \"vec3(1., 1., 1.)\";\r\n }\r\n\r\n protected override _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the list of defines to update\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n super.prepareDefines(defines);\r\n\r\n const reflectionTexture = this._getTexture();\r\n const reflection = reflectionTexture && reflectionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"REFLECTION\", reflection, true);\r\n\r\n if (!reflection) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._defineLODReflectionAlpha, reflectionTexture.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularReflection, reflectionTexture.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem ? !reflectionTexture.invertZ : reflectionTexture.invertZ, true);\r\n\r\n defines.setValue(\"SPHERICAL_HARMONICS\", this.useSphericalHarmonics, true);\r\n defines.setValue(\"GAMMAREFLECTION\", reflectionTexture.gammaSpace, true);\r\n defines.setValue(\"RGBDREFLECTION\", reflectionTexture.isRGBD, true);\r\n\r\n if (reflectionTexture && reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {\r\n if (reflectionTexture.isCube) {\r\n defines.setValue(\"USESPHERICALFROMREFLECTIONMAP\", true);\r\n defines.setValue(\"USEIRRADIANCEMAP\", false);\r\n if (this.forceIrradianceInFragment || this._scene.getEngine().getCaps().maxVaryingVectors <= 8) {\r\n defines.setValue(\"USESPHERICALINVERTEX\", false);\r\n } else {\r\n defines.setValue(\"USESPHERICALINVERTEX\", true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind data to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind data for\r\n * @param subMesh - the submesh to bind data for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const reflectionTexture = this._getTexture();\r\n\r\n if (!reflectionTexture || !subMesh) {\r\n return;\r\n }\r\n\r\n if (reflectionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, reflectionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, reflectionTexture);\r\n }\r\n\r\n effect.setFloat(this._iblIntensityName, this._scene.iblIntensity * reflectionTexture.level);\r\n\r\n const width = reflectionTexture.getSize().width;\r\n\r\n effect.setFloat3(this._vReflectionMicrosurfaceInfosName, width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);\r\n effect.setFloat2(this._vReflectionFilteringInfoName, width, Math.log2(width));\r\n\r\n const defines = subMesh.materialDefines as NodeMaterialDefines;\r\n\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n effect.setVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n effect.setVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n effect.setVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n effect.setVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n effect.setVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n effect.setVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n effect.setVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n effect.setVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n effect.setVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n effect.setFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n effect.setFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n effect.setFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n effect.setFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n effect.setFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n effect.setFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public override handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n const reflectionVectorName = state._getFreeVariableName(\"reflectionVector\");\r\n\r\n this._vEnvironmentIrradianceName = state._getFreeVariableName(\"vEnvironmentIrradiance\");\r\n\r\n state._emitVaryingFromString(\r\n this._vEnvironmentIrradianceName,\r\n NodeMaterialBlockConnectionPointTypes.Vector3,\r\n \"defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\"\r\n );\r\n\r\n state._emitUniformFromString(\"vSphericalL00\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL1_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL10\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL11\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_2\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL20\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL21\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL22\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n\r\n state._emitUniformFromString(\"vSphericalX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXX_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYY_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n\r\n code += `#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\r\n ${state._declareLocalVar(reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = (${(isWebGPU ? \"uniforms.\" : \"\") + this._reflectionMatrixName} * vec4${state.fSuffix}(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param normalVarName name of the existing variable corresponding to the normal\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, normalVarName: string): string {\r\n let code = \"\";\r\n\r\n this.handleFragmentSideInits(state);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n if (!isWebGPU) {\r\n state._emitFunction(\r\n \"sampleReflection\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflection(s, c) textureCube(s, c)\r\n #else\r\n #define sampleReflection(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleReflectionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflectionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleReflectionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n const computeReflectionCoordsFunc = isWebGPU\r\n ? `\r\n fn computeReflectionCoordsPBR(worldPos: vec4f, worldNormal: vec3f) -> vec3f {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\n`\r\n : `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\n`;\r\n\r\n state._emitFunction(\"computeReflectionCoordsPBR\", computeReflectionCoordsFunc, `//${this.name}`);\r\n\r\n this._vReflectionMicrosurfaceInfosName = state._getFreeVariableName(\"vReflectionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vReflectionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._vReflectionInfosName = state._getFreeVariableName(\"vReflectionInfos\");\r\n\r\n this._vReflectionFilteringInfoName = state._getFreeVariableName(\"vReflectionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vReflectionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._iblIntensityName = state._getFreeVariableName(\"iblIntensity\");\r\n\r\n state._emitUniformFromString(this._iblIntensityName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n code += `#ifdef REFLECTION\r\n ${state._declareLocalVar(this._vReflectionInfosName, NodeMaterialBlockConnectionPointTypes.Vector2)} = vec2${state.fSuffix}(${(isWebGPU ? \"uniforms.\" : \"\") + this._iblIntensityName}, 0.);\r\n\r\n ${isWebGPU ? \"var reflectionOut: reflectionOutParams\" : \"reflectionOutParams reflectionOut\"};\r\n\r\n reflectionOut = reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : (isWebGPU ? \"input.\" : \"\") + \"v_\" + this.worldPosition.associatedVariableName}.xyz\r\n , ${normalVarName}\r\n , alphaG\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + this._vReflectionMicrosurfaceInfosName}\r\n , ${this._vReflectionInfosName}\r\n , ${this.reflectionColor}\r\n #ifdef ANISOTROPIC\r\n ,anisotropicOut\r\n #endif\r\n #if defined(${this._defineLODReflectionAlpha}) && !defined(${this._defineSkyboxName})\r\n ,NdotVUnclamped\r\n #endif\r\n #ifdef ${this._defineLinearSpecularReflection}\r\n , roughness\r\n #endif\r\n #ifdef ${this._define3DName}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n , ${isWebGPU ? \"input.\" : \"\"}${this._vEnvironmentIrradianceName}\r\n #endif\r\n #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))\r\n , ${this._reflectionMatrixName}\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n , irradianceSampler // ** not handled **\r\n ${isWebGPU ? `, irradianceSamplerSampler` : \"\"}\r\n #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION\r\n , vReflectionDominantDirection\r\n #endif\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n , ${this._2DSamplerName} \r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n , ${this._vReflectionFilteringInfoName}\r\n #ifdef IBL_CDF_FILTERING\r\n , icdfSampler // ** not handled **\r\n ${isWebGPU ? `, icdfSamplerSampler` : \"\"}\r\n #endif\r\n #endif\r\n , viewDirectionW\r\n , diffuseRoughness\r\n , surfaceAlbedo\r\n );\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n this._defineLODReflectionAlpha = state._getFreeDefineName(\"LODINREFLECTIONALPHA\");\r\n this._defineLinearSpecularReflection = state._getFreeDefineName(\"LINEARSPECULARREFLECTION\");\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n codeString += `${this._codeVariableName}.texture.gammaSpace = ${this.texture.gammaSpace};\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.useSphericalHarmonics = ${this.useSphericalHarmonics};\\n`;\r\n codeString += `${this._codeVariableName}.forceIrradianceInFragment = ${this.forceIrradianceInFragment};\\n`;\r\n\r\n return codeString;\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.useSphericalHarmonics = this.useSphericalHarmonics;\r\n serializationObject.forceIrradianceInFragment = this.forceIrradianceInFragment;\r\n serializationObject.gammaSpace = this.texture?.gammaSpace ?? true;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the object to deserialize from\r\n * @param scene - the scene to deserialize in\r\n * @param rootUrl - the root URL for assets\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.useSphericalHarmonics = serializationObject.useSphericalHarmonics;\r\n this.forceIrradianceInFragment = serializationObject.forceIrradianceInFragment;\r\n if (this.texture) {\r\n this.texture.gammaSpace = serializationObject.gammaSpace;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ReflectionBlock\", ReflectionBlock);\r\n"]}
@@ -98,9 +98,28 @@ export declare class RefractionBlock extends NodeMaterialBlock {
98
98
  */
99
99
  get hasTexture(): boolean;
100
100
  protected _getTexture(): Nullable<BaseTexture>;
101
+ /**
102
+ * Auto configure the block based on the material
103
+ * @param material - the node material
104
+ * @param additionalFilteringInfo - additional filtering info
105
+ */
101
106
  autoConfigure(material: NodeMaterial, additionalFilteringInfo?: (node: NodeMaterialBlock) => boolean): void;
107
+ /**
108
+ * Prepare the list of defines
109
+ * @param defines - the list of defines
110
+ */
102
111
  prepareDefines(defines: NodeMaterialDefines): void;
112
+ /**
113
+ * Checks if the block is ready
114
+ * @returns true if ready
115
+ */
103
116
  isReady(): boolean;
117
+ /**
118
+ * Bind data to effect
119
+ * @param effect - the effect to bind to
120
+ * @param nodeMaterial - the node material
121
+ * @param mesh - the mesh
122
+ */
104
123
  bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
105
124
  /**
106
125
  * Gets the main code of the block (fragment side)
@@ -110,6 +129,16 @@ export declare class RefractionBlock extends NodeMaterialBlock {
110
129
  getCode(state: NodeMaterialBuildState): string;
111
130
  protected _buildBlock(state: NodeMaterialBuildState): this;
112
131
  protected _dumpPropertiesCode(): string;
132
+ /**
133
+ * Serializes the block
134
+ * @returns the serialized object
135
+ */
113
136
  serialize(): any;
137
+ /**
138
+ * Deserializes the block
139
+ * @param serializationObject - the serialization object
140
+ * @param scene - the scene
141
+ * @param rootUrl - the root URL
142
+ */
114
143
  _deserialize(serializationObject: any, scene: Scene, rootUrl: string): void;
115
144
  }
@@ -95,6 +95,11 @@ export class RefractionBlock extends NodeMaterialBlock {
95
95
  }
96
96
  return this._scene.environmentTexture;
97
97
  }
98
+ /**
99
+ * Auto configure the block based on the material
100
+ * @param material - the node material
101
+ * @param additionalFilteringInfo - additional filtering info
102
+ */
98
103
  autoConfigure(material, additionalFilteringInfo = () => true) {
99
104
  if (!this.intensity.isConnected) {
100
105
  const intensityInput = new InputBlock("Refraction intensity", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);
@@ -110,6 +115,10 @@ export class RefractionBlock extends NodeMaterialBlock {
110
115
  viewInput.output.connectTo(this.view);
111
116
  }
112
117
  }
118
+ /**
119
+ * Prepare the list of defines
120
+ * @param defines - the list of defines
121
+ */
113
122
  prepareDefines(defines) {
114
123
  const refractionTexture = this._getTexture();
115
124
  const refraction = refractionTexture && refractionTexture.getTextureMatrix;
@@ -127,6 +136,10 @@ export class RefractionBlock extends NodeMaterialBlock {
127
136
  defines.setValue("SS_USE_LOCAL_REFRACTIONMAP_CUBIC", refractionTexture.boundingBoxSize ? true : false, true);
128
137
  defines.setValue("SS_USE_THICKNESS_AS_DEPTH", this.useThicknessAsDepth, true);
129
138
  }
139
+ /**
140
+ * Checks if the block is ready
141
+ * @returns true if ready
142
+ */
130
143
  isReady() {
131
144
  const texture = this._getTexture();
132
145
  if (texture && !texture.isReadyOrNotBlocking()) {
@@ -134,6 +147,12 @@ export class RefractionBlock extends NodeMaterialBlock {
134
147
  }
135
148
  return true;
136
149
  }
150
+ /**
151
+ * Bind data to effect
152
+ * @param effect - the effect to bind to
153
+ * @param nodeMaterial - the node material
154
+ * @param mesh - the mesh
155
+ */
137
156
  bind(effect, nodeMaterial, mesh) {
138
157
  super.bind(effect, nodeMaterial, mesh);
139
158
  const refractionTexture = this._getTexture();
@@ -239,6 +258,10 @@ export class RefractionBlock extends NodeMaterialBlock {
239
258
  codeString += `${this._codeVariableName}.useThicknessAsDepth = ${this.useThicknessAsDepth};\n`;
240
259
  return codeString;
241
260
  }
261
+ /**
262
+ * Serializes the block
263
+ * @returns the serialized object
264
+ */
242
265
  serialize() {
243
266
  const serializationObject = super.serialize();
244
267
  if (this.texture && !this.texture.isRenderTarget) {
@@ -249,6 +272,12 @@ export class RefractionBlock extends NodeMaterialBlock {
249
272
  serializationObject.useThicknessAsDepth = this.useThicknessAsDepth;
250
273
  return serializationObject;
251
274
  }
275
+ /**
276
+ * Deserializes the block
277
+ * @param serializationObject - the serialization object
278
+ * @param scene - the scene
279
+ * @param rootUrl - the root URL
280
+ */
252
281
  _deserialize(serializationObject, scene, rootUrl) {
253
282
  super._deserialize(serializationObject, scene, rootUrl);
254
283
  if (serializationObject.texture) {
@@ -1 +1 @@
1
- {"version":3,"file":"refractionBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/refractionBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { CubeTexture } from \"../../../Textures/cubeTexture\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the refraction part of the sub surface module of the PBR material\r\n */\r\nexport class RefractionBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _refractionMatrixName: string;\r\n /** @internal */\r\n public _defineLODRefractionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularRefraction: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _vRefractionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vRefractionInfosName: string;\r\n /** @internal */\r\n public _vRefractionFilteringInfoName: string;\r\n\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /** @internal */\r\n public indexOfRefractionConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @editableInPropertyPage(\"Link refraction to transparency\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public linkRefractionWithTransparency: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Invert refraction Y\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public invertRefractionY: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Use thickness as depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public useThicknessAsDepth: boolean = false;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Create a new RefractionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"volumeIndexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Output, RefractionBlock, \"RefractionBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"vRefractionPosition\");\r\n state._excludeVariableName(\"vRefractionSize\");\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 \"RefractionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint at distance input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the volume index of refraction input component\r\n */\r\n public get volumeIndexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the refraction object output component\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"Refraction intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n const refractionTexture = this._getTexture();\r\n const refraction = refractionTexture && refractionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"SS_REFRACTION\", refraction, true);\r\n\r\n if (!refraction) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, refractionTexture.isCube, true);\r\n defines.setValue(this._defineLODRefractionAlpha, refractionTexture.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularRefraction, refractionTexture.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture.invertZ : refractionTexture.invertZ, true);\r\n\r\n defines.setValue(\"SS_LINKREFRACTIONTOTRANSPARENCY\", this.linkRefractionWithTransparency, true);\r\n defines.setValue(\"SS_GAMMAREFRACTION\", refractionTexture.gammaSpace, true);\r\n defines.setValue(\"SS_RGBDREFRACTION\", refractionTexture.isRGBD, true);\r\n defines.setValue(\"SS_USE_LOCAL_REFRACTIONMAP_CUBIC\", (<any>refractionTexture).boundingBoxSize ? true : false, true);\r\n defines.setValue(\"SS_USE_THICKNESS_AS_DEPTH\", this.useThicknessAsDepth, true);\r\n }\r\n\r\n public override isReady() {\r\n const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const refractionTexture = this._getTexture();\r\n\r\n if (!refractionTexture) {\r\n return;\r\n }\r\n\r\n if (refractionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, refractionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, refractionTexture);\r\n }\r\n\r\n effect.setMatrix(this._refractionMatrixName, refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const indexOfRefraction = this.volumeIndexOfRefraction.connectInputBlock?.value ?? this.indexOfRefractionConnectionPoint.connectInputBlock?.value ?? 1.5;\r\n\r\n effect.setFloat4(this._vRefractionInfosName, refractionTexture.level, 1 / indexOfRefraction, depth, this.invertRefractionY ? -1 : 1);\r\n\r\n effect.setFloat4(\r\n this._vRefractionMicrosurfaceInfosName,\r\n refractionTexture.getSize().width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1 / indexOfRefraction\r\n );\r\n\r\n const width = refractionTexture.getSize().width;\r\n\r\n effect.setFloat2(this._vRefractionFilteringInfoName, width, Math.log2(width));\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n effect.setVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n effect.setVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState): string {\r\n const code = \"\";\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n this._define3DName = state._getFreeDefineName(\"SS_REFRACTIONMAP_3D\");\r\n const refractionTexture = this._getTexture();\r\n\r\n if (refractionTexture) {\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._emitCubeSampler(this._cubeSamplerName, undefined, true);\r\n state._samplerDeclaration += `#else\\n`;\r\n state._emit2DSampler(this._2DSamplerName, undefined, true);\r\n state._samplerDeclaration += `#endif\\n`;\r\n }\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._defineLODRefractionAlpha = state._getFreeDefineName(\"SS_LODINREFRACTIONALPHA\");\r\n this._defineLinearSpecularRefraction = state._getFreeDefineName(\"SS_LINEARSPECULARREFRACTION\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"SS_REFRACTIONMAP_OPPOSITEZ\");\r\n\r\n this._refractionMatrixName = state._getFreeVariableName(\"refractionMatrix\");\r\n\r\n state._emitUniformFromString(this._refractionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n if (state.shaderLanguage !== ShaderLanguage.WGSL) {\r\n state._emitFunction(\r\n \"sampleRefraction\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefraction(s, c) textureCube(s, c)\r\n #else\r\n #define sampleRefraction(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleRefractionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefractionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleRefractionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n this._vRefractionMicrosurfaceInfosName = state._getFreeVariableName(\"vRefractionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionInfosName = state._getFreeVariableName(\"vRefractionInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionFilteringInfoName = state._getFreeVariableName(\"vRefractionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vRefractionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitUniformFromString(\"vRefractionPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"vRefractionSize\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n if (this.texture.isCube) {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\");\\n`;\r\n } else {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\");\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.linkRefractionWithTransparency = ${this.linkRefractionWithTransparency};\\n`;\r\n codeString += `${this._codeVariableName}.invertRefractionY = ${this.invertRefractionY};\\n`;\r\n codeString += `${this._codeVariableName}.useThicknessAsDepth = ${this.useThicknessAsDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.linkRefractionWithTransparency = this.linkRefractionWithTransparency;\r\n serializationObject.invertRefractionY = this.invertRefractionY;\r\n serializationObject.useThicknessAsDepth = this.useThicknessAsDepth;\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.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTexture.Parse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.linkRefractionWithTransparency = serializationObject.linkRefractionWithTransparency;\r\n this.invertRefractionY = serializationObject.invertRefractionY;\r\n this.useThicknessAsDepth = !!serializationObject.useThicknessAsDepth;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.RefractionBlock\", RefractionBlock);\r\n"]}
1
+ {"version":3,"file":"refractionBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/refractionBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { CubeTexture } from \"../../../Textures/cubeTexture\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the refraction part of the sub surface module of the PBR material\r\n */\r\nexport class RefractionBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _refractionMatrixName: string;\r\n /** @internal */\r\n public _defineLODRefractionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularRefraction: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _vRefractionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vRefractionInfosName: string;\r\n /** @internal */\r\n public _vRefractionFilteringInfoName: string;\r\n\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /** @internal */\r\n public indexOfRefractionConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @editableInPropertyPage(\"Link refraction to transparency\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public linkRefractionWithTransparency: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Invert refraction Y\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public invertRefractionY: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Use thickness as depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public useThicknessAsDepth: boolean = false;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Create a new RefractionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"volumeIndexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Output, RefractionBlock, \"RefractionBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"vRefractionPosition\");\r\n state._excludeVariableName(\"vRefractionSize\");\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 \"RefractionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint at distance input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the volume index of refraction input component\r\n */\r\n public get volumeIndexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the refraction object output component\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\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 - additional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"Refraction intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the list of defines\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n const refractionTexture = this._getTexture();\r\n const refraction = refractionTexture && refractionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"SS_REFRACTION\", refraction, true);\r\n\r\n if (!refraction) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, refractionTexture.isCube, true);\r\n defines.setValue(this._defineLODRefractionAlpha, refractionTexture.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularRefraction, refractionTexture.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture.invertZ : refractionTexture.invertZ, true);\r\n\r\n defines.setValue(\"SS_LINKREFRACTIONTOTRANSPARENCY\", this.linkRefractionWithTransparency, true);\r\n defines.setValue(\"SS_GAMMAREFRACTION\", refractionTexture.gammaSpace, true);\r\n defines.setValue(\"SS_RGBDREFRACTION\", refractionTexture.isRGBD, true);\r\n defines.setValue(\"SS_USE_LOCAL_REFRACTIONMAP_CUBIC\", (<any>refractionTexture).boundingBoxSize ? true : false, true);\r\n defines.setValue(\"SS_USE_THICKNESS_AS_DEPTH\", this.useThicknessAsDepth, true);\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 const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\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\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const refractionTexture = this._getTexture();\r\n\r\n if (!refractionTexture) {\r\n return;\r\n }\r\n\r\n if (refractionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, refractionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, refractionTexture);\r\n }\r\n\r\n effect.setMatrix(this._refractionMatrixName, refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const indexOfRefraction = this.volumeIndexOfRefraction.connectInputBlock?.value ?? this.indexOfRefractionConnectionPoint.connectInputBlock?.value ?? 1.5;\r\n\r\n effect.setFloat4(this._vRefractionInfosName, refractionTexture.level, 1 / indexOfRefraction, depth, this.invertRefractionY ? -1 : 1);\r\n\r\n effect.setFloat4(\r\n this._vRefractionMicrosurfaceInfosName,\r\n refractionTexture.getSize().width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1 / indexOfRefraction\r\n );\r\n\r\n const width = refractionTexture.getSize().width;\r\n\r\n effect.setFloat2(this._vRefractionFilteringInfoName, width, Math.log2(width));\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n effect.setVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n effect.setVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState): string {\r\n const code = \"\";\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n this._define3DName = state._getFreeDefineName(\"SS_REFRACTIONMAP_3D\");\r\n const refractionTexture = this._getTexture();\r\n\r\n if (refractionTexture) {\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._emitCubeSampler(this._cubeSamplerName, undefined, true);\r\n state._samplerDeclaration += `#else\\n`;\r\n state._emit2DSampler(this._2DSamplerName, undefined, true);\r\n state._samplerDeclaration += `#endif\\n`;\r\n }\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._defineLODRefractionAlpha = state._getFreeDefineName(\"SS_LODINREFRACTIONALPHA\");\r\n this._defineLinearSpecularRefraction = state._getFreeDefineName(\"SS_LINEARSPECULARREFRACTION\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"SS_REFRACTIONMAP_OPPOSITEZ\");\r\n\r\n this._refractionMatrixName = state._getFreeVariableName(\"refractionMatrix\");\r\n\r\n state._emitUniformFromString(this._refractionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n if (state.shaderLanguage !== ShaderLanguage.WGSL) {\r\n state._emitFunction(\r\n \"sampleRefraction\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefraction(s, c) textureCube(s, c)\r\n #else\r\n #define sampleRefraction(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleRefractionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefractionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleRefractionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n this._vRefractionMicrosurfaceInfosName = state._getFreeVariableName(\"vRefractionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionInfosName = state._getFreeVariableName(\"vRefractionInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionFilteringInfoName = state._getFreeVariableName(\"vRefractionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vRefractionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitUniformFromString(\"vRefractionPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"vRefractionSize\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n if (this.texture.isCube) {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\");\\n`;\r\n } else {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\");\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.linkRefractionWithTransparency = ${this.linkRefractionWithTransparency};\\n`;\r\n codeString += `${this._codeVariableName}.invertRefractionY = ${this.invertRefractionY};\\n`;\r\n codeString += `${this._codeVariableName}.useThicknessAsDepth = ${this.useThicknessAsDepth};\\n`;\r\n\r\n return codeString;\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 if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.linkRefractionWithTransparency = this.linkRefractionWithTransparency;\r\n serializationObject.invertRefractionY = this.invertRefractionY;\r\n serializationObject.useThicknessAsDepth = this.useThicknessAsDepth;\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.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTexture.Parse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.linkRefractionWithTransparency = serializationObject.linkRefractionWithTransparency;\r\n this.invertRefractionY = serializationObject.invertRefractionY;\r\n this.useThicknessAsDepth = !!serializationObject.useThicknessAsDepth;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.RefractionBlock\", RefractionBlock);\r\n"]}
@@ -50,6 +50,10 @@ export declare class SheenBlock extends NodeMaterialBlock {
50
50
  * Gets the sheen object output component
51
51
  */
52
52
  get sheen(): NodeMaterialConnectionPoint;
53
+ /**
54
+ * Prepare the list of defines
55
+ * @param defines - the list of defines
56
+ */
53
57
  prepareDefines(defines: NodeMaterialDefines): void;
54
58
  /**
55
59
  * Gets the main code of the block (fragment side)
@@ -60,6 +64,16 @@ export declare class SheenBlock extends NodeMaterialBlock {
60
64
  getCode(reflectionBlock: Nullable<ReflectionBlock>, state: NodeMaterialBuildState): string;
61
65
  protected _buildBlock(state: NodeMaterialBuildState): this;
62
66
  protected _dumpPropertiesCode(): string;
67
+ /**
68
+ * Serializes the block
69
+ * @returns the serialized object
70
+ */
63
71
  serialize(): any;
72
+ /**
73
+ * Deserializes the block
74
+ * @param serializationObject - the serialization object
75
+ * @param scene - the scene
76
+ * @param rootUrl - the root URL
77
+ */
64
78
  _deserialize(serializationObject: any, scene: Scene, rootUrl: string): void;
65
79
  }
@@ -72,6 +72,10 @@ export class SheenBlock extends NodeMaterialBlock {
72
72
  get sheen() {
73
73
  return this._outputs[0];
74
74
  }
75
+ /**
76
+ * Prepare the list of defines
77
+ * @param defines - the list of defines
78
+ */
75
79
  prepareDefines(defines) {
76
80
  defines.setValue("SHEEN", true);
77
81
  defines.setValue("SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE", true, true);
@@ -172,12 +176,22 @@ export class SheenBlock extends NodeMaterialBlock {
172
176
  codeString += `${this._codeVariableName}.linkSheenWithAlbedo = ${this.linkSheenWithAlbedo};\n`;
173
177
  return codeString;
174
178
  }
179
+ /**
180
+ * Serializes the block
181
+ * @returns the serialized object
182
+ */
175
183
  serialize() {
176
184
  const serializationObject = super.serialize();
177
185
  serializationObject.albedoScaling = this.albedoScaling;
178
186
  serializationObject.linkSheenWithAlbedo = this.linkSheenWithAlbedo;
179
187
  return serializationObject;
180
188
  }
189
+ /**
190
+ * Deserializes the block
191
+ * @param serializationObject - the serialization object
192
+ * @param scene - the scene
193
+ * @param rootUrl - the root URL
194
+ */
181
195
  _deserialize(serializationObject, scene, rootUrl) {
182
196
  super._deserialize(serializationObject, scene, rootUrl);
183
197
  this.albedoScaling = serializationObject.albedoScaling;