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 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. Вот список подходящих видеокарт:
- Windows:
- ATI Radeon 9500 и выше, серии Radeon X, Radeon HD.
- Когда используется OpenGL, видеокарты ATI не поддерживают тени от точечных (Point) ИС.
- серии NVIDIA GeForce FX, 6xxx, 7xxx, 8xxx, 9xxx, GeForce GTX.
- Intel GMA 3000 (965) и выше.
- ATI Radeon 9500 и выше, серии Radeon X, Radeon HD.
- Mac OS X:
- ATI Radeon 9500 и выше, серия Radeon X.
- серии NVIDIA GeForce FX, 6xxx, 7xxx, 8xxx, 9xxx.
- для видеокарт NVIDIA в OS X 10.3 тени отключены.
- Intel GMA 950.
- Мягкие тени отключены из-за бага в драйверах (жёсткие тени могут использоваться).
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.


