aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/appendices/knowledge-boundaries.md21
-rw-r--r--docs/reference/msh.md4
-rw-r--r--docs/reference/render-frame.md17
3 files changed, 42 insertions, 0 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md
index 68a01d0..580d545 100644
--- a/docs/appendices/knowledge-boundaries.md
+++ b/docs/appendices/knowledge-boundaries.md
@@ -18,6 +18,27 @@ state transitions и окончательный порядок части transp
стене и дверном проёме. Мировое преобразование, фильтры категории и
подключение к свободной камере остаются открытыми ([MSH](../reference/msh.md)).
+Для MSH без потока цветов type 16 подтверждён только один постоянный alpha
+override для диапазонов с CPU-цветом и raw-флагом `Batch20` `0x0008`: GOG
+`Terrain.dll`, SHA-256
+`af87d1b2e728a0be73c52be3b44cc196ab46da7799f25a15d40f8c9b0b425ead`, RVA
+`0x1B0F0`, задаёт alpha `0`, если установлен bit `0x0040` и сброшен `0x0010`.
+Это покрывает `0x0148`; `0x0108`, `0x0118` и `0x0058` сохраняют alpha MAT0,
+причём в `0x0058` bit `0x0010` имеет приоритет. Поток type 16 или отсутствие
+`0x0008` исключают override. Проверка заводской сцены с фиксированной нативной
+камерой подтвердила на одном кадре входа восстановление X-образного рисунка
+двери, который виден и в оригинале; прежний Vulkan-readback показывал на этом
+месте сплошной чёрный прямоугольник. Сравнение выполнено при времени сцены
+2000 мс и трёх кадрах, запуск с Vulkan validation завершился без предупреждений
+и ошибок. Это подтверждает только структуру проёма в этой сцене: правильность
+освещения и полный попиксельный паритет не установлены.
+
+Общее fade-поведение по расстоянию в preview не реализовано. Открыты точная
+метрика расстояния, выбор первого CPU-принятого треугольника диапазона и
+эквивалентность frustum/culling-отбора оригинала; эти вопросы нельзя вывести из
+захвата заводской двери. Данные потока type 16 ещё не декодированы, поэтому
+правило выше относится только к MSH-диапазонам без этого потока цветов.
+
Закрывающий эксперимент: запустить оригинал в совместимой Windows/DirectX
среде, перехватить DirectDraw/Direct3D calls и surface flips, сохранить state
log на минимальных сценах с одним типом материала.
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, пока эти входные данные не установлены.
+
В превью с фиксированной камерой диапазоны туманности и звёзд, купола и облаков
явно помечаются как прозрачный фон. Непрозрачные диапазоны мира остаются на
своих местах; прозрачная очередь мира сортируется от дальних элементов к