可移动光源

能在运行时修改所有属性的全动态光源。

Windows
MacOS
Linux

lighting_overview_banner_001.png

可移动光源 将投射完全动态的光照和阴影。可修改位置、旋转、颜色、亮度、衰减、半径等所有属性。其投射的光照不会烘焙到光照贴图中,在无全局光照方法时不支持间接光照。

阴影

可移动光源设为使用全场景动态阴影来投射阴影,此方式性能开销很高。性能开销主要取决于受该光源影响的网格体数量以及这些网格体的三角形数量。这意味着半径较大的可移动光源的阴影投射性能开销是半径较小的可移动光源的数倍之多。

使用

在光源的 变换 类别有一个名为 移动性(Mobility) 的下拉属性;将此属性改为 可移动(Movable)。此属性也会出现在添加到蓝图的光源组件上。

ML_movableProp.png

阴影偏差

使用动态光照时,调整光源的 阴影偏差 属性可减少因阴影映射方法(如小面化几何体表面)导致的瑕疵。

使用

使用 倾斜偏差(或常量偏差)和 阴影倾斜偏差 属性,可逐光源调整阴影偏差。调整 阴影倾斜偏差阴影偏差 成正比,在这两个属性间可减少发生阴影映射瑕疵。

阴影偏差(常量和倾斜):默认值

阴影偏差(常量和倾斜):已调整

调整 阴影倾斜偏差 将减少自投影瑕疵,但会降低阴影精度,导致场景中地面物体出现“彼得潘”(漂浮)效果。倾斜偏差调整无法解决 所有 与动态光照有关的自投影问题,但可解决其中多数问题。项目的 正确 平衡将由你决定。

定向光源拥有额外的深度偏差属性,可控制级联阴影贴图(CSM)间的偏差强度,减少级联过渡点处的阴影瑕疵不连续性。

阴影偏差(常量和倾斜):默认值

阴影偏差(常量和倾斜):已调整

除逐光源调整属性外,还可通过全局控制台变量,逐光源类型使用0-1间的值,控制常量、倾斜和接收者偏差。

  • 定向光源:r.Shadow.CSMReceiverBias

  • 聚光源:r.Shadow.SpotReceiverBias

  • 点光源:r.Shadow.PointReceiverBias

  • 矩形光源:r.Shadow.RectReceiverBias

阴影偏差设置

使用以下设置可调整场景中照明和阴影的偏差:

属性

说明

点光源、聚光源和矩形光源

阴影偏差(Shadow Bias)

控制此光源投射的整个场景阴影的自投影精度。值为0时,阴影将从投射方表面开始产生,但会出现诸多自投影瑕疵。值越增大,阴影产生处与投射者的距离越远,不会导致自投影瑕疵,但物体可能会浮于表面。值约为0.5时,精度和自投影瑕疵减少间可达到最佳平衡。

此设置也会影响阴影的柔和过渡。

阴影倾斜偏差(Shadow Slope Bias)

阴影偏差(Shadow Bias) 外,此属性还将控制该光源投射的整个场景阴影的自阴影精度。其工作原理是根据给定表面的斜率增大偏差量。值为0时,阴影从投射者表面开始产生,但将出现很多自阴影瑕疵。随着值的增大,阴影将从距离投射方更远的距离开始产生,不会出现自阴影瑕疵,但物体可能看起来像漂浮在表面上。值约为0.5时,精度和自投影瑕疵减少间可达到最佳平衡。

这也将影响阴影的柔和过渡。

定向光源

阴影偏差(Shadow Bias)

控制此光源投射的整个场景阴影的自投影精度。值为0时,阴影从投射方表面开始产生,但将出现很多自阴影瑕疵。随着值增大,阴影将从距离投射者更远的距离开始产生,不会出现自阴影瑕疵,但物体可能看起来像漂浮在表面上。值约为0.5时,精度和自投影瑕疵减少间可达到最佳平衡。

这也将影响阴影的柔和过渡。

阴影倾斜偏差(Shadow Slope Bias)

阴影偏差(Shadow Bias) 外,此属性还将控制该光源投射的整个场景阴影的自阴影精度。其工作原理是根据给定表面的倾斜增大偏差量。值为0时,阴影将从投射方表面开始产生,但会出现诸多自投影瑕疵。值越增大,阴影产生处与投射者的距离越远,不会导致自投影瑕疵,但物体可能会浮于表面。值约为0.5时,精度和自投影瑕疵减少间可达到最佳平衡。

此设置也会影响阴影的柔和过渡。

阴影级联偏差分布(Shadow Cascade Bias Distribution)

控制定向光源级联间的深度偏差缩放。此属性可减轻阴影级联过渡间的阴影瑕疵差异。值为1将根据各级联大小缩放阴影偏差,而值为0将在所有级联上统一缩放阴影偏差。

阴影贴图缓存

点光源或聚光源未移动时,可存储该光源的阴影贴图并在下一帧重复使用。在环境通常不移动的游戏中,此功能可显著降低可移动点光源和聚光源的阴影投射开销。此章节将介绍在项目中使用阴影贴图缓存的方法。

阴影贴图缓存和性能

所有UE4项目将自动启用阴影贴图缓存功能。执行以下操作启用和禁用阴影贴图缓存,可检查性能:

以下阴影贴图缓存演示使用Sun Temple项目。在Epic Games Launcher“学习(Learn)”选项卡中可找到Sun Temple地图。

  1. 选择要在项目关卡中投射动态阴影的所有光源。

    SMC_Select_All_Lights.png

  2. 将光源的 移动性(Mobility) 设为 可移动(Movable),并启用 投射阴影(Cast Shadows)

    SMC_Set_Mob_Shadow_Cast.png

  3. 反引号(`) 键打开 控制台,输入 Stat Shadowrendering 查看动态阴影当前开销。

    SMC_Console_ShadowRendering.png

  4. 再次按反引号(`)键打开 **控制台**,输入 r.Shadow.CacheWholeSceneShadows 0 禁用动态阴影缓存。

    SMC_Disable_Shadow_Cache.png

    记录 CallCountInclusiveAug 部分中的数字。

  5. 现在再次按下反引号键打开 控制台,输入 r.Shadow.CacheWholeSceneShadows 1 重新启用阴影缓存。通过比较 CallCountInclusiveAug 的数字,可观察此功能对动态阴影性能的影响。

    阴影缓存开启

    阴影缓存关闭

性能

阴影贴图缓存会对性能产生极大影响。以下为使用NVIDIA 970 GTX GPU以1920x1200屏幕分辨率进行优化测试的结果。

  • 在启用此功能之前,无缓存的3个阴影投射点光源花费了14.89毫秒完成阴影深度渲染。

  • 启用缓存阴影贴图后,相同的3个阴影投射光源花费0.9毫秒便完成渲染,大约 快16倍

    注意:渲染33个点光源的贡献仍花费了2毫秒,可通过其他方式进行优化,此修改无法对其产生影响。

  • 可使用 r.Shadow.WholeSceneShadowCacheMb 控制阴影贴图缓存使用的最大内存量

限制

虽然阴影贴图缓存可降低在UE4项目中使用动态阴影的开销,但其仍存在部分限制,结合不支持的功能使用时可能引起渲染瑕疵。

  • 默认仅在对象满足以下要求时才会进行缓存:

    • 基元将其 移动性 设为 静态静止

    • 关卡中使用的材质不使用 场景位置偏移

    • 光源必须是 点光源聚光源移动性 设为 可移动,并启用 阴影投射

    • 光源必须停留在一处。

    • 使用动画 曲面细分像素深度偏移 的材质可能会在缓存其阴影深度时产生瑕疵。

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