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

+4
View File
@@ -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-поза
+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
+3
View File
@@ -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