@helix3/helix-cli 0.1.4-helix3.24

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 (102) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/dist/ability.d.ts +73 -0
  4. package/dist/ability.js +120 -0
  5. package/dist/ability.js.map +1 -0
  6. package/dist/api.d.ts +24 -0
  7. package/dist/api.js +83 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/browserLogin.d.ts +22 -0
  10. package/dist/browserLogin.js +148 -0
  11. package/dist/browserLogin.js.map +1 -0
  12. package/dist/bundle.d.ts +15 -0
  13. package/dist/bundle.js +98 -0
  14. package/dist/bundle.js.map +1 -0
  15. package/dist/character/canonicalSkeleton.d.ts +3 -0
  16. package/dist/character/canonicalSkeleton.js +23 -0
  17. package/dist/character/canonicalSkeleton.js.map +1 -0
  18. package/dist/character/canonicalSkeletonData.d.ts +6 -0
  19. package/dist/character/canonicalSkeletonData.js +92 -0
  20. package/dist/character/canonicalSkeletonData.js.map +1 -0
  21. package/dist/character/esm.d.ts +1 -0
  22. package/dist/character/esm.js +6 -0
  23. package/dist/character/esm.js.map +1 -0
  24. package/dist/character/importCharacter.d.ts +88 -0
  25. package/dist/character/importCharacter.js +293 -0
  26. package/dist/character/importCharacter.js.map +1 -0
  27. package/dist/character/mat4.d.ts +29 -0
  28. package/dist/character/mat4.js +103 -0
  29. package/dist/character/mat4.js.map +1 -0
  30. package/dist/character/meshyToHelixMap.d.ts +2 -0
  31. package/dist/character/meshyToHelixMap.js +40 -0
  32. package/dist/character/meshyToHelixMap.js.map +1 -0
  33. package/dist/character/quat.d.ts +15 -0
  34. package/dist/character/quat.js +137 -0
  35. package/dist/character/quat.js.map +1 -0
  36. package/dist/character/stages/bakeTexture.d.ts +20 -0
  37. package/dist/character/stages/bakeTexture.js +396 -0
  38. package/dist/character/stages/bakeTexture.js.map +1 -0
  39. package/dist/character/stages/conform.d.ts +56 -0
  40. package/dist/character/stages/conform.js +292 -0
  41. package/dist/character/stages/conform.js.map +1 -0
  42. package/dist/character/stages/ktx2.d.ts +22 -0
  43. package/dist/character/stages/ktx2.js +97 -0
  44. package/dist/character/stages/ktx2.js.map +1 -0
  45. package/dist/character/stages/mergeLods.d.ts +15 -0
  46. package/dist/character/stages/mergeLods.js +42 -0
  47. package/dist/character/stages/mergeLods.js.map +1 -0
  48. package/dist/character/stages/report.d.ts +2 -0
  49. package/dist/character/stages/report.js +19 -0
  50. package/dist/character/stages/report.js.map +1 -0
  51. package/dist/character/stages/resizeTextures.d.ts +11 -0
  52. package/dist/character/stages/resizeTextures.js +62 -0
  53. package/dist/character/stages/resizeTextures.js.map +1 -0
  54. package/dist/character/stages/retarget.d.ts +49 -0
  55. package/dist/character/stages/retarget.js +105 -0
  56. package/dist/character/stages/retarget.js.map +1 -0
  57. package/dist/character/stages/retargetClip.d.ts +27 -0
  58. package/dist/character/stages/retargetClip.js +237 -0
  59. package/dist/character/stages/retargetClip.js.map +1 -0
  60. package/dist/character/stages/simplifyMesh.d.ts +15 -0
  61. package/dist/character/stages/simplifyMesh.js +37 -0
  62. package/dist/character/stages/simplifyMesh.js.map +1 -0
  63. package/dist/character/stages/splitFacePrimitive.d.ts +30 -0
  64. package/dist/character/stages/splitFacePrimitive.js +115 -0
  65. package/dist/character/stages/splitFacePrimitive.js.map +1 -0
  66. package/dist/character/stages/weldedSimplify.d.ts +32 -0
  67. package/dist/character/stages/weldedSimplify.js +202 -0
  68. package/dist/character/stages/weldedSimplify.js.map +1 -0
  69. package/dist/character/testutil/syntheticRig.d.ts +9 -0
  70. package/dist/character/testutil/syntheticRig.js +84 -0
  71. package/dist/character/testutil/syntheticRig.js.map +1 -0
  72. package/dist/config.d.ts +25 -0
  73. package/dist/config.js +103 -0
  74. package/dist/config.js.map +1 -0
  75. package/dist/index.d.ts +2 -0
  76. package/dist/index.js +378 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/init.d.ts +1 -0
  79. package/dist/init.js +87 -0
  80. package/dist/init.js.map +1 -0
  81. package/dist/initAbility.d.ts +1 -0
  82. package/dist/initAbility.js +71 -0
  83. package/dist/initAbility.js.map +1 -0
  84. package/dist/install.d.ts +51 -0
  85. package/dist/install.js +201 -0
  86. package/dist/install.js.map +1 -0
  87. package/dist/lib.d.ts +88 -0
  88. package/dist/lib.js +347 -0
  89. package/dist/lib.js.map +1 -0
  90. package/dist/package.d.ts +11 -0
  91. package/dist/package.js +136 -0
  92. package/dist/package.js.map +1 -0
  93. package/dist/prompt.d.ts +2 -0
  94. package/dist/prompt.js +55 -0
  95. package/dist/prompt.js.map +1 -0
  96. package/dist/resolve.d.ts +57 -0
  97. package/dist/resolve.js +103 -0
  98. package/dist/resolve.js.map +1 -0
  99. package/dist/tsconfig.build.tsbuildinfo +1 -0
  100. package/package.json +58 -0
  101. package/vendor/ability-manifest.mjs +558 -0
  102. package/vendor/installed-index.mjs +71 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ // PORTED from helix-web-engine-new/tools/character-pipeline — the source of truth for the character
3
+ // pipeline. SYNC OBLIGATION: fix bugs there first, then mirror the change here; do not diverge.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.conj = void 0;
6
+ exports.mul = mul;
7
+ exports.normalize = normalize;
8
+ exports.fromMat = fromMat;
9
+ exports.rotateVec = rotateVec;
10
+ exports.slerp = slerp;
11
+ exports.sampleQuat = sampleQuat;
12
+ exports.sampleVec3 = sampleVec3;
13
+ function mul(a, b) {
14
+ const [ax, ay, az, aw] = a, [bx, by, bz, bw] = b;
15
+ return [
16
+ aw * bx + ax * bw + ay * bz - az * by,
17
+ aw * by - ax * bz + ay * bw + az * bx,
18
+ aw * bz + ax * by - ay * bx + az * bw,
19
+ aw * bw - ax * bx - ay * by - az * bz,
20
+ ];
21
+ }
22
+ /** Inverse of a unit quaternion (conjugate). */
23
+ const conj = (q) => [-q[0], -q[1], -q[2], q[3]];
24
+ exports.conj = conj;
25
+ function normalize(q) {
26
+ const l = Math.hypot(q[0], q[1], q[2], q[3]) || 1;
27
+ return [q[0] / l, q[1] / l, q[2] / l, q[3] / l];
28
+ }
29
+ /** Quaternion from the upper-3x3 of a column-major matrix (assumed a pure rotation). three.js algorithm. */
30
+ function fromMat(m) {
31
+ const r = (row, col) => m[col * 4 + row];
32
+ const m00 = r(0, 0), m01 = r(0, 1), m02 = r(0, 2);
33
+ const m10 = r(1, 0), m11 = r(1, 1), m12 = r(1, 2);
34
+ const m20 = r(2, 0), m21 = r(2, 1), m22 = r(2, 2);
35
+ const trace = m00 + m11 + m22;
36
+ let x, y, z, w;
37
+ if (trace > 0) {
38
+ const s = 0.5 / Math.sqrt(trace + 1);
39
+ w = 0.25 / s;
40
+ x = (m21 - m12) * s;
41
+ y = (m02 - m20) * s;
42
+ z = (m10 - m01) * s;
43
+ }
44
+ else if (m00 > m11 && m00 > m22) {
45
+ const s = 2 * Math.sqrt(1 + m00 - m11 - m22);
46
+ w = (m21 - m12) / s;
47
+ x = 0.25 * s;
48
+ y = (m01 + m10) / s;
49
+ z = (m02 + m20) / s;
50
+ }
51
+ else if (m11 > m22) {
52
+ const s = 2 * Math.sqrt(1 + m11 - m00 - m22);
53
+ w = (m02 - m20) / s;
54
+ x = (m01 + m10) / s;
55
+ y = 0.25 * s;
56
+ z = (m12 + m21) / s;
57
+ }
58
+ else {
59
+ const s = 2 * Math.sqrt(1 + m22 - m00 - m11);
60
+ w = (m10 - m01) / s;
61
+ x = (m02 + m20) / s;
62
+ y = (m12 + m21) / s;
63
+ z = 0.25 * s;
64
+ }
65
+ return normalize([x, y, z, w]);
66
+ }
67
+ /** Rotate a 3-vector by a unit quaternion (q · v · q⁻¹). */
68
+ function rotateVec(q, v) {
69
+ const [x, y, z, w] = q;
70
+ // t = 2 * cross(q.xyz, v); v' = v + w*t + cross(q.xyz, t)
71
+ const tx = 2 * (y * v[2] - z * v[1]);
72
+ const ty = 2 * (z * v[0] - x * v[2]);
73
+ const tz = 2 * (x * v[1] - y * v[0]);
74
+ return [v[0] + w * tx + (y * tz - z * ty), v[1] + w * ty + (z * tx - x * tz), v[2] + w * tz + (x * ty - y * tx)];
75
+ }
76
+ /** Spherical linear interpolation with double-cover (shortest-arc) handling. */
77
+ function slerp(a, b, t) {
78
+ let d = a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
79
+ let bx = b[0], by = b[1], bz = b[2], bw = b[3];
80
+ if (d < 0) {
81
+ d = -d;
82
+ bx = -bx;
83
+ by = -by;
84
+ bz = -bz;
85
+ bw = -bw;
86
+ }
87
+ if (d > 0.9995)
88
+ return normalize([a[0] + (bx - a[0]) * t, a[1] + (by - a[1]) * t, a[2] + (bz - a[2]) * t, a[3] + (bw - a[3]) * t]);
89
+ const th0 = Math.acos(d), th = th0 * t, s0 = Math.cos(th) - (d * Math.sin(th)) / Math.sin(th0), s1 = Math.sin(th) / Math.sin(th0);
90
+ return [a[0] * s0 + bx * s1, a[1] * s0 + by * s1, a[2] * s0 + bz * s1, a[3] * s0 + bw * s1];
91
+ }
92
+ /** Sample a rotation track (sorted `times`, flat VEC4 `quats`) at time `t` with slerp. */
93
+ function sampleQuat(times, quats, t) {
94
+ const n = times.length;
95
+ const q = (i) => [quats[i * 4], quats[i * 4 + 1], quats[i * 4 + 2], quats[i * 4 + 3]];
96
+ if (n === 0)
97
+ return [0, 0, 0, 1];
98
+ if (t <= times[0])
99
+ return [...q(0)];
100
+ if (t >= times[n - 1])
101
+ return [...q(n - 1)];
102
+ let lo = 0, hi = n - 1;
103
+ while (hi - lo > 1) {
104
+ const mid = (lo + hi) >> 1;
105
+ if (times[mid] <= t)
106
+ lo = mid;
107
+ else
108
+ hi = mid;
109
+ }
110
+ const span = times[hi] - times[lo];
111
+ const f = span > 1e-9 ? (t - times[lo]) / span : 0;
112
+ return slerp(q(lo), q(hi), f);
113
+ }
114
+ /** Sample a VEC3 track (translation) at time `t` with linear interpolation. */
115
+ function sampleVec3(times, vals, t) {
116
+ const n = times.length;
117
+ const v = (i) => [vals[i * 3], vals[i * 3 + 1], vals[i * 3 + 2]];
118
+ if (n === 0)
119
+ return [0, 0, 0];
120
+ if (t <= times[0])
121
+ return v(0);
122
+ if (t >= times[n - 1])
123
+ return v(n - 1);
124
+ let lo = 0, hi = n - 1;
125
+ while (hi - lo > 1) {
126
+ const mid = (lo + hi) >> 1;
127
+ if (times[mid] <= t)
128
+ lo = mid;
129
+ else
130
+ hi = mid;
131
+ }
132
+ const span = times[hi] - times[lo];
133
+ const f = span > 1e-9 ? (t - times[lo]) / span : 0;
134
+ const a = v(lo), b = v(hi);
135
+ return [a[0] + (b[0] - a[0]) * f, a[1] + (b[1] - a[1]) * f, a[2] + (b[2] - a[2]) * f];
136
+ }
137
+ //# sourceMappingURL=quat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quat.js","sourceRoot":"","sources":["../../src/character/quat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Document } from '@gltf-transform/core';
2
+ export interface BakeResult {
3
+ size: number;
4
+ /** Texels rasterized from the source surface. */
5
+ sampled: number;
6
+ /** Gutter texels filled by dilation. */
7
+ dilated: number;
8
+ /** Sampled texels whose closest source point was suspiciously far (> 2% of the bbox diagonal). */
9
+ far: number;
10
+ }
11
+ /**
12
+ * Re-bakes the SOURCE document's base-color texture onto the (decimated, freshly unwrapped) target
13
+ * document. For every texel of every target triangle: barycentric -> 3D point -> closest point on the
14
+ * SOURCE mesh (BVH) -> source UV -> bilinear sample of the source texture. Layered surfaces (hair shell
15
+ * over scalp) are disambiguated by preferring source triangles whose facing agrees with the target
16
+ * triangle when their distances are comparable. Unwritten texels are dilated outward into gutters so
17
+ * bilinear/mip filtering never bleeds background into charts. Base color only — imports carry a single
18
+ * baked atlas by contract (the conform pipeline drops other maps).
19
+ */
20
+ export declare function bakeBaseColor(target: Document, source: Document, outSize: number): Promise<BakeResult>;
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ // PORTED from helix-web-engine-new/tools/character-pipeline — the source of truth for the character
3
+ // pipeline. SYNC OBLIGATION: fix bugs there first, then mirror the change here; do not diverge.
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.bakeBaseColor = bakeBaseColor;
39
+ /**
40
+ * Re-bakes the SOURCE document's base-color texture onto the (decimated, freshly unwrapped) target
41
+ * document. For every texel of every target triangle: barycentric -> 3D point -> closest point on the
42
+ * SOURCE mesh (BVH) -> source UV -> bilinear sample of the source texture. Layered surfaces (hair shell
43
+ * over scalp) are disambiguated by preferring source triangles whose facing agrees with the target
44
+ * triangle when their distances are comparable. Unwritten texels are dilated outward into gutters so
45
+ * bilinear/mip filtering never bleeds background into charts. Base color only — imports carry a single
46
+ * baked atlas by contract (the conform pipeline drops other maps).
47
+ */
48
+ async function bakeBaseColor(target, source, outSize) {
49
+ const sharp = (await Promise.resolve().then(() => __importStar(require('sharp')))).default;
50
+ // --- source geometry + texture ---
51
+ const src = collectTriangles(source);
52
+ const srcTexture = findBaseColorTexture(source);
53
+ if (srcTexture === null)
54
+ throw new Error('bake: source document has no base-color texture');
55
+ const decoded = await sharp(Buffer.from(srcTexture)).ensureAlpha().raw().toBuffer({ resolveWithObject: true });
56
+ const image = { data: decoded.data, width: decoded.info.width, height: decoded.info.height };
57
+ const bvh = buildBvh(src.pos, src.idx);
58
+ const diag = bboxDiagonal(src.pos);
59
+ const farDistSq = (0.02 * diag) ** 2;
60
+ // --- rasterize every target triangle into the new atlas ---
61
+ // Render at 2x and lanczos-downsample: one hit per texel aliases hard texture boundaries
62
+ // (necklines, makeup edges) into sawtooth; 2x supersampling is the cheapest clean fix.
63
+ const size = outSize * 2;
64
+ const out = new Uint8ClampedArray(size * size * 4);
65
+ const written = new Uint8Array(size * size);
66
+ let sampled = 0, far = 0;
67
+ const tgt = collectTriangles(target);
68
+ const bary = { u: 0, v: 0, w: 0 };
69
+ for (let t = 0; t < tgt.idx.length; t += 3) {
70
+ const [a, b, c] = [tgt.idx[t], tgt.idx[t + 1], tgt.idx[t + 2]];
71
+ const ax = tgt.uv[a * 2] * size - 0.5, ay = tgt.uv[a * 2 + 1] * size - 0.5;
72
+ const bx = tgt.uv[b * 2] * size - 0.5, by = tgt.uv[b * 2 + 1] * size - 0.5;
73
+ const cx = tgt.uv[c * 2] * size - 0.5, cy = tgt.uv[c * 2 + 1] * size - 0.5;
74
+ const area = (bx - ax) * (cy - ay) - (by - ay) * (cx - ax);
75
+ if (Math.abs(area) < 1e-9)
76
+ continue;
77
+ // target face normal = the layer-filter reference for the whole triangle
78
+ const [nx, ny, nz] = faceNormal(tgt.pos, a, b, c);
79
+ const x0 = Math.max(0, Math.floor(Math.min(ax, bx, cx))), x1 = Math.min(size - 1, Math.ceil(Math.max(ax, bx, cx)));
80
+ const y0 = Math.max(0, Math.floor(Math.min(ay, by, cy))), y1 = Math.min(size - 1, Math.ceil(Math.max(ay, by, cy)));
81
+ for (let py = y0; py <= y1; py++) {
82
+ for (let px = x0; px <= x1; px++) {
83
+ let u = ((bx - px) * (cy - py) - (by - py) * (cx - px)) / area;
84
+ let v = ((cx - px) * (ay - py) - (cy - py) * (ax - px)) / area;
85
+ let w = 1 - u - v;
86
+ if (u < -0.02 || v < -0.02 || w < -0.02)
87
+ continue; // slight tolerance closes rasterization cracks
88
+ u = Math.max(u, 0);
89
+ v = Math.max(v, 0);
90
+ w = Math.max(w, 0);
91
+ const s = u + v + w;
92
+ u /= s;
93
+ v /= s;
94
+ w /= s;
95
+ const x = u * tgt.pos[a * 3] + v * tgt.pos[b * 3] + w * tgt.pos[c * 3];
96
+ const y = u * tgt.pos[a * 3 + 1] + v * tgt.pos[b * 3 + 1] + w * tgt.pos[c * 3 + 1];
97
+ const z = u * tgt.pos[a * 3 + 2] + v * tgt.pos[b * 3 + 2] + w * tgt.pos[c * 3 + 2];
98
+ const hit = bvh.closest(x, y, z, nx, ny, nz, bary);
99
+ if (hit < 0)
100
+ continue;
101
+ if (bary.u * 0 !== 0)
102
+ continue; // NaN guard on degenerate source triangles
103
+ const sa = src.idx[hit * 3], sb = src.idx[hit * 3 + 1], sc = src.idx[hit * 3 + 2];
104
+ const su = bary.u * src.uv[sa * 2] + bary.v * src.uv[sb * 2] + bary.w * src.uv[sc * 2];
105
+ const sv = bary.u * src.uv[sa * 2 + 1] + bary.v * src.uv[sb * 2 + 1] + bary.w * src.uv[sc * 2 + 1];
106
+ const o = (py * size + px) * 4;
107
+ bilinear(image, su, sv, out, o);
108
+ written[py * size + px] = 1;
109
+ sampled++;
110
+ if (bvh.lastDistSq > farDistSq)
111
+ far++;
112
+ }
113
+ }
114
+ }
115
+ // --- dilate gutters (8 texels — enough for trilinear down to 1/8 res mips) ---
116
+ let dilated = 0;
117
+ for (let pass = 0; pass < 8; pass++) {
118
+ const next = [];
119
+ for (let i = 0; i < written.length; i++) {
120
+ if (written[i] !== 0)
121
+ continue;
122
+ const px = i % size, py = (i / size) | 0;
123
+ let r = 0, g = 0, b2 = 0, a2 = 0, n = 0;
124
+ for (let dy = -1; dy <= 1; dy++) {
125
+ for (let dx = -1; dx <= 1; dx++) {
126
+ const qx = px + dx, qy = py + dy;
127
+ if (qx < 0 || qy < 0 || qx >= size || qy >= size || written[qy * size + qx] !== 1)
128
+ continue;
129
+ const q = (qy * size + qx) * 4;
130
+ r += out[q];
131
+ g += out[q + 1];
132
+ b2 += out[q + 2];
133
+ a2 += out[q + 3];
134
+ n++;
135
+ }
136
+ }
137
+ if (n > 0) {
138
+ const o = i * 4;
139
+ out[o] = r / n;
140
+ out[o + 1] = g / n;
141
+ out[o + 2] = b2 / n;
142
+ out[o + 3] = a2 / n;
143
+ next.push(i);
144
+ dilated++;
145
+ }
146
+ }
147
+ for (const i of next)
148
+ written[i] = 1;
149
+ }
150
+ const png = await sharp(Buffer.from(out.buffer), { raw: { width: size, height: size, channels: 4 } })
151
+ .resize(outSize, outSize, { kernel: 'lanczos3' })
152
+ .png()
153
+ .toBuffer();
154
+ const tgtTexture = target.getRoot().listTextures();
155
+ if (tgtTexture.length === 0)
156
+ throw new Error('bake: target document has no texture to replace');
157
+ for (const tex of tgtTexture)
158
+ tex.setImage(new Uint8Array(png)).setMimeType('image/png').setURI('');
159
+ return { size: outSize, sampled, dilated, far };
160
+ }
161
+ /** Flattens all mode-4 indexed prims into one soup (positions + UVs denormalized via getElement). */
162
+ function collectTriangles(document) {
163
+ const pos = [], uv = [], idx = [];
164
+ const el = [];
165
+ for (const mesh of document.getRoot().listMeshes()) {
166
+ for (const prim of mesh.listPrimitives()) {
167
+ const p = prim.getAttribute('POSITION'), t = prim.getAttribute('TEXCOORD_0'), ix = prim.getIndices();
168
+ if (prim.getMode() !== 4 || p === null || t === null || ix === null)
169
+ continue;
170
+ const base = pos.length / 3;
171
+ for (let v = 0; v < p.getCount(); v++) {
172
+ p.getElement(v, el);
173
+ pos.push(el[0], el[1], el[2]);
174
+ t.getElement(v, el);
175
+ uv.push(el[0], el[1]);
176
+ }
177
+ const arr = ix.getArray();
178
+ for (let i = 0; i < arr.length; i++)
179
+ idx.push(base + arr[i]);
180
+ }
181
+ }
182
+ if (idx.length === 0)
183
+ throw new Error('bake: no indexed triangle primitives found');
184
+ return { pos: new Float32Array(pos), uv: new Float32Array(uv), idx: new Uint32Array(idx) };
185
+ }
186
+ function findBaseColorTexture(document) {
187
+ for (const mat of document.getRoot().listMaterials()) {
188
+ const image = mat.getBaseColorTexture()?.getImage();
189
+ if (image != null)
190
+ return image;
191
+ }
192
+ return null;
193
+ }
194
+ function faceNormal(pos, a, b, c) {
195
+ const ux = pos[b * 3] - pos[a * 3], uy = pos[b * 3 + 1] - pos[a * 3 + 1], uz = pos[b * 3 + 2] - pos[a * 3 + 2];
196
+ const vx = pos[c * 3] - pos[a * 3], vy = pos[c * 3 + 1] - pos[a * 3 + 1], vz = pos[c * 3 + 2] - pos[a * 3 + 2];
197
+ const x = uy * vz - uz * vy, y = uz * vx - ux * vz, z = ux * vy - uy * vx;
198
+ const len = Math.hypot(x, y, z) || 1;
199
+ return [x / len, y / len, z / len];
200
+ }
201
+ function bboxDiagonal(pos) {
202
+ const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity];
203
+ for (let v = 0; v < pos.length; v += 3) {
204
+ for (let k = 0; k < 3; k++) {
205
+ min[k] = Math.min(min[k], pos[v + k]);
206
+ max[k] = Math.max(max[k], pos[v + k]);
207
+ }
208
+ }
209
+ return Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2]);
210
+ }
211
+ /** Bilinear sample with repeat wrap; writes RGBA to out[o..o+3]. */
212
+ function bilinear(image, u, v, out, o) {
213
+ const fx = (u - Math.floor(u)) * image.width - 0.5, fy = (v - Math.floor(v)) * image.height - 0.5;
214
+ const x0 = Math.floor(fx), y0 = Math.floor(fy);
215
+ const tx = fx - x0, ty = fy - y0;
216
+ const wrap = (n, m) => ((n % m) + m) % m;
217
+ for (let ch = 0; ch < 4; ch++) {
218
+ const s = (x, y) => image.data[(wrap(y, image.height) * image.width + wrap(x, image.width)) * 4 + ch];
219
+ out[o + ch] = s(x0, y0) * (1 - tx) * (1 - ty) + s(x0 + 1, y0) * tx * (1 - ty) + s(x0, y0 + 1) * (1 - tx) * ty + s(x0 + 1, y0 + 1) * tx * ty;
220
+ }
221
+ }
222
+ /** Median-split AABB tree over triangles; queries prefer facing-aligned hits when distances are close. */
223
+ function buildBvh(pos, idx) {
224
+ const triCount = idx.length / 3;
225
+ const order = new Uint32Array(triCount);
226
+ for (let t = 0; t < triCount; t++)
227
+ order[t] = t;
228
+ const centroids = new Float32Array(triCount * 3);
229
+ const normals = new Float32Array(triCount * 3);
230
+ for (let t = 0; t < triCount; t++) {
231
+ const a = idx[t * 3], b = idx[t * 3 + 1], c = idx[t * 3 + 2];
232
+ for (let k = 0; k < 3; k++)
233
+ centroids[t * 3 + k] = (pos[a * 3 + k] + pos[b * 3 + k] + pos[c * 3 + k]) / 3;
234
+ const [nx, ny, nz] = faceNormal(pos, a, b, c);
235
+ normals[t * 3] = nx;
236
+ normals[t * 3 + 1] = ny;
237
+ normals[t * 3 + 2] = nz;
238
+ }
239
+ const boundsOf = (start, count) => {
240
+ const b = new Float32Array([Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity]);
241
+ for (let i = start; i < start + count; i++) {
242
+ const t = order[i];
243
+ for (const vtx of [idx[t * 3], idx[t * 3 + 1], idx[t * 3 + 2]]) {
244
+ for (let k = 0; k < 3; k++) {
245
+ b[k] = Math.min(b[k], pos[vtx * 3 + k]);
246
+ b[k + 3] = Math.max(b[k + 3], pos[vtx * 3 + k]);
247
+ }
248
+ }
249
+ }
250
+ return b;
251
+ };
252
+ const build = (start, count) => {
253
+ const bounds = boundsOf(start, count);
254
+ if (count <= 8)
255
+ return { bounds, start, count, left: null, right: null };
256
+ let axis = 0, span = -1;
257
+ for (let k = 0; k < 3; k++) {
258
+ const s = bounds[k + 3] - bounds[k];
259
+ if (s > span) {
260
+ span = s;
261
+ axis = k;
262
+ }
263
+ }
264
+ const sub = Array.from(order.subarray(start, start + count));
265
+ sub.sort((p, q) => centroids[p * 3 + axis] - centroids[q * 3 + axis]);
266
+ order.set(sub, start);
267
+ const half = count >> 1;
268
+ return { bounds, start, count, left: build(start, half), right: build(start + half, count - half) };
269
+ };
270
+ const root = build(0, triCount);
271
+ const aabbDistSq = (b, x, y, z) => {
272
+ const dx = Math.max(b[0] - x, 0, x - b[3]), dy = Math.max(b[1] - y, 0, y - b[4]), dz = Math.max(b[2] - z, 0, z - b[5]);
273
+ return dx * dx + dy * dy + dz * dz;
274
+ };
275
+ const tb = { u: 0, v: 0, w: 0 };
276
+ const api = {
277
+ lastDistSq: 0,
278
+ closest(x, y, z, nx, ny, nz, bary) {
279
+ // Track the best hit overall AND the best facing-aligned hit; return the aligned one when its
280
+ // distance is within 1.5x of the absolute best (layered-surface disambiguation).
281
+ let bestD = Infinity, bestT = -1, bu = 0, bv = 0, bw = 0;
282
+ let alignD = Infinity, alignT = -1, au = 0, av = 0, aw = 0;
283
+ const visit = (node) => {
284
+ // prune at the aligned-acceptance radius (bestD * 1.5²): beyond it a hit can neither win
285
+ // outright nor qualify as the preferred aligned hit
286
+ if (aabbDistSq(node.bounds, x, y, z) > bestD * 2.25)
287
+ return;
288
+ if (node.left === null) {
289
+ for (let i = node.start; i < node.start + node.count; i++) {
290
+ const t = order[i];
291
+ const d = closestPointTriangle(pos, idx[t * 3], idx[t * 3 + 1], idx[t * 3 + 2], x, y, z, tb);
292
+ if (d < bestD) {
293
+ bestD = d;
294
+ bestT = t;
295
+ bu = tb.u;
296
+ bv = tb.v;
297
+ bw = tb.w;
298
+ }
299
+ const dot = normals[t * 3] * nx + normals[t * 3 + 1] * ny + normals[t * 3 + 2] * nz;
300
+ if (dot > 0.15 && d < alignD) {
301
+ alignD = d;
302
+ alignT = t;
303
+ au = tb.u;
304
+ av = tb.v;
305
+ aw = tb.w;
306
+ }
307
+ }
308
+ return;
309
+ }
310
+ const dl = aabbDistSq(node.left.bounds, x, y, z), dr = aabbDistSq(node.right.bounds, x, y, z);
311
+ if (dl < dr) {
312
+ visit(node.left);
313
+ visit(node.right);
314
+ }
315
+ else {
316
+ visit(node.right);
317
+ visit(node.left);
318
+ }
319
+ };
320
+ visit(root);
321
+ if (alignT >= 0 && alignD <= bestD * 2.25) {
322
+ bary.u = au;
323
+ bary.v = av;
324
+ bary.w = aw;
325
+ api.lastDistSq = alignD;
326
+ return alignT;
327
+ }
328
+ bary.u = bu;
329
+ bary.v = bv;
330
+ bary.w = bw;
331
+ api.lastDistSq = bestD;
332
+ return bestT;
333
+ },
334
+ };
335
+ return api;
336
+ }
337
+ /** Ericson closest-point-on-triangle; fills barycentrics (u=A, v=B, w=C), returns distance². */
338
+ function closestPointTriangle(pos, ia, ib, ic, px, py, pz, bary) {
339
+ const ax = pos[ia * 3], ay = pos[ia * 3 + 1], az = pos[ia * 3 + 2];
340
+ const bx = pos[ib * 3], by = pos[ib * 3 + 1], bz = pos[ib * 3 + 2];
341
+ const cx = pos[ic * 3], cy = pos[ic * 3 + 1], cz = pos[ic * 3 + 2];
342
+ const abx = bx - ax, aby = by - ay, abz = bz - az;
343
+ const acx = cx - ax, acy = cy - ay, acz = cz - az;
344
+ const apx = px - ax, apy = py - ay, apz = pz - az;
345
+ const d1 = abx * apx + aby * apy + abz * apz;
346
+ const d2 = acx * apx + acy * apy + acz * apz;
347
+ let u = 0, v = 0, w = 0;
348
+ region: {
349
+ if (d1 <= 0 && d2 <= 0) {
350
+ u = 1;
351
+ break region;
352
+ }
353
+ const bpx = px - bx, bpy = py - by, bpz = pz - bz;
354
+ const d3 = abx * bpx + aby * bpy + abz * bpz;
355
+ const d4 = acx * bpx + acy * bpy + acz * bpz;
356
+ if (d3 >= 0 && d4 <= d3) {
357
+ v = 1;
358
+ break region;
359
+ }
360
+ const vc = d1 * d4 - d3 * d2;
361
+ if (vc <= 0 && d1 >= 0 && d3 <= 0) {
362
+ v = d1 / (d1 - d3);
363
+ u = 1 - v;
364
+ break region;
365
+ }
366
+ const cpx = px - cx, cpy = py - cy, cpz = pz - cz;
367
+ const d5 = abx * cpx + aby * cpy + abz * cpz;
368
+ const d6 = acx * cpx + acy * cpy + acz * cpz;
369
+ if (d6 >= 0 && d5 <= d6) {
370
+ w = 1;
371
+ break region;
372
+ }
373
+ const vb = d5 * d2 - d1 * d6;
374
+ if (vb <= 0 && d2 >= 0 && d6 <= 0) {
375
+ w = d2 / (d2 - d6);
376
+ u = 1 - w;
377
+ break region;
378
+ }
379
+ const va = d3 * d6 - d5 * d4;
380
+ if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {
381
+ w = (d4 - d3) / (d4 - d3 + (d5 - d6));
382
+ v = 1 - w;
383
+ break region;
384
+ }
385
+ const denom = 1 / (va + vb + vc);
386
+ v = vb * denom;
387
+ w = vc * denom;
388
+ u = 1 - v - w;
389
+ }
390
+ bary.u = u;
391
+ bary.v = v;
392
+ bary.w = w;
393
+ const qx = u * ax + v * bx + w * cx - px, qy = u * ay + v * by + w * cy - py, qz = u * az + v * bz + w * cz - pz;
394
+ return qx * qx + qy * qy + qz * qz;
395
+ }
396
+ //# sourceMappingURL=bakeTexture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bakeTexture.js","sourceRoot":"","sources":["../../../src/character/stages/bakeTexture.ts"],"names":[],"mappings":"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"}