@flighthq/materials 0.3.0-next.906.07cea63 → 0.3.1-next.209.43ef1bc

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 (68) hide show
  1. package/dist/anisotropyPbrExtension.d.ts +4 -0
  2. package/dist/anisotropyPbrExtension.d.ts.map +1 -0
  3. package/dist/anisotropyPbrExtension.js +19 -0
  4. package/dist/anisotropyPbrExtension.js.map +1 -0
  5. package/dist/clearcoatPbrExtension.d.ts +4 -0
  6. package/dist/clearcoatPbrExtension.d.ts.map +1 -0
  7. package/dist/clearcoatPbrExtension.js +28 -0
  8. package/dist/clearcoatPbrExtension.js.map +1 -0
  9. package/dist/contract.d.ts +9 -1
  10. package/dist/contract.d.ts.map +1 -1
  11. package/dist/contract.js +9 -1
  12. package/dist/contract.js.map +1 -1
  13. package/dist/extendedPbrMaterial.d.ts +3 -0
  14. package/dist/extendedPbrMaterial.d.ts.map +1 -0
  15. package/dist/extendedPbrMaterial.js +12 -0
  16. package/dist/extendedPbrMaterial.js.map +1 -0
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/iridescencePbrExtension.d.ts +4 -0
  22. package/dist/iridescencePbrExtension.d.ts.map +1 -0
  23. package/dist/iridescencePbrExtension.js +27 -0
  24. package/dist/iridescencePbrExtension.js.map +1 -0
  25. package/dist/materialPresets.d.ts +2 -2
  26. package/dist/materialPresets.d.ts.map +1 -1
  27. package/dist/materialPresets.js +22 -10
  28. package/dist/materialPresets.js.map +1 -1
  29. package/dist/pbrExtension.d.ts +3 -0
  30. package/dist/pbrExtension.d.ts.map +1 -0
  31. package/dist/pbrExtension.js +5 -0
  32. package/dist/pbrExtension.js.map +1 -0
  33. package/dist/sheenPbrExtension.d.ts +4 -0
  34. package/dist/sheenPbrExtension.d.ts.map +1 -0
  35. package/dist/sheenPbrExtension.js +21 -0
  36. package/dist/sheenPbrExtension.js.map +1 -0
  37. package/dist/specularPbrExtension.d.ts +4 -0
  38. package/dist/specularPbrExtension.d.ts.map +1 -0
  39. package/dist/specularPbrExtension.js +21 -0
  40. package/dist/specularPbrExtension.js.map +1 -0
  41. package/dist/surfaceMaterial.d.ts.map +1 -1
  42. package/dist/surfaceMaterial.js +1 -3
  43. package/dist/surfaceMaterial.js.map +1 -1
  44. package/dist/transmissionVolumePbrExtension.d.ts +4 -0
  45. package/dist/transmissionVolumePbrExtension.d.ts.map +1 -0
  46. package/dist/transmissionVolumePbrExtension.js +30 -0
  47. package/dist/transmissionVolumePbrExtension.js.map +1 -0
  48. package/dist/wrappedDiffusePbrExtension.d.ts +4 -0
  49. package/dist/wrappedDiffusePbrExtension.d.ts.map +1 -0
  50. package/dist/wrappedDiffusePbrExtension.js +24 -0
  51. package/dist/wrappedDiffusePbrExtension.js.map +1 -0
  52. package/package.json +6 -4
  53. package/src/anisotropyPbrExtension.test.ts +23 -0
  54. package/src/clearcoatPbrExtension.test.ts +24 -0
  55. package/src/extendedPbrMaterial.test.ts +32 -0
  56. package/src/iridescencePbrExtension.test.ts +30 -0
  57. package/src/materialPresets.test.ts +27 -11
  58. package/src/pbrExtension.test.ts +10 -0
  59. package/src/sheenPbrExtension.test.ts +23 -0
  60. package/src/specularPbrExtension.test.ts +23 -0
  61. package/src/surfaceMaterial.test.ts +0 -1
  62. package/src/transmissionVolumePbrExtension.test.ts +31 -0
  63. package/src/wrappedDiffusePbrExtension.test.ts +27 -0
  64. package/dist/pbrExtensionMaterials.d.ts +0 -9
  65. package/dist/pbrExtensionMaterials.d.ts.map +0 -1
  66. package/dist/pbrExtensionMaterials.js +0 -93
  67. package/dist/pbrExtensionMaterials.js.map +0 -1
  68. package/src/pbrExtensionMaterials.test.ts +0 -123
@@ -0,0 +1,4 @@
1
+ import type { AnisotropyPbrExtension } from '@flighthq/types/contract';
2
+ export declare function createAnisotropyPbrExtension(opts?: Readonly<Partial<AnisotropyPbrExtension>>): AnisotropyPbrExtension;
3
+ export declare function isValidAnisotropyPbrExtension(value: Readonly<AnisotropyPbrExtension>): boolean;
4
+ //# sourceMappingURL=anisotropyPbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anisotropyPbrExtension.d.ts","sourceRoot":"","sources":["../src/anisotropyPbrExtension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMvE,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,sBAAsB,CAQrH;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAM9F"}
@@ -0,0 +1,19 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { AnisotropyPbrExtensionKind } from '@flighthq/types/contract';
3
+ import { isValidMaterialWeight } from './materialValidation';
4
+ import { isValidPbrUvSet } from './pbrExtension';
5
+ export function createAnisotropyPbrExtension(opts) {
6
+ return createEntity({
7
+ anisotropyMap: opts?.anisotropyMap ?? null,
8
+ anisotropyMapUvSet: opts?.anisotropyMapUvSet ?? 0,
9
+ anisotropyRotation: opts?.anisotropyRotation ?? 0,
10
+ anisotropyStrength: opts?.anisotropyStrength ?? 0,
11
+ kind: AnisotropyPbrExtensionKind,
12
+ });
13
+ }
14
+ export function isValidAnisotropyPbrExtension(value) {
15
+ return (isValidMaterialWeight(value.anisotropyStrength) &&
16
+ Number.isFinite(value.anisotropyRotation) &&
17
+ isValidPbrUvSet(value.anisotropyMapUvSet));
18
+ }
19
+ //# sourceMappingURL=anisotropyPbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anisotropyPbrExtension.js","sourceRoot":"","sources":["../src/anisotropyPbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,4BAA4B,CAAC,IAAgD;IAC3F,OAAO,YAAY,CAAC;QAClB,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,IAAI;QAC1C,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,CAAC;QACjD,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,CAAC;QACjD,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,CAAC;QACjD,IAAI,EAAE,0BAA0B;KACjC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAuC;IACnF,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACzC,eAAe,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ClearcoatPbrExtension } from '@flighthq/types/contract';
2
+ export declare function createClearcoatPbrExtension(opts?: Readonly<Partial<ClearcoatPbrExtension>>): ClearcoatPbrExtension;
3
+ export declare function isValidClearcoatPbrExtension(value: Readonly<ClearcoatPbrExtension>): boolean;
4
+ //# sourceMappingURL=clearcoatPbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearcoatPbrExtension.d.ts","sourceRoot":"","sources":["../src/clearcoatPbrExtension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAMtE,wBAAgB,2BAA2B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,CAalH;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAU5F"}
@@ -0,0 +1,28 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { ClearcoatPbrExtensionKind } from '@flighthq/types/contract';
3
+ import { isValidMaterialWeight } from './materialValidation';
4
+ import { isValidPbrUvSet } from './pbrExtension';
5
+ export function createClearcoatPbrExtension(opts) {
6
+ return createEntity({
7
+ clearcoat: opts?.clearcoat ?? 0,
8
+ clearcoatMap: opts?.clearcoatMap ?? null,
9
+ clearcoatMapUvSet: opts?.clearcoatMapUvSet ?? 0,
10
+ clearcoatNormalMap: opts?.clearcoatNormalMap ?? null,
11
+ clearcoatNormalMapUvSet: opts?.clearcoatNormalMapUvSet ?? 0,
12
+ clearcoatNormalScale: opts?.clearcoatNormalScale ?? 1,
13
+ clearcoatRoughness: opts?.clearcoatRoughness ?? 0,
14
+ clearcoatRoughnessMap: opts?.clearcoatRoughnessMap ?? null,
15
+ clearcoatRoughnessMapUvSet: opts?.clearcoatRoughnessMapUvSet ?? 0,
16
+ kind: ClearcoatPbrExtensionKind,
17
+ });
18
+ }
19
+ export function isValidClearcoatPbrExtension(value) {
20
+ return (isValidMaterialWeight(value.clearcoat) &&
21
+ isValidMaterialWeight(value.clearcoatRoughness) &&
22
+ Number.isFinite(value.clearcoatNormalScale) &&
23
+ value.clearcoatNormalScale >= 0 &&
24
+ isValidPbrUvSet(value.clearcoatMapUvSet) &&
25
+ isValidPbrUvSet(value.clearcoatNormalMapUvSet) &&
26
+ isValidPbrUvSet(value.clearcoatRoughnessMapUvSet));
27
+ }
28
+ //# sourceMappingURL=clearcoatPbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearcoatPbrExtension.js","sourceRoot":"","sources":["../src/clearcoatPbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,2BAA2B,CAAC,IAA+C;IACzF,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC;QAC/B,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI;QACxC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC;QAC/C,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,IAAI;QACpD,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,IAAI,CAAC;QAC3D,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,IAAI,CAAC;QACrD,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,CAAC;QACjD,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,IAAI,IAAI;QAC1D,0BAA0B,EAAE,IAAI,EAAE,0BAA0B,IAAI,CAAC;QACjE,IAAI,EAAE,yBAAyB;KAChC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAsC;IACjF,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QACtC,qBAAqB,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAC3C,KAAK,CAAC,oBAAoB,IAAI,CAAC;QAC/B,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACxC,eAAe,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAC9C,eAAe,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAClD,CAAC;AACJ,CAAC"}
@@ -1,13 +1,21 @@
1
+ export * from './anisotropyPbrExtension';
1
2
  export * from './classicMaterials';
3
+ export * from './clearcoatPbrExtension';
2
4
  export * from './colorScaleBias';
3
5
  export * from './customShaderMaterial';
6
+ export * from './extendedPbrMaterial';
7
+ export * from './iridescencePbrExtension';
4
8
  export * from './material';
5
9
  export * from './materialPresets';
6
10
  export * from './materialValidation';
7
- export * from './pbrExtensionMaterials';
11
+ export * from './pbrExtension';
8
12
  export * from './pbrMaterials';
9
13
  export * from './phongToPbr';
14
+ export * from './sheenPbrExtension';
15
+ export * from './specularPbrExtension';
10
16
  export * from './surfaceMaterial';
11
17
  export * from './standardMaterial';
18
+ export * from './transmissionVolumePbrExtension';
12
19
  export * from './unlitMaterials';
20
+ export * from './wrappedDiffusePbrExtension';
13
21
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC"}
package/dist/contract.js CHANGED
@@ -1,13 +1,21 @@
1
+ export * from './anisotropyPbrExtension';
1
2
  export * from './classicMaterials';
3
+ export * from './clearcoatPbrExtension';
2
4
  export * from './colorScaleBias';
3
5
  export * from './customShaderMaterial';
6
+ export * from './extendedPbrMaterial';
7
+ export * from './iridescencePbrExtension';
4
8
  export * from './material';
5
9
  export * from './materialPresets';
6
10
  export * from './materialValidation';
7
- export * from './pbrExtensionMaterials';
11
+ export * from './pbrExtension';
8
12
  export * from './pbrMaterials';
9
13
  export * from './phongToPbr';
14
+ export * from './sheenPbrExtension';
15
+ export * from './specularPbrExtension';
10
16
  export * from './surfaceMaterial';
11
17
  export * from './standardMaterial';
18
+ export * from './transmissionVolumePbrExtension';
12
19
  export * from './unlitMaterials';
20
+ export * from './wrappedDiffusePbrExtension';
13
21
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExtendedPbrMaterial } from '@flighthq/types/contract';
2
+ export declare function createExtendedPbrMaterial(opts?: Readonly<Partial<ExtendedPbrMaterial>>): ExtendedPbrMaterial;
3
+ //# sourceMappingURL=extendedPbrMaterial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extendedPbrMaterial.d.ts","sourceRoot":"","sources":["../src/extendedPbrMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAQpE,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAK5G"}
@@ -0,0 +1,12 @@
1
+ import { ExtendedPbrMaterialKind } from '@flighthq/types/contract';
2
+ import { createStandardPbrMaterialProperties } from './pbrMaterials';
3
+ import { createSurfaceMaterial } from './surfaceMaterial';
4
+ // Builds the composable PBR material lane. The ordered extension list is retained by reference so its
5
+ // identity and ordering remain an explicit batching/program-selection fact.
6
+ export function createExtendedPbrMaterial(opts) {
7
+ const material = createSurfaceMaterial(ExtendedPbrMaterialKind, opts);
8
+ material.extensions = opts?.extensions ?? [];
9
+ material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
10
+ return material;
11
+ }
12
+ //# sourceMappingURL=extendedPbrMaterial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extendedPbrMaterial.js","sourceRoot":"","sources":["../src/extendedPbrMaterial.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,sGAAsG;AACtG,4EAA4E;AAC5E,MAAM,UAAU,yBAAyB,CAAC,IAA6C;IACrF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,uBAAuB,EAAE,IAAI,CAAwB,CAAC;IAC7F,QAAQ,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,mCAAmC,EAAE,CAAC;IAC5E,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { clampStandardPbrMaterialProperties, cloneColorScaleBias, cloneMaterial, concatColorScaleBias, convertPhongToStandardPbrMaterial, convertSpecularGlossinessToStandardPbr, copyColorScaleBias, copyColorScaleBiasToArrays, copyMaterial, createAluminumStandardPbrMaterial, createAnisotropyPbrMaterial, createBlinnPhongMaterial, createCarbonStandardPbrMaterial, createClearcoatPbrMaterial, createColorScaleBias, createCustomShaderMaterial, createDepthMaterial, createEmissiveMaterial, createGlassTransmissionVolumePbrMaterial, createGoldStandardPbrMaterial, createIridescencePbrMaterial, createIronStandardPbrMaterial, createLambertMaterial, createMarbleStandardPbrMaterial, createMatcapMaterial, createMaterial, createNormalMaterial, createPhongMaterial, createPlasticStandardPbrMaterial, createRubberStandardPbrMaterial, createSheenPbrMaterial, createSilverStandardPbrMaterial, createSkinStandardPbrMaterial, createSpecularGlossinessPbrMaterial, createSpecularPbrMaterial, createStandardMaterial, createStandardPbrMaterial, createStandardPbrMaterialProperties, createSubsurfacePbrMaterial, createSurfaceMaterial, createToonMaterial, createTransmissionVolumePbrMaterial, createUnlitMaterial, createVertexColorMaterial, createWireframeMaterial, createWoodStandardPbrMaterial, equalsColorScaleBias, equalsColorScaleBiasBiases, equalsColorScaleBiasScales, equalsMaterial, getColorScaleBiasBiasRgb, getColorScaleBiasBiasRgba, getMaterialOfKind, getPbrMetallicFromPhongSpecular, getPbrRoughnessFromPhongShininess, getPhongToPbrLightExposure, getSurfaceMaterialAlphaMode, invertColorScaleBias, isIdentityColorScaleBias, isSurfaceMaterialBlended, isSurfaceMaterialMasked, isSurfaceMaterialOpaque, isValidMaterialClearcoat, isValidMaterialIor, isValidMaterialIridescenceThickness, isValidMaterialWeight, setColorScaleBias, setColorScaleBiasBiasRgb, setColorScaleBiasBiasRgba, setColorScaleBiasIdentity, } from './contract';
1
+ export { clampStandardPbrMaterialProperties, cloneColorScaleBias, cloneMaterial, concatColorScaleBias, convertPhongToStandardPbrMaterial, convertSpecularGlossinessToStandardPbr, copyColorScaleBias, copyColorScaleBiasToArrays, copyMaterial, createAluminumStandardPbrMaterial, createAnisotropyPbrExtension, createBlinnPhongMaterial, createCarbonStandardPbrMaterial, createClearcoatPbrExtension, createColorScaleBias, createCustomShaderMaterial, createDepthMaterial, createEmissiveMaterial, createExtendedPbrMaterial, createGlassExtendedPbrMaterial, createGoldStandardPbrMaterial, createIridescencePbrExtension, createIronStandardPbrMaterial, createLambertMaterial, createMarbleStandardPbrMaterial, createMatcapMaterial, createMaterial, createNormalMaterial, createPhongMaterial, createPlasticStandardPbrMaterial, createRubberStandardPbrMaterial, createSheenPbrExtension, createSilverStandardPbrMaterial, createSkinStandardPbrMaterial, createSpecularPbrExtension, createSpecularGlossinessPbrMaterial, createStandardMaterial, createStandardPbrMaterial, createStandardPbrMaterialProperties, createSurfaceMaterial, createToonMaterial, createTransmissionVolumePbrExtension, createUnlitMaterial, createVertexColorMaterial, createWireframeMaterial, createWoodStandardPbrMaterial, createWrappedDiffusePbrExtension, equalsColorScaleBias, equalsColorScaleBiasBiases, equalsColorScaleBiasScales, equalsMaterial, getColorScaleBiasBiasRgb, getColorScaleBiasBiasRgba, getMaterialOfKind, getPbrMetallicFromPhongSpecular, getPbrRoughnessFromPhongShininess, getPhongToPbrLightExposure, getSurfaceMaterialAlphaMode, invertColorScaleBias, isIdentityColorScaleBias, isSurfaceMaterialBlended, isSurfaceMaterialMasked, isSurfaceMaterialOpaque, isValidAnisotropyPbrExtension, isValidClearcoatPbrExtension, isValidIridescencePbrExtension, isValidMaterialClearcoat, isValidMaterialIor, isValidMaterialIridescenceThickness, isValidMaterialWeight, isValidPbrUvSet, isValidSheenPbrExtension, isValidSpecularPbrExtension, isValidTransmissionVolumePbrExtension, isValidWrappedDiffusePbrExtension, setColorScaleBias, setColorScaleBiasBiasRgb, setColorScaleBiasBiasRgba, setColorScaleBiasIdentity, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,iCAAiC,EACjC,sCAAsC,EACtC,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,iCAAiC,EACjC,2BAA2B,EAC3B,wBAAwB,EACxB,+BAA+B,EAC/B,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,wCAAwC,EACxC,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,qBAAqB,EACrB,+BAA+B,EAC/B,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,gCAAgC,EAChC,+BAA+B,EAC/B,sBAAsB,EACtB,+BAA+B,EAC/B,6BAA6B,EAC7B,mCAAmC,EACnC,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,mCAAmC,EACnC,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,mCAAmC,EACnC,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,+BAA+B,EAC/B,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,mCAAmC,EACnC,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,iCAAiC,EACjC,sCAAsC,EACtC,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,EAC3B,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,6BAA6B,EAC7B,qBAAqB,EACrB,+BAA+B,EAC/B,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,gCAAgC,EAChC,+BAA+B,EAC/B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,0BAA0B,EAC1B,mCAAmC,EACnC,sBAAsB,EACtB,yBAAyB,EACzB,mCAAmC,EACnC,qBAAqB,EACrB,kBAAkB,EAClB,oCAAoC,EACpC,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,+BAA+B,EAC/B,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,kBAAkB,EAClB,mCAAmC,EACnC,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,qCAAqC,EACrC,iCAAiC,EACjC,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { clampStandardPbrMaterialProperties, cloneColorScaleBias, cloneMaterial, concatColorScaleBias, convertPhongToStandardPbrMaterial, convertSpecularGlossinessToStandardPbr, copyColorScaleBias, copyColorScaleBiasToArrays, copyMaterial, createAluminumStandardPbrMaterial, createAnisotropyPbrMaterial, createBlinnPhongMaterial, createCarbonStandardPbrMaterial, createClearcoatPbrMaterial, createColorScaleBias, createCustomShaderMaterial, createDepthMaterial, createEmissiveMaterial, createGlassTransmissionVolumePbrMaterial, createGoldStandardPbrMaterial, createIridescencePbrMaterial, createIronStandardPbrMaterial, createLambertMaterial, createMarbleStandardPbrMaterial, createMatcapMaterial, createMaterial, createNormalMaterial, createPhongMaterial, createPlasticStandardPbrMaterial, createRubberStandardPbrMaterial, createSheenPbrMaterial, createSilverStandardPbrMaterial, createSkinStandardPbrMaterial, createSpecularGlossinessPbrMaterial, createSpecularPbrMaterial, createStandardMaterial, createStandardPbrMaterial, createStandardPbrMaterialProperties, createSubsurfacePbrMaterial, createSurfaceMaterial, createToonMaterial, createTransmissionVolumePbrMaterial, createUnlitMaterial, createVertexColorMaterial, createWireframeMaterial, createWoodStandardPbrMaterial, equalsColorScaleBias, equalsColorScaleBiasBiases, equalsColorScaleBiasScales, equalsMaterial, getColorScaleBiasBiasRgb, getColorScaleBiasBiasRgba, getMaterialOfKind, getPbrMetallicFromPhongSpecular, getPbrRoughnessFromPhongShininess, getPhongToPbrLightExposure, getSurfaceMaterialAlphaMode, invertColorScaleBias, isIdentityColorScaleBias, isSurfaceMaterialBlended, isSurfaceMaterialMasked, isSurfaceMaterialOpaque, isValidMaterialClearcoat, isValidMaterialIor, isValidMaterialIridescenceThickness, isValidMaterialWeight, setColorScaleBias, setColorScaleBiasBiasRgb, setColorScaleBiasBiasRgba, setColorScaleBiasIdentity, } from './contract';
1
+ export { clampStandardPbrMaterialProperties, cloneColorScaleBias, cloneMaterial, concatColorScaleBias, convertPhongToStandardPbrMaterial, convertSpecularGlossinessToStandardPbr, copyColorScaleBias, copyColorScaleBiasToArrays, copyMaterial, createAluminumStandardPbrMaterial, createAnisotropyPbrExtension, createBlinnPhongMaterial, createCarbonStandardPbrMaterial, createClearcoatPbrExtension, createColorScaleBias, createCustomShaderMaterial, createDepthMaterial, createEmissiveMaterial, createExtendedPbrMaterial, createGlassExtendedPbrMaterial, createGoldStandardPbrMaterial, createIridescencePbrExtension, createIronStandardPbrMaterial, createLambertMaterial, createMarbleStandardPbrMaterial, createMatcapMaterial, createMaterial, createNormalMaterial, createPhongMaterial, createPlasticStandardPbrMaterial, createRubberStandardPbrMaterial, createSheenPbrExtension, createSilverStandardPbrMaterial, createSkinStandardPbrMaterial, createSpecularPbrExtension, createSpecularGlossinessPbrMaterial, createStandardMaterial, createStandardPbrMaterial, createStandardPbrMaterialProperties, createSurfaceMaterial, createToonMaterial, createTransmissionVolumePbrExtension, createUnlitMaterial, createVertexColorMaterial, createWireframeMaterial, createWoodStandardPbrMaterial, createWrappedDiffusePbrExtension, equalsColorScaleBias, equalsColorScaleBiasBiases, equalsColorScaleBiasScales, equalsMaterial, getColorScaleBiasBiasRgb, getColorScaleBiasBiasRgba, getMaterialOfKind, getPbrMetallicFromPhongSpecular, getPbrRoughnessFromPhongShininess, getPhongToPbrLightExposure, getSurfaceMaterialAlphaMode, invertColorScaleBias, isIdentityColorScaleBias, isSurfaceMaterialBlended, isSurfaceMaterialMasked, isSurfaceMaterialOpaque, isValidAnisotropyPbrExtension, isValidClearcoatPbrExtension, isValidIridescencePbrExtension, isValidMaterialClearcoat, isValidMaterialIor, isValidMaterialIridescenceThickness, isValidMaterialWeight, isValidPbrUvSet, isValidSheenPbrExtension, isValidSpecularPbrExtension, isValidTransmissionVolumePbrExtension, isValidWrappedDiffusePbrExtension, setColorScaleBias, setColorScaleBiasBiasRgb, setColorScaleBiasBiasRgba, setColorScaleBiasIdentity, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,iCAAiC,EACjC,sCAAsC,EACtC,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,iCAAiC,EACjC,2BAA2B,EAC3B,wBAAwB,EACxB,+BAA+B,EAC/B,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,wCAAwC,EACxC,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,qBAAqB,EACrB,+BAA+B,EAC/B,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,gCAAgC,EAChC,+BAA+B,EAC/B,sBAAsB,EACtB,+BAA+B,EAC/B,6BAA6B,EAC7B,mCAAmC,EACnC,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,mCAAmC,EACnC,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,mCAAmC,EACnC,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,+BAA+B,EAC/B,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,mCAAmC,EACnC,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,iCAAiC,EACjC,sCAAsC,EACtC,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,EAC3B,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,6BAA6B,EAC7B,qBAAqB,EACrB,+BAA+B,EAC/B,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,gCAAgC,EAChC,+BAA+B,EAC/B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,0BAA0B,EAC1B,mCAAmC,EACnC,sBAAsB,EACtB,yBAAyB,EACzB,mCAAmC,EACnC,qBAAqB,EACrB,kBAAkB,EAClB,oCAAoC,EACpC,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAC7B,gCAAgC,EAChC,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,+BAA+B,EAC/B,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,kBAAkB,EAClB,mCAAmC,EACnC,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,qCAAqC,EACrC,iCAAiC,EACjC,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { IridescencePbrExtension } from '@flighthq/types/contract';
2
+ export declare function createIridescencePbrExtension(opts?: Readonly<Partial<IridescencePbrExtension>>): IridescencePbrExtension;
3
+ export declare function isValidIridescencePbrExtension(value: Readonly<IridescencePbrExtension>): boolean;
4
+ //# sourceMappingURL=iridescencePbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iridescencePbrExtension.d.ts","sourceRoot":"","sources":["../src/iridescencePbrExtension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAMxE,wBAAgB,6BAA6B,CAC3C,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,GAChD,uBAAuB,CAYzB;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAUhG"}
@@ -0,0 +1,27 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { IridescencePbrExtensionKind } from '@flighthq/types/contract';
3
+ import { isValidMaterialIor, isValidMaterialIridescenceThickness, isValidMaterialWeight } from './materialValidation';
4
+ import { isValidPbrUvSet } from './pbrExtension';
5
+ export function createIridescencePbrExtension(opts) {
6
+ return createEntity({
7
+ iridescence: opts?.iridescence ?? 0,
8
+ iridescenceIor: opts?.iridescenceIor ?? 1.3,
9
+ iridescenceMap: opts?.iridescenceMap ?? null,
10
+ iridescenceMapUvSet: opts?.iridescenceMapUvSet ?? 0,
11
+ iridescenceThicknessMap: opts?.iridescenceThicknessMap ?? null,
12
+ iridescenceThicknessMapUvSet: opts?.iridescenceThicknessMapUvSet ?? 0,
13
+ iridescenceThicknessMax: opts?.iridescenceThicknessMax ?? 400,
14
+ iridescenceThicknessMin: opts?.iridescenceThicknessMin ?? 100,
15
+ kind: IridescencePbrExtensionKind,
16
+ });
17
+ }
18
+ export function isValidIridescencePbrExtension(value) {
19
+ return (isValidMaterialWeight(value.iridescence) &&
20
+ isValidMaterialIor(value.iridescenceIor) &&
21
+ isValidMaterialIridescenceThickness(value.iridescenceThicknessMin) &&
22
+ isValidMaterialIridescenceThickness(value.iridescenceThicknessMax) &&
23
+ value.iridescenceThicknessMin <= value.iridescenceThicknessMax &&
24
+ isValidPbrUvSet(value.iridescenceMapUvSet) &&
25
+ isValidPbrUvSet(value.iridescenceThicknessMapUvSet));
26
+ }
27
+ //# sourceMappingURL=iridescencePbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iridescencePbrExtension.js","sourceRoot":"","sources":["../src/iridescencePbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,mCAAmC,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,6BAA6B,CAC3C,IAAiD;IAEjD,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,CAAC;QACnC,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI,GAAG;QAC3C,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI,IAAI;QAC5C,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,IAAI,CAAC;QACnD,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,IAAI,IAAI;QAC9D,4BAA4B,EAAE,IAAI,EAAE,4BAA4B,IAAI,CAAC;QACrE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,IAAI,GAAG;QAC7D,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,IAAI,GAAG;QAC7D,IAAI,EAAE,2BAA2B;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAwC;IACrF,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC;QACxC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC;QACxC,mCAAmC,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAClE,mCAAmC,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAClE,KAAK,CAAC,uBAAuB,IAAI,KAAK,CAAC,uBAAuB;QAC9D,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAC1C,eAAe,CAAC,KAAK,CAAC,4BAA4B,CAAC,CACpD,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
- import type { StandardPbrMaterial, TransmissionVolumePbrMaterial } from '@flighthq/types/contract';
1
+ import type { ExtendedPbrMaterial, GlassExtendedPbrMaterialOptions, StandardPbrMaterial } from '@flighthq/types/contract';
2
2
  export declare function createAluminumStandardPbrMaterial(opts?: Readonly<Partial<StandardPbrMaterial>>): StandardPbrMaterial;
3
3
  export declare function createCarbonStandardPbrMaterial(opts?: Readonly<Partial<StandardPbrMaterial>>): StandardPbrMaterial;
4
- export declare function createGlassTransmissionVolumePbrMaterial(opts?: Readonly<Partial<TransmissionVolumePbrMaterial>>): TransmissionVolumePbrMaterial;
4
+ export declare function createGlassExtendedPbrMaterial(opts?: Readonly<GlassExtendedPbrMaterialOptions>): ExtendedPbrMaterial;
5
5
  export declare function createGoldStandardPbrMaterial(opts?: Readonly<Partial<StandardPbrMaterial>>): StandardPbrMaterial;
6
6
  export declare function createIronStandardPbrMaterial(opts?: Readonly<Partial<StandardPbrMaterial>>): StandardPbrMaterial;
7
7
  export declare function createMarbleStandardPbrMaterial(opts?: Readonly<Partial<StandardPbrMaterial>>): StandardPbrMaterial;
@@ -1 +1 @@
1
- {"version":3,"file":"materialPresets.d.ts","sourceRoot":"","sources":["../src/materialPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAcnG,wBAAgB,iCAAiC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOpH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,wCAAwC,CACtD,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GACtD,6BAA6B,CAM/B;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,gCAAgC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOnH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH"}
1
+ {"version":3,"file":"materialPresets.d.ts","sourceRoot":"","sources":["../src/materialPresets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAelC,wBAAgB,iCAAiC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOpH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,8BAA8B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,+BAA+B,CAAC,GAAG,mBAAmB,CAiBpH;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,gCAAgC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOnH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOlH;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH;AAID,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAOhH"}
@@ -1,8 +1,9 @@
1
- import { createTransmissionVolumePbrMaterial } from './pbrExtensionMaterials';
2
- import { createStandardPbrMaterial } from './pbrMaterials';
1
+ import { createExtendedPbrMaterial } from './extendedPbrMaterial';
2
+ import { createStandardPbrMaterial, createStandardPbrMaterialProperties } from './pbrMaterials';
3
+ import { createTransmissionVolumePbrExtension } from './transmissionVolumePbrExtension';
3
4
  // Named presets for common real-world materials using glTF metallic-roughness PBR values.
4
- // These are thin wrappers over `createStandardPbrMaterial` / `createTransmissionVolumePbrMaterial`
5
- // with canonical default parameters. Each function is individually tree-shakable.
5
+ // These are thin assemblies of standard property blocks, surface materials, and extension
6
+ // descriptors with canonical default parameters. Each function is individually tree-shakable.
6
7
  //
7
8
  // IOR and specular-tint values follow the glTF PBR extensions specification and standard
8
9
  // material-science references (BRDF Explorer, Substance Painter's material presets, etc.).
@@ -26,13 +27,24 @@ export function createCarbonStandardPbrMaterial(opts) {
26
27
  ...opts,
27
28
  });
28
29
  }
29
- // Clear glass preset (use with TransmissionVolumePbrMaterial for transmission).
30
- // Metallic: 0 · roughness: 0.0 · IOR: 1.5 · transmission: 1 · baseColor: white.
31
- export function createGlassTransmissionVolumePbrMaterial(opts) {
32
- return createTransmissionVolumePbrMaterial({
33
- ior: 1.5,
34
- transmission: 1,
30
+ // Clear glass preset composed from a standard metallic-roughness property block and a transmission
31
+ // volume descriptor. Metallic: 0 · roughness: 0 · IOR: 1.5 · transmission: 1 · baseColor: white.
32
+ export function createGlassExtendedPbrMaterial(opts) {
33
+ return createExtendedPbrMaterial({
35
34
  ...opts,
35
+ extensions: [
36
+ createTransmissionVolumePbrExtension({
37
+ ior: 1.5,
38
+ transmission: 1,
39
+ ...opts?.transmissionVolume,
40
+ }),
41
+ ],
42
+ standard: createStandardPbrMaterialProperties({
43
+ baseColor: 0xffffffff,
44
+ metallic: 0,
45
+ roughness: 0,
46
+ ...opts?.standard,
47
+ }),
36
48
  });
37
49
  }
38
50
  // Gold: fully metallic, moderate roughness, warm saturated base color.
@@ -1 +1 @@
1
- {"version":3,"file":"materialPresets.js","sourceRoot":"","sources":["../src/materialPresets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"materialPresets.js","sourceRoot":"","sources":["../src/materialPresets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PbrUvSet } from '@flighthq/types/contract';
2
+ export declare function isValidPbrUvSet(value: number): value is PbrUvSet;
3
+ //# sourceMappingURL=pbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbrExtension.d.ts","sourceRoot":"","sources":["../src/pbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAEhE"}
@@ -0,0 +1,5 @@
1
+ // True when a texture input selects one of the UV channels in the canonical mesh layout.
2
+ export function isValidPbrUvSet(value) {
3
+ return value === 0 || value === 1;
4
+ }
5
+ //# sourceMappingURL=pbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbrExtension.js","sourceRoot":"","sources":["../src/pbrExtension.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { SheenPbrExtension } from '@flighthq/types/contract';
2
+ export declare function createSheenPbrExtension(opts?: Readonly<Partial<SheenPbrExtension>>): SheenPbrExtension;
3
+ export declare function isValidSheenPbrExtension(value: Readonly<SheenPbrExtension>): boolean;
4
+ //# sourceMappingURL=sheenPbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheenPbrExtension.d.ts","sourceRoot":"","sources":["../src/sheenPbrExtension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAUtG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAMpF"}
@@ -0,0 +1,21 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { SheenPbrExtensionKind } from '@flighthq/types/contract';
3
+ import { isValidMaterialWeight } from './materialValidation';
4
+ import { isValidPbrUvSet } from './pbrExtension';
5
+ export function createSheenPbrExtension(opts) {
6
+ return createEntity({
7
+ kind: SheenPbrExtensionKind,
8
+ sheenColor: opts?.sheenColor ?? 0x000000ff,
9
+ sheenColorMap: opts?.sheenColorMap ?? null,
10
+ sheenColorMapUvSet: opts?.sheenColorMapUvSet ?? 0,
11
+ sheenRoughness: opts?.sheenRoughness ?? 0,
12
+ sheenRoughnessMap: opts?.sheenRoughnessMap ?? null,
13
+ sheenRoughnessMapUvSet: opts?.sheenRoughnessMapUvSet ?? 0,
14
+ });
15
+ }
16
+ export function isValidSheenPbrExtension(value) {
17
+ return (isValidMaterialWeight(value.sheenRoughness) &&
18
+ isValidPbrUvSet(value.sheenColorMapUvSet) &&
19
+ isValidPbrUvSet(value.sheenRoughnessMapUvSet));
20
+ }
21
+ //# sourceMappingURL=sheenPbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheenPbrExtension.js","sourceRoot":"","sources":["../src/sheenPbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,uBAAuB,CAAC,IAA2C;IACjF,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,UAAU;QAC1C,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,IAAI;QAC1C,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,CAAC;QACjD,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI,CAAC;QACzC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,IAAI;QAClD,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,IAAI,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAkC;IACzE,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC,cAAc,CAAC;QAC3C,eAAe,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACzC,eAAe,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { SpecularPbrExtension } from '@flighthq/types/contract';
2
+ export declare function createSpecularPbrExtension(opts?: Readonly<Partial<SpecularPbrExtension>>): SpecularPbrExtension;
3
+ export declare function isValidSpecularPbrExtension(value: Readonly<SpecularPbrExtension>): boolean;
4
+ //# sourceMappingURL=specularPbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specularPbrExtension.d.ts","sourceRoot":"","sources":["../src/specularPbrExtension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAMrE,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAU/G;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAM1F"}
@@ -0,0 +1,21 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { SpecularPbrExtensionKind } from '@flighthq/types/contract';
3
+ import { isValidMaterialWeight } from './materialValidation';
4
+ import { isValidPbrUvSet } from './pbrExtension';
5
+ export function createSpecularPbrExtension(opts) {
6
+ return createEntity({
7
+ kind: SpecularPbrExtensionKind,
8
+ specular: opts?.specular ?? 1,
9
+ specularColor: opts?.specularColor ?? 0xffffffff,
10
+ specularColorMap: opts?.specularColorMap ?? null,
11
+ specularColorMapUvSet: opts?.specularColorMapUvSet ?? 0,
12
+ specularMap: opts?.specularMap ?? null,
13
+ specularMapUvSet: opts?.specularMapUvSet ?? 0,
14
+ });
15
+ }
16
+ export function isValidSpecularPbrExtension(value) {
17
+ return (isValidMaterialWeight(value.specular) &&
18
+ isValidPbrUvSet(value.specularColorMapUvSet) &&
19
+ isValidPbrUvSet(value.specularMapUvSet));
20
+ }
21
+ //# sourceMappingURL=specularPbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specularPbrExtension.js","sourceRoot":"","sources":["../src/specularPbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,0BAA0B,CAAC,IAA8C;IACvF,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC;QAC7B,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,UAAU;QAChD,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,IAAI;QAChD,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,IAAI,CAAC;QACvD,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;QACtC,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAqC;IAC/E,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrC,eAAe,CAAC,KAAK,CAAC,qBAAqB,CAAC;QAC5C,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,CACxC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"surfaceMaterial.d.ts","sourceRoot":"","sources":["../src/surfaceMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EACJ,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAWlC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,eAAe,CAQ1G;AAKD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAEhG;AAID,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAEnF;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAElF;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAElF"}
1
+ {"version":3,"file":"surfaceMaterial.d.ts","sourceRoot":"","sources":["../src/surfaceMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAWjH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,eAAe,CAO1G;AAKD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAEhG;AAID,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAEnF;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAElF;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAElF"}
@@ -4,13 +4,12 @@ import { createMaterial } from './material';
4
4
  // `opts` or falling back to its default: opaque, single-sided, straight alpha, Normal blend, a 0.5
5
5
  // mask cutoff. Every 3D material constructor starts from this and adds its own maps and scalars;
6
6
  // forwarding `opts` here is what lets any constructor set `alphaMode`/`alphaCutoff`/`doubleSided`/
7
- // `blendMode`/`alphaType` (e.g. `alphaMode: 'mask'` for an alpha-mapped cutout). The result is a
7
+ // `blendMode` (e.g. `alphaMode: 'mask'` for an alpha-mapped cutout). The result is a
8
8
  // plain entity; callers mutate the returned object to set their own fields before returning it.
9
9
  export function createSurfaceMaterial(kind, opts) {
10
10
  const material = createMaterial(kind);
11
11
  material.alphaCutoff = opts?.alphaCutoff ?? DEFAULT_ALPHA_CUTOFF;
12
12
  material.alphaMode = opts?.alphaMode ?? DEFAULT_ALPHA_MODE;
13
- material.alphaType = opts?.alphaType ?? DEFAULT_ALPHA_TYPE;
14
13
  material.blendMode = opts?.blendMode ?? BlendMode.Normal;
15
14
  material.doubleSided = opts?.doubleSided ?? DEFAULT_DOUBLE_SIDED;
16
15
  return material;
@@ -38,6 +37,5 @@ export function isSurfaceMaterialOpaque(source) {
38
37
  }
39
38
  const DEFAULT_ALPHA_CUTOFF = 0.5;
40
39
  const DEFAULT_ALPHA_MODE = 'opaque';
41
- const DEFAULT_ALPHA_TYPE = 'straight';
42
40
  const DEFAULT_DOUBLE_SIDED = false;
43
41
  //# sourceMappingURL=surfaceMaterial.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"surfaceMaterial.js","sourceRoot":"","sources":["../src/surfaceMaterial.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,kGAAkG;AAClG,mGAAmG;AACnG,iGAAiG;AACjG,mGAAmG;AACnG,iGAAiG;AACjG,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CAAC,IAAU,EAAE,IAAuC;IACvF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAoB,CAAC;IACzD,QAAQ,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,oBAAoB,CAAC;IACjE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAC3D,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAC3D,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC;IACzD,QAAQ,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,oBAAoB,CAAC;IACjE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0FAA0F;AAC1F,0FAA0F;AAC1F,2EAA2E;AAC3E,MAAM,UAAU,2BAA2B,CAAC,MAAiC;IAC3E,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC;AAED,sFAAsF;AACtF,8CAA8C;AAC9C,MAAM,UAAU,wBAAwB,CAAC,MAAiC;IACxE,OAAO,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC;AACtC,CAAC;AAED,4FAA4F;AAC5F,kEAAkE;AAClE,MAAM,UAAU,uBAAuB,CAAC,MAAiC;IACvE,OAAO,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC;AACrC,CAAC;AAED,uFAAuF;AACvF,mEAAmE;AACnE,MAAM,UAAU,uBAAuB,CAAC,MAAiC;IACvE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC;AACvC,CAAC;AAED,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,kBAAkB,GAAsB,QAAQ,CAAC;AACvD,MAAM,kBAAkB,GAAc,UAAU,CAAC;AACjD,MAAM,oBAAoB,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"surfaceMaterial.js","sourceRoot":"","sources":["../src/surfaceMaterial.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,kGAAkG;AAClG,mGAAmG;AACnG,iGAAiG;AACjG,mGAAmG;AACnG,qFAAqF;AACrF,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CAAC,IAAU,EAAE,IAAuC;IACvF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAoB,CAAC;IACzD,QAAQ,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,oBAAoB,CAAC;IACjE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAC3D,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC;IACzD,QAAQ,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,oBAAoB,CAAC;IACjE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0FAA0F;AAC1F,0FAA0F;AAC1F,2EAA2E;AAC3E,MAAM,UAAU,2BAA2B,CAAC,MAAiC;IAC3E,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC;AAED,sFAAsF;AACtF,8CAA8C;AAC9C,MAAM,UAAU,wBAAwB,CAAC,MAAiC;IACxE,OAAO,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC;AACtC,CAAC;AAED,4FAA4F;AAC5F,kEAAkE;AAClE,MAAM,UAAU,uBAAuB,CAAC,MAAiC;IACvE,OAAO,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC;AACrC,CAAC;AAED,uFAAuF;AACvF,mEAAmE;AACnE,MAAM,UAAU,uBAAuB,CAAC,MAAiC;IACvE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC;AACvC,CAAC;AAED,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,kBAAkB,GAAsB,QAAQ,CAAC;AACvD,MAAM,oBAAoB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TransmissionVolumePbrExtension } from '@flighthq/types/contract';
2
+ export declare function createTransmissionVolumePbrExtension(opts?: Readonly<Partial<TransmissionVolumePbrExtension>>): TransmissionVolumePbrExtension;
3
+ export declare function isValidTransmissionVolumePbrExtension(value: Readonly<TransmissionVolumePbrExtension>): boolean;
4
+ //# sourceMappingURL=transmissionVolumePbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transmissionVolumePbrExtension.d.ts","sourceRoot":"","sources":["../src/transmissionVolumePbrExtension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAM/E,wBAAgB,oCAAoC,CAClD,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,GACvD,8BAA8B,CAahC;AAED,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,QAAQ,CAAC,8BAA8B,CAAC,GAAG,OAAO,CAa9G"}
@@ -0,0 +1,30 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { TransmissionVolumePbrExtensionKind } from '@flighthq/types/contract';
3
+ import { isValidMaterialIor, isValidMaterialWeight } from './materialValidation';
4
+ import { isValidPbrUvSet } from './pbrExtension';
5
+ export function createTransmissionVolumePbrExtension(opts) {
6
+ return createEntity({
7
+ attenuationColor: opts?.attenuationColor ?? 0xffffffff,
8
+ attenuationDistance: opts?.attenuationDistance ?? Infinity,
9
+ ior: opts?.ior ?? 1.5,
10
+ kind: TransmissionVolumePbrExtensionKind,
11
+ thickness: opts?.thickness ?? 0,
12
+ thicknessMap: opts?.thicknessMap ?? null,
13
+ thicknessMapUvSet: opts?.thicknessMapUvSet ?? 0,
14
+ transmission: opts?.transmission ?? 0,
15
+ transmissionMap: opts?.transmissionMap ?? null,
16
+ transmissionMapUvSet: opts?.transmissionMapUvSet ?? 0,
17
+ });
18
+ }
19
+ export function isValidTransmissionVolumePbrExtension(value) {
20
+ const validAttenuationDistance = value.attenuationDistance === Infinity ||
21
+ (Number.isFinite(value.attenuationDistance) && value.attenuationDistance > 0);
22
+ return (isValidMaterialWeight(value.transmission) &&
23
+ isValidMaterialIor(value.ior) &&
24
+ Number.isFinite(value.thickness) &&
25
+ value.thickness >= 0 &&
26
+ validAttenuationDistance &&
27
+ isValidPbrUvSet(value.thicknessMapUvSet) &&
28
+ isValidPbrUvSet(value.transmissionMapUvSet));
29
+ }
30
+ //# sourceMappingURL=transmissionVolumePbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transmissionVolumePbrExtension.js","sourceRoot":"","sources":["../src/transmissionVolumePbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,oCAAoC,CAClD,IAAwD;IAExD,OAAO,YAAY,CAAC;QAClB,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,UAAU;QACtD,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,IAAI,QAAQ;QAC1D,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG;QACrB,IAAI,EAAE,kCAAkC;QACxC,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC;QAC/B,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI;QACxC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC;QAC/C,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,CAAC;QACrC,eAAe,EAAE,IAAI,EAAE,eAAe,IAAI,IAAI;QAC9C,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,IAAI,CAAC;KACtD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,KAA+C;IACnG,MAAM,wBAAwB,GAC5B,KAAK,CAAC,mBAAmB,KAAK,QAAQ;QACtC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC;IAChF,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;QAChC,KAAK,CAAC,SAAS,IAAI,CAAC;QACpB,wBAAwB;QACxB,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACxC,eAAe,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAC5C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WrappedDiffusePbrExtension } from '@flighthq/types/contract';
2
+ export declare function createWrappedDiffusePbrExtension(opts?: Readonly<Partial<WrappedDiffusePbrExtension>>): WrappedDiffusePbrExtension;
3
+ export declare function isValidWrappedDiffusePbrExtension(value: Readonly<WrappedDiffusePbrExtension>): boolean;
4
+ //# sourceMappingURL=wrappedDiffusePbrExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappedDiffusePbrExtension.d.ts","sourceRoot":"","sources":["../src/wrappedDiffusePbrExtension.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAM3E,wBAAgB,gCAAgC,CAC9C,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GACnD,0BAA0B,CAW5B;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,QAAQ,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAQtG"}
@@ -0,0 +1,24 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { WrappedDiffusePbrExtensionKind } from '@flighthq/types/contract';
3
+ import { isValidMaterialWeight } from './materialValidation';
4
+ import { isValidPbrUvSet } from './pbrExtension';
5
+ export function createWrappedDiffusePbrExtension(opts) {
6
+ return createEntity({
7
+ kind: WrappedDiffusePbrExtensionKind,
8
+ thickness: opts?.thickness ?? 0,
9
+ thicknessMap: opts?.thicknessMap ?? null,
10
+ thicknessMapUvSet: opts?.thicknessMapUvSet ?? 0,
11
+ wrappedDiffuseColor: opts?.wrappedDiffuseColor ?? 0xffffffff,
12
+ wrappedDiffuseMap: opts?.wrappedDiffuseMap ?? null,
13
+ wrappedDiffuseMapUvSet: opts?.wrappedDiffuseMapUvSet ?? 0,
14
+ wrappedDiffuseStrength: opts?.wrappedDiffuseStrength ?? 0,
15
+ });
16
+ }
17
+ export function isValidWrappedDiffusePbrExtension(value) {
18
+ return (isValidMaterialWeight(value.wrappedDiffuseStrength) &&
19
+ Number.isFinite(value.thickness) &&
20
+ value.thickness >= 0 &&
21
+ isValidPbrUvSet(value.thicknessMapUvSet) &&
22
+ isValidPbrUvSet(value.wrappedDiffuseMapUvSet));
23
+ }
24
+ //# sourceMappingURL=wrappedDiffusePbrExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappedDiffusePbrExtension.js","sourceRoot":"","sources":["../src/wrappedDiffusePbrExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,gCAAgC,CAC9C,IAAoD;IAEpD,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,8BAA8B;QACpC,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC;QAC/B,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI;QACxC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,CAAC;QAC/C,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,IAAI,UAAU;QAC5D,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,IAAI,IAAI;QAClD,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,IAAI,CAAC;QACzD,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,IAAI,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,KAA2C;IAC3F,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC,sBAAsB,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;QAChC,KAAK,CAAC,SAAS,IAAI,CAAC;QACpB,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACxC,eAAe,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAC9C,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "name": "@flighthq/materials",
3
- "version": "0.3.0-next.906.07cea63",
3
+ "version": "0.3.1-next.209.43ef1bc",
4
+ "author": "Joshua Granick and other contributors",
5
+ "license": "MIT",
4
6
  "repository": {
5
7
  "type": "git",
6
8
  "url": "https://github.com/flighthq/flight.git",
@@ -36,9 +38,9 @@
36
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
39
  },
38
40
  "dependencies": {
39
- "@flighthq/color": "0.3.0-next.906.07cea63",
40
- "@flighthq/entity": "0.3.0-next.906.07cea63",
41
- "@flighthq/types": "0.3.0-next.906.07cea63"
41
+ "@flighthq/color": "0.3.1-next.209.43ef1bc",
42
+ "@flighthq/entity": "0.3.1-next.209.43ef1bc",
43
+ "@flighthq/types": "0.3.1-next.209.43ef1bc"
42
44
  },
43
45
  "devDependencies": {
44
46
  "typescript": "^5.3.0"
@@ -0,0 +1,23 @@
1
+ import { EntityRuntimeKey } from '@flighthq/types/contract';
2
+
3
+ import { createAnisotropyPbrExtension, isValidAnisotropyPbrExtension } from './anisotropyPbrExtension';
4
+
5
+ describe('createAnisotropyPbrExtension', () => {
6
+ it('creates an Entity with canonical defaults and per-map UV selection', () => {
7
+ const value = createAnisotropyPbrExtension({ anisotropyMapUvSet: 1 });
8
+ expect(EntityRuntimeKey in value).toBe(true);
9
+ expect(value.anisotropyStrength).toBe(0);
10
+ expect(value.anisotropyMapUvSet).toBe(1);
11
+ });
12
+ });
13
+
14
+ describe('isValidAnisotropyPbrExtension', () => {
15
+ it('rejects invalid strength, rotation, and UV selection', () => {
16
+ expect(isValidAnisotropyPbrExtension(createAnisotropyPbrExtension())).toBe(true);
17
+ expect(isValidAnisotropyPbrExtension(createAnisotropyPbrExtension({ anisotropyStrength: 2 }))).toBe(false);
18
+ expect(isValidAnisotropyPbrExtension(createAnisotropyPbrExtension({ anisotropyRotation: Infinity }))).toBe(false);
19
+ const invalidUv = createAnisotropyPbrExtension();
20
+ Reflect.set(invalidUv, 'anisotropyMapUvSet', 2);
21
+ expect(isValidAnisotropyPbrExtension(invalidUv)).toBe(false);
22
+ });
23
+ });
@@ -0,0 +1,24 @@
1
+ import { EntityRuntimeKey } from '@flighthq/types/contract';
2
+
3
+ import { createClearcoatPbrExtension, isValidClearcoatPbrExtension } from './clearcoatPbrExtension';
4
+
5
+ describe('createClearcoatPbrExtension', () => {
6
+ it('creates an Entity with an explicit normal scale and independent UV sets', () => {
7
+ const value = createClearcoatPbrExtension({ clearcoatNormalMapUvSet: 1 });
8
+ expect(EntityRuntimeKey in value).toBe(true);
9
+ expect(value.clearcoatNormalScale).toBe(1);
10
+ expect(value.clearcoatMapUvSet).toBe(0);
11
+ expect(value.clearcoatNormalMapUvSet).toBe(1);
12
+ });
13
+ });
14
+
15
+ describe('isValidClearcoatPbrExtension', () => {
16
+ it('rejects invalid weights, normal scale, and map UV sets', () => {
17
+ expect(isValidClearcoatPbrExtension(createClearcoatPbrExtension())).toBe(true);
18
+ expect(isValidClearcoatPbrExtension(createClearcoatPbrExtension({ clearcoat: 2 }))).toBe(false);
19
+ expect(isValidClearcoatPbrExtension(createClearcoatPbrExtension({ clearcoatNormalScale: -1 }))).toBe(false);
20
+ const invalidUv = createClearcoatPbrExtension();
21
+ Reflect.set(invalidUv, 'clearcoatRoughnessMapUvSet', 3);
22
+ expect(isValidClearcoatPbrExtension(invalidUv)).toBe(false);
23
+ });
24
+ });
@@ -0,0 +1,32 @@
1
+ import { createEntity } from '@flighthq/entity/contract';
2
+ import { ExtendedPbrMaterialKind } from '@flighthq/types/contract';
3
+
4
+ import { createClearcoatPbrExtension } from './clearcoatPbrExtension';
5
+ import { createExtendedPbrMaterial } from './extendedPbrMaterial';
6
+ import { createStandardPbrMaterialProperties } from './pbrMaterials';
7
+
8
+ describe('createExtendedPbrMaterial', () => {
9
+ it('composes a standard property block with an ordered extension list', () => {
10
+ const standard = createStandardPbrMaterialProperties({ roughness: 0.25 });
11
+ const extensions = [createClearcoatPbrExtension(), createEntity({ kind: 'VendorPbrExtension' })];
12
+
13
+ const material = createExtendedPbrMaterial({ extensions, standard });
14
+
15
+ expect(material.kind).toBe(ExtendedPbrMaterialKind);
16
+ expect(material.standard).toBe(standard);
17
+ expect(material.extensions).toBe(extensions);
18
+ expect(material.extensions.map((extension) => extension.kind)).toEqual([
19
+ 'ClearcoatPbrExtension',
20
+ 'VendorPbrExtension',
21
+ ]);
22
+ });
23
+
24
+ it('defaults to a lean standard block and an empty per-material list', () => {
25
+ const a = createExtendedPbrMaterial();
26
+ const b = createExtendedPbrMaterial();
27
+
28
+ expect(a.standard.roughness).toBe(1);
29
+ expect(a.extensions).toEqual([]);
30
+ expect(a.extensions).not.toBe(b.extensions);
31
+ });
32
+ });
@@ -0,0 +1,30 @@
1
+ import { EntityRuntimeKey } from '@flighthq/types/contract';
2
+
3
+ import { createIridescencePbrExtension, isValidIridescencePbrExtension } from './iridescencePbrExtension';
4
+
5
+ describe('createIridescencePbrExtension', () => {
6
+ it('creates an Entity with glTF thickness defaults and independent UV sets', () => {
7
+ const value = createIridescencePbrExtension({ iridescenceThicknessMapUvSet: 1 });
8
+ expect(EntityRuntimeKey in value).toBe(true);
9
+ expect(value.iridescenceIor).toBe(1.3);
10
+ expect(value.iridescenceThicknessMin).toBe(100);
11
+ expect(value.iridescenceThicknessMax).toBe(400);
12
+ expect(value.iridescenceThicknessMapUvSet).toBe(1);
13
+ });
14
+ });
15
+
16
+ describe('isValidIridescencePbrExtension', () => {
17
+ it('rejects invalid strength, IOR, thickness ordering, and UV selection', () => {
18
+ expect(isValidIridescencePbrExtension(createIridescencePbrExtension())).toBe(true);
19
+ expect(isValidIridescencePbrExtension(createIridescencePbrExtension({ iridescence: -1 }))).toBe(false);
20
+ expect(isValidIridescencePbrExtension(createIridescencePbrExtension({ iridescenceIor: 0.5 }))).toBe(false);
21
+ expect(
22
+ isValidIridescencePbrExtension(
23
+ createIridescencePbrExtension({ iridescenceThicknessMax: 100, iridescenceThicknessMin: 200 }),
24
+ ),
25
+ ).toBe(false);
26
+ const invalidUv = createIridescencePbrExtension();
27
+ Reflect.set(invalidUv, 'iridescenceMapUvSet', 2);
28
+ expect(isValidIridescencePbrExtension(invalidUv)).toBe(false);
29
+ });
30
+ });
@@ -1,9 +1,13 @@
1
- import { StandardPbrMaterialKind, TransmissionVolumePbrMaterialKind } from '@flighthq/types/contract';
1
+ import {
2
+ ExtendedPbrMaterialKind,
3
+ StandardPbrMaterialKind,
4
+ TransmissionVolumePbrExtensionKind,
5
+ } from '@flighthq/types/contract';
2
6
 
3
7
  import {
4
8
  createAluminumStandardPbrMaterial,
5
9
  createCarbonStandardPbrMaterial,
6
- createGlassTransmissionVolumePbrMaterial,
10
+ createGlassExtendedPbrMaterial,
7
11
  createGoldStandardPbrMaterial,
8
12
  createIronStandardPbrMaterial,
9
13
  createMarbleStandardPbrMaterial,
@@ -36,16 +40,28 @@ describe('createCarbonStandardPbrMaterial', () => {
36
40
  });
37
41
  });
38
42
 
39
- describe('createGlassTransmissionVolumePbrMaterial', () => {
40
- it('creates a fully-transmissive material with IOR 1.5', () => {
41
- const m = createGlassTransmissionVolumePbrMaterial();
42
- expect(m.kind).toBe(TransmissionVolumePbrMaterialKind);
43
- expect(m.transmission).toBe(1);
44
- expect(m.ior).toBe(1.5);
43
+ describe('createGlassExtendedPbrMaterial', () => {
44
+ it('composes clear glass without nesting a standard material entity', () => {
45
+ const material = createGlassExtendedPbrMaterial();
46
+ const extension = material.extensions[0];
47
+ expect(material.kind).toBe(ExtendedPbrMaterialKind);
48
+ expect(material.standard.baseColor).toBe(0xffffffff);
49
+ expect(material.standard.metallic).toBe(0);
50
+ expect(material.standard.roughness).toBe(0);
51
+ expect('kind' in material.standard).toBe(false);
52
+ expect(extension?.kind).toBe(TransmissionVolumePbrExtensionKind);
45
53
  });
46
- it('applies overrides', () => {
47
- const m = createGlassTransmissionVolumePbrMaterial({ ior: 1.7 });
48
- expect(m.ior).toBe(1.7);
54
+
55
+ it('applies surface, standard, and transmission-volume overrides independently', () => {
56
+ const material = createGlassExtendedPbrMaterial({
57
+ alphaMode: 'blend',
58
+ standard: { roughness: 0.2 },
59
+ transmissionVolume: { ior: 1.7 },
60
+ });
61
+ const extension = material.extensions[0];
62
+ expect(material.alphaMode).toBe('blend');
63
+ expect(material.standard.roughness).toBe(0.2);
64
+ expect(extension).toMatchObject({ ior: 1.7, transmission: 1 });
49
65
  });
50
66
  });
51
67
 
@@ -0,0 +1,10 @@
1
+ import { isValidPbrUvSet } from './pbrExtension';
2
+
3
+ describe('isValidPbrUvSet', () => {
4
+ it('accepts the two canonical mesh UV channels only', () => {
5
+ expect(isValidPbrUvSet(0)).toBe(true);
6
+ expect(isValidPbrUvSet(1)).toBe(true);
7
+ expect(isValidPbrUvSet(2)).toBe(false);
8
+ expect(isValidPbrUvSet(NaN)).toBe(false);
9
+ });
10
+ });
@@ -0,0 +1,23 @@
1
+ import { EntityRuntimeKey } from '@flighthq/types/contract';
2
+
3
+ import { createSheenPbrExtension, isValidSheenPbrExtension } from './sheenPbrExtension';
4
+
5
+ describe('createSheenPbrExtension', () => {
6
+ it('creates an Entity with independent color and roughness UV sets', () => {
7
+ const value = createSheenPbrExtension({ sheenColorMapUvSet: 1 });
8
+ expect(EntityRuntimeKey in value).toBe(true);
9
+ expect(value.sheenColor).toBe(0x000000ff);
10
+ expect(value.sheenColorMapUvSet).toBe(1);
11
+ expect(value.sheenRoughnessMapUvSet).toBe(0);
12
+ });
13
+ });
14
+
15
+ describe('isValidSheenPbrExtension', () => {
16
+ it('rejects invalid roughness and UV selection', () => {
17
+ expect(isValidSheenPbrExtension(createSheenPbrExtension({ sheenRoughness: 1 }))).toBe(true);
18
+ expect(isValidSheenPbrExtension(createSheenPbrExtension({ sheenRoughness: NaN }))).toBe(false);
19
+ const invalidUv = createSheenPbrExtension();
20
+ Reflect.set(invalidUv, 'sheenRoughnessMapUvSet', -1);
21
+ expect(isValidSheenPbrExtension(invalidUv)).toBe(false);
22
+ });
23
+ });
@@ -0,0 +1,23 @@
1
+ import { EntityRuntimeKey } from '@flighthq/types/contract';
2
+
3
+ import { createSpecularPbrExtension, isValidSpecularPbrExtension } from './specularPbrExtension';
4
+
5
+ describe('createSpecularPbrExtension', () => {
6
+ it('creates an Entity with independent strength and color UV sets', () => {
7
+ const value = createSpecularPbrExtension({ specularColorMapUvSet: 1 });
8
+ expect(EntityRuntimeKey in value).toBe(true);
9
+ expect(value.specular).toBe(1);
10
+ expect(value.specularMapUvSet).toBe(0);
11
+ expect(value.specularColorMapUvSet).toBe(1);
12
+ });
13
+ });
14
+
15
+ describe('isValidSpecularPbrExtension', () => {
16
+ it('rejects invalid strength and UV selection', () => {
17
+ expect(isValidSpecularPbrExtension(createSpecularPbrExtension())).toBe(true);
18
+ expect(isValidSpecularPbrExtension(createSpecularPbrExtension({ specular: -1 }))).toBe(false);
19
+ const invalidUv = createSpecularPbrExtension();
20
+ Reflect.set(invalidUv, 'specularMapUvSet', 2);
21
+ expect(isValidSpecularPbrExtension(invalidUv)).toBe(false);
22
+ });
23
+ });
@@ -19,7 +19,6 @@ describe('createSurfaceMaterial', () => {
19
19
  const material = createSurfaceMaterial(TestSurfaceMaterialKind);
20
20
  expect(material.alphaMode).toBe('opaque');
21
21
  expect(material.alphaCutoff).toBe(0.5);
22
- expect(material.alphaType).toBe('straight');
23
22
  expect(material.blendMode).toBe(BlendMode.Normal);
24
23
  expect(material.doubleSided).toBe(false);
25
24
  });
@@ -0,0 +1,31 @@
1
+ import { EntityRuntimeKey } from '@flighthq/types/contract';
2
+
3
+ import {
4
+ createTransmissionVolumePbrExtension,
5
+ isValidTransmissionVolumePbrExtension,
6
+ } from './transmissionVolumePbrExtension';
7
+
8
+ describe('createTransmissionVolumePbrExtension', () => {
9
+ it('creates an Entity with glTF defaults and independent UV sets', () => {
10
+ const value = createTransmissionVolumePbrExtension({ transmissionMapUvSet: 1 });
11
+ expect(EntityRuntimeKey in value).toBe(true);
12
+ expect(value.attenuationDistance).toBe(Infinity);
13
+ expect(value.ior).toBe(1.5);
14
+ expect(value.transmissionMapUvSet).toBe(1);
15
+ expect(value.thicknessMapUvSet).toBe(0);
16
+ });
17
+ });
18
+
19
+ describe('isValidTransmissionVolumePbrExtension', () => {
20
+ it('accepts infinite attenuation and rejects invalid transport relationships or UV sets', () => {
21
+ expect(isValidTransmissionVolumePbrExtension(createTransmissionVolumePbrExtension())).toBe(true);
22
+ expect(
23
+ isValidTransmissionVolumePbrExtension(createTransmissionVolumePbrExtension({ attenuationDistance: 0 })),
24
+ ).toBe(false);
25
+ expect(isValidTransmissionVolumePbrExtension(createTransmissionVolumePbrExtension({ ior: 0.5 }))).toBe(false);
26
+ expect(isValidTransmissionVolumePbrExtension(createTransmissionVolumePbrExtension({ thickness: -1 }))).toBe(false);
27
+ const invalidUv = createTransmissionVolumePbrExtension();
28
+ Reflect.set(invalidUv, 'thicknessMapUvSet', 2);
29
+ expect(isValidTransmissionVolumePbrExtension(invalidUv)).toBe(false);
30
+ });
31
+ });
@@ -0,0 +1,27 @@
1
+ import { EntityRuntimeKey, WrappedDiffusePbrExtensionKind } from '@flighthq/types/contract';
2
+
3
+ import { createWrappedDiffusePbrExtension, isValidWrappedDiffusePbrExtension } from './wrappedDiffusePbrExtension';
4
+
5
+ describe('createWrappedDiffusePbrExtension', () => {
6
+ it('names the approximation honestly and creates an Entity with independent UV sets', () => {
7
+ const value = createWrappedDiffusePbrExtension({ thicknessMapUvSet: 1 });
8
+ expect(EntityRuntimeKey in value).toBe(true);
9
+ expect(value.kind).toBe(WrappedDiffusePbrExtensionKind);
10
+ expect(value.wrappedDiffuseStrength).toBe(0);
11
+ expect(value.thicknessMapUvSet).toBe(1);
12
+ expect(value.wrappedDiffuseMapUvSet).toBe(0);
13
+ });
14
+ });
15
+
16
+ describe('isValidWrappedDiffusePbrExtension', () => {
17
+ it('rejects invalid strength, thickness, and UV selection', () => {
18
+ expect(isValidWrappedDiffusePbrExtension(createWrappedDiffusePbrExtension())).toBe(true);
19
+ expect(isValidWrappedDiffusePbrExtension(createWrappedDiffusePbrExtension({ wrappedDiffuseStrength: 2 }))).toBe(
20
+ false,
21
+ );
22
+ expect(isValidWrappedDiffusePbrExtension(createWrappedDiffusePbrExtension({ thickness: Infinity }))).toBe(false);
23
+ const invalidUv = createWrappedDiffusePbrExtension();
24
+ Reflect.set(invalidUv, 'wrappedDiffuseMapUvSet', 2);
25
+ expect(isValidWrappedDiffusePbrExtension(invalidUv)).toBe(false);
26
+ });
27
+ });
@@ -1,9 +0,0 @@
1
- import type { AnisotropyPbrMaterial, ClearcoatPbrMaterial, IridescencePbrMaterial, SheenPbrMaterial, SpecularPbrMaterial, SubsurfacePbrMaterial, TransmissionVolumePbrMaterial } from '@flighthq/types/contract';
2
- export declare function createAnisotropyPbrMaterial(opts?: Readonly<Partial<AnisotropyPbrMaterial>>): AnisotropyPbrMaterial;
3
- export declare function createClearcoatPbrMaterial(opts?: Readonly<Partial<ClearcoatPbrMaterial>>): ClearcoatPbrMaterial;
4
- export declare function createIridescencePbrMaterial(opts?: Readonly<Partial<IridescencePbrMaterial>>): IridescencePbrMaterial;
5
- export declare function createSheenPbrMaterial(opts?: Readonly<Partial<SheenPbrMaterial>>): SheenPbrMaterial;
6
- export declare function createSpecularPbrMaterial(opts?: Readonly<Partial<SpecularPbrMaterial>>): SpecularPbrMaterial;
7
- export declare function createSubsurfacePbrMaterial(opts?: Readonly<Partial<SubsurfacePbrMaterial>>): SubsurfacePbrMaterial;
8
- export declare function createTransmissionVolumePbrMaterial(opts?: Readonly<Partial<TransmissionVolumePbrMaterial>>): TransmissionVolumePbrMaterial;
9
- //# sourceMappingURL=pbrExtensionMaterials.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pbrExtensionMaterials.d.ts","sourceRoot":"","sources":["../src/pbrExtensionMaterials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,2BAA2B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,CAOlH;AAKD,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAS/G;AAKD,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,sBAAsB,CAUrH;AAID,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,gBAAgB,CAQnG;AAID,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAQ5G;AAKD,wBAAgB,2BAA2B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,CASlH;AAMD,wBAAgB,mCAAmC,CACjD,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GACtD,6BAA6B,CAW/B"}
@@ -1,93 +0,0 @@
1
- import { AnisotropyPbrMaterialKind, ClearcoatPbrMaterialKind, IridescencePbrMaterialKind, SheenPbrMaterialKind, SpecularPbrMaterialKind, SubsurfacePbrMaterialKind, TransmissionVolumePbrMaterialKind, } from '@flighthq/types/contract';
2
- import { createStandardPbrMaterialProperties } from './pbrMaterials';
3
- import { createSurfaceMaterial } from './surfaceMaterial';
4
- // KHR_materials_anisotropy: a directionally-stretched specular lobe. `anisotropyStrength`
5
- // defaults to 0 (isotropic), `anisotropyRotation` to 0, the map to null. Composes a default
6
- // `standard` block.
7
- export function createAnisotropyPbrMaterial(opts) {
8
- const material = createSurfaceMaterial(AnisotropyPbrMaterialKind, opts);
9
- material.anisotropyMap = opts?.anisotropyMap ?? null;
10
- material.anisotropyRotation = opts?.anisotropyRotation ?? 0;
11
- material.anisotropyStrength = opts?.anisotropyStrength ?? 0;
12
- material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
13
- return material;
14
- }
15
- // KHR_materials_clearcoat: a second specular lobe over the base PBR layer. `clearcoat` defaults
16
- // to 0 (disabled), `clearcoatRoughness` to 0, all maps to null. Composes a default `standard`
17
- // block.
18
- export function createClearcoatPbrMaterial(opts) {
19
- const material = createSurfaceMaterial(ClearcoatPbrMaterialKind, opts);
20
- material.clearcoat = opts?.clearcoat ?? 0;
21
- material.clearcoatMap = opts?.clearcoatMap ?? null;
22
- material.clearcoatNormalMap = opts?.clearcoatNormalMap ?? null;
23
- material.clearcoatRoughness = opts?.clearcoatRoughness ?? 0;
24
- material.clearcoatRoughnessMap = opts?.clearcoatRoughnessMap ?? null;
25
- material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
26
- return material;
27
- }
28
- // KHR_materials_iridescence: thin-film interference. `iridescence` defaults to 0 (disabled),
29
- // `iridescenceIor` to 1.3, the thickness range to glTF's 100–400 nm, all maps to null.
30
- // Composes a default `standard` block.
31
- export function createIridescencePbrMaterial(opts) {
32
- const material = createSurfaceMaterial(IridescencePbrMaterialKind, opts);
33
- material.iridescence = opts?.iridescence ?? 0;
34
- material.iridescenceIor = opts?.iridescenceIor ?? 1.3;
35
- material.iridescenceMap = opts?.iridescenceMap ?? null;
36
- material.iridescenceThicknessMap = opts?.iridescenceThicknessMap ?? null;
37
- material.iridescenceThicknessMax = opts?.iridescenceThicknessMax ?? 400;
38
- material.iridescenceThicknessMin = opts?.iridescenceThicknessMin ?? 100;
39
- material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
40
- return material;
41
- }
42
- // KHR_materials_sheen: a retroreflective cloth/fabric lobe. `sheenColor` defaults to opaque
43
- // black (disabled), `sheenRoughness` to 0, maps to null. Composes a default `standard` block.
44
- export function createSheenPbrMaterial(opts) {
45
- const material = createSurfaceMaterial(SheenPbrMaterialKind, opts);
46
- material.sheenColor = opts?.sheenColor ?? 0x000000ff;
47
- material.sheenColorMap = opts?.sheenColorMap ?? null;
48
- material.sheenRoughness = opts?.sheenRoughness ?? 0;
49
- material.sheenRoughnessMap = opts?.sheenRoughnessMap ?? null;
50
- material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
51
- return material;
52
- }
53
- // KHR_materials_specular: independent dielectric specular strength and tint. `specular` defaults
54
- // to 1 (full), `specularColor` to white, maps to null. Composes a default `standard` block.
55
- export function createSpecularPbrMaterial(opts) {
56
- const material = createSurfaceMaterial(SpecularPbrMaterialKind, opts);
57
- material.specular = opts?.specular ?? 1;
58
- material.specularColor = opts?.specularColor ?? 0xffffffff;
59
- material.specularColorMap = opts?.specularColorMap ?? null;
60
- material.specularMap = opts?.specularMap ?? null;
61
- material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
62
- return material;
63
- }
64
- // Flight subsurface-scattering extension (wrapped-diffuse approximation). `subsurface` defaults
65
- // to 0 (disabled), `subsurfaceColor` to white, `thickness` to 0, maps to null. Composes a
66
- // default `standard` block.
67
- export function createSubsurfacePbrMaterial(opts) {
68
- const material = createSurfaceMaterial(SubsurfacePbrMaterialKind, opts);
69
- material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
70
- material.subsurface = opts?.subsurface ?? 0;
71
- material.subsurfaceColor = opts?.subsurfaceColor ?? 0xffffffff;
72
- material.subsurfaceMap = opts?.subsurfaceMap ?? null;
73
- material.thickness = opts?.thickness ?? 0;
74
- material.thicknessMap = opts?.thicknessMap ?? null;
75
- return material;
76
- }
77
- // KHR_materials_transmission + KHR_materials_volume: refractive, see-through surfaces.
78
- // `transmission` defaults to 0 (opaque), `thickness` to 0, `attenuationColor` to white,
79
- // `attenuationDistance` to Infinity (no absorption), `ior` to glTF's 1.5, maps to null.
80
- // Composes a default `standard` block.
81
- export function createTransmissionVolumePbrMaterial(opts) {
82
- const material = createSurfaceMaterial(TransmissionVolumePbrMaterialKind, opts);
83
- material.attenuationColor = opts?.attenuationColor ?? 0xffffffff;
84
- material.attenuationDistance = opts?.attenuationDistance ?? Infinity;
85
- material.ior = opts?.ior ?? 1.5;
86
- material.standard = opts?.standard ?? createStandardPbrMaterialProperties();
87
- material.thickness = opts?.thickness ?? 0;
88
- material.thicknessMap = opts?.thicknessMap ?? null;
89
- material.transmission = opts?.transmission ?? 0;
90
- material.transmissionMap = opts?.transmissionMap ?? null;
91
- return material;
92
- }
93
- //# sourceMappingURL=pbrExtensionMaterials.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pbrExtensionMaterials.js","sourceRoot":"","sources":["../src/pbrExtensionMaterials.ts"],"names":[],"mappings":"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"}
@@ -1,123 +0,0 @@
1
- import {
2
- AnisotropyPbrMaterialKind,
3
- ClearcoatPbrMaterialKind,
4
- IridescencePbrMaterialKind,
5
- SheenPbrMaterialKind,
6
- SpecularPbrMaterialKind,
7
- SubsurfacePbrMaterialKind,
8
- TransmissionVolumePbrMaterialKind,
9
- } from '@flighthq/types/contract';
10
-
11
- import {
12
- createAnisotropyPbrMaterial,
13
- createClearcoatPbrMaterial,
14
- createIridescencePbrMaterial,
15
- createSheenPbrMaterial,
16
- createSpecularPbrMaterial,
17
- createSubsurfacePbrMaterial,
18
- createTransmissionVolumePbrMaterial,
19
- } from './pbrExtensionMaterials';
20
- import { createStandardPbrMaterialProperties } from './pbrMaterials';
21
-
22
- describe('createAnisotropyPbrMaterial', () => {
23
- it('creates an isotropic anisotropy material with a default standard block', () => {
24
- const material = createAnisotropyPbrMaterial();
25
- expect(material.kind).toBe(AnisotropyPbrMaterialKind);
26
- expect(material.anisotropyStrength).toBe(0);
27
- expect(material.anisotropyRotation).toBe(0);
28
- expect(material.standard.baseColor).toBe(0xffffffff);
29
- });
30
-
31
- it('composes a provided standard block', () => {
32
- const standard = createStandardPbrMaterialProperties({ metallic: 1 });
33
- expect(createAnisotropyPbrMaterial({ standard }).standard).toBe(standard);
34
- });
35
- });
36
-
37
- describe('createClearcoatPbrMaterial', () => {
38
- it('creates a disabled clearcoat material with a default standard block', () => {
39
- const material = createClearcoatPbrMaterial();
40
- expect(material.kind).toBe(ClearcoatPbrMaterialKind);
41
- expect(material.clearcoat).toBe(0);
42
- expect(material.clearcoatRoughness).toBe(0);
43
- expect(material.standard.roughness).toBe(1);
44
- });
45
-
46
- it('applies overrides', () => {
47
- expect(createClearcoatPbrMaterial({ clearcoat: 1 }).clearcoat).toBe(1);
48
- });
49
- });
50
-
51
- describe('createIridescencePbrMaterial', () => {
52
- it('creates a disabled iridescence material with glTF thickness defaults', () => {
53
- const material = createIridescencePbrMaterial();
54
- expect(material.kind).toBe(IridescencePbrMaterialKind);
55
- expect(material.iridescence).toBe(0);
56
- expect(material.iridescenceIor).toBe(1.3);
57
- expect(material.iridescenceThicknessMin).toBe(100);
58
- expect(material.iridescenceThicknessMax).toBe(400);
59
- });
60
-
61
- it('applies overrides', () => {
62
- expect(createIridescencePbrMaterial({ iridescence: 1 }).iridescence).toBe(1);
63
- });
64
- });
65
-
66
- describe('createSheenPbrMaterial', () => {
67
- it('creates a disabled sheen material with a default standard block', () => {
68
- const material = createSheenPbrMaterial();
69
- expect(material.kind).toBe(SheenPbrMaterialKind);
70
- expect(material.sheenColor).toBe(0x000000ff);
71
- expect(material.sheenRoughness).toBe(0);
72
- expect(material.standard.baseColor).toBe(0xffffffff);
73
- });
74
-
75
- it('applies overrides', () => {
76
- expect(createSheenPbrMaterial({ sheenColor: 0xffffffff }).sheenColor).toBe(0xffffffff);
77
- });
78
- });
79
-
80
- describe('createSpecularPbrMaterial', () => {
81
- it('creates a full-specular white-tint material with a default standard block', () => {
82
- const material = createSpecularPbrMaterial();
83
- expect(material.kind).toBe(SpecularPbrMaterialKind);
84
- expect(material.specular).toBe(1);
85
- expect(material.specularColor).toBe(0xffffffff);
86
- expect(material.standard.metallic).toBe(0);
87
- });
88
-
89
- it('applies overrides', () => {
90
- expect(createSpecularPbrMaterial({ specular: 0.5 }).specular).toBe(0.5);
91
- });
92
- });
93
-
94
- describe('createSubsurfacePbrMaterial', () => {
95
- it('creates a disabled subsurface material with a default standard block', () => {
96
- const material = createSubsurfacePbrMaterial();
97
- expect(material.kind).toBe(SubsurfacePbrMaterialKind);
98
- expect(material.subsurface).toBe(0);
99
- expect(material.subsurfaceColor).toBe(0xffffffff);
100
- expect(material.thickness).toBe(0);
101
- expect(material.standard.roughness).toBe(1);
102
- });
103
-
104
- it('applies overrides', () => {
105
- expect(createSubsurfacePbrMaterial({ subsurface: 1 }).subsurface).toBe(1);
106
- });
107
- });
108
-
109
- describe('createTransmissionVolumePbrMaterial', () => {
110
- it('creates an opaque transmission material with glTF ior and no absorption', () => {
111
- const material = createTransmissionVolumePbrMaterial();
112
- expect(material.kind).toBe(TransmissionVolumePbrMaterialKind);
113
- expect(material.transmission).toBe(0);
114
- expect(material.ior).toBe(1.5);
115
- expect(material.attenuationColor).toBe(0xffffffff);
116
- expect(material.attenuationDistance).toBe(Infinity);
117
- expect(material.standard.baseColor).toBe(0xffffffff);
118
- });
119
-
120
- it('applies overrides', () => {
121
- expect(createTransmissionVolumePbrMaterial({ transmission: 1 }).transmission).toBe(1);
122
- });
123
- });