A26: замер нормировки канала поворота (unit-критерий)
Some checks are pending
CI / checks (push) Waiting to run

Кватернион требует, чтобы модуль вектора поворота не превосходил единицу у всех
костей и кадров — по этому критерию и выбран путь. Сырые значения @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 — больше единицы, для
кватерниона невозможно, значит rot_scale не множитель. Деление на 32768 даёт
0,52 — годится.

Записано в docs/PARITY.md A26 как первая задача следующего шага: выяснить точную
нормировку канала (похоже, rot_scale задаёт сжатие, обратное ≈1,5e4…2,1e4 по
осям), собрать кватернион с w = √(1 − x² − y² − z²) и перейти к позам костей по
родителям.

Все 23 сьюта зелёные.
This commit is contained in:
Niko Marmeladkov 2026-10-17 12:08:48 +03:00
parent 2155bcee54
commit d92b962b36

View file

@ -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-скиннинг сделан; (г) декодер кадров и