From bc3ad8cc20c62c47996c187c5e9ae04913121fd3 Mon Sep 17 00:00:00 2001 From: luciano Date: Fri, 31 Jul 2026 11:34:22 +0200 Subject: [PATCH] Library clips: Hips-only translations to avoid distorting the model Some Mixamo clips carry translation keyframes on every bone; bound to a model with different proportions they stretch/crush the limbs (bone lengths must come from the target skeleton). Library binding now keeps translations only for the Hips (root motion); rotations drive the rest. Clips baked into a model keep their full channels. Co-Authored-By: Claude Fable 5 --- src/model3d.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/model3d.js b/src/model3d.js index 64a9c35..da930fd 100644 --- a/src/model3d.js +++ b/src/model3d.js @@ -498,6 +498,10 @@ class ModelSim { for (const ch of clip.channels) { const ni = idxByBase[ch.bone]; if (ni === undefined) continue; + // foreign clips: translations only for the Hips — per-bone + // translations carry the SOURCE rig's proportions and would + // stretch/crush a model with different bone lengths + if (ch.path === 'translation' && ch.bone !== 'Hips') continue; channels.push({ node: ni, path: ch.path, times: ch.times, vals: ch.vals }); } if (channels.length > 4)