Actor移动性
Mobility(移动性)设置控制是否允许在游戏过程中以某种方式移动或改变Actor。 该设置主要应用于静态网格物体Actor及光源Actor。
当Mobility(移动性)属性可用时,它有三种状态
移动性状态 |
描述 |
Static(静态) |
Static(静态) 设置是为在游戏过程中不能以任何方式移动或更新的Actor预留的。
静态网格物体Actors ,如果其Mobility属性是 Static ,那么将会在预计算光照贴图(Lightmass烘焙的光照)上产生阴影。 这使得它们非常适合游戏中不需要变换位置的建筑物网格物体或装饰性网格物体。 但是,注意,它们的材质仍然可以产生动画。 光源Actors ,如果其Mobility属性是 Static ,那么将会影响预计算光照贴图(Lightmass烘焙的光照)。 由于间接光照缓存 的存在,所以它们仍然会照亮动态物体。 对于移动设备的处理流程来说,这是理想的光照应用方法,因为从本质上讲,它不影响游戏性能。 |
Stationary(固定) |
Stationary(固定) 设置,用于不移动但可以在游戏中以某种方式更新的 光源Actors ,比如 打开/关闭 光源,改变光源的颜色等。以这种方式设置的光源仍会影响Lightmass预计算光照贴图,同时也可以投射移动对象的动态阴影。 但是,注意,不要使用太多这样的光源影响一个给定的Actor。 请参照固定光源文档 获得更多细节。 |
Movable(可移动) |
Movable(可移动) 设置仅当Actor在游戏过程中需要移动时应用。
静态网格物体Actor ,如果其移动性为 Movable ,那么将不会投射预计算阴影到光照贴图中。 由于间接光照缓存 的存在,所以它们仍然会被静态光源Actor照亮。 如果固定光源或可移动光源照亮了它们,它们将投射动态阴影。 这是所有不发生变形且需要在场景中移动的网格物体元素的典型设置,比如地面、电梯等。 光源Actor ,如果可移动性是 Movable ,那么它仅能投射动态阴影。 因此,当应用很多这样的光源投射阴影时,一定要小心,因为它们投射阴影的方法是性能消耗最大的。 但需要注意的是,由于虚幻引擎有延迟渲染系统,所以 不投射阴影 的可移动光源的性能消耗是非常低的。 |
光源移动性类型
静态 - 完全静态的光源在游戏运行过程中几乎没有任何性能消耗。
固定 - 这种类型的光源,可以在运行时改变颜色和亮度,但是不能移动、旋转或修改影响范围。
移动 - 完全动态的光源,可以在运行时改变其自身的所有属性。
性能消耗 移动光源>固定光源>静态光源
静态光源
1.静态光源是运行时完全无法改变的。静态光源对可移动对象无影响,也不会产生阴影。
2.静态光源仅在光照贴图中计算,一旦处理完,对性能没有进一步影响(主要是生生光照贴图时的耗时,在运行时不产生消耗)。
3.当照亮的对象也是静态的时,静态光源可以产生区域(接触)阴影。这是通过调整 光源半径 属性实现的。然而,应该注意的是,为了获得较好的阴影效果,接收柔和阴影的表面需要合理设置它们的光照贴图分辨率。
4.静态光源 的 光源半径 有一个额外的作用是使得它投射的阴影变得柔和。光源具有较小的 光源半径,投射了生硬的阴影,源具有较大的 光源半径,因此投射了较为柔和的阴影
5.光照贴图分辨率 能够用来控制静态光源(以及固定光源)产生的预烘培光着信息的细节程度(如照射在当前物品上的阴影的精细度)。在静态网格体组件上,光照贴图分辨率要么设置在静态网格体的资源上,或者通过勾选 Override Lightmap Res 选项框并设置数值。较大的数值意味着较高的分辨率,但也意味着更长的构建时间和内存消耗。然而,在 BSP 表面属性上,光照贴图分辨率是由 Lightmap Resolution 属性控制,这其实是一个密度属性。因此在这里,较低的数值会产生较高分辨率
6.静态光源仅对移动性是静态的对象产生阴影
固定光源
1.固定光源是运行时保持固定位置不变的光源,可以改变光源的亮度和颜色
2.固定光源运行时改变亮度,仅影响直接光照
3.固定光源运行时的间接(反射)光照不会改变,是在光照系统(lightmess)中预先计算的
4.固定光源的所有间接光照和间接阴影都存储在光照贴图中。直接阴影被存储在阴影贴图中。
5.固定光源的直接光照具有和可移动光源一样的高质量解析高光
6.固定光源的直接阴影
㈠静态阴影
①在不透明表面
lightmass在构建光照过程中为静态对象上的固定光源生成距离场阴影贴图,最多只能有 4 个重叠的固定光源具有静态阴影,因为这些光源必须被分配到阴影贴图的不同通道。这是个图形色彩问题,由于这种拓扑结构,所以通常仅允许少于4个的光源重叠。阴影不能影响这个重叠测试,所以 太阳光一般需要从它所在关卡获得一个通道,即使地下区域也如此。一旦达到通道的极限,其他固定光源将会使用全景动态阴影,这会带来很大的性能消耗。您可以使用 StationaryLightOverlap 视图模式来可视化地查看重叠效果,它会随着您修改光源而动态地更新。当某个光源无法分配到一个通道时,该光源的图标会变为红色的 X。
②在半透明表面
半透明表面也能够在开销较小的情况下接受固定光源的阴影投射—— Lightmass 会根据场景静态物体预计算阴影深度贴图,这将在运行时被应用到半透明表面。这种形式的阴影是比较粗糙的,仅仅在米的度量单位上计算阴影。
㈡动态阴影
动态物体(比如 StaticMeshComponent 或 SkeletalMeshComponent)必须要从距离场阴影贴图中集成环境世界的静态阴影。这是通过使用 每个对象 的阴影完成的。每个可移动的对象从固定光源创建两个动态阴影:一个用于处理静态环境世界投射到该对象上的阴影,一个处理该对象投射到环境世界中的阴影。通过使用这种设置,固定光源唯一的阴影消耗就来源于它所影响的动态对象。这意味着,根据所具有的动态对象的数量不同,该性能消耗可能很小,也可能很大。如果足够多的动态对象,那么使用可移动光源会更加高效。
(由可移动组件形成的 一个物体 的阴影被用于该物体的边界框上,因此边界框必须是精确的。对骨骼网格体而言,这意味着需要有对应的物理资源(Physic Asset),对粒子系统而言,固定的边界框需要足够大来包含所有的粒子才行。)
7.定向固定光源是特殊的, 支持采用 联级阴影贴图(Cascaded Shadow Maps) 的全景阴影同时作为静态阴影。
这在具有很多带动画的植被的关卡是非常有用的,您想在玩家周围产生可以动的阴影,但是不想付出以让很多阴影重叠来覆盖较大的视图范围这样的代价。动态阴影会随着距离而渐变为静态阴影,但这种变换通常是很难察觉到。要想设置这样的处理,仅需把 DirectionalLightStationary 的 Dynamic Shadow Distance StationaryLight 修改为您想让渐变发生的范围即可。 即便在定向光源上使用联级阴影贴图的时候,可移动组件仍然将会创建 PerObject 的阴影。这么做在较小的 Dynamic Shadow Distances 时比较有用,但如果设置较大的时候这么做就会产生不必要的性能开销。要禁用 PerObject 阴影来优化性能的话,可以在光源属性上禁用 Use Inset Shadows For Movable Objects。
8.固定光源的间接光照,存储在光照贴图中。在运行时,通过修改亮度和颜色来改变直接光照的做法并不适用于改变间接光照。这意味着即使当一个固定光源未选中 Visible 项时,在构建光照时,它的间接光照仍会存放到光照贴图中。光源属性中的 IndirectLightingIntensity 可以用于控制或禁用该光源的间接光照强度,以便当在构建光照时减小甚至彻底关闭它的间接光照。
9.固定光源使用区域阴影。固定的定向光源提供了一个新的阴影选项,在 Lightmass 区块内,叫 Use Area Shadows for Stationary Lights
可移动光源
可移动光源(Movable Lights) 产生完全动态的光照和阴影,可以改变光源位置、旋转度、颜色、亮度、衰减、半径等属性,几乎光源的任何属性都可以修改。它们产生的光照不会烘焙到光照贴图中,也不会产生间接光照效果。
可移动光源使用全场景动态阴影的方式来投射阴影,具有很大的性能开销。性能消耗的程度主要取决于受到该光源影响的模型的数量,以及这些模型的三角面的数量。也就是说一个半径较大的可移动光源造成阴影的性能开销可能会几倍于一个半径较小的可移动光源。
实时阴影,光源的实时阴影具有较大的性能消耗。渲染一个有阴影的完全动态的光源所带来的性能消耗,通常是渲染一个没有阴影的动态光源的性能消耗的 20 倍