diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-31 18:13:43 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-31 18:13:43 +0300 |
| commit | 9f643149a69a149612cffd65a953527630e95647 (patch) | |
| tree | 16954a813dc0b7a870f75f2e1f113041676d0837 /docs | |
| parent | 108a04b70e0cd5032d417cc7fd00cec2a385246b (diff) | |
| download | fparkan-9f643149a69a149612cffd65a953527630e95647.tar.xz fparkan-9f643149a69a149612cffd65a953527630e95647.zip | |
fix(render): use native squared distance for vertex fog
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/appendices/knowledge-boundaries.md | 4 | ||||
| -rw-r--r-- | docs/reference/render-frame.md | 20 | ||||
| -rw-r--r-- | docs/tomes/05-render.md | 3 |
3 files changed, 27 insertions, 0 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md index 6fbedf4..7f049fc 100644 --- a/docs/appendices/knowledge-boundaries.md +++ b/docs/appendices/knowledge-boundaries.md @@ -10,6 +10,10 @@ authoring API без динамического подтверждения. Не доказаны символами точные имена renderer vtable slots, полный набор CShade state transitions и окончательный порядок части transparent/FX/shadow subpasses. +Дистанционная кривая тумана по квадратам границ подтверждена в живом CShade. +Выбор проходов по native shade-state и GPU fog color пока заменён общим туманом мира с цветом горизонта; +это приближение считается как `render_coverage fog_pass_eligibility_approx`. + После ограничения цели рельефом интерактивная камера проверяет движение против каждого отрисовываемого корневого строения класса `FORT` и его отрисовываемых компонентов. Для этого пути используются текущая Node38-поза diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md index 3244d1b..b2a6a93 100644 --- a/docs/reference/render-frame.md +++ b/docs/reference/render-frame.md @@ -71,6 +71,26 @@ RVA `0x1B0F0`, заменяет diffuse alpha пакета без type 16 с bat путь и ещё не декодирован. Это ограничивает приёмку на частично отсечённых порталах и не позволяет считать интерьер принятой эталонной сценой. +## Дистанционная кривая тумана + +Программный `CShade::ShadeIndexedStrided` в GOG Terrain.dll сравнивает квадрат +дистанции с квадратами ближней и дальней границ. По RVA `0x2EEED–0x2EF45` +видимость равна `1 - (distance² - near²) / (far² - near²)` между границами, +единице перед ближней и нулю за дальней. Такой же закон использует отдельный +путь цвета пакета `0x2F230`. Линейная интерполяция по самой дистанции давала +слишком плотный туман в середине диапазона. + +В работающем оригинале границы 0 и `0x442389E6`, квадрат дистанции +`0x47707B04` дали видимость `0x3F5B2B94`. Rust-тест проверяет передаваемые GPU +квадраты границ по этому наблюдению. GLSL вычисляет квадрат расстояния вершины, +после чего растеризатор интерполирует коэффициент по треугольнику. +`native_fog.effective.sink_rgb` совпадает с `sky.packed[1]`, нижней границей +освещения CShade. Это не подтверждает значение GPU fog color. Приложение пока +сохраняет цвет экранного горизонта; выбор цвета и проходов требует отдельной +проверки GPU-состояния. +Выбор проходов по native shade-state пока приближён общим туманом мира и +считается как `render_coverage fog_pass_eligibility_approx`. + ## Радиус Control Op1 GOG `Effect.dll` (SHA-256 diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index bd23875..72b0685 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -845,6 +845,9 @@ projected shadows. Радиус источника масштабируется синий свет завода почти незаметным. Неположительный итог заменяется на 0,01. Случайные добавки к цвету и радиусу пока явно считаются в `render_coverage control_op1_jitter_unsupported`. +Туман также зависит от расстояния нелинейно: между ближней и дальней границами +движок интерполирует по квадрату дистанции. При границах 0 и 700 точка в 350 +получает четверть тумана, а не половину. Это сохраняет контраст среднего плана. Effect renderer подавляет header bit `0x800` только при render selector 0. Native AniMesh component path захвачен с selector 1, а в его 53-entry manager присутствуют FX entries с header `0xD00`; preview |
