reze-engine 0.10.2 → 0.11.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 +72 -13
- package/dist/engine.d.ts +170 -34
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1080 -308
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/shaders/body.d.ts +2 -0
- package/dist/shaders/body.d.ts.map +1 -0
- package/dist/shaders/body.js +209 -0
- package/dist/shaders/classify.d.ts +4 -0
- package/dist/shaders/classify.d.ts.map +1 -0
- package/dist/shaders/classify.js +12 -0
- package/dist/shaders/cloth_rough.d.ts +2 -0
- package/dist/shaders/cloth_rough.d.ts.map +1 -0
- package/dist/shaders/cloth_rough.js +172 -0
- package/dist/shaders/cloth_smooth.d.ts +2 -0
- package/dist/shaders/cloth_smooth.d.ts.map +1 -0
- package/dist/shaders/cloth_smooth.js +171 -0
- package/dist/shaders/default.d.ts +2 -0
- package/dist/shaders/default.d.ts.map +1 -0
- package/dist/shaders/default.js +168 -0
- package/dist/shaders/dfg_lut.d.ts +4 -0
- package/dist/shaders/dfg_lut.d.ts.map +1 -0
- package/dist/shaders/dfg_lut.js +125 -0
- package/dist/shaders/eye.d.ts +2 -0
- package/dist/shaders/eye.d.ts.map +1 -0
- package/dist/shaders/eye.js +142 -0
- package/dist/shaders/face.d.ts +2 -0
- package/dist/shaders/face.d.ts.map +1 -0
- package/dist/shaders/face.js +211 -0
- package/dist/shaders/hair.d.ts +2 -0
- package/dist/shaders/hair.d.ts.map +1 -0
- package/dist/shaders/hair.js +186 -0
- package/dist/shaders/ltc_mag_lut.d.ts +3 -0
- package/dist/shaders/ltc_mag_lut.d.ts.map +1 -0
- package/dist/shaders/ltc_mag_lut.js +1033 -0
- package/dist/shaders/metal.d.ts +2 -0
- package/dist/shaders/metal.d.ts.map +1 -0
- package/dist/shaders/metal.js +171 -0
- package/dist/shaders/nodes.d.ts +2 -0
- package/dist/shaders/nodes.d.ts.map +1 -0
- package/dist/shaders/nodes.js +423 -0
- package/dist/shaders/stockings.d.ts +2 -0
- package/dist/shaders/stockings.d.ts.map +1 -0
- package/dist/shaders/stockings.js +229 -0
- package/package.json +1 -1
- package/src/engine.ts +1281 -376
- package/src/index.ts +12 -2
- package/src/shaders/body.ts +211 -0
- package/src/shaders/classify.ts +25 -0
- package/src/shaders/cloth_rough.ts +174 -0
- package/src/shaders/cloth_smooth.ts +173 -0
- package/src/shaders/default.ts +169 -0
- package/src/shaders/dfg_lut.ts +127 -0
- package/src/shaders/eye.ts +143 -0
- package/src/shaders/face.ts +213 -0
- package/src/shaders/hair.ts +188 -0
- package/src/shaders/ltc_mag_lut.ts +1035 -0
- package/src/shaders/metal.ts +173 -0
- package/src/shaders/nodes.ts +424 -0
- package/src/shaders/stockings.ts +231 -0
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ npm install reze-engine
|
|
|
12
12
|
|
|
13
13
|
## Features
|
|
14
14
|
|
|
15
|
-
-
|
|
15
|
+
- Blender 3.6 EEVEE rendering port — Principled BSDF with multi-scatter + LTC energy compensation, NPR material presets (face / hair / body / eye / stockings / metal / cloth / default), Filmic tone mapping, alpha-hashed transparency, outlines, MSAA 4x
|
|
16
16
|
- VMD animation with IK solver and Bullet physics
|
|
17
17
|
- Orbit camera with bone-follow mode
|
|
18
18
|
- GPU picking (double-click/tap)
|
|
@@ -25,9 +25,9 @@ npm install reze-engine
|
|
|
25
25
|
import { Engine, Vec3 } from "reze-engine";
|
|
26
26
|
|
|
27
27
|
const engine = new Engine(canvas, {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
world: { color: new Vec3(0.4, 0.49, 0.65), strength: 1.0 },
|
|
29
|
+
sun: { color: new Vec3(1, 1, 1), strength: 2.0, direction: new Vec3(0, -0.5, 1) },
|
|
30
|
+
camera: { distance: 31.5, target: new Vec3(0, 11.5, 0) }, // MMD units (1 unit = 8 cm)
|
|
31
31
|
});
|
|
32
32
|
await engine.init();
|
|
33
33
|
|
|
@@ -55,6 +55,7 @@ engine.getModel(name)
|
|
|
55
55
|
engine.getModelNames()
|
|
56
56
|
engine.removeModel(name)
|
|
57
57
|
|
|
58
|
+
engine.setMaterialPresets(name, presetMap) // assign NPR presets by material name
|
|
58
59
|
engine.setMaterialVisible(name, material, visible)
|
|
59
60
|
engine.toggleMaterialVisible(name, material)
|
|
60
61
|
engine.isMaterialVisible(name, material)
|
|
@@ -159,27 +160,85 @@ Call `model.play(name, options?)` to start or switch motion. `loop: true` makes
|
|
|
159
160
|
|
|
160
161
|
### Engine Options
|
|
161
162
|
|
|
163
|
+
Blender-style scene config — `world` = environment lighting, `sun` = the directional lamp, `camera` = view framing.
|
|
164
|
+
|
|
162
165
|
```javascript
|
|
163
166
|
{
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
167
|
+
world: {
|
|
168
|
+
color: Vec3, // World > Surface > Color (linear scene-referred)
|
|
169
|
+
strength: number, // World > Surface > Strength
|
|
170
|
+
},
|
|
171
|
+
sun: {
|
|
172
|
+
color: Vec3, // Light > Color
|
|
173
|
+
strength: number, // Light > Strength (Blender units)
|
|
174
|
+
direction: Vec3, // direction light travels (points from sun into the scene)
|
|
175
|
+
},
|
|
176
|
+
camera: {
|
|
177
|
+
distance: number,
|
|
178
|
+
target: Vec3,
|
|
179
|
+
fov: number, // radians
|
|
180
|
+
},
|
|
171
181
|
onRaycast: (modelName, material, screenX, screenY) => void,
|
|
172
|
-
shadowLightDirection: Vec3,
|
|
173
182
|
physicsOptions: {
|
|
174
183
|
constraintSolverKeywords: string[],
|
|
175
184
|
},
|
|
176
185
|
}
|
|
177
186
|
```
|
|
178
187
|
|
|
179
|
-
|
|
188
|
+
The shadow map is cast from `sun.direction` — same vector the shader lights with — so the visible shading and cast shadows stay coupled.
|
|
189
|
+
|
|
190
|
+
`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.
|
|
180
191
|
|
|
181
192
|
`constraintSolverKeywords` — joints whose name contains any keyword use the Bullet 2.75 constraint solver; all others keep the stable Ammo 2.82+ default. See [babylon-mmd: Fix Constraint Behavior](https://noname0310.github.io/babylon-mmd/docs/reference/runtime/apply-physics-to-mmd-models/#fix-constraint-behavior) for details.
|
|
182
193
|
|
|
194
|
+
## Rendering
|
|
195
|
+
|
|
196
|
+
The renderer follows Blender 3.6 EEVEE — shading, tone mapping, and transparency decisions match the reference CPU/GPU paths so authors tuning a model in Blender see the same result on the web.
|
|
197
|
+
|
|
198
|
+
### Principled BSDF port
|
|
199
|
+
|
|
200
|
+
- GGX specular with Schlick Fresnel and Smith G1
|
|
201
|
+
- **Multi-scatter compensation** via Fdez-Agüera 2019 (`F_brdf_multi_scatter`) — the closed-form version used in EEVEE's `bsdf_common_lib.glsl`
|
|
202
|
+
- **DFG split-sum LUT** baked at `engine.init()` — port of Blender's `bsdf_lut_frag.glsl`. Used for indirect specular and as the denominator of the direct-spec energy compensation
|
|
203
|
+
- **LTC direct-specular energy compensation** (`ltc_brdf_scale = (ltc.x + ltc.y) / (dfg.x + dfg.y)`, per `closure_eval_glossy_lib.glsl:79-81`) — keeps direct and indirect spec in the same energy budget. The LTC magnitude LUT is uploaded from `eevee_lut.c` constants
|
|
204
|
+
- Sheen coarse approximation (`f³·0.077 + f·0.01 + 0.00026`) on cloth/stockings
|
|
205
|
+
|
|
206
|
+
### NPR material presets
|
|
207
|
+
|
|
208
|
+
Each PMX material is dispatched to one of the preset shaders, all ported from "仿深空之眼渲染预设v1.0" Blender node graphs:
|
|
209
|
+
|
|
210
|
+
| Preset | Based on Blender material |
|
|
211
|
+
| -------------- | ------------------------- |
|
|
212
|
+
| `face` | `M_Face` — toon ramp + rim + warm bleed + Principled mix |
|
|
213
|
+
| `hair` | `M_Hair` — anisotropic spec highlight + rim |
|
|
214
|
+
| `body` | `M_Body` — toon ramp + AO + rim + Principled mix |
|
|
215
|
+
| `eye` | `M_Eye` — iris mapping + highlight |
|
|
216
|
+
| `stockings` | `M_Stockings` — NPR mask × Principled with sheen, alpha-hashed |
|
|
217
|
+
| `metal` | `M_Metal` — anisotropic + environment rim |
|
|
218
|
+
| `cloth_smooth` | `M_Cloth_Smooth` — Principled cloth with sheen |
|
|
219
|
+
| `cloth_rough` | `M_Cloth_Rough` — rougher variant |
|
|
220
|
+
| `default` | Principled BSDF (unmapped fallback) |
|
|
221
|
+
|
|
222
|
+
Assign presets per-model:
|
|
223
|
+
|
|
224
|
+
```javascript
|
|
225
|
+
engine.setMaterialPresets("hero", {
|
|
226
|
+
face: ["顔", "白目", "口の中"],
|
|
227
|
+
hair: ["髪", "前髪"],
|
|
228
|
+
body: ["肌"],
|
|
229
|
+
eye: ["瞳"],
|
|
230
|
+
stockings: ["袜子"],
|
|
231
|
+
cloth_smooth: ["制服", "スカート"],
|
|
232
|
+
metal: ["ボタン"],
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Material names not listed fall through to the `default` Principled BSDF.
|
|
237
|
+
|
|
238
|
+
### Alpha-hashed transparency
|
|
239
|
+
|
|
240
|
+
`stockings` uses the Wyman & McGuire 2017 derivative-aware stochastic discard (port of EEVEE's `prepass_frag.glsl::hashed_alpha_threshold`) instead of alpha blend. Self-overlapping transparent meshes (stockings wrap the leg — front and back surfaces share screen pixels) can't be sorted per-fragment in one draw call, so blend produces "cracks". Hashed alpha keeps opaque-style depth writes, resolves under MSAA/TAA, and matches the fix the preset author documented.
|
|
241
|
+
|
|
183
242
|
## Projects Using This Engine
|
|
184
243
|
|
|
185
244
|
- **[Reze Studio](https://reze.studio)** - Web-native MMD animation editor
|
package/dist/engine.d.ts
CHANGED
|
@@ -2,37 +2,85 @@ import { Vec3 } from "./math";
|
|
|
2
2
|
import { Model } from "./model";
|
|
3
3
|
import { type PhysicsOptions } from "./physics";
|
|
4
4
|
import { type AssetReader } from "./asset-reader";
|
|
5
|
+
import { type MaterialPresetMap } from "./shaders/classify";
|
|
5
6
|
export type RaycastCallback = (modelName: string, material: string | null, screenX: number, screenY: number) => void;
|
|
6
7
|
/** Select a folder (webkitdirectory) and pass FileList or File[]; pmxFile picks which .pmx when several exist. */
|
|
7
8
|
export type LoadModelFromFilesOptions = {
|
|
8
9
|
files: FileList | File[];
|
|
9
10
|
pmxFile?: File;
|
|
10
11
|
};
|
|
12
|
+
export type WorldOptions = {
|
|
13
|
+
/** Linear scene-referred color of the World Background (Blender: World > Surface > Color). */
|
|
14
|
+
color?: Vec3;
|
|
15
|
+
/** Multiplier on world color (Blender: World > Surface > Strength). */
|
|
16
|
+
strength?: number;
|
|
17
|
+
};
|
|
18
|
+
export type SunOptions = {
|
|
19
|
+
/** Linear color of the sun lamp (Blender: Light > Color). */
|
|
20
|
+
color?: Vec3;
|
|
21
|
+
/** Lamp power in Blender units (Blender: Light > Strength). */
|
|
22
|
+
strength?: number;
|
|
23
|
+
/** Direction sunlight travels (points FROM sun TO scene, Blender: -light.rotation.Z). */
|
|
24
|
+
direction?: Vec3;
|
|
25
|
+
};
|
|
26
|
+
export type CameraOptions = {
|
|
27
|
+
/** Orbit distance from target. */
|
|
28
|
+
distance?: number;
|
|
29
|
+
/** World-space orbit center. */
|
|
30
|
+
target?: Vec3;
|
|
31
|
+
/** Vertical field of view in radians. */
|
|
32
|
+
fov?: number;
|
|
33
|
+
};
|
|
34
|
+
/** EEVEE Bloom panel (3D Viewport > Render > Bloom). Fields map 1:1 to Blender's UI. */
|
|
35
|
+
export type BloomOptions = {
|
|
36
|
+
enabled: boolean;
|
|
37
|
+
threshold: number;
|
|
38
|
+
knee: number;
|
|
39
|
+
radius: number;
|
|
40
|
+
color: Vec3;
|
|
41
|
+
intensity: number;
|
|
42
|
+
clamp: number;
|
|
43
|
+
};
|
|
44
|
+
export declare const DEFAULT_BLOOM_OPTIONS: BloomOptions;
|
|
45
|
+
/** Blender Color Management / View (rendering.txt: Filmic, exposure, gamma). `look` is reserved for future curve tweaks. */
|
|
46
|
+
export type ViewTransformOptions = {
|
|
47
|
+
/** Stops applied before Filmic: `linear *= 2^exposure` (Blender default often ~−0.3). */
|
|
48
|
+
exposure: number;
|
|
49
|
+
/** After Filmic, display gamma (`pow(rgb, 1/gamma)`). */
|
|
50
|
+
gamma: number;
|
|
51
|
+
look: "default" | "medium_high_contrast";
|
|
52
|
+
};
|
|
53
|
+
export declare const DEFAULT_VIEW_TRANSFORM: ViewTransformOptions;
|
|
11
54
|
export type EngineOptions = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
55
|
+
world?: WorldOptions;
|
|
56
|
+
sun?: SunOptions;
|
|
57
|
+
camera?: CameraOptions;
|
|
58
|
+
/** Initial EEVEE-style bloom; tune at runtime with `setBloomOptions`. */
|
|
59
|
+
bloom?: Partial<BloomOptions>;
|
|
60
|
+
/** View transform (exposure/gamma) applied in composite before/after Filmic. */
|
|
61
|
+
view?: Partial<ViewTransformOptions>;
|
|
19
62
|
onRaycast?: RaycastCallback;
|
|
20
63
|
physicsOptions?: PhysicsOptions;
|
|
21
|
-
shadowLightDirection?: Vec3;
|
|
22
64
|
};
|
|
23
65
|
export declare const DEFAULT_ENGINE_OPTIONS: {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
66
|
+
world: {
|
|
67
|
+
color: Vec3;
|
|
68
|
+
strength: number;
|
|
69
|
+
};
|
|
70
|
+
sun: {
|
|
71
|
+
color: Vec3;
|
|
72
|
+
strength: number;
|
|
73
|
+
direction: Vec3;
|
|
74
|
+
};
|
|
75
|
+
camera: {
|
|
76
|
+
distance: number;
|
|
77
|
+
target: Vec3;
|
|
78
|
+
fov: number;
|
|
79
|
+
};
|
|
31
80
|
onRaycast: undefined;
|
|
32
81
|
physicsOptions: {
|
|
33
82
|
constraintSolverKeywords: string[];
|
|
34
83
|
};
|
|
35
|
-
shadowLightDirection: Vec3;
|
|
36
84
|
};
|
|
37
85
|
export interface EngineStats {
|
|
38
86
|
fps: number;
|
|
@@ -48,15 +96,23 @@ export declare class Engine {
|
|
|
48
96
|
private camera;
|
|
49
97
|
private cameraUniformBuffer;
|
|
50
98
|
private cameraMatrixData;
|
|
51
|
-
private
|
|
52
|
-
private
|
|
53
|
-
private
|
|
99
|
+
private world;
|
|
100
|
+
private sun;
|
|
101
|
+
private cameraConfig;
|
|
54
102
|
private lightUniformBuffer;
|
|
55
103
|
private lightData;
|
|
56
104
|
private lightCount;
|
|
57
105
|
private resizeObserver;
|
|
58
106
|
private depthTexture;
|
|
59
107
|
private modelPipeline;
|
|
108
|
+
private facePipeline;
|
|
109
|
+
private hairPipeline;
|
|
110
|
+
private clothSmoothPipeline;
|
|
111
|
+
private clothRoughPipeline;
|
|
112
|
+
private metalPipeline;
|
|
113
|
+
private bodyPipeline;
|
|
114
|
+
private eyePipeline;
|
|
115
|
+
private stockingsPipeline;
|
|
60
116
|
private groundShadowPipeline;
|
|
61
117
|
private groundShadowBindGroupLayout;
|
|
62
118
|
private outlinePipeline;
|
|
@@ -68,17 +124,48 @@ export declare class Engine {
|
|
|
68
124
|
private perFrameBindGroup;
|
|
69
125
|
private outlinePerFrameBindGroup;
|
|
70
126
|
private multisampleTexture;
|
|
127
|
+
private hdrResolveTexture;
|
|
71
128
|
private static readonly MULTISAMPLE_COUNT;
|
|
129
|
+
private static readonly HDR_FORMAT;
|
|
72
130
|
private renderPassDescriptor;
|
|
73
|
-
private
|
|
74
|
-
private
|
|
75
|
-
private
|
|
76
|
-
private
|
|
131
|
+
private compositePassDescriptor;
|
|
132
|
+
private compositePipeline;
|
|
133
|
+
private compositeBindGroupLayout;
|
|
134
|
+
private compositeBindGroup;
|
|
135
|
+
private compositeUniformBuffer;
|
|
136
|
+
private readonly compositeUniformData;
|
|
137
|
+
private bloomSampler;
|
|
138
|
+
private bloomBlitUniformBuffer;
|
|
139
|
+
private bloomUpsampleUniformBuffer;
|
|
140
|
+
private readonly bloomBlitUniformData;
|
|
141
|
+
private readonly bloomUpsampleUniformData;
|
|
142
|
+
private bloomBlitPipeline;
|
|
143
|
+
private bloomDownsamplePipeline;
|
|
144
|
+
private bloomUpsamplePipeline;
|
|
145
|
+
private bloomBlitBindGroupLayout;
|
|
146
|
+
private bloomDownsampleBindGroupLayout;
|
|
147
|
+
private bloomUpsampleBindGroupLayout;
|
|
148
|
+
private bloomDownTexture;
|
|
149
|
+
private bloomUpTexture;
|
|
150
|
+
private bloomMipCount;
|
|
151
|
+
private bloomDownMipViews;
|
|
152
|
+
private bloomUpMipViews;
|
|
153
|
+
private bloomBlitBindGroup;
|
|
154
|
+
private bloomDownsampleBindGroups;
|
|
155
|
+
private bloomUpsampleBindGroups;
|
|
156
|
+
/** Single-attachment pass; colorAttachments[0].view set per bloom step. */
|
|
157
|
+
private bloomPassDescriptor;
|
|
158
|
+
private static readonly BLOOM_MAX_LEVELS;
|
|
77
159
|
private groundVertexBuffer?;
|
|
78
160
|
private groundIndexBuffer?;
|
|
79
161
|
private hasGround;
|
|
80
|
-
private shadowMapTexture
|
|
81
|
-
private shadowMapDepthView
|
|
162
|
+
private shadowMapTexture;
|
|
163
|
+
private shadowMapDepthView;
|
|
164
|
+
private dfgLutTexture;
|
|
165
|
+
private dfgLutView;
|
|
166
|
+
private ltcMagLutTexture;
|
|
167
|
+
private ltcMagLutView;
|
|
168
|
+
private static readonly SHADOW_MAP_SIZE;
|
|
82
169
|
private shadowDepthPipeline;
|
|
83
170
|
private shadowLightVPBuffer;
|
|
84
171
|
private shadowLightVPMatrix;
|
|
@@ -88,7 +175,6 @@ export declare class Engine {
|
|
|
88
175
|
private groundDrawCall;
|
|
89
176
|
private onRaycast?;
|
|
90
177
|
private physicsOptions;
|
|
91
|
-
private shadowLightDirection;
|
|
92
178
|
private lastTouchTime;
|
|
93
179
|
private readonly DOUBLE_TAP_DELAY;
|
|
94
180
|
private pickPipeline;
|
|
@@ -117,8 +203,23 @@ export declare class Engine {
|
|
|
117
203
|
private stats;
|
|
118
204
|
private animationFrameId;
|
|
119
205
|
private renderLoopCallback;
|
|
206
|
+
private bloomSettings;
|
|
207
|
+
private viewTransform;
|
|
120
208
|
constructor(canvas: HTMLCanvasElement, options?: EngineOptions);
|
|
209
|
+
/** Merge partial bloom with EEVEE defaults (same as constructor). */
|
|
210
|
+
static mergeBloomDefaults(partial?: Partial<BloomOptions>): BloomOptions;
|
|
211
|
+
static mergeViewTransformDefaults(partial?: Partial<ViewTransformOptions>): ViewTransformOptions;
|
|
212
|
+
/** Current bloom settings (Blender names; tint is a copied `Vec3`). */
|
|
213
|
+
getBloomOptions(): BloomOptions;
|
|
214
|
+
getViewTransformOptions(): ViewTransformOptions;
|
|
215
|
+
setViewTransformOptions(patch: Partial<ViewTransformOptions>): void;
|
|
216
|
+
private writeCompositeViewUniforms;
|
|
217
|
+
/** Patch bloom; GPU uniforms update immediately if `init()` has run. */
|
|
218
|
+
setBloomOptions(patch: Partial<BloomOptions>): void;
|
|
219
|
+
private writeBloomUniforms;
|
|
121
220
|
init(): Promise<void>;
|
|
221
|
+
private bakeDfgLut;
|
|
222
|
+
private uploadLtcMagLut;
|
|
122
223
|
private createRenderPipeline;
|
|
123
224
|
private createPipelines;
|
|
124
225
|
private setupResize;
|
|
@@ -137,15 +238,33 @@ export declare class Engine {
|
|
|
137
238
|
getCameraBeta(): number;
|
|
138
239
|
setCameraBeta(b: number): void;
|
|
139
240
|
private setupLighting;
|
|
140
|
-
|
|
141
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Write world ambient. For a uniform-radiance world, hemispherical irradiance
|
|
243
|
+
* is E = π·L and a Lambertian BRDF reflects (albedo/π)·E = albedo·L, so the
|
|
244
|
+
* shader's ambient uniform is just `world.color × world.strength` — no /π.
|
|
245
|
+
*/
|
|
246
|
+
private writeWorld;
|
|
247
|
+
/** Write sun lamp into light slot `index` (0..3). Layout mirrors the WGSL struct. */
|
|
248
|
+
private writeSun;
|
|
249
|
+
/** Update the world environment (Blender: World Background). Ambient recomputes immediately. */
|
|
250
|
+
setWorld(options: WorldOptions): void;
|
|
251
|
+
/** Update the sun lamp (Blender: Light > Sun). Direction change marks shadow VP dirty. */
|
|
252
|
+
setSun(options: SunOptions): void;
|
|
253
|
+
getWorld(): Readonly<{
|
|
254
|
+
color: Vec3;
|
|
255
|
+
strength: number;
|
|
256
|
+
}>;
|
|
257
|
+
getSun(): Readonly<{
|
|
258
|
+
color: Vec3;
|
|
259
|
+
strength: number;
|
|
260
|
+
direction: Vec3;
|
|
261
|
+
}>;
|
|
142
262
|
addGround(options?: {
|
|
143
263
|
width?: number;
|
|
144
264
|
height?: number;
|
|
145
265
|
diffuseColor?: Vec3;
|
|
146
266
|
fadeStart?: number;
|
|
147
267
|
fadeEnd?: number;
|
|
148
|
-
shadowMapSize?: number;
|
|
149
268
|
shadowStrength?: number;
|
|
150
269
|
gridSpacing?: number;
|
|
151
270
|
gridLineWidth?: number;
|
|
@@ -166,6 +285,7 @@ export declare class Engine {
|
|
|
166
285
|
getModelNames(): string[];
|
|
167
286
|
getModel(name: string): Model | null;
|
|
168
287
|
markVertexBufferDirty(modelNameOrModel?: string | Model): void;
|
|
288
|
+
setMaterialPresets(modelName: string, presets: MaterialPresetMap): void;
|
|
169
289
|
setMaterialVisible(modelName: string, materialName: string, visible: boolean): void;
|
|
170
290
|
toggleMaterialVisible(modelName: string, materialName: string): void;
|
|
171
291
|
isMaterialVisible(modelName: string, materialName: string): boolean;
|
|
@@ -193,15 +313,31 @@ export declare class Engine {
|
|
|
193
313
|
private renderPickPass;
|
|
194
314
|
private resolvePickResult;
|
|
195
315
|
render(): void;
|
|
196
|
-
private updateRenderTarget;
|
|
197
316
|
private drawInstanceShadow;
|
|
198
|
-
private
|
|
199
|
-
|
|
200
|
-
|
|
317
|
+
private pipelineForPreset;
|
|
318
|
+
/**
|
|
319
|
+
* Draw every material of a given type (`opaque` or `transparent`) using the main
|
|
320
|
+
* pipeline(s). Binds the per-frame and per-instance groups once at the top of the
|
|
321
|
+
* batch, then issues one draw per material. Early-outs if nothing to draw so we
|
|
322
|
+
* don't waste bindings when a model has no transparents, etc.
|
|
323
|
+
*/
|
|
324
|
+
private drawMaterials;
|
|
325
|
+
/**
|
|
326
|
+
* Draw every outline of a given type (`opaque-outline` or `transparent-outline`).
|
|
327
|
+
* Uses its own pipeline layout (group 0 = camera-only, group 2 = edge uniforms), so
|
|
328
|
+
* every batch binds its own groups from scratch — the next drawMaterials call will
|
|
329
|
+
* rebind group 0/1 correctly if needed.
|
|
330
|
+
*/
|
|
331
|
+
private drawOutlines;
|
|
332
|
+
/**
|
|
333
|
+
* Main-pass render sequence for one model instance:
|
|
334
|
+
* 1) opaque bodies → 2) opaque outlines → 3) transparents → 4) transparent outlines.
|
|
335
|
+
* Each batch binds the groups it needs, so switching between main and outline
|
|
336
|
+
* pipelines is self-contained (no cross-batch dependencies).
|
|
337
|
+
*/
|
|
201
338
|
private renderOneModel;
|
|
202
339
|
private updateCameraUniforms;
|
|
203
340
|
private updateSkinMatrices;
|
|
204
|
-
private drawOutlines;
|
|
205
341
|
private updateStats;
|
|
206
342
|
}
|
|
207
343
|
//# sourceMappingURL=engine.d.ts.map
|
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,EAAQ,IAAI,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|