stringtranslate.com

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


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

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

История

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

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

Ограничения

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

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

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

Создание

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

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

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

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

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

Освещение вершин

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

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

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

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

Ссылки

  1. ^ Абраш, Майкл. «Модель освещения Quake: кэширование поверхности». www.bluesnews.com . Получено 07.09.2015 .
  2. ^ Чанна, Кешав (21 июля 2003 г.). "flipcode - Light Mapping - Theory and Implementation". www.flipcode.com . Получено 07.09.2015 .
  3. ^ "Texture Atlasing Whitepaper" (PDF) . nvidia.com . NVIDIA . 2004-07-07 . Получено 2015-09-07 .
  4. ^ Джейсон Митчелл, Гэри МакТаггарт, Крис Грин, Шейдинг в движке Source от Valve. ( PDF ) Получено 7 июня 2019 г.
  5. 16 ноября 2003 г. Динамические карты освещения в OpenGL. Joshbeam.com Получено 7 июля 2014 г.