Освещение – один из важнейших аспектов игры. Он может задавать настроение, вести игрока, определять угрозы или цели и многое другое. Освещение может улучшить или испортить визуальные эффекты игры. Например, хорошее освещение может сделать плохую модель лучше в игре, а плохое освещение может сделать отличную модель хуже.
В этом руководстве представлена информация о том, как улучшить освещение в мобильной игре. То, как вы решите использовать освещение, влияет на производительность вашей мобильной игры. Важно эффективно использовать освещение, чтобы ваша игра работала максимально плавно.
Части этой статьи основаны на работах, предоставленных Arm Limited и защищенных авторскими правами.
Параметры конвейера рендеринга
Устаревший конвейер рендеринга Unity включает следующие пути рендеринга:
- Форвардный рендеринг
- Отложенное затенение
Форвардный рендеринг
При прямом рендеринге освещение в реальном времени обходится очень дорого. Если вы уменьшите количество источников света на пиксель, вы сможете компенсировать эти затраты.
Отложенное затенение
Отложенное затенение требует поддержки графического процессора. На совместимом оборудовании отложенное затенение может отображать большое количество источников света в реальном времени с высоким уровнем точности освещения. К сожалению, отложенное затенение не очень хорошо работает на мобильных графических процессорах, поскольку у них более низкая пропускная способность.
Когда вы создаете мобильную игру, важно, чтобы ваша игра работала без сбоев на как можно большем количестве устройств.
Универсальный конвейер рендеринга
Unity разработала Universal Render Pipeline (URP) . Мы настоятельно рекомендуем вам использовать URP для ваших мобильных игр.
Световые режимы
Различные режимы освещения используются в зависимости от того, как свет движется или используется в сцене. Типы световых режимов имеют разные рабочие характеристики. При реализации освещения учитывайте следующее:
- Используйте запеченный для статического освещения. Это лучше всего подходит для объектов, которые не меняют свое освещение во время выполнения. Запекание света — это процесс предварительного расчета и сохранения данных освещения в картах текстур, называемых картами освещения .
- Запеченное освещение нельзя изменить во время выполнения. Свет и тени в картах освещения статичны. Поскольку все освещение было предварительно обработано в Unity, никакие расчеты освещения во время выполнения не влияют на производительность.
- Динамические тени невозможно создать с помощью запеченного света. Это может выглядеть странно с динамическими или движущимися объектами.
- Используйте смешанный для стационарных источников света, которые вы собираетесь взаимодействовать с движущимися объектами. Например, факел, который освещает игрока и создает тень, когда игрок проходит мимо.
- Смешанное освещение создает динамичный прямой свет и тень.
- Вы можете включить смешанное освещение в расчеты карты освещения для статических объектов.
- Вы можете изменить интенсивность во время выполнения. Обновляется только прямой свет.
- Дорогой.
- Используйте режим реального времени для динамических или подвижных источников света, например света, излучаемого огненным шаром, который поднимается из земли и взрывается.
- Динамические свойства света и тени можно изменить во время выполнения.
- Освещение в реальном времени не встроено в карты освещения.
- Очень дорого.
Для получения дополнительной информации прочтите Unity's Lighting Pipeline .
По возможности используйте статический свет и избегайте динамического света.
Динамическое освещение, или освещение в реальном времени, рассчитывается и обновляется в каждом кадре. Это отлично подходит для перемещения объектов, интерактивности и создания эмоций.
Напротив, статическая информация об освещении запекается в картах освещения. Использование текстур карты освещения позволяет объекту избежать дорогостоящих вычислений освещения для каждой вершины или пикселя. Стоимость рендеринга текстуры карты освещения всегда намного дешевле, чем динамическое освещение. Мы рекомендуем использовать запеченное освещение в качестве первого выбора для реализации в мобильной игре.
Запекание световых карт
Предварительный расчет эффектов освещения известен как запекание карты освещения . Эффект света хранится в отдельной текстуре, называемой картой освещения . Карту освещения можно использовать для улучшения внешнего вида объектов. Запекание карты освещения необходимо выполнять только один раз за итерацию вашей сцены. Если вы измените геометрию вашей сцены или измените параметры запеченных источников света, вам придется перезаписать карты освещения. За исключением накладных расходов на текстуру карты освещения, никаких дополнительных затрат на производительность во время выполнения не возникает. Это лучший первоначальный подход к освещению на мобильной платформе.
На запеченный свет не влияют никакие динамические или движущиеся аспекты вашей сцены. Запеченное освещение включает в себя запеченное глобальное освещение для всех статических элементов. Это означает, что расчеты карты освещения включают в себя непрямой свет, отразившийся от других статических объектов, а также запеченные источники света, попадающие непосредственно на объект.
Рисунок 1. Готовая установка освещения, использованная в технической демонстрации Armies.
Чтобы запечь светильники, выполните следующие три шага.
Шаг 1. Установите свет на «Смешанный» или «Запеченный».
Установите режим освещения на «Смешанный» или «Запеченный». Для мобильных игр лучше использовать запеченное освещение вместо смешанного. Запекание — самый дешевый способ передать свет.
Рисунок 2. Настройка режима освещения в Unity.
Шаг 2. Сделайте объекты статичными
Сделайте все объекты, на которые влияет запеченное освещение, статическими . Существует множество оптимизаций объекта, помеченного как статический, но обычно лучше выбрать «Все» в раскрывающемся списке «Статический» . Если объект помечен как Static , Unity знает, что его нужно включить в запекание света.
Рисунок 3. Пример статического меню.
Шаг 3. Запекание светильников
Вы можете запечь освещение с помощью меню «Освещение», расположенного в меню «Окно» > «Рендеринг» > «Настройки освещения» .
Когда вы запекаете источники света, сохраняемые данные основаны на той сцене, которая была активна в момент начала запекания. Создается папка с тем же именем, что и у запеченной сцены. В этой папке хранятся все компоненты данных освещения. Если ваш проект загружает несколько сцен одновременно, вам необходимо запечь освещение для каждой сцены. Если вы настраиваете сцену, вам придется заново запекать свет.
Рисунок 4. Пример запеченной карты освещения.
Оптимизация карт освещения
После того, как источники света настроены на запекание, убедитесь, что запеченные карты оптимизированы. Карты освещения различаются по размеру в зависимости от их настроек при запекании. Вы должны снизить использование памяти на мобильных устройствах, поэтому необходимо контролировать размер карты освещения.
В следующем примере из демонстрации Armies имеется семь карт освещения размером 1024x1024 пикселей. В предварительном просмотре карты вы можете увидеть сетки, наложенные на карту освещения. Выбранные сетки подсвечиваются.
Рисунок 5. Это пример карты освещения. Синие секции представляют собой выбранные сетки.
В настройках Lightmapping есть множество настроек, а также размер карт, которые определяют, сколько памяти и места для хранения использует каждая карта. В следующих разделах описаны несколько важных настроек.
Лайтмапперы
Unity предлагает следующие три метода запекания света в вашей сцене:
- Enlighten : поддерживается только до выпуска долгосрочной поддержки (LTS) 2020 года. Не используйте это для новых проектов.
- Прогрессивный процессор : экономит много времени, поскольку постепенно создает карты освещения. Если выбран параметр «Приоритизировать вид» , приоритет отдается областям в представлении «Сцена». Это может сократить время итерации при настройке освещения вашей сцены.
- Progressive GPU : работает так же, как Progressive CPU, но генерирует карту освещения на GPU, а не на CPU. На поддерживаемом оборудовании этот метод может значительно сократить время выпечки по сравнению с использованием ЦП. Существуют дополнительные требования для настройки Progressive GPU. Узнайте больше о требованиях на странице Progressive GPU Lightmapper .
Рисунок 6. Настройки Lightmapper позволяют вам изменить метод запекания для вашей сцены.
Тексели
Тексель или пиксель текстуры — это отдельный пиксель на карте текстуры. Тексели сохраняют информацию об освещении в карте освещения для каждой точки света, попадающей на объект. Чем больше текселей используется на единицу пространства, тем зависит качество освещения, время вычислений для запекания, затраты на дисковое пространство и стоимость VRAM для ваших карт освещения.
Чтобы уменьшить объем требуемых данных карты освещения, отрегулируйте количество текселей на единицу запекания в настройках Lightmapping .
Рисунок 7. Доступные настройки для карт освещения.
В настройках карты освещения параметр «Разрешение карты освещения» контролирует, сколько текселей используется на единицу карты освещения. Ниже приведен пример куба с различными настройками разрешения карты освещения . Вы можете видеть, как более высокое разрешение быстро увеличивает объем необходимой работы.
Рисунок 8. Первый куб имеет разрешение карты освещения 1
. Второй куб имеет разрешение карты освещения 2
. Третий куб имеет разрешение карты освещения 5
.
Чтобы просмотреть, как текселы расположены в вашей сцене, выберите раскрывающийся список «Режим рисования» в представлении «Сцена» и выберите «Запеченная карта освещения» .
Запеченные объекты покрыты шахматным наложением. Шахматный узор показывает, как распределяются текселы при запекании источников света.
В следующем примере уменьшение разрешения карты освещения с 15
до 12
в демо-версии Armies уменьшает количество необходимых карт освещения с семи до четырех.
Рисунок 9. Демо-версия Armies с разрешением карты освещения 12
.
Использование текселя
Хотя вы можете установить количество текселей на единицу во всей сцене, часто существуют объекты, которым не требуется такое количество текселей.
Unity позволяет вам контролировать, сколько текселей использует каждый объект. В Инспекторе > Средство рендеринга сетки для объекта значение параметра «Масштабировать в карте освещения» управляет количеством текселей, которые объект использует в карте освещения.
В следующем примере куб слева содержит пять текселов световой информации на единицу выпечки. В поле справа масштаб Scale In Lightmap установлен на 0,5. Эта настройка масштабирует текселы света до 2,5, что требует меньше места в карте освещения, чем поле слева.
Рисунок 10. Два куба с разным разрешением карты освещения.
Рисунок 11. Вы можете изменить настройку Scale In Lightmap , чтобы объект имел меньше текселей.
Старайтесь не тратить текселы на следующее:
- Поверхности и объекты, которые игрок не увидит. Это предотвращает трату памяти на картах освещения для деталей, которых нет на экране.
- Поверхности с небольшим изменением освещенности. Например, объекты, находящиеся в тени или затронутые одним источником света.
- Маленькие или тонкие предметы. Количество получаемого ими освещения не сильно добавит окончательному рендерингу сцены.
Максимально искусственное освещение
Чтобы снизить требования к обработке, вы можете подделать некоторые элементы. Из-за этого может показаться, что ваш контент использует свет, но на самом деле используются более эффективные методы.
Поддельные тени
Тени в реальном времени стоят дорого. Они генерируются с помощью техники, называемой теневым картографированием . Стоимость рендеринга геометрии сцены на карте теней пропорциональна количеству вершин, нарисованных с включенными тенями. Мы рекомендуем вам ограничить количество геометрии, отбрасывающей тени, и количество источников света, отбрасывающих тени в реальном времени.
Вы можете реализовать фальшивые тени для теней на динамических объектах без динамического освещения. Это снижает затраты на рендеринг и позволяет добиться эффекта, аналогичного динамическим теням. Ниже приведены некоторые способы реализации ложных теней:
- Используйте 3D-сетку, например плоскость или четырехугольник, расположенную под персонажем, и примените к ней размытую текстуру.
- Вы можете написать свой собственный шейдер для создания более сложных теней.
В следующем примере показан результат использования 3D-сетки для тени:
Рисунок 12. Реализация теней в технической демонстрации Armies.
Нарисуйте световую информацию прямо на текстурах.
Если вы нарисуете часть тени в текстуре, вы уменьшите объем вычислений, необходимых для дополнительного освещения. Это экономит память при запекании источников света вашей сцены, поскольку для этого требуется меньше данных карты освещения.
Световые зонды
Когда вы используете динамические объекты с запеченным освещением, карты освещения не влияют на них. Это может заставить их почувствовать, что они не являются частью Сцены.
Вы можете решить эту проблему с помощью световых зондов. Light Probes имеют те же преимущества, что и световые карты. Они хранят данные об освещении, которые можно рассчитать заранее и сохранить для использования во время выполнения. Это переносит большую часть вычислительных затрат на редактирование времени.
В то время как карта освещения кодирует свет, полученный в текселе для поверхностей, световой зонд сохраняет свет, проходящий через пустое пространство. Вы можете использовать эти данные для освещения движущихся объектов. Световые зонды помогают визуально интегрировать динамические объекты с объектами с картой освещения на всей сцене.
Световые зонды лучше всего использовать для освещения объектов, движущихся в вашей сцене. Зонды используют запеченное освещение, что позволяет движущимся объектам иметь тот же свет, что и сцена. Освещение динамических объектов с помощью световых зондов обходится дешевле, чем освещение в реальном времени.
Вы можете узнать больше о статическом освещении с помощью световых зондов и на страницах «Световые зонды» .
Рисунок 13. Световые зонды, установленные для освещения динамичной толпы в технической демонстрации Armies.
Настройки Mesh Renderer
Независимо от типа освещения, которое использует ваша сцена, важно, чтобы настройки Mesh Renderer были правильными.
Выключите все, что вы не используете. Такие настройки, как «Отбрасывание теней», увеличивают затраты при рендеринге сцены, даже если объект не освещен. Следующий пример настроек Mesh Renderer предназначен для персонажа, показанного на рисунке 13. Персонаж использует данные светового датчика, но не датчики отражения.
Параметр Blend Probes для световых зондов смешивает информацию об освещении от ближайших световых зондов с персонажем. Когда персонаж перемещается по сцене, световые зонды, воздействующие на персонажа, будут меняться. Функция Cast Shadows отключена, поскольку при рендеринге используется метод blob. Прием теней также отключен, поскольку сцена запечена и тени в реальном времени отсутствуют.
Рис. 14. Настройки Mesh Renderer для рендеринга, показанного на рис. 13.
Освещение в реальном времени и типы освещения
Мы рекомендуем обрабатывать свет с помощью запеченного освещения , световых зондов и методов искусственного освещения, таких как нарисованные текстуры освещения или эффекты шейдерных материалов. Однако, если вам нужно освещение в реальном времени, вы должны учитывать тип источника света, который будете использовать.
Каждый тип освещения имеет различную стоимость расчета освещения. В следующем списке подробно описан каждый тип освещения:
- Направленный: этот свет имеет равномерное направление и не имеет затухания. Направленный свет — самый дешевый источник света реального времени. Часто вам нужен только один направленный свет на сцену. При прямом рендеринге (рекомендуемом пути рендеринга для мобильных устройств) Unity будет включать направленный источник света по умолчанию, если в сцене нет направленного света.
- Точечное освещение: точечное освещение отсекает объекты за пределами конуса и не освещает их. Это делает точечные светильники менее затратными в вычислительном отношении, чем сферические точечные светильники. Чтобы добиться максимальной производительности, сохраняйте узкую ширину конуса и поражайте только намеченные объекты.
- Суть: Они излучают свет во всех направлениях. Свет, направленный во всех направлениях, полезен, но очень дорог. Точечные светильники стоят дорого во многих регионах. Кроме того, расчет теней может оказаться самой затратной частью освещения. Если вы направите свет во все стороны, появится больше теней и больше расчетов.
Освещение – один из важнейших аспектов игры. Он может задавать настроение, вести игрока, определять угрозы или цели и многое другое. Освещение может улучшить или испортить визуальные эффекты игры. Например, хорошее освещение может сделать плохую модель лучше в игре, а плохое освещение может сделать отличную модель хуже.
В этом руководстве представлена информация о том, как улучшить освещение в мобильной игре. То, как вы решите использовать освещение, влияет на производительность вашей мобильной игры. Важно эффективно использовать освещение, чтобы ваша игра работала максимально плавно.
Части этой статьи основаны на работах, предоставленных Arm Limited и защищенных авторскими правами.
Параметры конвейера рендеринга
Устаревший конвейер рендеринга Unity включает следующие пути рендеринга:
- Форвардный рендеринг
- Отложенное затенение
Форвардный рендеринг
При прямом рендеринге освещение в реальном времени обходится очень дорого. Если вы уменьшите количество источников света на пиксель, вы сможете компенсировать эти затраты.
Отложенное затенение
Отложенное затенение требует поддержки графического процессора. На совместимом оборудовании отложенное затенение может отображать большое количество источников света в реальном времени с высоким уровнем точности освещения. К сожалению, отложенное затенение не очень хорошо работает на мобильных графических процессорах, поскольку у них более низкая пропускная способность.
Когда вы создаете мобильную игру, важно, чтобы ваша игра работала без сбоев на как можно большем количестве устройств.
Универсальный конвейер рендеринга
Unity разработала Universal Render Pipeline (URP) . Мы настоятельно рекомендуем вам использовать URP для ваших мобильных игр.
Световые режимы
Различные режимы освещения используются в зависимости от того, как свет движется или используется в сцене. Типы световых режимов имеют разные рабочие характеристики. При реализации освещения учитывайте следующее:
- Используйте запеченный для статического освещения. Это лучше всего подходит для объектов, которые не меняют свое освещение во время выполнения. Запекание света — это процесс предварительного расчета и сохранения данных освещения в картах текстур, называемых картами освещения .
- Запеченное освещение нельзя изменить во время выполнения. Свет и тени в картах освещения статичны. Поскольку все освещение было предварительно обработано в Unity, никакие расчеты освещения во время выполнения не влияют на производительность.
- Динамические тени невозможно создать с помощью запеченного света. Это может выглядеть странно с динамическими или движущимися объектами.
- Используйте смешанный для стационарных источников света, которые вы собираетесь взаимодействовать с движущимися объектами. Например, факел, который освещает игрока и создает тень, когда игрок проходит мимо.
- Смешанное освещение создает динамичный прямой свет и тень.
- Вы можете включить смешанное освещение в расчеты карты освещения для статических объектов.
- Вы можете изменить интенсивность во время выполнения. Обновляется только прямой свет.
- Дорогой.
- Используйте режим реального времени для динамических или подвижных источников света, например света, исходящего от огненного шара, который поднимается из земли и взрывается.
- Динамические свойства света и тени можно изменить во время выполнения.
- Освещение в реальном времени не встроено в карты освещения.
- Очень дорого.
Для получения дополнительной информации прочтите Unity's Lighting Pipeline .
По возможности используйте статический свет и избегайте динамического света.
Динамическое освещение, или освещение в реальном времени, рассчитывается и обновляется в каждом кадре. Это отлично подходит для перемещения объектов, интерактивности и создания эмоций.
Напротив, статическая информация об освещении запекается в картах освещения. Использование текстур карты освещения позволяет объекту избежать дорогостоящих вычислений освещения для каждой вершины или пикселя. Стоимость рендеринга текстуры карты освещения всегда намного дешевле, чем динамическое освещение. Мы рекомендуем использовать запеченное освещение в качестве первого выбора для реализации в мобильной игре.
Запекание световых карт
Предварительный расчет эффектов освещения известен как запекание карты освещения . Эффект света хранится в отдельной текстуре, называемой картой освещения . Карту освещения можно использовать для улучшения внешнего вида объектов. Запекание карты освещения необходимо выполнять только один раз за итерацию вашей сцены. Если вы измените геометрию вашей сцены или измените параметры запеченных источников света, вам придется перезаписать карты освещения. За исключением накладных расходов на текстуру карты освещения, никаких дополнительных затрат на производительность во время выполнения не возникает. Это лучший первоначальный подход к освещению на мобильной платформе.
На запеченный свет не влияют никакие динамические или движущиеся аспекты вашей сцены. Запеченное освещение включает в себя запеченное глобальное освещение для всех статических элементов. Это означает, что расчеты карты освещения включают в себя непрямой свет, который отразился от других статических объектов, а также запеченные источники света, которые напрямую падают на объект.
Рисунок 1. Готовая установка освещения, использованная в технической демонстрации Armies.
Чтобы запечь светильники, выполните следующие три шага.
Шаг 1. Установите свет на «Смешанный» или «Запеченный».
Установите режим освещения на «Смешанный» или «Запеченный». Для мобильных игр лучше использовать запеченное освещение вместо смешанного. Запекание — самый дешевый способ передать свет.
Рисунок 2. Настройка режима освещения в Unity.
Шаг 2. Сделайте объекты статичными
Сделайте все объекты, на которые влияет запеченное освещение, статическими . Существует множество оптимизаций объекта, помеченного как статический, но обычно лучше выбрать «Все» в раскрывающемся списке «Статический» . Если объект помечен как Static , Unity знает, что его нужно включить в запекание света.
Рисунок 3. Пример статического меню.
Шаг 3. Запекание светильников
Вы можете запечь освещение с помощью меню «Освещение», расположенного в меню «Окно» > «Рендеринг» > «Настройки освещения» .
Когда вы запекаете источники света, сохраняемые данные основаны на той сцене, которая была активна в момент начала запекания. Создается папка с тем же именем, что и у запеченной сцены. В этой папке хранятся все компоненты данных освещения. Если ваш проект загружает несколько сцен одновременно, вам необходимо запечь освещение для каждой сцены. Если вы настраиваете сцену, вам придется заново запекать свет.
Рисунок 4. Пример запеченной карты освещения.
Оптимизация карт освещения
После того, как источники света настроены на запекание, убедитесь, что запеченные карты оптимизированы. Карты освещения различаются по размеру в зависимости от их настроек при запекании. Вы должны снизить использование памяти на мобильных устройствах, поэтому необходимо контролировать размер карты освещения.
В следующем примере из демонстрации Armies имеется семь карт освещения размером 1024x1024 пикселей. В предварительном просмотре карты вы можете увидеть сетки, наложенные на карту освещения. Выбранные сетки подсвечиваются.
Рисунок 5. Это пример карты освещения. Синие секции представляют собой выбранные сетки.
В настройках Lightmapping есть множество настроек, а также размер карт, которые определяют, сколько памяти и места для хранения использует каждая карта. В следующих разделах описаны несколько важных настроек.
Лайтмапперы
Unity предлагает следующие три метода запекания света в вашей сцене:
- Enlighten : поддерживается только до выпуска долгосрочной поддержки (LTS) 2020 года. Не используйте это для новых проектов.
- Прогрессивный процессор : экономит много времени, поскольку постепенно создает карты освещения. Если выбран параметр «Приоритизировать вид» , приоритет отдается областям в представлении «Сцена». Это может сократить время итерации для настройки освещения вашей сцены.
- Progressive GPU : работает так же, как Progressive CPU, но генерирует карту освещения на GPU, а не на CPU. На поддерживаемом оборудовании этот метод может значительно сократить время выпечки по сравнению с использованием ЦП. Существуют дополнительные требования для настройки Progressive GPU. Узнайте больше о требованиях на странице Progressive GPU Lightmapper .
Рисунок 6. Настройки Lightmapper позволяют вам изменить метод запекания для вашей сцены.
Тексели
Тексель или пиксель текстуры — это отдельный пиксель на карте текстуры. Тексели сохраняют информацию об освещении в карте освещения для каждой точки света, попадающей на объект. Чем больше текселей используется на единицу пространства, тем зависит качество освещения, время вычислений для запекания, затраты на дисковое пространство и стоимость VRAM для ваших карт освещения.
Чтобы уменьшить объем требуемых данных карты освещения, отрегулируйте количество текселей на единицу запекания в настройках Lightmapping .
Рисунок 7. Доступные настройки для карт освещения.
В настройках карты освещения параметр «Разрешение карты освещения» контролирует, сколько текселей используется на единицу карты освещения. Ниже приведен пример куба с различными настройками разрешения карты освещения . Вы можете видеть, как более высокое разрешение быстро увеличивает объем необходимой работы.
Рисунок 8. Первый куб имеет разрешение карты освещения 1
. Второй куб имеет разрешение карты освещения 2
. Третий куб имеет разрешение карты освещения 5
.
Чтобы просмотреть, как текселы расположены в вашей сцене, выберите раскрывающийся список «Режим рисования» в представлении «Сцена» и выберите «Запеченная карта освещения» .
Запеченные объекты покрыты шахматным наложением. Шахматный узор показывает, как распределяются текселы при запекании источников света.
В следующем примере уменьшение разрешения карты освещения с 15
до 12
в демо-версии Armies уменьшает количество необходимых карт освещения с семи до четырех.
Рисунок 9. Демо-версия Armies с разрешением карты освещения 12
.
Использование текселя
Хотя вы можете установить количество текселей на единицу во всей сцене, часто существуют объекты, которым не требуется такое количество текселей.
Unity позволяет вам контролировать, сколько текселей использует каждый объект. В Инспекторе > Средство рендеринга сетки для объекта значение параметра «Масштабировать в карте освещения» управляет количеством текселей, которые объект использует в карте освещения.
В следующем примере куб слева содержит пять текселов световой информации на единицу выпечки. В поле справа масштаб Scale In Lightmap установлен на 0,5. Эта настройка масштабирует текселы света до 2,5, что требует меньше места в карте освещения, чем поле слева.
Рисунок 10. Два куба с разным разрешением карты освещения.
Рисунок 11. Вы можете изменить настройку Scale In Lightmap , чтобы объект имел меньше текселей.
Старайтесь не тратить текселы на следующее:
- Поверхности и объекты, которые игрок не увидит. Это предотвращает трату памяти на картах освещения для деталей, которых нет на экране.
- Поверхности с небольшим изменением освещенности. Например, объекты, находящиеся в тени или затронутые одним источником света.
- Маленькие или тонкие предметы. Количество получаемого ими освещения не сильно добавит окончательному рендерингу сцены.
Максимально искусственное освещение
Чтобы снизить требования к обработке, вы можете подделать некоторые элементы. Из-за этого может показаться, что ваш контент использует свет, но на самом деле используются более эффективные методы.
Поддельные тени
Тени в реальном времени стоят дорого. Они генерируются с помощью техники, называемой теневым картографированием . Стоимость рендеринга геометрии сцены на карте теней пропорциональна количеству вершин, нарисованных с включенными тенями. Мы рекомендуем вам ограничить количество геометрии, отбрасывающей тени, и количество источников света, отбрасывающих тени в реальном времени.
Вы можете реализовать фальшивые тени для теней на динамических объектах без динамического освещения. Это снижает затраты на рендеринг и позволяет добиться эффекта, аналогичного динамическим теням. Ниже приведены некоторые способы реализации ложных теней:
- Используйте 3D-сетку, например плоскость или четырехугольник, расположенную под персонажем, и примените к ней размытую текстуру.
- Вы можете написать свой собственный шейдер для создания более сложных теней.
В следующем примере показан результат использования 3D-сетки для тени:
Рисунок 12. Реализация теней в технической демонстрации Armies.
Нарисуйте световую информацию прямо на текстурах.
Если вы нарисуете часть тени в текстуре, вы уменьшите объем вычислений, необходимых для дополнительного освещения. Это экономит память при запекании источников света вашей сцены, поскольку для этого требуется меньше данных карты освещения.
Световые зонды
Когда вы используете динамические объекты с запеченным освещением, карты освещения не влияют на них. Это может заставить их почувствовать, что они не являются частью Сцены.
Вы можете решить эту проблему с помощью световых зондов. Light Probes имеют те же преимущества, что и световые карты. Они хранят данные об освещении, которые можно рассчитать заранее и сохранить для использования во время выполнения. Это переносит большую часть вычислительных затрат на редактирование времени.
В то время как карта освещения кодирует свет, полученный в текселе для поверхностей, световой зонд сохраняет свет, проходящий через пустое пространство. Вы можете использовать эти данные для освещения движущихся объектов. Световые зонды помогают визуально интегрировать динамические объекты с объектами с картой освещения по всей вашей сцене.
Световые зонды лучше всего использовать для освещения объектов, движущихся в вашей сцене. Зонды используют преимущества запеченного освещения, что позволяет движущимся объектам иметь тот же свет, что и сцена. Освещение динамических объектов с помощью световых зондов обходится дешевле, чем освещение в реальном времени.
Вы можете узнать больше о статическом освещении с помощью световых зондов и на страницах «Световые зонды» .
Рисунок 13. Световые зонды, установленные для освещения динамичной толпы в технической демонстрации Armies.
Настройки Mesh Renderer
Независимо от типа освещения, которое использует ваша сцена, важно, чтобы настройки Mesh Renderer были правильными.
Выключите все, что вы не используете. Такие настройки, как «Отбрасывание теней», увеличивают затраты при рендеринге сцены, даже если объект не освещен. Следующий пример настроек Mesh Renderer предназначен для персонажа, показанного на рисунке 13. Персонаж использует данные светового датчика, но не датчики отражения.
Параметр Blend Probes для световых зондов смешивает информацию об освещении от ближайших световых зондов с персонажем. Когда персонаж перемещается по сцене, световые зонды, воздействующие на персонажа, будут меняться. Функция Cast Shadows отключена, поскольку при рендеринге используется метод blob. Прием теней также отключен, поскольку сцена запечена и тени в реальном времени отсутствуют.
Рис. 14. Настройки Mesh Renderer для рендеринга, показанного на рис. 13.
Освещение в реальном времени и типы освещения
Мы рекомендуем обрабатывать свет с помощью запеченного освещения , световых зондов и методов искусственного освещения, таких как нарисованные текстуры освещения или эффекты шейдерных материалов. Однако, если вам нужно освещение в реальном времени, вы должны учитывать тип источника света, который будете использовать.
Каждый тип освещения имеет различную стоимость расчета освещения. В следующем списке подробно описан каждый тип освещения:
- Направленный: этот свет имеет равномерное направление и не имеет затухания. Направленный свет — самый дешевый источник света реального времени. Часто вам нужен только один направленный свет на сцену. При прямом рендеринге (рекомендуемом пути рендеринга для мобильных устройств) Unity будет включать направленный источник света по умолчанию, если в сцене нет направленного света.
- Точечное освещение: точечное освещение отсекает объекты за пределами конуса и не освещает их. Это делает точечные светильники менее затратными в вычислительном отношении, чем сферические точечные светильники. Чтобы добиться максимальной производительности, сохраняйте узкую ширину конуса и поражайте только намеченные объекты.
- Суть: Они излучают свет во всех направлениях. Свет, направленный во всех направлениях, полезен, но очень дорог. Точечные светильники стоят дорого во многих регионах. Кроме того, расчет теней может оказаться самой затратной частью освещения. Если вы направите свет во всех направлениях, появится больше теней и больше расчетов.