@babylonjs/core 7.15.2 → 7.16.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 (214) hide show
  1. package/Animations/animationGroup.d.ts +1 -0
  2. package/Animations/animationGroup.js +4 -1
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Collisions/gpuPicker.js +1 -1
  5. package/Collisions/gpuPicker.js.map +1 -1
  6. package/Compute/computeEffect.js +1 -1
  7. package/Compute/computeEffect.js.map +1 -1
  8. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +32 -0
  9. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +32 -0
  10. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  11. package/Engines/abstractEngine.js +2 -2
  12. package/Engines/abstractEngine.js.map +1 -1
  13. package/Engines/engine.d.ts +1993 -1993
  14. package/Engines/nativeEngine.d.ts +7 -0
  15. package/Engines/nativeEngine.js +24 -1
  16. package/Engines/nativeEngine.js.map +1 -1
  17. package/Engines/thinEngine.js +2 -2
  18. package/Engines/thinEngine.js.map +1 -1
  19. package/Engines/webgpuEngine.js +3 -3
  20. package/Engines/webgpuEngine.js.map +1 -1
  21. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -6
  22. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  23. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +4 -7
  24. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  25. package/Materials/Node/Blocks/Dual/textureBlock.js +1 -1
  26. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  27. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +4 -4
  28. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  29. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +46 -40
  30. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  31. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +2 -1
  32. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +10 -9
  33. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  34. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +1 -0
  35. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +85 -69
  36. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  37. package/Materials/Node/Blocks/PBR/reflectionBlock.js +54 -38
  38. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  39. package/Materials/Node/Blocks/PBR/refractionBlock.js +2 -2
  40. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  41. package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +2 -1
  42. package/Materials/Node/Blocks/PBR/sheenBlock.js +40 -32
  43. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  44. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +53 -45
  45. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  46. package/Materials/Node/nodeMaterial.d.ts +2 -1
  47. package/Materials/Node/nodeMaterial.js +4 -1
  48. package/Materials/Node/nodeMaterial.js.map +1 -1
  49. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -0
  50. package/Materials/Node/nodeMaterialBuildState.js +12 -3
  51. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  52. package/Materials/Textures/rawTexture.d.ts +5 -0
  53. package/Materials/Textures/rawTexture.js +13 -0
  54. package/Materials/Textures/rawTexture.js.map +1 -1
  55. package/Materials/effect.js +2 -2
  56. package/Materials/effect.js.map +1 -1
  57. package/Meshes/Builders/decalBuilder.js +12 -12
  58. package/Meshes/Builders/decalBuilder.js.map +1 -1
  59. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +10 -1
  60. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +50 -11
  61. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  62. package/Meshes/Node/nodeGeometry.d.ts +6 -0
  63. package/Meshes/Node/nodeGeometry.js +7 -0
  64. package/Meshes/Node/nodeGeometry.js.map +1 -1
  65. package/Meshes/mesh.d.ts +1 -0
  66. package/Meshes/mesh.js +138 -134
  67. package/Meshes/mesh.js.map +1 -1
  68. package/Meshes/subMesh.js +1 -1
  69. package/Meshes/subMesh.js.map +1 -1
  70. package/Misc/khronosTextureContainer2.js +1 -1
  71. package/Misc/khronosTextureContainer2.js.map +1 -1
  72. package/Rendering/GlobalIllumination/giRSMManager.js +1 -1
  73. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  74. package/Rendering/edgesRenderer.js +1 -1
  75. package/Rendering/edgesRenderer.js.map +1 -1
  76. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +1 -1
  77. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  78. package/Shaders/ShadersInclude/lightFragment.js +3 -3
  79. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  80. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
  81. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  82. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +13 -14
  83. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  84. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +4 -5
  85. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
  86. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +4 -5
  87. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
  88. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +4 -5
  89. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
  90. package/Shaders/ShadersInclude/pbrBlockClearcoat.js +34 -35
  91. package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  92. package/Shaders/ShadersInclude/pbrBlockIridescence.js +10 -11
  93. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -1
  94. package/Shaders/ShadersInclude/pbrBlockReflection.js +23 -24
  95. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  96. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +12 -13
  97. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  98. package/Shaders/ShadersInclude/pbrBlockSheen.js +31 -32
  99. package/Shaders/ShadersInclude/pbrBlockSheen.js.map +1 -1
  100. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +43 -44
  101. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  102. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  103. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  104. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  105. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  106. package/Shaders/pbr.fragment.js +143 -153
  107. package/Shaders/pbr.fragment.js.map +1 -1
  108. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +3 -3
  109. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  110. package/ShadersWGSL/ShadersInclude/decalFragment.d.ts +5 -0
  111. package/ShadersWGSL/ShadersInclude/decalFragment.js +18 -0
  112. package/ShadersWGSL/ShadersInclude/decalFragment.js.map +1 -0
  113. package/ShadersWGSL/ShadersInclude/depthPrePass.d.ts +5 -0
  114. package/ShadersWGSL/ShadersInclude/depthPrePass.js +12 -0
  115. package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -0
  116. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.d.ts +5 -0
  117. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js +24 -0
  118. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js.map +1 -0
  119. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.d.ts +5 -0
  120. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +39 -0
  121. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -0
  122. package/ShadersWGSL/ShadersInclude/helperFunctions.js +6 -2
  123. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  124. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +2 -2
  125. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  126. package/ShadersWGSL/ShadersInclude/importanceSampling.d.ts +5 -0
  127. package/ShadersWGSL/ShadersInclude/importanceSampling.js +12 -0
  128. package/ShadersWGSL/ShadersInclude/importanceSampling.js.map +1 -0
  129. package/ShadersWGSL/ShadersInclude/lightFragment.js +3 -3
  130. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  131. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +1 -1
  132. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  133. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.d.ts +5 -0
  134. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +139 -0
  135. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -0
  136. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +6 -0
  137. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js +81 -0
  138. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -0
  139. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.d.ts +5 -0
  140. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js +37 -0
  141. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -0
  142. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.d.ts +5 -0
  143. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js +35 -0
  144. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -0
  145. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.d.ts +5 -0
  146. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js +46 -0
  147. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js.map +1 -0
  148. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.d.ts +5 -0
  149. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js +267 -0
  150. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js.map +1 -0
  151. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.d.ts +5 -0
  152. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +24 -0
  153. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -0
  154. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.d.ts +5 -0
  155. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js +51 -0
  156. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -0
  157. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.d.ts +5 -0
  158. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +96 -0
  159. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -0
  160. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.d.ts +5 -0
  161. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +26 -0
  162. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -0
  163. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.d.ts +5 -0
  164. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js +33 -0
  165. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -0
  166. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.d.ts +5 -0
  167. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js +20 -0
  168. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js.map +1 -0
  169. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.d.ts +5 -0
  170. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js +51 -0
  171. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js.map +1 -0
  172. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.d.ts +5 -0
  173. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js +19 -0
  174. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js.map +1 -0
  175. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.d.ts +5 -0
  176. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +19 -0
  177. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -0
  178. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.d.ts +5 -0
  179. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +30 -0
  180. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -0
  181. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.d.ts +5 -0
  182. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js +18 -0
  183. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js.map +1 -0
  184. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.d.ts +5 -0
  185. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +277 -0
  186. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -0
  187. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.d.ts +5 -0
  188. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +120 -0
  189. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -0
  190. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.d.ts +5 -0
  191. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js +195 -0
  192. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js.map +1 -0
  193. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.d.ts +5 -0
  194. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +425 -0
  195. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -0
  196. package/ShadersWGSL/ShadersInclude/pbrDebug.d.ts +5 -0
  197. package/ShadersWGSL/ShadersInclude/pbrDebug.js +193 -0
  198. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -0
  199. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.d.ts +5 -0
  200. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js +43 -0
  201. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -0
  202. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.d.ts +5 -0
  203. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +68 -0
  204. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -0
  205. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +5 -0
  206. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +30 -0
  207. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -0
  208. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.d.ts +5 -0
  209. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +41 -0
  210. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -0
  211. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.d.ts +5 -0
  212. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +23 -0
  213. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -0
  214. package/package.json +1 -1
@@ -37,6 +37,7 @@ const mapOutputToVariable = {
37
37
  };
38
38
  /**
39
39
  * Block used to implement the PBR metallic/roughness model
40
+ * #D8AK3Z#80
40
41
  */
41
42
  export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
42
43
  static _OnGenerateOnlyFragmentCodeChanged(block, _propertyName) {
@@ -597,6 +598,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
597
598
  _injectVertexCode(state) {
598
599
  const worldPos = this.worldPosition;
599
600
  const comments = `//${this.name}`;
601
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
600
602
  // Declaration
601
603
  if (!this.light) {
602
604
  // Emit for all lights
@@ -616,7 +618,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
616
618
  // Inject code in vertex
617
619
  const worldPosVaryingName = "v_" + worldPos.associatedVariableName;
618
620
  if (state._emitVaryingFromString(worldPosVaryingName, NodeMaterialBlockConnectionPointTypes.Vector4)) {
619
- state.compilationString += `${worldPosVaryingName} = ${worldPos.associatedVariableName};\n`;
621
+ state.compilationString += (isWebGPU ? "vertexOutputs." : "") + `${worldPosVaryingName} = ${worldPos.associatedVariableName};\n`;
620
622
  }
621
623
  const reflectionBlock = this.reflection.isConnected ? this.reflection.connectedPoint?.ownerBlock : null;
622
624
  if (reflectionBlock) {
@@ -625,7 +627,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
625
627
  state.compilationString += reflectionBlock?.handleVertexSide(state) ?? "";
626
628
  if (state._emitVaryingFromString("vClipSpacePosition", NodeMaterialBlockConnectionPointTypes.Vector4, "defined(IGNORE) || DEBUGMODE > 0")) {
627
629
  state._injectAtEnd += `#if DEBUGMODE > 0\n`;
628
- state._injectAtEnd += `vClipSpacePosition = gl_Position;\n`;
630
+ state._injectAtEnd += (isWebGPU ? "vertexOutputs." : "") + `vClipSpacePosition = ${isWebGPU ? "vertexOutputs.position" : "gl_Position"};\n`;
629
631
  state._injectAtEnd += `#endif\n`;
630
632
  }
631
633
  if (this.light) {
@@ -637,76 +639,76 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
637
639
  });
638
640
  }
639
641
  else {
640
- state.compilationString += `vec4 worldPos = ${worldPos.associatedVariableName};\n`;
642
+ state.compilationString += `${state._declareLocalVar("worldPos", NodeMaterialBlockConnectionPointTypes.Vector4)} = ${worldPos.associatedVariableName};\n`;
641
643
  if (this.view.isConnected) {
642
- state.compilationString += `mat4 view = ${this.view.associatedVariableName};\n`;
644
+ state.compilationString += `${state._declareLocalVar("view", NodeMaterialBlockConnectionPointTypes.Matrix)} = ${this.view.associatedVariableName};\n`;
643
645
  }
644
646
  state.compilationString += state._emitCodeFromInclude("shadowsVertex", comments, {
645
647
  repeatKey: "maxSimultaneousLights",
646
648
  });
647
649
  }
648
650
  }
649
- _getAlbedoOpacityCode() {
650
- let code = `albedoOpacityOutParams albedoOpacityOut;\n`;
651
+ _getAlbedoOpacityCode(state) {
652
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
653
+ let code = isWebGPU ? "var albedoOpacityOut: albedoOpacityOutParams;\n" : `albedoOpacityOutParams albedoOpacityOut;\n`;
651
654
  const albedoColor = this.baseColor.isConnected ? this.baseColor.associatedVariableName : "vec3(1.)";
652
655
  const opacity = this.opacity.isConnected ? this.opacity.associatedVariableName : "1.";
653
- code += `albedoOpacityBlock(
654
- vec4(${albedoColor}, 1.),
656
+ code += `albedoOpacityOut = albedoOpacityBlock(
657
+ vec4${state.fSuffix}(${albedoColor}, 1.)
655
658
  #ifdef ALBEDO
656
- vec4(1.),
657
- vec2(1., 1.),
659
+ ,vec4${state.fSuffix}(1.)
660
+ ,vec2${state.fSuffix}(1., 1.)
658
661
  #endif
659
662
  #ifdef OPACITY
660
- vec4(${opacity}),
661
- vec2(1., 1.),
662
- #endif
663
- albedoOpacityOut
663
+ ,vec4${state.fSuffix}(${opacity})
664
+ ,vec2${state.fSuffix}(1., 1.)
665
+ #endif
664
666
  );
665
667
 
666
- vec3 surfaceAlbedo = albedoOpacityOut.surfaceAlbedo;
667
- float alpha = albedoOpacityOut.alpha;\n`;
668
+ ${state._declareLocalVar("surfaceAlbedo", NodeMaterialBlockConnectionPointTypes.Vector3)} = albedoOpacityOut.surfaceAlbedo;
669
+ ${state._declareLocalVar("alpha", NodeMaterialBlockConnectionPointTypes.Float)} = albedoOpacityOut.alpha;\n`;
668
670
  return code;
669
671
  }
670
- _getAmbientOcclusionCode() {
671
- let code = `ambientOcclusionOutParams aoOut;\n`;
672
+ _getAmbientOcclusionCode(state) {
673
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
674
+ let code = isWebGPU ? "var aoOut: ambientOcclusionOutParams;\n" : `ambientOcclusionOutParams aoOut;\n`;
672
675
  const ao = this.ambientOcc.isConnected ? this.ambientOcc.associatedVariableName : "1.";
673
- code += `ambientOcclusionBlock(
676
+ code += `aoOut = ambientOcclusionBlock(
674
677
  #ifdef AMBIENT
675
- vec3(${ao}),
676
- vec4(0., 1.0, 1.0, 0.),
678
+ vec3${state.fSuffix}(${ao}),
679
+ vec4${state.fSuffix}(0., 1.0, 1.0, 0.)
677
680
  #endif
678
- aoOut
679
681
  );\n`;
680
682
  return code;
681
683
  }
682
684
  _getReflectivityCode(state) {
683
- let code = `reflectivityOutParams reflectivityOut;\n`;
685
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
686
+ let code = isWebGPU ? "var reflectivityOut: reflectivityOutParams;\n" : `reflectivityOutParams reflectivityOut;\n`;
684
687
  const aoIntensity = "1.";
685
688
  this._vMetallicReflectanceFactorsName = state._getFreeVariableName("vMetallicReflectanceFactors");
686
689
  state._emitUniformFromString(this._vMetallicReflectanceFactorsName, NodeMaterialBlockConnectionPointTypes.Vector4);
687
- code += `vec3 baseColor = surfaceAlbedo;
690
+ code += `${state._declareLocalVar("baseColor", NodeMaterialBlockConnectionPointTypes.Vector3)} = surfaceAlbedo;
688
691
 
689
- reflectivityBlock(
690
- vec4(${this.metallic.associatedVariableName}, ${this.roughness.associatedVariableName}, 0., 0.),
692
+ reflectivityOut = reflectivityBlock(
693
+ vec4${state.fSuffix}(${this.metallic.associatedVariableName}, ${this.roughness.associatedVariableName}, 0., 0.)
691
694
  #ifdef METALLICWORKFLOW
692
- surfaceAlbedo,
693
- ${this._vMetallicReflectanceFactorsName},
695
+ , surfaceAlbedo
696
+ , ${(isWebGPU ? "uniforms." : "") + this._vMetallicReflectanceFactorsName}
694
697
  #endif
695
698
  #ifdef REFLECTIVITY
696
- vec3(0., 0., ${aoIntensity}),
697
- vec4(1.),
699
+ , vec3${state.fSuffix}(0., 0., ${aoIntensity})
700
+ , vec4${state.fSuffix}(1.)
698
701
  #endif
699
702
  #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
700
- aoOut.ambientOcclusionColor,
703
+ , aoOut.ambientOcclusionColor
701
704
  #endif
702
705
  #ifdef MICROSURFACEMAP
703
- microSurfaceTexel, <== not handled!
706
+ , microSurfaceTexel <== not handled!
704
707
  #endif
705
- reflectivityOut
706
708
  );
707
709
 
708
- float microSurface = reflectivityOut.microSurface;
709
- float roughness = reflectivityOut.roughness;
710
+ ${state._declareLocalVar("microSurface", NodeMaterialBlockConnectionPointTypes.Float)} = reflectivityOut.microSurface;
711
+ ${state._declareLocalVar("roughness", NodeMaterialBlockConnectionPointTypes.Float)} = reflectivityOut.roughness;
710
712
 
711
713
  #ifdef METALLICWORKFLOW
712
714
  surfaceAlbedo = reflectivityOut.surfaceAlbedo;
@@ -719,6 +721,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
719
721
  _buildBlock(state) {
720
722
  super._buildBlock(state);
721
723
  this._scene = state.sharedData.scene;
724
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
722
725
  if (!this._environmentBRDFTexture) {
723
726
  this._environmentBRDFTexture = GetEnvironmentBRDFTexture(this._scene);
724
727
  }
@@ -747,18 +750,18 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
747
750
  let worldPosVarName = this.worldPosition.associatedVariableName;
748
751
  if (this.generateOnlyFragmentCode) {
749
752
  worldPosVarName = state._getFreeVariableName("globalWorldPos");
750
- state._emitFunction("pbr_globalworldpos", `vec3 ${worldPosVarName};\n`, comments);
753
+ state._emitFunction("pbr_globalworldpos", `vec3${state.fSuffix} ${worldPosVarName};\n`, comments);
751
754
  state.compilationString += `${worldPosVarName} = ${this.worldPosition.associatedVariableName}.xyz;\n`;
752
755
  state.compilationString += state._emitCodeFromInclude("shadowsVertex", comments, {
753
756
  repeatKey: "maxSimultaneousLights",
754
757
  substitutionVars: this.generateOnlyFragmentCode ? `worldPos,${this.worldPosition.associatedVariableName}` : undefined,
755
758
  });
756
759
  state.compilationString += `#if DEBUGMODE > 0\n`;
757
- state.compilationString += `vec4 vClipSpacePosition = vec4((vec2(gl_FragCoord.xy) / vec2(1.0)) * 2.0 - 1.0, 0.0, 1.0);\n`;
760
+ state.compilationString += `${state._declareLocalVar("vClipSpacePosition", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}((vec2${state.fSuffix}(${isWebGPU ? "fragmentInputs.position" : "gl_FragCoord.xy"}) / vec2${state.fSuffix}(1.0)) * 2.0 - 1.0, 0.0, 1.0);\n`;
758
761
  state.compilationString += `#endif\n`;
759
762
  }
760
763
  else {
761
- worldPosVarName = "v_" + worldPosVarName;
764
+ worldPosVarName = (isWebGPU ? "input." : "") + "v_" + worldPosVarName;
762
765
  }
763
766
  this._environmentBrdfSamplerName = state._getFreeVariableName("environmentBrdfSampler");
764
767
  state._emit2DSampler(this._environmentBrdfSamplerName);
@@ -801,17 +804,13 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
801
804
  state._emitFunctionFromInclude("imageProcessingDeclaration", comments);
802
805
  state._emitFunctionFromInclude("imageProcessingFunctions", comments);
803
806
  state._emitFunctionFromInclude("shadowsFragmentFunctions", comments);
804
- state._emitFunctionFromInclude("pbrDirectLightingSetupFunctions", comments, {
805
- replaceStrings: [{ search: /vPositionW/g, replace: worldPosVarName + ".xyz" }],
806
- });
807
+ state._emitFunctionFromInclude("pbrDirectLightingSetupFunctions", comments);
807
808
  state._emitFunctionFromInclude("pbrDirectLightingFalloffFunctions", comments);
808
809
  state._emitFunctionFromInclude("pbrBRDFFunctions", comments, {
809
810
  replaceStrings: [{ search: /REFLECTIONMAP_SKYBOX/g, replace: reflectionBlock?._defineSkyboxName ?? "REFLECTIONMAP_SKYBOX" }],
810
811
  });
811
812
  state._emitFunctionFromInclude("hdrFilteringFunctions", comments);
812
- state._emitFunctionFromInclude("pbrDirectLightingFunctions", comments, {
813
- replaceStrings: [{ search: /vPositionW/g, replace: worldPosVarName + ".xyz" }],
814
- });
813
+ state._emitFunctionFromInclude("pbrDirectLightingFunctions", comments);
815
814
  state._emitFunctionFromInclude("pbrIBLFunctions", comments);
816
815
  state._emitFunctionFromInclude("pbrBlockAlbedoOpacity", comments);
817
816
  state._emitFunctionFromInclude("pbrBlockReflectivity", comments);
@@ -827,29 +826,29 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
827
826
  }
828
827
  // _____________________________ Geometry Information ____________________________
829
828
  this._vNormalWName = state._getFreeVariableName("vNormalW");
830
- state.compilationString += `vec4 ${this._vNormalWName} = normalize(${this.worldNormal.associatedVariableName});\n`;
829
+ state.compilationString += `${state._declareLocalVar(this._vNormalWName, NodeMaterialBlockConnectionPointTypes.Vector4)} = normalize(${this.worldNormal.associatedVariableName});\n`;
831
830
  if (state._registerTempVariable("viewDirectionW")) {
832
- state.compilationString += `vec3 viewDirectionW = normalize(${this.cameraPosition.associatedVariableName} - ${worldPosVarName}.xyz);\n`;
831
+ state.compilationString += `${state._declareLocalVar("viewDirectionW", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${this.cameraPosition.associatedVariableName} - ${worldPosVarName}.xyz);\n`;
833
832
  }
834
- state.compilationString += `vec3 geometricNormalW = ${this._vNormalWName}.xyz;\n`;
835
- state.compilationString += `vec3 normalW = ${normalShading.isConnected ? "normalize(" + normalShading.associatedVariableName + ".xyz)" : "geometricNormalW"};\n`;
833
+ state.compilationString += `${state._declareLocalVar("geometricNormalW", NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this._vNormalWName}.xyz;\n`;
834
+ state.compilationString += `${state._declareLocalVar("normalW", NodeMaterialBlockConnectionPointTypes.Vector3)} = ${normalShading.isConnected ? "normalize(" + normalShading.associatedVariableName + ".xyz)" : "geometricNormalW"};\n`;
836
835
  this._invertNormalName = state._getFreeVariableName("invertNormal");
837
836
  state._emitUniformFromString(this._invertNormalName, NodeMaterialBlockConnectionPointTypes.Float);
838
837
  state.compilationString += state._emitCodeFromInclude("pbrBlockNormalFinal", comments, {
839
838
  replaceStrings: [
840
839
  { search: /vPositionW/g, replace: worldPosVarName + ".xyz" },
841
- { search: /vEyePosition.w/g, replace: this._invertNormalName },
840
+ { search: /vEyePosition.w/g, replace: (isWebGPU ? "uniforms." : "") + this._invertNormalName },
842
841
  ],
843
842
  });
844
843
  // _____________________________ Albedo & Opacity ______________________________
845
- state.compilationString += this._getAlbedoOpacityCode();
844
+ state.compilationString += this._getAlbedoOpacityCode(state);
846
845
  state.compilationString += state._emitCodeFromInclude("depthPrePass", comments);
847
846
  // _____________________________ AO _______________________________
848
- state.compilationString += this._getAmbientOcclusionCode();
847
+ state.compilationString += this._getAmbientOcclusionCode(state);
849
848
  state.compilationString += state._emitCodeFromInclude("pbrBlockLightmapInit", comments);
850
849
  // _____________________________ UNLIT _______________________________
851
850
  state.compilationString += `#ifdef UNLIT
852
- vec3 diffuseBase = vec3(1., 1., 1.);
851
+ ${state._declareLocalVar("diffuseBase", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3${state.fSuffix}(1., 1., 1.);
853
852
  #else\n`;
854
853
  // _____________________________ Reflectivity _______________________________
855
854
  state.compilationString += this._getReflectivityCode(state);
@@ -885,12 +884,12 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
885
884
  });
886
885
  // ___________________ Compute Reflectance aka R0 F0 info _________________________
887
886
  state.compilationString += state._emitCodeFromInclude("pbrBlockReflectance0", comments, {
888
- replaceStrings: [{ search: /metallicReflectanceFactors/g, replace: this._vMetallicReflectanceFactorsName }],
887
+ replaceStrings: [{ search: /metallicReflectanceFactors/g, replace: (isWebGPU ? "uniforms." : "") + this._vMetallicReflectanceFactorsName }],
889
888
  });
890
889
  // ________________________________ Sheen ______________________________
891
890
  const sheenBlock = this.sheen.isConnected ? this.sheen.connectedPoint?.ownerBlock : null;
892
891
  if (sheenBlock) {
893
- state.compilationString += sheenBlock.getCode(reflectionBlock);
892
+ state.compilationString += sheenBlock.getCode(reflectionBlock, state);
894
893
  }
895
894
  state._emitFunctionFromInclude("pbrBlockSheen", comments, {
896
895
  replaceStrings: [
@@ -902,7 +901,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
902
901
  });
903
902
  // _____________________________ Iridescence _______________________________
904
903
  const iridescenceBlock = this.iridescence.isConnected ? this.iridescence.connectedPoint?.ownerBlock : null;
905
- state.compilationString += IridescenceBlock.GetCode(iridescenceBlock);
904
+ state.compilationString += IridescenceBlock.GetCode(iridescenceBlock, state);
906
905
  state._emitFunctionFromInclude("pbrBlockIridescence", comments, {
907
906
  replaceStrings: [],
908
907
  });
@@ -973,37 +972,54 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
973
972
  });
974
973
  }
975
974
  // _____________________________ Compute Final Lit Components ________________________
976
- state.compilationString += state._emitCodeFromInclude("pbrBlockFinalLitComponents", comments);
975
+ if (isWebGPU) {
976
+ state.compilationString += state._emitCodeFromInclude("pbrBlockFinalLitComponents", comments, {
977
+ replaceStrings: [{ search: /vLightingIntensity/g, replace: "uniforms.vLightingIntensity" }],
978
+ });
979
+ }
980
+ else {
981
+ state.compilationString += state._emitCodeFromInclude("pbrBlockFinalLitComponents", comments);
982
+ }
977
983
  // _____________________________ UNLIT (2) ________________________
978
984
  state.compilationString += `#endif\n`; // UNLIT
979
985
  // _____________________________ Compute Final Unlit Components ________________________
980
- const aoColor = this.ambientColor.isConnected ? this.ambientColor.associatedVariableName : "vec3(0., 0., 0.)";
986
+ const aoColor = this.ambientColor.isConnected ? this.ambientColor.associatedVariableName : `vec3${state.fSuffix}(0., 0., 0.)`;
981
987
  let aoDirectLightIntensity = PBRBaseMaterial.DEFAULT_AO_ON_ANALYTICAL_LIGHTS.toString();
982
988
  if (aoDirectLightIntensity.indexOf(".") === -1) {
983
989
  aoDirectLightIntensity += ".";
984
990
  }
991
+ let replaceStrings = [
992
+ { search: /vec3 finalEmissive[\s\S]*?finalEmissive\*=vLightingIntensity\.y;/g, replace: "" },
993
+ { search: /vAmbientColor/g, replace: aoColor + ` * ${isWebGPU ? "uniforms." : ""}ambientFromScene` },
994
+ { search: /vAmbientInfos\.w/g, replace: aoDirectLightIntensity },
995
+ ];
996
+ if (isWebGPU) {
997
+ replaceStrings[0] = { search: /var finalEmissive[\s\S]*?finalEmissive\*=vLightingIntensity\.y;/g, replace: "" };
998
+ replaceStrings.push({ search: /vLightingIntensity/g, replace: "uniforms.vLightingIntensity" });
999
+ }
985
1000
  state.compilationString += state._emitCodeFromInclude("pbrBlockFinalUnlitComponents", comments, {
986
- replaceStrings: [
987
- { search: /vec3 finalEmissive[\s\S]*?finalEmissive\*=vLightingIntensity\.y;/g, replace: "" },
988
- { search: /vAmbientColor/g, replace: aoColor + " * ambientFromScene" },
989
- { search: /vAmbientInfos\.w/g, replace: aoDirectLightIntensity },
990
- ],
1001
+ replaceStrings: replaceStrings,
991
1002
  });
992
1003
  // _____________________________ Output Final Color Composition ________________________
993
1004
  state.compilationString += state._emitCodeFromInclude("pbrBlockFinalColorComposition", comments, {
994
- replaceStrings: [{ search: /finalEmissive/g, replace: "vec3(0.)" }],
1005
+ replaceStrings: [{ search: /finalEmissive/g, replace: `vec3${state.fSuffix}(0.)` }],
995
1006
  });
996
1007
  // _____________________________ Apply image processing ________________________
997
1008
  state.compilationString += state._emitCodeFromInclude("pbrBlockImageProcessing", comments, {
998
1009
  replaceStrings: [{ search: /visibility/g, replace: "1." }],
999
1010
  });
1000
1011
  // _____________________________ Generate debug code ________________________
1012
+ const colorOutput = isWebGPU ? "fragmentOutputs.color" : "gl_FragColor";
1013
+ replaceStrings = [
1014
+ { search: /vNormalW/g, replace: this._vNormalWName },
1015
+ { search: /vPositionW/g, replace: worldPosVarName },
1016
+ {
1017
+ search: /albedoTexture\.rgb;/g,
1018
+ replace: `vec3${state.fSuffix}(1.);\n${colorOutput}.rgb = toGammaSpace(${colorOutput}.rgb);\n`,
1019
+ },
1020
+ ];
1001
1021
  state.compilationString += state._emitCodeFromInclude("pbrDebug", comments, {
1002
- replaceStrings: [
1003
- { search: /vNormalW/g, replace: this._vNormalWName },
1004
- { search: /vPositionW/g, replace: worldPosVarName },
1005
- { search: /albedoTexture\.rgb;/g, replace: "vec3(1.);\ngl_FragColor.rgb = toGammaSpace(gl_FragColor.rgb);\n" },
1006
- ],
1022
+ replaceStrings: replaceStrings,
1007
1023
  });
1008
1024
  // _____________________________ Generate end points ________________________
1009
1025
  for (const output of this._outputs) {
@@ -1017,7 +1033,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
1017
1033
  state.compilationString += `${state._declareOutput(output)} = ${varName};\n`;
1018
1034
  if (conditions) {
1019
1035
  state.compilationString += `#else\n`;
1020
- state.compilationString += `${state._declareOutput(output)} = vec3(0.);\n`;
1036
+ state.compilationString += `${state._declareOutput(output)} = vec3${state.fSuffix}(0.);\n`;
1021
1037
  state.compilationString += `#endif\n`;
1022
1038
  }
1023
1039
  }