diff --git a/docs/PARITY.md b/docs/PARITY.md index 3b58b88..15c70ff 100644 --- a/docs/PARITY.md +++ b/docs/PARITY.md @@ -3225,8 +3225,22 @@ GPU» работает целиком. Пока это не анимация: н вида 17013, 1424, −874 (шорты, которые делятся на масштаб кости при сборке кватерниона). -**Дальше:** масштаб кости (`rot_scale`/`pos_scale`) в сборке кватерниона, позы -костей с родителями, интерполяция между кадрами, выбор секвенции по состоянию. +**Замер по масштабу кости (первый шаг следующего этапа).** У кватерниона модуль +вектора поворота не больше единицы у **всех** костей и кадров — это и есть +критерий выбора. Сырые значения `@idle_all_01`: у кости 0 — `[43, 1424, 17013]` +при `rot_scale = [6,37e−5, 4,66e−5, 9,59e−5]`. + +- умножение на `rot_scale`: `17013 · 9,59e−5 = 1,63` — **больше единицы**, для + кватерниона невозможно, значит это не тот путь; +- деление на 32768: `17013 / 32768 = 0,52` — годится. + +Дальше нужно решить, чем именно нормируется канал: похоже, `rot_scale` в MDL +задаёт **сжатие** (велик обратный, ≈1,5e4…2,1e4 по осям), а не множитель. Это +первая задача следующего захода, вместе с позами костей по родителям. + +**Дальше:** собрать кватернион с правильной нормировкой и `w = √(1 − x² − y² − z²)`, +позы костей с родителями, интерполяция между кадрами, выбор секвенции по +состоянию. **Порядок работ:** (а) секвенции, включённые модели и чтение `.ani` сделаны; (б) привязка вершин сделана; (в) CPU-скиннинг сделан; (г) декодер кадров и