diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/tomes/05-render.md | 40 | ||||
| -rw-r--r-- | docs/tomes/06-behavior.md | 13 |
2 files changed, 40 insertions, 13 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index 3c4e346..545aa1a 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -362,18 +362,30 @@ local.set_translation(pose.position); world[n] = world[parent(n)] * local; ``` -Статический Vulkan preview берёт начальный кадр узла из явной ссылки прототипа -на CTLD `.ctl`. Для поддерживаемых Control timeline и tag 21 он выполняет один -сэмпл при native clock `0`, передавая конечные type-1 значения разрешённых NDP -providers; неподдерживаемый режим/variable mapping и отсутствующий или -неразрешённый gate value возвращают preview к статическим CTLD bindings. -Используются только включённые строки, а при повторе node ID поздняя строка -заменяет раннюю. Без -`--static-animation-frame` preview применяет эти настройки узлов; узлы без -настройки остаются на кадре `0`. Явный `--static-animation-frame N` -переопределяет их и задаёт `N` всем узлам, пропуская Control-сэмпл. -Результат — одна стартовая статическая поза, не обновление анимации, Control -или AI по ходу кадров. +Статический Vulkan preview берёт CTLD `.ctl` из явной ссылки прототипа. +Поддерживаемые Control timeline с tag 21 сэмплируются при запуске на native +clock `0`; разрешённые NDP providers передают конечные type-1 значения. +Неподдерживаемый режим или variable mapping, а также отсутствующее или +неразрешённое gate value оставляют компонент на статических CTLD bindings. В +timeline участвуют только включённые строки; при повторном node ID поздняя +строка заменяет раннюю. + +Без `--static-animation-frame` preview сохраняет экземпляр Control и при +каждом redraw сэмплирует поддерживаемый timeline на текущем native clock. +Обновлённая Node38-поза перепроецирует видимую геометрию в заранее выделенный +vertex span, оставляя индексы и draw ranges неизменными. Если в пути Unit DAT +компонента есть такой Control, заново вычисляется его EXTO mount socket и +перепроецируется дочерняя геометрия; дочерний mount использует preorder-порядок +Unit DAT. Внутренние INTO-компоненты здесь не считаются глобальными MSH +socket mounts. Обновлённые вершины и shadow-треугольники попадают в общий +mesh upload перед следующим кадром. Culling sphere восстанавливается от +начальной native sphere и расширяется до текущих shadow-треугольников; это +`shortcut:`, потому что native обновление bounding sphere для анимированной +геометрии пока не установлено. Это путь сэмплирования Control-позы, не AI или +анимация эффектов. + +Явный `--static-animation-frame N` переопределяет timeline и задаёт `N` всем +узлам, пропуская runtime Control-сэмпл. MSH sampler выбирает type 19 frame округлением `(time - 0.5)` к ближайшему целому с ties-to-even, затем интерполирует выбранный type 8 key и следующий key в исходном `time`; это portable-вариант native x87 conversion в default @@ -1024,7 +1036,9 @@ animation phase; object batches сохраняют их legacy blend/depth/alpha После загрузки world path создаёт интерактивную free-flight камеру (`WASD`, `E/Q`, `Shift`, `Ctrl`, RMB relative-look), обновляет listener и на каждом -кадре собирает environment frame. Mission-local `sky.ske`/`sky.wea` выбирают +кадре собирает environment frame. После шага движения камера проверяет высоту +`TerrainWorld`: над конечной поверхностью сохраняется начальный просвет, а вне +поверхности высота не ограничивается. Mission-local `sky.ske`/`sky.wea` выбирают атмосферное расписание и sky materials, `effects.rlb/env_lightning` даёт lightning visual; weather particles, flares, sun/moon, point lights, projected shadows и audio events обновляются вместе с камерой и временем. diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md index ebecddd..d1af7ba 100644 --- a/docs/tomes/06-behavior.md +++ b/docs/tomes/06-behavior.md @@ -454,6 +454,19 @@ C0 равен 0, поэтому найденные offsets 104–107, 119–121 условий, загрузка FX materials, activation, выполнение FX opcodes и видимый рендер эффектов пока не реализованы. +После типизированных записей CTLD хранит 21 ссылку на группу эффектов. В +`fr_l_plant.ctl` первая ссылка равна `8`, остальные 20 содержат `u32::MAX`; за +ними расположены 13 таблиц групп. При разборе по адресу `+0x8B10` к каждой +ссылке, кроме `u32::MAX`, прибавляется число групп, зарегистрированных до +таблиц этого CTL; получившиеся индексы сохраняются в control mapping. При +событии `0x80000020` код по адресу `+0x7830` сразу выходит, если поле дескриптора +`+0xC0` равно нулю. Разбор по адресу `+0x8B10` вызывает диспетчер групп `+0x2800` +с индексом группы по умолчанию только при ненулевом `+0xC0`. Назначение поля +дескриптора и условия его заполнения на стороне producer пока неизвестны. +`initial_effect_group` хранит проверенную ссылку на группу по умолчанию. Это +поле описывает данные CTL и не выполняет activation, загрузку FX materials, +FX opcodes или рендер эффектов. + CPU-only обход `MISSIONS/Autodemo.00/data.tma` подготовил четыре CTL с 80 строками type 4 и четыре явных CPT-списка (всего 322 записи). Среди пар были `fortif.rlb/fr_l_plant.ctl` и `fortif.rlb/fr_l_plant.cpt` (155 точек), а также |
