[bug] Перекрывающиеся огонь и дым композятся в порядке создания вместо глубины #16
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.В
shader_params()blasts передаются черезiter().rev()— новые первыми. Вeffects.wgslпеременнаяtransобщая для всех объёмов; каждый объём целиком композится перед следующим, что предполагает front-to-back порядок. Хронология взрывов не совпадает с глубиной вдоль view ray.Следствие: дальний новый огонь может подавить ближний старый дым, а результат зависит от времени создания даже при одинаковой геометрии. Алгебра alpha compositing: ближний дым color=.1/alpha=.8 перед дальним огнём color=3/alpha=.8 даёт .56; обратный порядок даёт 2.416. Это анализ формулы, не снятый GPU-кадр.
Предложение: обеспечить корректный порядок по входам луча в непересекающиеся объёмы. Для пересекающихся объёмов сортировка только по центрам недостаточна: нужна согласованная интеграция/обработка перекрытия. Избежать дорогой сортировки всех 48 объёмов для каждого пикселя; использовать короткие tile candidate lists и сравнить стоимость. Минимальное исправление отдельно покрыть сценой двух разнесённых по глубине сфер.
Критерий: перестановка порядка создания двух статичных объёмов не меняет итог; камера может обходить их без неверной смены переднего/заднего; сравнить GPU time.
Код:
🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/67a2a52 (запушено в main).