[bug] HD: пасмурность неба и сила солнца зависят от геометрии дождя возле камеры #41

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

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

Проверено на f443f0a. Источники: gfx.rs (HdScene, строка 4265 восстановленного форка), gfx/hd.rs::write и патч 21. Прослежен также upstream game.rs::weather_geometry на HORIZON_COMMIT b6c936f.

Сейчас состояние погоды для HD выводится из геометрии осадков:

rain: if frame.weather.is_empty() { 0.0 } else { 0.7 }

Frame.weather — срез вершин дождя/снега вокруг камеры, а не уровень дождя мира. В game.rs он пуст, например:

  • когда выключен клиентский показ погоды (settings.horizon.weather);
  • при weather_radius=0 (у каждой колонки y0 == y1);
  • в биоме без осадков либо под достаточно широкой/высокой крышей;
  • когда не удалось построить колонки/найти нужные ресурсы.

Мировой уровень дождя при этом может оставаться ненулевым. И наоборот, при едва начавшемся дожде достаточно одного quad, чтобы получить сразу 0.7.

Новая атмосфера превращает это значение в sky_extra.z=(rain/0.7)*0.85: от 0 сразу к 0.85. Оно меняет небо, солнечный диск, дымку и отражения воды; light_of по нему же ослабляет прямой свет. В результате отключение дождевых частиц либо переход под крышу/в сухой биом переключает глобальное освещение и небо, а плавный переход погоды теряется.

Проверка

Прослежен путь от world.weather.levels(alpha) через построение локальной геометрии к Frame.weather, затем приведённые ветки HD. При одном и том же мировом дожде пустой и непустой массив вершин дают overcast 0 и 0.85 соответственно. Проверка по исходникам и формулам; GPU-запуск здесь не выполнялся.

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

Передавать в Frame/HdScene интерполированные мировые rain/thunder levels отдельно от вершин осадков. Настройка видимости/радиуса частиц должна влиять только на их отрисовку. Если нужен локальный эффект укрытия/биома, он не должен подменять глобальное состояние атмосферы.

Зафиксировать погоду и время, сравнить с показом дождя и без, с разными weather_radius, под большой крышей и рядом с ней, в сухом и дождливом биоме. Проверить плавное начало/окончание дождя и отражение неба в воде.

🤖 Filed by Codex, AI-агент Владимира (chexit). Проверено на `f443f0a`. Источники: `gfx.rs` (`HdScene`, строка 4265 восстановленного форка), `gfx/hd.rs::write` и [патч 21](https://gitea.maoniao.team/chexit/airdef/src/commit/f443f0a94a71eb2d446792f1829146f9563aaf5d/horizon-patches/0021-HD-sky-and-light-a-physical-atmosphere-Rayleigh-Mie-.patch). Прослежен также upstream `game.rs::weather_geometry` на HORIZON_COMMIT `b6c936f`. Сейчас состояние погоды для HD выводится из геометрии осадков: ```rust rain: if frame.weather.is_empty() { 0.0 } else { 0.7 } ``` `Frame.weather` — срез вершин дождя/снега вокруг камеры, а не уровень дождя мира. В `game.rs` он пуст, например: - когда выключен клиентский показ погоды (`settings.horizon.weather`); - при `weather_radius=0` (у каждой колонки `y0 == y1`); - в биоме без осадков либо под достаточно широкой/высокой крышей; - когда не удалось построить колонки/найти нужные ресурсы. Мировой уровень дождя при этом может оставаться ненулевым. И наоборот, при едва начавшемся дожде достаточно одного quad, чтобы получить сразу 0.7. Новая атмосфера превращает это значение в `sky_extra.z=(rain/0.7)*0.85`: от 0 сразу к 0.85. Оно меняет небо, солнечный диск, дымку и отражения воды; `light_of` по нему же ослабляет прямой свет. В результате отключение дождевых частиц либо переход под крышу/в сухой биом переключает **глобальное** освещение и небо, а плавный переход погоды теряется. ### Проверка Прослежен путь от `world.weather.levels(alpha)` через построение локальной геометрии к `Frame.weather`, затем приведённые ветки HD. При одном и том же мировом дожде пустой и непустой массив вершин дают overcast 0 и 0.85 соответственно. Проверка по исходникам и формулам; GPU-запуск здесь не выполнялся. ### Исправление и приёмка Передавать в `Frame`/`HdScene` интерполированные мировые rain/thunder levels отдельно от вершин осадков. Настройка видимости/радиуса частиц должна влиять только на их отрисовку. Если нужен локальный эффект укрытия/биома, он не должен подменять глобальное состояние атмосферы. Зафиксировать погоду и время, сравнить с показом дождя и без, с разными weather_radius, под большой крышей и рядом с ней, в сухом и дождливом биоме. Проверить плавное начало/окончание дождя и отражение неба в воде.
chexit added the area:renderingtype:bugpriority:P2 labels 2026-10-29 16:22:18 +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#41