From d92b962b36cc86e994600afa63ff6c3b0929fdab Mon Sep 17 00:00:00 2001 From: Niko Marmeladkov Date: Sat, 17 Oct 2026 12:08:48 +0300 Subject: [PATCH] =?UTF-8?q?A26:=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=80=20=D0=BD?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=D0=BB=D0=B0=20=D0=BF=D0=BE=D0=B2=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=20(unit-=D0=BA=D1=80=D0=B8=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=B8=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Кватернион требует, чтобы модуль вектора поворота не превосходил единицу у всех костей и кадров — по этому критерию и выбран путь. Сырые значения @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 сьюта зелёные. --- docs/PARITY.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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-скиннинг сделан; (г) декодер кадров и