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/README.md
CHANGED
|
@@ -20,6 +20,8 @@ A lightweight engine built with WebGPU and TypeScript for real-time 3D anime cha
|
|
|
20
20
|
## Usage
|
|
21
21
|
|
|
22
22
|
```javascript
|
|
23
|
+
import { Engine, Model } from "reze-engine"
|
|
24
|
+
|
|
23
25
|
export default function Scene() {
|
|
24
26
|
const canvasRef = useRef < HTMLCanvasElement > null
|
|
25
27
|
const engineRef = useRef < Engine > null
|
|
@@ -30,7 +32,7 @@ export default function Scene() {
|
|
|
30
32
|
const engine = new Engine(canvasRef.current, {})
|
|
31
33
|
engineRef.current = engine
|
|
32
34
|
await engine.init()
|
|
33
|
-
await
|
|
35
|
+
await Model.loadPmx("/models/reze/reze.pmx")
|
|
34
36
|
|
|
35
37
|
engine.runRenderLoop(() => {})
|
|
36
38
|
} catch (error) {
|
|
@@ -72,51 +74,37 @@ const DEFAULT_ENGINE_OPTIONS: RequiredEngineOptions = {
|
|
|
72
74
|
|
|
73
75
|
## API
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
Use **`Model.loadPmx(path)`** after **`await engine.init()`**—the model is registered on the engine automatically.
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
### Animation (model instance)
|
|
78
80
|
|
|
79
81
|
```javascript
|
|
80
|
-
await
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
const model = await Model.loadPmx("/models/char.pmx")
|
|
83
|
+
await model.loadVmd("/animations/dance.vmd")
|
|
84
|
+
model.playAnimation()
|
|
85
|
+
model.pauseAnimation()
|
|
86
|
+
model.stopAnimation()
|
|
87
|
+
model.seekAnimation(2.5)
|
|
88
|
+
|
|
89
|
+
const { current, duration, percentage } = model.getAnimationProgress()
|
|
87
90
|
```
|
|
88
91
|
|
|
89
|
-
###
|
|
90
|
-
|
|
91
|
-
Rotate and move bones with optional tween duration. Translations are VMD-style (relative to bind pose world position).
|
|
92
|
-
|
|
93
|
-
```javascript
|
|
94
|
-
engine.rotateBones({ "首": neckQuat, "頭": headQuat }, 300)
|
|
95
|
-
engine.moveBones({ "センター": centerVec }, 300)
|
|
96
|
-
engine.setMorphWeight("まばたき", 1.0, 300)
|
|
97
|
-
|
|
98
|
-
engine.resetAllBones()
|
|
99
|
-
engine.resetAllMorphs()
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Atomic Pose Setting
|
|
103
|
-
|
|
104
|
-
Set rotations, translations, and morphs in a single atomic pass — for animation editors, motion capture, or any use case that needs precise, immediate pose updates matching the quality of internal VMD playback.
|
|
92
|
+
### Bones / morphs (model)
|
|
105
93
|
|
|
106
94
|
```javascript
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
)
|
|
95
|
+
model.rotateBones({ 首: neckQuat, 頭: headQuat }, 300)
|
|
96
|
+
model.moveBones({ センター: centerVec }, 300)
|
|
97
|
+
model.setMorphWeight("まばたき", 1.0, 300)
|
|
98
|
+
model.resetAllBones()
|
|
99
|
+
model.resetAllMorphs()
|
|
112
100
|
```
|
|
113
101
|
|
|
114
|
-
|
|
102
|
+
### Engine
|
|
115
103
|
|
|
116
104
|
```javascript
|
|
117
|
-
engine.
|
|
118
|
-
engine.
|
|
119
|
-
engine.
|
|
105
|
+
engine.runRenderLoop(() => {})
|
|
106
|
+
engine.setMaterialVisible("材質1", false)
|
|
107
|
+
engine.addGround({ mode: "shadow", shadowMapSize: 1024 })
|
|
120
108
|
```
|
|
121
109
|
|
|
122
110
|
## Projects Using This Engine
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ControlPoint {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
export interface BoneInterpolation {
|
|
6
|
+
rotation: ControlPoint[];
|
|
7
|
+
translationX: ControlPoint[];
|
|
8
|
+
translationY: ControlPoint[];
|
|
9
|
+
translationZ: ControlPoint[];
|
|
10
|
+
}
|
|
11
|
+
export declare function bezierInterpolate(x1: number, x2: number, y1: number, y2: number, t: number): number;
|
|
12
|
+
export declare function rawInterpolationToBoneInterpolation(raw: Uint8Array): BoneInterpolation;
|
|
13
|
+
export declare function interpolateControlPoints(cp: ControlPoint[], t: number): number;
|
|
14
|
+
//# sourceMappingURL=animation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,YAAY,EAAE,YAAY,EAAE,CAAA;IAC5B,YAAY,EAAE,YAAY,EAAE,CAAA;IAC5B,YAAY,EAAE,YAAY,EAAE,CAAA;CAC7B;AAGD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BnG;AAKD,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,UAAU,GAAG,iBAAiB,CAmBtF;AAGD,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ9E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Cubic bezier in normalized 0–1 space (binary search on x)
|
|
2
|
+
export function bezierInterpolate(x1, x2, y1, y2, t) {
|
|
3
|
+
t = Math.max(0, Math.min(1, t));
|
|
4
|
+
let start = 0;
|
|
5
|
+
let end = 1;
|
|
6
|
+
let mid = 0.5;
|
|
7
|
+
for (let i = 0; i < 15; i++) {
|
|
8
|
+
const x = 3 * (1 - mid) * (1 - mid) * mid * x1 + 3 * (1 - mid) * mid * mid * x2 + mid * mid * mid;
|
|
9
|
+
if (Math.abs(x - t) < 0.0001) {
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
if (x < t) {
|
|
13
|
+
start = mid;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
end = mid;
|
|
17
|
+
}
|
|
18
|
+
mid = (start + end) / 2;
|
|
19
|
+
}
|
|
20
|
+
const y = 3 * (1 - mid) * (1 - mid) * mid * y1 + 3 * (1 - mid) * mid * mid * y2 + mid * mid * mid;
|
|
21
|
+
return y;
|
|
22
|
+
}
|
|
23
|
+
const INV_127 = 1 / 127;
|
|
24
|
+
// VMD 64-byte interpolation blob → BoneInterpolation
|
|
25
|
+
export function rawInterpolationToBoneInterpolation(raw) {
|
|
26
|
+
return {
|
|
27
|
+
rotation: [
|
|
28
|
+
{ x: raw[0], y: raw[2] },
|
|
29
|
+
{ x: raw[1], y: raw[3] },
|
|
30
|
+
],
|
|
31
|
+
translationX: [
|
|
32
|
+
{ x: raw[0], y: raw[4] },
|
|
33
|
+
{ x: raw[8], y: raw[12] },
|
|
34
|
+
],
|
|
35
|
+
translationY: [
|
|
36
|
+
{ x: raw[16], y: raw[20] },
|
|
37
|
+
{ x: raw[24], y: raw[28] },
|
|
38
|
+
],
|
|
39
|
+
translationZ: [
|
|
40
|
+
{ x: raw[32], y: raw[36] },
|
|
41
|
+
{ x: raw[40], y: raw[44] },
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Control points are 0–127 VMD bytes
|
|
46
|
+
export function interpolateControlPoints(cp, t) {
|
|
47
|
+
return bezierInterpolate(cp[0].x * INV_127, cp[1].x * INV_127, cp[0].y * INV_127, cp[1].y * INV_127, t);
|
|
48
|
+
}
|
package/dist/camera.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAInC,qBAAa,MAAM;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,IAAI,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAI;IAClB,IAAI,EAAE,MAAM,CAAO;IACnB,GAAG,EAAE,MAAM,CAAM;IAGjB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,oBAAoB,CAAY;IAGxC,kBAAkB,EAAE,MAAM,CAAQ;IAClC,cAAc,EAAE,MAAM,CAAS;IAC/B,cAAc,EAAE,MAAM,CAAO;IAC7B,cAAc,EAAE,MAAM,CAAO;IAC7B,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAInC,qBAAa,MAAM;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,IAAI,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAI;IAClB,IAAI,EAAE,MAAM,CAAO;IACnB,GAAG,EAAE,MAAM,CAAM;IAGjB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,oBAAoB,CAAY;IAGxC,kBAAkB,EAAE,MAAM,CAAQ;IAClC,cAAc,EAAE,MAAM,CAAS;IAC/B,cAAc,EAAE,MAAM,CAAO;IAC7B,cAAc,EAAE,MAAM,CAAO;IAC7B,IAAI,EAAE,MAAM,CAAO;IACnB,IAAI,EAAE,MAAM,CAAM;IAClB,cAAc,EAAE,MAAM,CAAQ;IAC9B,cAAc,EAAE,MAAM,CAAkB;gBAE5B,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAE,MAAoB;IAkBhG,WAAW,IAAI,IAAI;IAQnB,aAAa,IAAI,IAAI;IAQrB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,SAAS;IAiBjB,mBAAmB,IAAI,IAAI;IAI3B,aAAa,CAAC,MAAM,EAAE,iBAAiB;IAiBvC,aAAa;IAkBb,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,WAAW;IAiFnB,OAAO,CAAC,UAAU;CA+BnB"}
|
package/dist/camera.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Mat4, Vec3 } from "./math";
|
|
2
|
-
const FAR =
|
|
2
|
+
const FAR = 2000;
|
|
3
3
|
export class Camera {
|
|
4
4
|
constructor(alpha, beta, radius, target, fov = Math.PI / 4) {
|
|
5
5
|
this.aspect = 1;
|
|
@@ -21,7 +21,7 @@ export class Camera {
|
|
|
21
21
|
this.panSensitivity = 0.0002; // Sensitivity for right-click panning
|
|
22
22
|
this.wheelPrecision = 0.01;
|
|
23
23
|
this.pinchPrecision = 0.05;
|
|
24
|
-
this.minZ = 0.
|
|
24
|
+
this.minZ = 0.05;
|
|
25
25
|
this.maxZ = FAR;
|
|
26
26
|
this.lowerBetaLimit = 0.001;
|
|
27
27
|
this.upperBetaLimit = Math.PI - 0.001;
|
package/dist/engine.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Vec3 } from "./math";
|
|
2
|
+
import { Model } from "./model";
|
|
2
3
|
export type RaycastCallback = (material: string | null, screenX: number, screenY: number) => void;
|
|
3
4
|
export type EngineOptions = {
|
|
4
5
|
ambientColor?: Vec3;
|
|
@@ -11,6 +12,7 @@ export type EngineOptions = {
|
|
|
11
12
|
onRaycast?: RaycastCallback;
|
|
12
13
|
disableIK?: boolean;
|
|
13
14
|
disablePhysics?: boolean;
|
|
15
|
+
multisampleCount?: 1 | 4;
|
|
14
16
|
};
|
|
15
17
|
export type RequiredEngineOptions = Required<Omit<EngineOptions, "onRaycast">> & Pick<EngineOptions, "onRaycast">;
|
|
16
18
|
export declare const DEFAULT_ENGINE_OPTIONS: RequiredEngineOptions;
|
|
@@ -19,6 +21,8 @@ export interface EngineStats {
|
|
|
19
21
|
frameTime: number;
|
|
20
22
|
}
|
|
21
23
|
export declare class Engine {
|
|
24
|
+
private static instance;
|
|
25
|
+
static getInstance(): Engine;
|
|
22
26
|
private canvas;
|
|
23
27
|
private device;
|
|
24
28
|
private context;
|
|
@@ -53,7 +57,7 @@ export declare class Engine {
|
|
|
53
57
|
private skinMatrixBuffer?;
|
|
54
58
|
private inverseBindMatrixBuffer?;
|
|
55
59
|
private multisampleTexture;
|
|
56
|
-
private
|
|
60
|
+
private sampleCount;
|
|
57
61
|
private renderPassDescriptor;
|
|
58
62
|
private readonly STENCIL_EYE_VALUE;
|
|
59
63
|
private ambientColor;
|
|
@@ -68,6 +72,22 @@ export declare class Engine {
|
|
|
68
72
|
private groundReflectionBindGroup?;
|
|
69
73
|
private groundMaterialUniformBuffer?;
|
|
70
74
|
private groundHasReflections;
|
|
75
|
+
private groundMode;
|
|
76
|
+
private shadowMapTexture?;
|
|
77
|
+
private shadowMapDepthView?;
|
|
78
|
+
private shadowDepthPipeline;
|
|
79
|
+
private shadowBindGroup?;
|
|
80
|
+
private shadowLightVPBuffer;
|
|
81
|
+
private shadowLightVPMatrix;
|
|
82
|
+
private groundShadowPipeline;
|
|
83
|
+
private groundShadowBindGroupLayout;
|
|
84
|
+
private groundShadowBindGroup?;
|
|
85
|
+
private shadowComparisonSampler;
|
|
86
|
+
private groundShadowMaterialBuffer?;
|
|
87
|
+
private shadowDrawCalls;
|
|
88
|
+
private shadowVPLightX;
|
|
89
|
+
private shadowVPLightY;
|
|
90
|
+
private shadowVPLightZ;
|
|
71
91
|
private onRaycast?;
|
|
72
92
|
private cachedSkinnedVertices?;
|
|
73
93
|
private cachedSkinMatricesVersion;
|
|
@@ -110,35 +130,20 @@ export declare class Engine {
|
|
|
110
130
|
reflectionTextureSize?: number;
|
|
111
131
|
fadeStart?: number;
|
|
112
132
|
fadeEnd?: number;
|
|
133
|
+
mode?: "reflection" | "shadow";
|
|
134
|
+
shadowMapSize?: number;
|
|
135
|
+
shadowStrength?: number;
|
|
113
136
|
}): void;
|
|
114
137
|
private updateLightBuffer;
|
|
115
|
-
loadAnimation(url: string): Promise<void>;
|
|
116
|
-
playAnimation(): void;
|
|
117
|
-
stopAnimation(): void;
|
|
118
|
-
pauseAnimation(): void;
|
|
119
|
-
seekAnimation(time: number): void;
|
|
120
|
-
getAnimationProgress(): {
|
|
121
|
-
current: number;
|
|
122
|
-
duration: number;
|
|
123
|
-
percentage: number;
|
|
124
|
-
};
|
|
125
138
|
getStats(): EngineStats;
|
|
126
139
|
runRenderLoop(callback?: () => void): void;
|
|
127
140
|
stopRenderLoop(): void;
|
|
128
141
|
dispose(): void;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
moveBones(boneTranslations: Record<string, Vec3>, durationMs?: number): void;
|
|
132
|
-
setPose(rotations?: Record<string, Quat>, translations?: Record<string, Vec3>, morphs?: Record<string, number>): void;
|
|
133
|
-
resetAllBones(): void;
|
|
134
|
-
resetAllMorphs(): void;
|
|
135
|
-
setMorphWeight(name: string, weight: number, durationMs?: number): void;
|
|
142
|
+
registerModel(model: Model, pmxPath: string): Promise<void>;
|
|
143
|
+
markVertexBufferDirty(): void;
|
|
136
144
|
setMaterialVisible(name: string, visible: boolean): void;
|
|
137
145
|
toggleMaterialVisible(name: string): void;
|
|
138
146
|
isMaterialVisible(name: string): boolean;
|
|
139
|
-
getBones(): string[];
|
|
140
|
-
getMorphs(): string[];
|
|
141
|
-
getMaterials(): string[];
|
|
142
147
|
get disableIK(): boolean;
|
|
143
148
|
set disableIK(value: boolean);
|
|
144
149
|
get disablePhysics(): boolean;
|
|
@@ -148,6 +153,8 @@ export declare class Engine {
|
|
|
148
153
|
private createGroundGeometry;
|
|
149
154
|
private createGroundMaterialBuffer;
|
|
150
155
|
private createReflectionTexture;
|
|
156
|
+
private createShadowGroundResources;
|
|
157
|
+
private updateShadowLightVP;
|
|
151
158
|
private setupMaterials;
|
|
152
159
|
private createMaterialUniformBuffer;
|
|
153
160
|
private createUniformBuffer;
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|