@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.
- package/dist/dist.dev.js +942 -141
- package/dist/dist.min.js +4 -4
- package/dist/gltf/create-gltf-model.d.ts +9 -1
- package/dist/gltf/create-gltf-model.d.ts.map +1 -1
- package/dist/gltf/create-gltf-model.js +58 -4
- package/dist/gltf/create-gltf-model.js.map +1 -1
- package/dist/gltf/create-scenegraph-from-gltf.d.ts +22 -1
- package/dist/gltf/create-scenegraph-from-gltf.d.ts.map +1 -1
- package/dist/gltf/create-scenegraph-from-gltf.js +63 -1
- package/dist/gltf/create-scenegraph-from-gltf.js.map +1 -1
- package/dist/gltf/gltf-extension-support.d.ts +10 -0
- package/dist/gltf/gltf-extension-support.d.ts.map +1 -0
- package/dist/gltf/gltf-extension-support.js +173 -0
- package/dist/gltf/gltf-extension-support.js.map +1 -0
- package/dist/index.cjs +899 -114
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/parse-gltf-animations.d.ts.map +1 -1
- package/dist/parsers/parse-gltf-animations.js +34 -12
- package/dist/parsers/parse-gltf-animations.js.map +1 -1
- package/dist/parsers/parse-gltf-lights.d.ts.map +1 -1
- package/dist/parsers/parse-gltf-lights.js +86 -20
- package/dist/parsers/parse-gltf-lights.js.map +1 -1
- package/dist/parsers/parse-gltf.d.ts +3 -1
- package/dist/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/parsers/parse-gltf.js +41 -9
- package/dist/parsers/parse-gltf.js.map +1 -1
- package/dist/parsers/parse-pbr-material.d.ts +69 -1
- package/dist/parsers/parse-pbr-material.d.ts.map +1 -1
- package/dist/parsers/parse-pbr-material.js +429 -42
- package/dist/parsers/parse-pbr-material.js.map +1 -1
- package/dist/pbr/pbr-environment.d.ts.map +1 -1
- package/dist/pbr/pbr-environment.js +14 -12
- package/dist/pbr/pbr-environment.js.map +1 -1
- package/dist/pbr/pbr-material.d.ts +8 -3
- package/dist/pbr/pbr-material.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts +5 -5
- package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-sampler.js +12 -12
- package/dist/webgl-to-webgpu/convert-webgl-sampler.js.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts +1 -10
- package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-topology.js +1 -15
- package/dist/webgl-to-webgpu/convert-webgl-topology.js.map +1 -1
- package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts +27 -0
- package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts.map +1 -0
- package/dist/webgl-to-webgpu/gltf-webgl-constants.js +34 -0
- package/dist/webgl-to-webgpu/gltf-webgl-constants.js.map +1 -0
- package/package.json +5 -6
- package/src/gltf/create-gltf-model.ts +113 -5
- package/src/gltf/create-scenegraph-from-gltf.ts +97 -6
- package/src/gltf/gltf-extension-support.ts +214 -0
- package/src/index.ts +10 -1
- package/src/parsers/parse-gltf-animations.ts +39 -15
- package/src/parsers/parse-gltf-lights.ts +114 -25
- package/src/parsers/parse-gltf.ts +86 -19
- package/src/parsers/parse-pbr-material.ts +664 -69
- package/src/pbr/pbr-environment.ts +29 -16
- package/src/pbr/pbr-material.ts +13 -3
- package/src/webgl-to-webgpu/convert-webgl-sampler.ts +29 -29
- package/src/webgl-to-webgpu/convert-webgl-topology.ts +1 -15
- 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.
|
|
11
|
+
return gltfAnimations.flatMap((animation, index) => {
|
|
11
12
|
const name = animation.name || `Animation-${index}`;
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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:
|
|
38
|
+
sampler: parsedSampler,
|
|
24
39
|
targetNodeId: targetNode.id,
|
|
25
|
-
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
|
|
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":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;
|
|
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;AAEpC,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AASlC,OAAO,EAAC,oBAAoB,EAAC,uDAAoD;AAEjF,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IAC7C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuC,CAAC;IACvE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEzE,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,aAAa,KAAK,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC7D,MAAM,QAAQ,GAA2B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAC,OAAO,EAAE,MAAM,EAAC,EAAE,EAAE;YACxF,MAAM,IAAI,GAAG,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,IAAI,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM,EAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,MAAM,EAAC,GAAG,WAAW,CAAC;gBAC9D,aAAa,GAAG;oBACd,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;oBAClE,aAAa;oBACb,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;iBACrE,CAAC;gBACF,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,aAAa;gBACtB,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,IAAI;aACL,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY;IAC7C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,sEAAsE,CAAC,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAyB,CAAC;AACnC,CAAC;AAED,wEAAwE;AACxE,SAAS,mBAAmB,CAC1B,QAAmC,EACnC,aAAuD;IAEvD,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;IACtC,CAAC;IAED,MAAM,EAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvE,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,mDAAmD,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8FAA8F;AAC9F,SAAS,mBAAmB,CAC1B,QAAmC,EACnC,aAAyD;IAEzD,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;IACtC,CAAC;IAED,MAAM,EAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvE,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,oDAAoD,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,cAAc;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mDAAmD;AACnD,SAAS,MAAM,CAAC,SAAkB,EAAE,OAAgB;IAClD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -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,
|
|
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(
|
|
33
|
+
lights.push(parseDirectionalLight(worldMatrix, color, intensity));
|
|
30
34
|
break;
|
|
31
35
|
case 'point':
|
|
32
|
-
lights.push(parsePointLight(
|
|
36
|
+
lights.push(parsePointLight(worldMatrix, color, intensity, range));
|
|
33
37
|
break;
|
|
34
38
|
case 'spot':
|
|
35
|
-
lights.push(
|
|
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(
|
|
48
|
-
const position =
|
|
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(
|
|
65
|
-
const direction =
|
|
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
|
-
*
|
|
84
|
+
* Converts a glTF punctual light attached to a node into a spot light.
|
|
75
85
|
*/
|
|
76
|
-
function
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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
|
|
133
|
+
* Resolves a glTF node's local matrix from its matrix or TRS components.
|
|
87
134
|
*/
|
|
88
|
-
function
|
|
135
|
+
function getNodeLocalMatrix(node) {
|
|
89
136
|
if (node.matrix) {
|
|
90
|
-
return new Matrix4(node.matrix)
|
|
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
|
-
|
|
144
|
+
matrix.multiplyRight(new Matrix4().fromQuaternion(node.rotation));
|
|
94
145
|
}
|
|
95
|
-
|
|
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":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAItC,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;
|
|
1
|
+
{"version":3,"file":"parse-gltf-lights.js","sourceRoot":"","sources":["../../src/parsers/parse-gltf-lights.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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(
|
|
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,
|
|
89
|
-
const id = gltfPrimitive.name || `${gltfMesh.name || gltfMesh.id}-primitive-${
|
|
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,
|
|
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":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,
|
|
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":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AACnF,OAAO,EAAC,OAAO,EAA4B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-pbr-material.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-pbr-material.ts"],"names":[],"mappings":"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"}
|