Table of Contents

平行光

初级 设计师 美术人员

**平行光(Directional light)**从单一方向均匀照射。它们通常用于模拟太阳等巨大而遥远的光源,并会投射阴影。默认情况下,你在 Stride 中创建的新场景都包含一个平行光。

media/DirectionalLightOverview.png

场景编辑器使用以下图标表示平行光的位置:

media/DirectionalLight.png

选中平行光后,gizmo 会显示光源的主要方向:

media/DirectionalLightSelected.png

属性

media/DirectionalLightProperties.png

属性 说明
Color 光源颜色(RGB)
Shadow 参见下文的阴影属性
Intensity 光源强度。颜色会在发送到着色器之前乘以该值。注意:负值会产生黑暗并带来不可预测的效果
Culling Mask 定义哪些实体组受此光源影响。默认情况下,所有组都受影响

平行光投射的阴影

与点光源和聚光灯一样,平行光也会投射阴影。但是,平行光投射的阴影可能分布在很大的视野范围内,因此需要特殊处理来提高其真实感。

平行光使用一种附加技术——级联阴影映射(cascaded shadow mapping)。它将遮挡物的深度从光源视角渲染到一张纹理中,然后结合遮挡物信息渲染场景。

这种方法将从摄像机视角看到的深度范围切分成不同分辨率的若干部分或"级联"。每一级联离摄像机越近,分辨率就越高,其阴影的分辨率也越高。

media/ShadowMappingCascades.png

简单来说,阴影离摄像机越近,质量就越好。这意味着你可以将近处(你能看到)的阴影分配更多内存,而给远处的阴影分配更少内存。

你可以使用一个、两个或四个级联。使用的级联越多,节省的内存越多,但阴影随距离增加而降低的分辨率也越明显。

下面是一个由平行光使用四个级联生成的阴影贴图示例:

FPS 场景阴影贴图

在编辑器中查看阴影级联

在属性网格的 Shadow 属性下,启用 Debug 选项。

级联调试关闭 级联调试开启
media/directional-lights-8.png media/directional-lights-9.png

不同的颜色表示每个距离范围对应的级联(绿色:0,蓝色:1,紫色:2,红色:3)。

平行光阴影属性

属性 说明
Filter 过滤用于产生柔和阴影而非硬阴影。目前实现的技术是 PCF(Percentage Closer Filtering,百分比邻近过滤)
Size 阴影贴图纹理的大小。对于平行光,此值默认为 x1,因为平行光比作用范围较短的光源对视觉影响更大
Cascade Count 用于切分光源覆盖深度范围的级联数量。可选值为 1、2 或 4 个级联;典型场景使用 4 个级联
Stabilization mode


用于减少阴影贴图闪烁的技术。闪烁源于阴影贴图带来的潜在走样:从光源视角看,一个纹素覆盖的空间比从摄像机视角看的一个纹素更大。



Projection snapping 会尝试根据阴影贴图纹理的分辨率,将光源的投影矩阵对齐到纹素



View snapping 会尝试对齐光源视图矩阵的目标点(摄像机视图级联视锥体的中心)



投影对齐和视图对齐都会迫使阴影矩阵覆盖更大的区域,从而增加阴影贴图纹理的走样。注意,当深度范围的摄像机设置为自动时,稳定模式会被忽略


Depth Range 如何计算从摄像机视角可见的深度范围。这会直接影响级联切分发生的近点和远点
Blend Cascades 平滑各级联之间的过渡
Partition mode


如何确定级联的切分距离。



Manual:为每个级联手动定义切分,以可见深度范围的百分比表示。某级联的值为 0.1 表示该级联渲染在 0.1 * (VisibleDepthMax - VisibleDepthMin) 的距离处



Logarithmic:使用对数比例自动计算切分


PSSM 因子让你可以在纯对数比例(0.0f)和纯均匀比例(1.0f)之间进行混合


Depth Bias 在采样深度上增加的深度量,用于避免阴影痤疮(shadow acne)现象
Normal Offset Scale 沿法线方向乘以深度偏移的系数
Debug 在场景编辑器中显示阴影贴图级联

另请参阅