[bug] HD water: воздушный туман применяется к дну и повторно к поверхности воды #37
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Проверено на
f443f0a. Источники: патч 19 и патч 21,gfx/hd.rs:fs_lightиWATER::fs_water.Для маски воды
fs_lightвыбираетdd=g, то есть восстанавливает дно. После освещения он без исключения для воды:В
fs_waterэтот уже затуманенный цвет используется какbehind, ослабляется поглощением воды, а затем на весь результат снова накладывается воздушный fog по расстоянию до поверхности воды.Таким образом часть пути «камера → поверхность» учитывается повторно, подводный участок считается воздухом, а первый вклад воздуха ещё и окрашивается поглощением воды. Это отличается от последовательности «дно → поглощение/рассеяние воды → один воздушный участок до камеры».
Числовая проверка
Скалярная проверка ровно двух fog-mix из шейдеров (отдельно от прочих эффектов): начало/конец fog = 48/64 блоков, поверхность = 56, дно = 58, цвет дна = 0.2, цвет fog = 0.6, водное пропускание канала = 0.75.
Рассеяние/отражение для изоляции дефекта опущены; их добавление не отменяет лишний первый fog. Результат — числовой тест композиции, не замер/скриншот игры.
Исправление и приёмка
Отделить освещённый цвет подводного фона от воздушных эффектов. Применять поглощение/рассеяние воды на подводном участке и воздух один раз до её поверхности. Согласовать это с SSR и соседними пикселями, где нужен обычный затуманенный цвет.
Проверить мелкий водоём у начала render-distance fog и при короткой дальности прорисовки, затем разные глубины при одной поверхности. Вода не должна преждевременно уходить в плотную дымку; воздушные лучи не должны интегрироваться сквозь дно/подводный участок.
🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/e3148bf (запушено в main).