@forgeax/engine-gltf 0.1.6 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +9 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/transmission-pack-carrier.integration.test.d.ts +2 -0
  4. package/dist/__tests__/transmission-pack-carrier.integration.test.d.ts.map +1 -0
  5. package/dist/bridge.d.ts.map +1 -1
  6. package/dist/check-extensions.d.ts +3 -3
  7. package/dist/check-extensions.d.ts.map +1 -1
  8. package/dist/cli-gltf.mjs +161 -69
  9. package/dist/cli-gltf.mjs.map +1 -1
  10. package/dist/errors.d.ts +7 -0
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/gltf-importer.d.ts.map +1 -1
  13. package/dist/importer-entry.mjs +177 -72
  14. package/dist/importer-entry.mjs.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.mjs +177 -72
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/material/parse-material.d.ts +118 -0
  20. package/dist/material/parse-material.d.ts.map +1 -0
  21. package/dist/node-file-entry.mjs +161 -69
  22. package/dist/node-file-entry.mjs.map +1 -1
  23. package/dist/parse-gltf.d.ts +17 -103
  24. package/dist/parse-gltf.d.ts.map +1 -1
  25. package/package.json +12 -12
  26. package/src/__tests__/bridge-material-values.unit.test.ts +46 -0
  27. package/src/__tests__/gltf-error-derived-views.test-d.ts +4 -0
  28. package/src/__tests__/gltf-error-policy-owner.unit.test.ts +26 -178
  29. package/src/__tests__/gltf.unit.test.ts +28 -4
  30. package/src/__tests__/material-pack-refs.integration.test.ts +12 -0
  31. package/src/__tests__/parse-gltf.unit.test.ts +121 -0
  32. package/src/__tests__/transmission-pack-carrier.integration.test.ts +82 -0
  33. package/src/bridge.ts +12 -1
  34. package/src/check-extensions.ts +14 -9
  35. package/src/errors.ts +12 -0
  36. package/src/gltf-importer.ts +6 -0
  37. package/src/index.ts +1 -0
  38. package/src/material/parse-material.ts +342 -0
  39. package/src/parse-gltf.ts +50 -277
package/dist/errors.d.ts CHANGED
@@ -27,6 +27,12 @@ export interface GltfExtensionUnsupportedDetail {
27
27
  readonly extension: string;
28
28
  readonly source: 'extensionsRequired' | 'extensionsUsed';
29
29
  }
30
+ export interface GltfMaterialTransmissionInvalidDetail {
31
+ readonly extension: 'KHR_materials_transmission' | 'KHR_materials_ior' | 'KHR_materials_volume';
32
+ readonly field: string;
33
+ readonly reason: 'type' | 'range' | 'non-finite' | 'blend';
34
+ readonly actual?: unknown;
35
+ }
30
36
  /** `gltf-accessor-type-mismatch` payload: 4-member closed reason discriminator. */
31
37
  export interface GltfAccessorTypeMismatchDetail {
32
38
  readonly accessorIndex: number;
@@ -187,6 +193,7 @@ interface DetailFor {
187
193
  readonly 'gltf-color-accessor-unsupported': GltfColorAccessorUnsupportedDetail;
188
194
  readonly 'gltf-color-accessor-malformed': GltfColorAccessorMalformedDetail;
189
195
  readonly 'gltf-mesh-bridge-invalid': GltfMeshBridgeInvalidDetail;
196
+ readonly 'gltf-material-transmission-invalid': GltfMaterialTransmissionInvalidDetail;
190
197
  }
191
198
  /**
192
199
  * Build a fully-typed GltfError. The discriminated-union return type lets
@@ -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":"AAoCA,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,CA+BrB;AA2hBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,8BAA8B,GAAG,QAAQ,CAMrF;AAED,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,QAA+B,CAAC"}
1
+ {"version":3,"file":"gltf-importer.d.ts","sourceRoot":"","sources":["../src/gltf-importer.ts"],"names":[],"mappings":"AAoCA,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;AA+hBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,8BAA8B,GAAG,QAAQ,CAMrF;AAED,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,QAA+B,CAAC"}
@@ -26,6 +26,10 @@ var gltfErrorPolicy = {
26
26
  expected: "extension listed in v1 allowlist (see EXTENSION_ALLOWLIST in @forgeax/engine-gltf)",
27
27
  hint: "see feat-future-gltf-extensions-allowlist; remove this extension or wait for the allowlist to expand"
28
28
  },
29
+ "gltf-material-transmission-invalid": {
30
+ expected: "KHR transmission, IOR, and volume values are finite and within their glTF ranges",
31
+ hint: "repair the named glTF material extension value and re-import the source"
32
+ },
29
33
  "gltf-accessor-type-mismatch": {
30
34
  expected: "dense fixed-stride accessor with supported componentType",
31
35
  hint: "sparse: see feat-future-gltf-sparse-accessor; morph: see feat-future-gltf-morph; interleaved: see feat-future-gltf-mesh-multi-section"
@@ -595,7 +599,9 @@ function validateMaterialUvSets(mat, primitive, availableSets) {
595
599
  ["metallicRoughnessTexture", mat.metallicRoughnessTexture],
596
600
  ["normalTexture", mat.normalTexture],
597
601
  ["occlusionTexture", mat.occlusionTexture],
598
- ["emissiveTexture", mat.emissiveTexture]
602
+ ["emissiveTexture", mat.emissiveTexture],
603
+ ["transmissionTexture", mat.transmissionTexture],
604
+ ["thicknessTexture", mat.thicknessTexture]
599
605
  ];
600
606
  for (const [slot, rawBinding] of slots) {
601
607
  const binding = textureInfo(rawBinding);
@@ -630,7 +636,9 @@ function toMaterialAsset(mat, ctx) {
630
636
  ["metallicRoughnessTexture", mat.metallicRoughnessTexture],
631
637
  ["normalTexture", mat.normalTexture],
632
638
  ["occlusionTexture", mat.occlusionTexture],
633
- ["emissiveTexture", mat.emissiveTexture]
639
+ ["emissiveTexture", mat.emissiveTexture],
640
+ ["transmissionTexture", mat.transmissionTexture],
641
+ ["thicknessTexture", mat.thicknessTexture]
634
642
  ];
635
643
  for (const [slot, info] of textureSlots) {
636
644
  const value = textureValue(info, slot, ctx);
@@ -639,6 +647,11 @@ function toMaterialAsset(mat, ctx) {
639
647
  if (mat.occlusionTexture !== void 0 && values.occlusionStrength === void 0) {
640
648
  values.occlusionStrength = 1;
641
649
  }
650
+ if (mat.transmissionFactor !== void 0) values.transmission = mat.transmissionFactor;
651
+ if (mat.ior !== void 0) values.ior = mat.ior;
652
+ if (mat.thicknessFactor !== void 0) values.thickness = mat.thicknessFactor;
653
+ if (mat.attenuationColor !== void 0) values.attenuationColor = mat.attenuationColor;
654
+ if (mat.attenuationDistance !== void 0) values.attenuationDistance = mat.attenuationDistance;
642
655
  const module = ctx?.skinned === true ? "forgeax::pbr-skin" : "forgeax::default-standard-pbr";
643
656
  const isMask = mat.alphaMode === "MASK";
644
657
  const alphaCutoff = isMask ? mat.alphaCutoff ?? 0.5 : void 0;
@@ -1386,7 +1399,10 @@ var EXTENSION_ALLOWLIST = [
1386
1399
  var SUPPORTED_EXTENSIONS = [
1387
1400
  ...EXTENSION_ALLOWLIST,
1388
1401
  "KHR_lights_punctual",
1389
- "KHR_texture_transform"
1402
+ "KHR_texture_transform",
1403
+ "KHR_materials_transmission",
1404
+ "KHR_materials_ior",
1405
+ "KHR_materials_volume"
1390
1406
  ];
1391
1407
  function checkExtensions(json) {
1392
1408
  const required = json.extensionsRequired ?? [];
@@ -1410,6 +1426,152 @@ function checkExtensions(json) {
1410
1426
  return ok({ unsupportedUsed });
1411
1427
  }
1412
1428
 
1429
+ // src/material/parse-material.ts
1430
+ function tuple2(values) {
1431
+ if (values === void 0 || values.length < 2) return void 0;
1432
+ return [values[0] ?? 0, values[1] ?? 0];
1433
+ }
1434
+ function tuple3(values) {
1435
+ if (values === void 0 || values.length < 3) return void 0;
1436
+ return [values[0] ?? 0, values[1] ?? 0, values[2] ?? 0];
1437
+ }
1438
+ function parseTextureInfo(info, textures) {
1439
+ const transformJson = info.extensions?.KHR_texture_transform;
1440
+ const offset = tuple2(transformJson?.offset);
1441
+ const scale = tuple2(transformJson?.scale);
1442
+ const transform = offset === void 0 && transformJson?.rotation === void 0 && scale === void 0 ? void 0 : {
1443
+ ...offset === void 0 ? {} : { offset },
1444
+ ...transformJson?.rotation === void 0 ? {} : { rotation: transformJson.rotation },
1445
+ ...scale === void 0 ? {} : { scale }
1446
+ };
1447
+ const sampler = textures[info.index]?.sampler;
1448
+ return {
1449
+ texture: info.index,
1450
+ ...sampler === void 0 ? {} : { sampler },
1451
+ ...info.texCoord === void 0 && transformJson?.texCoord === void 0 ? {} : { texCoord: transformJson?.texCoord ?? info.texCoord },
1452
+ ...transform === void 0 ? {} : { transform }
1453
+ };
1454
+ }
1455
+ function finiteOrUndefined(value) {
1456
+ return value !== void 0 && Number.isFinite(value) ? value : void 0;
1457
+ }
1458
+ function parseMaterial(matJson, textures) {
1459
+ const pbr = matJson.pbrMetallicRoughness;
1460
+ const baseColor = pbr?.baseColorFactor ?? [1, 1, 1, 1];
1461
+ const baseColor4 = [
1462
+ baseColor[0] ?? 1,
1463
+ baseColor[1] ?? 1,
1464
+ baseColor[2] ?? 1,
1465
+ baseColor[3] ?? 1
1466
+ ];
1467
+ const alphaMode = matJson.alphaMode === "MASK" || matJson.alphaMode === "BLEND" ? matJson.alphaMode : void 0;
1468
+ const alphaCutoff = alphaMode === "MASK" ? matJson.alphaCutoff ?? 0.5 : void 0;
1469
+ const emissiveFactor = tuple3(matJson.emissiveFactor);
1470
+ const transmission = matJson.extensions?.KHR_materials_transmission;
1471
+ const ior = matJson.extensions?.KHR_materials_ior;
1472
+ const volume = matJson.extensions?.KHR_materials_volume;
1473
+ const attenuationColor = tuple3(volume?.attenuationColor);
1474
+ const invalid = (extension, field, reason, actual) => err(
1475
+ gltfErr("gltf-material-transmission-invalid", {
1476
+ extension,
1477
+ field,
1478
+ reason,
1479
+ ...actual === void 0 ? {} : { actual }
1480
+ })
1481
+ );
1482
+ if (transmission?.transmissionFactor !== void 0 && (typeof transmission.transmissionFactor !== "number" || !Number.isFinite(transmission.transmissionFactor))) {
1483
+ return invalid(
1484
+ "KHR_materials_transmission",
1485
+ "transmissionFactor",
1486
+ "non-finite",
1487
+ transmission.transmissionFactor
1488
+ );
1489
+ }
1490
+ if (transmission?.transmissionFactor !== void 0 && (transmission.transmissionFactor < 0 || transmission.transmissionFactor > 1)) {
1491
+ return invalid(
1492
+ "KHR_materials_transmission",
1493
+ "transmissionFactor",
1494
+ "range",
1495
+ transmission.transmissionFactor
1496
+ );
1497
+ }
1498
+ if (ior?.ior !== void 0 && (typeof ior.ior !== "number" || !Number.isFinite(ior.ior))) {
1499
+ return invalid("KHR_materials_ior", "ior", "non-finite", ior.ior);
1500
+ }
1501
+ if (ior?.ior !== void 0 && ior.ior < 1) {
1502
+ return invalid("KHR_materials_ior", "ior", "range", ior.ior);
1503
+ }
1504
+ if (volume?.thicknessFactor !== void 0 && !Number.isFinite(volume.thicknessFactor)) {
1505
+ return invalid("KHR_materials_volume", "thicknessFactor", "non-finite", volume.thicknessFactor);
1506
+ }
1507
+ if (volume?.thicknessFactor !== void 0 && volume.thicknessFactor < 0) {
1508
+ return invalid("KHR_materials_volume", "thicknessFactor", "range", volume.thicknessFactor);
1509
+ }
1510
+ if (volume?.attenuationColor !== void 0 && (attenuationColor === void 0 || attenuationColor.some((value) => !Number.isFinite(value) || value < 0 || value > 1))) {
1511
+ return invalid("KHR_materials_volume", "attenuationColor", "range", volume.attenuationColor);
1512
+ }
1513
+ if (volume?.attenuationDistance !== void 0 && !Number.isFinite(volume.attenuationDistance) && volume.attenuationDistance !== Number.POSITIVE_INFINITY) {
1514
+ return invalid(
1515
+ "KHR_materials_volume",
1516
+ "attenuationDistance",
1517
+ "non-finite",
1518
+ volume.attenuationDistance
1519
+ );
1520
+ }
1521
+ if (volume?.attenuationDistance !== void 0 && Number.isFinite(volume.attenuationDistance) && volume.attenuationDistance <= 0) {
1522
+ return invalid(
1523
+ "KHR_materials_volume",
1524
+ "attenuationDistance",
1525
+ "range",
1526
+ volume.attenuationDistance
1527
+ );
1528
+ }
1529
+ if (alphaMode === "BLEND" && (transmission?.transmissionFactor ?? 0) > 0) {
1530
+ return invalid("KHR_materials_transmission", "alphaMode", "blend", alphaMode);
1531
+ }
1532
+ return ok({
1533
+ ...matJson.name === void 0 ? {} : { name: matJson.name },
1534
+ baseColorFactor: baseColor4,
1535
+ ...emissiveFactor === void 0 ? {} : { emissiveFactor },
1536
+ metallicFactor: pbr?.metallicFactor ?? 1,
1537
+ roughnessFactor: pbr?.roughnessFactor ?? 1,
1538
+ ...pbr?.baseColorTexture === void 0 ? {} : { baseColorTexture: parseTextureInfo(pbr.baseColorTexture, textures) },
1539
+ ...pbr?.metallicRoughnessTexture === void 0 ? {} : { metallicRoughnessTexture: parseTextureInfo(pbr.metallicRoughnessTexture, textures) },
1540
+ ...matJson.normalTexture === void 0 ? {} : {
1541
+ normalTexture: {
1542
+ ...parseTextureInfo(matJson.normalTexture, textures),
1543
+ ...matJson.normalTexture.scale === void 0 ? {} : { scale: matJson.normalTexture.scale }
1544
+ }
1545
+ },
1546
+ ...matJson.occlusionTexture === void 0 ? {} : {
1547
+ occlusionTexture: {
1548
+ ...parseTextureInfo(matJson.occlusionTexture, textures),
1549
+ ...matJson.occlusionTexture.strength === void 0 ? {} : { strength: matJson.occlusionTexture.strength }
1550
+ }
1551
+ },
1552
+ ...matJson.emissiveTexture === void 0 ? {} : { emissiveTexture: parseTextureInfo(matJson.emissiveTexture, textures) },
1553
+ ...transmission === void 0 ? {} : {
1554
+ transmissionFactor: transmission.transmissionFactor ?? 0,
1555
+ transmissionChannel: 0,
1556
+ ...transmission.transmissionTexture === void 0 ? {} : {
1557
+ transmissionTexture: parseTextureInfo(transmission.transmissionTexture, textures)
1558
+ }
1559
+ },
1560
+ ...ior === void 0 ? {} : { ior: ior.ior ?? 1.5 },
1561
+ ...volume === void 0 ? {} : {
1562
+ thicknessFactor: volume.thicknessFactor ?? 0,
1563
+ thicknessChannel: 1,
1564
+ ...volume.thicknessTexture === void 0 ? {} : { thicknessTexture: parseTextureInfo(volume.thicknessTexture, textures) },
1565
+ ...attenuationColor === void 0 ? {} : { attenuationColor },
1566
+ ...finiteOrUndefined(volume.attenuationDistance) === void 0 ? {} : { attenuationDistance: volume.attenuationDistance }
1567
+ },
1568
+ ...alphaMode === void 0 ? {} : { alphaMode },
1569
+ ...alphaCutoff === void 0 ? {} : { alphaCutoff },
1570
+ ...matJson.doubleSided === true ? { doubleSided: true } : {},
1571
+ ...pbr?.baseColorTexture?.texCoord === void 0 || pbr.baseColorTexture.texCoord === 0 ? {} : { baseColorTexCoord: pbr.baseColorTexture.texCoord }
1572
+ });
1573
+ }
1574
+
1413
1575
  // src/meshopt-decode.ts
1414
1576
  function viewBytes(view, buffers) {
1415
1577
  const buffer = buffers[view.buffer];
@@ -1807,7 +1969,7 @@ var IDENTITY = {
1807
1969
  rotation: [0, 0, 0, 1],
1808
1970
  scale: [1, 1, 1]
1809
1971
  };
1810
- function tuple3(arr, fallback) {
1972
+ function tuple32(arr, fallback) {
1811
1973
  if (arr === void 0 || arr.length < 3) return fallback;
1812
1974
  return [arr[0] ?? fallback[0], arr[1] ?? fallback[1], arr[2] ?? fallback[2]];
1813
1975
  }
@@ -1843,9 +2005,9 @@ function decomposeNodeTransform(node, nodeIndex, diagnostics) {
1843
2005
  return IDENTITY;
1844
2006
  }
1845
2007
  return {
1846
- translation: tuple3(node.translation, IDENTITY.translation),
2008
+ translation: tuple32(node.translation, IDENTITY.translation),
1847
2009
  rotation: tuple4(node.rotation, IDENTITY.rotation),
1848
- scale: tuple3(node.scale, IDENTITY.scale)
2010
+ scale: tuple32(node.scale, IDENTITY.scale)
1849
2011
  };
1850
2012
  }
1851
2013
 
@@ -1966,27 +2128,6 @@ function decodeAttributeAccessor(accessorIndex, accessor, bufferViews, buffers)
1966
2128
  if (decoded.value.kind !== "f32") return err(unknownAccessor(accessorIndex));
1967
2129
  return ok(decoded.value.data);
1968
2130
  }
1969
- function tuple2(values) {
1970
- if (values === void 0 || values.length < 2) return void 0;
1971
- return [values[0] ?? 0, values[1] ?? 0];
1972
- }
1973
- function parseTextureInfo(info, textures) {
1974
- const transformJson = info.extensions?.KHR_texture_transform;
1975
- const offset = tuple2(transformJson?.offset);
1976
- const scale = tuple2(transformJson?.scale);
1977
- const transform = offset === void 0 && transformJson?.rotation === void 0 && scale === void 0 ? void 0 : {
1978
- ...offset === void 0 ? {} : { offset },
1979
- ...transformJson?.rotation === void 0 ? {} : { rotation: transformJson.rotation },
1980
- ...scale === void 0 ? {} : { scale }
1981
- };
1982
- const sampler = textures[info.index]?.sampler;
1983
- return {
1984
- texture: info.index,
1985
- ...sampler === void 0 ? {} : { sampler },
1986
- ...info.texCoord === void 0 && transformJson?.texCoord === void 0 ? {} : { texCoord: transformJson?.texCoord ?? info.texCoord },
1987
- ...transform === void 0 ? {} : { transform }
1988
- };
1989
- }
1990
2131
  async function resolveBuffer(buf, externalLoader, binChunk) {
1991
2132
  if (buf.uri === void 0) {
1992
2133
  if (binChunk === void 0) {
@@ -2534,51 +2675,11 @@ async function parseGltfWithBin(json, ctx) {
2534
2675
  ...sampJson.name === void 0 ? {} : { name: sampJson.name }
2535
2676
  });
2536
2677
  }
2537
- const materialsJson = json.materials ?? [];
2538
2678
  const materials = [];
2539
- for (const matJson of materialsJson) {
2540
- const pbr = matJson.pbrMetallicRoughness;
2541
- const baseColor = pbr?.baseColorFactor ?? [1, 1, 1, 1];
2542
- const baseColor4 = [
2543
- baseColor[0] ?? 1,
2544
- baseColor[1] ?? 1,
2545
- baseColor[2] ?? 1,
2546
- baseColor[3] ?? 1
2547
- ];
2548
- const alphaMode = matJson.alphaMode === "MASK" || matJson.alphaMode === "BLEND" ? matJson.alphaMode : void 0;
2549
- const alphaCutoff = alphaMode === "MASK" ? matJson.alphaCutoff ?? 0.5 : void 0;
2550
- const emissiveFactor = matJson.emissiveFactor;
2551
- const emissiveFactor3 = [
2552
- emissiveFactor?.[0] ?? 0,
2553
- emissiveFactor?.[1] ?? 0,
2554
- emissiveFactor?.[2] ?? 0
2555
- ];
2556
- materials.push({
2557
- ...matJson.name === void 0 ? {} : { name: matJson.name },
2558
- baseColorFactor: baseColor4,
2559
- ...emissiveFactor === void 0 ? {} : { emissiveFactor: emissiveFactor3 },
2560
- metallicFactor: pbr?.metallicFactor ?? 1,
2561
- roughnessFactor: pbr?.roughnessFactor ?? 1,
2562
- ...pbr?.baseColorTexture === void 0 ? {} : { baseColorTexture: parseTextureInfo(pbr.baseColorTexture, textures) },
2563
- ...pbr?.metallicRoughnessTexture === void 0 ? {} : { metallicRoughnessTexture: parseTextureInfo(pbr.metallicRoughnessTexture, textures) },
2564
- ...matJson.normalTexture === void 0 ? {} : {
2565
- normalTexture: {
2566
- ...parseTextureInfo(matJson.normalTexture, textures),
2567
- ...matJson.normalTexture.scale === void 0 ? {} : { scale: matJson.normalTexture.scale }
2568
- }
2569
- },
2570
- ...matJson.occlusionTexture === void 0 ? {} : {
2571
- occlusionTexture: {
2572
- ...parseTextureInfo(matJson.occlusionTexture, textures),
2573
- ...matJson.occlusionTexture.strength === void 0 ? {} : { strength: matJson.occlusionTexture.strength }
2574
- }
2575
- },
2576
- ...matJson.emissiveTexture === void 0 ? {} : { emissiveTexture: parseTextureInfo(matJson.emissiveTexture, textures) },
2577
- ...alphaMode === void 0 ? {} : { alphaMode },
2578
- ...alphaCutoff === void 0 ? {} : { alphaCutoff },
2579
- ...matJson.doubleSided === true ? { doubleSided: true } : {},
2580
- ...pbr?.baseColorTexture?.texCoord === void 0 || pbr.baseColorTexture.texCoord === 0 ? {} : { baseColorTexCoord: pbr.baseColorTexture.texCoord }
2581
- });
2679
+ for (const material of json.materials ?? []) {
2680
+ const parsedMaterial = parseMaterial(material, textures);
2681
+ if (!parsedMaterial.ok) return err(parsedMaterial.error);
2682
+ materials.push(parsedMaterial.value);
2582
2683
  }
2583
2684
  const diagnostics = {
2584
2685
  nodeNames: [],
@@ -2949,6 +3050,8 @@ function materialRefsForPack(mat, doc, textureGuidByIndex, samplerGuidByIndex =
2949
3050
  pushRefsForSlot(mat.normalTexture, "normalTexture");
2950
3051
  pushRefsForSlot(mat.occlusionTexture, "occlusionTexture");
2951
3052
  pushRefsForSlot(mat.emissiveTexture, "emissiveTexture");
3053
+ pushRefsForSlot(mat.transmissionTexture, "transmissionTexture");
3054
+ pushRefsForSlot(mat.thicknessTexture, "thicknessTexture");
2952
3055
  return refs;
2953
3056
  }
2954
3057
  function availableUvSets(mesh) {
@@ -2967,7 +3070,9 @@ function rewriteMaterialAssetRefs(matAsset, mat, doc, maps) {
2967
3070
  ["metallicRoughnessTexture", mat.metallicRoughnessTexture],
2968
3071
  ["normalTexture", mat.normalTexture],
2969
3072
  ["occlusionTexture", mat.occlusionTexture],
2970
- ["emissiveTexture", mat.emissiveTexture]
3073
+ ["emissiveTexture", mat.emissiveTexture],
3074
+ ["transmissionTexture", mat.transmissionTexture],
3075
+ ["thicknessTexture", mat.thicknessTexture]
2971
3076
  ];
2972
3077
  let cursor = 0;
2973
3078
  for (const [slot, rawBinding] of slots) {