Shadows in Unity
Unity Manual > Advanced > Shadows in Unity

Shadows in Unity

Unity 2.0 Pro позволяет просчитывать тени в реальном времени от любых ИС. Объекты могут отбрасывать тени на друг друга и на самих себя (самозатенение). Все типы ИС — Directional, Spot и Point — поддерживают тени.

Использование теней можно в самой упрощённой форме свести к выбору между жёсткими тенями (Hard Shadows) и мягкими тенями (Soft Shadows) в свойствах ИС. Однако, есть некоторые нюансы, которые надо учитывать, чтобы добиться хорошего соотношения между качеством теней и производительностью.

Страница Shadow Troubleshooting содержит решение часто возникающих с тенями проблем.

Любопытно, что лучшие тени просчитываются не в реальном времени. Если геометрия уровня и ИС статичны, нужно создавать лайтмапы (lightsmaps) в 3D-пакете. Тени, просчитанные в оффлайне, обычно дают лучшие результаты, нежели просчитанные в реальном времени.

Tweaking shadow quality

Unity вызывает карты теней (shadow maps) для отображения теней. Карты теней строятся по принципу текстур, поэтому проще всего думать о них, как о «текстурах теней», созданных из освещения сцены. Таким образом, как и в случае с текстурами, качество карт теней зависит от следующих факторов:

* разрешение (размер) карты теней. Чем больше карта, тем лучше качество.
* фильтрация теней. Жёсткие тени используют для фильтрации ближайший пиксель карты теней. Мягкие тени используют несколько пикселей, получая в результате сглаженные переходы (однако, мягкие тени требуют больше затрат времени и ресурсов на свою визуализацию).

Разные типы ИС используются разные алгоритмы расчёта теней.

* Для направленных ИС (Directional) решающее влияние на качество теней оказывают настройки Shadow Distance и Shadow Cascades, расположенные в Quality Settings. Shadow Resolution также играет большую роль, но первое, что стоит предпринять для повышения качества теней — это снижение Shadow Distance. Подробности о тенях от направленных ИС — Directional Shadow Details.
* Для конических (Spot) и точечных (Point) ИС, Shadow Resolution определяет размер карты теней. Дополнительно, для ИС, освещающих маленькие участки экрана, используются карты теней маленького разрешения.

Подробности о размерах карт теней — Shadow Size Details.

Shadow performance

Расчёт теней в реальном времени требует значительных затрат ресурсов и сильно сказывается на производительности. For each light to render its shadows, first any potential shadow casters must be rendered into the shadow map, then all shadow receivers are rendered with the shadow map. This makes shadow casting lights even more expensive than Pixel lights, but hey, computers are getting faster as well!

Мягкие тени требуют больших затрат на визуализацию, чем жёсткие тени. Вся нагрузка приходится на видеокарту и почти не затрагивает ЦПУ и память.

Quality Settings содержат настройку Shadow Distance — она определяет, на каком расстоянии от камеры отрисовываются тени (всё, что дальше, не отрисовываются). Обычно не имеет смысла рассчитывать и отображать тени на расстоянии более 500 метров от камеры. Следует использовать как можно меньшее значение этого параметра, насколько это допустимо для игры. Это очень благоприятно сказывается на производительности (и даже повышает качество теней от направленных ИС).

Hardware support for shadows

Встроенные тени для своей работы требуют поддержку шейдеров 2.0. Вот список подходящих видеокарт:

Notes

Point light shadows are always "hard". Selecting Hard or Soft shadows does not make a difference.
Тени от ИС Point light всегда жёсткие. Выбор Hard или Soft не даст результата.
Vertex-lit lights don't have shadows.
Vertex-lit materials won't receive shadows (but do cast shadows). Some other materials don't receive shadows as well (Diffuse Fast).
Transparent objects don't cast or receive shadows. Transparent Cutout objects do cast and receive shadows.