@luma.gl/gltf 9.2.6 → 9.3.0-alpha.11

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 (96) hide show
  1. package/dist/dist.dev.js +4064 -1967
  2. package/dist/dist.min.js +117 -46
  3. package/dist/gltf/animations/animations.d.ts +57 -5
  4. package/dist/gltf/animations/animations.d.ts.map +1 -1
  5. package/dist/gltf/animations/interpolate.d.ts +6 -3
  6. package/dist/gltf/animations/interpolate.d.ts.map +1 -1
  7. package/dist/gltf/animations/interpolate.js +47 -51
  8. package/dist/gltf/animations/interpolate.js.map +1 -1
  9. package/dist/gltf/create-gltf-model.d.ts +15 -1
  10. package/dist/gltf/create-gltf-model.d.ts.map +1 -1
  11. package/dist/gltf/create-gltf-model.js +168 -43
  12. package/dist/gltf/create-gltf-model.js.map +1 -1
  13. package/dist/gltf/create-scenegraph-from-gltf.d.ts +39 -2
  14. package/dist/gltf/create-scenegraph-from-gltf.d.ts.map +1 -1
  15. package/dist/gltf/create-scenegraph-from-gltf.js +76 -6
  16. package/dist/gltf/create-scenegraph-from-gltf.js.map +1 -1
  17. package/dist/gltf/gltf-animator.d.ts +37 -0
  18. package/dist/gltf/gltf-animator.d.ts.map +1 -1
  19. package/dist/gltf/gltf-animator.js +112 -17
  20. package/dist/gltf/gltf-animator.js.map +1 -1
  21. package/dist/gltf/gltf-extension-support.d.ts +13 -0
  22. package/dist/gltf/gltf-extension-support.d.ts.map +1 -0
  23. package/dist/gltf/gltf-extension-support.js +178 -0
  24. package/dist/gltf/gltf-extension-support.js.map +1 -0
  25. package/dist/index.cjs +1806 -298
  26. package/dist/index.cjs.map +4 -4
  27. package/dist/index.d.ts +3 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/parsers/parse-gltf-animations.d.ts +1 -0
  32. package/dist/parsers/parse-gltf-animations.d.ts.map +1 -1
  33. package/dist/parsers/parse-gltf-animations.js +373 -27
  34. package/dist/parsers/parse-gltf-animations.js.map +1 -1
  35. package/dist/parsers/parse-gltf-lights.d.ts +5 -0
  36. package/dist/parsers/parse-gltf-lights.d.ts.map +1 -0
  37. package/dist/parsers/parse-gltf-lights.js +163 -0
  38. package/dist/parsers/parse-gltf-lights.js.map +1 -0
  39. package/dist/parsers/parse-gltf.d.ts +19 -2
  40. package/dist/parsers/parse-gltf.d.ts.map +1 -1
  41. package/dist/parsers/parse-gltf.js +120 -67
  42. package/dist/parsers/parse-gltf.js.map +1 -1
  43. package/dist/parsers/parse-pbr-material.d.ts +115 -2
  44. package/dist/parsers/parse-pbr-material.d.ts.map +1 -1
  45. package/dist/parsers/parse-pbr-material.js +602 -53
  46. package/dist/parsers/parse-pbr-material.js.map +1 -1
  47. package/dist/pbr/pbr-environment.d.ts +10 -4
  48. package/dist/pbr/pbr-environment.d.ts.map +1 -1
  49. package/dist/pbr/pbr-environment.js +18 -15
  50. package/dist/pbr/pbr-environment.js.map +1 -1
  51. package/dist/pbr/pbr-material.d.ts +13 -3
  52. package/dist/pbr/pbr-material.d.ts.map +1 -1
  53. package/dist/pbr/texture-transform.d.ts +24 -0
  54. package/dist/pbr/texture-transform.d.ts.map +1 -0
  55. package/dist/pbr/texture-transform.js +98 -0
  56. package/dist/pbr/texture-transform.js.map +1 -0
  57. package/dist/webgl-to-webgpu/convert-webgl-attribute.d.ts +12 -1
  58. package/dist/webgl-to-webgpu/convert-webgl-attribute.d.ts.map +1 -1
  59. package/dist/webgl-to-webgpu/convert-webgl-attribute.js +3 -0
  60. package/dist/webgl-to-webgpu/convert-webgl-attribute.js.map +1 -1
  61. package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts +11 -5
  62. package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts.map +1 -1
  63. package/dist/webgl-to-webgpu/convert-webgl-sampler.js +16 -12
  64. package/dist/webgl-to-webgpu/convert-webgl-sampler.js.map +1 -1
  65. package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts +2 -9
  66. package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts.map +1 -1
  67. package/dist/webgl-to-webgpu/convert-webgl-topology.js +3 -15
  68. package/dist/webgl-to-webgpu/convert-webgl-topology.js.map +1 -1
  69. package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts +27 -0
  70. package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts.map +1 -0
  71. package/dist/webgl-to-webgpu/gltf-webgl-constants.js +34 -0
  72. package/dist/webgl-to-webgpu/gltf-webgl-constants.js.map +1 -0
  73. package/package.json +8 -9
  74. package/src/gltf/animations/animations.ts +88 -6
  75. package/src/gltf/animations/interpolate.ts +84 -96
  76. package/src/gltf/create-gltf-model.ts +233 -48
  77. package/src/gltf/create-scenegraph-from-gltf.ts +134 -11
  78. package/src/gltf/gltf-animator.ts +198 -20
  79. package/src/gltf/gltf-extension-support.ts +226 -0
  80. package/src/index.ts +11 -2
  81. package/src/parsers/parse-gltf-animations.ts +533 -32
  82. package/src/parsers/parse-gltf-lights.ts +218 -0
  83. package/src/parsers/parse-gltf.ts +189 -96
  84. package/src/parsers/parse-pbr-material.ts +974 -79
  85. package/src/pbr/pbr-environment.ts +44 -21
  86. package/src/pbr/pbr-material.ts +18 -3
  87. package/src/pbr/texture-transform.ts +263 -0
  88. package/src/webgl-to-webgpu/convert-webgl-attribute.ts +12 -1
  89. package/src/webgl-to-webgpu/convert-webgl-sampler.ts +38 -29
  90. package/src/webgl-to-webgpu/convert-webgl-topology.ts +3 -15
  91. package/src/webgl-to-webgpu/gltf-webgl-constants.ts +35 -0
  92. package/dist/utils/deep-copy.d.ts +0 -3
  93. package/dist/utils/deep-copy.d.ts.map +0 -1
  94. package/dist/utils/deep-copy.js +0 -21
  95. package/dist/utils/deep-copy.js.map +0 -1
  96. package/src/utils/deep-copy.ts +0 -22
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  export { loadPBREnvironment, type PBREnvironment } from "./pbr/pbr-environment.js";
2
2
  export { type ParsedPBRMaterial } from "./pbr/pbr-material.js";
3
3
  export { parsePBRMaterial, type ParsePBRMaterialOptions } from "./parsers/parse-pbr-material.js";
4
- export {} from "./pbr/pbr-environment.js";
5
- export { createScenegraphsFromGLTF } from "./gltf/create-scenegraph-from-gltf.js";
4
+ export { parseGLTFLights } from "./parsers/parse-gltf-lights.js";
5
+ export { createScenegraphsFromGLTF, type GLTFScenegraphBounds, type GLTFScenegraphs } from "./gltf/create-scenegraph-from-gltf.js";
6
+ export { getGLTFExtensionSupport, type GLTFExtensionSupport, type GLTFExtensionSupportLevel } from "./gltf/gltf-extension-support.js";
6
7
  export { GLTFAnimator } from "./gltf/gltf-animator.js";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAE,KAAK,cAAc,EAAC,iCAA8B;AAC9E,OAAO,EAAC,KAAK,iBAAiB,EAAC,8BAA2B;AAC1D,OAAO,EAAC,gBAAgB,EAAE,KAAK,uBAAuB,EAAC,wCAAqC;AAC5F,OAAO,EAAE,iCAA8B;AAGvC,OAAO,EAAC,yBAAyB,EAAC,8CAA2C;AAC7E,OAAO,EAAC,YAAY,EAAC,gCAA6B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAE,KAAK,cAAc,EAAC,iCAA8B;AAC9E,OAAO,EAAC,KAAK,iBAAiB,EAAC,8BAA2B;AAC1D,OAAO,EAAC,gBAAgB,EAAE,KAAK,uBAAuB,EAAC,wCAAqC;AAC5F,OAAO,EAAC,eAAe,EAAC,uCAAoC;AAG5D,OAAO,EACL,yBAAyB,EACzB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACrB,8CAA2C;AAC5C,OAAO,EACL,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC/B,yCAAsC;AACvC,OAAO,EAAC,YAAY,EAAC,gCAA6B"}
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  // luma.gl, MIT license
2
2
  export { loadPBREnvironment } from "./pbr/pbr-environment.js";
3
3
  export { parsePBRMaterial } from "./parsers/parse-pbr-material.js";
4
+ export { parseGLTFLights } from "./parsers/parse-gltf-lights.js";
4
5
  // glTF Scenegraph Instantiator
5
6
  export { createScenegraphsFromGLTF } from "./gltf/create-scenegraph-from-gltf.js";
7
+ export { getGLTFExtensionSupport } from "./gltf/gltf-extension-support.js";
6
8
  export { GLTFAnimator } from "./gltf/gltf-animator.js";
7
9
  //# 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,uBAAuB;AAEvB,OAAO,EAAC,kBAAkB,EAAsB,iCAA8B;AAE9E,OAAO,EAAC,gBAAgB,EAA+B,wCAAqC;AAG5F,+BAA+B;AAC/B,OAAO,EAAC,yBAAyB,EAAC,8CAA2C;AAC7E,OAAO,EAAC,YAAY,EAAC,gCAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AAEvB,OAAO,EAAC,kBAAkB,EAAsB,iCAA8B;AAE9E,OAAO,EAAC,gBAAgB,EAA+B,wCAAqC;AAC5F,OAAO,EAAC,eAAe,EAAC,uCAAoC;AAE5D,+BAA+B;AAC/B,OAAO,EACL,yBAAyB,EAG1B,8CAA2C;AAC5C,OAAO,EACL,uBAAuB,EAGxB,yCAAsC;AACvC,OAAO,EAAC,YAAY,EAAC,gCAA6B"}
@@ -1,4 +1,5 @@
1
1
  import { type GLTFPostprocessed } from '@loaders.gl/gltf';
2
2
  import { type GLTFAnimation } from "../gltf/animations/animations.js";
3
+ /** Parses glTF animation records into the runtime animation model used by `GLTFAnimator`. */
3
4
  export declare function parseGLTFAnimations(gltf: GLTFPostprocessed): GLTFAnimation[];
4
5
  //# sourceMappingURL=parse-gltf-animations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf-animations.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-gltf-animations.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACxF,OAAO,EACL,KAAK,aAAa,EAGnB,yCAAsC;AAIvC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAkB5E"}
1
+ {"version":3,"file":"parse-gltf-animations.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-gltf-animations.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiC,KAAK,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAEL,KAAK,aAAa,EAOnB,yCAAsC;AAcvC,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,EAAE,CA8B5E"}
@@ -1,40 +1,386 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { accessorToTypedArray } from "..//webgl-to-webgpu/convert-webgl-attribute.js";
4
+ import { log } from '@luma.gl/core';
5
+ import { resolveTextureTransform, resolveTextureTransformSlot } from "../pbr/texture-transform.js";
6
+ import { getRegisteredGLTFExtensionSupport } from "../gltf/gltf-extension-support.js";
7
+ import { accessorToTypedArray } from "../webgl-to-webgpu/convert-webgl-attribute.js";
8
+ /** Parses glTF animation records into the runtime animation model used by `GLTFAnimator`. */
5
9
  export function parseGLTFAnimations(gltf) {
6
10
  const gltfAnimations = gltf.animations || [];
7
- return gltfAnimations.map((animation, index) => {
11
+ const accessorCache1D = new Map();
12
+ const accessorCache2D = new Map();
13
+ return gltfAnimations.flatMap((animation, index) => {
8
14
  const name = animation.name || `Animation-${index}`;
9
- const samplers = animation.samplers.map(({ input, interpolation = 'LINEAR', output }) => ({
10
- input: accessorToJsArray(gltf.accessors[input]),
11
- interpolation,
12
- output: accessorToJsArray(gltf.accessors[output])
13
- }));
14
- const channels = animation.channels.map(({ sampler, target }) => ({
15
- sampler: samplers[sampler],
16
- target: gltf.nodes[target.node ?? 0],
17
- path: target.path
18
- }));
19
- return { name, channels };
15
+ const samplerCache = new Map();
16
+ const channels = animation.channels.flatMap(({ sampler, target }) => {
17
+ let parsedSampler = samplerCache.get(sampler);
18
+ if (!parsedSampler) {
19
+ const gltfSampler = animation.samplers[sampler];
20
+ if (!gltfSampler) {
21
+ throw new Error(`Cannot find animation sampler ${sampler}`);
22
+ }
23
+ const { input, interpolation = 'LINEAR', output } = gltfSampler;
24
+ parsedSampler = {
25
+ input: accessorToJsArray1D(gltf.accessors[input], accessorCache1D),
26
+ interpolation,
27
+ output: accessorToJsArray2D(gltf.accessors[output], accessorCache2D)
28
+ };
29
+ samplerCache.set(sampler, parsedSampler);
30
+ }
31
+ const parsedChannel = parseAnimationChannel(gltf, target, parsedSampler);
32
+ return parsedChannel ? [parsedChannel] : [];
33
+ });
34
+ return channels.length ? [{ name, channels }] : [];
20
35
  });
21
36
  }
22
- //
23
- function accessorToJsArray(accessor) {
24
- if (!accessor._animation) {
25
- const { typedArray: array, components } = accessorToTypedArray(accessor);
26
- if (components === 1) {
27
- accessor._animation = Array.from(array);
37
+ function parseAnimationChannel(gltf, target, sampler) {
38
+ if (target.path === 'pointer') {
39
+ return parseAnimationPointerChannel(gltf, target, sampler);
40
+ }
41
+ const path = getNodeAnimationPath(target.path);
42
+ if (!path) {
43
+ return null;
44
+ }
45
+ const targetNode = gltf.nodes[target.node ?? 0];
46
+ if (!targetNode) {
47
+ throw new Error(`Cannot find animation target ${target.node}`);
48
+ }
49
+ return {
50
+ type: 'node',
51
+ sampler,
52
+ targetNodeId: targetNode.id,
53
+ path
54
+ };
55
+ }
56
+ function parseAnimationPointerChannel(gltf, target, sampler) {
57
+ const pointer = target.extensions?.['KHR_animation_pointer']?.pointer;
58
+ if (typeof pointer !== 'string' || !pointer.startsWith('/')) {
59
+ log.warn('KHR_animation_pointer channel is missing a valid JSON pointer and will be skipped')();
60
+ return null;
61
+ }
62
+ const pointerSegments = splitJsonPointer(pointer);
63
+ switch (pointerSegments[0]) {
64
+ case 'nodes':
65
+ return parseNodePointerAnimationChannel(gltf, pointerSegments, sampler, pointer);
66
+ case 'materials':
67
+ return parseMaterialPointerAnimationChannel(gltf, pointerSegments, sampler, pointer);
68
+ default:
69
+ warnUnsupportedAnimationPointer(pointer, `top-level target "${pointerSegments[0]}" has no runtime animation mapping`);
70
+ return null;
71
+ }
72
+ }
73
+ function parseNodePointerAnimationChannel(gltf, pointerSegments, sampler, pointer) {
74
+ if (pointerSegments.length !== 3) {
75
+ warnUnsupportedAnimationPointer(pointer, 'node pointers must use /nodes/{index}/{translation|rotation|scale|weights}');
76
+ return null;
77
+ }
78
+ const nodeIndex = Number(pointerSegments[1]);
79
+ const targetNode = gltf.nodes[nodeIndex];
80
+ if (!Number.isInteger(nodeIndex) || !targetNode) {
81
+ log.warn(`KHR_animation_pointer target ${pointer} references a missing node and will be skipped`)();
82
+ return null;
83
+ }
84
+ const path = getNodeAnimationPath(pointerSegments[2]);
85
+ if (!path) {
86
+ warnUnsupportedAnimationPointer(pointer, `node property "${pointerSegments[2]}" has no runtime animation mapping`);
87
+ return null;
88
+ }
89
+ if (path === 'weights') {
90
+ log.warn(`KHR_animation_pointer target ${pointer} will be skipped because morph weights are not implemented in GLTFAnimator`)();
91
+ return null;
92
+ }
93
+ return {
94
+ type: 'node',
95
+ sampler,
96
+ targetNodeId: targetNode.id,
97
+ path
98
+ };
99
+ }
100
+ function parseMaterialPointerAnimationChannel(gltf, pointerSegments, sampler, pointer) {
101
+ if (pointerSegments.length < 3) {
102
+ warnUnsupportedAnimationPointer(pointer, 'material pointers must include a material index and target property path');
103
+ return null;
104
+ }
105
+ const materialIndex = Number(pointerSegments[1]);
106
+ const material = gltf.materials[materialIndex];
107
+ if (!Number.isInteger(materialIndex) || !material) {
108
+ log.warn(`KHR_animation_pointer target ${pointer} references a missing material and will be skipped`)();
109
+ return null;
110
+ }
111
+ const materialTarget = resolveMaterialAnimationTarget(material, pointerSegments.slice(2));
112
+ if ('reason' in materialTarget) {
113
+ warnUnsupportedAnimationPointer(pointer, materialTarget.reason);
114
+ return null;
115
+ }
116
+ return {
117
+ sampler,
118
+ pointer,
119
+ targetMaterialIndex: materialIndex,
120
+ ...materialTarget
121
+ };
122
+ }
123
+ function getNodeAnimationPath(path) {
124
+ switch (path) {
125
+ case 'translation':
126
+ case 'rotation':
127
+ case 'scale':
128
+ case 'weights':
129
+ return path;
130
+ default:
131
+ return null;
132
+ }
133
+ }
134
+ function resolveMaterialAnimationTarget(material, pointerSegments) {
135
+ const textureTransformTarget = resolveTextureTransformAnimationTarget(material, pointerSegments);
136
+ if (!('reason' in textureTransformTarget)) {
137
+ return textureTransformTarget;
138
+ }
139
+ if (textureTransformTarget.reason !== 'not-a-texture-transform-target') {
140
+ return textureTransformTarget;
141
+ }
142
+ const pointerPath = pointerSegments.join('/');
143
+ switch (pointerPath) {
144
+ case 'pbrMetallicRoughness/baseColorFactor':
145
+ return material['pbrMetallicRoughness']
146
+ ? { type: 'material', property: 'baseColorFactor' }
147
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
148
+ case 'pbrMetallicRoughness/metallicFactor':
149
+ return material['pbrMetallicRoughness']
150
+ ? { type: 'material', property: 'metallicRoughnessValues', component: 0 }
151
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
152
+ case 'pbrMetallicRoughness/roughnessFactor':
153
+ return material['pbrMetallicRoughness']
154
+ ? { type: 'material', property: 'metallicRoughnessValues', component: 1 }
155
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
156
+ case 'normalTexture/scale':
157
+ return material['normalTexture']
158
+ ? { type: 'material', property: 'normalScale' }
159
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
160
+ case 'occlusionTexture/strength':
161
+ return material['occlusionTexture']
162
+ ? { type: 'material', property: 'occlusionStrength' }
163
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
164
+ case 'emissiveFactor':
165
+ return { type: 'material', property: 'emissiveFactor' };
166
+ case 'alphaCutoff':
167
+ return { type: 'material', property: 'alphaCutoff' };
168
+ case 'extensions/KHR_materials_specular/specularFactor':
169
+ return material['extensions']?.['KHR_materials_specular']
170
+ ? { type: 'material', property: 'specularIntensityFactor' }
171
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
172
+ case 'extensions/KHR_materials_specular/specularColorFactor':
173
+ return material['extensions']?.['KHR_materials_specular']
174
+ ? { type: 'material', property: 'specularColorFactor' }
175
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
176
+ case 'extensions/KHR_materials_ior/ior':
177
+ return material['extensions']?.['KHR_materials_ior']
178
+ ? { type: 'material', property: 'ior' }
179
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
180
+ case 'extensions/KHR_materials_transmission/transmissionFactor':
181
+ return material['extensions']?.['KHR_materials_transmission']
182
+ ? { type: 'material', property: 'transmissionFactor' }
183
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
184
+ case 'extensions/KHR_materials_volume/thicknessFactor':
185
+ return material['extensions']?.['KHR_materials_volume']
186
+ ? { type: 'material', property: 'thicknessFactor' }
187
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
188
+ case 'extensions/KHR_materials_volume/attenuationDistance':
189
+ return material['extensions']?.['KHR_materials_volume']
190
+ ? { type: 'material', property: 'attenuationDistance' }
191
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
192
+ case 'extensions/KHR_materials_volume/attenuationColor':
193
+ return material['extensions']?.['KHR_materials_volume']
194
+ ? { type: 'material', property: 'attenuationColor' }
195
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
196
+ case 'extensions/KHR_materials_clearcoat/clearcoatFactor':
197
+ return material['extensions']?.['KHR_materials_clearcoat']
198
+ ? { type: 'material', property: 'clearcoatFactor' }
199
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
200
+ case 'extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor':
201
+ return material['extensions']?.['KHR_materials_clearcoat']
202
+ ? { type: 'material', property: 'clearcoatRoughnessFactor' }
203
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
204
+ case 'extensions/KHR_materials_sheen/sheenColorFactor':
205
+ return material['extensions']?.['KHR_materials_sheen']
206
+ ? { type: 'material', property: 'sheenColorFactor' }
207
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
208
+ case 'extensions/KHR_materials_sheen/sheenRoughnessFactor':
209
+ return material['extensions']?.['KHR_materials_sheen']
210
+ ? { type: 'material', property: 'sheenRoughnessFactor' }
211
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
212
+ case 'extensions/KHR_materials_iridescence/iridescenceFactor':
213
+ return material['extensions']?.['KHR_materials_iridescence']
214
+ ? { type: 'material', property: 'iridescenceFactor' }
215
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
216
+ case 'extensions/KHR_materials_iridescence/iridescenceIor':
217
+ return material['extensions']?.['KHR_materials_iridescence']
218
+ ? { type: 'material', property: 'iridescenceIor' }
219
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
220
+ case 'extensions/KHR_materials_iridescence/iridescenceThicknessMinimum':
221
+ return material['extensions']?.['KHR_materials_iridescence']
222
+ ? { type: 'material', property: 'iridescenceThicknessRange', component: 0 }
223
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
224
+ case 'extensions/KHR_materials_iridescence/iridescenceThicknessMaximum':
225
+ return material['extensions']?.['KHR_materials_iridescence']
226
+ ? { type: 'material', property: 'iridescenceThicknessRange', component: 1 }
227
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
228
+ case 'extensions/KHR_materials_anisotropy/anisotropyStrength':
229
+ return material['extensions']?.['KHR_materials_anisotropy']
230
+ ? { type: 'material', property: 'anisotropyStrength' }
231
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
232
+ case 'extensions/KHR_materials_anisotropy/anisotropyRotation':
233
+ return material['extensions']?.['KHR_materials_anisotropy']
234
+ ? { type: 'material', property: 'anisotropyRotation' }
235
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
236
+ case 'extensions/KHR_materials_emissive_strength/emissiveStrength':
237
+ return material['extensions']?.['KHR_materials_emissive_strength']
238
+ ? { type: 'material', property: 'emissiveStrength' }
239
+ : { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
240
+ default:
241
+ return { reason: getUnsupportedMaterialPointerReason(pointerSegments) };
242
+ }
243
+ }
244
+ function resolveTextureTransformAnimationTarget(material, pointerSegments) {
245
+ const extensionIndex = pointerSegments.lastIndexOf('extensions');
246
+ if (extensionIndex < 0 ||
247
+ pointerSegments[extensionIndex + 1] !== 'KHR_texture_transform' ||
248
+ extensionIndex < 1) {
249
+ return { reason: 'not-a-texture-transform-target' };
250
+ }
251
+ const textureSlotDefinition = resolveTextureTransformSlot(pointerSegments.slice(0, extensionIndex));
252
+ if (!textureSlotDefinition) {
253
+ return {
254
+ reason: getUnsupportedTextureTransformSlotReason(pointerSegments.slice(0, extensionIndex))
255
+ };
256
+ }
257
+ const textureInfo = getNestedMaterialValue(material, textureSlotDefinition.pathSegments);
258
+ if (!textureInfo) {
259
+ return {
260
+ reason: `texture-transform target "${pointerSegments
261
+ .slice(0, extensionIndex)
262
+ .join('/')}" does not exist on the referenced material`
263
+ };
264
+ }
265
+ const textureTransformPath = pointerSegments[extensionIndex + 2];
266
+ if (textureTransformPath === 'texCoord') {
267
+ return {
268
+ reason: 'animated KHR_texture_transform.texCoord is unsupported because texCoord selection is structural, not a runtime float/vector update'
269
+ };
270
+ }
271
+ if (textureTransformPath !== 'offset' &&
272
+ textureTransformPath !== 'rotation' &&
273
+ textureTransformPath !== 'scale') {
274
+ return {
275
+ reason: `KHR_texture_transform property "${textureTransformPath}" is not animatable; supported properties are offset, rotation, and scale`
276
+ };
277
+ }
278
+ const componentSegment = pointerSegments[extensionIndex + 3];
279
+ if (pointerSegments.length > extensionIndex + 4) {
280
+ return {
281
+ reason: `KHR_texture_transform.${textureTransformPath} does not support nested property paths`
282
+ };
283
+ }
284
+ let component;
285
+ if (componentSegment !== undefined) {
286
+ component = Number(componentSegment);
287
+ if (textureTransformPath === 'rotation') {
288
+ return {
289
+ reason: 'KHR_texture_transform.rotation does not support component indices'
290
+ };
28
291
  }
29
- else {
30
- // Slice array
31
- const slicedArray = [];
32
- for (let i = 0; i < array.length; i += components) {
33
- slicedArray.push(Array.from(array.slice(i, i + components)));
34
- }
35
- accessor._animation = slicedArray;
292
+ if (!Number.isInteger(component) || component < 0 || component > 1) {
293
+ return {
294
+ reason: `KHR_texture_transform.${textureTransformPath} component index "${componentSegment}" is invalid; only 0 and 1 are supported`
295
+ };
296
+ }
297
+ }
298
+ return {
299
+ type: 'textureTransform',
300
+ textureSlot: textureSlotDefinition.slot,
301
+ path: textureTransformPath,
302
+ component,
303
+ baseTransform: resolveTextureTransform(textureInfo)
304
+ };
305
+ }
306
+ function getNestedMaterialValue(material, pathSegments) {
307
+ let value = material;
308
+ for (const pathSegment of pathSegments) {
309
+ value = value?.[pathSegment];
310
+ if (!value) {
311
+ return null;
312
+ }
313
+ }
314
+ return value;
315
+ }
316
+ function splitJsonPointer(pointer) {
317
+ return pointer
318
+ .slice(1)
319
+ .split('/')
320
+ .map(segment => segment.replace(/~1/g, '/').replace(/~0/g, '~'));
321
+ }
322
+ function getUnsupportedMaterialPointerReason(pointerSegments) {
323
+ const extensionName = getPointerExtensionName(pointerSegments);
324
+ if (extensionName) {
325
+ const extensionSupport = getRegisteredGLTFExtensionSupport(extensionName);
326
+ if (extensionSupport?.supportLevel === 'none') {
327
+ return `${extensionName} is referenced by this pointer, but ${extensionSupport.comment
328
+ .charAt(0)
329
+ .toLowerCase()}${extensionSupport.comment.slice(1)}`;
36
330
  }
37
331
  }
38
- return accessor._animation;
332
+ return `no runtime target exists for material property "${pointerSegments.join('/')}"`;
333
+ }
334
+ function getUnsupportedTextureTransformSlotReason(pointerSegments) {
335
+ const extensionName = getPointerExtensionName(pointerSegments);
336
+ if (extensionName) {
337
+ const extensionSupport = getRegisteredGLTFExtensionSupport(extensionName);
338
+ if (extensionSupport?.supportLevel === 'none') {
339
+ return `${extensionName} is referenced by this pointer, but ${extensionSupport.comment
340
+ .charAt(0)
341
+ .toLowerCase()}${extensionSupport.comment.slice(1)}`;
342
+ }
343
+ }
344
+ return `texture-transform target "${pointerSegments.join('/')}" has no runtime texture-slot mapping`;
345
+ }
346
+ function getPointerExtensionName(pointerSegments) {
347
+ const extensionIndex = pointerSegments.indexOf('extensions');
348
+ const extensionName = pointerSegments[extensionIndex + 1];
349
+ return extensionIndex >= 0 && extensionName ? extensionName : null;
350
+ }
351
+ function warnUnsupportedAnimationPointer(pointer, reason) {
352
+ log.warn(`KHR_animation_pointer target ${pointer} will be skipped because ${reason}`)();
353
+ }
354
+ /** Converts a scalar accessor into a cached JavaScript number array. */
355
+ function accessorToJsArray1D(accessor, accessorCache) {
356
+ if (accessorCache.has(accessor)) {
357
+ return accessorCache.get(accessor);
358
+ }
359
+ const { typedArray: array, components } = accessorToTypedArray(accessor);
360
+ assert(components === 1, 'accessorToJsArray1D must have exactly 1 component');
361
+ const result = Array.from(array);
362
+ accessorCache.set(accessor, result);
363
+ return result;
364
+ }
365
+ /** Converts a scalar, vector, or matrix accessor into a cached JavaScript array-of-arrays. */
366
+ function accessorToJsArray2D(accessor, accessorCache) {
367
+ if (accessorCache.has(accessor)) {
368
+ return accessorCache.get(accessor);
369
+ }
370
+ const { typedArray: array, components } = accessorToTypedArray(accessor);
371
+ assert(components >= 1, 'accessorToJsArray2D must have at least 1 component');
372
+ const result = [];
373
+ // Slice array
374
+ for (let i = 0; i < array.length; i += components) {
375
+ result.push(Array.from(array.slice(i, i + components)));
376
+ }
377
+ accessorCache.set(accessor, result);
378
+ return result;
379
+ }
380
+ /** Throws when the supplied condition is false. */
381
+ function assert(condition, message) {
382
+ if (!condition) {
383
+ throw new Error(message);
384
+ }
39
385
  }
40
386
  //# sourceMappingURL=parse-gltf-animations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-gltf-animations.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf-animations.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AASpC,OAAO,EAAC,oBAAoB,EAAC,uDAAoD;AAEjF,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IAC7C,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,aAAa,KAAK,EAAE,CAAC;QACpD,MAAM,QAAQ,GAA2B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAC7D,CAAC,EAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,MAAM,EAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAa;YAC3D,aAAa;YACb,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAClD,CAAC,CACH,CAAC;QACF,MAAM,QAAQ,GAA2B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,EAAC,EAAE,EAAE,CAAC,CAAC;YACtF,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YACpC,IAAI,EAAE,MAAM,CAAC,IAAoC;SAClD,CAAC,CAAC,CAAC;QACJ,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,EAAE;AAEF,SAAS,iBAAiB,CACxB,QAA0E;IAE1E,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,MAAM,EAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEvE,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,cAAc;YACd,MAAM,WAAW,GAAe,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;gBAClD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,UAAU,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"parse-gltf-animations.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf-animations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { GLTFPostprocessed } from '@loaders.gl/gltf';
2
+ import type { Light } from '@luma.gl/shadertools';
3
+ /** Parse KHR_lights_punctual extension into luma.gl light definitions */
4
+ export declare function parseGLTFLights(gltf: GLTFPostprocessed): Light[];
5
+ //# sourceMappingURL=parse-gltf-lights.d.ts.map
@@ -0,0 +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,EAAwB,MAAM,sBAAsB,CAAC;AAIzF,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAmDhE"}