reze-engine 0.11.3 → 0.12.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 +59 -39
- package/dist/bezier-interpolate.d.ts +15 -0
- package/dist/bezier-interpolate.d.ts.map +1 -0
- package/dist/bezier-interpolate.js +40 -0
- package/dist/engine.d.ts +11 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +101 -1
- package/dist/engine_ts.d.ts +143 -0
- package/dist/engine_ts.d.ts.map +1 -0
- package/dist/engine_ts.js +1575 -0
- package/dist/ik.d.ts +32 -0
- package/dist/ik.d.ts.map +1 -0
- package/dist/ik.js +337 -0
- package/dist/player.d.ts +64 -0
- package/dist/player.d.ts.map +1 -0
- package/dist/player.js +220 -0
- package/dist/pool-scene.d.ts +52 -0
- package/dist/pool-scene.d.ts.map +1 -0
- package/dist/pool-scene.js +1122 -0
- package/dist/pool.d.ts +38 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/pool.js +422 -0
- package/dist/rzm-converter.d.ts +12 -0
- package/dist/rzm-converter.d.ts.map +1 -0
- package/dist/rzm-converter.js +40 -0
- package/dist/rzm-loader.d.ts +24 -0
- package/dist/rzm-loader.d.ts.map +1 -0
- package/dist/rzm-loader.js +488 -0
- package/dist/rzm-writer.d.ts +27 -0
- package/dist/rzm-writer.d.ts.map +1 -0
- package/dist/rzm-writer.js +701 -0
- package/dist/shaders/body.d.ts +1 -1
- package/dist/shaders/body.d.ts.map +1 -1
- package/dist/shaders/body.js +28 -7
- package/dist/shaders/cloth_rough.d.ts +1 -1
- package/dist/shaders/cloth_rough.d.ts.map +1 -1
- package/dist/shaders/cloth_rough.js +16 -4
- package/dist/shaders/cloth_smooth.d.ts +1 -1
- package/dist/shaders/cloth_smooth.d.ts.map +1 -1
- package/dist/shaders/cloth_smooth.js +17 -5
- package/dist/shaders/default.d.ts +1 -1
- package/dist/shaders/default.d.ts.map +1 -1
- package/dist/shaders/eye.d.ts +1 -1
- package/dist/shaders/eye.d.ts.map +1 -1
- package/dist/shaders/face.d.ts +1 -1
- package/dist/shaders/face.d.ts.map +1 -1
- package/dist/shaders/face.js +57 -21
- package/dist/shaders/hair.d.ts +1 -1
- package/dist/shaders/hair.d.ts.map +1 -1
- package/dist/shaders/hair.js +27 -7
- package/dist/shaders/materials/hair.d.ts +1 -1
- package/dist/shaders/materials/hair.d.ts.map +1 -1
- package/dist/shaders/materials/hair.js +10 -1
- package/dist/shaders/metal.d.ts +1 -1
- package/dist/shaders/metal.d.ts.map +1 -1
- package/dist/shaders/metal.js +17 -4
- package/dist/shaders/nodes.d.ts +1 -1
- package/dist/shaders/nodes.d.ts.map +1 -1
- package/dist/shaders/nodes.js +9 -0
- package/dist/shaders/stockings.d.ts +1 -1
- package/dist/shaders/stockings.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/engine.ts +104 -1
- package/src/shaders/materials/hair.ts +10 -1
package/README.md
CHANGED
|
@@ -12,12 +12,16 @@ npm install reze-engine
|
|
|
12
12
|
|
|
13
13
|
## Features
|
|
14
14
|
|
|
15
|
-
- Anime/MMD-style hybrid renderer — toon-ramp NPR diffuse mixed with GGX specular (multi-scatter + LTC energy compensation)
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
15
|
+
- **Anime/MMD-style hybrid renderer** — toon-ramp NPR diffuse mixed with PBR GGX specular (multi-scatter + LTC energy compensation)
|
|
16
|
+
- **Per-material presets** — `face` / `hair` / `body` / `eye` / `stockings` / `metal` / `cloth_smooth` / `cloth_rough` / `default`, assigned by material name
|
|
17
|
+
- **HDR pipeline** with bloom mip pyramid, Filmic tone mapping, 4× MSAA
|
|
18
|
+
- **Alpha-hashed transparency** (Wyman & McGuire 2017) for self-overlapping transparent meshes like stockings
|
|
19
|
+
- **Screen-space outlines** on opaque + transparent materials
|
|
20
|
+
- **VMD animation** with IK solver and Bullet physics
|
|
21
|
+
- **Orbit camera** with bone-follow mode
|
|
22
|
+
- **GPU picking** (double-click/tap)
|
|
23
|
+
- **Ground plane** with PCF shadow mapping
|
|
24
|
+
- **Multi-model support**
|
|
21
25
|
|
|
22
26
|
## Usage
|
|
23
27
|
|
|
@@ -25,13 +29,36 @@ npm install reze-engine
|
|
|
25
29
|
import { Engine, Vec3 } from "reze-engine";
|
|
26
30
|
|
|
27
31
|
const engine = new Engine(canvas, {
|
|
28
|
-
world:
|
|
29
|
-
sun:
|
|
32
|
+
world: { color: new Vec3(0.4, 0.49, 0.65), strength: 1.0 },
|
|
33
|
+
sun: {
|
|
34
|
+
color: new Vec3(1, 1, 1),
|
|
35
|
+
strength: 2.0,
|
|
36
|
+
direction: new Vec3(0, -0.5, 1),
|
|
37
|
+
},
|
|
30
38
|
camera: { distance: 31.5, target: new Vec3(0, 11.5, 0) }, // MMD units (1 unit = 8 cm)
|
|
31
39
|
});
|
|
32
40
|
await engine.init();
|
|
33
41
|
|
|
42
|
+
engine.setBloomOptions({
|
|
43
|
+
color: new Vec3(0.9, 0.1, 0.8),
|
|
44
|
+
intensity: 0.05,
|
|
45
|
+
threshold: 0.5,
|
|
46
|
+
});
|
|
47
|
+
|
|
34
48
|
const model = await engine.loadModel("hero", "/models/hero/hero.pmx");
|
|
49
|
+
|
|
50
|
+
// Map PMX material names to NPR presets (unlisted names fall back to `default`).
|
|
51
|
+
engine.setMaterialPresets("hero", {
|
|
52
|
+
face: ["face01"],
|
|
53
|
+
body: ["skin"],
|
|
54
|
+
hair: ["hair_f"],
|
|
55
|
+
eye: ["eye"],
|
|
56
|
+
cloth_smooth: ["shirt", "shorts", "dress", "shoes"],
|
|
57
|
+
cloth_rough: ["jacket", "pants"],
|
|
58
|
+
stockings: ["stockings"],
|
|
59
|
+
metal: ["metal01", "earring"],
|
|
60
|
+
});
|
|
61
|
+
|
|
35
62
|
await model.loadVmd("idle", "/animations/idle.vmd");
|
|
36
63
|
model.show("idle");
|
|
37
64
|
model.play();
|
|
@@ -81,13 +108,17 @@ engine.dispose()
|
|
|
81
108
|
|
|
82
109
|
Use a hidden `<input type="file" webkitdirectory multiple>` (or drag/drop) and pass the resulting `FileList` or `File[]` into the engine. Textures resolve relative to the chosen PMX file inside that tree.
|
|
83
110
|
|
|
84
|
-
**Important:** read `input.files` into a normal array **before** setting `input.value = ""`. The browser’s `FileList` is
|
|
111
|
+
**Important:** read `input.files` into a normal array **before** setting `input.value = ""`. The browser’s `FileList` is _live_ — clearing the input empties it.
|
|
85
112
|
|
|
86
113
|
1. **`parsePmxFolderInput(fileList)`** — returns a tagged result (`empty` | `not_directory` | `no_pmx` | `single` | `multiple`). For `single`, you already have `files` and `pmxFile`. For `multiple`, show a picker (dropdown) of `pmxRelativePaths`, then resolve with **`pmxFileAtRelativePath(files, path)`**.
|
|
87
114
|
2. **`engine.loadModel(name, { files, pmxFile })`** — `pmxFile` selects which `.pmx` when the folder contains several.
|
|
88
115
|
|
|
89
116
|
```javascript
|
|
90
|
-
import {
|
|
117
|
+
import {
|
|
118
|
+
Engine,
|
|
119
|
+
parsePmxFolderInput,
|
|
120
|
+
pmxFileAtRelativePath,
|
|
121
|
+
} from "reze-engine";
|
|
91
122
|
|
|
92
123
|
// In <input onChange>:
|
|
93
124
|
const picked = parsePmxFolderInput(e.target.files);
|
|
@@ -103,7 +134,10 @@ if (picked.status === "single") {
|
|
|
103
134
|
if (picked.status === "multiple") {
|
|
104
135
|
// Let the user choose `chosenPath` from picked.pmxRelativePaths, then:
|
|
105
136
|
const pmxFile = pmxFileAtRelativePath(picked.files, chosenPath);
|
|
106
|
-
const model = await engine.loadModel("myModel", {
|
|
137
|
+
const model = await engine.loadModel("myModel", {
|
|
138
|
+
files: picked.files,
|
|
139
|
+
pmxFile,
|
|
140
|
+
});
|
|
107
141
|
}
|
|
108
142
|
```
|
|
109
143
|
|
|
@@ -165,8 +199,8 @@ Blender-style scene config — `world` = environment lighting, `sun` = the direc
|
|
|
165
199
|
```javascript
|
|
166
200
|
{
|
|
167
201
|
world: {
|
|
168
|
-
color: Vec3,
|
|
169
|
-
strength: number,
|
|
202
|
+
color: Vec3, // World > Surface > Color (linear scene-referred)
|
|
203
|
+
strength: number, // World > Surface > Strength
|
|
170
204
|
},
|
|
171
205
|
sun: {
|
|
172
206
|
color: Vec3, // Light > Color
|
|
@@ -185,7 +219,7 @@ Blender-style scene config — `world` = environment lighting, `sun` = the direc
|
|
|
185
219
|
}
|
|
186
220
|
```
|
|
187
221
|
|
|
188
|
-
The shadow map is cast from `sun.direction` — same vector the shader lights with — so
|
|
222
|
+
The shadow map is cast from `sun.direction` — same vector the shader lights with — so visible shading and cast shadows stay coupled.
|
|
189
223
|
|
|
190
224
|
`engine.setWorld({ color?, strength? })` and `engine.setSun({ color?, strength?, direction? })` update lighting at runtime; changing `sun.direction` refreshes the shadow VP on the next frame.
|
|
191
225
|
|
|
@@ -217,17 +251,17 @@ Every preset is built out of the same NPR primitives:
|
|
|
217
251
|
|
|
218
252
|
Each PMX material is dispatched to one of these shaders:
|
|
219
253
|
|
|
220
|
-
| Preset | Look
|
|
221
|
-
| -------------- |
|
|
222
|
-
| `face` | toon ramp + rim + warm subsurface bleed + Principled mix
|
|
223
|
-
| `hair` | layered hair toon + Fresnel rim + Principled spec mix
|
|
224
|
-
| `body` | toon ramp + AO modulation + rim + Principled mix
|
|
225
|
-
| `eye` | iris with emission boost (drives bloom)
|
|
226
|
-
| `stockings` | NPR-tinted Principled with sheen, alpha-hashed
|
|
254
|
+
| Preset | Look |
|
|
255
|
+
| -------------- | ------------------------------------------------------------------------------ |
|
|
256
|
+
| `face` | toon ramp + rim + warm subsurface bleed + Principled mix |
|
|
257
|
+
| `hair` | layered hair toon + Fresnel rim + Principled spec mix |
|
|
258
|
+
| `body` | toon ramp + AO modulation + rim + Principled mix |
|
|
259
|
+
| `eye` | iris with emission boost (drives bloom) |
|
|
260
|
+
| `stockings` | NPR-tinted Principled with sheen, alpha-hashed |
|
|
227
261
|
| `metal` | full-metallic Principled + reflection-coord Voronoi sparkle + NPR toon overlay |
|
|
228
|
-
| `cloth_smooth` | Principled cloth with sheen, smoother variant
|
|
229
|
-
| `cloth_rough` | rougher cloth variant
|
|
230
|
-
| `default` | plain Principled BSDF (unmapped fallback)
|
|
262
|
+
| `cloth_smooth` | Principled cloth with sheen, smoother variant |
|
|
263
|
+
| `cloth_rough` | rougher cloth variant |
|
|
264
|
+
| `default` | plain Principled BSDF (unmapped fallback) |
|
|
231
265
|
|
|
232
266
|
### Shadows, post, output
|
|
233
267
|
|
|
@@ -237,21 +271,7 @@ Each PMX material is dispatched to one of these shaders:
|
|
|
237
271
|
- Filmic tone mapping (LUT sampled from the same view-transform curve used by "Filmic / Medium High Contrast"), exposure baked in
|
|
238
272
|
- Screen-space outline pass (inverted-hull) on opaque and transparent materials
|
|
239
273
|
|
|
240
|
-
Assign presets per-model
|
|
241
|
-
|
|
242
|
-
```javascript
|
|
243
|
-
engine.setMaterialPresets("hero", {
|
|
244
|
-
face: ["顔", "白目", "口の中"],
|
|
245
|
-
hair: ["髪", "前髪"],
|
|
246
|
-
body: ["肌"],
|
|
247
|
-
eye: ["瞳"],
|
|
248
|
-
stockings: ["袜子"],
|
|
249
|
-
cloth_smooth: ["制服", "スカート"],
|
|
250
|
-
metal: ["ボタン"],
|
|
251
|
-
});
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
Material names not listed fall through to the `default` Principled BSDF.
|
|
274
|
+
Assign presets per-model with `engine.setMaterialPresets(name, map)` (see the [Usage](#usage) example). Material names not listed fall through to the `default` Principled BSDF.
|
|
255
275
|
|
|
256
276
|
### Alpha-hashed transparency
|
|
257
277
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bezier interpolation for VMD animations
|
|
3
|
+
* Based on the reference implementation from babylon-mmd
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Bezier interpolation function
|
|
7
|
+
* @param x1 First control point X (0-127, normalized to 0-1)
|
|
8
|
+
* @param x2 Second control point X (0-127, normalized to 0-1)
|
|
9
|
+
* @param y1 First control point Y (0-127, normalized to 0-1)
|
|
10
|
+
* @param y2 Second control point Y (0-127, normalized to 0-1)
|
|
11
|
+
* @param t Interpolation parameter (0-1)
|
|
12
|
+
* @returns Interpolated value (0-1)
|
|
13
|
+
*/
|
|
14
|
+
export declare function bezierInterpolate(x1: number, x2: number, y1: number, y2: number, t: number): number;
|
|
15
|
+
//# sourceMappingURL=bezier-interpolate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bezier-interpolate.d.ts","sourceRoot":"","sources":["../src/bezier-interpolate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgCnG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bezier interpolation for VMD animations
|
|
3
|
+
* Based on the reference implementation from babylon-mmd
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Bezier interpolation function
|
|
7
|
+
* @param x1 First control point X (0-127, normalized to 0-1)
|
|
8
|
+
* @param x2 Second control point X (0-127, normalized to 0-1)
|
|
9
|
+
* @param y1 First control point Y (0-127, normalized to 0-1)
|
|
10
|
+
* @param y2 Second control point Y (0-127, normalized to 0-1)
|
|
11
|
+
* @param t Interpolation parameter (0-1)
|
|
12
|
+
* @returns Interpolated value (0-1)
|
|
13
|
+
*/
|
|
14
|
+
export function bezierInterpolate(x1, x2, y1, y2, t) {
|
|
15
|
+
// Clamp t to [0, 1]
|
|
16
|
+
t = Math.max(0, Math.min(1, t));
|
|
17
|
+
// Binary search for the t value that gives us the desired x
|
|
18
|
+
// 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
|
|
19
|
+
let start = 0;
|
|
20
|
+
let end = 1;
|
|
21
|
+
let mid = 0.5;
|
|
22
|
+
// Iterate until we find the t value that gives us the desired x
|
|
23
|
+
for (let i = 0; i < 15; i++) {
|
|
24
|
+
// Evaluate Bezier curve at mid point
|
|
25
|
+
const x = 3 * (1 - mid) * (1 - mid) * mid * x1 + 3 * (1 - mid) * mid * mid * x2 + mid * mid * mid;
|
|
26
|
+
if (Math.abs(x - t) < 0.0001) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (x < t) {
|
|
30
|
+
start = mid;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
end = mid;
|
|
34
|
+
}
|
|
35
|
+
mid = (start + end) / 2;
|
|
36
|
+
}
|
|
37
|
+
// Now evaluate the y value at this t
|
|
38
|
+
const y = 3 * (1 - mid) * (1 - mid) * mid * y1 + 3 * (1 - mid) * mid * mid * y2 + mid * mid * mid;
|
|
39
|
+
return y;
|
|
40
|
+
}
|
package/dist/engine.d.ts
CHANGED
|
@@ -113,6 +113,7 @@ export declare class Engine {
|
|
|
113
113
|
private metalPipeline;
|
|
114
114
|
private bodyPipeline;
|
|
115
115
|
private eyePipeline;
|
|
116
|
+
private hairOverEyesPipeline;
|
|
116
117
|
private stockingsPipeline;
|
|
117
118
|
private groundShadowPipeline;
|
|
118
119
|
private groundShadowBindGroupLayout;
|
|
@@ -128,6 +129,9 @@ export declare class Engine {
|
|
|
128
129
|
private hdrResolveTexture;
|
|
129
130
|
private static readonly MULTISAMPLE_COUNT;
|
|
130
131
|
private static readonly HDR_FORMAT;
|
|
132
|
+
/** Stencil value stamped by eye draws so hair can stencil-test against it and
|
|
133
|
+
* alpha-blend a second pass over eye silhouette pixels (see-through-hair effect). */
|
|
134
|
+
private static readonly STENCIL_EYE_VALUE;
|
|
131
135
|
/** Single-channel mask written alongside HDR color — 1 = model geometry (contributes
|
|
132
136
|
* to bloom), 0 = ground (never blooms). Sampled by the bloom blit pass to gate the
|
|
133
137
|
* prefilter so ground brightness can't halo the scene. */
|
|
@@ -345,6 +349,13 @@ export declare class Engine {
|
|
|
345
349
|
* pipelines is self-contained (no cross-batch dependencies).
|
|
346
350
|
*/
|
|
347
351
|
private renderOneModel;
|
|
352
|
+
/**
|
|
353
|
+
* Second hair pass for the see-through-hair effect. Re-draws every hair opaque
|
|
354
|
+
* draw using `hairOverEyesPipeline` — which stencil-matches `EYE_VALUE` and runs
|
|
355
|
+
* the hair shader with `IS_OVER_EYES=true` so alpha is halved. depthWriteEnabled
|
|
356
|
+
* is off, so the eye's depth stays authoritative for anything drawn after.
|
|
357
|
+
*/
|
|
358
|
+
private drawHairOverEyes;
|
|
348
359
|
private updateCameraUniforms;
|
|
349
360
|
private updateSkinMatrices;
|
|
350
361
|
private updateStats;
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dist/engine.js
CHANGED
|
@@ -554,6 +554,9 @@ export class Engine {
|
|
|
554
554
|
depthCompare: "less-equal",
|
|
555
555
|
},
|
|
556
556
|
});
|
|
557
|
+
// Hair opaque: stencil != EYE_VALUE so fragments on top of eyes are skipped entirely —
|
|
558
|
+
// depth and color stay as the eye wrote them; the follow-up hairOverEyesPipeline then
|
|
559
|
+
// draws those skipped fragments alpha-blended so the eye reads through the hair.
|
|
557
560
|
this.hairPipeline = this.createRenderPipeline({
|
|
558
561
|
label: "hair NPR pipeline",
|
|
559
562
|
layout: mainPipelineLayout,
|
|
@@ -565,8 +568,37 @@ export class Engine {
|
|
|
565
568
|
format: "depth24plus-stencil8",
|
|
566
569
|
depthWriteEnabled: true,
|
|
567
570
|
depthCompare: "less-equal",
|
|
571
|
+
stencilFront: { compare: "not-equal", failOp: "keep", depthFailOp: "keep", passOp: "keep" },
|
|
572
|
+
stencilBack: { compare: "not-equal", failOp: "keep", depthFailOp: "keep", passOp: "keep" },
|
|
573
|
+
stencilReadMask: 0xff,
|
|
574
|
+
stencilWriteMask: 0,
|
|
568
575
|
},
|
|
569
576
|
});
|
|
577
|
+
// Hair-over-eyes: same shader with IS_OVER_EYES=true so alpha is halved at compile time.
|
|
578
|
+
// Only fragments where eye stencil == EYE_VALUE pass; depth test still culls fragments
|
|
579
|
+
// that are further from camera than the eye, so hair behind the eye never shows through.
|
|
580
|
+
// depthWriteEnabled=false keeps the eye's depth authoritative for everything drawn after.
|
|
581
|
+
this.hairOverEyesPipeline = this.device.createRenderPipeline({
|
|
582
|
+
label: "hair over eyes pipeline",
|
|
583
|
+
layout: mainPipelineLayout,
|
|
584
|
+
vertex: { module: hairShaderModule, buffers: fullVertexBuffers },
|
|
585
|
+
fragment: {
|
|
586
|
+
module: hairShaderModule,
|
|
587
|
+
constants: { IS_OVER_EYES: 1 },
|
|
588
|
+
targets: sceneTargets,
|
|
589
|
+
},
|
|
590
|
+
primitive: { cullMode: "none" },
|
|
591
|
+
depthStencil: {
|
|
592
|
+
format: "depth24plus-stencil8",
|
|
593
|
+
depthWriteEnabled: false,
|
|
594
|
+
depthCompare: "less-equal",
|
|
595
|
+
stencilFront: { compare: "equal", failOp: "keep", depthFailOp: "keep", passOp: "keep" },
|
|
596
|
+
stencilBack: { compare: "equal", failOp: "keep", depthFailOp: "keep", passOp: "keep" },
|
|
597
|
+
stencilReadMask: 0xff,
|
|
598
|
+
stencilWriteMask: 0,
|
|
599
|
+
},
|
|
600
|
+
multisample: { count: Engine.MULTISAMPLE_COUNT },
|
|
601
|
+
});
|
|
570
602
|
this.clothSmoothPipeline = this.createRenderPipeline({
|
|
571
603
|
label: "cloth smooth NPR pipeline",
|
|
572
604
|
layout: mainPipelineLayout,
|
|
@@ -619,17 +651,30 @@ export class Engine {
|
|
|
619
651
|
depthCompare: "less-equal",
|
|
620
652
|
},
|
|
621
653
|
});
|
|
654
|
+
// Eye: stamps stencil = EYE_VALUE on every fragment it writes. Later hair passes read
|
|
655
|
+
// this stamp to split into "draw normally (not over eye)" vs "draw alpha-blended".
|
|
656
|
+
// cullMode="front" + small negative depthBias is the MMD post-alpha-eye trick: only the
|
|
657
|
+
// back half of the eye sphere renders, it passes depth against the face (via bias) when
|
|
658
|
+
// viewed from the front, and it gets culled when viewed from behind — so eye fragments
|
|
659
|
+
// can't leak through the back of the head without needing a per-model skull occluder.
|
|
622
660
|
this.eyePipeline = this.createRenderPipeline({
|
|
623
661
|
label: "eye pipeline",
|
|
624
662
|
layout: mainPipelineLayout,
|
|
625
663
|
shaderModule: eyeShaderModule,
|
|
626
664
|
vertexBuffers: fullVertexBuffers,
|
|
627
665
|
fragmentTargets: sceneTargets,
|
|
628
|
-
cullMode: "
|
|
666
|
+
cullMode: "front",
|
|
629
667
|
depthStencil: {
|
|
630
668
|
format: "depth24plus-stencil8",
|
|
631
669
|
depthWriteEnabled: true,
|
|
632
670
|
depthCompare: "less-equal",
|
|
671
|
+
depthBias: -0.00005,
|
|
672
|
+
depthBiasSlopeScale: 0.0,
|
|
673
|
+
depthBiasClamp: 0.0,
|
|
674
|
+
stencilFront: { compare: "always", failOp: "keep", depthFailOp: "keep", passOp: "replace" },
|
|
675
|
+
stencilBack: { compare: "always", failOp: "keep", depthFailOp: "keep", passOp: "replace" },
|
|
676
|
+
stencilReadMask: 0xff,
|
|
677
|
+
stencilWriteMask: 0xff,
|
|
633
678
|
},
|
|
634
679
|
});
|
|
635
680
|
this.stockingsPipeline = this.createRenderPipeline({
|
|
@@ -769,6 +814,13 @@ export class Engine {
|
|
|
769
814
|
// Don’t write outline into depth buffer — stops z-fighting / black cracks vs body (MMD-style; body depth stays authoritative)
|
|
770
815
|
depthWriteEnabled: false,
|
|
771
816
|
depthCompare: "less-equal",
|
|
817
|
+
// Skip fragments where the eye stamped stencil=EYE_VALUE. Those pixels are owned by
|
|
818
|
+
// the see-through-hair blend (hair-over-eyes), so letting the outline's near-black
|
|
819
|
+
// edge color overwrite them would re-introduce the dark almond we just killed.
|
|
820
|
+
stencilFront: { compare: "not-equal", failOp: "keep", depthFailOp: "keep", passOp: "keep" },
|
|
821
|
+
stencilBack: { compare: "not-equal", failOp: "keep", depthFailOp: "keep", passOp: "keep" },
|
|
822
|
+
stencilReadMask: 0xff,
|
|
823
|
+
stencilWriteMask: 0,
|
|
772
824
|
},
|
|
773
825
|
});
|
|
774
826
|
// ─── Bloom (EEVEE 3.6 pyramid): blit(Karis prefilter) → 13-tap downsamples → 9-tap tent upsamples ───
|
|
@@ -1785,6 +1837,26 @@ export class Engine {
|
|
|
1785
1837
|
}
|
|
1786
1838
|
currentIndexOffset += indexCount;
|
|
1787
1839
|
}
|
|
1840
|
+
// Sort so the opaque bucket is emitted in the order the stencil-based
|
|
1841
|
+
// see-through-hair effect requires: {non-hair, non-eye} → {eye} → {hair}.
|
|
1842
|
+
// Eye writes stencil=EYE_VALUE; hair's pipeline stencil-tests "not equal" so
|
|
1843
|
+
// it skips eye pixels; a follow-up hairOverEyes pass (see renderOneModel)
|
|
1844
|
+
// re-fills those skipped pixels alpha-blended. Array.sort is stable in
|
|
1845
|
+
// ES2019+, so within a bucket the PMX material order is preserved.
|
|
1846
|
+
const typeOrder = {
|
|
1847
|
+
opaque: 0,
|
|
1848
|
+
"opaque-outline": 1,
|
|
1849
|
+
transparent: 2,
|
|
1850
|
+
"transparent-outline": 3,
|
|
1851
|
+
ground: 4,
|
|
1852
|
+
};
|
|
1853
|
+
const presetRank = (p) => (p === "hair" ? 2 : p === "eye" ? 1 : 0);
|
|
1854
|
+
inst.drawCalls.sort((a, b) => {
|
|
1855
|
+
const ta = typeOrder[a.type] - typeOrder[b.type];
|
|
1856
|
+
if (ta !== 0)
|
|
1857
|
+
return ta;
|
|
1858
|
+
return presetRank(a.preset) - presetRank(b.preset);
|
|
1859
|
+
});
|
|
1788
1860
|
for (const d of inst.drawCalls) {
|
|
1789
1861
|
if (d.type === "opaque")
|
|
1790
1862
|
inst.shadowDrawCalls.push(d);
|
|
@@ -2176,11 +2248,36 @@ export class Engine {
|
|
|
2176
2248
|
pass.setVertexBuffer(1, inst.jointsBuffer);
|
|
2177
2249
|
pass.setVertexBuffer(2, inst.weightsBuffer);
|
|
2178
2250
|
pass.setIndexBuffer(inst.indexBuffer, "uint32");
|
|
2251
|
+
// Single stencil-reference set covers eye (write), hair (read not-equal),
|
|
2252
|
+
// and hairOverEyes (read equal). Non-stencil pipelines ignore the value.
|
|
2253
|
+
pass.setStencilReference(Engine.STENCIL_EYE_VALUE);
|
|
2179
2254
|
this.drawMaterials(pass, inst, "opaque");
|
|
2180
2255
|
this.drawOutlines(pass, inst, "opaque-outline");
|
|
2256
|
+
this.drawHairOverEyes(pass, inst);
|
|
2181
2257
|
this.drawMaterials(pass, inst, "transparent");
|
|
2182
2258
|
this.drawOutlines(pass, inst, "transparent-outline");
|
|
2183
2259
|
}
|
|
2260
|
+
/**
|
|
2261
|
+
* Second hair pass for the see-through-hair effect. Re-draws every hair opaque
|
|
2262
|
+
* draw using `hairOverEyesPipeline` — which stencil-matches `EYE_VALUE` and runs
|
|
2263
|
+
* the hair shader with `IS_OVER_EYES=true` so alpha is halved. depthWriteEnabled
|
|
2264
|
+
* is off, so the eye's depth stays authoritative for anything drawn after.
|
|
2265
|
+
*/
|
|
2266
|
+
drawHairOverEyes(pass, inst) {
|
|
2267
|
+
let bound = false;
|
|
2268
|
+
for (const draw of inst.drawCalls) {
|
|
2269
|
+
if (draw.type !== "opaque" || draw.preset !== "hair" || !this.shouldRenderDrawCall(inst, draw))
|
|
2270
|
+
continue;
|
|
2271
|
+
if (!bound) {
|
|
2272
|
+
pass.setPipeline(this.hairOverEyesPipeline);
|
|
2273
|
+
pass.setBindGroup(0, this.perFrameBindGroup);
|
|
2274
|
+
pass.setBindGroup(1, inst.mainPerInstanceBindGroup);
|
|
2275
|
+
bound = true;
|
|
2276
|
+
}
|
|
2277
|
+
pass.setBindGroup(2, draw.bindGroup);
|
|
2278
|
+
pass.drawIndexed(draw.count, 1, draw.firstIndex, 0, 0);
|
|
2279
|
+
}
|
|
2280
|
+
}
|
|
2184
2281
|
updateCameraUniforms() {
|
|
2185
2282
|
const viewMatrix = this.camera.getViewMatrix();
|
|
2186
2283
|
const projectionMatrix = this.camera.getProjectionMatrix();
|
|
@@ -2224,6 +2321,9 @@ export class Engine {
|
|
|
2224
2321
|
Engine.instance = null;
|
|
2225
2322
|
Engine.MULTISAMPLE_COUNT = 4;
|
|
2226
2323
|
Engine.HDR_FORMAT = "rgba16float";
|
|
2324
|
+
/** Stencil value stamped by eye draws so hair can stencil-test against it and
|
|
2325
|
+
* alpha-blend a second pass over eye silhouette pixels (see-through-hair effect). */
|
|
2326
|
+
Engine.STENCIL_EYE_VALUE = 1;
|
|
2227
2327
|
/** Single-channel mask written alongside HDR color — 1 = model geometry (contributes
|
|
2228
2328
|
* to bloom), 0 = ground (never blooms). Sampled by the bloom blit pass to gate the
|
|
2229
2329
|
* prefilter so ground brightness can't halo the scene. */
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Quat, Vec3 } from "reze-mmd";
|
|
2
|
+
export type EngineOptions = {
|
|
3
|
+
ambientColor?: Vec3;
|
|
4
|
+
bloomIntensity?: number;
|
|
5
|
+
rimLightIntensity?: number;
|
|
6
|
+
cameraDistance?: number;
|
|
7
|
+
cameraTarget?: Vec3;
|
|
8
|
+
};
|
|
9
|
+
export interface EngineStats {
|
|
10
|
+
fps: number;
|
|
11
|
+
frameTime: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class Engine {
|
|
14
|
+
private canvas;
|
|
15
|
+
private device;
|
|
16
|
+
private context;
|
|
17
|
+
private presentationFormat;
|
|
18
|
+
private camera;
|
|
19
|
+
private cameraUniformBuffer;
|
|
20
|
+
private cameraMatrixData;
|
|
21
|
+
private cameraDistance;
|
|
22
|
+
private cameraTarget;
|
|
23
|
+
private lightUniformBuffer;
|
|
24
|
+
private lightData;
|
|
25
|
+
private vertexBuffer;
|
|
26
|
+
private indexBuffer?;
|
|
27
|
+
private resizeObserver;
|
|
28
|
+
private depthTexture;
|
|
29
|
+
private modelPipeline;
|
|
30
|
+
private eyePipeline;
|
|
31
|
+
private hairPipelineOverEyes;
|
|
32
|
+
private hairPipelineOverNonEyes;
|
|
33
|
+
private hairDepthPipeline;
|
|
34
|
+
private outlinePipeline;
|
|
35
|
+
private hairOutlinePipeline;
|
|
36
|
+
private mainBindGroupLayout;
|
|
37
|
+
private outlineBindGroupLayout;
|
|
38
|
+
private jointsBuffer;
|
|
39
|
+
private weightsBuffer;
|
|
40
|
+
private skinMatrixBuffer?;
|
|
41
|
+
private multisampleTexture;
|
|
42
|
+
private readonly sampleCount;
|
|
43
|
+
private renderPassDescriptor;
|
|
44
|
+
private readonly STENCIL_EYE_VALUE;
|
|
45
|
+
private readonly BLOOM_DOWNSCALE_FACTOR;
|
|
46
|
+
private static readonly DEFAULT_BLOOM_THRESHOLD;
|
|
47
|
+
private static readonly DEFAULT_BLOOM_INTENSITY;
|
|
48
|
+
private static readonly DEFAULT_RIM_LIGHT_INTENSITY;
|
|
49
|
+
private static readonly DEFAULT_CAMERA_DISTANCE;
|
|
50
|
+
private static readonly DEFAULT_CAMERA_TARGET;
|
|
51
|
+
private static readonly TRANSPARENCY_EPSILON;
|
|
52
|
+
private static readonly STATS_FPS_UPDATE_INTERVAL_MS;
|
|
53
|
+
private static readonly STATS_FRAME_TIME_ROUNDING;
|
|
54
|
+
private ambientColor;
|
|
55
|
+
private sceneRenderTexture;
|
|
56
|
+
private sceneRenderTextureView;
|
|
57
|
+
private bloomExtractTexture;
|
|
58
|
+
private bloomBlurTexture1;
|
|
59
|
+
private bloomBlurTexture2;
|
|
60
|
+
private bloomExtractPipeline;
|
|
61
|
+
private bloomBlurPipeline;
|
|
62
|
+
private bloomComposePipeline;
|
|
63
|
+
private blurDirectionBuffer;
|
|
64
|
+
private bloomIntensityBuffer;
|
|
65
|
+
private bloomThresholdBuffer;
|
|
66
|
+
private linearSampler;
|
|
67
|
+
private bloomExtractBindGroup?;
|
|
68
|
+
private bloomBlurHBindGroup?;
|
|
69
|
+
private bloomBlurVBindGroup?;
|
|
70
|
+
private bloomComposeBindGroup?;
|
|
71
|
+
private bloomThreshold;
|
|
72
|
+
private bloomIntensity;
|
|
73
|
+
private rimLightIntensity;
|
|
74
|
+
private currentModel;
|
|
75
|
+
private modelDir;
|
|
76
|
+
private physics;
|
|
77
|
+
private materialSampler;
|
|
78
|
+
private textureCache;
|
|
79
|
+
private vertexBufferNeedsUpdate;
|
|
80
|
+
private drawCalls;
|
|
81
|
+
private lastFpsUpdate;
|
|
82
|
+
private framesSinceLastUpdate;
|
|
83
|
+
private lastFrameTime;
|
|
84
|
+
private frameTimeSum;
|
|
85
|
+
private frameTimeCount;
|
|
86
|
+
private stats;
|
|
87
|
+
private animationFrameId;
|
|
88
|
+
private renderLoopCallback;
|
|
89
|
+
private player;
|
|
90
|
+
private hasAnimation;
|
|
91
|
+
constructor(canvas: HTMLCanvasElement, options?: EngineOptions);
|
|
92
|
+
init(): Promise<void>;
|
|
93
|
+
private createRenderPipeline;
|
|
94
|
+
private createPipelines;
|
|
95
|
+
private createBloomPipelines;
|
|
96
|
+
private setupBloom;
|
|
97
|
+
private setupResize;
|
|
98
|
+
private handleResize;
|
|
99
|
+
private setupCamera;
|
|
100
|
+
private setupLighting;
|
|
101
|
+
private setAmbientColor;
|
|
102
|
+
loadAnimation(url: string): Promise<void>;
|
|
103
|
+
playAnimation(): void;
|
|
104
|
+
stopAnimation(): void;
|
|
105
|
+
pauseAnimation(): void;
|
|
106
|
+
seekAnimation(time: number): void;
|
|
107
|
+
getAnimationProgress(): import("./player").AnimationProgress;
|
|
108
|
+
/**
|
|
109
|
+
* Apply animation pose to model
|
|
110
|
+
*/
|
|
111
|
+
private applyPose;
|
|
112
|
+
/**
|
|
113
|
+
* Reset bones and physics to match a given pose
|
|
114
|
+
* @param pose The pose to apply
|
|
115
|
+
* @param resetBonesWithoutKeyframes If true, reset bones that don't have keyframes in the pose to identity
|
|
116
|
+
*/
|
|
117
|
+
private resetBonesAndPhysics;
|
|
118
|
+
getStats(): EngineStats;
|
|
119
|
+
runRenderLoop(callback?: () => void): void;
|
|
120
|
+
stopRenderLoop(): void;
|
|
121
|
+
dispose(): void;
|
|
122
|
+
loadModel(path: string): Promise<void>;
|
|
123
|
+
rotateBones(bones: string[], rotations: Quat[], durationMs?: number): void;
|
|
124
|
+
moveBones(bones: string[], relativeTranslations: Vec3[], durationMs?: number): void;
|
|
125
|
+
setMorphWeight(name: string, weight: number, durationMs?: number): void;
|
|
126
|
+
private updateVertexBuffer;
|
|
127
|
+
private setupModelBuffers;
|
|
128
|
+
private setupMaterials;
|
|
129
|
+
private createMaterialUniformBuffer;
|
|
130
|
+
private createUniformBuffer;
|
|
131
|
+
private createTextureFromPath;
|
|
132
|
+
private renderEyes;
|
|
133
|
+
private renderHair;
|
|
134
|
+
render(): void;
|
|
135
|
+
private applyBloom;
|
|
136
|
+
private updateCameraUniforms;
|
|
137
|
+
private updateRenderTarget;
|
|
138
|
+
private updateModelPose;
|
|
139
|
+
private computeSkinMatrices;
|
|
140
|
+
private drawOutlines;
|
|
141
|
+
private updateStats;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=engine_ts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine_ts.d.ts","sourceRoot":"","sources":["../src/engine_ts.ts"],"names":[],"mappings":"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"}
|