[bug] HD water: воздушный туман применяется к дну и повторно к поверхности воды #37

Closed
opened 2026-10-29 16:21:53 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Проверено на f443f0a. Источники: патч 19 и патч 21, gfx/hd.rs: fs_light и WATER::fs_water.

Для маски воды fs_light выбирает dd=g, то есть восстанавливает дно. После освещения он без исключения для воды:

  1. накладывает воздушный fog по расстоянию до дна;
  2. в патче 21 добавляет aerial perspective по этому же расстоянию;
  3. считает воздушные лучи/ореолы до дна.

В fs_water этот уже затуманенный цвет используется как behind, ослабляется поглощением воды, а затем на весь результат снова накладывается воздушный fog по расстоянию до поверхности воды.

Таким образом часть пути «камера → поверхность» учитывается повторно, подводный участок считается воздухом, а первый вклад воздуха ещё и окрашивается поглощением воды. Это отличается от последовательности «дно → поглощение/рассеяние воды → один воздушный участок до камеры».

Числовая проверка

Скалярная проверка ровно двух fog-mix из шейдеров (отдельно от прочих эффектов): начало/конец fog = 48/64 блоков, поверхность = 56, дно = 58, цвет дна = 0.2, цвет fog = 0.6, водное пропускание канала = 0.75.

fog дна = 0.625; fog поверхности = 0.5
текущая последовательность: 0.46875
водное поглощение + один fog поверхности: 0.375
лишний вклад: 0.09375

Рассеяние/отражение для изоляции дефекта опущены; их добавление не отменяет лишний первый fog. Результат — числовой тест композиции, не замер/скриншот игры.

Исправление и приёмка

Отделить освещённый цвет подводного фона от воздушных эффектов. Применять поглощение/рассеяние воды на подводном участке и воздух один раз до её поверхности. Согласовать это с SSR и соседними пикселями, где нужен обычный затуманенный цвет.

Проверить мелкий водоём у начала render-distance fog и при короткой дальности прорисовки, затем разные глубины при одной поверхности. Вода не должна преждевременно уходить в плотную дымку; воздушные лучи не должны интегрироваться сквозь дно/подводный участок.

🤖 Filed by Codex, AI-агент Владимира (chexit). Проверено на `f443f0a`. Источники: [патч 19](https://gitea.maoniao.team/chexit/airdef/src/commit/f443f0a94a71eb2d446792f1829146f9563aaf5d/horizon-patches/0019-HD-water-its-own-pass-colour-normal-depth-the-floor-.patch) и [патч 21](https://gitea.maoniao.team/chexit/airdef/src/commit/f443f0a94a71eb2d446792f1829146f9563aaf5d/horizon-patches/0021-HD-sky-and-light-a-physical-atmosphere-Rayleigh-Mie-.patch), `gfx/hd.rs`: `fs_light` и `WATER::fs_water`. Для маски воды `fs_light` выбирает `dd=g`, то есть восстанавливает **дно**. После освещения он без исключения для воды: 1. накладывает воздушный fog по расстоянию до дна; 2. в патче 21 добавляет aerial perspective по этому же расстоянию; 3. считает воздушные лучи/ореолы до дна. В `fs_water` этот уже затуманенный цвет используется как `behind`, ослабляется поглощением воды, а затем на весь результат снова накладывается воздушный fog по расстоянию до **поверхности** воды. Таким образом часть пути «камера → поверхность» учитывается повторно, подводный участок считается воздухом, а первый вклад воздуха ещё и окрашивается поглощением воды. Это отличается от последовательности «дно → поглощение/рассеяние воды → один воздушный участок до камеры». ### Числовая проверка Скалярная проверка ровно двух fog-mix из шейдеров (отдельно от прочих эффектов): начало/конец fog = 48/64 блоков, поверхность = 56, дно = 58, цвет дна = 0.2, цвет fog = 0.6, водное пропускание канала = 0.75. ```text fog дна = 0.625; fog поверхности = 0.5 текущая последовательность: 0.46875 водное поглощение + один fog поверхности: 0.375 лишний вклад: 0.09375 ``` Рассеяние/отражение для изоляции дефекта опущены; их добавление не отменяет лишний первый fog. Результат — числовой тест композиции, не замер/скриншот игры. ### Исправление и приёмка Отделить освещённый цвет подводного фона от воздушных эффектов. Применять поглощение/рассеяние воды на подводном участке и воздух один раз до её поверхности. Согласовать это с SSR и соседними пикселями, где нужен обычный затуманенный цвет. Проверить мелкий водоём у начала render-distance fog и при короткой дальности прорисовки, затем разные глубины при одной поверхности. Вода не должна преждевременно уходить в плотную дымку; воздушные лучи не должны интегрироваться сквозь дно/подводный участок.
chexit added the type:bugpriority:P2area:rendering labels 2026-10-29 16:21:53 +00:00
Author
Owner

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/e3148bf (запушено в main).

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/e3148bf (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#37