阴影能够有效增强渲染画面的立体感和真实感。为了实现这一点,通常使用所谓的 ShadowMap 技术。简单来说,就是把光源作为一个虚拟的相机渲染场景的深度,然后从场景相机渲染画面时,如果物体的深度比之前保存的深度信息中的要深,认为被其他物体遮挡,则渲染阴影。
场景中拥有一些配置能够影响全局阴影:
参数 | 应用 |
---|---|
Cast Shadow | 是否投射阴影。这是总开关。 |
Transparent | 是否投射透明阴影。开启后,透明物体也能投射阴影。 |
Resolution | Shadowmap 的分辨率。Low 选项使用 512 分辨率,Medium 选项使用 1024 分辨率,High 选项使用 2048 分辨率,VeryHigh 选项使用 4096 分辨率。 |
Cascades | 级联阴影 数量设置。一般用于大场景分割 shadowmap 分辨率,可以改善不同距离的阴影锯齿。开启二级级联阴影后,可以通过ShadowTwoCascadeSplits配置,开启四级级联阴影后,可以通过ShadowFourCascadeSplits配置。 |
Distance | 最远阴影距离(与摄像机之间的距离),超过这个距离后看不到阴影。 |
Fade Border | 阴影衰减距离,表示从阴影距离的多少比例开始衰减,范围为 [0~1],为 0 时表示没有衰减。 |
要投射阴影,需要场景中有方向光,引擎目前只能为一盏方向光 DirectLight
开启阴影,这主要是因为阴影的渲染使得 DrawCall 翻倍,会严重影响渲染的性能。在没有确定主光(scene.sun)的情况下,引擎会默认选择光强最强的那一盏灯投射阴影:
参数 | 应用 |
---|---|
Shadow Type | 阴影投射类型。不同的类型会影响渲染性能和视觉效果。 |
Shadow Bias | 阴影的偏移。防止阴影失真。 |
Normal Bias | 阴影的法向偏移。避免阴影失真。 |
Near Plane | 渲染深度图时的近裁面。影响阴影的裁剪面和精度。 |
Strength | 阴影强度。控制阴影的透明度。 |
在 网格渲染器组件 中,receiveShadows
能够决定该物体是否接受阴影,castShadows
能够决定该物体是否投射阴影。
从 1.3
版本开始,引擎支持投射透明裁剪(Alpha Cutoff)物体和透明(Transparent)物体的阴影,其中,透明物体投射阴影需要在场景面板中打开 Transparent
开关: