Дневник: точный план проигрывания анимаций
Some checks are pending
CI / checks (push) Waiting to run
Some checks are pending
CI / checks (push) Waiting to run
Записан следующий шаг A26, чтобы не искать заново: данные анимации (.ani 7 МБ, блоки, описания) должны жить в меше ссылкой Arc (сейчас читаются при загрузке и выбрасываются); в движке появляется pose_model_instance с локальными кватернионами костей, собранными через родителей; в клиенте — выбор секвенции, кадр по времени (t · fps, цикл) и сборка кватернионов из дорожек; затем выбор по состоянию ACT_MP_* с блендингом и снятие синуса.
This commit is contained in:
parent
133bee0aed
commit
49ff6da4ac
1 changed files with 20 additions and 0 deletions
|
|
@ -124,6 +124,26 @@ origin. Посадка: глаз + 20 вперёд + 6 вправо − 10 вн
|
|||
`batch.material` с позицией материала в `world.materials` (дедупликация по
|
||||
имени); (3) `--only-material` фильтрует батчи, но не мешает ли ему что-то ещё.
|
||||
|
||||
**A26, состояние на 2026-10-17:** сделаны секвенции (с определением шага записи
|
||||
по данным), кости и веса вершин, слияние включённых моделей (у игрока 465
|
||||
секвенций), чтение `.ani` (7,1 МБ, 1563 анимации, 247 блоков), декодер кадров
|
||||
(`mstudioanim_t`, проверен: 280 кадров, 51 дорожка), сборка кватерниона с
|
||||
нормировкой 1/32768 (выбрана замером: умножение на rot_scale давало 1,63 —
|
||||
для кватерниона невозможно) и CPU-скиннинг (виден кадром).
|
||||
|
||||
**Следующий шаг — проигрывание.** План, чтобы не искать заново:
|
||||
1. `PropMesh` (или `ModelInstance`) должен держать **данные анимации**:
|
||||
`.ani` (7 МБ) + список блоков + описания анимаций, ссылкой `Arc`, — сейчас
|
||||
они читаются при загрузке модели и выбрасываются;
|
||||
2. в движке `pose_model_instance(index, origin, angles, bone_quats: &[[f32;4]])`:
|
||||
локальные кватернионы костей в мировые через родителей
|
||||
(`world[i] = world[parent] · (T(pos_i) · R(q_i) · T(−pos_i))`), затем скиннинг
|
||||
теми же весами (функция скиннинга уже есть — сейчас её ведёт синус);
|
||||
3. в клиенте: выбрать секвенцию (`@idle_all_01` через последовательность
|
||||
activity), взять кадр по времени (`t · fps`, циклом), собрать кватернионы
|
||||
костей из дорожек и позвать `pose_model_instance`;
|
||||
4. затем выбор по состоянию (`ACT_MP_*`) и блендинг, и снять синус.
|
||||
|
||||
**A26 «анимации» — план записан** (docs/PARITY.md A26). Ключевое открытие: в
|
||||
`formats` скелет и веса **уже читаются** (`mdl.bones()`, `vvd.vertices()`,
|
||||
`vtx.body_parts()`), не хватает разбора секвенций/`.ani`, костей в
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue