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/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
- const MAX_EFFECT_SUBJECTS = 4;
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 first = null;
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 first ?? 0;
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
- let buffer;
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
- console.warn(`[reze] texture read failed: ${logicalPath}`, e instanceof Error ? e.message : e);
3953
- return null;
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.
@@ -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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"}