Unity中的阴影方向性阴影详情
本页将详细阐述方向(Directional)灯的阴影相关内容。
移动平台注意事项
在移动平台上,方向灯的实时阴影始终采用 1 个阴影级联,并且为硬阴影(Hard Shadows)。
方向灯的应用与阴影调整需求
方向灯常用于室外游戏的关键性灯光,如日光或月光。在第一人称和第三人称游戏中,可见距离通常较大,往往需要对阴影进行一些调整,以实现最佳的质量和性能平衡,适应具体场景。
第三人称角度的优良阴影设置示例
首先来看从第三人称角度呈现出优良效果的阴影设置。图中的阴影效果十分出色。在该图中,可见距离约为 50 游戏单位,因此在质量设置(Quality Settings)中,将阴影距离(Shadow Distance)设为 50,阴影级联(Shadow Cascades)设为 4,阴影分辨率(Shadow Resolution)设为高,灯光使用软阴影(Soft Shadows)。
方向灯阴影的各方面分析
硬阴影与软阴影
当采用相同灯光设置时,如果将阴影类型(Shadow Type)切换为硬阴影(Hard Shadows),从照明区域到阴影区域的过渡会呈现“硬”特性,即对象要么完全处于阴影下,要么完全处于照明区。硬阴影的渲染速度较快,但通常真实感不足。例如,在阴影距离为 50 且带有 4 个级联的情况下,硬阴影呈现出特定的视觉效果。
阴影级联(Shadow Cascade)数
对于方向灯,Unity 可利用级联阴影贴图(Cascaded Shadow Maps,也称为“平行分割阴影贴图(Parallel Split Shadow Maps)”)来提供出色的阴影效果,尤其在可视距离较长时表现突出。级联阴影会将可视区域分割成几个逐步变大的部分,每个部分使用相同大小的阴影贴图,使得接近观看者的对象的阴影贴图像素比远距离对象的更高。
为了更清晰地展示,我们在后续分析中使用硬阴影,因为阴影像素在这种情况下可见度更高。
- 无级联情况:如果未使用级联阴影贴图,整个阴影距离(假设为 50 单位)必须由阴影纹理均匀覆盖。此时,硬阴影的效果是每个地方的阴影纹理像素大小相同,在远处看起来尚可,但并非越近质量越高,阴影纹理均匀覆盖整个可视区域。
- 两个阴影级联情况:当使用两个阴影级联时,整个阴影距离会被分成靠近观看者的一小块和远距离的一大块。虽然会牺牲一点点性能,但可以获得近处更好的阴影分辨率。
- 四个阴影级联情况:使用 4 个级联时,阴影距离被分成四个逐渐变大的部分,4 个阴影纹理覆盖可视区域中大小不同的部分,能呈现出更精细的阴影效果。
阴影距离的重要性
阴影距离(Shadow Distance)对于方向灯阴影的质量和性能都极为关键。与阴影级联数一样,阴影距离也可在质量设置(Quality Settings)中进行设定,便于在性能较低的硬件上按比例降低阴影效果。
在阴影距离末端,阴影会逐渐淡出,更远的对象则不会显示阴影。在大多数游戏场景中,超过特定距离的阴影往往不易被玩家察觉。
- 不同阴影距离的效果对比:
- 当没有阴影级联且阴影距离设为 20 时,硬阴影效果显示远处的阴影会淡出,同时阴影质量比没有级联且距离为 50 单位的情况要高。
- 如果将阴影距离设得过高,效果会变差。例如,将距离设为 100,在场景中没有对象超过 50 米远的情况下,只会降低质量和性能,意义不大。
- 带有级联大小和距离的阴影贴图表现更优。比如,相机前覆盖 300 单位的 4 级联软阴影,虽然在一定程度上比本页顶端的图片效果稍差,但在阴影距离增大 6 倍后仍有不错的表现(不过在该场景中,过大的阴影距离可能并无实际意义)。