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> [新资源的路径]

  • 要停止录制,输入:StopRecordingAnimation <actor id or all>

  • 如果没有输入路径,或者输入了无效路径,会得到一个弹窗提示。可以使用世界大纲视图列表去查找感兴趣的对象(鼠标悬浮在对象上便能查看它的“ID Name”)。

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

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

image alt text

更新:平台和 SDK 的更新

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

image alt text

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

  • Oculus Rift 1.3.0 SDK 很快会整合到虚幻引擎的 4.11.1 中。(4.11.0 中现在是 Oculus Rift SDK 0.8.0)。

  • Oculus Mobile SDK 1.01

  • Playstation VR SDK 3

  • SteamVR 0.9.12

  • PS4 SDK 3.008.201 (w/ PSVR)

  • Xbox One XDK November QFE 1

  • HTML5 SDK (Emscripten) 1.35.0

  • Linux Clang 3.7.0

  • Apple tvOS 9.0 support (GitHub only)

更新:为 DirectX 12 的改善

image alt text

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

为 XBOX ONE 准备的 DirectX 12

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

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

  • 在 BaseEngine.ini 的 XboxOneRuntimeSettings 区块下中将 bBuildForD3D12 设置为 true

  • 在 XboxOneShaderCompiler.cpp 将 D3D12_ROOT_SIGNATURE 设置为 1

  • 在 PostProcessSelectionOutline.usf 内注释掉 GetSamplePosition (XboxOne 上尚不支持)

  • 重新生成并开启!

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

更新:在 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

  • 基于顶点的光照模式只是用着色器指令的一半,并使用贴图查找。

  • "Volumetric PerVertex NonDirectional" 这一设置非常的快速 —— 几乎和无光照材质一样快!

  • 我们建议尽可能多的使用顶点半透明光照材质,一个例外是对具有较大的三角面模型来说避免使用,因为光照会在每个三角形之内插值。

更新:光照通道

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

image alt text

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

image alt text

  • 这个功能对过场动画十分有用!举个例子,如果希望要一个光源照亮角色,但又不希望它影响周边的环境。

  • 光照通道的影响是动态应用的 —— 这就是说,静态光源无法使用。只能用于固定光源和动态光源。同时,光照通道仅对不透明表面的直接光照产生效果。

  • 光照通道仅在用的时候,基于灯光的数量,需要 GPU 上一点开销。

更新:立体声空间感

现在在 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

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

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

  • 只有在同一个 SyncGroup 中的动画才会同步。有领头的驱动跟随的。

  • 无法调节播放速率。播放速率为主动画的速率。

  • 只有组内通用的标记才会被同步。比如,一个动画如果没有 “Right Foot Down” 的标记,那么其他动画上的这个标记也会被同步计算所忽略。

  • 位置同步是基于领头的相对位置。比如,如果领头动画距离他的 Left 和 Right Foot 标记还有 25% 的距离,那么其他动画也会同步到距离它们各自这标记 25% 的位置。

  • 当动画在一个同步组中有足够的匹配标记时,基于标记的同步会自动启用。否则则是原有的缩放长度同步的方式。

  • 蒙太奇也支持基于标记的同步,因此可以无缝的转换会其他动画。可以在蒙太奇中看到同步组的设置。

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

蒙太奇 现在能支持曲线的混合。混合的 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

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

已知问题:

  • 单行可编辑文本区块目前不支持复杂文字(只有多行输入框和静态简单/富文本框支持)

  • 目前没有对 Text Actor 和 Canvas 的支持。

  • 复杂文字的渲染目前只能在 Windows,Mac 和 PS4 的版本上实现。

更新:蓝图高级搜索

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

image alt text

  • 可以在搜索是定义特定元素,比如节点、针脚、图、函数、宏、变量、属性、组件等。完整文档见这里:https://docs.unrealengine.com/latest/INT/Engine/Blueprints/Search/index.html

  • 支持 And (&&) 和 Or (||) 逻辑操作符,以及名称/数值匹配的方式(语法是:Tag=Value)

  • 变量的“查找引用”选项现在功能做了改进,查找更为准确。

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

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

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

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

更新:VR 立体层

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

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

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

4.11 中 Sequencer 的主要特性:

  • 新的轨道:Shot/Director,播放速度,缓慢,淡出,材质,粒子参数等轨道。

  • 改进电影渲染,支持 .EXR 渲染

  • 改进关键帧行为,复制粘帖关键帧,从 matinee 中拷贝,关键帧路径 3D 显示

  • 主 Sequence 工作流,能够在一个较大的 Sequcne 中设置子场景。

  • 支持“可生成”物体(存在于过场动画素材中的对象)

  • UI 改进:轨道颜色区分,关键帧形状、颜色功能,轨道过滤

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

Release Notes(版本信息) 以下为详细内容展开细节及缺陷修复清单。

AI

  • New: A new EQS scoring function, Square Root, has been added.

  • New: A simple "Current Location" EQS generator has been added to support reasoning about AI's current location.

  • New: Added an EQS test for geometry overlaps.

  • New: Added Blackboard Keys support to EQS' NamedParams.

  • New: EQS tests can now be configured to normalize results against declared ideal value rather than max value.

  • New: Made EnvQuery a blueprint type, which enables storing EQS templates in blueprint classes and AI blackboards.

  • New: Added a silent auto-conversion of Controllers to Pawns when calling blueprint RunEQS function.

    • This is usually the desired behavior. But it can be disabled with AISystem.AllowControllersAsEQSQuerier flag in Project Settings

  • New: The way EQS test scoring gets previewed in EQS editor has been improved towards higher display resolution as well as flexibility for future expansion

  • New: AI debug display for several subsystems has been improved by disabling their scene outline drawing in the editor.

  • New: Added a feature to the BT MoveTo task enabling it to observe and react to changes to an indicated blackboard entry storing move goal location or actor.

  • New: Added ability to specify the number of points generated by the OnCircle generator.

  • New: Added time slicing, logging and additional profiling stats to AISense_Sight to help debug and manage performance cost for AI on servers.

    • Exposed new parameters MaxTimeSlicePerTick (in seconds) and MinQueriesPerTimeSliceCheck AI Perception values.

  • New: Pathfollowing parameters responsible for path's mid-points reachability acceptance have been exposed for configuration via AISystem settings.

  • New: Stopping AIController's logic during pawn's unpossess event has been made optional. Use AIController's StopAILogicOnUnposses property to control this mechanism.

  • Bugfix: The blackboard editor no longer crashes when adding new keys while having a search filter applied to keys list.

  • Bugfix: A crash in garbage collection related to a bug in EQS query template caching in certain use cases has been fixed.

  • Bugfix: Fixed a crash in EQS where wrappers could be garbage-collected during queries.

  • Bugfix: Blueprint-implemented EQS generators no longer crash when trying to add a generated value of a wrong type (vector/actor mismatch).

  • Bugfix: A bug in EQS resulting in FEnvQueryInstance's result never getting set to "failed" has been fixed.

  • Bugfix: AIPerceptionSystem.UnregisterSource no longer crashes when perception agents being unregistered don't use all of the defined senses.

  • Bugfix: The AI perception system will no longer allow AIs to bypass visibility-cone checks.

  • Bugfix: AIController.MoveTo will no longer ignore its navigation data's default querying extent.

  • Bugfix: AIController's pawn possession no longer overrides cached GameplayTasksComponent references, which could break AI's gameplay tasks usage.

  • Bugfix: Blueprint interface functions to PawnActions have been fixed to return apropriate values.

  • Bugfix: Fixed AI stimuli never expiring, which resulted in AI never forgetting perceived actors.

  • Bugfix: BTService_BlueprintBase will now correctly trigger "deactivation" events that are implemented in derived blueprint classes, but not the base class.

  • A safety feature has been added to AI's possession logic. AIControllers will no longer try to possess soon-to-be-destroyed pawns.

  • EQS Query instances that run longer than expected will output once to the log, and then once more when the query finishes. The previous behavior was to log repeatedly until the query finished.

  • EQSTestingPawn's ticking has been disabled in game worlds. This can be re-enabled with the bTickDuringGame property.

Behavior Tree

  • New: BTService_RunEQS, a new BT service for regular EQS query execution, has been added.

  • New: Added new property to all EnvQueryTests: TestComment. This property is a simple, optional string used to label the purpose for a test. For now, it only shows up in the details view, but it is still useful for helping to document the reasons for tests, especially when using more than one of the same type.

  • New: Expanded the RunEQSQuery BT task so that users can configure it to use a query template indicated by a key in blackboard.

  • Changed the color of root level decorator nodes in the behavior tree editor to distinguish them from regular decorators.

  • Bugfix: Stopping behavior tree with instantly aborting parallel tasks no longer crashes.

  • Bugfix: Handled an edge case in BT's parallel tasks removal that could result in not cleanly finishing all of tasks, and potentially hanging.

  • Bugfix: Behavior tree focus service reacts to blackboard changes appropriately.

  • Bugfix: Behavior tree's blackboard filters work correctly when a single object uses multiple configurable filters of the same class.

  • Bugfix: BTDecorator_Blackboard now handles user-requested condition inversion properly.

  • Bugfix: Fixed behavior tree decorators not observing in LowerPriority mode when search flow enters and leaves their branch without finding a task to run.

  • Bugfix: Prevented behavior trees from starting new task execution just to be abandoned in next tick due to decorators firing between abort and execute calls.

  • Bugfix: Fixed cleanup of active blueprint actions for blueprint based behavior tree tasks.

  • Bugfix: Fixed missing Tick event in aborting behavior tree tasks from an abandoned subtree.

  • Bugfix: Copy and paste operations in behavior tree's composite decorators subgraphs now work properly.

  • Bugfix: Fixed node memory allocations for injected behavior tree decorators.

  • Bugfix: RotateToFaceBBEntry no longer gets stuck when passed a blackboard key with FRotator value.

  • Bugfix: Fixed order of behavior tree graph nodes when a node is being moved.

  • Bugfix: GameplayDebugger's default settings are now applied properly.

  • Bugfix: Triangulation errors in some convex polygons recorded by visual logger have been fixed.

Navigation

  • New: CompositeNavModifiers have been expanded to support use of convex and sphere physics shapes.

  • New: Enabled custom export of navigable geometry for foliage with InstancedStaticMesh type.

  • Bugfix: Streaming out of a level containing a RecastNavMesh instance no longer crashes the engine.

  • Bugfix: A bug in editor-time navigation system, resulting in removing all the saved data in static navmesh on map load, has been fixed.

  • Bugfix: A memory leak in Recast's heightfield layers building has been fixed.

  • Bugfix: Navigation bounds gathering no longer produces unexpected results while streaming levels with certain streaming setups.

  • Bugfix: NavLinkProxy no longer marks instances containing only smart links as navigation-irrelevant.

  • Bugfix: A missing NavigationSystem notification has been added to let it know about editor-time changes to ActorComponent.CanEverAffectNavigation property. This fixes situations where toggling this flag wouldn't result in rebuilding navmesh.

  • Bugfix: Added a safety feature to address navmesh generation related crashes when BP-implemented actors get their construction script re-run just after navmesh generation finishes.

  • Bugfix: "Navmesh build in progress" editor notifier no longer hangs indefinitely if it's created just after navmesh has finished building.

  • Bugfix: Crowd simulation works properly with auto-possessed pawns placed in a level.

  • Bugfix: Collision data for navigation built from mirrored PxConvexMesh now exports correctly.

  • Bugfix: Fixed geometry projection for navmesh walking mode when a pawn moves far away from the geometry on the Z axis.

  • Bugfix: Corrected HitNormal values reported by navmesh raycasts.

  • Bugfix: Fixed the influence of navmesh edges on crowd simulation near the ends of paths.

  • Bugfix: Navigation export of destructible mesh without collisions enabled now works as expected.

  • Bugfix: Fixed navigation export of NavRelevantComponent attached to an actor not affecting navmesh generation.

  • Bugfix: Navmesh tiles are no longer drawn in red, or not drawn at all, after navmesh generation finishes.

  • Bugfix: Reuse of navigation paths now updates all flags appropriately.

  • Bugfix: Corrected scoring of navmesh boundary segments in detour's crowd simulation.

  • Bugfix: Fixed UNavRelevantComponent not being included in navmesh generation when it's not attached to actor with collision component.

  • Navmesh raycast will use nearest poly containing ray origin instead of just closest one.

  • Added Z check to detour's crowd avoidance segment gathering.

  • RVO avoidance now takes the height of agents into account when culling obstacles.

Animation

  • New: Level-of-Detail Threshold for Animation Graphs

    • Many animation graph nodes now have an LOD Threshold option for performance optimization:

      • Apply Additive

      • Apply Mesh Additive

      • Aim Offset

      • All Skeletal Control nodes

    • Whenever the Skeletal Mesh instance drops below this LOD, the node will not execute.

image alt text

  • New: Per-Animation Compression Settings

    • You can now set animation compression on a per-animation basis.

image alt text

  • Choosing Automatic and then pressing Apply will cause the engine to determine the best setting (based on error metrics) and set that for you.

  • New: Added "Delete All" option to anim curve panel.

  • New: Added a new property called "Min Time Between Ticks" to particle systems. This can be used to force a lower tick rate on a particle system by specifying the minimum number of milliseconds between ticks.

  • New: Added a new role for sync group members: TransitionLeader. It is excluded from the group while it blends in. Once it reaches full weight it becomes leader until it is fully blended out again.

  • New: Added AssetRegistrySearchable tag to AnimSequence's EnableRootMotion property so that it shows in the content browser.

  • New: Added blend profiles to skeleton assets, which allow per-bone multipliers when using blend per bone or other blending nodes.

    • These are accessible from the skeleton tree pane in Persona.

image alt text

  • New: Added DrawCanvas and viewport string support to skeletal controls to enable them to output debug information to the viewport.

    • This feature can be enabled using the Show -> Display -> Skeletal Controls option in Persona's viewport,

  • New: Added a flag to animation evaluator nodes so users can set whether they should loop when being ticked.

    • With the addition of Marker Based sync, evaluator nodes now have the ability to be ticked like sequence players (by adding them to a sync group).

    • By default, the evaluator node's playing direction will be forward or backward based on whether the target time is earlier or later than the current time.

    • With the loop flag enabled the playing direction will be based on whichever direction will reach the target animation time more quickly. For example, going from 4.9 seconds to 0.1 seconds in a 5 second animation will play forward and loop instead of playing backward.

  • New: Added GetCurrentStateName as a blueprint-accessible function on animation instances.

  • New: Added a "Random Player" node for anim graphs. With this node, the user can play a selection of animations in a random order with certain randomized parameters. With Random Player, "Shuffle Mode" acts more like a randomized playlist, in that it will play everything on the list before repeating.

  • New: Added SetMinLOD and SetForcedLOD functions. These enable the user to restrict LODs for the a specific SkeletalMeshComponent.

    • For example, calling SetMinLOD with 1 will mean that the component will not use LOD 0, even if it gets close to the camera, but it can use LODs 1 and higher as it normally would.

    • Similarly, calling SetForcedLOD with 0 will force the component to use only LOD 0 all the time. This can be useful for ensuring that the local player's character is always at maximum quality.

    • If both functions are used, SetForcedLOD will override SetMinLOD.

  • New: Added support to tie update rate optimization directly to LOD level instead of selecting the amount based on screen size.

  • New: Added a "Start Position" to the player node. The Sequence Player and BlendSpace Player both contain the Start Position parameter, which will start the animation at the given position on the first time it plays.

  • New: Added support for space conversion in the copy-bone skeletal controller node.

  • New: Added support to PoseableMeshComponents for the MasterPoseComponent property.

  • New: Added the ability to remap to existing assets when retargeting in Persona.

    • Persona can also attempt to auto fill the correct assets if the source and destination assets use a similar naming scheme.

  • New: Allow users to change animation compression settings per animation in the detail panel.

    • Note that you'll have to click "Apply" to apply to the current compressed data. If not, data will not match the displayed compression setting.

    • Default compression settings are in Project/Animation.

    • An automatic setting exists. This may take a while, as it will try all possible configurations and compare results, but it will find the optimal compression settings.

  • New: Anim Montage now contains FAlphaBlend BlendIn/BlendOut option

    • Supports both preset and custom curve types.

  • New: Blend List node now supports Reset Child On Activation for reinitialization when reactivated.

  • New: Changed TrailRelaxation to Curve type, so that different relaxation values can be used on chains.

  • New: Offline animation retargeting supports rules for naming output animations.

    • Rules supported: Target folder, Prefix, Suffix, Replace.

  • New: Exposed SkeletalMesh property bDisableMorphTarget to blueprints. A new cvar, r.EnableMorphTargets, can be turned off to disable all morph targets.

  • New: FBX import now saves animation length property.

  • New: Persona Asset Browser displays folder path column.

    • Tooltip also displays folder path.

    • Sorting by path in the asset browser is supported.

  • Bugfix: Recompiling anim BPs that are dependencies of parent blueprints no longer causes a crash.

  • Bugfix: Fixed a crash that happened when something other than USkeletalMeshComponent had a MasterPoseComponent set.

  • Bugfix: Fixed a crash with retargeting additive blendspace animation assets.

  • Bugfix: Error is reported instead of crashing when compiling an animation blueprint that has a missing skeleton asset and contains a ModifyBone node.

  • Bugfix: Displaying the debug info of an AnimInstance object whose root node is null will no longer cause a crash.

  • Bugfix: Blendspace editor does not crash when the editor opens for the first time.

  • Bugfix: The random animation sequence player does not crash when there are no entries in the playlist.

  • Bugfix: Fixed a crash when default transition pins are set to true.

  • Bugfix: Reimporting a skeletal mesh that is currently open in Persona does not crash.

  • Bugfix: Fixed a crash with animation editing when the source data gets invalidated, possibly due to retargeting.

  • Bugfix: Fixed a crash with Blendspace having per bone set up when the interpolation value is 0.

  • Bugfix: Fixed a crash with invalid BlendSpace preview input coming when switching preview assets in Persona.

  • Bugfix: Prevented a crash in Persona while reimporting data.

  • Bugfix: Removed possible divide by zero in state machine transitions when using crossfade durations of zero.

  • Bugfix: Fixed assert on executing blueprint code during post load when an animation wants to spawn a "needs re-saving" message.

  • Bugfix: Fixed potential to call incorrect functions in derived anim blueprints, which could make derived anim blueprints function incorrectly.

  • Bugfix: Importing corrupted FBX files no longer crashes.

  • Bugfix: Fixed issue when importing curve values from FBX files with unwind rotation on.

  • Bugfix: When importing curves, the break tangent doesn't work, so now import curve defaults to auto.

  • Bugfix: Particle systems and other events triggered from anim notifies now work properly in the editor and at runtime.

  • Bugfix: Root Motion from Everything is no longer calculated incorrectly with animations that are part of a sync group.

  • Bugfix: Anim montage playback error correction is no longer incorrectly applied when the montage is stopped.

  • Bugfix: Anim instance native transitions no longer rely on state machine initialization to bind delegates.

  • Bugfix: Fixed animation blueprint relevancy nodes returning unexpected values when no relevancy can be determined.

  • Bugfix: Animation graph node properties that have underscores in their names now update appropriately.

  • Bugfix: Blueprint set morph target curves are now being set from master components to slaves.

  • Bugfix: Cloth and skeletal meshes no longer flicker or disappear at the edge of a viewport.

  • Bugfix: Memory is now reported correctly in GetResourceSize for UAnimSequence and USkeletalMesh assets.

  • Bugfix: Removed a one-frame delay when applying animation curve data.

  • Bugfix: A memory leak related to montages during shutdown has been fixed.

  • Bugfix: Negative curve values now work with montages.

  • Bugfix: Fixed issues with montage instances and slot nodes getting inconsistent weight data, causing animations to evaluate in different states.

  • Removed thread-unsafe access to LastRenderTime in animation system.

  • Improved duplicate slot node warning to make it easier to find malformed assets in larger projects.

  • Prevented invalid ranges being entered into FBX import data.

  • Optimized SafeSetCSBoneTransforms used by skeletal controllers after they have submitted their transforms.

    • Removed double iteration over the pose.

    • Removed iteration over the entire pose (we can start at the first bone in the transform list).

    • Removed bone masks and instead collect interesting nodes to perform conversion on.

    • Removed unnecessary conversions.

  • The anim blueprint compiler can now access member variables directly instead of thunking to the VM.

  • OSX version of the Maya rigging tools are now included in the launcher distribution.

  • Some animation nodes have moved to AnimGraphRuntime module.

  • Added a few support functions to UAnimInstance to make querying asset player states easier. Also added more montage stats to UAnimInstance.

  • Added NativeUninitializeAnimation override point to UAnimInstance.

  • Animation Compression: "Automatic" animation compression settings now default to the settings specified in Project Settings: Animation: Compression.

  • Reduced memory churn by removing many unnecessary allocations in various animation update and evaluate methods.

  • Sub-state machines can now work properly with native bindings. Previously, only sub-state machines in entry states worked correctly.

Audio

  • New: Improved Gameplay Statics sound API.

    • New Spawn at Location functions return an Audio Component that allows manipulation of the played sound similar to the Attached version.

    • Play at Location still does not return the audio component and should be used for one-shot sounds.

    • Rotation added to Location and Attached API to allow facing to be specified to work properly with non-spherical attenuation shapes.

    • Play Attached renamed to Spawn Attached.

    • Sound and Dialogue APIs are now consistent.

  • New: Added ability to set a global pitch scale for every non-UI sound in the game via a new blueprint function.

  • New: Made audio component's applied sound attenuation settings accessible from blueprints.

  • New: Orphaned sounds due to a Sound Node Looping now output a warning to the log.

  • New: Sound attenuation boundaries match the attenuation curves at min/max.

  • New: Sound attenuation values match attenuation curves at min and max rather than assuming 1.0 or 0.0 respectively.

    • This allows for more unusual distance-based attenuation curves, such as donut-shaped curves, or curves that cause audio to be loud far away but quiet nearby.

  • New: Support for playing sounds with audio component properties without needing an audio component as long as the sound's properties do not change.

  • New: XAudio2 voices for PC/XBoxOne platforms are pooled and reused.

  • New: Volume-weight voice prioritization sorting for active voices.

    • This allows for sounds with zero volume, but high priority, to be stopped by lower priority, but audible, sounds.

    • Bugfix: This feature includes a fix for when sounds go out of range (attenuation reaches zero) and then come back in range while still active. If not stopped in between, the sound won't automatically restart from the beginning.

  • Bugfix: Fixed a probable crash that could have happened if 9 reverbs became activated at once.

  • Bugfix: Concatenator sound cue nodes will now wait for all sounds to finish in child mixer nodes before playing next sound in sequence.

  • Bugfix: On PC/XBoxOne, an audio skip in sounds past a certain length have been removed.

  • Bugfix: On Mac, splitting and merging audio streams when using reverb, EQ, or radio effects no longer causes volume levels to to change.

    • Added low-pass filter for voice audio units to closer match PC audio.

  • Bugfix: Play In Editor Sound Quality Level is now being used correctly for Sound Quality nodes in Sound Cues when playing in editor.

  • Bugfix: A rare case where a sound would not be played because an async load request had been made too recently has been fixed.

  • Bugfix: Core Audio API no longer crashes on Mac when the number of active sounds exceeded the number of available audio units.

  • Updated OVR Audio SDK.

Automation

  • New: Added config entries to determine which platforms and configurations are available in an installed build

    • Also specifies whether platforms are available for code or content projects only

  • New: Added -FastPDB commandline parameter for UnrealBuildTool, so that we can make use of the /DEBUG:FASTLINK option in Visual Studio 2015

    • Used by default in Visual Studio Projects and Hot Reload, with a Build Configuration override if you don't want to use it

  • New: Adding option to mark the output of a module as publicly distributable if the module source code is not

  • New: Improved methods of identifying installed builds

  • New: Improved methods of identifying installed builds

  • New: Refactored automated test flags

    • Added Disabled flag to disable tests without commenting-out or deleting code.

    • Replaced Smoke Test button in Automation Front End with a Filters dropdown.

    • Test configurations do not compile out Automation features (except in Shipping mode).

    • Automation tests can be triggered from in-game console in non-editor builds (automation controller is enabled).

  • Added Third Party binaries folder to Build Plugin command

  • Changed BuildDerivedDataCacheNode to use target receipts to add runtime dependencies.

  • Deprecating -rocket command line argument as it is no longer needed to identify installed builds

  • Bugfix: Fixed a bug that could cause a crash when running automation tests from the commandline.

  • Bugfix: Fixed issue with Packaging DLC on Mac

  • Bugfix: Use runtime dependencies from module files to determine what needs to be included in released builds

Blueprints

  • New: Blueprint "Development Only" Functions

    • Native C++ functions marked BlueprintCallable can now also be optionally marked as DevelopmentOnly. This new metadata allows calls to those functions to be disabled (compiled out) of all Blueprint function graphs in cooked/packaged builds without breaking the execution flow.  image alt text

  • The PrintString and PrintText system library functions have now been marked DevelopmentOnly by default. This allows for a quick removal of Blueprint logging in the final build product.

  • To get packaged/cooked Blueprints to compile without the "DevelopmentOnly“ nodes, disable the “Compile Blueprints in Development Mode" option found in the project's Cooker settings (this option is on by default to preserve functionality).

  • New: Condensed Blueprint Struct Nodes

    • We've improved and refined usability for structs that contain toggle values that are conceptually linked to other property "settings" in the same struct (like how our PostProcessSettings struct operates).  image alt text

  • Different override/enabled states are now managed through a toggle or dropdown widget that is exposed along with the setting on "Make Struct" and “Set Member” nodes.

  • To associate a toggle variable with another property, use the "EditCondition" metadata like is pictured above.

  • We've adopted this workflow for our PostProcessSetting nodes, which have proven to be unwieldy and confusing without it.

  • New: Added advanced searching syntax to Find-in-Blueprints.

  • New: Added experimental option to use the Blueprint Diff Tool with Animation Blueprints and Widget Blueprints.

  • New: Added facilities for specifying override vertex colors for meshes via Blueprints: PaintVerticesSingleColor and PaintVerticesLerpAlongAxis.

    • PaintVerticesSingleColor sets all mesh vertices to the specified color.

    • PaintVerticesLerpAlongAxis allows you to specify a linear blend along a mesh axis from one color to another.

  • New: Added Min and Max nodes for byte variables.

  • New: Added CopyPoseFromSkeletalMesh node, which takes a snapshot of a skeletal mesh pose and applies it to another skeletal mesh component.

  • New: Added support to AsyncTask nodes so that their corresponding functions can return null.

  • New: Added the ability to mark BlueprintCallable functions as development only.

    • By default, these nodes will be compiled out of Blueprint class function graphs at cook/package time, potentially improving runtime performance.

    • The "Print String" and "Print Text" functions are now marked as development-only, and will not be executed at runtime in cooked builds by default.

  • New: Added asset registry tags "NativeComponents" and "BlueprintComponents" to store the number of native and blueprint components, respectively. These counts can be used to identify targets for optimization.

  • Blueprint context menu performance improved.

  • By default, Buildmachines will no longer ignore compile on load errors for Blueprints.

  • Users can no longer edit Actor default values on properties in User Defined Structs or in CDOs that have structs with Actor properties.

  • New: Users can now delete function graph overrides that used to be interface implementations.

  • Bugfix: Crash fix when undoing add/remove operations on default instanced subobjects in a Blueprint.

  • Blueprint division nodes now show the callstack if a divide by zero is attempted.

  • During undo/redo, when deleted Blueprint instances are restored to the scene, they will be reinstanced using the newest version of their BlueprintGeneratedClass.

  • New: GetPathName node created. This node returns the full path name of a UObject.

  • New: Exposed many scalability settings to Blueprints via UGameUserSettings, making it easy to build a settings screen entirely in UMG.

  • New: The Blueprint Profiler is now available as an experimental feature to help identify costly operations in blueprints and guide optimization.

    • Enable the Blueprint performance analysis tools option in editor preferences under General - Experimental in the Blueprints section.

    • Analysis is currently enabled on a per-blueprint basis in PIE only.

    • To profile a blueprint, enable the profiler option in the blueprint editor and recompile the blueprint to add instrumentation. Then enter PIE and the editor will display the blueprint profiler tab and display timing data.

    • Work is ongoing in this area and the feature is not expected to be fully complete in this release.

  • New: Vector2D now has equal and not equal functions, just like Vector3D.

  • When adding new variables to user defined structures, the variable type will be the same as the last set type.

  • Bugfix: When converting a selection of components into a Blueprint, CDO values will no longer be lost.

  • Bugfix: "Convert Selected Components to Blueprint Class" no longer generates new components when used repeatedly.

  • Bugfix: Find-in-Blueprints will correctly check-out all out-of-date Blueprints if Index All With Source Control is selected.

  • Bugfix: When modifying default values on inherited Blueprint variables, the default values in the parent Blueprint will not be affected.

  • Bugfix: "Add Component" node adds components with exposed variables to the correct target actor (previously always went to "self").

  • "Color" name is no longer restricted.

  • Bugfix: "Convert selected actor to blueprint class" and "Convert selected components into blueprint class" actions can no longer be used to convert types that aren't blueprintable.

  • Added "focus" keyword to "AIController::SetFocalPoint".

  • Bugfix: Adding a WeakObjectPtr to an array of object references in a Blueprint now works correctly.

  • Bugfix: Assigning an interface property that is exposed on spawn using the Spawn Actor of Class node will no longer error.

  • Bugfix: Async Task nodes and Load Asset nodes no longer change superficially each time they are cooked

  • Bugfix: Attempting to follow a Blueprint compile error message to a node that has been delete no longer crashes

  • Blueprint Options and Class Options details view will correctly display in non-English languages.

  • Bugfix: Blueprint VM no longer crashes when encountering a type mismatch, throws an exception instead.

  • Bugfix: Blueprints duplicated for PIE will no longer register as dependencies to other Blueprint.

  • Bugfix: Blueprints with events in them no longer indicate they are different when compared against themselves using the Blueprint Diff Tool.

  • Bugfix: Can no longer add reroute nodes to read-only graphs such as math expression graphs.

  • Bugfix: Can no longer change the "Parent Socket" member of an inherited component.

  • Can no longer reparent level Blueprints to other level Blueprints, though native classes are still an option.

  • Changed an ensure to an error when attempting to generate literals for unsupported properties in Blueprints.

  • Bugfix: Child components in a Blueprint Class asset attached to a default scene root will no longer be lost after reparenting to a Blueprint Class that also has a default scene root.

  • Bugfix: Copy and pasting local variable nodes for functions into collapsed graphs will no longer invalidate the node.

  • Bugfix: Crash fix for prompting user to check out Blueprint during the compilation stage.

  • Bugfix: Crash fix in Find-in-Blueprints after switching languages and searching.

  • Bugfix: Crash fix when AIController possesses a Pawn during Pawn's Unpossess event while exiting PIE.

  • Bugfix: Crash fix when attempting to override Timeline event nodes in a child Blueprint.

  • Bugfix: Crash fix when hiding the "CameraSettings" category on custom Camera Component classes.

  • Bugfix: Crash fix when pasting an event node is undone/redone.

  • Bugfix: Crash fix when doing a "Find Reference" on local variables without any placed nodes for the variable.

  • Bugfix: Crash fix when creating a local variable from an orphaned node inside a collapsed graph.

  • Bugfix: Custom event nodes bound to delegate signatures that include 'const&' and/or TArray input parameters will no longer emit a compiler note/warning.

  • Bugfix: Delay nodes can now be used in GameInstance's Initialize function. Previously they would only work in PIE.

  • Bugfix: Dependencies that arise due to Blueprint Macros are now correctly detected so that bytecode can be regenerated when needed - fixes one cause of TRASHCLASS appearing in bytecode.

  • Bugfix: Diffing Blueprints with deleted component assets will no longer cause an assert.

  • Bugfix: Warnings about missing parent functions no longer appear if the child function is invalid as a result of compile-on-load.

  • Bugfix: Dragging and dropping to create pins on function Return nodes when there are multiple of them will correctly update all Return nodes.

  • Bugfix: Dynamic Component delegate bindings to self are no longer exported on copy/paste & ALT-drag. This corrects the side effect of a copied Actor instance also affecting the original.

  • Bugfix: Find-in-Blueprints no longer requires the Asset Registry to initialize.

  • Bugfix: Crash fix when editing an instanced variable nested within another instanced variable.

  • Bugfix: Crash fix deleting graphs or delegates while a "Create Event" node's graph is in the transaction buffer.

  • Bugfix: Crash fix when a Blueprint's skeleton class is null.

  • Bugfix: Fixed a Blueprint breaking bug where invalid "PLACEHOLDER" classes would replace Blueprint class references.

  • Bugfix: Crash fix in Blueprint Editor after removing a previously-serialized root and/or parent component within the native scene component hierarchy of a native C++ parent class.

  • Bugfix: Crash fix in Blueprint Editor when a specific HideCategory (PrimaryTickProperty) was set on an Actor-based Blueprint Class.

  • Bugfix: Crash fix in Blueprint Editor when deleting a root scene component with 2 or more children followed by deleting a non-root child of the promoted child node.

  • Bugfix: Crash fix in Blueprint Graph editor after an undo of an unlinked user-defined pin removal action (e.g. removing an unlinked Function Input).

  • Bugfix: Fixed a Blueprint Graph editor issue that caused Add Component nodes not to be restored properly on an undo/redo after a deletion followed by a compile.

  • Bugfix: Fixed a bug in duplicated event nodes that could cause unrelated content to be referenced and loaded.

  • Bugfix: Fixed a bug in the array Shuffle method where the last entry wasn't as randomized as the other elements.

  • Bugfix: Crash bug during garbage collection for child Blueprints cyclically dependent on their parent.

  • Bugfix: Crash fix when applying instance changes to a Blueprint.

  • Bugfix: Crash fix while dragging off pins.

  • Bugfix: New components are now able to have the same name as a deleted component without having to compile after deleting the old component.

  • Bugfix: Copy, duplicate, and rename hotkeys wor correctly in the Blueprint viewport.

  • Bugfix: Fixed a bug that was resetting arbitrary defaults on Blueprint sub-classes.

  • Bugfix: ClassAssetIDs properly resolve circular dependencies.

  • Bugfix: Fixed a bug where special game specific event nodes could be removed on load (when they're associated with interface functions).

  • Bugfix: Fixed bugs with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load and inherited components would be trashed during compilation.

  • Bugfix: Crash fix on undo of an Actor-based Blueprint Class instance deletion if it followed a previous redo.

  • Bugfix: Crash fix when using the diff tool with a Blueprint that implements an interface.

  • Bugfix: Crash fix on save with an EditInline instanced object owned by an Actor component instance.

  • Bugfix: Crash fix when modifying a function signature after deleting a sub-class override for it.

  • Bugfix: Crash fix when passing a default BlueprintSessionResult object to the "Join Session" Blueprint node. Instead of crashing, the join will fail and execution will continue from the "On Failure" pin.

  • Bugfix: Crash fix when using the "Replace References" feature when deleting a Blueprint asset.

  • Bugfix: Crash fix in specific cyclic dependency cases involving an Actor and ActorComponent Blueprints.

  • Bugfix: Crash fix when removing a event/function param in a Blueprint that was associated with the set GameMode.

  • Bugfix: Crash fix when deleting a map while its level Blueprint is opened.

  • Bugfix: Crash fix after a hot reload of the compiled game project.

  • Bugfix: Fixed a potential infinite loop runtime crash when adjusting Actor rotation in a Blueprint function.

  • Bugfix: Crash fix in to component reconstruction in a Blueprint Class instance related to undo/redo operations.

  • Bugfix: Fixed an internal Blueprint compile error on expansion of a Macro Instance node with one or more unconnected Enum output pins.

  • Bugfix: Crash fix when force-deleting a non-Actor parent Blueprint Class asset in the Content Browser if a child Blueprint Class asset was also loaded.

  • Bugfix: Event Dispatchers do not become unmodifiable after reparenting the Blueprint.

  • Bugfix: Component property values on a Blueprint class instance in the current scene are no longer reset as a result of recompiling the Blueprint class.

  • Bugfix: Convert Selected Components to Blueprint Class no longer asserts inappropriately.

  • Bugfix: Fixed collision response options editing for instances of Skeletal Mesh components added to a Blueprint Class.

  • Bugfix: Sliders behave properly on Capsule Collision component shape properties in the Blueprint editor.

  • Bugfix: Find-in-Blueprint goes to an item after the user double-clicks on it when searching locally.

  • Bugfix: Fixed compile errors after creating a local function variable from a node that could not find its assigned property.

  • Bugfix: Crash fix from invalid macros resulting from deleting the source graph in MacroLibrary.

  • Bugfix: Crash fix on Blueprint load when a macro instance referenced a struct.

  • Bugfix: Crash fix when generating bytecode for circularly-dependent blueprints.

  • Bugfix: Crash fix when a Blueprint Enum name collides with a Details Customization Name. For example, "Color" is now a safe name to use for a Blueprint Enum.

  • Bugfix: Crash fix when a Blueprint is saved without valid default values.

  • Bugfix: Crash fix Fixed when attempting to open the Property Matrix for a Blueprint that is missing its parent.

  • Bugfix: Crash fix when indexing all Blueprints in the Find Results window.

  • Bugfix: Crash fix when making changes with multiple components selected in the blueprint editor.

  • Bugfix: Crash fix when using "Find References" on a struct operation node (Make, Break, Set Members).

  • Bugfix: Crash fix when modifying some properties in sub-struct variables inside user-defined structs.

  • Bugfix: Crash fix when using the target of an Interpolate Component To node is destroyed before the node finishes.

  • Bugfix: Crash fix when using the Editor to debug breakpoints in blueprints with a null MacroGraph. Now it calls Ensure and recovers gracefully.

  • Bugfix: Crash fix with duplicating Timeline nodes, which was causing the new Timeline's tracks to be misplaced.

  • Bugfix: Crash fix after reinstancing Component BPs in thumbnails.

  • Bugfix: Crash fix in editor when using hotkeys to create local variables in graphs that do not support locals.

  • Bugfix: Crash fix when applying instance changes to a struct array back to the blueprint using the IWCE interface.

  • Bugfix: Crash fix when using "Draw Debug Float History" and "Draw Debug Transform History" in Blueprints.

  • Bugfix: Crash fix while garbage collecting recompiled Blueprints.

  • Bugfix: Promoting function graphs from interfaces during interface removal no longer calls Ensure.

  • Bugfix: Fixed thread-unsafe code in the Blueprint VM by removing static/global data.

  • Bugfix: Fixed errors that would sometimes appear when reloading a level that referenced a sub-level.

  • Bugfix: Fixed issue with appearing to be able to select actors in the viewport using Level Blueprints loaded through the Find-in-Blueprint system.

  • Bugfix: Deleting macros in Macro Libraries and then using undo no longer causes external dependencies.

  • Bugfix: Fixed UI issues when clearing GameplayTagContainers.

  • Bugfix: Fixed issues that could occur if an existing Blueprint class default object or instance contained one or more invalid property values for native component subobjects on load.

  • Bugfix: Fixed issues with "Find References" on local variables located in function graphs with a space in the name.

  • Bugfix: Fixed issues with graph node bubbles rendering incorrectly when there is nothing in the top slot.

  • Bugfix: Fixed the inability to save a Blueprint Class asset after renaming another Blueprint Class asset on which it depends.

  • Bugfix: Fixed warnings that would sometimes appear when using level Blueprint communications.

  • Bugfix: Fixed an issue causing Find-in-all-Blueprints to not be able to load up Blueprints due to missing path.

  • Bugfix: ForEachEnum will now correctly iterate over all enum values.

  • Bugfix: Functions correctly inherit purity in Blueprints and will update to reflect the current purity state of the inherited function.

  • Bugfix: GameplayTag and GameplayTagContainer switches will now work in standalone and cooked builds.

  • Bugfix: Harvesting components into a new Blueprint will correctly mark the components as movable so they can properly attach to the root.

  • Bugfix: Macros leveraging wildcard parameters will no longer fail to expand during compile-on-load.

  • Bugfix: Moved error bar for variable nodes to the bottom instead of the top to prevent shifting of nodes when there are errors.

  • No longer possible to duplicate Blueprint graphs while in PIE.

  • Optimization for Find-in-Blueprints gathering of property data.

  • Per instance lighting and vertex coloring on static mesh components is now only applied after the user construction script when the actor is reconstructed.

  • Removed direct dependency on GameplayAbilities from GameplayDebugger to solve problems with its classes showing in blueprints editor as a result of the OS automatically loading the library.

  • Bugfix: Removing an interface and keeping the functions will correctly make the pins on the function available in the details panel.

  • Bugfix: Renaming a component and then adding a new component of the same type in the Blueprint editor will no longer result in broken defaults editing.

  • Bugfix: Renaming a component no longer renames all components of the same name in dependent Blueprints (inherited components are still updated as expected).

  • Bugfix: Resolved Blueprint compiler errors with duplicating Matinee Actors and adding controllers.

  • Bugfix: Right clicking on the graph instruction text for new Blueprints will no longer prevent the node context menu from appearing.

  • Bugfix: Setting default values of Text properties in the User Defined Struct or for Local Variable properties in Blueprints will correctly assign the value and preserve the value between instances of the editor.

  • Slight improvement to native Actor instance construction time.

  • Bugfix: Spawn Actor From Class nodes can no longer be placed in Blueprints that do not support a world context.

  • Suppressed import linker errors related to Blueprint Generated Classes.

  • Bugfix: Child actor construction scripts run appropriately when starting Play In Editor sessions.

  • Bugfix: Blueprint graphs don't lose focus after pressing debugging keys in the blueprint editor.

  • Bugfix: Validated Get nodes can now be used on local variables.

  • Bugfix: This fixes an issue with array nodes where the top input pin would be obscured by the comment bubble making it hard to wire up the nodes.

  • Bugfix: Undoing changes to a Blueprint Actor Class's component hierarchy when the Blueprint Editor is closed now works correctly.

  • Bugfix: Undoing changes to object reference properties in a Blueprint no longer causes "Graph is linked to private object(s) in an external package" errors.

  • Bugfix: User Defined Enums begin counting at 0, and will no longer increase by two's.

  • Bugfix: User defined structs with Blueprint class references in their defaults will no longer lose their defaults when loading.

  • Bugfix: User defined structs and Local Variables can have non-basic type arrays of size 1 without resetting size 0.

  • Bugfix: When promoting an orphaned variable node to a local variable, all orphaned variable nodes in the local scope will point at the new local variable as expected.

  • When using a pin connection to specify the class for "Spawn Actor From Class", the default value overrides from the node are assigned to the new actor when it is spawned.

  • WorldContext pins will no longer be visible when the editor starts up if a Blueprint is loaded during game module load (actor/object constructors).

  • Exposed the ESplineMeshAxis type to Blueprints.

  • Improved "Find References" for variable nodes to more directly search for references to the specific variable.

  • Improvements to the usability of PostProcessSettings structure in Blueprints.

  • Log statements coming from blueprints now include the blueprint's name. This can be disabled in [Kismet] in Engine.ini via bLogPrintStringSource.

  • Optimized performance of USimpleConstructionScript::GetAllNodes. This dramatically improves the performance of FindArchetype which is relied upon heavily when spawning a Blueprint defined Actor with components added in blueprints.

  • PinTypeSelector has improved usability with the sub-menu for object types.

  • Added a warning when a deprecated output from Break Struct node is used.

  • Toggling a function to pure will automatically remove all breakpoints from call sites.

Core

  • New: .ue4stats file will now have ".inprogress" extension for the duration of stats capture. This prevents accidental use of an incomplete file.

  • New: Added compile-time define support to filter out command line args on a per-game basis.

  • New: Added configurable threshold settings for fps/frame time displays.

    • t.TargetFrameTimeThreshold and t.UnacceptableFrameTimeThreshold set the thresholds (in ms, defaulting to 33.9 and 50.0, respectively).

    • Values below the target level are green, values above the unacceptable level are red, and the ones in between are yellow.

    • The bar for on-screen cycle counters is now based on t.TargetFrameTimeThreshold rather than a hardcoded 33.3 ms.

  • New: Added console command "LoadTimes.DumpReport" which provides a report of the exclusive load time of packages.

  • New: Added debug renderensure console command.

  • New: Added -DUMPALLWARNINGS command line param to force dump all warnings and errors after after executing commandlets.

  • New: Added -fullcrashdumpalways commandline option to force full crash minidumps.

  • New: Added garbage collection array pool leak checks.

  • New: Added LIKELY/UNLIKELY macros for static branch prediction hinting.

  • New: Added -MatchAutoStatCapture command line switch to save .ue4stats automatically during each match.

  • New: Added more log info when saving temporary shader files fails. Increased the number of attempts when moving a file fails.

  • New: Added new hitch detection CVars to make it easier to control how hitches are detected and reported

    • t.HitchFrameTimeThreshold is the definition of a hitchy frame (in ms), defaulting to 60 ms.

    • t.HitchDeadTimeWindow is the minimum time that must pass before we'll record a new hitch (in ms), defaulting to 200 ms.

    • t.HitchVersusNonHitchRatio is the minimum ratio between the last frame time and the current frame time to consider it a hitch, defaulting to 1.5 (e.g., if the last frame time was 50, the current frame must be at least 75 to be considered a hitch).

    • They can also be set in the [SystemSettings] section of DefaultEngine.ini for games that target something other than 30 fps.

    • Switched 'stat hitches' display to use the t.HitchFrameTimeThreshold value, and updated coloring to use the related coloring thresholds (at 25% of the hitch value) instead of using hardcoded yellow at 100 ms and red at 200 ms.

  • New: Added "stat startfile", “stat stopfile”, “stat hitches”, and “stat namedevents” to the console command autocomplete list.

  • New: Active class redirectors map is loaded from all config files, so plugins can define redirectors.

  • New: Asset Registry tags are now excluded from cooked builds. This reduces memory usage. Tags needed at runtime must be added to the CookedTagsWhitelist list in DefaultEngine.ini

  • New: Async loading priority has been given a typedef and made into a signed type.

  • New: Async: Added ability to register an optional callback function that is executed when a Future completes.

  • New: Console windows opened by the engine on Windows, such as for log output, will now attempt to match their horizontal size to the console's buffer size to minimize the need for manual scrolling or resizing.

  • New: Added unit test for ISO date/time conversion of empty strings.

  • New: Allowed for specifying custom data in FStructOnScope.

  • New: Templatized TypeContainer implementation to allow for thread-safe objects; updated unit test

  • New: Enabled user-defined suffixes on Saved folders with the -saveddirsuffix= command line parameter.

  • New: Exposed async load priority through streamable manager.

  • New: FCachedReadPlatformFile can now be disabled to decrease memory usage in exchange for decreased speed.

  • New: Function for getting total and free disk space on Mac.

  • New: Garbage collector will now spawn sub-tasks as soon as there's enough work without waiting for the parent task to finish processing all objects.

  • New: Implemented Undo Barriers on the transaction buffer.

    • This adds some new methods to the UTransactor interface for adding and removing Undo Barriers.

    • PIE now adds an Undo Barrier upon startup, so that it is not possible to undo beyond the start of the PIE session.

  • New: Pkginfo commandlet can now open packages from outside of the current project by specifying the absolute package path.

  • New: Script callstacks are now printed out on ensures.

  • New: Added support for FText properties to serialization.

  • New: Added support for TMap property serialization.

  • New: Exposed entire serializer state in backend API.

  • New: Added HUDinformation about currently running stats file command (in format "STATS FILE: Duration: {0}, Filesize: {1}").

  • New: Stats converter is using a new stats reader which runs 10x times faster.

  • New: When cooking by the book, saving packages will now skip creating exports and imports that are editor-only (are instances of an editor class).

  • New: Profiler loading time optimized to be up to 6x times faster.

  • Bugfix: Crash fix in undo/redo when a lazy object pointer refers to a garbage collected object.

  • Bugfix: Crash fix in async loading caused by iterating over an array while new elements were being added to it.

  • Bugfix: Crash fix when loading the AssetRegistry cache.

  • Bugfix: Crash fix on failure of request file functionality to UnrealSwarm. It will no longer crash on sporadic network problems.

  • Bugfix: Crash fix to UnrealHeaderTool in some rare cases if the parsing step had other errors.

  • Bugfix: Crash fix when replacing references to a deleted anim blueprint with a duplicate.

  • Bugfix: Crash fix to hot reload when dealing with empty user-defined enums.

  • Bugfix: Profiler indication loading progress reworked so it no longer freezes without a progress bar.

  • Bugfix: Fixed missing return value in TAsyncResult assignment operator.

  • Bugfix: CrashReporter records crashes properly on Windows 10.

  • Bugfix: Async loading system will not promote an existing request's priority where a new higher priority request for an already requested package wn't promote the existing requests priority to match the new one.

  • Bugfix: Cooked asset registry generation now takes redirectors into account.

  • Bugfix: "-benchmark" command line switch is now honored in non-editor builds so that benchmarking games is possible again.

  • Bugfix: Servers no longer make repeated attempts to initialize the HighRes screenshot system.

  • Bugfix: Fixed a case where FAssetRegistry::RemoveDependsNode could potentially delete an allocation from within an array allocation.

  • Bugfix: Removed a potential deadlock when suspending and resuming async loading multiple times.

  • Bugfix: Thread local values are no longer accessed with invalid TLS keys in Stats2 code.

  • Bugfix: Fixed an assert when cancelling async loading with async loading thread enabled.

  • Bugfix: Game-agnostic editor settings are now processed correctly when output to the engine saved config directory.

  • Bugfix: Fixed blueprints compilation errors after hot reload.

  • Bugfix: UnrealBuildTool dependency file caches are no longer broken when the process is terminated unexpectedly.

  • Bugfix: Comparisons between module names of different case are now handled correctly when checking files for rebuilds in UnrealBuildTool.

  • Bugfix: Fixed 'debug ensure' console command logic.

  • Bugfix: FAssetRegistry::DependencyDataGathered no longer favors soft asset dependencies.