Contents

UE4灯光的移动性

UE4的光源的移动性上主要分为:Static(静态) 、 Stationary(固定) 和 Mobile(移动),不同的设置在光照效果上有着显著的区别,以及性能上也各有差异(现在应该是基本不谈这个了,没什么卵用)。 https://img-blog.csdnimg.cn/20200217135620377.png https://img-blog.csdnimg.cn/20200217135623122.png

  • 光源:静态, 固定, 动态
  • 物体:静态, 固定, 动态
  • 9种对应关系,并且还有特例

Static光源(静态):

  • 在运行时不会以任何方式改变或移动
  • 光的位置 — 不能变
  • 光的颜色 — 不能变
  • 光的强度 — 不能变
  • 光的其他属性 — 也不能变 UE4的静态光照是在光照构建(build)中进行预计算的部分,会对预计算的光照结果进行存储,例如光照贴图(LightMap,将在之后讲解)、阴影贴图这样的形式,可以在运行时支付较低的效率而获得较好的光照结果。它在运行时完全无法更改或移动的光源。这些光源仅在光照贴图中计算,一旦处理完,对性能没有进一步影响。可移动对象不能与静态光源集成,因此静态光源的用途是有限的。 https://img-blog.csdnimg.cn/20200217135628421.png 它可以在World Setting里进行进行关闭。静态光照不能让移动(动态)的对象产生阴影。但是,如果照明的对象也是静态的,就能够产生面积(接触)阴影。这是通过调整源半径(Source Radius)属性实现的。但是,应当注意的是,获得柔和阴影的表面很可能必须设置相应的光照贴图分辨率以便阴影呈现较好的效果。静态光源的主要应用对象是移动平台上的低性能设备(笑了)。 静态光源对静态物体
  • 直接光照: lightmap
  • 间接光照: lightmap
  • 直接阴影: lightmap 静态光源对固定物体和动态物体
  • 直接光照:ILC,VLM
  • 间接光照: ILC,VLM
  • 直接阴影:无

Static光源的阴影

Static光源的阴影是能用与Static物体,存储在lightmass中,这意味着它们对动态对象不会产生 直接影响(静态光照由于烘焙到了间接光照缓存中,所以会有一些影响)。在编辑一个固定光源或者静态光源时,光照信息会变成未构建状态,预览阴影能够为您提供一个在光照构建后阴影的大致样子。 https://img-blog.csdnimg.cn/20200217135645996.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIzMDMwODQz,size_16,color_FFFFFF,t_70

Static光源的特性

采用全局光照时,所有具有静态移动性的光源在默认情况下都是区域光源。点光源和聚光灯光源使用的形状是一个球体,其半径是由全局光照设置(Lightmass Settings)下的光源半径(Light Source Radius)设置的。定向光源使用一个圆盘,位于场景的边缘。光源的大小是控制阴影柔度的两个因素之一,因为较大的光源会产生较柔和的阴影。另一个因素是从接收位置到阴影投射物的距离。随着距离的增加,阴影变得柔和,就像在现实生活中一样

2.2 Stationary光源(固定):

光的位置 — 不能变 光的颜色 — 能变 光的强度 — 能变 光的其他属性 — 能变 固定光源(StationaryLights) 是保持固定位置不变的光源,但你可以改变光源的亮度和颜色等。这是与静态光源的主要不同之处,静态光源在gameplay期间不会改变。但是,如果在运行时更改亮度,请注意它仅影响直接光照。间接(反射)光照不会改变,因为它是在光照系统(Lightmass)中预先计算的。所有间接光照和来自固定光源的阴影都存储在光照贴图中。直接阴影存储在阴影贴图中。这些光源使用距离场阴影,这意味着,即使有光照对象上的光照贴图分辨率相当低,它们的阴影也将保持清晰。 Stationary Light在同一个被覆盖区域中只能有4个,当超过这个数目时,范围最小的那个StationaryLight会被转化为动态光源。 https://img-blog.csdnimg.cn/20200217135701351.png 固定光源对静态物体

  • 直接光照:直接采用延迟着色渲染
  • 间接光照: lightmap
  • 直接阴影:阴影贴图 固定光源对固定物体和动态物体
  • 直接光照:直接采用延迟着色渲染
  • 间接光照: ILC,VLM
  • 直接阴影:很复杂

Stationary光源的阴影

Lightmass在重新构建光照过程中为Static对象上的Stationary光源生成距离场阴影贴图(DistanceFieldShadowmap)。特点是能使用非常低的分辨率但是可以生成非常锐利的边缘。和光照贴图类似,距离场阴影贴图要求所有StaticMesh具有唯一的展开的UV。必须构建光照才能显示距离场阴影,否则在预览时将会使用动态阴影。最多只能有4个重叠的Stationary光源具有静态阴影。它可以和动态的物体有很好的交互,并且如果和动态的阴影结合也不会产生混合。 距离场阴影的原理是使用到最近阴影过渡的距离代替标准的阴影因数存储(0代表阴影,1代表没有阴影)。然后为了在运行时重新构建阴影,只要简单地缩放或偏移到想得到的半影尺寸的距离即可。这样最大的好处是如果分辨率降低,阴影过渡可以随着距离场更温和地下降。当直接地存储阴影因数时,降低分辨率将会导致斑驳和锯齿阴影。当在使用距离场阴影时,降低分辨率,阴影的过渡仍然是同样的尖锐度,但是在阴影过渡的角落或高频率拐角处会变得更加弯曲。

Stationary光源在透明表面的静态阴影:

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

Stationary光源动态阴影:

每个可移动的对象从固定光源创建两个动态阴影:一个用于处理静态环境世界投射到该对象上的阴影,一个处理该对象投射到环境世界中的阴影。通过使用这种设置,固定光源唯一的阴影消耗就来源于它所影响的动态对象。这意味着,根据所具有的动态对象的数量不同,该性能消耗可能很小,也可能很大。如果足够多的动态对象,那么使用可移动光源会更加高效。 Stationary可用于为场景中的动态对象投射动态级联阴影贴图(CSM)。使用CSM阴影时,动态对象上的阴影将与场景中静态对象投射的预计算的阴影正确混合。 ![image6.jpeg][6]

Stationary光源的软阴影

Stationary的直射光源提供了一个新的阴影选项,在 Lightmass 区块内,叫 Use Area Shadows for Stationary Lights。 ![image7.jpeg][7] 如果想使用Stationary光源的区域阴影选项,先选择场景中的直射光源并确认它的移动性(Mobility)设置为 固定(Stationary)。然后在该定向光源属性的 Lightmass 区域中,勾选Use Area Shadows for Stationary Lights选项。当该选项被勾选时,该固定光源将会使用区域阴影来做与计算阴影贴图。区域阴影能在光照投影较远处产生柔和的阴影边界。 它会产生一个单独的shadow map

Stationary光源的特性

  1. 环境法线天空遮挡:当启用具有固定的天空光照(Sky Light)时,全局光照以环境法线的形式产生定向遮挡。
  2. 距离场阴影贴图:全局光照计算固定光源(Stationary Lights) 的距离场阴影贴图。距离场阴影贴图即使在较低的分辨率下也能很好地保持其曲线形状;然而,它们不支持区域阴影或半透明阴影。

Mobile光源(移动):

可移动光源 将投射完全动态的光照和阴影,可修改位置、旋转、颜色、亮度、衰减、半径等所有属性。其产生的光照不会被烘焙到光照贴图中,但是其也无法产生间接光照.

  • 直接光照 — 动态渲染
  • 间接光照 — 无
  • 直接阴影 — 全场景动态阴影
  • 间接阴影 — 无

Mobile光源的阴影

如果我们使用的Mobile光源,或者使用的其他光源但是没有build,那么我们在编辑器里看到的阴影,全是实时阴影。实时阴影需要每一帧都进行计算,所以会有较大的性能消耗。渲染一个有阴影的完全动态的光源所带来的性能消耗,通常是渲染一个没有阴影的动态光源的性能消耗的20 倍。

CSM:

主要是direct light 生成。多层级的,兼顾性能,跟面积,面数有关。根据美术的需要,如果物体很小,直接忽略不产生shadow。由于涵盖的面积越大,贴图最终的精度越低,可以使用Farcsm https://img-blog.csdnimg.cn/20200217135756885.png 这些属性都是决定动态光照级联切换的,在显示中打开 Dyamic Shadow Distance为光照的覆盖的范围,设置为0的话等于禁用这个光照。Stational光照的默认设定为0,也就是不开启动态光照。 Num Dynamic Shadow Cascades为动态贴图的过渡级别,越多的话动态光照的效果就越好,但是也更消耗性能,设置为0的话等同于禁用动态光照。

CSM调整

动态光照的污染等问题,通常通过调整CSM的属性来进行排查。官方的示例中是通过调整Cascade Distribution Exponent来解决问题的,但是由于室外场景比较多变,并没有统一的解决方案,通过Shadow Frustrums工具的配合,对上面的几个属性进行调整比较好。