@babylonjs/core 7.18.0 → 7.19.1

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 (419) hide show
  1. package/Animations/animationGroup.js +10 -2
  2. package/Animations/animationGroup.js.map +1 -1
  3. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +1 -58
  4. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +26 -75
  5. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  6. package/Engines/abstractEngine.js +2 -2
  7. package/Engines/abstractEngine.js.map +1 -1
  8. package/Materials/Background/backgroundMaterial.d.ts +5 -3
  9. package/Materials/Background/backgroundMaterial.js +26 -3
  10. package/Materials/Background/backgroundMaterial.js.map +1 -1
  11. package/Materials/Background/index.d.ts +4 -0
  12. package/Materials/Background/index.js +6 -0
  13. package/Materials/Background/index.js.map +1 -1
  14. package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +3 -1
  15. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js +3 -1
  16. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
  17. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +1 -0
  18. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +22 -0
  19. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  20. package/Materials/Node/Blocks/Dual/fogBlock.d.ts +2 -1
  21. package/Materials/Node/Blocks/Dual/fogBlock.js +14 -1
  22. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  23. package/Materials/Node/Blocks/Dual/index.d.ts +28 -0
  24. package/Materials/Node/Blocks/Dual/index.js +33 -0
  25. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  26. package/Materials/Node/Blocks/Dual/lightBlock.d.ts +2 -9
  27. package/Materials/Node/Blocks/Dual/lightBlock.js +32 -9
  28. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  29. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +2 -1
  30. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +14 -1
  31. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  32. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +1 -3
  33. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +20 -3
  34. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  35. package/Materials/Node/Blocks/Fragment/index.d.ts +18 -0
  36. package/Materials/Node/Blocks/Fragment/index.js +22 -0
  37. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  38. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +2 -3
  39. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +65 -35
  40. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  41. package/Materials/Node/Blocks/Fragment/shadowMapBlock.d.ts +1 -0
  42. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +20 -0
  43. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  44. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +8 -7
  45. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  46. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +9 -6
  47. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  48. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +1 -0
  49. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +28 -18
  50. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  51. package/Materials/Node/Blocks/PBR/refractionBlock.js +14 -12
  52. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  53. package/Materials/Node/Blocks/Vertex/bonesBlock.d.ts +1 -2
  54. package/Materials/Node/Blocks/Vertex/bonesBlock.js +12 -2
  55. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  56. package/Materials/Node/Blocks/Vertex/index.d.ts +12 -0
  57. package/Materials/Node/Blocks/Vertex/index.js +15 -0
  58. package/Materials/Node/Blocks/Vertex/index.js.map +1 -1
  59. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.d.ts +1 -2
  60. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +22 -2
  61. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  62. package/Materials/Node/nodeMaterial.d.ts +2 -0
  63. package/Materials/Node/nodeMaterial.js +26 -0
  64. package/Materials/Node/nodeMaterial.js.map +1 -1
  65. package/Materials/Node/nodeMaterialBlock.d.ts +10 -0
  66. package/Materials/Node/nodeMaterialBlock.js +13 -0
  67. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  68. package/Materials/PBR/index.d.ts +4 -0
  69. package/Materials/PBR/index.js +5 -0
  70. package/Materials/PBR/index.js.map +1 -1
  71. package/Materials/PBR/pbrBaseMaterial.d.ts +12 -3
  72. package/Materials/PBR/pbrBaseMaterial.js +62 -20
  73. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  74. package/Materials/PBR/pbrMaterial.d.ts +2 -1
  75. package/Materials/PBR/pbrMaterial.js +3 -2
  76. package/Materials/PBR/pbrMaterial.js.map +1 -1
  77. package/Materials/index.d.ts +4 -0
  78. package/Materials/index.js +6 -0
  79. package/Materials/index.js.map +1 -1
  80. package/Materials/material.d.ts +7 -0
  81. package/Materials/material.js +8 -0
  82. package/Materials/material.js.map +1 -1
  83. package/Materials/materialPluginManager.js +19 -1
  84. package/Materials/materialPluginManager.js.map +1 -1
  85. package/Materials/standardMaterial.d.ts +9 -3
  86. package/Materials/standardMaterial.js +30 -3
  87. package/Materials/standardMaterial.js.map +1 -1
  88. package/Meshes/Builders/greasedLineBuilder.js +2 -2
  89. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  90. package/Meshes/Builders/linesBuilder.js +1 -0
  91. package/Meshes/Builders/linesBuilder.js.map +1 -1
  92. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.d.ts +6 -0
  93. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js +12 -0
  94. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js.map +1 -0
  95. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +1 -1
  96. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +1 -1
  97. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -1
  98. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +1 -1
  99. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +1 -1
  100. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
  101. package/ShadersWGSL/ShadersInclude/bonesDeclaration.d.ts +1 -1
  102. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
  103. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  104. package/ShadersWGSL/ShadersInclude/bonesVertex.d.ts +1 -1
  105. package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
  106. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  107. package/ShadersWGSL/ShadersInclude/bumpFragment.d.ts +1 -1
  108. package/ShadersWGSL/ShadersInclude/bumpFragment.js +17 -17
  109. package/ShadersWGSL/ShadersInclude/bumpFragment.js.map +1 -1
  110. package/ShadersWGSL/ShadersInclude/bumpFragmentFunctions.d.ts +1 -1
  111. package/ShadersWGSL/ShadersInclude/bumpFragmentFunctions.js +3 -3
  112. package/ShadersWGSL/ShadersInclude/bumpFragmentFunctions.js.map +1 -1
  113. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.d.ts +1 -1
  114. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +22 -42
  115. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  116. package/ShadersWGSL/ShadersInclude/bumpVertex.d.ts +5 -0
  117. package/ShadersWGSL/ShadersInclude/bumpVertex.js +14 -0
  118. package/ShadersWGSL/ShadersInclude/bumpVertex.js.map +1 -0
  119. package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.d.ts +5 -0
  120. package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js +14 -0
  121. package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js.map +1 -0
  122. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +1 -1
  123. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +1 -1
  124. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -1
  125. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +1 -1
  126. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
  127. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
  128. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +1 -1
  129. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +1 -1
  130. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -1
  131. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +1 -1
  132. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
  133. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
  134. package/ShadersWGSL/ShadersInclude/decalFragment.d.ts +1 -1
  135. package/ShadersWGSL/ShadersInclude/decalFragment.js +5 -4
  136. package/ShadersWGSL/ShadersInclude/decalFragment.js.map +1 -1
  137. package/ShadersWGSL/ShadersInclude/decalFragmentDeclaration.d.ts +5 -0
  138. package/ShadersWGSL/ShadersInclude/decalFragmentDeclaration.js +12 -0
  139. package/ShadersWGSL/ShadersInclude/decalFragmentDeclaration.js.map +1 -0
  140. package/ShadersWGSL/ShadersInclude/decalVertexDeclaration.d.ts +5 -0
  141. package/ShadersWGSL/ShadersInclude/decalVertexDeclaration.js +12 -0
  142. package/ShadersWGSL/ShadersInclude/decalVertexDeclaration.js.map +1 -0
  143. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.d.ts +7 -0
  144. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js +15 -0
  145. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js.map +1 -0
  146. package/ShadersWGSL/ShadersInclude/depthPrePass.d.ts +1 -1
  147. package/ShadersWGSL/ShadersInclude/depthPrePass.js +1 -1
  148. package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -1
  149. package/ShadersWGSL/ShadersInclude/fogFragment.d.ts +5 -0
  150. package/ShadersWGSL/ShadersInclude/fogFragment.js +16 -0
  151. package/ShadersWGSL/ShadersInclude/fogFragment.js.map +1 -0
  152. package/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.d.ts +1 -1
  153. package/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js +2 -3
  154. package/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js.map +1 -1
  155. package/ShadersWGSL/ShadersInclude/fogVertex.d.ts +1 -1
  156. package/ShadersWGSL/ShadersInclude/fogVertex.js +2 -2
  157. package/ShadersWGSL/ShadersInclude/fogVertex.js.map +1 -1
  158. package/ShadersWGSL/ShadersInclude/fogVertexDeclaration.d.ts +1 -1
  159. package/ShadersWGSL/ShadersInclude/fogVertexDeclaration.js +1 -1
  160. package/ShadersWGSL/ShadersInclude/fogVertexDeclaration.js.map +1 -1
  161. package/ShadersWGSL/ShadersInclude/fresnelFunction.d.ts +1 -1
  162. package/ShadersWGSL/ShadersInclude/fresnelFunction.js +1 -1
  163. package/ShadersWGSL/ShadersInclude/fresnelFunction.js.map +1 -1
  164. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.d.ts +1 -1
  165. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js +1 -1
  166. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js.map +1 -1
  167. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.d.ts +1 -1
  168. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
  169. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  170. package/ShadersWGSL/ShadersInclude/helperFunctions.d.ts +1 -1
  171. package/ShadersWGSL/ShadersInclude/helperFunctions.js +15 -6
  172. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  173. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.d.ts +1 -1
  174. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js +3 -3
  175. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  176. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.d.ts +1 -1
  177. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +5 -5
  178. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  179. package/ShadersWGSL/ShadersInclude/importanceSampling.d.ts +1 -1
  180. package/ShadersWGSL/ShadersInclude/importanceSampling.js +1 -1
  181. package/ShadersWGSL/ShadersInclude/importanceSampling.js.map +1 -1
  182. package/ShadersWGSL/ShadersInclude/instancesDeclaration.d.ts +1 -1
  183. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  184. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  185. package/ShadersWGSL/ShadersInclude/instancesVertex.d.ts +1 -1
  186. package/ShadersWGSL/ShadersInclude/instancesVertex.js +4 -4
  187. package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
  188. package/ShadersWGSL/ShadersInclude/lightFragment.d.ts +1 -1
  189. package/ShadersWGSL/ShadersInclude/lightFragment.js +8 -8
  190. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  191. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.d.ts +1 -1
  192. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +2 -2
  193. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
  194. package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.d.ts +5 -0
  195. package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js +33 -0
  196. package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -0
  197. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.d.ts +1 -1
  198. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +1 -1
  199. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
  200. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +1 -1
  201. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +3 -3
  202. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  203. package/ShadersWGSL/ShadersInclude/logDepthDeclaration.d.ts +1 -1
  204. package/ShadersWGSL/ShadersInclude/logDepthDeclaration.js +1 -1
  205. package/ShadersWGSL/ShadersInclude/logDepthDeclaration.js.map +1 -1
  206. package/ShadersWGSL/ShadersInclude/logDepthFragment.d.ts +5 -0
  207. package/ShadersWGSL/ShadersInclude/logDepthFragment.js +12 -0
  208. package/ShadersWGSL/ShadersInclude/logDepthFragment.js.map +1 -0
  209. package/ShadersWGSL/ShadersInclude/logDepthVertex.d.ts +1 -1
  210. package/ShadersWGSL/ShadersInclude/logDepthVertex.js +2 -2
  211. package/ShadersWGSL/ShadersInclude/logDepthVertex.js.map +1 -1
  212. package/ShadersWGSL/ShadersInclude/mainUVVaryingDeclaration.d.ts +5 -0
  213. package/ShadersWGSL/ShadersInclude/mainUVVaryingDeclaration.js +12 -0
  214. package/ShadersWGSL/ShadersInclude/mainUVVaryingDeclaration.js.map +1 -0
  215. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.d.ts +1 -1
  216. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js +1 -1
  217. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js.map +1 -1
  218. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.d.ts +1 -1
  219. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +6 -6
  220. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
  221. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.d.ts +1 -1
  222. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
  223. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
  224. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.d.ts +1 -1
  225. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
  226. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
  227. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.d.ts +1 -1
  228. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
  229. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
  230. package/ShadersWGSL/ShadersInclude/oitDeclaration.d.ts +5 -0
  231. package/ShadersWGSL/ShadersInclude/oitDeclaration.js +13 -0
  232. package/ShadersWGSL/ShadersInclude/oitDeclaration.js.map +1 -0
  233. package/ShadersWGSL/ShadersInclude/oitFragment.d.ts +5 -0
  234. package/ShadersWGSL/ShadersInclude/oitFragment.js +34 -0
  235. package/ShadersWGSL/ShadersInclude/oitFragment.js.map +1 -0
  236. package/ShadersWGSL/ShadersInclude/packingFunctions.d.ts +1 -1
  237. package/ShadersWGSL/ShadersInclude/packingFunctions.js +1 -1
  238. package/ShadersWGSL/ShadersInclude/packingFunctions.js.map +1 -1
  239. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.d.ts +1 -1
  240. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +12 -8
  241. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  242. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +1 -1
  243. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js +5 -6
  244. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  245. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.d.ts +1 -1
  246. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js +7 -8
  247. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
  248. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.d.ts +1 -1
  249. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js +1 -1
  250. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
  251. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.d.ts +1 -1
  252. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js +5 -5
  253. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
  254. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.d.ts +1 -1
  255. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js +5 -5
  256. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  257. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.d.ts +1 -1
  258. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +1 -1
  259. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  260. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.d.ts +1 -1
  261. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js +3 -3
  262. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -1
  263. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.d.ts +1 -1
  264. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +6 -6
  265. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  266. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.d.ts +1 -1
  267. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +7 -7
  268. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  269. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.d.ts +1 -1
  270. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js +1 -1
  271. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -1
  272. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.d.ts +1 -1
  273. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js +4 -4
  274. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
  275. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.d.ts +1 -1
  276. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js +3 -5
  277. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js.map +1 -1
  278. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.d.ts +1 -1
  279. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js +5 -5
  280. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js.map +1 -1
  281. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.d.ts +1 -1
  282. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +4 -4
  283. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
  284. package/ShadersWGSL/ShadersInclude/pbrBlockNormalGeometric.d.ts +5 -0
  285. package/ShadersWGSL/ShadersInclude/pbrBlockNormalGeometric.js +19 -0
  286. package/ShadersWGSL/ShadersInclude/pbrBlockNormalGeometric.js.map +1 -0
  287. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.d.ts +1 -1
  288. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
  289. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  290. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.d.ts +1 -1
  291. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js +1 -1
  292. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  293. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.d.ts +1 -1
  294. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +6 -6
  295. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  296. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.d.ts +1 -1
  297. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +1 -1
  298. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  299. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.d.ts +1 -1
  300. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js +4 -4
  301. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js.map +1 -1
  302. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.d.ts +1 -1
  303. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +4 -4
  304. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  305. package/ShadersWGSL/ShadersInclude/pbrDebug.d.ts +1 -1
  306. package/ShadersWGSL/ShadersInclude/pbrDebug.js +10 -10
  307. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  308. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.d.ts +1 -1
  309. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js +1 -1
  310. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -1
  311. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.d.ts +1 -1
  312. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  313. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  314. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -1
  315. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  316. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  317. package/ShadersWGSL/ShadersInclude/pbrFragmentExtraDeclaration.d.ts +6 -0
  318. package/ShadersWGSL/ShadersInclude/pbrFragmentExtraDeclaration.js +24 -0
  319. package/ShadersWGSL/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -0
  320. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +7 -0
  321. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +96 -0
  322. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -0
  323. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.d.ts +1 -1
  324. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +3 -3
  325. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  326. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.d.ts +1 -1
  327. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +3 -3
  328. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -1
  329. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.d.ts +7 -0
  330. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +15 -0
  331. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -0
  332. package/ShadersWGSL/ShadersInclude/prePassDeclaration.d.ts +5 -0
  333. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +17 -0
  334. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -0
  335. package/ShadersWGSL/ShadersInclude/prePassVertex.d.ts +5 -0
  336. package/ShadersWGSL/ShadersInclude/prePassVertex.js +42 -0
  337. package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -0
  338. package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.d.ts +5 -0
  339. package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js +17 -0
  340. package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js.map +1 -0
  341. package/ShadersWGSL/ShadersInclude/reflectionFunction.d.ts +1 -1
  342. package/ShadersWGSL/ShadersInclude/reflectionFunction.js +12 -10
  343. package/ShadersWGSL/ShadersInclude/reflectionFunction.js.map +1 -1
  344. package/ShadersWGSL/ShadersInclude/samplerFragmentAlternateDeclaration.d.ts +5 -0
  345. package/ShadersWGSL/ShadersInclude/samplerFragmentAlternateDeclaration.js +26 -0
  346. package/ShadersWGSL/ShadersInclude/samplerFragmentAlternateDeclaration.js.map +1 -0
  347. package/ShadersWGSL/ShadersInclude/samplerFragmentDeclaration.d.ts +1 -1
  348. package/ShadersWGSL/ShadersInclude/samplerFragmentDeclaration.js +2 -2
  349. package/ShadersWGSL/ShadersInclude/samplerFragmentDeclaration.js.map +1 -1
  350. package/ShadersWGSL/ShadersInclude/samplerVertexDeclaration.d.ts +5 -0
  351. package/ShadersWGSL/ShadersInclude/samplerVertexDeclaration.js +12 -0
  352. package/ShadersWGSL/ShadersInclude/samplerVertexDeclaration.js.map +1 -0
  353. package/ShadersWGSL/ShadersInclude/samplerVertexImplementation.d.ts +5 -0
  354. package/ShadersWGSL/ShadersInclude/samplerVertexImplementation.js +33 -0
  355. package/ShadersWGSL/ShadersInclude/samplerVertexImplementation.js.map +1 -0
  356. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.d.ts +1 -1
  357. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +1 -1
  358. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  359. package/ShadersWGSL/ShadersInclude/shadowMapFragment.d.ts +1 -1
  360. package/ShadersWGSL/ShadersInclude/shadowMapFragment.js +1 -1
  361. package/ShadersWGSL/ShadersInclude/shadowMapFragment.js.map +1 -1
  362. package/ShadersWGSL/ShadersInclude/shadowMapVertexMetric.d.ts +1 -1
  363. package/ShadersWGSL/ShadersInclude/shadowMapVertexMetric.js +1 -1
  364. package/ShadersWGSL/ShadersInclude/shadowMapVertexMetric.js.map +1 -1
  365. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.d.ts +1 -1
  366. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  367. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  368. package/ShadersWGSL/ShadersInclude/shadowsVertex.d.ts +1 -1
  369. package/ShadersWGSL/ShadersInclude/shadowsVertex.js +2 -2
  370. package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -1
  371. package/ShadersWGSL/ShadersInclude/subSurfaceScatteringFunctions.d.ts +5 -0
  372. package/ShadersWGSL/ShadersInclude/subSurfaceScatteringFunctions.js +10 -0
  373. package/ShadersWGSL/ShadersInclude/subSurfaceScatteringFunctions.js.map +1 -0
  374. package/ShadersWGSL/ShadersInclude/uvAttributeDeclaration.d.ts +5 -0
  375. package/ShadersWGSL/ShadersInclude/uvAttributeDeclaration.js +12 -0
  376. package/ShadersWGSL/ShadersInclude/uvAttributeDeclaration.js.map +1 -0
  377. package/ShadersWGSL/ShadersInclude/uvVariableDeclaration.d.ts +5 -0
  378. package/ShadersWGSL/ShadersInclude/uvVariableDeclaration.js +17 -0
  379. package/ShadersWGSL/ShadersInclude/uvVariableDeclaration.js.map +1 -0
  380. package/ShadersWGSL/ShadersInclude/vertexColorMixing.d.ts +5 -0
  381. package/ShadersWGSL/ShadersInclude/vertexColorMixing.js +22 -0
  382. package/ShadersWGSL/ShadersInclude/vertexColorMixing.js.map +1 -0
  383. package/ShadersWGSL/background.fragment.d.ts +20 -0
  384. package/ShadersWGSL/background.fragment.js +225 -0
  385. package/ShadersWGSL/background.fragment.js.map +1 -0
  386. package/ShadersWGSL/background.vertex.d.ts +21 -0
  387. package/ShadersWGSL/background.vertex.js +123 -0
  388. package/ShadersWGSL/background.vertex.js.map +1 -0
  389. package/ShadersWGSL/boundingInfo.compute.d.ts +1 -1
  390. package/ShadersWGSL/boundingInfo.compute.js +1 -1
  391. package/ShadersWGSL/boundingInfo.compute.js.map +1 -1
  392. package/ShadersWGSL/clearQuad.fragment.d.ts +1 -1
  393. package/ShadersWGSL/clearQuad.fragment.js +1 -1
  394. package/ShadersWGSL/clearQuad.fragment.js.map +1 -1
  395. package/ShadersWGSL/clearQuad.vertex.d.ts +1 -1
  396. package/ShadersWGSL/clearQuad.vertex.js +1 -1
  397. package/ShadersWGSL/clearQuad.vertex.js.map +1 -1
  398. package/ShadersWGSL/default.fragment.d.ts +31 -0
  399. package/ShadersWGSL/default.fragment.js +381 -0
  400. package/ShadersWGSL/default.fragment.js.map +1 -0
  401. package/ShadersWGSL/default.vertex.d.ts +36 -0
  402. package/ShadersWGSL/default.vertex.js +169 -0
  403. package/ShadersWGSL/default.vertex.js.map +1 -0
  404. package/ShadersWGSL/gpuUpdateParticles.compute.d.ts +1 -1
  405. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  406. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  407. package/ShadersWGSL/particles.vertex.d.ts +1 -1
  408. package/ShadersWGSL/particles.vertex.js +1 -1
  409. package/ShadersWGSL/particles.vertex.js.map +1 -1
  410. package/ShadersWGSL/pbr.fragment.d.ts +60 -0
  411. package/ShadersWGSL/pbr.fragment.js +667 -0
  412. package/ShadersWGSL/pbr.fragment.js.map +1 -0
  413. package/ShadersWGSL/pbr.vertex.d.ts +36 -0
  414. package/ShadersWGSL/pbr.vertex.js +232 -0
  415. package/ShadersWGSL/pbr.vertex.js.map +1 -0
  416. package/ShadersWGSL/postprocess.vertex.d.ts +1 -1
  417. package/ShadersWGSL/postprocess.vertex.js +1 -1
  418. package/ShadersWGSL/postprocess.vertex.js.map +1 -1
  419. package/package.json +1 -1
@@ -13,4 +13,26 @@ export * from "./heightToNormalBlock.js";
13
13
  export * from "./fragDepthBlock.js";
14
14
  export * from "./shadowMapBlock.js";
15
15
  export * from "./prePassOutputBlock.js";
16
+ // async-loaded shaders
17
+ // imageProcessingBlock
18
+ export * from "../../../../ShadersWGSL/ShadersInclude/helperFunctions.js";
19
+ export * from "../../../../ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js";
20
+ export * from "../../../../ShadersWGSL/ShadersInclude/imageProcessingFunctions.js";
21
+ export * from "../../../../Shaders/ShadersInclude/helperFunctions.js";
22
+ export * from "../../../../Shaders/ShadersInclude/imageProcessingDeclaration.js";
23
+ export * from "../../../../Shaders/ShadersInclude/imageProcessingFunctions.js";
24
+ // perturbNormalBlock
25
+ export * from "../../../../ShadersWGSL/ShadersInclude/bumpFragment.js";
26
+ export * from "../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js";
27
+ export * from "../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions.js";
28
+ export * from "../../../../Shaders/ShadersInclude/bumpFragment.js";
29
+ export * from "../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions.js";
30
+ export * from "../../../../Shaders/ShadersInclude/bumpFragmentFunctions.js";
31
+ // shadowMapBlock
32
+ export * from "../../../../ShadersWGSL/ShadersInclude/shadowMapVertexMetric.js";
33
+ export * from "../../../../ShadersWGSL/ShadersInclude/packingFunctions.js";
34
+ export * from "../../../../ShadersWGSL/ShadersInclude/shadowMapFragment.js";
35
+ export * from "../../../../Shaders/ShadersInclude/shadowMapVertexMetric.js";
36
+ export * from "../../../../Shaders/ShadersInclude/packingFunctions.js";
37
+ export * from "../../../../Shaders/ShadersInclude/shadowMapFragment.js";
16
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from \"./fragmentOutputBlock\";\r\nexport * from \"./imageProcessingBlock\";\r\nexport * from \"./perturbNormalBlock\";\r\nexport * from \"./discardBlock\";\r\nexport * from \"./frontFacingBlock\";\r\nexport * from \"./derivativeBlock\";\r\nexport * from \"./fragCoordBlock\";\r\nexport * from \"./screenSizeBlock\";\r\nexport * from \"./screenSpaceBlock\";\r\nexport * from \"./twirlBlock\";\r\nexport * from \"./TBNBlock\";\r\nexport * from \"./heightToNormalBlock\";\r\nexport * from \"./fragDepthBlock\";\r\nexport * from \"./shadowMapBlock\";\r\nexport * from \"./prePassOutputBlock\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AAErC,uBAAuB;AAEvB,uBAAuB;AACvB,cAAc,wDAAwD,CAAC;AACvE,cAAc,mEAAmE,CAAC;AAClF,cAAc,iEAAiE,CAAC;AAChF,cAAc,oDAAoD,CAAC;AACnE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,6DAA6D,CAAC;AAE5E,qBAAqB;AACrB,cAAc,qDAAqD,CAAC;AACpE,cAAc,kEAAkE,CAAC;AACjF,cAAc,8DAA8D,CAAC;AAC7E,cAAc,iDAAiD,CAAC;AAChE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,0DAA0D,CAAC;AAEzE,iBAAiB;AACjB,cAAc,8DAA8D,CAAC;AAC7E,cAAc,yDAAyD,CAAC;AACxE,cAAc,0DAA0D,CAAC;AACzE,cAAc,0DAA0D,CAAC;AACzE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC","sourcesContent":["export * from \"./fragmentOutputBlock\";\r\nexport * from \"./imageProcessingBlock\";\r\nexport * from \"./perturbNormalBlock\";\r\nexport * from \"./discardBlock\";\r\nexport * from \"./frontFacingBlock\";\r\nexport * from \"./derivativeBlock\";\r\nexport * from \"./fragCoordBlock\";\r\nexport * from \"./screenSizeBlock\";\r\nexport * from \"./screenSpaceBlock\";\r\nexport * from \"./twirlBlock\";\r\nexport * from \"./TBNBlock\";\r\nexport * from \"./heightToNormalBlock\";\r\nexport * from \"./fragDepthBlock\";\r\nexport * from \"./shadowMapBlock\";\r\nexport * from \"./prePassOutputBlock\";\r\n\r\n// async-loaded shaders\r\n\r\n// imageProcessingBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/helperFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/imageProcessingDeclaration\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/imageProcessingFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/helperFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/imageProcessingDeclaration\";\r\nexport * from \"../../../../Shaders/ShadersInclude/imageProcessingFunctions\";\r\n\r\n// perturbNormalBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragment\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragment\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\";\r\n\r\n// shadowMapBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/shadowMapVertexMetric\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/packingFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/shadowMapFragment\";\r\nexport * from \"../../../../Shaders/ShadersInclude/shadowMapVertexMetric\";\r\nexport * from \"../../../../Shaders/ShadersInclude/packingFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/shadowMapFragment\";\r\n"]}
@@ -6,9 +6,6 @@ import type { AbstractMesh } from "../../../../Meshes/abstractMesh";
6
6
  import type { Mesh } from "../../../../Meshes/mesh";
7
7
  import type { Effect } from "../../../effect";
8
8
  import type { Scene } from "../../../../scene";
9
- import "../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions";
10
- import "../../../../Shaders/ShadersInclude/bumpFragmentFunctions";
11
- import "../../../../Shaders/ShadersInclude/bumpFragment";
12
9
  /**
13
10
  * Block used to perturb normals based on a normal map
14
11
  */
@@ -86,6 +83,8 @@ export declare class PerturbNormalBlock extends NodeMaterialBlock {
86
83
  * Gets the uv offset output component
87
84
  */
88
85
  get uvOffset(): NodeMaterialConnectionPoint;
86
+ initialize(state: NodeMaterialBuildState): void;
87
+ private _initShaderSourceAsync;
89
88
  prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
90
89
  bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
91
90
  autoConfigure(material: NodeMaterial, additionalFilteringInfo?: (node: NodeMaterialBlock) => boolean): void;
@@ -7,9 +7,6 @@ import { InputBlock } from "../Input/inputBlock.js";
7
7
  import { editableInPropertyPage } from "../../../../Decorators/nodeDecorator.js";
8
8
  import { NodeMaterialConnectionPointCustomObject } from "../../nodeMaterialConnectionPointCustomObject.js";
9
9
  import { TBNBlock } from "./TBNBlock.js";
10
- import "../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions.js";
11
- import "../../../../Shaders/ShadersInclude/bumpFragmentFunctions.js";
12
- import "../../../../Shaders/ShadersInclude/bumpFragment.js";
13
10
 
14
11
  /**
15
12
  * Block used to perturb normals based on a normal map
@@ -135,6 +132,28 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
135
132
  get uvOffset() {
136
133
  return this._outputs[1];
137
134
  }
135
+ initialize(state) {
136
+ this._initShaderSourceAsync(state.shaderLanguage);
137
+ }
138
+ async _initShaderSourceAsync(shaderLanguage) {
139
+ this._codeIsReady = false;
140
+ if (shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
141
+ await Promise.all([
142
+ import("../../../../ShadersWGSL/ShadersInclude/bumpFragment.js"),
143
+ import("../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js"),
144
+ import("../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions.js"),
145
+ ]);
146
+ }
147
+ else {
148
+ await Promise.all([
149
+ import("../../../../Shaders/ShadersInclude/bumpFragment.js"),
150
+ import("../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions.js"),
151
+ import("../../../../Shaders/ShadersInclude/bumpFragmentFunctions.js"),
152
+ ]);
153
+ }
154
+ this._codeIsReady = true;
155
+ this.onCodeIsReadyObservable.notifyObservers(this);
156
+ }
138
157
  prepareDefines(mesh, nodeMaterial, defines) {
139
158
  const normalSamplerName = this.normalMapColor.connectedPoint._ownerBlock.samplerName;
140
159
  const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));
@@ -255,39 +274,50 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
255
274
  const uvForPerturbNormal = !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `${normalRead}, ${uv.associatedVariableName} + uvOffset).xyz`;
256
275
  const tempOutput = state._getFreeVariableName("tempOutput");
257
276
  state.compilationString += state._declareLocalVar(tempOutput, NodeMaterialBlockConnectionPointTypes.Vector3) + ` = vec3${fSuffix}(0.);\n`;
277
+ const replaceStrings = [
278
+ { search: new RegExp(`texture.+?bumpSampler${isWebGPU ? "Sampler,fragmentInputs." : ","}vBumpUV\\)`, "g"), replace: `${uvForPerturbNormal}` },
279
+ {
280
+ search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,
281
+ replace: `${state._declareLocalVar("normalMatrix", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : this._worldMatrixName});`,
282
+ },
283
+ {
284
+ search: new RegExp(`perturbNormal\\(TBN,texture.+?bumpSampler${isWebGPU ? "Sampler,fragmentInputs." : ","}vBumpUV\\+uvOffset\\).xyz,${isWebGPU ? "uniforms." : ""}vBumpInfos.y\\)`, "g"),
285
+ replace: `perturbNormal(TBN, ${uvForPerturbNormal}, vBumpInfos.y)`,
286
+ },
287
+ {
288
+ search: /parallaxOcclusion\(invTBN\*-viewDirectionW,invTBN\*normalW,vBumpUV,vBumpInfos.z\)/g,
289
+ replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), vBumpUV, vBumpInfos.z, ${isWebGPU
290
+ ? useParallax && this.useParallaxOcclusion
291
+ ? `${normalSamplerName}, ${normalSamplerName + `Sampler`}`
292
+ : "bump, bumpSampler"
293
+ : useParallax && this.useParallaxOcclusion
294
+ ? normalSamplerName
295
+ : "bumpSampler"})`,
296
+ },
297
+ {
298
+ search: /parallaxOffset\(invTBN\*viewDirectionW,vBumpInfos\.z\)/g,
299
+ replace: `parallaxOffset(invTBN * viewDirectionW, vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : "0."})`,
300
+ },
301
+ { search: /vBumpInfos.y/g, replace: replaceForBumpInfos },
302
+ { search: /vBumpInfos.z/g, replace: replaceForParallaxInfos },
303
+ { search: /normalW=/g, replace: tempOutput + " = " },
304
+ { search: /mat3\(normalMatrix\)\*normalW/g, replace: `${mat3}(normalMatrix) * ` + tempOutput },
305
+ { search: /normalW/g, replace: worldNormal.associatedVariableName + ".xyz" },
306
+ { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },
307
+ tangentReplaceString,
308
+ ];
309
+ if (isWebGPU) {
310
+ replaceStrings.push({ search: /fragmentInputs.vBumpUV/g, replace: uv.associatedVariableName });
311
+ replaceStrings.push({ search: /input.vPositionW/g, replace: worldPosition.associatedVariableName + ".xyz" });
312
+ replaceStrings.push({ search: /uniforms.vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });
313
+ }
314
+ else {
315
+ replaceStrings.push({ search: /vBumpUV/g, replace: uv.associatedVariableName });
316
+ replaceStrings.push({ search: /vPositionW/g, replace: worldPosition.associatedVariableName + ".xyz" });
317
+ replaceStrings.push({ search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });
318
+ }
258
319
  state.compilationString += state._emitCodeFromInclude("bumpFragment", comments, {
259
- replaceStrings: [
260
- { search: /texture.+?bumpSampler,vBumpUV\)/g, replace: `${uvForPerturbNormal}` },
261
- {
262
- search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,
263
- replace: `${state._declareLocalVar("normalMatrix", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : this._worldMatrixName});`,
264
- },
265
- { search: /perturbNormal\(TBN,texture.+?bumpSampler,vBumpUV\+uvOffset\).xyz,vBumpInfos.y\)/g, replace: `perturbNormal(TBN, ${uvForPerturbNormal}, vBumpInfos.y)` },
266
- {
267
- search: /parallaxOcclusion\(invTBN\*-viewDirectionW,invTBN\*normalW,vBumpUV,vBumpInfos.z\)/g,
268
- replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), vBumpUV, vBumpInfos.z, ${isWebGPU
269
- ? useParallax && this.useParallaxOcclusion
270
- ? `${normalSamplerName}, ${normalSamplerName + `Sampler`}`
271
- : "bump, bumpSampler"
272
- : useParallax && this.useParallaxOcclusion
273
- ? normalSamplerName
274
- : "bumpSampler"})`,
275
- },
276
- {
277
- search: /parallaxOffset\(invTBN\*viewDirectionW,vBumpInfos\.z\)/g,
278
- replace: `parallaxOffset(invTBN * viewDirectionW, vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : "0."})`,
279
- },
280
- { search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName },
281
- { search: /vBumpInfos.y/g, replace: replaceForBumpInfos },
282
- { search: /vBumpInfos.z/g, replace: replaceForParallaxInfos },
283
- { search: /vBumpUV/g, replace: uv.associatedVariableName },
284
- { search: /vPositionW/g, replace: worldPosition.associatedVariableName + ".xyz" },
285
- { search: /normalW=/g, replace: tempOutput + " = " },
286
- { search: /mat3\(normalMatrix\)\*normalW/g, replace: `${mat3}(normalMatrix) * ` + tempOutput },
287
- { search: /normalW/g, replace: worldNormal.associatedVariableName + ".xyz" },
288
- { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },
289
- tangentReplaceString,
290
- ],
320
+ replaceStrings: replaceStrings,
291
321
  });
292
322
  state.compilationString += state._declareOutput(this.output) + ` = vec4${fSuffix}(${tempOutput}, 0.);\n`;
293
323
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\";\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\";\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragment\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n private _worldMatrixName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean)\r\n public useParallaxOcclusion = false;\r\n /** Gets or sets a boolean indicating that sampling mode is in Object space */\r\n @editableInPropertyPage(\"Object Space Mode\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\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 // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\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 \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\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[10];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAX_RHS\", nodeMaterial.getScene().useRightHandedSystem, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n defines.setValue(\"OBJECTSPACE_NORMALMAP\", this.useObjectSpaceNormalMap, true);\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n\r\n if (this.useObjectSpaceNormalMap && !this.world.isConnected) {\r\n // World default to the mesh world matrix\r\n effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());\r\n }\r\n }\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const mat3 = isWebGPU ? \"mat3x3f\" : \"mat3\";\r\n const fSuffix = isWebGPU ? \"f\" : \"\";\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._worldMatrixName = state._getFreeDefineName(\"perturbNormalWorldMatrix\");\r\n\r\n state._emitUniformFromString(this._worldMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${this.strength.associatedVariableName}`;\r\n\r\n if (!isWebGPU) {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN;/g, replace: \"\" };\r\n const normalMatrixReplaceString = { search: /uniform mat4 normalMatrix;/g, replace: \"\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n ${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"tbnNormal\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnTangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnBitangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\n`;\r\n state.compilationString += `${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${mat3}(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString, tbnVarying, normalMatrixReplaceString],\r\n });\r\n\r\n const replaceString0 = isWebGPU\r\n ? \"fn parallaxOcclusion(vViewDirCoT: vec3f, vNormalCoT: vec3f, texCoord: vec2f, parallaxScale:f32, bump: texture_2d<f32>, bumpSampler: sampler)\"\r\n : \"#define inline\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\";\r\n\r\n const searchExp0 = isWebGPU\r\n ? /fn parallaxOcclusion\\(vViewDirCoT: vec3f,vNormalCoT: vec3f,texCoord: vec2f,parallaxScale: f32\\)/g\r\n : /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g;\r\n\r\n const replaceString1 = isWebGPU\r\n ? \"fn parallaxOffset(viewDir: vec3f, heightScale: f32, height_: f32)\"\r\n : \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\";\r\n\r\n const searchExp1 = isWebGPU ? /fn parallaxOffset\\(viewDir: vec3f,heightScale: f32\\)/g : /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: searchExp0,\r\n replace: replaceString0,\r\n },\r\n { search: searchExp1, replace: replaceString1 },\r\n { search: /texture.+?bumpSampler,vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const normalRead = isWebGPU ? `textureSample(${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}` : `texture2D(${normalSamplerName}`;\r\n\r\n const uvForPerturbNormal = !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `${normalRead}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n const tempOutput = state._getFreeVariableName(\"tempOutput\");\r\n state.compilationString += state._declareLocalVar(tempOutput, NodeMaterialBlockConnectionPointTypes.Vector3) + ` = vec3${fSuffix}(0.);\\n`;\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: [\r\n { search: /texture.+?bumpSampler,vBumpUV\\)/g, replace: `${uvForPerturbNormal}` },\r\n {\r\n search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,\r\n replace: `${state._declareLocalVar(\"normalMatrix\", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : this._worldMatrixName});`,\r\n },\r\n { search: /perturbNormal\\(TBN,texture.+?bumpSampler,vBumpUV\\+uvOffset\\).xyz,vBumpInfos.y\\)/g, replace: `perturbNormal(TBN, ${uvForPerturbNormal}, vBumpInfos.y)` },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,vBumpUV,vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), vBumpUV, vBumpInfos.z, ${\r\n isWebGPU\r\n ? useParallax && this.useParallaxOcclusion\r\n ? `${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}`\r\n : \"bump, bumpSampler\"\r\n : useParallax && this.useParallaxOcclusion\r\n ? normalSamplerName\r\n : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName },\r\n { search: /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /vBumpUV/g, replace: uv.associatedVariableName },\r\n { search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" },\r\n { search: /normalW=/g, replace: tempOutput + \" = \" },\r\n { search: /mat3\\(normalMatrix\\)\\*normalW/g, replace: `${mat3}(normalMatrix) * ` + tempOutput },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },\r\n tangentReplaceString,\r\n ],\r\n });\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = vec4${fSuffix}(${tempOutput}, 0.);\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\n`;\r\n codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\\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.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;\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.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
1
+ {"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n private _worldMatrixName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean)\r\n public useParallaxOcclusion = false;\r\n /** Gets or sets a boolean indicating that sampling mode is in Object space */\r\n @editableInPropertyPage(\"Object Space Mode\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\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 // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\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 \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\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[10];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n public override initialize(state: NodeMaterialBuildState) {\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAX_RHS\", nodeMaterial.getScene().useRightHandedSystem, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n defines.setValue(\"OBJECTSPACE_NORMALMAP\", this.useObjectSpaceNormalMap, true);\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n\r\n if (this.useObjectSpaceNormalMap && !this.world.isConnected) {\r\n // World default to the mesh world matrix\r\n effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());\r\n }\r\n }\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const mat3 = isWebGPU ? \"mat3x3f\" : \"mat3\";\r\n const fSuffix = isWebGPU ? \"f\" : \"\";\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._worldMatrixName = state._getFreeDefineName(\"perturbNormalWorldMatrix\");\r\n\r\n state._emitUniformFromString(this._worldMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${this.strength.associatedVariableName}`;\r\n\r\n if (!isWebGPU) {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN;/g, replace: \"\" };\r\n const normalMatrixReplaceString = { search: /uniform mat4 normalMatrix;/g, replace: \"\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n ${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"tbnNormal\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnTangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnBitangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\n`;\r\n state.compilationString += `${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${mat3}(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString, tbnVarying, normalMatrixReplaceString],\r\n });\r\n\r\n const replaceString0 = isWebGPU\r\n ? \"fn parallaxOcclusion(vViewDirCoT: vec3f, vNormalCoT: vec3f, texCoord: vec2f, parallaxScale:f32, bump: texture_2d<f32>, bumpSampler: sampler)\"\r\n : \"#define inline\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\";\r\n\r\n const searchExp0 = isWebGPU\r\n ? /fn parallaxOcclusion\\(vViewDirCoT: vec3f,vNormalCoT: vec3f,texCoord: vec2f,parallaxScale: f32\\)/g\r\n : /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g;\r\n\r\n const replaceString1 = isWebGPU\r\n ? \"fn parallaxOffset(viewDir: vec3f, heightScale: f32, height_: f32)\"\r\n : \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\";\r\n\r\n const searchExp1 = isWebGPU ? /fn parallaxOffset\\(viewDir: vec3f,heightScale: f32\\)/g : /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: searchExp0,\r\n replace: replaceString0,\r\n },\r\n { search: searchExp1, replace: replaceString1 },\r\n { search: /texture.+?bumpSampler,vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const normalRead = isWebGPU ? `textureSample(${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}` : `texture2D(${normalSamplerName}`;\r\n\r\n const uvForPerturbNormal = !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `${normalRead}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n const tempOutput = state._getFreeVariableName(\"tempOutput\");\r\n state.compilationString += state._declareLocalVar(tempOutput, NodeMaterialBlockConnectionPointTypes.Vector3) + ` = vec3${fSuffix}(0.);\\n`;\r\n\r\n const replaceStrings = [\r\n { search: new RegExp(`texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\)`, \"g\"), replace: `${uvForPerturbNormal}` },\r\n {\r\n search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,\r\n replace: `${state._declareLocalVar(\"normalMatrix\", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : this._worldMatrixName});`,\r\n },\r\n {\r\n search: new RegExp(\r\n `perturbNormal\\\\(TBN,texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\+uvOffset\\\\).xyz,${isWebGPU ? \"uniforms.\" : \"\"}vBumpInfos.y\\\\)`,\r\n \"g\"\r\n ),\r\n replace: `perturbNormal(TBN, ${uvForPerturbNormal}, vBumpInfos.y)`,\r\n },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,vBumpUV,vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), vBumpUV, vBumpInfos.z, ${\r\n isWebGPU\r\n ? useParallax && this.useParallaxOcclusion\r\n ? `${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}`\r\n : \"bump, bumpSampler\"\r\n : useParallax && this.useParallaxOcclusion\r\n ? normalSamplerName\r\n : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /normalW=/g, replace: tempOutput + \" = \" },\r\n { search: /mat3\\(normalMatrix\\)\\*normalW/g, replace: `${mat3}(normalMatrix) * ` + tempOutput },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },\r\n tangentReplaceString,\r\n ];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /fragmentInputs.vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /input.vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /uniforms.vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n } else {\r\n replaceStrings.push({ search: /vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n }\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = vec4${fSuffix}(${tempOutput}, 0.);\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\n`;\r\n codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\\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.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;\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.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
@@ -20,6 +20,7 @@ export declare class ShadowMapBlock extends NodeMaterialBlock {
20
20
  * @param state defines the state that will be used for the build
21
21
  */
22
22
  initialize(state: NodeMaterialBuildState): void;
23
+ private _initShaderSourceAsync;
23
24
  /**
24
25
  * Gets the world position input component
25
26
  */
@@ -37,6 +37,26 @@ export class ShadowMapBlock extends NodeMaterialBlock {
37
37
  state._excludeVariableName("clipPos");
38
38
  state._excludeVariableName("worldPos");
39
39
  state._excludeVariableName("zSM");
40
+ this._initShaderSourceAsync(state.shaderLanguage);
41
+ }
42
+ async _initShaderSourceAsync(shaderLanguage) {
43
+ this._codeIsReady = false;
44
+ if (shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
45
+ await Promise.all([
46
+ import("../../../../ShadersWGSL/ShadersInclude/shadowMapVertexMetric.js"),
47
+ import("../../../../ShadersWGSL/ShadersInclude/packingFunctions.js"),
48
+ import("../../../../ShadersWGSL/ShadersInclude/shadowMapFragment.js"),
49
+ ]);
50
+ }
51
+ else {
52
+ await Promise.all([
53
+ import("../../../../Shaders/ShadersInclude/shadowMapVertexMetric.js"),
54
+ import("../../../../Shaders/ShadersInclude/packingFunctions.js"),
55
+ import("../../../../Shaders/ShadersInclude/shadowMapFragment.js"),
56
+ ]);
57
+ }
58
+ this._codeIsReady = true;
59
+ this.onCodeIsReadyObservable.notifyObservers(this);
40
60
  }
41
61
  /**
42
62
  * Gets the world position input component
@@ -1 +1 @@
1
- {"version":3,"file":"shadowMapBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/shadowMapBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to output the depth to a shadow map\r\n */\r\nexport class ShadowMapBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ShadowMapBlock\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.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"viewProjection\", NodeMaterialBlockConnectionPointTypes.Matrix, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerOutput(\"depth\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this.worldNormal.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 \"ShadowMapBlock\";\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(\"vPositionWSM\");\r\n state._excludeVariableName(\"lightDataSM\");\r\n state._excludeVariableName(\"biasAndScaleSM\");\r\n state._excludeVariableName(\"depthValuesSM\");\r\n state._excludeVariableName(\"clipPos\");\r\n state._excludeVariableName(\"worldPos\");\r\n state._excludeVariableName(\"zSM\");\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the view x projection input component\r\n */\r\n public get viewProjection(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the depth output component\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n state._emitUniformFromString(\"biasAndScaleSM\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"lightDataSM\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"depthValuesSM\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitFunctionFromInclude(\"packingFunctions\", comments);\r\n\r\n state.compilationString += `${state._declareLocalVar(\"worldPos\", NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this.worldPosition.associatedVariableName};\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"vPositionWSM\", NodeMaterialBlockConnectionPointTypes.Vector3)};\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"vDepthMetricSM\", NodeMaterialBlockConnectionPointTypes.Float)} = 0.0;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"zSM\", NodeMaterialBlockConnectionPointTypes.Float)};\\n`;\r\n\r\n if (this.worldNormal.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"vNormalW\", NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.worldNormal.associatedVariableName}.xyz;\\n`;\r\n state.compilationString += state._emitCodeFromInclude(\"shadowMapVertexNormalBias\", comments);\r\n }\r\n\r\n state.compilationString += `${state._declareLocalVar(\"clipPos\", NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this.viewProjection.associatedVariableName} * worldPos;\\n`;\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"shadowMapVertexMetric\", comments, {\r\n replaceStrings: [\r\n {\r\n search: /gl_Position/g,\r\n replace: \"clipPos\",\r\n },\r\n {\r\n search: /vertexOutputs.position/g,\r\n replace: \"clipPos\",\r\n },\r\n ],\r\n });\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"shadowMapFragment\", comments, {\r\n replaceStrings: [\r\n {\r\n search: /return;/g,\r\n replace: \"\",\r\n },\r\n ],\r\n });\r\n const output = isWebGPU ? \"fragmentOutputs.fragDepth\" : \"gl_FragDepth\";\r\n state.compilationString += `\r\n #if SM_DEPTHTEXTURE == 1\r\n #ifdef IS_NDC_HALF_ZRANGE\r\n ${output} = (clipPos.z / clipPos.w);\r\n #else\r\n ${output} = (clipPos.z / clipPos.w) * 0.5 + 0.5;\r\n #endif\r\n #endif\r\n `;\r\n\r\n state.compilationString += `${state._declareOutput(this.depth)} = vec3${state.fSuffix}(depthSM, 1., 1.);\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ShadowMapBlock\", ShadowMapBlock);\r\n"]}
1
+ {"version":3,"file":"shadowMapBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/shadowMapBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to output the depth to a shadow map\r\n */\r\nexport class ShadowMapBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ShadowMapBlock\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.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"viewProjection\", NodeMaterialBlockConnectionPointTypes.Matrix, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerOutput(\"depth\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this.worldNormal.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 \"ShadowMapBlock\";\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(\"vPositionWSM\");\r\n state._excludeVariableName(\"lightDataSM\");\r\n state._excludeVariableName(\"biasAndScaleSM\");\r\n state._excludeVariableName(\"depthValuesSM\");\r\n state._excludeVariableName(\"clipPos\");\r\n state._excludeVariableName(\"worldPos\");\r\n state._excludeVariableName(\"zSM\");\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/shadowMapVertexMetric\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/packingFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/shadowMapFragment\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/shadowMapVertexMetric\"),\r\n import(\"../../../../Shaders/ShadersInclude/packingFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/shadowMapFragment\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the view x projection input component\r\n */\r\n public get viewProjection(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the depth output component\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n state._emitUniformFromString(\"biasAndScaleSM\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"lightDataSM\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"depthValuesSM\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitFunctionFromInclude(\"packingFunctions\", comments);\r\n\r\n state.compilationString += `${state._declareLocalVar(\"worldPos\", NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this.worldPosition.associatedVariableName};\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"vPositionWSM\", NodeMaterialBlockConnectionPointTypes.Vector3)};\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"vDepthMetricSM\", NodeMaterialBlockConnectionPointTypes.Float)} = 0.0;\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"zSM\", NodeMaterialBlockConnectionPointTypes.Float)};\\n`;\r\n\r\n if (this.worldNormal.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"vNormalW\", NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.worldNormal.associatedVariableName}.xyz;\\n`;\r\n state.compilationString += state._emitCodeFromInclude(\"shadowMapVertexNormalBias\", comments);\r\n }\r\n\r\n state.compilationString += `${state._declareLocalVar(\"clipPos\", NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this.viewProjection.associatedVariableName} * worldPos;\\n`;\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"shadowMapVertexMetric\", comments, {\r\n replaceStrings: [\r\n {\r\n search: /gl_Position/g,\r\n replace: \"clipPos\",\r\n },\r\n {\r\n search: /vertexOutputs.position/g,\r\n replace: \"clipPos\",\r\n },\r\n ],\r\n });\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"shadowMapFragment\", comments, {\r\n replaceStrings: [\r\n {\r\n search: /return;/g,\r\n replace: \"\",\r\n },\r\n ],\r\n });\r\n const output = isWebGPU ? \"fragmentOutputs.fragDepth\" : \"gl_FragDepth\";\r\n state.compilationString += `\r\n #if SM_DEPTHTEXTURE == 1\r\n #ifdef IS_NDC_HALF_ZRANGE\r\n ${output} = (clipPos.z / clipPos.w);\r\n #else\r\n ${output} = (clipPos.z / clipPos.w) * 0.5 + 0.5;\r\n #endif\r\n #endif\r\n `;\r\n\r\n state.compilationString += `${state._declareOutput(this.depth)} = vec3${state.fSuffix}(depthSM, 1., 1.);\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ShadowMapBlock\", ShadowMapBlock);\r\n"]}
@@ -90,6 +90,7 @@ export class AnisotropyBlock extends NodeMaterialBlock {
90
90
  const worldPosition = this.worldPositionConnectionPoint;
91
91
  const worldNormal = this.worldNormalConnectionPoint;
92
92
  const worldTangent = this.worldTangent;
93
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
93
94
  if (!uv.isConnected) {
94
95
  // we must set the uv input as optional because we may not end up in this method (in case a PerturbNormal block is linked to the PBR material)
95
96
  // in which case uv is not required. But if we do come here, we do need the uv, so we have to raise an error but not with throw, else
@@ -102,21 +103,21 @@ export class AnisotropyBlock extends NodeMaterialBlock {
102
103
  if (TBN.isConnected) {
103
104
  state.compilationString += `
104
105
  #ifdef TBNBLOCK
105
- mat3 vTBN = ${TBN.associatedVariableName};
106
+ ${isWebGPU ? "var TBN" : "mat3 TBN"} = ${TBN.associatedVariableName};
106
107
  #endif
107
108
  `;
108
109
  }
109
110
  else if (worldTangent.isConnected) {
110
- code += `vec3 tbnNormal = normalize(${worldNormal.associatedVariableName}.xyz);\n`;
111
- code += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\n`;
112
- code += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\n`;
113
- code += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\n`;
111
+ code += `${state._declareLocalVar("tbnNormal", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\n`;
112
+ code += `${state._declareLocalVar("tbnTangent", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\n`;
113
+ code += `${state._declareLocalVar("tbnBitangent", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\n`;
114
+ code += `${isWebGPU ? "var vTBN" : "mat3 vTBN"} = ${isWebGPU ? "mat3x3f" : "mat3"}(tbnTangent, tbnBitangent, tbnNormal);\n`;
114
115
  }
115
116
  code += `
116
117
  #if defined(${worldTangent.isConnected ? "TANGENT" : "IGNORE"}) && defined(NORMAL)
117
- mat3 TBN = vTBN;
118
+ ${isWebGPU ? "var TBN" : "mat3 TBN"} = vTBN;
118
119
  #else
119
- mat3 TBN = cotangent_frame(${worldNormal.associatedVariableName + ".xyz"}, ${"v_" + worldPosition.associatedVariableName + ".xyz"}, ${uv.isConnected ? uv.associatedVariableName : "vec2(0.)"}, vec2(1., 1.));
120
+ ${isWebGPU ? "var TBN" : "mat3 TBN"} = cotangent_frame(${worldNormal.associatedVariableName + ".xyz"}, ${"v_" + worldPosition.associatedVariableName + ".xyz"}, ${uv.isConnected ? uv.associatedVariableName : "vec2(0.)"}, vec2${state.fSuffix}(1., 1.));
120
121
  #endif\n`;
121
122
  state._emitFunctionFromInclude("bumpFragmentMainFunctions", comments, {
122
123
  replaceStrings: [tangentReplaceString],
@@ -1 +1 @@
1
- {"version":3,"file":"anisotropyBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/anisotropyBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"../Fragment/TBNBlock\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the anisotropy module of the PBR material\r\n */\r\nexport class AnisotropyBlock extends NodeMaterialBlock {\r\n private _tangentCorrectionFactorName = \"\";\r\n\r\n /**\r\n * The two 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\r\n /**\r\n * Create a new AnisotropyBlock\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, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"direction\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, true); // need this property and the next one in case there's no PerturbNormal block connected to the main PBR block\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"anisotropy\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"anisotropy\", this, NodeMaterialConnectionPointDirection.Output, AnisotropyBlock, \"AnisotropyBlock\")\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(\"anisotropicOut\");\r\n state._excludeVariableName(\"TBN\");\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 \"AnisotropyBlock\";\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 direction input component\r\n */\r\n public get direction(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the worldTangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the anisotropy object output component\r\n */\r\n public get anisotropy(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _generateTBNSpace(state: NodeMaterialBuildState) {\r\n let code = \"\";\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPositionConnectionPoint;\r\n const worldNormal = this.worldNormalConnectionPoint;\r\n const worldTangent = this.worldTangent;\r\n\r\n if (!uv.isConnected) {\r\n // we must set the uv input as optional because we may not end up in this method (in case a PerturbNormal block is linked to the PBR material)\r\n // in which case uv is not required. But if we do come here, we do need the uv, so we have to raise an error but not with throw, else\r\n // it will stop the building of the node material and will lead to errors in the editor!\r\n Logger.Error(\"You must connect the 'uv' input of the Anisotropy block!\");\r\n }\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n mat3 vTBN = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n code += `vec3 tbnNormal = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n code += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n code += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\n`;\r\n code += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n code += `\r\n #if defined(${worldTangent.isConnected ? \"TANGENT\" : \"IGNORE\"}) && defined(NORMAL)\r\n mat3 TBN = vTBN;\r\n #else\r\n mat3 TBN = cotangent_frame(${worldNormal.associatedVariableName + \".xyz\"}, ${\"v_\" + worldPosition.associatedVariableName + \".xyz\"}, ${\r\n uv.isConnected ? uv.associatedVariableName : \"vec2(0.)\"\r\n }, vec2(1., 1.));\r\n #endif\\n`;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString],\r\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 generateTBNSpace if true, the code needed to create the TBN coordinate space is generated\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, generateTBNSpace = false): string {\r\n let code = \"\";\r\n\r\n if (generateTBNSpace) {\r\n code += this._generateTBNSpace(state);\r\n }\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.0\";\r\n const direction = this.direction.isConnected ? this.direction.associatedVariableName : \"vec2(1., 0.)\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n\r\n code += `${isWebGPU ? \"var anisotropicOut: anisotropicOutParams\" : \"anisotropicOutParams anisotropicOut\"};\r\n anisotropicOut = anisotropicBlock(\r\n vec3(${direction}, ${intensity}),\r\n ${roughness},\r\n #ifdef ANISOTROPIC_TEXTURE\r\n vec3(0.),\r\n #endif\r\n TBN,\r\n normalW,\r\n viewDirectionW\r\n );\\n`;\r\n\r\n return code;\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"ANISOTROPIC\", true);\r\n defines.setValue(\"ANISOTROPIC_TEXTURE\", false, true);\r\n defines.setValue(\"ANISOTROPIC_LEGACY\", !this.roughness.isConnected);\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 if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.AnisotropyBlock\", AnisotropyBlock);\r\n"]}
1
+ {"version":3,"file":"anisotropyBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/anisotropyBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAG1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,mCAAyB;AAI1C;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,iBAAiB;IAclD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAlB3C,iCAA4B,GAAG,EAAE,CAAC;QAoBtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACtH,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,qCAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACxH,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,qCAAqC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,6GAA6G;QAC5L,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qCAAqC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxF,IAAI,CAAC,aAAa,CACd,KAAK,EACL,qCAAqC,CAAC,MAAM,EAC5C,IAAI,EACJ,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,KAAK,EAAE,IAAI,sDAA8C,QAAQ,EAAE,UAAU,CAAC,CAC7H,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAEtH,IAAI,CAAC,cAAc,CACf,YAAY,EACZ,qCAAqC,CAAC,MAAM,EAC5C,wBAAwB,CAAC,QAAQ,EACjC,IAAI,uCAAuC,CAAC,YAAY,EAAE,IAAI,uDAA+C,eAAe,EAAE,iBAAiB,CAAC,CACnJ,CAAC;IACN,CAAC;IAED;;;OAGG;IACa,UAAU,CAAC,KAA6B;QACpD,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAC7C,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,EAAE;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,gEAAgE;IAChE,IAAW,GAAG;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEO,iBAAiB,CAAC,KAA6B;QACnD,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,aAAa,GAAG,IAAI,CAAC,4BAA4B,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC;QAE9D,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YACjB,8IAA8I;YAC9I,qIAAqI;YACrI,wFAAwF;YACxF,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;SAC5E;QAED,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,iDAAiD,CAAC,CAAC;QAEvF,MAAM,oBAAoB,GAAG,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAE3I,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,GAAG,CAAC,WAAW,EAAE;YACjB,KAAK,CAAC,iBAAiB,IAAI;;cAEzB,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,MAAM,GAAG,CAAC,sBAAsB;;aAElE,CAAC;SACL;aAAM,IAAI,YAAY,CAAC,WAAW,EAAE;YACjC,IAAI,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,qCAAqC,CAAC,OAAO,CAAC,gBAAgB,WAAW,CAAC,sBAAsB,UAAU,CAAC;YAC1J,IAAI,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,qCAAqC,CAAC,OAAO,CAAC,gBAAgB,YAAY,CAAC,sBAAsB,UAAU,CAAC;YAC5J,IAAI,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,qCAAqC,CAAC,OAAO,CAAC,qCAAqC,IAAI,CAAC,4BAA4B,KAAK,CAAC;YAC5K,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,MAAM,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,0CAA0C,CAAC;SAC/H;QAED,IAAI,IAAI;0BACU,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;kBACvD,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;;kBAEjC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,sBAAsB,WAAW,CAAC,sBAAsB,GAAG,MAAM,KAAK,IAAI,GAAG,aAAa,CAAC,sBAAsB,GAAG,MAAM,KACzJ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,UACjD,SAAS,KAAK,CAAC,OAAO;qBACjB,CAAC;QAEd,KAAK,CAAC,wBAAwB,CAAC,2BAA2B,EAAE,QAAQ,EAAE;YAClE,cAAc,EAAE,CAAC,oBAAoB,CAAC;SACzC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,KAA6B,EAAE,gBAAgB,GAAG,KAAK;QAClE,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,gBAAgB,EAAE;YAClB,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SACzC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC;QAE9D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7F,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,cAAc,CAAC;QACtG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5F,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,qCAAqC;;uBAEzF,SAAS,KAAK,SAAS;kBAC5B,SAAS;;;;;;;iBAOV,CAAC;QAEV,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,cAAc,CAAC,IAAkB,EAAE,YAA0B,EAAE,OAA4B;QACvG,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAElD,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxE,CAAC;IAEe,IAAI,CAAC,MAAc,EAAE,YAA0B,EAAE,IAAW;QACxE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAEvC,IAAI,IAAI,EAAE;YACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxG;IACL,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,EAAE;YACpD,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;YACxF,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,4BAA4B,EAAE,qCAAqC,CAAC,KAAK,CAAC,CAAC;SAChH;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC","sourcesContent":["import type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"../Fragment/TBNBlock\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the anisotropy module of the PBR material\r\n */\r\nexport class AnisotropyBlock extends NodeMaterialBlock {\r\n private _tangentCorrectionFactorName = \"\";\r\n\r\n /**\r\n * The two 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\r\n /**\r\n * Create a new AnisotropyBlock\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, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"direction\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, true); // need this property and the next one in case there's no PerturbNormal block connected to the main PBR block\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"anisotropy\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"anisotropy\", this, NodeMaterialConnectionPointDirection.Output, AnisotropyBlock, \"AnisotropyBlock\")\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(\"anisotropicOut\");\r\n state._excludeVariableName(\"TBN\");\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 \"AnisotropyBlock\";\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 direction input component\r\n */\r\n public get direction(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the worldTangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the anisotropy object output component\r\n */\r\n public get anisotropy(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _generateTBNSpace(state: NodeMaterialBuildState) {\r\n let code = \"\";\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPositionConnectionPoint;\r\n const worldNormal = this.worldNormalConnectionPoint;\r\n const worldTangent = this.worldTangent;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n if (!uv.isConnected) {\r\n // we must set the uv input as optional because we may not end up in this method (in case a PerturbNormal block is linked to the PBR material)\r\n // in which case uv is not required. But if we do come here, we do need the uv, so we have to raise an error but not with throw, else\r\n // it will stop the building of the node material and will lead to errors in the editor!\r\n Logger.Error(\"You must connect the 'uv' input of the Anisotropy block!\");\r\n }\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n ${isWebGPU ? \"var TBN\" : \"mat3 TBN\"} = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n code += `${state._declareLocalVar(\"tbnNormal\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n code += `${state._declareLocalVar(\"tbnTangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n code += `${state._declareLocalVar(\"tbnBitangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\n`;\r\n code += `${isWebGPU ? \"var vTBN\" : \"mat3 vTBN\"} = ${isWebGPU ? \"mat3x3f\" : \"mat3\"}(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n code += `\r\n #if defined(${worldTangent.isConnected ? \"TANGENT\" : \"IGNORE\"}) && defined(NORMAL)\r\n ${isWebGPU ? \"var TBN\" : \"mat3 TBN\"} = vTBN;\r\n #else\r\n ${isWebGPU ? \"var TBN\" : \"mat3 TBN\"} = cotangent_frame(${worldNormal.associatedVariableName + \".xyz\"}, ${\"v_\" + worldPosition.associatedVariableName + \".xyz\"}, ${\r\n uv.isConnected ? uv.associatedVariableName : \"vec2(0.)\"\r\n }, vec2${state.fSuffix}(1., 1.));\r\n #endif\\n`;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString],\r\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 generateTBNSpace if true, the code needed to create the TBN coordinate space is generated\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, generateTBNSpace = false): string {\r\n let code = \"\";\r\n\r\n if (generateTBNSpace) {\r\n code += this._generateTBNSpace(state);\r\n }\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.0\";\r\n const direction = this.direction.isConnected ? this.direction.associatedVariableName : \"vec2(1., 0.)\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n\r\n code += `${isWebGPU ? \"var anisotropicOut: anisotropicOutParams\" : \"anisotropicOutParams anisotropicOut\"};\r\n anisotropicOut = anisotropicBlock(\r\n vec3(${direction}, ${intensity}),\r\n ${roughness},\r\n #ifdef ANISOTROPIC_TEXTURE\r\n vec3(0.),\r\n #endif\r\n TBN,\r\n normalW,\r\n viewDirectionW\r\n );\\n`;\r\n\r\n return code;\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"ANISOTROPIC\", true);\r\n defines.setValue(\"ANISOTROPIC_TEXTURE\", false, true);\r\n defines.setValue(\"ANISOTROPIC_LEGACY\", !this.roughness.isConnected);\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 if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.AnisotropyBlock\", AnisotropyBlock);\r\n"]}