@loaders.gl/scene 5.0.0-alpha.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/LICENSE +41 -0
- package/README.md +23 -0
- package/dist/dist.dev.js +831 -0
- package/dist/dist.min.js +14 -0
- package/dist/index.cjs +65 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/parse-usd.d.ts +5 -0
- package/dist/lib/parse-usd.d.ts.map +1 -0
- package/dist/lib/parse-usd.js +276 -0
- package/dist/lib/parse-usd.js.map +1 -0
- package/dist/lib/parse-usda.d.ts +4 -0
- package/dist/lib/parse-usda.d.ts.map +1 -0
- package/dist/lib/parse-usda.js +395 -0
- package/dist/lib/parse-usda.js.map +1 -0
- package/dist/lib/parse-usdz.d.ts +3 -0
- package/dist/lib/parse-usdz.d.ts.map +1 -0
- package/dist/lib/parse-usdz.js +50 -0
- package/dist/lib/parse-usdz.js.map +1 -0
- package/dist/lib/usd-types.d.ts +86 -0
- package/dist/lib/usd-types.d.ts.map +1 -0
- package/dist/lib/usd-types.js +5 -0
- package/dist/lib/usd-types.js.map +1 -0
- package/dist/usd-loader-types.d.ts +50 -0
- package/dist/usd-loader-types.d.ts.map +1 -0
- package/dist/usd-loader-types.js +35 -0
- package/dist/usd-loader-types.js.map +1 -0
- package/dist/usd-loader.d.ts +30 -0
- package/dist/usd-loader.d.ts.map +1 -0
- package/dist/usd-loader.js +17 -0
- package/dist/usd-loader.js.map +1 -0
- package/package.json +55 -0
- package/src/index.ts +15 -0
- package/src/lib/parse-usd.ts +349 -0
- package/src/lib/parse-usda.ts +458 -0
- package/src/lib/parse-usdz.ts +59 -0
- package/src/lib/usd-types.ts +103 -0
- package/src/usd-loader-types.ts +40 -0
- package/src/usd-loader.ts +26 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
const NUMBER_PATTERN = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/;
|
|
5
|
+
const QUALIFIERS = new Set([
|
|
6
|
+
'uniform',
|
|
7
|
+
'varying',
|
|
8
|
+
'custom',
|
|
9
|
+
'prepend',
|
|
10
|
+
'append',
|
|
11
|
+
'add',
|
|
12
|
+
'delete',
|
|
13
|
+
'reorder'
|
|
14
|
+
]);
|
|
15
|
+
/** Parses an OpenUSD ASCII layer. */
|
|
16
|
+
export function parseUSDA(source, url) {
|
|
17
|
+
if (!source.trimStart().startsWith('#usda')) {
|
|
18
|
+
throw new Error('OpenUSD ASCII layers must begin with the #usda header.');
|
|
19
|
+
}
|
|
20
|
+
return new USDAParser(source, url).parse();
|
|
21
|
+
}
|
|
22
|
+
/** Recursive-descent parser for the supported USDA syntax. */
|
|
23
|
+
class USDAParser {
|
|
24
|
+
/** Token stream for the source layer. */
|
|
25
|
+
tokenizer;
|
|
26
|
+
/** URL of the source layer. */
|
|
27
|
+
url;
|
|
28
|
+
/** Creates a USDA parser. */
|
|
29
|
+
constructor(source, url) {
|
|
30
|
+
this.tokenizer = new USDTokenizer(source);
|
|
31
|
+
this.url = url;
|
|
32
|
+
}
|
|
33
|
+
/** Parses the complete USDA layer. */
|
|
34
|
+
parse() {
|
|
35
|
+
const metadata = this.tokenizer.match('(') ? this.parseMetadata(')') : {};
|
|
36
|
+
const rootPrims = [];
|
|
37
|
+
while (!this.tokenizer.isAtEnd()) {
|
|
38
|
+
if (this.isPrimDeclaration()) {
|
|
39
|
+
rootPrims.push(this.parsePrim(''));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.tokenizer.read();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
format: 'usda',
|
|
47
|
+
url: this.url,
|
|
48
|
+
metadata,
|
|
49
|
+
rootPrims,
|
|
50
|
+
layers: this.url ? [this.url] : []
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Parses a prim and its descendants. */
|
|
54
|
+
parsePrim(parentPath) {
|
|
55
|
+
const declaration = this.tokenizer.read();
|
|
56
|
+
const specifier = declaration.value;
|
|
57
|
+
const firstToken = this.tokenizer.read();
|
|
58
|
+
const hasExplicitType = this.tokenizer.peek().kind === 'string';
|
|
59
|
+
const type = hasExplicitType ? firstToken.value : '';
|
|
60
|
+
const name = hasExplicitType ? this.tokenizer.read().value : firstToken.value;
|
|
61
|
+
const path = `${parentPath}/${name}`;
|
|
62
|
+
const metadata = this.tokenizer.match('(') ? this.parseMetadata(')') : {};
|
|
63
|
+
this.tokenizer.expect('{');
|
|
64
|
+
const contents = this.parsePrimContents(path);
|
|
65
|
+
return {
|
|
66
|
+
name,
|
|
67
|
+
path,
|
|
68
|
+
sourceUrl: this.url,
|
|
69
|
+
type,
|
|
70
|
+
specifier,
|
|
71
|
+
attributes: contents.attributes,
|
|
72
|
+
metadata: { ...metadata, ...contents.metadata },
|
|
73
|
+
variants: contents.variants,
|
|
74
|
+
children: contents.children
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Parses the attributes, variants, and child prims inside a prim body. */
|
|
78
|
+
parsePrimContents(parentPath) {
|
|
79
|
+
const attributes = {};
|
|
80
|
+
const metadata = {};
|
|
81
|
+
const children = [];
|
|
82
|
+
const variants = {};
|
|
83
|
+
while (!this.tokenizer.isAtEnd() && !this.tokenizer.match('}')) {
|
|
84
|
+
if (this.isPrimDeclaration()) {
|
|
85
|
+
children.push(this.parsePrim(parentPath));
|
|
86
|
+
}
|
|
87
|
+
else if (this.tokenizer.peek().value === 'variantSet') {
|
|
88
|
+
this.parseVariantSet(parentPath, variants);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const attribute = this.parseAttribute();
|
|
92
|
+
if (attribute) {
|
|
93
|
+
attributes[attribute.name] = attribute;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { attributes, metadata, children, variants };
|
|
98
|
+
}
|
|
99
|
+
/** Parses one named variant set. */
|
|
100
|
+
parseVariantSet(parentPath, variants) {
|
|
101
|
+
this.tokenizer.expect('variantSet');
|
|
102
|
+
const variantSetName = this.tokenizer.read().value;
|
|
103
|
+
this.tokenizer.expect('=');
|
|
104
|
+
this.tokenizer.expect('{');
|
|
105
|
+
const variantSet = {};
|
|
106
|
+
while (!this.tokenizer.isAtEnd() && !this.tokenizer.match('}')) {
|
|
107
|
+
const variantName = this.tokenizer.read().value;
|
|
108
|
+
this.tokenizer.expect('{');
|
|
109
|
+
const contents = this.parsePrimContents(parentPath);
|
|
110
|
+
variantSet[variantName] = {
|
|
111
|
+
attributes: contents.attributes,
|
|
112
|
+
metadata: contents.metadata,
|
|
113
|
+
children: contents.children
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
variants[variantSetName] = variantSet;
|
|
117
|
+
}
|
|
118
|
+
/** Parses an attribute declaration at the current token. */
|
|
119
|
+
parseAttribute() {
|
|
120
|
+
const firstToken = this.tokenizer.read();
|
|
121
|
+
if (firstToken.kind === 'end') {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const declarationTokens = [firstToken];
|
|
125
|
+
while (!this.tokenizer.isAtEnd() && this.tokenizer.peek().line === firstToken.line) {
|
|
126
|
+
const nextToken = this.tokenizer.peek();
|
|
127
|
+
if (nextToken.value === '=') {
|
|
128
|
+
this.tokenizer.read();
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
if (nextToken.value === '{' || nextToken.value === '}') {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
declarationTokens.push(this.tokenizer.read());
|
|
135
|
+
}
|
|
136
|
+
const hasAssignment = this.tokenizer.previousValue === '=';
|
|
137
|
+
if (!hasAssignment) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const significantTokens = declarationTokens.filter(token => !QUALIFIERS.has(token.value));
|
|
141
|
+
if (significantTokens.length === 0) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
const name = significantTokens[significantTokens.length - 1].value;
|
|
145
|
+
const type = significantTokens
|
|
146
|
+
.slice(0, -1)
|
|
147
|
+
.map(token => token.value)
|
|
148
|
+
.join('');
|
|
149
|
+
const value = this.parseValue();
|
|
150
|
+
const metadata = this.tokenizer.match('(') ? this.parseMetadata(')') : {};
|
|
151
|
+
return { name, type, value, metadata };
|
|
152
|
+
}
|
|
153
|
+
/** Parses a metadata dictionary through the requested terminator. */
|
|
154
|
+
parseMetadata(terminator) {
|
|
155
|
+
const metadata = {};
|
|
156
|
+
while (!this.tokenizer.isAtEnd() && !this.tokenizer.match(terminator)) {
|
|
157
|
+
this.tokenizer.match(',');
|
|
158
|
+
if (this.tokenizer.peek().value === terminator) {
|
|
159
|
+
this.tokenizer.read();
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
const firstToken = this.tokenizer.read();
|
|
163
|
+
const declarationTokens = [firstToken];
|
|
164
|
+
while (!this.tokenizer.isAtEnd() && this.tokenizer.peek().line === firstToken.line) {
|
|
165
|
+
if (this.tokenizer.peek().value === '=' || this.tokenizer.peek().value === ':') {
|
|
166
|
+
this.tokenizer.read();
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
if (this.tokenizer.peek().value === terminator) {
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
declarationTokens.push(this.tokenizer.read());
|
|
173
|
+
}
|
|
174
|
+
if (this.tokenizer.previousValue !== '=' && this.tokenizer.previousValue !== ':') {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const name = declarationTokens[declarationTokens.length - 1].value;
|
|
178
|
+
metadata[name] = this.parseValue();
|
|
179
|
+
this.tokenizer.match(',');
|
|
180
|
+
}
|
|
181
|
+
return metadata;
|
|
182
|
+
}
|
|
183
|
+
/** Parses one scalar, list, tuple, dictionary, asset path, or scene path value. */
|
|
184
|
+
parseValue() {
|
|
185
|
+
const token = this.tokenizer.read();
|
|
186
|
+
if (token.value === '[') {
|
|
187
|
+
return this.parseList(']');
|
|
188
|
+
}
|
|
189
|
+
if (token.value === '(') {
|
|
190
|
+
return this.parseList(')');
|
|
191
|
+
}
|
|
192
|
+
if (token.value === '{') {
|
|
193
|
+
return this.parseMetadata('}');
|
|
194
|
+
}
|
|
195
|
+
if (token.kind === 'asset') {
|
|
196
|
+
const reference = { assetPath: token.value };
|
|
197
|
+
if (this.tokenizer.peek().kind === 'path' && this.tokenizer.peek().line === token.line) {
|
|
198
|
+
reference.primPath = this.tokenizer.read().value;
|
|
199
|
+
}
|
|
200
|
+
return reference;
|
|
201
|
+
}
|
|
202
|
+
if (token.kind === 'path') {
|
|
203
|
+
return { path: token.value };
|
|
204
|
+
}
|
|
205
|
+
if (token.kind === 'number') {
|
|
206
|
+
return Number(token.value);
|
|
207
|
+
}
|
|
208
|
+
if (token.value === 'true') {
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
if (token.value === 'false') {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
if (token.value === 'None' || token.value === 'null') {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
return token.value;
|
|
218
|
+
}
|
|
219
|
+
/** Parses a comma-separated list or tuple. */
|
|
220
|
+
parseList(terminator) {
|
|
221
|
+
const values = [];
|
|
222
|
+
while (!this.tokenizer.isAtEnd() && !this.tokenizer.match(terminator)) {
|
|
223
|
+
if (this.tokenizer.match(',')) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
values.push(this.parseValue());
|
|
227
|
+
this.tokenizer.match(',');
|
|
228
|
+
}
|
|
229
|
+
return values;
|
|
230
|
+
}
|
|
231
|
+
/** Returns whether the current token starts a prim declaration. */
|
|
232
|
+
isPrimDeclaration() {
|
|
233
|
+
const value = this.tokenizer.peek().value;
|
|
234
|
+
return value === 'def' || value === 'over' || value === 'class';
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/** Tokenizer for the supported USDA lexical syntax. */
|
|
238
|
+
class USDTokenizer {
|
|
239
|
+
/** Complete source text. */
|
|
240
|
+
source;
|
|
241
|
+
/** Current character offset. */
|
|
242
|
+
offset = 0;
|
|
243
|
+
/** Current one-based line number. */
|
|
244
|
+
line = 1;
|
|
245
|
+
/** Lookahead token, when one has been read. */
|
|
246
|
+
bufferedToken = null;
|
|
247
|
+
/** Value of the most recently consumed token. */
|
|
248
|
+
previousValue = '';
|
|
249
|
+
/** Creates a tokenizer for USDA source text. */
|
|
250
|
+
constructor(source) {
|
|
251
|
+
this.source = source;
|
|
252
|
+
}
|
|
253
|
+
/** Returns the next token without consuming it. */
|
|
254
|
+
peek() {
|
|
255
|
+
this.bufferedToken ||= this.readToken();
|
|
256
|
+
return this.bufferedToken;
|
|
257
|
+
}
|
|
258
|
+
/** Consumes and returns the next token. */
|
|
259
|
+
read() {
|
|
260
|
+
const token = this.peek();
|
|
261
|
+
this.bufferedToken = null;
|
|
262
|
+
this.previousValue = token.value;
|
|
263
|
+
return token;
|
|
264
|
+
}
|
|
265
|
+
/** Consumes a token when its value matches. */
|
|
266
|
+
match(value) {
|
|
267
|
+
if (this.peek().value !== value) {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
this.read();
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
/** Consumes an expected token or throws a line-numbered parse error. */
|
|
274
|
+
expect(value) {
|
|
275
|
+
const token = this.read();
|
|
276
|
+
if (token.value !== value) {
|
|
277
|
+
throw new Error(`Expected "${value}" at USDA line ${token.line}, received "${token.value}".`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/** Returns whether the token stream is exhausted. */
|
|
281
|
+
isAtEnd() {
|
|
282
|
+
return this.peek().kind === 'end';
|
|
283
|
+
}
|
|
284
|
+
/** Reads the next token from the current character offset. */
|
|
285
|
+
readToken() {
|
|
286
|
+
this.skipIgnoredText();
|
|
287
|
+
const line = this.line;
|
|
288
|
+
const character = this.source[this.offset];
|
|
289
|
+
if (character === undefined) {
|
|
290
|
+
return { value: '', line, kind: 'end' };
|
|
291
|
+
}
|
|
292
|
+
if ('{}[](),='.includes(character)) {
|
|
293
|
+
this.offset++;
|
|
294
|
+
return { value: character, line, kind: 'punctuation' };
|
|
295
|
+
}
|
|
296
|
+
if (character === '"' || character === "'") {
|
|
297
|
+
return { value: this.readQuotedString(character), line, kind: 'string' };
|
|
298
|
+
}
|
|
299
|
+
if (character === '@') {
|
|
300
|
+
return { value: this.readDelimitedValue('@'), line, kind: 'asset' };
|
|
301
|
+
}
|
|
302
|
+
if (character === '<') {
|
|
303
|
+
return { value: this.readDelimitedValue('>'), line, kind: 'path' };
|
|
304
|
+
}
|
|
305
|
+
const numericMatch = this.source.slice(this.offset).match(NUMBER_PATTERN);
|
|
306
|
+
if (numericMatch) {
|
|
307
|
+
this.offset += numericMatch[0].length;
|
|
308
|
+
return { value: numericMatch[0], line, kind: 'number' };
|
|
309
|
+
}
|
|
310
|
+
const startOffset = this.offset;
|
|
311
|
+
while (this.offset < this.source.length) {
|
|
312
|
+
const nextCharacter = this.source[this.offset];
|
|
313
|
+
if (/\s/.test(nextCharacter) || '{}[](),=@<>'.includes(nextCharacter)) {
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
this.offset++;
|
|
317
|
+
}
|
|
318
|
+
if (this.offset === startOffset) {
|
|
319
|
+
this.offset++;
|
|
320
|
+
}
|
|
321
|
+
return { value: this.source.slice(startOffset, this.offset), line, kind: 'word' };
|
|
322
|
+
}
|
|
323
|
+
/** Skips whitespace, comments, and triple-quoted documentation blocks. */
|
|
324
|
+
skipIgnoredText() {
|
|
325
|
+
while (this.offset < this.source.length) {
|
|
326
|
+
const character = this.source[this.offset];
|
|
327
|
+
if (character === '\n') {
|
|
328
|
+
this.line++;
|
|
329
|
+
this.offset++;
|
|
330
|
+
}
|
|
331
|
+
else if (/\s/.test(character)) {
|
|
332
|
+
this.offset++;
|
|
333
|
+
}
|
|
334
|
+
else if (character === '#') {
|
|
335
|
+
while (this.offset < this.source.length && this.source[this.offset] !== '\n') {
|
|
336
|
+
this.offset++;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
else if (character === '/' && this.source[this.offset + 1] === '*') {
|
|
340
|
+
this.offset += 2;
|
|
341
|
+
while (this.offset < this.source.length && !this.source.startsWith('*/', this.offset)) {
|
|
342
|
+
if (this.source[this.offset] === '\n') {
|
|
343
|
+
this.line++;
|
|
344
|
+
}
|
|
345
|
+
this.offset++;
|
|
346
|
+
}
|
|
347
|
+
this.offset += 2;
|
|
348
|
+
}
|
|
349
|
+
else if (this.source.startsWith('"""', this.offset)) {
|
|
350
|
+
this.offset += 3;
|
|
351
|
+
while (this.offset < this.source.length && !this.source.startsWith('"""', this.offset)) {
|
|
352
|
+
if (this.source[this.offset] === '\n') {
|
|
353
|
+
this.line++;
|
|
354
|
+
}
|
|
355
|
+
this.offset++;
|
|
356
|
+
}
|
|
357
|
+
this.offset += 3;
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/** Reads a quoted string and decodes common escapes. */
|
|
365
|
+
readQuotedString(delimiter) {
|
|
366
|
+
this.offset++;
|
|
367
|
+
let value = '';
|
|
368
|
+
while (this.offset < this.source.length) {
|
|
369
|
+
const character = this.source[this.offset++];
|
|
370
|
+
if (character === delimiter) {
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
if (character === '\\' && this.offset < this.source.length) {
|
|
374
|
+
const escapedCharacter = this.source[this.offset++];
|
|
375
|
+
value += escapedCharacter === 'n' ? '\n' : escapedCharacter;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
value += character;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return value;
|
|
382
|
+
}
|
|
383
|
+
/** Reads an asset or scene path through its closing delimiter. */
|
|
384
|
+
readDelimitedValue(delimiter) {
|
|
385
|
+
this.offset++;
|
|
386
|
+
const startOffset = this.offset;
|
|
387
|
+
while (this.offset < this.source.length && this.source[this.offset] !== delimiter) {
|
|
388
|
+
this.offset++;
|
|
389
|
+
}
|
|
390
|
+
const value = this.source.slice(startOffset, this.offset);
|
|
391
|
+
this.offset++;
|
|
392
|
+
return value;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=parse-usda.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-usda.js","sourceRoot":"","sources":["../../src/lib/parse-usda.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-usdz.d.ts","sourceRoot":"","sources":["../../src/lib/parse-usdz.ts"],"names":[],"mappings":"AAQA,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAsCnF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
const END_OF_CENTRAL_DIRECTORY = 0x06054b50;
|
|
5
|
+
const CENTRAL_DIRECTORY_ENTRY = 0x02014b50;
|
|
6
|
+
const LOCAL_FILE_HEADER = 0x04034b50;
|
|
7
|
+
/** Extracts stored files from an uncompressed USDZ ZIP archive. */
|
|
8
|
+
export function parseUSDZArchive(arrayBuffer) {
|
|
9
|
+
const view = new DataView(arrayBuffer);
|
|
10
|
+
const directoryOffset = findCentralDirectory(view);
|
|
11
|
+
const entryCount = view.getUint16(directoryOffset + 10, true);
|
|
12
|
+
let entryOffset = view.getUint32(directoryOffset + 16, true);
|
|
13
|
+
const files = new Map();
|
|
14
|
+
const textDecoder = new TextDecoder();
|
|
15
|
+
for (let entryIndex = 0; entryIndex < entryCount; entryIndex++) {
|
|
16
|
+
if (view.getUint32(entryOffset, true) !== CENTRAL_DIRECTORY_ENTRY) {
|
|
17
|
+
throw new Error('USDZ archive contains an invalid ZIP central-directory entry.');
|
|
18
|
+
}
|
|
19
|
+
const compression = view.getUint16(entryOffset + 10, true);
|
|
20
|
+
const compressedLength = view.getUint32(entryOffset + 20, true);
|
|
21
|
+
const filenameLength = view.getUint16(entryOffset + 28, true);
|
|
22
|
+
const extraLength = view.getUint16(entryOffset + 30, true);
|
|
23
|
+
const commentLength = view.getUint16(entryOffset + 32, true);
|
|
24
|
+
const localOffset = view.getUint32(entryOffset + 42, true);
|
|
25
|
+
const filename = textDecoder.decode(new Uint8Array(arrayBuffer, entryOffset + 46, filenameLength));
|
|
26
|
+
if (compression !== 0) {
|
|
27
|
+
throw new Error(`USDZ entry "${filename}" is compressed; USDZ requires stored ZIP entries.`);
|
|
28
|
+
}
|
|
29
|
+
if (view.getUint32(localOffset, true) !== LOCAL_FILE_HEADER) {
|
|
30
|
+
throw new Error(`USDZ entry "${filename}" has an invalid local ZIP header.`);
|
|
31
|
+
}
|
|
32
|
+
const localNameLength = view.getUint16(localOffset + 26, true);
|
|
33
|
+
const localExtraLength = view.getUint16(localOffset + 28, true);
|
|
34
|
+
const contentOffset = localOffset + 30 + localNameLength + localExtraLength;
|
|
35
|
+
files.set(filename, arrayBuffer.slice(contentOffset, contentOffset + compressedLength));
|
|
36
|
+
entryOffset += 46 + filenameLength + extraLength + commentLength;
|
|
37
|
+
}
|
|
38
|
+
return files;
|
|
39
|
+
}
|
|
40
|
+
/** Finds the ZIP end-of-central-directory record. */
|
|
41
|
+
function findCentralDirectory(view) {
|
|
42
|
+
const minimumOffset = Math.max(0, view.byteLength - 65557);
|
|
43
|
+
for (let offset = view.byteLength - 22; offset >= minimumOffset; offset--) {
|
|
44
|
+
if (view.getUint32(offset, true) === END_OF_CENTRAL_DIRECTORY) {
|
|
45
|
+
return offset;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
throw new Error('USDZ archive does not contain a ZIP end-of-central-directory record.');
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=parse-usdz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-usdz.js","sourceRoot":"","sources":["../../src/lib/parse-usdz.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { LoaderOptions } from '@loaders.gl/loader-utils';
|
|
2
|
+
/** Reference to an external OpenUSD layer and optional prim within that layer. */
|
|
3
|
+
export type USDAssetPath = {
|
|
4
|
+
/** URL or relative path to the referenced layer. */
|
|
5
|
+
assetPath: string;
|
|
6
|
+
/** Optional prim path within the referenced layer. */
|
|
7
|
+
primPath?: string;
|
|
8
|
+
};
|
|
9
|
+
/** Reference to a prim in an OpenUSD scene. */
|
|
10
|
+
export type USDScenePath = {
|
|
11
|
+
/** Absolute or relative scene path. */
|
|
12
|
+
path: string;
|
|
13
|
+
};
|
|
14
|
+
/** Value types represented by the OpenUSD ASCII parser. */
|
|
15
|
+
export type USDValue = string | number | boolean | null | USDAssetPath | USDScenePath | USDValue[] | {
|
|
16
|
+
[name: string]: USDValue;
|
|
17
|
+
};
|
|
18
|
+
/** Parsed OpenUSD attribute declaration. */
|
|
19
|
+
export type USDAttribute = {
|
|
20
|
+
/** Attribute name. */
|
|
21
|
+
name: string;
|
|
22
|
+
/** Authored OpenUSD type name. */
|
|
23
|
+
type: string;
|
|
24
|
+
/** Parsed attribute value. */
|
|
25
|
+
value: USDValue;
|
|
26
|
+
/** Attribute metadata. */
|
|
27
|
+
metadata: Record<string, USDValue>;
|
|
28
|
+
};
|
|
29
|
+
/** Opinions authored by one variant. */
|
|
30
|
+
export type USDVariant = {
|
|
31
|
+
/** Variant attributes. */
|
|
32
|
+
attributes: Record<string, USDAttribute>;
|
|
33
|
+
/** Variant metadata. */
|
|
34
|
+
metadata: Record<string, USDValue>;
|
|
35
|
+
/** Child prims introduced or overridden by the variant. */
|
|
36
|
+
children: USDPrim[];
|
|
37
|
+
};
|
|
38
|
+
/** Parsed and optionally composed OpenUSD prim. */
|
|
39
|
+
export type USDPrim = {
|
|
40
|
+
/** Prim name. */
|
|
41
|
+
name: string;
|
|
42
|
+
/** Absolute prim path. */
|
|
43
|
+
path: string;
|
|
44
|
+
/** URL of the layer that authored the prim. */
|
|
45
|
+
sourceUrl?: string;
|
|
46
|
+
/** Authored prim type, such as `Xform` or `Mesh`. */
|
|
47
|
+
type: string;
|
|
48
|
+
/** Prim specifier. */
|
|
49
|
+
specifier: 'def' | 'over' | 'class';
|
|
50
|
+
/** Authored attributes keyed by name. */
|
|
51
|
+
attributes: Record<string, USDAttribute>;
|
|
52
|
+
/** Prim metadata keyed by name. */
|
|
53
|
+
metadata: Record<string, USDValue>;
|
|
54
|
+
/** Variant sets keyed by set name and variant name. */
|
|
55
|
+
variants: Record<string, Record<string, USDVariant>>;
|
|
56
|
+
/** Child prims. */
|
|
57
|
+
children: USDPrim[];
|
|
58
|
+
};
|
|
59
|
+
/** Parsed OpenUSD stage. */
|
|
60
|
+
export type USDStage = {
|
|
61
|
+
/** Container format used for the root layer. */
|
|
62
|
+
format: 'usda' | 'usdz';
|
|
63
|
+
/** URL of the root layer when available. */
|
|
64
|
+
url?: string;
|
|
65
|
+
/** Root-layer metadata. */
|
|
66
|
+
metadata: Record<string, USDValue>;
|
|
67
|
+
/** Root prims in scene order. */
|
|
68
|
+
rootPrims: USDPrim[];
|
|
69
|
+
/** URLs of all layers used to compose the stage. */
|
|
70
|
+
layers: string[];
|
|
71
|
+
};
|
|
72
|
+
/** Options for {@link USDLoader}. */
|
|
73
|
+
export type USDLoaderOptions = LoaderOptions & {
|
|
74
|
+
/** OpenUSD-specific parser and composition options. */
|
|
75
|
+
usd?: {
|
|
76
|
+
/** Compose references and variants into the returned prim hierarchy. */
|
|
77
|
+
compose?: boolean;
|
|
78
|
+
/** Load referenced layers while composing the stage. */
|
|
79
|
+
loadReferences?: boolean;
|
|
80
|
+
/** Maximum recursive composition depth. */
|
|
81
|
+
maxReferenceDepth?: number;
|
|
82
|
+
/** Variant selections that override authored selections. */
|
|
83
|
+
variantSelections?: Record<string, string>;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=usd-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usd-types.d.ts","sourceRoot":"","sources":["../../src/lib/usd-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usd-types.js","sourceRoot":"","sources":["../../src/lib/usd-types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { USDLoaderOptions, USDStage } from "./lib/usd-types.js";
|
|
2
|
+
/** Loads the parser-bearing USD loader implementation. */
|
|
3
|
+
declare function preload(): Promise<{
|
|
4
|
+
readonly parse: typeof import("./lib/parse-usd").parseUSD;
|
|
5
|
+
readonly parseText: (text: string, options?: USDLoaderOptions, context?: Parameters<typeof import("./lib/parse-usd").parseUSD>[2]) => Promise<USDStage>;
|
|
6
|
+
readonly dataType: USDStage;
|
|
7
|
+
readonly batchType: never;
|
|
8
|
+
readonly name: "Universal Scene Description";
|
|
9
|
+
readonly id: "usd";
|
|
10
|
+
readonly module: "scene";
|
|
11
|
+
readonly version: any;
|
|
12
|
+
readonly extensions: ["usd", "usda", "usdz"];
|
|
13
|
+
readonly mimeTypes: ["model/vnd.usd", "model/vnd.usda", "model/vnd.usdz+zip"];
|
|
14
|
+
readonly text: true;
|
|
15
|
+
readonly binary: true;
|
|
16
|
+
readonly tests: ["#usda", "PK"];
|
|
17
|
+
readonly options: {
|
|
18
|
+
readonly usd: {
|
|
19
|
+
readonly compose: true;
|
|
20
|
+
readonly loadReferences: true;
|
|
21
|
+
readonly maxReferenceDepth: 12;
|
|
22
|
+
readonly variantSelections: {};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
/** Metadata-only loader for OpenUSD ASCII and uncompressed USDZ scenes. */
|
|
27
|
+
export declare const USDLoader: {
|
|
28
|
+
readonly dataType: USDStage;
|
|
29
|
+
readonly batchType: never;
|
|
30
|
+
readonly name: "Universal Scene Description";
|
|
31
|
+
readonly id: "usd";
|
|
32
|
+
readonly module: "scene";
|
|
33
|
+
readonly version: any;
|
|
34
|
+
readonly extensions: ["usd", "usda", "usdz"];
|
|
35
|
+
readonly mimeTypes: ["model/vnd.usd", "model/vnd.usda", "model/vnd.usdz+zip"];
|
|
36
|
+
readonly text: true;
|
|
37
|
+
readonly binary: true;
|
|
38
|
+
readonly tests: ["#usda", "PK"];
|
|
39
|
+
readonly options: {
|
|
40
|
+
readonly usd: {
|
|
41
|
+
readonly compose: true;
|
|
42
|
+
readonly loadReferences: true;
|
|
43
|
+
readonly maxReferenceDepth: 12;
|
|
44
|
+
readonly variantSelections: {};
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
readonly preload: typeof preload;
|
|
48
|
+
};
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=usd-loader-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usd-loader-types.d.ts","sourceRoot":"","sources":["../src/usd-loader-types.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,gBAAgB,EAAE,QAAQ,EAAC,2BAAwB;AAMhE,0DAA0D;AAC1D,iBAAe,OAAO;;;uBAOS,QAAQ;wBAClB,KAAK;;;;;;;;;;;;;;;;;;GALzB;AAED,2EAA2E;AAC3E,eAAO,MAAM,SAAS;uBACS,QAAQ;wBAClB,KAAK;;;;;;;;;;;;;;;;;;;CAmBoC,CAAC"}
|