Language:
Page Info
Skill Level:
Engine Version:
Share
此中文页面内容对应的英文页面有后续更新,如需浏览最新文档可切换至英文页面浏览。

体积雾

虚幻引擎从 4.16 版本起开始支持体积雾(Volumetric Fog)。此法将计算计算机视锥中每个点上参与媒介的密度和光照,以便支持影响雾的各种密度以及任意数量的光照。

VolumetricFog.png

全局控制

调整 指数高度雾 以及每个 光照 上的属性控制光照的参与量,即可控制体积雾。

指数高度雾

指数高度雾组件中 Volumetric Fog 部分中有体积雾的功能按钮。指数高度分布提供体积雾的整体密度。

VolumetricFogProperties.png

属性

描述

Scattering Distribution

这决定着体积散射的方向性强弱。值为 0 则意味着光线散射在各个方向均等,而接近于 1 的值则会导致散射,主要来自光线的方向(要看向光线才能识别出散射)。

Albedo

这是参与媒介的整体反射度。基于水粒子的云层、雾气和薄雾的反射率接近 1。

Extinction Scale

决定参与媒介对光线的阻挡程度。

View Distance

离摄像机的距离,超过此距离将计算体积雾。体积纹理中 Z 轴切片数量有限,因此拉远 View Distance 将增加摄像机附近的向下采样穿帮。

Override Light Colors with Fog Inscattering Colors

启用后,使用 Fog Inscattering ColorDirectional Inscattering ColorInscattering Texture 属性用体积雾覆盖光照颜色。

光照

每个光照对场景的参与量(以及其是否对雾投射阴影)可通过以下属性进行控制。

VolumetricFogLightProperties.png

属性

描述

Volumetric Scattering Intensity

控制此光照对体积雾的参与量。设为零时便没有光照参与量。

Cast Volumetric Shadow

切换对体积雾形成参与的光照是否投射体积阴影。启用后,点光源和聚光源的开销约为不投射阴影光照的三倍。

Volumetric Scattering Intensity: 1 (Default)

Volumetric Scattering Intensity: 0

在此例中,Volumetric Scattering Intensity 设为 0,聚光源对体积雾的参与量已被禁用。

本地控制

使用 Volume 域的材质可描述空间中一个给定点的反射率(Albedo)、自发光(Emissive)和熄灭(Extinction)。Albedo 的范围在 [0-1],而 Emissive 和 Extinction 是任意数值大于 0 的世界空间密度。

VolumetricFogParticleMaterial.png

这是一个粒子系统最简单体积材质的范例。

体积材质当前只能在粒子上使用,只有粒子半径中的位置为有效(通常由 SphereMask 处理)。

放置单个带材质的粒子系统将导致一个密度球体被添加到体积雾。此效果为纯 3D,不涉及布告板。

VF_ParticleInGame.png

借此方法进行拓展,可使用多个带纹理噪点的球形雾粒子来限制场景中特定区域雾的量。

临时二次投影

体积雾使用的体积纹理(体素)分辨率相对较低,与摄像机视锥对齐。体积雾使用极强的临时二次投影滤波,带不同的每帧子体素抖动,以平滑锯齿。负面效果则是变化速度快的光照(如闪光和枪口火舌)将留下光照拖尾。可将 Volumetric Scattering Intensity 设为 0,禁用这些光照的参与量。

性能

体积雾的 GPU 开销主要由体积纹理分辨率控制,而此分辨率则由引擎阴影可延展性(Engine Shadow Scalability)等级决定。PlayStation 4 上高设置的体积雾开销为 1 毫秒,Nvidia 970 GTX 上 Epic 设置的体积雾开销为 3 毫米(因为需要操作的体素量是八倍之多)。

  • 使用 Volume 域的粒子可能添加较大的 GPU 开销,具体视 3D 过度绘制和指令数而定。使用控制台命令 profilegpu 可查看此开销。

  • 启用了 Cast Volumetric Shadow 的点光源和聚光源开销约为未投射阴影点光源和聚光源开销的三倍。

当前支持的特性

此列表中包含体积雾当前所支持的特性:

  • 单一定向光源,带级联阴影贴图或静态阴影产生的阴影,带光照函数。

  • 任意数量的点光源和聚光源,带动态或静态阴影(如已启用 Cast Volumetric Shadowing)。

  • 单一天光,带距离场环境遮挡产生的阴影(如启用)。

  • 粒子光照(如 Volumetric Scattering Intensity 大于 0)。

此外,半透明度将受到体积雾的影响,具体取决于其在场景中的位置。半透明度默认计算顶点处的雾气,因此曲面细分低的水平面可能导致穿帮。这些材质可设为计算逐像素的雾,在材质细节中启用 Compute Fog Per-Pixel 即可解决此问题。

已知问题

尚不支持 体积雾的以下特性:

  • 预计算全局照明。

  • 静态天光产生阴影。

  • 点光源和聚光源上的 IES 配置文件和光照函数。

  • 光线追踪距离场阴影产生阴影。

  • 体积雾自身产生阴影。

  • 点光源和聚光源上的源半径。

  • 指数高度雾(Exponential Height Fog)中的部分设置,如 Fog Cutoff Distance、Start Distance 和 Fog Max Opacity。

常见问题

以下是使用体积雾的常见问题。

  • 如何在没有全局浓雾的情况下实现较强的光束?

    • 雾的整体密度增加后,雾将变浓,因此只有在雾足够浓到将场景中物体遮挡时才会出现光束效果。脱离浓雾实现较强光束有两种方式:

      1. 将全局雾的密度调低,但为定向光照使用较高的 Volumetric Scattering Intensity。此外,在 Exponential Height Fog Actor 中将 Scattering Distritbution 调至 0.9 左右。

      2. 将全局雾的密度调低,但通过体力粒子增加特定区域的密度。

  • 能否同时使用指数高度雾和体积雾?

    • 此时,体积雾将在体积雾 View Distance 中替代 Fog Inscattering Color。体积雾基于物理而指数高度雾并非基于物理,因此无法精准匹配远处的内容。这意味着指数高度雾中的部分设置在体积雾上并无效果。

  • 能否将体积雾的中心从摄像机处分离?这对顶视角游戏十分有用...

    • 当前版本不能。但可用独立体积进行操作。然而如果它们带半透明度,则难以进行有效整合。