reze-engine 0.36.0 → 0.37.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 +4 -3
- package/dist/camera.d.ts +17 -0
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +25 -0
- package/dist/engine.d.ts +94 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +250 -14
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/model.d.ts +81 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +192 -0
- package/dist/physics/autofit.d.ts +147 -0
- package/dist/physics/autofit.d.ts.map +1 -0
- package/dist/physics/autofit.js +501 -0
- package/dist/physics/contact.d.ts +12 -3
- package/dist/physics/contact.d.ts.map +1 -1
- package/dist/physics/contact.js +5 -2
- package/dist/physics/manifold.d.ts +32 -11
- package/dist/physics/manifold.d.ts.map +1 -1
- package/dist/physics/manifold.js +137 -57
- package/dist/physics/solver.d.ts +7 -1
- package/dist/physics/solver.d.ts.map +1 -1
- package/dist/physics/solver.js +536 -182
- package/dist/physics/world.d.ts +2 -0
- package/dist/physics/world.d.ts.map +1 -1
- package/dist/physics/world.js +16 -43
- package/dist/pmx-loader.d.ts.map +1 -1
- package/dist/pmx-loader.js +84 -44
- package/package.json +1 -1
- package/src/camera.ts +26 -0
- package/src/engine.ts +305 -18
- package/src/index.ts +11 -1
- package/src/model.ts +231 -1
- package/src/physics/contact.ts +17 -7
- package/src/physics/manifold.ts +151 -0
- package/src/physics/solver.ts +520 -184
- package/src/physics/world.ts +17 -43
- package/src/pmx-loader.ts +84 -44
package/dist/engine.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Camera } from "./camera";
|
|
2
2
|
import { Mat4, Quat, Vec3 } from "./math";
|
|
3
|
+
import { MATERIAL_MORPH_MULTIPLY } from "./model";
|
|
3
4
|
import { MORPH_COMPUTE_WGSL } from "./shaders/passes/morph";
|
|
4
5
|
import { decodeTga } from "./tga-loader";
|
|
5
6
|
import { VMDLoader } from "./vmd-loader";
|
|
@@ -2639,7 +2640,29 @@ export class Engine {
|
|
|
2639
2640
|
await this.addModel(model, pmxPath, name);
|
|
2640
2641
|
return model;
|
|
2641
2642
|
}
|
|
2642
|
-
|
|
2643
|
+
/** loadModel's folder/zip path for a stage. Shares the whole prelude — only
|
|
2644
|
+
* what the PMX becomes differs. */
|
|
2645
|
+
async loadStage(name, options) {
|
|
2646
|
+
const { model, pmxKey, reader } = await this.openPmxFromFiles(name, options);
|
|
2647
|
+
await this.addStage(model, pmxKey, { name, transform: options.transform, assetReader: reader });
|
|
2648
|
+
return model;
|
|
2649
|
+
}
|
|
2650
|
+
/** Read a PMX out of a picked folder / expanded zip. Shared by loadModel and
|
|
2651
|
+
* loadStage so the file-map and path handling exist in exactly one place. */
|
|
2652
|
+
async openPmxFromFiles(name, options) {
|
|
2653
|
+
const pmxFile = options.pmxFile ?? findFirstPmxFileInList(options.files);
|
|
2654
|
+
if (!pmxFile)
|
|
2655
|
+
throw new Error("No .pmx file found in the selected folder");
|
|
2656
|
+
const map = fileListToMap(options.files);
|
|
2657
|
+
// `||`, not `??`: flat-picked files carry webkitRelativePath === "" (see
|
|
2658
|
+
// fileListToMap) — `""` must fall through to the filename.
|
|
2659
|
+
const pmxKey = normalizeAssetPath(pmxFile.webkitRelativePath || pmxFile.name);
|
|
2660
|
+
const reader = createFileMapAssetReader(map);
|
|
2661
|
+
const model = await PmxLoader.loadFromReader(reader, pmxKey);
|
|
2662
|
+
model.setName(name);
|
|
2663
|
+
return { model, pmxKey, reader };
|
|
2664
|
+
}
|
|
2665
|
+
async addModel(model, pmxPath, name, assetReader, options) {
|
|
2643
2666
|
const requested = name ?? model.name;
|
|
2644
2667
|
let key = requested;
|
|
2645
2668
|
let n = 1;
|
|
@@ -2649,9 +2672,42 @@ export class Engine {
|
|
|
2649
2672
|
const reader = assetReader ?? createFetchAssetReader();
|
|
2650
2673
|
const basePath = deriveBasePathFromPmxPath(pmxPath);
|
|
2651
2674
|
model.setAssetContext(reader, basePath);
|
|
2652
|
-
await this.setupModelInstance(key, model, basePath, reader);
|
|
2675
|
+
await this.setupModelInstance(key, model, basePath, reader, options?.stage ?? false);
|
|
2653
2676
|
return key;
|
|
2654
2677
|
}
|
|
2678
|
+
/**
|
|
2679
|
+
* Add a PMX as the scene's environment rather than as a character.
|
|
2680
|
+
*
|
|
2681
|
+
* A stage is the same geometry and the same materials — style groups and
|
|
2682
|
+
* shader graphs work on it unchanged, which is the whole reason pure-PMX
|
|
2683
|
+
* stages are worth supporting — but it is not a performer:
|
|
2684
|
+
*
|
|
2685
|
+
* - no physics. A stage's rigidbodies are set dressing for MMD's solver and
|
|
2686
|
+
* cost a full simulation island for scenery that never moves.
|
|
2687
|
+
* - no IK. Nothing drives a stage's chains, and solving them every frame is
|
|
2688
|
+
* pure waste on what is usually the heaviest mesh in the scene.
|
|
2689
|
+
* - no per-frame pose work while it is idle: with no clip and no morph
|
|
2690
|
+
* change there is nothing to recompute, so update is skipped entirely.
|
|
2691
|
+
* - it owns the floor. See groundIsSuppressed — the built-in ground plane
|
|
2692
|
+
* and a stage's own floor both sit at y=0 and z-fight.
|
|
2693
|
+
*
|
|
2694
|
+
* Bone and material morphs still apply, because that is how a stage's doors,
|
|
2695
|
+
* lifts and colour switches are rigged.
|
|
2696
|
+
*/
|
|
2697
|
+
async addStage(model, pmxPath, options) {
|
|
2698
|
+
const key = await this.addModel(model, pmxPath, options?.name, options?.assetReader, { stage: true });
|
|
2699
|
+
if (options?.transform)
|
|
2700
|
+
this.setModelTransform(key, options.transform);
|
|
2701
|
+
return key;
|
|
2702
|
+
}
|
|
2703
|
+
/** True while a stage is in the scene, which is when the built-in ground plane
|
|
2704
|
+
* must not draw. */
|
|
2705
|
+
groundIsSuppressed() {
|
|
2706
|
+
for (const inst of this.modelInstances.values())
|
|
2707
|
+
if (inst.isStage)
|
|
2708
|
+
return true;
|
|
2709
|
+
return false;
|
|
2710
|
+
}
|
|
2655
2711
|
removeModel(name) {
|
|
2656
2712
|
const inst = this.modelInstances.get(name);
|
|
2657
2713
|
if (!inst)
|
|
@@ -2699,8 +2755,9 @@ export class Engine {
|
|
|
2699
2755
|
* character — its colliders won't scale; scale stages (which are typically physics-free).
|
|
2700
2756
|
*/
|
|
2701
2757
|
setModelTransform(name, transform) {
|
|
2702
|
-
const
|
|
2703
|
-
|
|
2758
|
+
const inst = this.modelInstances.get(name);
|
|
2759
|
+
const model = inst?.model;
|
|
2760
|
+
if (!inst || !model)
|
|
2704
2761
|
return;
|
|
2705
2762
|
if (transform.position)
|
|
2706
2763
|
model.setPosition(transform.position);
|
|
@@ -2710,6 +2767,11 @@ export class Engine {
|
|
|
2710
2767
|
model.setScale(transform.scale);
|
|
2711
2768
|
if (transform.visible !== undefined)
|
|
2712
2769
|
model.setVisible(transform.visible);
|
|
2770
|
+
// The root transform is baked into the skin matrices, so moving a model is a
|
|
2771
|
+
// reason to re-upload them even though no pose pass ran. A cast member gets
|
|
2772
|
+
// one every frame anyway; an idle stage would otherwise never see the change
|
|
2773
|
+
// — which is exactly the case this API exists to serve.
|
|
2774
|
+
inst.skinMatricesDirty = true;
|
|
2713
2775
|
}
|
|
2714
2776
|
/** Read a model's scene transform (for serialization into a scene descriptor). */
|
|
2715
2777
|
getModelTransform(name) {
|
|
@@ -2858,8 +2920,22 @@ export class Engine {
|
|
|
2858
2920
|
let physicsMs = 0;
|
|
2859
2921
|
this.forEachInstance((inst) => {
|
|
2860
2922
|
const tAnim = performance.now();
|
|
2861
|
-
|
|
2923
|
+
// A stage never solves IK — nothing drives its chains — and skips the pose
|
|
2924
|
+
// pass entirely while it is idle. Morph changes still come through, since
|
|
2925
|
+
// that is the one thing a stage's controls do move.
|
|
2926
|
+
const stageIdle = inst.isStage && inst.model.isIdle();
|
|
2927
|
+
let verticesChanged = false;
|
|
2928
|
+
if (!stageIdle) {
|
|
2929
|
+
verticesChanged = inst.model.update(deltaTime, inst.isStage ? false : this.ikEnabled);
|
|
2930
|
+
inst.skinMatricesDirty = true;
|
|
2931
|
+
}
|
|
2862
2932
|
animMs += performance.now() - tAnim;
|
|
2933
|
+
// Material morphs ride the same weight change as vertex morphs but land in
|
|
2934
|
+
// uniform buffers, so they consume their own flag — a model whose only
|
|
2935
|
+
// morphs are material morphs never enters the GPU vertex path below.
|
|
2936
|
+
if (inst.materialMorphTargets && inst.model.consumeAuxMorphDirty()) {
|
|
2937
|
+
this.applyMaterialMorphs(inst);
|
|
2938
|
+
}
|
|
2863
2939
|
if (inst.gpuMorph) {
|
|
2864
2940
|
// GPU path: on a weight change, upload effective weights (thresholding tiny values
|
|
2865
2941
|
// to 0 to match the CPU skip) and flag the compute dispatch for this frame.
|
|
@@ -2935,7 +3011,7 @@ export class Engine {
|
|
|
2935
3011
|
if (pass)
|
|
2936
3012
|
pass.end();
|
|
2937
3013
|
}
|
|
2938
|
-
async setupModelInstance(name, model, basePath, assetReader) {
|
|
3014
|
+
async setupModelInstance(name, model, basePath, assetReader, isStage = false) {
|
|
2939
3015
|
const vertices = model.getVertices();
|
|
2940
3016
|
const skinning = model.getSkinning();
|
|
2941
3017
|
const skeleton = model.getSkeleton();
|
|
@@ -2975,7 +3051,10 @@ export class Engine {
|
|
|
2975
3051
|
});
|
|
2976
3052
|
this.device.queue.writeBuffer(indexBuffer, 0, indices);
|
|
2977
3053
|
const rbs = model.getRigidbodies();
|
|
2978
|
-
|
|
3054
|
+
// A stage never simulates, so its bodies are never built — constructing the
|
|
3055
|
+
// solver for the heaviest mesh in the scene and dropping it afterwards was
|
|
3056
|
+
// both wasted work and an invariant maintained in the wrong place.
|
|
3057
|
+
const physics = !isStage && rbs.length > 0 ? new RezePhysics(rbs, model.getJoints()) : null;
|
|
2979
3058
|
// Adopt the scene's air, or a model added mid-session would fall under
|
|
2980
3059
|
// different gravity from the ones already on stage.
|
|
2981
3060
|
if (physics) {
|
|
@@ -3022,7 +3101,13 @@ export class Engine {
|
|
|
3022
3101
|
mainPerInstanceBindGroup,
|
|
3023
3102
|
pickPerInstanceBindGroup,
|
|
3024
3103
|
pickDrawCalls: [],
|
|
3104
|
+
isStage,
|
|
3105
|
+
// Seeded true: the bind pose has to reach the GPU once before any frame.
|
|
3106
|
+
skinMatricesDirty: true,
|
|
3025
3107
|
hiddenMaterials: new Set(),
|
|
3108
|
+
morphHiddenMaterials: new Set(),
|
|
3109
|
+
materialMorphTargets: null,
|
|
3110
|
+
materialMorphByIndex: null,
|
|
3026
3111
|
physics,
|
|
3027
3112
|
vertexBufferNeedsUpdate: false,
|
|
3028
3113
|
gpuMorph,
|
|
@@ -3247,9 +3332,28 @@ export class Engine {
|
|
|
3247
3332
|
const meshIndices = model.getIndices();
|
|
3248
3333
|
// 頭 bone index for the eye shader's rear-view gate (-1 when absent).
|
|
3249
3334
|
const headBoneIndex = model.getSkeleton().bones.findIndex((b) => b.name === "頭");
|
|
3335
|
+
// Materials a type-8 morph can reach. -1 in an offset means "all of them",
|
|
3336
|
+
// so the presence of ANY material morph makes every material a target.
|
|
3337
|
+
const morphedMaterials = new Set();
|
|
3338
|
+
for (const morph of model.getMorphing().morphs) {
|
|
3339
|
+
if (morph.type !== 8 || !morph.materialOffsets)
|
|
3340
|
+
continue;
|
|
3341
|
+
for (const off of morph.materialOffsets) {
|
|
3342
|
+
if (off.materialIndex < 0)
|
|
3343
|
+
for (let i = 0; i < materials.length; i++)
|
|
3344
|
+
morphedMaterials.add(i);
|
|
3345
|
+
else
|
|
3346
|
+
morphedMaterials.add(off.materialIndex);
|
|
3347
|
+
}
|
|
3348
|
+
}
|
|
3349
|
+
const morphTargets = [];
|
|
3250
3350
|
let currentIndexOffset = 0;
|
|
3251
3351
|
let materialId = 0;
|
|
3352
|
+
// The PMX index, which is what a material morph points at — distinct from
|
|
3353
|
+
// materialId, which only counts materials that produced a draw.
|
|
3354
|
+
let pmxMaterialIndex = -1;
|
|
3252
3355
|
for (const mat of materials) {
|
|
3356
|
+
pmxMaterialIndex++;
|
|
3253
3357
|
const indexCount = mat.vertexCount;
|
|
3254
3358
|
if (indexCount === 0)
|
|
3255
3359
|
continue;
|
|
@@ -3299,6 +3403,19 @@ export class Engine {
|
|
|
3299
3403
|
}
|
|
3300
3404
|
const materialUniformBuffer = this.createMaterialUniformBuffer(prefix + mat.name, mat, sphereMode, headBoneIndex);
|
|
3301
3405
|
inst.gpuBuffers.push(materialUniformBuffer);
|
|
3406
|
+
if (morphedMaterials.has(pmxMaterialIndex)) {
|
|
3407
|
+
const base = this.materialUniformData(mat, sphereMode, headBoneIndex);
|
|
3408
|
+
morphTargets.push({
|
|
3409
|
+
pmxIndex: pmxMaterialIndex,
|
|
3410
|
+
materialName: mat.name,
|
|
3411
|
+
buffer: materialUniformBuffer,
|
|
3412
|
+
base,
|
|
3413
|
+
work: new Float32Array(base.length),
|
|
3414
|
+
// Seeded from base: that is what createMaterialUniformBuffer already
|
|
3415
|
+
// uploaded, so an unmorphed material never writes a first time.
|
|
3416
|
+
last: Float32Array.from(base),
|
|
3417
|
+
});
|
|
3418
|
+
}
|
|
3302
3419
|
const textureView = diffuseTexture.createView();
|
|
3303
3420
|
const baseBindGroupEntries = [
|
|
3304
3421
|
{ binding: 0, resource: textureView },
|
|
@@ -3314,8 +3431,13 @@ export class Engine {
|
|
|
3314
3431
|
// its own hull where it is see-through instead of us skipping it here.
|
|
3315
3432
|
// Drawn interleaved right after this material's color draw (babylon-mmd's
|
|
3316
3433
|
// per-mesh afterRender outline stage) — see drawMaterials.
|
|
3434
|
+
// Stages get no outline hulls. The inverted hull is a SECOND full draw of
|
|
3435
|
+
// the material's geometry, and stage PMX routinely set the edge flag across
|
|
3436
|
+
// every material — on the heaviest mesh in the scene that doubles the
|
|
3437
|
+
// geometry submitted per frame to draw cartoon outlines around
|
|
3438
|
+
// architecture, which is not the look anyone is after.
|
|
3317
3439
|
let outline;
|
|
3318
|
-
if ((mat.edgeFlag & 0x10) !== 0 && mat.edgeSize > 0) {
|
|
3440
|
+
if (!inst.isStage && (mat.edgeFlag & 0x10) !== 0 && mat.edgeSize > 0) {
|
|
3319
3441
|
const materialUniformData = new Float32Array([
|
|
3320
3442
|
mat.edgeColor[0],
|
|
3321
3443
|
mat.edgeColor[1],
|
|
@@ -3371,10 +3493,17 @@ export class Engine {
|
|
|
3371
3493
|
// by render-class when groups are assigned. Array.sort is stable → PMX order preserved
|
|
3372
3494
|
// within a bucket.
|
|
3373
3495
|
this.sortDrawCalls(inst);
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3496
|
+
inst.materialMorphTargets = morphTargets.length > 0 ? morphTargets : null;
|
|
3497
|
+
inst.materialMorphByIndex = inst.materialMorphTargets
|
|
3498
|
+
? new Map(morphTargets.map((t) => [t.pmxIndex, t]))
|
|
3499
|
+
: null;
|
|
3500
|
+
// Seed from the current weights: a scene can open with a switch already on.
|
|
3501
|
+
if (inst.materialMorphTargets)
|
|
3502
|
+
this.applyMaterialMorphs(inst);
|
|
3503
|
+
}
|
|
3504
|
+
/** Matches the WGSL MaterialUniforms struct in common.ts — 64 bytes
|
|
3505
|
+
* (diffuse+alpha | ambient+shininess | specular+sphereMode | headIdx+pad). */
|
|
3506
|
+
materialUniformData(mat, sphereMode, headBoneIndex) {
|
|
3378
3507
|
const data = new Float32Array(16);
|
|
3379
3508
|
data[0] = mat.diffuse[0];
|
|
3380
3509
|
data[1] = mat.diffuse[1];
|
|
@@ -3389,7 +3518,102 @@ export class Engine {
|
|
|
3389
3518
|
data[10] = mat.specular[2];
|
|
3390
3519
|
data[11] = sphereMode;
|
|
3391
3520
|
data[12] = headBoneIndex;
|
|
3392
|
-
return
|
|
3521
|
+
return data;
|
|
3522
|
+
}
|
|
3523
|
+
createMaterialUniformBuffer(label, mat, sphereMode, headBoneIndex) {
|
|
3524
|
+
return this.createUniformBuffer(`material uniform: ${label}`, this.materialUniformData(mat, sphereMode, headBoneIndex));
|
|
3525
|
+
}
|
|
3526
|
+
/**
|
|
3527
|
+
* Re-derive every morph-targeted material's uniform block from base and push
|
|
3528
|
+
* the ones that moved.
|
|
3529
|
+
*
|
|
3530
|
+
* Blend maths follow MMD (and babylon-mmd's _applyMaterialMorph): multiply
|
|
3531
|
+
* lerps from base toward base*morph, add offsets from base. Weight 0 must
|
|
3532
|
+
* therefore land exactly on base, which is why this recomputes rather than
|
|
3533
|
+
* accumulates.
|
|
3534
|
+
*
|
|
3535
|
+
* A material driven to zero alpha is dropped from the draw instead of being
|
|
3536
|
+
* written through: the opaque/transparent bucket is decided at load from the
|
|
3537
|
+
* PMX alpha, so an opaque draw cannot become see-through by uniform alone.
|
|
3538
|
+
* Full-off is the switch stage artists actually ship (帽子消失 and friends);
|
|
3539
|
+
* a partial fade on a material that loaded opaque still will not blend.
|
|
3540
|
+
*/
|
|
3541
|
+
applyMaterialMorphs(inst) {
|
|
3542
|
+
const targets = inst.materialMorphTargets;
|
|
3543
|
+
if (!targets)
|
|
3544
|
+
return;
|
|
3545
|
+
const morphs = inst.model.getMorphing().morphs;
|
|
3546
|
+
const weights = inst.model.getEffectiveMorphWeights();
|
|
3547
|
+
for (const target of targets) {
|
|
3548
|
+
target.work.set(target.base);
|
|
3549
|
+
}
|
|
3550
|
+
for (let i = 0; i < morphs.length; i++) {
|
|
3551
|
+
const w = weights[i];
|
|
3552
|
+
if (w < 0.0001)
|
|
3553
|
+
continue;
|
|
3554
|
+
const morph = morphs[i];
|
|
3555
|
+
if (morph.type !== 8 || !morph.materialOffsets)
|
|
3556
|
+
continue;
|
|
3557
|
+
for (const off of morph.materialOffsets) {
|
|
3558
|
+
// A named material resolves in one lookup. Only the -1 wildcard walks
|
|
3559
|
+
// every target — and once any offset uses it, every material in the
|
|
3560
|
+
// model is a target, so scanning per offset would be quadratic on the
|
|
3561
|
+
// large stages this is meant to serve.
|
|
3562
|
+
const hit = off.materialIndex >= 0 ? inst.materialMorphByIndex?.get(off.materialIndex) : undefined;
|
|
3563
|
+
const affected = off.materialIndex >= 0 ? (hit ? [hit] : []) : targets;
|
|
3564
|
+
for (const target of affected) {
|
|
3565
|
+
const d = target.work;
|
|
3566
|
+
if (off.offsetType === MATERIAL_MORPH_MULTIPLY) {
|
|
3567
|
+
d[0] += (d[0] * off.diffuse[0] - d[0]) * w;
|
|
3568
|
+
d[1] += (d[1] * off.diffuse[1] - d[1]) * w;
|
|
3569
|
+
d[2] += (d[2] * off.diffuse[2] - d[2]) * w;
|
|
3570
|
+
d[3] += (d[3] * off.diffuse[3] - d[3]) * w;
|
|
3571
|
+
d[4] += (d[4] * off.ambient[0] - d[4]) * w;
|
|
3572
|
+
d[5] += (d[5] * off.ambient[1] - d[5]) * w;
|
|
3573
|
+
d[6] += (d[6] * off.ambient[2] - d[6]) * w;
|
|
3574
|
+
d[7] += (d[7] * off.shininess - d[7]) * w;
|
|
3575
|
+
d[8] += (d[8] * off.specular[0] - d[8]) * w;
|
|
3576
|
+
d[9] += (d[9] * off.specular[1] - d[9]) * w;
|
|
3577
|
+
d[10] += (d[10] * off.specular[2] - d[10]) * w;
|
|
3578
|
+
}
|
|
3579
|
+
else {
|
|
3580
|
+
d[0] += off.diffuse[0] * w;
|
|
3581
|
+
d[1] += off.diffuse[1] * w;
|
|
3582
|
+
d[2] += off.diffuse[2] * w;
|
|
3583
|
+
d[3] += off.diffuse[3] * w;
|
|
3584
|
+
d[4] += off.ambient[0] * w;
|
|
3585
|
+
d[5] += off.ambient[1] * w;
|
|
3586
|
+
d[6] += off.ambient[2] * w;
|
|
3587
|
+
d[7] += off.shininess * w;
|
|
3588
|
+
d[8] += off.specular[0] * w;
|
|
3589
|
+
d[9] += off.specular[1] * w;
|
|
3590
|
+
d[10] += off.specular[2] * w;
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3593
|
+
}
|
|
3594
|
+
}
|
|
3595
|
+
inst.morphHiddenMaterials.clear();
|
|
3596
|
+
for (const target of targets) {
|
|
3597
|
+
const d = target.work;
|
|
3598
|
+
// Alpha is the switch; clamp the rest so a stacked multiply cannot send a
|
|
3599
|
+
// colour negative and light the material from the inside.
|
|
3600
|
+
for (let k = 0; k < 11; k++)
|
|
3601
|
+
if (d[k] < 0)
|
|
3602
|
+
d[k] = 0;
|
|
3603
|
+
if (d[3] < 0.0001)
|
|
3604
|
+
inst.morphHiddenMaterials.add(target.materialName);
|
|
3605
|
+
let changed = false;
|
|
3606
|
+
for (let k = 0; k < 11; k++) {
|
|
3607
|
+
if (d[k] !== target.last[k]) {
|
|
3608
|
+
changed = true;
|
|
3609
|
+
break;
|
|
3610
|
+
}
|
|
3611
|
+
}
|
|
3612
|
+
if (!changed)
|
|
3613
|
+
continue;
|
|
3614
|
+
target.last.set(d);
|
|
3615
|
+
this.device.queue.writeBuffer(target.buffer, 0, d);
|
|
3616
|
+
}
|
|
3393
3617
|
}
|
|
3394
3618
|
createUniformBuffer(label, data) {
|
|
3395
3619
|
const buffer = this.device.createBuffer({
|
|
@@ -3401,7 +3625,7 @@ export class Engine {
|
|
|
3401
3625
|
return buffer;
|
|
3402
3626
|
}
|
|
3403
3627
|
shouldRenderDrawCall(inst, drawCall) {
|
|
3404
|
-
return !inst.hiddenMaterials.has(drawCall.materialName);
|
|
3628
|
+
return !inst.hiddenMaterials.has(drawCall.materialName) && !inst.morphHiddenMaterials.has(drawCall.materialName);
|
|
3405
3629
|
}
|
|
3406
3630
|
async createTextureFromLogicalPath(inst, logicalPath) {
|
|
3407
3631
|
const cacheKey = logicalPath;
|
|
@@ -3526,6 +3750,12 @@ export class Engine {
|
|
|
3526
3750
|
this.device.queue.submit([encoder.finish()]);
|
|
3527
3751
|
}
|
|
3528
3752
|
renderGround(pass) {
|
|
3753
|
+
// A stage brings its own floor. Both sit at y=0, so drawing the built-in
|
|
3754
|
+
// plane underneath produces z-fighting across the whole scene — enforced
|
|
3755
|
+
// here rather than left to callers, who cannot see the conflict coming.
|
|
3756
|
+
// hasGround is left alone: remove the stage and the ground comes back.
|
|
3757
|
+
if (this.groundIsSuppressed())
|
|
3758
|
+
return;
|
|
3529
3759
|
if (!this.hasGround || !this.groundVertexBuffer || !this.groundIndexBuffer || !this.groundDrawCall)
|
|
3530
3760
|
return;
|
|
3531
3761
|
pass.setPipeline(this.groundShadowPipeline);
|
|
@@ -4594,8 +4824,14 @@ export class Engine {
|
|
|
4594
4824
|
}
|
|
4595
4825
|
updateSkinMatrices() {
|
|
4596
4826
|
this.forEachInstance((inst) => {
|
|
4827
|
+
// Only a pose pass can change these, and an idle stage did not run one —
|
|
4828
|
+
// re-uploading bones×64 bytes for scenery that never moves is the one
|
|
4829
|
+
// per-frame cost a stage would otherwise still pay in full.
|
|
4830
|
+
if (!inst.skinMatricesDirty)
|
|
4831
|
+
return;
|
|
4597
4832
|
const skinMatrices = inst.model.getSkinMatrices();
|
|
4598
4833
|
this.device.queue.writeBuffer(inst.skinMatrixBuffer, 0, skinMatrices.buffer, skinMatrices.byteOffset, skinMatrices.byteLength);
|
|
4834
|
+
inst.skinMatricesDirty = false;
|
|
4599
4835
|
});
|
|
4600
4836
|
}
|
|
4601
4837
|
// frameIntervalMs is the true vsync-to-vsync frame interval (render dt), NOT the CPU
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export { BODY_GRAPH } from "./graph/presets/body";
|
|
|
14
14
|
export { STOCKINGS_GRAPH } from "./graph/presets/stockings";
|
|
15
15
|
export { EYE_GRAPH } from "./graph/presets/eye";
|
|
16
16
|
export { FACE_GRAPH } from "./graph/presets/face";
|
|
17
|
-
export { Model, type ClipEventInfo } from "./model";
|
|
17
|
+
export { Model, MATERIAL_MORPH_MULTIPLY, MATERIAL_MORPH_ADD, type ClipEventInfo, type Morph, type Morphing, type BoneMorphOffset, type MaterialMorphOffset, type UvMorphOffset, } from "./model";
|
|
18
18
|
export { Vec3, Quat, Mat4, easeInOut, type EulerOrder } from "./math";
|
|
19
19
|
export type { AnimationClip, AnimationPlayOptions, AnimationProgress, BlendEntry, BoneKeyframe, IkKeyframe, MorphKeyframe, BoneInterpolation, ControlPoint, } from "./animation";
|
|
20
20
|
export { LocomotionController, type LocomotionClips, type LocomotionOptions, type LocomotionPose, type StrafeClipEntry, type TurnClipEntry, type RunTurnClipEntry, type StopClipEntry, } from "./locomotion";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACvG,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC7G,YAAY,EACV,UAAU,EACV,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ export { BODY_GRAPH } from "./graph/presets/body";
|
|
|
12
12
|
export { STOCKINGS_GRAPH } from "./graph/presets/stockings";
|
|
13
13
|
export { EYE_GRAPH } from "./graph/presets/eye";
|
|
14
14
|
export { FACE_GRAPH } from "./graph/presets/face";
|
|
15
|
-
export { Model } from "./model";
|
|
15
|
+
export { Model, MATERIAL_MORPH_MULTIPLY, MATERIAL_MORPH_ADD, } from "./model";
|
|
16
16
|
export { Vec3, Quat, Mat4, easeInOut } from "./math";
|
|
17
17
|
export { LocomotionController, } from "./locomotion";
|
|
18
18
|
export { AnimationStateMachine } from "./state-machine";
|
package/dist/model.d.ts
CHANGED
|
@@ -78,11 +78,44 @@ export interface GroupMorphReference {
|
|
|
78
78
|
morphIndex: number;
|
|
79
79
|
ratio: number;
|
|
80
80
|
}
|
|
81
|
+
export interface BoneMorphOffset {
|
|
82
|
+
boneIndex: number;
|
|
83
|
+
translation: [number, number, number];
|
|
84
|
+
/** Rotation quaternion (x, y, z, w). */
|
|
85
|
+
rotation: [number, number, number, number];
|
|
86
|
+
}
|
|
87
|
+
/** PMX material-morph blend mode. Multiply lerps toward base*morph; add offsets from base. */
|
|
88
|
+
export declare const MATERIAL_MORPH_MULTIPLY = 0;
|
|
89
|
+
export declare const MATERIAL_MORPH_ADD = 1;
|
|
90
|
+
export interface MaterialMorphOffset {
|
|
91
|
+
/** -1 targets EVERY material in the model, per the PMX spec. */
|
|
92
|
+
materialIndex: number;
|
|
93
|
+
/** MATERIAL_MORPH_MULTIPLY | MATERIAL_MORPH_ADD */
|
|
94
|
+
offsetType: number;
|
|
95
|
+
diffuse: [number, number, number, number];
|
|
96
|
+
specular: [number, number, number];
|
|
97
|
+
shininess: number;
|
|
98
|
+
ambient: [number, number, number];
|
|
99
|
+
edgeColor: [number, number, number, number];
|
|
100
|
+
edgeSize: number;
|
|
101
|
+
textureCoeff: [number, number, number, number];
|
|
102
|
+
sphereCoeff: [number, number, number, number];
|
|
103
|
+
toonCoeff: [number, number, number, number];
|
|
104
|
+
}
|
|
105
|
+
export interface UvMorphOffset {
|
|
106
|
+
vertexIndex: number;
|
|
107
|
+
/** (u, v, z, w) — only u/v apply to the base channel. */
|
|
108
|
+
offset: [number, number, number, number];
|
|
109
|
+
}
|
|
81
110
|
export interface Morph {
|
|
82
111
|
name: string;
|
|
112
|
+
/** 0=group, 1=vertex, 2=bone, 3–7=UV, 8=material, 9=flip, 10=impulse. */
|
|
83
113
|
type: number;
|
|
84
114
|
vertexOffsets: VertexMorphOffset[];
|
|
85
115
|
groupReferences?: GroupMorphReference[];
|
|
116
|
+
boneOffsets?: BoneMorphOffset[];
|
|
117
|
+
materialOffsets?: MaterialMorphOffset[];
|
|
118
|
+
uvOffsets?: UvMorphOffset[];
|
|
86
119
|
}
|
|
87
120
|
export interface Morphing {
|
|
88
121
|
morphs: Morph[];
|
|
@@ -146,6 +179,14 @@ export declare class Model {
|
|
|
146
179
|
private runtimeSkeleton;
|
|
147
180
|
private runtimeMorph;
|
|
148
181
|
private morphsDirty;
|
|
182
|
+
private boneMorphPlan;
|
|
183
|
+
private boneMorphBones;
|
|
184
|
+
private boneMorphRestoreR;
|
|
185
|
+
private boneMorphRestoreT;
|
|
186
|
+
private boneMorphApplied;
|
|
187
|
+
/** A full pose pass has run, so the world matrices are real. See isIdle. */
|
|
188
|
+
private posedOnce;
|
|
189
|
+
private auxMorphDirty;
|
|
149
190
|
private _position;
|
|
150
191
|
private _rotation;
|
|
151
192
|
private _scale;
|
|
@@ -189,6 +230,33 @@ export declare class Model {
|
|
|
189
230
|
private buildDeformOrder;
|
|
190
231
|
private initializeTweenBuffers;
|
|
191
232
|
private initializeRuntimeMorph;
|
|
233
|
+
/**
|
|
234
|
+
* Bone morphs (type 2) compose over whatever the pose sources produced, the
|
|
235
|
+
* same way boneRotationOffsets do — they are an offset on the animated local
|
|
236
|
+
* transform, not a replacement for it. Re-applied every frame because each
|
|
237
|
+
* pose source rewrites the locals it touches.
|
|
238
|
+
*
|
|
239
|
+
* Stages are the reason this exists: a door or a lift is rigged as a bone
|
|
240
|
+
* morph and there is no VMD anywhere that drives it.
|
|
241
|
+
*/
|
|
242
|
+
private applyBoneMorphs;
|
|
243
|
+
/** True (once) when effective morph weights changed — the engine re-derives
|
|
244
|
+
* material-morph uniforms from it. Separate from the GPU vertex path's flag
|
|
245
|
+
* so both can consume the same change. */
|
|
246
|
+
consumeAuxMorphDirty(): boolean;
|
|
247
|
+
/**
|
|
248
|
+
* Morph indices this model can actually act on, so a UI never offers a control
|
|
249
|
+
* that moves nothing.
|
|
250
|
+
*
|
|
251
|
+
* Driven directly: vertex (1), bone (2), material (8). Excluded: UV (3–7),
|
|
252
|
+
* which are parsed and kept but not yet applied; flip (9) and impulse (10),
|
|
253
|
+
* which are PMX 2.1 and would need the rigidbody solver.
|
|
254
|
+
*
|
|
255
|
+
* A group morph (0) is only as alive as what it points at — one referencing
|
|
256
|
+
* nothing but UV morphs is just as dead as the UV morphs themselves, so it is
|
|
257
|
+
* resolved rather than assumed.
|
|
258
|
+
*/
|
|
259
|
+
getSupportedMorphIndices(): number[];
|
|
192
260
|
private updateTweens;
|
|
193
261
|
getVertices(): Float32Array<ArrayBuffer>;
|
|
194
262
|
getTextures(): Texture[];
|
|
@@ -326,6 +394,19 @@ export declare class Model {
|
|
|
326
394
|
* animationState, already ticked by update), shape the weight with easeInOut,
|
|
327
395
|
* and hand both to the blend sampler. Holds in place while paused. */
|
|
328
396
|
private applyCrossfade;
|
|
397
|
+
/**
|
|
398
|
+
* Nothing can have moved this frame: no clip, no blend, no live tween, no
|
|
399
|
+
* morph weight change.
|
|
400
|
+
*
|
|
401
|
+
* Environment geometry is in this state almost every frame, so the engine
|
|
402
|
+
* skips the whole pose pass — sampling, world matrices, and the skin-matrix
|
|
403
|
+
* upload — for a stage that reports idle. A stage is usually the heaviest mesh
|
|
404
|
+
* in the scene and the one that never moves; paying a full pose pass for it
|
|
405
|
+
* every frame is the thing worth not doing.
|
|
406
|
+
*/
|
|
407
|
+
isIdle(): boolean;
|
|
408
|
+
/** Any live rotation / translation / morph tween. */
|
|
409
|
+
private hasActiveTweens;
|
|
329
410
|
update(deltaTime: number, ikEnabled?: boolean): boolean;
|
|
330
411
|
private solveIKChains;
|
|
331
412
|
private ikComputedSet;
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|