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