Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Оба Глобальное освещение в реальном времениГруппа методов, которые моделируют как прямое, так и непрямое освещение для получения реалистичных результатов освещения. В Unity есть две системы глобального освещения, сочетающие прямое и непрямое освещение: запеченное глобальное освещение и глобальное освещение в реальном времени.
См. в системе Словарь
и использовании системы Baked Global Illumination карты освещения, поэтому требуется карта освещенияпредварительно обработанная текстура, содержащая эффекты источников света на статических объектах сцены. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
См. в Словарь
UVs.

Unity использует отдельные наборы UV-карт освещения для системы глобального освещения в реальном времени и системы запеченного глобального освещения. На это есть две причины:

  • Нет прямого соответствия в группировке экземпляров между картами освещения в реальном времени и запеченными картами освещения; экземпляры, которые находятся в одной и той же карте освещения в реальном времени, могут быть в двух разных запеченных картах освещения, и наоборот.
  • Сети, отображаемые в разных масштабах, имеют общие UV-карты освещения в запеченных картах освещения, но не используют общие UV-развертки в картах освещения в реальном времени.

Запеченные UV-карты освещения

Запеченные UV-карты освещения создаются для каждой сетки: все экземпляры одной и той же сеткиосновного графического примитива Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. в Словаре
одинаковые запеченные UV-карты освещения. Unity может рассчитать UV для запеченных карт освещения, когда вы импортируете модель, или вы можете предоставить свои собственные данные.

Unity хранит запеченные UV-карты освещения в своей сетке в канале Mesh.uv2. Этот канал соответствует шейдерупрограмме TEXCOORD1, которая работает на графическом процессоре. Подробнее
См. в семантике Словарь
и обычно называется «UV1».

Если включено Baked Global Illumination и данный MeshRenderer получает глобальное освещение от карт освещения, Unity использует данные в канале Mesh.uv2 для правильно сопоставить запеченные карты освещения с сеткой.

Примечание. Если вы хотите использовать Mesh.uv2 для другой цели в данном сетки, вы должны убедиться, что все компоненты MeshRenderer, использующие сетку, получают глобальное освещение от Light ProbesLight probes сохраняют информацию о том, как проходит свет через пространство в вашей сцене. Набор световых зондов, расположенных в заданном пространстве, может улучшить освещение движущихся объектов и статических пейзажей LOD в этом пространстве. Подробнее
Смотрите в Словарь
, а не в картах освещения. Измените это с помощью Инспектора компонента Mesh Renderer или API MeshRenderer.receiveGI.

Дополнительную информацию см. в разделе Создание UV-карт освещения.

Lightmap UVs в реальном времени

UV карты освещения в реальном времени создаются для каждого Mesh Renderer: все экземпляры одной и той же сетки используют одни и те же входные данные, но разные экземпляры Mesh RenderersКомпонент сетки, который берет геометрию из фильтра сетки и визуализирует ее в положении, определенном компонентом преобразования объекта. Подробнее
См. Словарь
может использовать различные UV-карты освещения в реальном времени во время выполнения. Unity рассчитывает UV для системы глобального освещения в реальном времени на этапе предварительного расчета. Этот расчет берет UV для каждой сетки в качестве входных данных и использует эти данные для создания UV для Mesh Renderer. Unity может генерировать входные UV-развертки для каждой сетки при импорте модели, или вы можете предоставить свои собственные данные.

Это работает следующим образом:

  • Unity может использовать данные из канала Mesh.uv3 в качестве входных данных для расчета UV карты освещения в реальном времени. Mesh.uv3 соответствует семантике шейдера TEXCOORD2 и обычно называется «UV2».
  • Если в Mesh.uv3 нет данных, но есть данные в Mesh.uv2 , Unity возвращается к использованию данных в Mesh.uv2 в качестве входных данных для расчета карты освещения UV в реальном времени. Mesh.uv2 используется для запеченных карт освещения UV. Обычно запеченные UV-карты освещения используются в качестве входных данных для UV-карт в реальном времени.
  • Результаты вычислений сохраняются для каждого MeshRenderer в MeshRenderer.enlightenVertexStream. Если глобальное освещение в реальном времени включено и данный компонент MeshRenderer вносит свой вклад в глобальное освещение и получает свое глобальное освещение от карт освещения, Unity автоматически передает данные из MeshRenderer.enlightenVertexStream в TEXCOORD2 в шейдерах вместо этого. данных в Mesh.uv3.

Примечание. Если вы хотите использовать Mesh.uv3 для другой цели в сетке, использующей глобальное освещение в реальном времени , вы должны убедиться, что все компоненты MeshRenderer, использующие сетку, получают глобальное освещение от Light Probes, а не от карт освещения. Измените это с помощью Инспектора компонента Mesh Renderer или API MeshRenderer.receiveGI.

Дополнительную информацию см. в разделе Создание UV-карт освещения.

Как Unity рассчитывает UV-карты освещения в реальном времени

Вот что происходит, когда Unity берет входные UV для каждой сетки и обрабатывает их в выходные UV для каждого Mesh Renderer.

Упаковка

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

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

Примечание. Этот метод упаковки означает, что вычисляемые UV-развертки зависят от масштаба и разрешения карты освещения экземпляра, поэтому UV-развертка карты освещения в реальном времени рассчитывается для каждого Mesh Renderer; однако Unity автоматически оптимизирует это, когда это возможно, и рендереры сетки, которые используют одну и ту же сетку с одинаковым масштабом и разрешением карты освещения, используют одни и те же UV.

Объединение

При желании вы можете указать Unity объединять UV-диаграммы, где это возможно, во время этого процесса. Это уменьшает размер карт освещения и может улучшить использование памяти во время выполнения и производительность.

Вы можете включить эту оптимизацию для любого GameObjectосновного объекта в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
с компонентом Mesh Renderer. В Инспекторе визуализации сетки перейдите к разделу Lightmapping и выберите Оптимизировать UV в реальном времени.

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

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3