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/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
- async addModel(model, pmxPath, name, assetReader) {
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 model = this.modelInstances.get(name)?.model;
2703
- if (!model)
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
- const verticesChanged = inst.model.update(deltaTime, this.ikEnabled);
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
- const physics = rbs.length > 0 ? new RezePhysics(rbs, model.getJoints()) : null;
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
- createMaterialUniformBuffer(label, mat, sphereMode, headBoneIndex) {
3376
- // Matches the WGSL MaterialUniforms struct in common.ts — 64 bytes
3377
- // (diffuse+alpha | ambient+shininess | specular+sphereMode | headIdx+pad).
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 this.createUniformBuffer(`material uniform: ${label}`, data);
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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAA6C,MAAM,QAAQ,CAAA;AAEpF,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAI5C,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EAEjB,UAAU,EAQX,MAAM,aAAa,CAAA;AAcpB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;CACf;AAOD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IAGxB,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAGD,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,CAAA;CAChB;AAGD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAGD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,IAAI,CAAA;IAChB,aAAa,EAAE,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,mBAAmB,EAAE,YAAY,CAAA;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,WAAW,CAAA;IACnB,OAAO,EAAE,UAAU,CAAA;CACpB;AAGD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACzC;AAGD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAGD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,iBAAiB,EAAE,CAAA;IAClC,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAA;CACxC;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,YAAY,CAAA;IAC3B,QAAQ,EAAE,WAAW,CAAA;IACrB,QAAQ,EAAE,WAAW,CAAA;IACrB,SAAS,EAAE,YAAY,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAGD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,cAAc,EAAE,IAAI,EAAE,CAAA;IACtB,iBAAiB,EAAE,IAAI,EAAE,CAAA;IACzB,aAAa,EAAE,IAAI,EAAE,CAAA;IACrB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB;AAGD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,OAAO,EAAE,YAAY,CAAA;CACtB;AA2BD,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAa;IAE1B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO5B,IAAI,QAAQ,IAAI,IAAI,CAEnB;IAED,IAAI,QAAQ,IAAI,IAAI,CAEnB;IAED,2EAA2E;IAC3E,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;6DACyD;IACzD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAKjC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAKjC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAG3C,OAAO,CAAC,qBAAqB,CAAC,CAAc;IAC5C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,eAAe,CAAO;IAG9B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAiB;IAElC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAU;IAG1B,OAAO,CAAC,QAAQ,CAAU;IAG1B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAc;IAG5B,OAAO,CAAC,YAAY,CAAe;IAGnC,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAiB;IAMpC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,gBAAgB,CAAuE;IAC/F,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAgB;IAGtC,OAAO,CAAC,iBAAiB,CAAC,CAAc;IAMxC,OAAO,CAAC,WAAW,CAAa;IAKhC,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAY;IAG/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,eAAe,CAA6B;IAKpD,OAAO,CAAC,OAAO,CASA;IACf,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD;iFAC6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiG;IAC5H,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4D;IAK3F,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,SAAS,CAAoH;IACrI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoD;IACrF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoD;IAGtF,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,eAAe,CAAI;IAE3B,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,aAAa,CAAK;IAE1B,iHAAiH;IACjH,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;gBAM1D,UAAU,EAAE,YAAY,CAAC,WAAW,CAAC,EACrC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,EACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,GAAE,SAAS,EAAO,EAC7B,MAAM,GAAE,KAAK,EAAO,EACpB,YAAY,GAAE,MAAM,EAAO;IA0B7B,OAAO,CAAC,yBAAyB;IA2BjC,OAAO,CAAC,mBAAmB;IA2C3B,OAAO,CAAC,gBAAgB;IA8CxB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,YAAY;IA6EpB,WAAW,IAAI,YAAY,CAAC,WAAW,CAAC;IAIxC,WAAW,IAAI,OAAO,EAAE;IAIxB,YAAY,IAAI,QAAQ,EAAE;IAI1B,UAAU,IAAI,WAAW,CAAC,WAAW,CAAC;IAItC,WAAW,IAAI,QAAQ;IAOvB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI7C,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAShD,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI;IAWzD,OAAO,CAAC,kBAAkB,CAAQ;IAClC,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAG/C,oBAAoB,IAAI,OAAO;IAK/B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMnD,WAAW,IAAI,QAAQ;IAOvB,cAAc,IAAI,OAAO;IAKzB,eAAe,IAAI,SAAS,MAAM,EAAE;IAIpC,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA0B;IAE9D;;;oDAGgD;IAChD,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO;IAQvE,cAAc,IAAI,SAAS,EAAE;IAI7B,SAAS,IAAI,KAAK,EAAE;IAIpB,WAAW,IAAI,QAAQ;IAIvB,eAAe,IAAI,YAAY;IAM/B,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAmD3E,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAwD5E,OAAO,CAAC,4BAA4B;IA0CpC,gBAAgB,IAAI,IAAI,EAAE;IAI1B,oBAAoB,IAAI,YAAY;IAWpC,0BAA0B,IAAI,YAAY;IAI1C,eAAe,IAAI,YAAY;IA2C/B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IA6CvE,OAAO,CAAC,WAAW;IA+FnB,eAAe,IAAI,IAAI;IAMvB,wBAAwB,IAAI,OAAO;IAQnC,wBAAwB,IAAI,YAAY;IAQxC,qBAAqB,IAAI,gBAAgB,GAAG,IAAI;IA6DhD,wBAAwB,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAavE,OAAO,CAAC,yBAAyB;IA0DjC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAIjD,aAAa,IAAI,IAAI;IAWrB,cAAc,IAAI,IAAI;IAStB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAI3C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAMpC,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO;IAgB3D,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASxB;;;;2DAIuD;IACvD,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAMzC,cAAc,IAAI,IAAI;IAItB;;;iFAG6E;IAC7E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,OAAO;IAWvG,+EAA+E;IAC/E,aAAa,CAAC,OAAO,SAAM,GAAG,IAAI;IAUlC,4CAA4C;IAC5C,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B;;;;mDAI+C;IAC/C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,IAAI;IAc5H,OAAO,CAAC,cAAc;IAYtB;yEACqE;IACrE,OAAO,CAAC,gBAAgB;IAWxB;;;mFAG+E;IAC/E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO;IAoBjF,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAOZ;;uEAEmE;IACnE,cAAc,IAAI,IAAI;IAQtB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,oBAAoB,IAAI,iBAAiB;IAazC,OAAO,CAAC,MAAM,CAAC,UAAU;IAWzB,OAAO,CAAC,iBAAiB;IAczB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAAoB;IAEtC;8EAC0E;IAC1E,OAAO,CAAC,eAAe;IAevB;;;;8BAI0B;IAC1B,OAAO,CAAC,mBAAmB;IA2C3B,8FAA8F;IAC9F,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAgCzB;;;;yEAIqE;IACrE,OAAO,CAAC,gBAAgB;IAsIxB;sFACkF;IAClF,OAAO,CAAC,YAAY;IAmDpB;;2EAEuE;IACvE,OAAO,CAAC,cAAc;IA0CtB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,OAAO;IAwDpD,OAAO,CAAC,aAAa;IAyCrB,OAAO,CAAC,aAAa,CAAyB;IAI9C,OAAO,CAAC,4BAA4B;IAiHpC,oBAAoB,IAAI,IAAI;CAkF7B"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}