[performance] Отсекать невидимые эффекты до полноэкранного raymarch взрывов #11
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?
Проверка исходников на
90379f6. Полный Horizon/GPU на Mac не запускался; оценки сложности и ресурсов ниже не являются замерами FPS.effects.wgsl::postнесколько раз обходит до 48 blasts и до 79 glow sources для каждого пикселя. Ветви включают project/screen_radius, shock wave/heat haze, ray-sphere, до 14 шагов интеграции с 3-октавным fbm, flash и glows. Даже маленький или невидимый взрыв попадает в общие полноэкранные циклы. Все 48 сфер не raymarch-ятся в каждом пикселе: ray_sphere уже отсекает непересекающиеся лучи, но предварительный перебор и часть вычислений остаются.Предложение без сокращения эффектов: заранее вычислить frame-invariant параметры каждого эффекта (age, radius, centre, heat/fade, screen bounds); строить консервативные списки кандидатов для tiles/другую форму ограниченного экранного исполнения. Сохранять исходные world resolution, шаги интеграции, шум, число и время жизни эффектов. Переиспользовать precomputed данные между shock/volume/flash/glow стадиями.
Bounds должны учитывать не только огненный шар: дым поднимается/расширяется, shock ring растёт, heat haze и вспышка имеют иной охват. У вспышки есть глобальная засветка кадра, у glow экспоненциальные хвосты: их нельзя просто отрезать прямоугольником сферы и заявить идентичный визуал. Сохранять глобальную составляющую отдельно, а для неограниченных хвостов — исходный расчёт или явно проверенное эквивалентное суммирование. Camera-inside/near plane — fallback.
Критерий: сравнение кадров в массовом перехвате/дыму/вблизи взрыва; число кандидатов и post GPU time измерены. Координировать с исправлением порядка объёмов: списки не должны менять порядок compositing случайно.
Код:
🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/ed2db85 (запушено в main, CI зелёный).