@babylonjs/core 5.0.4 → 5.3.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 (139) hide show
  1. package/Audio/audioSceneComponent.d.ts +2 -0
  2. package/Audio/audioSceneComponent.js +9 -7
  3. package/Audio/audioSceneComponent.js.map +1 -1
  4. package/Behaviors/Meshes/pointerDragBehavior.js +1 -0
  5. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  6. package/Bones/skeleton.js +2 -0
  7. package/Bones/skeleton.js.map +1 -1
  8. package/Cameras/arcRotateCamera.d.ts +5 -0
  9. package/Cameras/arcRotateCamera.js +5 -0
  10. package/Cameras/arcRotateCamera.js.map +1 -1
  11. package/Cameras/camera.d.ts +5 -1
  12. package/Cameras/camera.js +7 -7
  13. package/Cameras/camera.js.map +1 -1
  14. package/Debug/debugLayer.d.ts +5 -0
  15. package/Debug/debugLayer.js +24 -0
  16. package/Debug/debugLayer.js.map +1 -1
  17. package/DeviceInput/Helpers/eventFactory.js +14 -3
  18. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  19. package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
  20. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  21. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js +2 -8
  22. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -1
  23. package/Engines/Processors/shaderCodeCursor.js +5 -0
  24. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  25. package/Engines/constants.d.ts +25 -1
  26. package/Engines/constants.js +25 -1
  27. package/Engines/constants.js.map +1 -1
  28. package/Engines/engine.d.ts +1 -1
  29. package/Engines/engine.js +2 -1
  30. package/Engines/engine.js.map +1 -1
  31. package/Engines/nativeEngine.d.ts +1 -1
  32. package/Engines/nativeEngine.js +7 -8
  33. package/Engines/nativeEngine.js.map +1 -1
  34. package/Engines/thinEngine.js +2 -2
  35. package/Engines/thinEngine.js.map +1 -1
  36. package/Engines/webgpuEngine.d.ts +4 -0
  37. package/Engines/webgpuEngine.js +2 -0
  38. package/Engines/webgpuEngine.js.map +1 -1
  39. package/Gizmos/axisScaleGizmo.js +3 -2
  40. package/Gizmos/axisScaleGizmo.js.map +1 -1
  41. package/Gizmos/boundingBoxGizmo.js +11 -11
  42. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  43. package/Gizmos/gizmo.d.ts +5 -0
  44. package/Gizmos/gizmo.js +11 -4
  45. package/Gizmos/gizmo.js.map +1 -1
  46. package/Gizmos/planeRotationGizmo.js +3 -3
  47. package/Gizmos/planeRotationGizmo.js.map +1 -1
  48. package/Inputs/scene.inputManager.js +7 -1
  49. package/Inputs/scene.inputManager.js.map +1 -1
  50. package/Lights/Shadows/shadowGenerator.d.ts +9 -0
  51. package/Lights/Shadows/shadowGenerator.js +25 -3
  52. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  53. package/Loading/Plugins/babylonFileLoader.js +10 -8
  54. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  55. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +4 -0
  56. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +19 -1
  57. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  58. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +54 -0
  59. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +135 -0
  60. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -0
  61. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +4 -0
  62. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +42 -24
  63. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  64. package/Materials/PBR/index.d.ts +1 -0
  65. package/Materials/PBR/index.js +1 -0
  66. package/Materials/PBR/index.js.map +1 -1
  67. package/Materials/PBR/pbrBaseMaterial.d.ts +5 -0
  68. package/Materials/PBR/pbrBaseMaterial.js +2 -0
  69. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  70. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +102 -0
  71. package/Materials/PBR/pbrIridescenceConfiguration.js +257 -0
  72. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -0
  73. package/Materials/Textures/Loaders/ktxTextureLoader.js +31 -0
  74. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  75. package/Materials/Textures/videoTexture.js +12 -12
  76. package/Materials/Textures/videoTexture.js.map +1 -1
  77. package/Materials/materialFlags.d.ts +6 -0
  78. package/Materials/materialFlags.js +18 -0
  79. package/Materials/materialFlags.js.map +1 -1
  80. package/Materials/materialPluginFactoryExport.d.ts +6 -0
  81. package/Materials/materialPluginFactoryExport.js +12 -0
  82. package/Materials/materialPluginFactoryExport.js.map +1 -1
  83. package/Materials/uniformBuffer.d.ts +2 -1
  84. package/Materials/uniformBuffer.js +2 -1
  85. package/Materials/uniformBuffer.js.map +1 -1
  86. package/Meshes/abstractMesh.d.ts +1 -1
  87. package/Meshes/abstractMesh.js +5 -2
  88. package/Meshes/abstractMesh.js.map +1 -1
  89. package/Meshes/mesh.d.ts +2 -2
  90. package/Meshes/mesh.js +11 -3
  91. package/Meshes/mesh.js.map +1 -1
  92. package/Misc/khronosTextureContainer.js +1 -1
  93. package/Misc/khronosTextureContainer.js.map +1 -1
  94. package/Misc/screenshotTools.js +6 -6
  95. package/Misc/screenshotTools.js.map +1 -1
  96. package/Physics/physicsImpostor.js +1 -1
  97. package/Physics/physicsImpostor.js.map +1 -1
  98. package/PostProcesses/volumetricLightScatteringPostProcess.js +6 -1
  99. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  100. package/Rendering/boundingBoxRenderer.js +4 -4
  101. package/Rendering/boundingBoxRenderer.js.map +1 -1
  102. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +1 -1
  103. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
  104. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  105. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  106. package/Shaders/ShadersInclude/lightFragment.js +1 -1
  107. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  108. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  109. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  110. package/Shaders/ShadersInclude/pbrBlockIridescence.d.ts +5 -0
  111. package/Shaders/ShadersInclude/pbrBlockIridescence.js +9 -0
  112. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -0
  113. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  114. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  115. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  116. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  117. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  118. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  119. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -1
  120. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  121. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  122. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  123. package/Shaders/pbr.fragment.d.ts +1 -0
  124. package/Shaders/pbr.fragment.js +2 -1
  125. package/Shaders/pbr.fragment.js.map +1 -1
  126. package/Shaders/pbr.vertex.js +1 -1
  127. package/Shaders/pbr.vertex.js.map +1 -1
  128. package/Shaders/spriteMap.fragment.js +1 -1
  129. package/Shaders/spriteMap.fragment.js.map +1 -1
  130. package/XR/features/WebXRImageTracking.d.ts +0 -5
  131. package/XR/features/WebXRImageTracking.js +5 -8
  132. package/XR/features/WebXRImageTracking.js.map +1 -1
  133. package/XR/native/nativeXRFrame.d.ts +2 -1
  134. package/XR/native/nativeXRFrame.js +5 -1
  135. package/XR/native/nativeXRFrame.js.map +1 -1
  136. package/package.json +1 -1
  137. package/scene.d.ts +4 -0
  138. package/scene.js +4 -0
  139. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"clearCoatBlock.js","sourceRoot":"","sources":["../../../../../../../../lts/core/generated/Materials/Node/Blocks/PBR/clearCoatBlock.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 type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { PBRMetallicRoughnessBlock } from \"./pbrMetallicRoughnessBlock\";\r\nimport type { PerturbNormalBlock } from \"../Fragment/perturbNormalBlock\";\r\nimport { PBRClearCoatConfiguration } from \"../../../PBR/pbrClearCoatConfiguration\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../nodeMaterialDecorator\";\r\n\r\n/**\r\n * Block used to implement the clear coat module of the PBR material\r\n */\r\nexport class ClearCoatBlock extends NodeMaterialBlock {\r\n private _scene: Scene;\r\n\r\n /**\r\n * Create a new ClearCoatBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"indexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintThickness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n\r\n this.registerOutput(\r\n \"clearcoat\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"clearcoat\", this, NodeMaterialConnectionPointDirection.Output, ClearCoatBlock, \"ClearCoatBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the F0 value should be remapped to account for the interface change in the material.\r\n */\r\n @editableInPropertyPage(\"Remap F0 on interface change\", PropertyTypeForEdition.Boolean, \"ADVANCED\")\r\n public remapF0OnInterfaceChange: boolean = true;\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 initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"clearcoatOut\");\r\n state._excludeVariableName(\"vClearCoatParams\");\r\n state._excludeVariableName(\"vClearCoatTintParams\");\r\n state._excludeVariableName(\"vClearCoatRefractionParams\");\r\n state._excludeVariableName(\"vClearCoatTangentSpaceParams\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ClearCoatBlock\";\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 roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the ior input component\r\n */\r\n public get indexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the bump texture input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\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[4];\r\n }\r\n\r\n /**\r\n * Gets the tint color input component\r\n */\r\n public get tintColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the tint \"at distance\" input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the tint thickness input component\r\n */\r\n public get tintThickness(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\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[8];\r\n }\r\n\r\n /**\r\n * Gets the clear coat object output component\r\n */\r\n public get clearcoat(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public autoConfigure() {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"ClearCoat intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"CLEARCOAT\", true);\r\n defines.setValue(\"CLEARCOAT_TEXTURE\", false, true);\r\n defines.setValue(\"CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"CLEARCOAT_TINT\", this.tintColor.isConnected || this.tintThickness.isConnected || this.tintAtDistance.isConnected, true);\r\n defines.setValue(\"CLEARCOAT_BUMP\", this.normalMapColor.isConnected, true);\r\n defines.setValue(\r\n \"CLEARCOAT_DEFAULTIOR\",\r\n this.indexOfRefraction.isConnected ? this.indexOfRefraction.connectInputBlock!.value === PBRClearCoatConfiguration._DefaultIndexOfRefraction : true,\r\n true\r\n );\r\n defines.setValue(\"CLEARCOAT_REMAP_F0\", this.remapF0OnInterfaceChange, true);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n // Clear Coat Refraction params\r\n const indexOfRefraction = this.indexOfRefraction.connectInputBlock?.value ?? PBRClearCoatConfiguration._DefaultIndexOfRefraction;\r\n\r\n const a = 1 - indexOfRefraction;\r\n const b = 1 + indexOfRefraction;\r\n const f0 = Math.pow(-a / b, 2); // Schlicks approx: (ior1 - ior2) / (ior1 + ior2) where ior2 for air is close to vacuum = 1.\r\n const eta = 1 / indexOfRefraction;\r\n\r\n effect.setFloat4(\"vClearCoatRefractionParams\", f0, eta, a, b);\r\n\r\n // Clear Coat tangent space params\r\n const mainPBRBlock = this.clearcoat.hasEndpoints ? (this.clearcoat.endpoints[0].ownerBlock as PBRMetallicRoughnessBlock) : null;\r\n const perturbedNormalBlock = mainPBRBlock?.perturbedNormal.isConnected ? (mainPBRBlock.perturbedNormal.connectedPoint!.ownerBlock as PerturbNormalBlock) : null;\r\n\r\n if (this._scene._mirroredCameraPosition) {\r\n effect.setFloat2(\"vClearCoatTangentSpaceParams\", perturbedNormalBlock?.invertX ? 1.0 : -1.0, perturbedNormalBlock?.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(\"vClearCoatTangentSpaceParams\", perturbedNormalBlock?.invertX ? -1.0 : 1.0, perturbedNormalBlock?.invertY ? -1.0 : 1.0);\r\n }\r\n }\r\n\r\n private _generateTBNSpace(state: NodeMaterialBuildState, worldPositionVarName: string, worldNormalVarName: string) {\r\n let code = \"\";\r\n\r\n const comments = `//${this.name}`;\r\n const worldTangent = this.worldTangent;\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 if (worldTangent.isConnected) {\r\n code += `vec3 tbnNormal = normalize(${worldNormalVarName}.xyz);\\r\\n`;\r\n code += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\\r\\n`;\r\n code += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent);\\r\\n`;\r\n code += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\\r\\n`;\r\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 ccBlock instance of a ClearCoatBlock or null if the code must be generated without an active clear coat module\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param worldPosVarName name of the variable holding the world position\r\n * @param generateTBNSpace if true, the code needed to create the TBN coordinate space is generated\r\n * @param vTBNAvailable indicate that the vTBN variable is already existing because it has already been generated by another block (PerturbNormal or Anisotropy)\r\n * @param worldNormalVarName name of the variable holding the world normal\r\n * @returns the shader code\r\n */\r\n public static GetCode(\r\n state: NodeMaterialBuildState,\r\n ccBlock: Nullable<ClearCoatBlock>,\r\n reflectionBlock: Nullable<ReflectionBlock>,\r\n worldPosVarName: string,\r\n generateTBNSpace: boolean,\r\n vTBNAvailable: boolean,\r\n worldNormalVarName: string\r\n ): string {\r\n let code = \"\";\r\n\r\n const intensity = ccBlock?.intensity.isConnected ? ccBlock.intensity.associatedVariableName : \"1.\";\r\n const roughness = ccBlock?.roughness.isConnected ? ccBlock.roughness.associatedVariableName : \"0.\";\r\n const normalMapColor = ccBlock?.normalMapColor.isConnected ? ccBlock.normalMapColor.associatedVariableName : \"vec3(0.)\";\r\n const uv = ccBlock?.uv.isConnected ? ccBlock.uv.associatedVariableName : \"vec2(0.)\";\r\n\r\n const tintColor = ccBlock?.tintColor.isConnected ? ccBlock.tintColor.associatedVariableName : \"vec3(1.)\";\r\n const tintThickness = ccBlock?.tintThickness.isConnected ? ccBlock.tintThickness.associatedVariableName : \"1.\";\r\n const tintAtDistance = ccBlock?.tintAtDistance.isConnected ? ccBlock.tintAtDistance.associatedVariableName : \"1.\";\r\n const tintTexture = \"vec4(0.)\";\r\n\r\n if (ccBlock) {\r\n state._emitUniformFromString(\"vClearCoatRefractionParams\", \"vec4\");\r\n state._emitUniformFromString(\"vClearCoatTangentSpaceParams\", \"vec2\");\r\n }\r\n\r\n if (generateTBNSpace && ccBlock) {\r\n code += ccBlock._generateTBNSpace(state, worldPosVarName, worldNormalVarName);\r\n vTBNAvailable = ccBlock.worldTangent.isConnected;\r\n }\r\n\r\n code += `clearcoatOutParams clearcoatOut;\r\n\r\n #ifdef CLEARCOAT\r\n vec2 vClearCoatParams = vec2(${intensity}, ${roughness});\r\n vec4 vClearCoatTintParams = vec4(${tintColor}, ${tintThickness});\r\n\r\n clearcoatBlock(\r\n ${worldPosVarName}.xyz,\r\n geometricNormalW,\r\n viewDirectionW,\r\n vClearCoatParams,\r\n specularEnvironmentR0,\r\n #ifdef CLEARCOAT_TEXTURE\r\n vec2(0.),\r\n #endif\r\n #ifdef CLEARCOAT_TINT\r\n vClearCoatTintParams,\r\n ${tintAtDistance},\r\n vClearCoatRefractionParams,\r\n #ifdef CLEARCOAT_TINT_TEXTURE\r\n ${tintTexture},\r\n #endif\r\n #endif\r\n #ifdef CLEARCOAT_BUMP\r\n vec2(0., 1.),\r\n vec4(${normalMapColor}, 0.),\r\n ${uv},\r\n #if defined(${vTBNAvailable ? \"TANGENT\" : \"IGNORE\"}) && defined(NORMAL)\r\n vTBN,\r\n #else\r\n vClearCoatTangentSpaceParams,\r\n #endif\r\n #ifdef OBJECTSPACE_NORMALMAP\r\n normalMatrix,\r\n #endif\r\n #endif\r\n #if defined(FORCENORMALFORWARD) && defined(NORMAL)\r\n faceNormal,\r\n #endif\r\n #ifdef REFLECTION\r\n ${reflectionBlock?._vReflectionMicrosurfaceInfosName},\r\n ${reflectionBlock?._vReflectionInfosName},\r\n ${reflectionBlock?.reflectionColor},\r\n vLightingIntensity,\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n #endif\r\n #endif\r\n #if defined(ENVIRONMENTBRDF) && !defined(${reflectionBlock?._defineSkyboxName})\r\n #ifdef RADIANCEOCCLUSION\r\n ambientMonochrome,\r\n #endif\r\n #endif\r\n #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)\r\n (gl_FrontFacing ? 1. : -1.),\r\n #endif\r\n clearcoatOut\r\n );\r\n #else\r\n clearcoatOut.specularEnvironmentR0 = specularEnvironmentR0;\r\n #endif\\r\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.bindableBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.remapF0OnInterfaceChange = ${this.remapF0OnInterfaceChange};\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.remapF0OnInterfaceChange = this.remapF0OnInterfaceChange;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.remapF0OnInterfaceChange = serializationObject.remapF0OnInterfaceChange ?? true;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ClearCoatBlock\", ClearCoatBlock);\r\n"]}
1
+ {"version":3,"file":"clearCoatBlock.js","sourceRoot":"","sources":["../../../../../../../../lts/core/generated/Materials/Node/Blocks/PBR/clearCoatBlock.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 type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { PBRMetallicRoughnessBlock } from \"./pbrMetallicRoughnessBlock\";\r\nimport type { PerturbNormalBlock } from \"../Fragment/perturbNormalBlock\";\r\nimport { PBRClearCoatConfiguration } from \"../../../PBR/pbrClearCoatConfiguration\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../nodeMaterialDecorator\";\r\n\r\n/**\r\n * Block used to implement the clear coat module of the PBR material\r\n */\r\nexport class ClearCoatBlock extends NodeMaterialBlock {\r\n private _scene: Scene;\r\n\r\n /**\r\n * Create a new ClearCoatBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"indexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintThickness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.worldNormal.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this.registerOutput(\r\n \"clearcoat\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"clearcoat\", this, NodeMaterialConnectionPointDirection.Output, ClearCoatBlock, \"ClearCoatBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the F0 value should be remapped to account for the interface change in the material.\r\n */\r\n @editableInPropertyPage(\"Remap F0 on interface change\", PropertyTypeForEdition.Boolean, \"ADVANCED\")\r\n public remapF0OnInterfaceChange: boolean = true;\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 initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"clearcoatOut\");\r\n state._excludeVariableName(\"vClearCoatParams\");\r\n state._excludeVariableName(\"vClearCoatTintParams\");\r\n state._excludeVariableName(\"vClearCoatRefractionParams\");\r\n state._excludeVariableName(\"vClearCoatTangentSpaceParams\");\r\n state._excludeVariableName(\"vGeometricNormaClearCoatW\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ClearCoatBlock\";\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 roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the ior input component\r\n */\r\n public get indexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the bump texture input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\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[4];\r\n }\r\n\r\n /**\r\n * Gets the tint color input component\r\n */\r\n public get tintColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the tint \"at distance\" input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the tint thickness input component\r\n */\r\n public get tintThickness(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\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[8];\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[9];\r\n }\r\n\r\n /**\r\n * Gets the clear coat object output component\r\n */\r\n public get clearcoat(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public autoConfigure() {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"ClearCoat intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"CLEARCOAT\", true);\r\n defines.setValue(\"CLEARCOAT_TEXTURE\", false, true);\r\n defines.setValue(\"CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"CLEARCOAT_TINT\", this.tintColor.isConnected || this.tintThickness.isConnected || this.tintAtDistance.isConnected, true);\r\n defines.setValue(\"CLEARCOAT_BUMP\", this.normalMapColor.isConnected, true);\r\n defines.setValue(\r\n \"CLEARCOAT_DEFAULTIOR\",\r\n this.indexOfRefraction.isConnected ? this.indexOfRefraction.connectInputBlock!.value === PBRClearCoatConfiguration._DefaultIndexOfRefraction : true,\r\n true\r\n );\r\n defines.setValue(\"CLEARCOAT_REMAP_F0\", this.remapF0OnInterfaceChange, true);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n // Clear Coat Refraction params\r\n const indexOfRefraction = this.indexOfRefraction.connectInputBlock?.value ?? PBRClearCoatConfiguration._DefaultIndexOfRefraction;\r\n\r\n const a = 1 - indexOfRefraction;\r\n const b = 1 + indexOfRefraction;\r\n const f0 = Math.pow(-a / b, 2); // Schlicks approx: (ior1 - ior2) / (ior1 + ior2) where ior2 for air is close to vacuum = 1.\r\n const eta = 1 / indexOfRefraction;\r\n\r\n effect.setFloat4(\"vClearCoatRefractionParams\", f0, eta, a, b);\r\n\r\n // Clear Coat tangent space params\r\n const mainPBRBlock = this.clearcoat.hasEndpoints ? (this.clearcoat.endpoints[0].ownerBlock as PBRMetallicRoughnessBlock) : null;\r\n const perturbedNormalBlock = mainPBRBlock?.perturbedNormal.isConnected ? (mainPBRBlock.perturbedNormal.connectedPoint!.ownerBlock as PerturbNormalBlock) : null;\r\n\r\n if (this._scene._mirroredCameraPosition) {\r\n effect.setFloat2(\"vClearCoatTangentSpaceParams\", perturbedNormalBlock?.invertX ? 1.0 : -1.0, perturbedNormalBlock?.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(\"vClearCoatTangentSpaceParams\", perturbedNormalBlock?.invertX ? -1.0 : 1.0, perturbedNormalBlock?.invertY ? -1.0 : 1.0);\r\n }\r\n }\r\n\r\n private _generateTBNSpace(state: NodeMaterialBuildState, worldPositionVarName: string, worldNormalVarName: string) {\r\n let code = \"\";\r\n\r\n const comments = `//${this.name}`;\r\n const worldTangent = this.worldTangent;\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 if (worldTangent.isConnected) {\r\n code += `vec3 tbnNormal = normalize(${worldNormalVarName}.xyz);\\r\\n`;\r\n code += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\\r\\n`;\r\n code += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent);\\r\\n`;\r\n code += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\\r\\n`;\r\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 ccBlock instance of a ClearCoatBlock or null if the code must be generated without an active clear coat module\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param worldPosVarName name of the variable holding the world position\r\n * @param generateTBNSpace if true, the code needed to create the TBN coordinate space is generated\r\n * @param vTBNAvailable indicate that the vTBN variable is already existing because it has already been generated by another block (PerturbNormal or Anisotropy)\r\n * @param worldNormalVarName name of the variable holding the world normal\r\n * @returns the shader code\r\n */\r\n public static GetCode(\r\n state: NodeMaterialBuildState,\r\n ccBlock: Nullable<ClearCoatBlock>,\r\n reflectionBlock: Nullable<ReflectionBlock>,\r\n worldPosVarName: string,\r\n generateTBNSpace: boolean,\r\n vTBNAvailable: boolean,\r\n worldNormalVarName: string\r\n ): string {\r\n let code = \"\";\r\n\r\n const intensity = ccBlock?.intensity.isConnected ? ccBlock.intensity.associatedVariableName : \"1.\";\r\n const roughness = ccBlock?.roughness.isConnected ? ccBlock.roughness.associatedVariableName : \"0.\";\r\n const normalMapColor = ccBlock?.normalMapColor.isConnected ? ccBlock.normalMapColor.associatedVariableName : \"vec3(0.)\";\r\n const uv = ccBlock?.uv.isConnected ? ccBlock.uv.associatedVariableName : \"vec2(0.)\";\r\n\r\n const tintColor = ccBlock?.tintColor.isConnected ? ccBlock.tintColor.associatedVariableName : \"vec3(1.)\";\r\n const tintThickness = ccBlock?.tintThickness.isConnected ? ccBlock.tintThickness.associatedVariableName : \"1.\";\r\n const tintAtDistance = ccBlock?.tintAtDistance.isConnected ? ccBlock.tintAtDistance.associatedVariableName : \"1.\";\r\n const tintTexture = \"vec4(0.)\";\r\n\r\n if (ccBlock) {\r\n state._emitUniformFromString(\"vClearCoatRefractionParams\", \"vec4\");\r\n state._emitUniformFromString(\"vClearCoatTangentSpaceParams\", \"vec2\");\r\n\r\n const normalShading = ccBlock.worldNormal;\r\n code += `vec3 vGeometricNormaClearCoatW = ${normalShading.isConnected ? \"normalize(\" + normalShading.associatedVariableName + \".xyz)\" : \"geometricNormalW\"};\\r\\n`;\r\n } else {\r\n code += `vec3 vGeometricNormaClearCoatW = geometricNormalW;\\r\\n`;\r\n }\r\n\r\n if (generateTBNSpace && ccBlock) {\r\n code += ccBlock._generateTBNSpace(state, worldPosVarName, worldNormalVarName);\r\n vTBNAvailable = ccBlock.worldTangent.isConnected;\r\n }\r\n\r\n code += `clearcoatOutParams clearcoatOut;\r\n\r\n #ifdef CLEARCOAT\r\n vec2 vClearCoatParams = vec2(${intensity}, ${roughness});\r\n vec4 vClearCoatTintParams = vec4(${tintColor}, ${tintThickness});\r\n\r\n clearcoatBlock(\r\n ${worldPosVarName}.xyz,\r\n vGeometricNormaClearCoatW,\r\n viewDirectionW,\r\n vClearCoatParams,\r\n specularEnvironmentR0,\r\n #ifdef CLEARCOAT_TEXTURE\r\n vec2(0.),\r\n #endif\r\n #ifdef CLEARCOAT_TINT\r\n vClearCoatTintParams,\r\n ${tintAtDistance},\r\n vClearCoatRefractionParams,\r\n #ifdef CLEARCOAT_TINT_TEXTURE\r\n ${tintTexture},\r\n #endif\r\n #endif\r\n #ifdef CLEARCOAT_BUMP\r\n vec2(0., 1.),\r\n vec4(${normalMapColor}, 0.),\r\n ${uv},\r\n #if defined(${vTBNAvailable ? \"TANGENT\" : \"IGNORE\"}) && defined(NORMAL)\r\n vTBN,\r\n #else\r\n vClearCoatTangentSpaceParams,\r\n #endif\r\n #ifdef OBJECTSPACE_NORMALMAP\r\n normalMatrix,\r\n #endif\r\n #endif\r\n #if defined(FORCENORMALFORWARD) && defined(NORMAL)\r\n faceNormal,\r\n #endif\r\n #ifdef REFLECTION\r\n ${reflectionBlock?._vReflectionMicrosurfaceInfosName},\r\n ${reflectionBlock?._vReflectionInfosName},\r\n ${reflectionBlock?.reflectionColor},\r\n vLightingIntensity,\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n #endif\r\n #endif\r\n #if defined(ENVIRONMENTBRDF) && !defined(${reflectionBlock?._defineSkyboxName})\r\n #ifdef RADIANCEOCCLUSION\r\n ambientMonochrome,\r\n #endif\r\n #endif\r\n #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)\r\n (gl_FrontFacing ? 1. : -1.),\r\n #endif\r\n clearcoatOut\r\n );\r\n #else\r\n clearcoatOut.specularEnvironmentR0 = specularEnvironmentR0;\r\n #endif\\r\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.bindableBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.remapF0OnInterfaceChange = ${this.remapF0OnInterfaceChange};\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.remapF0OnInterfaceChange = this.remapF0OnInterfaceChange;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.remapF0OnInterfaceChange = serializationObject.remapF0OnInterfaceChange ?? true;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ClearCoatBlock\", ClearCoatBlock);\r\n"]}
@@ -0,0 +1,54 @@
1
+ import { NodeMaterialBlock } from "../../nodeMaterialBlock";
2
+ import type { NodeMaterialBuildState } from "../../nodeMaterialBuildState";
3
+ import type { NodeMaterialConnectionPoint } from "../../nodeMaterialBlockConnectionPoint";
4
+ import type { NodeMaterial, NodeMaterialDefines } from "../../nodeMaterial";
5
+ import type { AbstractMesh } from "../../../../Meshes/abstractMesh";
6
+ import type { Scene } from "../../../../scene";
7
+ import type { Nullable } from "../../../../types";
8
+ /**
9
+ * Block used to implement the iridescence module of the PBR material
10
+ */
11
+ export declare class IridescenceBlock extends NodeMaterialBlock {
12
+ /**
13
+ * Create a new IridescenceBlock
14
+ * @param name defines the block name
15
+ */
16
+ constructor(name: string);
17
+ /**
18
+ * Initialize the block and prepare the context for build
19
+ * @param state defines the state that will be used for the build
20
+ */
21
+ initialize(state: NodeMaterialBuildState): void;
22
+ /**
23
+ * Gets the current class name
24
+ * @returns the class name
25
+ */
26
+ getClassName(): string;
27
+ /**
28
+ * Gets the intensity input component
29
+ */
30
+ get intensity(): NodeMaterialConnectionPoint;
31
+ /**
32
+ * Gets the indexOfRefraction input component
33
+ */
34
+ get indexOfRefraction(): NodeMaterialConnectionPoint;
35
+ /**
36
+ * Gets the thickness input component
37
+ */
38
+ get thickness(): NodeMaterialConnectionPoint;
39
+ /**
40
+ * Gets the iridescence object output component
41
+ */
42
+ get iridescence(): NodeMaterialConnectionPoint;
43
+ autoConfigure(): void;
44
+ prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
45
+ /**
46
+ * Gets the main code of the block (fragment side)
47
+ * @param iridescenceBlock instance of a IridescenceBlock or null if the code must be generated without an active iridescence module
48
+ * @returns the shader code
49
+ */
50
+ static GetCode(iridescenceBlock: Nullable<IridescenceBlock>): string;
51
+ protected _buildBlock(state: NodeMaterialBuildState): this;
52
+ serialize(): any;
53
+ _deserialize(serializationObject: any, scene: Scene, rootUrl: string): void;
54
+ }
@@ -0,0 +1,135 @@
1
+ import { __extends } from "tslib";
2
+ import { NodeMaterialBlock } from "../../nodeMaterialBlock.js";
3
+ import { NodeMaterialBlockConnectionPointTypes } from "../../Enums/nodeMaterialBlockConnectionPointTypes.js";
4
+ import { NodeMaterialConnectionPointDirection } from "../../nodeMaterialBlockConnectionPoint.js";
5
+ import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.js";
6
+ import { RegisterClass } from "../../../../Misc/typeStore.js";
7
+ import { InputBlock } from "../Input/inputBlock.js";
8
+ import { NodeMaterialConnectionPointCustomObject } from "../../nodeMaterialConnectionPointCustomObject.js";
9
+ import { PBRIridescenceConfiguration } from "../../../../Materials/PBR/pbrIridescenceConfiguration.js";
10
+ /**
11
+ * Block used to implement the iridescence module of the PBR material
12
+ */
13
+ var IridescenceBlock = /** @class */ (function (_super) {
14
+ __extends(IridescenceBlock, _super);
15
+ /**
16
+ * Create a new IridescenceBlock
17
+ * @param name defines the block name
18
+ */
19
+ function IridescenceBlock(name) {
20
+ var _this = _super.call(this, name, NodeMaterialBlockTargets.Fragment) || this;
21
+ _this._isUnique = true;
22
+ _this.registerInput("intensity", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);
23
+ _this.registerInput("indexOfRefraction", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);
24
+ _this.registerInput("thickness", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);
25
+ _this.registerOutput("iridescence", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.Fragment, new NodeMaterialConnectionPointCustomObject("iridescence", _this, NodeMaterialConnectionPointDirection.Output, IridescenceBlock, "IridescenceBlock"));
26
+ return _this;
27
+ }
28
+ /**
29
+ * Initialize the block and prepare the context for build
30
+ * @param state defines the state that will be used for the build
31
+ */
32
+ IridescenceBlock.prototype.initialize = function (state) {
33
+ state._excludeVariableName("iridescenceOut");
34
+ state._excludeVariableName("vIridescenceParams");
35
+ };
36
+ /**
37
+ * Gets the current class name
38
+ * @returns the class name
39
+ */
40
+ IridescenceBlock.prototype.getClassName = function () {
41
+ return "IridescenceBlock";
42
+ };
43
+ Object.defineProperty(IridescenceBlock.prototype, "intensity", {
44
+ /**
45
+ * Gets the intensity input component
46
+ */
47
+ get: function () {
48
+ return this._inputs[0];
49
+ },
50
+ enumerable: false,
51
+ configurable: true
52
+ });
53
+ Object.defineProperty(IridescenceBlock.prototype, "indexOfRefraction", {
54
+ /**
55
+ * Gets the indexOfRefraction input component
56
+ */
57
+ get: function () {
58
+ return this._inputs[1];
59
+ },
60
+ enumerable: false,
61
+ configurable: true
62
+ });
63
+ Object.defineProperty(IridescenceBlock.prototype, "thickness", {
64
+ /**
65
+ * Gets the thickness input component
66
+ */
67
+ get: function () {
68
+ return this._inputs[2];
69
+ },
70
+ enumerable: false,
71
+ configurable: true
72
+ });
73
+ Object.defineProperty(IridescenceBlock.prototype, "iridescence", {
74
+ /**
75
+ * Gets the iridescence object output component
76
+ */
77
+ get: function () {
78
+ return this._outputs[0];
79
+ },
80
+ enumerable: false,
81
+ configurable: true
82
+ });
83
+ IridescenceBlock.prototype.autoConfigure = function () {
84
+ if (!this.intensity.isConnected) {
85
+ var intensityInput = new InputBlock("Iridescence intensity", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);
86
+ intensityInput.value = 1;
87
+ intensityInput.output.connectTo(this.intensity);
88
+ var indexOfRefractionInput = new InputBlock("Iridescence ior", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);
89
+ indexOfRefractionInput.value = 1.3;
90
+ indexOfRefractionInput.output.connectTo(this.indexOfRefraction);
91
+ var thicknessInput = new InputBlock("Iridescence thickness", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);
92
+ thicknessInput.value = 400;
93
+ thicknessInput.output.connectTo(this.thickness);
94
+ }
95
+ };
96
+ IridescenceBlock.prototype.prepareDefines = function (mesh, nodeMaterial, defines) {
97
+ _super.prototype.prepareDefines.call(this, mesh, nodeMaterial, defines);
98
+ defines.setValue("IRIDESCENCE", true, true);
99
+ defines.setValue("IRIDESCENCE_TEXTURE", false, true);
100
+ defines.setValue("IRIDESCENCE_THICKNESS_TEXTURE", false, true);
101
+ };
102
+ /**
103
+ * Gets the main code of the block (fragment side)
104
+ * @param iridescenceBlock instance of a IridescenceBlock or null if the code must be generated without an active iridescence module
105
+ * @returns the shader code
106
+ */
107
+ IridescenceBlock.GetCode = function (iridescenceBlock) {
108
+ var code = "";
109
+ var intensityName = (iridescenceBlock === null || iridescenceBlock === void 0 ? void 0 : iridescenceBlock.intensity.isConnected) ? iridescenceBlock.intensity.associatedVariableName : "1.";
110
+ var indexOfRefraction = (iridescenceBlock === null || iridescenceBlock === void 0 ? void 0 : iridescenceBlock.indexOfRefraction.isConnected)
111
+ ? iridescenceBlock.indexOfRefraction.associatedVariableName
112
+ : PBRIridescenceConfiguration._DefaultIndexOfRefraction;
113
+ var thickness = (iridescenceBlock === null || iridescenceBlock === void 0 ? void 0 : iridescenceBlock.thickness.isConnected) ? iridescenceBlock.thickness.associatedVariableName : PBRIridescenceConfiguration._DefaultMaximumThickness;
114
+ code += "iridescenceOutParams iridescenceOut;\n\n #ifdef IRIDESCENCE\n iridescenceBlock(\n vec4(".concat(intensityName, ", ").concat(indexOfRefraction, ", 1., ").concat(thickness, "),\n NdotV,\n specularEnvironmentR0,\n #ifdef CLEARCOAT\n NdotVUnclamped,\n #endif\n iridescenceOut\n );\n\n float iridescenceIntensity = iridescenceOut.iridescenceIntensity;\n specularEnvironmentR0 = iridescenceOut.specularEnvironmentR0;\n #endif\r\n");
115
+ return code;
116
+ };
117
+ IridescenceBlock.prototype._buildBlock = function (state) {
118
+ if (state.target === NodeMaterialBlockTargets.Fragment) {
119
+ state.sharedData.bindableBlocks.push(this);
120
+ state.sharedData.blocksWithDefines.push(this);
121
+ }
122
+ return this;
123
+ };
124
+ IridescenceBlock.prototype.serialize = function () {
125
+ var serializationObject = _super.prototype.serialize.call(this);
126
+ return serializationObject;
127
+ };
128
+ IridescenceBlock.prototype._deserialize = function (serializationObject, scene, rootUrl) {
129
+ _super.prototype._deserialize.call(this, serializationObject, scene, rootUrl);
130
+ };
131
+ return IridescenceBlock;
132
+ }(NodeMaterialBlock));
133
+ export { IridescenceBlock };
134
+ RegisterClass("BABYLON.IridescenceBlock", IridescenceBlock);
135
+ //# sourceMappingURL=iridescenceBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iridescenceBlock.js","sourceRoot":"","sources":["../../../../../../../../lts/core/generated/Materials/Node/Blocks/PBR/iridescenceBlock.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 type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { PBRIridescenceConfiguration } from \"../../../../Materials/PBR/pbrIridescenceConfiguration\";\r\n\r\n/**\r\n * Block used to implement the iridescence module of the PBR material\r\n */\r\nexport class IridescenceBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new IridescenceBlock\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(\"indexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"thickness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"iridescence\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"iridescence\", this, NodeMaterialConnectionPointDirection.Output, IridescenceBlock, \"IridescenceBlock\")\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 initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"iridescenceOut\");\r\n state._excludeVariableName(\"vIridescenceParams\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"IridescenceBlock\";\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 indexOfRefraction input component\r\n */\r\n public get indexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the thickness input component\r\n */\r\n public get thickness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the iridescence object output component\r\n */\r\n public get iridescence(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public autoConfigure() {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"Iridescence intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n\r\n const indexOfRefractionInput = new InputBlock(\"Iridescence ior\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n indexOfRefractionInput.value = 1.3;\r\n indexOfRefractionInput.output.connectTo(this.indexOfRefraction);\r\n\r\n const thicknessInput = new InputBlock(\"Iridescence thickness\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n thicknessInput.value = 400;\r\n thicknessInput.output.connectTo(this.thickness);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"IRIDESCENCE\", true, true);\r\n defines.setValue(\"IRIDESCENCE_TEXTURE\", false, true);\r\n defines.setValue(\"IRIDESCENCE_THICKNESS_TEXTURE\", false, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param iridescenceBlock instance of a IridescenceBlock or null if the code must be generated without an active iridescence module\r\n * @returns the shader code\r\n */\r\n public static GetCode(iridescenceBlock: Nullable<IridescenceBlock>): string {\r\n let code = \"\";\r\n\r\n const intensityName = iridescenceBlock?.intensity.isConnected ? iridescenceBlock.intensity.associatedVariableName : \"1.\";\r\n const indexOfRefraction = iridescenceBlock?.indexOfRefraction.isConnected\r\n ? iridescenceBlock.indexOfRefraction.associatedVariableName\r\n : PBRIridescenceConfiguration._DefaultIndexOfRefraction;\r\n const thickness = iridescenceBlock?.thickness.isConnected ? iridescenceBlock.thickness.associatedVariableName : PBRIridescenceConfiguration._DefaultMaximumThickness;\r\n\r\n code += `iridescenceOutParams iridescenceOut;\r\n\r\n #ifdef IRIDESCENCE\r\n iridescenceBlock(\r\n vec4(${intensityName}, ${indexOfRefraction}, 1., ${thickness}),\r\n NdotV,\r\n specularEnvironmentR0,\r\n #ifdef CLEARCOAT\r\n NdotVUnclamped,\r\n #endif\r\n iridescenceOut\r\n );\r\n\r\n float iridescenceIntensity = iridescenceOut.iridescenceIntensity;\r\n specularEnvironmentR0 = iridescenceOut.specularEnvironmentR0;\r\n #endif\\r\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.bindableBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.IridescenceBlock\", IridescenceBlock);\r\n"]}
@@ -203,6 +203,10 @@ export declare class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
203
203
  * Gets the anisotropy object parameters
204
204
  */
205
205
  get anisotropy(): NodeMaterialConnectionPoint;
206
+ /**
207
+ * Gets the iridescence object parameters
208
+ */
209
+ get iridescence(): NodeMaterialConnectionPoint;
206
210
  /**
207
211
  * Gets the ambient output component
208
212
  */
@@ -16,6 +16,7 @@ import { MaterialFlags } from "../../../materialFlags.js";
16
16
  import { AnisotropyBlock } from "./anisotropyBlock.js";
17
17
  import { ReflectionBlock } from "./reflectionBlock.js";
18
18
  import { ClearCoatBlock } from "./clearCoatBlock.js";
19
+ import { IridescenceBlock } from "./iridescenceBlock.js";
19
20
  import { SubSurfaceBlock } from "./subSurfaceBlock.js";
20
21
 
21
22
  import { Color3, TmpColors } from "../../../../Maths/math.color.js";
@@ -161,6 +162,7 @@ var PBRMetallicRoughnessBlock = /** @class */ (function (_super) {
161
162
  _this.registerInput("sheen", NodeMaterialBlockConnectionPointTypes.Object, true, NodeMaterialBlockTargets.Fragment, new NodeMaterialConnectionPointCustomObject("sheen", _this, NodeMaterialConnectionPointDirection.Input, SheenBlock, "SheenBlock"));
162
163
  _this.registerInput("subsurface", NodeMaterialBlockConnectionPointTypes.Object, true, NodeMaterialBlockTargets.Fragment, new NodeMaterialConnectionPointCustomObject("subsurface", _this, NodeMaterialConnectionPointDirection.Input, SubSurfaceBlock, "SubSurfaceBlock"));
163
164
  _this.registerInput("anisotropy", NodeMaterialBlockConnectionPointTypes.Object, true, NodeMaterialBlockTargets.Fragment, new NodeMaterialConnectionPointCustomObject("anisotropy", _this, NodeMaterialConnectionPointDirection.Input, AnisotropyBlock, "AnisotropyBlock"));
165
+ _this.registerInput("iridescence", NodeMaterialBlockConnectionPointTypes.Object, true, NodeMaterialBlockTargets.Fragment, new NodeMaterialConnectionPointCustomObject("iridescence", _this, NodeMaterialConnectionPointDirection.Input, IridescenceBlock, "IridescenceBlock"));
164
166
  _this.registerOutput("ambientClr", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);
165
167
  _this.registerOutput("diffuseDir", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);
166
168
  _this.registerOutput("specularDir", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);
@@ -393,6 +395,16 @@ var PBRMetallicRoughnessBlock = /** @class */ (function (_super) {
393
395
  enumerable: false,
394
396
  configurable: true
395
397
  });
398
+ Object.defineProperty(PBRMetallicRoughnessBlock.prototype, "iridescence", {
399
+ /**
400
+ * Gets the iridescence object parameters
401
+ */
402
+ get: function () {
403
+ return this._inputs[17];
404
+ },
405
+ enumerable: false,
406
+ configurable: true
407
+ });
396
408
  Object.defineProperty(PBRMetallicRoughnessBlock.prototype, "ambientClr", {
397
409
  /**
398
410
  * Gets the ambient output component
@@ -768,7 +780,7 @@ var PBRMetallicRoughnessBlock = /** @class */ (function (_super) {
768
780
  return code;
769
781
  };
770
782
  PBRMetallicRoughnessBlock.prototype._buildBlock = function (state) {
771
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;
783
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16;
772
784
  _super.prototype._buildBlock.call(this, state);
773
785
  this._scene = state.sharedData.scene;
774
786
  if (!this._environmentBRDFTexture) {
@@ -926,39 +938,45 @@ var PBRMetallicRoughnessBlock = /** @class */ (function (_super) {
926
938
  { search: /LINEARSPECULARREFLECTION/g, replace: (_s = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineLinearSpecularReflection) !== null && _s !== void 0 ? _s : "LINEARSPECULARREFLECTION" },
927
939
  ],
928
940
  });
941
+ // _____________________________ Iridescence _______________________________
942
+ var iridescenceBlock = this.iridescence.isConnected ? (_t = this.iridescence.connectedPoint) === null || _t === void 0 ? void 0 : _t.ownerBlock : null;
943
+ state.compilationString += IridescenceBlock.GetCode(iridescenceBlock);
944
+ state._emitFunctionFromInclude("pbrBlockIridescence", comments, {
945
+ replaceStrings: [],
946
+ });
929
947
  // _____________________________ Clear Coat ____________________________
930
- var clearcoatBlock = this.clearcoat.isConnected ? (_t = this.clearcoat.connectedPoint) === null || _t === void 0 ? void 0 : _t.ownerBlock : null;
948
+ var clearcoatBlock = this.clearcoat.isConnected ? (_u = this.clearcoat.connectedPoint) === null || _u === void 0 ? void 0 : _u.ownerBlock : null;
931
949
  var generateTBNSpace = !this.perturbedNormal.isConnected && !this.anisotropy.isConnected;
932
- var isTangentConnectedToPerturbNormal = this.perturbedNormal.isConnected && ((_v = ((_u = this.perturbedNormal.connectedPoint) === null || _u === void 0 ? void 0 : _u.ownerBlock).worldTangent) === null || _v === void 0 ? void 0 : _v.isConnected);
933
- var isTangentConnectedToAnisotropy = this.anisotropy.isConnected && ((_w = this.anisotropy.connectedPoint) === null || _w === void 0 ? void 0 : _w.ownerBlock).worldTangent.isConnected;
950
+ var isTangentConnectedToPerturbNormal = this.perturbedNormal.isConnected && ((_w = ((_v = this.perturbedNormal.connectedPoint) === null || _v === void 0 ? void 0 : _v.ownerBlock).worldTangent) === null || _w === void 0 ? void 0 : _w.isConnected);
951
+ var isTangentConnectedToAnisotropy = this.anisotropy.isConnected && ((_x = this.anisotropy.connectedPoint) === null || _x === void 0 ? void 0 : _x.ownerBlock).worldTangent.isConnected;
934
952
  var vTBNAvailable = isTangentConnectedToPerturbNormal || (!this.perturbedNormal.isConnected && isTangentConnectedToAnisotropy);
935
953
  state.compilationString += ClearCoatBlock.GetCode(state, clearcoatBlock, reflectionBlock, worldPosVarName, generateTBNSpace, vTBNAvailable, this.worldNormal.associatedVariableName);
936
954
  if (generateTBNSpace) {
937
- vTBNAvailable = (_x = clearcoatBlock === null || clearcoatBlock === void 0 ? void 0 : clearcoatBlock.worldTangent.isConnected) !== null && _x !== void 0 ? _x : false;
955
+ vTBNAvailable = (_y = clearcoatBlock === null || clearcoatBlock === void 0 ? void 0 : clearcoatBlock.worldTangent.isConnected) !== null && _y !== void 0 ? _y : false;
938
956
  }
939
957
  state._emitFunctionFromInclude("pbrBlockClearcoat", comments, {
940
958
  replaceStrings: [
941
959
  { search: /computeReflectionCoords/g, replace: "computeReflectionCoordsPBR" },
942
- { search: /REFLECTIONMAP_3D/g, replace: (_y = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._define3DName) !== null && _y !== void 0 ? _y : "REFLECTIONMAP_3D" },
943
- { search: /REFLECTIONMAP_OPPOSITEZ/g, replace: (_z = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineOppositeZ) !== null && _z !== void 0 ? _z : "REFLECTIONMAP_OPPOSITEZ" },
944
- { search: /REFLECTIONMAP_PROJECTION/g, replace: (_0 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineProjectionName) !== null && _0 !== void 0 ? _0 : "REFLECTIONMAP_PROJECTION" },
945
- { search: /REFLECTIONMAP_SKYBOX/g, replace: (_1 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineSkyboxName) !== null && _1 !== void 0 ? _1 : "REFLECTIONMAP_SKYBOX" },
946
- { search: /LODINREFLECTIONALPHA/g, replace: (_2 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineLODReflectionAlpha) !== null && _2 !== void 0 ? _2 : "LODINREFLECTIONALPHA" },
947
- { search: /LINEARSPECULARREFLECTION/g, replace: (_3 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineLinearSpecularReflection) !== null && _3 !== void 0 ? _3 : "LINEARSPECULARREFLECTION" },
960
+ { search: /REFLECTIONMAP_3D/g, replace: (_z = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._define3DName) !== null && _z !== void 0 ? _z : "REFLECTIONMAP_3D" },
961
+ { search: /REFLECTIONMAP_OPPOSITEZ/g, replace: (_0 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineOppositeZ) !== null && _0 !== void 0 ? _0 : "REFLECTIONMAP_OPPOSITEZ" },
962
+ { search: /REFLECTIONMAP_PROJECTION/g, replace: (_1 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineProjectionName) !== null && _1 !== void 0 ? _1 : "REFLECTIONMAP_PROJECTION" },
963
+ { search: /REFLECTIONMAP_SKYBOX/g, replace: (_2 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineSkyboxName) !== null && _2 !== void 0 ? _2 : "REFLECTIONMAP_SKYBOX" },
964
+ { search: /LODINREFLECTIONALPHA/g, replace: (_3 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineLODReflectionAlpha) !== null && _3 !== void 0 ? _3 : "LODINREFLECTIONALPHA" },
965
+ { search: /LINEARSPECULARREFLECTION/g, replace: (_4 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineLinearSpecularReflection) !== null && _4 !== void 0 ? _4 : "LINEARSPECULARREFLECTION" },
948
966
  { search: /defined\(TANGENT\)/g, replace: vTBNAvailable ? "defined(TANGENT)" : "defined(IGNORE)" },
949
967
  ],
950
968
  });
951
969
  // _________________________ Specular Environment Reflectance __________________________
952
970
  state.compilationString += state._emitCodeFromInclude("pbrBlockReflectance", comments, {
953
971
  replaceStrings: [
954
- { search: /REFLECTIONMAP_SKYBOX/g, replace: (_4 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineSkyboxName) !== null && _4 !== void 0 ? _4 : "REFLECTIONMAP_SKYBOX" },
955
- { search: /REFLECTIONMAP_3D/g, replace: (_5 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._define3DName) !== null && _5 !== void 0 ? _5 : "REFLECTIONMAP_3D" },
972
+ { search: /REFLECTIONMAP_SKYBOX/g, replace: (_5 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineSkyboxName) !== null && _5 !== void 0 ? _5 : "REFLECTIONMAP_SKYBOX" },
973
+ { search: /REFLECTIONMAP_3D/g, replace: (_6 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._define3DName) !== null && _6 !== void 0 ? _6 : "REFLECTIONMAP_3D" },
956
974
  ],
957
975
  });
958
976
  // ___________________________________ SubSurface ______________________________________
959
- var subsurfaceBlock = this.subsurface.isConnected ? (_6 = this.subsurface.connectedPoint) === null || _6 === void 0 ? void 0 : _6.ownerBlock : null;
977
+ var subsurfaceBlock = this.subsurface.isConnected ? (_7 = this.subsurface.connectedPoint) === null || _7 === void 0 ? void 0 : _7.ownerBlock : null;
960
978
  var refractionBlock = this.subsurface.isConnected
961
- ? (_8 = ((_7 = this.subsurface.connectedPoint) === null || _7 === void 0 ? void 0 : _7.ownerBlock).refraction.connectedPoint) === null || _8 === void 0 ? void 0 : _8.ownerBlock
979
+ ? (_9 = ((_8 = this.subsurface.connectedPoint) === null || _8 === void 0 ? void 0 : _8.ownerBlock).refraction.connectedPoint) === null || _9 === void 0 ? void 0 : _9.ownerBlock
962
980
  : null;
963
981
  if (refractionBlock) {
964
982
  refractionBlock.viewConnectionPoint = this.view;
@@ -967,13 +985,13 @@ var PBRMetallicRoughnessBlock = /** @class */ (function (_super) {
967
985
  state.compilationString += SubSurfaceBlock.GetCode(state, subsurfaceBlock, reflectionBlock, worldPosVarName);
968
986
  state._emitFunctionFromInclude("pbrBlockSubSurface", comments, {
969
987
  replaceStrings: [
970
- { search: /REFLECTIONMAP_3D/g, replace: (_9 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._define3DName) !== null && _9 !== void 0 ? _9 : "REFLECTIONMAP_3D" },
971
- { search: /REFLECTIONMAP_OPPOSITEZ/g, replace: (_10 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineOppositeZ) !== null && _10 !== void 0 ? _10 : "REFLECTIONMAP_OPPOSITEZ" },
972
- { search: /REFLECTIONMAP_PROJECTION/g, replace: (_11 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineProjectionName) !== null && _11 !== void 0 ? _11 : "REFLECTIONMAP_PROJECTION" },
973
- { search: /SS_REFRACTIONMAP_3D/g, replace: (_12 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._define3DName) !== null && _12 !== void 0 ? _12 : "SS_REFRACTIONMAP_3D" },
974
- { search: /SS_LODINREFRACTIONALPHA/g, replace: (_13 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._defineLODRefractionAlpha) !== null && _13 !== void 0 ? _13 : "SS_LODINREFRACTIONALPHA" },
975
- { search: /SS_LINEARSPECULARREFRACTION/g, replace: (_14 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._defineLinearSpecularRefraction) !== null && _14 !== void 0 ? _14 : "SS_LINEARSPECULARREFRACTION" },
976
- { search: /SS_REFRACTIONMAP_OPPOSITEZ/g, replace: (_15 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._defineOppositeZ) !== null && _15 !== void 0 ? _15 : "SS_REFRACTIONMAP_OPPOSITEZ" },
988
+ { search: /REFLECTIONMAP_3D/g, replace: (_10 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._define3DName) !== null && _10 !== void 0 ? _10 : "REFLECTIONMAP_3D" },
989
+ { search: /REFLECTIONMAP_OPPOSITEZ/g, replace: (_11 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineOppositeZ) !== null && _11 !== void 0 ? _11 : "REFLECTIONMAP_OPPOSITEZ" },
990
+ { search: /REFLECTIONMAP_PROJECTION/g, replace: (_12 = reflectionBlock === null || reflectionBlock === void 0 ? void 0 : reflectionBlock._defineProjectionName) !== null && _12 !== void 0 ? _12 : "REFLECTIONMAP_PROJECTION" },
991
+ { search: /SS_REFRACTIONMAP_3D/g, replace: (_13 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._define3DName) !== null && _13 !== void 0 ? _13 : "SS_REFRACTIONMAP_3D" },
992
+ { search: /SS_LODINREFRACTIONALPHA/g, replace: (_14 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._defineLODRefractionAlpha) !== null && _14 !== void 0 ? _14 : "SS_LODINREFRACTIONALPHA" },
993
+ { search: /SS_LINEARSPECULARREFRACTION/g, replace: (_15 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._defineLinearSpecularRefraction) !== null && _15 !== void 0 ? _15 : "SS_LINEARSPECULARREFRACTION" },
994
+ { search: /SS_REFRACTIONMAP_OPPOSITEZ/g, replace: (_16 = refractionBlock === null || refractionBlock === void 0 ? void 0 : refractionBlock._defineOppositeZ) !== null && _16 !== void 0 ? _16 : "SS_REFRACTIONMAP_OPPOSITEZ" },
977
995
  ],
978
996
  });
979
997
  // _____________________________ Direct Lighting Info __________________________________
@@ -1022,8 +1040,8 @@ var PBRMetallicRoughnessBlock = /** @class */ (function (_super) {
1022
1040
  ],
1023
1041
  });
1024
1042
  // _____________________________ Generate end points ________________________
1025
- for (var _i = 0, _16 = this._outputs; _i < _16.length; _i++) {
1026
- var output = _16[_i];
1043
+ for (var _i = 0, _17 = this._outputs; _i < _17.length; _i++) {
1044
+ var output = _17[_i];
1027
1045
  if (output.hasEndpoints) {
1028
1046
  var remap = mapOutputToVariable[output.name];
1029
1047
  if (remap) {