固定光源

这种类型的光源可以在运行时改变颜色和亮度,但是不能移动、旋转或修改影响范围。

Choose your operating system:

Windows

macOS

Linux

固定光源(Stationary Lights) 是保持固定位置不变的光源,但你可以改变光源的亮度和颜色等。这是与静态光源的主要不同之处,静态光源在gameplay期间不会改变。但是,如果在运行时更改亮度,请注意它仅影响直接光照。间接(反射)光照不会改变,因为它是在光照系统(Lightmass)中预先计算的。

在三种光源的可移动性中,固定光源一般拥有最好的品质、中等的变化程度,以及中等的性能开销。

所有间接光照和来自固定光源的阴影都存储在光照贴图中。直接阴影存储在阴影贴图中。这些光源使用距离场阴影(Distance Field Shadows),因此对于带有光照的对象来说,即使光照贴图分辨率相当低,它们的阴影也会保持清晰。

直接光照

固定光源的直接光照使用延迟着色直接进行渲染。 这使得在运行时可以改变光源的亮度和颜色,同时提供了光源函数或IES描述文件。 该光源具有和可移动光源一样的高质量解析高光。 在游戏中,可以通过修改光源的 可见度(Visible) 属性来显示或隐藏该光源。

DirectLighting.png

来自固定光源的直接光照。

直接阴影

光源的实时阴影具有较大的性能消耗。 渲染一个有阴影的完全动态的光源所带来的性能消耗,通常是渲染一个没有阴影的动态光源的性能消耗的20倍。 因此,固定光源可以在静态物体上投射静态阴影,但仍有一些限制。

静态阴影

在不透明表面

Lightmass 在重新构建光照过程中为静态对象上的固定光源生成 距离场阴影贴图(distance field shadow maps) 。 距离场阴影贴图即使是在分辨率非常低的情况下,也可以提供非常精确的阴影变换, 产生的运行时性能消耗非常小。和光照贴图类似, 距离场阴影贴图要求所有静态光照的 静态网格体 具有唯一的展开UV。

DistanceFieldShadows.png

使用距离场阴影的一个 静态网格体Actor(StaticMeshActor) 投射到不透明表面的精准阴影。

必须构建光照才能显示距离场阴影, 否则在预览时将会使用全景动态阴影。

由于这些光源必须被分配到阴影贴图纹理的不同通道,因此最多只能有4个重叠的固定光源 具有静态阴影。这是个图形色彩问题,由于这种拓扑结构,通常仅允许少于4个的光源重叠。 阴影不能影响这个重叠测试, 因此 太阳光一般需要从它所在的关卡获得一个通道,即使地下区域也如此 。 一旦达到通道的极限,其他固定光源将会使用全景动态阴影, 这会带来很大的性能消耗。你可以使用 固定光源重叠(StationaryLightOverlap) 视图模式来可视化地查看重叠效果, 它会随着你修改光源而动态地更新。当某个光源无法分配到一个通道时,该光源的图标会变为红色的X。

OverlapError.png

固定光源重叠(StationaryLightOverlap)视图模式显示了多个光源的重叠。请注意在 聚光源(Spot Light) 后面的三个光源。可以看到左侧和中间的两个光源已经和 聚光源 半径重叠,而右侧那个并未重叠。

在半透明表面

半透明表面也能够在开销较小的情况下接受固定光源的阴影投射—— Lightmass会根据场景静态物体预计算阴影深度贴图,这将在运行时被应用到半透明表面。这种形式的阴影是比较粗糙的,仅仅在以米为度量单位计算阴影。

没有阴影的半透明显示

接收定向光源的静态阴影的半透明显示

静态阴影深度贴图的分辨率由BaseLightmass.ini文件中的StaticShadowDepthMapTransitionSampleDistanceX和StaticShadowDepthMapTransitionSampleDistanceY控制,默认参数是100,意味着每个纹素对应1米。

动态阴影

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

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

DynamicObjectShadowFrustums.png

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

定向光源的动态阴影

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

即便在定向光源上使用级联阴影贴图的时候,可移动组件仍然将会创建逐对象(PerObject)的阴影。这么做在较小的动态阴影距离(Dynamic Shadow Distances)时比较有用,但如果距离较大时,这样就会产生不必要的性能开销。如需禁用逐对象阴影来优化性能,可以在光源属性上禁用 为可移动对象使用添加阴影(Use Inset Shadows For Movable Objects)

间接光照

和静态光源一样,固定光源把间接光照信息存储在光照贴图中。 在运行时,通过修改亮度和颜色来改变直接光照的做法并不适用于改变间接光照。 这意味着,即使当一个光源未选中 可见性(Visible) 项时,在构建光照时,它的间接光照仍会存放到光照贴图中。 光源属性中的 间接光照强度(IndirectLightingIntensity) 可以用于在构建光照时从给定光源控制或禁用该光源的间接光照强度。

不过,还有一个后期处理体积叫做 间接光照强度(IndirectLightingIntensity) ,它能够控制所有光源在光照贴图中的间接光照强度效果。该体积可以在运行时修改,并可以从蓝图控制。

固定光源使用区域阴影

在虚幻引擎的4.9版本及以后的版本中,固定的定向光源提供了一个新的阴影选项:在Lightmass选项内,叫做 使用固定光源区域阴影(Use Area Shadows for Stationary Lights)

Area_Shadows_Options.png

如果想使用固定光源的区域阴影选项, 先选择场景中的 定向光源 并确认它的 移动性(Mobility) 设置为 固定(Stationary) 。 然后在该定向光源属性的 Lightmass 区域中,勾选"使用固定光源区域阴影(Use Area Shadows for Stationary Lights)"选项旁边的方框。 当该选项被勾选时,该固定光源将会使用区域阴影来生成预计算阴影贴图。 区域阴影能在光照投影较远处产生柔和的阴影边界。下图中可以看到是否使用区域阴影的差异。

区域阴影开启

区域阴影关闭

请注意区域阴影只能在固定光源上工作,可能还需要增大光照贴图的分辨率来获得和非区域阴影同样的阴影质量和锐度。

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