@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.
Files changed (188) hide show
  1. package/dist/AnimationController.d.ts +8 -0
  2. package/dist/AnimationController.d.ts.map +1 -1
  3. package/dist/AnimationController.js +93 -0
  4. package/dist/AnimationController.js.map +1 -1
  5. package/dist/AnimationMixer.d.ts +4 -1
  6. package/dist/AnimationMixer.d.ts.map +1 -1
  7. package/dist/AnimationMixer.js +47 -29
  8. package/dist/AnimationMixer.js.map +1 -1
  9. package/dist/FootIk.d.ts +50 -0
  10. package/dist/FootIk.d.ts.map +1 -1
  11. package/dist/FootIk.js +224 -8
  12. package/dist/FootIk.js.map +1 -1
  13. package/dist/HumanoidRetargeting.d.ts +6 -2
  14. package/dist/HumanoidRetargeting.d.ts.map +1 -1
  15. package/dist/HumanoidRetargeting.js +18 -8
  16. package/dist/HumanoidRetargeting.js.map +1 -1
  17. package/dist/IK.d.ts +26 -0
  18. package/dist/IK.d.ts.map +1 -1
  19. package/dist/IK.js +515 -0
  20. package/dist/IK.js.map +1 -1
  21. package/dist/Keyframe.d.ts.map +1 -1
  22. package/dist/Keyframe.js +13 -12
  23. package/dist/Keyframe.js.map +1 -1
  24. package/dist/LocomotionEvidence.d.ts +34 -0
  25. package/dist/LocomotionEvidence.d.ts.map +1 -0
  26. package/dist/LocomotionEvidence.js +48 -0
  27. package/dist/LocomotionEvidence.js.map +1 -0
  28. package/dist/RootMotion.d.ts +13 -4
  29. package/dist/RootMotion.d.ts.map +1 -1
  30. package/dist/RootMotion.js +21 -1
  31. package/dist/RootMotion.js.map +1 -1
  32. package/dist/SpringBones.d.ts +80 -0
  33. package/dist/SpringBones.d.ts.map +1 -1
  34. package/dist/SpringBones.js +593 -49
  35. package/dist/SpringBones.js.map +1 -1
  36. package/dist/browser-index.d.ts +1 -1
  37. package/dist/browser-index.d.ts.map +1 -1
  38. package/dist/browser-index.js +1 -1
  39. package/dist/browser-index.js.map +1 -1
  40. package/dist/contracts/index.d.ts +2 -0
  41. package/dist/contracts/index.d.ts.map +1 -0
  42. package/dist/contracts/index.js +7 -0
  43. package/dist/contracts/index.js.map +1 -0
  44. package/dist/contracts/pose.d.ts +25 -0
  45. package/dist/contracts/pose.d.ts.map +1 -0
  46. package/dist/contracts/pose.js +41 -0
  47. package/dist/contracts/pose.js.map +1 -0
  48. package/dist/experimental/CrowdAnimation.d.ts +13 -0
  49. package/dist/experimental/CrowdAnimation.d.ts.map +1 -0
  50. package/dist/experimental/CrowdAnimation.js +14 -0
  51. package/dist/experimental/CrowdAnimation.js.map +1 -0
  52. package/dist/index.d.ts +2 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/lanes/index.d.ts +17 -0
  57. package/dist/lanes/index.d.ts.map +1 -0
  58. package/dist/lanes/index.js +17 -0
  59. package/dist/lanes/index.js.map +1 -0
  60. package/dist/lanes/prd01.d.ts +6 -0
  61. package/dist/lanes/prd01.d.ts.map +1 -0
  62. package/dist/lanes/prd01.js +6 -0
  63. package/dist/lanes/prd01.js.map +1 -0
  64. package/dist/lanes/prd02.d.ts +6 -0
  65. package/dist/lanes/prd02.d.ts.map +1 -0
  66. package/dist/lanes/prd02.js +6 -0
  67. package/dist/lanes/prd02.js.map +1 -0
  68. package/dist/lanes/prd03.d.ts +6 -0
  69. package/dist/lanes/prd03.d.ts.map +1 -0
  70. package/dist/lanes/prd03.js +6 -0
  71. package/dist/lanes/prd03.js.map +1 -0
  72. package/dist/lanes/prd04.d.ts +6 -0
  73. package/dist/lanes/prd04.d.ts.map +1 -0
  74. package/dist/lanes/prd04.js +6 -0
  75. package/dist/lanes/prd04.js.map +1 -0
  76. package/dist/lanes/prd05.d.ts +6 -0
  77. package/dist/lanes/prd05.d.ts.map +1 -0
  78. package/dist/lanes/prd05.js +6 -0
  79. package/dist/lanes/prd05.js.map +1 -0
  80. package/dist/lanes/prd06.d.ts +37 -0
  81. package/dist/lanes/prd06.d.ts.map +1 -0
  82. package/dist/lanes/prd06.js +26 -0
  83. package/dist/lanes/prd06.js.map +1 -0
  84. package/dist/lanes/prd07.d.ts +6 -0
  85. package/dist/lanes/prd07.d.ts.map +1 -0
  86. package/dist/lanes/prd07.js +6 -0
  87. package/dist/lanes/prd07.js.map +1 -0
  88. package/dist/lanes/prd08.d.ts +6 -0
  89. package/dist/lanes/prd08.d.ts.map +1 -0
  90. package/dist/lanes/prd08.js +6 -0
  91. package/dist/lanes/prd08.js.map +1 -0
  92. package/dist/lanes/prd09.d.ts +6 -0
  93. package/dist/lanes/prd09.d.ts.map +1 -0
  94. package/dist/lanes/prd09.js +6 -0
  95. package/dist/lanes/prd09.js.map +1 -0
  96. package/dist/lanes/prd10.d.ts +6 -0
  97. package/dist/lanes/prd10.d.ts.map +1 -0
  98. package/dist/lanes/prd10.js +6 -0
  99. package/dist/lanes/prd10.js.map +1 -0
  100. package/dist/lanes/prd11.d.ts +6 -0
  101. package/dist/lanes/prd11.d.ts.map +1 -0
  102. package/dist/lanes/prd11.js +6 -0
  103. package/dist/lanes/prd11.js.map +1 -0
  104. package/dist/lanes/prd12.d.ts +6 -0
  105. package/dist/lanes/prd12.d.ts.map +1 -0
  106. package/dist/lanes/prd12.js +6 -0
  107. package/dist/lanes/prd12.js.map +1 -0
  108. package/dist/lanes/prd13.d.ts +6 -0
  109. package/dist/lanes/prd13.d.ts.map +1 -0
  110. package/dist/lanes/prd13.js +6 -0
  111. package/dist/lanes/prd13.js.map +1 -0
  112. package/dist/lanes/prd14.d.ts +6 -0
  113. package/dist/lanes/prd14.d.ts.map +1 -0
  114. package/dist/lanes/prd14.js +6 -0
  115. package/dist/lanes/prd14.js.map +1 -0
  116. package/dist/lanes/prd15.d.ts +6 -0
  117. package/dist/lanes/prd15.d.ts.map +1 -0
  118. package/dist/lanes/prd15.js +6 -0
  119. package/dist/lanes/prd15.js.map +1 -0
  120. package/dist/pose/BoneMask.d.ts +39 -0
  121. package/dist/pose/BoneMask.d.ts.map +1 -0
  122. package/dist/pose/BoneMask.js +160 -0
  123. package/dist/pose/BoneMask.js.map +1 -0
  124. package/dist/pose/CcdIkConstraint.d.ts +38 -0
  125. package/dist/pose/CcdIkConstraint.d.ts.map +1 -0
  126. package/dist/pose/CcdIkConstraint.js +198 -0
  127. package/dist/pose/CcdIkConstraint.js.map +1 -0
  128. package/dist/pose/CompiledClip.d.ts +48 -0
  129. package/dist/pose/CompiledClip.d.ts.map +1 -0
  130. package/dist/pose/CompiledClip.js +209 -0
  131. package/dist/pose/CompiledClip.js.map +1 -0
  132. package/dist/pose/LookAtConstraint.d.ts +48 -0
  133. package/dist/pose/LookAtConstraint.d.ts.map +1 -0
  134. package/dist/pose/LookAtConstraint.js +251 -0
  135. package/dist/pose/LookAtConstraint.js.map +1 -0
  136. package/dist/pose/MotionMetrics.d.ts +136 -0
  137. package/dist/pose/MotionMetrics.d.ts.map +1 -0
  138. package/dist/pose/MotionMetrics.js +253 -0
  139. package/dist/pose/MotionMetrics.js.map +1 -0
  140. package/dist/pose/PoseBuffer.d.ts +23 -0
  141. package/dist/pose/PoseBuffer.d.ts.map +1 -0
  142. package/dist/pose/PoseBuffer.js +48 -0
  143. package/dist/pose/PoseBuffer.js.map +1 -0
  144. package/dist/pose/PoseInertializer.d.ts +38 -0
  145. package/dist/pose/PoseInertializer.d.ts.map +1 -0
  146. package/dist/pose/PoseInertializer.js +208 -0
  147. package/dist/pose/PoseInertializer.js.map +1 -0
  148. package/dist/pose/PoseMixer.d.ts +256 -0
  149. package/dist/pose/PoseMixer.d.ts.map +1 -0
  150. package/dist/pose/PoseMixer.js +848 -0
  151. package/dist/pose/PoseMixer.js.map +1 -0
  152. package/dist/pose/Retarget.d.ts +77 -0
  153. package/dist/pose/Retarget.d.ts.map +1 -0
  154. package/dist/pose/Retarget.js +378 -0
  155. package/dist/pose/Retarget.js.map +1 -0
  156. package/dist/pose/RetargetCache.d.ts +21 -0
  157. package/dist/pose/RetargetCache.d.ts.map +1 -0
  158. package/dist/pose/RetargetCache.js +102 -0
  159. package/dist/pose/RetargetCache.js.map +1 -0
  160. package/dist/pose/RetargetWorker.d.ts +21 -0
  161. package/dist/pose/RetargetWorker.d.ts.map +1 -0
  162. package/dist/pose/RetargetWorker.js +56 -0
  163. package/dist/pose/RetargetWorker.js.map +1 -0
  164. package/dist/pose/SkeletonBinding.d.ts +55 -0
  165. package/dist/pose/SkeletonBinding.d.ts.map +1 -0
  166. package/dist/pose/SkeletonBinding.js +62 -0
  167. package/dist/pose/SkeletonBinding.js.map +1 -0
  168. package/dist/pose/blendKernels.d.ts +32 -0
  169. package/dist/pose/blendKernels.d.ts.map +1 -0
  170. package/dist/pose/blendKernels.js +101 -0
  171. package/dist/pose/blendKernels.js.map +1 -0
  172. package/dist/pose/makeClipAdditive.d.ts +22 -0
  173. package/dist/pose/makeClipAdditive.d.ts.map +1 -0
  174. package/dist/pose/makeClipAdditive.js +101 -0
  175. package/dist/pose/makeClipAdditive.js.map +1 -0
  176. package/dist/pose/poseMixerFlags.d.ts +18 -0
  177. package/dist/pose/poseMixerFlags.d.ts.map +1 -0
  178. package/dist/pose/poseMixerFlags.js +30 -0
  179. package/dist/pose/poseMixerFlags.js.map +1 -0
  180. package/dist/pose/quatFlat.d.ts +16 -0
  181. package/dist/pose/quatFlat.d.ts.map +1 -0
  182. package/dist/pose/quatFlat.js +88 -0
  183. package/dist/pose/quatFlat.js.map +1 -0
  184. package/dist/pose/retarget.worker.d.ts +25 -0
  185. package/dist/pose/retarget.worker.d.ts.map +1 -0
  186. package/dist/pose/retarget.worker.js +22 -0
  187. package/dist/pose/retarget.worker.js.map +1 -0
  188. package/package.json +14 -2
package/dist/IK.js CHANGED
@@ -82,4 +82,519 @@ function normalize(value) {
82
82
  function clamp(value, min, max) {
83
83
  return Math.max(min, Math.min(max, value));
84
84
  }
85
+ import { multiplyQuatFlat, normalizeQuatFlat, slerpQuatFlat } from "./pose/quatFlat.js";
86
+ function jointIndex(skeleton, name) {
87
+ const indices = skeleton.jointIndicesByName.get(name);
88
+ if (!indices || indices.length === 0) {
89
+ throw new Error(`solveTwoBoneIkRotations: unknown bone "${name}".`);
90
+ }
91
+ return indices[0];
92
+ }
93
+ /**
94
+ * T3.1 (PRD-06 §7.2): solve a two-bone chain in pose space — writes the local
95
+ * rotations of `spec.root` and `spec.mid` so `spec.tip` reaches `target`
96
+ * (world space). The solve is analytic: `solveTwoBoneIk` places the joints,
97
+ * then the new directions convert back to local rotations with pole-plane and
98
+ * twist distribution handled.
99
+ *
100
+ * - `pole`: "auto" (default) keeps the current bend plane; a world point or
101
+ * `{ bone }` steers the plane through that point/bone.
102
+ * - `weight`: blends between the current pose and the solved pose (0 = no-op).
103
+ * - `twistBone`/`twistWeight`: distributes the plane-alignment twist onto an
104
+ * extra joint (e.g. a forearm twist bone).
105
+ * - `allowStretch`: multiplier > 1 lets the tip reach beyond the limb length.
106
+ */
107
+ // §13 — shared scratch for `solveTwoBoneIkRotations`. Grows once to the
108
+ // largest skeleton seen; a generation mark lets each call reuse the arrays
109
+ // without clearing them.
110
+ const IK_SCRATCH = {
111
+ boneCount: 0,
112
+ pos: new Float32Array(0),
113
+ rot: new Float32Array(0),
114
+ scl: new Float32Array(0),
115
+ mark: new Uint32Array(0),
116
+ gen: 0
117
+ };
118
+ const ikQuatScratchA = new Float32Array(4);
119
+ const ikQuatScratchB = new Float32Array(4);
120
+ const ikQuatScratchC = new Float32Array(4);
121
+ const ikQuatScratchD = new Float32Array(4);
122
+ const ikQuatScratchE = new Float32Array(4);
123
+ const ikQuatScratchF = new Float32Array(4);
124
+ const ikQuatScratchG = new Float32Array(4);
125
+ const ikQuatScratchH = new Float32Array(4);
126
+ const ikQuatScratchI = new Float32Array(4);
127
+ function ikScratch(boneCount) {
128
+ if (boneCount > IK_SCRATCH.boneCount) {
129
+ IK_SCRATCH.boneCount = boneCount;
130
+ IK_SCRATCH.pos = new Float32Array(boneCount * 3);
131
+ IK_SCRATCH.rot = new Float32Array(boneCount * 4);
132
+ IK_SCRATCH.scl = new Float32Array(boneCount * 3);
133
+ IK_SCRATCH.mark = new Uint32Array(boneCount);
134
+ IK_SCRATCH.gen = 0;
135
+ }
136
+ return IK_SCRATCH;
137
+ }
138
+ /** Scalar `quatFromUnitVectors`: minimal-arc rotation `from`→`to` into `out`. */
139
+ function quatFromUnitVectorsInto(out, fx, fy, fz, tx, ty, tz) {
140
+ const d = clamp(fx * tx + fy * ty + fz * tz, -1, 1);
141
+ if (d > 1 - 1e-9) {
142
+ out[0] = 0;
143
+ out[1] = 0;
144
+ out[2] = 0;
145
+ out[3] = 1;
146
+ return;
147
+ }
148
+ if (d < -1 + 1e-9) {
149
+ // 180°: pick any perpendicular axis.
150
+ const ax = Math.abs(fx) < 0.9 ? 1 : 0;
151
+ const ay = Math.abs(fx) < 0.9 ? 0 : 1;
152
+ let cx = fy * 0 - fz * ay;
153
+ let cy = fz * ax - fx * 0;
154
+ let cz = fx * ay - fy * ax;
155
+ const l = Math.hypot(cx, cy, cz) || 1;
156
+ cx /= l;
157
+ cy /= l;
158
+ cz /= l;
159
+ out[0] = cx;
160
+ out[1] = cy;
161
+ out[2] = cz;
162
+ out[3] = 0;
163
+ return;
164
+ }
165
+ const cx = fy * tz - fz * ty;
166
+ const cy = fz * tx - fx * tz;
167
+ const cz = fx * ty - fy * tx;
168
+ const w = Math.sqrt((1 + d) / 2);
169
+ const s = 1 / (2 * w);
170
+ out[0] = cx * s;
171
+ out[1] = cy * s;
172
+ out[2] = cz * s;
173
+ out[3] = w;
174
+ }
175
+ /** Lazy world-frame resolve into IK_SCRATCH — mirrors the removed `jointFrames`. */
176
+ function ikResolveFrame(pose, skeleton, s, gen, index) {
177
+ if (s.mark[index] === gen)
178
+ return;
179
+ const lp = index * 3;
180
+ const lr = index * 4;
181
+ const pPos = pose.positions;
182
+ const pRot = pose.rotations;
183
+ const pScl = pose.scales;
184
+ const parent = skeleton.parentIndices[index] ?? -1;
185
+ if (parent < 0 || parent >= skeleton.boneCount || parent === index) {
186
+ s.pos[lp] = pPos[lp];
187
+ s.pos[lp + 1] = pPos[lp + 1];
188
+ s.pos[lp + 2] = pPos[lp + 2];
189
+ s.rot[lr] = pRot[lr];
190
+ s.rot[lr + 1] = pRot[lr + 1];
191
+ s.rot[lr + 2] = pRot[lr + 2];
192
+ s.rot[lr + 3] = pRot[lr + 3];
193
+ s.scl[lp] = pScl[lp];
194
+ s.scl[lp + 1] = pScl[lp + 1];
195
+ s.scl[lp + 2] = pScl[lp + 2];
196
+ s.mark[index] = gen;
197
+ return;
198
+ }
199
+ ikResolveFrame(pose, skeleton, s, gen, parent);
200
+ const pp = parent * 3;
201
+ const pr = parent * 4;
202
+ const qx = s.rot[pr], qy = s.rot[pr + 1], qz = s.rot[pr + 2], qw = s.rot[pr + 3];
203
+ const sx = pPos[lp] * s.scl[pp];
204
+ const sy = pPos[lp + 1] * s.scl[pp + 1];
205
+ const sz = pPos[lp + 2] * s.scl[pp + 2];
206
+ const ix = qw * sx + qy * sz - qz * sy;
207
+ const iy = qw * sy + qz * sx - qx * sz;
208
+ const iz = qw * sz + qx * sy - qy * sx;
209
+ const iw = -qx * sx - qy * sy - qz * sz;
210
+ s.pos[lp] = s.pos[pp] + (ix * qw + iw * -qx + iy * -qz - iz * -qy);
211
+ s.pos[lp + 1] = s.pos[pp + 1] + (iy * qw + iw * -qy + iz * -qx - ix * -qz);
212
+ s.pos[lp + 2] = s.pos[pp + 2] + (iz * qw + iw * -qz + ix * -qy - iy * -qx);
213
+ multiplyQuatFlat(s.rot, lr, s.rot, pr, pRot, lr);
214
+ normalizeQuatFlat(s.rot, lr);
215
+ s.scl[lp] = s.scl[pp] * pScl[lp];
216
+ s.scl[lp + 1] = s.scl[pp + 1] * pScl[lp + 1];
217
+ s.scl[lp + 2] = s.scl[pp + 2] * pScl[lp + 2];
218
+ s.mark[index] = gen;
219
+ }
220
+ /** Parent's resolved world rotation into `out` (identity at the root). */
221
+ function ikParentRot(pose, skeleton, s, gen, index, out) {
222
+ const parent = skeleton.parentIndices[index] ?? -1;
223
+ if (parent < 0 || parent >= skeleton.boneCount) {
224
+ out[0] = 0;
225
+ out[1] = 0;
226
+ out[2] = 0;
227
+ out[3] = 1;
228
+ return out;
229
+ }
230
+ ikResolveFrame(pose, skeleton, s, gen, parent);
231
+ const pr = parent * 4;
232
+ out[0] = s.rot[pr];
233
+ out[1] = s.rot[pr + 1];
234
+ out[2] = s.rot[pr + 2];
235
+ out[3] = s.rot[pr + 3];
236
+ return out;
237
+ }
238
+ /** Scalar form of the removed `mat3ToQuat` — same sign conventions, writes into `out`. */
239
+ function mat3ToQuatInto(out, m00, m10, m20, m01, m11, m21, m02, m12, m22) {
240
+ const trace = m00 + m11 + m22;
241
+ let x, y, z, w;
242
+ if (trace > 0) {
243
+ const s = 0.5 / Math.sqrt(trace + 1);
244
+ x = (m21 - m12) * s;
245
+ y = (m02 - m20) * s;
246
+ z = (m10 - m01) * s;
247
+ w = 0.25 / s;
248
+ }
249
+ else if (m00 > m11 && m00 > m22) {
250
+ const s = 2 * Math.sqrt(1 + m00 - m11 - m22);
251
+ x = 0.25 * s;
252
+ y = (m01 + m10) / s;
253
+ z = (m02 + m20) / s;
254
+ w = (m21 - m12) / s;
255
+ }
256
+ else if (m11 > m22) {
257
+ const s = 2 * Math.sqrt(1 + m11 - m00 - m22);
258
+ x = (m01 + m10) / s;
259
+ y = 0.25 * s;
260
+ z = (m12 + m21) / s;
261
+ w = (m02 - m20) / s;
262
+ }
263
+ else {
264
+ const s = 2 * Math.sqrt(1 + m22 - m00 - m11);
265
+ x = (m02 + m20) / s;
266
+ y = (m12 + m21) / s;
267
+ z = 0.25 * s;
268
+ w = (m10 - m01) / s;
269
+ }
270
+ const l = Math.sqrt(x * x + y * y + z * z + w * w) || 1;
271
+ out[0] = x / l;
272
+ out[1] = y / l;
273
+ out[2] = z / l;
274
+ out[3] = w / l;
275
+ }
276
+ /** Flat `setLocalRotation`: `local = parent⁻¹·world` slerped into the pose at `weight`. */
277
+ function setLocalRotationFlat(pose, joint, parentRotation, worldRotation, weight) {
278
+ const invP = ikQuatScratchI;
279
+ invP[0] = -parentRotation[0];
280
+ invP[1] = -parentRotation[1];
281
+ invP[2] = -parentRotation[2];
282
+ invP[3] = parentRotation[3];
283
+ const local = ikQuatScratchB;
284
+ multiplyQuatFlat(local, 0, invP, 0, worldRotation, 0);
285
+ normalizeQuatFlat(local, 0);
286
+ const out = ikQuatScratchA;
287
+ slerpQuatFlat(out, 0, pose.rotations, joint * 4, local, 0, weight);
288
+ pose.rotations[joint * 4] = out[0];
289
+ pose.rotations[joint * 4 + 1] = out[1];
290
+ pose.rotations[joint * 4 + 2] = out[2];
291
+ pose.rotations[joint * 4 + 3] = out[3];
292
+ }
293
+ export function solveTwoBoneIkRotations(pose, skeleton, modelMatrix, spec, target) {
294
+ const weight = clamp(spec.weight ?? 1, 0, 1);
295
+ if (weight <= 0)
296
+ return;
297
+ const rootIndex = jointIndex(skeleton, spec.root);
298
+ const midIndex = jointIndex(skeleton, spec.mid);
299
+ const tipIndex = jointIndex(skeleton, spec.tip);
300
+ // §13 — flat scratch + lazy frame resolution: the object-of-arrays
301
+ // `jointFrames` built ~boneCount objects and ~40 array literals per call
302
+ // (~6× over the 2µs two-bone budget). Frames resolve only for the joints
303
+ // this solve touches (chain + ancestors + pole/twist), into grow-once
304
+ // module scratch marked by a generation counter — zero per-call alloc.
305
+ const s = ikScratch(skeleton.boneCount);
306
+ const gen = ++s.gen;
307
+ ikResolveFrame(pose, skeleton, s, gen, rootIndex);
308
+ ikResolveFrame(pose, skeleton, s, gen, midIndex);
309
+ ikResolveFrame(pose, skeleton, s, gen, tipIndex);
310
+ const rp = rootIndex * 3;
311
+ const mp = midIndex * 3;
312
+ const tp = tipIndex * 3;
313
+ const rootX = s.pos[rp], rootY = s.pos[rp + 1], rootZ = s.pos[rp + 2];
314
+ const midX = s.pos[mp], midY = s.pos[mp + 1], midZ = s.pos[mp + 2];
315
+ const tipX = s.pos[tp], tipY = s.pos[tp + 1], tipZ = s.pos[tp + 2];
316
+ // invModel = invertTRS(modelMatrix) → scalars; targetLocal = S⁻¹·Rᵀ·(t − pos).
317
+ const m0c = modelMatrix[0], m1c = modelMatrix[1], m2c = modelMatrix[2];
318
+ const m4c = modelMatrix[4], m5c = modelMatrix[5], m6c = modelMatrix[6];
319
+ const m8c = modelMatrix[8], m9c = modelMatrix[9], m10c = modelMatrix[10];
320
+ const m12c = modelMatrix[12], m13c = modelMatrix[13], m14c = modelMatrix[14];
321
+ const msx = Math.sqrt(m0c * m0c + m1c * m1c + m2c * m2c) || 1;
322
+ const msy = Math.sqrt(m4c * m4c + m5c * m5c + m6c * m6c) || 1;
323
+ const msz = Math.sqrt(m8c * m8c + m9c * m9c + m10c * m10c) || 1;
324
+ const mRot = ikQuatScratchF;
325
+ mat3ToQuatInto(mRot, m0c / msx, m1c / msx, m2c / msx, m4c / msy, m5c / msy, m6c / msy, m8c / msz, m9c / msz, m10c / msz);
326
+ const tpx = target[0] - m12c, tpy = target[1] - m13c, tpz = target[2] - m14c;
327
+ // rotate by conjugate of mRot
328
+ const crx = -mRot[0], cry = -mRot[1], crz = -mRot[2], crw = mRot[3];
329
+ const tIx = crw * tpx + cry * tpz - crz * tpy;
330
+ const tIy = crw * tpy + crz * tpx - crx * tpz;
331
+ const tIz = crw * tpz + crx * tpy - cry * tpx;
332
+ const tIw = -crx * tpx - cry * tpy - crz * tpz;
333
+ const targetX = (tIx * crw + tIw * -crx + tIy * -crz - tIz * -cry) / msx;
334
+ const targetY = (tIy * crw + tIw * -cry + tIz * -crx - tIx * -crz) / msy;
335
+ const targetZ = (tIz * crw + tIw * -crz + tIx * -cry - tIy * -crx) / msz;
336
+ // polePoint (model space) — bone position or transformed world point.
337
+ let poleX = 0, poleY = 0, poleZ = 0;
338
+ let hasPole = false;
339
+ if (spec.pole && spec.pole !== "auto") {
340
+ if ("bone" in spec.pole) {
341
+ const poleJoint = jointIndex(skeleton, spec.pole.bone);
342
+ ikResolveFrame(pose, skeleton, s, gen, poleJoint);
343
+ const pp = poleJoint * 3;
344
+ poleX = s.pos[pp];
345
+ poleY = s.pos[pp + 1];
346
+ poleZ = s.pos[pp + 2];
347
+ }
348
+ else {
349
+ const ppx = spec.pole[0] - m12c, ppy = spec.pole[1] - m13c, ppz = spec.pole[2] - m14c;
350
+ const pIx = crw * ppx + cry * ppz - crz * ppy;
351
+ const pIy = crw * ppy + crz * ppx - crx * ppz;
352
+ const pIz = crw * ppz + crx * ppy - cry * ppx;
353
+ const pIw = -crx * ppx - cry * ppy - crz * ppz;
354
+ poleX = (pIx * crw + pIw * -crx + pIy * -crz - pIz * -cry) / msx;
355
+ poleY = (pIy * crw + pIw * -cry + pIz * -crx - pIx * -crz) / msy;
356
+ poleZ = (pIz * crw + pIw * -crz + pIx * -cry - pIy * -crx) / msz;
357
+ }
358
+ hasPole = true;
359
+ }
360
+ // solveTwoBoneIk inline — same math (chain lengths, pole-projected plane,
361
+ // adjacent/height), scalar form.
362
+ const udx = midX - rootX, udy = midY - rootY, udz = midZ - rootZ;
363
+ const upperLength = Math.sqrt(udx * udx + udy * udy + udz * udz);
364
+ const ldx = tipX - midX, ldy = tipY - midY, ldz = tipZ - midZ;
365
+ const lowerLength = Math.sqrt(ldx * ldx + ldy * ldy + ldz * ldz);
366
+ if (upperLength <= 1e-6 || lowerLength <= 1e-6) {
367
+ throw new Error("Two-bone IK requires non-zero upper and lower segment lengths.");
368
+ }
369
+ const tdx = targetX - rootX, tdy = targetY - rootY, tdz = targetZ - rootZ;
370
+ const targetDistance = Math.sqrt(tdx * tdx + tdy * tdy + tdz * tdz);
371
+ if (targetDistance <= 1e-6) {
372
+ throw new Error("Two-bone IK target must be distinct from the root.");
373
+ }
374
+ const maxReach = upperLength + lowerLength;
375
+ const minReach = Math.abs(upperLength - lowerLength) + 1e-5;
376
+ const allowStretch = (spec.allowStretch ?? 0) > 1;
377
+ const solveDistance = allowStretch ? targetDistance : clamp(targetDistance, minReach, maxReach - 1e-5);
378
+ const axisX = tdx / targetDistance, axisY = tdy / targetDistance, axisZ = tdz / targetDistance;
379
+ // projectedPoleDirection: pole = polePoint ?? mid
380
+ const plX = hasPole ? poleX : midX, plY = hasPole ? poleY : midY, plZ = hasPole ? poleZ : midZ;
381
+ const pdx = plX - rootX, pdy = plY - rootY, pdz = plZ - rootZ;
382
+ const pdDot = pdx * axisX + pdy * axisY + pdz * axisZ;
383
+ let prjX = pdx - axisX * pdDot, prjY = pdy - axisY * pdDot, prjZ = pdz - axisZ * pdDot;
384
+ const prjLen = Math.sqrt(prjX * prjX + prjY * prjY + prjZ * prjZ);
385
+ if (prjLen > 1e-6) {
386
+ prjX /= prjLen;
387
+ prjY /= prjLen;
388
+ prjZ /= prjLen;
389
+ }
390
+ else {
391
+ const fx = Math.abs(axisY) < 0.9 ? 0 : 1;
392
+ const fy = Math.abs(axisY) < 0.9 ? 1 : 0;
393
+ const fDot = fx * axisX + fy * axisY;
394
+ let fpx = fx - axisX * fDot, fpy = fy - axisY * fDot, fpz = -axisZ * fDot;
395
+ const fl = Math.sqrt(fpx * fpx + fpy * fpy + fpz * fpz) || 1;
396
+ prjX = fpx / fl;
397
+ prjY = fpy / fl;
398
+ prjZ = fpz / fl;
399
+ }
400
+ const adjacent = clamp((upperLength * upperLength + solveDistance * solveDistance - lowerLength * lowerLength) / (2 * solveDistance), 0, upperLength);
401
+ const height = Math.sqrt(Math.max(0, upperLength * upperLength - adjacent * adjacent));
402
+ const sEndX = rootX + axisX * solveDistance, sEndY = rootY + axisY * solveDistance, sEndZ = rootZ + axisZ * solveDistance;
403
+ const sMidX = rootX + axisX * adjacent + prjX * height;
404
+ const sMidY = rootY + axisY * adjacent + prjY * height;
405
+ const sMidZ = rootZ + axisZ * adjacent + prjZ * height;
406
+ // The solve itself is unblended — solveTwoBoneIk lerps mid/end at weight=1
407
+ // here (the caller never passed weight), and `setLocalRotation` applies the
408
+ // real blend when writing back into the pose.
409
+ const smX = sMidX, smY = sMidY, smZ = sMidZ;
410
+ const seX = sEndX, seY = sEndY, seZ = sEndZ;
411
+ // Root swing: minimal arc midDir0 → midDir1, then a residual roll about the
412
+ // new axis so the bend plane matches the pole plane (solvedMid sits on it).
413
+ let m0x = midX - rootX, m0y = midY - rootY, m0z = midZ - rootZ;
414
+ let m0l = Math.sqrt(m0x * m0x + m0y * m0y + m0z * m0z);
415
+ if (m0l <= 1e-6) {
416
+ m0x = 0;
417
+ m0y = 1;
418
+ m0z = 0;
419
+ m0l = 1;
420
+ }
421
+ const md0x = m0x / m0l, md0y = m0y / m0l, md0z = m0z / m0l;
422
+ let m1x = smX - rootX, m1y = smY - rootY, m1z = smZ - rootZ;
423
+ let m1l = Math.sqrt(m1x * m1x + m1y * m1y + m1z * m1z);
424
+ if (m1l <= 1e-6) {
425
+ m1x = 0;
426
+ m1y = 1;
427
+ m1z = 0;
428
+ m1l = 1;
429
+ }
430
+ const md1x = m1x / m1l, md1y = m1y / m1l, md1z = m1z / m1l;
431
+ const swing = ikQuatScratchA;
432
+ quatFromUnitVectorsInto(swing, md0x, md0y, md0z, md1x, md1y, md1z);
433
+ // poleDir0/1 = planeNormal(midDir, normalize(polePoint|mid - root))
434
+ let p0x = (hasPole ? poleX : midX) - rootX, p0y = (hasPole ? poleY : midY) - rootY, p0z = (hasPole ? poleZ : midZ) - rootZ;
435
+ const p0l = Math.sqrt(p0x * p0x + p0y * p0y + p0z * p0z);
436
+ if (p0l <= 1e-6) {
437
+ p0x = 0;
438
+ p0y = 1;
439
+ p0z = 0;
440
+ }
441
+ else {
442
+ p0x /= p0l;
443
+ p0y /= p0l;
444
+ p0z /= p0l;
445
+ }
446
+ let pd0x = md0y * p0z - md0z * p0y, pd0y = md0z * p0x - md0x * p0z, pd0z = md0x * p0y - md0y * p0x;
447
+ const pd0l = Math.sqrt(pd0x * pd0x + pd0y * pd0y + pd0z * pd0z);
448
+ if (pd0l <= 1e-6) {
449
+ const ux = Math.abs(md0x) < 0.9 ? 1 : 0, uy = Math.abs(md0x) < 0.9 ? 0 : 1;
450
+ pd0x = md0y * 0 - md0z * uy;
451
+ pd0y = md0z * ux - md0x * 0;
452
+ pd0z = md0x * uy - md0y * ux;
453
+ const ul = Math.sqrt(pd0x * pd0x + pd0y * pd0y + pd0z * pd0z) || 1;
454
+ pd0x /= ul;
455
+ pd0y /= ul;
456
+ pd0z /= ul;
457
+ }
458
+ else {
459
+ pd0x /= pd0l;
460
+ pd0y /= pd0l;
461
+ pd0z /= pd0l;
462
+ }
463
+ let p1x = (hasPole ? poleX : smX) - rootX, p1y = (hasPole ? poleY : smY) - rootY, p1z = (hasPole ? poleZ : smZ) - rootZ;
464
+ const p1l = Math.sqrt(p1x * p1x + p1y * p1y + p1z * p1z);
465
+ if (p1l <= 1e-6) {
466
+ p1x = 0;
467
+ p1y = 1;
468
+ p1z = 0;
469
+ }
470
+ else {
471
+ p1x /= p1l;
472
+ p1y /= p1l;
473
+ p1z /= p1l;
474
+ }
475
+ let pd1x = md1y * p1z - md1z * p1y, pd1y = md1z * p1x - md1x * p1z, pd1z = md1x * p1y - md1y * p1x;
476
+ const pd1l = Math.sqrt(pd1x * pd1x + pd1y * pd1y + pd1z * pd1z);
477
+ if (pd1l <= 1e-6) {
478
+ const ux = Math.abs(md1x) < 0.9 ? 1 : 0, uy = Math.abs(md1x) < 0.9 ? 0 : 1;
479
+ pd1x = md1y * 0 - md1z * uy;
480
+ pd1y = md1z * ux - md1x * 0;
481
+ pd1z = md1x * uy - md1y * ux;
482
+ const ul = Math.sqrt(pd1x * pd1x + pd1y * pd1y + pd1z * pd1z) || 1;
483
+ pd1x /= ul;
484
+ pd1y /= ul;
485
+ pd1z /= ul;
486
+ }
487
+ else {
488
+ pd1x /= pd1l;
489
+ pd1y /= pd1l;
490
+ pd1z /= pd1l;
491
+ }
492
+ // swungNormal = rotateVec3(swing, poleDir0)
493
+ const swx = swing[0], swy = swing[1], swz = swing[2], sww = swing[3];
494
+ const snIx = sww * pd0x + swy * pd0z - swz * pd0y;
495
+ const snIy = sww * pd0y + swz * pd0x - swx * pd0z;
496
+ const snIz = sww * pd0z + swx * pd0y - swy * pd0x;
497
+ const snIw = -swx * pd0x - swy * pd0y - swz * pd0z;
498
+ const snx = snIx * sww + snIw * -swx + snIy * -swz - snIz * -swy;
499
+ const sny = snIy * sww + snIw * -swy + snIz * -swx - snIx * -swz;
500
+ const snz = snIz * sww + snIw * -swz + snIx * -swy - snIy * -swx;
501
+ // twistAngle = signedAngleAbout(swungNormal, poleDir1, midDir1)
502
+ const tacx = sny * pd1z - snz * pd1y;
503
+ const tacy = snz * pd1x - snx * pd1z;
504
+ const tacz = snx * pd1y - sny * pd1x;
505
+ const twistAngle = Math.atan2(tacx * md1x + tacy * md1y + tacz * md1z, snx * pd1x + sny * pd1y + snz * pd1z);
506
+ // roll = axisAngleQuat(midDir1, twistAngle); q1 = roll * swing
507
+ const half = twistAngle / 2;
508
+ const sHalf = Math.sin(half);
509
+ const roll = ikQuatScratchB;
510
+ roll[0] = md1x * sHalf;
511
+ roll[1] = md1y * sHalf;
512
+ roll[2] = md1z * sHalf;
513
+ roll[3] = Math.cos(half);
514
+ const q1 = ikQuatScratchC;
515
+ multiplyQuatFlat(q1, 0, roll, 0, swing, 0);
516
+ // Mid swing: tip direction under the root's solved frame onto solved-end dir.
517
+ const tvx = tipX - rootX, tvy = tipY - rootY, tvz = tipZ - rootZ;
518
+ const q1x = q1[0], q1y = q1[1], q1z = q1[2], q1w = q1[3];
519
+ const tdIx = q1w * tvx + q1y * tvz - q1z * tvy;
520
+ const tdIy = q1w * tvy + q1z * tvx - q1x * tvz;
521
+ const tdIz = q1w * tvz + q1x * tvy - q1y * tvx;
522
+ const tdIw = -q1x * tvx - q1y * tvy - q1z * tvz;
523
+ const tipAfterX = rootX + tdIx * q1w + tdIw * -q1x + tdIy * -q1z - tdIz * -q1y;
524
+ const tipAfterY = rootY + tdIy * q1w + tdIw * -q1y + tdIz * -q1x - tdIx * -q1z;
525
+ const tipAfterZ = rootZ + tdIz * q1w + tdIw * -q1z + tdIx * -q1y - tdIy * -q1x;
526
+ let td1x = tipAfterX - smX, td1y = tipAfterY - smY, td1z = tipAfterZ - smZ;
527
+ const td1l = Math.sqrt(td1x * td1x + td1y * td1y + td1z * td1z);
528
+ if (td1l <= 1e-6) {
529
+ td1x = 0;
530
+ td1y = 1;
531
+ td1z = 0;
532
+ }
533
+ else {
534
+ td1x /= td1l;
535
+ td1y /= td1l;
536
+ td1z /= td1l;
537
+ }
538
+ let td2x = seX - smX, td2y = seY - smY, td2z = seZ - smZ;
539
+ const td2l = Math.sqrt(td2x * td2x + td2y * td2y + td2z * td2z);
540
+ if (td2l <= 1e-6) {
541
+ td2x = 0;
542
+ td2y = 1;
543
+ td2z = 0;
544
+ }
545
+ else {
546
+ td2x /= td2l;
547
+ td2y /= td2l;
548
+ td2z /= td2l;
549
+ }
550
+ const q2 = ikQuatScratchD;
551
+ quatFromUnitVectorsInto(q2, td1x, td1y, td1z, td2x, td2y, td2z);
552
+ const rootWorldSolved = ikQuatScratchE;
553
+ multiplyQuatFlat(rootWorldSolved, 0, q1, 0, s.rot, rootIndex * 4);
554
+ normalizeQuatFlat(rootWorldSolved, 0);
555
+ setLocalRotationFlat(pose, rootIndex, ikParentRot(pose, skeleton, s, gen, rootIndex, ikQuatScratchF), rootWorldSolved, weight);
556
+ const midWorldAfterRoot = ikQuatScratchG;
557
+ multiplyQuatFlat(midWorldAfterRoot, 0, q1, 0, s.rot, midIndex * 4);
558
+ const midWorldSolved = ikQuatScratchH;
559
+ multiplyQuatFlat(midWorldSolved, 0, q2, 0, midWorldAfterRoot, 0);
560
+ normalizeQuatFlat(midWorldSolved, 0);
561
+ // The mid's parent is the root in a strict two-bone chain; if a joint sits
562
+ // between them, its frame rode the root's rotation too.
563
+ const midParentSolved = ikQuatScratchI;
564
+ if (skeleton.parentIndices[midIndex] === rootIndex) {
565
+ midParentSolved.set(rootWorldSolved);
566
+ }
567
+ else {
568
+ const p = skeleton.parentIndices[midIndex] ?? -1;
569
+ if (p < 0) {
570
+ midParentSolved[0] = 0;
571
+ midParentSolved[1] = 0;
572
+ midParentSolved[2] = 0;
573
+ midParentSolved[3] = 1;
574
+ }
575
+ else {
576
+ ikResolveFrame(pose, skeleton, s, gen, p);
577
+ multiplyQuatFlat(midParentSolved, 0, q1, 0, s.rot, p * 4);
578
+ normalizeQuatFlat(midParentSolved, 0);
579
+ }
580
+ }
581
+ setLocalRotationFlat(pose, midIndex, midParentSolved, midWorldSolved, weight);
582
+ // Twist distribution: apply `twistWeight` of the plane-align roll to the
583
+ // twist bone's local rotation (twist bones sit between mid and tip).
584
+ if (spec.twistBone && (spec.twistWeight ?? 0) > 0) {
585
+ const twistIndex = jointIndex(skeleton, spec.twistBone);
586
+ ikResolveFrame(pose, skeleton, s, gen, twistIndex);
587
+ const tHalf = (twistAngle * (spec.twistWeight ?? 0)) / 2;
588
+ const tS = Math.sin(tHalf);
589
+ const twistQ = ikQuatScratchB;
590
+ twistQ[0] = md1x * tS;
591
+ twistQ[1] = md1y * tS;
592
+ twistQ[2] = md1z * tS;
593
+ twistQ[3] = Math.cos(tHalf);
594
+ const twistWorld = ikQuatScratchG;
595
+ multiplyQuatFlat(twistWorld, 0, twistQ, 0, s.rot, twistIndex * 4);
596
+ normalizeQuatFlat(twistWorld, 0);
597
+ setLocalRotationFlat(pose, twistIndex, ikParentRot(pose, skeleton, s, gen, twistIndex, ikQuatScratchF), twistWorld, weight);
598
+ }
599
+ }
85
600
  //# sourceMappingURL=IK.js.map
package/dist/IK.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"IK.js","sourceRoot":"","sources":["../../../../packages/animation/src/IK.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IK.js","sourceRoot":"","sources":["../../../../packages/animation/src/IK.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Keyframe.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/Keyframe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Keyframe.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/Keyframe.ts"],"names":[],"mappings":"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"}
package/dist/Keyframe.js CHANGED
@@ -88,19 +88,20 @@ export function composeMat4(translation = [0, 0, 0], rotation = [0, 0, 0, 1], sc
88
88
  ];
89
89
  }
90
90
  export function multiplyMat4(a, b) {
91
+ // Column-major A·B — the convention `@aura3d/scene`'s multiplyMat4, every
92
+ // GLSL `mat4` consumer, and the palette writers read. The previous body
93
+ // indexed `a` row-major over column-major storage, computing B·A and
94
+ // leaving a non-affine row 3 in skinning palettes (06-QXX).
91
95
  const out = new Array(16).fill(0);
92
- for (let row = 0; row < 4; row += 1) {
93
- for (let col = 0; col < 4; col += 1) {
94
- const a0 = a[row * 4];
95
- const a1 = a[row * 4 + 1];
96
- const a2 = a[row * 4 + 2];
97
- const a3 = a[row * 4 + 3];
98
- out[col + row * 4] =
99
- a0 * b[col] +
100
- a1 * b[col + 4] +
101
- a2 * b[col + 8] +
102
- a3 * b[col + 12];
103
- }
96
+ for (let col = 0; col < 4; col += 1) {
97
+ const b0 = b[col * 4];
98
+ const b1 = b[col * 4 + 1];
99
+ const b2 = b[col * 4 + 2];
100
+ const b3 = b[col * 4 + 3];
101
+ out[col * 4] = a[0] * b0 + a[4] * b1 + a[8] * b2 + a[12] * b3;
102
+ out[col * 4 + 1] = a[1] * b0 + a[5] * b1 + a[9] * b2 + a[13] * b3;
103
+ out[col * 4 + 2] = a[2] * b0 + a[6] * b1 + a[10] * b2 + a[14] * b3;
104
+ out[col * 4 + 3] = a[3] * b0 + a[7] * b1 + a[11] * b2 + a[15] * b3;
104
105
  }
105
106
  return out;
106
107
  }