reze-engine 0.8.4 → 0.9.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/README.md CHANGED
@@ -1,44 +1,114 @@
1
1
  # Reze Engine
2
2
 
3
- A lightweight engine built with WebGPU and TypeScript for real-time 3D anime character MMD model rendering.
3
+ A lightweight WebGPU engine for real-time 3D MMD/PMX model rendering, built with TypeScript.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install reze-engine
9
+ ```
4
10
 
5
11
  ## Features
6
12
 
7
13
  - Blinn-Phong lighting, alpha blending, rim lighting, outlines, MSAA 4x
8
- - Post alpha eye rendering (see-through eyes)
9
- - Bone and morph API, VMD animation (multiple named, non-interruptible), IK solver, Ammo/Bullet physics
14
+ - VMD animation (multiple named, non-interruptible), IK solver, Ammo/Bullet physics
15
+ - GPU picking (double-click/tap returns model + material name)
16
+ - Souls-style follow cam (orbit center bound to model bone)
17
+ - Optimized bind groups (per-frame / per-instance / per-material)
18
+ - Ground shadow mapping with PCF
10
19
  - Multi-model (per-model materials, IK, physics)
11
20
 
12
- ## Usage
21
+ ## Quick Start
13
22
 
14
23
  ```javascript
15
- import { Engine, Model } from "reze-engine"
24
+ import { Engine, Vec3 } from "reze-engine"
16
25
 
17
- const engine = new Engine(canvas, {})
26
+ const engine = new Engine(canvas, {
27
+ ambientColor: new Vec3(0.88, 0.92, 0.99),
28
+ cameraDistance: 31.5,
29
+ })
18
30
  await engine.init()
19
- const model = await engine.loadModel("/models/reze/reze.pmx")
20
- await model.loadAnimation("default", "/animations/dance.vmd")
21
- model.show("default")
31
+
32
+ const model = await engine.loadModel("hero", "/models/hero/hero.pmx")
33
+ await model.loadAnimation("idle", "/animations/idle.vmd")
34
+ model.show("idle")
22
35
  model.play()
23
- engine.runRenderLoop(() => {})
36
+
37
+ engine.setCameraFollow(model, "センター", new Vec3(0, 3.5, 0))
38
+ engine.addGround({ width: 160, height: 160 })
39
+ engine.runRenderLoop()
24
40
  ```
25
41
 
26
- ## API (summary)
42
+ ## API
43
+
44
+ ### Engine
45
+
46
+ | Method | Description |
47
+ |--------|-------------|
48
+ | `new Engine(canvas, options?)` | Create engine with optional config |
49
+ | `engine.init()` | Initialize WebGPU device and context |
50
+ | `engine.loadModel(path)` | Load PMX model (auto-named) |
51
+ | `engine.loadModel(name, path)` | Load PMX model with name |
52
+ | `engine.getModel(name)` | Get model by name |
53
+ | `engine.getModelNames()` | List all model names |
54
+ | `engine.removeModel(name)` | Remove model |
55
+ | `engine.setMaterialVisible(model, mat, visible)` | Show/hide material |
56
+ | `engine.toggleMaterialVisible(model, mat)` | Toggle material visibility |
57
+ | `engine.setIKEnabled(enabled)` | Enable/disable IK globally |
58
+ | `engine.setPhysicsEnabled(enabled)` | Enable/disable physics globally |
59
+ | `engine.resetPhysics()` | Reset physics to current pose |
60
+ | `engine.setCameraFollow(model, bone?, offset?)` | Follow cam bound to bone |
61
+ | `engine.setCameraTarget(vec3)` | Static camera target |
62
+ | `engine.setCameraDistance(d)` | Set orbit radius |
63
+ | `engine.setCameraAlpha(a)` | Set horizontal orbit angle |
64
+ | `engine.setCameraBeta(b)` | Set vertical orbit angle |
65
+ | `engine.addGround(options?)` | Add ground plane with shadows |
66
+ | `engine.runRenderLoop(callback?)` | Start render loop |
67
+ | `engine.stopRenderLoop()` | Stop render loop |
68
+ | `engine.getStats()` | Returns `{ fps, frameTime }` |
69
+ | `engine.dispose()` | Clean up all resources |
27
70
 
28
- - **Multi-model:** `engine.loadModel(path)` / `engine.loadModel(name, path)`, `engine.addModel(model, pmxPath, name?)`, `getModel(name)`, `getModelNames()`, `removeModel(name)`, `setMaterialVisible(modelName, materialName, visible)`, `setIKEnabled(enabled)`, `setPhysicsEnabled(enabled)`, `getIKEnabled()`, `getPhysicsEnabled()`, `resetPhysics()`, `markVertexBufferDirty(modelName?)`
29
- - **Animation:** `model.loadAnimation(name, vmdUrl)`; `model.show(name)`; `model.play()` / `model.play(name)`; `model.pause()`; `model.stop()`; `model.seek(t)`; `model.getAnimationProgress()`. Animations are non-interruptible (next is queued).
30
- - **Bones / morphs:** `model.rotateBones()`, `model.moveBones()`, `model.setMorphWeight()`, `model.resetAllBones()`, `model.resetAllMorphs()`
31
- - **Engine:** `runRenderLoop()`, `addGround({ mode: "reflection" | "shadow", ... })`, `onRaycast: (modelName, material, screenX, screenY) => {}`
71
+ ### Model
72
+
73
+ | Method | Description |
74
+ |--------|-------------|
75
+ | `model.loadAnimation(name, url)` | Load VMD animation |
76
+ | `model.show(name)` | Set pose at time 0 |
77
+ | `model.play(name?)` | Play animation (queued if busy) |
78
+ | `model.pause()` | Pause playback |
79
+ | `model.stop()` | Stop playback |
80
+ | `model.seek(time)` | Seek to time |
81
+ | `model.getAnimationProgress()` | `{ current, duration, percentage, animationName }` |
82
+ | `model.getAnimationState()` | Access animation controller |
83
+ | `model.rotateBones(rotations, ms?)` | Tween bone rotations |
84
+ | `model.moveBones(translations, ms?)` | Tween bone translations |
85
+ | `model.setMorphWeight(name, weight, ms?)` | Tween morph weight |
86
+ | `model.resetAllBones()` | Reset to bind pose |
87
+ | `model.resetAllMorphs()` | Reset all morph weights |
88
+ | `model.getBoneWorldPosition(name)` | World position of bone |
89
+
90
+ ### Engine Options
91
+
92
+ ```javascript
93
+ {
94
+ ambientColor: Vec3,
95
+ directionalLightIntensity: number,
96
+ minSpecularIntensity: number,
97
+ rimLightIntensity: number,
98
+ cameraDistance: number,
99
+ cameraTarget: Vec3,
100
+ cameraFov: number,
101
+ onRaycast: (modelName, material, screenX, screenY) => void,
102
+ }
103
+ ```
32
104
 
33
105
  ## Projects Using This Engine
34
106
 
35
- - **[MiKaPo](https://mikapo.vercel.app)** - Online real-time motion capture for MMD using webcam and MediaPipe
36
- - **[Popo](https://popo.love)** - Fine-tuned LLM that generates MMD poses from natural language descriptions
37
- - **[MPL](https://mmd-mpl.vercel.app)** - Semantic motion programming language for scripting MMD animations with intuitive syntax
38
- - **[Mixamo-MMD](https://mixamo-mmd.vercel.app)** - Retarget Mixamo FBX animation to VMD in one click
107
+ - **[MiKaPo](https://mikapo.vercel.app)** - Real-time motion capture for MMD
108
+ - **[Popo](https://popo.love)** - LLM-generated MMD poses
109
+ - **[MPL](https://mmd-mpl.vercel.app)** - Motion programming language for MMD
110
+ - **[Mixamo-MMD](https://mixamo-mmd.vercel.app)** - Retarget Mixamo FBX to VMD
39
111
 
40
112
  ## Tutorial
41
113
 
42
- Learn WebGPU from scratch by building an anime character renderer in incremental steps. The tutorial covers the complete rendering pipeline from a simple triangle to fully textured, skeletal-animated characters.
43
-
44
114
  [How to Render an Anime Character with WebGPU](https://reze.one/tutorial)
package/dist/camera.d.ts CHANGED
@@ -31,6 +31,8 @@ export declare class Camera {
31
31
  getViewMatrix(): Mat4;
32
32
  private getCameraVectors;
33
33
  private panCamera;
34
+ /** Far plane grows with zoom-out so big floors / distant geometry stay visible */
35
+ private updateFarFromRadius;
34
36
  getProjectionMatrix(): Mat4;
35
37
  attachControl(canvas: HTMLCanvasElement): void;
36
38
  detachControl(): void;
@@ -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,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"}
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAMnC,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,CAAU;IAGrB,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,CAAU;IACtB,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;IAmBhG,WAAW,IAAI,IAAI;IAQnB,aAAa,IAAI,IAAI;IAQrB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,SAAS;IAiBjB,kFAAkF;IAClF,OAAO,CAAC,mBAAmB;IAK3B,mBAAmB,IAAI,IAAI;IAK3B,aAAa,CAAC,MAAM,EAAE,iBAAiB;IAiBvC,aAAa;IAkBb,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,WAAW;IAgFnB,OAAO,CAAC,UAAU;CA+BnB"}
package/dist/camera.js CHANGED
@@ -1,10 +1,12 @@
1
1
  import { Mat4, Vec3 } from "./math";
2
- const FAR = 2000;
2
+ /** Far cap / zoom limit; large enough for wide shots without clipping distant ground */
3
+ const FAR_CAP = 8000;
4
+ const FAR_MIN = 200;
3
5
  export class Camera {
4
6
  constructor(alpha, beta, radius, target, fov = Math.PI / 4) {
5
7
  this.aspect = 1;
6
8
  this.near = 0.05;
7
- this.far = FAR;
9
+ this.far = FAR_CAP;
8
10
  // Input state
9
11
  this.canvas = null;
10
12
  this.isDragging = false;
@@ -22,7 +24,7 @@ export class Camera {
22
24
  this.wheelPrecision = 0.01;
23
25
  this.pinchPrecision = 0.05;
24
26
  this.minZ = 0.05;
25
- this.maxZ = FAR;
27
+ this.maxZ = FAR_CAP;
26
28
  this.lowerBetaLimit = 0.001;
27
29
  this.upperBetaLimit = Math.PI - 0.001;
28
30
  this.alpha = alpha;
@@ -30,6 +32,7 @@ export class Camera {
30
32
  this.radius = radius;
31
33
  this.target = target;
32
34
  this.fov = fov;
35
+ this.updateFarFromRadius();
33
36
  // Bind event handlers
34
37
  this.onMouseDown = this.onMouseDown.bind(this);
35
38
  this.onMouseMove = this.onMouseMove.bind(this);
@@ -103,7 +106,13 @@ export class Camera {
103
106
  // Update target position smoothly
104
107
  this.target = this.target.add(panRight).add(panUp);
105
108
  }
109
+ /** Far plane grows with zoom-out so big floors / distant geometry stay visible */
110
+ updateFarFromRadius() {
111
+ const margin = 600;
112
+ this.far = Math.min(FAR_CAP, Math.max(FAR_MIN, this.radius * 12 + margin));
113
+ }
106
114
  getProjectionMatrix() {
115
+ this.updateFarFromRadius();
107
116
  return Mat4.perspective(this.fov, this.aspect, this.near, this.far);
108
117
  }
109
118
  attachControl(canvas) {
@@ -168,8 +177,7 @@ export class Camera {
168
177
  this.radius += e.deltaY * this.wheelPrecision;
169
178
  // Clamp radius to reasonable bounds
170
179
  this.radius = Math.max(this.minZ, Math.min(this.maxZ, this.radius));
171
- // Expand far plane to keep scene visible when zooming out
172
- this.far = Math.max(FAR, this.radius * 4);
180
+ this.updateFarFromRadius();
173
181
  }
174
182
  onContextMenu(e) {
175
183
  e.preventDefault();
@@ -235,8 +243,7 @@ export class Camera {
235
243
  this.radius += delta * this.pinchPrecision;
236
244
  // Clamp radius to reasonable bounds
237
245
  this.radius = Math.max(this.minZ, Math.min(this.maxZ, this.radius));
238
- // Expand far plane for pinch zoom as well
239
- this.far = Math.max(FAR, this.radius * 4);
246
+ this.updateFarFromRadius();
240
247
  }
241
248
  if (isPanGesture) {
242
249
  // Primary gesture is pan (two-finger drag)
package/dist/engine.d.ts CHANGED
@@ -36,20 +36,19 @@ export declare class Engine {
36
36
  private resizeObserver;
37
37
  private depthTexture;
38
38
  private modelPipeline;
39
- private eyePipeline;
40
- private hairPipelineOverEyes;
41
- private hairPipelineOverNonEyes;
42
- private hairDepthPipeline;
43
39
  private groundShadowPipeline;
44
40
  private groundShadowBindGroupLayout;
45
41
  private outlinePipeline;
46
- private hairOutlinePipeline;
47
- private mainBindGroupLayout;
48
- private outlineBindGroupLayout;
42
+ private mainPerFrameBindGroupLayout;
43
+ private mainPerInstanceBindGroupLayout;
44
+ private mainPerMaterialBindGroupLayout;
45
+ private outlinePerFrameBindGroupLayout;
46
+ private outlinePerMaterialBindGroupLayout;
47
+ private perFrameBindGroup;
48
+ private outlinePerFrameBindGroup;
49
49
  private multisampleTexture;
50
50
  private static readonly MULTISAMPLE_COUNT;
51
51
  private renderPassDescriptor;
52
- private readonly STENCIL_EYE_VALUE;
53
52
  private ambientColor;
54
53
  private directionalLightIntensity;
55
54
  private minSpecularIntensity;
@@ -72,6 +71,15 @@ export declare class Engine {
72
71
  private onRaycast?;
73
72
  private lastTouchTime;
74
73
  private readonly DOUBLE_TAP_DELAY;
74
+ private pickPipeline;
75
+ private pickPerFrameBindGroupLayout;
76
+ private pickPerInstanceBindGroupLayout;
77
+ private pickPerMaterialBindGroupLayout;
78
+ private pickPerFrameBindGroup;
79
+ private pickTexture;
80
+ private pickDepthTexture;
81
+ private pickReadbackBuffer;
82
+ private pendingPick;
75
83
  private modelInstances;
76
84
  private materialSampler;
77
85
  private textureCache;
@@ -96,10 +104,18 @@ export declare class Engine {
96
104
  private setupResize;
97
105
  private handleResize;
98
106
  private setupCamera;
99
- /** Set camera look-at target to a point. Clears any model binding. */
107
+ /** Set static camera look-at / orbit center. Clears any model follow binding. */
100
108
  setCameraTarget(v: Vec3): void;
101
- /** Bind camera target to a model's bone. Engine updates target each frame. Bone not found → (0,0,0) + offset. Pass null to unbind. */
109
+ /** Bind camera orbit center to a model's bone (Souls-style follow cam). Pass null to unbind. */
102
110
  setCameraTarget(model: Model | null, boneName: string, offset?: Vec3): void;
111
+ /** Souls-style follow cam: orbit center tracks a model bone each frame. Shorthand for setCameraTarget(model, boneName, offset). */
112
+ setCameraFollow(model: Model | null, boneName?: string, offset?: Vec3): void;
113
+ getCameraDistance(): number;
114
+ setCameraDistance(d: number): void;
115
+ getCameraAlpha(): number;
116
+ setCameraAlpha(a: number): void;
117
+ getCameraBeta(): number;
118
+ setCameraBeta(b: number): void;
103
119
  private setupLighting;
104
120
  private setAmbientColor;
105
121
  clearLights(): void;
@@ -121,7 +137,6 @@ export declare class Engine {
121
137
  loadModel(path: string): Promise<Model>;
122
138
  loadModel(name: string, path: string): Promise<Model>;
123
139
  addModel(model: Model, pmxPath: string, name?: string): Promise<string>;
124
- registerModel(model: Model, pmxPath: string): Promise<string>;
125
140
  removeModel(name: string): void;
126
141
  getModelNames(): string[];
127
142
  getModel(name: string): Model | null;
@@ -134,7 +149,6 @@ export declare class Engine {
134
149
  setPhysicsEnabled(enabled: boolean): void;
135
150
  getPhysicsEnabled(): boolean;
136
151
  resetPhysics(): void;
137
- private instances;
138
152
  private forEachInstance;
139
153
  private updateInstances;
140
154
  private updateVertexBuffer;
@@ -147,19 +161,20 @@ export declare class Engine {
147
161
  private createUniformBuffer;
148
162
  private shouldRenderDrawCall;
149
163
  private createTextureFromPath;
150
- private renderEyes;
151
164
  private renderGround;
152
- private renderHair;
153
165
  private handleCanvasDoubleClick;
154
166
  private handleCanvasTouch;
155
167
  private performRaycast;
168
+ private renderPickPass;
169
+ private resolvePickResult;
156
170
  render(): void;
171
+ private updateRenderTarget;
157
172
  private drawInstanceShadow;
158
173
  private drawOpaque;
159
174
  private drawTransparent;
175
+ private bindMainGroups;
160
176
  private renderOneModel;
161
177
  private updateCameraUniforms;
162
- private updateRenderTarget;
163
178
  private updateSkinMatrices;
164
179
  private drawOutlines;
165
180
  private updateStats;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}