reze-engine 0.6.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -35
- package/dist/animation.d.ts +14 -0
- package/dist/animation.d.ts.map +1 -0
- package/dist/animation.js +48 -0
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +2 -2
- package/dist/engine.d.ts +29 -22
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +292 -178
- package/dist/ik-solver.d.ts +0 -11
- package/dist/ik-solver.d.ts.map +1 -1
- package/dist/ik-solver.js +1 -11
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/math.d.ts +1 -10
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +24 -36
- package/dist/model.d.ts +3 -52
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +103 -170
- package/dist/pmx-loader.js +1 -1
- package/package.json +1 -1
- package/src/animation.ts +75 -0
- package/src/camera.ts +2 -2
- package/src/engine.ts +315 -218
- package/src/ik-solver.ts +1 -11
- package/src/index.ts +3 -2
- package/src/math.ts +27 -42
- package/src/model.ts +125 -220
- package/src/pmx-loader.ts +1 -1
package/dist/ik-solver.d.ts
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IK Solver implementation
|
|
3
|
-
* Based on reference from babylon-mmd and Saba MMD library
|
|
4
|
-
* https://github.com/benikabocha/saba/blob/master/src/Saba/Model/MMD/MMDIkSolver.cpp
|
|
5
|
-
*/
|
|
6
1
|
import { Mat4, Quat, Vec3 } from "./math";
|
|
7
2
|
import { Bone, IKSolver, IKChainInfo } from "./model";
|
|
8
3
|
export type UpdateWorldMatrixFn = (boneIndex: number, applyIK: boolean) => void;
|
|
9
|
-
/**
|
|
10
|
-
* Solve IK chains for a model
|
|
11
|
-
*/
|
|
12
4
|
export declare class IKSolverSystem {
|
|
13
5
|
private static readonly EPSILON;
|
|
14
6
|
private static readonly THRESHOLD;
|
|
15
|
-
/**
|
|
16
|
-
* Solve all IK chains
|
|
17
|
-
*/
|
|
18
7
|
static solve(ikSolvers: IKSolver[], bones: Bone[], localRotations: Quat[], localTranslations: Vec3[], worldMatrices: Mat4[], ikChainInfo: IKChainInfo[], updateWorldMatrix?: UpdateWorldMatrixFn): void;
|
|
19
8
|
private static solveIK;
|
|
20
9
|
private static solveChain;
|
package/dist/ik-solver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ik-solver.d.ts","sourceRoot":"","sources":["../src/ik-solver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ik-solver.d.ts","sourceRoot":"","sources":["../src/ik-solver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,IAAI,EAAU,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG7D,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AAoE/E,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAS;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAuB;WAE1C,KAAK,CACjB,SAAS,EAAE,QAAQ,EAAE,EACrB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,IAAI,EAAE,EACtB,iBAAiB,EAAE,IAAI,EAAE,EACzB,aAAa,EAAE,IAAI,EAAE,EACrB,WAAW,EAAE,WAAW,EAAE,EAC1B,iBAAiB,CAAC,EAAE,mBAAmB,GACtC,IAAI;IAMP,OAAO,CAAC,MAAM,CAAC,OAAO;IAoFtB,OAAO,CAAC,MAAM,CAAC,UAAU;IAqGzB,OAAO,CAAC,MAAM,CAAC,UAAU;IAYzB,OAAO,CAAC,MAAM,CAAC,WAAW;IAM1B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAKlC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAmCjC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAqBvC,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAc3C,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAoCjC"}
|
package/dist/ik-solver.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* IK Solver implementation
|
|
3
|
-
* Based on reference from babylon-mmd and Saba MMD library
|
|
4
|
-
* https://github.com/benikabocha/saba/blob/master/src/Saba/Model/MMD/MMDIkSolver.cpp
|
|
5
|
-
*/
|
|
1
|
+
// IK solver (MMD-style; see Saba MMDIkSolver.cpp)
|
|
6
2
|
import { Mat4, Quat, Vec3 } from "./math";
|
|
7
3
|
var InternalEulerRotationOrder;
|
|
8
4
|
(function (InternalEulerRotationOrder) {
|
|
@@ -67,13 +63,7 @@ class IKChain {
|
|
|
67
63
|
}
|
|
68
64
|
}
|
|
69
65
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Solve IK chains for a model
|
|
72
|
-
*/
|
|
73
66
|
export class IKSolverSystem {
|
|
74
|
-
/**
|
|
75
|
-
* Solve all IK chains
|
|
76
|
-
*/
|
|
77
67
|
static solve(ikSolvers, bones, localRotations, localTranslations, worldMatrices, ikChainInfo, updateWorldMatrix) {
|
|
78
68
|
for (const solver of ikSolvers) {
|
|
79
69
|
this.solveIK(solver, bones, localRotations, localTranslations, worldMatrices, ikChainInfo, updateWorldMatrix);
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/math.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export declare class Mat4 {
|
|
|
39
39
|
static identity(): Mat4;
|
|
40
40
|
static perspective(fov: number, aspect: number, near: number, far: number): Mat4;
|
|
41
41
|
static lookAt(eye: Vec3, target: Vec3, up: Vec3): Mat4;
|
|
42
|
+
static orthographicLh(left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4;
|
|
42
43
|
multiply(other: Mat4): Mat4;
|
|
43
44
|
static multiplyArrays(a: Float32Array, aOffset: number, b: Float32Array, bOffset: number, out: Float32Array, outOffset: number): void;
|
|
44
45
|
clone(): Mat4;
|
|
@@ -51,14 +52,4 @@ export declare class Mat4 {
|
|
|
51
52
|
translateInPlace(tx: number, ty: number, tz: number): this;
|
|
52
53
|
inverse(): Mat4;
|
|
53
54
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Bezier interpolation function
|
|
56
|
-
* @param x1 First control point X (0-127, normalized to 0-1)
|
|
57
|
-
* @param x2 Second control point X (0-127, normalized to 0-1)
|
|
58
|
-
* @param y1 First control point Y (0-127, normalized to 0-1)
|
|
59
|
-
* @param y2 Second control point Y (0-127, normalized to 0-1)
|
|
60
|
-
* @param t Interpolation parameter (0-1)
|
|
61
|
-
* @returns Interpolated value (0-1)
|
|
62
|
-
*/
|
|
63
|
-
export declare function bezierInterpolate(x1: number, x2: number, y1: number, y2: number, t: number): number;
|
|
64
55
|
//# sourceMappingURL=math.d.ts.map
|
package/dist/math.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AACA,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,qBAAa,IAAI;IACf,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;gBAEG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAM3C,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAItB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAI3B,MAAM,IAAI,MAAM;IAKhB,SAAS,IAAI,IAAI;IAejB,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAQxB,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM;IAIxB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3B,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;CAMvB;AAED,qBAAa,IAAI;IACf,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;gBAEG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAOtD,MAAM,CAAC,QAAQ,IAAI,IAAI;IAIvB,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAItB,KAAK,IAAI,IAAI;IAIb,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAY3B,SAAS,IAAI,IAAI;IAOjB,MAAM,IAAI,MAAM;IAKhB,SAAS,IAAI,IAAI;IAkBjB,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBrD,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAK3C,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAStB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAoC/C,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAejE;AAED,qBAAa,IAAI;IACf,MAAM,EAAE,YAAY,CAAA;gBAER,MAAM,EAAE,YAAY;IAIhC,MAAM,CAAC,QAAQ,IAAI,IAAI;IAMvB,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IA4BhF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
|
package/dist/math.js
CHANGED
|
@@ -234,6 +234,30 @@ export class Mat4 {
|
|
|
234
234
|
1,
|
|
235
235
|
]));
|
|
236
236
|
}
|
|
237
|
+
// LH ortho, NDC depth 0=near 1=far
|
|
238
|
+
static orthographicLh(left, right, bottom, top, near, far) {
|
|
239
|
+
const rl = 1 / (right - left);
|
|
240
|
+
const tb = 1 / (top - bottom);
|
|
241
|
+
const fn = 1 / (far - near);
|
|
242
|
+
return new Mat4(new Float32Array([
|
|
243
|
+
2 * rl,
|
|
244
|
+
0,
|
|
245
|
+
0,
|
|
246
|
+
0,
|
|
247
|
+
0,
|
|
248
|
+
2 * tb,
|
|
249
|
+
0,
|
|
250
|
+
0,
|
|
251
|
+
0,
|
|
252
|
+
0,
|
|
253
|
+
fn,
|
|
254
|
+
0,
|
|
255
|
+
-(right + left) * rl,
|
|
256
|
+
-(top + bottom) * tb,
|
|
257
|
+
-near * fn,
|
|
258
|
+
1,
|
|
259
|
+
]));
|
|
260
|
+
}
|
|
237
261
|
multiply(other) {
|
|
238
262
|
// Column-major multiplication (matches WGSL/GLSL convention):
|
|
239
263
|
// result = a * b
|
|
@@ -428,39 +452,3 @@ export class Mat4 {
|
|
|
428
452
|
return new Mat4(out);
|
|
429
453
|
}
|
|
430
454
|
}
|
|
431
|
-
/**
|
|
432
|
-
* Bezier interpolation function
|
|
433
|
-
* @param x1 First control point X (0-127, normalized to 0-1)
|
|
434
|
-
* @param x2 Second control point X (0-127, normalized to 0-1)
|
|
435
|
-
* @param y1 First control point Y (0-127, normalized to 0-1)
|
|
436
|
-
* @param y2 Second control point Y (0-127, normalized to 0-1)
|
|
437
|
-
* @param t Interpolation parameter (0-1)
|
|
438
|
-
* @returns Interpolated value (0-1)
|
|
439
|
-
*/
|
|
440
|
-
export function bezierInterpolate(x1, x2, y1, y2, t) {
|
|
441
|
-
// Clamp t to [0, 1]
|
|
442
|
-
t = Math.max(0, Math.min(1, t));
|
|
443
|
-
// Binary search for the t value that gives us the desired x
|
|
444
|
-
// We're solving for t in the Bezier curve: x(t) = 3*(1-t)^2*t*x1 + 3*(1-t)*t^2*x2 + t^3
|
|
445
|
-
let start = 0;
|
|
446
|
-
let end = 1;
|
|
447
|
-
let mid = 0.5;
|
|
448
|
-
// Iterate until we find the t value that gives us the desired x
|
|
449
|
-
for (let i = 0; i < 15; i++) {
|
|
450
|
-
// Evaluate Bezier curve at mid point
|
|
451
|
-
const x = 3 * (1 - mid) * (1 - mid) * mid * x1 + 3 * (1 - mid) * mid * mid * x2 + mid * mid * mid;
|
|
452
|
-
if (Math.abs(x - t) < 0.0001) {
|
|
453
|
-
break;
|
|
454
|
-
}
|
|
455
|
-
if (x < t) {
|
|
456
|
-
start = mid;
|
|
457
|
-
}
|
|
458
|
-
else {
|
|
459
|
-
end = mid;
|
|
460
|
-
}
|
|
461
|
-
mid = (start + end) / 2;
|
|
462
|
-
}
|
|
463
|
-
// Now evaluate the y value at this t
|
|
464
|
-
const y = 3 * (1 - mid) * (1 - mid) * mid * y1 + 3 * (1 - mid) * mid * mid * y2 + mid * mid * mid;
|
|
465
|
-
return y;
|
|
466
|
-
}
|
package/dist/model.d.ts
CHANGED
|
@@ -94,6 +94,7 @@ export interface MorphRuntime {
|
|
|
94
94
|
weights: Float32Array;
|
|
95
95
|
}
|
|
96
96
|
export declare class Model {
|
|
97
|
+
static loadPmx(path: string): Promise<Model>;
|
|
97
98
|
private vertexData;
|
|
98
99
|
private baseVertexData;
|
|
99
100
|
private vertexCount;
|
|
@@ -113,7 +114,7 @@ export declare class Model {
|
|
|
113
114
|
private skinMatricesArray?;
|
|
114
115
|
private tweenState;
|
|
115
116
|
private tweenTimeMs;
|
|
116
|
-
private
|
|
117
|
+
private _hasAnimation;
|
|
117
118
|
private boneTracks;
|
|
118
119
|
private morphTracks;
|
|
119
120
|
private animationDuration;
|
|
@@ -136,6 +137,7 @@ export declare class Model {
|
|
|
136
137
|
getMaterials(): Material[];
|
|
137
138
|
getIndices(): Uint32Array<ArrayBuffer>;
|
|
138
139
|
getSkeleton(): Skeleton;
|
|
140
|
+
getBoneWorldPosition(boneName: string): Vec3 | null;
|
|
139
141
|
getSkinning(): Skinning;
|
|
140
142
|
getRigidbodies(): Rigidbody[];
|
|
141
143
|
getJoints(): Joint[];
|
|
@@ -143,80 +145,29 @@ export declare class Model {
|
|
|
143
145
|
getMorphWeights(): Float32Array;
|
|
144
146
|
rotateBones(boneRotations: Record<string, Quat>, durationMs?: number): void;
|
|
145
147
|
moveBones(boneTranslations: Record<string, Vec3>, durationMs?: number): void;
|
|
146
|
-
/**
|
|
147
|
-
* Convert VMD-style relative translation (relative to bind pose world position) to local translation
|
|
148
|
-
* This helper is used by both moveBones and getPoseAtTime to ensure consistent translation handling
|
|
149
|
-
* @param boneIdx - Bone index
|
|
150
|
-
* @param vmdRelativeTranslation - VMD relative translation
|
|
151
|
-
* @param rotation - Optional rotation to use for conversion. If not provided, uses current localRotation.
|
|
152
|
-
* Use animation rotation (from frame) to avoid conflicts when IK modifies rotation.
|
|
153
|
-
*/
|
|
154
148
|
private convertVMDTranslationToLocal;
|
|
155
149
|
getBoneWorldMatrices(): Float32Array;
|
|
156
150
|
getBoneInverseBindMatrices(): Float32Array;
|
|
157
151
|
getSkinMatrices(): Float32Array;
|
|
158
152
|
setMorphWeight(name: string, weight: number, durationMs?: number): void;
|
|
159
|
-
/**
|
|
160
|
-
* Atomic pose setter for external animation editors.
|
|
161
|
-
* Sets bone rotations, translations, and morph weights in a single pass,
|
|
162
|
-
* identical to how getPoseAtTime applies VMD poses during playback.
|
|
163
|
-
* Cancels any active tweens on affected bones/morphs.
|
|
164
|
-
*/
|
|
165
|
-
setPose(rotations?: Record<string, Quat>, translations?: Record<string, Vec3>, morphs?: Record<string, number>): void;
|
|
166
153
|
private applyMorphs;
|
|
167
|
-
/**
|
|
168
|
-
* Load VMD animation file
|
|
169
|
-
*/
|
|
170
154
|
loadVmd(vmdUrl: string): Promise<void>;
|
|
171
|
-
/**
|
|
172
|
-
* Reset all bones to their default pose
|
|
173
|
-
*/
|
|
174
155
|
resetAllBones(): void;
|
|
175
156
|
resetAllMorphs(): void;
|
|
176
|
-
/**
|
|
177
|
-
* Enable or disable IK solving
|
|
178
|
-
*/
|
|
179
157
|
setIKEnabled(enabled: boolean): void;
|
|
180
|
-
/**
|
|
181
|
-
* Enable or disable physics simulation
|
|
182
|
-
*/
|
|
183
158
|
setPhysicsEnabled(enabled: boolean): void;
|
|
184
|
-
/**
|
|
185
|
-
* Process frames into tracks
|
|
186
|
-
*/
|
|
187
|
-
private processFrames;
|
|
188
159
|
playAnimation(): void;
|
|
189
160
|
pauseAnimation(): void;
|
|
190
161
|
stopAnimation(): void;
|
|
191
162
|
seekAnimation(time: number): void;
|
|
192
|
-
/**
|
|
193
|
-
* Get current animation progress
|
|
194
|
-
*/
|
|
195
163
|
getAnimationProgress(): {
|
|
196
164
|
current: number;
|
|
197
165
|
duration: number;
|
|
198
166
|
percentage: number;
|
|
199
167
|
};
|
|
200
|
-
/**
|
|
201
|
-
* Binary search upper bound helper (static to avoid recreation)
|
|
202
|
-
*/
|
|
203
168
|
private static upperBound;
|
|
204
|
-
/**
|
|
205
|
-
* Find keyframe index with caching optimization
|
|
206
|
-
* Uses cached index as starting point for faster lookup when time is close
|
|
207
|
-
*/
|
|
208
169
|
private findKeyframeIndex;
|
|
209
|
-
/**
|
|
210
|
-
* Get pose at specific time (internal helper)
|
|
211
|
-
* Optimized for per-frame performance
|
|
212
|
-
*/
|
|
213
170
|
private getPoseAtTime;
|
|
214
|
-
/**
|
|
215
|
-
* Updates the model pose by recomputing all matrices.
|
|
216
|
-
* If animation is playing, applies animation pose first.
|
|
217
|
-
* deltaTime: Time elapsed since last update in seconds
|
|
218
|
-
* Returns true if vertices were modified (morphs changed)
|
|
219
|
-
*/
|
|
220
171
|
update(deltaTime: number): boolean;
|
|
221
172
|
private solveIKChains;
|
|
222
173
|
private ikComputedSet;
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|