distark-render 1.1.4 → 1.1.6
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 +0 -0
- package/assets/tank.json +0 -0
- package/dist/cli/animate.d.ts +0 -0
- package/dist/cli/animate.d.ts.map +0 -0
- package/dist/cli/animate.js +0 -0
- package/dist/cli/animate.js.map +0 -0
- package/dist/cli/diff.d.ts +0 -0
- package/dist/cli/diff.d.ts.map +0 -0
- package/dist/cli/diff.js +0 -0
- package/dist/cli/diff.js.map +0 -0
- package/dist/cli/distark-check.d.ts +0 -0
- package/dist/cli/distark-check.d.ts.map +0 -0
- package/dist/cli/distark-check.js +14 -14
- package/dist/cli/distark-check.js.map +0 -0
- package/dist/cli/query.d.ts +0 -0
- package/dist/cli/query.d.ts.map +0 -0
- package/dist/cli/query.js +0 -0
- package/dist/cli/query.js.map +0 -0
- package/dist/cli/record.d.ts +0 -0
- package/dist/cli/record.d.ts.map +0 -0
- package/dist/cli/record.js +0 -0
- package/dist/cli/record.js.map +0 -0
- package/dist/cli/render.d.ts +0 -0
- package/dist/cli/render.d.ts.map +0 -0
- package/dist/cli/render.js +0 -0
- package/dist/cli/render.js.map +0 -0
- package/dist/cli/shared.d.ts +0 -0
- package/dist/cli/shared.d.ts.map +0 -0
- package/dist/cli/shared.js +0 -0
- package/dist/cli/shared.js.map +0 -0
- package/dist/cli/test.d.ts +0 -0
- package/dist/cli/test.d.ts.map +0 -0
- package/dist/cli/test.js +0 -0
- package/dist/cli/test.js.map +0 -0
- package/dist/cli/verify.d.ts +0 -0
- package/dist/cli/verify.d.ts.map +0 -0
- package/dist/cli/verify.js +0 -0
- package/dist/cli/verify.js.map +0 -0
- package/dist/modules/adapters/p5Renderer.d.ts +0 -0
- package/dist/modules/adapters/p5Renderer.d.ts.map +0 -0
- package/dist/modules/adapters/p5Renderer.js +0 -0
- package/dist/modules/adapters/p5Renderer.js.map +0 -0
- package/dist/modules/adapters/skiaRenderer.d.ts +0 -0
- package/dist/modules/adapters/skiaRenderer.d.ts.map +0 -0
- package/dist/modules/adapters/skiaRenderer.js +0 -0
- package/dist/modules/adapters/skiaRenderer.js.map +0 -0
- package/dist/modules/animationDiff.d.ts +0 -0
- package/dist/modules/animationDiff.d.ts.map +0 -0
- package/dist/modules/animationDiff.js +0 -0
- package/dist/modules/animationDiff.js.map +0 -0
- package/dist/modules/eyeSystem.d.ts +0 -0
- package/dist/modules/eyeSystem.d.ts.map +0 -0
- package/dist/modules/eyeSystem.js +0 -0
- package/dist/modules/eyeSystem.js.map +0 -0
- package/dist/modules/imageLoad.d.ts +0 -0
- package/dist/modules/imageLoad.d.ts.map +0 -0
- package/dist/modules/imageLoad.js +0 -0
- package/dist/modules/imageLoad.js.map +0 -0
- package/dist/modules/mouthSystem.d.ts +0 -0
- package/dist/modules/mouthSystem.d.ts.map +0 -0
- package/dist/modules/mouthSystem.js +0 -0
- package/dist/modules/mouthSystem.js.map +0 -0
- package/dist/modules/renderRig.d.ts +0 -0
- package/dist/modules/renderRig.d.ts.map +1 -1
- package/dist/modules/renderRig.js +110 -124
- package/dist/modules/renderRig.js.map +1 -1
- package/dist/tests/helpers.d.ts +0 -0
- package/dist/tests/helpers.d.ts.map +0 -0
- package/dist/tests/helpers.js +0 -0
- package/dist/tests/helpers.js.map +0 -0
- package/dist/tests/test-animation-diff-rendering.d.ts +0 -0
- package/dist/tests/test-animation-diff-rendering.d.ts.map +0 -0
- package/dist/tests/test-animation-diff-rendering.js +0 -0
- package/dist/tests/test-animation-diff-rendering.js.map +0 -0
- package/dist/tests/test-animation-diff.d.ts +0 -0
- package/dist/tests/test-animation-diff.d.ts.map +0 -0
- package/dist/tests/test-animation-diff.js +0 -0
- package/dist/tests/test-animation-diff.js.map +0 -0
- package/dist/tests/test-autofit.d.ts +0 -0
- package/dist/tests/test-autofit.d.ts.map +0 -0
- package/dist/tests/test-autofit.js +0 -0
- package/dist/tests/test-autofit.js.map +0 -0
- package/dist/tests/test-base-autofit.d.ts +0 -0
- package/dist/tests/test-base-autofit.d.ts.map +0 -0
- package/dist/tests/test-base-autofit.js +0 -0
- package/dist/tests/test-base-autofit.js.map +0 -0
- package/dist/tests/test-cli.d.ts +0 -0
- package/dist/tests/test-cli.d.ts.map +0 -0
- package/dist/tests/test-cli.js +0 -0
- package/dist/tests/test-cli.js.map +0 -0
- package/dist/tests/test-image-loading.d.ts +0 -0
- package/dist/tests/test-image-loading.d.ts.map +0 -0
- package/dist/tests/test-image-loading.js +0 -0
- package/dist/tests/test-image-loading.js.map +0 -0
- package/dist/tests/test-joint-movement.d.ts +0 -0
- package/dist/tests/test-joint-movement.d.ts.map +0 -0
- package/dist/tests/test-joint-movement.js +0 -0
- package/dist/tests/test-joint-movement.js.map +0 -0
- package/dist/tests/test-p5-image-types.d.ts +0 -0
- package/dist/tests/test-p5-image-types.d.ts.map +0 -0
- package/dist/tests/test-p5-image-types.js +0 -0
- package/dist/tests/test-p5-image-types.js.map +0 -0
- package/dist/tests/test-skia.d.ts +0 -0
- package/dist/tests/test-skia.d.ts.map +0 -0
- package/dist/tests/test-skia.js +0 -0
- package/dist/tests/test-skia.js.map +0 -0
- package/dist/tests/test-torso-pivot.d.ts +11 -0
- package/dist/tests/test-torso-pivot.d.ts.map +1 -0
- package/dist/tests/test-torso-pivot.js +265 -0
- package/dist/tests/test-torso-pivot.js.map +1 -0
- package/dist/tests/test-visual-verification.d.ts +0 -0
- package/dist/tests/test-visual-verification.d.ts.map +0 -0
- package/dist/tests/test-visual-verification.js +0 -0
- package/dist/tests/test-visual-verification.js.map +0 -0
- package/dist/types.d.ts +0 -0
- package/dist/types.d.ts.map +0 -0
- package/dist/types.js +0 -0
- package/dist/types.js.map +0 -0
- package/package.json +2 -1
- package/assets/presets/jumping-jack.json +0 -194
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Torso Pivot Test
|
|
3
|
+
* Verifies that the torso pivot point works correctly:
|
|
4
|
+
* - rotationValues.torso rotates the entire upper body around root_torso
|
|
5
|
+
* - All torso children (head, arms, thighs) follow the rotation
|
|
6
|
+
* - Changing root_torso.y moves the pivot height, changing the rotation arc
|
|
7
|
+
*
|
|
8
|
+
* Saves visual outputs to test-outputs/ for manual inspection.
|
|
9
|
+
*/
|
|
10
|
+
import { SkiaRenderer } from '../modules/adapters/skiaRenderer.js';
|
|
11
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
12
|
+
// ─── canvas helpers ───────────────────────────────────────────────────────────
|
|
13
|
+
async function saveCanvas(canvas, path) {
|
|
14
|
+
const buffer = await canvas.toBuffer('image/png');
|
|
15
|
+
await writeFile(path, buffer);
|
|
16
|
+
console.log(` 💾 Saved: ${path}`);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Annotate the rendered frame with text labels and a crosshair at the
|
|
20
|
+
* torso pivot world position (pulled from computedPivotPoints).
|
|
21
|
+
*/
|
|
22
|
+
function annotate(ctx, label, pivotX, pivotY) {
|
|
23
|
+
// Label
|
|
24
|
+
ctx.save();
|
|
25
|
+
ctx.fillStyle = 'rgba(0,0,0,0.65)';
|
|
26
|
+
ctx.fillRect(8, 8, 420, 40);
|
|
27
|
+
ctx.fillStyle = '#fff';
|
|
28
|
+
ctx.font = 'bold 22px monospace';
|
|
29
|
+
ctx.fillText(label, 16, 36);
|
|
30
|
+
ctx.restore();
|
|
31
|
+
// Crosshair at torso pivot
|
|
32
|
+
ctx.save();
|
|
33
|
+
ctx.strokeStyle = '#ff4400';
|
|
34
|
+
ctx.lineWidth = 2;
|
|
35
|
+
const r = 12;
|
|
36
|
+
ctx.beginPath();
|
|
37
|
+
ctx.moveTo(pivotX - r, pivotY);
|
|
38
|
+
ctx.lineTo(pivotX + r, pivotY);
|
|
39
|
+
ctx.moveTo(pivotX, pivotY - r);
|
|
40
|
+
ctx.lineTo(pivotX, pivotY + r);
|
|
41
|
+
ctx.stroke();
|
|
42
|
+
ctx.beginPath();
|
|
43
|
+
ctx.arc(pivotX, pivotY, r, 0, Math.PI * 2);
|
|
44
|
+
ctx.strokeStyle = '#ff4400';
|
|
45
|
+
ctx.stroke();
|
|
46
|
+
ctx.restore();
|
|
47
|
+
}
|
|
48
|
+
async function renderPose(renderer, baseRig, overrides, width, height, label, outPath) {
|
|
49
|
+
// Build a modified rig with requested overrides
|
|
50
|
+
const rig = {
|
|
51
|
+
...baseRig,
|
|
52
|
+
rotationValues: {
|
|
53
|
+
...(baseRig.rotationValues || {}),
|
|
54
|
+
torso: overrides.torsoRotation ?? 0
|
|
55
|
+
},
|
|
56
|
+
pivotPoints: {
|
|
57
|
+
...(baseRig.pivotPoints || {}),
|
|
58
|
+
...(overrides.root_torso ? { root_torso: overrides.root_torso } : {})
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const canvas = await renderer.createCanvas(width, height);
|
|
62
|
+
const ctx = canvas.getContext('2d');
|
|
63
|
+
// Draw background
|
|
64
|
+
ctx.fillStyle = '#f0f0f0';
|
|
65
|
+
ctx.fillRect(0, 0, width, height);
|
|
66
|
+
// Render character (with pivot points visible)
|
|
67
|
+
renderer.renderToCanvas(canvas, rig, { canvasWidth: width, canvasHeight: height }, true);
|
|
68
|
+
// Find the root_torso pivot in computed pivot points
|
|
69
|
+
const renderData = renderer.compute(rig, { canvasWidth: width, canvasHeight: height });
|
|
70
|
+
const torsoPivot = renderData.pivotPoints.find(p => p.name === 'root_torso');
|
|
71
|
+
const pivotX = torsoPivot?.x ?? width / 2;
|
|
72
|
+
const pivotY = torsoPivot?.y ?? height / 2;
|
|
73
|
+
// Annotate
|
|
74
|
+
annotate(ctx, label, pivotX, pivotY);
|
|
75
|
+
await saveCanvas(canvas, outPath);
|
|
76
|
+
return { pivotX, pivotY };
|
|
77
|
+
}
|
|
78
|
+
// ─── test cases ───────────────────────────────────────────────────────────────
|
|
79
|
+
async function testBaseline(renderer, rig, w, h) {
|
|
80
|
+
console.log('\n Test 1: Baseline (torso = 0)');
|
|
81
|
+
console.log(' ' + '-'.repeat(40));
|
|
82
|
+
await renderPose(renderer, rig, { torsoRotation: 0 }, w, h, 'torso = 0 (baseline)', 'test-outputs/torso-pivot-1-baseline.png');
|
|
83
|
+
console.log(' Visual saved. Baseline always passes.');
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get world position of a named pivot from computed data.
|
|
88
|
+
*/
|
|
89
|
+
function getPivot(renderer, rig, pivotName, w, h) {
|
|
90
|
+
const data = renderer.compute(rig, { canvasWidth: w, canvasHeight: h });
|
|
91
|
+
return data.pivotPoints.find(p => p.name === pivotName) ?? { x: 0, y: 0 };
|
|
92
|
+
}
|
|
93
|
+
async function testLeanRight(renderer, rig, w, h) {
|
|
94
|
+
console.log('\n Test 2: Lean Right (torso = +0.35 rad ≈ 20°)');
|
|
95
|
+
console.log(' ' + '-'.repeat(40));
|
|
96
|
+
// Save visuals
|
|
97
|
+
await renderPose(renderer, rig, { torsoRotation: 0 }, w, h, 'torso = 0 (ref)', 'test-outputs/torso-pivot-2-before.png');
|
|
98
|
+
await renderPose(renderer, rig, { torsoRotation: 0.35 }, w, h, 'torso = +0.35 rad (lean right)', 'test-outputs/torso-pivot-2-after.png');
|
|
99
|
+
// Use computed pivot positions — no images needed
|
|
100
|
+
const baseRig = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: 0 } };
|
|
101
|
+
const leanRig = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: 0.35 } };
|
|
102
|
+
const headBefore = getPivot(renderer, baseRig, 'torso_head', w, h);
|
|
103
|
+
const headAfter = getPivot(renderer, leanRig, 'torso_head', w, h);
|
|
104
|
+
const shift = headAfter.x - headBefore.x;
|
|
105
|
+
console.log(` torso_head pivot X: ${headBefore.x.toFixed(1)} → ${headAfter.x.toFixed(1)} (shift = ${shift.toFixed(1)} px)`);
|
|
106
|
+
const passed = shift > 5;
|
|
107
|
+
console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'} - Head pivot shifted right by ${shift.toFixed(1)} px`);
|
|
108
|
+
return passed;
|
|
109
|
+
}
|
|
110
|
+
async function testLeanLeft(renderer, rig, w, h) {
|
|
111
|
+
console.log('\n Test 3: Lean Left (torso = -0.35 rad ≈ -20°)');
|
|
112
|
+
console.log(' ' + '-'.repeat(40));
|
|
113
|
+
// Save visuals
|
|
114
|
+
await renderPose(renderer, rig, { torsoRotation: 0 }, w, h, 'torso = 0 (ref)', 'test-outputs/torso-pivot-3-before.png');
|
|
115
|
+
await renderPose(renderer, rig, { torsoRotation: -0.35 }, w, h, 'torso = -0.35 rad (lean left)', 'test-outputs/torso-pivot-3-after.png');
|
|
116
|
+
// Use computed pivot positions
|
|
117
|
+
const baseRig = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: 0 } };
|
|
118
|
+
const leanRig = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: -0.35 } };
|
|
119
|
+
const headBefore = getPivot(renderer, baseRig, 'torso_head', w, h);
|
|
120
|
+
const headAfter = getPivot(renderer, leanRig, 'torso_head', w, h);
|
|
121
|
+
const shift = headBefore.x - headAfter.x; // leftward = positive
|
|
122
|
+
console.log(` torso_head pivot X: ${headBefore.x.toFixed(1)} → ${headAfter.x.toFixed(1)} (leftward shift = ${shift.toFixed(1)} px)`);
|
|
123
|
+
const passed = shift > 5;
|
|
124
|
+
console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'} - Head pivot shifted left by ${shift.toFixed(1)} px`);
|
|
125
|
+
return passed;
|
|
126
|
+
}
|
|
127
|
+
async function testTorsoMovesWithPivot(renderer, rig, w, h) {
|
|
128
|
+
console.log('\n Test 4a: Torso Image Moves When root_torso Moves');
|
|
129
|
+
console.log(' ' + '-'.repeat(40));
|
|
130
|
+
await renderPose(renderer, rig, { torsoRotation: 0, root_torso: { x: 0, y: 0 } }, w, h, 'root_torso = (0, 0) — torso at feet', 'test-outputs/torso-pivot-4a-at-feet.png');
|
|
131
|
+
await renderPose(renderer, rig, { torsoRotation: 0, root_torso: { x: 0, y: -200 } }, w, h, 'root_torso = (0, -200) — torso lifted', 'test-outputs/torso-pivot-4a-lifted.png');
|
|
132
|
+
// The root_torso pivot world Y should differ by 200 px between the two rigs
|
|
133
|
+
const rigAtFeet = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: 0 },
|
|
134
|
+
pivotPoints: { ...(rig.pivotPoints || {}), root_torso: { x: 0, y: 0 } } };
|
|
135
|
+
const rigLifted = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: 0 },
|
|
136
|
+
pivotPoints: { ...(rig.pivotPoints || {}), root_torso: { x: 0, y: -200 } } };
|
|
137
|
+
const pivotAtFeet = getPivot(renderer, rigAtFeet, 'root_torso', w, h);
|
|
138
|
+
const pivotLifted = getPivot(renderer, rigLifted, 'root_torso', w, h);
|
|
139
|
+
const yShift = pivotAtFeet.y - pivotLifted.y; // should be ≈ 200
|
|
140
|
+
console.log(` root_torso Y (at feet): ${pivotAtFeet.y.toFixed(1)}`);
|
|
141
|
+
console.log(` root_torso Y (lifted): ${pivotLifted.y.toFixed(1)}`);
|
|
142
|
+
console.log(` Vertical shift: ${yShift.toFixed(1)} px (expected ≈ 200)`);
|
|
143
|
+
const passed = Math.abs(yShift - 200) < 1;
|
|
144
|
+
console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'} — pivot (and torso bottom) moved by ${yShift.toFixed(1)} px`);
|
|
145
|
+
return passed;
|
|
146
|
+
}
|
|
147
|
+
async function testPivotHeightEffect(renderer, rig, w, h) {
|
|
148
|
+
console.log('\n Test 4b: Pivot Height Changes Head Arc');
|
|
149
|
+
console.log(' ' + '-'.repeat(40));
|
|
150
|
+
const angle = 0.3;
|
|
151
|
+
// Save visuals
|
|
152
|
+
await renderPose(renderer, rig, { torsoRotation: angle, root_torso: { x: 19, y: -62 } }, w, h, `torso = +0.3 rad, root_torso.y = -62 (hip)`, 'test-outputs/torso-pivot-4-hip.png');
|
|
153
|
+
await renderPose(renderer, rig, { torsoRotation: angle, root_torso: { x: 19, y: -200 } }, w, h, `torso = +0.3 rad, root_torso.y = -200 (high)`, 'test-outputs/torso-pivot-4-high.png');
|
|
154
|
+
// Compare torso_head pivot positions using computed data
|
|
155
|
+
const rigHip = {
|
|
156
|
+
...rig,
|
|
157
|
+
rotationValues: { ...(rig.rotationValues || {}), torso: angle },
|
|
158
|
+
pivotPoints: { ...(rig.pivotPoints || {}), root_torso: { x: 19, y: -62 } }
|
|
159
|
+
};
|
|
160
|
+
const rigHigh = {
|
|
161
|
+
...rig,
|
|
162
|
+
rotationValues: { ...(rig.rotationValues || {}), torso: angle },
|
|
163
|
+
pivotPoints: { ...(rig.pivotPoints || {}), root_torso: { x: 19, y: -200 } }
|
|
164
|
+
};
|
|
165
|
+
const headHip = getPivot(renderer, rigHip, 'torso_head', w, h);
|
|
166
|
+
const headHigh = getPivot(renderer, rigHigh, 'torso_head', w, h);
|
|
167
|
+
const diff = Math.abs(headHigh.x - headHip.x) + Math.abs(headHigh.y - headHip.y);
|
|
168
|
+
console.log(` torso_head (hip pivot): (${headHip.x.toFixed(1)}, ${headHip.y.toFixed(1)})`);
|
|
169
|
+
console.log(` torso_head (high pivot): (${headHigh.x.toFixed(1)}, ${headHigh.y.toFixed(1)})`);
|
|
170
|
+
console.log(` Total distance: ${diff.toFixed(1)} px`);
|
|
171
|
+
// A higher pivot point at the same rotation angle should place the head pivot
|
|
172
|
+
// at a different world position.
|
|
173
|
+
const passed = diff > 1;
|
|
174
|
+
console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'} - Different pivot heights yield different head positions`);
|
|
175
|
+
return passed;
|
|
176
|
+
}
|
|
177
|
+
async function testLegsStayStill(renderer, rig, w, h) {
|
|
178
|
+
console.log('\n Test 5: Legs Stay Still When Torso Rotates');
|
|
179
|
+
console.log(' ' + '-'.repeat(40));
|
|
180
|
+
await renderPose(renderer, rig, { torsoRotation: 0 }, w, h, 'torso = 0 — legs reference', 'test-outputs/torso-pivot-5-legs-baseline.png');
|
|
181
|
+
await renderPose(renderer, rig, { torsoRotation: 0.45 }, w, h, 'torso = +0.45 rad — legs should not move', 'test-outputs/torso-pivot-5-legs-rotated.png');
|
|
182
|
+
const baseRig = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: 0 } };
|
|
183
|
+
const leanRig = { ...rig, rotationValues: { ...(rig.rotationValues || {}), torso: 0.45 } };
|
|
184
|
+
// Head SHOULD move
|
|
185
|
+
const headBase = getPivot(renderer, baseRig, 'torso_head', w, h);
|
|
186
|
+
const headLean = getPivot(renderer, leanRig, 'torso_head', w, h);
|
|
187
|
+
const headShift = Math.abs(headLean.x - headBase.x);
|
|
188
|
+
// Hips should NOT move
|
|
189
|
+
const lHipBase = getPivot(renderer, baseRig, 'torso_leftThigh', w, h);
|
|
190
|
+
const lHipLean = getPivot(renderer, leanRig, 'torso_leftThigh', w, h);
|
|
191
|
+
const rHipBase = getPivot(renderer, baseRig, 'torso_rightThigh', w, h);
|
|
192
|
+
const rHipLean = getPivot(renderer, leanRig, 'torso_rightThigh', w, h);
|
|
193
|
+
const lHipShift = Math.hypot(lHipLean.x - lHipBase.x, lHipLean.y - lHipBase.y);
|
|
194
|
+
const rHipShift = Math.hypot(rHipLean.x - rHipBase.x, rHipLean.y - rHipBase.y);
|
|
195
|
+
console.log(` torso_head shift: ${headShift.toFixed(1)} px (expected > 5)`);
|
|
196
|
+
console.log(` torso_leftThigh shift: ${lHipShift.toFixed(2)} px (expected = 0)`);
|
|
197
|
+
console.log(` torso_rightThigh shift: ${rHipShift.toFixed(2)} px (expected = 0)`);
|
|
198
|
+
const headMoved = headShift > 5;
|
|
199
|
+
const legsStill = lHipShift < 0.01 && rHipShift < 0.01;
|
|
200
|
+
console.log(` Head moved: ${headMoved ? '✅' : '❌'}`);
|
|
201
|
+
console.log(` Legs still: ${legsStill ? '✅' : '❌'}`);
|
|
202
|
+
const passed = headMoved && legsStill;
|
|
203
|
+
console.log(` Result: ${passed ? '✅ PASS' : '❌ FAIL'}`);
|
|
204
|
+
return passed;
|
|
205
|
+
}
|
|
206
|
+
async function testSweep(renderer, rig, w, h) {
|
|
207
|
+
console.log('\n Test 6: Rotation Sweep (-0.5 to +0.5 rad, 5 frames)');
|
|
208
|
+
console.log(' ' + '-'.repeat(40));
|
|
209
|
+
const angles = [-0.5, -0.25, 0, 0.25, 0.5];
|
|
210
|
+
for (let i = 0; i < angles.length; i++) {
|
|
211
|
+
const deg = (angles[i] * 180 / Math.PI).toFixed(1);
|
|
212
|
+
await renderPose(renderer, rig, { torsoRotation: angles[i] }, w, h, `torso = ${angles[i].toFixed(2)} rad (${deg}°)`, `test-outputs/torso-pivot-6-sweep-${i}.png`);
|
|
213
|
+
}
|
|
214
|
+
console.log(` Saved ${angles.length} sweep frames.`);
|
|
215
|
+
console.log(' Result: ✅ PASS');
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
// ─── main ─────────────────────────────────────────────────────────────────────
|
|
219
|
+
async function runTorsoPivotTests(inputFile) {
|
|
220
|
+
console.log('\n🔄 Torso Pivot Test');
|
|
221
|
+
console.log('='.repeat(50));
|
|
222
|
+
console.log(`📦 Loading ${inputFile}...`);
|
|
223
|
+
const rig = JSON.parse(await readFile(inputFile, 'utf-8'));
|
|
224
|
+
const width = 900;
|
|
225
|
+
const height = 1100;
|
|
226
|
+
console.log('🎨 Setting up renderer and loading images...');
|
|
227
|
+
const renderer = new SkiaRenderer();
|
|
228
|
+
await renderer.loadImages(rig);
|
|
229
|
+
// Ensure output directory exists
|
|
230
|
+
await mkdir('test-outputs', { recursive: true });
|
|
231
|
+
console.log('\n🧪 Running torso pivot tests...\n');
|
|
232
|
+
const results = {
|
|
233
|
+
'Baseline render': await testBaseline(renderer, rig, width, height),
|
|
234
|
+
'Lean right': await testLeanRight(renderer, rig, width, height),
|
|
235
|
+
'Lean left': await testLeanLeft(renderer, rig, width, height),
|
|
236
|
+
'Torso moves with pivot': await testTorsoMovesWithPivot(renderer, rig, width, height),
|
|
237
|
+
'Pivot height effect': await testPivotHeightEffect(renderer, rig, width, height),
|
|
238
|
+
'Legs stay still': await testLegsStayStill(renderer, rig, width, height),
|
|
239
|
+
'Rotation sweep': await testSweep(renderer, rig, width, height),
|
|
240
|
+
};
|
|
241
|
+
console.log('\n' + '='.repeat(50));
|
|
242
|
+
console.log('📊 Test Summary:');
|
|
243
|
+
const passCount = Object.values(results).filter(Boolean).length;
|
|
244
|
+
const total = Object.keys(results).length;
|
|
245
|
+
console.log(` ${passCount}/${total} tests passed`);
|
|
246
|
+
Object.entries(results).forEach(([name, ok]) => console.log(` ${ok ? '✅' : '❌'} ${name}`));
|
|
247
|
+
const allPassed = passCount === total;
|
|
248
|
+
console.log(allPassed
|
|
249
|
+
? '\n✅ All torso pivot tests PASSED\n'
|
|
250
|
+
: '\n❌ Some torso pivot tests FAILED\n');
|
|
251
|
+
return allPassed;
|
|
252
|
+
}
|
|
253
|
+
async function main() {
|
|
254
|
+
const inputFile = process.argv[2] || 'tank_truncated.json';
|
|
255
|
+
try {
|
|
256
|
+
const ok = await runTorsoPivotTests(inputFile);
|
|
257
|
+
process.exit(ok ? 0 : 1);
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
console.error('❌ Test failed with error:', err);
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
main();
|
|
265
|
+
//# sourceMappingURL=test-torso-pivot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-torso-pivot.js","sourceRoot":"","sources":["../../tests/test-torso-pivot.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/types.d.ts
CHANGED
|
File without changes
|
package/dist/types.d.ts.map
CHANGED
|
File without changes
|
package/dist/types.js
CHANGED
|
File without changes
|
package/dist/types.js.map
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "distark-render",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "Rendering-agnostic character rig system with TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/modules/renderRig.js",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"build": "tsc",
|
|
53
53
|
"check": "node dist/cli/distark-check.js",
|
|
54
54
|
"test-cli": "npm run build && node dist/tests/test-cli.js",
|
|
55
|
+
"test-torso-pivot": "npm run build && node dist/tests/test-torso-pivot.js",
|
|
55
56
|
"watch": "tsc --watch",
|
|
56
57
|
"dev": "tsc --watch & http-server -p 8080",
|
|
57
58
|
"clean": "rm -rf dist",
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"rotationValues": {
|
|
4
|
-
"leftUpperArm": -3.141593,
|
|
5
|
-
"rightUpperArm": 3.141593,
|
|
6
|
-
"leftThigh": -3.141593,
|
|
7
|
-
"rightThigh": 3.141593
|
|
8
|
-
}
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"rotationValues": {
|
|
12
|
-
"leftUpperArm": -3.325734,
|
|
13
|
-
"rightUpperArm": 3.325734,
|
|
14
|
-
"leftThigh": -3.088003,
|
|
15
|
-
"rightThigh": 3.088003
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"rotationValues": {
|
|
20
|
-
"leftUpperArm": -3.828816,
|
|
21
|
-
"rightUpperArm": 3.828816,
|
|
22
|
-
"leftThigh": -2.941593,
|
|
23
|
-
"rightThigh": 2.941593
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"rotationValues": {
|
|
28
|
-
"leftUpperArm": -4.516039,
|
|
29
|
-
"rightUpperArm": 4.516039,
|
|
30
|
-
"leftThigh": -2.741593,
|
|
31
|
-
"rightThigh": 2.741593
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"rotationValues": {
|
|
36
|
-
"leftUpperArm": -5.203263,
|
|
37
|
-
"rightUpperArm": 5.203263,
|
|
38
|
-
"leftThigh": -2.541593,
|
|
39
|
-
"rightThigh": 2.541593
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"rotationValues": {
|
|
44
|
-
"leftUpperArm": -5.706345,
|
|
45
|
-
"rightUpperArm": 5.706345,
|
|
46
|
-
"leftThigh": -2.395182,
|
|
47
|
-
"rightThigh": 2.395182
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"rotationValues": {
|
|
52
|
-
"leftUpperArm": -5.890486,
|
|
53
|
-
"rightUpperArm": 5.890486,
|
|
54
|
-
"leftThigh": -2.341593,
|
|
55
|
-
"rightThigh": 2.341593
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"rotationValues": {
|
|
60
|
-
"leftUpperArm": -5.706345,
|
|
61
|
-
"rightUpperArm": 5.706345,
|
|
62
|
-
"leftThigh": -2.395182,
|
|
63
|
-
"rightThigh": 2.395182
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"rotationValues": {
|
|
68
|
-
"leftUpperArm": -5.203263,
|
|
69
|
-
"rightUpperArm": 5.203263,
|
|
70
|
-
"leftThigh": -2.541593,
|
|
71
|
-
"rightThigh": 2.541593
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"rotationValues": {
|
|
76
|
-
"leftUpperArm": -4.516039,
|
|
77
|
-
"rightUpperArm": 4.516039,
|
|
78
|
-
"leftThigh": -2.741593,
|
|
79
|
-
"rightThigh": 2.741593
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"rotationValues": {
|
|
84
|
-
"leftUpperArm": -3.828816,
|
|
85
|
-
"rightUpperArm": 3.828816,
|
|
86
|
-
"leftThigh": -2.941593,
|
|
87
|
-
"rightThigh": 2.941593
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"rotationValues": {
|
|
92
|
-
"leftUpperArm": -3.325734,
|
|
93
|
-
"rightUpperArm": 3.325734,
|
|
94
|
-
"leftThigh": -3.088003,
|
|
95
|
-
"rightThigh": 3.088003
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
"rotationValues": {
|
|
100
|
-
"leftUpperArm": -3.141593,
|
|
101
|
-
"rightUpperArm": 3.141593,
|
|
102
|
-
"leftThigh": -3.141593,
|
|
103
|
-
"rightThigh": 3.141593
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
"rotationValues": {
|
|
108
|
-
"leftUpperArm": -3.325734,
|
|
109
|
-
"rightUpperArm": 3.325734,
|
|
110
|
-
"leftThigh": -3.088003,
|
|
111
|
-
"rightThigh": 3.088003
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
"rotationValues": {
|
|
116
|
-
"leftUpperArm": -3.828816,
|
|
117
|
-
"rightUpperArm": 3.828816,
|
|
118
|
-
"leftThigh": -2.941593,
|
|
119
|
-
"rightThigh": 2.941593
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"rotationValues": {
|
|
124
|
-
"leftUpperArm": -4.516039,
|
|
125
|
-
"rightUpperArm": 4.516039,
|
|
126
|
-
"leftThigh": -2.741593,
|
|
127
|
-
"rightThigh": 2.741593
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
"rotationValues": {
|
|
132
|
-
"leftUpperArm": -5.203263,
|
|
133
|
-
"rightUpperArm": 5.203263,
|
|
134
|
-
"leftThigh": -2.541593,
|
|
135
|
-
"rightThigh": 2.541593
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
"rotationValues": {
|
|
140
|
-
"leftUpperArm": -5.706345,
|
|
141
|
-
"rightUpperArm": 5.706345,
|
|
142
|
-
"leftThigh": -2.395182,
|
|
143
|
-
"rightThigh": 2.395182
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
"rotationValues": {
|
|
148
|
-
"leftUpperArm": -5.890486,
|
|
149
|
-
"rightUpperArm": 5.890486,
|
|
150
|
-
"leftThigh": -2.341593,
|
|
151
|
-
"rightThigh": 2.341593
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"rotationValues": {
|
|
156
|
-
"leftUpperArm": -5.706345,
|
|
157
|
-
"rightUpperArm": 5.706345,
|
|
158
|
-
"leftThigh": -2.395182,
|
|
159
|
-
"rightThigh": 2.395182
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
"rotationValues": {
|
|
164
|
-
"leftUpperArm": -5.203263,
|
|
165
|
-
"rightUpperArm": 5.203263,
|
|
166
|
-
"leftThigh": -2.541593,
|
|
167
|
-
"rightThigh": 2.541593
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
"rotationValues": {
|
|
172
|
-
"leftUpperArm": -4.516039,
|
|
173
|
-
"rightUpperArm": 4.516039,
|
|
174
|
-
"leftThigh": -2.741593,
|
|
175
|
-
"rightThigh": 2.741593
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
"rotationValues": {
|
|
180
|
-
"leftUpperArm": -3.828816,
|
|
181
|
-
"rightUpperArm": 3.828816,
|
|
182
|
-
"leftThigh": -2.941593,
|
|
183
|
-
"rightThigh": 2.941593
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
"rotationValues": {
|
|
188
|
-
"leftUpperArm": -3.325734,
|
|
189
|
-
"rightUpperArm": 3.325734,
|
|
190
|
-
"leftThigh": -3.088003,
|
|
191
|
-
"rightThigh": 3.088003
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
]
|