@babylonjs/core 6.34.1 → 6.34.2

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 (112) hide show
  1. package/Cameras/Inputs/followCameraMouseWheelInput.js +12 -9
  2. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  3. package/Cameras/Inputs/followCameraPointersInput.js +28 -9
  4. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  5. package/Cameras/followCameraInputsManager.js +2 -1
  6. package/Cameras/followCameraInputsManager.js.map +1 -1
  7. package/Debug/skeletonViewer.js +2 -1
  8. package/Debug/skeletonViewer.js.map +1 -1
  9. package/Engines/Processors/shaderCodeInliner.js +15 -14
  10. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  11. package/Engines/WebGPU/Extensions/engine.computeShader.js +3 -2
  12. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  13. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  14. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  15. package/Engines/WebGPU/webgpuTintWASM.js +3 -2
  16. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  17. package/Engines/engine.d.ts +2 -4
  18. package/Engines/engine.js.map +1 -1
  19. package/Engines/nativeEngine.js +4 -2
  20. package/Engines/nativeEngine.js.map +1 -1
  21. package/Engines/thinEngine.js +4 -4
  22. package/Engines/thinEngine.js.map +1 -1
  23. package/Engines/webgpuEngine.js +75 -50
  24. package/Engines/webgpuEngine.js.map +1 -1
  25. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +2 -1
  26. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
  27. package/Gizmos/lightGizmo.js +2 -1
  28. package/Gizmos/lightGizmo.js.map +1 -1
  29. package/Gizmos/rotationGizmo.js +1 -1
  30. package/Gizmos/rotationGizmo.js.map +1 -1
  31. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  32. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  33. package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
  34. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  35. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +3 -2
  36. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  37. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +2 -1
  38. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  39. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -1
  40. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  41. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -1
  42. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  43. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +3 -2
  44. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  45. package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
  46. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  47. package/Materials/Node/nodeMaterial.js +9 -8
  48. package/Materials/Node/nodeMaterial.js.map +1 -1
  49. package/Materials/Node/nodeMaterialBlock.js +2 -1
  50. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  51. package/Materials/Textures/renderTargetTexture.js +1 -2
  52. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  53. package/Materials/uniformBuffer.d.ts +1 -4
  54. package/Materials/uniformBuffer.js +2 -5
  55. package/Materials/uniformBuffer.js.map +1 -1
  56. package/Meshes/Builders/groundBuilder.d.ts +7 -1
  57. package/Meshes/Builders/groundBuilder.js +17 -8
  58. package/Meshes/Builders/groundBuilder.js.map +1 -1
  59. package/Meshes/Compression/dracoCompression.js.map +1 -1
  60. package/Meshes/Node/nodeGeometryBlock.js +2 -1
  61. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  62. package/Meshes/mesh.d.ts +2 -1
  63. package/Meshes/mesh.js +3 -2
  64. package/Meshes/mesh.js.map +1 -1
  65. package/Misc/assetsManager.js +2 -2
  66. package/Misc/assetsManager.js.map +1 -1
  67. package/Misc/dds.js +1 -1
  68. package/Misc/dds.js.map +1 -1
  69. package/Misc/fileTools.js +4 -0
  70. package/Misc/fileTools.js.map +1 -1
  71. package/Misc/logger.d.ts +3 -3
  72. package/Misc/logger.js +8 -4
  73. package/Misc/logger.js.map +1 -1
  74. package/Misc/sceneSerializer.js +2 -1
  75. package/Misc/sceneSerializer.js.map +1 -1
  76. package/Misc/tools.d.ts +2 -7
  77. package/Misc/tools.js.map +1 -1
  78. package/Navigation/Plugins/recastJSPlugin.js +3 -3
  79. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  80. package/Physics/v2/Plugins/havokPlugin.js +1 -1
  81. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  82. package/Physics/v2/physicsBody.d.ts +5 -0
  83. package/Physics/v2/physicsBody.js +7 -0
  84. package/Physics/v2/physicsBody.js.map +1 -1
  85. package/Physics/v2/ragdoll.d.ts +5 -10
  86. package/Physics/v2/ragdoll.js +29 -36
  87. package/Physics/v2/ragdoll.js.map +1 -1
  88. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
  89. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  90. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +3 -2
  91. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  92. package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -1
  93. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  94. package/PostProcesses/screenSpaceReflectionPostProcess.js +3 -2
  95. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  96. package/Rendering/GaussianSplatting/gaussianSplatting.js.map +1 -1
  97. package/XR/features/WebXRControllerPhysics.js +2 -2
  98. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  99. package/XR/features/WebXRMeshDetector.js +2 -1
  100. package/XR/features/WebXRMeshDetector.js.map +1 -1
  101. package/XR/features/WebXRWalkingLocomotion.js +1 -1
  102. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  103. package/XR/motionController/webXRMotionControllerManager.js +1 -1
  104. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  105. package/XR/webXRExperienceHelper.js +2 -2
  106. package/XR/webXRExperienceHelper.js.map +1 -1
  107. package/assetContainer.js +2 -2
  108. package/assetContainer.js.map +1 -1
  109. package/package.json +1 -1
  110. package/scene.d.ts +2 -4
  111. package/scene.js +2 -1
  112. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"reflectionTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/reflectionTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { ReflectionTextureBaseBlock } from \"./reflectionTextureBaseBlock\";\r\nimport type { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\n\r\n/**\r\n * Block used to read a reflection texture from a sampler\r\n */\r\nexport class ReflectionTextureBlock extends ReflectionTextureBaseBlock {\r\n protected _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n console.error(\"The position input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n if (this.worldPosition.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n console.error(\"The worldPosition input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n this._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n protected _setTarget(): void {\r\n super._setTarget();\r\n this.getInputByName(\"position\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n this.getInputByName(\"worldPosition\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n }\r\n\r\n /**\r\n * Create a new ReflectionTextureBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Fragment); // Flagging as fragment as the normal can be changed by fragment code\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerInput(\"cameraPosition\", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"r\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"g\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"b\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ReflectionTextureBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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[1];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public get cameraPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the rgb output component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgba output component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the r output component\r\n */\r\n public get r(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the g output component\r\n */\r\n public get g(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the b output component\r\n */\r\n public get b(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the a output component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n super.autoConfigure(material);\r\n\r\n if (!this.cameraPosition.isConnected) {\r\n let cameraPositionInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.CameraPosition && additionalFilteringInfo(b));\r\n\r\n if (!cameraPositionInput) {\r\n cameraPositionInput = new InputBlock(\"cameraPosition\");\r\n cameraPositionInput.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);\r\n }\r\n cameraPositionInput.output.connectTo(this.cameraPosition);\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.texture) {\r\n state.compilationString += this.writeOutputs(state, \"vec4(0.)\");\r\n return this;\r\n }\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n state.compilationString += this.handleVertexSide(state);\r\n return this;\r\n }\r\n\r\n if (this.generateOnlyFragmentCode) {\r\n state.compilationString += this.handleVertexSide(state);\r\n }\r\n\r\n this.handleFragmentSideInits(state);\r\n\r\n const normalWUnit = state._getFreeVariableName(\"normalWUnit\");\r\n\r\n state.compilationString += `vec4 ${normalWUnit} = normalize(${this.worldNormal.associatedVariableName});\\n`;\r\n\r\n state.compilationString += this.handleFragmentSideCodeReflectionCoords(normalWUnit);\r\n\r\n state.compilationString += this.handleFragmentSideCodeReflectionColor(undefined, \"\");\r\n\r\n state.compilationString += this.writeOutputs(state, this._reflectionColorName);\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ReflectionTextureBlock\", ReflectionTextureBlock);\r\n"]}
1
+ {"version":3,"file":"reflectionTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/reflectionTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterial } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { ReflectionTextureBaseBlock } from \"./reflectionTextureBaseBlock\";\r\nimport type { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Block used to read a reflection texture from a sampler\r\n */\r\nexport class ReflectionTextureBlock extends ReflectionTextureBaseBlock {\r\n protected _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n Logger.Error(\"The position input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n if (this.worldPosition.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n Logger.Error(\"The worldPosition input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n this._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n protected _setTarget(): void {\r\n super._setTarget();\r\n this.getInputByName(\"position\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n this.getInputByName(\"worldPosition\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n }\r\n\r\n /**\r\n * Create a new ReflectionTextureBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Fragment); // Flagging as fragment as the normal can be changed by fragment code\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerInput(\"cameraPosition\", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"r\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"g\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"b\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ReflectionTextureBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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[1];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public get cameraPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the rgb output component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgba output component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the r output component\r\n */\r\n public get r(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the g output component\r\n */\r\n public get g(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the b output component\r\n */\r\n public get b(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the a output component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n super.autoConfigure(material);\r\n\r\n if (!this.cameraPosition.isConnected) {\r\n let cameraPositionInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.CameraPosition && additionalFilteringInfo(b));\r\n\r\n if (!cameraPositionInput) {\r\n cameraPositionInput = new InputBlock(\"cameraPosition\");\r\n cameraPositionInput.setAsSystemValue(NodeMaterialSystemValues.CameraPosition);\r\n }\r\n cameraPositionInput.output.connectTo(this.cameraPosition);\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.texture) {\r\n state.compilationString += this.writeOutputs(state, \"vec4(0.)\");\r\n return this;\r\n }\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n state.compilationString += this.handleVertexSide(state);\r\n return this;\r\n }\r\n\r\n if (this.generateOnlyFragmentCode) {\r\n state.compilationString += this.handleVertexSide(state);\r\n }\r\n\r\n this.handleFragmentSideInits(state);\r\n\r\n const normalWUnit = state._getFreeVariableName(\"normalWUnit\");\r\n\r\n state.compilationString += `vec4 ${normalWUnit} = normalize(${this.worldNormal.associatedVariableName});\\n`;\r\n\r\n state.compilationString += this.handleFragmentSideCodeReflectionCoords(normalWUnit);\r\n\r\n state.compilationString += this.handleFragmentSideCodeReflectionColor(undefined, \"\");\r\n\r\n state.compilationString += this.writeOutputs(state, this._reflectionColorName);\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ReflectionTextureBlock\", ReflectionTextureBlock);\r\n"]}
@@ -2,6 +2,7 @@ import { NodeMaterialBlock } from "../../nodeMaterialBlock.js";
2
2
  import { NodeMaterialBlockConnectionPointTypes } from "../../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
3
  import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.js";
4
4
  import { RegisterClass } from "../../../../Misc/typeStore.js";
5
+ import { Logger } from "../../../../Misc/logger.js";
5
6
  /**
6
7
  * Block used to write the fragment depth
7
8
  */
@@ -58,7 +59,7 @@ export class FragDepthBlock extends NodeMaterialBlock {
58
59
  `;
59
60
  }
60
61
  else {
61
- console.warn("FragDepthBlock: either the depth input or both the worldPos and viewProjection inputs must be connected!");
62
+ Logger.Warn("FragDepthBlock: either the depth input or both the worldPos and viewProjection inputs must be connected!");
62
63
  }
63
64
  return this;
64
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fragDepthBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/fragDepthBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IACjD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAErD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,qCAAqC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7F,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAES,WAAW,CAAC,KAA6B;QAC/C,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxB,KAAK,CAAC,iBAAiB,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC;SACvF;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACrE,KAAK,CAAC,iBAAiB,IAAI;2BACZ,IAAI,CAAC,cAAc,CAAC,sBAAsB,MAAM,IAAI,CAAC,QAAQ,CAAC,sBAAsB;;;;;;;aAOlG,CAAC;SACL;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAC;SAC5H;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n/**\r\n * Block used to write the fragment depth\r\n */\r\nexport class FragDepthBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new FragDepthBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"depth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPos\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"viewProjection\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\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 \"FragDepthBlock\";\r\n }\r\n\r\n /**\r\n * Gets the depth input component\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the worldPos input component\r\n */\r\n public get worldPos(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the viewProjection input component\r\n */\r\n public get viewProjection(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (this.depth.isConnected) {\r\n state.compilationString += `gl_FragDepth = ${this.depth.associatedVariableName};\\n`;\r\n } else if (this.worldPos.isConnected && this.viewProjection.isConnected) {\r\n state.compilationString += `\r\n vec4 p = ${this.viewProjection.associatedVariableName} * ${this.worldPos.associatedVariableName};\r\n float v = p.z / p.w;\r\n #ifndef IS_NDC_HALF_ZRANGE\r\n v = v * 0.5 + 0.5;\r\n #endif\r\n gl_FragDepth = v;\r\n \r\n `;\r\n } else {\r\n console.warn(\"FragDepthBlock: either the depth input or both the worldPos and viewProjection inputs must be connected!\");\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.FragDepthBlock\", FragDepthBlock);\r\n"]}
1
+ {"version":3,"file":"fragDepthBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/fragDepthBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,mCAAyB;AAC1C;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IACjD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAErD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,qCAAqC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7F,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAES,WAAW,CAAC,KAA6B;QAC/C,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxB,KAAK,CAAC,iBAAiB,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC;SACvF;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;YACrE,KAAK,CAAC,iBAAiB,IAAI;2BACZ,IAAI,CAAC,cAAc,CAAC,sBAAsB,MAAM,IAAI,CAAC,QAAQ,CAAC,sBAAsB;;;;;;;aAOlG,CAAC;SACL;aAAM;YACH,MAAM,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAC;SAC3H;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n/**\r\n * Block used to write the fragment depth\r\n */\r\nexport class FragDepthBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new FragDepthBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"depth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPos\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"viewProjection\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\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 \"FragDepthBlock\";\r\n }\r\n\r\n /**\r\n * Gets the depth input component\r\n */\r\n public get depth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the worldPos input component\r\n */\r\n public get worldPos(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the viewProjection input component\r\n */\r\n public get viewProjection(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (this.depth.isConnected) {\r\n state.compilationString += `gl_FragDepth = ${this.depth.associatedVariableName};\\n`;\r\n } else if (this.worldPos.isConnected && this.viewProjection.isConnected) {\r\n state.compilationString += `\r\n vec4 p = ${this.viewProjection.associatedVariableName} * ${this.worldPos.associatedVariableName};\r\n float v = p.z / p.w;\r\n #ifndef IS_NDC_HALF_ZRANGE\r\n v = v * 0.5 + 0.5;\r\n #endif\r\n gl_FragDepth = v;\r\n \r\n `;\r\n } else {\r\n Logger.Warn(\"FragDepthBlock: either the depth input or both the worldPos and viewProjection inputs must be connected!\");\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.FragDepthBlock\", FragDepthBlock);\r\n"]}
@@ -4,6 +4,7 @@ import { NodeMaterialBlockConnectionPointTypes } from "../../Enums/nodeMaterialB
4
4
  import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.js";
5
5
  import { RegisterClass } from "../../../../Misc/typeStore.js";
6
6
  import { editableInPropertyPage, PropertyTypeForEdition } from "../../../../Decorators/nodeDecorator.js";
7
+ import { Logger } from "../../../../Misc/logger.js";
7
8
  /**
8
9
  * Block used to convert a height vector to a normal
9
10
  */
@@ -82,7 +83,7 @@ export class HeightToNormalBlock extends NodeMaterialBlock {
82
83
  super._buildBlock(state);
83
84
  const output = this._outputs[0];
84
85
  if (!this.generateInWorldSpace && !this.worldTangent.isConnected) {
85
- console.error(`You must connect the 'worldTangent' input of the ${this.name} block!`);
86
+ Logger.Error(`You must connect the 'worldTangent' input of the ${this.name} block!`);
86
87
  }
87
88
  const startCode = this.generateInWorldSpace
88
89
  ? ""
@@ -1 +1 @@
1
- {"version":3,"file":"heightToNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/heightToNormalBlock.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 { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\n\r\n/**\r\n * Block used to convert a height vector to a normal\r\n */\r\nexport class HeightToNormalBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new HeightToNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[3].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the output should be generated in world or tangent space.\r\n * Note that in tangent space the result is also scaled by 0.5 and offsetted by 0.5 so that it can directly be used as a PerturbNormal.normalMapColor input\r\n */\r\n @editableInPropertyPage(\"Generate in world space instead of tangent space\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public generateInWorldSpace: boolean = false;\r\n\r\n /**\r\n * Defines that the worldNormal input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldNormal input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationNormal: boolean = true;\r\n\r\n /**\r\n * Defines that the worldTangent input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldTangent input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationTangent: boolean = true;\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 \"HeightToNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the 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 xyz component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n\r\n if (!this.generateInWorldSpace && !this.worldTangent.isConnected) {\r\n console.error(`You must connect the 'worldTangent' input of the ${this.name} block!`);\r\n }\r\n\r\n const startCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n vec3 biTangent = cross(normal, tangent);\r\n mat3 TBN = mat3(tangent, biTangent, normal);\r\n `;\r\n\r\n const endCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n result = TBN * result;\r\n result = result * vec3(0.5) + vec3(0.5);\r\n `;\r\n\r\n const heightToNormal = `\r\n vec4 heightToNormal(in float height, in vec3 position, in vec3 tangent, in vec3 normal) {\r\n ${startCode}\r\n ${this.automaticNormalizationTangent ? \"tangent = normalize(tangent);\" : \"\"}\r\n ${this.automaticNormalizationNormal ? \"normal = normalize(normal);\" : \"\"}\r\n vec3 worlddX = dFdx(position);\r\n vec3 worlddY = dFdy(position);\r\n vec3 crossX = cross(normal, worlddX);\r\n vec3 crossY = cross(normal, worlddY);\r\n float d = abs(dot(crossY, worlddX));\r\n vec3 inToNormal = vec3(((((height + dFdx(height)) - height) * crossY) + (((height + dFdy(height)) - height) * crossX)) * sign(d));\r\n inToNormal.y *= -1.0;\r\n vec3 result = normalize((d * normal) - inToNormal);\r\n ${endCode}\r\n return vec4(result, 0.);\r\n }`;\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n state._emitFunction(\"heightToNormal\", heightToNormal, \"// heightToNormal\");\r\n state.compilationString +=\r\n this._declareOutput(output, state) +\r\n ` = heightToNormal(${this.input.associatedVariableName}, ${this.worldPosition.associatedVariableName}, ${\r\n this.worldTangent.isConnected ? this.worldTangent.associatedVariableName : \"vec3(0.)\"\r\n }.xyz, ${this.worldNormal.associatedVariableName});\\n`;\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += this._declareOutput(this.xyz, state) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n codeString += `${this._codeVariableName}.generateInWorldSpace = ${this.generateInWorldSpace};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationNormal = ${this.automaticNormalizationNormal};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationTangent = ${this.automaticNormalizationTangent};\\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.generateInWorldSpace = this.generateInWorldSpace;\r\n serializationObject.automaticNormalizationNormal = this.automaticNormalizationNormal;\r\n serializationObject.automaticNormalizationTangent = this.automaticNormalizationTangent;\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.generateInWorldSpace = serializationObject.generateInWorldSpace;\r\n this.automaticNormalizationNormal = serializationObject.automaticNormalizationNormal;\r\n this.automaticNormalizationTangent = serializationObject.automaticNormalizationTangent;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HeightToNormalBlock\", HeightToNormalBlock);\r\n"]}
1
+ {"version":3,"file":"heightToNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/heightToNormalBlock.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 { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Block used to convert a height vector to a normal\r\n */\r\nexport class HeightToNormalBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new HeightToNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[3].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the output should be generated in world or tangent space.\r\n * Note that in tangent space the result is also scaled by 0.5 and offsetted by 0.5 so that it can directly be used as a PerturbNormal.normalMapColor input\r\n */\r\n @editableInPropertyPage(\"Generate in world space instead of tangent space\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public generateInWorldSpace: boolean = false;\r\n\r\n /**\r\n * Defines that the worldNormal input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldNormal input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationNormal: boolean = true;\r\n\r\n /**\r\n * Defines that the worldTangent input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldTangent input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationTangent: boolean = true;\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 \"HeightToNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the 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 xyz component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n\r\n if (!this.generateInWorldSpace && !this.worldTangent.isConnected) {\r\n Logger.Error(`You must connect the 'worldTangent' input of the ${this.name} block!`);\r\n }\r\n\r\n const startCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n vec3 biTangent = cross(normal, tangent);\r\n mat3 TBN = mat3(tangent, biTangent, normal);\r\n `;\r\n\r\n const endCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n result = TBN * result;\r\n result = result * vec3(0.5) + vec3(0.5);\r\n `;\r\n\r\n const heightToNormal = `\r\n vec4 heightToNormal(in float height, in vec3 position, in vec3 tangent, in vec3 normal) {\r\n ${startCode}\r\n ${this.automaticNormalizationTangent ? \"tangent = normalize(tangent);\" : \"\"}\r\n ${this.automaticNormalizationNormal ? \"normal = normalize(normal);\" : \"\"}\r\n vec3 worlddX = dFdx(position);\r\n vec3 worlddY = dFdy(position);\r\n vec3 crossX = cross(normal, worlddX);\r\n vec3 crossY = cross(normal, worlddY);\r\n float d = abs(dot(crossY, worlddX));\r\n vec3 inToNormal = vec3(((((height + dFdx(height)) - height) * crossY) + (((height + dFdy(height)) - height) * crossX)) * sign(d));\r\n inToNormal.y *= -1.0;\r\n vec3 result = normalize((d * normal) - inToNormal);\r\n ${endCode}\r\n return vec4(result, 0.);\r\n }`;\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n state._emitFunction(\"heightToNormal\", heightToNormal, \"// heightToNormal\");\r\n state.compilationString +=\r\n this._declareOutput(output, state) +\r\n ` = heightToNormal(${this.input.associatedVariableName}, ${this.worldPosition.associatedVariableName}, ${\r\n this.worldTangent.isConnected ? this.worldTangent.associatedVariableName : \"vec3(0.)\"\r\n }.xyz, ${this.worldNormal.associatedVariableName});\\n`;\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += this._declareOutput(this.xyz, state) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n codeString += `${this._codeVariableName}.generateInWorldSpace = ${this.generateInWorldSpace};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationNormal = ${this.automaticNormalizationNormal};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationTangent = ${this.automaticNormalizationTangent};\\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.generateInWorldSpace = this.generateInWorldSpace;\r\n serializationObject.automaticNormalizationNormal = this.automaticNormalizationNormal;\r\n serializationObject.automaticNormalizationTangent = this.automaticNormalizationTangent;\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.generateInWorldSpace = serializationObject.generateInWorldSpace;\r\n this.automaticNormalizationNormal = serializationObject.automaticNormalizationNormal;\r\n this.automaticNormalizationTangent = serializationObject.automaticNormalizationTangent;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HeightToNormalBlock\", HeightToNormalBlock);\r\n"]}
@@ -5,6 +5,7 @@ import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.j
5
5
  import { RegisterClass } from "../../../../Misc/typeStore.js";
6
6
  import { NodeMaterialConnectionPointCustomObject } from "../../nodeMaterialConnectionPointCustomObject.js";
7
7
  import { TBNBlock } from "../Fragment/TBNBlock.js";
8
+ import { Logger } from "../../../../Misc/logger.js";
8
9
  /**
9
10
  * Block used to implement the anisotropy module of the PBR material
10
11
  */
@@ -94,7 +95,7 @@ export class AnisotropyBlock extends NodeMaterialBlock {
94
95
  // we must set the uv input as optional because we may not end up in this method (in case a PerturbNormal block is linked to the PBR material)
95
96
  // in which case uv is not required. But if we do come here, we do need the uv, so we have to raise an error but not with throw, else
96
97
  // it will stop the building of the node material and will lead to errors in the editor!
97
- console.error("You must connect the 'uv' input of the Anisotropy block!");
98
+ Logger.Error("You must connect the 'uv' input of the Anisotropy block!");
98
99
  }
99
100
  state._emitExtension("derivatives", "#extension GL_OES_standard_derivatives : enable");
100
101
  const tangentReplaceString = { search: /defined\(TANGENT\)/g, replace: worldTangent.isConnected ? "defined(TANGENT)" : "defined(IGNORE)" };
@@ -1 +1 @@
1
- {"version":3,"file":"anisotropyBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/anisotropyBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { 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 type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"../Fragment/TBNBlock\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\n\r\n/**\r\n * Block used to implement the anisotropy module of the PBR material\r\n */\r\nexport class AnisotropyBlock extends NodeMaterialBlock {\r\n private _tangentCorrectionFactorName = \"\";\r\n\r\n /**\r\n * The two properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Create a new AnisotropyBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"direction\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, true); // need this property and the next one in case there's no PerturbNormal block connected to the main PBR block\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"anisotropy\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"anisotropy\", this, NodeMaterialConnectionPointDirection.Output, AnisotropyBlock, \"AnisotropyBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"anisotropicOut\");\r\n state._excludeVariableName(\"TBN\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"AnisotropyBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the direction input component\r\n */\r\n public get direction(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the worldTangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the anisotropy object output component\r\n */\r\n public get anisotropy(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _generateTBNSpace(state: NodeMaterialBuildState) {\r\n let code = \"\";\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPositionConnectionPoint;\r\n const worldNormal = this.worldNormalConnectionPoint;\r\n const worldTangent = this.worldTangent;\r\n\r\n if (!uv.isConnected) {\r\n // we must set the uv input as optional because we may not end up in this method (in case a PerturbNormal block is linked to the PBR material)\r\n // in which case uv is not required. But if we do come here, we do need the uv, so we have to raise an error but not with throw, else\r\n // it will stop the building of the node material and will lead to errors in the editor!\r\n console.error(\"You must connect the 'uv' input of the Anisotropy block!\");\r\n }\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n mat3 vTBN = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n code += `vec3 tbnNormal = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n code += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n code += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\n`;\r\n code += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n code += `\r\n #if defined(${worldTangent.isConnected ? \"TANGENT\" : \"IGNORE\"}) && defined(NORMAL)\r\n mat3 TBN = vTBN;\r\n #else\r\n mat3 TBN = cotangent_frame(${worldNormal.associatedVariableName + \".xyz\"}, ${\"v_\" + worldPosition.associatedVariableName + \".xyz\"}, ${\r\n uv.isConnected ? uv.associatedVariableName : \"vec2(0.)\"\r\n }, vec2(1., 1.));\r\n #endif\\n`;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString],\r\n });\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param generateTBNSpace if true, the code needed to create the TBN coordinate space is generated\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, generateTBNSpace = false): string {\r\n let code = \"\";\r\n\r\n if (generateTBNSpace) {\r\n code += this._generateTBNSpace(state);\r\n }\r\n\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.0\";\r\n const direction = this.direction.isConnected ? this.direction.associatedVariableName : \"vec2(1., 0.)\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n\r\n code += `anisotropicOutParams anisotropicOut;\r\n anisotropicBlock(\r\n vec3(${direction}, ${intensity}),\r\n ${roughness},\r\n #ifdef ANISOTROPIC_TEXTURE\r\n vec3(0.),\r\n #endif\r\n TBN,\r\n normalW,\r\n viewDirectionW,\r\n anisotropicOut\r\n );\\n`;\r\n\r\n return code;\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"ANISOTROPIC\", true);\r\n defines.setValue(\"ANISOTROPIC_TEXTURE\", false, true);\r\n defines.setValue(\"ANISOTROPIC_LEGACY\", !this.roughness.isConnected);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, \"float\");\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.AnisotropyBlock\", AnisotropyBlock);\r\n"]}
1
+ {"version":3,"file":"anisotropyBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/anisotropyBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { 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 type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"../Fragment/TBNBlock\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Block used to implement the anisotropy module of the PBR material\r\n */\r\nexport class AnisotropyBlock extends NodeMaterialBlock {\r\n private _tangentCorrectionFactorName = \"\";\r\n\r\n /**\r\n * The two properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Create a new AnisotropyBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"direction\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, true); // need this property and the next one in case there's no PerturbNormal block connected to the main PBR block\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"anisotropy\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"anisotropy\", this, NodeMaterialConnectionPointDirection.Output, AnisotropyBlock, \"AnisotropyBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"anisotropicOut\");\r\n state._excludeVariableName(\"TBN\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"AnisotropyBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the direction input component\r\n */\r\n public get direction(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the worldTangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the anisotropy object output component\r\n */\r\n public get anisotropy(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _generateTBNSpace(state: NodeMaterialBuildState) {\r\n let code = \"\";\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPositionConnectionPoint;\r\n const worldNormal = this.worldNormalConnectionPoint;\r\n const worldTangent = this.worldTangent;\r\n\r\n if (!uv.isConnected) {\r\n // we must set the uv input as optional because we may not end up in this method (in case a PerturbNormal block is linked to the PBR material)\r\n // in which case uv is not required. But if we do come here, we do need the uv, so we have to raise an error but not with throw, else\r\n // it will stop the building of the node material and will lead to errors in the editor!\r\n Logger.Error(\"You must connect the 'uv' input of the Anisotropy block!\");\r\n }\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n mat3 vTBN = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n code += `vec3 tbnNormal = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n code += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n code += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\n`;\r\n code += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n code += `\r\n #if defined(${worldTangent.isConnected ? \"TANGENT\" : \"IGNORE\"}) && defined(NORMAL)\r\n mat3 TBN = vTBN;\r\n #else\r\n mat3 TBN = cotangent_frame(${worldNormal.associatedVariableName + \".xyz\"}, ${\"v_\" + worldPosition.associatedVariableName + \".xyz\"}, ${\r\n uv.isConnected ? uv.associatedVariableName : \"vec2(0.)\"\r\n }, vec2(1., 1.));\r\n #endif\\n`;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString],\r\n });\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param generateTBNSpace if true, the code needed to create the TBN coordinate space is generated\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, generateTBNSpace = false): string {\r\n let code = \"\";\r\n\r\n if (generateTBNSpace) {\r\n code += this._generateTBNSpace(state);\r\n }\r\n\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.0\";\r\n const direction = this.direction.isConnected ? this.direction.associatedVariableName : \"vec2(1., 0.)\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n\r\n code += `anisotropicOutParams anisotropicOut;\r\n anisotropicBlock(\r\n vec3(${direction}, ${intensity}),\r\n ${roughness},\r\n #ifdef ANISOTROPIC_TEXTURE\r\n vec3(0.),\r\n #endif\r\n TBN,\r\n normalW,\r\n viewDirectionW,\r\n anisotropicOut\r\n );\\n`;\r\n\r\n return code;\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"ANISOTROPIC\", true);\r\n defines.setValue(\"ANISOTROPIC_TEXTURE\", false, true);\r\n defines.setValue(\"ANISOTROPIC_LEGACY\", !this.roughness.isConnected);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, \"float\");\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.AnisotropyBlock\", AnisotropyBlock);\r\n"]}
@@ -20,6 +20,7 @@ import { IridescenceBlock } from "./iridescenceBlock.js";
20
20
  import { SubSurfaceBlock } from "./subSurfaceBlock.js";
21
21
 
22
22
  import { Color3, TmpColors } from "../../../../Maths/math.color.js";
23
+ import { Logger } from "../../../../Misc/logger.js";
23
24
  const mapOutputToVariable = {
24
25
  ambientClr: ["finalAmbient", ""],
25
26
  diffuseDir: ["finalDiffuse", ""],
@@ -43,7 +44,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
43
44
  const that = block;
44
45
  if (that.worldPosition.isConnected) {
45
46
  that.generateOnlyFragmentCode = !that.generateOnlyFragmentCode;
46
- console.error("The worldPosition input must not be connected to be able to switch!");
47
+ Logger.Error("The worldPosition input must not be connected to be able to switch!");
47
48
  return false;
48
49
  }
49
50
  that._setTarget();
@@ -1025,7 +1026,7 @@ export class PBRMetallicRoughnessBlock extends NodeMaterialBlock {
1025
1026
  }
1026
1027
  }
1027
1028
  else {
1028
- console.error(`There's no remapping for the ${output.name} end point! No code generated`);
1029
+ Logger.Error(`There's no remapping for the ${output.name} end point! No code generated`);
1029
1030
  }
1030
1031
  }
1031
1032
  }