@aura3d/animation 3.0.0 → 4.0.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/AnimationController.d.ts +8 -0
- package/dist/AnimationController.d.ts.map +1 -1
- package/dist/AnimationController.js +93 -0
- package/dist/AnimationController.js.map +1 -1
- package/dist/AnimationMixer.d.ts +4 -1
- package/dist/AnimationMixer.d.ts.map +1 -1
- package/dist/AnimationMixer.js +47 -29
- package/dist/AnimationMixer.js.map +1 -1
- package/dist/FootIk.d.ts +50 -0
- package/dist/FootIk.d.ts.map +1 -1
- package/dist/FootIk.js +224 -8
- package/dist/FootIk.js.map +1 -1
- package/dist/HumanoidRetargeting.d.ts +6 -2
- package/dist/HumanoidRetargeting.d.ts.map +1 -1
- package/dist/HumanoidRetargeting.js +18 -8
- package/dist/HumanoidRetargeting.js.map +1 -1
- package/dist/IK.d.ts +26 -0
- package/dist/IK.d.ts.map +1 -1
- package/dist/IK.js +515 -0
- package/dist/IK.js.map +1 -1
- package/dist/Keyframe.d.ts.map +1 -1
- package/dist/Keyframe.js +13 -12
- package/dist/Keyframe.js.map +1 -1
- package/dist/LocomotionEvidence.d.ts +34 -0
- package/dist/LocomotionEvidence.d.ts.map +1 -0
- package/dist/LocomotionEvidence.js +48 -0
- package/dist/LocomotionEvidence.js.map +1 -0
- package/dist/RootMotion.d.ts +13 -4
- package/dist/RootMotion.d.ts.map +1 -1
- package/dist/RootMotion.js +21 -1
- package/dist/RootMotion.js.map +1 -1
- package/dist/SpringBones.d.ts +80 -0
- package/dist/SpringBones.d.ts.map +1 -1
- package/dist/SpringBones.js +593 -49
- package/dist/SpringBones.js.map +1 -1
- package/dist/browser-index.d.ts +1 -1
- package/dist/browser-index.d.ts.map +1 -1
- package/dist/browser-index.js +1 -1
- package/dist/browser-index.js.map +1 -1
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +7 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/pose.d.ts +25 -0
- package/dist/contracts/pose.d.ts.map +1 -0
- package/dist/contracts/pose.js +41 -0
- package/dist/contracts/pose.js.map +1 -0
- package/dist/experimental/CrowdAnimation.d.ts +13 -0
- package/dist/experimental/CrowdAnimation.d.ts.map +1 -0
- package/dist/experimental/CrowdAnimation.js +14 -0
- package/dist/experimental/CrowdAnimation.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/lanes/index.d.ts +17 -0
- package/dist/lanes/index.d.ts.map +1 -0
- package/dist/lanes/index.js +17 -0
- package/dist/lanes/index.js.map +1 -0
- package/dist/lanes/prd01.d.ts +6 -0
- package/dist/lanes/prd01.d.ts.map +1 -0
- package/dist/lanes/prd01.js +6 -0
- package/dist/lanes/prd01.js.map +1 -0
- package/dist/lanes/prd02.d.ts +6 -0
- package/dist/lanes/prd02.d.ts.map +1 -0
- package/dist/lanes/prd02.js +6 -0
- package/dist/lanes/prd02.js.map +1 -0
- package/dist/lanes/prd03.d.ts +6 -0
- package/dist/lanes/prd03.d.ts.map +1 -0
- package/dist/lanes/prd03.js +6 -0
- package/dist/lanes/prd03.js.map +1 -0
- package/dist/lanes/prd04.d.ts +6 -0
- package/dist/lanes/prd04.d.ts.map +1 -0
- package/dist/lanes/prd04.js +6 -0
- package/dist/lanes/prd04.js.map +1 -0
- package/dist/lanes/prd05.d.ts +6 -0
- package/dist/lanes/prd05.d.ts.map +1 -0
- package/dist/lanes/prd05.js +6 -0
- package/dist/lanes/prd05.js.map +1 -0
- package/dist/lanes/prd06.d.ts +37 -0
- package/dist/lanes/prd06.d.ts.map +1 -0
- package/dist/lanes/prd06.js +26 -0
- package/dist/lanes/prd06.js.map +1 -0
- package/dist/lanes/prd07.d.ts +6 -0
- package/dist/lanes/prd07.d.ts.map +1 -0
- package/dist/lanes/prd07.js +6 -0
- package/dist/lanes/prd07.js.map +1 -0
- package/dist/lanes/prd08.d.ts +6 -0
- package/dist/lanes/prd08.d.ts.map +1 -0
- package/dist/lanes/prd08.js +6 -0
- package/dist/lanes/prd08.js.map +1 -0
- package/dist/lanes/prd09.d.ts +6 -0
- package/dist/lanes/prd09.d.ts.map +1 -0
- package/dist/lanes/prd09.js +6 -0
- package/dist/lanes/prd09.js.map +1 -0
- package/dist/lanes/prd10.d.ts +6 -0
- package/dist/lanes/prd10.d.ts.map +1 -0
- package/dist/lanes/prd10.js +6 -0
- package/dist/lanes/prd10.js.map +1 -0
- package/dist/lanes/prd11.d.ts +6 -0
- package/dist/lanes/prd11.d.ts.map +1 -0
- package/dist/lanes/prd11.js +6 -0
- package/dist/lanes/prd11.js.map +1 -0
- package/dist/lanes/prd12.d.ts +6 -0
- package/dist/lanes/prd12.d.ts.map +1 -0
- package/dist/lanes/prd12.js +6 -0
- package/dist/lanes/prd12.js.map +1 -0
- package/dist/lanes/prd13.d.ts +6 -0
- package/dist/lanes/prd13.d.ts.map +1 -0
- package/dist/lanes/prd13.js +6 -0
- package/dist/lanes/prd13.js.map +1 -0
- package/dist/lanes/prd14.d.ts +6 -0
- package/dist/lanes/prd14.d.ts.map +1 -0
- package/dist/lanes/prd14.js +6 -0
- package/dist/lanes/prd14.js.map +1 -0
- package/dist/lanes/prd15.d.ts +6 -0
- package/dist/lanes/prd15.d.ts.map +1 -0
- package/dist/lanes/prd15.js +6 -0
- package/dist/lanes/prd15.js.map +1 -0
- package/dist/pose/BoneMask.d.ts +39 -0
- package/dist/pose/BoneMask.d.ts.map +1 -0
- package/dist/pose/BoneMask.js +160 -0
- package/dist/pose/BoneMask.js.map +1 -0
- package/dist/pose/CcdIkConstraint.d.ts +38 -0
- package/dist/pose/CcdIkConstraint.d.ts.map +1 -0
- package/dist/pose/CcdIkConstraint.js +198 -0
- package/dist/pose/CcdIkConstraint.js.map +1 -0
- package/dist/pose/CompiledClip.d.ts +48 -0
- package/dist/pose/CompiledClip.d.ts.map +1 -0
- package/dist/pose/CompiledClip.js +209 -0
- package/dist/pose/CompiledClip.js.map +1 -0
- package/dist/pose/LookAtConstraint.d.ts +48 -0
- package/dist/pose/LookAtConstraint.d.ts.map +1 -0
- package/dist/pose/LookAtConstraint.js +251 -0
- package/dist/pose/LookAtConstraint.js.map +1 -0
- package/dist/pose/MotionMetrics.d.ts +136 -0
- package/dist/pose/MotionMetrics.d.ts.map +1 -0
- package/dist/pose/MotionMetrics.js +253 -0
- package/dist/pose/MotionMetrics.js.map +1 -0
- package/dist/pose/PoseBuffer.d.ts +23 -0
- package/dist/pose/PoseBuffer.d.ts.map +1 -0
- package/dist/pose/PoseBuffer.js +48 -0
- package/dist/pose/PoseBuffer.js.map +1 -0
- package/dist/pose/PoseInertializer.d.ts +38 -0
- package/dist/pose/PoseInertializer.d.ts.map +1 -0
- package/dist/pose/PoseInertializer.js +208 -0
- package/dist/pose/PoseInertializer.js.map +1 -0
- package/dist/pose/PoseMixer.d.ts +256 -0
- package/dist/pose/PoseMixer.d.ts.map +1 -0
- package/dist/pose/PoseMixer.js +848 -0
- package/dist/pose/PoseMixer.js.map +1 -0
- package/dist/pose/Retarget.d.ts +77 -0
- package/dist/pose/Retarget.d.ts.map +1 -0
- package/dist/pose/Retarget.js +378 -0
- package/dist/pose/Retarget.js.map +1 -0
- package/dist/pose/RetargetCache.d.ts +21 -0
- package/dist/pose/RetargetCache.d.ts.map +1 -0
- package/dist/pose/RetargetCache.js +102 -0
- package/dist/pose/RetargetCache.js.map +1 -0
- package/dist/pose/RetargetWorker.d.ts +21 -0
- package/dist/pose/RetargetWorker.d.ts.map +1 -0
- package/dist/pose/RetargetWorker.js +56 -0
- package/dist/pose/RetargetWorker.js.map +1 -0
- package/dist/pose/SkeletonBinding.d.ts +55 -0
- package/dist/pose/SkeletonBinding.d.ts.map +1 -0
- package/dist/pose/SkeletonBinding.js +62 -0
- package/dist/pose/SkeletonBinding.js.map +1 -0
- package/dist/pose/blendKernels.d.ts +32 -0
- package/dist/pose/blendKernels.d.ts.map +1 -0
- package/dist/pose/blendKernels.js +101 -0
- package/dist/pose/blendKernels.js.map +1 -0
- package/dist/pose/makeClipAdditive.d.ts +22 -0
- package/dist/pose/makeClipAdditive.d.ts.map +1 -0
- package/dist/pose/makeClipAdditive.js +101 -0
- package/dist/pose/makeClipAdditive.js.map +1 -0
- package/dist/pose/poseMixerFlags.d.ts +18 -0
- package/dist/pose/poseMixerFlags.d.ts.map +1 -0
- package/dist/pose/poseMixerFlags.js +30 -0
- package/dist/pose/poseMixerFlags.js.map +1 -0
- package/dist/pose/quatFlat.d.ts +16 -0
- package/dist/pose/quatFlat.d.ts.map +1 -0
- package/dist/pose/quatFlat.js +88 -0
- package/dist/pose/quatFlat.js.map +1 -0
- package/dist/pose/retarget.worker.d.ts +25 -0
- package/dist/pose/retarget.worker.d.ts.map +1 -0
- package/dist/pose/retarget.worker.js +22 -0
- package/dist/pose/retarget.worker.js.map +1 -0
- package/package.json +14 -2
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import type { AnimationClip } from "../AnimationClip.js";
|
|
2
|
+
import { type AnimationClipEvent, type AnimationClipEventInvocation } from "../AnimationClipEvents.js";
|
|
3
|
+
import { type CompiledClip, type CompiledTrackCursor } from "./CompiledClip.js";
|
|
4
|
+
import type { PoseBuffer } from "./PoseBuffer.js";
|
|
5
|
+
import type { SkeletonBinding } from "./SkeletonBinding.js";
|
|
6
|
+
import type { PoseInertializer } from "./PoseInertializer.js";
|
|
7
|
+
/**
|
|
8
|
+
* PRD-06 T1.3 — one pose authority implementing §6.4 blend semantics with
|
|
9
|
+
* three.js r185 `AnimationMixer`/`PropertyMixer` parity (within 1e-4):
|
|
10
|
+
*
|
|
11
|
+
* - Base layer accumulates in action-activation order:
|
|
12
|
+
* `acc = mix(acc, vᵢ, wᵢ/(w₀+…+wᵢ))` — quats via `slerpFlat`, others lerp —
|
|
13
|
+
* then `out = lerp(acc, rest, 1 − min(1, Σw))` when Σw < 1.
|
|
14
|
+
* - Override layers: `out[b] = slerp(out[b], layer[b], weight·mask[b])`.
|
|
15
|
+
* - Additive layers: rotations `out = slerp(out, out·delta, w)`; translations
|
|
16
|
+
* and scales `out += delta·w` (matches `makeClipAdditive`/`_lerpAdditive`).
|
|
17
|
+
* - Fades and crossfade warp use linear interpolants on mixer time (r185
|
|
18
|
+
* `_scheduleFading`/`warp`); `crossFadeTo` maps to `crossFadeFrom`.
|
|
19
|
+
* - `syncGroup` is the Aura extension: members share normalised phase
|
|
20
|
+
* (leader-driven) — three r185 has no equivalent.
|
|
21
|
+
* - `transition: "inertialize"` captures offsets via `PoseInertializer` and
|
|
22
|
+
* decays them instead of weight-fading (cost ≈ 1 clip evaluation).
|
|
23
|
+
*
|
|
24
|
+
* Events are emitted through `AnimationClipEvents.ts` `sampleClipEvents`.
|
|
25
|
+
*/
|
|
26
|
+
export type PoseChannel = "position" | "rotation" | "scale";
|
|
27
|
+
export type PoseLoopMode = "repeat" | "once" | "pingpong";
|
|
28
|
+
export type PoseBlendMode = "normal" | "additive";
|
|
29
|
+
export type PoseTransition = "crossfade" | "inertialize";
|
|
30
|
+
type TrackBinding = {
|
|
31
|
+
readonly trackIndex: number;
|
|
32
|
+
readonly boneIndex: number;
|
|
33
|
+
readonly channel: PoseChannel;
|
|
34
|
+
};
|
|
35
|
+
export type PoseActionOptions = {
|
|
36
|
+
readonly weight?: number;
|
|
37
|
+
readonly timeScale?: number;
|
|
38
|
+
readonly loopMode?: PoseLoopMode;
|
|
39
|
+
readonly repetitions?: number;
|
|
40
|
+
readonly clampWhenFinished?: boolean;
|
|
41
|
+
readonly additive?: boolean;
|
|
42
|
+
readonly syncGroup?: string;
|
|
43
|
+
};
|
|
44
|
+
export type PoseCrossFadeOptions = {
|
|
45
|
+
readonly warp?: boolean;
|
|
46
|
+
readonly transition?: PoseTransition;
|
|
47
|
+
readonly halfLife?: number;
|
|
48
|
+
readonly syncGroup?: string;
|
|
49
|
+
/** Forwarded to the fade-in action (C-19 `animation.weight`/`blendMode: "additive"`). */
|
|
50
|
+
readonly weight?: number;
|
|
51
|
+
readonly additive?: boolean;
|
|
52
|
+
};
|
|
53
|
+
export type PoseLayerOptions = PoseActionOptions & {
|
|
54
|
+
readonly mask?: Float32Array;
|
|
55
|
+
};
|
|
56
|
+
export declare class PoseAction {
|
|
57
|
+
readonly mixer: PoseMixer;
|
|
58
|
+
readonly clipName: string;
|
|
59
|
+
readonly clip: CompiledClip;
|
|
60
|
+
readonly bindings: readonly TrackBinding[];
|
|
61
|
+
readonly cursors: CompiledTrackCursor;
|
|
62
|
+
readonly additive: boolean;
|
|
63
|
+
weight: number;
|
|
64
|
+
timeScale: number;
|
|
65
|
+
time: number;
|
|
66
|
+
playing: boolean;
|
|
67
|
+
paused: boolean;
|
|
68
|
+
enabled: boolean;
|
|
69
|
+
loopMode: PoseLoopMode;
|
|
70
|
+
repetitions: number;
|
|
71
|
+
clampWhenFinished: boolean;
|
|
72
|
+
syncGroupName: string | null;
|
|
73
|
+
private pingPongForward;
|
|
74
|
+
private loopCount;
|
|
75
|
+
private fade;
|
|
76
|
+
private warpState;
|
|
77
|
+
private restoreTimeScale;
|
|
78
|
+
effectiveWeight: number;
|
|
79
|
+
effectiveTimeScale: number;
|
|
80
|
+
constructor(mixer: PoseMixer, clipName: string, clip: CompiledClip, options?: PoseActionOptions);
|
|
81
|
+
play(): this;
|
|
82
|
+
stop(): this;
|
|
83
|
+
pause(): this;
|
|
84
|
+
setEffectiveWeight(weight: number): this;
|
|
85
|
+
setEffectiveTimeScale(timeScale: number): this;
|
|
86
|
+
setLoop(mode: PoseLoopMode, repetitions?: number): this;
|
|
87
|
+
/** three r185 syncWith: copy time + timeScale and stop any warping. */
|
|
88
|
+
syncWith(other: PoseAction): this;
|
|
89
|
+
fadeIn(duration: number): this;
|
|
90
|
+
fadeOut(duration: number): this;
|
|
91
|
+
fadeTo(weight: number, duration: number): this;
|
|
92
|
+
/** three r185 warp: multiplicative timescale interpolant over mixer time (values = start/base → end/base). */
|
|
93
|
+
warp(startTimeScale: number, endTimeScale: number, duration: number): this;
|
|
94
|
+
stopWarping(): this;
|
|
95
|
+
stopFading(): this;
|
|
96
|
+
/** three r185 crossFadeFrom(this=fadeIn, fadeOut, duration, warp). */
|
|
97
|
+
crossFadeFrom(fadeOutAction: PoseAction, duration: number, warp?: boolean): this;
|
|
98
|
+
crossFadeTo(fadeInAction: PoseAction, duration: number, warp?: boolean): PoseAction;
|
|
99
|
+
get normalizedPhase(): number;
|
|
100
|
+
private scheduleFade;
|
|
101
|
+
/** Effective weight at mixer.time, per r185 `_updateWeight`. */
|
|
102
|
+
updateWeight(now: number): number;
|
|
103
|
+
/** Effective timescale at mixer.time, per r185 `_updateTimeScale`. */
|
|
104
|
+
updateTimeScale(now: number): number;
|
|
105
|
+
/** Advance clip time per r185 `_updateTime`; returns {wrapped, finished}. */
|
|
106
|
+
updateTime(deltaTime: number): {
|
|
107
|
+
wrapped: boolean;
|
|
108
|
+
finished: boolean;
|
|
109
|
+
previous: number;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export type PoseLayer = {
|
|
113
|
+
readonly name: string;
|
|
114
|
+
readonly blendMode: "override" | "additive";
|
|
115
|
+
readonly mask: Float32Array | null;
|
|
116
|
+
weight: number;
|
|
117
|
+
readonly actions: PoseAction[];
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Stateless blend spec for `evaluateSamples`: a clip sampled at an explicit
|
|
121
|
+
* time with a weight, optional additive flag and optional per-bone weight
|
|
122
|
+
* mask (aligned with `skeleton.jointNames`). No PoseAction is created or
|
|
123
|
+
* mutated — this is the per-runtime "one-shot blend" mode T1.7 builds
|
|
124
|
+
* `applyClips` on.
|
|
125
|
+
*/
|
|
126
|
+
export type PoseSampleSpec = {
|
|
127
|
+
readonly clipName: string;
|
|
128
|
+
readonly time: number;
|
|
129
|
+
readonly weight?: number;
|
|
130
|
+
readonly additive?: boolean;
|
|
131
|
+
readonly mask?: Float32Array | null;
|
|
132
|
+
};
|
|
133
|
+
export declare class PoseMixer {
|
|
134
|
+
readonly skeleton: SkeletonBinding;
|
|
135
|
+
readonly inertializer: PoseInertializer | null;
|
|
136
|
+
time: number;
|
|
137
|
+
private timeScale;
|
|
138
|
+
private readonly clips;
|
|
139
|
+
private readonly actions;
|
|
140
|
+
private readonly layers;
|
|
141
|
+
private readonly layerByName;
|
|
142
|
+
private readonly eventListeners;
|
|
143
|
+
private latestPose;
|
|
144
|
+
private previousPose;
|
|
145
|
+
private inertializerElapsed;
|
|
146
|
+
private inertializerHalfLife;
|
|
147
|
+
private scratchClip;
|
|
148
|
+
private readonly accWeight;
|
|
149
|
+
private readonly addWeight;
|
|
150
|
+
private readonly addQuat;
|
|
151
|
+
private readonly addVec;
|
|
152
|
+
private readonly accTouched;
|
|
153
|
+
private readonly addTouched;
|
|
154
|
+
private accTouchedCount;
|
|
155
|
+
private addTouchedCount;
|
|
156
|
+
constructor(options: {
|
|
157
|
+
skeleton: SkeletonBinding;
|
|
158
|
+
inertializer?: PoseInertializer;
|
|
159
|
+
});
|
|
160
|
+
private resetAccumulators;
|
|
161
|
+
setEffectiveTimeScale(timeScale: number): this;
|
|
162
|
+
get effectiveTimeScale(): number;
|
|
163
|
+
/** Register a clip under a name (compiles it for flat sampling). */
|
|
164
|
+
addClip(name: string, clip: AnimationClip): this;
|
|
165
|
+
/** Register a pre-compiled clip (returns undefined if unknown). */
|
|
166
|
+
addCompiledClip(name: string, compiled: CompiledClip, source: AnimationClip): this;
|
|
167
|
+
sourceClip(name: string): AnimationClip | undefined;
|
|
168
|
+
clipAction(name: string, options?: PoseActionOptions): PoseAction;
|
|
169
|
+
/** three r185 play: activate + begin (starts faded-in when `crossFade`). */
|
|
170
|
+
play(name: string, options?: PoseActionOptions): PoseAction;
|
|
171
|
+
/**
|
|
172
|
+
* Every currently-playing, enabled action across the base layer and named
|
|
173
|
+
* layers — the set `update`/`evaluate` will contribute this frame (T1.9
|
|
174
|
+
* uses it to sample non-pose tracks at each action's own clock/weight and
|
|
175
|
+
* to compute covered-bone sets for `restPoseReset: false`).
|
|
176
|
+
*/
|
|
177
|
+
activeActions(): readonly PoseAction[];
|
|
178
|
+
/** The active base (non-additive, base-layer) action, or null when none plays. */
|
|
179
|
+
baseAction(): PoseAction | null;
|
|
180
|
+
/**
|
|
181
|
+
* Same active set as {@link activeActions} annotated with the owning layer
|
|
182
|
+
* name — `""` for the base layer — for `animationState()` snapshots (C-37).
|
|
183
|
+
*/
|
|
184
|
+
activeActionEntries(): readonly {
|
|
185
|
+
readonly action: PoseAction;
|
|
186
|
+
readonly layer: string;
|
|
187
|
+
}[];
|
|
188
|
+
/**
|
|
189
|
+
* `crossFadeTo(clip, seconds, options)` — mirrors `node.play` semantics:
|
|
190
|
+
* the current active base action fades out over `seconds` (default driven by
|
|
191
|
+
* caller), the new one fades in; `warp` warps timescales by the duration
|
|
192
|
+
* ratio; `transition: "inertialize"` captures pose offsets instead.
|
|
193
|
+
*/
|
|
194
|
+
crossFadeTo(name: string, seconds: number, options?: PoseCrossFadeOptions): PoseAction;
|
|
195
|
+
private activeBaseAction;
|
|
196
|
+
/** Layer API (C-19 playLayer/stopLayer groundwork). */
|
|
197
|
+
playLayer(layerName: string, clipName: string, options?: PoseLayerOptions & {
|
|
198
|
+
blendMode?: "override" | "additive";
|
|
199
|
+
weight?: number;
|
|
200
|
+
}): PoseAction;
|
|
201
|
+
stopLayer(layerName: string, fadeSeconds?: number): void;
|
|
202
|
+
onEvent(listener: (invocation: AnimationClipEventInvocation<AnimationClipEvent, string>) => void): () => void;
|
|
203
|
+
activate(action: PoseAction): void;
|
|
204
|
+
deactivate(action: PoseAction): void;
|
|
205
|
+
/** Resolve `CompiledClip` node-path targets to skeleton bone indices. */
|
|
206
|
+
resolveBindings(clip: CompiledClip): TrackBinding[];
|
|
207
|
+
private readonly statelessBindings;
|
|
208
|
+
private readonly statelessCursors;
|
|
209
|
+
private statelessBindingsFor;
|
|
210
|
+
private statelessCursorsFor;
|
|
211
|
+
private lastDt;
|
|
212
|
+
/**
|
|
213
|
+
* Advance mixer time by `dt` (× mixer timescale), update all actions'
|
|
214
|
+
* times/weights, and emit clip events between old and new action times.
|
|
215
|
+
*/
|
|
216
|
+
update(dt: number): AnimationClipEventInvocation<AnimationClipEvent, string>[];
|
|
217
|
+
/**
|
|
218
|
+
* Evaluate the final pose into `out` (PoseBuffer with skeleton.boneCount
|
|
219
|
+
* bones). Starts from `skeleton.restPose`, applies the base layer
|
|
220
|
+
* (incremental-weighted, rest fills below Σw=1), then each layer in order.
|
|
221
|
+
*/
|
|
222
|
+
evaluate(out: PoseBuffer): void;
|
|
223
|
+
/**
|
|
224
|
+
* Stateless one-shot blend (T1.7): evaluate the given clips at explicit
|
|
225
|
+
* times with explicit weights and write the result into `out`. No
|
|
226
|
+
* PoseAction is created or mutated; action/layer/inertializer state is
|
|
227
|
+
* untouched. Same accumulate + rest-fill + additive pipeline as
|
|
228
|
+
* `evaluate`, so the two paths stay within the 1e-4 parity bar.
|
|
229
|
+
*/
|
|
230
|
+
evaluateSamples(samples: readonly PoseSampleSpec[], out: PoseBuffer): void;
|
|
231
|
+
private applyBase;
|
|
232
|
+
private applyLayer;
|
|
233
|
+
private accuKey;
|
|
234
|
+
/** Base-layer incremental accumulate: `acc = mix(acc, v, w/(Σ+w))`, then rest. */
|
|
235
|
+
private accumulate;
|
|
236
|
+
/** r185 `accumulateAdditive`: quats chain-multiply `add = slerp(add, add·delta, w)`; vecs `add += delta·w`. */
|
|
237
|
+
private accumulateAdditiveAccu;
|
|
238
|
+
/** r185 `apply` additive stage: `accu = slerp(accu, accu·add, 1)` / `accu += add`. */
|
|
239
|
+
private applyAdditiveAccumulators;
|
|
240
|
+
/** After base accumulate: fill below-1 remainder from rest pose. Call once per channel per evaluate. */
|
|
241
|
+
private applyRestFill;
|
|
242
|
+
private writeSample;
|
|
243
|
+
private mixInPlace;
|
|
244
|
+
/**
|
|
245
|
+
* Override layer: `out[b] = slerp(out[b], layer[b], w)` — applied to whatever
|
|
246
|
+
* the base produced (which may itself be rest-blended).
|
|
247
|
+
*/
|
|
248
|
+
private applyOverride;
|
|
249
|
+
/**
|
|
250
|
+
* Additive: quats `out = slerp(out, out·delta, w)`; positions and scales
|
|
251
|
+
* `out += delta·w` (r185 `_slerpAdditive`/`_lerpAdditive`).
|
|
252
|
+
*/
|
|
253
|
+
private accumulateAdditive;
|
|
254
|
+
}
|
|
255
|
+
export {};
|
|
256
|
+
//# sourceMappingURL=PoseMixer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PoseMixer.d.ts","sourceRoot":"","sources":["../../../../../packages/animation/src/pose/PoseMixer.ts"],"names":[],"mappings":"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"}
|