平面反射

介绍什么是平面反射Actor——一种可用于模拟镜面反射的Actor。

虚幻引擎(UE) 支持实时平面反射,这种反射比屏幕空间反射(SSR)更加精确,但渲染开销较高。渲染开销较高的原因来自平面反射的工作原理。因为平面反射实际上将从反射方向再次对关卡进行渲染。

横幅图像

屏幕空间反射VS平面反射

在渲染方面,屏幕空间反射(SSR)比平面反射更为高效,但可靠性较差。下图将SSR的缺陷和平面反射进行了对比。

屏幕空间反射

平面反射

  • 屏幕空间反射: 左图展示了屏幕空间反射的局限性。注意图像边缘出现了大量"泄露",或者说面向摄像机视角的池塘部分上的反射开始淡出。出现此现象的原因是SSR无法反射画面外的物体。

  • 平面反射: 右图为相同的关卡,启用的是平面反射。注意图像中,甚至池塘的两侧和边缘均未出现"泄露",反射保持了连贯和精准。原因是平面反射能够无视摄像机视角,反射画面外的物体。

启用平面反射

执行下列操作即可在项目中启用并使用平面反射:

  1. 点击 主(Main) 菜单面板上的 编辑(Edit) ,选择 项目设置(Project Settings)

    打开项目设置菜单

  2. 项目设置(Project Settings) 菜单中,找到 渲染(Rendering)> 反射(Reflections) 分段。

    点击查看大图。

  3. 点击 支持平面反射的全局裁剪平面(Support global clip plane for Planar Reflections) 旁边的复选框。

    点击查看大图。

    在启用平面反射后,如果未能重启UE编辑器,则平面反射无法正常运行。

  4. 在系统提示时重启UE编辑器。

    重启UE编辑器

  5. 重启UE编辑器后,转至 放置Actor(Place Actors) 面板,在 视觉效果(Visual Effects) 选项卡中,选择 平面反射Actor(Planar Reflection Actor) 并将其拖入关卡中。

    点击查看大图。

  6. 将平面反射Actor放进关卡后,即可使用 G 键隐藏或取消隐藏 Actor。可使用 移动旋转缩放 工具更佳地放置平面反射Actor并设置大小,满足关卡需求。

平面反射Actor被添加到关卡后,附近的反射材质将自动受到影响。放置在关卡中的静态网格体的法线用于反射的失真,模拟波纹效果。

平面反射Actor的属性

平面反射Actor有多个属性,当调整这些属性时,会大大影响反射的显示效果。下表概述了这些属性以及它们将如何改变平面反射的显示效果。

平面反射属性

属性

说明

法线扭曲强度(Normal Distortion Strength)

扭曲平面反射时控制法线强度。

预过滤粗糙度(Prefilter Roughness)

预过滤平面反射纹理所使用的粗糙度值。此属性适用于隐藏低分辨率。值越大,GPU开销越高。

平面淡化开始距离(Distance from Plane Fadeout Start)

从反射平面接收处于此距离的像素时将开始淡化平面发射。

平面淡化结束距离(Distance from Plane Fadeout End)

从反射平面接收处于此距离的像素时将完全淡化平面发射。

平面淡化开始角度(Angle from Plane Fade Start)

从反射平面接收法线处于此角度的像素时将开始淡化平面发射。

平面淡化结束角度(Angle from Plane Fade End)

从反射平面接收法线处于此角度的像素时将完全淡化平面发射。

显示预览平面(Show Preview Plane)

在编辑器中工作时切换反射平面的可见性。此属性不会影响平面反射。

高级属性

预过滤粗糙度距离(Prefilter Roughness Distance)

将达到预过滤粗糙度值的距离。

屏幕百分比(Screen Percentage)

下采样百分比,可用于减少GPU渲染平面反射的时间。此属性直接影响平面反射所产生的反射的质量。

额外视野(Extra FOV)

渲染至反射纹理时使用的额外视野(FOV)。法线扭曲引起反射纹理外读取时,此属性十分实用。较大的值将增加渲染线程和GPU开销,因为更多对象和三角形将被渲染到平面反射中。

渲染两面场景(Render Scene Two-Sided)

是否将场景渲染为两面,适用于隐藏法线扭曲会在被反射平面裁切的对象"下方"读取的瑕疵。启用此设置后,网格体的背面将显示在裁切区域中,而非可能为明亮天空的背景中。如启用此属性,则必须将水平面添加到 隐藏Actor(Hidden Actors) ,因为水平面现在不会阻挡反射。

LOD距离因子(LOD Distance Factor)

缩放细节层级(LOD)使用的距离。设为大于1的值会导致场景捕获使用低于主视图的LOD,以加速场景捕获传递。

平面反射Actor的场景捕获属性

平面反射Actor还有多个属性,使用这些属性,您可以控制捕获的实时反射性能开销。

场景捕获属性

属性

说明

图元渲染模式(Primitive Render Mode)

控制被渲染到场景捕获中的图元。

  • 渲染场景图元(旧版)(Render Scene Primtive (Legacy)) - 渲染场景中的所有图元。

  • 渲染场景图元(Render Scene Primtives) - 渲染场景中的所有图元,但添加到 隐藏Actor(Hidden Actors) 列表中的图元除外。

  • 使用ShowOnly列表(Use ShowOnly List) - 仅渲染 仅显示Actor(Show Only Actors) 列表中列出的Actor。

捕获源(Capture Source)

控制捕获源类型。

  • RGB表示的场景颜色(HDR),A表示的反转不透明度

  • RGB表示的场景颜色(HDR),A为0

  • RGB表示的最终颜色(LDR)

  • RGB表示的场景颜色(HDR),A表示的场景深度

  • R表示的场景深度

  • RGB表示的设备深度

  • RGB表示的法线(仅延迟渲染器)

  • RGB表示的基础颜色(仅延迟渲染器)

  • 线性sRGB色域表示的最终颜色(HDR)

  • 线性sRGB色域表示的最终颜色(带色调曲线)

捕获每一帧(Capture Every Frame)

是否每帧更新捕获的内容。如禁用,组件只在加载时渲染一次,然后只在移动时再次渲染。

运动中捕获(Capture on Movement)

是否更新运动中的捕获内容。如果您要从蓝图手动捕获,则将其禁用。

始终保留渲染状态(Always Persist Rendering State)

是否保留渲染状态,即便禁用 捕获每一帧(Capture Every Frame) 也是如此。这可计算动态模糊和临时抗锯齿(TAA)的速度。

隐藏Actor(Hidden Actors)

关卡中可用且要在场景捕获中隐藏的所选Actor的列表。

仅显示Actor(Show Only Actors)

图元渲染模式(Primitive Render Mode) 用于 使用ShowOnly列表(Use ShowOnly List) 时,关卡中将由此场景捕获渲染的可用Actor的列表。

最大视图距离覆盖(Max View Distance Override)

设置当值大于0时,场景捕获中渲染的图元的最大渲染距离(单位:厘米)。如发射平面处于一个封闭区域(如走廊或房间)中,则可使用此选项来剔除反射的远景物体。

捕获排序优先级(Capture Sort Priority)

设置帧中的捕获优先级,对GPU上的场景捕获进行排序,解决多个捕获组件之间的相互依赖性。优先级最高则最先进行。

启用时使用光线追踪(Use Ray Tracing if Enabled)

是否将光线追踪用于此捕获。光线追踪必须在项目中启用。

分析事件名称(Profiling Event Name)

设置分析GPU时分析事件的名称。当在关卡中使用了多个平面反射时,了解正在使用哪个平面反射很有用。

高级属性

通用显示标志(General Show Flags)

通用功能显示标志,用于将一些功能和Actor从正在渲染切换到场景捕获。例如,抗锯齿、雾、静态网格体、骨架网格体等。

高级显示标志(Advanced Show Flags)

通用高级功能显示标志,用于将一些功能和Actor从正在渲染切换到场景捕获。例如,植物、实例化静态网格体、Paper 2D Sprties等。

后期处理显示标志(Post Processing Show Flags)

切换显示标志,用于将泛光、眼部适应和动态模糊从正在渲染切换到场景捕获。

光源类型显示标志(Light Types Show Flags)

切换显示标志,用于将天空光照从正在渲染切换到场景捕获。

光照组件显示标志(Lighting Components Show Flags)

切换显示标志,用于将环境遮挡和动态阴影从正在渲染切换到场景捕获。

光照功能显示标志(Lighting Features Show Flags)

切换通用显示标志,用于将光照功能从正在渲染切换都场景捕获。例如,距离场环境遮挡(DFAO)、光照函数、屏幕空间反射。

隐藏显示标志(Hidden Show Flags)

切换显示标志,用于将光照和后期处理从正在渲染切换为场景捕获。

平面反射的限制

虽然平面反射提供了一些非常逼真的反射,但此功能确实存在下面列出的一些限制。

  • 平面反射会导致整个场景被渲染两次,所以要把一半的帧时间花在渲染线程和GPU上!

  • 限制世界场景中放置的平面反射数量。很多时候,一个还是太多。

  • 适当地调整它的大小,使其能够在不可见的情况下被剔除。

  • 渲染平面反射角色的开销直接来自当前在关卡中进行渲染的内容。当启用此功能时,因为这些开销不随着屏幕百分比(Screen Percentage)缩放,所以存在大量三角形和绘制调用的场景将遭受最多的性能问题。

平面反射性能

在项目中启用平面反射可实现相当精确的反射,但该功能会对项目性能产生直接影响。以下部分将说明在针对高端 PC 的项目和针对移动设备的项目中启用平面反射后的性能影响。

下面的示例使用 风筝与无尽之剑:草地(Kite & Infinity Blade Grass Lands) 项目来演示平面反射的性能影响。你可以在 Epic Games启动程序(Epic Games Launcher)商城(Marketplace) 中找到此项目。

平面反射性能和风筝Demo

由于风筝Demo地形地貌的大小和多变的高度,添加并缩放单个平面反射Actor包含整个关卡无法执行,可能导致性能极差。需要策略性地对平面反射Actor进行放置和缩放,使其适应关卡中需要反射的区域。下图中可以看到在风筝Demo中平面反射在水面上形成的视觉效果。

平面反射关闭

平面反射开启

平面反射对关卡的视觉效果提升十分大,但对性能的影响也极大。在下方左图 平面反射关闭 中可以看到,整个关卡的渲染时间为31 ms。在下方右图 平面反射开启 中可以看到,整个关卡的渲染时间为29.19 ms。此外,平面反射的渲染时间为23.07 ms。因此带平面反射场景的整体渲染时间为52 ms左右。

关闭平面反射的关卡的GPU查看器

开启平面反射的关卡的GPU查看器

平面反射关闭

平面反射开启

点击查看全图

点击查看全图

平面反射消耗31 ms进行渲染的原因是风筝Demo中使用了全动态光影。使用静态/预计算光影的关卡再次进行平面反射渲染时效率更高。

平面反射性能和无尽之剑地牢

基于无尽之剑精灵遗迹地图的规模和布局,只需要一个平面反射,将其缩放匹配关卡中放置的水面静态网格体即可。在下图中可看到精灵遗迹地图水面添加平面反射后的效果。

平面反射关闭

平面反射开启

添加平面反射后,水面效果更加逼真;较之于风筝Demo,性能影响也较小。在下方左图"平面反射关闭"中可看到,不带平面反射场景的渲染时间约为11 ms。在下方右图"平面反射开启"中可看到,平面反射的渲染时间约为1.67 ms,关卡整体渲染时间约为13 ms。

关闭平面反射的关卡的GPU查看器

开启平面反射的关卡的GPU查看器

平面反射关闭

平面反射开启

点击查看全图

点击查看全图

精灵遗迹地图中的平面反射渲染时间为1.67 ms,而风筝Demo中的渲染时间为23.07 ms。造成此差异的原因是静态网格体和材质的构建方式。精灵遗迹地图及其内容针对移动设备设计,每个资源使用的三角形和材质指令数量均有严格限制。因此在该地图中启用平面反射时开销较低,因为这里使用的资源复杂度和规模均低于风筝Demo。

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