投射阴影

阴影高级概述。

Choose your operating system:

Windows

macOS

Linux

lighting_overview_banner_001.png

阴影可以让世界中的物体感觉更加真实,并营造出空间感与纵深感。在渲染中,静态阴影几乎不影响性能,但动态阴影则是造成较大性能消耗的原因之一。本文介绍了虚幻引擎4中可以使用的四种阴影投射。

静态光源

静态光源投射完全静态的阴影和光照,这意味着它们对动态对象不会产生 直接 影响(静态光照由于烘焙到了间接光照缓存中,所以会有 一些 影响),比如下图中的小铜人。

LI_StaticMeansStatic.png

左侧的铜人站在一个静态光源的光照中,光源对角色没有任何影响(没有光照也没有阴影);而右侧的角色位于一个固定光源的光照中。

定向光源级联式阴影贴图(全场景阴影)

定向固定光源(Directional Stationary Lights) 比较特殊,它们支持采用 级联阴影贴图(Cascaded Shadow Maps) 的全景阴影,同时作为静态阴影。这在具有很多带动画的植被的关卡是非常有用的;你想在 玩家周围产生可以动的阴影,但是不想让大量阴影重叠来覆盖较大的 视图范围,因为这样需要付出很大的代价。动态阴影会随着距离而渐变为静态阴影,但这种变换通常 很难察觉。要想设置这样的处理,仅需把 定向光源固定(DirectionalLightStationary) 动态阴影距离固定光源(Dynamic Shadow Distance StationaryLight) 修改为消退效果的目标范围即可。

固定光源阴影

动态对象(比如 静态网格体组件(StaticMeshComponents) 骨骼网格体组件(SkeletalMeshComponents) )必须要从距离场阴影贴图中集成环境世界的静态阴影。 这是通过使用 每个对象 的阴影完成的。 每个可移动的对象从固定光源创建两个动态阴影:一个用于处理静态环境世界投射到该对象上的阴影 ,一个处理该对象投射到环境世界中的阴影。 通过使用这种设置,固定光源唯一的阴影消耗就来源于它所影响的动态对象。 这意味着,根据所具有的动态对象的数量不同,该性能消耗可能很小,也可能很大。 如果有足够多的动态对象,那么使用可移动光源会更加高效。

在下面的场景中,几个球体都是可移动, 它们既接收来自静态世界的阴影,也会投射它们自己的阴影, 这些阴影和距离场阴影合并计算。每个可移动组件的的阴影锥体也显示在图上。

DynamicObjectShadowFrustums.png

可移动组件使用的 每个物体 的阴影会在投射该物体的边界框上,因此边界框必须是精确的。对骨骼网格体而言,这意味着需要有对应的物理资产(Physic Asset),对粒子系统而言,固定的边界框必须足够大,以便包含所有的粒子。

动态阴影

可移动光源在任何物体上都投射完全动态的阴影(和光照)。它的光照数据不会烘焙到光照贴图中,可以自由地在任何物体上投射动态阴影。静态网格体、骨骼网格体、粒子特效等,都将会从可移动光源投射或接收阴影。

通常来说,投射可移动动态阴影的光源是性能消耗最大的。

阴影预览

在编辑一个固定光源或者静态光源时,光照信息会变成未构建状态, 预览阴影 能够为你提供一个在光照构建后阴影的大致样子。

下图中,编辑器显示的阴影上带有"预览(Preview)"文本字样,用来和已经存在的阴影区分。

UnbuiltShadows.png

如果在重新构建光照信息前就在编辑器中运行游戏的话,预览的阴影会消失。因为这个预览只在编辑器中,而不会在"在编辑器中运行(Play In Editor)"时显示。

UnbuiltShadowsPIE.png

要从预览阴影中生成最终的阴影效果,则需要在编辑器的主工具栏的 构建 选项中选择 构建光照

BuiltShadows.png

可以在窗口的 显示/可视化 菜单中取消勾选 预览阴影显示 的选项来关闭此功能。

如果希望调整投射此文本的光照函数材质,可以在这里找到: Engine/EditorMaterials/PreviewShadowIndicator

所有阴影类型同时存在

当把所有阴影类型放在一起时,每种类型的阴影都会利用其优势来弥补另一种类型阴影的劣势,从而可以快速地渲染出令人印象深刻的、栩栩如生的视觉效果。

LO_Shadows_Footer.png

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消