User Manual

Тени

Тени - отличный способ добавить реализм в ваши игры. Однако динамические (в реальном времени) тени могут обходиться довольно дорого с точки зрения производительности. Для более производительного способа добавления статических теней на вашу сцену см. Lightmaps.

Персонажи с отбрасыванием теней

Движок PlayCanvas реализует алгоритм теней, называемый отображением теней. Он полностью кросс-платформенный и гарантированно работает как на мобильных устройствах, так и на настольных компьютерах.

Включение теней

По умолчанию отбрасывание теней отключено в PlayCanvas. Вам нужно явно включить его самостоятельно. К счастью, включение теней легко. Во-первых, определите, какие источники света на вашей сцене должны отбрасывать тени. Выберите источники света в иерархии, чтобы изменить их свойства в панели инспектора. У каждого источника света есть опция "Cast Shadows". Просто установите эту опцию для источника света, чтобы генерировать тени для графических объектов, отбрасывающих тени на вашей сцене.

Model Component

Теперь вам нужно указать, какие графические объекты на вашей сцене отбрасывают и принимают тени. По умолчанию все компоненты рендера и модели отбрасывают и принимают тени. Чтобы изменить эти свойства, выберите сущность в иерархии, найдите компонент рендера или модели в инспекторе и снимите флажок "Cast Shadows" или "Receive Shadows" по мере необходимости.

Каскады теней

Когда направленная тень используется на большой площади, она часто проявляет алиасинг, когда тень возле камеры имеет низкое разрешение. Захват тени в одной карте теней требует очень высокого и непрактичного разрешения для улучшения этого.

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

Обратите внимание, что количество каскадов теней влияет на производительность, так как каждая теневая сетка может потребоваться для отображения более чем на одной карте теней.

Следующие свойства можно использовать для настройки каскадов теней.

Количество каскадов

Количество каскадов представляет собой количество разделений видовой пирамиды камеры и может быть 1, 2, 3 или 4. Значение по умолчанию 1 представляет одну карту теней.

Скриншот, показывающий один каскад теней.

Один каскад

Скриншот, показывающий четыре каскада теней.

Четыре каскада

Распределение каскадов

Распределение разделения видовой пирамиды камеры для отдельных каскадов теней. Может быть указано значение в диапазоне от 0 до 1. Значение 0 представляет линейное распределение, а значение 1 - логарифмическое распределение. Визуально большее значение распределяет больше разрешения карты теней на передние объекты, а меньшее значение - на более далекие объекты.

Настройка теней

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

Дистанция тени

Дистанция тени - это расстояние от точки обзора, за которым тени направленного света больше не отображаются. Чем меньше это значение, тем четче будут ваши тени. Проблема в том, что зритель сможет видеть, как тени внезапно появляются, когда точка обзора перемещается по сцене. Поэтому вы должны сбалансировать это значение на основе того, как далеко игрок может видеть на расстоянии и, в целом, что выглядит хорошо.

Интенсивность тени

Интенсивность тени, где 1 представляет полную интенсивность тени, создаваемой этим источником света, а 0 представляет отсутствие тени.

Интенсивность тени

Разрешение тени

Каждый источник света отбрасывает тени с помощью карты теней. Эта карта теней может иметь разрешение 256x256, 512x512, 1024x1024 или 2048x2048, и это значение также устанавливается в интерфейсе компонента света. Чем выше разрешение, тем четче тени. Однако тени с более высоким разрешением дороже в рендеринге, поэтому обязательно сбалансируйте производительность и качество.

Смещение тени

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

Смещение по нормали

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

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

Мягкие тени против жестких теней

Контур тени называется полутенью. Это переход от темного к светлому, который придает теням мягкий край. Смягчение краев тени является настройкой по умолчанию в PlayCanvas, но вы можете изменить эту настройку, если хотите получить жесткие тени. Ниже приведено сравнение мягких и жестких теней:

Жесткие и мягкие тени

Мягкие тени достигаются за счет выполнения большего количества выборок теневой карты на GPU. Используемый алгоритм называется Percentage Closest Filtering или PCF. Этот алгоритм считывает 9 локализованных выборок (матрица 3 на 3) из теневой карты вместо одной, как используется для жестких теней.

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

Вопросы производительности

Включение теней имеет последствия для производительности:

This site is translated by the community. If you want to get involved visit this page