@forgeax/engine-gltf 0.1.23 → 0.1.24

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 (43) hide show
  1. package/README.md +56 -3
  2. package/dist/__tests__/physical-clearcoat.unit.test.d.ts +2 -0
  3. package/dist/__tests__/physical-clearcoat.unit.test.d.ts.map +1 -0
  4. package/dist/__tests__/physical-material-import.integration.test.d.ts +2 -0
  5. package/dist/__tests__/physical-material-import.integration.test.d.ts.map +1 -0
  6. package/dist/bridge.d.ts +1 -0
  7. package/dist/bridge.d.ts.map +1 -1
  8. package/dist/check-extensions.d.ts +1 -1
  9. package/dist/check-extensions.d.ts.map +1 -1
  10. package/dist/cli-gltf.mjs +181 -8
  11. package/dist/cli-gltf.mjs.map +1 -1
  12. package/dist/errors.d.ts +7 -0
  13. package/dist/errors.d.ts.map +1 -1
  14. package/dist/gltf-importer.d.ts.map +1 -1
  15. package/dist/image-color-space.d.ts +12 -0
  16. package/dist/image-color-space.d.ts.map +1 -1
  17. package/dist/importer-entry.mjs +373 -24
  18. package/dist/importer-entry.mjs.map +1 -1
  19. package/dist/index.d.ts +2 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.mjs +374 -25
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/material/parse-material.d.ts +66 -0
  24. package/dist/material/parse-material.d.ts.map +1 -1
  25. package/dist/node-file-entry.mjs +181 -8
  26. package/dist/node-file-entry.mjs.map +1 -1
  27. package/package.json +12 -12
  28. package/src/__tests__/bridge-material-values.unit.test.ts +84 -1
  29. package/src/__tests__/bridge-skin-stride.unit.test.ts +22 -0
  30. package/src/__tests__/gltf-error-derived-views.test-d.ts +4 -0
  31. package/src/__tests__/gltf-error-migration.test.ts +3 -3
  32. package/src/__tests__/gltf.unit.test.ts +52 -6
  33. package/src/__tests__/material-pack-refs.integration.test.ts +53 -0
  34. package/src/__tests__/parse-gltf.unit.test.ts +29 -1
  35. package/src/__tests__/physical-clearcoat.unit.test.ts +110 -0
  36. package/src/__tests__/physical-material-import.integration.test.ts +239 -0
  37. package/src/bridge.ts +258 -13
  38. package/src/check-extensions.ts +16 -10
  39. package/src/errors.ts +21 -2
  40. package/src/gltf-importer.ts +35 -0
  41. package/src/image-color-space.ts +29 -4
  42. package/src/index.ts +8 -1
  43. package/src/material/parse-material.ts +307 -0
@@ -82,6 +82,38 @@ export interface GltfMaterialJson {
82
82
  readonly attenuationColor?: readonly number[];
83
83
  readonly attenuationDistance?: number;
84
84
  };
85
+ readonly KHR_materials_clearcoat?: {
86
+ readonly clearcoatFactor?: number;
87
+ readonly clearcoatTexture?: TextureInfoJson;
88
+ readonly clearcoatRoughnessFactor?: number;
89
+ readonly clearcoatRoughnessTexture?: TextureInfoJson;
90
+ readonly clearcoatNormalTexture?: NormalTextureInfoJson;
91
+ };
92
+ readonly KHR_materials_anisotropy?: {
93
+ readonly anisotropyStrength?: number;
94
+ readonly anisotropyRotation?: number;
95
+ readonly anisotropyTexture?: TextureInfoJson;
96
+ };
97
+ readonly KHR_materials_sheen?: {
98
+ readonly sheenColorFactor?: readonly number[];
99
+ readonly sheenColorTexture?: TextureInfoJson;
100
+ readonly sheenRoughnessFactor?: number;
101
+ readonly sheenRoughnessTexture?: TextureInfoJson;
102
+ };
103
+ readonly KHR_materials_iridescence?: {
104
+ readonly iridescenceFactor?: number;
105
+ readonly iridescenceIor?: number;
106
+ readonly iridescenceThicknessMinimum?: number;
107
+ readonly iridescenceThicknessMaximum?: number;
108
+ readonly iridescenceTexture?: TextureInfoJson;
109
+ readonly iridescenceThicknessTexture?: TextureInfoJson;
110
+ };
111
+ readonly KHR_materials_specular?: {
112
+ readonly specularFactor?: number;
113
+ readonly specularTexture?: TextureInfoJson;
114
+ readonly specularColorFactor?: readonly number[];
115
+ readonly specularColorTexture?: TextureInfoJson;
116
+ };
85
117
  };
86
118
  }
87
119
  export interface GltfMaterialIr {
@@ -107,6 +139,40 @@ export interface GltfMaterialIr {
107
139
  readonly thicknessChannel?: number;
108
140
  readonly attenuationColor?: readonly [number, number, number];
109
141
  readonly attenuationDistance?: number;
142
+ readonly clearcoatFactor?: number;
143
+ readonly clearcoatChannel?: number;
144
+ readonly clearcoatTexture?: GltfTextureInfoIr | number;
145
+ readonly clearcoatRoughnessFactor?: number;
146
+ readonly clearcoatRoughnessChannel?: number;
147
+ readonly clearcoatRoughnessTexture?: GltfTextureInfoIr | number;
148
+ readonly clearcoatNormalTexture?: GltfNormalTextureInfoIr | number;
149
+ readonly clearcoatNormalChannel?: readonly [number, number];
150
+ readonly anisotropyStrength?: number;
151
+ readonly anisotropyRotation?: number;
152
+ readonly anisotropyTexture?: GltfTextureInfoIr | number;
153
+ /** KHR_materials_anisotropy uses RG direction and B strength. */
154
+ readonly anisotropyChannel?: readonly [number, number, number];
155
+ readonly sheenColorFactor?: readonly [number, number, number];
156
+ readonly sheenColorTexture?: GltfTextureInfoIr | number;
157
+ readonly sheenColorChannel?: readonly [number, number, number];
158
+ readonly sheenRoughnessFactor?: number;
159
+ readonly sheenRoughnessTexture?: GltfTextureInfoIr | number;
160
+ readonly sheenRoughnessChannel?: number;
161
+ readonly iridescenceFactor?: number;
162
+ readonly iridescenceIor?: number;
163
+ readonly iridescenceThicknessMinimum?: number;
164
+ readonly iridescenceThicknessMaximum?: number;
165
+ readonly iridescenceTexture?: GltfTextureInfoIr | number;
166
+ readonly iridescenceChannel?: number;
167
+ readonly iridescenceThicknessTexture?: GltfTextureInfoIr | number;
168
+ readonly iridescenceThicknessChannel?: number;
169
+ readonly specularFactor?: number;
170
+ readonly specularTexture?: GltfTextureInfoIr | number;
171
+ /** KHR_materials_specular specularTexture uses the alpha channel. */
172
+ readonly specularChannel?: number;
173
+ readonly specularColorFactor?: readonly [number, number, number];
174
+ readonly specularColorTexture?: GltfTextureInfoIr | number;
175
+ readonly specularColorChannel?: readonly [number, number, number];
110
176
  readonly alphaMode?: 'OPAQUE' | 'MASK' | 'BLEND';
111
177
  readonly alphaCutoff?: number;
112
178
  readonly doubleSided?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"parse-material.d.ts","sourceRoot":"","sources":["../../src/material/parse-material.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-material.d.ts","sourceRoot":"","sources":["../../src/material/parse-material.ts"],"names":[],"mappings":"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"}
@@ -19,8 +19,8 @@ var gltfErrorPolicy = {
19
19
  hint: "rebuild .gltf with valid bufferViews; check accessor index; ensure accessor.byteOffset + EFFECTIVE_STRIDE * (count - 1) + element_size <= bufferView.byteLength"
20
20
  },
21
21
  "gltf-extension-unsupported": {
22
- expected: "extension listed in v1 allowlist (see EXTENSION_ALLOWLIST in @forgeax/engine-gltf)",
23
- hint: "see feat-future-gltf-extensions-allowlist; remove this extension or wait for the allowlist to expand"
22
+ expected: "extension listed in the supported allowlist (see EXTENSION_ALLOWLIST in @forgeax/engine-gltf)",
23
+ hint: "remove the unsupported required extension or use a supported glTF extension; extensionsUsed-only entries remain diagnostic"
24
24
  },
25
25
  "gltf-lod-invalid": {
26
26
  expected: "MSFT_lod ids to reference unique existing node indices with valid coverage",
@@ -30,6 +30,10 @@ var gltfErrorPolicy = {
30
30
  expected: "KHR transmission, IOR, and volume values are finite and within their glTF ranges",
31
31
  hint: "repair the named glTF material extension value and re-import the source"
32
32
  },
33
+ "gltf-material-physical-invalid": {
34
+ expected: "KHR clearcoat, anisotropy, sheen, iridescence, and specular values are finite and within their glTF ranges",
35
+ hint: "repair the named physical material extension value and re-import the source"
36
+ },
33
37
  "gltf-accessor-type-mismatch": {
34
38
  expected: "dense fixed-stride accessor with supported componentType",
35
39
  hint: "sparse: see feat-future-gltf-sparse-accessor; morph: see feat-future-gltf-morph; interleaved: see feat-future-gltf-mesh-multi-section"
@@ -394,16 +398,21 @@ function decodeColorAccessor(input, flags = {}) {
394
398
  var EXTENSION_ALLOWLIST = [
395
399
  "EXT_mesh_gpu_instancing",
396
400
  "EXT_meshopt_compression",
397
- "MSFT_lod",
398
- "MSFT_screencoverage"
399
- ];
400
- var SUPPORTED_EXTENSIONS = [
401
- ...EXTENSION_ALLOWLIST,
402
401
  "KHR_lights_punctual",
403
402
  "KHR_texture_transform",
404
403
  "KHR_materials_transmission",
405
404
  "KHR_materials_ior",
406
- "KHR_materials_volume"
405
+ "KHR_materials_volume",
406
+ "KHR_materials_clearcoat",
407
+ "KHR_materials_anisotropy",
408
+ "KHR_materials_sheen",
409
+ "KHR_materials_iridescence",
410
+ "KHR_materials_specular"
411
+ ];
412
+ var SUPPORTED_EXTENSIONS = [
413
+ ...EXTENSION_ALLOWLIST,
414
+ "MSFT_lod",
415
+ "MSFT_screencoverage"
407
416
  ];
408
417
  function checkExtensions(json) {
409
418
  const required = json.extensionsRequired ?? [];
@@ -574,6 +583,11 @@ function parseMaterial(matJson, textures) {
574
583
  const transmission = matJson.extensions?.KHR_materials_transmission;
575
584
  const ior = matJson.extensions?.KHR_materials_ior;
576
585
  const volume = matJson.extensions?.KHR_materials_volume;
586
+ const clearcoat = matJson.extensions?.KHR_materials_clearcoat;
587
+ const anisotropy = matJson.extensions?.KHR_materials_anisotropy;
588
+ const sheen = matJson.extensions?.KHR_materials_sheen;
589
+ const iridescence = matJson.extensions?.KHR_materials_iridescence;
590
+ const specular = matJson.extensions?.KHR_materials_specular;
577
591
  const attenuationColor = tuple3(volume?.attenuationColor);
578
592
  const invalid = (extension, field, reason, actual) => err(
579
593
  gltfErr("gltf-material-transmission-invalid", {
@@ -583,6 +597,14 @@ function parseMaterial(matJson, textures) {
583
597
  ...actual === void 0 ? {} : { actual }
584
598
  })
585
599
  );
600
+ const physicalInvalid = (extension, field, reason, actual) => err(
601
+ gltfErr("gltf-material-physical-invalid", {
602
+ extension,
603
+ field,
604
+ reason,
605
+ ...actual === void 0 ? {} : { actual }
606
+ })
607
+ );
586
608
  if (transmission?.transmissionFactor !== void 0 && (typeof transmission.transmissionFactor !== "number" || !Number.isFinite(transmission.transmissionFactor))) {
587
609
  return invalid(
588
610
  "KHR_materials_transmission",
@@ -633,6 +655,98 @@ function parseMaterial(matJson, textures) {
633
655
  if (alphaMode === "BLEND" && (transmission?.transmissionFactor ?? 0) > 0) {
634
656
  return invalid("KHR_materials_transmission", "alphaMode", "blend", alphaMode);
635
657
  }
658
+ if (clearcoat?.clearcoatFactor !== void 0 && (typeof clearcoat.clearcoatFactor !== "number" || !Number.isFinite(clearcoat.clearcoatFactor))) {
659
+ return physicalInvalid(
660
+ "KHR_materials_clearcoat",
661
+ "clearcoatFactor",
662
+ "non-finite",
663
+ clearcoat.clearcoatFactor
664
+ );
665
+ }
666
+ if (clearcoat?.clearcoatFactor !== void 0 && (clearcoat.clearcoatFactor < 0 || clearcoat.clearcoatFactor > 1)) {
667
+ return physicalInvalid(
668
+ "KHR_materials_clearcoat",
669
+ "clearcoatFactor",
670
+ "range",
671
+ clearcoat.clearcoatFactor
672
+ );
673
+ }
674
+ if (clearcoat?.clearcoatRoughnessFactor !== void 0 && (typeof clearcoat.clearcoatRoughnessFactor !== "number" || !Number.isFinite(clearcoat.clearcoatRoughnessFactor))) {
675
+ return physicalInvalid(
676
+ "KHR_materials_clearcoat",
677
+ "clearcoatRoughnessFactor",
678
+ "non-finite",
679
+ clearcoat.clearcoatRoughnessFactor
680
+ );
681
+ }
682
+ if (clearcoat?.clearcoatRoughnessFactor !== void 0 && (clearcoat.clearcoatRoughnessFactor < 0 || clearcoat.clearcoatRoughnessFactor > 1)) {
683
+ return physicalInvalid(
684
+ "KHR_materials_clearcoat",
685
+ "clearcoatRoughnessFactor",
686
+ "range",
687
+ clearcoat.clearcoatRoughnessFactor
688
+ );
689
+ }
690
+ if (clearcoat?.clearcoatNormalTexture?.scale !== void 0 && (typeof clearcoat.clearcoatNormalTexture.scale !== "number" || !Number.isFinite(clearcoat.clearcoatNormalTexture.scale) || clearcoat.clearcoatNormalTexture.scale < 0)) {
691
+ return physicalInvalid(
692
+ "KHR_materials_clearcoat",
693
+ "clearcoatNormalTexture.scale",
694
+ "range",
695
+ clearcoat.clearcoatNormalTexture.scale
696
+ );
697
+ }
698
+ const validateUnit = (extension, field, value) => {
699
+ if (value === void 0) return void 0;
700
+ if (typeof value !== "number" || !Number.isFinite(value))
701
+ return physicalInvalid(extension, field, "non-finite", value);
702
+ if (value < 0 || value > 1) return physicalInvalid(extension, field, "range", value);
703
+ return void 0;
704
+ };
705
+ const validateFinite = (extension, field, value, minimum) => {
706
+ if (value === void 0) return void 0;
707
+ if (typeof value !== "number" || !Number.isFinite(value))
708
+ return physicalInvalid(extension, field, "non-finite", value);
709
+ if (minimum !== void 0 && value < minimum)
710
+ return physicalInvalid(extension, field, "range", value);
711
+ return void 0;
712
+ };
713
+ const validateColor = (extension, field, value) => {
714
+ if (value === void 0) return void 0;
715
+ if (value.length < 3 || value.slice(0, 3).some((channel) => typeof channel !== "number" || !Number.isFinite(channel))) {
716
+ return physicalInvalid(extension, field, "type", value);
717
+ }
718
+ if (value.slice(0, 3).some((channel) => channel < 0 || channel > 1)) {
719
+ return physicalInvalid(extension, field, "range", value);
720
+ }
721
+ return void 0;
722
+ };
723
+ const physicalChecks = [
724
+ validateUnit("KHR_materials_anisotropy", "anisotropyStrength", anisotropy?.anisotropyStrength),
725
+ validateFinite(
726
+ "KHR_materials_anisotropy",
727
+ "anisotropyRotation",
728
+ anisotropy?.anisotropyRotation
729
+ ),
730
+ validateUnit("KHR_materials_sheen", "sheenRoughnessFactor", sheen?.sheenRoughnessFactor),
731
+ validateColor("KHR_materials_sheen", "sheenColorFactor", sheen?.sheenColorFactor),
732
+ validateUnit("KHR_materials_iridescence", "iridescenceFactor", iridescence?.iridescenceFactor),
733
+ validateFinite("KHR_materials_iridescence", "iridescenceIor", iridescence?.iridescenceIor, 1),
734
+ validateFinite(
735
+ "KHR_materials_iridescence",
736
+ "iridescenceThicknessMinimum",
737
+ iridescence?.iridescenceThicknessMinimum,
738
+ 0
739
+ ),
740
+ validateFinite(
741
+ "KHR_materials_iridescence",
742
+ "iridescenceThicknessMaximum",
743
+ iridescence?.iridescenceThicknessMaximum,
744
+ 0
745
+ ),
746
+ validateUnit("KHR_materials_specular", "specularFactor", specular?.specularFactor),
747
+ validateColor("KHR_materials_specular", "specularColorFactor", specular?.specularColorFactor)
748
+ ];
749
+ for (const check of physicalChecks) if (check !== void 0) return check;
636
750
  return ok({
637
751
  ...matJson.name === void 0 ? {} : { name: matJson.name },
638
752
  baseColorFactor: baseColor4,
@@ -669,6 +783,65 @@ function parseMaterial(matJson, textures) {
669
783
  ...attenuationColor === void 0 ? {} : { attenuationColor },
670
784
  ...finiteOrUndefined(volume.attenuationDistance) === void 0 ? {} : { attenuationDistance: volume.attenuationDistance }
671
785
  },
786
+ ...clearcoat === void 0 ? {} : {
787
+ clearcoatFactor: clearcoat.clearcoatFactor ?? 0,
788
+ clearcoatChannel: 0,
789
+ clearcoatRoughnessFactor: clearcoat.clearcoatRoughnessFactor ?? 0,
790
+ clearcoatRoughnessChannel: 1,
791
+ clearcoatNormalChannel: [0, 1],
792
+ ...clearcoat.clearcoatTexture === void 0 ? {} : { clearcoatTexture: parseTextureInfo(clearcoat.clearcoatTexture, textures) },
793
+ ...clearcoat.clearcoatRoughnessTexture === void 0 ? {} : {
794
+ clearcoatRoughnessTexture: parseTextureInfo(
795
+ clearcoat.clearcoatRoughnessTexture,
796
+ textures
797
+ )
798
+ },
799
+ ...clearcoat.clearcoatNormalTexture === void 0 ? {} : {
800
+ clearcoatNormalTexture: {
801
+ ...parseTextureInfo(clearcoat.clearcoatNormalTexture, textures),
802
+ ...clearcoat.clearcoatNormalTexture.scale === void 0 ? {} : { scale: clearcoat.clearcoatNormalTexture.scale }
803
+ }
804
+ }
805
+ },
806
+ ...anisotropy === void 0 ? {} : {
807
+ anisotropyStrength: anisotropy.anisotropyStrength ?? 0,
808
+ anisotropyRotation: anisotropy.anisotropyRotation ?? 0,
809
+ anisotropyChannel: [0, 1, 2],
810
+ ...anisotropy.anisotropyTexture === void 0 ? {} : { anisotropyTexture: parseTextureInfo(anisotropy.anisotropyTexture, textures) }
811
+ },
812
+ ...sheen === void 0 ? {} : {
813
+ sheenColorFactor: tuple3(sheen.sheenColorFactor) ?? [0, 0, 0],
814
+ sheenColorChannel: [0, 1, 2],
815
+ sheenRoughnessFactor: sheen.sheenRoughnessFactor ?? 0,
816
+ sheenRoughnessChannel: 3,
817
+ ...sheen.sheenColorTexture === void 0 ? {} : { sheenColorTexture: parseTextureInfo(sheen.sheenColorTexture, textures) },
818
+ ...sheen.sheenRoughnessTexture === void 0 ? {} : { sheenRoughnessTexture: parseTextureInfo(sheen.sheenRoughnessTexture, textures) }
819
+ },
820
+ ...iridescence === void 0 ? {} : {
821
+ iridescenceFactor: iridescence.iridescenceFactor ?? 0,
822
+ iridescenceIor: iridescence.iridescenceIor ?? 1.3,
823
+ iridescenceThicknessMinimum: iridescence.iridescenceThicknessMinimum ?? 100,
824
+ iridescenceThicknessMaximum: iridescence.iridescenceThicknessMaximum ?? 400,
825
+ iridescenceChannel: 0,
826
+ iridescenceThicknessChannel: 1,
827
+ ...iridescence.iridescenceTexture === void 0 ? {} : { iridescenceTexture: parseTextureInfo(iridescence.iridescenceTexture, textures) },
828
+ ...iridescence.iridescenceThicknessTexture === void 0 ? {} : {
829
+ iridescenceThicknessTexture: parseTextureInfo(
830
+ iridescence.iridescenceThicknessTexture,
831
+ textures
832
+ )
833
+ }
834
+ },
835
+ ...specular === void 0 ? {} : {
836
+ specularFactor: specular.specularFactor ?? 1,
837
+ specularChannel: 3,
838
+ specularColorFactor: tuple3(specular.specularColorFactor) ?? [1, 1, 1],
839
+ specularColorChannel: [0, 1, 2],
840
+ ...specular.specularTexture === void 0 ? {} : { specularTexture: parseTextureInfo(specular.specularTexture, textures) },
841
+ ...specular.specularColorTexture === void 0 ? {} : {
842
+ specularColorTexture: parseTextureInfo(specular.specularColorTexture, textures)
843
+ }
844
+ },
672
845
  ...alphaMode === void 0 ? {} : { alphaMode },
673
846
  ...alphaCutoff === void 0 ? {} : { alphaCutoff },
674
847
  ...matJson.doubleSided === true ? { doubleSided: true } : {},