虚幻引擎 4.11 版本信息

这个版本为虚幻引擎 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 textimage 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(已经从 394 万三角面和 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

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

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

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

image alt text

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

如何使用这一功能:

更新:更高质量的景深效果

现在可以通过增加景深的采样数(Circle DoF)来提高质量,降低噪点。但会带来一些性能消耗。

image alt text

更新:平台和 SDK 的更新

除了惯例的更新以外,我们更新了所有主流 VR 平台,使用它们最新的 SDK 以为接下来在它们的平台上发行产品做好准备。在这些更新后,取得了一个扎实稳定并且是面向最终效果的版本,因此任何基于 4.11 的 UE4 产品都已经是“为 VR 发行而准备好了”。

image alt text

这次版本中主要的平台有:

更新:为 DIRECTX 12 的改善

image alt text

我们已经在虚幻引擎 4 中整合了 DirectX 12 的更新,在生成平行渲染指令时更好的利用 CPU 能力,并增加了改进,诸如支持多个 Root 签名,默认支持异步管道状态磁盘缓存,减少内存消耗并解决内存泄漏,资源转移是的优化,更快的内存分配,以及通过在 GPU 空闲时间填充内容避免 GPU 空转。

为 XBOX ONE 准备的 DIRECTX 12

微软的工程师已经在 Xbox One 上添加了 DirectX 12 的前期功能支持!

要启用这个需要一些步骤:

由于这还是一个实验性的功能,可能会有渲染问题以及稳定性问题。

更新:在 MAC OSX 上 METAL 渲染

Metal 现在在 Mac OS X El Capitan 上已经是默认的图形 API 了!

image alt text

Epic 和 Apple,AMD,Nvidia 以及 Intel 进米合作,在 Mac 上整合 Metal。在 4.11 中,它已经代替了原先的 OpenGL 成为 OS X El Capitan 的主要图形接口。4.11 中为 Metal 和 OpenGL 提供了同样的功能。Metal 则提供了流化,低开销的 API 支持,协同预编译的着色器和高效的多线程支持,能够最大化 GPU 的处理能力。我们将会继续改进并增加对 Mac Metal 的支持,并在以后的版本中添加新的 API 特性。

还有一个对 Metal 的实验性功能是支持 Shader Model 5 的特性,可以通过使用命令行开关 "-metalsm5" 来试一下。

更新:更快的光照构建(支持 INTEL EMBREE)

我们整合了 Intel 的 Embree ray tracing 库 到 Lightmass 中,并极大的改进了光照构建。

光照构建的时间主要用来计算跟踪光线并得出光线是如何反弹的。使用 Embree 后,在一次测试中,间接光照质量设置为 4,“Sun Temple”关卡的光照构建时间快了 2.4 倍(从 45 秒下降到 18 秒)。最后效果视觉表现是一致的,

更新:LIGHTMASS 通道

通过设置通道对象,天光在室内的质量现在得到了很大的改进。

image alt text

这些通道告诉 Lightmass 从哪里获取光照来源,这里并不会产生新的光源。使用通道对象的最佳做法是用来覆盖小的空间,并对最终的光照效果很重要。这里妥协了更高的光照和阴影质量,因为 Lightmass 更专注在进入光源的光线上。(左图 是没有通道对象,右图 是有通道对象)

image alt text

其他一些对 Lightmass 质量的改进:

更新:通过从 MESH 来复制动画姿势

我们添加了一个新的动画节点,能够在动画图表内的骨骼网格组件之间复制姿势。这是对 Master Pose Component 的一个改进版本,现在可以将原动画和新动画进行混合。

image alt text

在上面的例子中,Gauntlet 就在它的动画蓝图中使用这个 Copy Mesh Pose 节点,从一个源模型中拷贝了手和手臂的姿势数据,同时 Gauntlet 的 Spikes 动画在独立计算。

image alt text

这里的 Source Mesh 就是作为要复制的另一个模型组件。这里只会拷贝骨骼名字匹配的内容。一旦从这个节点中拷贝获得数据后,就可以用它和其他动画做混合操作。

作为源模型,它的动画总是优先于目标模型,在目标模型依附于源模型时这是自然发生的,关节名称也要匹配。同时还要注意骨骼位置拷贝优先于物理模拟计算,这意味着如果源模型是模拟计算的则不会工作,当然如果目标模型在物理计算后拷贝则没有问题。

更新:LOD 骨骼简化工具

现在能够从一个骨骼网格体的 LOD 中 移除骨骼。骨骼结构权重将会自动更新!这是一个优化游戏非常简单的方法。

image alt text

骨骼树 上右键菜单中,使用 “Remove Children” 选项,来对指定 LOD 禁用某些骨骼。

image alt text

先前,这里是和模型简化工具在一起。现在可以简单的观察 LOD 并直接修改骨骼,选中不想要的骨骼并删除,如果想做的话还可以包含他的子骨骼。并还能够控制是仅在这个 LOD 中移除还是在所有 LOD 中移除。

一旦移除骨骼后,它们将会变成灰色,以表明当前 LOD 下它们不再参与计算。在 Persona 界面中的 LOD 预览画面也同时会显示灰色的骨骼名称。

最后,在骨骼树工具的下拉框中还有一个新的 “LOD 骨骼” 显示选项来过滤查看哪些骨骼可见。

image alt text

更新:粒子剪裁(更快的 FLIPBOOK 粒子渲染)

粒子剪裁能够让 flipbook 的粒子特效渲染提升三倍!

使用 flipbook 动画的粒子(子 UV 动画模块)通常会有很多浪费的区块,而那些区块的像素着色器仍然在执行,但最终的不透明度是 0.举个例子,下面这个贴图中很多都是不必要的半透像素。

image alt text

我们现在能渲染粒子时用更加紧凑的边界形状,裁剪掉那些不可见区域,而不是不管当前播放哪一帧都使用完整的一个四边形。

image alt text

设置

默认设置下引擎并不会使用粒子裁剪功能,因为材质编辑过程允许对粒子的不透明性做任意逻辑修改,甚至这种改动可能来自另一个贴图。美术人员必须主动的来设置使用粒子裁剪功能。

  1. 用一个贴图创建一个新的子 UV 动画素材(在内容管理器中右键)

image alt text

  1. 打开这个子 UV 动画资源,确认 Sub Images 的属性设置正确。这个步骤每个 flipbook 贴图都需要做一遍。

image alt text

  1. 在级联编辑器中,找到 SubUV 模块并设置动画素材。

image alt text

性能结果

image alt text

在着色器复杂度湿度下显示,使用粒子裁剪后绘制区域减少了很多,同样一个粒子在使用裁剪后 GPU 性能提升 2~3 倍

更新:基于顶点的半透明光照

照亮半透明效果现在通过使用新的 基于顶点 的半透明光照,能 渲染的更快

image alt text

现在在材质编辑器中有两种半透明光照模型,都是基于顶点计算光照的。

image alt text

更新:光照通道

光照通道能够使得动态光源 仅在通道重叠时才对物品进行光照影响。我们现在 支持 3 个 光照通道。

image alt text

可以为一个模型组件,或者一个灯光组件设置它的通道。

image alt text

更新:立体声空间感

现在在 PC、XboxOne 和 PS4 平台上可以使用 3D 空间化立体声资源。立体声空间化最终就是在空间上为每个源单独单独输出(比如左右声道),正如每个是单声道一般。左右声道的音源位置由声音发生器的位置决定,并由 3D Stereo Spread 属性设置,这是在 Sound Attenuation Setting 内的一个新的参数。

image alt text

该 3D Stereo Spread 参数用游戏中长度单位定义了左右声道的距离,并垂直于面向听众的发射器的向量。这意味着立体声双通道的参数是在世界坐标系下的,并且当远离听者时会自然的回落到一个单声道音源上。

image alt text

更新:声音焦点

声音的衰减设置现在支持 声音焦点 了,这一新特性使得音效设计人员能够使用参数控制声音在各个方向上对听者产生的效果

下图说明了这种方向设置:

image alt text

音效设计人员能够定义方向角度,判断声音是在焦内还是焦外。其中的相对位置则是由方位角插值而来。这组新的设置在 Sound Attenuation Setting 的结构下。

image alt text

焦值和非焦值用来在三个方面修改声音:距离缩放,体积缩放,和优先级缩放。距离缩放用来创建一个 boom-mic 或 zoom-mic 的效果,通过控制声音在焦内和焦外的距离来缩放来获得效果。体积缩放可以基于可见性为声音添加另一个衰减效果。优先级缩放是用来减少(或强化)声音相干性的优先级。

更新:声音遮蔽

虚幻 4 现在支持简单的基于 raycast 的声音遮蔽。要对一个声音使用遮蔽计算的话,需要先在 Sound Attenuation Setting 中按下图设置:

image alt text

如果对一个声音对象启用了遮蔽功能,该对象会对碰撞体执行 raycasts 来判断该声音是否需要被遮蔽。如果判断为需要遮蔽时,会为它应用一个低通过率频率数值以及一个衰减体积。由于遮蔽系统是一个二元 raycasts 计算(遮蔽,或者不遮蔽),还会在遮蔽和不遮蔽的状态切换过程增加一个插值时间来过渡效果。还有一个选项用来控制是否要考虑复杂几何体的碰撞。

更新:声音干涉

新的干涉系统将声音的干涉数据从声音实例中移除,并将它作为单独的资源存放。现在可以创建新资源时,在菜单中选择 “Sound Concurrency” 类型。

另外,在先前的 Max Count 和 Resolution Rule 外,新的声音干涉对象增加了其他和干涉相关的花哨功能,在下面进行描述。

对拥有者的限制

这个选项用于表示任何用这种干涉来播放的声音都应该它自有的干涉计数。如果一个声音没有 owner(比如并不是由一个 Actor 播放,或者并不是通过 Audio Component 播放),那么则会按照该选项未选中的设置计算。这里的目的是希望支持基于每个对象的干涉数量限制。

体积缩放

这个功能将声音分组进行管理。当多个声音在同一个干涉组中同时播放的话,越早播放的将会变得越轻。在这个功能下声音音量的缩放公式是:

VolumeScale = VolumeScaleSettingNewerSoundCount

这里 VolumeScaleSetting 是由用户设置的数值,NewerSoundCount 是在干涉组中当前播放的声音中晚于这条的条目数。比如,如果声音 A,B 和 C 在同一个干涉组中,在 VolumeScaleSetting 设置为 0.9 的状态下播放时,会被调整为:

A's VolumeScale = (0.9)2 = 0.81

B's VolumeScale = (0.9)1 = 0.9

C's VolumeScale = (0.9)0 = 1.0

换句话说,最近播放的声音不会被影响,每个旧的声音会被指数衰减,有效的形成了在组内声音条目自动退让的机制。

新的解析规则:停止优先级最低的,停止最安静的

新的干涉物体也引入了两个新的干涉解析规则:停止优先级最低的,停止最安静的。

停止优先级最低的规则适用 USoundBase 对象(SoundCue,SoundWave 等)上的优先级数值。一旦干涉组达到了限制,系统将会在组内遍历所有激活的声音,并停止优先级最低的一个(或者如果要播放一个新声音的话,新声音优先级最低则不播放)。

停止最安静的规则正如所说,取代基于距离的规则(通常和体积相关),这条规则将会在组达到上限时停止最安静的一个,或者要播放新的声音时判断该声音为最安静则不播放。安静程度由声音在各个阶段计算后有最小的体积缩放值相乘得到。

将声音干涉对象应用于声音对象

要使用声音干涉对象,可以直接在声音或声音对象上指定它,和声音衰减设置对象的做法一样。下图中是一个 Sound Wave 资源的 细节面板。

image alt text

高亮处就可以通过下拉框来选定要引用的声音干涉对象资源。

覆盖声音干涉

为了向前兼容性,也为了有人更喜欢旧的系统表现,可以选择使用资源的本地数据来覆盖干涉设置对象。在这个情况下,声音资源变成他自己的干涉组,便能实现原先的效果。旧的项目在转换成 4.11 后将会对已有的资源采取使用这种方式保存。

更新:基于标记的动画同步

image alt text

动画现在能够根据动画数据中的 标记 来完成 同步。在以前的版本中,唯一同步两个动画的方式是基于时间。现在可以在数据上点击右键并添加一个通知,选择添加通知 -> 添加同步标记。

在初始的版本中这个功能如下描述:

更新:动画蒙太奇的曲线混合

蒙太奇 现在能支持 曲线的混合。混合的 In 和 Out 用于控制播放时混合的形态。要注意这里如果有额外的蒙太奇在播放,它的 Blend In 设置将会被使用。

image alt text

更新:HLOD 大纲视图

新的 HLOD 大纲视图 能够可视化的组合模型并对 HLOD 的设置编辑修改。

image alt text

材质生成

材质的合并过程现在能够支持更多的材质属性,比如基于顶点的颜色,顶点位置和顶点法线。这意味着该技术比如世界空间贴图,雪地效果和表面法线,以及使用顶点颜色遮罩材质层现在都能在 HLOD 上正确工作。

仍然有一些特性并不支持,比如像素法线,世界坐标到切线转换。在 HLOD 遇到这种情况,或者其他尚不支持的情况是,应该使用另一种材质或者简化材质。这个 Material Proxy Replace 节点可以派上用处。它的功能和 Lightmass Replace 很像。实时的输入用于实时状态,Material Proxy 的输入仅用于生成过程。

材质合并过程的设置现在可以在 HLOD 的大纲视图**面板中找到,还有一个 世界设置面板**。

代理模型生成

代理模型生成过程已经被精简了,并整合了最新的 Simplygon SDK,可以在 HLOD 的大纲视图中找到模型生成过程的设置。

其他改进:

HLOD 现在支持 Spline 类型的模型。

更新:复杂文本渲染(实验性)

我们正在为 Slate 添加对 从右向左 的文字和 双向文本 的支持,包括支持复杂形状的文字(比如阿拉伯文)。

image alt text

这个功能仍然处于非常早期。虽然很多地方还比较简陋,但我们鼓励大家尝试一下并给我们反馈。

已知问题:

更新:蓝图高级搜索

蓝图的搜索功能又更新了,支持更高级的搜索功能(获得更多的预期结果)

image alt text

更新:VR 头戴显示摄像机改善

为头戴显示设备做的摄像机系统做了改进,丰富了功能并且更加好用。我们将当前激活的摄像机组件在引擎中做了一定的偏移来适配真实世界中头戴显示设备的偏移。这么做能让大家能够更加容易的计算 VR 头戴设备在世界中的位置,可以直接附属其他模型也更为准确。并简化大家 VR 游戏的控制计算。

另外,任何附加到 Camera 组件的东西都会被“延迟更新”,这意味着它们会应用更新最及时的位置数据用于渲染,减少延迟。附加到 Camera 的模型、特效和面片都会被锁定,并和头显使用一样的方式在每帧中更新。

查阅 这个文档 来了解如何将现有项目迁移到新的系统!

更新:VR 立体层

立体层能够提供绘制一个带贴图的四边形在世界中的任意位置,并作为一个单独的层直接置于 VR 合成画面中。通过这个功能能够让 UI 的制作变得更加刻度,减少扭曲。目前这个功能仅在 Oculus Rift 头显上实现,但预期很快就会在其他平台也整合。

更新:SEQUENCER 的主要进展(实验性)

Sequencer 是我们最新的非线性场景动画系统。Sequencer 目前仍然在重度开发阶段,我们暂时并不建议生产项目直接使用它。但我们欢迎大家来尝试并给我们提供反馈!我们希望在接下来 UE4 的版本中听取各种 Sequencer 的反馈。

4.11 中 Sequencer 的主要特性:

可以在插件面板中启用 “Level Sequence Editor” 插件,并重启编辑器,来激活并使用 Sequencer 功能。

版本信息明细

AI

Behavior Tree

Animation

image alt text

image alt text

image alt text

Audio

Automation

Blueprints

Core

Editor and Tools

Content Browser

Landscape

Material Editor

Matinee

Cascade

Persona

Static Mesh Editor

Source Control

World Browser

Foliage

Cooker

Gameplay Framework

Learning Resources

Sample Content

Localization

Networking

Online

Other

image alt text

A view is specified in your DefaultEngine.ini by creating a new section and use that section name as the budget name.

[MainPlayerHero]

+Stats=STAT_AnimGameThreadTime

+Stats=-STAT_BlueprintUpdateAnimation

+Stats=-STAT_Montage_Advance

+Stats=STAT_PerformAnimEvaluation_WorkerThread

+Stats=STAT_ClothTotalTime

+Stats=FPhysXClothTask

GameThread=0.25

MergedTaskGraphThreads=1.0

A "-" in front of the stat indicates that this stat should not be counted for the running total since a parent stat is already accounting for the time.

To bring up this view simply use budget

You can also filter stat and budget groups by root strings. For example, "stat anim -root=MainPlayerHero" will show the stats that you'd expect from “stat anim” but will filter by UObjects that have “MainPlayerHero” as a substring of their name. This is not limited to UObjects as it's simply looking at parent stats with that substring in their name.

Stats are automatically broken into the threads they execute on and can appear in multiple threads if that is the case.

Paper2D

Physics

Platforms

Android

iOS

Linux

Mac

Playstation 4

Xbox One

VR

HTML5

Windows

All Mobile

Programming

Rendering

FX

Lighting

Materials

Postprocessing

Optimizations

Mobile Rendering

UI

Slate

UMG

Programming Release Notes

AI

Debugging Tools

Animation

Automation

Blueprints

Core

Editor and Tools

Content Browser

Gameplay Framework

Localization

Networking

Online

Other

Paper2D

Physics

Platforms

Android
Mac
Playstation 4
HTML5
Windows

Programming

Rendering

FX
Optimizations

UI

Slate

Upgrade Notes

Animation

USTRUCT()

struct FExampleAnimInstanceProxy : public FAnimInstanceProxy

GENERATED_BODY()

FExampleAnimInstanceProxy()

: FAnimInstanceProxy()

{}

FExampleAnimInstanceProxy(UAnimInstance* Instance);

virtual void Update(float DeltaSeconds) override

{

    // Update internal variables

    MovementAngle += 1.0f * DeltaSeconds;

    HorizontalSpeed = FMath::Max(0.0f, HorizontalSpeed - DeltaSeconds);

}

public:

UPROPERTY(Transient, BlueprintReadWrite, EditAnywhere, Category = "Example")

float MovementAngle;

UPROPERTY(Transient, BlueprintReadWrite, EditAnywhere, Category = "Example")

float HorizontalSpeed;

UCLASS(Transient, Blueprintable)

class UExampleAnimInstance : public UAnimInstance

GENERATED_UCLASS_BODY()

private:

// The AllowPrivateAccess meta flag will allow this to be exposed to Blueprint,

// but only to graphs internal to this class.

UPROPERTY(Transient, BlueprintReadOnly, Category = "Example", meta = (AllowPrivateAccess = "true"))

FExampleAnimInstanceProxy Proxy;

virtual FAnimInstanceProxy* CreateAnimInstanceProxy() override

{

    // override this to just return the proxy on this instance

    return &Proxy;

}

virtual void DestroyAnimInstanceProxy(FAnimInstanceProxy* InProxy) override

{

}

friend struct FExampleAnimInstanceProxy;

Automation

Blueprints

Core

Editor and Tools

Gameplay Framework

Localization

Networking

Online

Other

Physics

Platforms

Playstation 4

Xbox One

Programming

Rendering

Lighting

Postprocessing

Optimizations

UI

Slate

C++ API Changes