@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.
- package/LICENSE +21 -0
- package/README.md +64 -0
- package/dist/ability.d.ts +73 -0
- package/dist/ability.js +120 -0
- package/dist/ability.js.map +1 -0
- package/dist/api.d.ts +24 -0
- package/dist/api.js +83 -0
- package/dist/api.js.map +1 -0
- package/dist/browserLogin.d.ts +22 -0
- package/dist/browserLogin.js +148 -0
- package/dist/browserLogin.js.map +1 -0
- package/dist/bundle.d.ts +15 -0
- package/dist/bundle.js +98 -0
- package/dist/bundle.js.map +1 -0
- package/dist/character/canonicalSkeleton.d.ts +3 -0
- package/dist/character/canonicalSkeleton.js +23 -0
- package/dist/character/canonicalSkeleton.js.map +1 -0
- package/dist/character/canonicalSkeletonData.d.ts +6 -0
- package/dist/character/canonicalSkeletonData.js +92 -0
- package/dist/character/canonicalSkeletonData.js.map +1 -0
- package/dist/character/esm.d.ts +1 -0
- package/dist/character/esm.js +6 -0
- package/dist/character/esm.js.map +1 -0
- package/dist/character/importCharacter.d.ts +88 -0
- package/dist/character/importCharacter.js +293 -0
- package/dist/character/importCharacter.js.map +1 -0
- package/dist/character/mat4.d.ts +29 -0
- package/dist/character/mat4.js +103 -0
- package/dist/character/mat4.js.map +1 -0
- package/dist/character/meshyToHelixMap.d.ts +2 -0
- package/dist/character/meshyToHelixMap.js +40 -0
- package/dist/character/meshyToHelixMap.js.map +1 -0
- package/dist/character/quat.d.ts +15 -0
- package/dist/character/quat.js +137 -0
- package/dist/character/quat.js.map +1 -0
- package/dist/character/stages/bakeTexture.d.ts +20 -0
- package/dist/character/stages/bakeTexture.js +396 -0
- package/dist/character/stages/bakeTexture.js.map +1 -0
- package/dist/character/stages/conform.d.ts +56 -0
- package/dist/character/stages/conform.js +292 -0
- package/dist/character/stages/conform.js.map +1 -0
- package/dist/character/stages/ktx2.d.ts +22 -0
- package/dist/character/stages/ktx2.js +97 -0
- package/dist/character/stages/ktx2.js.map +1 -0
- package/dist/character/stages/mergeLods.d.ts +15 -0
- package/dist/character/stages/mergeLods.js +42 -0
- package/dist/character/stages/mergeLods.js.map +1 -0
- package/dist/character/stages/report.d.ts +2 -0
- package/dist/character/stages/report.js +19 -0
- package/dist/character/stages/report.js.map +1 -0
- package/dist/character/stages/resizeTextures.d.ts +11 -0
- package/dist/character/stages/resizeTextures.js +62 -0
- package/dist/character/stages/resizeTextures.js.map +1 -0
- package/dist/character/stages/retarget.d.ts +49 -0
- package/dist/character/stages/retarget.js +105 -0
- package/dist/character/stages/retarget.js.map +1 -0
- package/dist/character/stages/retargetClip.d.ts +27 -0
- package/dist/character/stages/retargetClip.js +237 -0
- package/dist/character/stages/retargetClip.js.map +1 -0
- package/dist/character/stages/simplifyMesh.d.ts +15 -0
- package/dist/character/stages/simplifyMesh.js +37 -0
- package/dist/character/stages/simplifyMesh.js.map +1 -0
- package/dist/character/stages/splitFacePrimitive.d.ts +30 -0
- package/dist/character/stages/splitFacePrimitive.js +115 -0
- package/dist/character/stages/splitFacePrimitive.js.map +1 -0
- package/dist/character/stages/weldedSimplify.d.ts +32 -0
- package/dist/character/stages/weldedSimplify.js +202 -0
- package/dist/character/stages/weldedSimplify.js.map +1 -0
- package/dist/character/testutil/syntheticRig.d.ts +9 -0
- package/dist/character/testutil/syntheticRig.js +84 -0
- package/dist/character/testutil/syntheticRig.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.js +103 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +378 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +87 -0
- package/dist/init.js.map +1 -0
- package/dist/initAbility.d.ts +1 -0
- package/dist/initAbility.js +71 -0
- package/dist/initAbility.js.map +1 -0
- package/dist/install.d.ts +51 -0
- package/dist/install.js +201 -0
- package/dist/install.js.map +1 -0
- package/dist/lib.d.ts +88 -0
- package/dist/lib.js +347 -0
- package/dist/lib.js.map +1 -0
- package/dist/package.d.ts +11 -0
- package/dist/package.js +136 -0
- package/dist/package.js.map +1 -0
- package/dist/prompt.d.ts +2 -0
- package/dist/prompt.js +55 -0
- package/dist/prompt.js.map +1 -0
- package/dist/resolve.d.ts +57 -0
- package/dist/resolve.js +103 -0
- package/dist/resolve.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +58 -0
- package/vendor/ability-manifest.mjs +558 -0
- 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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"}
|