reze-engine 0.41.3 → 0.42.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 +42 -3
- package/dist/animation.d.ts +18 -0
- package/dist/animation.d.ts.map +1 -1
- package/dist/animation.js +26 -16
- package/dist/engine.d.ts +45 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +286 -11
- package/dist/model.d.ts +56 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +125 -22
- package/dist/pmx-loader.d.ts.map +1 -1
- package/dist/pmx-loader.js +8 -5
- package/dist/shaders/passes/composite.d.ts +46 -1
- package/dist/shaders/passes/composite.d.ts.map +1 -1
- package/dist/shaders/passes/composite.js +243 -13
- package/package.json +1 -1
- package/src/animation.ts +26 -16
- package/src/engine.ts +301 -10
- package/src/model.ts +133 -22
- package/src/pmx-loader.ts +10 -5
- package/src/shaders/passes/composite.ts +221 -14
package/dist/engine.js
CHANGED
|
@@ -20,7 +20,7 @@ import { SELECTION_MASK_SHADER_WGSL, SELECTION_EDGE_SHADER_WGSL } from "./shader
|
|
|
20
20
|
import { GIZMO_SHADER_WGSL } from "./shaders/passes/gizmo";
|
|
21
21
|
import { BLOOM_BLIT_SHADER_WGSL, BLOOM_DOWNSAMPLE_SHADER_WGSL, BLOOM_UPSAMPLE_SHADER_WGSL, } from "./shaders/passes/bloom";
|
|
22
22
|
import { AGX_LUT_GZ, AGX_LUT_SIZE } from "./shaders/agx-lut";
|
|
23
|
-
import { buildCompositeShader } from "./shaders/passes/composite";
|
|
23
|
+
import { buildCompositeShader, parseEffectAnchors, EFFECT_ANCHORS, EFFECT_SUBJECTS, EFFECT_TRAIL_BASE, EFFECT_TRAIL_SAMPLES, } from "./shaders/passes/composite";
|
|
24
24
|
import { PICK_SHADER_WGSL } from "./shaders/passes/pick";
|
|
25
25
|
import { MIPMAP_BLIT_SHADER_WGSL } from "./shaders/passes/mipmap";
|
|
26
26
|
import { compileGraph } from "./graph/compile";
|
|
@@ -150,13 +150,38 @@ function nodeIdForWgslLine(wgsl, lineNum) {
|
|
|
150
150
|
}
|
|
151
151
|
/** A model's scene placement — root offset baked into skinning + visibility. Serializable
|
|
152
152
|
* into a scene descriptor via getModelTransform. */
|
|
153
|
-
/** How many character positions an effect can read (viewU[11..14]).
|
|
154
|
-
|
|
153
|
+
/** How many character positions an effect can read (viewU[11..14]). Defined
|
|
154
|
+
* beside the shader that reads them — the layout arithmetic has to agree. */
|
|
155
|
+
const MAX_EFFECT_SUBJECTS = EFFECT_SUBJECTS;
|
|
155
156
|
/** Where a character IS, for an effect that follows them. センター carries a
|
|
156
157
|
* motion's root movement — walking, jumping — where the model transform only
|
|
157
158
|
* carries where the model was placed; 全ての親 is the fallback for a model that
|
|
158
159
|
* animates the true root instead. */
|
|
159
160
|
const SUBJECT_BONES = ["センター", "全ての親"];
|
|
161
|
+
/** How many bones one effect may name. Eight is already a lot for one file, and
|
|
162
|
+
* this is a MINIMUM: raising it breaks nothing, because effects read through
|
|
163
|
+
* rzAnchor() rather than indexing the buffer. Lowering it would. */
|
|
164
|
+
const MAX_EFFECT_ANCHORS = EFFECT_ANCHORS;
|
|
165
|
+
/** Only for the bounding sphere's height. */
|
|
166
|
+
const HEAD_BONE = "頭";
|
|
167
|
+
/** Path samples kept per trailed anchor. ~2.1s at the sampling rate below, which
|
|
168
|
+
* is a long ribbon — a dancer's arm draws most of a circle in that time.
|
|
169
|
+
*
|
|
170
|
+
* A MINIMUM, like every cap here, and raising it is why that matters: effects
|
|
171
|
+
* read through rzTrail and loop to rzTrailCount, so this went 64 → 128 without
|
|
172
|
+
* touching a single published effect. Lowering it is the direction that breaks. */
|
|
173
|
+
const TRAIL_SAMPLES = EFFECT_TRAIL_SAMPLES;
|
|
174
|
+
/** Sampled on the SCENE clock at a fixed rate, so a path is identical in the
|
|
175
|
+
* editor, in an export and in a re-export, and its spacing does not change with
|
|
176
|
+
* the display's refresh. */
|
|
177
|
+
const TRAIL_HZ = 60;
|
|
178
|
+
const TRAIL_DT = 1 / TRAIL_HZ;
|
|
179
|
+
/** vec4 slots: four subjects × 3, then anchors × four subjects × 3, then the
|
|
180
|
+
* trails — slot-major, four subjects each, TRAIL_SAMPLES apiece. */
|
|
181
|
+
const CAST_SUBJECT_VEC4S = MAX_EFFECT_SUBJECTS * 3;
|
|
182
|
+
const CAST_ANCHOR_VEC4S = MAX_EFFECT_ANCHORS * MAX_EFFECT_SUBJECTS * 3;
|
|
183
|
+
const CAST_TRAIL_BASE = EFFECT_TRAIL_BASE;
|
|
184
|
+
const CAST_VEC4S = CAST_TRAIL_BASE + MAX_EFFECT_ANCHORS * MAX_EFFECT_SUBJECTS * TRAIL_SAMPLES;
|
|
160
185
|
export const DEFAULT_BLOOM_OPTIONS = {
|
|
161
186
|
enabled: true,
|
|
162
187
|
threshold: 0.5,
|
|
@@ -278,6 +303,8 @@ function materialAlphaStats(verts, indices, firstIndex, count, sampler) {
|
|
|
278
303
|
return { avg: 1, translucentFrac: 0 };
|
|
279
304
|
return { avg: sum / n / 255, translucentFrac: translucent / n };
|
|
280
305
|
}
|
|
306
|
+
/** Tried in order when a PMX names a texture without an extension. */
|
|
307
|
+
const TEXTURE_EXTENSION_GUESSES = [".png", ".jpg", ".jpeg", ".bmp", ".tga", ".dds", ".spa", ".sph"];
|
|
281
308
|
export class Engine {
|
|
282
309
|
static getInstance() {
|
|
283
310
|
if (!Engine.instance) {
|
|
@@ -339,6 +366,21 @@ export class Engine {
|
|
|
339
366
|
// params live in their own uniform buffer so setEffectParam is a write, not a
|
|
340
367
|
// recompile (the same instant tier as setStyleParam).
|
|
341
368
|
this.effect = null;
|
|
369
|
+
/** Last frame's anchor world positions, for velocity. Keyed model id → slot. */
|
|
370
|
+
this.anchorPrev = new Map();
|
|
371
|
+
this.castLastMs = 0;
|
|
372
|
+
/** Recent path per trailed anchor, keyed "model\0slot". Newest first, so the
|
|
373
|
+
* shader's index 0 is now — written by unshifting rather than by tracking a
|
|
374
|
+
* head, because 64 is short and the alternative is an index the GPU side
|
|
375
|
+
* would also have to know about. */
|
|
376
|
+
this.anchorTrail = new Map();
|
|
377
|
+
/** Scene seconds, advanced by the frame delta — NOT wall time, so an offline
|
|
378
|
+
* export samples the same path the editor showed. */
|
|
379
|
+
this.sceneClock = 0;
|
|
380
|
+
this.trailAccum = 0;
|
|
381
|
+
/** Trail samples owed this frame, computed once so every trail on every
|
|
382
|
+
* character samples in lockstep and their paths stay comparable. */
|
|
383
|
+
this.trailDue = 0;
|
|
342
384
|
this.agxLutTexture = null;
|
|
343
385
|
/** time=0 origin for the active effect — reset each setEffect. */
|
|
344
386
|
this.effectEpochMs = 0;
|
|
@@ -825,6 +867,8 @@ export class Engine {
|
|
|
825
867
|
rebuildCompositeBindGroup() {
|
|
826
868
|
if (!this.device || !this.hdrResolveTexture || !this.compositeBloomView || !this.depthReadView)
|
|
827
869
|
return;
|
|
870
|
+
if (!this.castBuffer)
|
|
871
|
+
return;
|
|
828
872
|
this.compositeBindGroup = this.device.createBindGroup({
|
|
829
873
|
label: "composite bind group",
|
|
830
874
|
layout: this.compositeBindGroupLayout,
|
|
@@ -840,6 +884,7 @@ export class Engine {
|
|
|
840
884
|
{ binding: 8, resource: this.depthReadView },
|
|
841
885
|
{ binding: 9, resource: { buffer: this.dofUniformBuffer } },
|
|
842
886
|
{ binding: 10, resource: (this.agxLutTexture ?? this.agxFallbackTexture).createView({ dimension: "3d" }) },
|
|
887
|
+
{ binding: 11, resource: { buffer: this.castBuffer } },
|
|
843
888
|
],
|
|
844
889
|
});
|
|
845
890
|
}
|
|
@@ -967,6 +1012,13 @@ export class Engine {
|
|
|
967
1012
|
};
|
|
968
1013
|
}
|
|
969
1014
|
const mounts = { background: hasBackground, foreground: hasForeground };
|
|
1015
|
+
// ── Which bones did the author ask for? Same idea as the mounts above: a
|
|
1016
|
+
// declaration in the source, not a setting somewhere else. Only what is
|
|
1017
|
+
// named here gets resolved and uploaded, so naming none costs nothing and
|
|
1018
|
+
// naming eight costs eight — rather than every rig's 500 bones costing
|
|
1019
|
+
// everybody. Past the cap the extras are dropped rather than silently
|
|
1020
|
+
// shifting every slot after them.
|
|
1021
|
+
const anchors = parseEffectAnchors(wgsl, MAX_EFFECT_ANCHORS);
|
|
970
1022
|
// ── Params: codegen a WGSL struct and mirror its uniform layout on the CPU.
|
|
971
1023
|
// Fields are emitted in declaration order; offsets follow WGSL's natural
|
|
972
1024
|
// uniform rules (f32 align 4, vec3f align 16 size 12), computed identically
|
|
@@ -1049,7 +1101,13 @@ export class Engine {
|
|
|
1049
1101
|
});
|
|
1050
1102
|
this.device.queue.writeBuffer(paramsBuffer, 0, paramsData);
|
|
1051
1103
|
}
|
|
1052
|
-
this.effect = { wgsl, paramLayout: layout, paramsBuffer, paramsData, hasBackground, hasForeground };
|
|
1104
|
+
this.effect = { wgsl, paramLayout: layout, paramsBuffer, paramsData, hasBackground, hasForeground, anchors };
|
|
1105
|
+
// Velocities and paths restart from rest rather than continuing from
|
|
1106
|
+
// whatever the last effect's slot 0 happened to be — the slots mean
|
|
1107
|
+
// something different now, and a trail would otherwise draw a line from the
|
|
1108
|
+
// old bone to the new one across the whole scene.
|
|
1109
|
+
this.anchorPrev.clear();
|
|
1110
|
+
this.anchorTrail.clear();
|
|
1053
1111
|
this.compositePipelineIdentity = identity;
|
|
1054
1112
|
this.compositePipelineGamma = gamma;
|
|
1055
1113
|
this.effectEpochMs = performance.now();
|
|
@@ -2032,6 +2090,15 @@ export class Engine {
|
|
|
2032
2090
|
size: 16,
|
|
2033
2091
|
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
2034
2092
|
});
|
|
2093
|
+
// Allocated at full size once rather than grown: it is ~7KB, the bind group
|
|
2094
|
+
// would otherwise be rebuilt whenever an effect declared a different number
|
|
2095
|
+
// of bones, and only the declared prefix is ever written.
|
|
2096
|
+
this.castData = new Float32Array(CAST_VEC4S * 4);
|
|
2097
|
+
this.castBuffer = this.device.createBuffer({
|
|
2098
|
+
label: "effect cast data",
|
|
2099
|
+
size: this.castData.byteLength,
|
|
2100
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
2101
|
+
});
|
|
2035
2102
|
this.compositeBindGroupLayout = this.device.createBindGroupLayout({
|
|
2036
2103
|
label: "composite bind group layout",
|
|
2037
2104
|
entries: [
|
|
@@ -2061,6 +2128,9 @@ export class Engine {
|
|
|
2061
2128
|
// AgX's 57³ cube. Decompressed and uploaded off the critical path, so a
|
|
2062
2129
|
// 1×1×1 stand-in keeps the bind group valid until it arrives.
|
|
2063
2130
|
{ binding: 10, visibility: GPUShaderStage.FRAGMENT, texture: { viewDimension: "3d" } },
|
|
2131
|
+
// The cast, for rzSubject/rzAnchor. Always bound so the base shader's
|
|
2132
|
+
// layout matches; the base shader simply never reads it.
|
|
2133
|
+
{ binding: 11, visibility: GPUShaderStage.FRAGMENT, buffer: { type: "read-only-storage" } },
|
|
2064
2134
|
],
|
|
2065
2135
|
});
|
|
2066
2136
|
this.fallbackEquirectTexture = this.device.createTexture({
|
|
@@ -2678,15 +2748,24 @@ export class Engine {
|
|
|
2678
2748
|
// so a static stage in the scene never freezes the shot at frame 0. Falls back to the first
|
|
2679
2749
|
// model, then to 0 (empty scene).
|
|
2680
2750
|
cameraClockTime() {
|
|
2681
|
-
let
|
|
2751
|
+
let fallback = null;
|
|
2682
2752
|
for (const inst of this.modelInstances.values()) {
|
|
2753
|
+
// Stages are skipped outright. Scenery carries no motion, and it is added
|
|
2754
|
+
// BEFORE the cast — it paints while the models stream in behind it — so it
|
|
2755
|
+
// is first in insertion order and was seeding this clock with its own
|
|
2756
|
+
// permanent zero. In a scene with a stage, a camera VMD therefore sampled
|
|
2757
|
+
// frame 0 forever and the shot never moved.
|
|
2758
|
+
if (inst.isStage)
|
|
2759
|
+
continue;
|
|
2683
2760
|
const p = inst.model.getAnimationProgress();
|
|
2684
|
-
if (first === null)
|
|
2685
|
-
first = p.current;
|
|
2686
2761
|
if (p.playing || p.paused)
|
|
2687
2762
|
return p.current;
|
|
2763
|
+
// Otherwise the first cast member that actually HAS a clip: one still at
|
|
2764
|
+
// bind pose must not claim the clock from one holding the motion.
|
|
2765
|
+
if (fallback === null && p.duration > 0)
|
|
2766
|
+
fallback = p.current;
|
|
2688
2767
|
}
|
|
2689
|
-
return
|
|
2768
|
+
return fallback ?? 0;
|
|
2690
2769
|
}
|
|
2691
2770
|
/** Current orbit eye position (spherical coords resolved to a point). */
|
|
2692
2771
|
getCameraPosition() {
|
|
@@ -3944,13 +4023,41 @@ export class Engine {
|
|
|
3944
4023
|
inst.textureCacheKeys.push(cacheKey);
|
|
3945
4024
|
return cached;
|
|
3946
4025
|
}
|
|
3947
|
-
|
|
4026
|
+
// PMX texture tables are hand-maintained, and they routinely carry entries
|
|
4027
|
+
// that are not files. Two kinds show up constantly: a bare directory
|
|
4028
|
+
// ("Textures", "spa\\"), which is a leftover placeholder pointing at nothing,
|
|
4029
|
+
// and a name whose extension was dropped — where the texture is sitting right
|
|
4030
|
+
// there on disk one suffix longer, and the material renders white for want of
|
|
4031
|
+
// it. The first is answered by staying quiet, the second by trying.
|
|
4032
|
+
let buffer = null;
|
|
4033
|
+
let readError = null;
|
|
3948
4034
|
try {
|
|
3949
4035
|
buffer = await inst.assetReader.readBinary(logicalPath);
|
|
3950
4036
|
}
|
|
3951
4037
|
catch (e) {
|
|
3952
|
-
|
|
3953
|
-
|
|
4038
|
+
readError = e;
|
|
4039
|
+
}
|
|
4040
|
+
if (!buffer) {
|
|
4041
|
+
const base = logicalPath.split(/[\\/]/).pop() ?? "";
|
|
4042
|
+
// No basename at all: the entry named a directory. Nothing was ever meant
|
|
4043
|
+
// to load, so this is not a failure worth a line in anyone's console.
|
|
4044
|
+
if (!base)
|
|
4045
|
+
return null;
|
|
4046
|
+
if (!base.includes(".")) {
|
|
4047
|
+
for (const ext of TEXTURE_EXTENSION_GUESSES) {
|
|
4048
|
+
try {
|
|
4049
|
+
buffer = await inst.assetReader.readBinary(`${logicalPath}${ext}`);
|
|
4050
|
+
break;
|
|
4051
|
+
}
|
|
4052
|
+
catch {
|
|
4053
|
+
// keep trying — the list is short and only runs for a broken entry
|
|
4054
|
+
}
|
|
4055
|
+
}
|
|
4056
|
+
}
|
|
4057
|
+
if (!buffer) {
|
|
4058
|
+
console.warn(`[reze] texture read failed: ${logicalPath}`, readError instanceof Error ? readError.message : readError);
|
|
4059
|
+
return null;
|
|
4060
|
+
}
|
|
3954
4061
|
}
|
|
3955
4062
|
// Decode to either an ImageBitmap (web-native formats) or raw RGBA (TGA, DDS, PSD).
|
|
3956
4063
|
//
|
|
@@ -4421,6 +4528,13 @@ export class Engine {
|
|
|
4421
4528
|
this.renderWithDelta(deltaSeconds);
|
|
4422
4529
|
}
|
|
4423
4530
|
renderWithDelta(deltaTime) {
|
|
4531
|
+
// The scene clock, and the only clock a trail may sample on: renderFrame()
|
|
4532
|
+
// drives offline export with an exact per-frame delta, so a path recorded
|
|
4533
|
+
// against this is reproducible where one recorded against wall time is not.
|
|
4534
|
+
this.sceneClock += deltaTime;
|
|
4535
|
+
this.trailAccum += deltaTime;
|
|
4536
|
+
this.trailDue = Math.floor(this.trailAccum / TRAIL_DT);
|
|
4537
|
+
this.trailAccum -= this.trailDue * TRAIL_DT;
|
|
4424
4538
|
const tFrame = performance.now();
|
|
4425
4539
|
this.frameAnimMsRaw = 0;
|
|
4426
4540
|
this.framePhysicsMsRaw = 0;
|
|
@@ -5207,11 +5321,172 @@ export class Engine {
|
|
|
5207
5321
|
u[44 + n * 4] = px;
|
|
5208
5322
|
u[45 + n * 4] = py;
|
|
5209
5323
|
u[46 + n * 4] = pz;
|
|
5324
|
+
this.writeCastEntry(inst, n, px, py, pz);
|
|
5210
5325
|
n++;
|
|
5211
5326
|
});
|
|
5212
5327
|
u[43] = n;
|
|
5213
5328
|
this.device.queue.writeBuffer(this.compositeUniformBuffer, 0, u);
|
|
5329
|
+
// Only what an effect declared, and only while one is installed. A scene
|
|
5330
|
+
// with no effect writes nothing here at all.
|
|
5331
|
+
if (this.effect) {
|
|
5332
|
+
// Up to the last trailed slot, not the whole buffer: an effect with no
|
|
5333
|
+
// trails never uploads the 32KB it would otherwise pay for every frame.
|
|
5334
|
+
let lastTrail = -1;
|
|
5335
|
+
for (let i = 0; i < this.effect.anchors.length; i++)
|
|
5336
|
+
if (this.effect.anchors[i].trail)
|
|
5337
|
+
lastTrail = i;
|
|
5338
|
+
const used = lastTrail >= 0
|
|
5339
|
+
? CAST_TRAIL_BASE + (lastTrail * MAX_EFFECT_SUBJECTS + MAX_EFFECT_SUBJECTS) * TRAIL_SAMPLES
|
|
5340
|
+
: CAST_SUBJECT_VEC4S + this.effect.anchors.length * MAX_EFFECT_SUBJECTS * 3;
|
|
5341
|
+
this.device.queue.writeBuffer(this.castBuffer, 0, this.castData, 0, used * 4);
|
|
5342
|
+
this.castLastMs = performance.now();
|
|
5343
|
+
}
|
|
5344
|
+
}
|
|
5345
|
+
}
|
|
5346
|
+
/**
|
|
5347
|
+
* One character's slice of the effect API's view of the cast.
|
|
5348
|
+
*
|
|
5349
|
+
* `px/py/pz` is the hip point the caller just composed — passed in rather than
|
|
5350
|
+
* recomputed, since it is the same two bone lookups.
|
|
5351
|
+
*
|
|
5352
|
+
* Bone positions are model-space, so each is scaled, rotated and translated by
|
|
5353
|
+
* the model transform exactly as the hip point above was. Getting that wrong
|
|
5354
|
+
* does not look wrong on a model standing at the origin, which is precisely
|
|
5355
|
+
* how it would ship.
|
|
5356
|
+
*/
|
|
5357
|
+
writeCastEntry(inst, n, px, py, pz) {
|
|
5358
|
+
const effect = this.effect;
|
|
5359
|
+
if (!effect)
|
|
5360
|
+
return;
|
|
5361
|
+
const m = inst.model;
|
|
5362
|
+
const cd = this.castData;
|
|
5363
|
+
const toWorld = (v) => {
|
|
5364
|
+
v.setXYZ(v.x * m.scale, v.y * m.scale, v.z * m.scale);
|
|
5365
|
+
Quat.rotateVecInto(m.rotation, v, v);
|
|
5366
|
+
v.setXYZ(v.x + m.position.x, v.y + m.position.y, v.z + m.position.z);
|
|
5367
|
+
return v;
|
|
5368
|
+
};
|
|
5369
|
+
// The floor under this character: where the model was PLACED.
|
|
5370
|
+
//
|
|
5371
|
+
// A foot bone was the obvious answer and the wrong one. 足IK sits at the
|
|
5372
|
+
// ANKLE, not on the sole — an ankle above the ground even standing still,
|
|
5373
|
+
// and further still in heels — so a floor derived from it lands a hand's
|
|
5374
|
+
// width up the leg, which is exactly where the first version of Footfalls
|
|
5375
|
+
// drew its marks. A PMX's origin is between the feet on the floor by
|
|
5376
|
+
// convention, and placing a character on a stage moves that origin with
|
|
5377
|
+
// them, so the placement already answers "what is the ground here".
|
|
5378
|
+
//
|
|
5379
|
+
// Deliberately NOT the animated height: a jump lifts the character, not the
|
|
5380
|
+
// floor, and a floor that follows a jump is not a floor.
|
|
5381
|
+
const floorY = m.position.y;
|
|
5382
|
+
// Generous on purpose: this is for culling, and a sphere that is too small
|
|
5383
|
+
// clips the effect it was meant to bound. Height is hip-to-head doubled;
|
|
5384
|
+
// arm span is about height on a human, so half of it is the radius, and the
|
|
5385
|
+
// rest is margin for a motion that reaches.
|
|
5386
|
+
const head = m.getBoneWorldPosition(HEAD_BONE);
|
|
5387
|
+
const height = head ? Math.max(0.01, toWorld(head).y - floorY) : Math.max(0.01, (py - floorY) * 2);
|
|
5388
|
+
const b = n * 12;
|
|
5389
|
+
cd[b] = px;
|
|
5390
|
+
cd[b + 1] = floorY;
|
|
5391
|
+
cd[b + 2] = pz;
|
|
5392
|
+
cd[b + 3] = 1;
|
|
5393
|
+
cd[b + 4] = px;
|
|
5394
|
+
cd[b + 5] = py;
|
|
5395
|
+
cd[b + 6] = pz;
|
|
5396
|
+
cd[b + 8] = px;
|
|
5397
|
+
cd[b + 9] = floorY + height * 0.5;
|
|
5398
|
+
cd[b + 10] = pz;
|
|
5399
|
+
cd[b + 11] = height * 0.75;
|
|
5400
|
+
// Declared bones. Velocity is per model AND per slot, so two characters
|
|
5401
|
+
// wearing the same effect never inherit each other's motion.
|
|
5402
|
+
const anchors = effect.anchors;
|
|
5403
|
+
if (anchors.length === 0)
|
|
5404
|
+
return;
|
|
5405
|
+
let prev = this.anchorPrev.get(inst.name);
|
|
5406
|
+
const dtMs = Math.max(1, performance.now() - this.castLastMs);
|
|
5407
|
+
const invDt = 1000 / dtMs;
|
|
5408
|
+
if (!prev || prev.length !== anchors.length * 3) {
|
|
5409
|
+
prev = new Float32Array(anchors.length * 3).fill(NaN);
|
|
5410
|
+
this.anchorPrev.set(inst.name, prev);
|
|
5411
|
+
}
|
|
5412
|
+
for (let s = 0; s < anchors.length; s++) {
|
|
5413
|
+
const a = CAST_SUBJECT_VEC4S * 4 + (s * MAX_EFFECT_SUBJECTS + n) * 12;
|
|
5414
|
+
const pos = m.getBoneWorldPosition(anchors[s].bone);
|
|
5415
|
+
if (!pos) {
|
|
5416
|
+
cd[a + 3] = 0;
|
|
5417
|
+
continue;
|
|
5418
|
+
}
|
|
5419
|
+
toWorld(pos);
|
|
5420
|
+
const p = s * 3;
|
|
5421
|
+
// NaN on the first frame a slot exists — a velocity out of nothing would
|
|
5422
|
+
// be a spike, and a trail or a spark reading it would fire on load.
|
|
5423
|
+
const vx = Number.isNaN(prev[p]) ? 0 : (pos.x - prev[p]) * invDt;
|
|
5424
|
+
const vy = Number.isNaN(prev[p]) ? 0 : (pos.y - prev[p + 1]) * invDt;
|
|
5425
|
+
const vz = Number.isNaN(prev[p]) ? 0 : (pos.z - prev[p + 2]) * invDt;
|
|
5426
|
+
prev[p] = pos.x;
|
|
5427
|
+
prev[p + 1] = pos.y;
|
|
5428
|
+
prev[p + 2] = pos.z;
|
|
5429
|
+
cd[a] = pos.x;
|
|
5430
|
+
cd[a + 1] = pos.y;
|
|
5431
|
+
cd[a + 2] = pos.z;
|
|
5432
|
+
cd[a + 3] = 1;
|
|
5433
|
+
cd[a + 4] = vx;
|
|
5434
|
+
cd[a + 5] = vy;
|
|
5435
|
+
cd[a + 6] = vz;
|
|
5436
|
+
if (anchors[s].trail)
|
|
5437
|
+
this.writeTrail(inst.name, s, n, pos, cd, a);
|
|
5438
|
+
const fwd = m.getBoneWorldForward(anchors[s].bone);
|
|
5439
|
+
if (fwd) {
|
|
5440
|
+
Quat.rotateVecInto(m.rotation, fwd, fwd);
|
|
5441
|
+
cd[a + 8] = fwd.x;
|
|
5442
|
+
cd[a + 9] = fwd.y;
|
|
5443
|
+
cd[a + 10] = fwd.z;
|
|
5444
|
+
}
|
|
5445
|
+
}
|
|
5446
|
+
}
|
|
5447
|
+
/**
|
|
5448
|
+
* One trailed anchor's recent path, sampled on the scene clock and written
|
|
5449
|
+
* newest-first.
|
|
5450
|
+
*
|
|
5451
|
+
* Newest-first is what lets a ribbon be drawn by walking the index upward and
|
|
5452
|
+
* fading on age, and it means the shader never needs to know where the ring's
|
|
5453
|
+
* head is. Sixty-four entries is short enough that unshifting beats the
|
|
5454
|
+
* bookkeeping an actual ring buffer would push onto the GPU side too.
|
|
5455
|
+
*
|
|
5456
|
+
* Sampling is gated on TRAIL_DT of SCENE time, so a 120Hz display and a 30fps
|
|
5457
|
+
* export record the same path at the same spacing. A frame that covers several
|
|
5458
|
+
* intervals emits several samples rather than one, or a fast hand would tear.
|
|
5459
|
+
*/
|
|
5460
|
+
writeTrail(model, slot, n, pos, cd, anchorBase) {
|
|
5461
|
+
const key = `${model}\u0000${slot}`;
|
|
5462
|
+
let ring = this.anchorTrail.get(key);
|
|
5463
|
+
if (!ring) {
|
|
5464
|
+
ring = { pos: [], t: [] };
|
|
5465
|
+
this.anchorTrail.set(key, ring);
|
|
5466
|
+
}
|
|
5467
|
+
if (this.trailDue > 0 || ring.pos.length === 0) {
|
|
5468
|
+
const steps = Math.min(this.trailDue, 4);
|
|
5469
|
+
for (let k = 0; k < Math.max(1, steps); k++) {
|
|
5470
|
+
ring.pos.unshift(pos.x, pos.y, pos.z);
|
|
5471
|
+
ring.t.unshift(this.sceneClock);
|
|
5472
|
+
if (ring.t.length > TRAIL_SAMPLES) {
|
|
5473
|
+
ring.t.length = TRAIL_SAMPLES;
|
|
5474
|
+
ring.pos.length = TRAIL_SAMPLES * 3;
|
|
5475
|
+
}
|
|
5476
|
+
}
|
|
5477
|
+
}
|
|
5478
|
+
const count = ring.t.length;
|
|
5479
|
+
// Age rather than a timestamp: the shader would otherwise need the scene
|
|
5480
|
+
// clock too, and there is only one place that has to know what time it is.
|
|
5481
|
+
const base = (CAST_TRAIL_BASE + (slot * MAX_EFFECT_SUBJECTS + n) * TRAIL_SAMPLES) * 4;
|
|
5482
|
+
for (let i = 0; i < count; i++) {
|
|
5483
|
+
cd[base + i * 4] = ring.pos[i * 3];
|
|
5484
|
+
cd[base + i * 4 + 1] = ring.pos[i * 3 + 1];
|
|
5485
|
+
cd[base + i * 4 + 2] = ring.pos[i * 3 + 2];
|
|
5486
|
+
cd[base + i * 4 + 3] = this.sceneClock - ring.t[i];
|
|
5214
5487
|
}
|
|
5488
|
+
// The count rides in the anchor's spare lane, so rzTrailCount is one read.
|
|
5489
|
+
cd[anchorBase + 11] = count;
|
|
5215
5490
|
}
|
|
5216
5491
|
updateSkinMatrices() {
|
|
5217
5492
|
this.forEachInstance((inst) => {
|
package/dist/model.d.ts
CHANGED
|
@@ -47,6 +47,12 @@ export interface Bone {
|
|
|
47
47
|
appendRatio?: number;
|
|
48
48
|
appendRotate?: boolean;
|
|
49
49
|
appendMove?: boolean;
|
|
50
|
+
/** 軸制限: this bone rotates ONLY about this axis (the twist bones use it). */
|
|
51
|
+
fixedAxis?: [number, number, number];
|
|
52
|
+
/** 変形階層: MMD poses whole layers in order, not bones in array order.
|
|
53
|
+
* Parsed but not yet honoured — distinct from Model's `deformOrder`, which is
|
|
54
|
+
* this engine's parent-before-child traversal. */
|
|
55
|
+
deformLayer?: number;
|
|
50
56
|
ikTargetIndex?: number;
|
|
51
57
|
ikIteration?: number;
|
|
52
58
|
ikLimitAngle?: number;
|
|
@@ -233,6 +239,8 @@ export declare class Model {
|
|
|
233
239
|
/** Called by Engine when registering the model; enables loadVmd to resolve relative paths for folder uploads. */
|
|
234
240
|
setAssetContext(reader: AssetReader, basePath: string): void;
|
|
235
241
|
constructor(vertexData: Float32Array<ArrayBuffer>, indexData: Uint32Array<ArrayBuffer>, textures: Texture[], materials: Material[], skeleton: Skeleton, skinning: Skinning, morphing: Morphing, rigidbodies?: Rigidbody[], joints?: Joint[], loadWarnings?: string[]);
|
|
242
|
+
/** 軸制限 bones and their normalised axes — see applyFixedAxes. */
|
|
243
|
+
private fixedAxisBones;
|
|
236
244
|
private initializeRuntimeSkeleton;
|
|
237
245
|
private initializeIKRuntime;
|
|
238
246
|
private buildDeformOrder;
|
|
@@ -247,6 +255,26 @@ export declare class Model {
|
|
|
247
255
|
* Stages are the reason this exists: a door or a lift is rigged as a bone
|
|
248
256
|
* morph and there is no VMD anywhere that drives it.
|
|
249
257
|
*/
|
|
258
|
+
/**
|
|
259
|
+
* Take the last frame's bone-morph offsets back off, before any pose source
|
|
260
|
+
* runs.
|
|
261
|
+
*
|
|
262
|
+
* This cannot live at the top of applyBoneMorphs, which is where it used to
|
|
263
|
+
* be. A pose source writes only the bones its clip keys, and it writes them
|
|
264
|
+
* from the clip — so restoring afterwards overwrote the freshly animated pose
|
|
265
|
+
* with a snapshot taken a frame earlier, and the re-snapshot immediately
|
|
266
|
+
* below then saved that same stale value again. The result was not a drift or
|
|
267
|
+
* a lag: every bone any bone morph touched stayed pinned to the first frame
|
|
268
|
+
* the model was posed at, permanently, and at ANY weight — the restore ran
|
|
269
|
+
* over the touched set before the weight test, so a morph sitting at 0 froze
|
|
270
|
+
* its bones just as hard as one at 1.
|
|
271
|
+
*
|
|
272
|
+
* It reads as "the arms don't animate" because arms are what these morphs
|
|
273
|
+
* touch: character models routinely ship T-Pose / A-Pose / ShouderBlend /
|
|
274
|
+
* ElbowBlend adjusters on 腕 and ひじ, and nothing else in the rig is a
|
|
275
|
+
* comparably popular bone-morph target.
|
|
276
|
+
*/
|
|
277
|
+
private undoBoneMorphs;
|
|
250
278
|
private applyBoneMorphs;
|
|
251
279
|
/** True (once) when effective morph weights changed — the engine re-derives
|
|
252
280
|
* material-morph uniforms from it. Separate from the GPU vertex path's flag
|
|
@@ -292,6 +320,15 @@ export declare class Model {
|
|
|
292
320
|
setClipApplySuspended(suspended: boolean): void;
|
|
293
321
|
isClipApplySuspended(): boolean;
|
|
294
322
|
getBoneWorldPosition(boneName: string): Vec3 | null;
|
|
323
|
+
/**
|
|
324
|
+
* A bone's forward axis, normalised — which way a foot points, where a head
|
|
325
|
+
* looks. Model space, like getBoneWorldPosition: the caller composes the model
|
|
326
|
+
* transform on top if it wants world space.
|
|
327
|
+
*
|
|
328
|
+
* Column 2 of the world matrix. Null for a name this rig does not have, which
|
|
329
|
+
* is the ordinary case across rigs that spell bones differently.
|
|
330
|
+
*/
|
|
331
|
+
getBoneWorldForward(boneName: string): Vec3 | null;
|
|
295
332
|
getSkinning(): Skinning;
|
|
296
333
|
hasPhysicsData(): boolean;
|
|
297
334
|
getLoadWarnings(): readonly string[];
|
|
@@ -420,6 +457,25 @@ export declare class Model {
|
|
|
420
457
|
private sampleBoneTrackInto;
|
|
421
458
|
/** Sample one morph track at `frame` (linear weight lerp). Returns NaN for an empty track. */
|
|
422
459
|
private sampleMorphTrack;
|
|
460
|
+
/**
|
|
461
|
+
* Hold 軸制限 bones to their own axis.
|
|
462
|
+
*
|
|
463
|
+
* A twist bone (腕捩 / 手捩) exists to rotate about the length of the limb and
|
|
464
|
+
* nothing else, and PMX says so by giving it a fixed axis. A VMD still keys it
|
|
465
|
+
* with a full quaternion, so without the constraint the bone bends as well as
|
|
466
|
+
* twists — and because the elbow is parented to 腕捩 and 腕捩1..3 inherit a
|
|
467
|
+
* fraction of it, that error is carried into the whole forearm and multiplied
|
|
468
|
+
* three ways down the arm. It is the most visible thing on the model.
|
|
469
|
+
*
|
|
470
|
+
* Projecting the quaternion's vector part onto the axis and renormalising is
|
|
471
|
+
* what keeps the twist and drops everything else; the same operation MMD and
|
|
472
|
+
* every faithful runtime performs.
|
|
473
|
+
*
|
|
474
|
+
* Applied to the STORED local rotation rather than inside a matrix path,
|
|
475
|
+
* because the append children read that array directly: constrain it once and
|
|
476
|
+
* the bone, its inheritors and a hand-posed gizmo all agree.
|
|
477
|
+
*/
|
|
478
|
+
private applyFixedAxes;
|
|
423
479
|
private applyPoseFromClip;
|
|
424
480
|
/** Weighted N-clip pose blend. Rotations accumulate by hemisphere-aligned weighted
|
|
425
481
|
* sum then normalize (nlerp generalized to N inputs); VMD-space translations lerp.
|
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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"}
|