[bug] Объёмные облака композятся только поверх неба и не скрывают технику/рельеф внутри слоя #67

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

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

Ревью 6f3fc644bc5194311a86baba722bc340215306b7. После #53 облака выглядят объёмно на фоне неба, но не участвуют в видимости объектов за облаком/внутри него.

Подтверждено кодом патчей 23/26

gfx/hd/cloud.wgsl::fs_cloud марширует весь cloud slab до 4200 блоков; scene depth не читает. В gfx/hd/light.wgsl::fs_light применение c = c * cl.a + cl.rgb находится внутри if d <= 0.0 && atmosphere. Любой пиксель с глубиной геометрии целиком исключает облачный объём, независимо от того, находится геометрия перед облаком или за ним.

Пример: камера на Y=210 внутри слоя 192.33..264.33, гора/ракета в 200 блоках впереди. На фоне неба луч проходит густое облако; на соседних пикселях силуэта та же плотность перестаёт участвовать в расчёте. С выключенным volumetric fog (HORIZON_HD_VOLFOG=0) различие особенно легко отделить от обычной дымки. Это статическое подтверждение shader path; картинки на GPU здесь не снимались.

Нужно

Маршировать/композить облачное рассеяние до ближайшей видимой поверхности (с понятным порядком воды/прозрачностей), включая камеру внутри слоя. Одного удаления d<=0 недостаточно: нельзя накладывать облака, находящиеся позади ближней горы/техники. Нужна глубина или depth-resolved представление облачного объёма; корректное upsample на границах.

Приёмка

Камера внутри и ниже облака; близкая техника перед слоем, далёкая техника/гора за ним, ракета и вспышка внутри. Сквозь плотный объём объект затухает; перед объёмом остаётся виден. Проверить water/translucency, render scale, camera cut и GPU-бюджет на Mac. Не подменять облако единым экранным fog.

🤖 Filed by Codex, AI-агент Владимира (chexit). Ревью `6f3fc644bc5194311a86baba722bc340215306b7`. После #53 облака выглядят объёмно на фоне неба, но не участвуют в видимости объектов за облаком/внутри него. ### Подтверждено кодом патчей 23/26 `gfx/hd/cloud.wgsl::fs_cloud` марширует весь cloud slab до 4200 блоков; scene depth не читает. В `gfx/hd/light.wgsl::fs_light` применение `c = c * cl.a + cl.rgb` находится **внутри** `if d <= 0.0 && atmosphere`. Любой пиксель с глубиной геометрии целиком исключает облачный объём, независимо от того, находится геометрия перед облаком или за ним. Пример: камера на Y=210 внутри слоя 192.33..264.33, гора/ракета в 200 блоках впереди. На фоне неба луч проходит густое облако; на соседних пикселях силуэта та же плотность перестаёт участвовать в расчёте. С выключенным volumetric fog (`HORIZON_HD_VOLFOG=0`) различие особенно легко отделить от обычной дымки. Это статическое подтверждение shader path; картинки на GPU здесь не снимались. ### Нужно Маршировать/композить облачное рассеяние **до ближайшей видимой поверхности** (с понятным порядком воды/прозрачностей), включая камеру внутри слоя. Одного удаления `d<=0` недостаточно: нельзя накладывать облака, находящиеся позади ближней горы/техники. Нужна глубина или depth-resolved представление облачного объёма; корректное upsample на границах. ### Приёмка Камера внутри и ниже облака; близкая техника перед слоем, далёкая техника/гора за ним, ракета и вспышка внутри. Сквозь плотный объём объект затухает; перед объёмом остаётся виден. Проверить water/translucency, render scale, camera cut и GPU-бюджет на Mac. Не подменять облако единым экранным fog.
chexit added the type:bugpriority:P2area:rendering labels 2026-10-29 21:12:06 +00:00
Author
Owner

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

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

No dependencies set.

Reference: chexit/airdef#67