Карта освещения — это структура данных , используемая в картографии освещения , форме кэширования поверхностей , при которой яркость поверхностей в виртуальной сцене предварительно рассчитывается и сохраняется в картах текстур для последующего использования. Карты освещения чаще всего применяются к статичным объектам в приложениях, использующих трехмерную компьютерную графику в реальном времени , таких как видеоигры , чтобы обеспечить световые эффекты, такие как глобальное освещение, при относительно низких вычислительных затратах.
Quake Джона Кармака была первой компьютерной игрой, в которой для улучшения рендеринга использовались карты освещения . [1] До изобретения карт освещения приложения реального времени полагались исключительно на затенение Гуро для интерполяции вершинного освещения поверхностей. Это позволяло получать только низкочастотную информацию об освещении и могло создавать артефакты обрезки рядом с камерой без интерполяции с учетом перспективы. Иногда использовалась сетка с разрывами, особенно с решениями по излучению , для адаптивного улучшения разрешения информации о вершинном освещении, однако дополнительные затраты на примитивную настройку для растеризации в реальном времени, как правило, были непомерно высокими. Программный растеризатор Quake использовал кэширование поверхности для применения расчетов освещения в пространстве текстур один раз, когда полигоны изначально появляются внутри усеченного конуса просмотра (фактически создавая временные «освещенные» версии видимых в данный момент текстур по мере того, как зритель перемещается по сцене).
По мере того как потребительское оборудование для 3D-графики способно к мультитекстурированию , отображение освещения стало более популярным, и движки начали комбинировать карты освещения в реальном времени в качестве вторичного слоя текстуры с множественным наложением .
Карты освещения состоят из люмелей [2] (элементов освещения), аналогичных текселям в наложении текстур . Меньшие люмелы дают карту освещения с более высоким разрешением , обеспечивая более точную детализацию освещения за счет снижения производительности и увеличения использования памяти. Например, масштаб карты освещения в 4 люмеля на единицу мира даст более низкое качество, чем масштаб в 16 люмелей на единицу мира. Таким образом, при использовании этой техники дизайнерам уровней и 3D-художникам часто приходится идти на компромисс между производительностью и качеством; Если карты освещения высокого разрешения используются слишком часто, приложение может потреблять чрезмерные системные ресурсы, что отрицательно влияет на производительность. Разрешение и масштабирование карты освещения также могут быть ограничены объемом дискового пространства, пропускной способностью/временем загрузки или текстурной памятью, доступной приложению. Некоторые реализации пытаются объединить несколько карт освещения вместе в процессе, известном как атлас [3] , чтобы обойти эти ограничения.
Разрешение и масштаб карты освещения — две разные вещи. Разрешение — это область в пикселях, доступная для хранения одной или нескольких карт освещения поверхности. Количество отдельных поверхностей, которые могут поместиться на карте освещения, определяется масштабом. Меньшие значения масштаба означают более высокое качество и больше места на карте освещения. Более высокие значения масштаба означают более низкое качество и меньше места. Поверхность может иметь карту освещения той же площади, то есть с соотношением 1:1, или меньше, поэтому карта освещения растягивается по размеру.
Карты освещения в играх обычно представляют собой цветные карты текстур или цвета вершин. Обычно они плоские, без информации о направлении света, в то время как некоторые игровые движки используют несколько карт освещения для предоставления приблизительной информации о направлении для объединения с картами нормалей. Карты освещения также могут хранить отдельные предварительно рассчитанные компоненты информации об освещении для полудинамического освещения с помощью шейдеров, таких как окружающее затенение и затенение солнечного света.
При создании карт освещения можно использовать любую модель освещения, поскольку освещение полностью рассчитывается заранее и производительность в реальном времени не всегда является необходимостью. Обычно используются различные методы, включая фоновую окклюзию , прямое освещение с выборочными краями теней и решения с полным рассеянием [4] отраженного света. Современные 3D-пакеты включают специальные плагины для применения UV-координат карты освещения, объединения нескольких поверхностей в единые листы текстур и рендеринга самих карт. В качестве альтернативы конвейеры игрового движка могут включать в себя специальные инструменты создания карт освещения. Дополнительным соображением является использование сжатых текстур DXT , которые подвержены блокирующим артефактам — для достижения наилучших результатов отдельные поверхности не должны сталкиваться с фрагментами текселей 4x4.
Во всех случаях мягкие тени для статической геометрии возможны, если используются простые тесты окклюзии (например, базовая трассировка лучей ) для определения того, какие люмелы видны свету. Однако фактическая мягкость теней определяется тем, как движок интерполирует данные люмелей по поверхности, и может привести к пикселизированному виду, если люмелы слишком велики. См. фильтрацию текстур .
Карты освещения также можно рассчитывать в режиме реального времени [5] для получения цветных световых эффектов хорошего качества, которые не подвержены дефектам затенения Гуро, хотя создание теней все равно должно выполняться с использованием другого метода, такого как трафаретные объемы теней или наложение теней , как в реальности. -Time-трассировка лучей по-прежнему слишком медленная для работы на современном оборудовании в большинстве 3D-движков.
Фотонное картирование можно использовать для расчета глобального освещения для карт освещения.
При вершинном освещении информация об освещении вычисляется для каждой вершины и сохраняется в атрибутах цвета вершины . Эти два метода могут быть объединены, например, значения цвета вершин сохраняются для сеток с высокой детализацией, тогда как карты освещения используются только для более грубой геометрии.
При отображении разрывов сцена может быть дополнительно разделена и обрезана по основным изменениям в свете и темноте, чтобы лучше определить тени.