fix(render): hide native zero-alpha MSH batches
Docs Deploy / Build and Deploy MkDocs (push) Successful in 1m43s

This commit is contained in:
Valentin Popov committed 2026-10-30 23:16:31 +04:00
1 parent eaf5df3ad0
commit 048ad71f5c
9 files changed
+234 -12

No files matched your search

+4
View File
@@ -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
+17
View File
@@ -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, пока эти входные данные не установлены.
В превью с фиксированной камерой диапазоны туманности и звёзд, купола и облаков
явно помечаются как прозрачный фон. Непрозрачные диапазоны мира остаются на
своих местах; прозрачная очередь мира сортируется от дальних элементов к