每个灯光、每个图层的阴影剔除距离。仅限方向光。
动态阴影可以从距离摄像机很远的阴影投射器投射到视野中。在入射光角较低的情况下,这可能导致许多对象需要投射动态阴影,进而导致阴影贴图生成期间渲染成本较高。
使用 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 *针对相同的图层索引*,则该图层的有效阴影剔除距离将是这两个距离中最小的一个。对于其中一个值为零的图层索引,将直接使用另一个值,对于两个值均为零的图层索引,将不会对该图层应用任何特殊的剔除行为。
仅适用于 方向 光。
另请参阅: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; } }