reze-engine 0.8.0 → 0.8.1
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/dist/engine.d.ts +24 -32
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +374 -486
- package/dist/model.d.ts +9 -3
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +20 -24
- package/package.json +1 -1
- package/src/engine.ts +393 -592
- package/src/model.ts +28 -28
package/dist/model.d.ts
CHANGED
|
@@ -94,7 +94,12 @@ export interface MorphRuntime {
|
|
|
94
94
|
weights: Float32Array;
|
|
95
95
|
}
|
|
96
96
|
export declare class Model {
|
|
97
|
-
static
|
|
97
|
+
private static _nextId;
|
|
98
|
+
private static nextDefaultName;
|
|
99
|
+
static loadPmx(path: string, name?: string): Promise<Model>;
|
|
100
|
+
private _name;
|
|
101
|
+
get name(): string;
|
|
102
|
+
setName(value: string): void;
|
|
98
103
|
private vertexData;
|
|
99
104
|
private baseVertexData;
|
|
100
105
|
private vertexCount;
|
|
@@ -123,7 +128,6 @@ export declare class Model {
|
|
|
123
128
|
private animationTime;
|
|
124
129
|
private boneTrackIndices;
|
|
125
130
|
private morphTrackIndices;
|
|
126
|
-
private physics;
|
|
127
131
|
private ikEnabled;
|
|
128
132
|
private physicsEnabled;
|
|
129
133
|
constructor(vertexData: Float32Array<ArrayBuffer>, indexData: Uint32Array<ArrayBuffer>, textures: Texture[], materials: Material[], skeleton: Skeleton, skinning: Skinning, morphing: Morphing, rigidbodies?: Rigidbody[], joints?: Joint[]);
|
|
@@ -146,6 +150,7 @@ export declare class Model {
|
|
|
146
150
|
rotateBones(boneRotations: Record<string, Quat>, durationMs?: number): void;
|
|
147
151
|
moveBones(boneTranslations: Record<string, Vec3>, durationMs?: number): void;
|
|
148
152
|
private convertVMDTranslationToLocal;
|
|
153
|
+
getWorldMatrices(): Mat4[];
|
|
149
154
|
getBoneWorldMatrices(): Float32Array;
|
|
150
155
|
getBoneInverseBindMatrices(): Float32Array;
|
|
151
156
|
getSkinMatrices(): Float32Array;
|
|
@@ -156,6 +161,7 @@ export declare class Model {
|
|
|
156
161
|
resetAllMorphs(): void;
|
|
157
162
|
setIKEnabled(enabled: boolean): void;
|
|
158
163
|
setPhysicsEnabled(enabled: boolean): void;
|
|
164
|
+
getPhysicsEnabled(): boolean;
|
|
159
165
|
playAnimation(): void;
|
|
160
166
|
pauseAnimation(): void;
|
|
161
167
|
stopAnimation(): void;
|
|
@@ -172,6 +178,6 @@ export declare class Model {
|
|
|
172
178
|
private solveIKChains;
|
|
173
179
|
private ikComputedSet;
|
|
174
180
|
private computeSingleBoneWorldMatrix;
|
|
175
|
-
|
|
181
|
+
computeWorldMatrices(): void;
|
|
176
182
|
}
|
|
177
183
|
//# sourceMappingURL=model.d.ts.map
|
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,EAAE,MAAM,QAAQ,CAAA;AAGzC,OAAO,EAAE,SAAS,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/model.js
CHANGED
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
import { Mat4, Quat, Vec3 } from "./math";
|
|
2
2
|
import { Engine } from "./engine";
|
|
3
3
|
import { PmxLoader } from "./pmx-loader";
|
|
4
|
-
import { Physics } from "./physics";
|
|
5
4
|
import { IKSolverSystem } from "./ik-solver";
|
|
6
5
|
import { VMDLoader } from "./vmd-loader";
|
|
7
6
|
import { interpolateControlPoints, rawInterpolationToBoneInterpolation } from "./animation";
|
|
8
7
|
const VMD_FPS = 30;
|
|
9
8
|
const VERTEX_STRIDE = 8;
|
|
10
9
|
export class Model {
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
static nextDefaultName() {
|
|
11
|
+
return "model_" + Model._nextId++;
|
|
12
|
+
}
|
|
13
|
+
static async loadPmx(path, name) {
|
|
13
14
|
const model = await PmxLoader.load(path);
|
|
15
|
+
model.setName(name ?? Model.nextDefaultName());
|
|
14
16
|
await Engine.getInstance().registerModel(model, path);
|
|
15
17
|
return model;
|
|
16
18
|
}
|
|
19
|
+
get name() {
|
|
20
|
+
return this._name;
|
|
21
|
+
}
|
|
22
|
+
setName(value) {
|
|
23
|
+
this._name = value;
|
|
24
|
+
}
|
|
17
25
|
constructor(vertexData, indexData, textures, materials, skeleton, skinning, morphing, rigidbodies = [], joints = []) {
|
|
26
|
+
this._name = "";
|
|
18
27
|
this.textures = [];
|
|
19
28
|
this.materials = [];
|
|
20
29
|
// Physics data from PMX
|
|
@@ -36,8 +45,6 @@ export class Model {
|
|
|
36
45
|
// Cached keyframe indices for faster lookup (per track)
|
|
37
46
|
this.boneTrackIndices = new Map();
|
|
38
47
|
this.morphTrackIndices = new Map();
|
|
39
|
-
// Physics runtime
|
|
40
|
-
this.physics = null;
|
|
41
48
|
// IK and Physics enable flags
|
|
42
49
|
this.ikEnabled = true;
|
|
43
50
|
this.physicsEnabled = true;
|
|
@@ -62,10 +69,6 @@ export class Model {
|
|
|
62
69
|
this.initializeRuntimeMorph();
|
|
63
70
|
this.initializeTweenBuffers();
|
|
64
71
|
this.applyMorphs();
|
|
65
|
-
// Initialize physics if rigidbodies exist
|
|
66
|
-
if (rigidbodies.length > 0) {
|
|
67
|
-
this.physics = new Physics(rigidbodies, joints);
|
|
68
|
-
}
|
|
69
72
|
}
|
|
70
73
|
initializeRuntimeSkeleton() {
|
|
71
74
|
const boneCount = this.skeleton.bones.length;
|
|
@@ -409,6 +412,9 @@ export class Model {
|
|
|
409
412
|
const localTranslation = new Vec3(rm[0] * afterBindTranslation.x + rm[4] * afterBindTranslation.y + rm[8] * afterBindTranslation.z, rm[1] * afterBindTranslation.x + rm[5] * afterBindTranslation.y + rm[9] * afterBindTranslation.z, rm[2] * afterBindTranslation.x + rm[6] * afterBindTranslation.y + rm[10] * afterBindTranslation.z);
|
|
410
413
|
return localTranslation;
|
|
411
414
|
}
|
|
415
|
+
getWorldMatrices() {
|
|
416
|
+
return this.runtimeSkeleton.worldMatrices;
|
|
417
|
+
}
|
|
412
418
|
getBoneWorldMatrices() {
|
|
413
419
|
// Convert Mat4[] to Float32Array for WebGPU compatibility
|
|
414
420
|
const boneCount = this.skeleton.bones.length;
|
|
@@ -452,7 +458,7 @@ export class Model {
|
|
|
452
458
|
this.tweenState.morphActive[idx] = 0;
|
|
453
459
|
this.applyMorphs();
|
|
454
460
|
try {
|
|
455
|
-
Engine.getInstance().markVertexBufferDirty();
|
|
461
|
+
Engine.getInstance().markVertexBufferDirty(this);
|
|
456
462
|
}
|
|
457
463
|
catch {
|
|
458
464
|
/* not registered yet */
|
|
@@ -604,10 +610,6 @@ export class Model {
|
|
|
604
610
|
this._hasAnimation = true;
|
|
605
611
|
this.animationTime = 0;
|
|
606
612
|
this.getPoseAtTime(0);
|
|
607
|
-
if (this.physics) {
|
|
608
|
-
this.computeWorldMatrices();
|
|
609
|
-
this.physics.reset(this.runtimeSkeleton.worldMatrices, this.skeleton.inverseBindMatrices);
|
|
610
|
-
}
|
|
611
613
|
}
|
|
612
614
|
resetAllBones() {
|
|
613
615
|
for (let boneIdx = 0; boneIdx < this.skeleton.bones.length; boneIdx++) {
|
|
@@ -618,9 +620,6 @@ export class Model {
|
|
|
618
620
|
localTrans.set(Vec3.zeros());
|
|
619
621
|
}
|
|
620
622
|
this.computeWorldMatrices();
|
|
621
|
-
if (this.physics) {
|
|
622
|
-
this.physics.reset(this.runtimeSkeleton.worldMatrices, this.skeleton.inverseBindMatrices);
|
|
623
|
-
}
|
|
624
623
|
}
|
|
625
624
|
resetAllMorphs() {
|
|
626
625
|
for (let morphIdx = 0; morphIdx < this.morphing.morphs.length; morphIdx++) {
|
|
@@ -636,15 +635,14 @@ export class Model {
|
|
|
636
635
|
setPhysicsEnabled(enabled) {
|
|
637
636
|
this.physicsEnabled = enabled;
|
|
638
637
|
}
|
|
638
|
+
getPhysicsEnabled() {
|
|
639
|
+
return this.physicsEnabled;
|
|
640
|
+
}
|
|
639
641
|
playAnimation() {
|
|
640
642
|
if (!this._hasAnimation)
|
|
641
643
|
return;
|
|
642
644
|
this.isPaused = false;
|
|
643
645
|
this.isPlaying = true;
|
|
644
|
-
if (this.physics && this.animationTime === 0) {
|
|
645
|
-
this.computeWorldMatrices();
|
|
646
|
-
this.physics.reset(this.runtimeSkeleton.worldMatrices, this.skeleton.inverseBindMatrices);
|
|
647
|
-
}
|
|
648
646
|
}
|
|
649
647
|
pauseAnimation() {
|
|
650
648
|
if (!this.isPlaying || this.isPaused)
|
|
@@ -798,9 +796,6 @@ export class Model {
|
|
|
798
796
|
// Recompute world matrices with final IK rotations applied to localRotations
|
|
799
797
|
this.computeWorldMatrices();
|
|
800
798
|
}
|
|
801
|
-
if (this.physicsEnabled && this.physics) {
|
|
802
|
-
this.physics.step(deltaTime, this.runtimeSkeleton.worldMatrices, this.skeleton.inverseBindMatrices);
|
|
803
|
-
}
|
|
804
799
|
return verticesChanged;
|
|
805
800
|
}
|
|
806
801
|
solveIKChains() {
|
|
@@ -997,3 +992,4 @@ export class Model {
|
|
|
997
992
|
computeWorld(i);
|
|
998
993
|
}
|
|
999
994
|
}
|
|
995
|
+
Model._nextId = 0;
|