[performance] HD sky повторно трассирует 16 треугольников восхода на каждый пиксель неба #39

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

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

Проверено на f443f0a. Источник: патч 21, gfx/hd_sky.rs: vanilla_sunrise_weight / vanilla_sky, вызываемые из hd.rs::fs_light.

Для вычитания старого неба новый HD-проход заново вычисляет vanilla sunrise fan. При frame.sunrise.a > 0.001 каждый пиксель неба выполняет цикл по 16 треугольникам: построение вершин, cross/dot, проверка пересечения Möller–Trumbore. Аналогичную работу уже делает vanilla-проход terrain.wgsl::sunrise_weight, чей результат затем вычитается.

Небо атмосферы кэшируется в маленькой LUT, но эта часть остаётся полноэкранной. При 50% неба число дополнительных итераций только в HD:

2560×1440: 29 491 200 проверок треугольника / кадр
3840×2160: 66 355 200 проверок треугольника / кадр

Это оценка работы по циклу/покрытию, не GPU-тайминг и не обещание прироста FPS. Компилятор может сворачивать константы, поэтому нужна проверка профилем на Mac. Уже задан needs:profiling.

Что измерить

Сравнить GPU-время hd lighting на одной позиции/разрешении с большим участком неба, в полдень и при sunrise.a>0.001. Затем в тестовой ветке отдельно убрать только повторный расчёт vanilla fan, чтобы изолировать его стоимость; мерить после прогрева и установления TAA.

Варианты доработки

  • Для HD сразу рисовать атмосферное небо в подходящем месте конвейера, отдельно сохраняя звёзды/луну/облака: тогда не нужно сначала рисовать старый фон и потом восстанавливать/вычитать его.
  • Либо передавать отделённый vanilla sky/background или его маску.
  • Как промежуточный шаг — предварительно вычислять инвариантную геометрию и ограничивать угловую область fan до тестов треугольников.

Сохранить внешний вид солнца/луны/звёзд, закатную полосу, туман и off/on. Проверить сравнением кадров, а не уменьшением качества.

🤖 Filed by Codex, AI-агент Владимира (chexit). Проверено на `f443f0a`. Источник: [патч 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_sky.rs`: `vanilla_sunrise_weight` / `vanilla_sky`, вызываемые из `hd.rs::fs_light`. Для вычитания старого неба новый HD-проход заново вычисляет vanilla sunrise fan. При `frame.sunrise.a > 0.001` каждый пиксель неба выполняет цикл по 16 треугольникам: построение вершин, cross/dot, проверка пересечения Möller–Trumbore. Аналогичную работу уже делает vanilla-проход `terrain.wgsl::sunrise_weight`, чей результат затем вычитается. Небо атмосферы кэшируется в маленькой LUT, но эта часть остаётся полноэкранной. При 50% неба число дополнительных итераций только в HD: ```text 2560×1440: 29 491 200 проверок треугольника / кадр 3840×2160: 66 355 200 проверок треугольника / кадр ``` Это оценка работы по циклу/покрытию, **не GPU-тайминг и не обещание прироста FPS**. Компилятор может сворачивать константы, поэтому нужна проверка профилем на Mac. Уже задан `needs:profiling`. ### Что измерить Сравнить GPU-время `hd lighting` на одной позиции/разрешении с большим участком неба, в полдень и при sunrise.a>0.001. Затем в тестовой ветке отдельно убрать только повторный расчёт vanilla fan, чтобы изолировать его стоимость; мерить после прогрева и установления TAA. ### Варианты доработки - Для HD сразу рисовать атмосферное небо в подходящем месте конвейера, отдельно сохраняя звёзды/луну/облака: тогда не нужно сначала рисовать старый фон и потом восстанавливать/вычитать его. - Либо передавать отделённый vanilla sky/background или его маску. - Как промежуточный шаг — предварительно вычислять инвариантную геометрию и ограничивать угловую область fan до тестов треугольников. Сохранить внешний вид солнца/луны/звёзд, закатную полосу, туман и off/on. Проверить сравнением кадров, а не уменьшением качества.
chexit added the type:performanceneeds:profilingpriority:P2area:rendering labels 2026-10-29 16:22:05 +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#39