@onerjs/core 8.51.3 → 8.51.5

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 (227) hide show
  1. package/Animations/animationGroup.d.ts +2 -1
  2. package/Animations/animationGroup.js +3 -2
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Animations/animatorAvatar.d.ts +2 -0
  5. package/Animations/animatorAvatar.js +163 -94
  6. package/Animations/animatorAvatar.js.map +1 -1
  7. package/Engines/WebGPU/webgpuSnapshotRendering.js +7 -3
  8. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  9. package/Engines/constants.d.ts +10 -0
  10. package/Engines/constants.js +10 -0
  11. package/Engines/constants.js.map +1 -1
  12. package/Events/deviceInputEvents.d.ts +5 -0
  13. package/Events/deviceInputEvents.js.map +1 -1
  14. package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.d.ts +65 -0
  15. package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.js +74 -0
  16. package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.js.map +1 -0
  17. package/FlowGraph/Blocks/Data/index.d.ts +1 -0
  18. package/FlowGraph/Blocks/Data/index.js +1 -0
  19. package/FlowGraph/Blocks/Data/index.js.map +1 -1
  20. package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.d.ts +39 -0
  21. package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.js +42 -0
  22. package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.js.map +1 -0
  23. package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.d.ts +19 -0
  24. package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.js +25 -0
  25. package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.js.map +1 -0
  26. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.d.ts +64 -0
  27. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js +50 -0
  28. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js.map +1 -0
  29. package/FlowGraph/Blocks/Event/index.d.ts +3 -0
  30. package/FlowGraph/Blocks/Event/index.js +3 -0
  31. package/FlowGraph/Blocks/Event/index.js.map +1 -1
  32. package/FlowGraph/Blocks/flowGraphBlockFactory.js +7 -0
  33. package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
  34. package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +3 -0
  35. package/FlowGraph/Blocks/flowGraphBlockNames.js +3 -0
  36. package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
  37. package/FlowGraph/flowGraph.d.ts +6 -0
  38. package/FlowGraph/flowGraph.js +10 -1
  39. package/FlowGraph/flowGraph.js.map +1 -1
  40. package/FlowGraph/flowGraphContext.d.ts +8 -0
  41. package/FlowGraph/flowGraphContext.js.map +1 -1
  42. package/FlowGraph/flowGraphEventType.d.ts +2 -0
  43. package/FlowGraph/flowGraphEventType.js +2 -0
  44. package/FlowGraph/flowGraphEventType.js.map +1 -1
  45. package/FlowGraph/flowGraphSceneEventCoordinator.d.ts +14 -0
  46. package/FlowGraph/flowGraphSceneEventCoordinator.js +56 -0
  47. package/FlowGraph/flowGraphSceneEventCoordinator.js.map +1 -1
  48. package/FlowGraph/utils.d.ts +7 -0
  49. package/FlowGraph/utils.js +8 -0
  50. package/FlowGraph/utils.js.map +1 -1
  51. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +6 -0
  52. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  53. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +6 -3
  54. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  55. package/Materials/PBR/openpbrMaterial.d.ts +8 -0
  56. package/Materials/PBR/openpbrMaterial.js +16 -0
  57. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  58. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  59. package/Materials/PBR/pbrBaseMaterial.js +8 -0
  60. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  61. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +6 -0
  62. package/Materials/Textures/Procedurals/proceduralTexture.js +3 -1
  63. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  64. package/Materials/Textures/index.d.ts +1 -0
  65. package/Materials/Textures/index.js +1 -0
  66. package/Materials/Textures/index.js.map +1 -1
  67. package/Materials/Textures/textureMerger.js +1 -0
  68. package/Materials/Textures/textureMerger.js.map +1 -1
  69. package/Materials/Textures/textureProcessor.d.ts +315 -0
  70. package/Materials/Textures/textureProcessor.js +792 -0
  71. package/Materials/Textures/textureProcessor.js.map +1 -0
  72. package/Materials/material.d.ts +24 -0
  73. package/Materials/material.js +39 -0
  74. package/Materials/material.js.map +1 -1
  75. package/Materials/standardMaterial.d.ts +1 -0
  76. package/Materials/standardMaterial.js +6 -0
  77. package/Materials/standardMaterial.js.map +1 -1
  78. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.js +30 -8
  79. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.js.map +1 -1
  80. package/Misc/snapshotRenderingHelper.d.ts +4 -2
  81. package/Misc/snapshotRenderingHelper.js +33 -22
  82. package/Misc/snapshotRenderingHelper.js.map +1 -1
  83. package/Particles/thinParticleSystem.d.ts +6 -1
  84. package/Particles/thinParticleSystem.js +23 -6
  85. package/Particles/thinParticleSystem.js.map +1 -1
  86. package/Physics/v2/characterController.d.ts +104 -7
  87. package/Physics/v2/characterController.js +355 -7
  88. package/Physics/v2/characterController.js.map +1 -1
  89. package/Shaders/ShadersInclude/bumpFragment.js +3 -3
  90. package/Shaders/ShadersInclude/bumpFragment.js.map +1 -1
  91. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +5 -1
  92. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  93. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +3 -0
  94. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  95. package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
  96. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  97. package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
  98. package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
  99. package/Shaders/ShadersInclude/openpbrAmbientOcclusionData.js +1 -1
  100. package/Shaders/ShadersInclude/openpbrAmbientOcclusionData.js.map +1 -1
  101. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
  102. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  103. package/Shaders/ShadersInclude/openpbrBaseLayerData.js +14 -14
  104. package/Shaders/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
  105. package/Shaders/ShadersInclude/openpbrCoatLayerData.js +6 -6
  106. package/Shaders/ShadersInclude/openpbrCoatLayerData.js.map +1 -1
  107. package/Shaders/ShadersInclude/openpbrDirectLighting.js +1 -1
  108. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  109. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
  110. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  111. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js +3 -0
  112. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js.map +1 -1
  113. package/Shaders/ShadersInclude/openpbrFuzzLayerData.js +3 -3
  114. package/Shaders/ShadersInclude/openpbrFuzzLayerData.js.map +1 -1
  115. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js +4 -4
  116. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js.map +1 -1
  117. package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.js +7 -3
  118. package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.js.map +1 -1
  119. package/Shaders/ShadersInclude/openpbrThinFilmLayerData.js +2 -2
  120. package/Shaders/ShadersInclude/openpbrThinFilmLayerData.js.map +1 -1
  121. package/Shaders/ShadersInclude/openpbrTransmissionLayerData.js +5 -5
  122. package/Shaders/ShadersInclude/openpbrTransmissionLayerData.js.map +1 -1
  123. package/Shaders/ShadersInclude/openpbrUboDeclaration.js +1 -1
  124. package/Shaders/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
  125. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +1 -1
  126. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
  127. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
  128. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  129. package/Shaders/ShadersInclude/pbrBlockLightmapInit.js +1 -1
  130. package/Shaders/ShadersInclude/pbrBlockLightmapInit.js.map +1 -1
  131. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +3 -0
  132. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  133. package/Shaders/ShadersInclude/pbrHelperFunctions.js +4 -0
  134. package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  135. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  136. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  137. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  138. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  139. package/Shaders/ShadersInclude/textureRepetitionFunctions.d.ts +5 -0
  140. package/Shaders/ShadersInclude/textureRepetitionFunctions.js +52 -0
  141. package/Shaders/ShadersInclude/textureRepetitionFunctions.js.map +1 -0
  142. package/Shaders/default.fragment.d.ts +1 -0
  143. package/Shaders/default.fragment.js +8 -6
  144. package/Shaders/default.fragment.js.map +1 -1
  145. package/Shaders/geometry.fragment.js +3 -3
  146. package/Shaders/geometry.fragment.js.map +1 -1
  147. package/Shaders/openpbr.fragment.d.ts +1 -0
  148. package/Shaders/openpbr.fragment.js +4 -2
  149. package/Shaders/openpbr.fragment.js.map +1 -1
  150. package/Shaders/pbr.fragment.d.ts +1 -0
  151. package/Shaders/pbr.fragment.js +24 -22
  152. package/Shaders/pbr.fragment.js.map +1 -1
  153. package/Shaders/textureProcessor.fragment.d.ts +5 -0
  154. package/Shaders/textureProcessor.fragment.js +156 -0
  155. package/Shaders/textureProcessor.fragment.js.map +1 -0
  156. package/ShadersWGSL/ShadersInclude/bumpFragment.js +3 -3
  157. package/ShadersWGSL/ShadersInclude/bumpFragment.js.map +1 -1
  158. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +5 -1
  159. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  160. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js +1 -1
  161. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  162. package/ShadersWGSL/ShadersInclude/openpbrAmbientOcclusionData.js +1 -1
  163. package/ShadersWGSL/ShadersInclude/openpbrAmbientOcclusionData.js.map +1 -1
  164. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
  165. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  166. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js +15 -15
  167. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
  168. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.js +7 -7
  169. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.js.map +1 -1
  170. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +1 -1
  171. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  172. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +1 -1
  173. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  174. package/ShadersWGSL/ShadersInclude/openpbrFuzzLayerData.js +4 -4
  175. package/ShadersWGSL/ShadersInclude/openpbrFuzzLayerData.js.map +1 -1
  176. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +3 -3
  177. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  178. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js +4 -4
  179. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js.map +1 -1
  180. package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.js +7 -3
  181. package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.js.map +1 -1
  182. package/ShadersWGSL/ShadersInclude/openpbrThinFilmLayerData.js +2 -2
  183. package/ShadersWGSL/ShadersInclude/openpbrThinFilmLayerData.js.map +1 -1
  184. package/ShadersWGSL/ShadersInclude/openpbrTransmissionLayerData.js +6 -6
  185. package/ShadersWGSL/ShadersInclude/openpbrTransmissionLayerData.js.map +1 -1
  186. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js +1 -1
  187. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
  188. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
  189. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  190. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js +1 -1
  191. package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js.map +1 -1
  192. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +4 -0
  193. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  194. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  195. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  196. package/ShadersWGSL/ShadersInclude/textureRepetitionFunctions.d.ts +5 -0
  197. package/ShadersWGSL/ShadersInclude/textureRepetitionFunctions.js +52 -0
  198. package/ShadersWGSL/ShadersInclude/textureRepetitionFunctions.js.map +1 -0
  199. package/ShadersWGSL/default.fragment.d.ts +1 -0
  200. package/ShadersWGSL/default.fragment.js +8 -6
  201. package/ShadersWGSL/default.fragment.js.map +1 -1
  202. package/ShadersWGSL/geometry.fragment.js +3 -3
  203. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  204. package/ShadersWGSL/openpbr.fragment.d.ts +1 -0
  205. package/ShadersWGSL/openpbr.fragment.js +5 -3
  206. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  207. package/ShadersWGSL/openpbr.vertex.js +1 -1
  208. package/ShadersWGSL/openpbr.vertex.js.map +1 -1
  209. package/ShadersWGSL/pbr.fragment.d.ts +1 -0
  210. package/ShadersWGSL/pbr.fragment.js +24 -22
  211. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  212. package/ShadersWGSL/textureProcessor.fragment.d.ts +5 -0
  213. package/ShadersWGSL/textureProcessor.fragment.js +161 -0
  214. package/ShadersWGSL/textureProcessor.fragment.js.map +1 -0
  215. package/SmartAssets/index.d.ts +2 -0
  216. package/SmartAssets/index.js +2 -0
  217. package/SmartAssets/index.js.map +1 -0
  218. package/SmartAssets/smartAssetManager.d.ts +156 -0
  219. package/SmartAssets/smartAssetManager.js +531 -0
  220. package/SmartAssets/smartAssetManager.js.map +1 -0
  221. package/SmartAssets/smartAssetSerializer.d.ts +61 -0
  222. package/SmartAssets/smartAssetSerializer.js +97 -0
  223. package/SmartAssets/smartAssetSerializer.js.map +1 -0
  224. package/index.d.ts +1 -0
  225. package/index.js +1 -0
  226. package/index.js.map +1 -1
  227. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { type NodeMaterial, type NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { type Effect } from \"../../../effect\";\r\nimport { type Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport { type Nullable } from \"../../../../types\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n private _worldMatrixName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean, undefined, {\r\n embedded: true,\r\n notifiers: {\r\n update: true,\r\n callback: (_scene: Nullable<Scene>, block: PerturbNormalBlock) => {\r\n block.parallaxScale._isInactive = block.useParallaxOcclusion;\r\n block.parallaxHeight._isInactive = block.useParallaxOcclusion;\r\n return true;\r\n },\r\n },\r\n })\r\n public useParallaxOcclusion = false;\r\n /** Gets or sets a boolean indicating that sampling mode is in Object space */\r\n @editableInPropertyPage(\"Object Space Mode\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\r\n }\r\n\r\n /**\r\n * Gets the World input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[10];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Initialize the block\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - defines the list of defines to update\r\n * @param nodeMaterial - defines the node material requesting the update\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax =\r\n this.viewDirection.isConnected && ((this.useParallaxOcclusion && !!normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAX_RHS\", nodeMaterial.getScene().useRightHandedSystem, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n defines.setValue(\"OBJECTSPACE_NORMALMAP\", this.useObjectSpaceNormalMap, true);\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - defines the effect to bind data to\r\n * @param nodeMaterial - defines the node material\r\n * @param mesh - defines the mesh to bind data for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n\r\n if (this.useObjectSpaceNormalMap && !this.world.isConnected) {\r\n // World default to the mesh world matrix\r\n effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Auto configure the block based on the material\r\n * @param material - defines the hosting NodeMaterial\r\n * @param additionalFilteringInfo - defines additional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const mat3 = isWebGPU ? \"mat3x3f\" : \"mat3\";\r\n const fSuffix = isWebGPU ? \"f\" : \"\";\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n const fragmentInputsPrefix = isWebGPU ? \"fragmentInputs.\" : \"\";\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._worldMatrixName = state._getFreeDefineName(\"perturbNormalWorldMatrix\");\r\n\r\n state._emitUniformFromString(this._worldMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax =\r\n this.viewDirection.isConnected && ((this.useParallaxOcclusion && !!normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${this.strength.associatedVariableName}`;\r\n\r\n if (!isWebGPU) {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN;/g, replace: \"\" };\r\n const normalMatrixReplaceString = { search: isWebGPU ? /uniform normalMatrix: mat4x4f;/g : /uniform mat4 normalMatrix;/g, replace: \"\" };\r\n\r\n const tbn = this.TBN;\r\n if (tbn.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n ${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${tbn.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"tbnNormal\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnTangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnBitangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${uniformPrefix}${this._tangentCorrectionFactorName};\\n`;\r\n state.compilationString += `${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${mat3}(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n let replaceStrings = [tangentReplaceString, tbnVarying, normalMatrixReplaceString];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /varying vTBN0: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN1: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN2: vec3f;/g, replace: \"\" });\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n const replaceString0 = isWebGPU\r\n ? \"fn parallaxOcclusion(vViewDirCoT: vec3f, vNormalCoT: vec3f, texCoord: vec2f, parallaxScale:f32, bumpSampler: texture_2d<f32>, bumpSamplerSampler: sampler)\"\r\n : \"#define inline\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\";\r\n\r\n const searchExp0 = isWebGPU\r\n ? /fn parallaxOcclusion\\(vViewDirCoT: vec3f,vNormalCoT: vec3f,texCoord: vec2f,parallaxScale: f32\\)/g\r\n : /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g;\r\n\r\n const replaceString1 = isWebGPU\r\n ? \"fn parallaxOffset(viewDir: vec3f, heightScale: f32, height_: f32)\"\r\n : \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\";\r\n\r\n const searchExp1 = isWebGPU ? /fn parallaxOffset\\(viewDir: vec3f,heightScale: f32\\)/g : /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: searchExp0,\r\n replace: replaceString0,\r\n },\r\n { search: searchExp1, replace: replaceString1 },\r\n { search: /texture.+?bumpSampler,.*?vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const normalRead = isWebGPU ? `textureSample(${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}` : `texture2D(${normalSamplerName}`;\r\n\r\n const uvForPerturbNormal = !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `${normalRead}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n const tempOutput = state._getFreeVariableName(\"tempOutput\");\r\n state.compilationString += state._declareLocalVar(tempOutput, NodeMaterialBlockConnectionPointTypes.Vector3) + ` = vec3${fSuffix}(0.);\\n`;\r\n\r\n replaceStrings = [\r\n { search: new RegExp(`texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\)`, \"g\"), replace: `${uvForPerturbNormal}` },\r\n {\r\n search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,\r\n replace: `${state._declareLocalVar(\"normalMatrix\", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : uniformPrefix + this._worldMatrixName});`,\r\n },\r\n {\r\n search: new RegExp(\r\n `perturbNormal\\\\(TBN,texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\+uvOffset\\\\).xyz,${uniformPrefix}vBumpInfos.y\\\\)`,\r\n \"g\"\r\n ),\r\n replace: `perturbNormal(TBN, ${uvForPerturbNormal}, ${uniformPrefix}vBumpInfos.y)`,\r\n },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,(fragmentInputs\\.)?vBumpUV,(uniforms\\.)?vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), ${fragmentInputsPrefix}vBumpUV, ${uniformPrefix}vBumpInfos.z, ${\r\n isWebGPU\r\n ? useParallax && this.useParallaxOcclusion\r\n ? `${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}`\r\n : \"bump, bumpSampler\"\r\n : useParallax && this.useParallaxOcclusion\r\n ? normalSamplerName\r\n : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, ${uniformPrefix}vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.y/g : /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.z/g : /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /normalW=/g, replace: tempOutput + \" = \" },\r\n isWebGPU\r\n ? {\r\n search: /mat3x3f\\(uniforms\\.normalMatrix\\[0\\].xyz,uniforms\\.normalMatrix\\[1\\]\\.xyz,uniforms\\.normalMatrix\\[2\\].xyz\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix[0].xyz, normalMatrix[1].xyz, normalMatrix[2].xyz) * ` + tempOutput,\r\n }\r\n : {\r\n search: /mat3\\(normalMatrix\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix) * ` + tempOutput,\r\n },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },\r\n tangentReplaceString,\r\n ];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /fragmentInputs.vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /input.vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /uniforms.vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n replaceStrings.push({ search: /var TBN: mat3x3f=mat3x3<f32>\\(input.vTBN0,input.vTBN1,input.vTBN2\\);/g, replace: `var TBN = vTBN;` });\r\n } else {\r\n replaceStrings.push({ search: /vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n }\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = vec4${fSuffix}(${tempOutput}, 0.);\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\n`;\r\n codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - defines the serialized object\r\n * @param scene - defines the hosting scene\r\n * @param rootUrl - defines the root URL to use for loading\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;\r\n\r\n this.parallaxScale._isInactive = this.useParallaxOcclusion;\r\n this.parallaxHeight._isInactive = this.useParallaxOcclusion;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
1
+ {"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { type NodeMaterial, type NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { type Effect } from \"../../../effect\";\r\nimport { type Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport { type Nullable } from \"../../../../types\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n private _worldMatrixName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean, undefined, {\r\n embedded: true,\r\n notifiers: {\r\n update: true,\r\n callback: (_scene: Nullable<Scene>, block: PerturbNormalBlock) => {\r\n block.parallaxScale._isInactive = block.useParallaxOcclusion;\r\n block.parallaxHeight._isInactive = block.useParallaxOcclusion;\r\n return true;\r\n },\r\n },\r\n })\r\n public useParallaxOcclusion = false;\r\n /** Gets or sets a boolean indicating that sampling mode is in Object space */\r\n @editableInPropertyPage(\"Object Space Mode\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\r\n }\r\n\r\n /**\r\n * Gets the World input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[10];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Initialize the block\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 // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - defines the list of defines to update\r\n * @param nodeMaterial - defines the node material requesting the update\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax =\r\n this.viewDirection.isConnected && ((this.useParallaxOcclusion && !!normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAX_RHS\", nodeMaterial.getScene().useRightHandedSystem, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n defines.setValue(\"OBJECTSPACE_NORMALMAP\", this.useObjectSpaceNormalMap, true);\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - defines the effect to bind data to\r\n * @param nodeMaterial - defines the node material\r\n * @param mesh - defines the mesh to bind data for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n\r\n if (this.useObjectSpaceNormalMap && !this.world.isConnected) {\r\n // World default to the mesh world matrix\r\n effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Auto configure the block based on the material\r\n * @param material - defines the hosting NodeMaterial\r\n * @param additionalFilteringInfo - defines additional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const mat3 = isWebGPU ? \"mat3x3f\" : \"mat3\";\r\n const fSuffix = isWebGPU ? \"f\" : \"\";\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n const fragmentInputsPrefix = isWebGPU ? \"fragmentInputs.\" : \"\";\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._worldMatrixName = state._getFreeDefineName(\"perturbNormalWorldMatrix\");\r\n\r\n state._emitUniformFromString(this._worldMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax =\r\n this.viewDirection.isConnected && ((this.useParallaxOcclusion && !!normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${this.strength.associatedVariableName}`;\r\n\r\n if (!isWebGPU) {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN;/g, replace: \"\" };\r\n const normalMatrixReplaceString = { search: isWebGPU ? /uniform normalMatrix: mat4x4f;/g : /uniform mat4 normalMatrix;/g, replace: \"\" };\r\n\r\n const tbn = this.TBN;\r\n if (tbn.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n ${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${tbn.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"tbnNormal\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnTangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnBitangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${uniformPrefix}${this._tangentCorrectionFactorName};\\n`;\r\n state.compilationString += `${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${mat3}(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n let replaceStrings = [tangentReplaceString, tbnVarying, normalMatrixReplaceString];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /varying vTBN0: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN1: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN2: vec3f;/g, replace: \"\" });\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n const replaceString0 = isWebGPU\r\n ? \"fn parallaxOcclusion(vViewDirCoT: vec3f, vNormalCoT: vec3f, texCoord: vec2f, parallaxScale:f32, bumpSampler: texture_2d<f32>, bumpSamplerSampler: sampler)\"\r\n : \"#define inline\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\";\r\n\r\n const searchExp0 = isWebGPU\r\n ? /fn parallaxOcclusion\\(vViewDirCoT: vec3f,vNormalCoT: vec3f,texCoord: vec2f,parallaxScale: f32\\)/g\r\n : /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g;\r\n\r\n const replaceString1 = isWebGPU\r\n ? \"fn parallaxOffset(viewDir: vec3f, heightScale: f32, height_: f32)\"\r\n : \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\";\r\n\r\n const searchExp1 = isWebGPU ? /fn parallaxOffset\\(viewDir: vec3f,heightScale: f32\\)/g : /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: searchExp0,\r\n replace: replaceString0,\r\n },\r\n { search: searchExp1, replace: replaceString1 },\r\n { search: /(?:texture2D|textureSample|TEXRD)\\(bumpSampler,.*?vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const normalRead = isWebGPU ? `textureSample(${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}` : `texture2D(${normalSamplerName}`;\r\n\r\n const uvForPerturbNormal = !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `${normalRead}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n const tempOutput = state._getFreeVariableName(\"tempOutput\");\r\n state.compilationString += state._declareLocalVar(tempOutput, NodeMaterialBlockConnectionPointTypes.Vector3) + ` = vec3${fSuffix}(0.);\\n`;\r\n\r\n replaceStrings = [\r\n {\r\n search: new RegExp(`(?:${isWebGPU ? \"textureSample\" : \"texture2D\"}|TEXRD)\\\\(bumpSampler${isWebGPU ? \",bumpSamplerSampler,fragmentInputs.\" : \",\"}vBumpUV\\\\)`, \"g\"),\r\n replace: `${uvForPerturbNormal}`,\r\n },\r\n {\r\n search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,\r\n replace: `${state._declareLocalVar(\"normalMatrix\", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : uniformPrefix + this._worldMatrixName});`,\r\n },\r\n {\r\n search: new RegExp(\r\n `perturbNormal\\\\(TBN,(?:${isWebGPU ? \"textureSample\" : \"texture2D\"}|TEXRD)\\\\(bumpSampler${isWebGPU ? \",bumpSamplerSampler,fragmentInputs.\" : \",\"}vBumpUV\\\\+uvOffset\\\\).xyz,${uniformPrefix}vBumpInfos.y\\\\)`,\r\n \"g\"\r\n ),\r\n replace: `perturbNormal(TBN, ${uvForPerturbNormal}, ${uniformPrefix}vBumpInfos.y)`,\r\n },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,(fragmentInputs\\.)?vBumpUV,(uniforms\\.)?vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), ${fragmentInputsPrefix}vBumpUV, ${uniformPrefix}vBumpInfos.z, ${\r\n isWebGPU\r\n ? useParallax && this.useParallaxOcclusion\r\n ? `${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}`\r\n : \"bump, bumpSampler\"\r\n : useParallax && this.useParallaxOcclusion\r\n ? normalSamplerName\r\n : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, ${uniformPrefix}vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.y/g : /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.z/g : /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /normalW=/g, replace: tempOutput + \" = \" },\r\n isWebGPU\r\n ? {\r\n search: /mat3x3f\\(uniforms\\.normalMatrix\\[0\\].xyz,uniforms\\.normalMatrix\\[1\\]\\.xyz,uniforms\\.normalMatrix\\[2\\].xyz\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix[0].xyz, normalMatrix[1].xyz, normalMatrix[2].xyz) * ` + tempOutput,\r\n }\r\n : {\r\n search: /mat3\\(normalMatrix\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix) * ` + tempOutput,\r\n },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },\r\n tangentReplaceString,\r\n ];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /fragmentInputs.vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /input.vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /uniforms.vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n replaceStrings.push({ search: /var TBN: mat3x3f=mat3x3<f32>\\(input.vTBN0,input.vTBN1,input.vTBN2\\);/g, replace: `var TBN = vTBN;` });\r\n } else {\r\n replaceStrings.push({ search: /vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n }\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = vec4${fSuffix}(${tempOutput}, 0.);\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\n`;\r\n codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - defines the serialized object\r\n * @param scene - defines the hosting scene\r\n * @param rootUrl - defines the root URL to use for loading\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;\r\n\r\n this.parallaxScale._isInactive = this.useParallaxOcclusion;\r\n this.parallaxHeight._isInactive = this.useParallaxOcclusion;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
@@ -149,6 +149,7 @@ export declare class OpenPBRMaterialDefines extends OpenPBRMaterialDefines_base
149
149
  USE_GLTF_STYLE_ANISOTROPY: boolean;
150
150
  THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE: boolean;
151
151
  FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA: boolean;
152
+ SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA: boolean;
152
153
  GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL: boolean;
153
154
  ENVIRONMENTBRDF: boolean;
154
155
  ENVIRONMENTBRDF_RGBD: boolean;
@@ -295,6 +296,7 @@ export declare class OpenPBRMaterialDefines extends OpenPBRMaterialDefines_base
295
296
  SPECULARAA: boolean;
296
297
  UNLIT: boolean;
297
298
  DECAL_AFTER_DETAIL: boolean;
299
+ TEXTURE_REPETITION_MODE: number;
298
300
  DEBUGMODE: number;
299
301
  USE_VERTEX_PULLING: boolean;
300
302
  VERTEX_PULLING_USE_INDEX_BUFFER: boolean;
@@ -1072,6 +1074,12 @@ export declare class OpenPBRMaterial extends OpenPBRMaterialBase {
1072
1074
  * the alpha channel of the fuzz color texture.
1073
1075
  */
1074
1076
  _useFuzzRoughnessFromTextureAlpha: boolean;
1077
+ /**
1078
+ * Specifies that the subsurface weight is stored in the alpha channel of the texture.
1079
+ * This is for compatibility with glTF where the subsurface weight is stored in
1080
+ * the alpha channel of the diffuseTransmissionTexture.
1081
+ */
1082
+ _useSubsurfaceWeightFromTextureAlpha: boolean;
1075
1083
  /**
1076
1084
  * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal
1077
1085
  * makes the reflect vector face the model (under horizon).
@@ -197,6 +197,7 @@ export class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRM
197
197
  this.USE_GLTF_STYLE_ANISOTROPY = false;
198
198
  this.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE = false;
199
199
  this.FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA = false;
200
+ this.SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA = false;
200
201
  this.GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL = false;
201
202
  this.ENVIRONMENTBRDF = false;
202
203
  this.ENVIRONMENTBRDF_RGBD = false;
@@ -343,6 +344,7 @@ export class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRM
343
344
  this.SPECULARAA = false;
344
345
  this.UNLIT = false;
345
346
  this.DECAL_AFTER_DETAIL = false;
347
+ this.TEXTURE_REPETITION_MODE = 0;
346
348
  this.DEBUGMODE = 0;
347
349
  this.USE_VERTEX_PULLING = false;
348
350
  this.VERTEX_PULLING_USE_INDEX_BUFFER = false;
@@ -838,6 +840,12 @@ export class OpenPBRMaterial extends OpenPBRMaterialBase {
838
840
  * the alpha channel of the fuzz color texture.
839
841
  */
840
842
  this._useFuzzRoughnessFromTextureAlpha = false;
843
+ /**
844
+ * Specifies that the subsurface weight is stored in the alpha channel of the texture.
845
+ * This is for compatibility with glTF where the subsurface weight is stored in
846
+ * the alpha channel of the diffuseTransmissionTexture.
847
+ */
848
+ this._useSubsurfaceWeightFromTextureAlpha = false;
841
849
  /**
842
850
  * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal
843
851
  * makes the reflect vector face the model (under horizon).
@@ -1485,6 +1493,7 @@ export class OpenPBRMaterial extends OpenPBRMaterialBase {
1485
1493
  ubo.addUniform("vDebugMode", 2);
1486
1494
  ubo.addUniform("renderTargetSize", 2);
1487
1495
  ubo.addUniform("cameraInfo", 4);
1496
+ ubo.addUniform("vTextureRepetitionHexTilingParams", 4);
1488
1497
  ubo.addUniform("backgroundRefractionMatrix", 16);
1489
1498
  ubo.addUniform("vBackgroundRefractionInfos", 3);
1490
1499
  PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);
@@ -1547,6 +1556,8 @@ export class OpenPBRMaterial extends OpenPBRMaterialBase {
1547
1556
  else {
1548
1557
  this._uniformBuffer.updateFloat4("cameraInfo", 0, 0, 0, 0);
1549
1558
  }
1559
+ const hexParams = this.textureRepetitionHexTilingParams;
1560
+ this._uniformBuffer.updateFloat4("vTextureRepetitionHexTilingParams", hexParams[0], hexParams[1], hexParams[2], hexParams[3]);
1550
1561
  this._eventInfo.subMesh = subMesh;
1551
1562
  this._callbackPluginEventHardBindForSubMesh(this._eventInfo);
1552
1563
  // Normal Matrix
@@ -1911,6 +1922,7 @@ export class OpenPBRMaterial extends OpenPBRMaterialBase {
1911
1922
  "morphTargetTextureInfo",
1912
1923
  "morphTargetTextureIndices",
1913
1924
  "cameraInfo",
1925
+ "vTextureRepetitionHexTilingParams",
1914
1926
  "backgroundRefractionMatrix",
1915
1927
  "vBackgroundRefractionInfos",
1916
1928
  ];
@@ -2067,6 +2079,7 @@ export class OpenPBRMaterial extends OpenPBRMaterialBase {
2067
2079
  defines.COAT_ROUGHNESS_FROM_GREEN_CHANNEL = this._useCoatRoughnessFromGreenChannel;
2068
2080
  defines.SPECULAR_ROUGHNESS_FROM_METALNESS_TEXTURE_GREEN = this._useRoughnessFromMetallicTextureGreen;
2069
2081
  defines.FUZZ_ROUGHNESS_FROM_TEXTURE_ALPHA = this._useFuzzRoughnessFromTextureAlpha;
2082
+ defines.SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA = this._useSubsurfaceWeightFromTextureAlpha;
2070
2083
  defines.BASE_METALNESS_FROM_METALNESS_TEXTURE_BLUE = this._useMetallicFromMetallicTextureBlue;
2071
2084
  defines.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE = this._useThinFilmThicknessFromTextureGreen;
2072
2085
  defines.GEOMETRY_THICKNESS_FROM_GREEN_CHANNEL = this._useGeometryThicknessFromGreenChannel;
@@ -2154,6 +2167,9 @@ export class OpenPBRMaterial extends OpenPBRMaterialBase {
2154
2167
  defines.PREMULTIPLYALPHA = this.alphaMode === 7 || this.alphaMode === 8;
2155
2168
  defines.ALPHABLEND = this.needAlphaBlendingForMesh(mesh);
2156
2169
  }
2170
+ if (defines._areTexturesDirty) {
2171
+ defines.TEXTURE_REPETITION_MODE = engine.version > 1 || engine.isWebGPU ? this.textureRepetitionMode : 0;
2172
+ }
2157
2173
  if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {
2158
2174
  this._imageProcessingConfiguration.prepareDefines(defines);
2159
2175
  }