Время выполнения световых карт
Все освещение в этой сцене предоставляется текстурами световых карт
Генерация световых карт - это процесс предварительного расчета информации об освещении для статической сцены и сохранения ее в текстурах, которые затем применяются к материалам. Это эффективный и реалистичный способ освещения сцены, если многие источники света и геометрия являются статическими или окружающими.
Генерация световых карт во время выполнения
PlayCanvas предлагает удобное решение для генерации световых карт. Используя стандартные компоненты света в редакторе, вы можете выбрать, какие источники света используются для выпечки световых карт и какие используются для динамического освещения сцены во время выполнения. Источники света, которые вы устанавливаете для выпечки, будут использоваться при генерации световых карт, освещающих сцену.
Генерация световых карт во время выполнения имеет несколько преимуществ:
- Освещение не выполняется во время выполнения
- Можно использовать сотни статических источников света для освещения сцены
- В большинстве случаев отрисовка световых карт во время выполнения быстрее, чем загрузка множества текстур световых карт
- В редакторе можно смешивать статические и динамические источники света
- Перевыпечка может быть выполнена во время выполнения
- Световые карты имеют HDR
- Можно выпекать как цвет, так и направление данных, что позволяет добавить некоторую зеркальность на выпеченные поверхности
Однако недостатком генерации световых карт во время выполнения является то, что в настоящее время мы не поддерживаем выпечку глобального освещения или некоторых других продвинутых функций специализированных инструментов выпечки.
Настройка источников света для выпечки
Каждый компонент Light содержит следующие настройки для включения выпечки световых карт. По умолчанию новые источники света устанавливаются на динамический режим.
- Bake Lightmap – Если включено, источник света будет выпекать световые карты для любой модели с отображением световой карты, которая находится в диапазоне.
- Bake Direction – Определяет, будет ли свет вносить вклад в выпечку информации о направлении света. Это влияет на результаты зеркальности, если в настройках сцены выбран режим отображения световой карты Color and Direction.
Есть еще две опции, которые изменяют поведение источников света: Affect Dynamic и Affect Lightmapped. Они определяют, какие модели будет затрагивать источник света во время выполнения. Если одна из этих опций включена, источник света будет работать во время выполнения и увеличивать затраты на выполнение.
- Affect Dynamic – Если включено, источник света будет влиять на любую модель, которая не имеет световой карты.
- Affect Lightmapped – Если включено, источник света также будет влиять на любую модель, которая имеет световую карту.
Обратите внимание, что у источника света не может быть одновременно включены опции Bake Lightmap и Affect Lightmapped, так как это приведет к генерации световой карты для модели, в то время как источник света добавляет то же освещение во время выполнения (то есть одна и та же работа выполняется дважды).
Световые карты используют те же настройки Shadows (тени), что и динамические источники света, за исключением того, что расчеты теней выполняются один раз при генерации световых карт. Таким образом, включение теней на световых картах обходится дешевле. Дополнительную информацию см. на странице Shadows. Обратите внимание, что опции Shadow Cascade игнорируются при выпечке.
Мягкий направленный свет
По умолчанию выпеченные источники света создают жесткие тени. Чтобы улучшить визуальное качество, для Directional источников света доступна мягкая выпеченная тень, когда опция Bake Direction не включена. В этом случае доступны две дополнительные опции:
- Bake Samples – Определяет количество выборок, используемых для выпечки света в световую карту. По умолчанию равно 1 и имеет максимальное значение 255. Значение влияет на производительность выпечки и должно быть установлено как можно ниже (5-20).
- Bake Area – Определяет угол полутени в градусах, позволяя создать мягкую границу тени.
Следующие изображения показывают разницу между жесткими тенями и мягкими тенями. Значение Bake Samples равно 15, а значение Area равно 10.
Выпечка света окружения
PlayCanvas поддерживает два типа освещения окружения: Ambient Color и Skybox. По умолчанию оба этих типа применяются во время выполнения.
Ограничение применения освещения окружения во время выполнения заключается в отсутствии Ambient Occlusion. В качестве альтернативы, освещение окружения может быть запечено в карту освещения, включая Ambient Occlusion. Это можно настроить в разделе Lightmapping глобальных настроек.
Если включен Ambient Bake, вклад освещения окружения будет запечен в карты освещения, включая Ambient Occlusion. Обратите внимание, что настройка Samples влияет на производительность запекания и должна быть установлена как можно ниже (5-20).
На следующих изображениях показан эффект Ambient Color, с Ambient Occlusion и без него.
Фильтрация Lightmap
Для мягкого направленного света или запекания освещения окружения часто используется небольшое количество выборок для улучшения производительности запекания. Это создает артефакты полос, как видно на следующем изображении, на котором используется 15 выборок.
Для улучшения качества карт освещения можно использовать большее количество выборок. Это дает наилучшее возможное качество, как видно на следующем изображении, на котором используется 100 выборок.
В качестве более производительной альтернативы, карту освещения можно отфильтровать с использованием умного двустороннего размытия для приемлемого качества с большей производительностью. Это видно на следующем изображении, на котором используется 15 выборок и включена фильтрация.
Обратите внимание, что фильтрация выполняется на окончательных запеченных картах освещения и может создать некоторые видимые края на швах развернутых UV, так как карта освещения не фильтруется по швам. Поэтому фильтрация может не подходить для каждой сцены. Чтобы свести к минимуму артефакты, вы должны иметь хороший баланс между сильным фильтром и большим количеством выборок.
Настройка моделей для запекания
Каждый компонент Model или Render должен иметь включенное картографирование освещения, чтобы получать карты освещения. Картографирование освещения можно включить в свойствах компонента, установив флажок Lightmapped.
Опция Cast Lightmap Shadows определяет, будет ли модель создавать тени на карте освещения. Вы можете увидеть разрешение текстуры карты освещения, созданной и есть также опция применения множителя к области UV1 для изменения его размера. Множители размера карты освещения обсуждаются ниже.
Общие настройки света
Существует несколько комбинаций настроек света, которые могут быть использованы. Каждый из них имеет свое применение, и используя свет с разными комбинациями, вы можете сбалансировать высококачественную визуализацию с производительностью.
Bake | Affect Non-Baked | Affect Baked | Description |
---|---|---|---|
false | true | false | Это динамический свет по умолчанию. Влияет на все модели без карт освещения. |
true | false | false | Этот свет генерирует карты освещения для моделей с картами освещения и не имеет затрат во время выполнения. Большинство статических светов окружения могут использовать эту настройку. |
true | true | false | Этот свет генерирует карты освещения, но также влияет на модели без карт освещения. Это полезно, если у вас есть динамические/движущиеся объекты, которые должны быть освещены этим светом. Например, яркий свет окружения, который также должен влиять на игрового персонажа. |
false | true | true | Этот свет является динамическим светом, который будет влиять на модели с картами освещения и без них. |
Настройки Lightmapping
Настройка Size Multiplier влияет на все компоненты Model и Render. PlayCanvas автоматически определяет, какое разрешение карт освещения требуется для модели. Он рассчитывает это значение на основе масштаба и размера области геометрии модели. Вы можете влиять на этот расчет, изменяя поле Size Multiplier в глобальных настройках компонента Model или Render.
Например, рассмотрим плоскость размером 1x1 единица (метр). Если глобальный множитель размера равен 16, а множитель компонента модели равен 2, будет сгенерирован размер текстуры Lightmap 32x32 (1 кв/м * 16 * 2). У вас будет 32x32 пикселей на одном квадратном метре, что составляет около 3 см размер пикселя.
Max Resolution устанавливает максимальный предел разрешения для создаваемых карт освещения с целью экономии памяти.
Mode позволяет указать, какие данные должны быть запечены (например, диффузный цвет или направление от пикселя к свету). Данные о направлении используются для имитации упрощенной зеркальности. Может быть запечено только одно направление, что приводит к сложности при перекрытии нескольких источников света. Затем на отдельных источниках света можно установить запекание направления.
Автоматическое развертывание и генерация UV1
Карты освещения всегда применяются с использованием второго набора UV-координат (UV1) на модели ассетов. Для достижения наилучших результатов мы рекомендуем добавить второй набор UV-координат из инструмента 3D-контента в вашу модель перед загрузкой ее в PlayCanvas. Дополнительную информацию о дружественных к картам освещения UV-координатах можно найти в разделе UV Mapping.
Если ваша модель не имеет набора UV1, редактор PlayCanvas может автоматически развернуть и сгенерировать UV1-координаты для модели.
Если вашей модели не хватает карты UV1, вы увидите предупреждение в компоненте модели при включении карт освещения.
Чтобы исправить предупреждение, выберите ассет модели и откройте раздел Pipeline. Нажмите кнопку Auto-Unwrap и дождитесь завершения индикатора выполнения. Автоматическое развертывание изменит ассет модели, поэтому если вы повторно импортируете модель из источника (например, загрузите новый FBX), предварительно рассчитанный UV1 будет потерян. Если загруженная модель не имеет UV1, вам нужно будет снова выполнить автоматическое развертывание модели.
Опция Padding определяет расстояние между секциями при развертывании. Если вы видите просачивание света (то есть свет, которого не должно быть на карте освещения), вы можете увеличить отступ для уменьшения просачивания.