aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/appendices/knowledge-boundaries.md7
-rw-r--r--docs/reference/render-frame.md30
-rw-r--r--docs/tomes/05-render.md12
3 files changed, 32 insertions, 17 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md
index a60fa68..04dc822 100644
--- a/docs/appendices/knowledge-boundaries.md
+++ b/docs/appendices/knowledge-boundaries.md
@@ -50,9 +50,10 @@ MSH-запрос со свободной preview-камерой; это не пÐ
стратегической и следящей камерами не подтверждено
([MSH](../reference/msh.md)).
-Кривые alpha и метрика расстояния порталов реализованы для MSH без type 16
-([описание кадра](../reference/render-frame.md#прозрачность-порталов-msh)). Native CPU clipping может выбрать другую первую вершину;
-это приближение явно считается как `portal_fade_packet_selection_approx`.
+Кривые alpha и опорная вершина порталов сверены для MSH без type 16
+([описание кадра](../reference/render-frame.md#прозрачность-порталов-msh)). Native `RSQRTSS`
+воспроизводится на x86-64; другие архитектуры и нулевая дистанция используют
+явные `packet_distance_native_rsqrt_unsupported` / `packet_zero_distance_fallback`.
Данные type 16 ещё не декодированы и считаются в `msh_type16_colors_unsupported`;
в статических сценах 29 миссий GOG (1736 загрузок моделей) этот поток отсутствует.
diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md
index 7adc4e6..ebe3971 100644
--- a/docs/reference/render-frame.md
+++ b/docs/reference/render-frame.md
@@ -68,13 +68,24 @@ RVA `0x1B0F0`, заменяет diffuse alpha пакета без type 16 с bat
Скаляр камеры в шестом float getter `0x4F5F0` и поле CShade `+0xBB4`
проверены в работающем оригинале: оба содержат текущий горизонтальный FOV.
-`legacy_msh_portal_alpha` хранит кривую в `fparkan-render`. Приложение пока
-берёт первую индексированную вершину своего диапазона и обычный `sqrt`,
-поэтому выбор вершины после native CPU clipping и точность `RSQRTSS` не
-воспроизводятся. Счётчик `render_coverage portal_fade_packet_selection_approx`
-показывает число таких диапазонов. Поток type 16 сохраняет прежний отдельный
-путь и ещё не декодирован. Это ограничивает приёмку на частично отсечённых
-порталах и не позволяет считать интерьер принятой эталонной сценой.
+`legacy_msh_portal_alpha` хранит кривую в `fparkan-render`. Её опорная вершина
+принадлежит входному пакету: выбирать вместо неё первую видимую точку нельзя.
+В живом краевом ракурсе AutoDemo первая вершина окна находится за правой
+границей viewport (`NDC x ≈ 1,048`), а следующая — внутри (`x ≈ 0,815`).
+Оригинал всё равно использует первую: расстояние `106,74783` даёт alpha
+`0,51991343`. Выбор следующей изменил бы alpha примерно на `0,026`.
+Передача пакета renderer-у происходит после записи этой alpha.
+
+Адаптер изолирует инструкцию `RSQRTSS`; на x86-64 расстояние и alpha этого
+ракурса совпадают с оригиналом побитно. Обычный `sqrt` давал alpha
+`0,5196797`: при упаковке прозрачности этого достаточно для отличия отдельных
+пикселей. Прежнее предположение о выборе вершины после clipping и связанный
+счётчик `portal_fade_packet_selection_approx` удалены. На других архитектурах
+сохраняется переносимый корень с явным `packet_distance_native_rsqrt_unsupported`;
+совпадение камеры с вершиной использует нулевую дистанцию и
+`packet_zero_distance_fallback` вместо native `0 × infinity`.
+Поток type 16 ещё не декодирован. Проверка краевого окна не закрывает остальные
+внутренние ракурсы завода.
## Дистанционная кривая тумана
@@ -151,9 +162,8 @@ raw-флаге `Batch20` `0x0008` получает переопределениÐ
материал; alpha `0` временно задаёт число индексов `0`, а при очистке
переопределения исходное число индексов восстанавливается.
-Fade обновляется с камерой каждый кадр. Открыт выбор первой принятой вершины
-после native CPU clipping: приложение пока берёт первую индексированную
-вершину диапазона и считает это приближение в `render_coverage`.
+Fade обновляется с камерой каждый кадр и сохраняет исходную опорную вершину
+диапазона, в том числе когда часть окна выходит за границу экрана.
В превью с фиксированной камерой диапазоны туманности и звёзд, купола и облаков
явно помечаются как прозрачный фон. Непрозрачные диапазоны мира остаются на
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 4aba919..266cb47 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -510,8 +510,11 @@ Material manager кэширует разобранный MAT0 и texture handles
Для MSH без потока цветов type 16 правило включает флаг batch `0x0008`.
В обычной ветви при горизонтальном FOV `1.3` поверхность прозрачна до расстояния
75 и непрозрачна после 95; между ними alpha растёт линейно. При другом FOV обе
-границы умножаются на `1.3 / FOV`. Расстояние берётся до первой вершины первого
-принятого треугольника, а не до центра здания.
+границы умножаются на `1.3 / FOV`. Расстояние берётся до первой индексированной
+вершины входного пакета, а не до центра здания. Эта точка может находиться за
+экраном: видимая часть окна всё равно сохраняет её прозрачность. Если при повороте
+камеры выбирать новую видимую точку, окно начнёт менять прозрачность без движения
+игрока.
Флаг `0x0010` выбирает другую кривую: сравнивается квадратный корень уже
вычисленного расстояния, границы равны `2.6 / FOV` и `7.7999997 / FOV`.
@@ -521,8 +524,9 @@ Material manager кэширует разобранный MAT0 и texture handles
FParkan пересчитывает эту alpha при каждом обновлении камеры, после анимации
модели. Нулевое значение временно выключает диапазон индексов; при удалении
-камеры диапазон восстанавливается. Подробности оригинального вычисления и
-пока приближённого выбора вершины приведены в [описании кадра](../reference/render-frame.md#прозрачность-порталов-msh).
+камеры диапазон восстанавливается. Расстояние использует тот же приближённый
+обратный корень, что и оригинал: округление влияет на записанную alpha.
+Подробности вычисления приведены в [описании кадра](../reference/render-frame.md#прозрачность-порталов-msh).
## Texm: текстуры, mip-уровни и атласы