@luma.gl/gltf 9.3.0-alpha.6 → 9.3.0-alpha.8

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 (65) hide show
  1. package/dist/dist.dev.js +942 -141
  2. package/dist/dist.min.js +4 -4
  3. package/dist/gltf/create-gltf-model.d.ts +9 -1
  4. package/dist/gltf/create-gltf-model.d.ts.map +1 -1
  5. package/dist/gltf/create-gltf-model.js +58 -4
  6. package/dist/gltf/create-gltf-model.js.map +1 -1
  7. package/dist/gltf/create-scenegraph-from-gltf.d.ts +22 -1
  8. package/dist/gltf/create-scenegraph-from-gltf.d.ts.map +1 -1
  9. package/dist/gltf/create-scenegraph-from-gltf.js +63 -1
  10. package/dist/gltf/create-scenegraph-from-gltf.js.map +1 -1
  11. package/dist/gltf/gltf-extension-support.d.ts +10 -0
  12. package/dist/gltf/gltf-extension-support.d.ts.map +1 -0
  13. package/dist/gltf/gltf-extension-support.js +173 -0
  14. package/dist/gltf/gltf-extension-support.js.map +1 -0
  15. package/dist/index.cjs +899 -114
  16. package/dist/index.cjs.map +4 -4
  17. package/dist/index.d.ts +2 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/parsers/parse-gltf-animations.d.ts.map +1 -1
  22. package/dist/parsers/parse-gltf-animations.js +34 -12
  23. package/dist/parsers/parse-gltf-animations.js.map +1 -1
  24. package/dist/parsers/parse-gltf-lights.d.ts.map +1 -1
  25. package/dist/parsers/parse-gltf-lights.js +86 -20
  26. package/dist/parsers/parse-gltf-lights.js.map +1 -1
  27. package/dist/parsers/parse-gltf.d.ts +3 -1
  28. package/dist/parsers/parse-gltf.d.ts.map +1 -1
  29. package/dist/parsers/parse-gltf.js +41 -9
  30. package/dist/parsers/parse-gltf.js.map +1 -1
  31. package/dist/parsers/parse-pbr-material.d.ts +69 -1
  32. package/dist/parsers/parse-pbr-material.d.ts.map +1 -1
  33. package/dist/parsers/parse-pbr-material.js +429 -42
  34. package/dist/parsers/parse-pbr-material.js.map +1 -1
  35. package/dist/pbr/pbr-environment.d.ts.map +1 -1
  36. package/dist/pbr/pbr-environment.js +14 -12
  37. package/dist/pbr/pbr-environment.js.map +1 -1
  38. package/dist/pbr/pbr-material.d.ts +8 -3
  39. package/dist/pbr/pbr-material.d.ts.map +1 -1
  40. package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts +5 -5
  41. package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts.map +1 -1
  42. package/dist/webgl-to-webgpu/convert-webgl-sampler.js +12 -12
  43. package/dist/webgl-to-webgpu/convert-webgl-sampler.js.map +1 -1
  44. package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts +1 -10
  45. package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts.map +1 -1
  46. package/dist/webgl-to-webgpu/convert-webgl-topology.js +1 -15
  47. package/dist/webgl-to-webgpu/convert-webgl-topology.js.map +1 -1
  48. package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts +27 -0
  49. package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts.map +1 -0
  50. package/dist/webgl-to-webgpu/gltf-webgl-constants.js +34 -0
  51. package/dist/webgl-to-webgpu/gltf-webgl-constants.js.map +1 -0
  52. package/package.json +5 -6
  53. package/src/gltf/create-gltf-model.ts +113 -5
  54. package/src/gltf/create-scenegraph-from-gltf.ts +97 -6
  55. package/src/gltf/gltf-extension-support.ts +214 -0
  56. package/src/index.ts +10 -1
  57. package/src/parsers/parse-gltf-animations.ts +39 -15
  58. package/src/parsers/parse-gltf-lights.ts +114 -25
  59. package/src/parsers/parse-gltf.ts +86 -19
  60. package/src/parsers/parse-pbr-material.ts +664 -69
  61. package/src/pbr/pbr-environment.ts +29 -16
  62. package/src/pbr/pbr-material.ts +13 -3
  63. package/src/webgl-to-webgpu/convert-webgl-sampler.ts +29 -29
  64. package/src/webgl-to-webgpu/convert-webgl-topology.ts +1 -15
  65. package/src/webgl-to-webgpu/gltf-webgl-constants.ts +35 -0
@@ -1,33 +1,55 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
+ import { log } from '@luma.gl/core';
4
5
  import { accessorToTypedArray } from "..//webgl-to-webgpu/convert-webgl-attribute.js";
5
6
  /** Parses glTF animation records into the runtime animation model used by `GLTFAnimator`. */
6
7
  export function parseGLTFAnimations(gltf) {
7
8
  const gltfAnimations = gltf.animations || [];
8
9
  const accessorCache1D = new Map();
9
10
  const accessorCache2D = new Map();
10
- return gltfAnimations.map((animation, index) => {
11
+ return gltfAnimations.flatMap((animation, index) => {
11
12
  const name = animation.name || `Animation-${index}`;
12
- const samplers = animation.samplers.map(({ input, interpolation = 'LINEAR', output }) => ({
13
- input: accessorToJsArray1D(gltf.accessors[input], accessorCache1D),
14
- interpolation,
15
- output: accessorToJsArray2D(gltf.accessors[output], accessorCache2D)
16
- }));
17
- const channels = animation.channels.map(({ sampler, target }) => {
13
+ const samplerCache = new Map();
14
+ const channels = animation.channels.flatMap(({ sampler, target }) => {
15
+ const path = getSupportedAnimationPath(target.path);
16
+ if (!path) {
17
+ return [];
18
+ }
18
19
  const targetNode = gltf.nodes[target.node ?? 0];
19
20
  if (!targetNode) {
20
21
  throw new Error(`Cannot find animation target ${target.node}`);
21
22
  }
23
+ let parsedSampler = samplerCache.get(sampler);
24
+ if (!parsedSampler) {
25
+ const gltfSampler = animation.samplers[sampler];
26
+ if (!gltfSampler) {
27
+ throw new Error(`Cannot find animation sampler ${sampler}`);
28
+ }
29
+ const { input, interpolation = 'LINEAR', output } = gltfSampler;
30
+ parsedSampler = {
31
+ input: accessorToJsArray1D(gltf.accessors[input], accessorCache1D),
32
+ interpolation,
33
+ output: accessorToJsArray2D(gltf.accessors[output], accessorCache2D)
34
+ };
35
+ samplerCache.set(sampler, parsedSampler);
36
+ }
22
37
  return {
23
- sampler: samplers[sampler],
38
+ sampler: parsedSampler,
24
39
  targetNodeId: targetNode.id,
25
- path: target.path
40
+ path
26
41
  };
27
42
  });
28
- return { name, channels };
43
+ return channels.length ? [{ name, channels }] : [];
29
44
  });
30
45
  }
46
+ function getSupportedAnimationPath(path) {
47
+ if (path === 'pointer') {
48
+ log.warn('KHR_animation_pointer channels are not supported and will be skipped')();
49
+ return null;
50
+ }
51
+ return path;
52
+ }
31
53
  /** Converts a scalar accessor into a cached JavaScript number array. */
32
54
  function accessorToJsArray1D(accessor, accessorCache) {
33
55
  if (accessorCache.has(accessor)) {
@@ -39,13 +61,13 @@ function accessorToJsArray1D(accessor, accessorCache) {
39
61
  accessorCache.set(accessor, result);
40
62
  return result;
41
63
  }
42
- /** Converts a vector or matrix accessor into a cached JavaScript array-of-arrays. */
64
+ /** Converts a scalar, vector, or matrix accessor into a cached JavaScript array-of-arrays. */
43
65
  function accessorToJsArray2D(accessor, accessorCache) {
44
66
  if (accessorCache.has(accessor)) {
45
67
  return accessorCache.get(accessor);
46
68
  }
47
69
  const { typedArray: array, components } = accessorToTypedArray(accessor);
48
- assert(components > 1, 'accessorToJsArray2D must have more than 1 component');
70
+ assert(components >= 1, 'accessorToJsArray2D must have at least 1 component');
49
71
  const result = [];
50
72
  // Slice array
51
73
  for (let i = 0; i < array.length; i += components) {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf-animations.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf-animations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-gltf-animations.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf-animations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf-lights.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-gltf-lights.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAmB,KAAK,EAAa,MAAM,sBAAsB,CAAC;AAE9E,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,KAAK,EAAE,CA8ChE"}
1
+ {"version":3,"file":"parse-gltf-lights.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-gltf-lights.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAmB,KAAK,EAAwB,MAAM,sBAAsB,CAAC;AAIzF,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAmDhE"}
@@ -1,4 +1,5 @@
1
1
  import { Matrix4 } from '@math.gl/core';
2
+ const GLTF_COLOR_FACTOR = 255;
2
3
  /** Parse KHR_lights_punctual extension into luma.gl light definitions */
3
4
  export function parseGLTFLights(gltf) {
4
5
  const lightDefs =
@@ -9,6 +10,8 @@ export function parseGLTFLights(gltf) {
9
10
  return [];
10
11
  }
11
12
  const lights = [];
13
+ const parentNodeById = createParentNodeMap(gltf.nodes || []);
14
+ const worldMatrixByNodeId = new Map();
12
15
  for (const node of gltf.nodes || []) {
13
16
  const lightIndex = node.light ??
14
17
  node.extensions?.KHR_lights_punctual?.light;
@@ -21,18 +24,19 @@ export function parseGLTFLights(gltf) {
21
24
  // eslint-disable-next-line no-continue
22
25
  continue;
23
26
  }
24
- const color = (gltfLight.color || [1, 1, 1]);
27
+ const color = normalizeGLTFLightColor((gltfLight.color || [1, 1, 1]));
25
28
  const intensity = gltfLight.intensity ?? 1;
26
29
  const range = gltfLight.range;
30
+ const worldMatrix = getNodeWorldMatrix(node, parentNodeById, worldMatrixByNodeId);
27
31
  switch (gltfLight.type) {
28
32
  case 'directional':
29
- lights.push(parseDirectionalLight(node, color, intensity));
33
+ lights.push(parseDirectionalLight(worldMatrix, color, intensity));
30
34
  break;
31
35
  case 'point':
32
- lights.push(parsePointLight(node, color, intensity, range));
36
+ lights.push(parsePointLight(worldMatrix, color, intensity, range));
33
37
  break;
34
38
  case 'spot':
35
- lights.push(parsePointLight(node, color, intensity, range));
39
+ lights.push(parseSpotLight(worldMatrix, color, intensity, range, gltfLight.spot));
36
40
  break;
37
41
  default:
38
42
  // Unsupported light type
@@ -41,11 +45,17 @@ export function parseGLTFLights(gltf) {
41
45
  }
42
46
  return lights;
43
47
  }
48
+ /**
49
+ * Converts glTF colors from the 0-1 spec range to luma.gl's 0-255 light convention.
50
+ */
51
+ function normalizeGLTFLightColor(color) {
52
+ return color.map(component => component * GLTF_COLOR_FACTOR);
53
+ }
44
54
  /**
45
55
  * Converts a glTF punctual light attached to a node into a point light.
46
56
  */
47
- function parsePointLight(node, color, intensity, range) {
48
- const position = getNodePosition(node);
57
+ function parsePointLight(worldMatrix, color, intensity, range) {
58
+ const position = getLightPosition(worldMatrix);
49
59
  let attenuation = [1, 0, 0];
50
60
  if (range !== undefined && range > 0) {
51
61
  attenuation = [1, 0, 1 / (range * range)];
@@ -61,8 +71,8 @@ function parsePointLight(node, color, intensity, range) {
61
71
  /**
62
72
  * Converts a glTF punctual light attached to a node into a directional light.
63
73
  */
64
- function parseDirectionalLight(node, color, intensity) {
65
- const direction = getNodeDirection(node);
74
+ function parseDirectionalLight(worldMatrix, color, intensity) {
75
+ const direction = getLightDirection(worldMatrix);
66
76
  return {
67
77
  type: 'directional',
68
78
  direction,
@@ -71,27 +81,83 @@ function parseDirectionalLight(node, color, intensity) {
71
81
  };
72
82
  }
73
83
  /**
74
- * Resolves the world-space position of a glTF node from its matrix or translation.
84
+ * Converts a glTF punctual light attached to a node into a spot light.
75
85
  */
76
- function getNodePosition(node) {
77
- if (node.matrix) {
78
- return new Matrix4(node.matrix).transformAsPoint([0, 0, 0]);
86
+ function parseSpotLight(worldMatrix, color, intensity, range, spot = {}) {
87
+ const position = getLightPosition(worldMatrix);
88
+ const direction = getLightDirection(worldMatrix);
89
+ let attenuation = [1, 0, 0];
90
+ if (range !== undefined && range > 0) {
91
+ attenuation = [1, 0, 1 / (range * range)];
79
92
  }
80
- if (node.translation) {
81
- return [...node.translation];
93
+ return {
94
+ type: 'spot',
95
+ position,
96
+ direction,
97
+ color,
98
+ intensity,
99
+ attenuation,
100
+ innerConeAngle: spot.innerConeAngle ?? 0,
101
+ outerConeAngle: spot.outerConeAngle ?? Math.PI / 4
102
+ };
103
+ }
104
+ /**
105
+ * Builds a parent lookup so punctual lights can be resolved in world space.
106
+ */
107
+ function createParentNodeMap(nodes) {
108
+ const parentNodeById = new Map();
109
+ for (const node of nodes) {
110
+ for (const childNode of node.children || []) {
111
+ parentNodeById.set(childNode.id, node);
112
+ }
113
+ }
114
+ return parentNodeById;
115
+ }
116
+ /**
117
+ * Resolves a glTF node's world matrix from its local transform and parent chain.
118
+ */
119
+ function getNodeWorldMatrix(node, parentNodeById, worldMatrixByNodeId) {
120
+ const cachedWorldMatrix = worldMatrixByNodeId.get(node.id);
121
+ if (cachedWorldMatrix) {
122
+ return cachedWorldMatrix;
82
123
  }
83
- return [0, 0, 0];
124
+ const localMatrix = getNodeLocalMatrix(node);
125
+ const parentNode = parentNodeById.get(node.id);
126
+ const worldMatrix = parentNode
127
+ ? new Matrix4(getNodeWorldMatrix(parentNode, parentNodeById, worldMatrixByNodeId)).multiplyRight(localMatrix)
128
+ : localMatrix;
129
+ worldMatrixByNodeId.set(node.id, worldMatrix);
130
+ return worldMatrix;
84
131
  }
85
132
  /**
86
- * Resolves the forward direction of a glTF node from its matrix or rotation.
133
+ * Resolves a glTF node's local matrix from its matrix or TRS components.
87
134
  */
88
- function getNodeDirection(node) {
135
+ function getNodeLocalMatrix(node) {
89
136
  if (node.matrix) {
90
- return new Matrix4(node.matrix).transformDirection([0, 0, -1]);
137
+ return new Matrix4(node.matrix);
138
+ }
139
+ const matrix = new Matrix4();
140
+ if (node.translation) {
141
+ matrix.translate(node.translation);
91
142
  }
92
143
  if (node.rotation) {
93
- return new Matrix4().fromQuaternion(node.rotation).transformDirection([0, 0, -1]);
144
+ matrix.multiplyRight(new Matrix4().fromQuaternion(node.rotation));
94
145
  }
95
- return [0, 0, -1];
146
+ if (node.scale) {
147
+ matrix.scale(node.scale);
148
+ }
149
+ return matrix;
150
+ }
151
+ /**
152
+ * Resolves the world-space position of a glTF light node.
153
+ */
154
+ function getLightPosition(worldMatrix) {
155
+ return worldMatrix.transformAsPoint([0, 0, 0]);
156
+ }
157
+ /**
158
+ * Resolves the world-space forward direction of a glTF light node.
159
+ */
160
+ function getLightDirection(worldMatrix) {
161
+ return worldMatrix.transformDirection([0, 0, -1]);
96
162
  }
97
163
  //# sourceMappingURL=parse-gltf-lights.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf-lights.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf-lights.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-gltf-lights.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf-lights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAItC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,MAAM,SAAS;IACb,oEAAoE;IACnE,IAA6C,CAAC,MAAM;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,UAAU,GACb,IAAiD,CAAC,KAAK;YACxD,IAAI,CAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,CAAC;QAC9C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,uCAAuC;YACvC,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,uCAAuC;YACvC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,uBAAuB,CACnC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAA6B,CAC3D,CAAC;QACF,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAElF,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,aAAa;gBAChB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;gBAClE,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnE,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClF,MAAM;YACR;gBACE,yBAAyB;gBACzB,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,KAA+B;IAC9D,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,iBAAiB,CAA6B,CAAC;AAC3F,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,WAAoB,EACpB,KAA+B,EAC/B,SAAiB,EACjB,KAAc;IAEd,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,WAAW,GAAuC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACrC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAA6B,CAAC;IACxE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ;QACR,KAAK;QACL,SAAS;QACT,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,WAAoB,EACpB,KAA+B,EAC/B,SAAiB;IAEjB,MAAM,SAAS,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEjD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS;QACT,KAAK;QACL,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,WAAoB,EACpB,KAA+B,EAC/B,SAAiB,EACjB,KAAc,EACd,OAA2D,EAAE;IAE7D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,WAAW,GAAuC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACrC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAA6B,CAAC;IACxE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,QAAQ;QACR,SAAS;QACT,KAAK;QACL,SAAS;QACT,WAAW;QACX,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC;QACxC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;KACnD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAA8B;IACzD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEhE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC5C,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAA2B,EAC3B,cAAkD,EAClD,mBAAyC;IAEzC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,UAAU;QAC5B,CAAC,CAAC,IAAI,OAAO,CACT,kBAAkB,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,CAAC,CACpE,CAAC,aAAa,CAAC,WAAW,CAAC;QAC9B,CAAC,CAAC,WAAW,CAAC;IAEhB,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC9C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAA2B;IACrD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;IAE7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,aAAa,CAAC,IAAI,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,WAAoB;IAC5C,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAA6B,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,WAAoB;IAC7C,OAAO,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAA6B,CAAC;AAChF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Device } from '@luma.gl/core';
2
- import { GroupNode, type ModelProps } from '@luma.gl/engine';
2
+ import { GroupNode, Material, type ModelProps } from '@luma.gl/engine';
3
3
  import { type GLTFPostprocessed } from '@loaders.gl/gltf';
4
4
  import { type PBREnvironment } from "../pbr/pbr-environment.js";
5
5
  /** Options that influence how a post-processed glTF is turned into a luma.gl scenegraph. */
@@ -22,6 +22,8 @@ export type ParseGLTFOptions = {
22
22
  export declare function parseGLTF(device: Device, gltf: GLTFPostprocessed, options?: ParseGLTFOptions): {
23
23
  /** Scene roots generated from `gltf.scenes`. */
24
24
  scenes: GroupNode[];
25
+ /** Materials aligned with the source `gltf.materials` array. */
26
+ materials: Material[];
25
27
  /** Map from glTF mesh ids to generated mesh group nodes. */
26
28
  gltfMeshIdToNodeMap: Map<string, GroupNode>;
27
29
  /** Map from glTF node indices to generated scenegraph nodes. */
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-gltf.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAyB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAA8B,SAAS,EAAa,KAAK,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,KAAK,cAAc,EAAC,kCAA+B;AAM3D,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,6BAA6B,CAAC,EAAE,cAAc,CAAC;IAC/C,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAUF;;;GAGG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,gBAAqB,GAC7B;IACD,gDAAgD;IAChD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,4DAA4D;IAC5D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,gEAAgE;IAChE,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,4DAA4D;IAC5D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC7C,CAqDA"}
1
+ {"version":3,"file":"parse-gltf.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-gltf.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAyB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAGL,SAAS,EACT,QAAQ,EAGR,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAC,KAAK,cAAc,EAAC,kCAA+B;AAM3D,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,6BAA6B,CAAC,EAAE,cAAc,CAAC;IAC/C,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAUF;;;GAGG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,gBAAqB,GAC7B;IACD,gDAAgD;IAChD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,gEAAgE;IAChE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,4DAA4D;IAC5D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,gEAAgE;IAChE,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,4DAA4D;IAC5D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC7C,CAgFA"}
@@ -1,9 +1,10 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { Geometry, GroupNode } from '@luma.gl/engine';
4
+ import { Geometry, GroupNode, MaterialFactory } from '@luma.gl/engine';
5
+ import { pbrMaterial } from '@luma.gl/shadertools';
5
6
  import { convertGLDrawModeToTopology } from "../webgl-to-webgpu/convert-webgl-topology.js";
6
- import { createGLTFModel } from "../gltf/create-gltf-model.js";
7
+ import { createGLTFMaterial, createGLTFModel } from "../gltf/create-gltf-model.js";
7
8
  import { parsePBRMaterial } from "./parse-pbr-material.js";
8
9
  const defaultOptions = {
9
10
  modelOptions: {},
@@ -18,9 +19,23 @@ const defaultOptions = {
18
19
  */
19
20
  export function parseGLTF(device, gltf, options = {}) {
20
21
  const combinedOptions = { ...defaultOptions, ...options };
22
+ const materialFactory = new MaterialFactory(device, { modules: [pbrMaterial] });
23
+ const materials = (gltf.materials || []).map((gltfMaterial, materialIndex) => createGLTFMaterial(device, {
24
+ id: getGLTFMaterialId(gltfMaterial, materialIndex),
25
+ parsedPPBRMaterial: parsePBRMaterial(device, gltfMaterial, {}, {
26
+ ...combinedOptions,
27
+ gltf,
28
+ validateAttributes: false
29
+ }),
30
+ materialFactory
31
+ }));
32
+ const gltfMaterialIdToMaterialMap = new Map();
33
+ (gltf.materials || []).forEach((gltfMaterial, materialIndex) => {
34
+ gltfMaterialIdToMaterialMap.set(gltfMaterial.id, materials[materialIndex]);
35
+ });
21
36
  const gltfMeshIdToNodeMap = new Map();
22
37
  gltf.meshes.forEach((gltfMesh, idx) => {
23
- const newMesh = createNodeForGLTFMesh(device, gltfMesh, combinedOptions);
38
+ const newMesh = createNodeForGLTFMesh(device, gltfMesh, gltf, gltfMaterialIdToMaterialMap, combinedOptions);
24
39
  gltfMeshIdToNodeMap.set(gltfMesh.id, newMesh);
25
40
  });
26
41
  const gltfNodeIndexToNodeMap = new Map();
@@ -61,7 +76,7 @@ export function parseGLTF(device, gltf, options = {}) {
61
76
  children
62
77
  });
63
78
  });
64
- return { scenes, gltfMeshIdToNodeMap, gltfNodeIdToNodeMap, gltfNodeIndexToNodeMap };
79
+ return { scenes, materials, gltfMeshIdToNodeMap, gltfNodeIdToNodeMap, gltfNodeIndexToNodeMap };
65
80
  }
66
81
  /** Creates a `GroupNode` for one glTF node transform. */
67
82
  function createNodeForGLTFNode(device, gltfNode, options) {
@@ -75,9 +90,17 @@ function createNodeForGLTFNode(device, gltfNode, options) {
75
90
  });
76
91
  }
77
92
  /** Creates a mesh group node containing one model node per glTF primitive. */
78
- function createNodeForGLTFMesh(device, gltfMesh, options) {
93
+ function createNodeForGLTFMesh(device, gltfMesh, gltf, gltfMaterialIdToMaterialMap, options) {
79
94
  const gltfPrimitives = gltfMesh.primitives || [];
80
- const primitives = gltfPrimitives.map((gltfPrimitive, i) => createNodeForGLTFPrimitive(device, gltfPrimitive, i, gltfMesh, options));
95
+ const primitives = gltfPrimitives.map((gltfPrimitive, i) => createNodeForGLTFPrimitive({
96
+ device,
97
+ gltfPrimitive,
98
+ primitiveIndex: i,
99
+ gltfMesh,
100
+ gltf,
101
+ gltfMaterialIdToMaterialMap,
102
+ options
103
+ }));
81
104
  const mesh = new GroupNode({
82
105
  id: gltfMesh.name || gltfMesh.id,
83
106
  children: primitives
@@ -85,17 +108,23 @@ function createNodeForGLTFMesh(device, gltfMesh, options) {
85
108
  return mesh;
86
109
  }
87
110
  /** Creates a renderable model node for one glTF primitive. */
88
- function createNodeForGLTFPrimitive(device, gltfPrimitive, i, gltfMesh, options) {
89
- const id = gltfPrimitive.name || `${gltfMesh.name || gltfMesh.id}-primitive-${i}`;
111
+ function createNodeForGLTFPrimitive({ device, gltfPrimitive, primitiveIndex, gltfMesh, gltf, gltfMaterialIdToMaterialMap, options }) {
112
+ const id = gltfPrimitive.name || `${gltfMesh.name || gltfMesh.id}-primitive-${primitiveIndex}`;
90
113
  const topology = convertGLDrawModeToTopology(gltfPrimitive.mode || 4);
91
114
  const vertexCount = gltfPrimitive.indices
92
115
  ? gltfPrimitive.indices.count
93
116
  : getVertexCount(gltfPrimitive.attributes);
94
117
  const geometry = createGeometry(id, gltfPrimitive, topology);
95
- const parsedPPBRMaterial = parsePBRMaterial(device, gltfPrimitive.material, geometry.attributes, options);
118
+ const parsedPPBRMaterial = parsePBRMaterial(device, gltfPrimitive.material, geometry.attributes, {
119
+ ...options,
120
+ gltf
121
+ });
96
122
  const modelNode = createGLTFModel(device, {
97
123
  id,
98
124
  geometry: createGeometry(id, gltfPrimitive, topology),
125
+ material: gltfPrimitive.material
126
+ ? gltfMaterialIdToMaterialMap.get(gltfPrimitive.material.id) || null
127
+ : null,
99
128
  parsedPPBRMaterial,
100
129
  modelOptions: options.modelOptions,
101
130
  vertexCount
@@ -123,4 +152,7 @@ function createGeometry(id, gltfPrimitive, topology) {
123
152
  attributes
124
153
  });
125
154
  }
155
+ function getGLTFMaterialId(gltfMaterial, materialIndex) {
156
+ return gltfMaterial.name || gltfMaterial.id || `material-${materialIndex}`;
157
+ }
126
158
  //# sourceMappingURL=parse-gltf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-gltf.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import type { Device, SamplerProps, TextureFormat, TypedArray } from '@luma.gl/core';
2
2
  import { Texture } from '@luma.gl/core';
3
+ import type { GLTFPostprocessed } from '@loaders.gl/gltf';
3
4
  import { type ParsedPBRMaterial } from "../pbr/pbr-material.js";
4
5
  import { type PBREnvironment } from "../pbr/pbr-environment.js";
5
6
  type GLTFTexture = {
6
7
  id: string;
8
+ index?: number;
7
9
  texture: {
8
10
  source: {
9
11
  image: any;
@@ -24,15 +26,77 @@ type GLTFPBRMetallicRoughness = {
24
26
  roughnessFactor?: number;
25
27
  };
26
28
  type GLTFPBRMaterial = {
29
+ extensions?: GLTFMaterialExtensions;
27
30
  unlit?: boolean;
28
31
  pbrMetallicRoughness?: GLTFPBRMetallicRoughness;
29
32
  normalTexture?: GLTFTexture;
30
33
  occlusionTexture?: GLTFTexture;
31
34
  emissiveTexture?: GLTFTexture;
32
35
  emissiveFactor?: [number, number, number];
33
- alphaMode?: 'MASK' | 'BLEND';
36
+ alphaMode?: 'OPAQUE' | 'MASK' | 'BLEND';
37
+ doubleSided?: boolean;
34
38
  alphaCutoff?: number;
35
39
  };
40
+ type GLTFMaterialSpecularExtension = {
41
+ specularFactor?: number;
42
+ specularTexture?: GLTFTexture;
43
+ specularColorFactor?: [number, number, number];
44
+ specularColorTexture?: GLTFTexture;
45
+ };
46
+ type GLTFMaterialIorExtension = {
47
+ ior?: number;
48
+ };
49
+ type GLTFMaterialTransmissionExtension = {
50
+ transmissionFactor?: number;
51
+ transmissionTexture?: GLTFTexture;
52
+ };
53
+ type GLTFMaterialVolumeExtension = {
54
+ thicknessFactor?: number;
55
+ thicknessTexture?: GLTFTexture;
56
+ attenuationDistance?: number;
57
+ attenuationColor?: [number, number, number];
58
+ };
59
+ type GLTFMaterialClearcoatExtension = {
60
+ clearcoatFactor?: number;
61
+ clearcoatTexture?: GLTFTexture;
62
+ clearcoatRoughnessFactor?: number;
63
+ clearcoatRoughnessTexture?: GLTFTexture;
64
+ clearcoatNormalTexture?: GLTFTexture;
65
+ };
66
+ type GLTFMaterialSheenExtension = {
67
+ sheenColorFactor?: [number, number, number];
68
+ sheenColorTexture?: GLTFTexture;
69
+ sheenRoughnessFactor?: number;
70
+ sheenRoughnessTexture?: GLTFTexture;
71
+ };
72
+ type GLTFMaterialIridescenceExtension = {
73
+ iridescenceFactor?: number;
74
+ iridescenceTexture?: GLTFTexture;
75
+ iridescenceIor?: number;
76
+ iridescenceThicknessMinimum?: number;
77
+ iridescenceThicknessMaximum?: number;
78
+ iridescenceThicknessTexture?: GLTFTexture;
79
+ };
80
+ type GLTFMaterialAnisotropyExtension = {
81
+ anisotropyStrength?: number;
82
+ anisotropyRotation?: number;
83
+ anisotropyTexture?: GLTFTexture;
84
+ };
85
+ type GLTFMaterialEmissiveStrengthExtension = {
86
+ emissiveStrength?: number;
87
+ };
88
+ type GLTFMaterialExtensions = {
89
+ KHR_materials_unlit?: Record<string, never>;
90
+ KHR_materials_specular?: GLTFMaterialSpecularExtension;
91
+ KHR_materials_ior?: GLTFMaterialIorExtension;
92
+ KHR_materials_transmission?: GLTFMaterialTransmissionExtension;
93
+ KHR_materials_volume?: GLTFMaterialVolumeExtension;
94
+ KHR_materials_clearcoat?: GLTFMaterialClearcoatExtension;
95
+ KHR_materials_sheen?: GLTFMaterialSheenExtension;
96
+ KHR_materials_iridescence?: GLTFMaterialIridescenceExtension;
97
+ KHR_materials_anisotropy?: GLTFMaterialAnisotropyExtension;
98
+ KHR_materials_emissive_strength?: GLTFMaterialEmissiveStrengthExtension;
99
+ };
36
100
  export type ParsePBRMaterialOptions = {
37
101
  /** Debug PBR shader */
38
102
  pbrDebug?: boolean;
@@ -42,6 +106,10 @@ export type ParsePBRMaterialOptions = {
42
106
  useTangents?: boolean;
43
107
  /** provide an image based (texture cube) lighting environment */
44
108
  imageBasedLightingEnvironment?: PBREnvironment;
109
+ /** parent post-processed glTF, used to resolve extension texture infos */
110
+ gltf?: GLTFPostprocessed;
111
+ /** run primitive-attribute diagnostics such as missing TEXCOORD_0 / NORMAL */
112
+ validateAttributes?: boolean;
45
113
  };
46
114
  /**
47
115
  * Parses a GLTF material definition into uniforms and parameters for the PBR shader module
@@ -1 +1 @@
1
- {"version":3,"file":"parse-pbr-material.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-pbr-material.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-pbr-material.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-pbr-material.ts"],"names":[],"mappings":"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"}