2015.8.31

虚幻引擎 4.9 版本已发布!

作者 Alexander Paschall

本发布版本包含了129个重大修改,这些修改由虚幻引擎的令人赞叹的社区开发者提交而来。感谢这些开发者对虚幻引擎4.9的贡献:

Andrew Zhilin (zoon), Artem V. Navrotskiy (bozaro), Artyom Sovetnikov, Ben Rog-Wilhelm(zorbathut), Ben Wiklund (bwiklund), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Brad Grantham (bradgrantham), Brent Scriver (FineRedMist), Cengiz Terzibas (yaakuro), chipgw, Christian Radich (yoyohobo665), Christopher P. Yarger (cpyarger), Clay Chai (chaiyuntian), Cliff Jolly (ExpiredPopsicle), Dave Newson (dave-newson), Derek van Vliet (derekvanvliet), Dorgon Chang (dorgonman), ewirch, Felix Laurie von Massenbach (erbridge), Gabriel Hare (GabrielHare), gatools, Hakki Ozturk (ozturkhakki), HueyPark, JaredTherriault, Jason Spangler (Stormwind99), Javier Osset (Xaklse), Jeff Rous (JeffRous), JohnAlcatraz, Kitatus Studios (KitatusStudios), Konstantin Nosov (gildor2), korypostma, Lee Berger (MrCrowbar), Maarten Scholl (maartenscholl), Marat Radchenko (slonopotamus), marynate, Matthias Huerbe (MatzeOGH), Maxim (maxpestun), Michael Allar (Allar), Michael3DX, MiniTurtle, Moritz Wundke (moritz-wundke), Nako Sung (nakosung), Nari Demura (demuyan), Nastenko Michael (deM-on), Nathan Stocks (CleanCut), Niels Huylebroeck (red15), Pablo Zurita (pzurita), Patrick Flanagan (valtrain), Pedja Lubomirovic (3dluvr), Philipp Smorygo (fsmorygo), Pierdek, Piotr Bąk (Pierdek), Quadtree, Rajko Stojadinovik (rajkosto), Rama (EverNewJoy), Rem (rveilleux), rlefebvre, Robert Khalikov (nbjk667), Russ Treadwell (trdwll), Salamanderrake, Sebastian Witkowski (witkowski-seb), Sébastien Rombauts (Srombauts), Simon Taylor (simontaylor81), Stephen Whittle (stephenwhittle), szyszq, TK-Master, Tobias Mollstam (mollstam), Tomasz Sterna (smokku), user37337, Victor Xie (FTPiano), Vladimir Ivanov (ArCorvus), Will Stahl (merlin91), yamashi, Zhi Kang Shao (zkshao)

主要功能

对移动设备的增强支持

我们正致力于极大地改进对移动平台的支持,并且这个版本包含了诸多令人激动的渲染特性以帮助您创建领先的移动平台游戏。新功能包括了高效的动态阴影、可移动光源和贴花。在未来我们会对移动平台和HTML5渲染质量进行持续改进。在这个版本中,我们已经改进了iOS的应用程序内购买功能,并且我们还添加了对CloudKit的远程推送通知和支持。对于安卓平台,我们添加了OpenGL ES 3.1、沉浸模式支持、异步音频压缩以及更佳的方向特性。现在我们还加入了NVIDIA AndroidWorks,这样您可以更方便地在您的设备上设置和运行它。虚幻引擎4现在还创造性地加入了对iOS平台的智能模糊分析插件!您还可以把诸多针对移动设备的新功能用于您的HTML5游戏。

image alt text

新增内容: 针对移动设备的动态角色阴影

现在移动设备上支持来自定向光源的动态调制的角色阴影!

image alt text

  • 即时您的场景是带静态光照的,您也可以使用动态调制的阴影。

  • 要想起用该功能,请在定向光源上打开“Cast Modulated Shadows(投射调制的阴影)”选项!

新增内容: 针对移动平台的动态点光源

现在,移动设备和HTML5平台上支持动态点光源!

image_2.gif

  • 这可以用于提高生命周期较短的特效,比如爆炸、射弹、粒子特效等。

  • 对每个光照对象最高支持四个动态点光源。

  • 注意: 还不支持点光源的动态阴影投射。

新增内容: 移动设备上的贴花

现在,移动平台渲染器支持Decal(贴花)!

image alt text

  • 支持半透明的、叠加的及调制的混合模式。

  • 注意: 当前在移动设备和网络上仅支持不带光照的贴花。

新增内容: 主要的虚拟现实内容更新

Steam VR (HTC Vive)

虚幻引擎的SteamVR插件包含了许多主要更新,可以更方便并以更加高效的方式来使用虚幻引擎。

image alt text

SteamVR改进的内容包括: 

  • 修复了在4.8 Preview 2+版本中出现的延时问题

  • 提供了对标准运动控制器抽象类的支持,这样两个Vive控制器都能找到同一玩家

  • C++项目现在由插件API进行支持

  • 多种改进和bug修复

Gear VR更新到Mobile SDK 0.6.0版本

这个版本修复了多个Gear VR的主要渲染bug以及在0.5.0版本中出现的问题,以及一些硬件兼容性问题。

image alt text

新增内容: 支持虚拟现实运动控制器

现在,虚幻引擎4通过一个通用的抽象层支持Motion Controllers(运动控制器)!

image alt text

这意味着像Vive SteamVR 控制器, Sony Move等都可以通过一个通用的接口可用。 通过使用运动控制器按键抽象类,现在可以将输入按钮的按下及触发处理发送给多个控制器的单个玩家。 另外,您可以通过简单地给您的角色添加一个Motion Controller(运动控制器)组件,来简单地给您的项目添加运动跟踪,这将自动更新附加到角色上的任何东西来遵循您的控制器的位置!目前支持 HTC Vive控制器,不久后将支持更多类型的控制器。我推荐所有的运动控制器插件都移入到该新系统中,以便它们可以成为设备无关接口的一部分。

新增内容: 实验性DirectX 12支持

现在推出了对DirectX 12作为一项实验性内容的支持!如果您正在使用Windows 10,您可以通过使用命令行的"-DX12"来运行引擎以试用这项功能。

image alt text

微软的工程师们添加了对UE4的DirectX 12支持,我们和他们一起配合来整合变更内容到4.9版本中。这项功能仍为新功能,并且是试验性的。DirectX 12提供了更为底层的渲染API,它更为高效,而且可以跨多线程来对渲染命令进行并行提交,这是一项由控制台的渲染API所激发的功能。之后,我们会继续改进对DirectX 12的支持,并且我们会寻找新的方法来在即将推出的引擎新版本中使用新的API。

新增内容: 应用网格物体距离场的全景粒子碰撞

距离场GPU粒子碰撞允许粒子有效地同整个场景进行碰撞。

image alt text

可用于 同表面发生碰撞的火花.

image alt text

这可以用于各种特效,比如 在表面上积聚的雪,

image alt text

  • GPU粒子发射器上的碰撞模块具有一个新的属性 'Collision Mode(碰撞模式)' 您可以在这里指定'Distance Field(距离场)。'

    image alt text

  • 为了使粒子发生碰撞,我们需要有一个碰撞表面,这可以从距离场中高效地提取出来。 距离场的一个单独样本给出到最近碰撞表面的距离。 计算距离场的梯度提供到那个表面的方向和表面法线。 将这些放在一起给出了碰撞表面。

  • 使用这种方法的粒子碰撞比现有的Scene Depth(景深)碰撞更可靠,它仅同您同屏幕上的内容碰撞,限制它使其生命周期较短。 然而,全局距离场分辨率很低,所以粒子将穿过薄的对象,尖角会变成圆角。

  • 同所有距离场功能一样,这个功能需要在Rendering Project(渲染对象)设置中启用 'Generate Mesh Distance Fields(生成网格物体距离场)'距离场粒子碰撞是一个Shader Model 5功能,在不支持SM5的硬件上,粒子将再次使用景深碰撞作为替换。

  • 距离场粒子碰撞非常高效 - 它同景深碰撞的性能消耗差不多。

新增内容: 层次化LOD快速预览和群集

Hierarchical Level-of-Detail (层次化细节层次)(HLOD)是在4.8版本中引入的一个系统,它可以把您关卡中的许多对象压缩到屏幕上看起来很小的几个对象。这样您可以在近距离查看对象时获得更高的质量,并在关卡中获得更好的总体性能表现。我们对4.9版本的HLOD进行了改进,并将持续在未来的版本中进行此类改进。

快速HLOD预览

为了快速在Hierarchical LOD(层次化LOD)版本上进行迭代,现在您可以使用Preview HLOD(预览层次化LOD)选项。这将仅使用Actor边界的可视化表示及其自身没有融合及创建HLOD网格物体的对象创建HLODActor。它们的边界根据为特定Hierarchical LOD(层次化LOD)级别的LODSystem(LOD系统)设置内设置的DrawDistance (描画距离)进行渲染。

image alt text

该图片展示了弹入到视图中的第一个和第二个层次化的LOD级别,这清晰地指出了这些级别如何聚集,而不必经历融合及创建层次化LOD网格物体的耗时过程。注意,这只是该预览系统的初步实现,随着时间推移,可能会进行修改及改进。

自定义LOD群集 (HLOD体积)

为了对 Hierarchical LOD(层次化LOD)的群集过程有更多的粒度控制,现在您可以放置Hierarchical LODVolume(层次化的LOD体积),它将为它包含的Actor创建一个群集。有了这个功能,就允许用户手动地定义关卡中的哪个区域及哪些对象应该群集到一起。

image alt text

新增内容: "Arch Vis" 角色控制

新增的"ArchVisCharacter” 插件添加了可用于建筑可视化应用的立即可用的控制的角色类。旨在于提供在真实世界范围内的舒适和自然的控制,并启用更平滑的视频和在线演示。

image alt text

您可以直接将ArchVisCharacter绑定为Pawn类,或者您也可以从中创建自定义蓝图以随意调整移动设置。

新增内容: 控件深度排序

屏幕空间中的控件组件(Widget Components)现在会根据距离观察者的距离自动分类,以确保最近的屏幕控件控件组件总是位于其他组件的上面。

image alt text

通过这样,共享的图层控件可以根据到相机的距离适当地分类所有控件组件。之前它是基于手动的 ZOrder,或者添加到视口中的先后顺序分类的。

新增内容: 区域阴影 (用于固定光源)

之前,固定光源总是生成具有均匀半影尺寸的尖锐阴影。 现在,Lightmass光线追踪允许它们生成固定光源的区域阴影!

image alt text

开启"Use Area Shadows for Stationary Light"(使用固定光源的区域阴影)选项来使用此功能。'Light Source Angle'(光源角度)(或点光源的'Source Radius'(光源半径))控制了这些阴影的柔和度。

image alt text

性能表现详细信息:

  • 均匀半影阴影在处理低分辨率光照贴图时仍然具有较好的效果,所以这些仍然是默认设置。 之前,均匀半影尺寸是使用一个隐蔽的项目设置控制的,但现在,它由'Light Source Angle(光源角度)'属性控制,就像区域阴影一样。 将光源角度变为二倍大小将获得两倍柔和度的阴影,以此类推。

  • 对于仅受到单一固定光源通道影响的地图区域(也就是,一个固定定向光源),也有一个新的优化。 它们的阴影贴图将被烘培到一个单独的通道贴图中,而不是4个通道贴图中,仅占用1/4的内存消耗。

新增内容: 环境遮挡材质蒙板

新的环境遮挡材质蒙板功能允许您在材质中访问Lightmass计算的环境遮挡,这对于程序化贴图是有用的,比如在它累积的区域添加老化效果及灰尘。

image alt text

以上的屏幕截图使用环境遮挡蒙板来自动混合泥土层到环境中的角落位置。

要想使用该功能,您需要启用WorldSettings(世界设置)->Lightmass settings(Lightmass设置)下的 'Use Ambient Occlusion(使用环境遮挡)' 和'Generate Ambient Occlusion Material Mask(生成环境遮挡材质蒙板)' 这两项,然后构建光照。 其它的类似MaxOcclusionDistance(最大遮挡距离)这样的环境遮挡控制可以用于调整外观效果。(请确保设置直接及间接环境遮挡部分(Indirect Occlusion Fraction )为0,以便这个环境遮挡不会应用到实际的关卡光照上。)

image alt text

然后,在您的材质中,您可以将该环境遮挡作为具有PrecomputedAOMask节点的0-1的蒙板访问。PrecomputedAOMask节点将在遮挡的区域中提供1,在其他地方提供0。

image alt text

性能表现详细信息:

  • 使用PrecomputedAOMask节点是一种标准的贴图查找方式。启用该功能会对每个光照贴图的贴图像素添加半个字节,而默认的使用方式是每个光照贴图的贴图像素使用大约4个字节。

  • 您可以使用‘ListTextures'控制台命令来查看AOMaterialMask所使用的贴图内存。

新增内容: 网格物体距离场材质

这项功能让您的材质可以方便地确定到空间中任意点的立体处的距离。最近的有两个新的节点,用于访问材质编辑器中的全局距离场属性。

image alt text

DistanceToNearestSurface返回一个带符号距离,以世界空间单位为单位。注意,不透明网格物体表面上的距离将总是接近于0。 DistanceToNearestSurface 可以用于使得特效避开遮挡者:

虚幻引擎4用户Roel Bartstra已经发现了该功能的一些有趣应用 - - 一个是 获得软体效果, 另一个是 创建自动避开表面的流程图

同所有距离场功能一样,这个功能需要在Rendering Project(渲染对象)设置中启用'Generate Mesh Distance Fields'(生成网格物体距离场) 。 距离场材质访问是一个Shader Model 5功能。 使用FeatureLevelSwitch 材质节点提供针对Shader Model 4硬件的回滚应用。

新增内容: 改进的距离场环境遮挡

环境遮挡在物体周围提供了由天空所照亮的柔和阴影,这在阴暗的光照环境下尤为重要,一般来说,在没有预计算光照的情况下,很难以高质量进行渲染。距离场环境遮挡解决了这个问题,创建了完全动态的游戏,在其中,时间和环境可以随时变更。我们在提升4.9版本技术的质量和性能表现方面付出了巨大努力,并且我们相信,这对于中等配置的电脑和和PS4级别的硬件来说,现在这是一个可以发布的功能,在一般游戏场景中,总体GPU消耗低于4ms!

之前的方法进行自适应采样,所以尽管平面做较少的工作,但这仍然会在干净的场景中导致大量的污点。

image alt text

现在,环境遮挡的计算速度已经足够快,可以摆脱自适应采样,所以遮挡更加平滑。

image alt text

需要注意的是,新方法需要较长的历史过滤器,这可能会导致重影,尤其是当阴影投射者移动时。 希望这个问题以后会有所改进。

性能

距离场环境遮挡处理速度更快,以至于它可以在中等配置的PC及PS4上运行。 现在,它也具有更可靠的性能消耗,以至于几乎是常量,性能消耗略微依赖于对象的密度。

在具有一个静态相机和基本上全是平面的情况下,新方法快1.6倍。在具有植被和快速移动相机的复杂场景中,这种新方法速度快5.5倍。完整游戏场景在PS4上距离场环境遮挡的性能消耗是3.7毫秒。

技术细节

主要优化是使用一个全局距离场,该距离场随着相机转动。 这通过将所有常见的基于每个对象的距离场域组合到几个以相机为中心的体积贴图(称为clipmap(剪辑贴图))中来创建。 仅需要更新新的可视化区域或者那些受到场景修改影响的区域,这样合成就不会有太多性能消耗。

剪辑贴图(clipmap)的贴图像素尺寸的可视化效果 - 每个剪辑贴图具有一种不同的颜色

image alt text

全局距离场的分辨率比对象距离场低,所以它可以用于任何处理。 当计算天空遮挡的锥形追踪时,对象距离场在被遮挡的点附近采样,而具更快速度的全局距离场则在更远的地方采样。

这是光线追踪全局距离场和对象距离场的可视化展示。 全局距离场中的表面变得有斑点,并且薄的对象消失。

image alt text

新增内容:内容浏览器高级搜索

现在,当在内容浏览器中执行搜索时您可以使用高级搜索语法。虚幻引擎4被用于许多大型项目中,包括了一些包含了数百名开发者的团队,以及具有成百上千资源的内容库!这些新的搜索功能改进了工作流程,从而让您可以在任意大小的项目中搜寻内容。

image alt text

这增强了现有的简单搜索语法,通过提供一种从资源元数据及以下特殊按键中匹配 键->值对的方法:

  • Name(名称) - 和资源名称进行比较。

  • Path(路径) - 同资源路径进行比较。

  • Class(类) (别名: 类型) - 同资源类进行比较。

  • Collection(收藏夹) (别名: 标签) - 同包含该资源的任何收藏家的名称比较。

新增内容: 收藏夹改进

这个版本包含了许多对集合的变更内容,这样就可以辅助您在游戏中的资源管理,诸如资源嵌套、智能化集合以及标记功能。

嵌套收藏夹
  • 您的资源集合现在可以整理到层次结构中。

    image alt text

  • 您可以通过从给定的集合关联菜单中选择"New…"(新建)选项来创建子集合。或者,您也可以通过拖放来进行父项操作。

    image alt text

动态收藏夹
  • 动态收藏夹利用高级内容浏览器搜索语法的功能,允许您创建及共享收藏夹过滤器。

    image alt text

  • 您能够使用内容浏览器文本搜索所做的任何操作都可以被保存为一个动态收藏夹,包括引用其他收藏夹(静态收藏夹和动态收藏夹)。

  • 您可以使用内容浏览器文本筛选器右侧的"Save"按钮来创建动态集合。

    image alt text

快速资源管理
  • 现在,静态收藏夹通过快速资源管理复选框提供了一种向多个收藏夹添加资源的快速简便方法。

    image alt text

  • 您可以在集合视图中或通过其它途径,诸如点击与任意选择资源的关联菜单进行来使用。

    image alt text

改进了稳定性
  • 现在,收藏夹将自动地遵循它们包含的任何重定向器,这会避免当资源被重命名或移动时看上去似乎从收藏夹中消失的情形。另外,现在当通过内容浏览器修复(并彻底移除)重定向器时会考虑收藏夹。

改进的状态报告
  • 现在,每个收藏夹在其列目右侧有一个小的状态指示符,该指示符的颜色会根据收藏夹的当前状态变化而改变。每种颜色的含义如下:

    • 红色 - 该集合处于某种不佳或只读状态。请参阅工具提示以了解如何解决此问题。

    • 橙色 - 这个集合没有与源控制同步到最新版本。

    • 蓝色 - 该集合具有本地未保存的变更内容。如果保存或自动检查内容出问题,或者如果集合有重定向器,则可能发生该问题。

    • 绿色 - 该集合非空且为最新。

    • 灰色 - 该集合为空且为最新。

改进的资源工具提示信息
  • 现在,一个给定对象的静态收藏夹可以在内容浏览器中显示为工具提示信息的一部分。

    image alt text

新增内容: 插件创建向导

现在可以很方便地为虚幻引擎4创建新的C++插件!请查看新的插件向导。

image alt text

  • 现在通过插件浏览器(您可以从窗口菜单中访问它),您可以创建新插件!

  • 您将可以给新的插件起名,并从多个已存插件类型中进行选择(空白型、工具条型、独立窗口型)。

  • 这样将可以为您的插件创建所有的初始文件,以供您编译并载入到编辑器中

新增内容: 增强的曲线编辑器

我们对曲线编辑器进行了诸多改进,使之能更方便地控制曲线关键帧和切线。

image alt text

  • 鼠标中键现在也可以移动选择的关键帧或选择的切线

  • 现在添加了对选择和控制多个切线的支持

  • 现在可以使用control键(切换)和shift键(添加到已存控制项)来进行选择

  • 按住shift不放将可以限制在一条轴的移动

  • 浏览:按住alt加鼠标中键来平移视图,按住alt加鼠标右键来缩放视图

  • 新切线显示选项:总是显示切线,对选定点显示切线,永不显示切线

  • 新的曲线的预处理无限外推选项

  • 让添加关键帧变得更容易预测

    • 仅在只有一条曲线可供编辑时,才使用鼠标来添加关键帧

    • 当多个曲线可用时,点击曲线将会在该曲线上添加关键帧内联,而快速点击曲线将会添加关键帧到所有的曲线

    • 变更菜单项目的文本,来更清楚地显示所要进行的操作

新增内容: 蓝图中的多个返回节点

现在,一个函数可以有多个返回节点。一旦执行到“返回”处,函数执行将终止。这可以用于从蓝图函数中提早返回,或者进行分支及返回不同的值。

image alt text

新增内容: 在蓝图中构建自定义对象

在蓝图中,现在您可以生成不纯正的对象类型(不仅是actor/组件)。ConstructObjectFromClass 节点获取一个类,并创建一个那种类型的对象,和SpawnActorFromClass 类似(除了类型不是actor)。

image alt text

  • "Outer" 输入将作为新对象的拥有者,它控制了创建物体的生命周期。

  • 对于actor类,您可以继续使用类节点的Spawn Actor。对于控件来说,请使用Create Widget(创建控件)节点。在未来的版本中,我们可能会继续组合这些不同的功能。

新增内容: 蓝图类默认值

在蓝图中,现在可以通过新的"Get Class Defaults(获取类默认值)"节点来访问类的默认值。 当应用仅包含数据的蓝图时这可能是有帮助的,这允许您访问这些蓝图的值,而不必创建一个实例。

image alt text

  • 为了防止输入引脚太多变得不便处理,请使用节点的详细信息来 显示/隐藏 特定的默认值。

新增内容: 关卡蓝图通信

现在关卡蓝图可以通过接口通信。它们可以像类蓝图那样使用及实现接口函数。当把一个接口添加到一个类蓝图中后,便可以通过接口消息节点进行调用(使用用一个动态载入关卡作为目标)。

image alt text

  • 使用"Get Streaming Level"(获得动态载入关卡)节点来获得要通信的关卡。

    • 因为您必须使用"Get Streaming Level" (获得动态载入关卡)来指向一个特定关卡,所以这将仅对子关卡有效。

新增内容: 优化的数学表达式

我们优化了Math Expression(数学表达式)节点,以便它比常规节点性能更好。现在,同使用一系列的 操作符/函数 节点表示的同样表达式相比,使用Math Expression(数学表达式)节点的速度大约快2倍。

image alt text

新增内容: 蓝图资源ID

有两种新的数据类型暴露给了蓝图: “Asset ID(资源ID)” 和“Class Asset ID(类资源ID)”。Asset ID代表一个已加载的或未加载的资源,可以使用“Resolve Asset(解析资源)”节点将其解析为一个对象。 如果该资源没有加载,那么“Resolve Asset(解析资源)”节点将返回一个无效的对象。 您可以使用“Load Asset(加载资源)”节点加载该资源。 类似地,“Class Asset ID”将解析为一个类,并可以使用“Load Asset Class(加载资源类)”节点进行加载。

image alt text

新增内容: 蒙太奇元素定时界面

我们向蒙太奇编辑器添加另一个新的界面,以便当动画在运行时帮助您控制激活蒙太奇事件的顺序。

image alt text

新增内容: 非线性动画混合

现在,我们支持动画姿势及变换之间的很多不同混合函数!

image alt text

以前,仅支持线性或三次方混合。 现在您可以从很多不同的混合函数中进行选择:线性、立方体、埃尔米特立方体、正弦曲线、二次方程、圆形、指数和自定义函数。对大多数类型来说,您可以分别控制是否使用曲线的“入”和“出”。

“Custom(自定义)” 选项要求有一个“Curve Float(浮点型曲线)”资源。 当创建一个资源后,您可以在详细信息面板中将它分配给相关节点:

image alt text

image alt text

这将允许您指出您想执行的任何混合。将会正规化并缩放曲线长度,使其满足指定的混合时间,任何超出范围0-1的值都会进行区间限定以适应(这个限制后续可能会提升,请留意) 如果没有指定自定义曲线,那么系统将回退到线性混合。

image alt text

新增内容: 骨骼驱动的动画控制器

骨骼驱动器允许您根据Driver(驱动)骨骼的组件的运动调整Driven(被驱动)骨骼的一个或多个组件。这对于附加了附件的角色很有用!您可以防止在动画中的几何体交叉问题,即使在进行了很多混合时也是如此。

image alt text

在这个示例中,手榴弹骨骼没有创作的动画,正在作为thigh_r骨骼的函数在两个坐标轴上驱动。任何动画混合最终都可以很好地运作,而不需要手动调整,因为它们是实时计算的。

您也可以使用一个乘法器直接取入驱动器值,将其重新映射到一个范围,或者使用一个曲线资源来驱动运动。使用曲线通常是最好的方法,因为它允许您自然地低定义响应,交互式地调整点/切线,从而实时看到改变。

以下是骨骼驱动的动画控制器的新设置:

image alt text

新增内容: 动画变换规则

这个版本包含了对动画混合树的改进,尤其是对变换规则的原理进行了改进。

更好地处理动画资源覆盖

现在,变换规则中类似Time Remaining(剩余时间)这样的节点将正确地对由于Child Animation Blueprints(子动画蓝图)中的覆盖动画而导致的动画长度改变做出响应。 这意味着每个子动画蓝图中变换规则所引用的动画不必再是同样长度。

引用最相关的动画层

为了使得状态机更加容易维护,现在您可以使用一个新的getter类,它将从源状态中选择权重最高的动画,而不是指向一个未来可能改变的特定动画。 现在以下节点可用:

image alt text

自定义混合图表改进

现在,在Custom Blend(自定义混合)图表中暴露了一些额外信息,以使得它们不仅仅用于一次性的自定义变换动画。 以下节点提供了关于相应变换节点及 源/目标状态的信息,现在可以在自定义混合图表中使用:

image alt text

您也可以使用引用资源层的getter方法,就像在变换规则中一样。

新增内容: 动画曲线计算修改

Animation Curve Evaluation(动画曲线计算)以前发生在动画的更新阶段,而现在移动到了计算阶段。这将带来以下一些好处。

  • 曲线的权重通过混合权重进行了适当的计算。

    • Cache Nodes(缓存节点)

    • Additive Nodes(叠加节点): Additive (叠加)节点将像动画骨骼变换所做的那样将基础姿势的叠加型曲线数据的间隔叠加到当前姿势上。

    • Layered Node(分层节点): 使得它正常工作略微有点复杂,因为您不知道哪条曲线正在影响哪部分关节。现在,它确实提供了如何混合曲线的选项。

      • Max Weight(最大权重) : 它从混合姿势中选择曲线的最大权重

      • Normalize by Weight(按权重正规化) : 它将所有曲线的所有混合姿势的权重加在一起,并正规化为1

      • Blend by Weight(按权重混合): 它仅是求和 (权重 * 曲线值)

image alt text

  • 如果您正在使用并行计算,那么曲线计算已经移动为多线程。

  • 最终,这允许我们创建一个可以从骨骼变换驱动曲线的节点,反之亦然。

  • 但是,如果您有需要一条没有计算的曲线(如果您正在更新但是不计算),那么您将不会获得最新数据。曲线数据现在当作骨骼变换对待,而不是像以前那样当做通知对待。

新增内容: 支持动画资源元数据

现在,我们支持可以添加到动画资源中的元数据。元数据是从UAnimMetaData衍生而来的可以应用于蓝图的类,然后您可以将这些元数据添加到动画资源中(动画序列、动画蒙太奇、动画合成及混合空间)。

image alt text

您可以通过调用GetMetaData(),或者通过使用动画剪辑的GetSectionMetaData()来对C++中的动画资源的数据进行查询。

新增内容: 音频质量等级

我们添加了一项新功能,可以让音频设计师能够管理音频的内存使用和(某种程度的)性能表现,以用于低端机器/设备。

您可以在项目设置的音频部分中找到可用的音频质量等级。每种质量等级在目前可以指定由音频设备(一些平台,主要是安卓平台,仍会把该值限制为较低的值)所创建的最大数量的音频通道。

image alt text

在音频中,您可以放置一个质量等级的声音节点,它会对项目设置中定义的每个质量等级提供输入引脚,并且仅执行连接到活动质量等级的分支。这可以用于降低载入的变化的数量,或用于指定降低保真度的wave文件。

image alt text

当您在游玩独立的游戏时,您可以通过游戏的用户设置来指定质量等级,而且仅该质量等级所需的声音波形文件会被载入到内存中。默认值可以通过GameUserSettings.ini文件来基于每局游戏或平台进行设置,并且游戏可以通过其设置UI来设置其值。当前,游戏需要进行重启才能让质量变更生效。

如需在编辑器中播放,您可以指定通过关卡编辑器播放设置所使用的质量等级。变更这个值将会在播放对话激活时运行,并且新的音效会使用当前的质量等级。

新增内容: 自定义衰减曲线

现在,您可以为衰减音效定义您自己的自定义曲线,而不是简单地限制于在算法中构建。

在衰减设置中,设置Distance Algorithm(距离算法)为 ATTENUATION_Custom,您将看到自定义曲线部分出现。 然后,您可以从内容浏览器中指定一个外部曲线资源或直接在详细信息面板中自己直接定义一条自定义曲线。

image alt text

新增内容: 更新间隔

现在,您可以指定一个执行更新函数的时间间隔,从而允许您减少每帧执行更新函数带来的性能消耗,而不需要使用过多复杂的计时器。

这个功能通过Actor和组件默认属性暴露给最终用户,对于程序员,该项可以在C++中进行设置,和其他的更新函数属性类似。

image alt text

需要注意的几个实现细节:

  • 所有Tick(更新)函数执行它们注册的第一帧,然后在下次更新之前此点处等待一段更新时间间隔。

  • 修改一个已经正在更新的更新函数的时间间隔,直到下一个预计更新发生之前时间间隔将不会改变。如果您想让修改立即生效,那么您应该禁用该更新,修改此间隔,然后重新启用更新。

  • 当Tick函数规划下一次更新时,它将通过为任何超时运行提供一个信用,尽可能地接近指定时间间隔进行更新。 比如,如果一个函数指定为每秒发生一次,此刻更新函数执行自上次一次更新已经有1.1秒,那么等到另外0.9秒过去时再规划发生另一次更新。 然而,在一帧中一个更新函数不会执行一次以上,即便在该帧中出现了多个时间间隔。

  • 不管更新时间间隔如何,更新函数的DeltaTime将仍然同样有效。 它不是自上一次该函数更新的时间,但它永远是正在处理的帧的delta时间。

  • Actor的Custom Time Dilation (自定义时间扩张)不会应用到 Tick Interval(更新时间间隔)上。 无论单独的Actor是否有其自己的 Tick Interval,该更新发送的频率将仍然保持不变,那个Time Dilation仅应用于传入到更新函数的DeltaTime。

新增内容: Actor侵犯检测

侵犯检测也变得更为强大并且可以在更多情况下运行。我们添加了一些新的自定义选项以供检测运行。

image alt text

当生成actor时,"bNoCollisionFail"(在蓝图中"即便碰撞也生成")选项已经被重构并扩展为支持4个选项,以表示如何处理产生点处的碰撞:

  • 无论如何都在那里生成。

  • 如果可能则在适当位置处生成,否则就无论如何都在那里生成。

  • 仅当在附近找到适当位置时生成,其他情况都不生成。

  • 不生成它。

退出蓝图将自动更新来选择正确的对应选择。一些代码已经废弃,且将需要手动更新。

Actor类有一个新的暴露给蓝图的成员SpawnCollisionHandlingMethod,它控制默认如何处理生成碰撞。该项可以通过SpawnActor节点或函数调用上的设置进行覆盖。

侵犯检测功能也变得更强大,可以在更多情形中工作。对于具有MovementComponent(运动组件)的actor,则假设更新的组件为主要的碰撞形状,且是用于进行侵犯测试的唯一组件。对于其他actor,所有具有适当碰撞测试的组件都会被检测。请注意,这可能会导致某些actor在更新后无法生成的情况 -- 如果发生这种情况,请仔细检查您的碰撞设置、处理方法及生成变换。

新增内容: 后期处理混合

后期处理"Blendables"(可混合对象)被用于在不同的状态间转换后期处理特效。我们对这个系统进行了一些改进。

您现在可以对每个可混合对象设置混合权重值。这个混合权重可以在蓝图或C++代码运行时进行修改,这样您就可以使用后期处理转换进行一些有趣的操作了。

您现在还可以在后期处理体积内立即指定后期处理设置“inline”,或者您也可以选择创建可在多个物体间共享的单独可混合资源!

image alt text

image alt text

同时,我们还让您可以更方便地定义自定义可混合设置。您不再需要修改引擎的内置PostProcessSettings结构,而只需使用设置来定义新的结构,诸如上方的Light Propagation Volume Blendable(光照传递体积可混合)设置。

最后,以下是一个关于如何使用蓝图来在运行时对可混合对象编辑其混合权重值的示例:

image alt text

新增内容: 动态资源缓存

一些游戏需要对资源的本地拷贝的存储进行支持,这个功能可能没有与游戏一起发布。举例来说,如果您具有许多程序化创建的资源,或来自于服务器的资源(比如广告图形)。新的动态资源缓存是一个通用的资源缓存系统,可以用来在可配置的资源块中持续地存储生成的数据。

image alt text

它有以下特性:

  • 多个存储器,单独地存储用户准备的资源类型,比如CharacterImage(角色图片)缓存和 AdvertisementImage(广告图片)缓存。

  • 每个存储器独立的配置大小。

  • 资源版本化,使得当资源在资源变为废弃时重新构建缓存项。

  • 同步及异步缓存查询。

  • 当缓存增长到大于指定大小时,旧的缓存项将会从中删除。

新增内容: 体积贴花(试验性功能!)

三维函数场渲染是描述几何体的另一种方法,它能够更好地解决一些很难的渲染问题(阴影、布尔操作、平滑处理、环境遮挡、光线跟踪、变形)。我们在引擎中的各种地方已经使用了2d及3d距离函数(字体、光照贴图、距离场阴影/环境遮挡)。全新的Volume Decals(体积贴花)允许将一个距离函数(由材质函数定义)作为不透明对象渲染到GBuffer中。输出到GBuffer中意味着我们会获得延迟渲染的所有光照功能(环境遮挡、屏幕空间发射、光照、景深、阴影接收)。下图中的碗显示了一个体积贴花。

image alt text

创建对象(请参照下图,按从左到右的顺序)

  • 使用到贴花中心的距离和贴图投射定义一个球体

  • 在另一个球体中定义一个球体,取二者中最大的(布尔求交)

  • 移动球体来调整形状

  • 添加另一个球体,并修改材质(布尔减)

  • 再次调整形状

image alt text

这展示了如何定义球体的距离函数:

image alt text

该功能尚未完成(缺失阴影投射和间接光照,性能、质量、法线贴图支持),它在GPU上性能消耗总是较大(每个像素的距离函数可能要计算上百次)。我们将进一步改进它(材质函数、阴影投射、文档...),但是可能永远也不会达到实时使用所需要的速度。

新增内容: 虚幻引擎4文档标签,版本及技能级别

  • 现在,文档页面包含了技能级别、引擎版本、类别标签,这些信息显示在页面的顶部及底部,使您可以找到匹配标签的其他页面。

    image alt text

  • 添加了通过技能级别 和/或 引擎版本过滤网站地图的功能。现在网站地图可以展开为树状结构。当过滤时,树状结构将会展开以显示匹配项,不匹配项将呈现为灰掉状态。

    image alt text

  • 同时,现在页面上的技能级别、引擎版本及标签会链接到网站地图,并且可以自动过滤它。 点击一个标签将会过滤网站地图仅显示具有那个标签的页面。

    image alt text

  • 到教程的链接(指南、快速指南的等)显示了那个指南的技能级别和引擎版本:

    image alt text

新建和更新的虚幻引擎4文档

新增内容: 异步实时音频解压缩

支持实时的基于ogg-vorbis的音频解压缩的平台(PC、 Xbox One、 Mac、 Android)现在会在可能的情况下执行异步解压缩以防止影响主游戏线程的运行。

新增内容: 功能包和模板的共享资源

现在支持在模板和功能包中的共享资源。这是通过让模板和功能包指定其它包含的功能包来完成的。这表示,现在对所有模板都可用的资源仅存在一次。这还意味着,我们不再需要对在蓝图和模板的C++版本间共享的资源进行复制。

支持多个目标平台,这样不同的资源可以共存于移动平台和桌面平台的一个模板或功能包中。举例来说,这样当您需要一个平台上的更低细节的模型而非另一个资源时,这就很好用了。

新增内容: 改进的HTML5 (方便的设置、 Amazon S3 支持、 网络)

您不再需要安装任何第三方SDK来启动HTML5的开发并为网络浏览器而打包您的游戏!如需打包,您只需在 File(文件) -> Package menu(打包菜单)中选择HTML5。

其它的改进内容包括:

  • 发射压缩的javascript,这可以极大地降低版本的大小。

  • 在打包时,有一个小型的网络服务器被包含在游戏中,它可以处理本地测试的压缩文件。

  • 现在支持HTML5的网络!现在存在虚幻版本工具的配置变量,它可以用于创建支持HTML5客户端的专用服务器。

  • 现在支持在打包时上传到javascript。在填入AWS的凭证信息后,该版本会被上传到S3,而游戏可以直接从S3处浏览信息。

    image alt text

版本信息

AI

  • 新增内容:创建了一个专门的AI内容类别,可以在内容浏览器的关联菜单中找到。

    image alt text

  • 新增内容:当EQS(环境查询系统)查询时间超过0.25秒(累计)时添加了日志错误。当查询完成时,我们也会记录每次测试执行花费多长时间。

  • 新增内容:在EQS生成器中添加了对基于踪迹的投射的支持
  • 新增内容:在应用数据绑定的On Circle EQS 生成器中为圆圈中心添加了Z偏移。
  • 新增内容:AI Controller(AI控制器)的路径跟踪组件(Path Following Component)已经暴露给蓝图,并且可以通过蓝图创建的类的默认属性进行调整。
  • 新增内容:Blackboard(黑板)资源已经有了蓝图类型,使得蓝图用户可以同它们交互。
  • 新增内容:为EQS查询的多个情境暴露了过滤和计分选项。
  • 蓝图编译和加载现在更加高效
  • 修复了EQS中的“Skip Item(跳过项目)”并不总在调试视图中显示结果的问题
  • 修复了当处理过滤时,“Skip Item(跳过项)”处理有时候像“Pass(通过)”有时候像"Fail(失败)"的问题。
  • 修复了当取消注册Pawn动作组件,当受控的Pawn悬而未决时出现崩溃的问题
  • 修复了AI模拟永远不过期导致AI永远忘记感知到的actor的问题。
  • 修复了寻路批量EQS测试中的崩溃问题。
  • 修复了运行没有有效选项的EQS查询崩溃的问题。
  • 修复了EQS路径网格生成器在几何体中的点上卡住的问题。
  • 修复了使用多个选项恢复EQS查询资源的问题。
  • 修复了当进行寻路批处理EQS查询测试当测试项目被认为无效时出现的崩溃问题。
  • 修复了如果其查询拥有者不是actor,“On Circle”EQS生成器崩溃的问题
行为树
  • 新增内容:为行为树添加了动态子树注入支持。
  • 新增内容:为行为树任务添加了新的重启模式,现在它们可以忽略重启,这使得它会再次重新运行同样的任务。应用实例根据任务类型及其参数不同而有所不同:有些任务每次重启会运作的更好(比如运动),有些任务则应该完成它们的动作(比如动画)
  • 基于蓝图的行为树任务现在将根据任务状态忽略Finish Execute和Finish Abort函数调用,修复了当任务完成执行时没有清除延迟的蓝图动作的问题。
  • 修复了行为树装饰器丢失黑板观察者的问题。
  • 修复了行为树在On Value Change模式中从黑板装饰器中重启的问题。
  • 修复了行为树Tag Cooldown装饰器将Tag Cooldown结束时间的当前值同期持续时间相比较的问题。(Tag Cooldown中的持续时间应该仅当我们禁用时应用,而不能用于比较。)
  • 修复了行为树中具有循环装饰器的分支的搜索更新问题。
  • 修复了aux节点在废弃的搜索过程中丢失内存块中修改的问题。
  • 修复了行为树编辑器中粘帖合成装饰器节点时的崩溃问题。
  • 修复了合成装饰器的 拖拽&放置 操作。
  • 修复了行为树编辑器中重复的子节点问题。
  • 修复了当从现有引脚创建一个新节点时行为树节点的顺序问题。
  • 修复了中止连接到并行节点的行为树任务时出现的罕见崩溃问题。
  • 修复了Rotate to Face(旋转以面向)任务在收到中止事件时卡住的问题。
  • 使用了Rotate to Face替换了Has Reached Goal装饰器。
调试工具
  • 新增内容:添加了“-LogNavOctree” 命令行参数,以在停止记录时将Nav Octree调试几何体记录到可视化记录器中。
  • 新增内容:添加了可视化记录器可以记录的新形状:网格物体、凸面多边形、导航区域/拉伸凸面体及特定边界框的Nav Octree转储。
  • 新增内容:对游戏调试器进行了少量改进。
    • 为可视化记录器工具添加了多个记录选项,以同时分析所有选中的对象。
    • 为游戏调试器添加了调试相机,以便可以四处浏览(按Tab键来在相机间切换)。
    • 针对没有数字键盘的键盘,给游戏调试器添加了可替换的按键绑定(可以在游戏调试器设置中启用)。它使用Alt + [常规数字]快捷键。
  • 向可视化记录器中添加了关于EQS查询的更多数据。
  • 当选择一个单独项时,获胜项的EQS分数将不再设置为1。那样,分数就可以进行适当的比较,因为其他分数也都没有进行正规化处理。它们将处于同样的相对范围上。
  • 修复了游戏调试器的客户端服务器问题。一切内容都应该再次正确地复制到客户端上。
  • 调整了EQS调试显示的描述的宽度,从200改为312,以便显示略长的描述,不会重叠到下一栏中。项目描述宽度、项目分数宽度、测试分数宽度现在都可以在代码中调整(它们现在是变量而不是内联值)。
  • 新增内容:为AI Perception Component(AI感知组件)添加了专门的蓝图可绑定事件,AI Perception Component在每次感应到新刺激时都会被触发。
  • 新增内容:为寻路Reached(到达)测试添加了 bUseNavAgentGoalLocation 以便移动到Actor。(有时候 向前移动 / 同实际的actor的位置进行比较测试 是有用的, 而不是把它的位置投射到导航系统中。)
  • 新增内容:为骨架网格物体添加了自定义导航导出。
  • 新增内容:为导航网格物体边界体积添加了导航代理选择器,基于每个代理定义区域。
  • 新增内容:为可破坏网格物体添加了导航更新。
  • 新增内容:为导航链接添加了新选项,这允许连接到吸附半径中性能消耗最低的区域。
  • 在编辑器中的导航系统中,当地图加载时导致在静态导航网格物体中删除所有保存的数据的缺陷,现已修复。
  • 抽象导航数据actor现在将不再显示在场景大纲视图中。
  • 给路径跟踪的等待状态添加了过期时间。
  • 修复了导航系统中阻止碰撞较少的图形组件通过其他方法(比如导航区域)影响导航网格物体生成的缺陷。
  • 修复了“单例”导航相关组件(没有导航父项)的边界问题,这会导致在生成导航网格物体过程中忽略它们。
  • 修复了当AI使用到位置的直接路径时群集运动中的崩溃问题。
  • 修复了群集在没有寻路的移动情况下的模拟更新。
  • 修复了 Floating Pawn Movement(浮动的Pawn运动)组件导致电传AI遵循路径忽略最大速度限制的问题。
  • 修复了即使pawn在Z轴上移动很远时使用缓存位置的网格物体行走模式的几何体投射问题。
  • 修复了在导航系统创建之前处理随同地图加载的自定义导航链接的问题。
  • 修复了在编辑器模式中导航系统Initial Lock(初始锁定)上卡住的问题。
  • 修复了游戏中缺失抽象导航数据(处理直接路径)的问题。
  • 修复了缺失具有大的对齐高度的导航链接的问题。
  • 修复了刚体设置的凸面元素的可导航碰撞导出不使用元素的本地变换的问题。
  • 修复了Nav Link Proxy(导航链接代理)actor中自定义导航链接的导航相关性及更新顺序的问题。
  • 修复了导航系统不能正确处理深入的Actor层次结构的问题。现在,您可以将Actor附加到一个Actor上,再将该Actor附加到另一个Actor上,所有的Actor都能按预期影响导航网格物体的生成。
  • 修复了更新附加到没有碰撞组件的actor上的导航网格物体相关组件的问题。
  • 导航网格物体的渲染组件存在时间是短暂地,我们确保了保存在旧地图中的任何导航渲染组件不会破坏任何内容。
  • 为导航系统的“获得随机点”功能更新了弃用信息,使其更加精确。

动画

  • 供调试动画用的新“Observe Bone(观察骨骼)”节点。

  • 这可以让您输出骨骼的当前位置(在动画树中的该特定点处),并具有坐标空间的多个选项并选择是否相对于参考姿势进行显示。

  • 观察骨骼节点可用于调试。它们不会造成很多性能消耗,但目前并不是从发布版本中进行编译,这样在您完成图表的内容后,您可能需要移除它们。

    image alt text

  • 新增内容:为角色编辑器添加了可旋转的功能。

    image alt text

  • 新增内容:在角色编辑器的网格物体模式中为每个LOD(0之后)添加了一个“Remove this LOD(删除该LOD)”按钮。

  • 新增内容:在内容浏览器中为动画蓝图资源的3D缩略图添加了一个图标覆盖层。
  • 新增内容:为AnimMontages(动画蒙太奇)添加了 'Blend Out Trigger Time(混合淡出触发时间)'。
    • Sequence End(序列结尾处)触发混合淡出。
    • <0意思这使用Blend Out Time(混合淡出时间), Blend Out(混合淡出)在蒙太奇结尾处结束。
    • >=0 意味着使用 'Sequence End - Blend Out Trigger Time(序列结尾处 - 混合淡出触发时间)' 来触发混合淡出。
    • 同时作为一个可选参数添加到了Play Slot Animation As Dynamic Montage(将插槽动画作为动态蒙太奇播放)。
  • 新增内容:为Modify Bone(修改骨骼)骨架控制添加了编译警告,当它什么都不做时(比如,当所有组件都设置为忽略或者没有选择骨骼时) 显示该警告。
  • 新增内容:添加了针对Post Evaluation(后期计算)的事件。
    • 当骨骼计算完成后触发该事件。
    • 如果你的网格物体组件有物理,它将在骨骼混合回它时触发该事件。
  • 新增内容:通过直接地循环每个骨骼而不是间接地循环,这优化了动画计算。
  • 新增内容:给通知添加标志来阻止他们在专用服务器上触发这些通知。
  • 新增内容:为Bone Modification Mode(骨架修改模式)枚举值添加了有好的显示名称。
  • 新增内容:添加了一个新节点"Bind Cloth To Master Pose Component(混合布料到主要姿势组件)",该节点使得从属的骨架网格物体组件重新使用主组件的模拟数据,而不是单独地处理布料。
  • 新增内容:添加了新节点"Is Section Using Cloth(选中项是否使用布料)"节点,用于查询骨架网格物体部分是否有布料数据。
  • 新增内容:添加了参考姿势切换工具条
    • 同时现在您可以在参考姿势应用过程中进行编辑。
  • 新增内容:添加了对Smart Name(智能名称)曲线的排序。
  • 新增内容:添加了对“蒙太奇-到-蒙太奇”同步的支持。
    • 蒙太奇仅能具有一个领导者。一个领导者可以有多个跟随者。
    • 在该帧更新任何领导者或跟随者 *之前* 执行同步。
    • 从本质上是在一帧后执行的,所以蒙太奇之间的更新顺序不是问题。
  • 新增内容:允许骨架控制通过实现GetWidgetCoordinateSystem来指定它们倾向显示小工具所使用的坐标空间。
  • 新增内容:依赖预加载系统的第一遍处理。
    • 使用烘培过程中创建的资源信息来决定所有包的依赖,并在要求的包之前加载它们。当使用包文件时,包文件将排序以匹配这个加载顺序,从而大大地降低搜索时间。
    • 目前默认是禁用的,但可以在控制台中使用"s.PreloadPackageDependencies 1" 启用。
  • 新增内容:LookAt Control(查找控制)目前支持在本地空间中查找坐标轴。
  • 新增内容:开始将动画节点从Engine(引擎)移动到新的AnimGraphRuntime(动画图表运行时系统)模块中。
  • 新增内容:支持在动画许列的 开始处/结束处 附加帧。
    • 同时修复了重新排序通知及曲线关键帧的问题。
  • 新增内容:在DO_CHECK测试中AnimationBlueprint(动画蓝图)节点更新/计算过程中封装了重入检测,以便它们可以编译到发行版本中。
  • FAnimationRuntime中的叠加混合优化
    • 将::ApplyAdditiveSequence替换为了::AccumulateAdditivePose。没有姿势副本,权重的快速通道 ==1。
    • 将::AccumulateAdditivePose替换为了::AccumulateMeshSpaceRotationAdditiveToLocalPose。没有姿势副本,少分配了一个姿势,权重的快速通道==1,网格物体空间变换仅在旋转部分上进行,而不是完全的FTransform。
    • 添加了::ConvertMeshRotationPoseToLocalSpace。
  • 当导入时,现在动画及关节名称支持 UTF8 。
  • 动画录制给出默认路径及可用名称。
  • 修改以便您可以在构建脚本中使用MasterPoseComponent(主要姿势组件)。
    • 现在,MasterPoseComponent可以正确地序列化
  • 修改了动画统计数据名称,以反映它们当前是在主要游戏线程上运行还是在工作器线程上运行。
  • 修改了新的NativeNotify(原生通知)菜单,以显示本地化的类名称
  • 修复了在蓝图空间中当引用的动画序列被删除时发生崩溃的问题。
  • 修复了在延迟的动作管理器不能正确删除动作的地方出现缺陷的问题。
  • 修复了当切换序列播放器节点的动画到一个短于当前动画的动画时由于错误的当前时间导致出现的崩溃问题。
  • 修复了当编译畸形的动画蓝图(包含由于删除代码或禁用插件而导致的缺失节点)时及当在编译之前添加图表验证时出现的崩溃问题。
  • 修复了当导入动画时添加额外帧的问题。
  • 修复了当使用‘点击来重新编译动画蓝图’提示而不是编译按钮时 不显示/不刷新 消息日志的问题。
  • 修复了当播放根运动动画时 客户端/服务器 不一致问题。
    • 当蒙太奇结束时,一些剩余的根骨骼运动可以逗留,并且可以用于下轮播放。这导致客户端和服务器之前潜在地产生了位置差别。
    • 如果在根骨骼运动开始时发送一个DualServerMove,服务器可以在客户端上为没有使用根骨骼运动的移动更新根骨骼运动。
  • 修复了动画蓝图编译过程中由于在骨架重新编译期间访问了错误的父类而导致的崩溃问题。
  • 修复了当结构性地修改一些动画蓝图时在重新编译骨架类期间出现崩溃的问题。
  • 修复了当计算具有LOD层次级别的骨架(骨骼)时混合节点出现崩溃的问题。
  • 修复了当启用 Show Uncompressed Bones(显示未压缩骨骼)时出现崩溃的问题。
  • 修复了在SkeletalMeshComponent(骨架网格物体组件)上暂停游戏并使用 "Tick when paused(当暂停时更新)"选项时产生崩溃的问题。
  • 修复了当在蒙太奇中混合叠加型动画和非叠加型动画出现崩溃的问题。
  • 修复了具有无效插槽索引的动画通知连接到蒙太奇中产生相关崩溃的问题。
  • 修复了当导入长度为0的动画时产生除数为0的问题(由rajkosto导致)
  • 修复了当在转换上使用自定义混合时出现错误的状态机权重的问题。
  • 修复了当外部动画发生改变时蒙太奇可连接元素有时丢失片段连接的问题。
  • 修复了在启用AnimUpdateRateOptimizations 和 RootMotionFromMontages的情况下,非人类控制的角色在专用服务器上运行根骨骼动画时比其应有速度快很多的问题。
  • 修复了当第一次在编辑器会话中打开动画蓝图时出现警告但当交互性地重新编译后警告又消失的'幽灵'警告问题。
  • 修复了重新导入受损RetargetBasePose的问题。
  • 修复了初始化顺序变化的缺陷,该缺陷会导致计算在SkeletalMeshComponents发生跳过而不能正常工作。
  • 如果您导入一个添加骨骼到骨架上的网格物体,但是没有保存该骨架,那么它将会导致崩溃。在编辑器中添加了恢复这些骨骼的功能。
  • 对骨骼引用的 边距/字体 及骨架控制的alpha 缩放比例/偏移 的风格进行了小修复。
  • 删除了QuerySupportedSockets中围绕GetActiveSocketList 的WITH_EDITOR 定义,以便QuerySupportedSockets 的行为在编辑器和非编辑器版本中一致。
  • 重新制作了动画轨迹片段循环逻辑以减少浮点错误问题。
  • 测试
  • 当骨架检测到不一致的层次结构,它将尝试修复。您将会注意到融合骨骼处理时有错误信息。
    • 当该信息弹出时,请重新保存骨架。
  • 当导航一个对象时,‘移动到’对象按钮功能可以正常工作。

音频

  • 新增内容:通过一个新的Engine.ini文本域添加了设置每个平台的音量最大值的功能。
  • 新增内容:改进了游戏统计数据音频API
    • 新的Spawn at Location(在位置处生成)函数返回一个音频组件,使得可以像操作Attached(附加的)音效那样操作已播放的音效。
    • Play at Location(在位置处播放)功能仍然不返回音频组件,应该用于一次性音效。
    • 给Location和Attached API添加了Rotation (旋转度),以便可以指定朝向,使得非球形衰减形状也能正常工作。
    • PlayAttached 重命名为Spawn Attached。
    • 现在音效和对话API是一致的。
  • 修复了当使用混响、EQ或音频特效时由于分离及融合音频导致在Mac平台上出现音量差异的问题。
    • 为音频单元添加了低通滤波器以尽量达到PC音频水平。
  • 修复使用适当的 线性-到-分贝等式在Android平台上设置音量的功能。
  • 修复了当激活的音效数量超过可用音频单元数量时Mac上出现Core Audio API(核心音频API)崩溃的问题。

自动化

  • 新增内容:基本的光照测试已经从 'General Editor Test(综合编辑器测试)'中分离出来。
    • 它们是: "System.Promotion.Editor.Lighting.Place Scale Rotate", "System.Promotion.Editor.Lighting.Modify Properties", and "System.Promotion.Editor.Lighting.Duplicate and Copy Paste".
  • 新增内容:当发生任何失败时 'General Editor Test(综合编辑器测试)'现在将在退出时产生非零退出代码(1)。
  • 新增内容:材质编辑器模块中现在包含了材质编辑器改进测试。完全导出的UMaterialGraph。
  • 新增内容:粒子系统改进测试现在包含在Cascade 模块中。
  • 新增内容:几何体自动化测试已经从'General Editor Tests(综合编辑器测试)'自动化测试中分离出来。它现在是:"System.Promotion.Editor.Geometry Validation
  • 新增内容:UAT和UBT将不再等待全局互斥,而是立即失败。之前,每个实例将连续地排队等待,隐藏了该命令实际上没有执行的事实。
  • 修复了如果虚幻引擎4工作区直接挂载到了一个驱动器号(也就是,具有N:\Engine等)上时UAT基类路径无效的缺陷。在这种情况中,它不是有效的C#路径,所以会尝试设置它为CWD。N:\在该情形中是正确路径。

蓝图

  • 新增内容:为静态网格物体添加了蓝图暴露的GetBoundingBox(获得边界框)函数。
  • 新增内容:给蓝图数学库为变换添加了Equals(等于)和NearlyEquals (约定于)函数。
  • 新增内容:添加了TimeSecondsToString 函数以将浮点型时间转换为格式化的字符串。
  • 新增内容:添加了一个节点图标以表示蓝图脚本中引用的仅针对编辑器的属性。
    • 比如像角色的箭头组件或目标点的精灵图标这样的属性。
    • 修复了在已烘培的版本中引用这些属性时发生的崩溃问题(替换为一个记录到日志中的异常)。
  • 新增内容:添加了编辑器.ini配置设置项,这些项可以隐藏特定的蓝图菜单项。
    • 使用"[BlueprintEditor.Menu]" 部分的标题来在.ini文件中添加排除项。
    • 在该.ini文件中,特定的域可以像这样隐藏:+BlueprintHiddenFields="/Script/Engine.Actor:GetTransform"
    • 在该.ini文件中,特定的节点可以像这样隐藏:+BlueprintHiddenNodes="/Script/BlueprintGraph.K2Node_IfThenElse"
  • 新增内容:添加了FMath::GetMapRangeValueUnclamped,并将GetMappedRangeValue重命名为GetMappedRangeValueClamped。
  • 新增内容:添加了InvertTransform蓝图节点。
  • 新增内容:添加了在声明参数之前使用标记 UPARAM(DisplayName="一个简洁的名字")表示每个函数的DisplayName(显示名称)的支持。
    • 这使得不必使用K2ParamRedirect重命名参数,并且使用的名称是非法的C++标识符。
    • UFUNCTION(BlueprintPure, ...)的名称。
    • static void DoSomethingAwesome(UPARAM(DisplayName="Awesome Param") float BoringParam);
  • 新增内容:添加了从蓝图关联菜单中过滤库函数及宏的功能。
  • 新增内容:添加了选择(Select)节点相关的各种改进。节点不会返回输入参数的副本,而是返回到那个输入的引用。
  • 新增内容:已经添加了"InternalUseParam" UFUNCTION()元素,以支持将函数参数标记为仅内部应用的参数(引脚将是隐藏的且不连接的)。
  • 新增内容:Blueprint Timer API (蓝图计时器API)改进
    • SetTimer by Delegate现在通过其他函数同计时器交互时会返回一个Timer Handle以供使用。通过手柄同计时器交互既大大地提高了性能,也允许相同的计时器代理同时用于多个计时器。
    • SetTimer by Name及所有按名称的计时器操作函数及代理都已废弃。
  • 新增内容:蓝图 - 时间轴用户界面更新
    • 使得单独的轨迹可合并。
    • 添加了用于关闭单独轨迹的视图同步的选项。
    • 总体间距及布局调整。
  • 新增内容:现在可以通过点击变量的类型图标或右击来启动一个数组来在“我的蓝图”窗口中修改变量类型。
  • 新增内容:可以在“我的蓝图”窗口中拖拽自定义事件来添加到该事件的函数调用。
  • 新增内容:可以在蓝图函数图表(或其他子图表)中将引脚提升为局部变量。
  • 新增内容:可以在蓝图的成员变量上设置"AdvancedDisplay(高级显示)"标志。
  • 新增内容:CreateEvent节点现在更加用户友好 - 它们将使用当前的蓝图作为默认情境,不会再建议用户为情境选择一个资源。
  • 新增内容:修复了仅包含数据的蓝图调用它们父项的构建脚本时发生崩溃的问题。
  • 新增内容:修复了蓝图库中缺失__WorldContext引脚的错误。
  • 新增内容:现在将Game/URL Options(游戏/URL 选项)解析节点暴露给了蓝图。
  • 新增内容:改进了节点的详细信息面板:Make、Break 及 Set Member。属性按类分组。改进了后期处理设置。
  • 新增内容:改进了是很么时候使用现有图表及什么时候打开一个新图表的逻辑。
    • 当在一个图表中双击一个节点时现在所有子图表将在父项中打开(比如,动画状态及规则,而不是仅在ubergraph中合并子图表)。
    • 当按住Shift键并在“我的蓝图”树结构中点击一项时将强制创建一个新选卡,而不是使用已经打开的选卡。
  • 新增内容:使得蓝图中的布尔型引脚更加重要。
  • 新增内容:移动KismetNodeInfoContext.h,时期可以在GraphEditor模块的外面进行公开访问。
  • 新增内容:节点"Set member in .."有一个针对后期修改结构体的输出引脚。
  • 新增内容:Object Reference、Class Reference、Asset ID、Asset Class ID引脚类型已经被分拆到菜单项的子菜单中,以便减少在列表视图中重复这些菜单项。
  • 新增内容:GetClass 函数调用节点的输入引脚子类型现在连接到输入引脚的子类型上。
  • 新增内容:这个修改为蓝图注释节点增加了多行编辑支持。
    • 要想在注释标题输入新的一行,请使用shift + 回车键。
  • 新增内容:这个修改将NOR和NAND节点支持暴露给了蓝图。
    • 这些节点可以在蓝图动作菜单的 数学/布尔型 部分找到。
  • "Color(颜色)"名称不再限制长度。
  • 为向量长度函数添加了“magnitude”关键字。
  • 从编辑器创建的结构体中添加或删除成员时,当使用那个蓝图的结构体已保存但没有重新编译时,不会再会导致‘’innapropriate outermost(不恰当的最外层)‘’警告。
  • 为MakeArray节点添加了引脚,将会赋予新引脚一个默认值。
  • 当情境失败(访问空数据错误)后,返回数据会被正确清除。
  • 为"Select" 节点索引引脚附加了一个布尔型数据,将强制该节点在仅有两个选项时更新它的引脚名称。
  • 不能在从其他蓝图中调用坐标轴映射值getter(获取)函数。
  • Blueprint Diff Tool(蓝图比较工具)不再具有在组件、蓝图及默认视图间切换的按钮。导航现在通过差异列表完成。
  • 蓝图编辑器关联菜单过滤功能变得更加高效。
  • 组件型的蓝图成员变量不再由SCS生成,现在暴露的变量一般都具有详情选项。
  • 发生Access None错误会触发断点。
  • 对于标记为BlueprintImplementableEvent的C++函数及在蓝图中覆盖为函数图表的C++函数,当尝试将这些函数拖拽到图表中来通知用户那个函数不是BlueprintCallable(蓝图可调用的)时,将会显示一个错误。
  • 当复制Call Function节点或复制整个蓝图时不会再修改函数引用。
  • 如果结构体没有任何有效属性,将不能在蓝图节点上分割引脚。
  • 现在,可以在蓝图中Make(创建)及Break(中断) DateTime 结构体。
  • 可以右击合并的图表来添加作为外部函数图表一部分的局部变量。
  • 可以右击任何节点来搜索引用他的项。仅在当前蓝图中进行初始搜索。
  • 可以在数学表达式节点中使用unicode 字符。
    • 所有unicode “字符”现在都可用于 变量/输入/输出 名称。
    • 这没有延伸到标记,仅下划线标记仍然允许使用。
  • 时间轴轨迹不能命名为同节点上的任何原生引脚一样的名称。
    • 任何之前由该功能破坏的节点应该都能再次正常工作。
  • 修改Select节点上的引脚类型将会在设置新引脚类型之前在那个选项上重新组合所有子引脚和结果引脚。
  • 修改 "Spawn Actor from Class"节点的类时,如果Result引脚的连接仍然有效,那么将不会断开这些连接。
  • 附加到默认场景根节点的蓝图类资源中的子组件在重新设置父项为同样具有场景根节点的蓝图类时将不会再丢失。
  • 在中间图表打开时编译蓝图将不会再导致崩溃。
  • 使用缺失属性的经过验证的Get节点编译蓝图将不会再导致崩溃。
  • 将函数结果节点数组引脚连接到一个变更路线节点上将不会再阻止该节点使用其所有输出参数进行编译。
  • 使用SelfPin的接口引脚复制粘帖 K2Node_CallFunction将不会再将SelfPin修改为正常的Object Reference引脚。
  • 修复了当‘在蓝图中搜索’功能正在搜索所有蓝图时编译蓝图出现的崩溃问题。
  • 修复了当在数学表达式中使用 "!=" 操作符比较向量出现的崩溃问题。
  • 当蓝图中没有其他事件时删除一个自定义事件,将不会导致不允许您将蓝图中放置的其他项目重命名为同删除的自定义事件一样的名称。
  • 从SCS编辑器中拖拽并放置一个组件到图表中且当图表是相同蓝图的一部分时将不会再错误地报告该图表超出范围。
  • 从‘我的蓝图’选卡中拖拽并放置变量将不会再默认假设那个变量是只读的。
  • 复制包含具有Text引脚的节点的函数或宏图表时将不会再错误地将原始引脚和复制的引脚相连使得一个引脚上的改变看上去会影响另一个。
  • 在分离变换引脚时复制 "Add Scene Component"节点将不会再使得该变换引脚在复制的节点上可见。
  • 编辑在隐藏的子关卡中实例化的蓝图将不会再重置隐藏的实例上的变换。
  • 确保在序列化基于Actor的蓝图类资源后不会设置'bExchangedRoles' 。
  • 检查枚举数组引脚的值将会显示枚举值的显示名称。
  • 修复了当构建蓝图类实例时组件注册过程中出现潜在崩溃的问题。
  • 修复了为旧的蓝图类资源进行组件模板序列化过程中加载时出现潜在崩溃的问题。
  • 修复了当从一个Actor实例向另一个Actor复制USTRUCTs数组时发生潜在崩溃的问题。
  • 修复了当在蓝图编辑器中删除场景根组件可能会导致蓝图类后期重构的实例出现错误状态的问题。
  • 修复了当执行类型转换为一个没有加载的类时(可能由于引用未加载模块中的一个类)出现在崩溃的问题。
  • 修复了当重新加载包含由按名称匹配原型但按类型不匹配原型的构造组件实例的地图时出现崩溃的问题。
  • 修复了当编辑嵌套在另一个实例化变量中的实例化变量时出现崩溃的问题。
  • 修复了当在蓝图类编辑器中编辑“原生”组件模板(也就是继承C++类的模板)时材质切换传播的问题。
  • 修复了在材质编辑器中针对继承的组件模板的插槽浏览问题。
  • 修复了当修改了原生父类的继承关系后旧的组件仍然存在于蓝图类中的问题。
  • 修复了向量坐标轴输入事件节点显示浮点型输出引脚而不是向量型引脚的问题。
  • 修复了阻止新组件不能同已删除组件(编译之前)具有相同名称的缺陷。
  • 修复了蓝图视口中阻止复制、克隆及重命名热键正常工作的缺陷。
  • 修复了蓝图菜单项的某些关键字被忽略的缺陷。
  • 修复了在您选择“启动”之前某些已修改的蓝图没有被编译的缺陷。
  • 修复了从具有HideCategories元数据的蓝图中隐藏静态函数的缺陷。
  • 修复了一个循环的 父类/子类 依赖的缺陷,当编译时继承的组件可能会被废弃。
  • 修复了一个 父类/子类 循环依赖的缺陷,在该缺陷中,子类的覆盖属性值在加载时会被清除。
  • 修复了当重命名局部变量后如果其他函数具有同样名称的局部变量则出现崩溃的缺陷。
  • 修复了当传入一个默认对象BlueprintSessionResult给 "Join Session" 蓝图节点时发生的崩溃问题。现在不会发生崩溃,而是连接失败,执行程序将从"On Failure" 引脚开始继续执行。
  • 修复了当编译一个具有组件的Actor蓝图后进行取消动作时发生崩溃的问题。
  • 修复了在涉及到Actor和ActorComponent蓝图的特定循环依赖情形中发生的崩溃问题。
  • 修复了当将鼠标悬停到在其构建脚本中添加了组件的蓝图实例的"Edit Blueprint(编辑蓝图)"按钮上时发生崩溃的问题。
  • 修复了当加载依赖禁用的插件的蓝图时发生崩溃的问题。
  • 修复了当在同设置GameMode相关的蓝图中删除一个 事件/函数 参数时将会发生崩溃的问题。
  • 修复了当删除一个应用了’调试查看‘的引脚时发生崩溃的问题。
  • 修复了当一个地图的关卡蓝图打开时删除该地图发生崩溃的问题。
  • 修复了当动态载入子关卡后重新启动关卡时发生崩溃的问题。
  • 修复了涉及到宏库的循环依赖缺陷,在该缺陷中蓝图加载会带有虚假错误。
  • 修复了在重构基于Actor的蓝图类实例过程中潜在地无法恢复组件实例数据的问题。
  • 修复了当从宏中使用输出引脚时 Increment/Decrement宏会出现两次的问题。
  • 修复了当前场景中的蓝图类实例上的某些组件属性值可以重置为重新编译蓝图类的结果的问题。
  • 修复了当编译数组型Local Variable时出现崩溃的问题。
  • 修复了当编译数组型Local Variable时出现崩溃的问题。
  • 修复了当使用蓝图编辑器内选中的多个组件进行修改时发生崩溃的问题。
  • 修复了在已经选择了另一个类后在Spawn Actor From Class节点上选择"None" 类类型时出现崩溃的问题。
  • 修复了当使用Set节点从无效对象复制结构体值时发生崩溃的问题。
  • 修复了当2个空的UserDefinedEnum具有相同名称时发生崩溃的问题。
  • 修复使得减量整型宏节点真正地进行渐减。
  • 修复了蓝图编辑器中组件树中组件重复的问题。
  • 修复了编辑InstanceStaticMeshComponent和HierarchicalInstancedStaticMeshComponent的问题。
  • 修复了暴露的APEX布料函数没有出现在蓝图编辑器中的问题。
  • 修复了Get变量节点上"Convert to validated Get" 和"Convert to pure Get" 选项上错误的工具提示信息。
  • 修复了如果在加载时现有蓝图类默认对象或实例包含一个或多个原生(C++定义的)组件子对象的一个或多个无效的属性值会出现的问题。
  • 修复了当顶部插槽没有内容时图表节点冒泡渲染错误的问题。
  • 修复了当在蓝图中隐藏类别时不能总是隐藏所有预期节点的问题。
  • 修复了节点标题过期的问题(比如,动画骨架控制),通过当图表节点上的属性被修改时强制更新节点标题。
  • 修复了当重新设置一个蓝图父项后Target引脚无效的问题。
  • 修复了当用户拖拽某个用户界面元素时蓝图比较工具发生崩溃的问题。
  • 修复了当使用到另一个蓝图的引用替换到一个蓝图的引用时导致发生‘致命错误’的问题。
  • 修复了'在蓝图中查找'时发生崩溃的问题,由于修改FString所带来的影响。
  • 从原生函数生成的隐藏的引脚将正确地使用它们的默认值。
  • 改进了Pin Type Selector(引脚类型选择器)过滤器,以便单词顺序及大小写不会有影响。
  • 在引脚类型选择器下拉菜单中,按下shift键将不会再将光标移动回到搜索框的起始处,按下‘向下’和‘向上’箭头键将再次导航列表视图。
  • 输入动作和按键事件将不能再放置在蓝图函数中。
  • Input Touch(输入触摸)事件节点不能放置在函数或宏图表中。
  • 蓝图函数中的局部变量现在将设置为它们类型所代表的用户定义的结构体的默认值。
  • 没有任何参数的数学表达式函数仍然在Math Expression节点中提供他们的右括号。
  • Math Expression(数学表达式)节点将再次可以通过函数显示名称进行正确查找。
  • Math Expression当在蓝图上进行一次比较时将不再总是呈现为已修改状态。
    • 改进了差异比较支持,使得可以查看两个版本之间表达式的变化。
  • MathExpression节点将不会将函数输入作为通过getter节点访问的有效变量。
  • 向蓝图暴露了WeakObjectPtr相关的更加严格的限制。没有WeakObjectPtr数组。
  • 在蓝图枚举值引脚上,当鼠标悬停到下拉菜单上时将会出现工具提示信息。
  • 在选中的节点上,设置Index引脚的类型将总是会将该选项引脚的引脚名称改为 "False" 和"True"。
  • 向蓝图暴露了FMath::FixedTurn (由MatzeOGH提供)
  • 阻止UK2Node::AutowireNode中隐藏的引脚自动连接到传入的Wildcard(通配符)引脚上。
    • 这可以防止出现当拖拽它们时通配符连接到函数的“self”引脚上。
  • 当连接了不兼容的引脚时产生适当的编译器错误。
  • 重新编译具有Component(组件)父类的蓝图现在可以正确地重新注册关卡中蓝图组件的任何实例。之前存在的实例可能会消失。
  • 当编译具有无效CallFunction或CallParentFunction节点的蓝图时删除了一个断言判断。
  • 在蓝图编辑器中重命名一个组件,然后添加一个同类型的新组件,将不会再导致损坏的默认编辑。
  • 使用具有隐藏值的枚举值选择节点将不会再错误地匹配Option引脚连接到错误的枚举值上。
  • 首次为Select节点选择一种引脚类型将不会失败。
  • 在User Defined Struct(用户定义的结构体)中为Text(文本)属性设置默认值或者在蓝图中为Local Variable(局部变量)属性设置默认值将正确地分配该值并在编辑器的实例之间保存该值。
  • 在Function Result节点上分离引脚将不会再尝试将分离的引脚作为结果引脚编译。
  • 如果已经通过分割一个结构体引脚生成了该引脚,  "Set" 变量节点上的"Get"引脚现在将显示引脚的名称。
  • 非成员变量(父类中的变量或者外部成员变量引用)的蓝图中的详细信息视图将不再将各种详细信息不可编辑选项显示为可编辑。
  • 在“我的蓝图”窗口中现在显示眼睛图标来标识用户创建的组件变量为可编辑的。
  • Pin Type Selector(引脚类型选择器)中将会显示子菜单项的工具提示信息。
  • 调整了 "Expand Nodes(展开节点)"菜单选项,以更好地描述该操作的作用。
  • 当在函数图表中拖拽一个引脚时,如果本地变量节点对于连接有效,那么它们将不再经过关联菜单过滤来进行放置。
  • 当索引所有蓝图时,按下“No”将正确地跳过检测所有未索引的蓝图。
  • 当加载一种不匹配的蓝图引脚类型时不会再断开连接,相反,我们依赖编译错误来防止潜在已损坏蓝图执行错误的代码。
  • 当函数的签名更新时,事件图表中它的实例也会正确更新。

Core(核心)

  • 新增内容:具有相同名称但不同版本的插件现在可以放置在多个游戏项目中。这使得具有多个项目的工作室在不同版本间应用相同的插件,只要该插件是此游戏项目的一部分即可。
  • 新增内容:添加了控制台变量来在运行时控制TimeBetweenPurgingPendingKillObjects 。
  • 新增内容:添加了对特定包的大量异步加载支持。
  • 新增内容:添加了命令行参数来转存命令行统计数据到日志文件中。
    • -LoadTimeStatsForCommandlet转存所有加载时间统计数据(LinkerLoad和AsyncLoad 组)
  • 新增内容:添加了命令行参数("-fullcrashdump")以强制任何窗口崩溃迷你转储能包含所有内存信息。
  • 新增内容:向版本中添加了关于用于激活UnrealHeaderTool和持续时间的命令行的日志。
  • 新增内容:添加了模块路径缓存以改进编辑器启动时间。
  • 新增内容:添加了预分配内存池,当系统耗尽内存时会释放该内存池以正确地处理这种崩溃。
  • 新增内容:添加了'stat slow' 控制台命令。
    • 显示了游戏及渲染线程统计数据
    • 可以取入两个可选参数 -ms=x -depth=n,这些参数分别指出了最低统计数据持续时间及显示的层次结构深度。
  • 新增内容:添加了当工作线程位于垃圾回收锁定中时强制进行垃圾回收的功能。
    • 在该情形中,主线程将会被阻断并等待,直到解锁为止。
    • 这可以在垃圾回收部分的Project Settings(项目设置)下进行配置。
  • 新增内容:为AutomationTool(动画工具)的BuildCookRun命令添加了两个参数。
    • IgnoreCookErrors - 忽略所有烘培错误并继续部署项目
    • FastCook - 传入快速烘培参数给烘培器,该参数可以基于每个项目处理。
  • 新增内容:修改文件阅读器使用异步 输入/输出,使得在基于Windows的平台上读取文件时加速1.6倍。
  • 新增内容:CMake项目生成器现在可以在Mac和Windows上工作。
    • 传入-cmakefile 给GenerateProjectFiles并使用CLion或其他集成开发环境来编译虚幻引擎4。
  • 新增内容:DirectoryWatcher现在可以选择性地忽略子目录中的改变(Windows和Linux上的处理;Mac实现忽略该标志)。
  • 新增内容:将垃圾回收设置暴露给了Garbage Collection(垃圾回收)类目下的Project Settings(项目设置)。
  • 新增内容:在Streaming部分下将Streaming设置暴露给Project Settings(项目设置)。
  • 新增内容:改进了缺少包含源资源名称的导入信息。
  • 新增内容:改进了Unreal Build Tool中的清理命令。现在它将正确地清理模块,不再由项目引用。
  • 新增内容:让zlib压缩也是用标准的虚化内存分配器,这使得更容易跟踪他们。
  • 新增内容:现在当引擎崩溃时将报告内存统计数据。
  • 新增内容:当引擎由于顺坏的文件发生崩溃时会有更详细的日志消息。
  • 新增内容:优化了事务处理,当执行ObjectRecord预加载时节省了不必要的迭代。
  • 新增内容:PR #1348: 通过实现三个微优化改进了垃圾回收的性能。(由pzurita贡献)
  • 新增内容:在大量异步加载之前通过在内存中查找对象略微优化了对象加载过程。
  • 新增内容:对结构体序列化进行了小优化。
    • 为不可变结构体添加了原生序列化。
    • 为各种数学类添加了POD标志。
  • 新增内容:TAssetPtr现在支持从子类到基类的会话。
  • 新增内容:减少了编辑器中显示的日志信息的量。被删除的日志现在仅写入到日志文件中。
  • 修复了调试版本中FLinkerLoad中的内存泄露问题,永远不会从活跃的连接加载器中清除其自身。
  • 做了几个修复,使得Window上报告的崩溃更加可靠。
  • 为延迟连接器删除添加了一个系统以修复异步加载过程中的崩溃问题。
  • 为XmlFile写入器添加了属性序列化。
  • 添加了代码以在工作线程发生崩溃时强制退出。
  • 在重定向器ini部分为源名称冲突添加了日志错误信息。
  • 总是使用Engine目录,而不是Process目录来在Windows上定位可执行文件。
  • 改为"CreateExport:  Failed to load Outer..."消息发送到消息日志中,以便当运行编辑器时用户可以获得更好的外观。
  • 修改了启动时关于缺失配置文件的信息,使其更加精确。
  • 禁用了启动程序版本的运行时崩溃处理,以减少内存占用。
    • 调用栈将仍由CrashReporter处理。
  • 现在,在配置ini文件中编辑"Project Settings(项目设置)"仅编辑一个值。
    • Arrays(数组)除外,它需要一个全新的实现。
  • EPackageFlags & EObjectFlags在调试器中作为一组枚举值正确地查看,比如RF_Public | RF_Transactional,而不仅仅是作为原始的数字值。
  • 修复了“约等于”数学比较在值精确相等及公差为0时不返回true的问题,
  • 修复了TBB 分配器中导致排列的分配错误地重叠的问题。
  • 修复了CurveBase上的GetValueRange函数,给出Min(最小值)而不是Max(最大值)。
    • #git author MiniTurtle
  • 修复了在分析器中加载完ue4stats文件后并不总是启用游戏线程图表的缺陷。
  • 修复了分析器不能通过用户界面执行连续两次捕获的缺陷。
  • 修复了当重命名了由于错误而不能重命名了的地图或资源时发生崩溃的问题。
  • 修复了当在窗口中使用-nothreading运行游戏时OnlineAsyncTaskManagerNull中发生崩溃的问题。
  • 修复了在烘培的游戏中动态载入关卡后退出时发生崩溃的问题。
  • 修复了异步加载由检测现有连接器的断言。
  • 修复了当关闭游戏时的间歇性死锁问题。
  • 修复了打包时安装的插件会导致编译仅包含内容的游戏的问题。
  • 修复了热重载后的蓝图编译错误。
  • 修复了当进程意外终止时受损的UnrealBuildTool依赖文件崩溃的问题。
  • 修复了当用户尝试添加模块依赖时可能发生编译失败的问题。
  • 修复了由于解析某些核心UObject系统的随机顺序导致在打包的游戏中退出时发生崩溃的问题。
  • 修复了Windows 8和10中崩溃报告及引擎无法报告正确的windows版本的问题。
  • 修复了FInterpCurve 序列化并修复了EvalDerivative和EvalSecondDerivative的边界情况结果。
  • 修复了重定向器资源“加载失败”消息在编辑器中的某些情况下可能出现,导致重定向器资源不可用及不可固定的问题。
  • 修复了当蓝图节点包含了到类默认对象的应用时热重载后保存失败的问题。
  • 修复了热重载后不时发生的音频崩溃。
  • 修复了检测游戏项目的目标的搜索顺序。
  • 修复了当运行仅包含打包内容的游戏时插件的搜索路径。
  • 修复了当用户的Windows插件名称包含非ASCII字符时UnrealBuildTool无法获得环境变量的问题。
  • 修复了当.Build.cs文件改变UnrealBuildTool无法更新 makefile 的问题。
  • 修复了当.uproject文件改变UnrealBuildTool无法更新 makefile 的问题。
  • 修复了如果解析步骤有其他错误UnrealHeaderTool在某些罕见情形下发生崩溃的问题。
  • 修复了UnrealSwarm "通道已注册"错误,来记录异常发生的实际原因,因为到目前为止它还非常容易令人