@babylonjs/core 7.41.0 → 7.41.1

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 (58) hide show
  1. package/Culling/Helper/computeShaderBoundingHelper.js +1 -0
  2. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  3. package/Culling/Helper/transformFeedbackBoundingHelper.js +1 -0
  4. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  5. package/Engines/abstractEngine.js +2 -2
  6. package/Engines/abstractEngine.js.map +1 -1
  7. package/Engines/thinEngine.js +1 -6
  8. package/Engines/thinEngine.js.map +1 -1
  9. package/Engines/webgpuEngine.js +1 -6
  10. package/Engines/webgpuEngine.js.map +1 -1
  11. package/Layers/effectLayer.js +1 -0
  12. package/Layers/effectLayer.js.map +1 -1
  13. package/Lights/Shadows/shadowGenerator.js +1 -0
  14. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  15. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +12 -3
  16. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  17. package/Materials/Node/nodeMaterial.d.ts +2 -0
  18. package/Materials/Node/nodeMaterial.js +2 -0
  19. package/Materials/Node/nodeMaterial.js.map +1 -1
  20. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  21. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  22. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  23. package/Materials/effect.js +1 -0
  24. package/Materials/effect.js.map +1 -1
  25. package/Materials/materialHelper.functions.js +10 -1
  26. package/Materials/materialHelper.functions.js.map +1 -1
  27. package/Materials/shaderMaterial.js +5 -1
  28. package/Materials/shaderMaterial.js.map +1 -1
  29. package/Materials/standardMaterial.d.ts +1 -0
  30. package/Materials/standardMaterial.js +1 -0
  31. package/Materials/standardMaterial.js.map +1 -1
  32. package/Meshes/mesh.js +1 -1
  33. package/Meshes/mesh.js.map +1 -1
  34. package/Meshes/subMesh.js +10 -2
  35. package/Meshes/subMesh.js.map +1 -1
  36. package/Morph/morphTarget.d.ts +4 -0
  37. package/Morph/morphTarget.js +16 -0
  38. package/Morph/morphTarget.js.map +1 -1
  39. package/Morph/morphTargetManager.d.ts +10 -0
  40. package/Morph/morphTargetManager.js +115 -96
  41. package/Morph/morphTargetManager.js.map +1 -1
  42. package/PostProcesses/volumetricLightScatteringPostProcess.js +1 -0
  43. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  44. package/Rendering/depthRenderer.js +1 -0
  45. package/Rendering/depthRenderer.js.map +1 -1
  46. package/Rendering/geometryBufferRenderer.js +1 -0
  47. package/Rendering/geometryBufferRenderer.js.map +1 -1
  48. package/Rendering/outlineRenderer.js +1 -0
  49. package/Rendering/outlineRenderer.js.map +1 -1
  50. package/Shaders/ShadersInclude/morphTargetsVertex.js +6 -1
  51. package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
  52. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +2 -0
  53. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
  54. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +6 -1
  55. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
  56. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +2 -0
  57. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
  58. package/package.json +1 -1
@@ -195,6 +195,7 @@ export class MorphTargetsBlock extends NodeMaterialBlock {
195
195
  const state = vertexShaderState;
196
196
  const repeatCount = defines.NUM_MORPH_INFLUENCERS;
197
197
  const manager = mesh.morphTargetManager;
198
+ const hasPositions = manager && manager.supportsPositions;
198
199
  const hasNormals = manager && manager.supportsNormals && defines["NORMAL"];
199
200
  const hasTangents = manager && manager.supportsTangents && defines["TANGENT"];
200
201
  const hasUVs = manager && manager.supportsUVs && defines["UV1"];
@@ -210,8 +211,12 @@ export class MorphTargetsBlock extends NodeMaterialBlock {
210
211
  injectionCode += `for (${isWebGPU ? "var" : "int"} i = 0; i < NUM_MORPH_INFLUENCERS; i++) {\n`;
211
212
  injectionCode += `if (i >= ${uniformsPrefix}morphTargetCount) { break; }\n`;
212
213
  injectionCode += `vertexID = ${isWebGPU ? "f32(vertexInputs.vertexIndex" : "float(gl_VertexID"}) * ${uniformsPrefix}morphTargetTextureInfo.x;\n`;
213
- injectionCode += `${positionOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID) - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\n`;
214
- injectionCode += `vertexID += 1.0;\n`;
214
+ if (hasPositions) {
215
+ injectionCode += `#ifdef MORPHTARGETS_POSITION\n`;
216
+ injectionCode += `${positionOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID) - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\n`;
217
+ injectionCode += `vertexID += 1.0;\n`;
218
+ injectionCode += `#endif\n`;
219
+ }
215
220
  if (hasNormals) {
216
221
  injectionCode += `#ifdef MORPHTARGETS_NORMAL\n`;
217
222
  injectionCode += `${normalOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID) - ${normal.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\n`;
@@ -245,7 +250,11 @@ export class MorphTargetsBlock extends NodeMaterialBlock {
245
250
  }
246
251
  else {
247
252
  for (let index = 0; index < repeatCount; index++) {
248
- injectionCode += `${positionOutput.associatedVariableName} += (position${index} - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[${index}];\n`;
253
+ if (hasPositions) {
254
+ injectionCode += `#ifdef MORPHTARGETS_POSITION\n`;
255
+ injectionCode += `${positionOutput.associatedVariableName} += (position${index} - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[${index}];\n`;
256
+ injectionCode += `#endif\n`;
257
+ }
249
258
  if (hasNormals) {
250
259
  injectionCode += `#ifdef MORPHTARGETS_NORMAL\n`;
251
260
  injectionCode += `${normalOutput.associatedVariableName} += (normal${index} - ${normal.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[${index}];\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"morphTargetsBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Vertex/morphTargetsBlock.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 type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { VertexBuffer } from \"../../../../Buffers/buffer\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\nimport { BindMorphTargetParameters, PrepareDefinesForMorphTargets } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add morph targets support to vertex shader\r\n */\r\nexport class MorphTargetsBlock extends NodeMaterialBlock {\r\n private _repeatableContentAnchor: string;\r\n\r\n /**\r\n * Create a new MorphTargetsBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"normal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"tangent\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.tangent.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color4 | NodeMaterialBlockConnectionPointTypes.Vector4 | NodeMaterialBlockConnectionPointTypes.Vector3\r\n );\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerInput(\"uv2\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerOutput(\"positionOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"normalOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"tangentOutput\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOutput\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerOutput(\"uv2Output\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"MorphTargetsBlock\";\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 tangent input component\r\n */\r\n public get tangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the uv2 input component\r\n */\r\n public get uv2(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the position output component\r\n */\r\n public get positionOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal output component\r\n */\r\n public get normalOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the tangent output component\r\n */\r\n public get tangentOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv output component\r\n */\r\n public get uvOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the uv2 output component\r\n */\r\n public get uv2Output(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"morphTargetInfluences\");\r\n\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertex\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertex\"),\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertexDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertexGlobal\"),\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.position.isConnected) {\r\n let positionInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"position\" && additionalFilteringInfo(b));\r\n\r\n if (!positionInput) {\r\n positionInput = new InputBlock(\"position\");\r\n positionInput.setAsAttribute();\r\n }\r\n positionInput.output.connectTo(this.position);\r\n }\r\n if (!this.normal.isConnected) {\r\n let normalInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"normal\" && additionalFilteringInfo(b));\r\n\r\n if (!normalInput) {\r\n normalInput = new InputBlock(\"normal\");\r\n normalInput.setAsAttribute(\"normal\");\r\n }\r\n normalInput.output.connectTo(this.normal);\r\n }\r\n if (!this.tangent.isConnected) {\r\n let tangentInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"tangent\" && additionalFilteringInfo(b));\r\n\r\n if (!tangentInput) {\r\n tangentInput = new InputBlock(\"tangent\");\r\n tangentInput.setAsAttribute(\"tangent\");\r\n }\r\n tangentInput.output.connectTo(this.tangent);\r\n }\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute(\"uv\");\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n if (!this.uv2.isConnected) {\r\n let uv2Input = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv2\" && additionalFilteringInfo(b));\r\n\r\n if (!uv2Input) {\r\n uv2Input = new InputBlock(\"uv2\");\r\n uv2Input.setAsAttribute(\"uv2\");\r\n }\r\n uv2Input.output.connectTo(this.uv2);\r\n }\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if ((<Mesh>mesh).morphTargetManager) {\r\n const morphTargetManager = (<Mesh>mesh).morphTargetManager;\r\n\r\n if (morphTargetManager?.isUsingTextureForTargets && (morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers) !== defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n defines.markAsAttributesDirty();\r\n }\r\n }\r\n\r\n if (!defines._areAttributesDirty) {\r\n return;\r\n }\r\n\r\n PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (mesh && mesh.morphTargetManager && mesh.morphTargetManager.numInfluencers > 0) {\r\n BindMorphTargetParameters(mesh, effect);\r\n\r\n if (mesh.morphTargetManager.isUsingTextureForTargets) {\r\n mesh.morphTargetManager._bind(effect);\r\n }\r\n }\r\n }\r\n\r\n public override replaceRepeatableContent(\r\n vertexShaderState: NodeMaterialBuildState,\r\n fragmentShaderState: NodeMaterialBuildState,\r\n mesh: AbstractMesh,\r\n defines: NodeMaterialDefines\r\n ) {\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const uv2 = this.uv2;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const uv2Output = this.uv2Output;\r\n const state = vertexShaderState;\r\n const repeatCount = defines.NUM_MORPH_INFLUENCERS as number;\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n const hasNormals = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n const hasTangents = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n const hasUVs = manager && manager.supportsUVs && defines[\"UV1\"];\r\n const hasUV2s = manager && manager.supportsUV2s && defines[\"UV2\"];\r\n\r\n let injectionCode = \"\";\r\n\r\n if (manager?.isUsingTextureForTargets && repeatCount > 0) {\r\n injectionCode += `${state._declareLocalVar(\"vertexID\", NodeMaterialBlockConnectionPointTypes.Float)};\\n`;\r\n }\r\n\r\n injectionCode += `#ifdef MORPHTARGETS\\n`;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const uniformsPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `for (${isWebGPU ? \"var\" : \"int\"} i = 0; i < NUM_MORPH_INFLUENCERS; i++) {\\n`;\r\n injectionCode += `if (i >= ${uniformsPrefix}morphTargetCount) { break; }\\n`;\r\n\r\n injectionCode += `vertexID = ${isWebGPU ? \"f32(vertexInputs.vertexIndex\" : \"float(gl_VertexID\"}) * ${uniformsPrefix}morphTargetTextureInfo.x;\\n`;\r\n injectionCode += `${positionOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID) - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n\r\n if (hasNormals) {\r\n injectionCode += `#ifdef MORPHTARGETS_NORMAL\\n`;\r\n injectionCode += `${normalOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID) - ${normal.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUVs) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV\\n`;\r\n injectionCode += `${uvOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID).xy - ${uv.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasTangents) {\r\n injectionCode += `#ifdef MORPHTARGETS_TANGENT\\n`;\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (readVector3FromRawSampler(i, vertexID) - ${tangent.associatedVariableName}.xyz) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n\r\n if (tangent.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = ${tangent.associatedVariableName}.w;\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = 1.;\\n`;\r\n }\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUV2s) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV2\\n`;\r\n injectionCode += `${uv2Output.associatedVariableName} += (readVector3FromRawSampler(i, vertexID).xy - ${uv2.associatedVariableName}) * morphTargetInfluences[i];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n injectionCode += \"}\\n\";\r\n } else {\r\n for (let index = 0; index < repeatCount; index++) {\r\n injectionCode += `${positionOutput.associatedVariableName} += (position${index} - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n\r\n if (hasNormals) {\r\n injectionCode += `#ifdef MORPHTARGETS_NORMAL\\n`;\r\n injectionCode += `${normalOutput.associatedVariableName} += (normal${index} - ${normal.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUVs) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV\\n`;\r\n injectionCode += `${uvOutput.associatedVariableName}.xy += (uv_${index} - ${uv.associatedVariableName}.xy) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasTangents) {\r\n injectionCode += `#ifdef MORPHTARGETS_TANGENT\\n`;\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (tangent${index} - ${tangent.associatedVariableName}.xyz) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n\r\n if (tangent.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = ${tangent.associatedVariableName}.w;\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = 1.;\\n`;\r\n }\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUV2s) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV2\\n`;\r\n injectionCode += `${uv2Output.associatedVariableName}.xy += (uv2_${index} - ${uv2.associatedVariableName}.xy) * morphTargetInfluences[${index}];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n }\r\n }\r\n injectionCode += `#endif\\n`;\r\n\r\n state.compilationString = state.compilationString.replace(this._repeatableContentAnchor, injectionCode);\r\n\r\n if (repeatCount > 0) {\r\n for (let index = 0; index < repeatCount; index++) {\r\n state.attributes.push(VertexBuffer.PositionKind + index);\r\n\r\n if (hasNormals) {\r\n state.attributes.push(VertexBuffer.NormalKind + index);\r\n }\r\n\r\n if (hasTangents) {\r\n state.attributes.push(VertexBuffer.TangentKind + index);\r\n }\r\n\r\n if (hasUVs) {\r\n state.attributes.push(VertexBuffer.UVKind + \"_\" + index);\r\n }\r\n\r\n if (hasUV2s) {\r\n state.attributes.push(VertexBuffer.UV2Kind + \"_\" + index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n // Register for defines\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n // Register for binding\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n // Register for repeatable content generation\r\n state.sharedData.repeatableContentBlocks.push(this);\r\n\r\n // Emit code\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const uv2 = this.uv2;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const uv2Output = this.uv2Output;\r\n const comments = `//${this.name}`;\r\n\r\n state.uniforms.push(\"morphTargetInfluences\");\r\n state.uniforms.push(\"morphTargetCount\");\r\n state.uniforms.push(\"morphTargetTextureInfo\");\r\n state.uniforms.push(\"morphTargetTextureIndices\");\r\n state.samplers.push(\"morphTargets\");\r\n\r\n state._emitFunctionFromInclude(\"morphTargetsVertexGlobalDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"morphTargetsVertexDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousMorphTargets\",\r\n });\r\n\r\n state.compilationString += `${state._declareOutput(positionOutput)} = ${position.associatedVariableName};\\n`;\r\n state.compilationString += `#ifdef NORMAL\\n`;\r\n state.compilationString += `${state._declareOutput(normalOutput)} = ${normal.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(normalOutput)} = vec3(0., 0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#ifdef TANGENT\\n`;\r\n state.compilationString += `${state._declareOutput(tangentOutput)} = ${tangent.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(tangentOutput)} = vec4(0., 0., 0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#ifdef UV1\\n`;\r\n state.compilationString += `${state._declareOutput(uvOutput)} = ${uv.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(uvOutput)} = vec2(0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#ifdef UV2\\n`;\r\n state.compilationString += `${state._declareOutput(uv2Output)} = ${uv2.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(uv2Output)} = vec2(0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n // Repeatable content\r\n this._repeatableContentAnchor = state._repeatableContentAnchor;\r\n state.compilationString += this._repeatableContentAnchor;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MorphTargetsBlock\", MorphTargetsBlock);\r\n"]}
1
+ {"version":3,"file":"morphTargetsBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Vertex/morphTargetsBlock.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 type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { VertexBuffer } from \"../../../../Buffers/buffer\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\nimport { BindMorphTargetParameters, PrepareDefinesForMorphTargets } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add morph targets support to vertex shader\r\n */\r\nexport class MorphTargetsBlock extends NodeMaterialBlock {\r\n private _repeatableContentAnchor: string;\r\n\r\n /**\r\n * Create a new MorphTargetsBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"normal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"tangent\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.tangent.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color4 | NodeMaterialBlockConnectionPointTypes.Vector4 | NodeMaterialBlockConnectionPointTypes.Vector3\r\n );\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerInput(\"uv2\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerOutput(\"positionOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"normalOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"tangentOutput\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOutput\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerOutput(\"uv2Output\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"MorphTargetsBlock\";\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 tangent input component\r\n */\r\n public get tangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the uv2 input component\r\n */\r\n public get uv2(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the position output component\r\n */\r\n public get positionOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal output component\r\n */\r\n public get normalOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the tangent output component\r\n */\r\n public get tangentOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv output component\r\n */\r\n public get uvOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the uv2 output component\r\n */\r\n public get uv2Output(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"morphTargetInfluences\");\r\n\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertex\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertex\"),\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertexDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertexGlobal\"),\r\n import(\"../../../../Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.position.isConnected) {\r\n let positionInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"position\" && additionalFilteringInfo(b));\r\n\r\n if (!positionInput) {\r\n positionInput = new InputBlock(\"position\");\r\n positionInput.setAsAttribute();\r\n }\r\n positionInput.output.connectTo(this.position);\r\n }\r\n if (!this.normal.isConnected) {\r\n let normalInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"normal\" && additionalFilteringInfo(b));\r\n\r\n if (!normalInput) {\r\n normalInput = new InputBlock(\"normal\");\r\n normalInput.setAsAttribute(\"normal\");\r\n }\r\n normalInput.output.connectTo(this.normal);\r\n }\r\n if (!this.tangent.isConnected) {\r\n let tangentInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"tangent\" && additionalFilteringInfo(b));\r\n\r\n if (!tangentInput) {\r\n tangentInput = new InputBlock(\"tangent\");\r\n tangentInput.setAsAttribute(\"tangent\");\r\n }\r\n tangentInput.output.connectTo(this.tangent);\r\n }\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute(\"uv\");\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n if (!this.uv2.isConnected) {\r\n let uv2Input = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv2\" && additionalFilteringInfo(b));\r\n\r\n if (!uv2Input) {\r\n uv2Input = new InputBlock(\"uv2\");\r\n uv2Input.setAsAttribute(\"uv2\");\r\n }\r\n uv2Input.output.connectTo(this.uv2);\r\n }\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if ((<Mesh>mesh).morphTargetManager) {\r\n const morphTargetManager = (<Mesh>mesh).morphTargetManager;\r\n\r\n if (morphTargetManager?.isUsingTextureForTargets && (morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers) !== defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n defines.markAsAttributesDirty();\r\n }\r\n }\r\n\r\n if (!defines._areAttributesDirty) {\r\n return;\r\n }\r\n\r\n PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (mesh && mesh.morphTargetManager && mesh.morphTargetManager.numInfluencers > 0) {\r\n BindMorphTargetParameters(mesh, effect);\r\n\r\n if (mesh.morphTargetManager.isUsingTextureForTargets) {\r\n mesh.morphTargetManager._bind(effect);\r\n }\r\n }\r\n }\r\n\r\n public override replaceRepeatableContent(\r\n vertexShaderState: NodeMaterialBuildState,\r\n fragmentShaderState: NodeMaterialBuildState,\r\n mesh: AbstractMesh,\r\n defines: NodeMaterialDefines\r\n ) {\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const uv2 = this.uv2;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const uv2Output = this.uv2Output;\r\n const state = vertexShaderState;\r\n const repeatCount = defines.NUM_MORPH_INFLUENCERS as number;\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n const hasPositions = manager && manager.supportsPositions;\r\n const hasNormals = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n const hasTangents = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n const hasUVs = manager && manager.supportsUVs && defines[\"UV1\"];\r\n const hasUV2s = manager && manager.supportsUV2s && defines[\"UV2\"];\r\n\r\n let injectionCode = \"\";\r\n\r\n if (manager?.isUsingTextureForTargets && repeatCount > 0) {\r\n injectionCode += `${state._declareLocalVar(\"vertexID\", NodeMaterialBlockConnectionPointTypes.Float)};\\n`;\r\n }\r\n\r\n injectionCode += `#ifdef MORPHTARGETS\\n`;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const uniformsPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `for (${isWebGPU ? \"var\" : \"int\"} i = 0; i < NUM_MORPH_INFLUENCERS; i++) {\\n`;\r\n injectionCode += `if (i >= ${uniformsPrefix}morphTargetCount) { break; }\\n`;\r\n\r\n injectionCode += `vertexID = ${isWebGPU ? \"f32(vertexInputs.vertexIndex\" : \"float(gl_VertexID\"}) * ${uniformsPrefix}morphTargetTextureInfo.x;\\n`;\r\n if (hasPositions) {\r\n injectionCode += `#ifdef MORPHTARGETS_POSITION\\n`;\r\n injectionCode += `${positionOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID) - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasNormals) {\r\n injectionCode += `#ifdef MORPHTARGETS_NORMAL\\n`;\r\n injectionCode += `${normalOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID) - ${normal.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUVs) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV\\n`;\r\n injectionCode += `${uvOutput.associatedVariableName} += (readVector3FromRawSampler(i, vertexID).xy - ${uv.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasTangents) {\r\n injectionCode += `#ifdef MORPHTARGETS_TANGENT\\n`;\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (readVector3FromRawSampler(i, vertexID) - ${tangent.associatedVariableName}.xyz) * ${uniformsPrefix}morphTargetInfluences[i];\\n`;\r\n\r\n if (tangent.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = ${tangent.associatedVariableName}.w;\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = 1.;\\n`;\r\n }\r\n injectionCode += `vertexID += 1.0;\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUV2s) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV2\\n`;\r\n injectionCode += `${uv2Output.associatedVariableName} += (readVector3FromRawSampler(i, vertexID).xy - ${uv2.associatedVariableName}) * morphTargetInfluences[i];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n injectionCode += \"}\\n\";\r\n } else {\r\n for (let index = 0; index < repeatCount; index++) {\r\n if (hasPositions) {\r\n injectionCode += `#ifdef MORPHTARGETS_POSITION\\n`;\r\n injectionCode += `${positionOutput.associatedVariableName} += (position${index} - ${position.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasNormals) {\r\n injectionCode += `#ifdef MORPHTARGETS_NORMAL\\n`;\r\n injectionCode += `${normalOutput.associatedVariableName} += (normal${index} - ${normal.associatedVariableName}) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUVs) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV\\n`;\r\n injectionCode += `${uvOutput.associatedVariableName}.xy += (uv_${index} - ${uv.associatedVariableName}.xy) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasTangents) {\r\n injectionCode += `#ifdef MORPHTARGETS_TANGENT\\n`;\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (tangent${index} - ${tangent.associatedVariableName}.xyz) * ${uniformsPrefix}morphTargetInfluences[${index}];\\n`;\r\n\r\n if (tangent.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = ${tangent.associatedVariableName}.w;\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = 1.;\\n`;\r\n }\r\n injectionCode += `#endif\\n`;\r\n }\r\n\r\n if (hasUV2s) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV2\\n`;\r\n injectionCode += `${uv2Output.associatedVariableName}.xy += (uv2_${index} - ${uv2.associatedVariableName}.xy) * morphTargetInfluences[${index}];\\n`;\r\n injectionCode += `#endif\\n`;\r\n }\r\n }\r\n }\r\n injectionCode += `#endif\\n`;\r\n\r\n state.compilationString = state.compilationString.replace(this._repeatableContentAnchor, injectionCode);\r\n\r\n if (repeatCount > 0) {\r\n for (let index = 0; index < repeatCount; index++) {\r\n state.attributes.push(VertexBuffer.PositionKind + index);\r\n\r\n if (hasNormals) {\r\n state.attributes.push(VertexBuffer.NormalKind + index);\r\n }\r\n\r\n if (hasTangents) {\r\n state.attributes.push(VertexBuffer.TangentKind + index);\r\n }\r\n\r\n if (hasUVs) {\r\n state.attributes.push(VertexBuffer.UVKind + \"_\" + index);\r\n }\r\n\r\n if (hasUV2s) {\r\n state.attributes.push(VertexBuffer.UV2Kind + \"_\" + index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n // Register for defines\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n // Register for binding\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n // Register for repeatable content generation\r\n state.sharedData.repeatableContentBlocks.push(this);\r\n\r\n // Emit code\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const uv2 = this.uv2;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const uv2Output = this.uv2Output;\r\n const comments = `//${this.name}`;\r\n\r\n state.uniforms.push(\"morphTargetInfluences\");\r\n state.uniforms.push(\"morphTargetCount\");\r\n state.uniforms.push(\"morphTargetTextureInfo\");\r\n state.uniforms.push(\"morphTargetTextureIndices\");\r\n state.samplers.push(\"morphTargets\");\r\n\r\n state._emitFunctionFromInclude(\"morphTargetsVertexGlobalDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"morphTargetsVertexDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousMorphTargets\",\r\n });\r\n\r\n state.compilationString += `${state._declareOutput(positionOutput)} = ${position.associatedVariableName};\\n`;\r\n state.compilationString += `#ifdef NORMAL\\n`;\r\n state.compilationString += `${state._declareOutput(normalOutput)} = ${normal.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(normalOutput)} = vec3(0., 0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#ifdef TANGENT\\n`;\r\n state.compilationString += `${state._declareOutput(tangentOutput)} = ${tangent.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(tangentOutput)} = vec4(0., 0., 0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#ifdef UV1\\n`;\r\n state.compilationString += `${state._declareOutput(uvOutput)} = ${uv.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(uvOutput)} = vec2(0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#ifdef UV2\\n`;\r\n state.compilationString += `${state._declareOutput(uv2Output)} = ${uv2.associatedVariableName};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(uv2Output)} = vec2(0., 0.);\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n // Repeatable content\r\n this._repeatableContentAnchor = state._repeatableContentAnchor;\r\n state.compilationString += this._repeatableContentAnchor;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MorphTargetsBlock\", MorphTargetsBlock);\r\n"]}
@@ -101,6 +101,8 @@ export declare class NodeMaterialDefines extends MaterialDefines implements IIma
101
101
  BONETEXTURE: boolean;
102
102
  /** MORPH TARGETS */
103
103
  MORPHTARGETS: boolean;
104
+ /** Morph target position */
105
+ MORPHTARGETS_POSITION: boolean;
104
106
  /** Morph target normal */
105
107
  MORPHTARGETS_NORMAL: boolean;
106
108
  /** Morph target tangent */
@@ -104,6 +104,8 @@ export class NodeMaterialDefines extends MaterialDefines {
104
104
  this.BONETEXTURE = false;
105
105
  /** MORPH TARGETS */
106
106
  this.MORPHTARGETS = false;
107
+ /** Morph target position */
108
+ this.MORPHTARGETS_POSITION = false;
107
109
  /** Morph target normal */
108
110
  this.MORPHTARGETS_NORMAL = false;
109
111
  /** Morph target tangent */