@babylonjs/loaders 9.26.0 → 9.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/FBX/fbxConstraintBehavior.d.ts +188 -0
  2. package/FBX/fbxConstraintBehavior.js +532 -0
  3. package/FBX/fbxConstraintBehavior.js.map +1 -0
  4. package/FBX/fbxFileLoader.pure.d.ts +175 -6
  5. package/FBX/fbxFileLoader.pure.js +1521 -286
  6. package/FBX/fbxFileLoader.pure.js.map +1 -1
  7. package/FBX/index.d.ts +4 -1
  8. package/FBX/index.js +1 -0
  9. package/FBX/index.js.map +1 -1
  10. package/FBX/interpreter/animation.d.ts +73 -33
  11. package/FBX/interpreter/animation.js +620 -223
  12. package/FBX/interpreter/animation.js.map +1 -1
  13. package/FBX/interpreter/animationCurve.d.ts +91 -0
  14. package/FBX/interpreter/animationCurve.js +623 -0
  15. package/FBX/interpreter/animationCurve.js.map +1 -0
  16. package/FBX/interpreter/blendShapes.js +9 -18
  17. package/FBX/interpreter/blendShapes.js.map +1 -1
  18. package/FBX/interpreter/connections.d.ts +1 -1
  19. package/FBX/interpreter/connections.js +173 -34
  20. package/FBX/interpreter/connections.js.map +1 -1
  21. package/FBX/interpreter/constraints.d.ts +68 -0
  22. package/FBX/interpreter/constraints.js +143 -0
  23. package/FBX/interpreter/constraints.js.map +1 -0
  24. package/FBX/interpreter/fbxInterpreter.d.ts +89 -4
  25. package/FBX/interpreter/fbxInterpreter.js +474 -122
  26. package/FBX/interpreter/fbxInterpreter.js.map +1 -1
  27. package/FBX/interpreter/geometry.d.ts +1 -1
  28. package/FBX/interpreter/geometry.js +150 -92
  29. package/FBX/interpreter/geometry.js.map +1 -1
  30. package/FBX/interpreter/legacyDocument.d.ts +11 -0
  31. package/FBX/interpreter/legacyDocument.js +425 -0
  32. package/FBX/interpreter/legacyDocument.js.map +1 -0
  33. package/FBX/interpreter/materialModel.d.ts +71 -0
  34. package/FBX/interpreter/materialModel.js +622 -0
  35. package/FBX/interpreter/materialModel.js.map +1 -0
  36. package/FBX/interpreter/materials.d.ts +13 -1
  37. package/FBX/interpreter/materials.js +88 -5
  38. package/FBX/interpreter/materials.js.map +1 -1
  39. package/FBX/interpreter/nodeTransform.d.ts +32 -0
  40. package/FBX/interpreter/nodeTransform.js +54 -0
  41. package/FBX/interpreter/nodeTransform.js.map +1 -0
  42. package/FBX/interpreter/nurbs.d.ts +99 -0
  43. package/FBX/interpreter/nurbs.js +627 -0
  44. package/FBX/interpreter/nurbs.js.map +1 -0
  45. package/FBX/interpreter/propertyTemplates.d.ts +23 -0
  46. package/FBX/interpreter/propertyTemplates.js +109 -2
  47. package/FBX/interpreter/propertyTemplates.js.map +1 -1
  48. package/FBX/interpreter/rig.js +16 -0
  49. package/FBX/interpreter/rig.js.map +1 -1
  50. package/FBX/interpreter/sceneDiagnostics.js +28 -3
  51. package/FBX/interpreter/sceneDiagnostics.js.map +1 -1
  52. package/FBX/interpreter/skeleton.d.ts +4 -18
  53. package/FBX/interpreter/skeleton.js +16 -94
  54. package/FBX/interpreter/skeleton.js.map +1 -1
  55. package/FBX/parsers/fbxAsciiParser.js +119 -9
  56. package/FBX/parsers/fbxAsciiParser.js.map +1 -1
  57. package/FBX/parsers/fbxBinaryParser.js +74 -22
  58. package/FBX/parsers/fbxBinaryParser.js.map +1 -1
  59. package/FBX/pure.d.ts +1 -0
  60. package/FBX/pure.js +1 -0
  61. package/FBX/pure.js.map +1 -1
  62. package/FBX/types/fbxTypes.d.ts +18 -2
  63. package/FBX/types/fbxTypes.js +40 -12
  64. package/FBX/types/fbxTypes.js.map +1 -1
  65. package/SPLAT/gaussianSplattingStream.d.ts +79 -25
  66. package/SPLAT/gaussianSplattingStream.js +320 -95
  67. package/SPLAT/gaussianSplattingStream.js.map +1 -1
  68. package/USD/usdCommandProtocol.d.ts +20 -4
  69. package/USD/usdCommandProtocol.js +25 -3
  70. package/USD/usdCommandProtocol.js.map +1 -1
  71. package/USD/usdFileLoader.pure.js +2 -0
  72. package/USD/usdFileLoader.pure.js.map +1 -1
  73. package/USD/usdSceneMaterializer.js +430 -92
  74. package/USD/usdSceneMaterializer.js.map +1 -1
  75. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.d.ts +110 -3
  76. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js +468 -74
  77. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js.map +1 -1
  78. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphEventReferenceBlock.d.ts +47 -0
  79. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphEventReferenceBlock.js +68 -0
  80. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphEventReferenceBlock.js.map +1 -0
  81. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.d.ts +2 -2
  82. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.js +1 -1
  83. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.js.map +1 -1
  84. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphObjectReferenceBlock.d.ts +24 -0
  85. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphObjectReferenceBlock.js +38 -0
  86. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphObjectReferenceBlock.js.map +1 -0
  87. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphUnsupportedInteractivityBlock.d.ts +41 -0
  88. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphUnsupportedInteractivityBlock.js +63 -0
  89. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphUnsupportedInteractivityBlock.js.map +1 -0
  90. package/glTF/2.0/Extensions/KHR_interactivity/index.d.ts +5 -0
  91. package/glTF/2.0/Extensions/KHR_interactivity/index.js +5 -0
  92. package/glTF/2.0/Extensions/KHR_interactivity/index.js.map +1 -1
  93. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.d.ts +112 -0
  94. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js +773 -0
  95. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js.map +1 -0
  96. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.d.ts +18 -10
  97. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js +299 -54
  98. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js.map +1 -1
  99. package/glTF/2.0/Extensions/KHR_interactivity/interactivityHostResolver.d.ts +2 -1
  100. package/glTF/2.0/Extensions/KHR_interactivity/interactivityHostResolver.js +7 -2
  101. package/glTF/2.0/Extensions/KHR_interactivity/interactivityHostResolver.js.map +1 -1
  102. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeState.d.ts +24 -0
  103. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeState.js +89 -0
  104. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeState.js.map +1 -0
  105. package/glTF/2.0/Extensions/KHR_interactivity/pure.d.ts +5 -0
  106. package/glTF/2.0/Extensions/KHR_interactivity/pure.js +5 -0
  107. package/glTF/2.0/Extensions/KHR_interactivity/pure.js.map +1 -1
  108. package/glTF/2.0/Extensions/KHR_interactivity.pure.d.ts +55 -1
  109. package/glTF/2.0/Extensions/KHR_interactivity.pure.js +124 -76
  110. package/glTF/2.0/Extensions/KHR_interactivity.pure.js.map +1 -1
  111. package/glTF/2.0/Extensions/KHR_interactivity.types.d.ts +18 -1
  112. package/glTF/2.0/Extensions/KHR_interactivity.types.js.map +1 -1
  113. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.d.ts +2 -0
  114. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js +114 -56
  115. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js.map +1 -1
  116. package/glTF/2.0/Extensions/KHR_node_selectability.pure.d.ts +2 -0
  117. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js +80 -35
  118. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js.map +1 -1
  119. package/glTF/2.0/Extensions/interactivityRefPathToObjectConverter.js +3 -2
  120. package/glTF/2.0/Extensions/interactivityRefPathToObjectConverter.js.map +1 -1
  121. package/glTF/2.0/Extensions/objectModelMapping.d.ts +4 -2
  122. package/glTF/2.0/Extensions/objectModelMapping.js +33 -4
  123. package/glTF/2.0/Extensions/objectModelMapping.js.map +1 -1
  124. package/glTF/2.0/glTFLoader.pure.d.ts +1 -1
  125. package/glTF/2.0/glTFLoader.pure.js +9 -4
  126. package/glTF/2.0/glTFLoader.pure.js.map +1 -1
  127. package/glTF/2.0/glTFLoaderExtension.d.ts +2 -1
  128. package/glTF/2.0/glTFLoaderExtension.js.map +1 -1
  129. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"usdSceneMaterializer.js","sourceRoot":"","sources":["../../../../dev/loaders/src/USD/usdSceneMaterializer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { Animation } from \"core/Animations/animation.pure\";\nimport { AnimationGroup } from \"core/Animations/animationGroup.pure\";\nimport { AbstractAssetContainer, AssetContainer } from \"core/assetContainer\";\nimport { Bone } from \"core/Bones/bone\";\nimport { Skeleton } from \"core/Bones/skeleton\";\nimport { Color3 } from \"core/Maths/math.color.pure\";\nimport { Matrix, Quaternion, Vector3 } from \"core/Maths/math.vector.pure\";\nimport { Material } from \"core/Materials/material.pure\";\nimport { MultiMaterial } from \"core/Materials/multiMaterial.pure\";\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial.pure\";\nimport { Texture } from \"core/Materials/Textures/texture.pure\";\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder.pure\";\nimport { CreateCylinder } from \"core/Meshes/Builders/cylinderBuilder.pure\";\nimport { CreateSphere } from \"core/Meshes/Builders/sphereBuilder.pure\";\nimport { Mesh } from \"core/Meshes/mesh.pure\";\nimport { SubMesh } from \"core/Meshes/subMesh\";\nimport { TransformNode } from \"core/Meshes/transformNode.pure\";\nimport { VertexData } from \"core/Meshes/mesh.vertexData\";\nimport { type Scene } from \"core/scene.pure\";\nimport { type IAssetContainer } from \"core/IAssetContainer\";\n\nimport {\n AnalyticPrimitiveType,\n AnimationProperty,\n AnimationTarget,\n Command,\n GeometryFlags,\n MaterialFlags,\n MeshFlags,\n MISSING_OFFSET,\n PayloadReader,\n PrimitiveAxis,\n readCommands,\n} from \"./usdCommandProtocol\";\n\ninterface GeometryDescriptor {\n vertexCount: number;\n indexCount: number;\n flags: number;\n positions: number;\n normals: number;\n tangents: number;\n uv0: number;\n colors: number;\n joints0: number;\n weights0: number;\n joints1: number;\n weights1: number;\n indices: number;\n influences: number;\n}\n\nclass DirectAssetContainer extends AbstractAssetContainer {\n public dispose(): void {\n for (const animationGroup of this.animationGroups.splice(0)) {\n animationGroup.dispose();\n }\n for (const mesh of this.meshes.splice(0)) {\n mesh.dispose();\n }\n for (const skeleton of this.skeletons.splice(0)) {\n skeleton.dispose();\n }\n for (const multiMaterial of this.multiMaterials.splice(0)) {\n multiMaterial.dispose();\n }\n for (const material of this.materials.splice(0)) {\n material.dispose();\n }\n for (const geometry of this.geometries.splice(0)) {\n geometry.dispose();\n }\n for (const transformNode of this.transformNodes.splice(0)) {\n transformNode.dispose();\n }\n for (const texture of this.textures.splice(0)) {\n texture.dispose();\n }\n this.rootNodes.length = 0;\n }\n}\n\nexport interface MaterializationResult {\n container: AbstractAssetContainer & { dispose(): void };\n materializeMs: number;\n}\n\nconst decoder = new TextDecoder();\nconst NODE_MATRIX_PROPERTY = \"__babylonUsdLocalMatrix\";\n\nfunction assertRange(data: ArrayBuffer, offset: number, count: number, bytesPerElement: number, label: string): void {\n if (\n !Number.isInteger(offset) ||\n !Number.isInteger(count) ||\n offset < 0 ||\n count < 0 ||\n offset % Math.min(bytesPerElement, 4) !== 0 ||\n count > Math.floor((data.byteLength - offset) / bytesPerElement)\n ) {\n throw new Error(`Invalid ${label} range in OpenUSD Babylon data buffer.`);\n }\n}\n\nfunction stringAt(data: ArrayBuffer, offset: number, length: number): string {\n assertRange(data, offset, length, 1, \"string\");\n return decoder.decode(new Uint8Array(data, offset, length));\n}\n\nfunction matrixAt(data: ArrayBuffer, offset: number): Matrix {\n assertRange(data, offset, 16, 4, \"matrix\");\n const values = new Float32Array(data, offset, 16);\n return Matrix.FromValues(\n values[0],\n values[1],\n values[2],\n values[3],\n values[4],\n values[5],\n values[6],\n values[7],\n values[8],\n values[9],\n values[10],\n values[11],\n values[12],\n values[13],\n values[14],\n values[15]\n );\n}\n\nfunction mimeType(value: number): string {\n switch (value) {\n case 2:\n return \"image/jpeg\";\n case 3:\n return \"image/bmp\";\n case 4:\n return \"image/webp\";\n default:\n return \"image/png\";\n }\n}\n\nfunction wrapMode(value: number): number {\n switch (value) {\n case 0:\n return Texture.CLAMP_ADDRESSMODE;\n case 1:\n return Texture.WRAP_ADDRESSMODE;\n case 2:\n return Texture.MIRROR_ADDRESSMODE;\n default:\n throw new Error(`Invalid texture wrap mode ${value}.`);\n }\n}\n\nexport async function materializeCommandBuffers(\n scene: Scene,\n commandBuffer: ArrayBuffer,\n dataBuffer: ArrayBuffer,\n addToScene: boolean,\n signal?: AbortSignal\n): Promise<MaterializationResult> {\n signal?.throwIfAborted();\n const started = performance.now();\n const commands = readCommands(commandBuffer);\n const container = addToScene ? new DirectAssetContainer() : new AssetContainer(scene);\n const nodes = new Map<number, TransformNode>();\n const pendingParents: Array<{ node: TransformNode; parentId: number }> = [];\n const textures = new Map<number, Texture>();\n const materials = new Map<number, PBRMaterial>();\n const doubleSidedMaterials = new Map<number, PBRMaterial>();\n const skeletons = new Map<number, Skeleton>();\n const bones = new Map<number, Bone>();\n const geometries = new Map<number, GeometryDescriptor>();\n const meshes = new Map<number, Mesh>();\n const animationGroups = new Map<number, AnimationGroup>();\n const textureLoads: Promise<void>[] = [];\n const textureUrls = new Set<string>();\n const assetContainer = container instanceof AssetContainer ? container : undefined;\n let root: TransformNode | undefined;\n let timeCodesPerSecond = 24;\n\n const trackAsset = <T extends { _parentContainer: IAssetContainer | null }>(assets: T[], asset: T): void => {\n assets.push(asset);\n if (assetContainer) {\n asset._parentContainer = assetContainer;\n }\n };\n const applyMeshOrientation = (mesh: Mesh, flags: number): void => {\n const sourceIsRightHanded = !(flags & MeshFlags.LeftHanded);\n mesh.sideOrientation = scene.useRightHandedSystem === sourceIsRightHanded ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\n };\n const materialForMesh = (id: number, doubleSided: boolean): PBRMaterial | null => {\n const material = materials.get(id);\n if (!material || !doubleSided || !material.backFaceCulling) {\n return material ?? null;\n }\n let variant = doubleSidedMaterials.get(id);\n if (!variant) {\n variant = material.clone(`${material.name} (double-sided)`);\n trackAsset(container.materials, variant);\n variant.backFaceCulling = false;\n variant.twoSidedLighting = true;\n doubleSidedMaterials.set(id, variant);\n }\n return variant;\n };\n\n try {\n const previousBlockEntityCollection = scene._blockEntityCollection;\n if (!addToScene) {\n scene._blockEntityCollection = true;\n }\n try {\n for (const command of commands) {\n const payload = new PayloadReader(commandBuffer, command.payloadOffset, command.payloadLength);\n switch (command.opcode) {\n case Command.Scene: {\n const zUp = payload.u32() === 1;\n const metersPerUnit = payload.f32();\n timeCodesPerSecond = payload.f32() || 24;\n root = new TransformNode(\"USD Root\", scene);\n trackAsset(container.transformNodes, root);\n container.rootNodes.push(root);\n root.rotationQuaternion = zUp ? Quaternion.FromArray([-0.7071068, 0, 0, 0.7071068]) : Quaternion.Identity();\n root.scaling.copyFrom(\n scene.useRightHandedSystem\n ? new Vector3(metersPerUnit, metersPerUnit, metersPerUnit)\n : zUp\n ? new Vector3(metersPerUnit, -metersPerUnit, metersPerUnit)\n : new Vector3(metersPerUnit, metersPerUnit, -metersPerUnit)\n );\n break;\n }\n case Command.Texture: {\n const id = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const mime = mimeType(payload.u32());\n const imageOffset = payload.u32();\n const imageLength = payload.u32();\n const coordinatesIndex = payload.u32();\n const transformOffset = payload.u32();\n const wrapU = payload.u32();\n const wrapV = payload.u32();\n assertRange(dataBuffer, transformOffset, 5, 4, \"texture transform\");\n assertRange(dataBuffer, imageOffset, imageLength, 1, \"texture image\");\n const transform = new Float32Array(dataBuffer, transformOffset, 5);\n const bytes = new Uint8Array(dataBuffer, imageOffset, imageLength);\n const url = URL.createObjectURL(new Blob([bytes], { type: mime }));\n textureUrls.add(url);\n let resolveLoad!: () => void;\n let rejectLoad!: (error: Error) => void;\n const loaded = new Promise<void>((resolve, reject) => {\n resolveLoad = resolve;\n rejectLoad = reject;\n });\n textureLoads.push(loaded);\n const texture = new Texture(url, scene, false, false, Texture.TRILINEAR_SAMPLINGMODE, resolveLoad, (message, exception) => {\n URL.revokeObjectURL(url);\n rejectLoad(exception instanceof Error ? exception : new Error(message || `Could not load texture '${url}'.`));\n });\n trackAsset(container.textures, texture);\n texture.onDisposeObservable.addOnce(() => URL.revokeObjectURL(url));\n texture.name = stringAt(dataBuffer, nameOffset, nameLength);\n texture.coordinatesIndex = coordinatesIndex;\n texture.uScale = transform[0];\n texture.vScale = transform[1];\n texture.uRotationCenter = 0;\n texture.vRotationCenter = 0;\n texture.uOffset = transform[2] - transform[1] * Math.sin(transform[4]);\n texture.vOffset = 1 - transform[1] * Math.cos(transform[4]) - transform[3];\n texture.wAng = -transform[4];\n texture.wrapU = wrapMode(wrapU);\n texture.wrapV = wrapMode(wrapV);\n textures.set(id, texture);\n break;\n }\n case Command.Material: {\n const id = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const baseOffset = payload.u32();\n const emissiveOffset = payload.u32();\n const metallic = payload.f32();\n const roughness = payload.f32();\n const normalScale = payload.f32();\n const alphaCutoff = payload.f32();\n const flags = payload.u32();\n const baseTexture = payload.u32();\n const opacityTexture = payload.u32();\n const normalTexture = payload.u32();\n const ormTexture = payload.u32();\n const emissiveTexture = payload.u32();\n const opacityChannel = payload.u32();\n const roughnessChannel = payload.u32();\n const metallicChannel = payload.u32();\n const occlusionChannel = payload.u32();\n assertRange(dataBuffer, baseOffset, 4, 4, \"material base color\");\n assertRange(dataBuffer, emissiveOffset, 3, 4, \"material emissive color\");\n const base = new Float32Array(dataBuffer, baseOffset, 4);\n const emissive = new Float32Array(dataBuffer, emissiveOffset, 3);\n const material = new PBRMaterial(stringAt(dataBuffer, nameOffset, nameLength), scene);\n trackAsset(container.materials, material);\n material.id = `usd-material-${id}`;\n material.albedoColor = new Color3(base[0], base[1], base[2]);\n material.alpha = base[3];\n material.metallic = metallic;\n material.roughness = roughness;\n material.emissiveColor = new Color3(emissive[0], emissive[1], emissive[2]);\n const doubleSided = Boolean(flags & MaterialFlags.DoubleSided);\n material.backFaceCulling = !doubleSided;\n material.twoSidedLighting = doubleSided;\n material.unlit = Boolean(flags & MaterialFlags.Unlit);\n if (flags & MaterialFlags.AlphaBlend) {\n material.transparencyMode = 2;\n }\n if (alphaCutoff > 0) {\n material.transparencyMode = 1;\n material.alphaCutOff = alphaCutoff;\n }\n if (baseTexture !== MISSING_OFFSET) {\n material.albedoTexture = textures.get(baseTexture) ?? null;\n if (material.albedoTexture && opacityTexture === MISSING_OFFSET && flags & MaterialFlags.AlphaBlend) {\n material.albedoTexture.hasAlpha = true;\n material.useAlphaFromAlbedoTexture = true;\n }\n }\n if (opacityTexture !== MISSING_OFFSET) {\n material.opacityTexture = textures.get(opacityTexture) ?? null;\n if (material.opacityTexture) {\n material.opacityTexture.gammaSpace = false;\n material.opacityTexture.getAlphaFromRGB = opacityChannel !== 3;\n }\n }\n if (normalTexture !== MISSING_OFFSET) {\n material.bumpTexture = textures.get(normalTexture) ?? null;\n if (material.bumpTexture) {\n material.bumpTexture.gammaSpace = false;\n material.bumpTexture.level = normalScale;\n }\n }\n if (ormTexture !== MISSING_OFFSET) {\n material.metallicTexture = textures.get(ormTexture) ?? null;\n if (material.metallicTexture) {\n material.metallicTexture.gammaSpace = false;\n material.useRoughnessFromMetallicTextureAlpha = roughnessChannel === 3;\n material.useRoughnessFromMetallicTextureGreen = roughnessChannel === 1;\n material.useMetallnessFromMetallicTextureBlue = metallicChannel === 2;\n material.useAmbientOcclusionFromMetallicTextureRed = occlusionChannel === 0;\n }\n }\n if (emissiveTexture !== MISSING_OFFSET) {\n material.emissiveTexture = textures.get(emissiveTexture) ?? null;\n }\n materials.set(id, material);\n break;\n }\n case Command.TransformNode: {\n const id = payload.u32();\n const parentId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const matrixOffset = payload.u32();\n const node = new TransformNode(stringAt(dataBuffer, nameOffset, nameLength), scene);\n trackAsset(container.transformNodes, node);\n node.setPreTransformMatrix(matrixAt(dataBuffer, matrixOffset));\n Object.defineProperty(node, NODE_MATRIX_PROPERTY, {\n configurable: true,\n get: () => node.getPivotMatrix(),\n set: (matrix: Matrix) => node.setPreTransformMatrix(matrix),\n });\n nodes.set(id, node);\n if (parentId === MISSING_OFFSET) {\n node.parent = root ?? null;\n } else {\n pendingParents.push({ node, parentId });\n }\n break;\n }\n case Command.Skeleton: {\n const id = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const jointCount = payload.u32();\n const jointsOffset = payload.u32();\n const skeleton = new Skeleton(stringAt(dataBuffer, nameOffset, nameLength), `usd-skeleton-${id}`, scene);\n trackAsset(container.skeletons, skeleton);\n const jointView = new DataView(dataBuffer);\n assertRange(dataBuffer, jointsOffset, jointCount * 5, 4, \"skeleton joints\");\n const created: Bone[] = [];\n for (let index = 0; index < jointCount; ++index) {\n const offset = jointsOffset + index * 20;\n const parentIndex = jointView.getUint32(offset, true);\n const boneId = jointView.getUint32(offset + 4, true);\n const jointNameOffset = jointView.getUint32(offset + 8, true);\n const jointNameLength = jointView.getUint32(offset + 12, true);\n const matrixOffset = jointView.getUint32(offset + 16, true);\n if (parentIndex !== MISSING_OFFSET && parentIndex >= index) {\n throw new Error(`Skeleton ${id} has an invalid parent joint index.`);\n }\n const bone = new Bone(\n stringAt(dataBuffer, jointNameOffset, jointNameLength),\n skeleton,\n parentIndex === MISSING_OFFSET ? null : created[parentIndex],\n matrixAt(dataBuffer, matrixOffset),\n matrixAt(dataBuffer, matrixOffset),\n undefined,\n index\n );\n created.push(bone);\n bones.set(boneId, bone);\n }\n skeletons.set(id, skeleton);\n break;\n }\n case Command.Geometry: {\n const id = payload.u32();\n geometries.set(id, {\n vertexCount: payload.u32(),\n indexCount: payload.u32(),\n flags: payload.u32(),\n positions: payload.u32(),\n normals: payload.u32(),\n tangents: payload.u32(),\n uv0: payload.u32(),\n colors: payload.u32(),\n joints0: payload.u32(),\n weights0: payload.u32(),\n joints1: payload.u32(),\n weights1: payload.u32(),\n indices: payload.u32(),\n influences: payload.u32(),\n });\n break;\n }\n case Command.Mesh: {\n const id = payload.u32();\n const nodeId = payload.u32();\n const geometryId = payload.u32();\n const materialId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const flags = payload.u32();\n const skeletonId = payload.u32();\n const submeshesOffset = payload.u32();\n const submeshCount = payload.u32();\n const descriptor = geometries.get(geometryId);\n if (!descriptor) {\n throw new Error(`Mesh ${id} references missing geometry ${geometryId}.`);\n }\n const mesh = new Mesh(stringAt(dataBuffer, nameOffset, nameLength), scene);\n trackAsset(container.meshes, mesh);\n applyMeshOrientation(mesh, flags);\n mesh.parent = nodes.get(nodeId) ?? root ?? null;\n const vertexData = new VertexData();\n assertRange(dataBuffer, descriptor.positions, descriptor.vertexCount * 3, 4, \"positions\");\n vertexData.positions = new Float32Array(dataBuffer, descriptor.positions, descriptor.vertexCount * 3);\n if (descriptor.flags & GeometryFlags.Normals) {\n assertRange(dataBuffer, descriptor.normals, descriptor.vertexCount * 3, 4, \"normals\");\n vertexData.normals = new Float32Array(dataBuffer, descriptor.normals, descriptor.vertexCount * 3);\n }\n if (descriptor.flags & GeometryFlags.Tangents) {\n assertRange(dataBuffer, descriptor.tangents, descriptor.vertexCount * 4, 4, \"tangents\");\n vertexData.tangents = new Float32Array(dataBuffer, descriptor.tangents, descriptor.vertexCount * 4);\n }\n if (descriptor.flags & GeometryFlags.Uv0) {\n assertRange(dataBuffer, descriptor.uv0, descriptor.vertexCount * 2, 4, \"texture coordinates\");\n vertexData.uvs = new Float32Array(dataBuffer, descriptor.uv0, descriptor.vertexCount * 2);\n }\n if (descriptor.flags & GeometryFlags.Colors) {\n assertRange(dataBuffer, descriptor.colors, descriptor.vertexCount * 4, 4, \"vertex colors\");\n vertexData.colors = new Float32Array(dataBuffer, descriptor.colors, descriptor.vertexCount * 4);\n }\n if (descriptor.flags & GeometryFlags.Skin0) {\n assertRange(dataBuffer, descriptor.joints0, descriptor.vertexCount * 4, 2, \"joint indices\");\n assertRange(dataBuffer, descriptor.weights0, descriptor.vertexCount * 4, 4, \"joint weights\");\n vertexData.matricesIndices = Float32Array.from(new Uint16Array(dataBuffer, descriptor.joints0, descriptor.vertexCount * 4));\n vertexData.matricesWeights = new Float32Array(dataBuffer, descriptor.weights0, descriptor.vertexCount * 4);\n }\n if (descriptor.flags & GeometryFlags.Skin1) {\n assertRange(dataBuffer, descriptor.joints1, descriptor.vertexCount * 4, 2, \"extra joint indices\");\n assertRange(dataBuffer, descriptor.weights1, descriptor.vertexCount * 4, 4, \"extra joint weights\");\n vertexData.matricesIndicesExtra = Float32Array.from(new Uint16Array(dataBuffer, descriptor.joints1, descriptor.vertexCount * 4));\n vertexData.matricesWeightsExtra = new Float32Array(dataBuffer, descriptor.weights1, descriptor.vertexCount * 4);\n }\n assertRange(dataBuffer, descriptor.indices, descriptor.indexCount, 4, \"indices\");\n vertexData.indices = new Uint32Array(dataBuffer, descriptor.indices, descriptor.indexCount);\n vertexData.applyToMesh(mesh, true);\n if (mesh.geometry) {\n trackAsset(container.geometries, mesh.geometry);\n }\n mesh.numBoneInfluencers = Math.min(descriptor.influences, 8);\n if (skeletonId !== MISSING_OFFSET) {\n mesh.skeleton = skeletons.get(skeletonId) ?? null;\n }\n\n const submeshView = new DataView(dataBuffer);\n assertRange(dataBuffer, submeshesOffset, submeshCount * 5, 4, \"submeshes\");\n const doubleSided = Boolean(flags & MeshFlags.DoubleSided);\n if (submeshCount === 1 && materialId !== MISSING_OFFSET) {\n mesh.material = materialForMesh(materialId, doubleSided);\n } else {\n const multi = new MultiMaterial(`${mesh.name} materials`, scene);\n trackAsset(container.multiMaterials, multi);\n for (let index = 0; index < submeshCount; ++index) {\n const offset = submeshesOffset + index * 20;\n multi.subMaterials.push(materialForMesh(submeshView.getUint32(offset, true), doubleSided));\n }\n mesh.material = multi;\n }\n mesh.releaseSubMeshes();\n for (let index = 0; index < submeshCount; ++index) {\n const offset = submeshesOffset + index * 20;\n new SubMesh(\n index,\n submeshView.getUint32(offset + 12, true),\n submeshView.getUint32(offset + 16, true),\n submeshView.getUint32(offset + 4, true),\n submeshView.getUint32(offset + 8, true),\n mesh\n );\n }\n meshes.set(id, mesh);\n break;\n }\n case Command.AnalyticPrimitive: {\n const id = payload.u32();\n const nodeId = payload.u32();\n const type = payload.u32();\n const materialId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const flags = payload.u32();\n const axis = payload.u32();\n const sizeOrRadius = payload.f32();\n const height = payload.f32();\n const tessellation = payload.u32();\n const name = stringAt(dataBuffer, nameOffset, nameLength);\n if (!Number.isFinite(sizeOrRadius) || sizeOrRadius <= 0) {\n throw new Error(`Analytic primitive ${id} has an invalid size or radius.`);\n }\n if ((type === AnalyticPrimitiveType.Cylinder || type === AnalyticPrimitiveType.Cone) && (!Number.isFinite(height) || height <= 0)) {\n throw new Error(`Analytic primitive ${id} has an invalid height.`);\n }\n if (type !== AnalyticPrimitiveType.Cube && (!Number.isInteger(tessellation) || tessellation < 3 || tessellation > 512)) {\n throw new Error(`Analytic primitive ${id} has invalid tessellation.`);\n }\n let mesh: Mesh;\n switch (type) {\n case AnalyticPrimitiveType.Cube:\n mesh = CreateBox(name, { size: sizeOrRadius }, scene);\n break;\n case AnalyticPrimitiveType.Sphere:\n mesh = CreateSphere(\n name,\n {\n diameter: sizeOrRadius * 2,\n segments: tessellation,\n },\n scene\n );\n break;\n case AnalyticPrimitiveType.Cylinder:\n case AnalyticPrimitiveType.Cone:\n mesh = CreateCylinder(\n name,\n {\n height,\n diameterTop: type === AnalyticPrimitiveType.Cone ? 0 : sizeOrRadius * 2,\n diameterBottom: sizeOrRadius * 2,\n tessellation,\n },\n scene\n );\n break;\n default:\n throw new Error(`Unsupported analytic primitive type ${type}.`);\n }\n trackAsset(container.meshes, mesh);\n if (mesh.geometry) {\n trackAsset(container.geometries, mesh.geometry);\n }\n\n // Babylon builders emit left-handed local winding. Reverse only for USD's\n // default right-handed convention; normals already point outward.\n if (!(flags & MeshFlags.LeftHanded)) {\n const sourceIndices = mesh.getIndices();\n if (!sourceIndices) {\n throw new Error(`Analytic primitive ${id} has no generated indices.`);\n }\n const reversed = Array.from(sourceIndices);\n for (let index = 0; index < reversed.length; index += 3) {\n [reversed[index], reversed[index + 2]] = [reversed[index + 2], reversed[index]];\n }\n mesh.setIndices(reversed);\n }\n if (axis === PrimitiveAxis.X) {\n mesh.rotationQuaternion = Quaternion.RotationAxis(new Vector3(0, 0, 1), -Math.PI / 2);\n } else if (axis === PrimitiveAxis.Z) {\n mesh.rotationQuaternion = Quaternion.RotationAxis(new Vector3(1, 0, 0), Math.PI / 2);\n } else if (axis !== PrimitiveAxis.Y) {\n throw new Error(`Unsupported analytic primitive axis ${axis}.`);\n }\n applyMeshOrientation(mesh, flags);\n mesh.parent = nodes.get(nodeId) ?? root ?? null;\n mesh.material = materialForMesh(materialId, Boolean(flags & MeshFlags.DoubleSided));\n meshes.set(id, mesh);\n break;\n }\n case Command.Instance: {\n const sourceId = payload.u32();\n const nodeId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const source = meshes.get(sourceId);\n if (!source) {\n throw new Error(`Instance references missing mesh ${sourceId}.`);\n }\n const instance = source.createInstance(stringAt(dataBuffer, nameOffset, nameLength));\n trackAsset(container.meshes, instance);\n instance.parent = nodes.get(nodeId) ?? root ?? null;\n break;\n }\n case Command.Animation: {\n const targetKind = payload.u32();\n const targetId = payload.u32();\n const property = payload.u32();\n const trackIndex = payload.u32();\n const keyCount = payload.u32();\n const timesOffset = payload.u32();\n const valuesOffset = payload.u32();\n const stride = payload.u32();\n if (targetKind !== AnimationTarget.Node && targetKind !== AnimationTarget.Bone) {\n throw new Error(`Invalid animation target kind ${targetKind}.`);\n }\n const expectedStride =\n property === AnimationProperty.Position || property === AnimationProperty.Scaling\n ? 3\n : property === AnimationProperty.RotationQuaternion\n ? 4\n : property === AnimationProperty.Matrix\n ? 16\n : 0;\n if (stride !== expectedStride) {\n throw new Error(`Invalid animation value stride ${stride} for property ${property}.`);\n }\n const target = targetKind === AnimationTarget.Node ? nodes.get(targetId) : bones.get(targetId);\n if (!target) {\n break;\n }\n const propertyName =\n property === AnimationProperty.Position\n ? \"position\"\n : property === AnimationProperty.RotationQuaternion\n ? \"rotationQuaternion\"\n : property === AnimationProperty.Scaling\n ? \"scaling\"\n : targetKind === AnimationTarget.Node\n ? NODE_MATRIX_PROPERTY\n : \"_matrix\";\n const dataType =\n property === AnimationProperty.RotationQuaternion\n ? Animation.ANIMATIONTYPE_QUATERNION\n : property === AnimationProperty.Matrix\n ? Animation.ANIMATIONTYPE_MATRIX\n : Animation.ANIMATIONTYPE_VECTOR3;\n const animation = new Animation(`USD ${propertyName}`, propertyName, timeCodesPerSecond, dataType, Animation.ANIMATIONLOOPMODE_CYCLE);\n assertRange(dataBuffer, timesOffset, keyCount, 4, \"animation times\");\n assertRange(dataBuffer, valuesOffset, keyCount * stride, 4, \"animation values\");\n const times = new Float32Array(dataBuffer, timesOffset, keyCount);\n const values = new Float32Array(dataBuffer, valuesOffset, keyCount * stride);\n animation.setKeys(\n Array.from({ length: keyCount }, (_, index) => ({\n frame: times[index],\n value:\n dataType === Animation.ANIMATIONTYPE_QUATERNION\n ? Quaternion.FromArray(values, index * stride)\n : dataType === Animation.ANIMATIONTYPE_MATRIX\n ? Matrix.FromArray(values, index * stride)\n : Vector3.FromArray(values, index * stride),\n }))\n );\n let group = animationGroups.get(trackIndex);\n if (!group) {\n group = new AnimationGroup(`USD Animation ${trackIndex + 1}`, scene);\n animationGroups.set(trackIndex, group);\n trackAsset(container.animationGroups, group);\n }\n group.addTargetedAnimation(animation, target);\n break;\n }\n }\n }\n } finally {\n if (!addToScene) {\n scene._blockEntityCollection = previousBlockEntityCollection;\n }\n }\n\n const texturesLoaded = Promise.all(textureLoads);\n if (signal) {\n let onAbort: (() => void) | undefined;\n const aborted = new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(signal.reason instanceof Error ? signal.reason : new Error(\"USD materialization was aborted.\"));\n if (signal.aborted) {\n onAbort();\n } else {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n try {\n await Promise.race([texturesLoaded, aborted]);\n signal.throwIfAborted();\n } finally {\n if (onAbort) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n }\n } else {\n await texturesLoaded;\n }\n for (const { node, parentId } of pendingParents) {\n node.parent = nodes.get(parentId) ?? root ?? null;\n }\n return { container, materializeMs: performance.now() - started };\n } catch (error) {\n // Decode callbacks can arrive after rollback; observe their rejections without\n // delaying cancellation on an image load that may never finish.\n void Promise.allSettled(textureLoads);\n container.dispose();\n for (const url of textureUrls) {\n URL.revokeObjectURL(url);\n }\n throw error;\n }\n}\n"]}
1
+ {"version":3,"file":"usdSceneMaterializer.js","sourceRoot":"","sources":["../../../../dev/loaders/src/USD/usdSceneMaterializer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { Animation } from \"core/Animations/animation.pure\";\nimport { AnimationGroup } from \"core/Animations/animationGroup.pure\";\nimport { AbstractAssetContainer, AssetContainer } from \"core/assetContainer\";\nimport { Bone } from \"core/Bones/bone\";\nimport { Skeleton } from \"core/Bones/skeleton\";\nimport { Color3, Color4 } from \"core/Maths/math.color.pure\";\nimport { Matrix, Quaternion, Vector3 } from \"core/Maths/math.vector.pure\";\nimport { Material } from \"core/Materials/material.pure\";\nimport { MultiMaterial } from \"core/Materials/multiMaterial.pure\";\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial.pure\";\nimport { Texture } from \"core/Materials/Textures/texture.pure\";\nimport {\n CreateFactorOperand,\n CreateTextureOperand,\n LerpTexturesAsync,\n TextureChannel,\n TextureColorSpace,\n type ITextureProcessOperand,\n} from \"core/Materials/Textures/textureProcessor\";\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\nimport { MorphTarget } from \"core/Morph/morphTarget\";\nimport { MorphTargetManager } from \"core/Morph/morphTargetManager\";\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder.pure\";\nimport { CreateCylinder } from \"core/Meshes/Builders/cylinderBuilder.pure\";\nimport { CreateSphere } from \"core/Meshes/Builders/sphereBuilder.pure\";\nimport { Mesh } from \"core/Meshes/mesh.pure\";\nimport { SubMesh } from \"core/Meshes/subMesh\";\nimport { TransformNode } from \"core/Meshes/transformNode.pure\";\nimport { VertexData } from \"core/Meshes/mesh.vertexData\";\nimport { type Scene } from \"core/scene.pure\";\nimport { type IAssetContainer } from \"core/IAssetContainer\";\nimport { Constants } from \"core/Engines/constants\";\n\nimport {\n AnalyticPrimitiveType,\n AnimationProperty,\n AnimationTarget,\n Command,\n GeometryFlags,\n MaterialFlags,\n MeshFlags,\n MISSING_OFFSET,\n PayloadReader,\n PrimitiveAxis,\n TextureOutputChannel,\n USDTextureColorSpace,\n readCommands,\n} from \"./usdCommandProtocol\";\n\ninterface GeometryDescriptor {\n vertexCount: number;\n indexCount: number;\n flags: number;\n positions: number;\n normals: number;\n tangents: number;\n uv0: number;\n colors: number;\n joints0: number;\n weights0: number;\n joints1: number;\n weights1: number;\n indices: number;\n influences: number;\n}\n\ninterface TextureDescriptor {\n id: number;\n texture: Texture;\n sourceColorSpace: USDTextureColorSpace;\n scale: Float32Array;\n bias: Float32Array;\n}\n\ninterface TextureBinding {\n descriptor: TextureDescriptor;\n channel: TextureOutputChannel;\n}\n\ninterface MaterialTextureBindings {\n id: number;\n material: PBRMaterial;\n normalScale: number;\n base?: TextureBinding;\n opacity?: TextureBinding;\n normal?: TextureBinding;\n metallic?: TextureBinding;\n roughness?: TextureBinding;\n occlusion?: TextureBinding;\n emissive?: TextureBinding;\n}\n\nclass DirectAssetContainer extends AbstractAssetContainer {\n public dispose(): void {\n for (const animationGroup of this.animationGroups.splice(0)) {\n animationGroup.dispose();\n }\n for (const mesh of this.meshes.splice(0)) {\n mesh.dispose();\n }\n for (const manager of this.morphTargetManagers.splice(0)) {\n manager.dispose();\n }\n for (const skeleton of this.skeletons.splice(0)) {\n skeleton.dispose();\n }\n for (const multiMaterial of this.multiMaterials.splice(0)) {\n multiMaterial.dispose();\n }\n for (const material of this.materials.splice(0)) {\n material.dispose();\n }\n for (const geometry of this.geometries.splice(0)) {\n geometry.dispose();\n }\n for (const transformNode of this.transformNodes.splice(0)) {\n transformNode.dispose();\n }\n for (const texture of this.textures.splice(0)) {\n texture.dispose();\n }\n this.rootNodes.length = 0;\n }\n}\n\nexport interface MaterializationResult {\n container: AbstractAssetContainer & { dispose(): void };\n materializeMs: number;\n}\n\nconst decoder = new TextDecoder();\nconst NODE_MATRIX_PROPERTY = \"__babylonUsdLocalMatrix\";\n\nfunction assertRange(data: ArrayBuffer, offset: number, count: number, bytesPerElement: number, label: string): void {\n if (\n !Number.isInteger(offset) ||\n !Number.isInteger(count) ||\n offset < 0 ||\n count < 0 ||\n offset % Math.min(bytesPerElement, 4) !== 0 ||\n count > Math.floor((data.byteLength - offset) / bytesPerElement)\n ) {\n throw new Error(`Invalid ${label} range in OpenUSD Babylon data buffer.`);\n }\n}\n\nfunction stringAt(data: ArrayBuffer, offset: number, length: number): string {\n assertRange(data, offset, length, 1, \"string\");\n return decoder.decode(new Uint8Array(data, offset, length));\n}\n\nfunction matrixAt(data: ArrayBuffer, offset: number): Matrix {\n assertRange(data, offset, 16, 4, \"matrix\");\n const values = new Float32Array(data, offset, 16);\n return Matrix.FromValues(\n values[0],\n values[1],\n values[2],\n values[3],\n values[4],\n values[5],\n values[6],\n values[7],\n values[8],\n values[9],\n values[10],\n values[11],\n values[12],\n values[13],\n values[14],\n values[15]\n );\n}\n\nfunction mimeType(value: number): string {\n switch (value) {\n case 2:\n return \"image/jpeg\";\n case 3:\n return \"image/bmp\";\n case 4:\n return \"image/webp\";\n default:\n return \"image/png\";\n }\n}\n\nfunction wrapMode(value: number): number {\n switch (value) {\n case 0:\n return Texture.CLAMP_ADDRESSMODE;\n case 1:\n return Texture.WRAP_ADDRESSMODE;\n case 2:\n return Texture.MIRROR_ADDRESSMODE;\n default:\n throw new Error(`Invalid texture wrap mode ${value}.`);\n }\n}\n\nasync function awaitAbortableAsync<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n if (!signal) {\n return await promise;\n }\n let onAbort: (() => void) | undefined;\n const aborted = new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(signal.reason instanceof Error ? signal.reason : new Error(\"USD materialization was aborted.\"));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n if (signal.aborted) {\n onAbort();\n }\n });\n try {\n return await Promise.race([promise, aborted]);\n } finally {\n if (onAbort) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n }\n}\n\nexport async function materializeCommandBuffers(\n scene: Scene,\n commandBuffer: ArrayBuffer,\n dataBuffer: ArrayBuffer,\n addToScene: boolean,\n signal?: AbortSignal\n): Promise<MaterializationResult> {\n signal?.throwIfAborted();\n const started = performance.now();\n const commands = readCommands(commandBuffer);\n const container = addToScene ? new DirectAssetContainer() : new AssetContainer(scene);\n const nodes = new Map<number, TransformNode>();\n const pendingParents: Array<{ node: TransformNode; parentId: number }> = [];\n const textures = new Map<number, TextureDescriptor>();\n const materials = new Map<number, PBRMaterial>();\n const doubleSidedMaterials = new Map<number, PBRMaterial>();\n const skeletons = new Map<number, Skeleton>();\n const bones = new Map<number, Bone>();\n const geometries = new Map<number, GeometryDescriptor>();\n const meshes = new Map<number, Mesh>();\n const morphTargetManagers = new Map<number, MorphTargetManager>();\n const morphTargets = new Map<number, MorphTarget>();\n const classicInstanceSources = new Set<number>();\n const thinInstanceSources = new Set<number>();\n const animationGroups = new Map<number, AnimationGroup>();\n const textureLoads: Promise<void>[] = [];\n const textureUrls = new Set<string>();\n const materialTextureBindings: MaterialTextureBindings[] = [];\n const processedTextures = new Map<string, Promise<BaseTexture>>();\n const assetContainer = container instanceof AssetContainer ? container : undefined;\n let root: TransformNode | undefined;\n let timeCodesPerSecond = 24;\n let rollingBack = false;\n const caps = scene.getEngine().getCaps();\n const processedTextureType =\n caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering\n ? Constants.TEXTURETYPE_HALF_FLOAT\n : caps.textureFloatRender && caps.textureFloatLinearFiltering\n ? Constants.TEXTURETYPE_FLOAT\n : Constants.TEXTURETYPE_UNSIGNED_BYTE;\n\n const trackAsset = <T extends { _parentContainer: IAssetContainer | null }>(assets: T[], asset: T): void => {\n assets.push(asset);\n if (assetContainer) {\n asset._parentContainer = assetContainer;\n }\n };\n const applyMeshOrientation = (mesh: Mesh, flags: number): void => {\n const sourceIsRightHanded = !(flags & MeshFlags.LeftHanded);\n mesh.sideOrientation = scene.useRightHandedSystem === sourceIsRightHanded ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\n };\n const materialForMesh = (id: number, doubleSided: boolean): PBRMaterial | null => {\n const material = materials.get(id);\n if (!material || !doubleSided || !material.backFaceCulling) {\n return material ?? null;\n }\n let variant = doubleSidedMaterials.get(id);\n if (!variant) {\n variant = material.clone(`${material.name} (double-sided)`);\n trackAsset(container.materials, variant);\n variant.backFaceCulling = false;\n variant.twoSidedLighting = true;\n doubleSidedMaterials.set(id, variant);\n }\n return variant;\n };\n const binding = (textureId: number, channel: number, label: string): TextureBinding | undefined => {\n if (textureId === MISSING_OFFSET) {\n if (channel !== MISSING_OFFSET) {\n throw new Error(`USD ${label} binding has a channel without a texture.`);\n }\n return undefined;\n }\n const descriptor = textures.get(textureId);\n if (!descriptor) {\n throw new Error(`USD ${label} binding references missing texture ${textureId}.`);\n }\n if (channel < TextureOutputChannel.R || channel > TextureOutputChannel.RGB) {\n throw new Error(`USD ${label} binding has invalid output channel ${channel}.`);\n }\n return { descriptor, channel };\n };\n const channelIndex = (channel: TextureOutputChannel): number => {\n if (channel === TextureOutputChannel.RGB) {\n throw new Error(\"A scalar USD texture binding cannot use the RGB output.\");\n }\n return channel;\n };\n const processorChannel = (channel: TextureOutputChannel): TextureChannel => {\n switch (channel) {\n case TextureOutputChannel.R:\n return TextureChannel.R;\n case TextureOutputChannel.G:\n return TextureChannel.G;\n case TextureOutputChannel.B:\n return TextureChannel.B;\n case TextureOutputChannel.A:\n return TextureChannel.A;\n default:\n return TextureChannel.RGBA;\n }\n };\n const processorColorSpace = (descriptor: TextureDescriptor): TextureColorSpace =>\n descriptor.sourceColorSpace === USDTextureColorSpace.Raw ? TextureColorSpace.Linear : TextureColorSpace.SRGB;\n const scalarTextureIsLinear = (binding: TextureBinding): boolean => binding.descriptor.sourceColorSpace === USDTextureColorSpace.Raw;\n const valueTransformIs = (descriptor: TextureDescriptor, scale: readonly number[] | Float32Array, bias: readonly number[] | Float32Array): boolean =>\n scale.every((value, index) => descriptor.scale[index] === value) && bias.every((value, index) => descriptor.bias[index] === value);\n const trackProcessedTexture = (texture: BaseTexture): BaseTexture => {\n trackAsset(container.textures, texture);\n return texture;\n };\n const processTextureAsync = async (\n name: string,\n binding: TextureBinding,\n scale: readonly number[] | Float32Array,\n bias: readonly number[] | Float32Array,\n channel = binding.channel,\n preserveRange = false\n ): Promise<BaseTexture> => {\n const source = binding.descriptor;\n const size = source.texture.getSize();\n const supportsMipMaps = !scene.getEngine().needPOTTextures || ((size.width & (size.width - 1)) === 0 && (size.height & (size.height - 1)) === 0);\n const outputOptions = {\n textureType: preserveRange ? processedTextureType : Constants.TEXTURETYPE_UNSIGNED_BYTE,\n samplingMode: supportsMipMaps ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\n generateMipMaps: supportsMipMaps,\n };\n if (\n preserveRange &&\n processedTextureType === Constants.TEXTURETYPE_UNSIGNED_BYTE &&\n scale.slice(0, 3).some((value, index) => Math.min(bias[index], bias[index] + value) < 0)\n ) {\n throw new Error(`USD texture processing for '${name}' requires a floating-point render target to preserve signed values.`);\n }\n const key = `${source.id}:${channel}:${scale.join(\",\")}:${bias.join(\",\")}:${preserveRange}`;\n const cached = processedTextures.get(key);\n if (cached) {\n return await cached;\n }\n const processing = (async () => {\n const a = new Color4(bias[0], bias[1], bias[2], bias[3]);\n const b = new Color4(bias[0] + scale[0], bias[1] + scale[1], bias[2] + scale[2], bias[3] + scale[3]);\n const previousBlockEntityCollection = scene._blockEntityCollection;\n scene._blockEntityCollection = true;\n let processingPromise: Promise<ITextureProcessOperand>;\n try {\n processingPromise = LerpTexturesAsync(\n name,\n CreateFactorOperand(a),\n CreateFactorOperand(b),\n CreateTextureOperand(source.texture, processorChannel(channel), processorColorSpace(source)),\n scene,\n TextureColorSpace.Linear,\n undefined,\n outputOptions\n );\n } finally {\n scene._blockEntityCollection = previousBlockEntityCollection;\n }\n const processed = await processingPromise;\n if (!processed.texture) {\n throw new Error(`USD texture processing for '${name}' did not produce a texture.`);\n }\n if (rollingBack || signal?.aborted) {\n processed.dispose?.();\n if (signal?.aborted) {\n signal.throwIfAborted();\n }\n throw new Error(\"USD materialization was rolled back.\");\n }\n if (!assetContainer) {\n scene.addTexture(processed.texture);\n }\n const texture = trackProcessedTexture(processed.texture);\n texture.gammaSpace = false;\n const transformedTexture = texture as Texture;\n transformedTexture.uRotationCenter = source.texture.uRotationCenter;\n transformedTexture.vRotationCenter = source.texture.vRotationCenter;\n transformedTexture.wRotationCenter = source.texture.wRotationCenter;\n transformedTexture.homogeneousRotationInUVTransform = source.texture.homogeneousRotationInUVTransform;\n return texture;\n })();\n processedTextures.set(key, processing);\n try {\n return await processing;\n } catch (error) {\n processedTextures.delete(key);\n throw error;\n }\n };\n const processScalarTextureAsync = async (name: string, binding: TextureBinding): Promise<BaseTexture> => {\n const index = channelIndex(binding.channel);\n const scale = binding.descriptor.scale[index];\n const bias = binding.descriptor.bias[index];\n return await processTextureAsync(name, binding, [scale, scale, scale, 1], [bias, bias, bias, 0], binding.channel);\n };\n const applyMaterialTextureBindingsAsync = async (bindings: MaterialTextureBindings): Promise<void> => {\n const { material, normalScale, base, opacity, normal, metallic, roughness, occlusion, emissive } = bindings;\n if (base) {\n if (base.channel !== TextureOutputChannel.RGB) {\n throw new Error(\"A USD base-color texture must use the RGB output.\");\n }\n material.albedoColor = Color3.White();\n material.albedoTexture = valueTransformIs(base.descriptor, [1, 1, 1, 1], [0, 0, 0, 0])\n ? base.descriptor.texture\n : await processTextureAsync(`${material.name} base color`, base, base.descriptor.scale, base.descriptor.bias);\n }\n if (emissive) {\n if (emissive.channel !== TextureOutputChannel.RGB) {\n throw new Error(\"A USD emissive texture must use the RGB output.\");\n }\n const descriptor = emissive.descriptor;\n const zeroBias = descriptor.bias.slice(0, 3).every((value) => value === 0);\n if (zeroBias) {\n material.emissiveColor = new Color3(descriptor.scale[0], descriptor.scale[1], descriptor.scale[2]);\n material.emissiveTexture = descriptor.texture;\n } else {\n const factors = Array.from({ length: 3 }, (_, index) => Math.max(1, Math.abs(descriptor.bias[index]), Math.abs(descriptor.bias[index] + descriptor.scale[index])));\n const scale = descriptor.scale.map((value, index) => (index < 3 ? value / factors[index] : value));\n const bias = descriptor.bias.map((value, index) => (index < 3 ? value / factors[index] : value));\n material.emissiveColor = new Color3(factors[0], factors[1], factors[2]);\n material.emissiveTexture = await processTextureAsync(`${material.name} emissive`, emissive, scale, bias, emissive.channel, true);\n }\n }\n if (normal) {\n if (normal.channel !== TextureOutputChannel.RGB) {\n throw new Error(\"A USD normal texture must use the RGB output.\");\n }\n const canonicalNormal = normal.descriptor.sourceColorSpace === USDTextureColorSpace.Raw && valueTransformIs(normal.descriptor, [2, 2, 2, 1], [-1, -1, -1, 0]);\n if (canonicalNormal) {\n material.bumpTexture = normal.descriptor.texture;\n } else {\n const scale = Array.from(normal.descriptor.scale, (value) => value * 0.5);\n const bias = Array.from(normal.descriptor.bias, (value, index) => (index < 3 ? (value + 1) * 0.5 : value));\n material.bumpTexture = await processTextureAsync(`${material.name} normal`, normal, scale, bias);\n }\n material.bumpTexture.gammaSpace = false;\n material.bumpTexture.level = normalScale;\n }\n\n const packedMetallicRoughness =\n metallic &&\n roughness &&\n metallic.descriptor === roughness.descriptor &&\n (metallic.channel === TextureOutputChannel.R || metallic.channel === TextureOutputChannel.B) &&\n (roughness.channel === TextureOutputChannel.G || roughness.channel === TextureOutputChannel.A) &&\n scalarTextureIsLinear(metallic) &&\n metallic.descriptor.bias[channelIndex(metallic.channel)] === 0 &&\n roughness.descriptor.bias[channelIndex(roughness.channel)] === 0;\n let packedOcclusion = false;\n if (packedMetallicRoughness) {\n const descriptor = metallic.descriptor;\n material.metallicTexture = descriptor.texture;\n material.metallic = (material.metallic ?? 1) * descriptor.scale[channelIndex(metallic.channel)];\n material.roughness = (material.roughness ?? 1) * descriptor.scale[channelIndex(roughness.channel)];\n material.useRoughnessFromMetallicTextureAlpha = roughness.channel === TextureOutputChannel.A;\n material.useRoughnessFromMetallicTextureGreen = roughness.channel === TextureOutputChannel.G;\n material.useMetallnessFromMetallicTextureBlue = metallic.channel === TextureOutputChannel.B;\n packedOcclusion =\n occlusion?.descriptor === descriptor &&\n occlusion.channel === TextureOutputChannel.R &&\n descriptor.scale[TextureOutputChannel.R] === 1 &&\n descriptor.bias[TextureOutputChannel.R] === 0;\n material.useAmbientOcclusionFromMetallicTextureRed = packedOcclusion;\n } else {\n if (metallic) {\n const index = channelIndex(metallic.channel);\n const direct =\n scalarTextureIsLinear(metallic) &&\n (metallic.channel === TextureOutputChannel.R || metallic.channel === TextureOutputChannel.B) &&\n metallic.descriptor.bias[index] === 0;\n material.metallicTexture = direct ? metallic.descriptor.texture : await processScalarTextureAsync(`${material.name} metallic`, metallic);\n material.useRoughnessFromMetallicTextureAlpha = false;\n material.useRoughnessFromMetallicTextureGreen = false;\n material.useMetallnessFromMetallicTextureBlue = direct && metallic.channel === TextureOutputChannel.B;\n material.metallic = direct ? (material.metallic ?? 1) * metallic.descriptor.scale[index] : 1;\n }\n if (roughness) {\n const index = channelIndex(roughness.channel);\n const direct = scalarTextureIsLinear(roughness) && roughness.channel === TextureOutputChannel.R && roughness.descriptor.bias[index] === 0;\n material.microSurfaceTexture = direct ? roughness.descriptor.texture : await processScalarTextureAsync(`${material.name} roughness`, roughness);\n material.microSurfaceTexture.gammaSpace = direct ? roughness.descriptor.texture.gammaSpace : false;\n material.roughness = direct ? (material.roughness ?? 1) * roughness.descriptor.scale[index] : 1;\n }\n }\n if (occlusion && !packedOcclusion) {\n const index = channelIndex(occlusion.channel);\n const direct =\n scalarTextureIsLinear(occlusion) &&\n occlusion.channel === TextureOutputChannel.R &&\n occlusion.descriptor.scale[index] === 1 &&\n occlusion.descriptor.bias[index] === 0;\n material.ambientTexture = direct ? occlusion.descriptor.texture : await processScalarTextureAsync(`${material.name} occlusion`, occlusion);\n material.useAmbientInGrayScale = true;\n }\n if (opacity) {\n if (\n base &&\n material.albedoTexture &&\n opacity.descriptor === base.descriptor &&\n opacity.channel === TextureOutputChannel.A &&\n opacity.descriptor.scale[TextureOutputChannel.A] === 1 &&\n opacity.descriptor.bias[TextureOutputChannel.A] === 0\n ) {\n material.albedoTexture.hasAlpha = true;\n material.useAlphaFromAlbedoTexture = true;\n } else {\n const direct =\n opacity.channel === TextureOutputChannel.A && opacity.descriptor.scale[TextureOutputChannel.A] === 1 && opacity.descriptor.bias[TextureOutputChannel.A] === 0;\n material.opacityTexture = direct ? opacity.descriptor.texture : await processScalarTextureAsync(`${material.name} opacity`, opacity);\n material.opacityTexture.gammaSpace = direct ? opacity.descriptor.texture.gammaSpace : false;\n material.opacityTexture.getAlphaFromRGB = !direct;\n }\n }\n const doubleSidedVariant = doubleSidedMaterials.get(bindings.id);\n if (doubleSidedVariant) {\n doubleSidedVariant.albedoColor.copyFrom(material.albedoColor);\n doubleSidedVariant.albedoTexture = material.albedoTexture;\n doubleSidedVariant.emissiveColor.copyFrom(material.emissiveColor);\n doubleSidedVariant.emissiveTexture = material.emissiveTexture;\n doubleSidedVariant.bumpTexture = material.bumpTexture;\n doubleSidedVariant.metallic = material.metallic;\n doubleSidedVariant.roughness = material.roughness;\n doubleSidedVariant.metallicTexture = material.metallicTexture;\n doubleSidedVariant.microSurfaceTexture = material.microSurfaceTexture;\n doubleSidedVariant.ambientTexture = material.ambientTexture;\n doubleSidedVariant.opacityTexture = material.opacityTexture;\n doubleSidedVariant.alpha = material.alpha;\n doubleSidedVariant.useAlphaFromAlbedoTexture = material.useAlphaFromAlbedoTexture;\n doubleSidedVariant.useRoughnessFromMetallicTextureAlpha = material.useRoughnessFromMetallicTextureAlpha;\n doubleSidedVariant.useRoughnessFromMetallicTextureGreen = material.useRoughnessFromMetallicTextureGreen;\n doubleSidedVariant.useMetallnessFromMetallicTextureBlue = material.useMetallnessFromMetallicTextureBlue;\n doubleSidedVariant.useAmbientOcclusionFromMetallicTextureRed = material.useAmbientOcclusionFromMetallicTextureRed;\n doubleSidedVariant.useAmbientInGrayScale = material.useAmbientInGrayScale;\n }\n };\n\n try {\n const previousBlockEntityCollection = scene._blockEntityCollection;\n if (!addToScene) {\n scene._blockEntityCollection = true;\n }\n try {\n for (const command of commands) {\n const payload = new PayloadReader(commandBuffer, command.payloadOffset, command.payloadLength);\n switch (command.opcode) {\n case Command.Scene: {\n const zUp = payload.u32() === 1;\n const metersPerUnit = payload.f32();\n timeCodesPerSecond = payload.f32() || 24;\n root = new TransformNode(\"USD Root\", scene);\n trackAsset(container.transformNodes, root);\n container.rootNodes.push(root);\n root.rotationQuaternion = zUp ? Quaternion.FromArray([-0.7071068, 0, 0, 0.7071068]) : Quaternion.Identity();\n root.scaling.copyFrom(\n scene.useRightHandedSystem\n ? new Vector3(metersPerUnit, metersPerUnit, metersPerUnit)\n : zUp\n ? new Vector3(metersPerUnit, -metersPerUnit, metersPerUnit)\n : new Vector3(metersPerUnit, metersPerUnit, -metersPerUnit)\n );\n break;\n }\n case Command.Texture: {\n const id = payload.u32();\n if (textures.has(id)) {\n throw new Error(`Duplicate USD texture ${id}.`);\n }\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const mime = mimeType(payload.u32());\n const imageOffset = payload.u32();\n const imageLength = payload.u32();\n const coordinatesIndex = payload.u32();\n const transformOffset = payload.u32();\n const wrapU = payload.u32();\n const wrapV = payload.u32();\n const sourceColorSpace = payload.u32();\n const valueTransformOffset = payload.u32();\n assertRange(dataBuffer, transformOffset, 5, 4, \"texture transform\");\n assertRange(dataBuffer, valueTransformOffset, 8, 4, \"texture value transform\");\n assertRange(dataBuffer, imageOffset, imageLength, 1, \"texture image\");\n if (sourceColorSpace < USDTextureColorSpace.Auto || sourceColorSpace > USDTextureColorSpace.SRGB) {\n throw new Error(`Invalid USD texture color space ${sourceColorSpace}.`);\n }\n const transform = new Float32Array(dataBuffer, transformOffset, 5);\n const valueTransform = new Float32Array(dataBuffer, valueTransformOffset, 8);\n if (![...transform, ...valueTransform].every(Number.isFinite)) {\n throw new Error(`USD texture ${id} has a non-finite transform.`);\n }\n const bytes = new Uint8Array(dataBuffer, imageOffset, imageLength);\n const url = URL.createObjectURL(new Blob([bytes], { type: mime }));\n textureUrls.add(url);\n let resolveLoad!: () => void;\n let rejectLoad!: (error: Error) => void;\n const loaded = new Promise<void>((resolve, reject) => {\n resolveLoad = resolve;\n rejectLoad = reject;\n });\n textureLoads.push(loaded);\n const texture = new Texture(url, scene, false, false, Texture.TRILINEAR_SAMPLINGMODE, resolveLoad, (message, exception) => {\n URL.revokeObjectURL(url);\n rejectLoad(exception instanceof Error ? exception : new Error(message || `Could not load texture '${url}'.`));\n });\n trackAsset(container.textures, texture);\n texture.onDisposeObservable.addOnce(() => URL.revokeObjectURL(url));\n texture.name = stringAt(dataBuffer, nameOffset, nameLength);\n texture.coordinatesIndex = coordinatesIndex;\n texture.uScale = transform[0];\n texture.vScale = transform[1];\n texture.uRotationCenter = 0;\n texture.vRotationCenter = 0;\n texture.uOffset = transform[2] - transform[1] * Math.sin(transform[4]);\n texture.vOffset = 1 - transform[1] * Math.cos(transform[4]) - transform[3];\n texture.wAng = -transform[4];\n texture.wrapU = wrapMode(wrapU);\n texture.wrapV = wrapMode(wrapV);\n texture.gammaSpace = sourceColorSpace !== USDTextureColorSpace.Raw;\n textures.set(id, {\n id,\n texture,\n sourceColorSpace,\n scale: valueTransform.subarray(0, 4),\n bias: valueTransform.subarray(4, 8),\n });\n break;\n }\n case Command.Material: {\n const id = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const baseOffset = payload.u32();\n const emissiveOffset = payload.u32();\n const metallic = payload.f32();\n const roughness = payload.f32();\n const normalScale = payload.f32();\n const alphaCutoff = payload.f32();\n const flags = payload.u32();\n const textureIds = Array.from({ length: 7 }, () => payload.u32());\n const textureChannels = Array.from({ length: 7 }, () => payload.u32());\n assertRange(dataBuffer, baseOffset, 4, 4, \"material base color\");\n assertRange(dataBuffer, emissiveOffset, 3, 4, \"material emissive color\");\n const base = new Float32Array(dataBuffer, baseOffset, 4);\n const emissive = new Float32Array(dataBuffer, emissiveOffset, 3);\n const material = new PBRMaterial(stringAt(dataBuffer, nameOffset, nameLength), scene);\n trackAsset(container.materials, material);\n material.id = `usd-material-${id}`;\n material.albedoColor = new Color3(base[0], base[1], base[2]);\n material.alpha = base[3];\n material.metallic = metallic;\n material.roughness = roughness;\n material.emissiveColor = new Color3(emissive[0], emissive[1], emissive[2]);\n const doubleSided = Boolean(flags & MaterialFlags.DoubleSided);\n material.backFaceCulling = !doubleSided;\n material.twoSidedLighting = doubleSided;\n material.unlit = Boolean(flags & MaterialFlags.Unlit);\n if (flags & MaterialFlags.AlphaBlend) {\n material.transparencyMode = 2;\n }\n if (alphaCutoff > 0) {\n material.transparencyMode = 1;\n material.alphaCutOff = alphaCutoff;\n }\n materialTextureBindings.push({\n id,\n material,\n normalScale,\n base: binding(textureIds[0], textureChannels[0], \"base-color texture\"),\n opacity: binding(textureIds[1], textureChannels[1], \"opacity texture\"),\n normal: binding(textureIds[2], textureChannels[2], \"normal texture\"),\n metallic: binding(textureIds[3], textureChannels[3], \"metallic texture\"),\n roughness: binding(textureIds[4], textureChannels[4], \"roughness texture\"),\n occlusion: binding(textureIds[5], textureChannels[5], \"occlusion texture\"),\n emissive: binding(textureIds[6], textureChannels[6], \"emissive texture\"),\n });\n materials.set(id, material);\n break;\n }\n case Command.TransformNode: {\n const id = payload.u32();\n const parentId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const matrixOffset = payload.u32();\n const node = new TransformNode(stringAt(dataBuffer, nameOffset, nameLength), scene);\n trackAsset(container.transformNodes, node);\n node.setPreTransformMatrix(matrixAt(dataBuffer, matrixOffset));\n Object.defineProperty(node, NODE_MATRIX_PROPERTY, {\n configurable: true,\n get: () => node.getPivotMatrix(),\n set: (matrix: Matrix) => node.setPreTransformMatrix(matrix),\n });\n nodes.set(id, node);\n if (parentId === MISSING_OFFSET) {\n node.parent = root ?? null;\n } else {\n pendingParents.push({ node, parentId });\n }\n break;\n }\n case Command.Skeleton: {\n const id = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const jointCount = payload.u32();\n const jointsOffset = payload.u32();\n const skeleton = new Skeleton(stringAt(dataBuffer, nameOffset, nameLength), `usd-skeleton-${id}`, scene);\n trackAsset(container.skeletons, skeleton);\n const jointView = new DataView(dataBuffer);\n assertRange(dataBuffer, jointsOffset, jointCount * 6, 4, \"skeleton joints\");\n const created: Bone[] = [];\n for (let index = 0; index < jointCount; ++index) {\n const offset = jointsOffset + index * 24;\n const parentIndex = jointView.getUint32(offset, true);\n const boneId = jointView.getUint32(offset + 4, true);\n const jointNameOffset = jointView.getUint32(offset + 8, true);\n const jointNameLength = jointView.getUint32(offset + 12, true);\n const restMatrixOffset = jointView.getUint32(offset + 16, true);\n const bindMatrixOffset = jointView.getUint32(offset + 20, true);\n if (parentIndex !== MISSING_OFFSET && parentIndex >= index) {\n throw new Error(`Skeleton ${id} has an invalid parent joint index.`);\n }\n const bone = new Bone(\n stringAt(dataBuffer, jointNameOffset, jointNameLength),\n skeleton,\n parentIndex === MISSING_OFFSET ? null : created[parentIndex],\n matrixAt(dataBuffer, restMatrixOffset),\n matrixAt(dataBuffer, restMatrixOffset),\n matrixAt(dataBuffer, bindMatrixOffset),\n index\n );\n created.push(bone);\n bones.set(boneId, bone);\n }\n skeletons.set(id, skeleton);\n break;\n }\n case Command.Geometry: {\n const id = payload.u32();\n geometries.set(id, {\n vertexCount: payload.u32(),\n indexCount: payload.u32(),\n flags: payload.u32(),\n positions: payload.u32(),\n normals: payload.u32(),\n tangents: payload.u32(),\n uv0: payload.u32(),\n colors: payload.u32(),\n joints0: payload.u32(),\n weights0: payload.u32(),\n joints1: payload.u32(),\n weights1: payload.u32(),\n indices: payload.u32(),\n influences: payload.u32(),\n });\n break;\n }\n case Command.Mesh: {\n const id = payload.u32();\n const nodeId = payload.u32();\n const geometryId = payload.u32();\n const materialId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const flags = payload.u32();\n const skeletonId = payload.u32();\n const submeshesOffset = payload.u32();\n const submeshCount = payload.u32();\n const descriptor = geometries.get(geometryId);\n if (!descriptor) {\n throw new Error(`Mesh ${id} references missing geometry ${geometryId}.`);\n }\n const mesh = new Mesh(stringAt(dataBuffer, nameOffset, nameLength), scene);\n trackAsset(container.meshes, mesh);\n applyMeshOrientation(mesh, flags);\n mesh.parent = nodes.get(nodeId) ?? root ?? null;\n const vertexData = new VertexData();\n assertRange(dataBuffer, descriptor.positions, descriptor.vertexCount * 3, 4, \"positions\");\n vertexData.positions = new Float32Array(dataBuffer, descriptor.positions, descriptor.vertexCount * 3);\n if (descriptor.flags & GeometryFlags.Normals) {\n assertRange(dataBuffer, descriptor.normals, descriptor.vertexCount * 3, 4, \"normals\");\n vertexData.normals = new Float32Array(dataBuffer, descriptor.normals, descriptor.vertexCount * 3);\n }\n if (descriptor.flags & GeometryFlags.Tangents) {\n assertRange(dataBuffer, descriptor.tangents, descriptor.vertexCount * 4, 4, \"tangents\");\n vertexData.tangents = new Float32Array(dataBuffer, descriptor.tangents, descriptor.vertexCount * 4);\n }\n if (descriptor.flags & GeometryFlags.Uv0) {\n assertRange(dataBuffer, descriptor.uv0, descriptor.vertexCount * 2, 4, \"texture coordinates\");\n vertexData.uvs = new Float32Array(dataBuffer, descriptor.uv0, descriptor.vertexCount * 2);\n }\n if (descriptor.flags & GeometryFlags.Colors) {\n assertRange(dataBuffer, descriptor.colors, descriptor.vertexCount * 4, 4, \"vertex colors\");\n vertexData.colors = new Float32Array(dataBuffer, descriptor.colors, descriptor.vertexCount * 4);\n }\n if (descriptor.flags & GeometryFlags.Skin0) {\n assertRange(dataBuffer, descriptor.joints0, descriptor.vertexCount * 4, 2, \"joint indices\");\n assertRange(dataBuffer, descriptor.weights0, descriptor.vertexCount * 4, 4, \"joint weights\");\n vertexData.matricesIndices = Float32Array.from(new Uint16Array(dataBuffer, descriptor.joints0, descriptor.vertexCount * 4));\n vertexData.matricesWeights = new Float32Array(dataBuffer, descriptor.weights0, descriptor.vertexCount * 4);\n }\n if (descriptor.flags & GeometryFlags.Skin1) {\n assertRange(dataBuffer, descriptor.joints1, descriptor.vertexCount * 4, 2, \"extra joint indices\");\n assertRange(dataBuffer, descriptor.weights1, descriptor.vertexCount * 4, 4, \"extra joint weights\");\n vertexData.matricesIndicesExtra = Float32Array.from(new Uint16Array(dataBuffer, descriptor.joints1, descriptor.vertexCount * 4));\n vertexData.matricesWeightsExtra = new Float32Array(dataBuffer, descriptor.weights1, descriptor.vertexCount * 4);\n }\n assertRange(dataBuffer, descriptor.indices, descriptor.indexCount, 4, \"indices\");\n vertexData.indices = new Uint32Array(dataBuffer, descriptor.indices, descriptor.indexCount);\n vertexData.applyToMesh(mesh, true);\n if (mesh.geometry) {\n trackAsset(container.geometries, mesh.geometry);\n }\n mesh.numBoneInfluencers = Math.min(descriptor.influences, 8);\n if (skeletonId !== MISSING_OFFSET) {\n mesh.skeleton = skeletons.get(skeletonId) ?? null;\n }\n\n const submeshView = new DataView(dataBuffer);\n assertRange(dataBuffer, submeshesOffset, submeshCount * 5, 4, \"submeshes\");\n const doubleSided = Boolean(flags & MeshFlags.DoubleSided);\n if (submeshCount === 1 && materialId !== MISSING_OFFSET) {\n mesh.material = materialForMesh(materialId, doubleSided);\n } else {\n const multi = new MultiMaterial(`${mesh.name} materials`, scene);\n trackAsset(container.multiMaterials, multi);\n for (let index = 0; index < submeshCount; ++index) {\n const offset = submeshesOffset + index * 20;\n multi.subMaterials.push(materialForMesh(submeshView.getUint32(offset, true), doubleSided));\n }\n mesh.material = multi;\n }\n mesh.releaseSubMeshes();\n for (let index = 0; index < submeshCount; ++index) {\n const offset = submeshesOffset + index * 20;\n new SubMesh(\n index,\n submeshView.getUint32(offset + 12, true),\n submeshView.getUint32(offset + 16, true),\n submeshView.getUint32(offset + 4, true),\n submeshView.getUint32(offset + 8, true),\n mesh\n );\n }\n meshes.set(id, mesh);\n break;\n }\n case Command.MorphTarget: {\n const id = payload.u32();\n const meshId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const vertexCount = payload.u32();\n const positionsOffset = payload.u32();\n const normalsOffset = payload.u32();\n const influence = payload.f32();\n const mesh = meshes.get(meshId);\n if (!mesh) {\n throw new Error(`Morph target references missing mesh ${meshId}.`);\n }\n if (morphTargets.has(id) || vertexCount !== mesh.getTotalVertices() || !Number.isFinite(influence)) {\n throw new Error(`Morph target ${id} has invalid metadata.`);\n }\n assertRange(dataBuffer, positionsOffset, vertexCount * 3, 4, \"morph target positions\");\n let manager = morphTargetManagers.get(meshId);\n if (!manager) {\n manager = new MorphTargetManager(scene, mesh.name);\n manager.areUpdatesFrozen = true;\n trackAsset(container.morphTargetManagers, manager);\n morphTargetManagers.set(meshId, manager);\n }\n const target = new MorphTarget(stringAt(dataBuffer, nameOffset, nameLength), influence, scene, manager);\n target.id = `usd-morph-target-${id}`;\n target.setPositions(new Float32Array(dataBuffer, positionsOffset, vertexCount * 3));\n if (normalsOffset !== MISSING_OFFSET) {\n assertRange(dataBuffer, normalsOffset, vertexCount * 3, 4, \"morph target normals\");\n target.setNormals(new Float32Array(dataBuffer, normalsOffset, vertexCount * 3));\n }\n manager.addTarget(target);\n morphTargets.set(id, target);\n break;\n }\n case Command.AnalyticPrimitive: {\n const id = payload.u32();\n const nodeId = payload.u32();\n const type = payload.u32();\n const materialId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const flags = payload.u32();\n const axis = payload.u32();\n const sizeOrRadius = payload.f32();\n const height = payload.f32();\n const tessellation = payload.u32();\n const name = stringAt(dataBuffer, nameOffset, nameLength);\n if (!Number.isFinite(sizeOrRadius) || sizeOrRadius <= 0) {\n throw new Error(`Analytic primitive ${id} has an invalid size or radius.`);\n }\n if ((type === AnalyticPrimitiveType.Cylinder || type === AnalyticPrimitiveType.Cone) && (!Number.isFinite(height) || height <= 0)) {\n throw new Error(`Analytic primitive ${id} has an invalid height.`);\n }\n if (type !== AnalyticPrimitiveType.Cube && (!Number.isInteger(tessellation) || tessellation < 3 || tessellation > 512)) {\n throw new Error(`Analytic primitive ${id} has invalid tessellation.`);\n }\n let mesh: Mesh;\n switch (type) {\n case AnalyticPrimitiveType.Cube:\n mesh = CreateBox(name, { size: sizeOrRadius }, scene);\n break;\n case AnalyticPrimitiveType.Sphere:\n mesh = CreateSphere(\n name,\n {\n diameter: sizeOrRadius * 2,\n segments: tessellation,\n },\n scene\n );\n break;\n case AnalyticPrimitiveType.Cylinder:\n case AnalyticPrimitiveType.Cone:\n mesh = CreateCylinder(\n name,\n {\n height,\n diameterTop: type === AnalyticPrimitiveType.Cone ? 0 : sizeOrRadius * 2,\n diameterBottom: sizeOrRadius * 2,\n tessellation,\n },\n scene\n );\n break;\n default:\n throw new Error(`Unsupported analytic primitive type ${type}.`);\n }\n trackAsset(container.meshes, mesh);\n if (mesh.geometry) {\n trackAsset(container.geometries, mesh.geometry);\n }\n\n // Babylon builders emit left-handed local winding. Reverse only for USD's\n // default right-handed convention; normals already point outward.\n if (!(flags & MeshFlags.LeftHanded)) {\n const sourceIndices = mesh.getIndices();\n if (!sourceIndices) {\n throw new Error(`Analytic primitive ${id} has no generated indices.`);\n }\n const reversed = Array.from(sourceIndices);\n for (let index = 0; index < reversed.length; index += 3) {\n [reversed[index], reversed[index + 2]] = [reversed[index + 2], reversed[index]];\n }\n mesh.setIndices(reversed);\n }\n if (axis === PrimitiveAxis.X) {\n mesh.rotationQuaternion = Quaternion.RotationAxis(new Vector3(0, 0, 1), -Math.PI / 2);\n } else if (axis === PrimitiveAxis.Z) {\n mesh.rotationQuaternion = Quaternion.RotationAxis(new Vector3(1, 0, 0), Math.PI / 2);\n } else if (axis !== PrimitiveAxis.Y) {\n throw new Error(`Unsupported analytic primitive axis ${axis}.`);\n }\n applyMeshOrientation(mesh, flags);\n mesh.parent = nodes.get(nodeId) ?? root ?? null;\n mesh.material = materialForMesh(materialId, Boolean(flags & MeshFlags.DoubleSided));\n meshes.set(id, mesh);\n break;\n }\n case Command.Instance: {\n const sourceId = payload.u32();\n const nodeId = payload.u32();\n const nameOffset = payload.u32();\n const nameLength = payload.u32();\n const source = meshes.get(sourceId);\n if (!source) {\n throw new Error(`Instance references missing mesh ${sourceId}.`);\n }\n if (thinInstanceSources.has(sourceId)) {\n throw new Error(`Mesh ${sourceId} cannot mix classic and thin instances.`);\n }\n classicInstanceSources.add(sourceId);\n const instance = source.createInstance(stringAt(dataBuffer, nameOffset, nameLength));\n trackAsset(container.meshes, instance);\n instance.parent = nodes.get(nodeId) ?? root ?? null;\n break;\n }\n case Command.ThinInstances: {\n const sourceId = payload.u32();\n const transformsOffset = payload.u32();\n const instanceCount = payload.u32();\n const source = meshes.get(sourceId);\n if (!source) {\n throw new Error(`Thin instances reference missing mesh ${sourceId}.`);\n }\n if (thinInstanceSources.has(sourceId) || classicInstanceSources.has(sourceId)) {\n throw new Error(`Mesh ${sourceId} has duplicate or mixed thin instances.`);\n }\n assertRange(dataBuffer, transformsOffset, instanceCount * 16, 4, \"thin instance transforms\");\n source.thinInstanceSetBuffer(\"matrix\", new Float32Array(dataBuffer, transformsOffset, instanceCount * 16), 16, true);\n source.thinInstanceEnablePicking = true;\n thinInstanceSources.add(sourceId);\n break;\n }\n case Command.Animation: {\n const targetKind = payload.u32();\n const targetId = payload.u32();\n const property = payload.u32();\n const trackIndex = payload.u32();\n const keyCount = payload.u32();\n const timesOffset = payload.u32();\n const valuesOffset = payload.u32();\n const stride = payload.u32();\n if (targetKind !== AnimationTarget.Node && targetKind !== AnimationTarget.Bone && targetKind !== AnimationTarget.MorphTarget) {\n throw new Error(`Invalid animation target kind ${targetKind}.`);\n }\n if ((targetKind === AnimationTarget.MorphTarget) !== (property === AnimationProperty.Influence)) {\n throw new Error(`Invalid animation property ${property} for target kind ${targetKind}.`);\n }\n const expectedStride =\n property === AnimationProperty.Influence\n ? 1\n : property === AnimationProperty.Position || property === AnimationProperty.Scaling\n ? 3\n : property === AnimationProperty.RotationQuaternion\n ? 4\n : property === AnimationProperty.Matrix\n ? 16\n : 0;\n if (stride !== expectedStride) {\n throw new Error(`Invalid animation value stride ${stride} for property ${property}.`);\n }\n const target =\n targetKind === AnimationTarget.Node ? nodes.get(targetId) : targetKind === AnimationTarget.Bone ? bones.get(targetId) : morphTargets.get(targetId);\n if (!target) {\n break;\n }\n const propertyName =\n property === AnimationProperty.Position\n ? \"position\"\n : property === AnimationProperty.RotationQuaternion\n ? \"rotationQuaternion\"\n : property === AnimationProperty.Scaling\n ? \"scaling\"\n : property === AnimationProperty.Influence\n ? \"influence\"\n : targetKind === AnimationTarget.Node\n ? NODE_MATRIX_PROPERTY\n : \"_matrix\";\n const dataType =\n property === AnimationProperty.Influence\n ? Animation.ANIMATIONTYPE_FLOAT\n : property === AnimationProperty.RotationQuaternion\n ? Animation.ANIMATIONTYPE_QUATERNION\n : property === AnimationProperty.Matrix\n ? Animation.ANIMATIONTYPE_MATRIX\n : Animation.ANIMATIONTYPE_VECTOR3;\n const animation = new Animation(`USD ${propertyName}`, propertyName, timeCodesPerSecond, dataType, Animation.ANIMATIONLOOPMODE_CYCLE);\n assertRange(dataBuffer, timesOffset, keyCount, 4, \"animation times\");\n assertRange(dataBuffer, valuesOffset, keyCount * stride, 4, \"animation values\");\n const times = new Float32Array(dataBuffer, timesOffset, keyCount);\n const values = new Float32Array(dataBuffer, valuesOffset, keyCount * stride);\n animation.setKeys(\n Array.from({ length: keyCount }, (_, index) => ({\n frame: times[index],\n value:\n dataType === Animation.ANIMATIONTYPE_QUATERNION\n ? Quaternion.FromArray(values, index * stride)\n : dataType === Animation.ANIMATIONTYPE_MATRIX\n ? Matrix.FromArray(values, index * stride)\n : dataType === Animation.ANIMATIONTYPE_FLOAT\n ? values[index * stride]\n : Vector3.FromArray(values, index * stride),\n }))\n );\n let group = animationGroups.get(trackIndex);\n if (!group) {\n group = new AnimationGroup(`USD Animation ${trackIndex + 1}`, scene);\n animationGroups.set(trackIndex, group);\n trackAsset(container.animationGroups, group);\n }\n group.addTargetedAnimation(animation, target);\n break;\n }\n }\n }\n for (const [meshId, manager] of morphTargetManagers) {\n manager.areUpdatesFrozen = false;\n if (!manager.isUsingTextureForTargets && manager.numTargets <= MorphTargetManager.MaxActiveMorphTargetsInVertexAttributeMode) {\n manager.optimizeInfluencers = false;\n manager.numMaxInfluencers = manager.numTargets;\n }\n meshes.get(meshId)!.morphTargetManager = manager;\n }\n } finally {\n if (!addToScene) {\n scene._blockEntityCollection = previousBlockEntityCollection;\n }\n }\n\n await awaitAbortableAsync(Promise.all(textureLoads), signal);\n await awaitAbortableAsync(\n Promise.all(\n materialTextureBindings.map(async (bindings) => {\n await applyMaterialTextureBindingsAsync(bindings);\n })\n ),\n signal\n );\n for (const { node, parentId } of pendingParents) {\n node.parent = nodes.get(parentId) ?? root ?? null;\n }\n return { container, materializeMs: performance.now() - started };\n } catch (error) {\n rollingBack = true;\n // Decode callbacks can arrive after rollback; observe their rejections without\n // delaying cancellation on an image load that may never finish.\n void Promise.allSettled(textureLoads);\n void Promise.allSettled(processedTextures.values());\n container.dispose();\n for (const url of textureUrls) {\n URL.revokeObjectURL(url);\n }\n throw error;\n }\n}\n"]}
@@ -3,11 +3,21 @@ import { FlowGraphBlockNames } from "@babylonjs/core/FlowGraph/Blocks/flowGraphB
3
3
  import { type ISerializedFlowGraphBlock, type ISerializedFlowGraphContext } from "@babylonjs/core/FlowGraph/typeDefinitions.js";
4
4
  import { type InteractivityGraphToFlowGraphParser } from "./interactivityGraphParser.js";
5
5
  import { type IGLTF } from "../../glTFLoaderInterfaces.js";
6
- interface IGLTFToFlowGraphMappingObject {
6
+ /**
7
+ * Describes how one KHR_interactivity configuration or socket property maps to FlowGraph.
8
+ *
9
+ * The same contract is used for fixed sockets, wildcard sockets, configuration validation,
10
+ * defaulting, and multi-block routing during strict graph lowering.
11
+ */
12
+ export interface IGLTFToFlowGraphMappingObject {
7
13
  /**
8
14
  * The name of the property in the FlowGraph block.
9
15
  */
10
16
  name: string;
17
+ /**
18
+ * Whether this socket mapping exists only for pre-ratification compatibility input.
19
+ */
20
+ compatibilityOnly?: boolean;
11
21
  /**
12
22
  * The type of the property in the glTF specs.
13
23
  * If not provided will be inferred.
@@ -40,7 +50,7 @@ interface IGLTFToFlowGraphMappingObject {
40
50
  * This is used if we generate more than one block for a single glTF node.
41
51
  * Defaults to the first block in the mapping.
42
52
  */
43
- toBlock?: FlowGraphBlockNames;
53
+ toBlock?: FlowGraphBlockNames | string;
44
54
  /**
45
55
  * Used in configuration values. If defined, this will be the default value, if no value is provided.
46
56
  */
@@ -54,6 +64,75 @@ interface IGLTFToFlowGraphMappingObject {
54
64
  * be fed by a `pointer/get` (e.g. the read-only `maxTime` animation pointer).
55
65
  */
56
66
  convertConnectedTimeToFrames?: boolean;
67
+ /**
68
+ * KHR configuration value type used by canonical validation.
69
+ */
70
+ configurationType?: "bool" | "int" | "int[]" | "string";
71
+ /**
72
+ * Whether this configuration entry exists only for canonical validation.
73
+ */
74
+ validationOnly?: boolean;
75
+ /**
76
+ * Whether an operation without a complete default configuration requires this property.
77
+ */
78
+ required?: boolean;
79
+ /**
80
+ * Graph array referenced by an integer configuration value.
81
+ */
82
+ indexSource?: "types" | "variables" | "events" | "nodes" | "assetNodes";
83
+ /**
84
+ * Minimum number of values required for an array configuration.
85
+ */
86
+ minItems?: number;
87
+ /**
88
+ * Whether the configured indices generate required input value sockets.
89
+ */
90
+ generatesInputValueSockets?: boolean;
91
+ /**
92
+ * Whether integer case values generate required input value sockets.
93
+ */
94
+ generatesCaseInputValueSockets?: boolean;
95
+ /**
96
+ * Whether this string configuration generates JSON Pointer Template sockets.
97
+ */
98
+ pointerTemplate?: boolean;
99
+ /**
100
+ * Whether an invalid value falls back to the operation's default configuration.
101
+ */
102
+ invalidUsesDefault?: boolean;
103
+ /**
104
+ * Allowed KHR type signatures for a type-index configuration.
105
+ */
106
+ allowedSignatures?: readonly ("bool" | "float" | "float2" | "float3" | "float4" | "float2x2" | "float3x3" | "float4x4" | "int" | "ref" | "custom")[];
107
+ /**
108
+ * Input socket whose effective type determines this output socket type.
109
+ */
110
+ typeSourceInput?: string;
111
+ /** Inclusive minimum for an integer configuration value. */
112
+ minimum?: number;
113
+ /** Inclusive maximum for an integer configuration value. */
114
+ maximum?: number;
115
+ /**
116
+ * Whether this configuration value generates numbered input flow sockets.
117
+ */
118
+ generatesInputFlowSockets?: boolean;
119
+ /**
120
+ * Whether this configuration array generates output flow sockets.
121
+ */
122
+ generatesOutputFlowSockets?: boolean;
123
+ /**
124
+ * Properties in the same group fall back to their defaults together when any member is
125
+ * missing or invalid.
126
+ */
127
+ configurationGroup?: string;
128
+ /**
129
+ * Whether duplicate array values are removed from the effective configuration.
130
+ */
131
+ uniqueValues?: boolean;
132
+ /**
133
+ * Whether a string configuration value is a `debug/log` message template.
134
+ */
135
+ debugLogTemplate?: boolean;
57
136
  }
58
137
  /**
59
138
  * Description of how a KHR_interactivity declaration (op such as
@@ -68,6 +147,13 @@ export interface IGLTFToFlowGraphMapping {
68
147
  * When adding blocks defined in this module use the KHR_interactivity prefix.
69
148
  */
70
149
  blocks: (FlowGraphBlockNames | string)[];
150
+ /**
151
+ * Exact value socket contract for an operation supplied by another extension.
152
+ */
153
+ declarationSchema?: {
154
+ inputValueSockets: Record<string, "bool" | "float" | "float2" | "float3" | "float4" | "float2x2" | "float3x3" | "float4x4" | "int" | "ref" | "custom">;
155
+ outputValueSockets: Record<string, "bool" | "float" | "float2" | "float3" | "float4" | "float2x2" | "float3x3" | "float4x4" | "int" | "ref" | "custom">;
156
+ };
71
157
  /**
72
158
  * The inputs of the glTF node mapped to the FlowGraph block.
73
159
  */
@@ -176,6 +262,12 @@ export interface IGLTFToFlowGraphMapping {
176
262
  }
177
263
  export declare function getMappingForFullOperationName(fullOperationName: string): IGLTFToFlowGraphMapping | undefined;
178
264
  export declare function getMappingForDeclaration(declaration: IKHRInteractivity_Declaration, returnNoOpIfNotAvailable?: boolean): IGLTFToFlowGraphMapping | undefined;
265
+ /**
266
+ * Creates the typed no-op mapping required for an unsupported extension declaration.
267
+ * @param declaration unsupported extension declaration
268
+ * @returns a mapping that preserves the declared value sockets
269
+ */
270
+ export declare function getNoOpMappingForDeclaration(declaration: IKHRInteractivity_Declaration): IGLTFToFlowGraphMapping;
179
271
  /**
180
272
  * This function will add new mapping to glTF interactivity.
181
273
  * Other extensions can define new types of blocks, this is the way to let interactivity know how to parse them.
@@ -184,8 +276,23 @@ export declare function getMappingForDeclaration(declaration: IKHRInteractivity_
184
276
  * @param mapping The mapping object. See documentation or examples below.
185
277
  */
186
278
  export declare function addNewInteractivityFlowGraphMapping(key: string, extension: string, mapping: IGLTFToFlowGraphMapping): void;
279
+ /**
280
+ * Result of parsing a ratified `debug/log` message template.
281
+ */
282
+ export interface IDebugLogTemplateParseResult {
283
+ /** Whether all literal braces are doubled and every parameter is well formed. */
284
+ valid: boolean;
285
+ /** Unique parameter socket ids in first-occurrence order. */
286
+ sockets: string[];
287
+ }
288
+ /**
289
+ * Parses a ratified `debug/log` message template.
290
+ * Literal braces must be doubled; non-empty text inside a single brace pair defines a socket id.
291
+ * @param message message template to parse
292
+ * @returns template validity and its exact dynamic socket ids
293
+ */
294
+ export declare function ParseDebugLogTemplate(message: string): IDebugLogTemplateParseResult;
187
295
  export declare function getAllSupportedNativeNodeTypes(): string[];
188
- export {};
189
296
  /**
190
297
  *
191
298
  * These are the nodes from the specs: