@yali-engine/gltf 0.0.0-stage → 0.4.0
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/gltf.d.ts +166 -0
- package/dist/gltf.js +296 -0
- package/dist/gltf.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lods.d.ts +37 -0
- package/dist/lods.js +44 -0
- package/dist/lods.js.map +1 -0
- package/dist/parse.d.ts +230 -0
- package/dist/parse.js +541 -0
- package/dist/parse.js.map +1 -0
- package/dist/textures.d.ts +42 -0
- package/dist/textures.js +132 -0
- package/dist/textures.js.map +1 -0
- package/dist/write.d.ts +55 -0
- package/dist/write.js +256 -0
- package/dist/write.js.map +1 -0
- package/package.json +31 -3
- package/README.md +0 -3
package/dist/textures.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { decodeImagePixels, decodeKtx2, mergeOrm, rgbaTexture, variantPath } from '@yali-engine/ktx2';
|
|
2
|
+
const KTX2 = /ktx2/i;
|
|
3
|
+
const isKtx2Url = (url) => /\.ktx2$/i.test(new URL(url).pathname);
|
|
4
|
+
/**
|
|
5
|
+
* The variant file to fetch for an external KTX2: this device's family, and of the sizes
|
|
6
|
+
* `yali convert` wrote, the smallest that covers the store's size class (the full one when
|
|
7
|
+
* none is listed): a T0 phone fetches `rock.astc.512.ktx2`, not the 2048² file.
|
|
8
|
+
*/
|
|
9
|
+
export function sizedVariant(im, family, maxSize) {
|
|
10
|
+
const path = variantPath(im.url, family);
|
|
11
|
+
const sizes = im.sizes ?? [];
|
|
12
|
+
const pick = sizes.find((s) => s >= maxSize);
|
|
13
|
+
return pick !== undefined && pick !== sizes[sizes.length - 1] ? path.replace(/\.ktx2(\?|$)/, `.${pick}.ktx2$1`) : path;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Decodes the textures `scene`'s materials use (ADR-0066), in the decode worker: PNG / JPEG /
|
|
17
|
+
* WebP to RGBA8 squares with sRGB-correct mips, KTX2 GPU-native files as they are when they
|
|
18
|
+
* match the store's family. glTF's occlusion and metallic-roughness textures become one ORM
|
|
19
|
+
* texture. Images are fetched (`url`) or read from the file once each, whatever shares them.
|
|
20
|
+
*/
|
|
21
|
+
export async function decodeGltfTextures(scene, o, warnings) {
|
|
22
|
+
const textures = [];
|
|
23
|
+
const bytesOf = new Map();
|
|
24
|
+
const pixelsOf = new Map();
|
|
25
|
+
const made = new Map();
|
|
26
|
+
const bytes = (i) => {
|
|
27
|
+
let p = bytesOf.get(i);
|
|
28
|
+
if (!p) {
|
|
29
|
+
const im = scene.images[i];
|
|
30
|
+
p = !im
|
|
31
|
+
? Promise.resolve(null)
|
|
32
|
+
: im.bytes
|
|
33
|
+
? Promise.resolve(im.bytes)
|
|
34
|
+
: // An external `<name>.ktx2` (what `yali convert` writes) is a set of variant files:
|
|
35
|
+
// fetch the one this device samples (ADR-0060).
|
|
36
|
+
fetch(isKtx2Url(im.url) ? sizedVariant(im, o.family, o.maxSize) : im.url).then(async (r) => (r.ok ? new Uint8Array(await r.arrayBuffer()) : (warnings.push(`Image ${i} (${im.url}) could not be fetched: HTTP ${r.status}.`), null)), (e) => (warnings.push(`Image ${i} (${im.url}) could not be fetched: ${e instanceof Error ? e.message : String(e)}.`), null));
|
|
37
|
+
bytesOf.set(i, p);
|
|
38
|
+
}
|
|
39
|
+
return p;
|
|
40
|
+
};
|
|
41
|
+
const isKtx2 = (i) => KTX2.test(scene.images[i]?.mimeType ?? '') || /\.ktx2(\?|$)/i.test(scene.images[i]?.url ?? '');
|
|
42
|
+
const pixels = (i) => {
|
|
43
|
+
let p = pixelsOf.get(i);
|
|
44
|
+
if (!p) {
|
|
45
|
+
p = bytes(i).then(async (b) => {
|
|
46
|
+
if (!b)
|
|
47
|
+
return null;
|
|
48
|
+
try {
|
|
49
|
+
return await decodeImagePixels(b, o.maxSize);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
warnings.push(`Image ${i} could not be decoded: ${e instanceof Error ? e.message : String(e)}`);
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
pixelsOf.set(i, p);
|
|
57
|
+
}
|
|
58
|
+
return p;
|
|
59
|
+
};
|
|
60
|
+
const push = (t) => textures.push(t) - 1;
|
|
61
|
+
/** A colour or data texture from one image (KTX2 when it is the store's family, else decoded pixels). */
|
|
62
|
+
const single = async (image, srgb) => {
|
|
63
|
+
const key = `${image}:${srgb}`;
|
|
64
|
+
const known = made.get(key);
|
|
65
|
+
if (known !== undefined)
|
|
66
|
+
return known;
|
|
67
|
+
let idx = -1;
|
|
68
|
+
if (isKtx2(image)) {
|
|
69
|
+
const b = await bytes(image);
|
|
70
|
+
try {
|
|
71
|
+
const t = b ? decodeKtx2(b) : null;
|
|
72
|
+
if (t && t.family === o.family)
|
|
73
|
+
idx = push(t);
|
|
74
|
+
else if (t)
|
|
75
|
+
warnings.push(`Image ${image} is ${t.format}; this device samples ${o.family}. Convert the model's textures (\`yali convert\`).`);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
warnings.push(`Image ${image}: ${e instanceof Error ? e.message : String(e)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const px = await pixels(image);
|
|
83
|
+
if (px)
|
|
84
|
+
idx = push(rgbaTexture(px.rgba, px.size, srgb));
|
|
85
|
+
}
|
|
86
|
+
made.set(key, idx);
|
|
87
|
+
return idx;
|
|
88
|
+
};
|
|
89
|
+
/** ORM from occlusion and metallic-roughness images (the same one when the file packs them). */
|
|
90
|
+
const orm = async (m) => {
|
|
91
|
+
const occl = m.occlusionTexture?.image;
|
|
92
|
+
const mr = m.metallicRoughnessTexture?.image;
|
|
93
|
+
if (occl === undefined && mr === undefined)
|
|
94
|
+
return -1;
|
|
95
|
+
if (occl === mr || occl === undefined || mr === undefined)
|
|
96
|
+
return single((mr ?? occl), false);
|
|
97
|
+
const key = `orm:${occl}:${mr}`;
|
|
98
|
+
const known = made.get(key);
|
|
99
|
+
if (known !== undefined)
|
|
100
|
+
return known;
|
|
101
|
+
let idx = -1;
|
|
102
|
+
if (isKtx2(occl) || isKtx2(mr)) {
|
|
103
|
+
warnings.push(`Material "${m.name}" keeps occlusion and metallic-roughness in two KTX2 textures; only metallic-roughness is used.`);
|
|
104
|
+
idx = await single(mr, false);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const [a, b] = await Promise.all([pixels(occl), pixels(mr)]);
|
|
108
|
+
const size = Math.min(a?.size ?? Infinity, b?.size ?? Infinity);
|
|
109
|
+
if (Number.isFinite(size)) {
|
|
110
|
+
// Both are resampled to their own squares: equal for the usual same-sized pair.
|
|
111
|
+
const same = (p) => (p && p.size === size ? p.rgba : null);
|
|
112
|
+
idx = push(rgbaTexture(mergeOrm(same(a), same(b), size), size, false));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
made.set(key, idx);
|
|
116
|
+
return idx;
|
|
117
|
+
};
|
|
118
|
+
const materials = await Promise.all(scene.materials.map(async (m) => ({
|
|
119
|
+
baseColor: m.baseColorTexture ? await single(m.baseColorTexture.image, true) : -1,
|
|
120
|
+
normal: m.normalTexture ? await single(m.normalTexture.image, false) : -1,
|
|
121
|
+
orm: await orm(m),
|
|
122
|
+
emissive: m.emissiveTexture ? await single(m.emissiveTexture.image, true) : -1,
|
|
123
|
+
occlusion: m.occlusionTexture !== null,
|
|
124
|
+
clearcoat: m.clearcoatTexture ? await single(m.clearcoatTexture.image, false) : -1,
|
|
125
|
+
clearcoatRoughness: m.clearcoatRoughnessTexture ? await single(m.clearcoatRoughnessTexture.image, false) : -1,
|
|
126
|
+
transmission: m.transmissionTexture ? await single(m.transmissionTexture.image, false) : -1,
|
|
127
|
+
sheenColor: m.sheenColorTexture ? await single(m.sheenColorTexture.image, true) : -1,
|
|
128
|
+
thickness: m.thicknessTexture ? await single(m.thicknessTexture.image, false) : -1,
|
|
129
|
+
})));
|
|
130
|
+
return { textures, materials };
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=textures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textures.js","sourceRoot":"","sources":["../src/textures.ts"],"names":[],"mappings":"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"}
|
package/dist/write.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { GltfClusterPages, GltfClusters, GltfLod, GltfMaterial, GltfNode } from './parse.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A meshopt encoder for `writeGlb` (`MeshoptEncoder.encodeGltfBuffer` from
|
|
4
|
+
* `meshoptimizer/encoder`, after `await MeshoptEncoder.ready`).
|
|
5
|
+
*/
|
|
6
|
+
export type MeshoptEncode = (source: Uint8Array, count: number, stride: number, mode: 'ATTRIBUTES' | 'TRIANGLES') => Uint8Array;
|
|
7
|
+
/** What `writeGlb` takes: the same shapes `parseGltf` returns (normals and uvs optional). */
|
|
8
|
+
export interface GlbInput {
|
|
9
|
+
readonly meshes: readonly {
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly primitives: readonly {
|
|
12
|
+
positions: Float32Array;
|
|
13
|
+
normals?: Float32Array | null;
|
|
14
|
+
uvs?: Float32Array | null;
|
|
15
|
+
indices: Uint32Array | Uint16Array;
|
|
16
|
+
material: number;
|
|
17
|
+
/** Coarser levels, written as `MSFT_lod` meshes over the same vertex accessors. */
|
|
18
|
+
lods?: readonly GltfLod[];
|
|
19
|
+
/** Clusters packed ahead of time, written as `YALI_clusters` (ADR-0121). */
|
|
20
|
+
clusters?: GltfClusters | null;
|
|
21
|
+
/** A cluster hierarchy in streaming pages, written as `YALI_cluster_pages` (ADR-0134): the primitive's vertices are its root mesh. */
|
|
22
|
+
pages?: GltfClusterPages | null;
|
|
23
|
+
}[];
|
|
24
|
+
}[];
|
|
25
|
+
/** Nodes (the writer writes no skins: `skin` is not read). */
|
|
26
|
+
readonly nodes: readonly Omit<GltfNode, 'skin'>[];
|
|
27
|
+
readonly roots: readonly number[];
|
|
28
|
+
/**
|
|
29
|
+
* Materials: the factors, and optionally everything else `parseGltf` reads. A texture ref
|
|
30
|
+
* names an entry of `images` (each image is written as one texture).
|
|
31
|
+
*/
|
|
32
|
+
readonly materials: readonly (Pick<GltfMaterial, 'name' | 'baseColor' | 'metallic' | 'roughness'> & Partial<Omit<GltfMaterial, 'name' | 'baseColor' | 'metallic' | 'roughness'>>)[];
|
|
33
|
+
/**
|
|
34
|
+
* External images by URI, relative to the GLB (`yali convert` writes `<name>.ktx2`, which the
|
|
35
|
+
* loader resolves to the device's variant file; ADR-0060).
|
|
36
|
+
*/
|
|
37
|
+
readonly images?: readonly {
|
|
38
|
+
readonly uri: string;
|
|
39
|
+
readonly mimeType: string;
|
|
40
|
+
readonly sizes?: readonly number[];
|
|
41
|
+
}[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Writes a binary glTF 2.0 (GLB) file: one buffer, one buffer view per attribute, float
|
|
45
|
+
* attributes and u16 or u32 indices. For tests, generated assets and (later) `yali convert`.
|
|
46
|
+
* Primitives with `lods` get `MSFT_lod`: level k of mesh m is a mesh whose primitives reuse
|
|
47
|
+
* the base primitives' attribute accessors with their own indices (and the error in
|
|
48
|
+
* `extras.yaliLodError`), placed on a node outside the scene that the base node lists.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* const glb = writeGlb({ meshes: [{ name: 'box', primitives: [box] }], nodes: [{ name: 'box', mesh: 0, children: [], t: [0, 0, 0], r: [0, 0, 0, 1], s: [1, 1, 1] }], roots: [0], materials: [] });
|
|
52
|
+
*/
|
|
53
|
+
export declare function writeGlb(input: GlbInput, options?: {
|
|
54
|
+
meshopt?: MeshoptEncode;
|
|
55
|
+
}): Uint8Array;
|
package/dist/write.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { YaliError } from '@yali-engine/core';
|
|
2
|
+
/**
|
|
3
|
+
* Writes a binary glTF 2.0 (GLB) file: one buffer, one buffer view per attribute, float
|
|
4
|
+
* attributes and u16 or u32 indices. For tests, generated assets and (later) `yali convert`.
|
|
5
|
+
* Primitives with `lods` get `MSFT_lod`: level k of mesh m is a mesh whose primitives reuse
|
|
6
|
+
* the base primitives' attribute accessors with their own indices (and the error in
|
|
7
|
+
* `extras.yaliLodError`), placed on a node outside the scene that the base node lists.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const glb = writeGlb({ meshes: [{ name: 'box', primitives: [box] }], nodes: [{ name: 'box', mesh: 0, children: [], t: [0, 0, 0], r: [0, 0, 0, 1], s: [1, 1, 1] }], roots: [0], materials: [] });
|
|
11
|
+
*/
|
|
12
|
+
export function writeGlb(input, options = {}) {
|
|
13
|
+
const chunks = [];
|
|
14
|
+
const bufferViews = [];
|
|
15
|
+
const accessors = [];
|
|
16
|
+
let offset = 0;
|
|
17
|
+
// With meshopt, buffer 0 holds the compressed views and buffer 1 is the uncompressed
|
|
18
|
+
// fallback, which holds no data (EXT_meshopt_compression).
|
|
19
|
+
let fallbackOffset = 0;
|
|
20
|
+
const add = (array, type, componentType, target, minMax) => {
|
|
21
|
+
const raw = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);
|
|
22
|
+
const size = type === 'SCALAR' ? 1 : type === 'VEC2' ? 2 : 3;
|
|
23
|
+
const count = array.length / size;
|
|
24
|
+
const stride = array.BYTES_PER_ELEMENT * size;
|
|
25
|
+
const bytes = options.meshopt ? options.meshopt(raw, count, stride, target === 34963 ? 'TRIANGLES' : 'ATTRIBUTES') : raw;
|
|
26
|
+
const pad = (4 - (bytes.byteLength % 4)) % 4;
|
|
27
|
+
if (options.meshopt) {
|
|
28
|
+
bufferViews.push({
|
|
29
|
+
buffer: 1,
|
|
30
|
+
byteOffset: fallbackOffset,
|
|
31
|
+
byteLength: raw.byteLength,
|
|
32
|
+
...(target === 34962 ? { byteStride: stride } : {}),
|
|
33
|
+
target,
|
|
34
|
+
extensions: { EXT_meshopt_compression: { buffer: 0, byteOffset: offset, byteLength: bytes.byteLength, byteStride: stride, count, mode: target === 34963 ? 'TRIANGLES' : 'ATTRIBUTES' } },
|
|
35
|
+
});
|
|
36
|
+
fallbackOffset += raw.byteLength + ((4 - (raw.byteLength % 4)) % 4);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
bufferViews.push({ buffer: 0, byteOffset: offset, byteLength: bytes.byteLength, target });
|
|
40
|
+
}
|
|
41
|
+
chunks.push(bytes, new Uint8Array(pad));
|
|
42
|
+
offset += bytes.byteLength + pad;
|
|
43
|
+
accessors.push({ bufferView: bufferViews.length - 1, componentType, count: array.length / size, type, ...(minMax ?? {}) });
|
|
44
|
+
return accessors.length - 1;
|
|
45
|
+
};
|
|
46
|
+
// A raw buffer view (no accessor), its length a multiple of 4: meshopt-compressed as 4-byte attributes when the file is.
|
|
47
|
+
const addView = (array) => {
|
|
48
|
+
const raw = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);
|
|
49
|
+
const count = raw.byteLength / 4;
|
|
50
|
+
const bytes = options.meshopt ? options.meshopt(raw, count, 4, 'ATTRIBUTES') : raw;
|
|
51
|
+
const pad = (4 - (bytes.byteLength % 4)) % 4;
|
|
52
|
+
if (options.meshopt) {
|
|
53
|
+
bufferViews.push({ buffer: 1, byteOffset: fallbackOffset, byteLength: raw.byteLength, extensions: { EXT_meshopt_compression: { buffer: 0, byteOffset: offset, byteLength: bytes.byteLength, byteStride: 4, count, mode: 'ATTRIBUTES' } } });
|
|
54
|
+
fallbackOffset += raw.byteLength;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
bufferViews.push({ buffer: 0, byteOffset: offset, byteLength: bytes.byteLength });
|
|
58
|
+
}
|
|
59
|
+
chunks.push(bytes, new Uint8Array(pad));
|
|
60
|
+
offset += bytes.byteLength + pad;
|
|
61
|
+
return bufferViews.length - 1;
|
|
62
|
+
};
|
|
63
|
+
let usesClusters = false;
|
|
64
|
+
let usesPages = false;
|
|
65
|
+
const meshes = input.meshes.map((m) => ({
|
|
66
|
+
name: m.name,
|
|
67
|
+
primitives: m.primitives.map((p) => {
|
|
68
|
+
const min = [Infinity, Infinity, Infinity];
|
|
69
|
+
const max = [-Infinity, -Infinity, -Infinity];
|
|
70
|
+
for (let i = 0; i < p.positions.length; i += 3) {
|
|
71
|
+
for (let c = 0; c < 3; c++) {
|
|
72
|
+
min[c] = Math.min(min[c], p.positions[i + c]);
|
|
73
|
+
max[c] = Math.max(max[c], p.positions[i + c]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const attributes = { POSITION: add(p.positions, 'VEC3', 5126, 34962, { min, max }) };
|
|
77
|
+
if (p.normals)
|
|
78
|
+
attributes.NORMAL = add(p.normals, 'VEC3', 5126, 34962);
|
|
79
|
+
if (p.uvs)
|
|
80
|
+
attributes.TEXCOORD_0 = add(p.uvs, 'VEC2', 5126, 34962);
|
|
81
|
+
const indices = add(p.indices, 'SCALAR', p.indices instanceof Uint16Array ? 5123 : 5125, 34963);
|
|
82
|
+
const c = p.clusters;
|
|
83
|
+
if (c && (c.triangles.byteLength % 4 !== 0 || c.words.length === 0))
|
|
84
|
+
throw new YaliError('GLTF_INVALID', `Mesh ${m.name}: its clusters are empty or their triangle bytes are not padded to 4.`, 'Pass the output of packClusters unchanged.');
|
|
85
|
+
if (c)
|
|
86
|
+
usesClusters = true;
|
|
87
|
+
const g = p.pages;
|
|
88
|
+
if (g && (g.rootData.byteLength % 4 !== 0 || g.words.length === 0))
|
|
89
|
+
throw new YaliError('GLTF_INVALID', `Mesh ${m.name}: its cluster pages are empty or their root bytes are not padded to 4.`, 'Pass the output of buildClusterPages unchanged.');
|
|
90
|
+
if (g)
|
|
91
|
+
usesPages = true;
|
|
92
|
+
const ext = {};
|
|
93
|
+
if (c)
|
|
94
|
+
ext.YALI_clusters = { lod: c.lod, corners: c.corners, words: addView(c.words), vertices: addView(c.vertices), triangles: addView(c.triangles) };
|
|
95
|
+
if (g)
|
|
96
|
+
ext.YALI_cluster_pages = { corners: g.corners, localIds: g.localIds, triangleBytes: g.triangleBytes, roots: g.roots, slotVertices: g.slotVertices, uri: g.uri, base: g.base, words: addView(g.words), pages: addView(g.pages), rootData: addView(g.rootData) };
|
|
97
|
+
const extensions = c || g ? { extensions: ext } : {};
|
|
98
|
+
return { attributes, indices, mode: 4, ...(p.material >= 0 ? { material: p.material } : {}), ...extensions };
|
|
99
|
+
}),
|
|
100
|
+
}));
|
|
101
|
+
// MSFT_lod: lodMeshes[m][k] = the mesh index of level k + 1 of mesh m.
|
|
102
|
+
const lodMeshes = input.meshes.map((m, mi) => {
|
|
103
|
+
const levels = Math.max(0, ...m.primitives.map((p) => p.lods?.length ?? 0));
|
|
104
|
+
const out = [];
|
|
105
|
+
for (let k = 0; k < levels; k++) {
|
|
106
|
+
const primitives = m.primitives.map((p, pi) => {
|
|
107
|
+
const base = meshes[mi].primitives[pi];
|
|
108
|
+
const lod = p.lods?.[k];
|
|
109
|
+
const { extensions: _, ...rest } = base;
|
|
110
|
+
return { ...rest, indices: lod ? add(lod.indices, 'SCALAR', 5125, 34963) : base.indices, extras: { yaliLodError: lod?.error ?? 0 } };
|
|
111
|
+
});
|
|
112
|
+
meshes.push({ name: `${m.name}_lod${k + 1}`, primitives });
|
|
113
|
+
out.push(meshes.length - 1);
|
|
114
|
+
}
|
|
115
|
+
return out;
|
|
116
|
+
});
|
|
117
|
+
const nodes = input.nodes.map((n) => ({
|
|
118
|
+
name: n.name,
|
|
119
|
+
...(n.mesh >= 0 ? { mesh: n.mesh } : {}),
|
|
120
|
+
...(n.children.length ? { children: [...n.children] } : {}),
|
|
121
|
+
translation: [...n.t],
|
|
122
|
+
rotation: [...n.r],
|
|
123
|
+
scale: [...n.s],
|
|
124
|
+
}));
|
|
125
|
+
let usesLod = false;
|
|
126
|
+
input.nodes.forEach((n, i) => {
|
|
127
|
+
const levels = n.mesh >= 0 ? lodMeshes[n.mesh] : [];
|
|
128
|
+
if (levels.length === 0)
|
|
129
|
+
return;
|
|
130
|
+
usesLod = true;
|
|
131
|
+
const ids = levels.map((mesh, k) => nodes.push({ name: `${n.name}_lod${k + 1}`, mesh, translation: [...n.t], rotation: [...n.r], scale: [...n.s] }) - 1);
|
|
132
|
+
Object.assign(nodes[i], { extensions: { MSFT_lod: { ids } } });
|
|
133
|
+
});
|
|
134
|
+
let usesEmissiveStrength = false;
|
|
135
|
+
/** The material extensions written (ADR-0093), for `extensionsUsed`. */
|
|
136
|
+
const used = new Set();
|
|
137
|
+
const json = {
|
|
138
|
+
asset: { version: '2.0', generator: 'yali writeGlb' },
|
|
139
|
+
scene: 0,
|
|
140
|
+
scenes: [{ nodes: [...input.roots] }],
|
|
141
|
+
nodes,
|
|
142
|
+
meshes,
|
|
143
|
+
materials: input.materials.map((m) => {
|
|
144
|
+
const ref = (t) => (t ? { index: t.image } : undefined);
|
|
145
|
+
const e = m.emissive ?? [0, 0, 0];
|
|
146
|
+
const strength = Math.max(1, ...e);
|
|
147
|
+
const mat = {
|
|
148
|
+
name: m.name,
|
|
149
|
+
pbrMetallicRoughness: {
|
|
150
|
+
baseColorFactor: [...m.baseColor],
|
|
151
|
+
metallicFactor: m.metallic,
|
|
152
|
+
roughnessFactor: m.roughness,
|
|
153
|
+
...(m.baseColorTexture ? { baseColorTexture: ref(m.baseColorTexture) } : {}),
|
|
154
|
+
...(m.metallicRoughnessTexture ? { metallicRoughnessTexture: ref(m.metallicRoughnessTexture) } : {}),
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
if (m.normalTexture)
|
|
158
|
+
mat.normalTexture = { ...ref(m.normalTexture), scale: m.normalScale ?? 1 };
|
|
159
|
+
if (m.occlusionTexture)
|
|
160
|
+
mat.occlusionTexture = { ...ref(m.occlusionTexture), strength: m.occlusionStrength ?? 1 };
|
|
161
|
+
if (m.emissiveTexture)
|
|
162
|
+
mat.emissiveTexture = ref(m.emissiveTexture);
|
|
163
|
+
if (e.some((x) => x > 0))
|
|
164
|
+
mat.emissiveFactor = e.map((x) => x / strength);
|
|
165
|
+
const ext = {};
|
|
166
|
+
if (strength > 1) {
|
|
167
|
+
ext.KHR_materials_emissive_strength = { emissiveStrength: strength };
|
|
168
|
+
usesEmissiveStrength = true;
|
|
169
|
+
}
|
|
170
|
+
if ((m.clearcoat ?? 0) > 0) {
|
|
171
|
+
ext.KHR_materials_clearcoat = {
|
|
172
|
+
clearcoatFactor: m.clearcoat,
|
|
173
|
+
clearcoatRoughnessFactor: m.clearcoatRoughness ?? 0,
|
|
174
|
+
...(m.clearcoatTexture ? { clearcoatTexture: ref(m.clearcoatTexture) } : {}),
|
|
175
|
+
...(m.clearcoatRoughnessTexture ? { clearcoatRoughnessTexture: ref(m.clearcoatRoughnessTexture) } : {}),
|
|
176
|
+
};
|
|
177
|
+
used.add('KHR_materials_clearcoat');
|
|
178
|
+
}
|
|
179
|
+
if ((m.transmission ?? 0) > 0) {
|
|
180
|
+
ext.KHR_materials_transmission = { transmissionFactor: m.transmission, ...(m.transmissionTexture ? { transmissionTexture: ref(m.transmissionTexture) } : {}) };
|
|
181
|
+
used.add('KHR_materials_transmission');
|
|
182
|
+
}
|
|
183
|
+
if (m.sheenColor?.some((x) => x > 0)) {
|
|
184
|
+
ext.KHR_materials_sheen = { sheenColorFactor: [...m.sheenColor], sheenRoughnessFactor: m.sheenRoughness ?? 0, ...(m.sheenColorTexture ? { sheenColorTexture: ref(m.sheenColorTexture) } : {}) };
|
|
185
|
+
used.add('KHR_materials_sheen');
|
|
186
|
+
}
|
|
187
|
+
if (m.ior !== undefined && m.ior !== 1.5) {
|
|
188
|
+
ext.KHR_materials_ior = { ior: m.ior };
|
|
189
|
+
used.add('KHR_materials_ior');
|
|
190
|
+
}
|
|
191
|
+
if ((m.thickness ?? 0) > 0 || Number.isFinite(m.attenuationDistance ?? Infinity)) {
|
|
192
|
+
ext.KHR_materials_volume = {
|
|
193
|
+
thicknessFactor: m.thickness ?? 0,
|
|
194
|
+
...(m.thicknessTexture ? { thicknessTexture: ref(m.thicknessTexture) } : {}),
|
|
195
|
+
...(Number.isFinite(m.attenuationDistance ?? Infinity) ? { attenuationDistance: m.attenuationDistance, attenuationColor: [...(m.attenuationColor ?? [1, 1, 1])] } : {}),
|
|
196
|
+
};
|
|
197
|
+
used.add('KHR_materials_volume');
|
|
198
|
+
}
|
|
199
|
+
if ((m.dispersion ?? 0) > 0) {
|
|
200
|
+
ext.KHR_materials_dispersion = { dispersion: m.dispersion };
|
|
201
|
+
used.add('KHR_materials_dispersion');
|
|
202
|
+
}
|
|
203
|
+
if (Object.keys(ext).length)
|
|
204
|
+
mat.extensions = ext;
|
|
205
|
+
if (m.alphaMode && m.alphaMode !== 'OPAQUE')
|
|
206
|
+
mat.alphaMode = m.alphaMode;
|
|
207
|
+
if (m.alphaMode === 'MASK')
|
|
208
|
+
mat.alphaCutoff = m.alphaCutoff ?? 0.5;
|
|
209
|
+
if (m.doubleSided)
|
|
210
|
+
mat.doubleSided = true;
|
|
211
|
+
return mat;
|
|
212
|
+
}),
|
|
213
|
+
...(input.images?.length
|
|
214
|
+
? {
|
|
215
|
+
// extras.yaliSizes: the sizes `yali convert` wrote (`<name>.<variant>.<size>.ktx2`).
|
|
216
|
+
images: input.images.map((im) => ({ uri: im.uri, mimeType: im.mimeType, ...(im.sizes?.length ? { extras: { yaliSizes: [...im.sizes] } } : {}) })),
|
|
217
|
+
samplers: [{ magFilter: 9729, minFilter: 9987, wrapS: 10497, wrapT: 10497 }],
|
|
218
|
+
textures: input.images.map((_, i) => ({ source: i, sampler: 0 })),
|
|
219
|
+
}
|
|
220
|
+
: {}),
|
|
221
|
+
buffers: options.meshopt ? [{ byteLength: offset }, { byteLength: fallbackOffset, extensions: { EXT_meshopt_compression: { fallback: true } } }] : [{ byteLength: offset }],
|
|
222
|
+
extensionsUsed: [],
|
|
223
|
+
...(options.meshopt ? { extensionsRequired: ['EXT_meshopt_compression'] } : {}),
|
|
224
|
+
bufferViews,
|
|
225
|
+
accessors,
|
|
226
|
+
};
|
|
227
|
+
// After the materials: whether one needed KHR_materials_emissive_strength is known only now.
|
|
228
|
+
const extensionsUsed = [...(options.meshopt ? ['EXT_meshopt_compression'] : []), ...(usesLod ? ['MSFT_lod'] : []), ...(usesClusters ? ['YALI_clusters'] : []), ...(usesPages ? ['YALI_cluster_pages'] : []), ...(usesEmissiveStrength ? ['KHR_materials_emissive_strength'] : []), ...used];
|
|
229
|
+
const { extensionsUsed: _, ...rest } = json;
|
|
230
|
+
let text = new TextEncoder().encode(JSON.stringify(extensionsUsed.length ? { ...rest, extensionsUsed } : rest));
|
|
231
|
+
const jsonPad = (4 - (text.byteLength % 4)) % 4;
|
|
232
|
+
if (jsonPad) {
|
|
233
|
+
const padded = new Uint8Array(text.byteLength + jsonPad).fill(0x20);
|
|
234
|
+
padded.set(text);
|
|
235
|
+
text = padded;
|
|
236
|
+
}
|
|
237
|
+
const total = 12 + 8 + text.byteLength + 8 + offset;
|
|
238
|
+
const out = new Uint8Array(total);
|
|
239
|
+
const dv = new DataView(out.buffer);
|
|
240
|
+
dv.setUint32(0, 0x46546c67, true);
|
|
241
|
+
dv.setUint32(4, 2, true);
|
|
242
|
+
dv.setUint32(8, total, true);
|
|
243
|
+
dv.setUint32(12, text.byteLength, true);
|
|
244
|
+
dv.setUint32(16, 0x4e4f534a, true);
|
|
245
|
+
out.set(text, 20);
|
|
246
|
+
let o = 20 + text.byteLength;
|
|
247
|
+
dv.setUint32(o, offset, true);
|
|
248
|
+
dv.setUint32(o + 4, 0x004e4942, true);
|
|
249
|
+
o += 8;
|
|
250
|
+
for (const c of chunks) {
|
|
251
|
+
out.set(c, o);
|
|
252
|
+
o += c.byteLength;
|
|
253
|
+
}
|
|
254
|
+
return out;
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yali-engine/gltf",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Yali glTF 2.0: parse in a decode worker, upload into the geometry pool, spawn the node hierarchy as entities.",
|
|
5
|
+
"license": "MIT OR Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@yali-engine/core": "0.4.0",
|
|
22
|
+
"@yali-engine/ktx2": "0.4.0",
|
|
23
|
+
"@yali-engine/render": "0.4.0",
|
|
24
|
+
"@yali-engine/math": "0.4.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@webgpu/types": "^0.1.60",
|
|
28
|
+
"meshoptimizer": "1.3.0"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
32
|
+
"test": "node --experimental-strip-types --no-warnings --test \"test/*.test.ts\""
|
|
33
|
+
}
|
|
6
34
|
}
|
package/README.md
DELETED