diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-30 22:16:31 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-30 22:16:31 +0300 |
| commit | 048ad71f5c5c5a21aabb42dad1562b40b7a54ea2 (patch) | |
| tree | 3b21bb5aeeb4280064fa749ce417067510d32b1c /docs/reference | |
| parent | eaf5df3ad01af591e394ef8f6542dd0b4c98d43b (diff) | |
| download | fparkan-048ad71f5c5c5a21aabb42dad1562b40b7a54ea2.tar.xz fparkan-048ad71f5c5c5a21aabb42dad1562b40b7a54ea2.zip | |
fix(render): hide native zero-alpha MSH batches
Diffstat (limited to 'docs/reference')
| -rw-r--r-- | docs/reference/msh.md | 4 | ||||
| -rw-r--r-- | docs/reference/render-frame.md | 17 |
2 files changed, 21 insertions, 0 deletions
diff --git a/docs/reference/msh.md b/docs/reference/msh.md index 7c6eca7..e2716d2 100644 --- a/docs/reference/msh.md +++ b/docs/reference/msh.md @@ -18,6 +18,7 @@ type 9 service stream type 10 strings and node names type 13 Batch20 records type 15 auxiliary stream +type 16 optional vertex-colour data type 17 auxiliary data type 18 packed UV1 (optional secondary coordinates) type 19 animation frame map @@ -25,6 +26,9 @@ type 20 rare auxiliary table ``` Reader ищет entries по type, но сохраняет исходный порядок для roundtrip. +Поле `ModelAsset.type16_present` отмечает только наличие entry типа 16. Данные +payload сохраняются, но этот путь рендера пока не преобразует их в цвета +вершин. ## Node and slot selection diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md index 8cba630..3269c67 100644 --- a/docs/reference/render-frame.md +++ b/docs/reference/render-frame.md @@ -68,6 +68,23 @@ Pending frame хранит пакет MAT0 для мира и, при налич `batch` `0x108`. Такой диапазон при включённой проверке глубины не записывает глубину. За фиксированными диапазонами окружения сохраняются их явные состояния. +Для MSH без потока цветов type 16 диапазон, цвет которого вычисляет CPU, при +raw-флаге `Batch20` `0x0008` получает переопределение alpha только в одном +подтверждённом случае. В GOG `Terrain.dll` с SHA-256 +`af87d1b2e728a0be73c52be3b44cc196ab46da7799f25a15d40f8c9b0b425ead` проверка +по RVA `0x1B0F0` задаёт alpha `0`, когда установлен bit `0x0040` и сброшен +`0x0010`; поэтому для `0x0148` alpha равна нулю. Для `0x0108` и `0x0118` +превью сохраняет alpha MAT0; для `0x0058` действует приоритет bit `0x0010`, +также оставляя alpha MAT0. При наличии type 16 или отсутствии `0x0008` +переопределения нет. Оно относится к одному draw range и не меняет общий +материал; alpha `0` временно задаёт число индексов `0`, а при очистке +переопределения исходное число индексов восстанавливается. + +Общий fade по расстоянию пока не реализован. Открыты точная метрика расстояния, +выбор первого CPU-принятого треугольника диапазона и эквивалентность frustum- и +culling-отбору оригинала. Поэтому состояния `0x0108` и `0x0118` оставляют alpha +MAT0, пока эти входные данные не установлены. + В превью с фиксированной камерой диапазоны туманности и звёзд, купола и облаков явно помечаются как прозрачный фон. Непрозрачные диапазоны мира остаются на своих местах; прозрачная очередь мира сортируется от дальних элементов к |
