From 1a8e1eaed1de540367bad377e72d228153d8cec6 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Sat, 18 Jul 2026 16:25:20 +0400 Subject: feat(animation): recover Node38 fallback hierarchy --- docs/reference/msh.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'docs/reference/msh.md') diff --git a/docs/reference/msh.md b/docs/reference/msh.md index 93250a5..774e388 100644 --- a/docs/reference/msh.md +++ b/docs/reference/msh.md @@ -45,18 +45,22 @@ struct Node38 { Validated `ModelAsset` также сохраняет decoded type 8 keys и type 19 map как `ModelAnimation`. `node38_fallback_pose` возвращает pose по `fallback_key`, -то есть доказанный static input. Значение `parent_or_link` сохраняется как raw -field, пока runtime evidence не подтверждает, является ли оно parent index или -другой link semantic. +то есть доказанный static input. `parent_or_link == 0xFFFF` означает root; +иначе это parent index, обязательно меньший индекса child. Этот контракт +подтверждён на licensed animation gates обеих частей и защищён fallback-ом: +модель с нарушенным порядком не получает придуманную hierarchy. В legacy-camera static preview стандартный узел уже получает свой fallback pose -до внешнего TMA/Iron3D transform: quaternion поворачивает local vertex, затем -добавляется node translation, после чего применяется `Rz * Ry * Rx`, scale и -mission translation. Геометрия намеренно дублируется на draw-range узла, потому -что один source vertex может быть нарисован разными node poses. Это local-pose -assembly, а не skeleton: `parent_or_link` по-прежнему не используется, поэтому -вложенные parent transforms и dynamic frame-map sampling остаются отдельной -задачей runtime recovery. +до внешнего TMA/Iron3D transform. Parent pose поворачивает child translation, +затем translation суммируется, а rotations умножаются; после полученной global +pose применяется `Rz * Ry * Rx`, scale и mission translation. Геометрия +намеренно дублируется на draw-range узла, потому что один source vertex может +быть нарисован разными node poses. Это static fallback hierarchy, а не полная +animation parity: dynamic type-19 frame-map sampling остаётся отдельной задачей. + +Для воспроизводимого исследования `fparkan-cli model inspect --root +--archive --resource ` выводит Node38 metadata, включая +parent index, fallback key и наличие LOD0/group0 geometry. ## Slot and batch -- cgit v1.2.3