Engine & platform

5 распространенных проблем лайтмэппинга и советы по их устранению

KRISTIJONAS JALNIONIS Technical Artist
Sep 27, 2022|18 Мин
5 распространенных проблем лайтмэппинга и советы по их устранению
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.

Недавно я разработал руководство по устранению неполадок в Progressive Lightmapper, чтобы помочь разработчикам получить максимальную отдачу от запеченного глобального освещения (GI) в редакторе Unity. Здесь я расскажу о пяти наиболее распространенных проблемах лайтмэппинга и их решениях, подкрепленных изображениями и ссылками на страницы в руководстве Unity. Полное руководство можно найти на форумах.

1. В сцене нет запеченного глобального освещения
Сцена Cornell Box, отрендеренная без глобального освещения (слева) и с запеченным глобальным освещением (справа)

Если некоторые предпосылки не соблюдены, Progressive Lightmapper может не сгенерировать освещение в вашей сцене. Эти условия включают, но не ограничиваются ими:

  • Нет объектов, отмеченных как GI Contributors
  • В сцене нет зажженных ламп
  • Проблемы с шейдерами

Чтобы исправить ситуацию, я рекомендую попробовать одно из описанных ниже исправлений.

Пометить игровые объекты как GI Contributors
Внесите настройки GI в компонент Mesh Renderer.

Отметьте объекты, на которые нужно наложить световую карту, как GI Contributors , выполнив следующие действия:

Выберите ваш игровой объект.

Перейдите к компонентуMesh Renderer.

Разверните заголовок Lighting.

Установите флажок Contribute to Global Illumination (Способствовать глобальному освещению ).

Это позволит включить параметр Receive Global Illumination (Получить глобальное освещение ). Он содержит две опции:

  • Лайтмапы: Предназначен для статичных объектов с лайтмапами - GameObject будет получать и вносить GI в лайтмапы.
  • Световые зонды: Предназначен для небольших реквизитов и объектов, не подходящих для лайтмаппинга - GameObject будет получать GI от Light Probes и вносить GI в окружающие лайтмапы.
Осмотрите освещение сцены

Только смешанные и запеченные огни могут внести вклад в запеченный GI. Выберите освещение в сцене, затем установите режим "Смешанный" или "Запеченный" в компоненте "Свет". Среди других объектов, которые стоит посетить, -:

  • Цвет: Темные цвета имеют низкий ГИ или не имеют его вовсе. Выберите яркие цвета для освещения и используйте свойство "Интенсивность" , чтобы усилить или приглушить его.
  • Интенсивность: Чем выше интенсивность, тем ярче свет. Убедитесь, что ваши фонари достаточно яркие, чтобы обеспечить значимый вклад GI.
  • Косвенный множитель: Это свойство управляет интенсивностью непрямого отскока. Убедитесь, что он не установлен на ноль. В противном случае свет не будет вносить никакого вклада в GI. Обратите внимание, что установка этого значения выше единицы сделает освещение в вашей сцене несоответствующим стандарту рендеринга на основе физики (PBR).
  • Посетите форум No Baked Global Illumination на сцене

Осмотрите объект настроек освещения

В окне Lighting (доступно через Window > Rendering > Lighting) убедитесь, что поле Lighting Settings Asset не осталось пустым. Если актив не назначен, нажмите на кнопку Новые настройки освещения. Это создаст и назначит актив, разблокировав свойства в окне для редактирования.

После этого убедитесь, что все готово:

  • Вы установили флажок Baked Global Illumination, который включает расчеты Baked GI. Этот флажок также открывает выпадающий список "Режим освещения".
  • Значение Max Bounces не установлено на ноль. Чем выше это значение, тем сильнее свет будет отражаться от окружающей среды.
  • Ползунок Indirect Intensity не установлен на ноль. Если установить этот ползунок на ноль, то все непрямое освещение в сцене уменьшится.
Проверьте шейдеры и материалы

Причиной сбоя в расчете GI могут быть пользовательские шейдеры. Для отладки используйте встроенные шейдеры, которые поставляются с редактором Unity. К ним относятся:

  • Стандартный шейдер: Доступно во встроенном конвейере рендеринга
  • Шейдер: Доступно в универсальном конвейере рендеринга (URP)
  • Шейдер: Доступно в конвейере рендеринга высокой четкости (HDRP)

Если Unity создает освещение после переключения на один из шейдеров, описанных выше, проблема может заключаться в пользовательских шейдерах. В этом случае убедитесь, что шейдеры поверхности содержат ключевое слово шейдера LIGHTMAP_ON.

О том, как дополнительно настроить вывод Baked GI с помощью шейдеров, читайте на странице Meta Pass.

Другие возможные исправления

Если описанные выше действия не помогли решить проблему, попробуйте воспользоваться этими возможными способами:

  • Выберите другой бэкэнд для создания лайтмэппинга в окне "Освещение". Если освещение не пропекается при использовании прогрессивного GPU, но успешно пропекается при использовании прогрессивного CPU, это может быть результатом проблем с оборудованием или драйверами.
  • Обновите драйверы графического процессора. Обратитесь к странице производителя GPU, чтобы узнать, какие драйверы подходят для вашей системы. (Для Linux-машин обратитесь к разделу "Настройка драйверов для Linux" в этой теме форума).
  • Убедитесь, что ваш графический процессор соответствует минимальным требованиям. Пожалуйста, обратитесь к этой теме на форуме.
  • Очистите кэш GI. Чтобы очистить его, перейдите в меню Параметры > Кэш GI и нажмите на кнопку Очистить кэш. Имейте в виду, что при этом будут удалены все данные об освещении, присутствующие в сцене, и вам придется заново создавать освещение.
2. Объектам не хватает освещения

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

Сцена Cornell Box с металлической сферой, не отображаемой светом, и статуей: Оба объекта черные, когда нет зондов света и отражения (слева). Диффузная статуя видна при освещении световыми зондами (в центре). Отражающая сфера и статуя видны после размещения зондов света и отражения (справа).

Чтобы исправить ситуацию, я рекомендую попробовать одно из описанных ниже исправлений.

Разместите световые зонды

Динамические объекты - или GI Contributors, получающие GI от Light Probes, - нуждаются в Light Probes для выборки данных косвенного освещения. Если их нет, объекты вернутся к выборке зонда Ambient (т. е. зонда света и отражения, который всегда присутствует в сцене).

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

Разместите зонды для отражения

Отражающие металлические объекты могут отображаться как черные, даже после размещения плотной сети световых зондов. Чтобы затенять такие объекты, необходимо поместить зонд отражения, который охватывает затронутый объект. Снова создайте освещение или заново запеките зонд в компоненте Reflection Probe Component, нажав кнопку Bake.

Если вы наблюдаете черные области в отражениях, попробуйте увеличить количество отказов. Это увеличит количество отскоков, создавая отражения внутри отражений. Доступ к этому свойству можно получить в разделе Освещение > Окружение > Освещение окружения.

Посетите форум Объекты не хватает освещения

Проверьте настройки Mesh Renderer

Если выполнение предыдущих шагов не помогло решить проблему, проверьте компонент Mesh Renderer затронутого объекта. В разделе "Зонды" убедитесь, что для свойств Light Probes и Reflection Properties установлено любое значение, кроме Off.

Для свойств Light Probes и Reflection Probes необходимо установить значение Blend Probes (или любое другое, кроме Off).
Настройка значений цвета материала

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

Настройте значения цветов материалов в соответствии с физическими стандартами затенения. Во встроенном конвейере рендеринга вы можете использовать режим рисования Validate Albedo Scene View, чтобы определить, соответствуют ли значения Albedo стандарту PBR. Вы можете использовать отладчик рендеринга в URP и HDRP для того, чтобы сделать то же самое.

Проверьте настройку сцены

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

3. Излучающие материалы не оказывают
На плоскость в потолке и сферу нанесены излучающие материалы (слева). Блум включается как эффект постобработки, чтобы создать впечатление светящегося материала (в центре). Излучающая плоскость и сфера отмечены как GI Contributors, влияющие на освещение в сцене (справа).

Существует два типа проблем, связанных с рендерингом излучающих материалов:

  • Излучающие материалы не выглядят как "светящиеся", что указывает на проблемы с постобработкой.
  • Излучающие материалы не вносят вклад в глобальное освещение, что указывает на проблему с настройками объекта или материала.

Чтобы исправить любую из этих проблем, я рекомендую попробовать одно из описанных ниже исправлений.

Включите Bloom в стеке постобработки

Чтобы создать впечатление светящегося материала, включите функцию Bloom в выбранном вами стеке постобработки. Обратитесь к документации по встроенному RP, URP или HDRP, чтобы узнать, как это сделать.

Проверьте свойства материала

Если вы планируете использовать излучающие объекты для лайтмэппинга, убедитесь в этом:

  • Вы отметили данный игровой объект как GI Contributor. Благодаря самосветящейся природе излучающих объектов, вы можете установить для их свойства Receive Global Illumination значение Light Probes. Это позволит сэкономить место в атласе лайтмапов.
  • В инспекторе материалов для свойства Global Illumination установлено значение Baked. Это свойство доступно для входа Emission . Дополнительные сведения см. в документации по встроенному RP, URP или HDRP.
Инспектор материалов во встроенном конвейере рендеринга: Эмиссионные свойства мы выделили синим цветом.
Проверьте настройки освещения

В окне "Освещение" убедитесь, что свойство Indirect Intensity не установлено на ноль. Установка этого значения в ноль отключит все непрямое освещение, включая запеченное от запеченных излучающих объектов.

Посетите форум Emissive materials not rendering

4. Плоские карты нормалей

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

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

Ненаправленные лайтмапы с запеченным светом (слева) и направленные лайтмапы с запеченным светом (справа): В ненаправленных световых картах отсутствует направленность входящего света, что обеспечивает хорошее представление рельефа при использовании карт нормалей.

Чтобы исправить ситуацию, я рекомендую попробовать одно из описанных ниже исправлений.

Переключение в режим направления
Выпадающий режим направленности в окне настроек освещения.

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

Посетите форум "Плоские нормальные карты

Использование смешанного освещения

Смешанное освещение обеспечивает спекулярный и нормальный отклик в реальном времени. Прогрессивный Lightmapper запекает непрямое освещение в лайтмап. Такое сочетание обеспечивает высочайшее качество отклика материала при использовании запекаемого освещения.

Направленные лайтмапы, освещенные прожектором Baked (слева), и направленные лайтмапы, освещенные смешанным прожектором (справа): Обратите внимание на улучшение контрастности карт нормалей в сцене, освещенной смешанным светом.

Если ваш проект позволяет это сделать, переключите режим освещения на смешанный в компоненте Light. Обратите внимание, что смешанные огни имеют ту же стоимость производительности, что и огни реального времени. В зависимости от используемого режима освещения смешанные светильники будут отбрасывать тени в реальном времени, но не запеченные мягкие тени.

Используйте световые зонды

Объекты GameObject, освещенные зондом, часто имеют лучший отклик материала, чем те, которые освещены запеченным светом. Если ваше художественное направление позволяет это сделать, установите для свойства Receive Global Illumination в компоненте Mesh Renderer значение Light Probes. Обратите внимание, что вы также можете использовать Light Probe Proxy Volume (LPPV), чтобы добавить пространственный градиент к объектам, освещенным зондом.

5. Недостающий зеркальный отклик
Простая сцена, содержащая несколько запеченных точечных светильников, до запекания лайтмапов (слева) и та же сцена после запекания лайтмапов (справа): Обратите внимание, что после запекания пропали спекулярные блики.

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

Чтобы исправить ситуацию, я рекомендую попробовать одно из описанных ниже исправлений.

Использование смешанного освещения

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

Посетите форум Missing specular response

Используйте эмиссионные прокси-серверы

Имитировать зеркальный отклик света можно с помощью излучающих объектов. Для этого выполните следующие действия:

Поместите Зонд отражения Поместите зонд отражения в сцену.

Щелкните правой кнопкой мыши на панели иерархии и выберите 3D-объект > Сфера.

Выберите только что созданный объект и установите его Флаг статического редактора на Reflection Probe Static.

На панели проекта создайте новый материал, щелкнув правой кнопкой мыши и выбрав Создать > Материал.

Выберите только что созданный материал и установите флажок Emission. Установите для свойства Global Illumination значение None.

Перетащите материал на сферу, чтобы назначить его.

Поместите сферу в то же положение, что и ваш светильник.

Создайте освещение.

После выполнения описанных выше действий вы должны увидеть излучающие объекты, запечатленные на кубической карте Reflection Probe. Вы можете скрыть эти объекты после запекания или настроить маску обтравки в компоненте"Камера".

Та же сцена, но с излучающими прокси, захваченными зондом отражения (слева), в сравнении с альтернативной перспективой, демонстрирующей размещение этих прокси (справа)

Для получения дополнительных советов по устранению неполадок в Progressive Lightmapper ознакомьтесь с полным руководством на форумах. Если вы хотите обсудить эту статью или поделиться другими решениями, не стесняйтесь связаться со мной там или здесь. Наконец, следите за новыми техническими блогами от других разработчиков Unity в рамках продолжающейся серии Tech from the Trenches.