@babylonjs/loaders 9.26.0 → 9.26.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.
- package/FBX/fbxConstraintBehavior.d.ts +188 -0
- package/FBX/fbxConstraintBehavior.js +532 -0
- package/FBX/fbxConstraintBehavior.js.map +1 -0
- package/FBX/fbxFileLoader.pure.d.ts +175 -6
- package/FBX/fbxFileLoader.pure.js +1521 -286
- package/FBX/fbxFileLoader.pure.js.map +1 -1
- package/FBX/index.d.ts +4 -1
- package/FBX/index.js +1 -0
- package/FBX/index.js.map +1 -1
- package/FBX/interpreter/animation.d.ts +73 -33
- package/FBX/interpreter/animation.js +620 -223
- package/FBX/interpreter/animation.js.map +1 -1
- package/FBX/interpreter/animationCurve.d.ts +91 -0
- package/FBX/interpreter/animationCurve.js +623 -0
- package/FBX/interpreter/animationCurve.js.map +1 -0
- package/FBX/interpreter/blendShapes.js +9 -18
- package/FBX/interpreter/blendShapes.js.map +1 -1
- package/FBX/interpreter/connections.d.ts +1 -1
- package/FBX/interpreter/connections.js +173 -34
- package/FBX/interpreter/connections.js.map +1 -1
- package/FBX/interpreter/constraints.d.ts +68 -0
- package/FBX/interpreter/constraints.js +143 -0
- package/FBX/interpreter/constraints.js.map +1 -0
- package/FBX/interpreter/fbxInterpreter.d.ts +89 -4
- package/FBX/interpreter/fbxInterpreter.js +474 -122
- package/FBX/interpreter/fbxInterpreter.js.map +1 -1
- package/FBX/interpreter/geometry.d.ts +1 -1
- package/FBX/interpreter/geometry.js +150 -92
- package/FBX/interpreter/geometry.js.map +1 -1
- package/FBX/interpreter/legacyDocument.d.ts +11 -0
- package/FBX/interpreter/legacyDocument.js +425 -0
- package/FBX/interpreter/legacyDocument.js.map +1 -0
- package/FBX/interpreter/materialModel.d.ts +71 -0
- package/FBX/interpreter/materialModel.js +622 -0
- package/FBX/interpreter/materialModel.js.map +1 -0
- package/FBX/interpreter/materials.d.ts +13 -1
- package/FBX/interpreter/materials.js +88 -5
- package/FBX/interpreter/materials.js.map +1 -1
- package/FBX/interpreter/nodeTransform.d.ts +32 -0
- package/FBX/interpreter/nodeTransform.js +54 -0
- package/FBX/interpreter/nodeTransform.js.map +1 -0
- package/FBX/interpreter/nurbs.d.ts +99 -0
- package/FBX/interpreter/nurbs.js +627 -0
- package/FBX/interpreter/nurbs.js.map +1 -0
- package/FBX/interpreter/propertyTemplates.d.ts +23 -0
- package/FBX/interpreter/propertyTemplates.js +109 -2
- package/FBX/interpreter/propertyTemplates.js.map +1 -1
- package/FBX/interpreter/rig.js +16 -0
- package/FBX/interpreter/rig.js.map +1 -1
- package/FBX/interpreter/sceneDiagnostics.js +28 -3
- package/FBX/interpreter/sceneDiagnostics.js.map +1 -1
- package/FBX/interpreter/skeleton.d.ts +4 -18
- package/FBX/interpreter/skeleton.js +16 -94
- package/FBX/interpreter/skeleton.js.map +1 -1
- package/FBX/parsers/fbxAsciiParser.js +119 -9
- package/FBX/parsers/fbxAsciiParser.js.map +1 -1
- package/FBX/parsers/fbxBinaryParser.js +74 -22
- package/FBX/parsers/fbxBinaryParser.js.map +1 -1
- package/FBX/pure.d.ts +1 -0
- package/FBX/pure.js +1 -0
- package/FBX/pure.js.map +1 -1
- package/FBX/types/fbxTypes.d.ts +18 -2
- package/FBX/types/fbxTypes.js +40 -12
- package/FBX/types/fbxTypes.js.map +1 -1
- package/USD/usdCommandProtocol.d.ts +20 -4
- package/USD/usdCommandProtocol.js +25 -3
- package/USD/usdCommandProtocol.js.map +1 -1
- package/USD/usdFileLoader.pure.js +2 -0
- package/USD/usdFileLoader.pure.js.map +1 -1
- package/USD/usdSceneMaterializer.js +430 -92
- package/USD/usdSceneMaterializer.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fbxTypes.js","sourceRoot":"","sources":["../../../../../dev/loaders/src/FBX/types/fbxTypes.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG;;;GAGG;
|
|
1
|
+
{"version":3,"file":"fbxTypes.js","sourceRoot":"","sources":["../../../../../dev/loaders/src/FBX/types/fbxTypes.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention, jsdoc/require-param, jsdoc/require-returns */\n/**\n * Intermediate representation for parsed FBX data.\n * Both binary and ASCII parsers produce this same structure.\n */\n\n/** Individual property value within an FBX node */\nexport type FBXPropertyValue = boolean | number | string | Float32Array | Float64Array | Int32Array | Uint8Array;\n\n/** Parsed FBX property type identifier. */\nexport type FBXPropertyType =\n | \"boolean\" // 'C'\n | \"int16\" // 'Y'\n | \"int32\" // 'I'\n | \"int64\" // 'L'\n | \"float32\" // 'F'\n | \"float64\" // 'D'\n | \"string\" // 'S'\n | \"raw\" // 'R'\n | \"float32[]\" // 'f'\n | \"float64[]\" // 'd'\n | \"int32[]\" // 'i'\n | \"int64[]\" // 'l'\n | \"boolean[]\"; // 'b' (stored as Uint8Array where 0=false, 1=true)\n\n/** Individual property within an FBX node. */\nexport interface FBXProperty {\n /** Parsed property type. */\n type: FBXPropertyType;\n /** Parsed property value. */\n value: FBXPropertyValue;\n /**\n * Exact decimal text of an int64 whose magnitude exceeds 2^53; `value` then holds the rounded double. Object\n * ids are the only int64 values where the last bits matter, and `resolveConnections` keys them by this text.\n */\n raw?: string;\n}\n\n/** A node in the FBX document tree */\nexport interface FBXNode {\n /** Node name. */\n name: string;\n /** Node properties. */\n properties: FBXProperty[];\n /** Child nodes. */\n children: FBXNode[];\n}\n\n/** Top-level parsed FBX document */\nexport interface FBXDocument {\n /** FBX file version. */\n version: number;\n /** Top-level document nodes. */\n nodes: FBXNode[];\n}\n\n/** Helper to find a child node by name */\nexport function findChildByName(node: FBXNode, name: string): FBXNode | undefined {\n return node.children.find((c) => c.name === name);\n}\n\n/** Helper to find all children with a given name */\nexport function findChildrenByName(node: FBXNode, name: string): FBXNode[] {\n return node.children.filter((c) => c.name === name);\n}\n\n/** Helper to find a top-level node in a document */\nexport function findDocumentNode(doc: FBXDocument, name: string): FBXNode | undefined {\n return doc.nodes.find((n) => n.name === name);\n}\n\n/** Extract a property value by index, with type narrowing */\nexport function getPropertyValue<T extends FBXPropertyValue>(node: FBXNode, index: number): T | undefined {\n if (index < node.properties.length) {\n return node.properties[index].value as T;\n }\n return undefined;\n}\n\n/**\n * Validates an FBX object ID value: IDs are 64-bit integers, so anything non-numeric, non-finite or fractional is\n * rejected. IDs beyond 2^53 are carried losslessly through the property's `raw` text by `resolveConnections`.\n * @param value - Parsed FBX object ID value\n * @returns The object ID, or undefined when the value cannot be an ID\n */\nexport function getSafeFBXObjectId(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || !Number.isInteger(value)) {\n return undefined;\n }\n return value;\n}\n\n/** Typed array payload types produced by the parsers. */\nexport type FBXArrayValue = Float32Array | Float64Array | Int32Array | Uint8Array;\n\n/**\n * Returns the array payload of a node.\n * FBX 7.x stores arrays as a single array property. FBX 6.x (and some 7.x ASCII exporters) store them as a run of\n * scalar properties, and a one-element array degenerates to a single scalar. All of these are coalesced here.\n * @param node - Node whose properties hold the array\n * @returns The array, or null when the node has no numeric payload\n */\nexport function getNodeArray(node: FBXNode | undefined | null): FBXArrayValue | null {\n if (!node || node.properties.length === 0) {\n return null;\n }\n const first = node.properties[0].value;\n if (node.properties.length === 1 && (first instanceof Float32Array || first instanceof Float64Array || first instanceof Int32Array || first instanceof Uint8Array)) {\n return first;\n }\n const out = new Float64Array(node.properties.length);\n for (let i = 0; i < node.properties.length; i++) {\n const v = node.properties[i].value;\n if (typeof v === \"number\") {\n out[i] = v;\n } else if (typeof v === \"boolean\") {\n out[i] = v ? 1 : 0;\n } else {\n return null;\n }\n }\n return out;\n}\n\n/** Get the numeric ID from a node (first property is typically the int64 UID) */\nexport function getNodeId(node: FBXNode): number | undefined {\n const prop = node.properties[0];\n if (prop && (prop.type === \"int64\" || prop.type === \"int32\")) {\n return getSafeFBXObjectId(prop.value);\n }\n return undefined;\n}\n\n/**\n * Clean FBX object names.\n * FBX names may contain:\n * - A \"Class::\" prefix (e.g. \"Model::valkyrie_mesh\") — strip it\n * - A binary null/control-character class suffix — strip it\n */\nexport function cleanFBXName(fbxName: string): string {\n // Binary FBX: \"Name\\x00\\x01Class\" — the name is everything before the separator and may itself contain \"::\".\n const sepIdx = fbxName.indexOf(\"\\0\\x01\");\n if (sepIdx >= 0) {\n return fbxName.substring(0, sepIdx);\n }\n\n // ASCII FBX: \"Class::Name\" — strip only the leading class prefix (\"Model::Cube::Model\" -> \"Cube::Model\").\n const colonIdx = fbxName.indexOf(\"::\");\n if (colonIdx >= 0) {\n return fbxName.substring(colonIdx + 2);\n }\n\n return fbxName;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const COMMAND_MAGIC = 1111774037;
|
|
2
|
-
export declare const PROTOCOL_VERSION =
|
|
2
|
+
export declare const PROTOCOL_VERSION = 5;
|
|
3
3
|
export declare const MISSING_OFFSET = 4294967295;
|
|
4
4
|
export declare const enum Command {
|
|
5
5
|
Scene = 1,
|
|
@@ -11,7 +11,9 @@ export declare const enum Command {
|
|
|
11
11
|
Mesh = 7,
|
|
12
12
|
Instance = 8,
|
|
13
13
|
Animation = 9,
|
|
14
|
-
AnalyticPrimitive = 10
|
|
14
|
+
AnalyticPrimitive = 10,
|
|
15
|
+
ThinInstances = 11,
|
|
16
|
+
MorphTarget = 12
|
|
15
17
|
}
|
|
16
18
|
export declare const enum AnalyticPrimitiveType {
|
|
17
19
|
Cube = 0,
|
|
@@ -26,19 +28,33 @@ export declare const enum PrimitiveAxis {
|
|
|
26
28
|
}
|
|
27
29
|
export declare const enum AnimationTarget {
|
|
28
30
|
Node = 0,
|
|
29
|
-
Bone = 1
|
|
31
|
+
Bone = 1,
|
|
32
|
+
MorphTarget = 2
|
|
30
33
|
}
|
|
31
34
|
export declare const enum AnimationProperty {
|
|
32
35
|
Position = 0,
|
|
33
36
|
RotationQuaternion = 1,
|
|
34
37
|
Scaling = 2,
|
|
35
|
-
Matrix = 3
|
|
38
|
+
Matrix = 3,
|
|
39
|
+
Influence = 4
|
|
36
40
|
}
|
|
37
41
|
export declare const enum MaterialFlags {
|
|
38
42
|
DoubleSided = 1,
|
|
39
43
|
Unlit = 2,
|
|
40
44
|
AlphaBlend = 4
|
|
41
45
|
}
|
|
46
|
+
export declare const enum TextureOutputChannel {
|
|
47
|
+
R = 0,
|
|
48
|
+
G = 1,
|
|
49
|
+
B = 2,
|
|
50
|
+
A = 3,
|
|
51
|
+
RGB = 4
|
|
52
|
+
}
|
|
53
|
+
export declare const enum USDTextureColorSpace {
|
|
54
|
+
Auto = 0,
|
|
55
|
+
Raw = 1,
|
|
56
|
+
SRGB = 2
|
|
57
|
+
}
|
|
42
58
|
export declare const enum MeshFlags {
|
|
43
59
|
DoubleSided = 1,
|
|
44
60
|
LeftHanded = 2
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
var _PayloadReader_instances, _PayloadReader_view, _PayloadReader_end, _PayloadReader_require;
|
|
3
3
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "@babylonjs/core/tslib.es6.js";
|
|
4
4
|
export const COMMAND_MAGIC = 0x42445355;
|
|
5
|
-
export const PROTOCOL_VERSION =
|
|
5
|
+
export const PROTOCOL_VERSION = 5;
|
|
6
6
|
export const MISSING_OFFSET = 0xffffffff;
|
|
7
7
|
export var Command;
|
|
8
8
|
(function (Command) {
|
|
@@ -16,6 +16,8 @@ export var Command;
|
|
|
16
16
|
Command[Command["Instance"] = 8] = "Instance";
|
|
17
17
|
Command[Command["Animation"] = 9] = "Animation";
|
|
18
18
|
Command[Command["AnalyticPrimitive"] = 10] = "AnalyticPrimitive";
|
|
19
|
+
Command[Command["ThinInstances"] = 11] = "ThinInstances";
|
|
20
|
+
Command[Command["MorphTarget"] = 12] = "MorphTarget";
|
|
19
21
|
})(Command || (Command = {}));
|
|
20
22
|
export var AnalyticPrimitiveType;
|
|
21
23
|
(function (AnalyticPrimitiveType) {
|
|
@@ -34,6 +36,7 @@ export var AnimationTarget;
|
|
|
34
36
|
(function (AnimationTarget) {
|
|
35
37
|
AnimationTarget[AnimationTarget["Node"] = 0] = "Node";
|
|
36
38
|
AnimationTarget[AnimationTarget["Bone"] = 1] = "Bone";
|
|
39
|
+
AnimationTarget[AnimationTarget["MorphTarget"] = 2] = "MorphTarget";
|
|
37
40
|
})(AnimationTarget || (AnimationTarget = {}));
|
|
38
41
|
export var AnimationProperty;
|
|
39
42
|
(function (AnimationProperty) {
|
|
@@ -41,6 +44,7 @@ export var AnimationProperty;
|
|
|
41
44
|
AnimationProperty[AnimationProperty["RotationQuaternion"] = 1] = "RotationQuaternion";
|
|
42
45
|
AnimationProperty[AnimationProperty["Scaling"] = 2] = "Scaling";
|
|
43
46
|
AnimationProperty[AnimationProperty["Matrix"] = 3] = "Matrix";
|
|
47
|
+
AnimationProperty[AnimationProperty["Influence"] = 4] = "Influence";
|
|
44
48
|
})(AnimationProperty || (AnimationProperty = {}));
|
|
45
49
|
export var MaterialFlags;
|
|
46
50
|
(function (MaterialFlags) {
|
|
@@ -48,6 +52,20 @@ export var MaterialFlags;
|
|
|
48
52
|
MaterialFlags[MaterialFlags["Unlit"] = 2] = "Unlit";
|
|
49
53
|
MaterialFlags[MaterialFlags["AlphaBlend"] = 4] = "AlphaBlend";
|
|
50
54
|
})(MaterialFlags || (MaterialFlags = {}));
|
|
55
|
+
export var TextureOutputChannel;
|
|
56
|
+
(function (TextureOutputChannel) {
|
|
57
|
+
TextureOutputChannel[TextureOutputChannel["R"] = 0] = "R";
|
|
58
|
+
TextureOutputChannel[TextureOutputChannel["G"] = 1] = "G";
|
|
59
|
+
TextureOutputChannel[TextureOutputChannel["B"] = 2] = "B";
|
|
60
|
+
TextureOutputChannel[TextureOutputChannel["A"] = 3] = "A";
|
|
61
|
+
TextureOutputChannel[TextureOutputChannel["RGB"] = 4] = "RGB";
|
|
62
|
+
})(TextureOutputChannel || (TextureOutputChannel = {}));
|
|
63
|
+
export var USDTextureColorSpace;
|
|
64
|
+
(function (USDTextureColorSpace) {
|
|
65
|
+
USDTextureColorSpace[USDTextureColorSpace["Auto"] = 0] = "Auto";
|
|
66
|
+
USDTextureColorSpace[USDTextureColorSpace["Raw"] = 1] = "Raw";
|
|
67
|
+
USDTextureColorSpace[USDTextureColorSpace["SRGB"] = 2] = "SRGB";
|
|
68
|
+
})(USDTextureColorSpace || (USDTextureColorSpace = {}));
|
|
51
69
|
export var MeshFlags;
|
|
52
70
|
(function (MeshFlags) {
|
|
53
71
|
MeshFlags[MeshFlags["DoubleSided"] = 1] = "DoubleSided";
|
|
@@ -67,9 +85,9 @@ function expectedPayloadLength(opcode) {
|
|
|
67
85
|
case 1 /* Command.Scene */:
|
|
68
86
|
return 12;
|
|
69
87
|
case 2 /* Command.Texture */:
|
|
70
|
-
return
|
|
88
|
+
return 48;
|
|
71
89
|
case 3 /* Command.Material */:
|
|
72
|
-
return
|
|
90
|
+
return 96;
|
|
73
91
|
case 4 /* Command.TransformNode */:
|
|
74
92
|
case 5 /* Command.Skeleton */:
|
|
75
93
|
return 20;
|
|
@@ -83,6 +101,10 @@ function expectedPayloadLength(opcode) {
|
|
|
83
101
|
return 32;
|
|
84
102
|
case 10 /* Command.AnalyticPrimitive */:
|
|
85
103
|
return 44;
|
|
104
|
+
case 11 /* Command.ThinInstances */:
|
|
105
|
+
return 12;
|
|
106
|
+
case 12 /* Command.MorphTarget */:
|
|
107
|
+
return 32;
|
|
86
108
|
default:
|
|
87
109
|
throw new Error(`Unknown OpenUSD Babylon command opcode ${opcode}.`);
|
|
88
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usdCommandProtocol.js","sourceRoot":"","sources":["../../../../dev/loaders/src/USD/usdCommandProtocol.ts"],"names":[],"mappings":"AAAA,yDAAyD;;;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,MAAM,CAAN,IAAkB,
|
|
1
|
+
{"version":3,"file":"usdCommandProtocol.js","sourceRoot":"","sources":["../../../../dev/loaders/src/USD/usdCommandProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\n\nexport const COMMAND_MAGIC = 0x42445355;\nexport const PROTOCOL_VERSION = 5;\nexport const MISSING_OFFSET = 0xffffffff;\n\nexport const enum Command {\n Scene = 1,\n Texture = 2,\n Material = 3,\n TransformNode = 4,\n Skeleton = 5,\n Geometry = 6,\n Mesh = 7,\n Instance = 8,\n Animation = 9,\n AnalyticPrimitive = 10,\n ThinInstances = 11,\n MorphTarget = 12,\n}\n\nexport const enum AnalyticPrimitiveType {\n Cube = 0,\n Sphere = 1,\n Cylinder = 2,\n Cone = 3,\n}\n\nexport const enum PrimitiveAxis {\n X = 0,\n Y = 1,\n Z = 2,\n}\n\nexport const enum AnimationTarget {\n Node = 0,\n Bone = 1,\n MorphTarget = 2,\n}\n\nexport const enum AnimationProperty {\n Position = 0,\n RotationQuaternion = 1,\n Scaling = 2,\n Matrix = 3,\n Influence = 4,\n}\n\nexport const enum MaterialFlags {\n DoubleSided = 1 << 0,\n Unlit = 1 << 1,\n AlphaBlend = 1 << 2,\n}\n\nexport const enum TextureOutputChannel {\n R = 0,\n G = 1,\n B = 2,\n A = 3,\n RGB = 4,\n}\n\nexport const enum USDTextureColorSpace {\n Auto = 0,\n Raw = 1,\n SRGB = 2,\n}\n\nexport const enum MeshFlags {\n DoubleSided = 1 << 0,\n LeftHanded = 1 << 1,\n}\n\nexport const enum GeometryFlags {\n Normals = 1 << 0,\n Tangents = 1 << 1,\n Uv0 = 1 << 2,\n Colors = 1 << 3,\n Skin0 = 1 << 4,\n Skin1 = 1 << 5,\n}\n\nexport interface CommandRecord {\n opcode: Command;\n flags: number;\n payloadOffset: number;\n payloadLength: number;\n}\n\nfunction expectedPayloadLength(opcode: Command): number {\n switch (opcode) {\n case Command.Scene:\n return 12;\n case Command.Texture:\n return 48;\n case Command.Material:\n return 96;\n case Command.TransformNode:\n case Command.Skeleton:\n return 20;\n case Command.Geometry:\n return 60;\n case Command.Mesh:\n return 40;\n case Command.Instance:\n return 16;\n case Command.Animation:\n return 32;\n case Command.AnalyticPrimitive:\n return 44;\n case Command.ThinInstances:\n return 12;\n case Command.MorphTarget:\n return 32;\n default:\n throw new Error(`Unknown OpenUSD Babylon command opcode ${opcode}.`);\n }\n}\n\nexport function readCommands(buffer: ArrayBuffer): CommandRecord[] {\n const view = new DataView(buffer);\n if (view.byteLength < 16 || view.getUint32(0, true) !== COMMAND_MAGIC) {\n throw new Error(\"Invalid OpenUSD Babylon command buffer.\");\n }\n if (view.getUint16(4, true) !== PROTOCOL_VERSION) {\n throw new Error(`Unsupported OpenUSD Babylon protocol ${view.getUint16(4, true)}.`);\n }\n const count = view.getUint32(8, true);\n const commands: CommandRecord[] = [];\n let offset = 16;\n for (let index = 0; index < count; ++index) {\n if (offset + 8 > view.byteLength) {\n throw new Error(\"Truncated OpenUSD Babylon command header.\");\n }\n const opcode = view.getUint16(offset, true) as Command;\n const flags = view.getUint16(offset + 2, true);\n const payloadLength = view.getUint32(offset + 4, true);\n const payloadOffset = offset + 8;\n const expectedLength = expectedPayloadLength(opcode);\n if (payloadLength !== expectedLength) {\n throw new Error(`Invalid payload length ${payloadLength} for command ${opcode}; ` + `expected ${expectedLength}.`);\n }\n if (payloadOffset + payloadLength > view.byteLength) {\n throw new Error(\"Truncated OpenUSD Babylon command payload.\");\n }\n commands.push({ opcode, flags, payloadOffset, payloadLength });\n offset = payloadOffset + payloadLength;\n }\n if (offset !== view.byteLength) {\n throw new Error(\"Unexpected trailing data in OpenUSD Babylon command buffer.\");\n }\n return commands;\n}\n\nexport class PayloadReader {\n readonly #view: DataView;\n readonly #end: number;\n offset: number;\n\n constructor(buffer: ArrayBuffer, offset: number, length: number) {\n this.#view = new DataView(buffer);\n this.offset = offset;\n this.#end = offset + length;\n }\n\n u32(): number {\n this.#require(4);\n const value = this.#view.getUint32(this.offset, true);\n this.offset += 4;\n return value;\n }\n\n f32(): number {\n this.#require(4);\n const value = this.#view.getFloat32(this.offset, true);\n this.offset += 4;\n return value;\n }\n\n #require(byteLength: number): void {\n if (this.offset + byteLength > this.#end) {\n throw new Error(\"OpenUSD Babylon command payload read exceeded its bounds.\");\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** This file must only contain pure code and pure imports */
|
|
2
2
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
3
3
|
import { RegisterInstancedMesh } from "@babylonjs/core/Meshes/instancedMesh.pure.js";
|
|
4
|
+
import { RegisterThinInstanceMesh } from "@babylonjs/core/Meshes/thinInstanceMesh.pure.js";
|
|
4
5
|
import { RegisterPbrMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.pure.js";
|
|
5
6
|
import { Tools } from "@babylonjs/core/Misc/tools.pure.js";
|
|
6
7
|
import { AssetContainer } from "@babylonjs/core/assetContainer.js";
|
|
@@ -323,6 +324,7 @@ let _Registered = false;
|
|
|
323
324
|
export function _RegisterUSDLoaderDependencies() {
|
|
324
325
|
RegisterPbrMaterial();
|
|
325
326
|
RegisterInstancedMesh();
|
|
327
|
+
RegisterThinInstanceMesh();
|
|
326
328
|
}
|
|
327
329
|
/**
|
|
328
330
|
* Registers the USD scene loader plugin and its Babylon.js runtime dependencies.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usdFileLoader.pure.js","sourceRoot":"","sources":["../../../../dev/loaders/src/USD/usdFileLoader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { RegisterInstancedMesh } from \"core/Meshes/instancedMesh.pure\";\nimport { RegisterPbrMaterial } from \"core/Materials/PBR/pbrMaterial.pure\";\nimport { Tools } from \"core/Misc/tools.pure\";\nimport { type AbstractAssetContainer, AssetContainer } from \"core/assetContainer\";\nimport {\n type ISceneLoaderAsyncResult,\n type ISceneLoaderPluginAsync,\n type ISceneLoaderPluginFactory,\n type ISceneLoaderProgressEvent,\n type SceneLoaderPluginOptions,\n RegisterSceneLoaderPlugin,\n} from \"core/Loading/sceneLoader\";\nimport { type Scene } from \"core/scene.pure\";\n\nimport { USDFileLoaderMetadata } from \"./usdFileLoader.metadata\";\nimport {\n type USDBinaryInput,\n type USDFileLoaderOptions,\n type USDImportDiagnostics,\n type USDImportStatistics,\n type USDImportTimings,\n type USDLoadProgress,\n type USDVirtualFiles,\n} from \"./usdLoadingOptions\";\nimport { materializeCommandBuffers } from \"./usdSceneMaterializer\";\nimport { PROTOCOL_VERSION } from \"./usdCommandProtocol\";\nimport { type ExtractRequest, type WorkerResponse } from \"./usdWorkerMessages\";\n\ninterface PendingRequest {\n resolve: (response: Extract<WorkerResponse, { type: \"result\" }>) => void;\n reject: (error: Error) => void;\n onProgress?: (progress: USDLoadProgress) => void;\n onLog?: USDFileLoaderOptions[\"onLog\"];\n}\n\ninterface USDLoadResult {\n container: AbstractAssetContainer;\n timings: USDImportTimings;\n statistics: USDImportStatistics;\n missingAssets: string[];\n}\n\nconst _DefaultAssetRootUrl = `${Tools._DefaultCdnUrl}/babylonUsdImporter/${PROTOCOL_VERSION}/`;\nconst _SupportedExtension = /\\.(?:usd|usda|usdc|usdz)$/i;\n\nfunction _toBytes(input: USDBinaryInput): Uint8Array {\n if (input instanceof Uint8Array) {\n return input.slice();\n }\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input.slice(0));\n }\n return new Uint8Array(input.buffer.slice(input.byteOffset, input.byteOffset + input.byteLength));\n}\n\nfunction _normalizeFiles(files?: USDVirtualFiles): Record<string, Uint8Array> | undefined {\n if (!files) {\n return undefined;\n }\n const normalized: Record<string, Uint8Array> = {};\n for (const [path, input] of Object.entries(files)) {\n normalized[path] = _toBytes(input);\n }\n return normalized;\n}\n\nfunction _stagedFileName(fileName: string | undefined, bytes: Uint8Array, preserveUrlCharacters: boolean): string {\n const normalizedFileName = fileName?.replace(/\\\\/g, \"/\").replace(/^\\.\\/+/, \"\");\n const cleanFileName = preserveUrlCharacters ? normalizedFileName : normalizedFileName?.split(/[?#]/, 1)[0];\n const pathParts = cleanFileName?.split(\"/\").filter(Boolean);\n if (cleanFileName && !cleanFileName.startsWith(\"/\") && pathParts?.length && !pathParts.includes(\"..\") && _SupportedExtension.test(cleanFileName)) {\n return pathParts.join(\"/\");\n }\n const isZip = bytes.length >= 4 && bytes[0] === 0x50 && bytes[1] === 0x4b && bytes[2] === 0x03 && bytes[3] === 0x04;\n return isZip ? \"scene.usdz\" : \"scene.usd\";\n}\n\nfunction _toAsyncResult(container: AbstractAssetContainer): ISceneLoaderAsyncResult {\n return {\n meshes: container.meshes,\n particleSystems: container.particleSystems,\n skeletons: container.skeletons,\n animationGroups: container.animationGroups,\n transformNodes: container.transformNodes,\n geometries: container.geometries,\n lights: container.lights,\n spriteManagers: container.spriteManagers,\n };\n}\n\n/**\n * OpenUSD scene loader backed by a WebAssembly command-buffer extractor.\n */\nexport class USDFileLoader implements ISceneLoaderPluginAsync, ISceneLoaderPluginFactory {\n /**\n * Default URLs for the prebuilt OpenUSD importer assets.\n */\n public static DefaultConfiguration = {\n glueUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.js`,\n wasmUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.wasm`,\n dataUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.data`,\n workerUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.worker.js`,\n };\n\n /**\n * Defines the name of the plugin.\n */\n public readonly name = USDFileLoaderMetadata.name;\n\n /**\n * Defines the extensions the plugin can load.\n */\n public readonly extensions = USDFileLoaderMetadata.extensions;\n\n private readonly _options: USDFileLoaderOptions;\n private _worker: Worker | undefined;\n private _workerUrl: string | undefined;\n private _workerBlobUrl: string | undefined;\n private _nextRequestId = 1;\n private readonly _pending = new Map<number, PendingRequest>();\n private readonly _activeLoads = new Set<AbortController>();\n\n /**\n * Creates a USD loader.\n * @param options Options controlling worker assets, supporting files, and diagnostics.\n */\n public constructor(options: Partial<USDFileLoaderOptions> = {}) {\n this._options = {\n ...options,\n resolveByFileName: options.resolveByFileName ?? true,\n glueUrl: options.glueUrl ?? USDFileLoader.DefaultConfiguration.glueUrl,\n wasmUrl: options.wasmUrl ?? USDFileLoader.DefaultConfiguration.wasmUrl,\n dataUrl: options.dataUrl ?? USDFileLoader.DefaultConfiguration.dataUrl,\n workerUrl: options.workerUrl ?? USDFileLoader.DefaultConfiguration.workerUrl,\n };\n }\n\n /**\n * Creates a configured plugin instance for a SceneLoader operation.\n * @param options SceneLoader plugin options.\n * @returns The configured USD loader.\n */\n public createPlugin(options: SceneLoaderPluginOptions): ISceneLoaderPluginAsync {\n _RegisterUSDLoaderDependencies();\n return new USDFileLoader(options[USDFileLoaderMetadata.name]);\n }\n\n /**\n * Imports all objects from a USD stage into a scene.\n * @param _meshesNames Mesh name filtering is not currently supported.\n * @param scene The scene receiving the imported objects.\n * @param data The USD, USDA, USDC, or USDZ bytes.\n * @param rootUrl The source root URL.\n * @param onProgress SceneLoader progress callback.\n * @param fileName Name of the root USD layer.\n * @returns The imported Babylon.js objects.\n */\n public async importMeshAsync(\n _meshesNames: string | readonly string[] | null | undefined,\n scene: Scene,\n data: unknown,\n rootUrl: string,\n onProgress?: (event: ISceneLoaderProgressEvent) => void,\n fileName?: string\n ): Promise<ISceneLoaderAsyncResult> {\n const result = await this._loadAsync(scene, data, rootUrl, onProgress, fileName, true);\n return _toAsyncResult(result.container);\n }\n\n /**\n * Loads a USD stage into a scene.\n * @param scene The scene receiving the imported objects.\n * @param data The USD, USDA, USDC, or USDZ bytes.\n * @param rootUrl The source root URL.\n * @param onProgress SceneLoader progress callback.\n * @param fileName Name of the root USD layer.\n */\n public async loadAsync(scene: Scene, data: unknown, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<void> {\n await this._loadAsync(scene, data, rootUrl, onProgress, fileName, true);\n }\n\n /**\n * Loads a USD stage into an asset container.\n * @param scene The scene used to create imported objects.\n * @param data The USD, USDA, USDC, or USDZ bytes.\n * @param rootUrl The source root URL.\n * @param onProgress SceneLoader progress callback.\n * @param fileName Name of the root USD layer.\n * @returns The populated asset container.\n */\n public async loadAssetContainerAsync(\n scene: Scene,\n data: unknown,\n rootUrl: string,\n onProgress?: (event: ISceneLoaderProgressEvent) => void,\n fileName?: string\n ): Promise<AssetContainer> {\n const container = (await this._loadAsync(scene, data, rootUrl, onProgress, fileName, false)).container;\n if (!(container instanceof AssetContainer)) {\n throw new Error(\"USDFileLoader failed to create an asset container.\");\n }\n return container;\n }\n\n /**\n * Releases the worker and rejects pending loads.\n */\n public dispose(): void {\n this._terminateWorker();\n const error = new Error(\"USDFileLoader was disposed.\");\n for (const controller of this._activeLoads) {\n controller.abort(error);\n }\n for (const request of this._pending.values()) {\n request.reject(error);\n }\n this._pending.clear();\n }\n\n private async _loadAsync(\n scene: Scene,\n data: unknown,\n _rootUrl: string,\n onProgress: ((event: ISceneLoaderProgressEvent) => void) | undefined,\n fileName: string | undefined,\n addToScene: boolean\n ): Promise<USDLoadResult> {\n if (!(data instanceof ArrayBuffer) && !ArrayBuffer.isView(data)) {\n throw new Error(\"USDFileLoader expects binary USD data.\");\n }\n const bytes = _toBytes(data);\n const files = _normalizeFiles(this._options.files);\n const requestId = this._nextRequestId++;\n const request: ExtractRequest = {\n type: \"extract\",\n requestId,\n asset: {\n bytes,\n files,\n fileName: _stagedFileName(this._options.rootFileName ?? fileName, bytes, this._options.rootFileName !== undefined),\n resolveByFileName: this._options.resolveByFileName ?? true,\n glueUrl: this._options.glueUrl,\n wasmUrl: this._options.wasmUrl,\n dataUrl: this._options.dataUrl,\n },\n };\n const transfer = [...new Set([bytes.buffer, ...Object.values(files ?? {}).map((file) => file.buffer)])];\n const controller = new AbortController();\n const signal = controller.signal;\n this._activeLoads.add(controller);\n try {\n const worker = this._getWorker(this._options.workerUrl);\n const response = await new Promise<Extract<WorkerResponse, { type: \"result\" }>>((resolve, reject) => {\n this._pending.set(requestId, {\n resolve,\n reject,\n onProgress: (progress) => {\n this._options.onProgress?.(progress);\n onProgress?.({\n lengthComputable: false,\n loaded: _ProgressPhaseIndex[progress.phase],\n total: 4,\n });\n },\n onLog: this._options.onLog,\n });\n try {\n worker.postMessage(request, transfer);\n } catch (error) {\n this._pending.delete(requestId);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n\n const materializingProgress = {\n phase: \"materializing\",\n message: \"Creating Babylon.js objects...\",\n } as const;\n this._options.onProgress?.(materializingProgress);\n onProgress?.({ lengthComputable: false, loaded: 4, total: 4 });\n signal.throwIfAborted();\n const materialized = await materializeCommandBuffers(scene, response.commands, response.data, addToScene, signal);\n const result = {\n container: materialized.container,\n timings: {\n ...response.timings,\n materializeMs: materialized.materializeMs,\n },\n statistics: response.statistics,\n missingAssets: response.missingAssets,\n };\n try {\n signal.throwIfAborted();\n this._options.onComplete?.({\n timings: result.timings,\n statistics: result.statistics,\n missingAssets: result.missingAssets,\n } satisfies USDImportDiagnostics);\n signal.throwIfAborted();\n } catch (error) {\n materialized.container.dispose();\n throw error;\n }\n return result;\n } finally {\n this._activeLoads.delete(controller);\n if (this._pending.size === 0) {\n this._terminateWorker();\n }\n }\n }\n\n private _getWorker(workerUrl?: string | URL): Worker {\n if (!workerUrl) {\n throw new Error(\"The USD worker URL was not configured.\");\n }\n const currentLocation = globalThis.location;\n const resolvedUrl = new URL(String(workerUrl), currentLocation?.href ?? \"http://localhost/\").href;\n if (this._worker && this._workerUrl !== resolvedUrl) {\n if (this._pending.size > 0) {\n throw new Error(\"Cannot change the USD worker URL while requests are pending.\");\n }\n this._terminateWorker();\n }\n if (this._worker) {\n return this._worker;\n }\n this._workerUrl = resolvedUrl;\n if (!currentLocation || new URL(resolvedUrl).origin === currentLocation.origin) {\n this._worker = new Worker(resolvedUrl, { type: \"module\" });\n } else {\n this._workerBlobUrl = URL.createObjectURL(new Blob([`import ${JSON.stringify(resolvedUrl)};`], { type: \"application/javascript\" }));\n this._worker = new Worker(this._workerBlobUrl, { type: \"module\" });\n }\n this._worker.addEventListener(\"message\", (event: MessageEvent<WorkerResponse>) => {\n const response = event.data;\n const pending = this._pending.get(response.requestId);\n if (!pending) {\n return;\n }\n if (response.type === \"progress\") {\n pending.onProgress?.(response.progress);\n return;\n }\n if (response.type === \"log\") {\n pending.onLog?.(response.level >= 2 ? \"error\" : response.level === 1 ? \"warning\" : \"info\", response.message);\n return;\n }\n this._pending.delete(response.requestId);\n if (response.type === \"error\") {\n const error = new Error(response.message);\n error.stack = response.stack;\n pending.reject(error);\n } else {\n pending.resolve(response);\n }\n });\n const fail = (error: Error) => {\n this._terminateWorker();\n for (const request of this._pending.values()) {\n request.reject(error);\n }\n this._pending.clear();\n };\n this._worker.addEventListener(\"error\", (event) => {\n fail(event.error ?? new Error(event.message || `Could not load the USD worker from '${resolvedUrl}'.`));\n });\n this._worker.addEventListener(\"messageerror\", () => {\n fail(new Error(\"The USD worker returned a message that could not be deserialized.\"));\n });\n return this._worker;\n }\n\n private _terminateWorker(): void {\n this._worker?.terminate();\n this._worker = undefined;\n this._workerUrl = undefined;\n if (this._workerBlobUrl) {\n URL.revokeObjectURL(this._workerBlobUrl);\n this._workerBlobUrl = undefined;\n }\n }\n}\n\nconst _ProgressPhaseIndex: Record<USDLoadProgress[\"phase\"], number> = {\n initializing: 1,\n staging: 2,\n extracting: 3,\n materializing: 4,\n};\n\nlet _Registered = false;\n\n/** @internal */\nexport function _RegisterUSDLoaderDependencies(): void {\n RegisterPbrMaterial();\n RegisterInstancedMesh();\n}\n\n/**\n * Registers the USD scene loader plugin and its Babylon.js runtime dependencies.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterUSDFileLoader(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n _RegisterUSDLoaderDependencies();\n RegisterSceneLoaderPlugin(new USDFileLoader());\n}\n"]}
|
|
1
|
+
{"version":3,"file":"usdFileLoader.pure.js","sourceRoot":"","sources":["../../../../dev/loaders/src/USD/usdFileLoader.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { RegisterInstancedMesh } from \"core/Meshes/instancedMesh.pure\";\nimport { RegisterThinInstanceMesh } from \"core/Meshes/thinInstanceMesh.pure\";\nimport { RegisterPbrMaterial } from \"core/Materials/PBR/pbrMaterial.pure\";\nimport { Tools } from \"core/Misc/tools.pure\";\nimport { type AbstractAssetContainer, AssetContainer } from \"core/assetContainer\";\nimport {\n type ISceneLoaderAsyncResult,\n type ISceneLoaderPluginAsync,\n type ISceneLoaderPluginFactory,\n type ISceneLoaderProgressEvent,\n type SceneLoaderPluginOptions,\n RegisterSceneLoaderPlugin,\n} from \"core/Loading/sceneLoader\";\nimport { type Scene } from \"core/scene.pure\";\n\nimport { USDFileLoaderMetadata } from \"./usdFileLoader.metadata\";\nimport {\n type USDBinaryInput,\n type USDFileLoaderOptions,\n type USDImportDiagnostics,\n type USDImportStatistics,\n type USDImportTimings,\n type USDLoadProgress,\n type USDVirtualFiles,\n} from \"./usdLoadingOptions\";\nimport { materializeCommandBuffers } from \"./usdSceneMaterializer\";\nimport { PROTOCOL_VERSION } from \"./usdCommandProtocol\";\nimport { type ExtractRequest, type WorkerResponse } from \"./usdWorkerMessages\";\n\ninterface PendingRequest {\n resolve: (response: Extract<WorkerResponse, { type: \"result\" }>) => void;\n reject: (error: Error) => void;\n onProgress?: (progress: USDLoadProgress) => void;\n onLog?: USDFileLoaderOptions[\"onLog\"];\n}\n\ninterface USDLoadResult {\n container: AbstractAssetContainer;\n timings: USDImportTimings;\n statistics: USDImportStatistics;\n missingAssets: string[];\n}\n\nconst _DefaultAssetRootUrl = `${Tools._DefaultCdnUrl}/babylonUsdImporter/${PROTOCOL_VERSION}/`;\nconst _SupportedExtension = /\\.(?:usd|usda|usdc|usdz)$/i;\n\nfunction _toBytes(input: USDBinaryInput): Uint8Array {\n if (input instanceof Uint8Array) {\n return input.slice();\n }\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input.slice(0));\n }\n return new Uint8Array(input.buffer.slice(input.byteOffset, input.byteOffset + input.byteLength));\n}\n\nfunction _normalizeFiles(files?: USDVirtualFiles): Record<string, Uint8Array> | undefined {\n if (!files) {\n return undefined;\n }\n const normalized: Record<string, Uint8Array> = {};\n for (const [path, input] of Object.entries(files)) {\n normalized[path] = _toBytes(input);\n }\n return normalized;\n}\n\nfunction _stagedFileName(fileName: string | undefined, bytes: Uint8Array, preserveUrlCharacters: boolean): string {\n const normalizedFileName = fileName?.replace(/\\\\/g, \"/\").replace(/^\\.\\/+/, \"\");\n const cleanFileName = preserveUrlCharacters ? normalizedFileName : normalizedFileName?.split(/[?#]/, 1)[0];\n const pathParts = cleanFileName?.split(\"/\").filter(Boolean);\n if (cleanFileName && !cleanFileName.startsWith(\"/\") && pathParts?.length && !pathParts.includes(\"..\") && _SupportedExtension.test(cleanFileName)) {\n return pathParts.join(\"/\");\n }\n const isZip = bytes.length >= 4 && bytes[0] === 0x50 && bytes[1] === 0x4b && bytes[2] === 0x03 && bytes[3] === 0x04;\n return isZip ? \"scene.usdz\" : \"scene.usd\";\n}\n\nfunction _toAsyncResult(container: AbstractAssetContainer): ISceneLoaderAsyncResult {\n return {\n meshes: container.meshes,\n particleSystems: container.particleSystems,\n skeletons: container.skeletons,\n animationGroups: container.animationGroups,\n transformNodes: container.transformNodes,\n geometries: container.geometries,\n lights: container.lights,\n spriteManagers: container.spriteManagers,\n };\n}\n\n/**\n * OpenUSD scene loader backed by a WebAssembly command-buffer extractor.\n */\nexport class USDFileLoader implements ISceneLoaderPluginAsync, ISceneLoaderPluginFactory {\n /**\n * Default URLs for the prebuilt OpenUSD importer assets.\n */\n public static DefaultConfiguration = {\n glueUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.js`,\n wasmUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.wasm`,\n dataUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.data`,\n workerUrl: `${_DefaultAssetRootUrl}babylon-usd-importer.worker.js`,\n };\n\n /**\n * Defines the name of the plugin.\n */\n public readonly name = USDFileLoaderMetadata.name;\n\n /**\n * Defines the extensions the plugin can load.\n */\n public readonly extensions = USDFileLoaderMetadata.extensions;\n\n private readonly _options: USDFileLoaderOptions;\n private _worker: Worker | undefined;\n private _workerUrl: string | undefined;\n private _workerBlobUrl: string | undefined;\n private _nextRequestId = 1;\n private readonly _pending = new Map<number, PendingRequest>();\n private readonly _activeLoads = new Set<AbortController>();\n\n /**\n * Creates a USD loader.\n * @param options Options controlling worker assets, supporting files, and diagnostics.\n */\n public constructor(options: Partial<USDFileLoaderOptions> = {}) {\n this._options = {\n ...options,\n resolveByFileName: options.resolveByFileName ?? true,\n glueUrl: options.glueUrl ?? USDFileLoader.DefaultConfiguration.glueUrl,\n wasmUrl: options.wasmUrl ?? USDFileLoader.DefaultConfiguration.wasmUrl,\n dataUrl: options.dataUrl ?? USDFileLoader.DefaultConfiguration.dataUrl,\n workerUrl: options.workerUrl ?? USDFileLoader.DefaultConfiguration.workerUrl,\n };\n }\n\n /**\n * Creates a configured plugin instance for a SceneLoader operation.\n * @param options SceneLoader plugin options.\n * @returns The configured USD loader.\n */\n public createPlugin(options: SceneLoaderPluginOptions): ISceneLoaderPluginAsync {\n _RegisterUSDLoaderDependencies();\n return new USDFileLoader(options[USDFileLoaderMetadata.name]);\n }\n\n /**\n * Imports all objects from a USD stage into a scene.\n * @param _meshesNames Mesh name filtering is not currently supported.\n * @param scene The scene receiving the imported objects.\n * @param data The USD, USDA, USDC, or USDZ bytes.\n * @param rootUrl The source root URL.\n * @param onProgress SceneLoader progress callback.\n * @param fileName Name of the root USD layer.\n * @returns The imported Babylon.js objects.\n */\n public async importMeshAsync(\n _meshesNames: string | readonly string[] | null | undefined,\n scene: Scene,\n data: unknown,\n rootUrl: string,\n onProgress?: (event: ISceneLoaderProgressEvent) => void,\n fileName?: string\n ): Promise<ISceneLoaderAsyncResult> {\n const result = await this._loadAsync(scene, data, rootUrl, onProgress, fileName, true);\n return _toAsyncResult(result.container);\n }\n\n /**\n * Loads a USD stage into a scene.\n * @param scene The scene receiving the imported objects.\n * @param data The USD, USDA, USDC, or USDZ bytes.\n * @param rootUrl The source root URL.\n * @param onProgress SceneLoader progress callback.\n * @param fileName Name of the root USD layer.\n */\n public async loadAsync(scene: Scene, data: unknown, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<void> {\n await this._loadAsync(scene, data, rootUrl, onProgress, fileName, true);\n }\n\n /**\n * Loads a USD stage into an asset container.\n * @param scene The scene used to create imported objects.\n * @param data The USD, USDA, USDC, or USDZ bytes.\n * @param rootUrl The source root URL.\n * @param onProgress SceneLoader progress callback.\n * @param fileName Name of the root USD layer.\n * @returns The populated asset container.\n */\n public async loadAssetContainerAsync(\n scene: Scene,\n data: unknown,\n rootUrl: string,\n onProgress?: (event: ISceneLoaderProgressEvent) => void,\n fileName?: string\n ): Promise<AssetContainer> {\n const container = (await this._loadAsync(scene, data, rootUrl, onProgress, fileName, false)).container;\n if (!(container instanceof AssetContainer)) {\n throw new Error(\"USDFileLoader failed to create an asset container.\");\n }\n return container;\n }\n\n /**\n * Releases the worker and rejects pending loads.\n */\n public dispose(): void {\n this._terminateWorker();\n const error = new Error(\"USDFileLoader was disposed.\");\n for (const controller of this._activeLoads) {\n controller.abort(error);\n }\n for (const request of this._pending.values()) {\n request.reject(error);\n }\n this._pending.clear();\n }\n\n private async _loadAsync(\n scene: Scene,\n data: unknown,\n _rootUrl: string,\n onProgress: ((event: ISceneLoaderProgressEvent) => void) | undefined,\n fileName: string | undefined,\n addToScene: boolean\n ): Promise<USDLoadResult> {\n if (!(data instanceof ArrayBuffer) && !ArrayBuffer.isView(data)) {\n throw new Error(\"USDFileLoader expects binary USD data.\");\n }\n const bytes = _toBytes(data);\n const files = _normalizeFiles(this._options.files);\n const requestId = this._nextRequestId++;\n const request: ExtractRequest = {\n type: \"extract\",\n requestId,\n asset: {\n bytes,\n files,\n fileName: _stagedFileName(this._options.rootFileName ?? fileName, bytes, this._options.rootFileName !== undefined),\n resolveByFileName: this._options.resolveByFileName ?? true,\n glueUrl: this._options.glueUrl,\n wasmUrl: this._options.wasmUrl,\n dataUrl: this._options.dataUrl,\n },\n };\n const transfer = [...new Set([bytes.buffer, ...Object.values(files ?? {}).map((file) => file.buffer)])];\n const controller = new AbortController();\n const signal = controller.signal;\n this._activeLoads.add(controller);\n try {\n const worker = this._getWorker(this._options.workerUrl);\n const response = await new Promise<Extract<WorkerResponse, { type: \"result\" }>>((resolve, reject) => {\n this._pending.set(requestId, {\n resolve,\n reject,\n onProgress: (progress) => {\n this._options.onProgress?.(progress);\n onProgress?.({\n lengthComputable: false,\n loaded: _ProgressPhaseIndex[progress.phase],\n total: 4,\n });\n },\n onLog: this._options.onLog,\n });\n try {\n worker.postMessage(request, transfer);\n } catch (error) {\n this._pending.delete(requestId);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n\n const materializingProgress = {\n phase: \"materializing\",\n message: \"Creating Babylon.js objects...\",\n } as const;\n this._options.onProgress?.(materializingProgress);\n onProgress?.({ lengthComputable: false, loaded: 4, total: 4 });\n signal.throwIfAborted();\n const materialized = await materializeCommandBuffers(scene, response.commands, response.data, addToScene, signal);\n const result = {\n container: materialized.container,\n timings: {\n ...response.timings,\n materializeMs: materialized.materializeMs,\n },\n statistics: response.statistics,\n missingAssets: response.missingAssets,\n };\n try {\n signal.throwIfAborted();\n this._options.onComplete?.({\n timings: result.timings,\n statistics: result.statistics,\n missingAssets: result.missingAssets,\n } satisfies USDImportDiagnostics);\n signal.throwIfAborted();\n } catch (error) {\n materialized.container.dispose();\n throw error;\n }\n return result;\n } finally {\n this._activeLoads.delete(controller);\n if (this._pending.size === 0) {\n this._terminateWorker();\n }\n }\n }\n\n private _getWorker(workerUrl?: string | URL): Worker {\n if (!workerUrl) {\n throw new Error(\"The USD worker URL was not configured.\");\n }\n const currentLocation = globalThis.location;\n const resolvedUrl = new URL(String(workerUrl), currentLocation?.href ?? \"http://localhost/\").href;\n if (this._worker && this._workerUrl !== resolvedUrl) {\n if (this._pending.size > 0) {\n throw new Error(\"Cannot change the USD worker URL while requests are pending.\");\n }\n this._terminateWorker();\n }\n if (this._worker) {\n return this._worker;\n }\n this._workerUrl = resolvedUrl;\n if (!currentLocation || new URL(resolvedUrl).origin === currentLocation.origin) {\n this._worker = new Worker(resolvedUrl, { type: \"module\" });\n } else {\n this._workerBlobUrl = URL.createObjectURL(new Blob([`import ${JSON.stringify(resolvedUrl)};`], { type: \"application/javascript\" }));\n this._worker = new Worker(this._workerBlobUrl, { type: \"module\" });\n }\n this._worker.addEventListener(\"message\", (event: MessageEvent<WorkerResponse>) => {\n const response = event.data;\n const pending = this._pending.get(response.requestId);\n if (!pending) {\n return;\n }\n if (response.type === \"progress\") {\n pending.onProgress?.(response.progress);\n return;\n }\n if (response.type === \"log\") {\n pending.onLog?.(response.level >= 2 ? \"error\" : response.level === 1 ? \"warning\" : \"info\", response.message);\n return;\n }\n this._pending.delete(response.requestId);\n if (response.type === \"error\") {\n const error = new Error(response.message);\n error.stack = response.stack;\n pending.reject(error);\n } else {\n pending.resolve(response);\n }\n });\n const fail = (error: Error) => {\n this._terminateWorker();\n for (const request of this._pending.values()) {\n request.reject(error);\n }\n this._pending.clear();\n };\n this._worker.addEventListener(\"error\", (event) => {\n fail(event.error ?? new Error(event.message || `Could not load the USD worker from '${resolvedUrl}'.`));\n });\n this._worker.addEventListener(\"messageerror\", () => {\n fail(new Error(\"The USD worker returned a message that could not be deserialized.\"));\n });\n return this._worker;\n }\n\n private _terminateWorker(): void {\n this._worker?.terminate();\n this._worker = undefined;\n this._workerUrl = undefined;\n if (this._workerBlobUrl) {\n URL.revokeObjectURL(this._workerBlobUrl);\n this._workerBlobUrl = undefined;\n }\n }\n}\n\nconst _ProgressPhaseIndex: Record<USDLoadProgress[\"phase\"], number> = {\n initializing: 1,\n staging: 2,\n extracting: 3,\n materializing: 4,\n};\n\nlet _Registered = false;\n\n/** @internal */\nexport function _RegisterUSDLoaderDependencies(): void {\n RegisterPbrMaterial();\n RegisterInstancedMesh();\n RegisterThinInstanceMesh();\n}\n\n/**\n * Registers the USD scene loader plugin and its Babylon.js runtime dependencies.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterUSDFileLoader(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n _RegisterUSDLoaderDependencies();\n RegisterSceneLoaderPlugin(new USDFileLoader());\n}\n"]}
|