stringtranslate.com

Карта освещения


Куб с простой картой освещения (показан справа).

Карта освещения — это структура данных , используемая в картографии освещения , форме кэширования поверхностей , при которой яркость поверхностей в виртуальной сцене предварительно рассчитывается и сохраняется в картах текстур для последующего использования. Карты освещения чаще всего применяются к статичным объектам в приложениях, использующих трехмерную компьютерную графику в реальном времени , таких как видеоигры , чтобы обеспечить световые эффекты, такие как глобальное освещение, при относительно низких вычислительных затратах.

История

Quake Джона Кармака была первой компьютерной игрой, в которой для улучшения рендеринга использовались карты освещения . [1] До изобретения карт освещения приложения реального времени полагались исключительно на затенение Гуро для интерполяции вершинного освещения поверхностей. Это позволяло получать только низкочастотную информацию об освещении и могло создавать артефакты обрезки рядом с камерой без интерполяции с учетом перспективы. Иногда использовалась сетка с разрывами, особенно с решениями по излучению , для адаптивного улучшения разрешения информации о вершинном освещении, однако дополнительные затраты на примитивную настройку для растеризации в реальном времени, как правило, были непомерно высокими. Программный растеризатор Quake использовал кэширование поверхности для применения расчетов освещения в пространстве текстур один раз, когда полигоны изначально появляются внутри усеченного конуса просмотра (фактически создавая временные «освещенные» версии видимых в данный момент текстур по мере того, как зритель перемещается по сцене).

По мере того как потребительское оборудование для 3D-графики способно к мультитекстурированию , отображение освещения стало более популярным, и движки начали комбинировать карты освещения в реальном времени в качестве вторичного слоя текстуры с множественным наложением .

Ограничения

Карты освещения состоят из люмелей [2] (элементов освещения), аналогичных текселям в наложении текстур . Меньшие люмелы дают карту освещения с более высоким разрешением , обеспечивая более точную детализацию освещения за счет снижения производительности и увеличения использования памяти. Например, масштаб карты освещения в 4 люмеля на единицу мира даст более низкое качество, чем масштаб в 16 люмелей на единицу мира. Таким образом, при использовании этой техники дизайнерам уровней и 3D-художникам часто приходится идти на компромисс между производительностью и качеством; Если карты освещения высокого разрешения используются слишком часто, приложение может потреблять чрезмерные системные ресурсы, что отрицательно влияет на производительность. Разрешение и масштабирование карты освещения также могут быть ограничены объемом дискового пространства, пропускной способностью/временем загрузки или текстурной памятью, доступной приложению. Некоторые реализации пытаются объединить несколько карт освещения вместе в процессе, известном как атлас [3] , чтобы обойти эти ограничения.

Разрешение и масштаб карты освещения — две разные вещи. Разрешение — это область в пикселях, доступная для хранения одной или нескольких карт освещения поверхности. Количество отдельных поверхностей, которые могут поместиться на карте освещения, определяется масштабом. Меньшие значения масштаба означают более высокое качество и больше места на карте освещения. Более высокие значения масштаба означают более низкое качество и меньше места. Поверхность может иметь карту освещения той же площади, то есть с соотношением 1:1, или меньше, поэтому карта освещения растягивается по размеру.

Карты освещения в играх обычно представляют собой цветные карты текстур или цвета вершин. Обычно они плоские, без информации о направлении света, в то время как некоторые игровые движки используют несколько карт освещения для предоставления приблизительной информации о направлении для объединения с картами нормалей. Карты освещения также могут хранить отдельные предварительно рассчитанные компоненты информации об освещении для полудинамического освещения с помощью шейдеров, таких как окружающее затенение и затенение солнечного света.

Создание

При создании карт освещения можно использовать любую модель освещения, поскольку освещение полностью рассчитывается заранее и производительность в реальном времени не всегда является необходимостью. Обычно используются различные методы, включая фоновую окклюзию , прямое освещение с выборочными краями теней и решения с полным рассеянием [4] отраженного света. Современные 3D-пакеты включают специальные плагины для применения UV-координат карты освещения, объединения нескольких поверхностей в единые листы текстур и рендеринга самих карт. В качестве альтернативы конвейеры игрового движка могут включать в себя специальные инструменты создания карт освещения. Дополнительным соображением является использование сжатых текстур DXT , которые подвержены блокирующим артефактам — для достижения наилучших результатов отдельные поверхности не должны сталкиваться с фрагментами текселей 4x4.

Во всех случаях мягкие тени для статической геометрии возможны, если используются простые тесты окклюзии (например, базовая трассировка лучей ) для определения того, какие люмелы видны свету. Однако фактическая мягкость теней определяется тем, как движок интерполирует данные люмелей по поверхности, и может привести к пикселизированному виду, если люмелы слишком велики. См. фильтрацию текстур .

Карты освещения также можно рассчитывать в режиме реального времени [5] для получения цветных световых эффектов хорошего качества, которые не подвержены дефектам затенения Гуро, хотя создание теней все равно должно выполняться с использованием другого метода, такого как трафаретные объемы теней или наложение теней , как в реальности. -Time-трассировка лучей по-прежнему слишком медленная для работы на современном оборудовании в большинстве 3D-движков.

Фотонное картирование можно использовать для расчета глобального освещения для карт освещения.

Альтернативы

Вертексное освещение

При вершинном освещении информация об освещении вычисляется для каждой вершины и сохраняется в атрибутах цвета вершины . Эти два метода могут быть объединены, например, значения цвета вершин сохраняются для сеток с высокой детализацией, тогда как карты освещения используются только для более грубой геометрии.

Картирование разрывов

При отображении разрывов сцена может быть дополнительно разделена и обрезана по основным изменениям в свете и темноте, чтобы лучше определить тени.

Смотрите также

Рекомендации

  1. ^ Абраш, Майкл. «Модель освещения Quake: поверхностное кэширование». www.bluesnews.com . Проверено 7 сентября 2015 г.
  2. Чанна, Кешав (21 июля 2003 г.). «Флипкод – Световое картирование – Теория и реализация». www.flipcode.com . Проверено 7 сентября 2015 г.
  3. ^ «Информационный документ по атласу текстур» (PDF) . nvidia.com . NVIDIA . 7 июля 2004 г. Проверено 7 сентября 2015 г.
  4. ^ Джейсон Митчелл, Гэри МакТаггарт, Крис Грин, Шейдинг в Source Engine от Valve. ( PDF ) Получено 7 июня 2019 г.
  5. 16 ноября 2003 г. Динамические карты освещения в OpenGL. Joshbeam.com Проверено 7 июля 2014 г.