distark-render 1.1.16 → 1.1.17
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/assets/KidB.json +2088 -0
- package/dist/cli/distark-check.d.ts +1 -0
- package/dist/cli/distark-check.d.ts.map +1 -1
- package/dist/cli/distark-check.js +6 -0
- package/dist/cli/distark-check.js.map +1 -1
- package/dist/cli/explode.d.ts +8 -0
- package/dist/cli/explode.d.ts.map +1 -0
- package/dist/cli/explode.js +282 -0
- package/dist/cli/explode.js.map +1 -0
- package/dist/modules/adapters/skiaRenderer.d.ts.map +1 -1
- package/dist/modules/adapters/skiaRenderer.js +22 -3
- package/dist/modules/adapters/skiaRenderer.js.map +1 -1
- package/dist/modules/eyeSystem.d.ts +46 -14
- package/dist/modules/eyeSystem.d.ts.map +1 -1
- package/dist/modules/eyeSystem.js +122 -101
- package/dist/modules/eyeSystem.js.map +1 -1
- package/dist/tests/test-eye-extremes-visual.d.ts +22 -0
- package/dist/tests/test-eye-extremes-visual.d.ts.map +1 -0
- package/dist/tests/test-eye-extremes-visual.js +281 -0
- package/dist/tests/test-eye-extremes-visual.js.map +1 -0
- package/package.json +2 -4
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test: Eye Iris Extreme Positions — Visual Verification
|
|
3
|
+
*
|
|
4
|
+
* Loads a character rig JSON and renders the irises at the four most extreme
|
|
5
|
+
* cardinal positions (left, right, up, down) as computed from the eye socket
|
|
6
|
+
* bounding calculations.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx tests/test-eye-extremes-visual.ts [path/to/rig.json]
|
|
10
|
+
*
|
|
11
|
+
* Defaults to assets/KidB.json when no argument is given.
|
|
12
|
+
*
|
|
13
|
+
* Output images (in test-outputs/):
|
|
14
|
+
* <name>-socket-bounds.png — full rig with socket polygon overlays
|
|
15
|
+
* <name>-usable-bounds.png — full rig with usable bounds overlays
|
|
16
|
+
* <name>-iris-extreme-*.png — iris-only + solid bounding boxes (no rig)
|
|
17
|
+
*
|
|
18
|
+
* The core assertion: at each extreme position, each iris must be completely
|
|
19
|
+
* contained inside its own usable bounding box (verified via pixel checks).
|
|
20
|
+
*/
|
|
21
|
+
import { SkiaRenderer } from '../modules/adapters/skiaRenderer.js';
|
|
22
|
+
import { createEyeSystem } from '../modules/eyeSystem.js';
|
|
23
|
+
import { readFile, mkdir, stat, writeFile } from 'fs/promises';
|
|
24
|
+
import path from 'path';
|
|
25
|
+
import { assert, printSummary } from './helpers.js';
|
|
26
|
+
const OUTPUT_DIR = 'test-outputs';
|
|
27
|
+
const DEFAULT_INPUT = 'assets/KidB.json';
|
|
28
|
+
const EDGE_FACTOR = 0.85;
|
|
29
|
+
// Pixel-level threshold: sum of RGB channel deltas to detect an iris pixel
|
|
30
|
+
const CHANGE_THRESHOLD = 30;
|
|
31
|
+
const EXTREME_DIRECTIONS = [
|
|
32
|
+
{ direction: 'left', label: 'extreme-left', axis: 'x', sign: -1 },
|
|
33
|
+
{ direction: 'right', label: 'extreme-right', axis: 'x', sign: 1 },
|
|
34
|
+
{ direction: 'up', label: 'extreme-up', axis: 'y', sign: -1 },
|
|
35
|
+
{ direction: 'down', label: 'extreme-down', axis: 'y', sign: 1 },
|
|
36
|
+
];
|
|
37
|
+
// ---------------------------------------------------------------
|
|
38
|
+
// Canvas drawing helpers
|
|
39
|
+
// ---------------------------------------------------------------
|
|
40
|
+
function drawSocketPolygon(ctx, points, headObj, color, lineWidth = 2) {
|
|
41
|
+
if (!points || points.length < 3)
|
|
42
|
+
return;
|
|
43
|
+
ctx.save();
|
|
44
|
+
ctx.translate(headObj.x, headObj.y);
|
|
45
|
+
ctx.rotate(headObj.rotation);
|
|
46
|
+
ctx.scale(headObj.scaleX, headObj.scaleY);
|
|
47
|
+
ctx.beginPath();
|
|
48
|
+
for (let i = 0; i < points.length; i++) {
|
|
49
|
+
const localX = (points[i].x / 100) * headObj.width - headObj.width * headObj.anchorX;
|
|
50
|
+
const localY = (points[i].y / 100) * headObj.height - headObj.height * headObj.anchorY;
|
|
51
|
+
if (i === 0)
|
|
52
|
+
ctx.moveTo(localX, localY);
|
|
53
|
+
else
|
|
54
|
+
ctx.lineTo(localX, localY);
|
|
55
|
+
}
|
|
56
|
+
ctx.closePath();
|
|
57
|
+
ctx.strokeStyle = color;
|
|
58
|
+
ctx.lineWidth = lineWidth;
|
|
59
|
+
ctx.stroke();
|
|
60
|
+
ctx.restore();
|
|
61
|
+
}
|
|
62
|
+
function drawUsableBounds(ctx, points, headObj, edgeFactor, color, lineWidth = 2) {
|
|
63
|
+
if (!points || points.length < 3)
|
|
64
|
+
return;
|
|
65
|
+
const { x1, y1, w, h } = usableBoundsRect(points, headObj, edgeFactor);
|
|
66
|
+
ctx.save();
|
|
67
|
+
ctx.translate(headObj.x, headObj.y);
|
|
68
|
+
ctx.rotate(headObj.rotation);
|
|
69
|
+
ctx.scale(headObj.scaleX, headObj.scaleY);
|
|
70
|
+
ctx.strokeStyle = color;
|
|
71
|
+
ctx.lineWidth = lineWidth;
|
|
72
|
+
ctx.setLineDash([6, 4]);
|
|
73
|
+
ctx.strokeRect(x1, y1, w, h);
|
|
74
|
+
ctx.setLineDash([]);
|
|
75
|
+
ctx.restore();
|
|
76
|
+
}
|
|
77
|
+
function drawUsableBoundsFilled(ctx, points, headObj, edgeFactor, color) {
|
|
78
|
+
if (!points || points.length < 3)
|
|
79
|
+
return;
|
|
80
|
+
const { x1, y1, w, h } = usableBoundsRect(points, headObj, edgeFactor);
|
|
81
|
+
ctx.save();
|
|
82
|
+
ctx.translate(headObj.x, headObj.y);
|
|
83
|
+
ctx.rotate(headObj.rotation);
|
|
84
|
+
ctx.scale(headObj.scaleX, headObj.scaleY);
|
|
85
|
+
ctx.fillStyle = color;
|
|
86
|
+
ctx.fillRect(x1, y1, w, h);
|
|
87
|
+
ctx.restore();
|
|
88
|
+
}
|
|
89
|
+
function usableBoundsRect(points, headObj, edgeFactor) {
|
|
90
|
+
let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;
|
|
91
|
+
for (const p of points) {
|
|
92
|
+
if (p.x < minX)
|
|
93
|
+
minX = p.x;
|
|
94
|
+
if (p.x > maxX)
|
|
95
|
+
maxX = p.x;
|
|
96
|
+
if (p.y < minY)
|
|
97
|
+
minY = p.y;
|
|
98
|
+
if (p.y > maxY)
|
|
99
|
+
maxY = p.y;
|
|
100
|
+
}
|
|
101
|
+
const centerX = (minX + maxX) / 2;
|
|
102
|
+
const centerY = (minY + maxY) / 2;
|
|
103
|
+
const halfW = ((maxX - minX) / 2) * edgeFactor;
|
|
104
|
+
const halfH = ((maxY - minY) / 2) * edgeFactor;
|
|
105
|
+
return {
|
|
106
|
+
x1: ((centerX - halfW) / 100) * headObj.width - headObj.width * headObj.anchorX,
|
|
107
|
+
y1: ((centerY - halfH) / 100) * headObj.height - headObj.height * headObj.anchorY,
|
|
108
|
+
w: ((halfW * 2) / 100) * headObj.width,
|
|
109
|
+
h: ((halfH * 2) / 100) * headObj.height,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Render the full rig using autofit, returning the canvas and the head render object
|
|
114
|
+
* so callers can draw overlays before saving.
|
|
115
|
+
*/
|
|
116
|
+
async function renderToCanvas(renderer, rigData) {
|
|
117
|
+
const fit = renderer.computeAutoFit(rigData, { loadedImages: renderer.loadedImages });
|
|
118
|
+
const canvas = await renderer.createCanvas(fit.canvasWidth, fit.canvasHeight);
|
|
119
|
+
const ctx = canvas.getContext('2d');
|
|
120
|
+
ctx.fillStyle = '#f0f0f0';
|
|
121
|
+
ctx.fillRect(0, 0, fit.canvasWidth, fit.canvasHeight);
|
|
122
|
+
renderer.renderObjects(ctx, fit.renderData.objects, false, fit.renderData.pivotPoints);
|
|
123
|
+
const headObj = fit.renderData.objects.find((o) => o.name === 'head');
|
|
124
|
+
if (!headObj)
|
|
125
|
+
throw new Error('Head object not found in render data');
|
|
126
|
+
return { canvas, headObj };
|
|
127
|
+
}
|
|
128
|
+
function drawOverlays(ctx, headObj, leftSocket, rightSocket) {
|
|
129
|
+
drawSocketPolygon(ctx, leftSocket, headObj, 'rgba(255, 50, 50, 0.3)', 1);
|
|
130
|
+
drawSocketPolygon(ctx, rightSocket, headObj, 'rgba(50, 50, 255, 0.3)', 1);
|
|
131
|
+
drawUsableBounds(ctx, leftSocket, headObj, EDGE_FACTOR, 'rgba(255, 50, 50, 0.9)', 2);
|
|
132
|
+
drawUsableBounds(ctx, rightSocket, headObj, EDGE_FACTOR, 'rgba(50, 50, 255, 0.9)', 2);
|
|
133
|
+
}
|
|
134
|
+
// ---------------------------------------------------------------
|
|
135
|
+
// Main
|
|
136
|
+
// ---------------------------------------------------------------
|
|
137
|
+
async function main() {
|
|
138
|
+
const inputFile = process.argv[2] || DEFAULT_INPUT;
|
|
139
|
+
const charName = path.basename(inputFile, path.extname(inputFile));
|
|
140
|
+
console.log(`\n🧪 Eye Iris Extreme Positions — ${charName}`);
|
|
141
|
+
console.log('='.repeat(50));
|
|
142
|
+
console.log(` Rig: ${inputFile}`);
|
|
143
|
+
await mkdir(OUTPUT_DIR, { recursive: true });
|
|
144
|
+
const rigData = JSON.parse(await readFile(inputFile, 'utf-8'));
|
|
145
|
+
const eyes = rigData.eyes;
|
|
146
|
+
assert(!!eyes, 'RigData has eye configuration');
|
|
147
|
+
assert(!!rigData.eyeSockets, 'RigData has eyeSockets for bounding');
|
|
148
|
+
assert(!!rigData.dimensionValues?.head, 'RigData has head dimensions');
|
|
149
|
+
const eyeSystem = createEyeSystem(charName, rigData);
|
|
150
|
+
const basePositions = eyeSystem.getIrisPositions();
|
|
151
|
+
console.log(`\n Base iris positions:`);
|
|
152
|
+
console.log(` Left: (${basePositions.left.x}, ${basePositions.left.y})`);
|
|
153
|
+
console.log(` Right: (${basePositions.right.x}, ${basePositions.right.y})`);
|
|
154
|
+
const renderer = new SkiaRenderer();
|
|
155
|
+
await renderer.loadImages(rigData);
|
|
156
|
+
assert(renderer.ready(), 'Renderer loaded images successfully');
|
|
157
|
+
const leftSocket = rigData.eyeSockets.left || [];
|
|
158
|
+
const rightSocket = rigData.eyeSockets.right || [];
|
|
159
|
+
console.log(`\n Head dims: ${rigData.dimensionValues?.head?.width} × ${rigData.dimensionValues?.head?.height}`);
|
|
160
|
+
console.log(` JointOffset torso_head: ${JSON.stringify(rigData.jointOffset?.['torso_head'])}`);
|
|
161
|
+
// ---------------------------------------------------------------
|
|
162
|
+
// Image 1: Socket polygon bounds overlay
|
|
163
|
+
// ---------------------------------------------------------------
|
|
164
|
+
console.log('\n --- Rendering: socket bounds overlay ---');
|
|
165
|
+
{
|
|
166
|
+
const { canvas, headObj } = await renderToCanvas(renderer, rigData);
|
|
167
|
+
const ctx = canvas.getContext('2d');
|
|
168
|
+
drawSocketPolygon(ctx, leftSocket, headObj, 'rgba(255, 50, 50, 0.9)', 2);
|
|
169
|
+
drawSocketPolygon(ctx, rightSocket, headObj, 'rgba(50, 50, 255, 0.9)', 2);
|
|
170
|
+
const outputPath = `${OUTPUT_DIR}/${charName}-socket-bounds.png`;
|
|
171
|
+
await writeFile(outputPath, await canvas.toBuffer('image/png'));
|
|
172
|
+
const info = await stat(outputPath);
|
|
173
|
+
assert(info.size > 1000, `[socket-bounds] Output PNG is valid (${info.size} bytes)`);
|
|
174
|
+
console.log(` Saved: ${outputPath}`);
|
|
175
|
+
}
|
|
176
|
+
// ---------------------------------------------------------------
|
|
177
|
+
// Image 2: Usable bounds overlay (socket bbox × edgeFactor)
|
|
178
|
+
// ---------------------------------------------------------------
|
|
179
|
+
console.log('\n --- Rendering: usable bounds overlay (edgeFactor=0.85) ---');
|
|
180
|
+
{
|
|
181
|
+
const { canvas, headObj } = await renderToCanvas(renderer, rigData);
|
|
182
|
+
const ctx = canvas.getContext('2d');
|
|
183
|
+
drawOverlays(ctx, headObj, leftSocket, rightSocket);
|
|
184
|
+
const outputPath = `${OUTPUT_DIR}/${charName}-usable-bounds.png`;
|
|
185
|
+
await writeFile(outputPath, await canvas.toBuffer('image/png'));
|
|
186
|
+
const info = await stat(outputPath);
|
|
187
|
+
assert(info.size > 1000, `[usable-bounds] Output PNG is valid (${info.size} bytes)`);
|
|
188
|
+
console.log(` Saved: ${outputPath}`);
|
|
189
|
+
}
|
|
190
|
+
// ---------------------------------------------------------------
|
|
191
|
+
// Images 3–6: Extreme iris positions — pixel-level containment
|
|
192
|
+
//
|
|
193
|
+
// For each eye the mask canvas uses a GREEN background (#00ff00)
|
|
194
|
+
// with the bounds filled in a distinct color (red for left, blue
|
|
195
|
+
// for right). Any iris pixel that lands on green = leaked.
|
|
196
|
+
// ---------------------------------------------------------------
|
|
197
|
+
const MASK_BG = 'rgb(0, 255, 0)';
|
|
198
|
+
for (const { direction, label } of EXTREME_DIRECTIONS) {
|
|
199
|
+
console.log(`\n --- Rendering: ${label} (direction=${direction}) ---`);
|
|
200
|
+
eyeSystem.setEyeDirection(direction);
|
|
201
|
+
const positions = eyeSystem.getIrisPositions();
|
|
202
|
+
console.log(` Left iris: (${positions.left.x.toFixed(2)}, ${positions.left.y.toFixed(2)})`);
|
|
203
|
+
console.log(` Right iris: (${positions.right.x.toFixed(2)}, ${positions.right.y.toFixed(2)})`);
|
|
204
|
+
const renderRig = structuredClone(rigData);
|
|
205
|
+
renderRig.eyes.leftIrisXCoor = positions.left.x;
|
|
206
|
+
renderRig.eyes.leftIrisYCoor = positions.left.y;
|
|
207
|
+
renderRig.eyes.rightIrisXCoor = positions.right.x;
|
|
208
|
+
renderRig.eyes.rightIrisYCoor = positions.right.y;
|
|
209
|
+
const fit = renderer.computeAutoFit(renderRig, { loadedImages: renderer.loadedImages });
|
|
210
|
+
const W = fit.canvasWidth;
|
|
211
|
+
const H = fit.canvasHeight;
|
|
212
|
+
const allObjs = fit.renderData.objects;
|
|
213
|
+
const headObj = allObjs.find((o) => o.name === 'head');
|
|
214
|
+
const leftIrisObj = allObjs.find((o) => o.name === 'leftIris');
|
|
215
|
+
const rightIrisObj = allObjs.find((o) => o.name === 'rightIris');
|
|
216
|
+
const canvas = await renderer.createCanvas(W, H);
|
|
217
|
+
const ctx = canvas.getContext('2d');
|
|
218
|
+
// ---- Pixel containment: left iris inside left (red) bounds ----
|
|
219
|
+
ctx.fillStyle = MASK_BG;
|
|
220
|
+
ctx.fillRect(0, 0, W, H);
|
|
221
|
+
drawUsableBoundsFilled(ctx, leftSocket, headObj, EDGE_FACTOR, 'rgb(255, 0, 0)');
|
|
222
|
+
const leftMask = new Uint8Array(ctx.getImageData(0, 0, W, H).data);
|
|
223
|
+
if (leftIrisObj)
|
|
224
|
+
renderer.renderObjects(ctx, [leftIrisObj], false);
|
|
225
|
+
const leftFinal = ctx.getImageData(0, 0, W, H).data;
|
|
226
|
+
let leftLeaked = 0, leftTotal = 0;
|
|
227
|
+
for (let i = 0; i < leftMask.length; i += 4) {
|
|
228
|
+
const d = Math.abs(leftFinal[i] - leftMask[i])
|
|
229
|
+
+ Math.abs(leftFinal[i + 1] - leftMask[i + 1])
|
|
230
|
+
+ Math.abs(leftFinal[i + 2] - leftMask[i + 2]);
|
|
231
|
+
if (d > CHANGE_THRESHOLD) {
|
|
232
|
+
leftTotal++;
|
|
233
|
+
const isBg = leftMask[i] < 10 && leftMask[i + 1] > 240 && leftMask[i + 2] < 10;
|
|
234
|
+
if (isBg)
|
|
235
|
+
leftLeaked++;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
console.log(` Left iris: ${leftTotal} px total, ${leftLeaked} px outside bounds`);
|
|
239
|
+
assert(leftLeaked === 0, `[${label}] Left iris fully inside left bounds (${leftLeaked}/${leftTotal} px leaked)`);
|
|
240
|
+
// ---- Pixel containment: right iris inside right (blue) bounds ----
|
|
241
|
+
ctx.fillStyle = MASK_BG;
|
|
242
|
+
ctx.fillRect(0, 0, W, H);
|
|
243
|
+
drawUsableBoundsFilled(ctx, rightSocket, headObj, EDGE_FACTOR, 'rgb(0, 0, 255)');
|
|
244
|
+
const rightMask = new Uint8Array(ctx.getImageData(0, 0, W, H).data);
|
|
245
|
+
if (rightIrisObj)
|
|
246
|
+
renderer.renderObjects(ctx, [rightIrisObj], false);
|
|
247
|
+
const rightFinal = ctx.getImageData(0, 0, W, H).data;
|
|
248
|
+
let rightLeaked = 0, rightTotal = 0;
|
|
249
|
+
for (let i = 0; i < rightMask.length; i += 4) {
|
|
250
|
+
const d = Math.abs(rightFinal[i] - rightMask[i])
|
|
251
|
+
+ Math.abs(rightFinal[i + 1] - rightMask[i + 1])
|
|
252
|
+
+ Math.abs(rightFinal[i + 2] - rightMask[i + 2]);
|
|
253
|
+
if (d > CHANGE_THRESHOLD) {
|
|
254
|
+
rightTotal++;
|
|
255
|
+
const isBg = rightMask[i] < 10 && rightMask[i + 1] > 240 && rightMask[i + 2] < 10;
|
|
256
|
+
if (isBg)
|
|
257
|
+
rightLeaked++;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
console.log(` Right iris: ${rightTotal} px total, ${rightLeaked} px outside bounds`);
|
|
261
|
+
assert(rightLeaked === 0, `[${label}] Right iris fully inside right bounds (${rightLeaked}/${rightTotal} px leaked)`);
|
|
262
|
+
// ---- Output image: solid bounds + both irises (gray bg for readability) ----
|
|
263
|
+
ctx.fillStyle = '#f0f0f0';
|
|
264
|
+
ctx.fillRect(0, 0, W, H);
|
|
265
|
+
drawUsableBoundsFilled(ctx, leftSocket, headObj, EDGE_FACTOR, 'rgb(255, 0, 0)');
|
|
266
|
+
drawUsableBoundsFilled(ctx, rightSocket, headObj, EDGE_FACTOR, 'rgb(0, 0, 255)');
|
|
267
|
+
const irisObjs = allObjs.filter((o) => o.name === 'leftIris' || o.name === 'rightIris');
|
|
268
|
+
renderer.renderObjects(ctx, irisObjs, false);
|
|
269
|
+
const outputPath = `${OUTPUT_DIR}/${charName}-iris-${label}.png`;
|
|
270
|
+
await writeFile(outputPath, await canvas.toBuffer('image/png'));
|
|
271
|
+
const info = await stat(outputPath);
|
|
272
|
+
assert(info.size > 1000, `[${label}] Output PNG is valid (${info.size} bytes)`);
|
|
273
|
+
console.log(` Saved: ${outputPath}`);
|
|
274
|
+
}
|
|
275
|
+
printSummary();
|
|
276
|
+
}
|
|
277
|
+
main().catch(err => {
|
|
278
|
+
console.error(err);
|
|
279
|
+
process.exit(1);
|
|
280
|
+
});
|
|
281
|
+
//# sourceMappingURL=test-eye-extremes-visual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-eye-extremes-visual.js","sourceRoot":"","sources":["../../tests/test-eye-extremes-visual.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "distark-render",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.17",
|
|
4
4
|
"description": "Rendering-agnostic character rig system with TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/modules/renderRig.js",
|
|
@@ -100,7 +100,5 @@
|
|
|
100
100
|
"url": "https://github.com/jtoy/distark_render/issues"
|
|
101
101
|
},
|
|
102
102
|
"homepage": "https://github.com/jtoy/distark_render#readme",
|
|
103
|
-
"dependencies": {
|
|
104
|
-
"distark-render": "^1.0.8"
|
|
105
|
-
}
|
|
103
|
+
"dependencies": {}
|
|
106
104
|
}
|