@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.
Files changed (162) hide show
  1. package/README.md +1 -1
  2. package/dist/aura3d-cli/cli-help.d.ts.map +1 -1
  3. package/dist/aura3d-cli/cli-help.js +4 -2
  4. package/dist/aura3d-cli/cli-help.js.map +1 -1
  5. package/dist/aura3d-cli/cli.js +80 -2
  6. package/dist/aura3d-cli/cli.js.map +1 -1
  7. package/dist/aura3d-cli/commands/assets/index.js +2 -2
  8. package/dist/aura3d-cli/commands/assets/index.js.map +1 -1
  9. package/dist/aura3d-cli/commands/meshyLedger.d.ts +125 -14
  10. package/dist/aura3d-cli/commands/meshyLedger.d.ts.map +1 -1
  11. package/dist/aura3d-cli/commands/meshyLedger.js +262 -35
  12. package/dist/aura3d-cli/commands/meshyLedger.js.map +1 -1
  13. package/dist/aura3d-cli/commands/prd13/run.js +19 -16
  14. package/dist/aura3d-cli/commands/prd13/run.js.map +1 -1
  15. package/dist/aura3d-cli/index.d.ts +8 -0
  16. package/dist/aura3d-cli/index.d.ts.map +1 -1
  17. package/dist/aura3d-cli/index.js +12 -0
  18. package/dist/aura3d-cli/index.js.map +1 -1
  19. package/dist/aura3d-cli/skin/analysis.d.ts +137 -0
  20. package/dist/aura3d-cli/skin/analysis.d.ts.map +1 -0
  21. package/dist/aura3d-cli/skin/analysis.js +382 -0
  22. package/dist/aura3d-cli/skin/analysis.js.map +1 -0
  23. package/dist/aura3d-cli/skin/command.d.ts +71 -0
  24. package/dist/aura3d-cli/skin/command.d.ts.map +1 -0
  25. package/dist/aura3d-cli/skin/command.js +186 -0
  26. package/dist/aura3d-cli/skin/command.js.map +1 -0
  27. package/dist/aura3d-cli/skin/glbEdit.d.ts +14 -0
  28. package/dist/aura3d-cli/skin/glbEdit.d.ts.map +1 -0
  29. package/dist/aura3d-cli/skin/glbEdit.js +152 -0
  30. package/dist/aura3d-cli/skin/glbEdit.js.map +1 -0
  31. package/dist/aura3d-cli/skin/gltf.d.ts +159 -0
  32. package/dist/aura3d-cli/skin/gltf.d.ts.map +1 -0
  33. package/dist/aura3d-cli/skin/gltf.js +379 -0
  34. package/dist/aura3d-cli/skin/gltf.js.map +1 -0
  35. package/dist/aura3d-cli/skin/rebuildLimbs.d.ts +31 -0
  36. package/dist/aura3d-cli/skin/rebuildLimbs.d.ts.map +1 -0
  37. package/dist/aura3d-cli/skin/rebuildLimbs.js +326 -0
  38. package/dist/aura3d-cli/skin/rebuildLimbs.js.map +1 -0
  39. package/dist/aura3d-cli/skin/repair.d.ts +41 -0
  40. package/dist/aura3d-cli/skin/repair.d.ts.map +1 -0
  41. package/dist/aura3d-cli/skin/repair.js +180 -0
  42. package/dist/aura3d-cli/skin/repair.js.map +1 -0
  43. package/dist/create-aura3d/index.js +1 -1
  44. package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
  45. package/dist/engine/agent-api/compiler/customMaterial.js +12 -1
  46. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  47. package/dist/engine/agent-api/nodes/types.d.ts +6 -0
  48. package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
  49. package/dist/game/index.d.ts +2 -2
  50. package/dist/game/index.d.ts.map +1 -1
  51. package/dist/game/index.js +1 -1
  52. package/dist/game/index.js.map +1 -1
  53. package/dist/game/motion/handBounce.d.ts +206 -0
  54. package/dist/game/motion/handBounce.d.ts.map +1 -0
  55. package/dist/game/motion/handBounce.js +267 -0
  56. package/dist/game/motion/handBounce.js.map +1 -0
  57. package/dist/game/motion/index.d.ts +2 -0
  58. package/dist/game/motion/index.d.ts.map +1 -1
  59. package/dist/game/motion/index.js +1 -0
  60. package/dist/game/motion/index.js.map +1 -1
  61. package/dist/game/session/warmPrograms.d.ts +17 -0
  62. package/dist/game/session/warmPrograms.d.ts.map +1 -1
  63. package/dist/game/session/warmPrograms.js +18 -1
  64. package/dist/game/session/warmPrograms.js.map +1 -1
  65. package/dist/physics/ensure.d.ts +2 -0
  66. package/dist/physics/ensure.d.ts.map +1 -0
  67. package/dist/physics/ensure.js +4 -0
  68. package/dist/physics/ensure.js.map +1 -0
  69. package/dist/physics/index.d.ts +1 -0
  70. package/dist/physics/index.d.ts.map +1 -1
  71. package/dist/physics/index.js +1 -0
  72. package/dist/physics/index.js.map +1 -1
  73. package/dist/physics/world.d.ts +1 -0
  74. package/dist/physics/world.d.ts.map +1 -1
  75. package/dist/physics/world.js +1 -0
  76. package/dist/physics/world.js.map +1 -1
  77. package/dist/physics-rapier/index.d.ts +2 -0
  78. package/dist/physics-rapier/index.d.ts.map +1 -1
  79. package/dist/physics-rapier/index.js +12 -10
  80. package/dist/physics-rapier/index.js.map +1 -1
  81. package/dist/physics-rapier/rapierInit.d.ts +6 -0
  82. package/dist/physics-rapier/rapierInit.d.ts.map +1 -0
  83. package/dist/physics-rapier/rapierInit.js +12 -0
  84. package/dist/physics-rapier/rapierInit.js.map +1 -0
  85. package/dist/physics-rapier/rapierInit.lazy.d.ts +6 -0
  86. package/dist/physics-rapier/rapierInit.lazy.d.ts.map +1 -0
  87. package/dist/physics-rapier/rapierInit.lazy.js +19 -0
  88. package/dist/physics-rapier/rapierInit.lazy.js.map +1 -0
  89. package/dist/rendering/DepthPass.d.ts.map +1 -1
  90. package/dist/rendering/DepthPass.js +30 -8
  91. package/dist/rendering/DepthPass.js.map +1 -1
  92. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  93. package/dist/rendering/ForwardPass.js +7 -0
  94. package/dist/rendering/ForwardPass.js.map +1 -1
  95. package/dist/rendering/Renderer.d.ts +0 -2
  96. package/dist/rendering/Renderer.d.ts.map +1 -1
  97. package/dist/rendering/Renderer.js +6 -16
  98. package/dist/rendering/Renderer.js.map +1 -1
  99. package/dist/rendering/contracts/output.d.ts +9 -1
  100. package/dist/rendering/contracts/output.d.ts.map +1 -1
  101. package/dist/rendering/contracts/output.js.map +1 -1
  102. package/dist/rendering/output/OutputPass.d.ts +2 -0
  103. package/dist/rendering/output/OutputPass.d.ts.map +1 -1
  104. package/dist/rendering/output/OutputPass.js +26 -3
  105. package/dist/rendering/output/OutputPass.js.map +1 -1
  106. package/dist/rendering/output/ToneMappingOperators.glsl.d.ts +3 -1
  107. package/dist/rendering/output/ToneMappingOperators.glsl.d.ts.map +1 -1
  108. package/dist/rendering/output/ToneMappingOperators.glsl.js +19 -1
  109. package/dist/rendering/output/ToneMappingOperators.glsl.js.map +1 -1
  110. package/dist/rendering/post/v2Stages.d.ts +2 -7
  111. package/dist/rendering/post/v2Stages.d.ts.map +1 -1
  112. package/dist/rendering/post/v2Stages.js +2 -17
  113. package/dist/rendering/post/v2Stages.js.map +1 -1
  114. package/dist/rendering/post/vignetteColor.d.ts +8 -0
  115. package/dist/rendering/post/vignetteColor.d.ts.map +1 -0
  116. package/dist/rendering/post/vignetteColor.js +18 -0
  117. package/dist/rendering/post/vignetteColor.js.map +1 -0
  118. package/dist/rendering/renderer/PostprocessExecution.d.ts +10 -0
  119. package/dist/rendering/renderer/PostprocessExecution.d.ts.map +1 -1
  120. package/dist/rendering/renderer/PostprocessExecution.js +38 -38
  121. package/dist/rendering/renderer/PostprocessExecution.js.map +1 -1
  122. package/dist/rendering/renderer/coreOutputPostRoute.d.ts +25 -17
  123. package/dist/rendering/renderer/coreOutputPostRoute.d.ts.map +1 -1
  124. package/dist/rendering/renderer/coreOutputPostRoute.js +27 -18
  125. package/dist/rendering/renderer/coreOutputPostRoute.js.map +1 -1
  126. package/dist/rendering/renderer/qrSubFlags.d.ts +1 -1
  127. package/dist/rendering/renderer/qrSubFlags.d.ts.map +1 -1
  128. package/dist/rendering/renderer/qrSubFlags.js +2 -8
  129. package/dist/rendering/renderer/qrSubFlags.js.map +1 -1
  130. package/dist/rendering/shaders/chunks/author/index.d.ts.map +1 -1
  131. package/dist/rendering/shaders/chunks/author/index.js +7 -0
  132. package/dist/rendering/shaders/chunks/author/index.js.map +1 -1
  133. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts +11 -0
  134. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts.map +1 -0
  135. package/dist/rendering/shaders/chunks/author/shadow.glsl.js +57 -0
  136. package/dist/rendering/shaders/chunks/author/shadow.glsl.js.map +1 -0
  137. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts +20 -0
  138. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
  139. package/dist/rendering/shadows/DirectionalCascadeFitter.js +80 -7
  140. package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
  141. package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
  142. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +9 -1
  143. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
  144. package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
  145. package/dist/rendering/shadows/ShadowSystem.js +7 -2
  146. package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
  147. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +2 -0
  148. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -1
  149. package/dist/rendering/webgl2/LdrPostprocessShader.js +25 -3
  150. package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -1
  151. package/dist/rendering/webgl2/LegacyPost.d.ts +11 -2
  152. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  153. package/dist/rendering/webgl2/LegacyPost.js +191 -16
  154. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  155. package/package.json +33 -26
  156. package/templates/cinematic-scene/package.json +2 -2
  157. package/templates/mini-game/package.json +2 -2
  158. package/templates/product-viewer/package.json +2 -2
  159. package/templates/production-asset-inspector/package.json +1 -1
  160. package/templates/production-material-studio/package.json +1 -1
  161. package/templates/production-product-configurator/package.json +1 -1
  162. 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"}