Карта освещения
Тема этой статьи Википедии может не соответствовать общему правилу по известности . ( февраль 2016 г. ) |
Карта освещения — это структура данных , используемая в картографии освещения , форме кэширования поверхностей , при которой яркость поверхностей в виртуальной сцене предварительно рассчитывается и сохраняется в картах текстур для последующего использования. Карты освещения чаще всего применяются к статичным объектам в приложениях, использующих в реальном времени трехмерную компьютерную графику , таких как видеоигры , чтобы обеспечить световые эффекты, такие как глобальное освещение, при относительно низких вычислительных затратах.
История
[ редактировать ]Джона Кармака была Quake первой компьютерной игрой, в которой для улучшения рендеринга использовались карты освещения . [1] До изобретения карт освещения приложения реального времени полагались исключительно на затенение Гуро для интерполяции вершинного освещения поверхностей. Это позволяло получать только низкочастотную информацию об освещении и могло создавать артефакты отсечения рядом с камерой без интерполяции с учетом перспективы. сетка с разрывами, Иногда использовалась особенно с решениями по излучению , для адаптивного улучшения разрешения информации о вершинном освещении, однако дополнительные затраты на настройку примитивов для растеризации в реальном времени, как правило, были непомерно высокими. кэширование Программный растеризатор Quake использовал поверхности для применения расчетов освещения в пространстве текстур один раз, когда полигоны первоначально появлялись внутри усеченного конуса просмотра (фактически создавая временные «освещенные» версии видимых в данный момент текстур по мере того, как зритель исследовал сцену).
По мере того, как потребительское оборудование для 3D-графики способно к мультитекстурированию , отображение освещения стало более популярным, и движки начали комбинировать карты освещения в реальном времени в качестве вторичного слоя текстуры с множественным наложением .
Ограничения
[ редактировать ]Карты освещения состоят из люмелей. [2] (элементы свечения), аналогичные текселям в наложении текстур . Меньшие люмелы дают карту освещения с более высоким разрешением , обеспечивая более точную детализацию освещения за счет снижения производительности и увеличения использования памяти. Например, масштаб карты освещения в 4 люмеля на единицу мира даст более низкое качество, чем масштаб в 16 люмелей на единицу мира. Таким образом, при использовании этой техники дизайнерам уровней и 3D-художникам часто приходится идти на компромисс между производительностью и качеством; Если карты освещения высокого разрешения используются слишком часто, приложение может потреблять чрезмерные системные ресурсы, что отрицательно влияет на производительность. Разрешение и масштабирование карты освещения также могут быть ограничены объемом дискового пространства, пропускной способностью/временем загрузки или текстурной памятью, доступной приложению. Некоторые реализации пытаются объединить несколько карт освещения вместе в процессе, известном как атласирование. [3] чтобы помочь обойти эти ограничения.
Разрешение и масштаб карты освещения — две разные вещи. Разрешение — это область в пикселях, доступная для хранения одной или нескольких карт освещения поверхности. Количество отдельных поверхностей, которые могут поместиться на карте освещения, определяется масштабом. Меньшие значения масштаба означают более высокое качество и больше места на карте освещения. Более высокие значения масштаба означают более низкое качество и меньше места. Поверхность может иметь карту освещения, имеющую ту же площадь, то есть соотношение 1:1, или меньше, поэтому карта освещения растягивается по размеру.
Карты освещения в играх обычно представляют собой цветные текстурные карты. Обычно они плоские, без информации о направлении света, в то время как некоторые игровые движки используют несколько карт освещения для предоставления приблизительной информации о направлении для объединения с картами нормалей. Карты освещения также могут хранить отдельные предварительно рассчитанные компоненты информации об освещении для полудинамического освещения с помощью шейдеров, таких как окружающее затенение и затенение солнечного света.
Создание
[ редактировать ]При создании карт освещения можно использовать любую модель освещения, поскольку освещение полностью рассчитывается заранее и производительность в реальном времени не всегда является необходимостью. Разнообразные методы, включая фоновую окклюзию , прямое освещение с выборочными краями теней и полную излучательность. [4] Обычно используются решения отраженного света. Современные 3D-пакеты включают специальные плагины для применения UV-координат карты освещения, объединения нескольких поверхностей в единые листы текстур и рендеринга самих карт. В качестве альтернативы конвейеры игрового движка могут включать в себя специальные инструменты создания карт освещения. Дополнительным соображением является использование сжатых текстур DXT , которые подвержены блокирующим артефактам — для достижения наилучших результатов отдельные поверхности не должны сталкиваться с фрагментами текселей 4x4.
Во всех случаях мягкие тени для статической геометрии возможны, если используются простые тесты окклюзии (например, базовая трассировка лучей ) для определения того, какие люмелы видны свету. Однако фактическая мягкость теней определяется тем, как движок интерполирует данные люмелей по поверхности, и может привести к пикселизированному виду, если люмелы слишком велики. См. фильтрацию текстур .
Карты освещения также можно рассчитывать в режиме реального времени. [5] для эффектов цветного освещения хорошего качества, которые не подвержены дефектам затенения Гуро, хотя создание теней все равно должно выполняться с использованием другого метода, такого как трафаретные объемы теней или отображение теней , поскольку трассировка лучей в реальном времени все еще слишком медленна для выполнения современное оборудование в большинстве 3D-движков.
Фотонное картирование можно использовать для расчета глобального освещения для карт освещения.
Альтернативы
[ редактировать ]Вертексное освещение
[ редактировать ]При вершинном освещении информация об освещении вычисляется для каждой вершины и сохраняется в атрибутах цвета вершины . Эти два метода могут быть объединены, например, значения цвета вершин сохраняются для сеток с высокой детализацией, тогда как карты освещения используются только для более грубой геометрии.
Картирование разрывов
[ редактировать ]При отображении разрывов сцена может быть дополнительно разделена и обрезана по основным изменениям в свете и темноте, чтобы лучше определить тени.
См. также
[ редактировать ]- Выпечка (компьютерная графика)
- Карта окружающей среды
- Окклюзия окружающего пространства экрана
- Шейдер
- Наложение текстур
Ссылки
[ редактировать ]- ^ Абраш, Майкл. «Модель освещения Quake: поверхностное кэширование» . www.bluesnews.com . Проверено 7 сентября 2015 г.
- ^ Чанна, Кешав (21 июля 2003 г.). «Флипкод — Световое картирование — Теория и реализация» . www.flipcode.com . Проверено 7 сентября 2015 г.
- ^ «Технический документ по атласу текстур» (PDF) . nvidia.com . NVIDIA . 7 июля 2004 г. Проверено 7 сентября 2015 г.
- ^ Джейсон Митчелл, Гэри МакТаггарт, Крис Грин, Шейдинг в Source Engine от Valve . ( PDF ) Проверено 7 июня 2019 г.
- ↑ 16 ноября 2003. Динамические карты освещения в OpenGL . Joshbeam.com Проверено 7 июля 2014 г.