@aura3d/engine 4.2.0 → 4.3.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/README.md +1 -1
- package/dist/aura3d-cli/cli-help.d.ts.map +1 -1
- package/dist/aura3d-cli/cli-help.js +4 -2
- package/dist/aura3d-cli/cli-help.js.map +1 -1
- package/dist/aura3d-cli/cli.js +80 -2
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/commands/assets/index.js +2 -2
- package/dist/aura3d-cli/commands/assets/index.js.map +1 -1
- package/dist/aura3d-cli/commands/meshyLedger.d.ts +125 -14
- package/dist/aura3d-cli/commands/meshyLedger.d.ts.map +1 -1
- package/dist/aura3d-cli/commands/meshyLedger.js +262 -35
- package/dist/aura3d-cli/commands/meshyLedger.js.map +1 -1
- package/dist/aura3d-cli/commands/prd13/run.js +19 -16
- package/dist/aura3d-cli/commands/prd13/run.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts +8 -0
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +12 -0
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/aura3d-cli/skin/analysis.d.ts +137 -0
- package/dist/aura3d-cli/skin/analysis.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/analysis.js +382 -0
- package/dist/aura3d-cli/skin/analysis.js.map +1 -0
- package/dist/aura3d-cli/skin/command.d.ts +71 -0
- package/dist/aura3d-cli/skin/command.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/command.js +186 -0
- package/dist/aura3d-cli/skin/command.js.map +1 -0
- package/dist/aura3d-cli/skin/glbEdit.d.ts +14 -0
- package/dist/aura3d-cli/skin/glbEdit.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/glbEdit.js +152 -0
- package/dist/aura3d-cli/skin/glbEdit.js.map +1 -0
- package/dist/aura3d-cli/skin/gltf.d.ts +159 -0
- package/dist/aura3d-cli/skin/gltf.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/gltf.js +379 -0
- package/dist/aura3d-cli/skin/gltf.js.map +1 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.d.ts +31 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.js +326 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.js.map +1 -0
- package/dist/aura3d-cli/skin/repair.d.ts +41 -0
- package/dist/aura3d-cli/skin/repair.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/repair.js +180 -0
- package/dist/aura3d-cli/skin/repair.js.map +1 -0
- package/dist/create-aura3d/index.js +1 -1
- package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/customMaterial.js +12 -1
- package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
- package/dist/engine/agent-api/nodes/types.d.ts +6 -0
- package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
- package/dist/game/index.d.ts +2 -2
- package/dist/game/index.d.ts.map +1 -1
- package/dist/game/index.js +1 -1
- package/dist/game/index.js.map +1 -1
- package/dist/game/motion/handBounce.d.ts +206 -0
- package/dist/game/motion/handBounce.d.ts.map +1 -0
- package/dist/game/motion/handBounce.js +267 -0
- package/dist/game/motion/handBounce.js.map +1 -0
- package/dist/game/motion/index.d.ts +2 -0
- package/dist/game/motion/index.d.ts.map +1 -1
- package/dist/game/motion/index.js +1 -0
- package/dist/game/motion/index.js.map +1 -1
- package/dist/game/session/warmPrograms.d.ts +17 -0
- package/dist/game/session/warmPrograms.d.ts.map +1 -1
- package/dist/game/session/warmPrograms.js +18 -1
- package/dist/game/session/warmPrograms.js.map +1 -1
- package/dist/physics/ensure.d.ts +2 -0
- package/dist/physics/ensure.d.ts.map +1 -0
- package/dist/physics/ensure.js +4 -0
- package/dist/physics/ensure.js.map +1 -0
- package/dist/physics/index.d.ts +1 -0
- package/dist/physics/index.d.ts.map +1 -1
- package/dist/physics/index.js +1 -0
- package/dist/physics/index.js.map +1 -1
- package/dist/physics/world.d.ts +1 -0
- package/dist/physics/world.d.ts.map +1 -1
- package/dist/physics/world.js +1 -0
- package/dist/physics/world.js.map +1 -1
- package/dist/physics-rapier/index.d.ts +2 -0
- package/dist/physics-rapier/index.d.ts.map +1 -1
- package/dist/physics-rapier/index.js +12 -10
- package/dist/physics-rapier/index.js.map +1 -1
- package/dist/physics-rapier/rapierInit.d.ts +6 -0
- package/dist/physics-rapier/rapierInit.d.ts.map +1 -0
- package/dist/physics-rapier/rapierInit.js +12 -0
- package/dist/physics-rapier/rapierInit.js.map +1 -0
- package/dist/physics-rapier/rapierInit.lazy.d.ts +6 -0
- package/dist/physics-rapier/rapierInit.lazy.d.ts.map +1 -0
- package/dist/physics-rapier/rapierInit.lazy.js +19 -0
- package/dist/physics-rapier/rapierInit.lazy.js.map +1 -0
- package/dist/rendering/DepthPass.d.ts.map +1 -1
- package/dist/rendering/DepthPass.js +30 -8
- package/dist/rendering/DepthPass.js.map +1 -1
- package/dist/rendering/ForwardPass.d.ts.map +1 -1
- package/dist/rendering/ForwardPass.js +7 -0
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/Renderer.d.ts +0 -2
- package/dist/rendering/Renderer.d.ts.map +1 -1
- package/dist/rendering/Renderer.js +6 -16
- package/dist/rendering/Renderer.js.map +1 -1
- package/dist/rendering/contracts/output.d.ts +9 -1
- package/dist/rendering/contracts/output.d.ts.map +1 -1
- package/dist/rendering/contracts/output.js.map +1 -1
- package/dist/rendering/output/OutputPass.d.ts +2 -0
- package/dist/rendering/output/OutputPass.d.ts.map +1 -1
- package/dist/rendering/output/OutputPass.js +26 -3
- package/dist/rendering/output/OutputPass.js.map +1 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.d.ts +3 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.d.ts.map +1 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.js +19 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.js.map +1 -1
- package/dist/rendering/post/v2Stages.d.ts +2 -7
- package/dist/rendering/post/v2Stages.d.ts.map +1 -1
- package/dist/rendering/post/v2Stages.js +2 -17
- package/dist/rendering/post/v2Stages.js.map +1 -1
- package/dist/rendering/post/vignetteColor.d.ts +8 -0
- package/dist/rendering/post/vignetteColor.d.ts.map +1 -0
- package/dist/rendering/post/vignetteColor.js +18 -0
- package/dist/rendering/post/vignetteColor.js.map +1 -0
- package/dist/rendering/renderer/PostprocessExecution.d.ts +10 -0
- package/dist/rendering/renderer/PostprocessExecution.d.ts.map +1 -1
- package/dist/rendering/renderer/PostprocessExecution.js +38 -38
- package/dist/rendering/renderer/PostprocessExecution.js.map +1 -1
- package/dist/rendering/renderer/coreOutputPostRoute.d.ts +25 -17
- package/dist/rendering/renderer/coreOutputPostRoute.d.ts.map +1 -1
- package/dist/rendering/renderer/coreOutputPostRoute.js +27 -18
- package/dist/rendering/renderer/coreOutputPostRoute.js.map +1 -1
- package/dist/rendering/renderer/qrSubFlags.d.ts +1 -1
- package/dist/rendering/renderer/qrSubFlags.d.ts.map +1 -1
- package/dist/rendering/renderer/qrSubFlags.js +2 -8
- package/dist/rendering/renderer/qrSubFlags.js.map +1 -1
- package/dist/rendering/shaders/chunks/author/index.d.ts.map +1 -1
- package/dist/rendering/shaders/chunks/author/index.js +7 -0
- package/dist/rendering/shaders/chunks/author/index.js.map +1 -1
- package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts +11 -0
- package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/shadow.glsl.js +57 -0
- package/dist/rendering/shaders/chunks/author/shadow.glsl.js.map +1 -0
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts +20 -0
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.js +80 -7
- package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +9 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
- package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
- package/dist/rendering/shadows/ShadowSystem.js +7 -2
- package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +2 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -1
- package/dist/rendering/webgl2/LdrPostprocessShader.js +25 -3
- package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.d.ts +11 -2
- package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.js +191 -16
- package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
- package/package.json +33 -26
- package/templates/cinematic-scene/package.json +2 -2
- package/templates/mini-game/package.json +2 -2
- package/templates/product-viewer/package.json +2 -2
- package/templates/production-asset-inspector/package.json +1 -1
- package/templates/production-material-studio/package.json +1 -1
- package/templates/production-product-configurator/package.json +1 -1
- package/templates/production-product-viewer/package.json +1 -1
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency-free glTF/GLB access for the skin tools: accessor reads, node hierarchy, animation sampling, forward
|
|
3
|
+
* kinematics and linear-blend skinning. Rows are plain number arrays; models are small enough that this stays fast.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { parseGlbChunks } from "../admission/glb.js";
|
|
7
|
+
const COMPONENT_SIZE = { 5120: 1, 5121: 1, 5122: 2, 5123: 2, 5125: 4, 5126: 4 };
|
|
8
|
+
const COMPONENTS = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 };
|
|
9
|
+
export function parseGlb(buffer) {
|
|
10
|
+
const { json, bin } = parseGlbChunks(buffer);
|
|
11
|
+
return { json: json, bin: Buffer.from(bin ?? Buffer.alloc(0)) };
|
|
12
|
+
}
|
|
13
|
+
export function readGlbFile(path) {
|
|
14
|
+
const buffer = readFileSync(path);
|
|
15
|
+
if (buffer.readUInt32LE(0) !== 0x46546c67)
|
|
16
|
+
throw new Error(`${path}: not a binary glTF (.glb). Skin tools read .glb files.`);
|
|
17
|
+
return parseGlb(buffer);
|
|
18
|
+
}
|
|
19
|
+
export function writeGlbFile(path, glb) {
|
|
20
|
+
let js = Buffer.from(JSON.stringify(glb.json), "utf8");
|
|
21
|
+
js = Buffer.concat([js, Buffer.alloc((4 - (js.length % 4)) % 4, 0x20)]);
|
|
22
|
+
const bin = Buffer.concat([glb.bin, Buffer.alloc((4 - (glb.bin.length % 4)) % 4)]);
|
|
23
|
+
const total = 12 + 8 + js.length + 8 + bin.length;
|
|
24
|
+
const head = Buffer.alloc(12);
|
|
25
|
+
head.writeUInt32LE(0x46546c67, 0);
|
|
26
|
+
head.writeUInt32LE(2, 4);
|
|
27
|
+
head.writeUInt32LE(total, 8);
|
|
28
|
+
const jh = Buffer.alloc(8);
|
|
29
|
+
jh.writeUInt32LE(js.length, 0);
|
|
30
|
+
jh.writeUInt32LE(0x4e4f534a, 4);
|
|
31
|
+
const bh = Buffer.alloc(8);
|
|
32
|
+
bh.writeUInt32LE(bin.length, 0);
|
|
33
|
+
bh.writeUInt32LE(0x004e4942, 4);
|
|
34
|
+
const out = Buffer.concat([head, jh, js, bh, bin]);
|
|
35
|
+
writeFileSync(path, out);
|
|
36
|
+
return { bytes: out.length };
|
|
37
|
+
}
|
|
38
|
+
/** Reads an accessor into rows of numbers (normalized integer accessors are converted to floats). */
|
|
39
|
+
export function readAccessor(glb, index) {
|
|
40
|
+
const accessor = glb.json.accessors[index];
|
|
41
|
+
if (!accessor)
|
|
42
|
+
throw new Error(`accessor ${index} does not exist`);
|
|
43
|
+
const components = COMPONENTS[accessor.type] ?? 1;
|
|
44
|
+
const size = COMPONENT_SIZE[accessor.componentType] ?? 4;
|
|
45
|
+
const rows = [];
|
|
46
|
+
if (accessor.bufferView === undefined) {
|
|
47
|
+
for (let k = 0; k < accessor.count; k += 1)
|
|
48
|
+
rows.push(new Array(components).fill(0));
|
|
49
|
+
return { rows, componentType: accessor.componentType, count: accessor.count, components };
|
|
50
|
+
}
|
|
51
|
+
const view = glb.json.bufferViews[accessor.bufferView];
|
|
52
|
+
if (!view)
|
|
53
|
+
throw new Error(`bufferView ${accessor.bufferView} does not exist`);
|
|
54
|
+
const offset = (view.byteOffset ?? 0) + (accessor.byteOffset ?? 0);
|
|
55
|
+
const stride = view.byteStride ?? components * size;
|
|
56
|
+
const normalized = accessor.normalized === true;
|
|
57
|
+
for (let k = 0; k < accessor.count; k += 1) {
|
|
58
|
+
const row = [];
|
|
59
|
+
for (let c = 0; c < components; c += 1) {
|
|
60
|
+
const at = offset + k * stride + c * size;
|
|
61
|
+
let value;
|
|
62
|
+
switch (accessor.componentType) {
|
|
63
|
+
case 5126:
|
|
64
|
+
value = glb.bin.readFloatLE(at);
|
|
65
|
+
break;
|
|
66
|
+
case 5123:
|
|
67
|
+
value = glb.bin.readUInt16LE(at);
|
|
68
|
+
if (normalized)
|
|
69
|
+
value /= 65535;
|
|
70
|
+
break;
|
|
71
|
+
case 5121:
|
|
72
|
+
value = glb.bin.readUInt8(at);
|
|
73
|
+
if (normalized)
|
|
74
|
+
value /= 255;
|
|
75
|
+
break;
|
|
76
|
+
case 5125:
|
|
77
|
+
value = glb.bin.readUInt32LE(at);
|
|
78
|
+
break;
|
|
79
|
+
case 5122:
|
|
80
|
+
value = glb.bin.readInt16LE(at);
|
|
81
|
+
if (normalized)
|
|
82
|
+
value = Math.max(value / 32767, -1);
|
|
83
|
+
break;
|
|
84
|
+
case 5120:
|
|
85
|
+
value = glb.bin.readInt8(at);
|
|
86
|
+
if (normalized)
|
|
87
|
+
value = Math.max(value / 127, -1);
|
|
88
|
+
break;
|
|
89
|
+
default: throw new Error(`unsupported accessor componentType ${accessor.componentType}`);
|
|
90
|
+
}
|
|
91
|
+
row.push(value);
|
|
92
|
+
}
|
|
93
|
+
rows.push(row);
|
|
94
|
+
}
|
|
95
|
+
return { rows, componentType: accessor.componentType, count: accessor.count, components };
|
|
96
|
+
}
|
|
97
|
+
// ---- quaternion / matrix helpers (glTF xyzw, column-major) ----
|
|
98
|
+
export const qmul = (a, b) => [
|
|
99
|
+
a[3] * b[0] + a[0] * b[3] + a[1] * b[2] - a[2] * b[1],
|
|
100
|
+
a[3] * b[1] - a[0] * b[2] + a[1] * b[3] + a[2] * b[0],
|
|
101
|
+
a[3] * b[2] + a[0] * b[1] - a[1] * b[0] + a[2] * b[3],
|
|
102
|
+
a[3] * b[3] - a[0] * b[0] - a[1] * b[1] - a[2] * b[2]
|
|
103
|
+
];
|
|
104
|
+
export const qconj = (q) => [-q[0], -q[1], -q[2], q[3]];
|
|
105
|
+
export function qnorm(q) {
|
|
106
|
+
const l = Math.hypot(q[0], q[1], q[2], q[3]) || 1;
|
|
107
|
+
return [q[0] / l, q[1] / l, q[2] / l, q[3] / l];
|
|
108
|
+
}
|
|
109
|
+
export function qrot(q, v) {
|
|
110
|
+
const u = [q[0], q[1], q[2]];
|
|
111
|
+
const s = q[3];
|
|
112
|
+
const c1 = [u[1] * v[2] - u[2] * v[1], u[2] * v[0] - u[0] * v[2], u[0] * v[1] - u[1] * v[0]];
|
|
113
|
+
const t = [2 * c1[0], 2 * c1[1], 2 * c1[2]];
|
|
114
|
+
const c2 = [u[1] * t[2] - u[2] * t[1], u[2] * t[0] - u[0] * t[2], u[0] * t[1] - u[1] * t[0]];
|
|
115
|
+
return [v[0] + s * t[0] + c2[0], v[1] + s * t[1] + c2[1], v[2] + s * t[2] + c2[2]];
|
|
116
|
+
}
|
|
117
|
+
/** Shortest-arc rotation taking unit vector a onto unit vector b. */
|
|
118
|
+
export function qalign(a, b) {
|
|
119
|
+
const d = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
120
|
+
if (d > 0.999999)
|
|
121
|
+
return [0, 0, 0, 1];
|
|
122
|
+
if (d < -0.999999) {
|
|
123
|
+
const ax = Math.abs(a[0]) < 0.9 ? [1, 0, 0] : [0, 1, 0];
|
|
124
|
+
const c = [a[1] * ax[2] - a[2] * ax[1], a[2] * ax[0] - a[0] * ax[2], a[0] * ax[1] - a[1] * ax[0]];
|
|
125
|
+
const l = Math.hypot(c[0], c[1], c[2]);
|
|
126
|
+
return [c[0] / l, c[1] / l, c[2] / l, 0];
|
|
127
|
+
}
|
|
128
|
+
const c = [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
129
|
+
return qnorm([c[0], c[1], c[2], 1 + d]);
|
|
130
|
+
}
|
|
131
|
+
function slerp(a, b, t) {
|
|
132
|
+
let d = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
|
|
133
|
+
let bb = b;
|
|
134
|
+
if (d < 0) {
|
|
135
|
+
bb = [-b[0], -b[1], -b[2], -b[3]];
|
|
136
|
+
d = -d;
|
|
137
|
+
}
|
|
138
|
+
if (d > 0.9995)
|
|
139
|
+
return qnorm([a[0] + (bb[0] - a[0]) * t, a[1] + (bb[1] - a[1]) * t, a[2] + (bb[2] - a[2]) * t, a[3] + (bb[3] - a[3]) * t]);
|
|
140
|
+
const th = Math.acos(d);
|
|
141
|
+
const s = Math.sin(th);
|
|
142
|
+
const w1 = Math.sin((1 - t) * th) / s;
|
|
143
|
+
const w2 = Math.sin(t * th) / s;
|
|
144
|
+
return [a[0] * w1 + bb[0] * w2, a[1] * w1 + bb[1] * w2, a[2] * w1 + bb[2] * w2, a[3] * w1 + bb[3] * w2];
|
|
145
|
+
}
|
|
146
|
+
export function composeTrs(t, r, s) {
|
|
147
|
+
const [x, y, z, w] = r;
|
|
148
|
+
const x2 = x + x, y2 = y + y, z2 = z + z;
|
|
149
|
+
const xx = x * x2, xy = x * y2, xz = x * z2, yy = y * y2, yz = y * z2, zz = z * z2, wx = w * x2, wy = w * y2, wz = w * z2;
|
|
150
|
+
const sx = s[0] ?? 1, sy = s[1] ?? 1, sz = s[2] ?? 1;
|
|
151
|
+
return [
|
|
152
|
+
(1 - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,
|
|
153
|
+
(xy - wz) * sy, (1 - (xx + zz)) * sy, (yz + wx) * sy, 0,
|
|
154
|
+
(xz + wy) * sz, (yz - wx) * sz, (1 - (xx + yy)) * sz, 0,
|
|
155
|
+
t[0] ?? 0, t[1] ?? 0, t[2] ?? 0, 1
|
|
156
|
+
];
|
|
157
|
+
}
|
|
158
|
+
export function mat4Mul(a, b) {
|
|
159
|
+
const o = new Array(16).fill(0);
|
|
160
|
+
for (let c = 0; c < 4; c += 1)
|
|
161
|
+
for (let r = 0; r < 4; r += 1) {
|
|
162
|
+
let sum = 0;
|
|
163
|
+
for (let k = 0; k < 4; k += 1)
|
|
164
|
+
sum += (a[k * 4 + r] ?? 0) * (b[c * 4 + k] ?? 0);
|
|
165
|
+
o[c * 4 + r] = sum;
|
|
166
|
+
}
|
|
167
|
+
return o;
|
|
168
|
+
}
|
|
169
|
+
export const transformPoint = (m, p) => [
|
|
170
|
+
(m[0] ?? 0) * p[0] + (m[4] ?? 0) * p[1] + (m[8] ?? 0) * p[2] + (m[12] ?? 0),
|
|
171
|
+
(m[1] ?? 0) * p[0] + (m[5] ?? 0) * p[1] + (m[9] ?? 0) * p[2] + (m[13] ?? 0),
|
|
172
|
+
(m[2] ?? 0) * p[0] + (m[6] ?? 0) * p[1] + (m[10] ?? 0) * p[2] + (m[14] ?? 0)
|
|
173
|
+
];
|
|
174
|
+
export function buildHierarchy(glb) {
|
|
175
|
+
const nodes = glb.json.nodes ?? [];
|
|
176
|
+
const names = nodes.map((n, i) => n.name ?? `node${i}`);
|
|
177
|
+
const parent = new Array(nodes.length).fill(-1);
|
|
178
|
+
nodes.forEach((n, i) => (n.children ?? []).forEach((c) => { parent[c] = i; }));
|
|
179
|
+
return { nodes, names, parent, id: (name) => names.indexOf(name) };
|
|
180
|
+
}
|
|
181
|
+
export function restTrs(node) {
|
|
182
|
+
if (node.matrix) {
|
|
183
|
+
const m = node.matrix;
|
|
184
|
+
const sx = Math.hypot(m[0] ?? 0, m[1] ?? 0, m[2] ?? 0) || 1;
|
|
185
|
+
const sy = Math.hypot(m[4] ?? 0, m[5] ?? 0, m[6] ?? 0) || 1;
|
|
186
|
+
const sz = Math.hypot(m[8] ?? 0, m[9] ?? 0, m[10] ?? 0) || 1;
|
|
187
|
+
const r00 = (m[0] ?? 0) / sx, r10 = (m[1] ?? 0) / sx, r20 = (m[2] ?? 0) / sx;
|
|
188
|
+
const r01 = (m[4] ?? 0) / sy, r11 = (m[5] ?? 0) / sy, r21 = (m[6] ?? 0) / sy;
|
|
189
|
+
const r02 = (m[8] ?? 0) / sz, r12 = (m[9] ?? 0) / sz, r22 = (m[10] ?? 0) / sz;
|
|
190
|
+
const trace = r00 + r11 + r22;
|
|
191
|
+
let q;
|
|
192
|
+
if (trace > 0) {
|
|
193
|
+
const s = Math.sqrt(trace + 1) * 2;
|
|
194
|
+
q = [(r21 - r12) / s, (r02 - r20) / s, (r10 - r01) / s, 0.25 * s];
|
|
195
|
+
}
|
|
196
|
+
else if (r00 > r11 && r00 > r22) {
|
|
197
|
+
const s = Math.sqrt(1 + r00 - r11 - r22) * 2;
|
|
198
|
+
q = [0.25 * s, (r01 + r10) / s, (r02 + r20) / s, (r21 - r12) / s];
|
|
199
|
+
}
|
|
200
|
+
else if (r11 > r22) {
|
|
201
|
+
const s = Math.sqrt(1 + r11 - r00 - r22) * 2;
|
|
202
|
+
q = [(r01 + r10) / s, 0.25 * s, (r12 + r21) / s, (r02 - r20) / s];
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const s = Math.sqrt(1 + r22 - r00 - r11) * 2;
|
|
206
|
+
q = [(r02 + r20) / s, (r12 + r21) / s, 0.25 * s, (r10 - r01) / s];
|
|
207
|
+
}
|
|
208
|
+
return { t: [m[12] ?? 0, m[13] ?? 0, m[14] ?? 0], r: qnorm(q), s: [sx, sy, sz] };
|
|
209
|
+
}
|
|
210
|
+
return { t: [...(node.translation ?? [0, 0, 0])], r: [...(node.rotation ?? [0, 0, 0, 1])], s: [...(node.scale ?? [1, 1, 1])] };
|
|
211
|
+
}
|
|
212
|
+
const samplerCache = new WeakMap();
|
|
213
|
+
function samplerData(glb, anim, samplerIndex) {
|
|
214
|
+
let cache = samplerCache.get(glb);
|
|
215
|
+
if (!cache) {
|
|
216
|
+
cache = new Map();
|
|
217
|
+
samplerCache.set(glb, cache);
|
|
218
|
+
}
|
|
219
|
+
const sampler = anim.samplers[samplerIndex];
|
|
220
|
+
if (!sampler)
|
|
221
|
+
throw new Error(`animation sampler ${samplerIndex} missing`);
|
|
222
|
+
const key = `${sampler.input}:${sampler.output}`;
|
|
223
|
+
let data = cache.get(key);
|
|
224
|
+
if (!data) {
|
|
225
|
+
data = { times: readAccessor(glb, sampler.input).rows.map((r) => r[0] ?? 0), values: readAccessor(glb, sampler.output).rows, interpolation: sampler.interpolation ?? "LINEAR" };
|
|
226
|
+
cache.set(key, data);
|
|
227
|
+
}
|
|
228
|
+
return data;
|
|
229
|
+
}
|
|
230
|
+
export function clipDuration(glb, anim) {
|
|
231
|
+
let max = 0;
|
|
232
|
+
for (const sampler of anim.samplers) {
|
|
233
|
+
const times = samplerData(glb, anim, anim.samplers.indexOf(sampler)).times;
|
|
234
|
+
max = Math.max(max, times[times.length - 1] ?? 0);
|
|
235
|
+
}
|
|
236
|
+
return max;
|
|
237
|
+
}
|
|
238
|
+
function sampleChannel(data, path, t) {
|
|
239
|
+
const { times, values, interpolation } = data;
|
|
240
|
+
const cubic = interpolation === "CUBICSPLINE";
|
|
241
|
+
const pick = (i) => (cubic ? values[i * 3 + 1] : values[i]) ?? [];
|
|
242
|
+
let i = 0;
|
|
243
|
+
while (i < times.length - 1 && (times[i + 1] ?? 0) <= t)
|
|
244
|
+
i += 1;
|
|
245
|
+
const j = Math.min(i + 1, times.length - 1);
|
|
246
|
+
const a = pick(i);
|
|
247
|
+
if (interpolation === "STEP" || j === i)
|
|
248
|
+
return a;
|
|
249
|
+
const t0 = times[i] ?? 0, t1 = times[j] ?? 0;
|
|
250
|
+
const u = t1 > t0 ? Math.min(1, Math.max(0, (t - t0) / (t1 - t0))) : 0;
|
|
251
|
+
const b = pick(j);
|
|
252
|
+
if (path === "rotation")
|
|
253
|
+
return slerp(a, b, u);
|
|
254
|
+
return a.map((x, k) => x + ((b[k] ?? x) - x) * u);
|
|
255
|
+
}
|
|
256
|
+
/** Local TRS for every node at time t of an animation (rest pose where untracked). */
|
|
257
|
+
export function localPose(glb, anim, t, hierarchy = buildHierarchy(glb)) {
|
|
258
|
+
const trs = hierarchy.nodes.map(restTrs);
|
|
259
|
+
if (anim) {
|
|
260
|
+
for (const channel of anim.channels) {
|
|
261
|
+
const node = channel.target.node;
|
|
262
|
+
if (node === undefined || !trs[node])
|
|
263
|
+
continue;
|
|
264
|
+
const path = channel.target.path;
|
|
265
|
+
if (path !== "translation" && path !== "rotation" && path !== "scale")
|
|
266
|
+
continue;
|
|
267
|
+
const value = sampleChannel(samplerData(glb, anim, channel.sampler), path, t);
|
|
268
|
+
const slot = trs[node];
|
|
269
|
+
if (path === "translation")
|
|
270
|
+
slot.t = value;
|
|
271
|
+
else if (path === "rotation")
|
|
272
|
+
slot.r = value;
|
|
273
|
+
else
|
|
274
|
+
slot.s = value;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return trs;
|
|
278
|
+
}
|
|
279
|
+
/** Forward kinematics: world matrix and position per node. */
|
|
280
|
+
export function forward(trs, hierarchy) {
|
|
281
|
+
const world = new Array(trs.length);
|
|
282
|
+
const visit = (i) => {
|
|
283
|
+
const cached = world[i];
|
|
284
|
+
if (cached)
|
|
285
|
+
return cached;
|
|
286
|
+
const local = composeTrs(trs[i]?.t ?? [0, 0, 0], trs[i]?.r ?? [0, 0, 0, 1], trs[i]?.s ?? [1, 1, 1]);
|
|
287
|
+
const p = hierarchy.parent[i] ?? -1;
|
|
288
|
+
const m = p < 0 ? local : mat4Mul(visit(p), local);
|
|
289
|
+
world[i] = m;
|
|
290
|
+
return m;
|
|
291
|
+
};
|
|
292
|
+
for (let i = 0; i < trs.length; i += 1)
|
|
293
|
+
visit(i);
|
|
294
|
+
return { world, pos: world.map((m) => [m[12] ?? 0, m[13] ?? 0, m[14] ?? 0]) };
|
|
295
|
+
}
|
|
296
|
+
/** Finds every skinned triangle primitive and its skin data (nodes with both `mesh` and `skin`). */
|
|
297
|
+
export function loadSkins(glb, hierarchy = buildHierarchy(glb)) {
|
|
298
|
+
const out = new Map();
|
|
299
|
+
const seenMeshSkin = new Set();
|
|
300
|
+
for (const node of hierarchy.nodes) {
|
|
301
|
+
if (node.mesh === undefined || node.skin === undefined)
|
|
302
|
+
continue;
|
|
303
|
+
const key = `${node.mesh}:${node.skin}`;
|
|
304
|
+
if (seenMeshSkin.has(key))
|
|
305
|
+
continue;
|
|
306
|
+
seenMeshSkin.add(key);
|
|
307
|
+
const skin = glb.json.skins?.[node.skin];
|
|
308
|
+
const mesh = glb.json.meshes?.[node.mesh];
|
|
309
|
+
if (!skin || !mesh)
|
|
310
|
+
continue;
|
|
311
|
+
let info = out.get(node.skin);
|
|
312
|
+
if (!info) {
|
|
313
|
+
const ibm = skin.inverseBindMatrices !== undefined
|
|
314
|
+
? readAccessor(glb, skin.inverseBindMatrices).rows
|
|
315
|
+
: skin.joints.map(() => [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
|
|
316
|
+
info = { index: node.skin, joints: skin.joints, ibm, jointNames: skin.joints.map((j) => hierarchy.names[j] ?? `joint${j}`), primitives: [] };
|
|
317
|
+
out.set(node.skin, info);
|
|
318
|
+
}
|
|
319
|
+
mesh.primitives.forEach((prim, primitiveIndex) => {
|
|
320
|
+
if ((prim.mode ?? 4) !== 4 || prim.attributes.POSITION === undefined || prim.attributes.JOINTS_0 === undefined || prim.attributes.WEIGHTS_0 === undefined)
|
|
321
|
+
return;
|
|
322
|
+
const pos = readAccessor(glb, prim.attributes.POSITION).rows;
|
|
323
|
+
const joints = readAccessor(glb, prim.attributes.JOINTS_0).rows;
|
|
324
|
+
const weights = readAccessor(glb, prim.attributes.WEIGHTS_0).rows;
|
|
325
|
+
const indices = prim.indices !== undefined ? readAccessor(glb, prim.indices).rows.map((r) => r[0] ?? 0) : pos.map((_, i) => i);
|
|
326
|
+
info.primitives.push({
|
|
327
|
+
meshIndex: node.mesh,
|
|
328
|
+
primitiveIndex,
|
|
329
|
+
skinIndex: node.skin,
|
|
330
|
+
materialName: prim.material !== undefined ? glb.json.materials?.[prim.material]?.name ?? `material${prim.material}` : "default",
|
|
331
|
+
pos, joints, weights, indices
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
return [...out.values()];
|
|
336
|
+
}
|
|
337
|
+
/** Linear-blend-skinned vertex positions for a world pose. */
|
|
338
|
+
export function skinnedPositions(skin, prim, pose) {
|
|
339
|
+
const matrices = skin.joints.map((joint, k) => mat4Mul(pose.world[joint] ?? [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], skin.ibm[k] ?? [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]));
|
|
340
|
+
return prim.pos.map((v, i) => {
|
|
341
|
+
const r = [0, 0, 0];
|
|
342
|
+
const w = prim.weights[i] ?? [];
|
|
343
|
+
const j = prim.joints[i] ?? [];
|
|
344
|
+
for (let k = 0; k < 4; k += 1) {
|
|
345
|
+
const wk = w[k] ?? 0;
|
|
346
|
+
if (!wk)
|
|
347
|
+
continue;
|
|
348
|
+
const m = matrices[j[k] ?? 0];
|
|
349
|
+
if (!m)
|
|
350
|
+
continue;
|
|
351
|
+
const p = transformPoint(m, v);
|
|
352
|
+
r[0] += wk * p[0];
|
|
353
|
+
r[1] += wk * p[1];
|
|
354
|
+
r[2] += wk * p[2];
|
|
355
|
+
}
|
|
356
|
+
return r;
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
export const vsub = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
360
|
+
export const vlen = (a) => Math.hypot(a[0], a[1], a[2]);
|
|
361
|
+
export const vdist = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
|
|
362
|
+
export const vdot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
363
|
+
/** Bind-pose world position of every joint of a skin: the translation of the inverse of its inverse-bind matrix. */
|
|
364
|
+
export function jointBindPositions(skin) {
|
|
365
|
+
return skin.ibm.map((m) => {
|
|
366
|
+
const a = m[0] ?? 1, b = m[4] ?? 0, c = m[8] ?? 0, d = m[1] ?? 0, e = m[5] ?? 1, f = m[9] ?? 0, g = m[2] ?? 0, h = m[6] ?? 0, i = m[10] ?? 1;
|
|
367
|
+
const det = a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
|
|
368
|
+
if (Math.abs(det) < 1e-12)
|
|
369
|
+
return [0, 0, 0];
|
|
370
|
+
const inv = [
|
|
371
|
+
(e * i - f * h) / det, (c * h - b * i) / det, (b * f - c * e) / det,
|
|
372
|
+
(f * g - d * i) / det, (a * i - c * g) / det, (c * d - a * f) / det,
|
|
373
|
+
(d * h - e * g) / det, (b * g - a * h) / det, (a * e - b * d) / det
|
|
374
|
+
];
|
|
375
|
+
const t = [m[12] ?? 0, m[13] ?? 0, m[14] ?? 0];
|
|
376
|
+
return [-(inv[0] * t[0] + inv[1] * t[1] + inv[2] * t[2]), -(inv[3] * t[0] + inv[4] * t[1] + inv[5] * t[2]), -(inv[6] * t[0] + inv[7] * t[1] + inv[8] * t[2])];
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=gltf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gltf.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/skin/gltf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type GlbData, type SkinInfo } from "./gltf.js";
|
|
2
|
+
export interface RebuildLimbsOptions {
|
|
3
|
+
/** Material-name patterns per role (default: skin /skin/, shorts /short/, socks /sock/, boots /dark|boot|shoe/). */
|
|
4
|
+
readonly materials?: {
|
|
5
|
+
readonly skin?: RegExp;
|
|
6
|
+
readonly shorts?: RegExp;
|
|
7
|
+
readonly socks?: RegExp;
|
|
8
|
+
readonly boots?: RegExp;
|
|
9
|
+
};
|
|
10
|
+
/** Name of the pelvis joint (default: /^(mixamorig:?)?hips$/i). */
|
|
11
|
+
readonly hips?: RegExp;
|
|
12
|
+
}
|
|
13
|
+
export interface RebuildLimbsReport {
|
|
14
|
+
readonly scale: number;
|
|
15
|
+
readonly primitives: readonly {
|
|
16
|
+
readonly material: string;
|
|
17
|
+
readonly vertices: number;
|
|
18
|
+
readonly triangles: number;
|
|
19
|
+
readonly removedTriangles: number;
|
|
20
|
+
readonly addedTriangles: number;
|
|
21
|
+
}[];
|
|
22
|
+
readonly bootHeights: Readonly<Record<string, number>>;
|
|
23
|
+
}
|
|
24
|
+
export declare class RebuildLimbsUnsupported extends Error {
|
|
25
|
+
}
|
|
26
|
+
export declare function rebuildLimbs(glb: GlbData, options?: RebuildLimbsOptions): {
|
|
27
|
+
glb: GlbData;
|
|
28
|
+
report: RebuildLimbsReport;
|
|
29
|
+
};
|
|
30
|
+
export type { SkinInfo };
|
|
31
|
+
//# sourceMappingURL=rebuildLimbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebuildLimbs.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/skin/rebuildLimbs.ts"],"names":[],"mappings":"AAYA,OAAO,EAAmF,KAAK,OAAO,EAAa,KAAK,QAAQ,EAAoC,MAAM,WAAW,CAAC;AAiBtL,MAAM,WAAW,mBAAmB;IAClC,oHAAoH;IACpH,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5H,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzL,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAKrD,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CA0O1H;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|