Unreal Engine 4.11 Released!
2016.3.31

UNREAL ENGINE 4.11 正式发布!

作者 Alexander Paschall

这个版本为虚幻引擎 4 带来了几百个更新,包括了 92 个来自 GitHub 社区中的虚幻引擎开发者的提交改进!感谢这些为虚幻引擎 4.11 做出贡献的开发人员:

Anton Olkhovik (Sektor), Alessandro Osima (AlessandroOsima), Alexandru Pană (alexpana), Andreas Axelsson (judgeaxl), Andreas Schultes (andreasschultes), Artem (umerov1999), Artem V. Navrotskiy (bozaro), Ben Reeves (BGR360), bensch128, Black Phoenix (PhoenixBlack), Brandon Wamboldt (brandonwamboldt), Cameron Angus (kamrann), Christoph Becher (chbecher) ,Clay Chai (chaiyuntian), Dan Ogles (dogles), David Baack (davidbaack), Eli Tayrien (ETayrienHBO), Eren Pinaz (erenpinaz), G4m4, Hannah Gamiel (hgamiel), Hevedy (Hevedy), Hyeon-Cheol Cho (crocuis), Igor Karatayev (yatagarsu25), Jason (Abatron), Jefferson Pinheiro (Ixiguis), kallehamalainen, Kiqras, Konstantin Nosov (gildor2), Leon Rosengarten (lion03), Manny (Manny-MADE), Marat Radchenko (slonopotamus), Markus Breyer (pluranium), marynate, Matthias Huerbe (MatzeOGH), Maxim (maxpestun), Moritz Wundke (moritz-wundke), Mustafa TOP (MSTF), Nikos Tsatsalmas (ntk4), Pablo Zurita (pzurita), Pavel Dudrenov (dudrenov), Peter Oost (Sirrah), Piotr Bąk (Pierdek), projectgheist, Rama (EverNewJoy), Rene Rivera (grafikrobot), Rob Ray (robdeadtech), Robert Khalikov (nbjk667), sackyhack, sankasan, Sébastien Rombauts (SRombauts), Simon Taylor (simontaylor81), Skylonxe, Spencer Brown (JedTheKrampus), Tam Armstrong (tamarmstrong), Thomas Mayer (tommybear), Thomas McVay (ThomasMcVay), unktomi, Verdoso, ZehM4tt.

新的功能

这个版本有很多新功能,以及大量性能优化。在我们为自己下一款游戏 Paragon 做准备的时候,性能是一个很重要的关注点。4.11 中还有一些为了更真实的画面而做的新的渲染特性以及动画特性,还有声音功能和工具的改进。虚幻 4 还继续在 VR 方面进一步推进,改进 VR 的渲染过程,支持各家最新的 SDK,这样大家能够在那些 VR 硬件正式开售后直接发布游戏产品。

主要功能

性能和多线程

我们最近这几个月来,很多努力都是在为新游戏 Paragon 而优化虚幻 4,目标是在 PC 和 PlayStation 4 上能够以每秒 60 帧运行。

对于 Paragon,我们团队面临一组特殊的问题。在 Paragon 中,同时又 10 个英雄角色和 120 多个普通小兵,大量的特效,并且还有一个漂亮的、具有大量细节的关卡场景,并带有长距离的可视区域,以及在此基础上的每秒 60 帧的要求。Paragon 将引擎的性能推到了极致,尤其在动画和渲染这两个方面。

image alt text

为 Paragon,在引擎各个地方数以千计的微小优化,最终获得了性能上的较大提升,这些改进应该对其他使用 UE4 的游戏产品都会产生好处。很多优化已经整合在 4.11 中,并在将来的版本中还会整合更多这些优化。以下就是这些优化中的一部分。

并行。在多核上的延展能力对于在现在的 PC 和主机上获得高性能的表现非常重要,我们通过多种手段来改进我们的 线程架构。减少了新建任务的开销,为高优先级任务提供支持,并移除了很多同步点来提升性能。

渲染性能。渲染器现在在平衡它的工作任务的数量和 GPU 产生的命令缓冲之间做的更好,这样能避免在 GPU 上增加过度压力并获得最大的并行。我们还在渲染器中移除了一些同步点来更好的利用所有可用的硬件核心。

布料模拟 现在非常快,更好的利用了多线程的能力。我们现在在工作线程中直接调用 APEX 的 Solver。这么做能够得到更好的计划调度,消灭很多同步点的情况,并减少过度开销。布料计算现在在动画的更新后立即被更新(此处并不需要混合),而不再是等骨骼网格组建的更新后再更新。

更快的垃圾回收。我们现在支持对“族”的垃圾回收,这里引擎会将一组对象看作单个单位,大量减少了需要参与计算的对象数量。现在,只有材质的自对象,以及粒子系统才被“族化”。另外,现在标记和删除对象的过程更加具有面向缓存一致性,于是得到 9 倍的时间上的性能优化,并在可达性分析上内存搅动也大量减少。

多线程动画。动画图表现在能够在工作线程上更新,这样做能使的多核上更多的角色动画能得以运算。在更新日志中可以看到,我们修改了很多动画相关的 API,对于动画图表中哪些部分可以被运行于工作线程上也有限制。

动画变量的即时访问。在动画图表更新时,我们增加了一个对变量访问的“快速通道”。这能从图表内部简单的直接拷贝参数,而无需执行蓝图脚本。编译器将会优化一下部分:成员变量,当前为否的布尔成员变量,以及结构内的成员变量。

附加动画“烘培”。现在我们有个选项来打开 烘培附加动画。这么做能够让 附加动画 性能大约提升 3 倍。这个选项会涉及到在 cook 阶段就计算附加动画的差异数据,而不是在运行时。这么做不仅节省了在运行时对这些差异数据进行计算的性能开销,还节省了内存读写访问的开销,以及对动画解压造成的分配开销。这个功能将会增加 cook 的时长,并需要手动设置一个 cvar “a.UseBakedAdditiveAnimations” 为 1 来启用该功能。将来引擎的版本将会对动画 cook 做进一步的改进并默认就开启这个功能。

更新:真实的头发着色

根据电影行业的最新研究,我们为真实的头发显示新增了基于物理的着色模型。

image alt text image alt text

此模型由两个高光区块,以及透射和散射。要使用这个功能,只需要在材质编辑器中着色模型的列表中选择 Hair 即可。

更新:真实的眼睛着色

通过使用虚幻引擎新的基于物理的着色模型,现在大家可以为你们的角色赋予 高度真实的眼睛

image alt text

这个着色模型模拟了通过巩膜的子表面散射,虹膜上的焦散以及湿层处的高光。应用于眼球模型和眼睛材质的结合处,并配合眼角膜处的散射和角膜边缘的色彩变暗,并处理了瞳孔的放大效果。

更新:改进的皮肤着色

我们为真实的皮肤效果改进了子表面散射着色模型的质量和性能

image alt text

新的着色模型仅运行在一般的分辨率上,花费更少的 GPU 内存。散射本身是和分辨率无关的,在物体边缘也不再有色彩偏移。通过将颜色和高光独立的存放在一个棋盘模式,而不是打包在单一像素的做法后,贴图和光照细节都得以更好的保留。

更新:真实的布料着色

我们也 为布料增加了基于物理的着色模型。这里使用一个模糊层来模拟布料效果,我们得到了一个从未获得过的真实结果。要用的话只需要在材质编辑器中选择布料着色模型。

image alt text

更新:胶囊体的阴影

虚幻引擎现在支持 非常柔滑的间接阴影,由代表角色的胶囊体来进行投影。

image alt text

通常,在受间接光照是,并不会产生阴影,除非是屏幕空间环境遮罩。间接投影需要做的非常柔滑,因为间接光照是来自很多不同的方向,因此,传统的阴影贴图做法的效果并不好。间接阴影的方向和柔度来自预先摆放的光照样本区域,并有 Lightmass 在构建光照时预先计算。

在游戏中,胶囊体的间接阴影将角色投影到地面上。

image alt text

也可以用这些胶囊体来做直接阴影。灯光的来源半径或者来源角度将会决定阴影的柔度。这可以用来在一个有效的预烘培光照环境中获得非常柔软的角色阴影效果,在以前这点是做不到的。

image alt text

这个胶囊阴影的实现非常高效,它在一半的分辨率下计算阴影,带有深度信息的向上取样,使用屏幕裁剪来限制只在需要的地方才对阴影进行计算。

GPU 的消耗则和胶囊体的数量以及收到该阴影影响的像素数量成正比关系。

如何启用胶囊体阴影

  1. 仅用 Sphyl bodies(胶囊体) 来创建新的 Physics Asset。用球体也行,但会不够灵活。胶囊体应该覆盖到关节位置。脚部的胶囊体最需要细条,因为这会影响到角色看起来是否恰当的贴在地面上。通常手臂上并不需要,除非游戏中经常会躲到掩体后,或者在地上爬行。

  2. 将该 Physics Asset 设置为骨骼网格模型的 Shadow Physics Asset。

  3. 最后,在骨骼网格组件上启用胶囊体间接阴影选项。

更新:粒子的景深效果

新的材质函数能够使得微小且对相机处在失焦位置的粒子能够扩大,针对不透明粒子特效获得具有景深的渲染效果。

image alt text

左图显示了一个简单的场景,在地面上有很多粒子。右图启用了圆形景深功能,通过新的材质函数将失焦的粒子渲染的像其他一些几何体一样。由于它们并不会受到其他的干扰,这个效果甚至更纯粹。我们总是对这些失焦粒子扩大超过一个像素,来避免它变得太过闪亮。

这个特性需要对例子材质进行一个修改:

image alt text

更新:不透明遮罩抖动

现在可以使用抖动的不透明遮罩,使用不透明材质来模拟半透明表面效果。

image alt text

在材质编辑器中“不透明遮罩抖动”的选项,能够在 Temporal AA 启动的情况下产生一个独立的透明随机形态。这里利用了 TAA 将前景物体和后面的物体在几帧的时间跨度上混合的特性。这也是的半透明物体能够使用我们的延迟着色特性,并且只在一些干扰上才有性能消耗。

更新:LOD 过渡渐变

通过使用一个动画抖动模式,静态网格体现在能够在 细节层级之间平滑过渡

image alt text

注意:这个功能需要在材质上通过开关项才能启用,会带来一些性能开销。

image alt text

更新:对分层 LOD 的改进

这个版本对分层细节等级系统(HLOD)带来了重要改进。HLOD 能自动的对大量细节模型在远距离做较少数量的模型替换。这样做能在视角拉近时得到非常高的场景质量,而在视角远离时获得非常好的性能表现。

image alt text

Paragon 的 Agora —— 256 万个三角面,5690 次 DrawCall(已经从 390 万三角面和 7060 次 DrawCall 优化下来)

为了从 HLOD 中获得更大收益,这里需要 Simplygon SDK(需要 Simplygon 授权) 的支持。在为多个物件生成一个较少多边形的代替模型时需要用到 Simplygon。如果没有的话,系统只能退回原来的做法,对使用不同材质的部分合并进一次 DrawCall。

请去看一下新的 HLOD 大纲功能,那里有一些新的选项,来支持管卡中的 HLOD 设置。

更新:VR 即时立体渲染

即时立体渲染是一个优化,能够让引擎更有效率的为 VR 设备渲染具有立体感的画面。

以前的做法中,引擎渲染立体画面时,先为左眼渲染所有的东西,然后再渲染右眼画面。在即时立体渲染的特性下,我们为双眼的画面同时进行渲染运算,这么做能大量降低 CPU 的开销,并改进 GPU 的利用率。这里是这两种方式的对比参考:

image alt text

以 Bullet Train 项目作为测试内容,我们获得了 14% 的 CPU 运算提升,以及 7% 的 GPU 改善。这里无需任何新的工作配合。不过仍要注意,虽然大部分渲染特性能够在即时立体化中正确的工作,但仍然有一些尚不支持(比如 DFAO)。

要为项目启用该特性的话,在编辑器的项目设置对话框中,勾选“即时立体化”选项。

image alt text

更新:动画动力学(角色的快速物理模拟)

动画动力学是在可以在动画蓝图中使用的一个全新的完整独立的简单物理模拟节点,能在过程中为骨骼网格体增加动态表现,而无需使用完整的物理解决方案。

image alt text

这里是对动画动力学的主要功能介绍:

  • 简化 Rigid Body 模拟

    • 在动画评估阶段运行

    • 在组件空间运行以响应动画数据

    • 快速模拟时不进行碰撞计算

    • 惯性特性计算仅支持方盒形状

  • Rigid body 约束

    • 角 —— 约束在两个轴的平面,第三个轴被锁定。Rigid Body 可以在两个轴向根据给定的角度自由旋转。和棱镜或和平面约束协同工作。

    • 锥形 —— 一个自由的旋转约束,能够保持 Rigid Body 在其特定约束角度内。和棱镜或和平面约束协同工作,但如果选择时会替代角。

    • 棱镜 —— 一种三轴线性约束,能在一定范围内眼三个主要轴向移动。

    • 平面 —— 平面约束是一组无线延伸的平面,限制 Rigid Body 无法跨越。这可以用来为悬挂的物体作为地面,或者避免一个物体和角色穿插。每个平面要么是放置于世界坐标系下,或者可以有角色的一个骨骼位置数据来定义。

  • 锁链

    • 每个节点可以代表一个动态节点,或者一段持续并具有同样约束属性的锁链。在模拟大量节点连接后将能呈现更真实的行为。

    • 对于单个节点,我们仅将“力”向下传递,并不反向回传 —— 而在锁链模式下我们会在两个方向上传递“力”以获取更好的效果。

  • 弹簧

    • 线性以及角化的弹簧特性能用于获得更好的弹跳效果。弹簧可以单独配置,并配置不同的弹簧常量。

  • 风力

    • 影响 APEX 布料的对象同样可以影响动画动力学。并且这可以在每个节点上单独开关,并设置影响程度,以获得完美的对风的反馈表现。

  • 适配子步进

    • 模拟能够运行在一个普通的 Tick 设置下,也可以用一个适配子步进来运行模拟。

    • 该模拟能够逐节点进行配置 —— 如果有一处需要更多的迭代计算,那么可以为它按需配置,而不会影响其他模拟计算。

    • 在这个模式下,我们从游戏实际运行的时间中分离出游戏 Tick 的时间单独记录,如果发现计算开始变慢的时候,我们开始控制时间开销,分多次来运行模拟。这种封顶的方式将会阻止螺旋上升式的模拟运算消耗,也能对复杂模拟情形下增加稳定性。

  • 可视化

    • 在节点上有选项能够在选中时将一些属性可视化,可视化的属性包括:

      • 角度限制

      • 棱柱限制

      • 平面限制

      • 平面排除方式(类似于球形的碰撞并附带平面限制)

更新:游戏中的实时动画录制

现在可以在实时游戏过程中录制一个骨骼模型的动画,并将它保存为动画序列的资源。

image alt text

这个资源可以用于在引擎中继续制作游戏内容,也可以导出成 FBX 并在其他第三方工具中使用。这能在任何当前激活的游戏场景中得以使用,或者在实时转播中,或者在观看录像中。

如何使用这一功能:

  • 要录制动画,打开命令行,输入:RecordAnimation <actor id> [新资源的路径]