投射阴影

阴影概述。

Windows
MacOS
Linux

lighting_overview_banner_001.png

阴影让您的世界产生对比,使得世界中的物体感觉更加真实,并营造一种氛围。静态阴影无论怎么渲染,实际上都几乎没有任何性能消耗,但是动态阴影是造成较大性能消耗的原因之一。本文介绍了虚幻引擎 4 中具有的四种类型的阴影投射。

静态光源

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

LI_StaticMeansStatic.png

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

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

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

固定光源阴影

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

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

DynamicObjectShadowFrustums.png

由可移动组件形成的 一个物体 的阴影被用于该物体的边界框上,因此边界框必须是精确的。对骨骼网格体而言,这意味着需要有对应的物理资源(Physic Asset),对粒子系统而言,固定的边界框需要足够大来包含所有的粒子才行。

动态阴影

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

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

阴影预览

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

下图中,编辑器显示的阴影上带有 "Preview" 文本的样式,用来和已经存在的阴影表示区别。

UnbuiltShadows.png

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

UnbuiltShadowsPIE.png

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

BuiltShadows.png

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

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

所有阴影类型同时存在

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

LO_Shadows_Footer.png

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback