@forgeax/engine-gltf 0.1.20 → 0.1.23
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/README.md +59 -0
- package/dist/__tests__/lod-import.integration.test.d.ts +2 -0
- package/dist/__tests__/lod-import.integration.test.d.ts.map +1 -0
- package/dist/__tests__/lod-meta-publication.integration.test.d.ts +2 -0
- package/dist/__tests__/lod-meta-publication.integration.test.d.ts.map +1 -0
- package/dist/check-extensions.d.ts.map +1 -1
- package/dist/cli-gltf.mjs +183 -8
- package/dist/cli-gltf.mjs.map +1 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/gltf-importer.d.ts.map +1 -1
- package/dist/importer-entry.mjs +145 -3
- package/dist/importer-entry.mjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +238 -6
- package/dist/index.mjs.map +1 -1
- package/dist/lod/parse-lod.d.ts +15 -0
- package/dist/lod/parse-lod.d.ts.map +1 -0
- package/dist/lod/project-meta.d.ts +23 -0
- package/dist/lod/project-meta.d.ts.map +1 -0
- package/dist/node-file-entry.mjs +86 -2
- package/dist/node-file-entry.mjs.map +1 -1
- package/dist/parse-gltf.d.ts +3 -1
- package/dist/parse-gltf.d.ts.map +1 -1
- package/dist/reimport-reuse-meta.d.ts +1 -1
- package/dist/reimport-reuse-meta.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/__tests__/fixtures/lod/core-only.gltf +1 -0
- package/src/__tests__/fixtures/lod/msft-lod-malformed.gltf +1 -0
- package/src/__tests__/fixtures/lod/msft-lod-multi-root.gltf +1 -0
- package/src/__tests__/fixtures/lod/msft-lod-node-extras.gltf +1 -0
- package/src/__tests__/fixtures/lod/msft-lod.gltf +1 -0
- package/src/__tests__/gltf-error-derived-views.test-d.ts +4 -0
- package/src/__tests__/gltf.unit.test.ts +12 -3
- package/src/__tests__/lod-import.integration.test.ts +106 -0
- package/src/__tests__/lod-meta-publication.integration.test.ts +24 -0
- package/src/__tests__/parse-gltf.unit.test.ts +22 -0
- package/src/__tests__/source-key-producer.integration.test.ts +6 -2
- package/src/bridge.ts +1 -1
- package/src/check-extensions.ts +2 -0
- package/src/errors.ts +11 -0
- package/src/gltf-importer.ts +87 -1
- package/src/index.ts +2 -0
- package/src/lod/parse-lod.ts +129 -0
- package/src/lod/project-meta.ts +48 -0
- package/src/parse-gltf.ts +97 -1
- package/src/reimport-reuse-meta.ts +3 -1
- package/dist/.tsbuildinfo +0 -1
package/dist/errors.d.ts
CHANGED
|
@@ -27,6 +27,11 @@ export interface GltfExtensionUnsupportedDetail {
|
|
|
27
27
|
readonly extension: string;
|
|
28
28
|
readonly source: 'extensionsRequired' | 'extensionsUsed';
|
|
29
29
|
}
|
|
30
|
+
export interface GltfLodInvalidDetail {
|
|
31
|
+
readonly rootNode: number;
|
|
32
|
+
readonly ids: readonly number[];
|
|
33
|
+
readonly reason: 'missing-node' | 'duplicate-node' | 'not-integer' | 'coverage';
|
|
34
|
+
}
|
|
30
35
|
export interface GltfMaterialTransmissionInvalidDetail {
|
|
31
36
|
readonly extension: 'KHR_materials_transmission' | 'KHR_materials_ior' | 'KHR_materials_volume';
|
|
32
37
|
readonly field: string;
|
|
@@ -175,6 +180,7 @@ interface DetailFor {
|
|
|
175
180
|
readonly 'gltf-version-unsupported': GltfVersionUnsupportedDetail;
|
|
176
181
|
readonly 'gltf-buffer-out-of-bounds': GltfBufferOutOfBoundsDetail;
|
|
177
182
|
readonly 'gltf-extension-unsupported': GltfExtensionUnsupportedDetail;
|
|
183
|
+
readonly 'gltf-lod-invalid': GltfLodInvalidDetail;
|
|
178
184
|
readonly 'gltf-accessor-type-mismatch': GltfAccessorTypeMismatchDetail;
|
|
179
185
|
readonly 'gltf-texture-load-failed': GltfTextureLoadFailedDetail;
|
|
180
186
|
readonly 'gltf-meta-missing': GltfMetaMissingDetail;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gltf-importer.d.ts","sourceRoot":"","sources":["../src/gltf-importer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gltf-importer.d.ts","sourceRoot":"","sources":["../src/gltf-importer.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAEV,QAAQ,EAIR,QAAQ,EAMT,MAAM,uBAAuB,CAAC;AAiB/B,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAwTlF,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,OAAO,EACZ,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAC1D,SAAS,QAAQ,EAAE,CAiCrB;AAonBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,8BAA8B,GAAG,QAAQ,CAMrF;AAED,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,QAA+B,CAAC"}
|
package/dist/importer-entry.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MeshoptDecoder } from 'meshoptimizer';
|
|
2
|
+
import { deriveDefaultLodScreenCoverages } from '@forgeax/engine-import';
|
|
2
3
|
import { packMeshBinV4 } from '@forgeax/engine-import/mesh-bin';
|
|
3
4
|
import { AssetGuid } from '@forgeax/engine-pack/guid';
|
|
4
5
|
import { ImportError, toShared, err, ok, reconcileMeshMaterialSlotTopology, IMPORT_ERROR_HINTS, resolveMeshMaterialSlotDefaultGuid, createMaterialError } from '@forgeax/engine-types';
|
|
@@ -26,6 +27,10 @@ var gltfErrorPolicy = {
|
|
|
26
27
|
expected: "extension listed in v1 allowlist (see EXTENSION_ALLOWLIST in @forgeax/engine-gltf)",
|
|
27
28
|
hint: "see feat-future-gltf-extensions-allowlist; remove this extension or wait for the allowlist to expand"
|
|
28
29
|
},
|
|
30
|
+
"gltf-lod-invalid": {
|
|
31
|
+
expected: "MSFT_lod ids to reference unique existing node indices with valid coverage",
|
|
32
|
+
hint: "repair the MSFT_lod node relation or remove it from extensionsRequired before re-importing"
|
|
33
|
+
},
|
|
29
34
|
"gltf-material-transmission-invalid": {
|
|
30
35
|
expected: "KHR transmission, IOR, and volume values are finite and within their glTF ranges",
|
|
31
36
|
hint: "repair the named glTF material extension value and re-import the source"
|
|
@@ -1394,7 +1399,9 @@ function decodeColorAccessor(input, flags = {}) {
|
|
|
1394
1399
|
// src/check-extensions.ts
|
|
1395
1400
|
var EXTENSION_ALLOWLIST = [
|
|
1396
1401
|
"EXT_mesh_gpu_instancing",
|
|
1397
|
-
"EXT_meshopt_compression"
|
|
1402
|
+
"EXT_meshopt_compression",
|
|
1403
|
+
"MSFT_lod",
|
|
1404
|
+
"MSFT_screencoverage"
|
|
1398
1405
|
];
|
|
1399
1406
|
var SUPPORTED_EXTENSIONS = [
|
|
1400
1407
|
...EXTENSION_ALLOWLIST,
|
|
@@ -1426,6 +1433,81 @@ function checkExtensions(json) {
|
|
|
1426
1433
|
return ok({ unsupportedUsed });
|
|
1427
1434
|
}
|
|
1428
1435
|
|
|
1436
|
+
// src/lod/parse-lod.ts
|
|
1437
|
+
function parseGltfLodExtension(json) {
|
|
1438
|
+
const doc = json;
|
|
1439
|
+
const nodes = doc.nodes ?? [];
|
|
1440
|
+
const rawCoverage = doc.extensions?.MSFT_screencoverage?.scales;
|
|
1441
|
+
const groups = [];
|
|
1442
|
+
for (let rootNode = 0; rootNode < nodes.length; rootNode += 1) {
|
|
1443
|
+
if (nodes[rootNode]?.extensions?.MSFT_lod === void 0) continue;
|
|
1444
|
+
const idsRaw = nodes[rootNode]?.extensions?.MSFT_lod?.ids;
|
|
1445
|
+
if (!Array.isArray(idsRaw)) {
|
|
1446
|
+
return err(gltfErr("gltf-lod-invalid", { rootNode, ids: [], reason: "not-integer" }));
|
|
1447
|
+
}
|
|
1448
|
+
const ids = idsRaw.filter((value) => typeof value === "number");
|
|
1449
|
+
if (ids.length !== idsRaw.length || ids.some((id) => !Number.isInteger(id) || id < 0 || id >= nodes.length)) {
|
|
1450
|
+
return err(gltfErr("gltf-lod-invalid", { rootNode, ids, reason: "missing-node" }));
|
|
1451
|
+
}
|
|
1452
|
+
if (new Set(ids).size !== ids.length || ids.includes(rootNode)) {
|
|
1453
|
+
return err(gltfErr("gltf-lod-invalid", { rootNode, ids, reason: "duplicate-node" }));
|
|
1454
|
+
}
|
|
1455
|
+
const hasMesh = (node) => {
|
|
1456
|
+
if (typeof node?.mesh !== "number" || !Number.isInteger(node.mesh) || node.mesh < 0) {
|
|
1457
|
+
return false;
|
|
1458
|
+
}
|
|
1459
|
+
const mesh = doc.meshes?.[node.mesh];
|
|
1460
|
+
return mesh !== void 0 && Array.isArray(mesh.primitives) && mesh.primitives.length > 0;
|
|
1461
|
+
};
|
|
1462
|
+
if (!hasMesh(nodes[rootNode]) || ids.some((id) => !hasMesh(nodes[id]))) {
|
|
1463
|
+
return err(gltfErr("gltf-lod-invalid", { rootNode, ids, reason: "missing-node" }));
|
|
1464
|
+
}
|
|
1465
|
+
const nodeCoverage = nodes[rootNode]?.extras?.MSFT_screencoverage;
|
|
1466
|
+
const coverage = normalizeScreenCoverages(
|
|
1467
|
+
nodeCoverage === void 0 ? rawCoverage : nodeCoverage,
|
|
1468
|
+
ids.length,
|
|
1469
|
+
nodeCoverage !== void 0
|
|
1470
|
+
);
|
|
1471
|
+
if (coverage === "invalid") {
|
|
1472
|
+
return err(gltfErr("gltf-lod-invalid", { rootNode, ids, reason: "coverage" }));
|
|
1473
|
+
}
|
|
1474
|
+
groups.push({
|
|
1475
|
+
rootNode,
|
|
1476
|
+
lodNodeIds: ids,
|
|
1477
|
+
screenCoverages: coverage ?? []
|
|
1478
|
+
});
|
|
1479
|
+
}
|
|
1480
|
+
const first = groups[0];
|
|
1481
|
+
if (first === void 0) {
|
|
1482
|
+
if (doc.extensionsRequired?.some((extension) => extension === "MSFT_lod")) {
|
|
1483
|
+
return err(gltfErr("gltf-lod-invalid", { rootNode: 0, ids: [], reason: "missing-node" }));
|
|
1484
|
+
}
|
|
1485
|
+
return ok({ rootNode: 0, lodNodeIds: [], screenCoverages: [], groups: [] });
|
|
1486
|
+
}
|
|
1487
|
+
return ok({
|
|
1488
|
+
rootNode: first.rootNode,
|
|
1489
|
+
lodNodeIds: first.lodNodeIds,
|
|
1490
|
+
screenCoverages: first.screenCoverages,
|
|
1491
|
+
groups
|
|
1492
|
+
});
|
|
1493
|
+
}
|
|
1494
|
+
function normalizeScreenCoverages(raw, lodCount, officialNodeForm) {
|
|
1495
|
+
if (raw === void 0) return void 0;
|
|
1496
|
+
if (!Array.isArray(raw)) return "invalid";
|
|
1497
|
+
if (raw.some(
|
|
1498
|
+
(value) => typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1
|
|
1499
|
+
)) {
|
|
1500
|
+
return "invalid";
|
|
1501
|
+
}
|
|
1502
|
+
const expectedLengths = officialNodeForm ? [lodCount + 1] : [lodCount, lodCount + 1];
|
|
1503
|
+
if (!expectedLengths.includes(raw.length)) return "invalid";
|
|
1504
|
+
const values = raw.slice(0, lodCount);
|
|
1505
|
+
for (let index = 1; index < values.length; index += 1) {
|
|
1506
|
+
if (values[index] >= values[index - 1]) return "invalid";
|
|
1507
|
+
}
|
|
1508
|
+
return values;
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1429
1511
|
// src/material/parse-material.ts
|
|
1430
1512
|
function tuple2(values) {
|
|
1431
1513
|
if (values === void 0 || values.length < 2) return void 0;
|
|
@@ -2210,6 +2292,8 @@ async function parseGltfWithBin(json, ctx) {
|
|
|
2210
2292
|
const extResult = checkExtensions(json);
|
|
2211
2293
|
if (!extResult.ok) return err(extResult.error);
|
|
2212
2294
|
const unsupportedExtensions = extResult.value.unsupportedUsed;
|
|
2295
|
+
const lodResult = parseGltfLodExtension(json);
|
|
2296
|
+
if (!lodResult.ok) return err(lodResult.error);
|
|
2213
2297
|
const lightsResult = parsePunctualLights(json, ctx.filePath);
|
|
2214
2298
|
if (!lightsResult.ok) return err(lightsResult.error);
|
|
2215
2299
|
const meshesJson = json.meshes ?? [];
|
|
@@ -2750,7 +2834,8 @@ async function parseGltfWithBin(json, ctx) {
|
|
|
2750
2834
|
matrixTrsCoexistNodes: diagnostics.matrixTrsCoexistNodes
|
|
2751
2835
|
},
|
|
2752
2836
|
meshPrimitiveCount,
|
|
2753
|
-
lights: lightsResult.value
|
|
2837
|
+
lights: lightsResult.value,
|
|
2838
|
+
...lodResult.value.lodNodeIds.length === 0 ? {} : { lod: lodResult.value }
|
|
2754
2839
|
});
|
|
2755
2840
|
}
|
|
2756
2841
|
async function parseGltfForImporter(json, externalLoader, filePath, options = {}) {
|
|
@@ -3167,7 +3252,55 @@ async function importGltf(ctx, meshopt) {
|
|
|
3167
3252
|
})
|
|
3168
3253
|
};
|
|
3169
3254
|
}
|
|
3170
|
-
const
|
|
3255
|
+
const stabilizedMesh = stabilizeMeshMaterialSlots(
|
|
3256
|
+
bridged.value,
|
|
3257
|
+
ctx,
|
|
3258
|
+
sub.guid,
|
|
3259
|
+
sub.sourceKey
|
|
3260
|
+
);
|
|
3261
|
+
const lodGroup = doc.lod?.groups?.find(
|
|
3262
|
+
(group) => doc.nodes[group.rootNode]?.meshIndex === sub.sourceIndex
|
|
3263
|
+
) ?? (doc.lod?.rootNode !== void 0 && doc.nodes[doc.lod.rootNode]?.meshIndex === sub.sourceIndex ? doc.lod : void 0);
|
|
3264
|
+
const rootMeshIndex = lodGroup === void 0 ? void 0 : sub.sourceIndex;
|
|
3265
|
+
if (lodGroup !== void 0) {
|
|
3266
|
+
const referencedMeshIndices = [
|
|
3267
|
+
sub.sourceIndex,
|
|
3268
|
+
...lodGroup.lodNodeIds.map((nodeIndex) => doc.nodes[nodeIndex]?.meshIndex)
|
|
3269
|
+
];
|
|
3270
|
+
const missingMeshIndex = referencedMeshIndices.find(
|
|
3271
|
+
(meshIndex) => !Number.isInteger(meshIndex) || meshIndex === null || meshIndex === void 0 || maps.meshGuidByIndex.get(meshIndex) === void 0
|
|
3272
|
+
);
|
|
3273
|
+
if (missingMeshIndex !== void 0) {
|
|
3274
|
+
return {
|
|
3275
|
+
ok: false,
|
|
3276
|
+
error: new ImportError({
|
|
3277
|
+
code: "import-internal-error",
|
|
3278
|
+
expected: "every MSFT_lod node to resolve a cooked mesh sub-asset",
|
|
3279
|
+
actual: String(missingMeshIndex),
|
|
3280
|
+
hint: "repair the referenced glTF mesh primitives and re-run the importer",
|
|
3281
|
+
detail: {
|
|
3282
|
+
reason: `MSFT_lod group for mesh ${sub.sourceIndex} references an unprojected mesh`
|
|
3283
|
+
}
|
|
3284
|
+
})
|
|
3285
|
+
};
|
|
3286
|
+
}
|
|
3287
|
+
}
|
|
3288
|
+
const authoredLods = sub.sourceKey === void 0 ? void 0 : ctx.sourceOverrides?.[sub.sourceKey]?.lods;
|
|
3289
|
+
const lodEntries = Array.isArray(authoredLods) ? authoredLods : [];
|
|
3290
|
+
const lodLevels = rootMeshIndex === sub.sourceIndex && lodGroup !== void 0 ? lodGroup.lodNodeIds.flatMap((nodeIndex, index) => {
|
|
3291
|
+
const meshIndex = doc.nodes[nodeIndex]?.meshIndex;
|
|
3292
|
+
const guid = meshIndex === void 0 || meshIndex === null ? void 0 : maps.meshGuidByIndex.get(meshIndex);
|
|
3293
|
+
if (guid === void 0) return [];
|
|
3294
|
+
const authored = lodEntries[index];
|
|
3295
|
+
const authoredCoverage = authored !== null && typeof authored === "object" ? authored.screenCoverage : void 0;
|
|
3296
|
+
const coverage = typeof authoredCoverage === "number" ? authoredCoverage : lodGroup.screenCoverages[index] ?? deriveDefaultLodScreenCoverages(lodGroup.lodNodeIds.length + 1)[index];
|
|
3297
|
+
const parsed2 = AssetGuid.parse(guid);
|
|
3298
|
+
return parsed2.ok && coverage !== void 0 ? [{ mesh: parsed2.value, screenCoverage: coverage, guid }] : [];
|
|
3299
|
+
}) : [];
|
|
3300
|
+
const meshPayload = lodLevels.length === 0 ? stabilizedMesh : {
|
|
3301
|
+
...stabilizedMesh,
|
|
3302
|
+
lods: lodLevels.map(({ mesh, screenCoverage }) => ({ mesh, screenCoverage }))
|
|
3303
|
+
};
|
|
3171
3304
|
const materialRefs = [];
|
|
3172
3305
|
const seenMaterialGuids = /* @__PURE__ */ new Set();
|
|
3173
3306
|
for (let slotIndex = 0; slotIndex < meshPayload.materialSlots.length; slotIndex++) {
|
|
@@ -3181,6 +3314,15 @@ async function importGltf(ctx, meshopt) {
|
|
|
3181
3314
|
});
|
|
3182
3315
|
}
|
|
3183
3316
|
}
|
|
3317
|
+
for (const [lodIndex, level] of lodLevels.entries()) {
|
|
3318
|
+
if (!seenMaterialGuids.has(level.guid.toLowerCase())) {
|
|
3319
|
+
seenMaterialGuids.add(level.guid.toLowerCase());
|
|
3320
|
+
materialRefs.push({
|
|
3321
|
+
guid: level.guid,
|
|
3322
|
+
sourceField: { fieldName: "lods", arrayIndex: lodIndex }
|
|
3323
|
+
});
|
|
3324
|
+
}
|
|
3325
|
+
}
|
|
3184
3326
|
out.push({
|
|
3185
3327
|
guid: sub.guid,
|
|
3186
3328
|
kind: "mesh",
|