fix(render): use native squared distance for vertex fog
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s

This commit is contained in:
Valentin Popov committed 2026-10-31 19:13:43 +04:00
1 parent 108a04b70e
commit 9f643149a6
7 files changed
+75 -8

No files matched your search

+20
View File
@@ -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