@babylonjs/core 7.16.0 → 7.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) 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 +5 -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/Input/inputBlock.js +8 -11
  28. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  29. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +4 -4
  30. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  31. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +46 -40
  32. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  33. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +2 -1
  34. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +10 -9
  35. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  36. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +1 -0
  37. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +85 -69
  38. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  39. package/Materials/Node/Blocks/PBR/reflectionBlock.js +54 -38
  40. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  41. package/Materials/Node/Blocks/PBR/refractionBlock.js +8 -5
  42. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  43. package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +2 -1
  44. package/Materials/Node/Blocks/PBR/sheenBlock.js +40 -32
  45. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  46. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +53 -45
  47. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  48. package/Materials/Node/nodeMaterial.d.ts +2 -1
  49. package/Materials/Node/nodeMaterial.js +4 -1
  50. package/Materials/Node/nodeMaterial.js.map +1 -1
  51. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -0
  52. package/Materials/Node/nodeMaterialBuildState.js +12 -3
  53. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  54. package/Materials/effect.js +2 -2
  55. package/Materials/effect.js.map +1 -1
  56. package/Meshes/Builders/decalBuilder.js +14 -20
  57. package/Meshes/Builders/decalBuilder.js.map +1 -1
  58. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +10 -1
  59. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +50 -11
  60. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  61. package/Meshes/Node/nodeGeometry.d.ts +6 -0
  62. package/Meshes/Node/nodeGeometry.js +7 -0
  63. package/Meshes/Node/nodeGeometry.js.map +1 -1
  64. package/Meshes/mesh.d.ts +1 -0
  65. package/Meshes/mesh.js +138 -134
  66. package/Meshes/mesh.js.map +1 -1
  67. package/Meshes/subMesh.js +1 -1
  68. package/Meshes/subMesh.js.map +1 -1
  69. package/Misc/khronosTextureContainer2.js +1 -1
  70. package/Misc/khronosTextureContainer2.js.map +1 -1
  71. package/Rendering/GlobalIllumination/giRSMManager.js +1 -1
  72. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  73. package/Rendering/edgesRenderer.js +1 -1
  74. package/Rendering/edgesRenderer.js.map +1 -1
  75. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +1 -1
  76. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  77. package/Shaders/ShadersInclude/lightFragment.js +3 -3
  78. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  79. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
  80. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  81. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +13 -14
  82. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  83. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +4 -5
  84. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
  85. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +4 -5
  86. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
  87. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +4 -5
  88. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
  89. package/Shaders/ShadersInclude/pbrBlockClearcoat.js +34 -35
  90. package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
  91. package/Shaders/ShadersInclude/pbrBlockIridescence.js +10 -11
  92. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -1
  93. package/Shaders/ShadersInclude/pbrBlockReflection.js +23 -24
  94. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  95. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +12 -13
  96. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  97. package/Shaders/ShadersInclude/pbrBlockSheen.js +31 -32
  98. package/Shaders/ShadersInclude/pbrBlockSheen.js.map +1 -1
  99. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +43 -44
  100. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  101. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  102. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  103. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  104. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  105. package/Shaders/pbr.fragment.js +143 -153
  106. package/Shaders/pbr.fragment.js.map +1 -1
  107. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +3 -3
  108. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  109. package/ShadersWGSL/ShadersInclude/decalFragment.d.ts +5 -0
  110. package/ShadersWGSL/ShadersInclude/decalFragment.js +18 -0
  111. package/ShadersWGSL/ShadersInclude/decalFragment.js.map +1 -0
  112. package/ShadersWGSL/ShadersInclude/depthPrePass.d.ts +5 -0
  113. package/ShadersWGSL/ShadersInclude/depthPrePass.js +12 -0
  114. package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -0
  115. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.d.ts +5 -0
  116. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js +24 -0
  117. package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js.map +1 -0
  118. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.d.ts +5 -0
  119. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +39 -0
  120. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -0
  121. package/ShadersWGSL/ShadersInclude/helperFunctions.js +6 -2
  122. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  123. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +2 -2
  124. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  125. package/ShadersWGSL/ShadersInclude/importanceSampling.d.ts +5 -0
  126. package/ShadersWGSL/ShadersInclude/importanceSampling.js +12 -0
  127. package/ShadersWGSL/ShadersInclude/importanceSampling.js.map +1 -0
  128. package/ShadersWGSL/ShadersInclude/lightFragment.js +3 -3
  129. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  130. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +1 -1
  131. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  132. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.d.ts +5 -0
  133. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +139 -0
  134. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -0
  135. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +6 -0
  136. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js +81 -0
  137. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -0
  138. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.d.ts +5 -0
  139. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js +37 -0
  140. package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -0
  141. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.d.ts +5 -0
  142. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js +35 -0
  143. package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -0
  144. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.d.ts +5 -0
  145. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js +46 -0
  146. package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js.map +1 -0
  147. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.d.ts +5 -0
  148. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js +267 -0
  149. package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js.map +1 -0
  150. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.d.ts +5 -0
  151. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +24 -0
  152. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -0
  153. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.d.ts +5 -0
  154. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js +51 -0
  155. package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -0
  156. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.d.ts +5 -0
  157. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +96 -0
  158. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -0
  159. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.d.ts +5 -0
  160. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +26 -0
  161. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -0
  162. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.d.ts +5 -0
  163. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js +33 -0
  164. package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -0
  165. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.d.ts +5 -0
  166. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js +20 -0
  167. package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js.map +1 -0
  168. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.d.ts +5 -0
  169. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js +51 -0
  170. package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js.map +1 -0
  171. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.d.ts +5 -0
  172. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js +19 -0
  173. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js.map +1 -0
  174. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.d.ts +5 -0
  175. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +19 -0
  176. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -0
  177. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.d.ts +5 -0
  178. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +30 -0
  179. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -0
  180. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.d.ts +5 -0
  181. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js +18 -0
  182. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js.map +1 -0
  183. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.d.ts +5 -0
  184. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +277 -0
  185. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -0
  186. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.d.ts +5 -0
  187. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +120 -0
  188. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -0
  189. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.d.ts +5 -0
  190. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js +195 -0
  191. package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js.map +1 -0
  192. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.d.ts +5 -0
  193. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +425 -0
  194. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -0
  195. package/ShadersWGSL/ShadersInclude/pbrDebug.d.ts +5 -0
  196. package/ShadersWGSL/ShadersInclude/pbrDebug.js +193 -0
  197. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -0
  198. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.d.ts +5 -0
  199. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js +43 -0
  200. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -0
  201. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.d.ts +5 -0
  202. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +68 -0
  203. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -0
  204. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +5 -0
  205. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +30 -0
  206. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -0
  207. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.d.ts +5 -0
  208. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +41 -0
  209. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -0
  210. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.d.ts +5 -0
  211. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +23 -0
  212. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -0
  213. package/package.json +1 -1
@@ -482,13 +482,13 @@ export class InputBlock extends NodeMaterialBlock {
482
482
  // Attribute for fragment need to be carried over by varyings
483
483
  if (attributeInFragmentOnly[this.name]) {
484
484
  if (attributeAsUniform[this.name]) {
485
- state._emitUniformFromString(this.associatedVariableName, this.type, define);
485
+ state._emitUniformFromString(this.declarationVariableName, this.type, define);
486
486
  if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
487
487
  this._prefix = `vertexInputs.`;
488
488
  }
489
489
  }
490
490
  else {
491
- state._emitVaryingFromString(this.associatedVariableName, this.type, define);
491
+ state._emitVaryingFromString(this.declarationVariableName, this.type, define);
492
492
  }
493
493
  }
494
494
  else {
@@ -496,21 +496,19 @@ export class InputBlock extends NodeMaterialBlock {
496
496
  }
497
497
  return;
498
498
  }
499
- if (state.attributes.indexOf(this.associatedVariableName) !== -1) {
499
+ if (state.attributes.indexOf(this.declarationVariableName) !== -1) {
500
500
  return;
501
501
  }
502
- state.attributes.push(this.associatedVariableName);
502
+ state.attributes.push(this.declarationVariableName);
503
503
  if (attributeInFragmentOnly[this.name]) {
504
504
  if (attributeAsUniform[this.name]) {
505
- this._prefix = ``;
506
- state._emitUniformFromString(this.associatedVariableName, this.type, define);
505
+ state._emitUniformFromString(this.declarationVariableName, this.type, define);
507
506
  if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
508
507
  this._prefix = `uniforms.`;
509
508
  }
510
509
  }
511
510
  else {
512
- this._prefix = ``;
513
- state._emitVaryingFromString(this.associatedVariableName, this.type, define);
511
+ state._emitVaryingFromString(this.declarationVariableName, this.type, define);
514
512
  if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
515
513
  this._prefix = `fragmentInputs.`;
516
514
  }
@@ -521,12 +519,11 @@ export class InputBlock extends NodeMaterialBlock {
521
519
  state._attributeDeclaration += this._emitDefine(define);
522
520
  }
523
521
  if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
524
- this._prefix = ``;
525
- state._attributeDeclaration += `attribute ${this.associatedVariableName}: ${state._getShaderType(this.type)};\n`;
522
+ state._attributeDeclaration += `attribute ${this.declarationVariableName}: ${state._getShaderType(this.type)};\n`;
526
523
  this._prefix = `vertexInputs.`;
527
524
  }
528
525
  else {
529
- state._attributeDeclaration += `attribute ${state._getShaderType(this.type)} ${this.associatedVariableName};\n`;
526
+ state._attributeDeclaration += `attribute ${state._getShaderType(this.type)} ${this.declarationVariableName};\n`;
530
527
  }
531
528
  if (define) {
532
529
  state._attributeDeclaration += `#endif\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"inputBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Input/inputBlock.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { NodeMaterialBlockConnectionPointMode } from \"../../Enums/nodeMaterialBlockConnectionPointMode\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { Effect } from \"../../../../Materials/effect\";\r\nimport { Matrix, Vector2, Vector3, Vector4 } from \"../../../../Maths/math.vector\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { GetClass, RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { Color3, Color4, TmpColors } from \"../../../../Maths/math\";\r\nimport { AnimatedInputBlockTypes } from \"./animatedInputBlockTypes\";\r\nimport { Observable } from \"../../../../Misc/observable\";\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { PrecisionDate } from \"../../../../Misc/precisionDate\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\n\r\nconst remapAttributeName: { [name: string]: string } = {\r\n position2d: \"position\",\r\n particle_uv: \"vUV\",\r\n particle_color: \"vColor\",\r\n particle_texturemask: \"textureMask\",\r\n particle_positionw: \"vPositionW\",\r\n};\r\n\r\nconst attributeInFragmentOnly: { [name: string]: boolean } = {\r\n particle_uv: true,\r\n particle_color: true,\r\n particle_texturemask: true,\r\n particle_positionw: true,\r\n};\r\n\r\nconst attributeAsUniform: { [name: string]: boolean } = {\r\n particle_texturemask: true,\r\n};\r\n\r\n/**\r\n * Block used to expose an input value\r\n */\r\nexport class InputBlock extends NodeMaterialBlock {\r\n private _mode = NodeMaterialBlockConnectionPointMode.Undefined;\r\n private _associatedVariableName: string;\r\n private _storedValue: any;\r\n private _valueCallback: () => any;\r\n private _type: NodeMaterialBlockConnectionPointTypes;\r\n private _animationType = AnimatedInputBlockTypes.None;\r\n private _prefix = \"\";\r\n\r\n /** Gets or set a value used to limit the range of float values */\r\n public min: number = 0;\r\n\r\n /** Gets or set a value used to limit the range of float values */\r\n public max: number = 0;\r\n\r\n /** Gets or set a value indicating that this input can only get 0 and 1 values */\r\n public isBoolean: boolean = false;\r\n\r\n /** Gets or sets a value used by the Node Material editor to determine how to configure the current value if it is a matrix */\r\n public matrixMode: number = 0;\r\n\r\n /** @internal */\r\n public _systemValue: Nullable<NodeMaterialSystemValues> = null;\r\n\r\n /** Gets or sets a boolean indicating that the value of this input will not change after a build */\r\n public isConstant = false;\r\n\r\n /** Gets or sets the group to use to display this block in the Inspector */\r\n public groupInInspector = \"\";\r\n\r\n /** Gets an observable raised when the value is changed */\r\n public onValueChangedObservable = new Observable<InputBlock>();\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to gamma space (for color3/4 only) */\r\n public convertToGammaSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to linear space (for color3/4 only) */\r\n public convertToLinearSpace = false;\r\n\r\n /**\r\n * Gets or sets the connection point type (default is float)\r\n */\r\n public get type(): NodeMaterialBlockConnectionPointTypes {\r\n if (this._type === NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n if (this.isUniform && this.value != null) {\r\n if (!isNaN(this.value)) {\r\n this._type = NodeMaterialBlockConnectionPointTypes.Float;\r\n return this._type;\r\n }\r\n\r\n switch (this.value.getClassName()) {\r\n case \"Vector2\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector2;\r\n return this._type;\r\n case \"Vector3\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n return this._type;\r\n case \"Vector4\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n return this._type;\r\n case \"Color3\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color3;\r\n return this._type;\r\n case \"Color4\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color4;\r\n return this._type;\r\n case \"Matrix\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Matrix;\r\n return this._type;\r\n }\r\n }\r\n\r\n if (this.isAttribute) {\r\n switch (this.name) {\r\n case \"position\":\r\n case \"normal\":\r\n case \"particle_positionw\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n return this._type;\r\n case \"uv\":\r\n case \"uv2\":\r\n case \"uv3\":\r\n case \"uv4\":\r\n case \"uv5\":\r\n case \"uv6\":\r\n case \"position2d\":\r\n case \"particle_uv\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector2;\r\n return this._type;\r\n case \"matricesIndices\":\r\n case \"matricesWeights\":\r\n case \"matricesIndicesExtra\":\r\n case \"matricesWeightsExtra\":\r\n case \"world0\":\r\n case \"world1\":\r\n case \"world2\":\r\n case \"world3\":\r\n case \"tangent\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n return this._type;\r\n case \"color\":\r\n case \"instanceColor\":\r\n case \"particle_color\":\r\n case \"particle_texturemask\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color4;\r\n return this._type;\r\n }\r\n }\r\n\r\n if (this.isSystemValue) {\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.World:\r\n case NodeMaterialSystemValues.WorldView:\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n case NodeMaterialSystemValues.View:\r\n case NodeMaterialSystemValues.ViewProjection:\r\n case NodeMaterialSystemValues.Projection:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Matrix;\r\n return this._type;\r\n case NodeMaterialSystemValues.CameraPosition:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n return this._type;\r\n case NodeMaterialSystemValues.FogColor:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color3;\r\n return this._type;\r\n case NodeMaterialSystemValues.DeltaTime:\r\n case NodeMaterialSystemValues.MaterialAlpha:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Float;\r\n return this._type;\r\n case NodeMaterialSystemValues.CameraParameters:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n return this._type;\r\n }\r\n }\r\n }\r\n\r\n return this._type;\r\n }\r\n\r\n /**\r\n * Creates a new InputBlock\r\n * @param name defines the block name\r\n * @param target defines the target of that block (Vertex by default)\r\n * @param type defines the type of the input (can be set to NodeMaterialBlockConnectionPointTypes.AutoDetect)\r\n */\r\n public constructor(name: string, target = NodeMaterialBlockTargets.Vertex, type: NodeMaterialBlockConnectionPointTypes = NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n super(name, target, false);\r\n\r\n this._type = type;\r\n\r\n this.setDefaultValue();\r\n\r\n this.registerOutput(\"output\", type);\r\n }\r\n\r\n /**\r\n * Validates if a name is a reserve word.\r\n * @param newName the new name to be given to the node.\r\n * @returns false if the name is a reserve word, else true.\r\n */\r\n public override validateBlockName(newName: string) {\r\n if (!this.isAttribute) {\r\n return super.validateBlockName(newName);\r\n }\r\n return true;\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 * Set the source of this connection point to a vertex attribute\r\n * @param attributeName defines the attribute name (position, uv, normal, etc...). If not specified it will take the connection point name\r\n * @returns the current connection point\r\n */\r\n public setAsAttribute(attributeName?: string): InputBlock {\r\n this._mode = NodeMaterialBlockConnectionPointMode.Attribute;\r\n if (attributeName) {\r\n this.name = attributeName;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the source of this connection point to a system value\r\n * @param value define the system value to use (world, view, etc...) or null to switch to manual value\r\n * @returns the current connection point\r\n */\r\n public setAsSystemValue(value: Nullable<NodeMaterialSystemValues>): InputBlock {\r\n this.systemValue = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets or sets the value of that point.\r\n * Please note that this value will be ignored if valueCallback is defined\r\n */\r\n public get value(): any {\r\n return this._storedValue;\r\n }\r\n\r\n public set value(value: any) {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n if (this.isBoolean) {\r\n value = value ? 1 : 0;\r\n } else if (this.min !== this.max) {\r\n value = Math.max(this.min, value);\r\n value = Math.min(this.max, value);\r\n }\r\n }\r\n\r\n this._storedValue = value;\r\n this._mode = NodeMaterialBlockConnectionPointMode.Uniform;\r\n\r\n this.onValueChangedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets or sets a callback used to get the value of that point.\r\n * Please note that setting this value will force the connection point to ignore the value property\r\n */\r\n public get valueCallback(): () => any {\r\n return this._valueCallback;\r\n }\r\n\r\n public set valueCallback(value: () => any) {\r\n this._valueCallback = value;\r\n this._mode = NodeMaterialBlockConnectionPointMode.Uniform;\r\n }\r\n\r\n /**\r\n * Gets the declaration variable name in the shader\r\n */\r\n public get declarationVariableName(): string {\r\n return this._associatedVariableName;\r\n }\r\n\r\n /**\r\n * Gets or sets the associated variable name in the shader\r\n */\r\n public get associatedVariableName(): string {\r\n return this._prefix + this._associatedVariableName;\r\n }\r\n\r\n public set associatedVariableName(value: string) {\r\n this._associatedVariableName = value;\r\n }\r\n\r\n /** Gets or sets the type of animation applied to the input */\r\n public get animationType() {\r\n return this._animationType;\r\n }\r\n\r\n public set animationType(value: AnimatedInputBlockTypes) {\r\n this._animationType = value;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this connection point not defined yet\r\n */\r\n public get isUndefined(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Undefined;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is coming from an uniform.\r\n * In this case the connection point name must be the name of the uniform to use.\r\n * Can only be set on inputs\r\n */\r\n public get isUniform(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Uniform;\r\n }\r\n\r\n public set isUniform(value: boolean) {\r\n this._mode = value ? NodeMaterialBlockConnectionPointMode.Uniform : NodeMaterialBlockConnectionPointMode.Undefined;\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is coming from an attribute.\r\n * In this case the connection point name must be the name of the attribute to use\r\n * Can only be set on inputs\r\n */\r\n public get isAttribute(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Attribute;\r\n }\r\n\r\n public set isAttribute(value: boolean) {\r\n this._mode = value ? NodeMaterialBlockConnectionPointMode.Attribute : NodeMaterialBlockConnectionPointMode.Undefined;\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is generating a varying variable.\r\n * Can only be set on exit points\r\n */\r\n public get isVarying(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Varying;\r\n }\r\n\r\n public set isVarying(value: boolean) {\r\n this._mode = value ? NodeMaterialBlockConnectionPointMode.Varying : NodeMaterialBlockConnectionPointMode.Undefined;\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the current connection point is a system value\r\n */\r\n public get isSystemValue(): boolean {\r\n return this._systemValue != null;\r\n }\r\n\r\n /**\r\n * Gets or sets the current well known value or null if not defined as a system value\r\n */\r\n public get systemValue(): Nullable<NodeMaterialSystemValues> {\r\n return this._systemValue;\r\n }\r\n\r\n public set systemValue(value: Nullable<NodeMaterialSystemValues>) {\r\n this._mode = NodeMaterialBlockConnectionPointMode.Uniform;\r\n this.associatedVariableName = \"\";\r\n this._systemValue = value;\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 \"InputBlock\";\r\n }\r\n\r\n /**\r\n * Animate the input if animationType !== None\r\n * @param scene defines the rendering scene\r\n */\r\n public animate(scene: Scene) {\r\n switch (this._animationType) {\r\n case AnimatedInputBlockTypes.Time: {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n this.value += scene.getAnimationRatio() * 0.01;\r\n }\r\n break;\r\n }\r\n case AnimatedInputBlockTypes.RealTime: {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n this.value = (PrecisionDate.Now - scene.getEngine().startTime) / 1000;\r\n }\r\n break;\r\n }\r\n case AnimatedInputBlockTypes.MouseInfo: {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n const event = scene._inputManager._originMouseEvent;\r\n if (event) {\r\n const x = event.offsetX;\r\n const y = event.offsetY;\r\n const z = (event.buttons & 1) != 0 ? 1 : 0;\r\n const w = (event.buttons & 2) != 0 ? 1 : 0;\r\n this.value = new Vector4(x, y, z, w);\r\n } else {\r\n this.value = new Vector4(0, 0, 0, 0);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private _emitDefine(define: string): string {\r\n if (define[0] === \"!\") {\r\n return `#ifndef ${define.substring(1)}\\n`;\r\n }\r\n\r\n return `#ifdef ${define}\\n`;\r\n }\r\n\r\n public override initialize() {\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Set the input block to its default value (based on its type)\r\n */\r\n public setDefaultValue() {\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n this.value = 0;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n this.value = Vector2.Zero();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n this.value = Vector3.Zero();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n this.value = Vector4.Zero();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n this.value = Color3.White();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n this.value = new Color4(1, 1, 1, 1);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n this.value = Matrix.Identity();\r\n break;\r\n }\r\n }\r\n\r\n private _emitConstant(state: NodeMaterialBuildState) {\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n return `${state._emitFloat(this.value)}`;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n return `vec2(${this.value.x}, ${this.value.y})`;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n return `vec3(${this.value.x}, ${this.value.y}, ${this.value.z})`;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n return `vec4(${this.value.x}, ${this.value.y}, ${this.value.z}, ${this.value.w})`;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n TmpColors.Color3[0].set(this.value.r, this.value.g, this.value.b);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color3[0].toGammaSpaceToRef(TmpColors.Color3[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color3[0].toLinearSpaceToRef(TmpColors.Color3[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n return `vec3(${TmpColors.Color3[0].r}, ${TmpColors.Color3[0].g}, ${TmpColors.Color3[0].b})`;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n TmpColors.Color4[0].set(this.value.r, this.value.g, this.value.b, this.value.a);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color4[0].toGammaSpaceToRef(TmpColors.Color4[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color4[0].toLinearSpaceToRef(TmpColors.Color4[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n return `vec4(${TmpColors.Color4[0].r}, ${TmpColors.Color4[0].g}, ${TmpColors.Color4[0].b}, ${TmpColors.Color4[0].a})`;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /** @internal */\r\n public get _noContextSwitch(): boolean {\r\n return attributeInFragmentOnly[this.name];\r\n }\r\n\r\n private _emit(state: NodeMaterialBuildState, define?: string) {\r\n // Uniforms\r\n if (this.isUniform) {\r\n if (!this._associatedVariableName) {\r\n this._associatedVariableName = state._getFreeVariableName(\"u_\" + this.name);\r\n }\r\n\r\n if (this.isConstant) {\r\n if (state.constants.indexOf(this.associatedVariableName) !== -1) {\r\n return;\r\n }\r\n state.constants.push(this.associatedVariableName);\r\n state._constantDeclaration += state._declareOutput(this.output, true) + ` = ${this._emitConstant(state)};\\n`;\r\n return;\r\n }\r\n\r\n if (state.uniforms.indexOf(this.associatedVariableName) !== -1) {\r\n return;\r\n }\r\n\r\n state.uniforms.push(this.associatedVariableName);\r\n if (define) {\r\n state._uniformDeclaration += this._emitDefine(define);\r\n }\r\n const shaderType = state._getShaderType(this.type);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state._uniformDeclaration += `uniform ${this._associatedVariableName}: ${shaderType};\\n`;\r\n this._prefix = \"uniforms.\";\r\n } else {\r\n state._uniformDeclaration += `uniform ${shaderType} ${this.associatedVariableName};\\n`;\r\n }\r\n if (define) {\r\n state._uniformDeclaration += `#endif\\n`;\r\n }\r\n\r\n // well known\r\n const hints = state.sharedData.hints;\r\n if (this._systemValue !== null && this._systemValue !== undefined) {\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.WorldView:\r\n hints.needWorldViewMatrix = true;\r\n break;\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n hints.needWorldViewProjectionMatrix = true;\r\n break;\r\n }\r\n } else {\r\n if (this._animationType !== AnimatedInputBlockTypes.None) {\r\n state.sharedData.animatedInputs.push(this);\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Attribute\r\n if (this.isAttribute) {\r\n this.associatedVariableName = remapAttributeName[this.name] ?? this.name;\r\n\r\n if (this.target === NodeMaterialBlockTargets.Vertex && state._vertexState) {\r\n // Attribute for fragment need to be carried over by varyings\r\n if (attributeInFragmentOnly[this.name]) {\r\n if (attributeAsUniform[this.name]) {\r\n state._emitUniformFromString(this.associatedVariableName, this.type, define);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._prefix = `vertexInputs.`;\r\n }\r\n } else {\r\n state._emitVaryingFromString(this.associatedVariableName, this.type, define);\r\n }\r\n } else {\r\n this._emit(state._vertexState, define);\r\n }\r\n return;\r\n }\r\n\r\n if (state.attributes.indexOf(this.associatedVariableName) !== -1) {\r\n return;\r\n }\r\n\r\n state.attributes.push(this.associatedVariableName);\r\n\r\n if (attributeInFragmentOnly[this.name]) {\r\n if (attributeAsUniform[this.name]) {\r\n this._prefix = ``;\r\n state._emitUniformFromString(this.associatedVariableName, this.type, define);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._prefix = `uniforms.`;\r\n }\r\n } else {\r\n this._prefix = ``;\r\n state._emitVaryingFromString(this.associatedVariableName, this.type, define);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._prefix = `fragmentInputs.`;\r\n }\r\n }\r\n } else {\r\n if (define) {\r\n state._attributeDeclaration += this._emitDefine(define);\r\n }\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._prefix = ``;\r\n state._attributeDeclaration += `attribute ${this.associatedVariableName}: ${state._getShaderType(this.type)};\\n`;\r\n this._prefix = `vertexInputs.`;\r\n } else {\r\n state._attributeDeclaration += `attribute ${state._getShaderType(this.type)} ${this.associatedVariableName};\\n`;\r\n }\r\n if (define) {\r\n state._attributeDeclaration += `#endif\\n`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _transmitWorld(effect: Effect, world: Matrix, worldView: Matrix, worldViewProjection: Matrix) {\r\n if (!this._systemValue) {\r\n return;\r\n }\r\n\r\n const variableName = this._associatedVariableName;\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.World:\r\n effect.setMatrix(variableName, world);\r\n break;\r\n case NodeMaterialSystemValues.WorldView:\r\n effect.setMatrix(variableName, worldView);\r\n break;\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n effect.setMatrix(variableName, worldViewProjection);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _transmit(effect: Effect, scene: Scene, material: NodeMaterial) {\r\n if (this.isAttribute) {\r\n return;\r\n }\r\n\r\n const variableName = this._associatedVariableName;\r\n if (this._systemValue) {\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.World:\r\n case NodeMaterialSystemValues.WorldView:\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n return;\r\n case NodeMaterialSystemValues.View:\r\n effect.setMatrix(variableName, scene.getViewMatrix());\r\n break;\r\n case NodeMaterialSystemValues.Projection:\r\n effect.setMatrix(variableName, scene.getProjectionMatrix());\r\n break;\r\n case NodeMaterialSystemValues.ViewProjection:\r\n effect.setMatrix(variableName, scene.getTransformMatrix());\r\n break;\r\n case NodeMaterialSystemValues.CameraPosition:\r\n scene.bindEyePosition(effect, variableName, true);\r\n break;\r\n case NodeMaterialSystemValues.FogColor:\r\n effect.setColor3(variableName, scene.fogColor);\r\n break;\r\n case NodeMaterialSystemValues.DeltaTime:\r\n effect.setFloat(variableName, scene.deltaTime / 1000.0);\r\n break;\r\n case NodeMaterialSystemValues.CameraParameters:\r\n if (scene.activeCamera) {\r\n effect.setFloat4(\r\n variableName,\r\n scene.getEngine().hasOriginBottomLeft ? -1 : 1,\r\n scene.activeCamera.minZ,\r\n scene.activeCamera.maxZ,\r\n 1 / scene.activeCamera.maxZ\r\n );\r\n }\r\n break;\r\n case NodeMaterialSystemValues.MaterialAlpha:\r\n effect.setFloat(variableName, material.alpha);\r\n break;\r\n }\r\n return;\r\n }\r\n\r\n const value = this._valueCallback ? this._valueCallback() : this._storedValue;\r\n\r\n if (value === null) {\r\n return;\r\n }\r\n\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n effect.setFloat(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Int:\r\n effect.setInt(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n TmpColors.Color3[0].set(this.value.r, this.value.g, this.value.b);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color3[0].toGammaSpaceToRef(TmpColors.Color3[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color3[0].toLinearSpaceToRef(TmpColors.Color3[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n effect.setColor3(variableName, TmpColors.Color3[0]);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n TmpColors.Color4[0].set(this.value.r, this.value.g, this.value.b, this.value.a);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color4[0].toGammaSpaceToRef(TmpColors.Color4[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color4[0].toLinearSpaceToRef(TmpColors.Color4[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n effect.setDirectColor4(variableName, TmpColors.Color4[0]);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n effect.setVector2(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n effect.setVector3(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n effect.setVector4(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n effect.setMatrix(variableName, value);\r\n break;\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (this.isUniform || this.isSystemValue) {\r\n state.sharedData.inputBlocks.push(this);\r\n }\r\n\r\n this._emit(state);\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const variableName = this._codeVariableName;\r\n\r\n if (this.isAttribute) {\r\n return super._dumpPropertiesCode() + `${variableName}.setAsAttribute(\"${this.name}\");\\n`;\r\n }\r\n if (this.isSystemValue) {\r\n return super._dumpPropertiesCode() + `${variableName}.setAsSystemValue(BABYLON.NodeMaterialSystemValues.${NodeMaterialSystemValues[this._systemValue!]});\\n`;\r\n }\r\n if (this.isUniform) {\r\n const codes: string[] = [];\r\n\r\n let valueString = \"\";\r\n\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n valueString = `${this.value}`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n valueString = `new BABYLON.Vector2(${this.value.x}, ${this.value.y})`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n valueString = `new BABYLON.Vector3(${this.value.x}, ${this.value.y}, ${this.value.z})`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n valueString = `new BABYLON.Vector4(${this.value.x}, ${this.value.y}, ${this.value.z}, ${this.value.w})`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n valueString = `new BABYLON.Color3(${this.value.r}, ${this.value.g}, ${this.value.b})`;\r\n if (this.convertToGammaSpace) {\r\n valueString += \".toGammaSpace()\";\r\n }\r\n if (this.convertToLinearSpace) {\r\n valueString += \".toLinearSpace()\";\r\n }\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n valueString = `new BABYLON.Color4(${this.value.r}, ${this.value.g}, ${this.value.b}, ${this.value.a})`;\r\n if (this.convertToGammaSpace) {\r\n valueString += \".toGammaSpace()\";\r\n }\r\n if (this.convertToLinearSpace) {\r\n valueString += \".toLinearSpace()\";\r\n }\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n valueString = `BABYLON.Matrix.FromArray([${(this.value as Matrix).m}])`;\r\n break;\r\n }\r\n\r\n // Common Property \"Value\"\r\n codes.push(`${variableName}.value = ${valueString}`);\r\n\r\n // Float-Value-Specific Properties\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n codes.push(\r\n `${variableName}.min = ${this.min}`,\r\n `${variableName}.max = ${this.max}`,\r\n `${variableName}.isBoolean = ${this.isBoolean}`,\r\n `${variableName}.matrixMode = ${this.matrixMode}`,\r\n `${variableName}.animationType = BABYLON.AnimatedInputBlockTypes.${AnimatedInputBlockTypes[this.animationType]}`\r\n );\r\n }\r\n\r\n // Common Property \"Type\"\r\n codes.push(`${variableName}.isConstant = ${this.isConstant}`);\r\n\r\n codes.push(\"\");\r\n\r\n return super._dumpPropertiesCode() + codes.join(\";\\n\");\r\n }\r\n return super._dumpPropertiesCode();\r\n }\r\n\r\n public override dispose() {\r\n this.onValueChangedObservable.clear();\r\n\r\n super.dispose();\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.type = this.type;\r\n serializationObject.mode = this._mode;\r\n serializationObject.systemValue = this._systemValue;\r\n serializationObject.animationType = this._animationType;\r\n serializationObject.min = this.min;\r\n serializationObject.max = this.max;\r\n serializationObject.isBoolean = this.isBoolean;\r\n serializationObject.matrixMode = this.matrixMode;\r\n serializationObject.isConstant = this.isConstant;\r\n serializationObject.groupInInspector = this.groupInInspector;\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n\r\n if (this._storedValue != null && this._mode === NodeMaterialBlockConnectionPointMode.Uniform) {\r\n if (this._storedValue.asArray) {\r\n serializationObject.valueType = \"BABYLON.\" + this._storedValue.getClassName();\r\n serializationObject.value = this._storedValue.asArray();\r\n } else {\r\n serializationObject.valueType = \"number\";\r\n serializationObject.value = this._storedValue;\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n this._mode = serializationObject.mode;\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this._type = serializationObject.type;\r\n\r\n this._systemValue = serializationObject.systemValue || serializationObject.wellKnownValue;\r\n this._animationType = serializationObject.animationType;\r\n this.min = serializationObject.min || 0;\r\n this.max = serializationObject.max || 0;\r\n this.isBoolean = !!serializationObject.isBoolean;\r\n this.matrixMode = serializationObject.matrixMode || 0;\r\n this.isConstant = !!serializationObject.isConstant;\r\n this.groupInInspector = serializationObject.groupInInspector || \"\";\r\n this.convertToGammaSpace = !!serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n\r\n // Tangents back compat\r\n if (\r\n serializationObject.name === \"tangent\" &&\r\n serializationObject.mode === NodeMaterialBlockConnectionPointMode.Attribute &&\r\n serializationObject.type === NodeMaterialBlockConnectionPointTypes.Vector3\r\n ) {\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n }\r\n\r\n if (!serializationObject.valueType) {\r\n return;\r\n }\r\n\r\n if (serializationObject.valueType === \"number\") {\r\n this._storedValue = serializationObject.value;\r\n } else {\r\n const valueType = GetClass(serializationObject.valueType);\r\n\r\n if (valueType) {\r\n this._storedValue = valueType.FromArray(serializationObject.value);\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.InputBlock\", InputBlock);\r\n"]}
1
+ {"version":3,"file":"inputBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Input/inputBlock.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { NodeMaterialBlockConnectionPointMode } from \"../../Enums/nodeMaterialBlockConnectionPointMode\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { Effect } from \"../../../../Materials/effect\";\r\nimport { Matrix, Vector2, Vector3, Vector4 } from \"../../../../Maths/math.vector\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { GetClass, RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { Color3, Color4, TmpColors } from \"../../../../Maths/math\";\r\nimport { AnimatedInputBlockTypes } from \"./animatedInputBlockTypes\";\r\nimport { Observable } from \"../../../../Misc/observable\";\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { PrecisionDate } from \"../../../../Misc/precisionDate\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\n\r\nconst remapAttributeName: { [name: string]: string } = {\r\n position2d: \"position\",\r\n particle_uv: \"vUV\",\r\n particle_color: \"vColor\",\r\n particle_texturemask: \"textureMask\",\r\n particle_positionw: \"vPositionW\",\r\n};\r\n\r\nconst attributeInFragmentOnly: { [name: string]: boolean } = {\r\n particle_uv: true,\r\n particle_color: true,\r\n particle_texturemask: true,\r\n particle_positionw: true,\r\n};\r\n\r\nconst attributeAsUniform: { [name: string]: boolean } = {\r\n particle_texturemask: true,\r\n};\r\n\r\n/**\r\n * Block used to expose an input value\r\n */\r\nexport class InputBlock extends NodeMaterialBlock {\r\n private _mode = NodeMaterialBlockConnectionPointMode.Undefined;\r\n private _associatedVariableName: string;\r\n private _storedValue: any;\r\n private _valueCallback: () => any;\r\n private _type: NodeMaterialBlockConnectionPointTypes;\r\n private _animationType = AnimatedInputBlockTypes.None;\r\n private _prefix = \"\";\r\n\r\n /** Gets or set a value used to limit the range of float values */\r\n public min: number = 0;\r\n\r\n /** Gets or set a value used to limit the range of float values */\r\n public max: number = 0;\r\n\r\n /** Gets or set a value indicating that this input can only get 0 and 1 values */\r\n public isBoolean: boolean = false;\r\n\r\n /** Gets or sets a value used by the Node Material editor to determine how to configure the current value if it is a matrix */\r\n public matrixMode: number = 0;\r\n\r\n /** @internal */\r\n public _systemValue: Nullable<NodeMaterialSystemValues> = null;\r\n\r\n /** Gets or sets a boolean indicating that the value of this input will not change after a build */\r\n public isConstant = false;\r\n\r\n /** Gets or sets the group to use to display this block in the Inspector */\r\n public groupInInspector = \"\";\r\n\r\n /** Gets an observable raised when the value is changed */\r\n public onValueChangedObservable = new Observable<InputBlock>();\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to gamma space (for color3/4 only) */\r\n public convertToGammaSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to linear space (for color3/4 only) */\r\n public convertToLinearSpace = false;\r\n\r\n /**\r\n * Gets or sets the connection point type (default is float)\r\n */\r\n public get type(): NodeMaterialBlockConnectionPointTypes {\r\n if (this._type === NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n if (this.isUniform && this.value != null) {\r\n if (!isNaN(this.value)) {\r\n this._type = NodeMaterialBlockConnectionPointTypes.Float;\r\n return this._type;\r\n }\r\n\r\n switch (this.value.getClassName()) {\r\n case \"Vector2\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector2;\r\n return this._type;\r\n case \"Vector3\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n return this._type;\r\n case \"Vector4\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n return this._type;\r\n case \"Color3\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color3;\r\n return this._type;\r\n case \"Color4\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color4;\r\n return this._type;\r\n case \"Matrix\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Matrix;\r\n return this._type;\r\n }\r\n }\r\n\r\n if (this.isAttribute) {\r\n switch (this.name) {\r\n case \"position\":\r\n case \"normal\":\r\n case \"particle_positionw\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n return this._type;\r\n case \"uv\":\r\n case \"uv2\":\r\n case \"uv3\":\r\n case \"uv4\":\r\n case \"uv5\":\r\n case \"uv6\":\r\n case \"position2d\":\r\n case \"particle_uv\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector2;\r\n return this._type;\r\n case \"matricesIndices\":\r\n case \"matricesWeights\":\r\n case \"matricesIndicesExtra\":\r\n case \"matricesWeightsExtra\":\r\n case \"world0\":\r\n case \"world1\":\r\n case \"world2\":\r\n case \"world3\":\r\n case \"tangent\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n return this._type;\r\n case \"color\":\r\n case \"instanceColor\":\r\n case \"particle_color\":\r\n case \"particle_texturemask\":\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color4;\r\n return this._type;\r\n }\r\n }\r\n\r\n if (this.isSystemValue) {\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.World:\r\n case NodeMaterialSystemValues.WorldView:\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n case NodeMaterialSystemValues.View:\r\n case NodeMaterialSystemValues.ViewProjection:\r\n case NodeMaterialSystemValues.Projection:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Matrix;\r\n return this._type;\r\n case NodeMaterialSystemValues.CameraPosition:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n return this._type;\r\n case NodeMaterialSystemValues.FogColor:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Color3;\r\n return this._type;\r\n case NodeMaterialSystemValues.DeltaTime:\r\n case NodeMaterialSystemValues.MaterialAlpha:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Float;\r\n return this._type;\r\n case NodeMaterialSystemValues.CameraParameters:\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n return this._type;\r\n }\r\n }\r\n }\r\n\r\n return this._type;\r\n }\r\n\r\n /**\r\n * Creates a new InputBlock\r\n * @param name defines the block name\r\n * @param target defines the target of that block (Vertex by default)\r\n * @param type defines the type of the input (can be set to NodeMaterialBlockConnectionPointTypes.AutoDetect)\r\n */\r\n public constructor(name: string, target = NodeMaterialBlockTargets.Vertex, type: NodeMaterialBlockConnectionPointTypes = NodeMaterialBlockConnectionPointTypes.AutoDetect) {\r\n super(name, target, false);\r\n\r\n this._type = type;\r\n\r\n this.setDefaultValue();\r\n\r\n this.registerOutput(\"output\", type);\r\n }\r\n\r\n /**\r\n * Validates if a name is a reserve word.\r\n * @param newName the new name to be given to the node.\r\n * @returns false if the name is a reserve word, else true.\r\n */\r\n public override validateBlockName(newName: string) {\r\n if (!this.isAttribute) {\r\n return super.validateBlockName(newName);\r\n }\r\n return true;\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 * Set the source of this connection point to a vertex attribute\r\n * @param attributeName defines the attribute name (position, uv, normal, etc...). If not specified it will take the connection point name\r\n * @returns the current connection point\r\n */\r\n public setAsAttribute(attributeName?: string): InputBlock {\r\n this._mode = NodeMaterialBlockConnectionPointMode.Attribute;\r\n if (attributeName) {\r\n this.name = attributeName;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Set the source of this connection point to a system value\r\n * @param value define the system value to use (world, view, etc...) or null to switch to manual value\r\n * @returns the current connection point\r\n */\r\n public setAsSystemValue(value: Nullable<NodeMaterialSystemValues>): InputBlock {\r\n this.systemValue = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets or sets the value of that point.\r\n * Please note that this value will be ignored if valueCallback is defined\r\n */\r\n public get value(): any {\r\n return this._storedValue;\r\n }\r\n\r\n public set value(value: any) {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n if (this.isBoolean) {\r\n value = value ? 1 : 0;\r\n } else if (this.min !== this.max) {\r\n value = Math.max(this.min, value);\r\n value = Math.min(this.max, value);\r\n }\r\n }\r\n\r\n this._storedValue = value;\r\n this._mode = NodeMaterialBlockConnectionPointMode.Uniform;\r\n\r\n this.onValueChangedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets or sets a callback used to get the value of that point.\r\n * Please note that setting this value will force the connection point to ignore the value property\r\n */\r\n public get valueCallback(): () => any {\r\n return this._valueCallback;\r\n }\r\n\r\n public set valueCallback(value: () => any) {\r\n this._valueCallback = value;\r\n this._mode = NodeMaterialBlockConnectionPointMode.Uniform;\r\n }\r\n\r\n /**\r\n * Gets the declaration variable name in the shader\r\n */\r\n public get declarationVariableName(): string {\r\n return this._associatedVariableName;\r\n }\r\n\r\n /**\r\n * Gets or sets the associated variable name in the shader\r\n */\r\n public get associatedVariableName(): string {\r\n return this._prefix + this._associatedVariableName;\r\n }\r\n\r\n public set associatedVariableName(value: string) {\r\n this._associatedVariableName = value;\r\n }\r\n\r\n /** Gets or sets the type of animation applied to the input */\r\n public get animationType() {\r\n return this._animationType;\r\n }\r\n\r\n public set animationType(value: AnimatedInputBlockTypes) {\r\n this._animationType = value;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this connection point not defined yet\r\n */\r\n public get isUndefined(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Undefined;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is coming from an uniform.\r\n * In this case the connection point name must be the name of the uniform to use.\r\n * Can only be set on inputs\r\n */\r\n public get isUniform(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Uniform;\r\n }\r\n\r\n public set isUniform(value: boolean) {\r\n this._mode = value ? NodeMaterialBlockConnectionPointMode.Uniform : NodeMaterialBlockConnectionPointMode.Undefined;\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is coming from an attribute.\r\n * In this case the connection point name must be the name of the attribute to use\r\n * Can only be set on inputs\r\n */\r\n public get isAttribute(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Attribute;\r\n }\r\n\r\n public set isAttribute(value: boolean) {\r\n this._mode = value ? NodeMaterialBlockConnectionPointMode.Attribute : NodeMaterialBlockConnectionPointMode.Undefined;\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this connection point is generating a varying variable.\r\n * Can only be set on exit points\r\n */\r\n public get isVarying(): boolean {\r\n return this._mode === NodeMaterialBlockConnectionPointMode.Varying;\r\n }\r\n\r\n public set isVarying(value: boolean) {\r\n this._mode = value ? NodeMaterialBlockConnectionPointMode.Varying : NodeMaterialBlockConnectionPointMode.Undefined;\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the current connection point is a system value\r\n */\r\n public get isSystemValue(): boolean {\r\n return this._systemValue != null;\r\n }\r\n\r\n /**\r\n * Gets or sets the current well known value or null if not defined as a system value\r\n */\r\n public get systemValue(): Nullable<NodeMaterialSystemValues> {\r\n return this._systemValue;\r\n }\r\n\r\n public set systemValue(value: Nullable<NodeMaterialSystemValues>) {\r\n this._mode = NodeMaterialBlockConnectionPointMode.Uniform;\r\n this.associatedVariableName = \"\";\r\n this._systemValue = value;\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 \"InputBlock\";\r\n }\r\n\r\n /**\r\n * Animate the input if animationType !== None\r\n * @param scene defines the rendering scene\r\n */\r\n public animate(scene: Scene) {\r\n switch (this._animationType) {\r\n case AnimatedInputBlockTypes.Time: {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n this.value += scene.getAnimationRatio() * 0.01;\r\n }\r\n break;\r\n }\r\n case AnimatedInputBlockTypes.RealTime: {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n this.value = (PrecisionDate.Now - scene.getEngine().startTime) / 1000;\r\n }\r\n break;\r\n }\r\n case AnimatedInputBlockTypes.MouseInfo: {\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n const event = scene._inputManager._originMouseEvent;\r\n if (event) {\r\n const x = event.offsetX;\r\n const y = event.offsetY;\r\n const z = (event.buttons & 1) != 0 ? 1 : 0;\r\n const w = (event.buttons & 2) != 0 ? 1 : 0;\r\n this.value = new Vector4(x, y, z, w);\r\n } else {\r\n this.value = new Vector4(0, 0, 0, 0);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private _emitDefine(define: string): string {\r\n if (define[0] === \"!\") {\r\n return `#ifndef ${define.substring(1)}\\n`;\r\n }\r\n\r\n return `#ifdef ${define}\\n`;\r\n }\r\n\r\n public override initialize() {\r\n this.associatedVariableName = \"\";\r\n }\r\n\r\n /**\r\n * Set the input block to its default value (based on its type)\r\n */\r\n public setDefaultValue() {\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n this.value = 0;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n this.value = Vector2.Zero();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n this.value = Vector3.Zero();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n this.value = Vector4.Zero();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n this.value = Color3.White();\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n this.value = new Color4(1, 1, 1, 1);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n this.value = Matrix.Identity();\r\n break;\r\n }\r\n }\r\n\r\n private _emitConstant(state: NodeMaterialBuildState) {\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n return `${state._emitFloat(this.value)}`;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n return `vec2(${this.value.x}, ${this.value.y})`;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n return `vec3(${this.value.x}, ${this.value.y}, ${this.value.z})`;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n return `vec4(${this.value.x}, ${this.value.y}, ${this.value.z}, ${this.value.w})`;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n TmpColors.Color3[0].set(this.value.r, this.value.g, this.value.b);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color3[0].toGammaSpaceToRef(TmpColors.Color3[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color3[0].toLinearSpaceToRef(TmpColors.Color3[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n return `vec3(${TmpColors.Color3[0].r}, ${TmpColors.Color3[0].g}, ${TmpColors.Color3[0].b})`;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n TmpColors.Color4[0].set(this.value.r, this.value.g, this.value.b, this.value.a);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color4[0].toGammaSpaceToRef(TmpColors.Color4[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color4[0].toLinearSpaceToRef(TmpColors.Color4[0], state.sharedData.scene.getEngine().useExactSrgbConversions);\r\n }\r\n return `vec4(${TmpColors.Color4[0].r}, ${TmpColors.Color4[0].g}, ${TmpColors.Color4[0].b}, ${TmpColors.Color4[0].a})`;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /** @internal */\r\n public get _noContextSwitch(): boolean {\r\n return attributeInFragmentOnly[this.name];\r\n }\r\n\r\n private _emit(state: NodeMaterialBuildState, define?: string) {\r\n // Uniforms\r\n if (this.isUniform) {\r\n if (!this._associatedVariableName) {\r\n this._associatedVariableName = state._getFreeVariableName(\"u_\" + this.name);\r\n }\r\n\r\n if (this.isConstant) {\r\n if (state.constants.indexOf(this.associatedVariableName) !== -1) {\r\n return;\r\n }\r\n state.constants.push(this.associatedVariableName);\r\n state._constantDeclaration += state._declareOutput(this.output, true) + ` = ${this._emitConstant(state)};\\n`;\r\n return;\r\n }\r\n\r\n if (state.uniforms.indexOf(this.associatedVariableName) !== -1) {\r\n return;\r\n }\r\n\r\n state.uniforms.push(this.associatedVariableName);\r\n if (define) {\r\n state._uniformDeclaration += this._emitDefine(define);\r\n }\r\n const shaderType = state._getShaderType(this.type);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state._uniformDeclaration += `uniform ${this._associatedVariableName}: ${shaderType};\\n`;\r\n this._prefix = \"uniforms.\";\r\n } else {\r\n state._uniformDeclaration += `uniform ${shaderType} ${this.associatedVariableName};\\n`;\r\n }\r\n if (define) {\r\n state._uniformDeclaration += `#endif\\n`;\r\n }\r\n\r\n // well known\r\n const hints = state.sharedData.hints;\r\n if (this._systemValue !== null && this._systemValue !== undefined) {\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.WorldView:\r\n hints.needWorldViewMatrix = true;\r\n break;\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n hints.needWorldViewProjectionMatrix = true;\r\n break;\r\n }\r\n } else {\r\n if (this._animationType !== AnimatedInputBlockTypes.None) {\r\n state.sharedData.animatedInputs.push(this);\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Attribute\r\n if (this.isAttribute) {\r\n this.associatedVariableName = remapAttributeName[this.name] ?? this.name;\r\n\r\n if (this.target === NodeMaterialBlockTargets.Vertex && state._vertexState) {\r\n // Attribute for fragment need to be carried over by varyings\r\n if (attributeInFragmentOnly[this.name]) {\r\n if (attributeAsUniform[this.name]) {\r\n state._emitUniformFromString(this.declarationVariableName, this.type, define);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._prefix = `vertexInputs.`;\r\n }\r\n } else {\r\n state._emitVaryingFromString(this.declarationVariableName, this.type, define);\r\n }\r\n } else {\r\n this._emit(state._vertexState, define);\r\n }\r\n return;\r\n }\r\n\r\n if (state.attributes.indexOf(this.declarationVariableName) !== -1) {\r\n return;\r\n }\r\n\r\n state.attributes.push(this.declarationVariableName);\r\n\r\n if (attributeInFragmentOnly[this.name]) {\r\n if (attributeAsUniform[this.name]) {\r\n state._emitUniformFromString(this.declarationVariableName, this.type, define);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._prefix = `uniforms.`;\r\n }\r\n } else {\r\n state._emitVaryingFromString(this.declarationVariableName, this.type, define);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n this._prefix = `fragmentInputs.`;\r\n }\r\n }\r\n } else {\r\n if (define) {\r\n state._attributeDeclaration += this._emitDefine(define);\r\n }\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state._attributeDeclaration += `attribute ${this.declarationVariableName}: ${state._getShaderType(this.type)};\\n`;\r\n this._prefix = `vertexInputs.`;\r\n } else {\r\n state._attributeDeclaration += `attribute ${state._getShaderType(this.type)} ${this.declarationVariableName};\\n`;\r\n }\r\n if (define) {\r\n state._attributeDeclaration += `#endif\\n`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _transmitWorld(effect: Effect, world: Matrix, worldView: Matrix, worldViewProjection: Matrix) {\r\n if (!this._systemValue) {\r\n return;\r\n }\r\n\r\n const variableName = this._associatedVariableName;\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.World:\r\n effect.setMatrix(variableName, world);\r\n break;\r\n case NodeMaterialSystemValues.WorldView:\r\n effect.setMatrix(variableName, worldView);\r\n break;\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n effect.setMatrix(variableName, worldViewProjection);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _transmit(effect: Effect, scene: Scene, material: NodeMaterial) {\r\n if (this.isAttribute) {\r\n return;\r\n }\r\n\r\n const variableName = this._associatedVariableName;\r\n if (this._systemValue) {\r\n switch (this._systemValue) {\r\n case NodeMaterialSystemValues.World:\r\n case NodeMaterialSystemValues.WorldView:\r\n case NodeMaterialSystemValues.WorldViewProjection:\r\n return;\r\n case NodeMaterialSystemValues.View:\r\n effect.setMatrix(variableName, scene.getViewMatrix());\r\n break;\r\n case NodeMaterialSystemValues.Projection:\r\n effect.setMatrix(variableName, scene.getProjectionMatrix());\r\n break;\r\n case NodeMaterialSystemValues.ViewProjection:\r\n effect.setMatrix(variableName, scene.getTransformMatrix());\r\n break;\r\n case NodeMaterialSystemValues.CameraPosition:\r\n scene.bindEyePosition(effect, variableName, true);\r\n break;\r\n case NodeMaterialSystemValues.FogColor:\r\n effect.setColor3(variableName, scene.fogColor);\r\n break;\r\n case NodeMaterialSystemValues.DeltaTime:\r\n effect.setFloat(variableName, scene.deltaTime / 1000.0);\r\n break;\r\n case NodeMaterialSystemValues.CameraParameters:\r\n if (scene.activeCamera) {\r\n effect.setFloat4(\r\n variableName,\r\n scene.getEngine().hasOriginBottomLeft ? -1 : 1,\r\n scene.activeCamera.minZ,\r\n scene.activeCamera.maxZ,\r\n 1 / scene.activeCamera.maxZ\r\n );\r\n }\r\n break;\r\n case NodeMaterialSystemValues.MaterialAlpha:\r\n effect.setFloat(variableName, material.alpha);\r\n break;\r\n }\r\n return;\r\n }\r\n\r\n const value = this._valueCallback ? this._valueCallback() : this._storedValue;\r\n\r\n if (value === null) {\r\n return;\r\n }\r\n\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n effect.setFloat(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Int:\r\n effect.setInt(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n TmpColors.Color3[0].set(this.value.r, this.value.g, this.value.b);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color3[0].toGammaSpaceToRef(TmpColors.Color3[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color3[0].toLinearSpaceToRef(TmpColors.Color3[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n effect.setColor3(variableName, TmpColors.Color3[0]);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n TmpColors.Color4[0].set(this.value.r, this.value.g, this.value.b, this.value.a);\r\n if (this.convertToGammaSpace) {\r\n TmpColors.Color4[0].toGammaSpaceToRef(TmpColors.Color4[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n if (this.convertToLinearSpace) {\r\n TmpColors.Color4[0].toLinearSpaceToRef(TmpColors.Color4[0], scene.getEngine().useExactSrgbConversions);\r\n }\r\n effect.setDirectColor4(variableName, TmpColors.Color4[0]);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n effect.setVector2(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n effect.setVector3(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n effect.setVector4(variableName, value);\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n effect.setMatrix(variableName, value);\r\n break;\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (this.isUniform || this.isSystemValue) {\r\n state.sharedData.inputBlocks.push(this);\r\n }\r\n\r\n this._emit(state);\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const variableName = this._codeVariableName;\r\n\r\n if (this.isAttribute) {\r\n return super._dumpPropertiesCode() + `${variableName}.setAsAttribute(\"${this.name}\");\\n`;\r\n }\r\n if (this.isSystemValue) {\r\n return super._dumpPropertiesCode() + `${variableName}.setAsSystemValue(BABYLON.NodeMaterialSystemValues.${NodeMaterialSystemValues[this._systemValue!]});\\n`;\r\n }\r\n if (this.isUniform) {\r\n const codes: string[] = [];\r\n\r\n let valueString = \"\";\r\n\r\n switch (this.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Float:\r\n valueString = `${this.value}`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n valueString = `new BABYLON.Vector2(${this.value.x}, ${this.value.y})`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n valueString = `new BABYLON.Vector3(${this.value.x}, ${this.value.y}, ${this.value.z})`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector4:\r\n valueString = `new BABYLON.Vector4(${this.value.x}, ${this.value.y}, ${this.value.z}, ${this.value.w})`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n valueString = `new BABYLON.Color3(${this.value.r}, ${this.value.g}, ${this.value.b})`;\r\n if (this.convertToGammaSpace) {\r\n valueString += \".toGammaSpace()\";\r\n }\r\n if (this.convertToLinearSpace) {\r\n valueString += \".toLinearSpace()\";\r\n }\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Color4:\r\n valueString = `new BABYLON.Color4(${this.value.r}, ${this.value.g}, ${this.value.b}, ${this.value.a})`;\r\n if (this.convertToGammaSpace) {\r\n valueString += \".toGammaSpace()\";\r\n }\r\n if (this.convertToLinearSpace) {\r\n valueString += \".toLinearSpace()\";\r\n }\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Matrix:\r\n valueString = `BABYLON.Matrix.FromArray([${(this.value as Matrix).m}])`;\r\n break;\r\n }\r\n\r\n // Common Property \"Value\"\r\n codes.push(`${variableName}.value = ${valueString}`);\r\n\r\n // Float-Value-Specific Properties\r\n if (this.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n codes.push(\r\n `${variableName}.min = ${this.min}`,\r\n `${variableName}.max = ${this.max}`,\r\n `${variableName}.isBoolean = ${this.isBoolean}`,\r\n `${variableName}.matrixMode = ${this.matrixMode}`,\r\n `${variableName}.animationType = BABYLON.AnimatedInputBlockTypes.${AnimatedInputBlockTypes[this.animationType]}`\r\n );\r\n }\r\n\r\n // Common Property \"Type\"\r\n codes.push(`${variableName}.isConstant = ${this.isConstant}`);\r\n\r\n codes.push(\"\");\r\n\r\n return super._dumpPropertiesCode() + codes.join(\";\\n\");\r\n }\r\n return super._dumpPropertiesCode();\r\n }\r\n\r\n public override dispose() {\r\n this.onValueChangedObservable.clear();\r\n\r\n super.dispose();\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.type = this.type;\r\n serializationObject.mode = this._mode;\r\n serializationObject.systemValue = this._systemValue;\r\n serializationObject.animationType = this._animationType;\r\n serializationObject.min = this.min;\r\n serializationObject.max = this.max;\r\n serializationObject.isBoolean = this.isBoolean;\r\n serializationObject.matrixMode = this.matrixMode;\r\n serializationObject.isConstant = this.isConstant;\r\n serializationObject.groupInInspector = this.groupInInspector;\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n\r\n if (this._storedValue != null && this._mode === NodeMaterialBlockConnectionPointMode.Uniform) {\r\n if (this._storedValue.asArray) {\r\n serializationObject.valueType = \"BABYLON.\" + this._storedValue.getClassName();\r\n serializationObject.value = this._storedValue.asArray();\r\n } else {\r\n serializationObject.valueType = \"number\";\r\n serializationObject.value = this._storedValue;\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n this._mode = serializationObject.mode;\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this._type = serializationObject.type;\r\n\r\n this._systemValue = serializationObject.systemValue || serializationObject.wellKnownValue;\r\n this._animationType = serializationObject.animationType;\r\n this.min = serializationObject.min || 0;\r\n this.max = serializationObject.max || 0;\r\n this.isBoolean = !!serializationObject.isBoolean;\r\n this.matrixMode = serializationObject.matrixMode || 0;\r\n this.isConstant = !!serializationObject.isConstant;\r\n this.groupInInspector = serializationObject.groupInInspector || \"\";\r\n this.convertToGammaSpace = !!serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n\r\n // Tangents back compat\r\n if (\r\n serializationObject.name === \"tangent\" &&\r\n serializationObject.mode === NodeMaterialBlockConnectionPointMode.Attribute &&\r\n serializationObject.type === NodeMaterialBlockConnectionPointTypes.Vector3\r\n ) {\r\n this._type = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n }\r\n\r\n if (!serializationObject.valueType) {\r\n return;\r\n }\r\n\r\n if (serializationObject.valueType === \"number\") {\r\n this._storedValue = serializationObject.value;\r\n } else {\r\n const valueType = GetClass(serializationObject.valueType);\r\n\r\n if (valueType) {\r\n this._storedValue = valueType.FromArray(serializationObject.value);\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.InputBlock\", InputBlock);\r\n"]}
@@ -134,11 +134,12 @@ export class AnisotropyBlock extends NodeMaterialBlock {
134
134
  if (generateTBNSpace) {
135
135
  code += this._generateTBNSpace(state);
136
136
  }
137
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
137
138
  const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : "1.0";
138
139
  const direction = this.direction.isConnected ? this.direction.associatedVariableName : "vec2(1., 0.)";
139
140
  const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : "0.";
140
- code += `anisotropicOutParams anisotropicOut;
141
- anisotropicBlock(
141
+ code += `${isWebGPU ? "var anisotropicOut: anisotropicOutParams" : "anisotropicOutParams anisotropicOut"};
142
+ anisotropicOut = anisotropicBlock(
142
143
  vec3(${direction}, ${intensity}),
143
144
  ${roughness},
144
145
  #ifdef ANISOTROPIC_TEXTURE
@@ -146,8 +147,7 @@ export class AnisotropyBlock extends NodeMaterialBlock {
146
147
  #endif
147
148
  TBN,
148
149
  normalW,
149
- viewDirectionW,
150
- anisotropicOut
150
+ viewDirectionW
151
151
  );\n`;
152
152
  return code;
153
153
  }
@@ -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\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\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 += `anisotropicOutParams anisotropicOut;\r\n 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 anisotropicOut\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":"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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"]}
@@ -209,93 +209,99 @@ export class ClearCoatBlock extends NodeMaterialBlock {
209
209
  let code = "";
210
210
  const intensity = ccBlock?.intensity.isConnected ? ccBlock.intensity.associatedVariableName : "1.";
211
211
  const roughness = ccBlock?.roughness.isConnected ? ccBlock.roughness.associatedVariableName : "0.";
212
- const normalMapColor = ccBlock?.normalMapColor.isConnected ? ccBlock.normalMapColor.associatedVariableName : "vec3(0.)";
213
- const uv = ccBlock?.uv.isConnected ? ccBlock.uv.associatedVariableName : "vec2(0.)";
214
- const tintColor = ccBlock?.tintColor.isConnected ? ccBlock.tintColor.associatedVariableName : "vec3(1.)";
212
+ const normalMapColor = ccBlock?.normalMapColor.isConnected ? ccBlock.normalMapColor.associatedVariableName : `vec3${state.fSuffix}(0.)`;
213
+ const uv = ccBlock?.uv.isConnected ? ccBlock.uv.associatedVariableName : `vec2${state.fSuffix}(0.)`;
214
+ const tintColor = ccBlock?.tintColor.isConnected ? ccBlock.tintColor.associatedVariableName : `vec3${state.fSuffix}(1.)`;
215
215
  const tintThickness = ccBlock?.tintThickness.isConnected ? ccBlock.tintThickness.associatedVariableName : "1.";
216
216
  const tintAtDistance = ccBlock?.tintAtDistance.isConnected ? ccBlock.tintAtDistance.associatedVariableName : "1.";
217
- const tintTexture = "vec4(0.)";
217
+ const tintTexture = `vec4${state.fSuffix}(0.)`;
218
218
  if (ccBlock) {
219
219
  state._emitUniformFromString("vClearCoatRefractionParams", NodeMaterialBlockConnectionPointTypes.Vector4);
220
220
  state._emitUniformFromString("vClearCoatTangentSpaceParams", NodeMaterialBlockConnectionPointTypes.Vector2);
221
221
  const normalShading = ccBlock.worldNormal;
222
- code += `vec3 vGeometricNormaClearCoatW = ${normalShading.isConnected ? "normalize(" + normalShading.associatedVariableName + ".xyz)" : "geometricNormalW"};\n`;
222
+ code += `${state._declareLocalVar("vGeometricNormaClearCoatW", NodeMaterialBlockConnectionPointTypes.Vector3)} = ${normalShading.isConnected ? "normalize(" + normalShading.associatedVariableName + ".xyz)" : "geometricNormalW"};\n`;
223
223
  }
224
224
  else {
225
- code += `vec3 vGeometricNormaClearCoatW = geometricNormalW;\n`;
225
+ code += `${state._declareLocalVar("vGeometricNormaClearCoatW", NodeMaterialBlockConnectionPointTypes.Vector3)} = geometricNormalW;\n`;
226
226
  }
227
227
  if (generateTBNSpace && ccBlock) {
228
228
  code += ccBlock._generateTBNSpace(state, worldPosVarName, worldNormalVarName);
229
229
  vTBNAvailable = ccBlock.worldTangent.isConnected;
230
230
  }
231
- code += `clearcoatOutParams clearcoatOut;
231
+ const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
232
+ code += `${isWebGPU ? "var clearcoatOut: clearcoatOutParams" : "clearcoatOutParams clearcoatOut"};
232
233
 
233
234
  #ifdef CLEARCOAT
234
- vec2 vClearCoatParams = vec2(${intensity}, ${roughness});
235
- vec4 vClearCoatTintParams = vec4(${tintColor}, ${tintThickness});
235
+ ${state._declareLocalVar("vClearCoatParams", NodeMaterialBlockConnectionPointTypes.Vector2)} = vec2${state.fSuffix}(${intensity}, ${roughness});
236
+ ${state._declareLocalVar("vClearCoatTintParams", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${tintColor}, ${tintThickness});
236
237
 
237
- clearcoatBlock(
238
- ${worldPosVarName}.xyz,
239
- vGeometricNormaClearCoatW,
240
- viewDirectionW,
241
- vClearCoatParams,
242
- specularEnvironmentR0,
238
+ clearcoatOut = clearcoatBlock(
239
+ ${worldPosVarName}.xyz
240
+ , vGeometricNormaClearCoatW
241
+ , viewDirectionW
242
+ , vClearCoatParams
243
+ , specularEnvironmentR0
243
244
  #ifdef CLEARCOAT_TEXTURE
244
- vec2(0.),
245
+ , vec2${state.fSuffix}(0.)
245
246
  #endif
246
247
  #ifdef CLEARCOAT_TINT
247
- vClearCoatTintParams,
248
- ${tintAtDistance},
249
- vClearCoatRefractionParams,
248
+ , vClearCoatTintParams
249
+ , ${tintAtDistance}
250
+ , ${isWebGPU ? "uniforms." : ""}vClearCoatRefractionParams
250
251
  #ifdef CLEARCOAT_TINT_TEXTURE
251
- ${tintTexture},
252
+ , ${tintTexture}
252
253
  #endif
253
254
  #endif
254
255
  #ifdef CLEARCOAT_BUMP
255
- vec2(0., 1.),
256
- vec4(${normalMapColor}, 0.),
257
- ${uv},
256
+ , vec2${state.fSuffix}(0., 1.)
257
+ , vec4${state.fSuffix}(${normalMapColor}, 0.)
258
+ , ${uv}
258
259
  #if defined(${vTBNAvailable ? "TANGENT" : "IGNORE"}) && defined(NORMAL)
259
- vTBN,
260
+ , vTBN
260
261
  #else
261
- vClearCoatTangentSpaceParams,
262
+ , ${isWebGPU ? "uniforms." : ""}vClearCoatTangentSpaceParams
262
263
  #endif
263
264
  #ifdef OBJECTSPACE_NORMALMAP
264
- normalMatrix,
265
+ , normalMatrix
265
266
  #endif
266
267
  #endif
267
268
  #if defined(FORCENORMALFORWARD) && defined(NORMAL)
268
- faceNormal,
269
+ , faceNormal
269
270
  #endif
270
271
  #ifdef REFLECTION
271
- ${reflectionBlock?._vReflectionMicrosurfaceInfosName},
272
- ${reflectionBlock?._vReflectionInfosName},
273
- ${reflectionBlock?.reflectionColor},
274
- vLightingIntensity,
272
+ , ${isWebGPU ? "uniforms." : ""}${reflectionBlock?._vReflectionMicrosurfaceInfosName}
273
+ , ${reflectionBlock?._vReflectionInfosName}
274
+ , ${reflectionBlock?.reflectionColor}
275
+ , ${isWebGPU ? "uniforms." : ""}vLightingIntensity
275
276
  #ifdef ${reflectionBlock?._define3DName}
276
- ${reflectionBlock?._cubeSamplerName},
277
+ , ${reflectionBlock?._cubeSamplerName}
278
+ ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : ""}
277
279
  #else
278
- ${reflectionBlock?._2DSamplerName},
280
+ , ${reflectionBlock?._2DSamplerName}
281
+ ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : ""}
279
282
  #endif
280
283
  #ifndef LODBASEDMICROSFURACE
281
284
  #ifdef ${reflectionBlock?._define3DName}
282
- ${reflectionBlock?._cubeSamplerName},
283
- ${reflectionBlock?._cubeSamplerName},
285
+ , ${reflectionBlock?._cubeSamplerName}
286
+ ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : ""}
287
+ , ${reflectionBlock?._cubeSamplerName}
288
+ ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : ""}
284
289
  #else
285
- ${reflectionBlock?._2DSamplerName},
286
- ${reflectionBlock?._2DSamplerName},
290
+ , ${reflectionBlock?._2DSamplerName}
291
+ ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : ""}
292
+ , ${reflectionBlock?._2DSamplerName}
293
+ ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : ""}
287
294
  #endif
288
295
  #endif
289
296
  #endif
290
297
  #if defined(ENVIRONMENTBRDF) && !defined(${reflectionBlock?._defineSkyboxName})
291
298
  #ifdef RADIANCEOCCLUSION
292
- ambientMonochrome,
299
+ , ambientMonochrome
293
300
  #endif
294
301
  #endif
295
302
  #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
296
- (gl_FrontFacing ? 1. : -1.),
303
+ , (${state._generateTernary("1.", "-1.", isWebGPU ? "fragmentInputs.frontFacing" : "gl_FrontFacing")})
297
304
  #endif
298
- clearcoatOut
299
305
  );
300
306
  #else
301
307
  clearcoatOut.specularEnvironmentR0 = specularEnvironmentR0;