Light.layerShadowCullDistances
Declaration
public float[] layerShadowCullDistances;Описание
Расстояния, на которых отбрасывается тень на свет, на слой.
Динамические тени могут быть брошены в поле зрения с помощью теневых катеров, которые находятся очень далеко от камеры. При низких углах падения света, это может привести к тому, что многие объекты будут бросать динамические тени, что в свою очередь может привести к высоким затратам на рендеринг при создании теневых карт.
Использование Light.layerShadowCullDistances позволяет ограничить, на уровне слоя, насколько далеко от камеры теневых катеров могут находиться тени, прежде чем они будут вычеркнуты из генерации теневых карт. Эта функция дополняет Camera.layerCullDistances, но влияет только на теневое катание, а не на обычное отображение объектов.
Как и Camera.layerCullDistances, Light.layerShadowCullDistances требует назначения массива с плавающей запятой точно 32 значений. Расстояние 0 в индексе слоя означает сохранение текущего поведения для этого слоя. Назначение null полностью отключает вычёркивание теневых расстояний, и это практически то же самое, что передавать массив из 32 нулей.
По умолчанию, вычёркивание теней на уровне будет использовать плоскость, выстроенную с камерой. Вы можете изменить это на сферу, установив Camera.layerCullSpherical на true. Эффект этого флага делится между Camera.layerCullDistances и Light.layerShadowCullDistances.
Пожалуйста, обратите внимание, что когда вы ограничиваете расстояния выделения камеры с помощью Camera.layerCullDistances, это также ограничивает отбрасывание тени на эти же расстояния выделения. В результате, если вы используете Camera.layerCullDistances и Light.layerShadowCullDistances одновременно *для одного и того же индекса слоя*, эффективное расстояние выделения тени для этого слоя будет наименьшим из этих двух расстояний. Для индексов слоев, где одно из значений равно нулю, другое значение используется напрямую, а для индексов слоев, где оба значения равны нулю, никакое специальное поведение выделения не применяется к этому слою.
Работает только с LightType.Directional источниками света.
См. также: Camera.layerCullDistances, Camera.layerCullSpherical
using UnityEngine;
[RequireComponent(typeof(Light))] public class LayerShadowCullDistancesExample : MonoBehaviour { void OnEnable() { // Setup shadow cull distances var shadowCullDistances = new float[32]; shadowCullDistances[10] = 5f; // Let's imagine this is our 'Tiny Objects' layer shadowCullDistances[11] = 15f; // Let's imagine this is our 'Small Things' layer shadowCullDistances[12] = 100f; // Let's imagine this is our 'Trees' layer
// Assign shadow cull distances. This will only affect layers 10, 11 and 12. GetComponent<Light>().layerShadowCullDistances = shadowCullDistances; }
void OnDisable() { // Completely disable shadow cull distances GetComponent<Light>().layerShadowCullDistances = null; } }