@babylonjs/core 7.32.4 → 7.33.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 (126) hide show
  1. package/Decorators/nodeDecorator.d.ts +4 -0
  2. package/Decorators/nodeDecorator.js.map +1 -1
  3. package/Engines/abstractEngine.js +2 -2
  4. package/Engines/abstractEngine.js.map +1 -1
  5. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  6. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -0
  7. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  8. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +16 -0
  9. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +40 -7
  10. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  11. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +4 -4
  12. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  13. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +1 -1
  14. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  15. package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -2
  16. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  17. package/Materials/Node/Blocks/PBR/refractionBlock.js +3 -3
  18. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  19. package/Materials/Node/Blocks/PBR/sheenBlock.js +2 -2
  20. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  21. package/Materials/Node/Blocks/clampBlock.js +2 -2
  22. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  23. package/Materials/Node/Blocks/cloudBlock.js +1 -1
  24. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  25. package/Materials/Node/Blocks/conditionalBlock.js +19 -0
  26. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  27. package/Materials/Node/Blocks/curveBlock.js +37 -0
  28. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  29. package/Materials/Node/Blocks/loopBlock.js +1 -1
  30. package/Materials/Node/Blocks/loopBlock.js.map +1 -1
  31. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +1 -0
  32. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  33. package/Materials/Node/Blocks/transformBlock.d.ts +6 -0
  34. package/Materials/Node/Blocks/transformBlock.js +16 -1
  35. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  36. package/Materials/Node/Blocks/triPlanarBlock.js +1 -1
  37. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  38. package/Materials/Node/Blocks/trigonometryBlock.js +29 -0
  39. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  40. package/Materials/Node/Blocks/waveBlock.js +13 -0
  41. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  42. package/Materials/Node/Blocks/worleyNoise3DBlock.js +1 -1
  43. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  44. package/Materials/Node/nodeMaterial.js.map +1 -1
  45. package/Materials/effectRenderer.d.ts +1 -1
  46. package/Materials/effectRenderer.js +2 -2
  47. package/Materials/effectRenderer.js.map +1 -1
  48. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +1 -1
  49. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  50. package/Meshes/Node/Blocks/Set/aggregatorBlock.js +1 -0
  51. package/Meshes/Node/Blocks/Set/aggregatorBlock.js.map +1 -1
  52. package/Meshes/Node/Blocks/Set/latticeBlock.js +4 -4
  53. package/Meshes/Node/Blocks/Set/latticeBlock.js.map +1 -1
  54. package/Meshes/Node/Blocks/Set/setColorsBlock.js +1 -1
  55. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  56. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js +1 -1
  57. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
  58. package/Meshes/Node/Blocks/Set/setNormalsBlock.js +1 -1
  59. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  60. package/Meshes/Node/Blocks/Set/setPositionsBlock.js +1 -1
  61. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
  62. package/Meshes/Node/Blocks/Set/setTangentsBlock.js +1 -1
  63. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
  64. package/Meshes/Node/Blocks/Set/setUVsBlock.js +2 -1
  65. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  66. package/Meshes/Node/Blocks/Sources/boxBlock.js +1 -1
  67. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  68. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +1 -1
  69. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  70. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +1 -1
  71. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  72. package/Meshes/Node/Blocks/Sources/discBlock.js +1 -1
  73. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  74. package/Meshes/Node/Blocks/Sources/gridBlock.js +1 -1
  75. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  76. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +1 -1
  77. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  78. package/Meshes/Node/Blocks/Sources/meshBlock.js +1 -1
  79. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  80. package/Meshes/Node/Blocks/Sources/planeBlock.js +1 -1
  81. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  82. package/Meshes/Node/Blocks/Sources/sphereBlock.js +1 -1
  83. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  84. package/Meshes/Node/Blocks/Sources/torusBlock.js +1 -1
  85. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  86. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +1 -1
  87. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  88. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js +1 -1
  89. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
  90. package/Meshes/Node/Blocks/booleanGeometryBlock.d.ts +5 -0
  91. package/Meshes/Node/Blocks/booleanGeometryBlock.js +43 -13
  92. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  93. package/Meshes/Node/Blocks/cleanGeometryBlock.js +1 -1
  94. package/Meshes/Node/Blocks/cleanGeometryBlock.js.map +1 -1
  95. package/Meshes/Node/Blocks/conditionBlock.js +1 -0
  96. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  97. package/Meshes/Node/Blocks/geometryClampBlock.js +2 -2
  98. package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
  99. package/Meshes/Node/Blocks/geometryCollectionBlock.js +1 -1
  100. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  101. package/Meshes/Node/Blocks/geometryCurveBlock.js +1 -0
  102. package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
  103. package/Meshes/Node/Blocks/geometryOptimizeBlock.js +3 -3
  104. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
  105. package/Meshes/Node/Blocks/geometryTransformBlock.js +1 -1
  106. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  107. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +1 -0
  108. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  109. package/Meshes/Node/Blocks/mappingBlock.js +1 -0
  110. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  111. package/Meshes/Node/Blocks/mathBlock.js +1 -0
  112. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  113. package/Meshes/Node/Blocks/mergeGeometryBlock.js +1 -1
  114. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  115. package/Meshes/Node/Blocks/randomBlock.js +1 -0
  116. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  117. package/Meshes/Node/nodeGeometry.js.map +1 -1
  118. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +1 -1
  119. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  120. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +12 -12
  121. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  122. package/Shaders/iblShadowAccumulation.fragment.js +2 -1
  123. package/Shaders/iblShadowAccumulation.fragment.js.map +1 -1
  124. package/ShadersWGSL/iblShadowAccumulation.fragment.js +2 -1
  125. package/ShadersWGSL/iblShadowAccumulation.fragment.js.map +1 -1
  126. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"curveBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/curveBlock.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 type { Scene } from \"../../../scene\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Types of curves supported by the Curve block\r\n */\r\nexport enum CurveBlockTypes {\r\n /** EaseInSine */\r\n EaseInSine,\r\n /** EaseOutSine */\r\n EaseOutSine,\r\n /** EaseInOutSine */\r\n EaseInOutSine,\r\n /** EaseInQuad */\r\n EaseInQuad,\r\n /** EaseOutQuad */\r\n EaseOutQuad,\r\n /** EaseInOutQuad */\r\n EaseInOutQuad,\r\n /** EaseInCubic */\r\n EaseInCubic,\r\n /** EaseOutCubic */\r\n EaseOutCubic,\r\n /** EaseInOutCubic */\r\n EaseInOutCubic,\r\n /** EaseInQuart */\r\n EaseInQuart,\r\n /** EaseOutQuart */\r\n EaseOutQuart,\r\n /** EaseInOutQuart */\r\n EaseInOutQuart,\r\n /** EaseInQuint */\r\n EaseInQuint,\r\n /** EaseOutQuint */\r\n EaseOutQuint,\r\n /** EaseInOutQuint */\r\n EaseInOutQuint,\r\n /** EaseInExpo */\r\n EaseInExpo,\r\n /** EaseOutExpo */\r\n EaseOutExpo,\r\n /** EaseInOutExpo */\r\n EaseInOutExpo,\r\n /** EaseInCirc */\r\n EaseInCirc,\r\n /** EaseOutCirc */\r\n EaseOutCirc,\r\n /** EaseInOutCirc */\r\n EaseInOutCirc,\r\n /** EaseInBack */\r\n EaseInBack,\r\n /** EaseOutBack */\r\n EaseOutBack,\r\n /** EaseInOutBack */\r\n EaseInOutBack,\r\n /** EaseInElastic */\r\n EaseInElastic,\r\n /** EaseOutElastic */\r\n EaseOutElastic,\r\n /** EaseInOutElastic */\r\n EaseInOutElastic,\r\n}\r\n\r\n/**\r\n * Block used to apply curve operation\r\n */\r\nexport class CurveBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets the type of the curve applied by the block\r\n */\r\n public type = CurveBlockTypes.EaseInOutSine;\r\n\r\n /**\r\n * Creates a new CurveBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Object);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Int);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"CurveBlock\";\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 output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _duplicateEntry(entry: string, component: string) {\r\n return `ret.${component} = ${entry.replace(/VAL/g, \"v.\" + component)}`;\r\n }\r\n\r\n private _duplicateEntryDirect(entry: string) {\r\n return `return ${entry.replace(/VAL/g, \"v\")}`;\r\n }\r\n\r\n private _duplicateVector(entry: string, inputType: string, isWGSL: boolean) {\r\n if (inputType === \"float\" || inputType === \"f32\") {\r\n return this._duplicateEntryDirect(entry);\r\n }\r\n\r\n const size = parseInt(inputType.replace(\"vec\", \"\"));\r\n let code = isWGSL\r\n ? `\r\n var ret: vec${size}f = vec${size}f(0.0);\r\n `\r\n : `\r\n vec${size} ret = vec${size}(0.0);\r\n `;\r\n\r\n for (let i = 1; i <= size; i++) {\r\n code += this._duplicateEntry(entry, i === 1 ? \"x\" : i === 2 ? \"y\" : i === 3 ? \"z\" : \"w\") + \";\\n\";\r\n }\r\n\r\n code += \"return ret;\\n\";\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n let registeredFunction = \"\";\r\n let registeredFunctionName = \"\";\r\n\r\n const inputType = state._getShaderType(this.input.type);\r\n const isWGSL = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n registeredFunctionName = CurveBlockTypes[this.type] + \"_\" + inputType.replace(\"<\", \"\").replace(\">\", \"\");\r\n\r\n switch (this.type) {\r\n case CurveBlockTypes.EaseInSine:\r\n registeredFunction = `return 1.0 - cos((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseOutSine:\r\n registeredFunction = `return sin((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutSine:\r\n registeredFunction = `return -(cos(v * 3.1415) - 1.0) / 2.0`;\r\n break;\r\n case CurveBlockTypes.EaseInQuad:\r\n registeredFunction = `return v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuad:\r\n registeredFunction = `return (1.0 - v) * (1.0 - v)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutQuad: {\r\n const entry = state._generateTernary(\"2.0 * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 2.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCubic:\r\n registeredFunction = `return v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutCubic: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 3.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCubic: {\r\n const entry = state._generateTernary(\"4.0 * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 3.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuart:\r\n registeredFunction = `return v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuart: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 4.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuart: {\r\n const entry = state._generateTernary(\"8.0 * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 4.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuint:\r\n registeredFunction = `return v * v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuint: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 5.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuint: {\r\n const entry = state._generateTernary(\"16.0 * VAL * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 5.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInExpo: {\r\n const entry = state._generateTernary(\"0.0\", \"pow(2.0, 10.0 * VAL - 10.0)\", \"VAL == 0.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutExpo: {\r\n const entry = state._generateTernary(\"1.0\", \"1.0 - pow(2.0, -10.0 * VAL)\", \"VAL == 1.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutExpo: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\"pow(2.0, 20.0 * VAL - 10.0) / 2.0\", \"(2.0 - pow(2.0, -20.0 * VAL + 10.0)) / 2.0\", \"VAL < 0.5\"),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCirc: {\r\n const entry = \"1.0 - sqrt(1.0 - pow(VAL, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutCirc: {\r\n const entry = \"sqrt(1.0 - pow(VAL - 1.0, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCirc: {\r\n const entry = state._generateTernary(\"(1.0 - sqrt(1.0 - pow(2.0 * VAL, 2.0))) / 2.0\", \"(sqrt(1.0 - pow(-2.0 * VAL + 2.0, 2.0)) + 1.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInBack: {\r\n registeredFunction = \"return 2.70158 * v * v * v - 1.70158 * v * v\";\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutBack: {\r\n const entry = \"2.70158 * pow(VAL - 1.0, 3.0) + 1.70158 * pow(VAL - 1.0, 2.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutBack: {\r\n const entry = state._generateTernary(\r\n \"(pow(2.0 * VAL, 2.0) * ((3.5949095) * 2.0 * VAL - 2.5949095)) / 2.0\",\r\n \"(pow(2.0 * VAL - 2.0, 2.0) * (3.5949095 * (VAL * 2.0 - 2.0) + 3.5949095) + 2.0) / 2.0\",\r\n \"VAL < 0.5\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"-pow(2.0, 10.0 * VAL - 10.0) * sin((VAL * 10.0 - 10.75) * ((2.0 * 3.1415) / 3.0))\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"pow(2.0, -10.0 * VAL) * sin((VAL * 10.0 - 0.75) * ((2.0 * 3.1415) / 3.0)) + 1.0\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\r\n \"-(pow(2.0, 20.0 * VAL - 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0\",\r\n \"(pow(2.0, -20.0 * VAL + 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0 + 1.0\",\r\n \"VAL < 0.5\"\r\n ),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n }\r\n\r\n if (isWGSL) {\r\n state._emitFunction(registeredFunctionName, `fn ${registeredFunctionName}(v: ${inputType}) -> ${inputType} {${registeredFunction};}\\n`, \"\");\r\n } else {\r\n state._emitFunction(registeredFunctionName, `${inputType} ${registeredFunctionName}(${inputType} v) {${registeredFunction};}\\n`, \"\");\r\n }\r\n\r\n state.compilationString += state._declareOutput(output) + ` = ${registeredFunctionName}(${this.input.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.curveType = this.type;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.type = serializationObject.curveType;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.type = BABYLON.CurveBlockTypes.${CurveBlockTypes[this.type]};\\n`;\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.CurveBlock\", CurveBlock);\r\n"]}
1
+ {"version":3,"file":"curveBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/curveBlock.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 type { Scene } from \"../../../scene\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\n\r\n/**\r\n * Types of curves supported by the Curve block\r\n */\r\nexport enum CurveBlockTypes {\r\n /** EaseInSine */\r\n EaseInSine,\r\n /** EaseOutSine */\r\n EaseOutSine,\r\n /** EaseInOutSine */\r\n EaseInOutSine,\r\n /** EaseInQuad */\r\n EaseInQuad,\r\n /** EaseOutQuad */\r\n EaseOutQuad,\r\n /** EaseInOutQuad */\r\n EaseInOutQuad,\r\n /** EaseInCubic */\r\n EaseInCubic,\r\n /** EaseOutCubic */\r\n EaseOutCubic,\r\n /** EaseInOutCubic */\r\n EaseInOutCubic,\r\n /** EaseInQuart */\r\n EaseInQuart,\r\n /** EaseOutQuart */\r\n EaseOutQuart,\r\n /** EaseInOutQuart */\r\n EaseInOutQuart,\r\n /** EaseInQuint */\r\n EaseInQuint,\r\n /** EaseOutQuint */\r\n EaseOutQuint,\r\n /** EaseInOutQuint */\r\n EaseInOutQuint,\r\n /** EaseInExpo */\r\n EaseInExpo,\r\n /** EaseOutExpo */\r\n EaseOutExpo,\r\n /** EaseInOutExpo */\r\n EaseInOutExpo,\r\n /** EaseInCirc */\r\n EaseInCirc,\r\n /** EaseOutCirc */\r\n EaseOutCirc,\r\n /** EaseInOutCirc */\r\n EaseInOutCirc,\r\n /** EaseInBack */\r\n EaseInBack,\r\n /** EaseOutBack */\r\n EaseOutBack,\r\n /** EaseInOutBack */\r\n EaseInOutBack,\r\n /** EaseInElastic */\r\n EaseInElastic,\r\n /** EaseOutElastic */\r\n EaseOutElastic,\r\n /** EaseInOutElastic */\r\n EaseInOutElastic,\r\n}\r\n\r\n/**\r\n * Block used to apply curve operation\r\n */\r\nexport class CurveBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets the type of the curve applied by the block\r\n */\r\n @editableInPropertyPage(\"Type\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"EaseInSine\", value: CurveBlockTypes.EaseInSine },\r\n { label: \"EaseOutSine\", value: CurveBlockTypes.EaseOutSine },\r\n { label: \"EaseInOutSine\", value: CurveBlockTypes.EaseInOutSine },\r\n { label: \"EaseInQuad\", value: CurveBlockTypes.EaseInQuad },\r\n { label: \"EaseOutQuad\", value: CurveBlockTypes.EaseOutQuad },\r\n { label: \"EaseInOutQuad\", value: CurveBlockTypes.EaseInOutQuad },\r\n { label: \"EaseInCubic\", value: CurveBlockTypes.EaseInCubic },\r\n { label: \"EaseOutCubic\", value: CurveBlockTypes.EaseOutCubic },\r\n { label: \"EaseInOutCubic\", value: CurveBlockTypes.EaseInOutCubic },\r\n { label: \"EaseInQuart\", value: CurveBlockTypes.EaseInQuart },\r\n { label: \"EaseOutQuart\", value: CurveBlockTypes.EaseOutQuart },\r\n { label: \"EaseInOutQuart\", value: CurveBlockTypes.EaseInOutQuart },\r\n { label: \"EaseInQuint\", value: CurveBlockTypes.EaseInQuint },\r\n { label: \"EaseOutQuint\", value: CurveBlockTypes.EaseOutQuint },\r\n { label: \"EaseInOutQuint\", value: CurveBlockTypes.EaseInOutQuint },\r\n { label: \"EaseInExpo\", value: CurveBlockTypes.EaseInExpo },\r\n { label: \"EaseOutExpo\", value: CurveBlockTypes.EaseOutExpo },\r\n { label: \"EaseInOutExpo\", value: CurveBlockTypes.EaseInOutExpo },\r\n { label: \"EaseInCirc\", value: CurveBlockTypes.EaseInCirc },\r\n { label: \"EaseOutCirc\", value: CurveBlockTypes.EaseOutCirc },\r\n { label: \"EaseInOutCirc\", value: CurveBlockTypes.EaseInOutCirc },\r\n { label: \"EaseInBack\", value: CurveBlockTypes.EaseInBack },\r\n { label: \"EaseOutBack\", value: CurveBlockTypes.EaseOutBack },\r\n { label: \"EaseInOutBack\", value: CurveBlockTypes.EaseInOutBack },\r\n { label: \"EaseInElastic\", value: CurveBlockTypes.EaseInElastic },\r\n { label: \"EaseOutElastic\", value: CurveBlockTypes.EaseOutElastic },\r\n { label: \"EaseInOutElastic\", value: CurveBlockTypes.EaseInOutElastic },\r\n ],\r\n })\r\n public type = CurveBlockTypes.EaseInOutSine;\r\n\r\n /**\r\n * Creates a new CurveBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Object);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Int);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"CurveBlock\";\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 output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _duplicateEntry(entry: string, component: string) {\r\n return `ret.${component} = ${entry.replace(/VAL/g, \"v.\" + component)}`;\r\n }\r\n\r\n private _duplicateEntryDirect(entry: string) {\r\n return `return ${entry.replace(/VAL/g, \"v\")}`;\r\n }\r\n\r\n private _duplicateVector(entry: string, inputType: string, isWGSL: boolean) {\r\n if (inputType === \"float\" || inputType === \"f32\") {\r\n return this._duplicateEntryDirect(entry);\r\n }\r\n\r\n const size = parseInt(inputType.replace(\"vec\", \"\"));\r\n let code = isWGSL\r\n ? `\r\n var ret: vec${size}f = vec${size}f(0.0);\r\n `\r\n : `\r\n vec${size} ret = vec${size}(0.0);\r\n `;\r\n\r\n for (let i = 1; i <= size; i++) {\r\n code += this._duplicateEntry(entry, i === 1 ? \"x\" : i === 2 ? \"y\" : i === 3 ? \"z\" : \"w\") + \";\\n\";\r\n }\r\n\r\n code += \"return ret;\\n\";\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n let registeredFunction = \"\";\r\n let registeredFunctionName = \"\";\r\n\r\n const inputType = state._getShaderType(this.input.type);\r\n const isWGSL = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n registeredFunctionName = CurveBlockTypes[this.type] + \"_\" + inputType.replace(\"<\", \"\").replace(\">\", \"\");\r\n\r\n switch (this.type) {\r\n case CurveBlockTypes.EaseInSine:\r\n registeredFunction = `return 1.0 - cos((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseOutSine:\r\n registeredFunction = `return sin((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutSine:\r\n registeredFunction = `return -(cos(v * 3.1415) - 1.0) / 2.0`;\r\n break;\r\n case CurveBlockTypes.EaseInQuad:\r\n registeredFunction = `return v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuad:\r\n registeredFunction = `return (1.0 - v) * (1.0 - v)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutQuad: {\r\n const entry = state._generateTernary(\"2.0 * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 2.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCubic:\r\n registeredFunction = `return v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutCubic: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 3.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCubic: {\r\n const entry = state._generateTernary(\"4.0 * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 3.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuart:\r\n registeredFunction = `return v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuart: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 4.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuart: {\r\n const entry = state._generateTernary(\"8.0 * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 4.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuint:\r\n registeredFunction = `return v * v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuint: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 5.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuint: {\r\n const entry = state._generateTernary(\"16.0 * VAL * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 5.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInExpo: {\r\n const entry = state._generateTernary(\"0.0\", \"pow(2.0, 10.0 * VAL - 10.0)\", \"VAL == 0.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutExpo: {\r\n const entry = state._generateTernary(\"1.0\", \"1.0 - pow(2.0, -10.0 * VAL)\", \"VAL == 1.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutExpo: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\"pow(2.0, 20.0 * VAL - 10.0) / 2.0\", \"(2.0 - pow(2.0, -20.0 * VAL + 10.0)) / 2.0\", \"VAL < 0.5\"),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCirc: {\r\n const entry = \"1.0 - sqrt(1.0 - pow(VAL, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutCirc: {\r\n const entry = \"sqrt(1.0 - pow(VAL - 1.0, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCirc: {\r\n const entry = state._generateTernary(\"(1.0 - sqrt(1.0 - pow(2.0 * VAL, 2.0))) / 2.0\", \"(sqrt(1.0 - pow(-2.0 * VAL + 2.0, 2.0)) + 1.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInBack: {\r\n registeredFunction = \"return 2.70158 * v * v * v - 1.70158 * v * v\";\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutBack: {\r\n const entry = \"2.70158 * pow(VAL - 1.0, 3.0) + 1.70158 * pow(VAL - 1.0, 2.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutBack: {\r\n const entry = state._generateTernary(\r\n \"(pow(2.0 * VAL, 2.0) * ((3.5949095) * 2.0 * VAL - 2.5949095)) / 2.0\",\r\n \"(pow(2.0 * VAL - 2.0, 2.0) * (3.5949095 * (VAL * 2.0 - 2.0) + 3.5949095) + 2.0) / 2.0\",\r\n \"VAL < 0.5\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"-pow(2.0, 10.0 * VAL - 10.0) * sin((VAL * 10.0 - 10.75) * ((2.0 * 3.1415) / 3.0))\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"pow(2.0, -10.0 * VAL) * sin((VAL * 10.0 - 0.75) * ((2.0 * 3.1415) / 3.0)) + 1.0\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\r\n \"-(pow(2.0, 20.0 * VAL - 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0\",\r\n \"(pow(2.0, -20.0 * VAL + 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0 + 1.0\",\r\n \"VAL < 0.5\"\r\n ),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n }\r\n\r\n if (isWGSL) {\r\n state._emitFunction(registeredFunctionName, `fn ${registeredFunctionName}(v: ${inputType}) -> ${inputType} {${registeredFunction};}\\n`, \"\");\r\n } else {\r\n state._emitFunction(registeredFunctionName, `${inputType} ${registeredFunctionName}(${inputType} v) {${registeredFunction};}\\n`, \"\");\r\n }\r\n\r\n state.compilationString += state._declareOutput(output) + ` = ${registeredFunctionName}(${this.input.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.curveType = this.type;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.type = serializationObject.curveType;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.type = BABYLON.CurveBlockTypes.${CurveBlockTypes[this.type]};\\n`;\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.CurveBlock\", CurveBlock);\r\n"]}
@@ -104,7 +104,7 @@ export class LoopBlock extends NodeMaterialBlock {
104
104
  }
105
105
  }
106
106
  __decorate([
107
- editableInPropertyPage("Iterations", 2 /* PropertyTypeForEdition.Int */)
107
+ editableInPropertyPage("Iterations", 2 /* PropertyTypeForEdition.Int */, undefined, { embedded: true })
108
108
  ], LoopBlock.prototype, "iterations", void 0);
109
109
  RegisterClass("BABYLON.LoopBlock", LoopBlock);
110
110
  //# sourceMappingURL=loopBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loopBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/loopBlock.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAIvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAA0B,6CAAsC;AAG/F,OAAO,EAAE,uCAAuC,EAAE,MAAM,4CAA4C,CAAC;AACrG;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,iBAAiB;IAQ5C;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAZlD;;;WAGG;QAEI,eAAU,GAAG,CAAC,CAAC;QASlB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,YAAY,CAAC,CAAC;QAClF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC7G,IAAI,CAAC,cAAc,CACf,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,SAAS,EACT,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,uDAA+C,SAAS,EAAE,WAAW,CAAC,CACnI,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;QAEtC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE/B,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEtD,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1E,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QACjF,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAE7E,mDAAmD;QACnD,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC;QAEvG,aAAa;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAErI,OAAO;QACP,KAAK,CAAC,iBAAiB,IAAI,QAAQ,IAAI,IAAI,SAAS,SAAS,SAAS,MAAM,UAAU,KAAK,SAAS,QAAQ,CAAC;QAC7G,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,SAAS,IAAI,SAAS,MAAM,CAAC;QAE5F,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,eAAe,CAAC,KAA6B;QAC5D,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE7B,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAEjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,mBAAmB;QAClC,OAAO,KAAK,CAAC,mBAAmB,EAAE,GAAG,GAAG,IAAI,CAAC,iBAAiB,iBAAiB,IAAI,CAAC,UAAU,KAAK,CAAC;IACxG,CAAC;IAEe,SAAS;QACrB,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE9C,mBAAmB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjD,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAEe,YAAY,CAAC,mBAAwB,EAAE,KAAY,EAAE,OAAe;QAChF,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC;IACrD,CAAC;CACJ;AA1HU;IADN,sBAAsB,CAAC,YAAY,qCAA6B;6CAC3C;AA4H1B,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\n/**\r\n * Block used to repeat code\r\n */\r\nexport class LoopBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets number of iterations\r\n * Will be ignored if the iterations input is connected\r\n */\r\n @editableInPropertyPage(\"Iterations\", PropertyTypeForEdition.Int)\r\n public iterations = 4;\r\n\r\n /**\r\n * Creates a new LoopBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"iterations\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n this.registerOutput(\"index\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\r\n \"loopID\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n undefined,\r\n new NodeMaterialConnectionPointCustomObject(\"loopID\", this, NodeMaterialConnectionPointDirection.Output, LoopBlock, \"LoopBlock\")\r\n );\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n this._outputs[0]._forPostBuild = true;\r\n\r\n this._outputs[2]._redirectedSource = this._inputs[0];\r\n\r\n this._outputs[1]._preventBubbleUp = true;\r\n this._outputs[2]._preventBubbleUp = 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 override getClassName() {\r\n return \"LoopBlock\";\r\n }\r\n\r\n /**\r\n * Gets the main 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 iterations input component\r\n */\r\n public get iterationsInput(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\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 index component which will be incremented at each iteration\r\n */\r\n public get index(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the loop ID component\r\n */\r\n public get loopID(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const index = this._outputs[1];\r\n\r\n const indexName = state._getFreeVariableName(\"index\");\r\n\r\n const decl = state.shaderLanguage === ShaderLanguage.WGSL ? \"var\" : \"int\";\r\n const castFloat = state.shaderLanguage === ShaderLanguage.WGSL ? \"f32\" : \"float\";\r\n const castInt = state.shaderLanguage === ShaderLanguage.WGSL ? \"i32\" : \"int\";\r\n\r\n // Declare storage variable and store initial value\r\n state.compilationString += state._declareOutput(output) + ` = ${this.input.associatedVariableName};\\n`;\r\n\r\n // Iterations\r\n const iterations = this.iterationsInput.isConnected ? `${castInt}(${this.iterationsInput.associatedVariableName})` : this.iterations;\r\n\r\n // Loop\r\n state.compilationString += `for (${decl} ${indexName} = 0; ${indexName} < ${iterations}; ${indexName}++){\\n`;\r\n state.compilationString += `${state._declareOutput(index)} = ${castFloat}(${indexName});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _postBuildBlock(state: NodeMaterialBuildState) {\r\n super._postBuildBlock(state);\r\n\r\n state.compilationString += `}\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n return super._dumpPropertiesCode() + `${this._codeVariableName}.iterations = ${this.iterations};\\n`;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.iterations = this.iterations;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.iterations = serializationObject.iterations;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.LoopBlock\", LoopBlock);\r\n"]}
1
+ {"version":3,"file":"loopBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/loopBlock.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 { NodeMaterialConnectionPointDirection } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\n/**\r\n * Block used to repeat code\r\n */\r\nexport class LoopBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets number of iterations\r\n * Will be ignored if the iterations input is connected\r\n */\r\n @editableInPropertyPage(\"Iterations\", PropertyTypeForEdition.Int, undefined, { embedded: true })\r\n public iterations = 4;\r\n\r\n /**\r\n * Creates a new LoopBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"iterations\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n this.registerOutput(\"index\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\r\n \"loopID\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n undefined,\r\n new NodeMaterialConnectionPointCustomObject(\"loopID\", this, NodeMaterialConnectionPointDirection.Output, LoopBlock, \"LoopBlock\")\r\n );\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n this._outputs[0]._forPostBuild = true;\r\n\r\n this._outputs[2]._redirectedSource = this._inputs[0];\r\n\r\n this._outputs[1]._preventBubbleUp = true;\r\n this._outputs[2]._preventBubbleUp = 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 override getClassName() {\r\n return \"LoopBlock\";\r\n }\r\n\r\n /**\r\n * Gets the main 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 iterations input component\r\n */\r\n public get iterationsInput(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\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 index component which will be incremented at each iteration\r\n */\r\n public get index(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the loop ID component\r\n */\r\n public get loopID(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const index = this._outputs[1];\r\n\r\n const indexName = state._getFreeVariableName(\"index\");\r\n\r\n const decl = state.shaderLanguage === ShaderLanguage.WGSL ? \"var\" : \"int\";\r\n const castFloat = state.shaderLanguage === ShaderLanguage.WGSL ? \"f32\" : \"float\";\r\n const castInt = state.shaderLanguage === ShaderLanguage.WGSL ? \"i32\" : \"int\";\r\n\r\n // Declare storage variable and store initial value\r\n state.compilationString += state._declareOutput(output) + ` = ${this.input.associatedVariableName};\\n`;\r\n\r\n // Iterations\r\n const iterations = this.iterationsInput.isConnected ? `${castInt}(${this.iterationsInput.associatedVariableName})` : this.iterations;\r\n\r\n // Loop\r\n state.compilationString += `for (${decl} ${indexName} = 0; ${indexName} < ${iterations}; ${indexName}++){\\n`;\r\n state.compilationString += `${state._declareOutput(index)} = ${castFloat}(${indexName});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _postBuildBlock(state: NodeMaterialBuildState) {\r\n super._postBuildBlock(state);\r\n\r\n state.compilationString += `}\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n return super._dumpPropertiesCode() + `${this._codeVariableName}.iterations = ${this.iterations};\\n`;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.iterations = this.iterations;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.iterations = serializationObject.iterations;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.LoopBlock\", LoopBlock);\r\n"]}
@@ -179,6 +179,7 @@ export class MeshAttributeExistsBlock extends NodeMaterialBlock {
179
179
  __decorate([
180
180
  editableInPropertyPage("Attribute lookup", 4 /* PropertyTypeForEdition.List */, undefined, {
181
181
  notifiers: { update: true },
182
+ embedded: true,
182
183
  options: [
183
184
  { label: "(None)", value: 0 /* MeshAttributeExistsBlockTypes.None */ },
184
185
  { label: "Normal", value: 1 /* MeshAttributeExistsBlockTypes.Normal */ },
@@ -1 +1 @@
1
- {"version":3,"file":"meshAttributeExistsBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/meshAttributeExistsBlock.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 { InputBlock } from \"./Input/inputBlock\";\r\nimport { MorphTargetsBlock } from \"./Vertex/morphTargetsBlock\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nexport const enum MeshAttributeExistsBlockTypes {\r\n None,\r\n Normal,\r\n Tangent,\r\n VertexColor,\r\n UV1,\r\n UV2,\r\n UV3,\r\n UV4,\r\n UV5,\r\n UV6,\r\n}\r\n\r\n/**\r\n * Block used to check if Mesh attribute of specified type exists\r\n * and provide an alternative fallback input for to use in such case\r\n */\r\nexport class MeshAttributeExistsBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new MeshAttributeExistsBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"fallback\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n this._linkConnectionTypes(0, 1);\r\n\r\n // Try to auto determine attributeType\r\n this._inputs[0].onConnectionObservable.add((other) => {\r\n if (this.attributeType) {\r\n // But only if not already specified\r\n return;\r\n }\r\n const sourceBlock = other.ownerBlock;\r\n if (sourceBlock instanceof InputBlock && sourceBlock.isAttribute) {\r\n switch (sourceBlock.name) {\r\n case \"color\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.VertexColor;\r\n break;\r\n case \"normal\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Normal;\r\n break;\r\n case \"tangent\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Tangent;\r\n break;\r\n case \"uv\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV1;\r\n break;\r\n case \"uv2\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV2;\r\n break;\r\n case \"uv3\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV3;\r\n break;\r\n case \"uv4\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV4;\r\n break;\r\n case \"uv5\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV5;\r\n break;\r\n case \"uv6\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV6;\r\n break;\r\n }\r\n } else if (sourceBlock instanceof MorphTargetsBlock) {\r\n switch (this.input.connectedPoint?.name) {\r\n case \"normalOutput\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Normal;\r\n break;\r\n case \"tangentOutput\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Tangent;\r\n break;\r\n case \"uvOutput\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV1;\r\n break;\r\n }\r\n }\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 override getClassName() {\r\n return \"MeshAttributeExistsBlock\";\r\n }\r\n\r\n /**\r\n * Defines which mesh attribute to use\r\n */\r\n @editableInPropertyPage(\"Attribute lookup\", PropertyTypeForEdition.List, undefined, {\r\n notifiers: { update: true },\r\n options: [\r\n { label: \"(None)\", value: MeshAttributeExistsBlockTypes.None },\r\n { label: \"Normal\", value: MeshAttributeExistsBlockTypes.Normal },\r\n { label: \"Tangent\", value: MeshAttributeExistsBlockTypes.Tangent },\r\n { label: \"Vertex Color\", value: MeshAttributeExistsBlockTypes.VertexColor },\r\n { label: \"UV1\", value: MeshAttributeExistsBlockTypes.UV1 },\r\n { label: \"UV2\", value: MeshAttributeExistsBlockTypes.UV2 },\r\n { label: \"UV3\", value: MeshAttributeExistsBlockTypes.UV3 },\r\n { label: \"UV4\", value: MeshAttributeExistsBlockTypes.UV4 },\r\n { label: \"UV5\", value: MeshAttributeExistsBlockTypes.UV5 },\r\n { label: \"UV6\", value: MeshAttributeExistsBlockTypes.UV6 },\r\n ],\r\n })\r\n public attributeType = MeshAttributeExistsBlockTypes.None;\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 fallback component when speciefied attribute doesn't exist\r\n */\r\n public get fallback(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\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 protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n let attributeDefine: null | string = null;\r\n switch (this.attributeType) {\r\n case MeshAttributeExistsBlockTypes.VertexColor:\r\n attributeDefine = \"VERTEXCOLOR_NME\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.Normal:\r\n attributeDefine = \"NORMAL\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.Tangent:\r\n attributeDefine = \"TANGENT\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV1:\r\n attributeDefine = \"UV1\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV2:\r\n attributeDefine = \"UV2\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV3:\r\n attributeDefine = \"UV3\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV4:\r\n attributeDefine = \"UV4\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV5:\r\n attributeDefine = \"UV5\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV6:\r\n attributeDefine = \"UV6\";\r\n break;\r\n }\r\n\r\n const output = state._declareOutput(this.output);\r\n if (attributeDefine) {\r\n state.compilationString += `#ifdef ${attributeDefine}\\n`;\r\n }\r\n\r\n state.compilationString += `${output} = ${this.input.associatedVariableName};\\n`;\r\n\r\n if (attributeDefine) {\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${output} = ${this.fallback.associatedVariableName};\\n`;\r\n state.compilationString += `#endif\\n`;\r\n }\r\n return this;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.attributeType = this.attributeType;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.attributeType = serializationObject.attributeType ?? MeshAttributeExistsBlockTypes.None;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.attributeType = ${this.attributeType};\\n`;\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MeshAttributeExistsBlock\", MeshAttributeExistsBlock);\r\n"]}
1
+ {"version":3,"file":"meshAttributeExistsBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/meshAttributeExistsBlock.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 { InputBlock } from \"./Input/inputBlock\";\r\nimport { MorphTargetsBlock } from \"./Vertex/morphTargetsBlock\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nexport const enum MeshAttributeExistsBlockTypes {\r\n None,\r\n Normal,\r\n Tangent,\r\n VertexColor,\r\n UV1,\r\n UV2,\r\n UV3,\r\n UV4,\r\n UV5,\r\n UV6,\r\n}\r\n\r\n/**\r\n * Block used to check if Mesh attribute of specified type exists\r\n * and provide an alternative fallback input for to use in such case\r\n */\r\nexport class MeshAttributeExistsBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new MeshAttributeExistsBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"fallback\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n this._linkConnectionTypes(0, 1);\r\n\r\n // Try to auto determine attributeType\r\n this._inputs[0].onConnectionObservable.add((other) => {\r\n if (this.attributeType) {\r\n // But only if not already specified\r\n return;\r\n }\r\n const sourceBlock = other.ownerBlock;\r\n if (sourceBlock instanceof InputBlock && sourceBlock.isAttribute) {\r\n switch (sourceBlock.name) {\r\n case \"color\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.VertexColor;\r\n break;\r\n case \"normal\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Normal;\r\n break;\r\n case \"tangent\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Tangent;\r\n break;\r\n case \"uv\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV1;\r\n break;\r\n case \"uv2\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV2;\r\n break;\r\n case \"uv3\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV3;\r\n break;\r\n case \"uv4\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV4;\r\n break;\r\n case \"uv5\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV5;\r\n break;\r\n case \"uv6\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV6;\r\n break;\r\n }\r\n } else if (sourceBlock instanceof MorphTargetsBlock) {\r\n switch (this.input.connectedPoint?.name) {\r\n case \"normalOutput\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Normal;\r\n break;\r\n case \"tangentOutput\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.Tangent;\r\n break;\r\n case \"uvOutput\":\r\n this.attributeType = MeshAttributeExistsBlockTypes.UV1;\r\n break;\r\n }\r\n }\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 override getClassName() {\r\n return \"MeshAttributeExistsBlock\";\r\n }\r\n\r\n /**\r\n * Defines which mesh attribute to use\r\n */\r\n @editableInPropertyPage(\"Attribute lookup\", PropertyTypeForEdition.List, undefined, {\r\n notifiers: { update: true },\r\n embedded: true,\r\n options: [\r\n { label: \"(None)\", value: MeshAttributeExistsBlockTypes.None },\r\n { label: \"Normal\", value: MeshAttributeExistsBlockTypes.Normal },\r\n { label: \"Tangent\", value: MeshAttributeExistsBlockTypes.Tangent },\r\n { label: \"Vertex Color\", value: MeshAttributeExistsBlockTypes.VertexColor },\r\n { label: \"UV1\", value: MeshAttributeExistsBlockTypes.UV1 },\r\n { label: \"UV2\", value: MeshAttributeExistsBlockTypes.UV2 },\r\n { label: \"UV3\", value: MeshAttributeExistsBlockTypes.UV3 },\r\n { label: \"UV4\", value: MeshAttributeExistsBlockTypes.UV4 },\r\n { label: \"UV5\", value: MeshAttributeExistsBlockTypes.UV5 },\r\n { label: \"UV6\", value: MeshAttributeExistsBlockTypes.UV6 },\r\n ],\r\n })\r\n public attributeType = MeshAttributeExistsBlockTypes.None;\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 fallback component when speciefied attribute doesn't exist\r\n */\r\n public get fallback(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\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 protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n let attributeDefine: null | string = null;\r\n switch (this.attributeType) {\r\n case MeshAttributeExistsBlockTypes.VertexColor:\r\n attributeDefine = \"VERTEXCOLOR_NME\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.Normal:\r\n attributeDefine = \"NORMAL\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.Tangent:\r\n attributeDefine = \"TANGENT\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV1:\r\n attributeDefine = \"UV1\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV2:\r\n attributeDefine = \"UV2\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV3:\r\n attributeDefine = \"UV3\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV4:\r\n attributeDefine = \"UV4\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV5:\r\n attributeDefine = \"UV5\";\r\n break;\r\n case MeshAttributeExistsBlockTypes.UV6:\r\n attributeDefine = \"UV6\";\r\n break;\r\n }\r\n\r\n const output = state._declareOutput(this.output);\r\n if (attributeDefine) {\r\n state.compilationString += `#ifdef ${attributeDefine}\\n`;\r\n }\r\n\r\n state.compilationString += `${output} = ${this.input.associatedVariableName};\\n`;\r\n\r\n if (attributeDefine) {\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${output} = ${this.fallback.associatedVariableName};\\n`;\r\n state.compilationString += `#endif\\n`;\r\n }\r\n return this;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.attributeType = this.attributeType;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.attributeType = serializationObject.attributeType ?? MeshAttributeExistsBlockTypes.None;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.attributeType = ${this.attributeType};\\n`;\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MeshAttributeExistsBlock\", MeshAttributeExistsBlock);\r\n"]}
@@ -16,6 +16,12 @@ export declare class TransformBlock extends NodeMaterialBlock {
16
16
  * Defines the value to use to complement z value to transform it to a Vector4
17
17
  */
18
18
  complementZ: number;
19
+ /**
20
+ * Boolean indicating if the transformation is made for a direction vector and not a position vector
21
+ * If set to true the complementW value will be set to 0 else it will be set to 1
22
+ */
23
+ get transformAsDirection(): boolean;
24
+ set transformAsDirection(value: boolean);
19
25
  /**
20
26
  * Creates a new TransformBlock
21
27
  * @param name defines the block name
@@ -1,11 +1,23 @@
1
+ import { __decorate } from "../../../tslib.es6.js";
1
2
  import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
2
3
  import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
4
  import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
4
5
  import { RegisterClass } from "../../../Misc/typeStore.js";
6
+ import { editableInPropertyPage } from "../../../Decorators/nodeDecorator.js";
5
7
  /**
6
8
  * Block used to transform a vector (2, 3 or 4) with a matrix. It will generate a Vector4
7
9
  */
8
10
  export class TransformBlock extends NodeMaterialBlock {
11
+ /**
12
+ * Boolean indicating if the transformation is made for a direction vector and not a position vector
13
+ * If set to true the complementW value will be set to 0 else it will be set to 1
14
+ */
15
+ get transformAsDirection() {
16
+ return this.complementW === 0;
17
+ }
18
+ set transformAsDirection(value) {
19
+ this.complementW = value ? 0 : 1;
20
+ }
9
21
  /**
10
22
  * Creates a new TransformBlock
11
23
  * @param name defines the block name
@@ -73,7 +85,7 @@ export class TransformBlock extends NodeMaterialBlock {
73
85
  const vec3 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector3);
74
86
  if (vector.connectedPoint) {
75
87
  // None uniform scaling case.
76
- if (this.complementW === 0) {
88
+ if (this.complementW === 0 || this.transformAsDirection) {
77
89
  const comments = `//${this.name}`;
78
90
  state._emitFunctionFromInclude("helperFunctions", comments);
79
91
  state.sharedData.blocksWithDefines.push(this);
@@ -157,5 +169,8 @@ export class TransformBlock extends NodeMaterialBlock {
157
169
  return codeString;
158
170
  }
159
171
  }
172
+ __decorate([
173
+ editableInPropertyPage("Transform as direction", 0 /* PropertyTypeForEdition.Boolean */, undefined, { embedded: true })
174
+ ], TransformBlock.prototype, "transformAsDirection", null);
160
175
  RegisterClass("BABYLON.TransformBlock", TransformBlock);
161
176
  //# sourceMappingURL=transformBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/transformBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport type { InputBlock } from \"./Input/inputBlock\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../nodeMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to transform a vector (2, 3 or 4) with a matrix. It will generate a Vector4\r\n */\r\nexport class TransformBlock extends NodeMaterialBlock {\r\n /**\r\n * Defines the value to use to complement W value to transform it to a Vector4\r\n */\r\n public complementW = 1;\r\n\r\n /**\r\n * Defines the value to use to complement z value to transform it to a Vector4\r\n */\r\n public complementZ = 0;\r\n\r\n /**\r\n * Creates a new TransformBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.target = NodeMaterialBlockTargets.Vertex;\r\n\r\n this.registerInput(\"vector\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"transform\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[0].onConnectionObservable.add((other) => {\r\n if (other.ownerBlock.isInput) {\r\n const otherAsInput = other.ownerBlock as InputBlock;\r\n\r\n if (otherAsInput.name === \"normal\" || otherAsInput.name === \"tangent\") {\r\n this.complementW = 0;\r\n }\r\n }\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 override getClassName() {\r\n return \"TransformBlock\";\r\n }\r\n\r\n /**\r\n * Gets the vector input\r\n */\r\n public get vector(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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 output component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the matrix transform input\r\n */\r\n public get transform(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const vector = this.vector;\r\n const transform = this.transform;\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const vec3 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n if (vector.connectedPoint) {\r\n // None uniform scaling case.\r\n if (this.complementW === 0) {\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const transformName = state._getFreeVariableName(`${transform.associatedVariableName}_NUS`);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `var ${transformName}: mat3x3f = mat3x3f(${transform.associatedVariableName}[0].xyz, ${transform.associatedVariableName}[1].xyz, ${transform.associatedVariableName}[2].xyz);\\n`;\r\n } else {\r\n state.compilationString += `mat3 ${transformName} = mat3(${transform.associatedVariableName});\\n`;\r\n }\r\n state.compilationString += `#ifdef NONUNIFORMSCALING\\n`;\r\n state.compilationString += `${transformName} = transposeMat3(inverseMat3(${transformName}));\\n`;\r\n state.compilationString += `#endif\\n`;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${vec4}(${transformName} * ${vec3}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}), ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}.xyz, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n }\r\n } else {\r\n const transformName = transform.associatedVariableName;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString += state._declareOutput(this.output) + ` = ${transformName} * ${vector.associatedVariableName};\\n`;\r\n break;\r\n }\r\n }\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.xyz) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Update defines for shader compilation\r\n * @param mesh defines the mesh to be rendered\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n */\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n // Do nothing\r\n if (mesh.nonUniformScaling) {\r\n defines.setValue(\"NONUNIFORMSCALING\", true);\r\n }\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.complementZ = this.complementZ;\r\n serializationObject.complementW = this.complementW;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.complementZ = serializationObject.complementZ !== undefined ? serializationObject.complementZ : 0.0;\r\n this.complementW = serializationObject.complementW !== undefined ? serializationObject.complementW : 1.0;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.complementZ = ${this.complementZ};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.complementW = ${this.complementW};\\n`;\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TransformBlock\", TransformBlock);\r\n"]}
1
+ {"version":3,"file":"transformBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/transformBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport type { InputBlock } from \"./Input/inputBlock\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../nodeMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\n\r\n/**\r\n * Block used to transform a vector (2, 3 or 4) with a matrix. It will generate a Vector4\r\n */\r\nexport class TransformBlock extends NodeMaterialBlock {\r\n /**\r\n * Defines the value to use to complement W value to transform it to a Vector4\r\n */\r\n public complementW = 1;\r\n\r\n /**\r\n * Defines the value to use to complement z value to transform it to a Vector4\r\n */\r\n public complementZ = 0;\r\n\r\n /**\r\n * Boolean indicating if the transformation is made for a direction vector and not a position vector\r\n * If set to true the complementW value will be set to 0 else it will be set to 1\r\n */\r\n @editableInPropertyPage(\"Transform as direction\", PropertyTypeForEdition.Boolean, undefined, { embedded: true })\r\n public get transformAsDirection() {\r\n return this.complementW === 0;\r\n }\r\n\r\n public set transformAsDirection(value: boolean) {\r\n this.complementW = value ? 0 : 1;\r\n }\r\n\r\n /**\r\n * Creates a new TransformBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.target = NodeMaterialBlockTargets.Vertex;\r\n\r\n this.registerInput(\"vector\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"transform\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[0].onConnectionObservable.add((other) => {\r\n if (other.ownerBlock.isInput) {\r\n const otherAsInput = other.ownerBlock as InputBlock;\r\n\r\n if (otherAsInput.name === \"normal\" || otherAsInput.name === \"tangent\") {\r\n this.complementW = 0;\r\n }\r\n }\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 override getClassName() {\r\n return \"TransformBlock\";\r\n }\r\n\r\n /**\r\n * Gets the vector input\r\n */\r\n public get vector(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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 output component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the matrix transform input\r\n */\r\n public get transform(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const vector = this.vector;\r\n const transform = this.transform;\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const vec3 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n if (vector.connectedPoint) {\r\n // None uniform scaling case.\r\n if (this.complementW === 0 || this.transformAsDirection) {\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const transformName = state._getFreeVariableName(`${transform.associatedVariableName}_NUS`);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `var ${transformName}: mat3x3f = mat3x3f(${transform.associatedVariableName}[0].xyz, ${transform.associatedVariableName}[1].xyz, ${transform.associatedVariableName}[2].xyz);\\n`;\r\n } else {\r\n state.compilationString += `mat3 ${transformName} = mat3(${transform.associatedVariableName});\\n`;\r\n }\r\n state.compilationString += `#ifdef NONUNIFORMSCALING\\n`;\r\n state.compilationString += `${transformName} = transposeMat3(inverseMat3(${transformName}));\\n`;\r\n state.compilationString += `#endif\\n`;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${vec4}(${transformName} * ${vec3}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}), ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${vec4}(${transformName} * ${vector.associatedVariableName}.xyz, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n }\r\n } else {\r\n const transformName = transform.associatedVariableName;\r\n switch (vector.connectedPoint.type) {\r\n case NodeMaterialBlockConnectionPointTypes.Vector2:\r\n state.compilationString +=\r\n state._declareOutput(this.output) +\r\n ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementZ)}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n case NodeMaterialBlockConnectionPointTypes.Vector3:\r\n case NodeMaterialBlockConnectionPointTypes.Color3:\r\n state.compilationString +=\r\n state._declareOutput(this.output) + ` = ${transformName} * ${vec4}(${vector.associatedVariableName}, ${this._writeFloat(this.complementW)});\\n`;\r\n break;\r\n default:\r\n state.compilationString += state._declareOutput(this.output) + ` = ${transformName} * ${vector.associatedVariableName};\\n`;\r\n break;\r\n }\r\n }\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.xyz) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Update defines for shader compilation\r\n * @param mesh defines the mesh to be rendered\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n */\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n // Do nothing\r\n if (mesh.nonUniformScaling) {\r\n defines.setValue(\"NONUNIFORMSCALING\", true);\r\n }\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.complementZ = this.complementZ;\r\n serializationObject.complementW = this.complementW;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.complementZ = serializationObject.complementZ !== undefined ? serializationObject.complementZ : 0.0;\r\n this.complementW = serializationObject.complementW !== undefined ? serializationObject.complementW : 1.0;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.complementZ = ${this.complementZ};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.complementW = ${this.complementW};\\n`;\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TransformBlock\", TransformBlock);\r\n"]}
@@ -438,7 +438,7 @@ export class TriPlanarBlock extends NodeMaterialBlock {
438
438
  }
439
439
  }
440
440
  __decorate([
441
- editableInPropertyPage("Project as cube", 0 /* PropertyTypeForEdition.Boolean */, "ADVANCED", { notifiers: { update: true } })
441
+ editableInPropertyPage("Project as cube", 0 /* PropertyTypeForEdition.Boolean */, "ADVANCED", { embedded: true, notifiers: { update: true } })
442
442
  ], TriPlanarBlock.prototype, "projectAsCube", void 0);
443
443
  RegisterClass("BABYLON.TriPlanarBlock", TriPlanarBlock);
444
444
  //# sourceMappingURL=triPlanarBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"triPlanarBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/triPlanarBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterialDefines } from \"../nodeMaterial\";\r\nimport { NodeMaterial } from \"../nodeMaterial\";\r\nimport type { Effect } from \"../../effect\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { Texture } from \"../../Textures/texture\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport \"../../../Shaders/ShadersInclude/helperFunctions\";\r\nimport { ImageSourceBlock } from \"./Dual/imageSourceBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../Decorators/nodeDecorator\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to read a texture with triplanar mapping (see \"boxmap\" in https://iquilezles.org/articles/biplanar/)\r\n */\r\nexport class TriPlanarBlock extends NodeMaterialBlock {\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n protected _tempTextureRead: string;\r\n private _samplerName: string;\r\n private _textureInfoName: string;\r\n private _imageSource: Nullable<ImageSourceBlock>;\r\n\r\n /**\r\n * Project the texture(s) for a better fit to a cube\r\n */\r\n @editableInPropertyPage(\"Project as cube\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public projectAsCube: boolean = false;\r\n\r\n protected _texture: Nullable<Texture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n if (this.source.isConnected) {\r\n return (this.source.connectedPoint?.ownerBlock as ImageSourceBlock).texture;\r\n }\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the textureY associated with the node\r\n */\r\n public get textureY(): Nullable<Texture> {\r\n if (this.sourceY.isConnected) {\r\n return (this.sourceY.connectedPoint?.ownerBlock as ImageSourceBlock).texture;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the textureZ associated with the node\r\n */\r\n public get textureZ(): Nullable<Texture> {\r\n if (this.sourceZ?.isConnected) {\r\n return (this.sourceY.connectedPoint?.ownerBlock as ImageSourceBlock).texture;\r\n }\r\n return null;\r\n }\r\n\r\n protected _getImageSourceBlock(connectionPoint: Nullable<NodeMaterialConnectionPoint>): Nullable<ImageSourceBlock> {\r\n return connectionPoint?.isConnected ? (connectionPoint.connectedPoint!.ownerBlock as ImageSourceBlock) : null;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this texture\r\n */\r\n public get samplerName(): string {\r\n const imageSourceBlock = this._getImageSourceBlock(this.source);\r\n if (imageSourceBlock) {\r\n return imageSourceBlock.samplerName;\r\n }\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Gets the samplerY name associated with this texture\r\n */\r\n public get samplerYName(): Nullable<string> {\r\n return this._getImageSourceBlock(this.sourceY)?.samplerName ?? null;\r\n }\r\n\r\n /**\r\n * Gets the samplerZ name associated with this texture\r\n */\r\n public get samplerZName(): Nullable<string> {\r\n return this._getImageSourceBlock(this.sourceZ)?.samplerName ?? null;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block is linked to an ImageSourceBlock\r\n */\r\n public get hasImageSource(): boolean {\r\n return this.source.isConnected;\r\n }\r\n\r\n private _convertToGammaSpace = false;\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to gamma space\r\n */\r\n public set convertToGammaSpace(value: boolean) {\r\n if (value === this._convertToGammaSpace) {\r\n return;\r\n }\r\n\r\n this._convertToGammaSpace = value;\r\n if (this.texture) {\r\n const scene = this.texture.getScene() ?? EngineStore.LastCreatedScene;\r\n scene?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this.texture!);\r\n });\r\n }\r\n }\r\n public get convertToGammaSpace(): boolean {\r\n return this._convertToGammaSpace;\r\n }\r\n\r\n private _convertToLinearSpace = false;\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to linear space\r\n */\r\n public set convertToLinearSpace(value: boolean) {\r\n if (value === this._convertToLinearSpace) {\r\n return;\r\n }\r\n\r\n this._convertToLinearSpace = value;\r\n if (this.texture) {\r\n const scene = this.texture.getScene() ?? EngineStore.LastCreatedScene;\r\n scene?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this.texture!);\r\n });\r\n }\r\n }\r\n public get convertToLinearSpace(): boolean {\r\n return this._convertToLinearSpace;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if multiplication of texture with level should be disabled\r\n */\r\n public disableLevelMultiplication = false;\r\n\r\n /**\r\n * Create a new TriPlanarBlock\r\n * @param name defines the block name\r\n * @param hideSourceZ defines a boolean indicating that normal Z should not be used (false by default)\r\n */\r\n public constructor(name: string, hideSourceZ = false) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false);\r\n this.registerInput(\"normal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false);\r\n this.registerInput(\"sharpness\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerInput(\r\n \"sourceY\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sourceY\", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n if (!hideSourceZ) {\r\n this.registerInput(\r\n \"sourceZ\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sourceZ\", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n }\r\n\r\n this.registerOutput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"r\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"g\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"b\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerOutput(\"level\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n this._inputs[1].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 override getClassName() {\r\n return \"TriPlanarBlock\";\r\n }\r\n\r\n /**\r\n * Gets the 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 normal input component\r\n */\r\n public get normal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the sharpness input component\r\n */\r\n public get sharpness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the source input component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the sourceY input component\r\n */\r\n public get sourceY(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the sourceZ input component\r\n */\r\n public get sourceZ(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._inputs[5];\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[0];\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[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 /**\r\n * Gets the level output component\r\n */\r\n public get level(): NodeMaterialConnectionPoint {\r\n return this._outputs[6];\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if (!defines._areTexturesDirty) {\r\n return;\r\n }\r\n\r\n const toGamma = this.convertToGammaSpace && this.texture && !this.texture.gammaSpace;\r\n const toLinear = this.convertToLinearSpace && this.texture && this.texture.gammaSpace;\r\n\r\n // Not a bug... Name defines the texture space not the required conversion\r\n defines.setValue(this._linearDefineName, toGamma, true);\r\n defines.setValue(this._gammaDefineName, toLinear, true);\r\n }\r\n\r\n public override isReady() {\r\n if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override bind(effect: Effect) {\r\n if (!this.texture) {\r\n return;\r\n }\r\n\r\n effect.setFloat(this._textureInfoName, this.texture.level);\r\n\r\n if (!this._imageSource) {\r\n effect.setTexture(this._samplerName, this.texture);\r\n }\r\n }\r\n\r\n private _samplerFunc(state: NodeMaterialBuildState) {\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n return \"textureSample\";\r\n }\r\n return \"texture2D\";\r\n }\r\n\r\n private _generateTextureSample(textureName: string, uv: string, state: NodeMaterialBuildState) {\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n return `${this._samplerFunc(state)}(${textureName},${textureName + Constants.AUTOSAMPLERSUFFIX}, ${uv})`;\r\n }\r\n return `${this._samplerFunc(state)}(${textureName}, ${uv})`;\r\n }\r\n\r\n protected _generateTextureLookup(state: NodeMaterialBuildState): void {\r\n const samplerName = this.samplerName;\r\n const samplerYName = this.samplerYName ?? samplerName;\r\n const samplerZName = this.samplerZName ?? samplerName;\r\n\r\n const sharpness = this.sharpness.isConnected ? this.sharpness.associatedVariableName : \"1.0\";\r\n\r\n const x = state._getFreeVariableName(\"x\");\r\n const y = state._getFreeVariableName(\"y\");\r\n const z = state._getFreeVariableName(\"z\");\r\n const w = state._getFreeVariableName(\"w\");\r\n const n = state._getFreeVariableName(\"n\");\r\n const uvx = state._getFreeVariableName(\"uvx\");\r\n const uvy = state._getFreeVariableName(\"uvy\");\r\n const uvz = state._getFreeVariableName(\"uvz\");\r\n\r\n state.compilationString += `\r\n ${state._declareLocalVar(n, NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.normal.associatedVariableName}.xyz;\r\n\r\n ${state._declareLocalVar(uvx, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.yz;\r\n ${state._declareLocalVar(uvy, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.zx;\r\n ${state._declareLocalVar(uvz, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.xy;\r\n `;\r\n\r\n if (this.projectAsCube) {\r\n state.compilationString += `\r\n ${uvx}.xy = ${uvx}.yx;\r\n\r\n if (${n}.x >= 0.0) {\r\n ${uvx}.x = -${uvx}.x;\r\n }\r\n if (${n}.y < 0.0) {\r\n ${uvy}.y = -${uvy}.y;\r\n }\r\n if (${n}.z < 0.0) {\r\n ${uvz}.x = -${uvz}.x;\r\n }\r\n `;\r\n }\r\n\r\n const suffix = state.fSuffix;\r\n\r\n state.compilationString += `\r\n ${state._declareLocalVar(x, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerName, uvx, state)};\r\n ${state._declareLocalVar(y, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerYName, uvy, state)};\r\n ${state._declareLocalVar(z, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerZName, uvz, state)};\r\n \r\n // blend weights\r\n ${state._declareLocalVar(w, NodeMaterialBlockConnectionPointTypes.Vector3)} = pow(abs(${n}), vec3${suffix}(${sharpness}));\r\n\r\n // blend and return\r\n ${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)} = (${x}*${w}.x + ${y}*${w}.y + ${z}*${w}.z) / (${w}.x + ${w}.y + ${w}.z); \r\n `;\r\n }\r\n\r\n private _generateConversionCode(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string): void {\r\n let vecSpecifier = \"\";\r\n\r\n if (\r\n state.shaderLanguage === ShaderLanguage.WGSL &&\r\n (output.type === NodeMaterialBlockConnectionPointTypes.Vector3 || output.type === NodeMaterialBlockConnectionPointTypes.Color3)\r\n ) {\r\n vecSpecifier = \"Vec3\";\r\n }\r\n\r\n if (swizzle !== \"a\") {\r\n // no conversion if the output is \"a\" (alpha)\r\n if (!this.texture || !this.texture.gammaSpace) {\r\n state.compilationString += `#ifdef ${this._linearDefineName}\r\n ${output.associatedVariableName} = toGammaSpace${vecSpecifier}(${output.associatedVariableName});\r\n #endif\r\n `;\r\n }\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\r\n ${output.associatedVariableName} = toLinearSpace${vecSpecifier}(${output.associatedVariableName});\r\n #endif\r\n `;\r\n }\r\n }\r\n\r\n private _writeOutput(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string) {\r\n let complement = \"\";\r\n\r\n if (!this.disableLevelMultiplication) {\r\n complement = ` * ${state.shaderLanguage === ShaderLanguage.WGSL ? \"uniforms.\" : \"\"}${this._textureInfoName}`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle}${complement};\\n`;\r\n this._generateConversionCode(state, output, swizzle);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (this.source.isConnected) {\r\n this._imageSource = this.source.connectedPoint!.ownerBlock as ImageSourceBlock;\r\n } else {\r\n this._imageSource = null;\r\n }\r\n\r\n this._textureInfoName = state._getFreeVariableName(\"textureInfoName\");\r\n\r\n this.level.associatedVariableName = (state.shaderLanguage === ShaderLanguage.WGSL ? \"uniforms.\" : \"\") + this._textureInfoName;\r\n\r\n this._tempTextureRead = state._getFreeVariableName(\"tempTextureRead\");\r\n this._linearDefineName = state._getFreeDefineName(\"ISLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"ISGAMMA\");\r\n\r\n if (!this._imageSource) {\r\n this._samplerName = state._getFreeVariableName(this.name + \"Texture\");\r\n\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state._emitUniformFromString(this._textureInfoName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._generateTextureLookup(state);\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints && output.name !== \"level\") {\r\n this._writeOutput(state, output, output.name);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\\n`;\r\n codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\\n`;\r\n codeString += `${this._codeVariableName}.disableLevelMultiplication = ${this.disableLevelMultiplication};\\n`;\r\n codeString += `${this._codeVariableName}.projectAsCube = ${this.projectAsCube};\\n`;\r\n\r\n if (!this.texture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n serializationObject.disableLevelMultiplication = this.disableLevelMultiplication;\r\n serializationObject.projectAsCube = this.projectAsCube;\r\n if (!this.hasImageSource && this.texture && !this.texture.isRenderTarget && this.texture.getClassName() !== \"VideoTexture\") {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n this.disableLevelMultiplication = !!serializationObject.disableLevelMultiplication;\r\n this.projectAsCube = !!serializationObject.projectAsCube;\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime && serializationObject.texture.url !== undefined) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TriPlanarBlock\", TriPlanarBlock);\r\n"]}
1
+ {"version":3,"file":"triPlanarBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/triPlanarBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterialDefines } from \"../nodeMaterial\";\r\nimport { NodeMaterial } from \"../nodeMaterial\";\r\nimport type { Effect } from \"../../effect\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { Texture } from \"../../Textures/texture\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport \"../../../Shaders/ShadersInclude/helperFunctions\";\r\nimport { ImageSourceBlock } from \"./Dual/imageSourceBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../Decorators/nodeDecorator\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to read a texture with triplanar mapping (see \"boxmap\" in https://iquilezles.org/articles/biplanar/)\r\n */\r\nexport class TriPlanarBlock extends NodeMaterialBlock {\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n protected _tempTextureRead: string;\r\n private _samplerName: string;\r\n private _textureInfoName: string;\r\n private _imageSource: Nullable<ImageSourceBlock>;\r\n\r\n /**\r\n * Project the texture(s) for a better fit to a cube\r\n */\r\n @editableInPropertyPage(\"Project as cube\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public projectAsCube: boolean = false;\r\n\r\n protected _texture: Nullable<Texture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n if (this.source.isConnected) {\r\n return (this.source.connectedPoint?.ownerBlock as ImageSourceBlock).texture;\r\n }\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the textureY associated with the node\r\n */\r\n public get textureY(): Nullable<Texture> {\r\n if (this.sourceY.isConnected) {\r\n return (this.sourceY.connectedPoint?.ownerBlock as ImageSourceBlock).texture;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the textureZ associated with the node\r\n */\r\n public get textureZ(): Nullable<Texture> {\r\n if (this.sourceZ?.isConnected) {\r\n return (this.sourceY.connectedPoint?.ownerBlock as ImageSourceBlock).texture;\r\n }\r\n return null;\r\n }\r\n\r\n protected _getImageSourceBlock(connectionPoint: Nullable<NodeMaterialConnectionPoint>): Nullable<ImageSourceBlock> {\r\n return connectionPoint?.isConnected ? (connectionPoint.connectedPoint!.ownerBlock as ImageSourceBlock) : null;\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this texture\r\n */\r\n public get samplerName(): string {\r\n const imageSourceBlock = this._getImageSourceBlock(this.source);\r\n if (imageSourceBlock) {\r\n return imageSourceBlock.samplerName;\r\n }\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Gets the samplerY name associated with this texture\r\n */\r\n public get samplerYName(): Nullable<string> {\r\n return this._getImageSourceBlock(this.sourceY)?.samplerName ?? null;\r\n }\r\n\r\n /**\r\n * Gets the samplerZ name associated with this texture\r\n */\r\n public get samplerZName(): Nullable<string> {\r\n return this._getImageSourceBlock(this.sourceZ)?.samplerName ?? null;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block is linked to an ImageSourceBlock\r\n */\r\n public get hasImageSource(): boolean {\r\n return this.source.isConnected;\r\n }\r\n\r\n private _convertToGammaSpace = false;\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to gamma space\r\n */\r\n public set convertToGammaSpace(value: boolean) {\r\n if (value === this._convertToGammaSpace) {\r\n return;\r\n }\r\n\r\n this._convertToGammaSpace = value;\r\n if (this.texture) {\r\n const scene = this.texture.getScene() ?? EngineStore.LastCreatedScene;\r\n scene?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this.texture!);\r\n });\r\n }\r\n }\r\n public get convertToGammaSpace(): boolean {\r\n return this._convertToGammaSpace;\r\n }\r\n\r\n private _convertToLinearSpace = false;\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to linear space\r\n */\r\n public set convertToLinearSpace(value: boolean) {\r\n if (value === this._convertToLinearSpace) {\r\n return;\r\n }\r\n\r\n this._convertToLinearSpace = value;\r\n if (this.texture) {\r\n const scene = this.texture.getScene() ?? EngineStore.LastCreatedScene;\r\n scene?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this.texture!);\r\n });\r\n }\r\n }\r\n public get convertToLinearSpace(): boolean {\r\n return this._convertToLinearSpace;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if multiplication of texture with level should be disabled\r\n */\r\n public disableLevelMultiplication = false;\r\n\r\n /**\r\n * Create a new TriPlanarBlock\r\n * @param name defines the block name\r\n * @param hideSourceZ defines a boolean indicating that normal Z should not be used (false by default)\r\n */\r\n public constructor(name: string, hideSourceZ = false) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false);\r\n this.registerInput(\"normal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false);\r\n this.registerInput(\"sharpness\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n this.registerInput(\r\n \"sourceY\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sourceY\", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n if (!hideSourceZ) {\r\n this.registerInput(\r\n \"sourceZ\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sourceZ\", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n }\r\n\r\n this.registerOutput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"r\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"g\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"b\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerOutput(\"level\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n this._inputs[1].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 override getClassName() {\r\n return \"TriPlanarBlock\";\r\n }\r\n\r\n /**\r\n * Gets the 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 normal input component\r\n */\r\n public get normal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the sharpness input component\r\n */\r\n public get sharpness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the source input component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the sourceY input component\r\n */\r\n public get sourceY(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the sourceZ input component\r\n */\r\n public get sourceZ(): Nullable<NodeMaterialConnectionPoint> {\r\n return this._inputs[5];\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[0];\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[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 /**\r\n * Gets the level output component\r\n */\r\n public get level(): NodeMaterialConnectionPoint {\r\n return this._outputs[6];\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if (!defines._areTexturesDirty) {\r\n return;\r\n }\r\n\r\n const toGamma = this.convertToGammaSpace && this.texture && !this.texture.gammaSpace;\r\n const toLinear = this.convertToLinearSpace && this.texture && this.texture.gammaSpace;\r\n\r\n // Not a bug... Name defines the texture space not the required conversion\r\n defines.setValue(this._linearDefineName, toGamma, true);\r\n defines.setValue(this._gammaDefineName, toLinear, true);\r\n }\r\n\r\n public override isReady() {\r\n if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override bind(effect: Effect) {\r\n if (!this.texture) {\r\n return;\r\n }\r\n\r\n effect.setFloat(this._textureInfoName, this.texture.level);\r\n\r\n if (!this._imageSource) {\r\n effect.setTexture(this._samplerName, this.texture);\r\n }\r\n }\r\n\r\n private _samplerFunc(state: NodeMaterialBuildState) {\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n return \"textureSample\";\r\n }\r\n return \"texture2D\";\r\n }\r\n\r\n private _generateTextureSample(textureName: string, uv: string, state: NodeMaterialBuildState) {\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n return `${this._samplerFunc(state)}(${textureName},${textureName + Constants.AUTOSAMPLERSUFFIX}, ${uv})`;\r\n }\r\n return `${this._samplerFunc(state)}(${textureName}, ${uv})`;\r\n }\r\n\r\n protected _generateTextureLookup(state: NodeMaterialBuildState): void {\r\n const samplerName = this.samplerName;\r\n const samplerYName = this.samplerYName ?? samplerName;\r\n const samplerZName = this.samplerZName ?? samplerName;\r\n\r\n const sharpness = this.sharpness.isConnected ? this.sharpness.associatedVariableName : \"1.0\";\r\n\r\n const x = state._getFreeVariableName(\"x\");\r\n const y = state._getFreeVariableName(\"y\");\r\n const z = state._getFreeVariableName(\"z\");\r\n const w = state._getFreeVariableName(\"w\");\r\n const n = state._getFreeVariableName(\"n\");\r\n const uvx = state._getFreeVariableName(\"uvx\");\r\n const uvy = state._getFreeVariableName(\"uvy\");\r\n const uvz = state._getFreeVariableName(\"uvz\");\r\n\r\n state.compilationString += `\r\n ${state._declareLocalVar(n, NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.normal.associatedVariableName}.xyz;\r\n\r\n ${state._declareLocalVar(uvx, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.yz;\r\n ${state._declareLocalVar(uvy, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.zx;\r\n ${state._declareLocalVar(uvz, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this.position.associatedVariableName}.xy;\r\n `;\r\n\r\n if (this.projectAsCube) {\r\n state.compilationString += `\r\n ${uvx}.xy = ${uvx}.yx;\r\n\r\n if (${n}.x >= 0.0) {\r\n ${uvx}.x = -${uvx}.x;\r\n }\r\n if (${n}.y < 0.0) {\r\n ${uvy}.y = -${uvy}.y;\r\n }\r\n if (${n}.z < 0.0) {\r\n ${uvz}.x = -${uvz}.x;\r\n }\r\n `;\r\n }\r\n\r\n const suffix = state.fSuffix;\r\n\r\n state.compilationString += `\r\n ${state._declareLocalVar(x, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerName, uvx, state)};\r\n ${state._declareLocalVar(y, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerYName, uvy, state)};\r\n ${state._declareLocalVar(z, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this._generateTextureSample(samplerZName, uvz, state)};\r\n \r\n // blend weights\r\n ${state._declareLocalVar(w, NodeMaterialBlockConnectionPointTypes.Vector3)} = pow(abs(${n}), vec3${suffix}(${sharpness}));\r\n\r\n // blend and return\r\n ${state._declareLocalVar(this._tempTextureRead, NodeMaterialBlockConnectionPointTypes.Vector4)} = (${x}*${w}.x + ${y}*${w}.y + ${z}*${w}.z) / (${w}.x + ${w}.y + ${w}.z); \r\n `;\r\n }\r\n\r\n private _generateConversionCode(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string): void {\r\n let vecSpecifier = \"\";\r\n\r\n if (\r\n state.shaderLanguage === ShaderLanguage.WGSL &&\r\n (output.type === NodeMaterialBlockConnectionPointTypes.Vector3 || output.type === NodeMaterialBlockConnectionPointTypes.Color3)\r\n ) {\r\n vecSpecifier = \"Vec3\";\r\n }\r\n\r\n if (swizzle !== \"a\") {\r\n // no conversion if the output is \"a\" (alpha)\r\n if (!this.texture || !this.texture.gammaSpace) {\r\n state.compilationString += `#ifdef ${this._linearDefineName}\r\n ${output.associatedVariableName} = toGammaSpace${vecSpecifier}(${output.associatedVariableName});\r\n #endif\r\n `;\r\n }\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\r\n ${output.associatedVariableName} = toLinearSpace${vecSpecifier}(${output.associatedVariableName});\r\n #endif\r\n `;\r\n }\r\n }\r\n\r\n private _writeOutput(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string) {\r\n let complement = \"\";\r\n\r\n if (!this.disableLevelMultiplication) {\r\n complement = ` * ${state.shaderLanguage === ShaderLanguage.WGSL ? \"uniforms.\" : \"\"}${this._textureInfoName}`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = ${this._tempTextureRead}.${swizzle}${complement};\\n`;\r\n this._generateConversionCode(state, output, swizzle);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (this.source.isConnected) {\r\n this._imageSource = this.source.connectedPoint!.ownerBlock as ImageSourceBlock;\r\n } else {\r\n this._imageSource = null;\r\n }\r\n\r\n this._textureInfoName = state._getFreeVariableName(\"textureInfoName\");\r\n\r\n this.level.associatedVariableName = (state.shaderLanguage === ShaderLanguage.WGSL ? \"uniforms.\" : \"\") + this._textureInfoName;\r\n\r\n this._tempTextureRead = state._getFreeVariableName(\"tempTextureRead\");\r\n this._linearDefineName = state._getFreeDefineName(\"ISLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"ISGAMMA\");\r\n\r\n if (!this._imageSource) {\r\n this._samplerName = state._getFreeVariableName(this.name + \"Texture\");\r\n\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state._emitUniformFromString(this._textureInfoName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._generateTextureLookup(state);\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints && output.name !== \"level\") {\r\n this._writeOutput(state, output, output.name);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\\n`;\r\n codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\\n`;\r\n codeString += `${this._codeVariableName}.disableLevelMultiplication = ${this.disableLevelMultiplication};\\n`;\r\n codeString += `${this._codeVariableName}.projectAsCube = ${this.projectAsCube};\\n`;\r\n\r\n if (!this.texture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n serializationObject.disableLevelMultiplication = this.disableLevelMultiplication;\r\n serializationObject.projectAsCube = this.projectAsCube;\r\n if (!this.hasImageSource && this.texture && !this.texture.isRenderTarget && this.texture.getClassName() !== \"VideoTexture\") {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n this.disableLevelMultiplication = !!serializationObject.disableLevelMultiplication;\r\n this.projectAsCube = !!serializationObject.projectAsCube;\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime && serializationObject.texture.url !== undefined) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TriPlanarBlock\", TriPlanarBlock);\r\n"]}