Глобальное освещение — одна из самых красивых и одновременно самых сложных задач в компьютерной графике. Она включает не только прямой свет от источников, но и все его переотражения от поверхностей, преломления, рассеяния и прочие танцы фотонов в сцене.
Многие алгоритмы, включая path tracing, radiosity и voxel cone tracing, пытаются справиться с этой задачей десятилетиями. Некоторые дают красивую картинку, но требуют больших вычислительных ресурсов. Другие — быстрые, но страдают от шума, артефактов и утечек света.
Что если можно приблизиться к качеству трассировки бесконечного количества лучей, потратив ограниченное количество ресурсов? Именно такую цель преследует метод Каскадов яркости (Radiance Cascades), впервые предложенный Александром Санниковым из Grinding Gear Games. (заготовку его статьи можно посмотреть вот в этом репозитории)

Как это всё устроено
Методы глобального освещения условно делятся на:
-
Динамические: Voxel Cone Tracing, Light Propagation Volumes, Lumen.
-
Статические: lightmaps, precomputed radiance transfer (PRT).
Каждый подход имеет свои ограничения: утечки света, потеря деталей, низкая динамичность или высокие требования к ресурсам.
Метод Каскадов яркости предлагает новый подход: разбить поле яркости сцены на интервалы по расстоянию и хранить их иерархически. При этом ближние источники кодируются с высоким пространственным разрешением, дальние — с высоким угловым.
Уравнение глобального освещения
Фундаментальное уравнение рендеринга описывает выходящую яркость из точки в направлении
:
В реальном времени ограничиваются одним непрямым отскоком:
Именно это приближение используется в каскадах яркости.
Гипотеза полутени
Полутени от источников света требуют разного разрешения вблизи и вдали:
-
Вблизи нужно высокое пространственное разрешение.
-
Вдали — высокое угловое разрешение.
Гипотеза полутени формализует эту идею:
Где:
-
— пространственный шаг.
-
— угловой шаг.
-
— расстояние до источника.
Интервалы яркости
Вместо хранения общей яркости мы делим её на интервалы по расстоянию:
= яркость от направления
, идущая от
до
,
Итоговая яркость собирается суммированием интервалов:
Где — прозрачность участка.

Построение и обновление каскадов
Изначально каскады создаются путём равномерного распределения зондов по пространству сцены, где каждый каскад охватывает свой диапазон расстояний. При изменении камеры или динамических объектов каскады обновляются: ближние каскады пересчитываются полностью или частично, дальние – реже или с использованием временных фильтров (temporal reprojection), чтобы минимизировать затраты на обновление.
Процесс сбора (sampling) яркости
Для каждой точки сцены выборка яркости проводится следующим образом:
-
Определяется подходящий каскад на основе расстояния.
-
Из этого каскада извлекаются значения яркости ближайших зондов.
-
Линейно интерполируются значения соседних зондов, учитывая пространственную и угловую компоненты, и производится взвешенная сумма для итогового результата.
Типичные проблемы и их решение
Метод каскадов яркости помогает минимизировать следующие проблемы:
-
Утечки света: иерархическая структура и чёткое разделение по расстояниям предотвращают некорректные интерполяции между дальними и ближними зондами.
-
Полосы интерполяции и мерцание: за счёт линейной интерполяции и временных фильтров (temporal reprojection) сглаживаются возможные артефакты и шумы.
Хранение данных
Каскады хранятся в октэдральных или кубических текстурах. Это позволяет компактно и равномерно сохранять данные о направлении света и яркости, упрощая последующую интерполяцию и ускоряя доступ к данным.
Прозрачность (β-значения)
Значения прозрачности (β) рассчитываются отдельно на каждом интервале и используются для объединения яркости из различных каскадов. Это позволяет корректно учитывать перекрывающиеся слои яркости и создавать гладкий итоговый результат.
Экспоненциальное расширение
Метод экспоненциального расширения интервалов снижает затраты на raymarching. Интервалы удваиваются по мере удаления от камеры, что уменьшает число требуемых вычислений и обеспечивает высокую производительность.
Производительность
В Path of Exile 2 типичный каскад содержит около нескольких сотен зондов с текстурами размером 128×128. Это позволяет игре достигать производительности около 3 мс на кадр при высоком качестве освещения.

Заключение
Каскады яркости — это новый подход к решению задачи глобального освещения, естественным образом объединяющий пространство и направление в иерархию. Главное преимущество — масштабируемость и локальность без артефактов и утечек света.
Если вам интересны такого рода посты, можете подписаться на мой telegram, там я пишу посты поменьше. В основном я затрагиваю темы применения математики (от базовой до нейросетей) в видеоиграх, но также уделяю внимание видеоиграм как области искусства.
ссылка на оригинал статьи https://habr.com/ru/articles/897956/
Добавить комментарий