虚幻引擎4.20版本说明

虚幻引擎4.20版本说明

Windows
MacOS
Linux
本页面的内容

虚幻引擎4.20版本说明

image alt text

全新内容

我们在虚幻引擎 4.20 版本兑现了承诺,为广大开发者们带来众望所归的可扩展工具。赶紧来使用吧,创造前瞻性的移动游戏,探索Niagara的强大功能,用数字人类(digital humans)实现栩栩如生的角色,并充分利用各个平台的工作流优化。

开发者 可以利用虚幻引擎打造出美轮美奂的场景和栩栩如生的角色,真实度将达到无可比拟的程度。全新的Niagara粒子编辑器能够为项目的各个方面添加令人惊叹的细节,让项目的整体视觉效果更上一层楼。深入了解由全新“数字人类(Digital Humans)”技术打造的“Meet Mike”和“Siren”演示,将角色的真实度大幅提升。此外,还可以利用全新的影视级景深(Cinematic Depth of Field)功能来实时实现电影级别的摄像机效果。

虚幻引擎为您提供了各种工具,可以自定义您心仪风格和工作流的创建过程,使您真正能够自由创作。您可以使用全新的编辑器脚本和自动库来对工具和工作流进行完全的自定义。还可以对Actor和内容浏览器快捷菜单进行脚本延展,添加新操作来应用到Actor或资源,让设计师和美术师的工作更加轻松。

加入经严格测试的移动平台和主机支持后,您便可以 创建兼容所有设备的版本 ,为用户带来全平台的体验。Epic在开发Fortnite移动版本时对虚幻引擎进行了优化,使其更加适合移动游戏开发。我们进行了大量性能优化,包括软硬件遮蔽查询,减少硬件需要执行的工作量。代理LOD现在已能够用于生产,它能进一步减少渲染频率较高的几何体的复杂度。

除Epic的更新外,此版本还包含了 GitHub虚幻引擎开发者社区提交的165项改良!特此对虚幻引擎4.20版本的每位贡献者表达诚挚谢意:

Adam Moss (adamnv), Akihiro Kayama (kayama-shift), Alan Edwardes (alanedwardes), Alan Liu (PicaroonX), Andrew (XenonicDev), Andrew Haselgrove (Dimpl), Anton Rassadin (Antonrr), arkiruthis, Begounet, Brandon Wilson (Brandon-Wilson), c4tnt, Changmin (cmheo), Christian Loock (Brainshack), Clinton Freeman (freemancw), Daniel Assuncao (dani9bma), David Payne (dwrpayne), Deep Silver Dambuster Studios (DSDambuster), Derek van Vliet (derekvanvliet), Eduard Gelbling (NachtMahr87), frankie-dipietro-epic, Gautier Boëda (Goutye), George Erfesoglou (nonlin), Giovanny Gutiérrez (bakjos), Gregor Gullwi (ggsharkmob), Hannah Gamiel (hgamiel), Hyuk Kim (Hybrid0), Ibraheem Alhashim (ialhashim), Ilya (ill), Jacob Nelson (JacobNelsonGames), Jaden Evanger (cyberblaststudios), Jared Taylor (Vaei), Jesse Yeh (jesseyeh), Jia Li (shrimpy56), Jørgen P. Tjernø (jorgenpt), June Rhodes (hach-que), Junichi Kimura (junkimu), Kalle Hämäläinen (kallehamalainen), kinolaev, Kory Postma (korypostma), krill-o-tron, Kryofenix, Lallapallooza, Layla (aylaylay), Lee Berger (IntegralLee), Leon Rosengarten (lion03), Lirrec, malavon, Marat Radchenko (slonopotamus), Marat Yakupov (moadib), Mathias L. Baumann (Marenz), Matt Hoffman (LordNed), Matthew Davey (reapazor), Maxime Turmel (maxtunel), Michael Allar (Allar), Michael Kösel (TheCodez), Michael Puskas (Mmpuskas), Mikayla Hutchinson (mhutch), mimattr, Mitsuhiro Koga (shiena), Muhammad A.Moniem (mamoniem), nakapon, Nicolas Lebedenco (nlebedenco), Paul Eremeeff (PaulEremeeff), Phillip Baxter (PhilBax), projectgheist, Rama (EverNewJoy), redfeatherplusplus, Rei-halycon, Robert Khalikov (nbjk667), Roman Chehowski (RChehowski), S-Marais, Sam Bonifacio (Acren), Satheesh (ryanjon2040), Scott Freeman (gsfreema), SculptrVR, Sebastian Aaltonen, Sébastien Rombauts (SRombauts), Seokmin Hong (SeokminHong), Sertaç Ogan (SertacOgan), stephenwhittle, Temaran, Thomas Miller (tmiv), Trond Abusdal (trond), TWIDan, Tyler (tstaples), Usagi Ito (usagi), yama2akira, Yang Xiangyun (pdlogingithub), yehaike, Zachary Burke (error454)

主要功能

全新内容:移动平台发布的优化和改良

虚幻引擎4.20版将带来针对Fortnite iOS和Android开发的100项移动平台优化,帮助开发者更轻松的发布游戏,并对游戏玩法进行跨平台的无缝优化。主要改良包括Android调试改良、移动平台地形改良以及移动平台遮挡查询。

image alt text

移动平台硬件和软件遮挡查询

新版本中,可在支持ES 3.1或Vulkan使用GPU的高端iOS和Android设备上使用硬件遮挡查询。此功能会在支持的设备上默认启用。

软件遮挡查询(Software Occlusion Queries)是一项实验性功能,其使用CPU来从场景中剔除基元组件。它使用的方法较为保守,因此可以在任意移动设备上使用。

image alt text image alt text

左图 - r.Mobile.AllowSoftwareOcclusion 1、r.SO.VisualizeBuffer1;右图 - 渲染冻结显示遮挡的部分

执行以下步骤即可启用软件遮挡查询:

  1. 启用r.Mobile.AllowSoftwareOcclusion 1。

  2. 禁用r.AllowOcclusionQueries 0。

  3. 在静态网格体编辑器中将 “遮挡网格体LOD(LOD for Occluder Mesh)” 设为true后即可将任意基元设为遮挡物。

使用高端移动设备时启用r.SO.VisualizeBuffer 1即可在移动预览器中显示结果。

平台材质数据

在新版本中,您可以使用材质编辑器中新增的平台数据(Platform Stats)窗口 迅速对材质进行分析和优化!您能够看到多个着色器平台和质量等级的数据。我们针对移动平台使用了离线着色器编译器,提供更为准确的指令和纹理使用信息。

image alt text

Android调试改良

无需重新打包UE4项目即可在Android上进行迭代和调试! 编译Android版本时将生成一个可在Android Studio中打开的Gradle项目文件。也可在C++和Java代码中放置断点,并使用Android Studio启动调试会话。也可对C++源代码进行修改并重新编译。开始新调试会话后,Android Studio将注意到变化,并迅速将新的共享库上传到设备中。

移动平台地形改良

新版本中可以在 移动设备上设置无限制的地形材质图层,使移动设备上的地形更加有趣!最优化的情况依然是使用3个图层,但实际上支持任意数量的地形图层,只要有足够的纹理采样器即可。

可使用地形材质中的Feature Level Switch Material节点,创建一个针对所有平台的地形材质

image alt text

1 - 移动平台地形; 2 - PC平台地形

移动平台杂项改良

我们在移动平台发布Fortnite时进行了以下改良,特此将它们纳入虚幻引擎4.20版,以飨各位开发者:

  • 每个平台的最小静态网格体LOD

  • 每个平台的最小骨架网格体LOD

  • 硬件遮挡改良

  • HLOD工具和工作流改良

  • 音频质量节点

  • 音频变化剔除

  • 每个平台的音频下采样

  • 每个平台的音频压缩质量

  • 着色模型调整,与PC更加匹配

  • 反射采集亮度修复

  • 四图层地形支持

  • 地形曲面细分改良

  • 未使用的LOD不产生内存开销,其中包括:

    • 静态网格体

    • 骨架网格体

    • 材质质量级别

    • 草地和植物

    • 高细节组件和网格体

    • 级联中的高细节发射器

  • 基于设备内存的设置

  • 材质内存缩减

  • 批量资源修改的编辑器脚本编写功能

  • 粒子组件池化

  • 材质参数集更新开销

全新内容:任天堂Switch发布的优化和改良

我们 在打造Fortnite Switch版时进行了大量性能和内存优化,特此分享给虚幻引擎开发者们,提高Switch开发的工作效率!

image alt text

改良和优化包括:

  • 支持动态分辨率和临时上采样

  • 增加控制器输入的低延迟帧同步

  • 强化CPU渲染优化

  • 线程改良

  • 更佳的纹理压缩

  • 支持内存分析

  • 支持对接模式中的1080p后缓冲

  • 以及诸多问题修复!

全新内容:代理LOD改良

全新的 代理LOD工具 已经从 实验性功能 转为 正式功能,可用于开发工作!此工具可减少多边形数量、绘制调用和材质复杂性造成的渲染开销,从而提升性能,使移动和主机平台的开发更加容易!此工具提供了第三方打包Simplygon之外的一个选项,可结合虚幻引擎中的 细节级别(LOD) 系统使用。

代理LOD工具通过以下方法生成更简单的代表物:创建一个低多边形参数化网格体和相关纹理,其与更复杂的源几何体模型集合存在视觉上的相似度。可以降低模型质量时(例如几何体在屏幕上只占几个像素时),则可以在运行时显示此代理。

请注意: 目前只有Windows版本的虚幻编辑器能够使用代理LOD工具。

image alt text

上图中 《Fortnite Battle Royale》 的建筑和停车场均使用 代理LOD工具 打造,使用了 空隙填充(Gap-Filling)硬边切分(Hard-Edge Splitting) 功能。

正式版的代理LOD工具与4.19版本中的实验性版本相比多了数项改良。其中较为重要的是改良了用户对代理几何体上法线的控制;并能够使用空隙填充来自动关闭门窗,生成更简单的代理。

改良法线控制:硬边切分法线

Fortnite的内存使用要求极为苛刻,因此需要高效地使用LOD。对多数代理而言,生成的底色纹理非常小,且未使用法线贴图。此方法需要代理网格体上有高质量的法线,越高越好。

image alt text

图1 - 硬边角度 = 80;图2 - 硬边角度 = 0

上图显示了顶点法线的硬边切分效果。图 2 中的顶点法线非常平滑,其以4.19实验版插件计算。房子底部的黑色区域则代表不足之处。相比之下,图 1中则根据用户设置的硬边切断角显示了硬边顶点法线切分。

除硬边切断角外,新版本中用户还可以指定计算顶点法线的方法,选择 角度权重(Angle Weighted)区域权重(Area Weighted),或 均等权重(Equal Weighted)

空隙填充

代理系统将自动放弃密闭几何体不可应用的结构(例如密闭房子中的内墙或家具)。为达到理想结果,构建或修改源几何体时应考虑到这一点。但由于游戏开发的实际限制,能否做到还是个未知数。要为 几乎密闭 的源网格体生成有效的代理LOD,代理LOD工具可选择使用基于关卡集的膨胀和侵蚀技术来填充空隙。此方法主要用来填充远处建筑物的门窗。

image alt text

图1 - 原始网格体;图2 - 无空隙填充;图3 - 空隙填充

上图显示了空隙填充的使用效果。所有图片皆受到约束,只能使用固定的少量纹理空间。图2是未使用空隙填充的代理LOD在建筑上的效果,其中LOD包含建筑的内部(代价则是存在看不到的三角形和纹素)。图3是同一个建筑使用空隙填充的效果,门窗皆已自动封闭,因此总三角形数量更少,有限的纹理资源也得到了更好的利用。

全新内容:影视级景深

全新的 影视级景深(Cinematic Depth of Field) 功能可助您 在实时环境中实现电影级别的场景渲染!此方法能实现更高的画质,替代原有的循环景深(Circle DoF)法,运行速度也快于Bokeh之类的其他多数景深法。影视级景深制作出的景深效果更加清晰,利用过程Bokeh模拟来提供过场效果。此方法同样支持透明度通道、动态分辨率稳定,也可通过设置来调低主机项目中的效果。

image alt text

image alt text image alt text

左图 - 启用影视级景深; 右图 - 禁用影视级景深

影视级景深默认启用,替代旧版本中在 摄像机(Camera)和后期处理(Post Process) 设置中选择的 循环景深(Circle DoF) 法。

  • 影视级景深支持以下平台

    • D3D11 SM5、D3D12 SM5、Vulkan SM5、PlayStation 4、Xbox One和Mac。

  • 过程Bokeh模拟支持以下功能:

    • 配置光圈的叶片数量。

    • 直接用透镜的最大孔径(最小F-stop)来配置叶片的曲度。

    • 对后期处理体积、摄像机Actor和电影摄像机Actor “摄像机(Camera)” 设置中可用的功能按钮进行配置。

  • 根据项目在硬件上的有限资源,使用r.DOF.*控制台变量进行诸多可自定义的延展性设置。

如需了解更多信息,请查阅景深文档。

全新内容:Niagara视觉效果编辑器(测试功能)

新版本中,Niagara视觉效果(VFX)编辑器作为测试版插件 出现!立即试用该全新视觉效果工具的测试版,它将最终取代虚幻级联功能。立即查看此GD演讲,深入了解我们对Niagara的未来规划。

特别说明: 测试版是开发完成度较高的版本,我们希望用户能多多使用并尽量提出宝贵意见,帮助它成为一项正式的UE4功能。Niagara的测试版 尚无法 用于实际开发工作,我们还需要进行大量性能优化和问题修复。我们殷切希望视效制作者们仍然积极学习使用Niagara并提出宝贵建议,帮助我们把它打造为尽善尽美的VFX编辑器。

如需了解Niagara概览,请观看GDC 2018的展示“用虚幻引擎的Niagara编辑器实现可编程VFX效果”,并阅读Niagara文档。

效果设计和创建改良

image alt text

左图 - 利用动态输入模块的粒子系统;右图 - 动态输入模块

  • 骨架网格体 可以指定其来自表面的发光,可以由材质命名或命名的骨骼影响区域来驱动。

  • 新版本改良了模块上的默认值指定,使调用函数的大量行为使用默认的动态输入。

  • 新版本中,网格体粒子支持角速度。

  • 条带(Ribbon)渲染器已添加光束支持和相应的新模块。

  • 新版本中可对模块之间的依赖性进行定义,用户为堆栈添加较差的配置后将得到通知。此外,用户还可以选择进行 自动修复

  • 新版本对系统发射器和基础发射器进行了多处改良,增强了整体稳定性。

  • 新版本中可通过拖放将模块在堆栈中上下移动。继承的模块无法被移动,因为这将使合并变复杂。

  • 新版本中可在堆栈中启用或禁用模块。这也同样适用于继承。

  • 新版本中 Sequencer蓝图 支持设置Niagara用户命名空间变量。

  • 可通过自定义 HLSL表达式动态输入(图表片段)、到其他 变量 的连接,以及 数值 来驱动参数。

  • 新版本中可选择为粒子设置 固定ID,使其专属于发射器。

  • 可将每种类型的多个渲染器应用到一个发射器。每个实例可以调整其从何处获得给定参数的值。举例而言,一个发射器可以拥有两个sprite渲染器,一个从粒子的位置提取其位置,另一个从粒子的偏移位置提取其位置。

  • Niagara Extras 插件还拥有调试材质,可将诸多逐粒子的参数发送到类对话的显示中。

  • Houdini为Niagara提供了一个简单的CSV导入器,启用了GDC 2018中的演示内容。

  • 自动测试(Automated Testing) 系统中加入了大量Niagara的功能。

用户界面更新

Niagara界面的设计初衷是为了使复杂的效果变得直观,便于创建。它将堆栈隐喻作为合并脚本逻辑块的主要方法。在堆栈中,可以通过 时间轴(Timeline) 来控制随时间变化的效果,还可以通过 参数面板(Parameters Panel) 快捷地访问效果中可用的变量,并借助 属性电子表格(Attribute Spreadsheet) 在效果进行时迅速找到信息并作出响应。

image alt text

新模块

Niagara的所有模块均已更新或重写,支持构建游戏效果中的常用行为,并使用一套固定的代码标准。Niagara堆栈中也加入了全新的UI功能,模拟C++中UProperties的开发者选项,基于其他变量的状态启用行内启用/禁用和变量显示。

GPU模拟

DX11PS4Xbox OneOpenGL(ES3.1)Metal 平台使用时,Niagara支持 GPU 模拟。未来版本中还会支持 VulkanSwitch 的GPU模拟。现版本中GPU模拟的限制和已知问题如下:

  • 如需完整支持Niagara,则需要加入GPU回读数据的功能。当前只有 DX11PS4 渲染接口支持此功能,OpenGLMetal 的支持正在添加中。

  • GPU支持 碰撞(Collision)曲线(Curves)弯曲噪点域(Curl Noise Fields)网格体蒙皮网格体样条组件 和更特定的数据接口暂不支持。与 UNiagaraDataInterfaces 交互的GPU着色器API也经过了重新设计。

  • GPU模拟上支持粒子的 Sprite实例化静态网格体。此版本中无法在GPU上从粒子和粒子条带 生成灯光

  • 事件(Events)只能在CPU上使用,在虚幻引擎4.20版后将有重大修改。

CPU模拟与编译

Niagara CPU 模拟现可在 PC、PS4、Xbox One、OpenGL(ES3.1)Metal 上使用。当前版本尚不支持 VulkanSwitch

  • 在新版本中,CPU虚拟机(VM)将在后台线程中编译内容到DDC,能够极大地提高整体编译速度和团队效率。仍然需要更多研发才能将最后开销极大的VM优化步骤放入ShaderCompileWorker中执行,因为其依赖于非线程安全库。能够对各模块之间的编译依赖性进行有效追踪,清晰分辨何时需要对堆栈的特定部分进行重新编译。

  • CPU上的物理模拟能够对 物理材质 值进行正确建模,生成摩擦力和复原力(即弹性)。

  • 发射器将与工作线程平行进行模拟。

全新内容:“数字人类”改良

Epic对数字人类的探索从照片级角色开始,加入了诸多渲染改良,帮助开发者制作出拥有极高真实度的角色。

image alt text

开发这些角色时,我们添加了以下针对皮肤、眼睛、光照和次表面散射的渲染改良。

  • 用“Double Beckman Dual Lobe”法添加新的高光模型。

  • 光传播在次表面轮廓上使用反向散射。

  • 用边界溢色(Boundary Bleed Color)形成更佳的次表面散射接触阴影。

  • 通过后期处理材质生成短距离动态全局光照。

  • 使用单独的虹膜法线贴图增加眼睛细节。

如需了解更多详情,请查阅数字人类

全新内容:矩形区域光源

利用矩形区域光源可在包含大型光源的场景中实现更为真实的光源,如头顶荧光光照、电视机、光照标记等内容。可在模式(Modes)面板中访问矩形区域光源(Rectangular Area Lights)和其他各类光源。

image alt text

  • 当前版本只支持延迟渲染器。

  • 其工作原理与点光源相似,但其拥有源宽和源高,可控制发射光的区域大小。

  • 静止移动性的阴影的工作原理与拥有可移动动态阴影的区域光源相似,而当前版本中的工作原理则更像是不带区域的点光源。

性能注意事项:

  • 移动和投射阴影时会产生主要的开销,因此整体开销高于点光源和聚光源。阴影生成的开销通常相同。

  • 静止移动性的光源或非阴影投射的光源开销可能会加倍,具体开销会视所使用的平台上下浮动。如使用的是静态光源,则不存在开销。

全新内容:混合现实采集(测试功能)

全新的混合现实采集(Mixed Reality Capture)功能能够 便捷地将真实角色融入虚拟游戏空间为混合现实项目打造效果拔群的视觉体验

image alt text

混合现实采集测试版拥有三个组件:视频输出、校准和游戏内合成。我们已经在列表中记录了支持的网络摄像头和HDMI采集设备,协助您将各种来源的真实世界绿屏视频导入虚幻引擎。如您拥有Vive Tracker或类似的追踪设备,混合现实采集还能够将真实摄像机位置与游戏中的摄像机进行匹配,使镜头更为动态有趣。而设置和校准则通过独立的校准工具进行,此工具可在虚幻引擎4的项目中通用。设置拍摄位置后,即可在所有应用程序中通用。

该功能现在仍处于测试阶段,我们期待您多多提供使用反馈,帮助我们进行改进。如果希望了解混合现实采集设置的详细信息,请查阅混合现实开发文档

全新功能:nDisplay灵活多显示渲染

使用全新的 nDisplay 系统,不费吹灰之力便能够 创建大型视觉设备的视讯墙!它能够在任意数量的主机电脑上自动启动任意数量的虚幻引擎实例,并将他们牢固地锁定在一起,内容确定,时间同步精确到每帧;每个实例都驱动其自身的投射器或显示器。还可以使用主动或被动立体渲染来增强观者的3D临场感;内置的VRPN则可以通过移动VR控制器来驱动系统。

image alt text

如需了解详情,请查阅文档.

全新内容:亚混音频录制

在新的音频引擎中,我们添加了录制引擎输出的功能,也可录制到单独的亚混音输出中。录制完成的文件为*.wav文件或SoundWave资源。

image alt text

正在将亚混音输出导出到一个SoundWave资源。

image alt text

正在将亚混音输出导出到一个.wav文件。*

全新内容:共享的骨架网格体LOD设置

利用全新的LOD设置资源,一次性完成LOD设置,然后在多个骨架网格体资源之间重复使用!可以在骨架网格体的“资源细节(Asset Details)”面板中设置使用的LOD设置资源,或基于当前设置生成一个新资源。

欲知详情,请查阅“骨架网格体资源细节”页面中的共享LOD设置部分。

也可使用蓝图工具指定LOD设置并从蓝图重新生成LOD。

全新功能:流送几何体缓存和改良的Alembic导入器(实验性)

新版本继续对几何体缓存系统进行了稳定性和性能提升,具体如下所述:

  • 新版本中,单独的顶点动画帧使用基于Huffman编码的帧内解码器进行压缩。压缩数据从硬盘进行流送,使较长序列的播放内存开销较低。该新功能仍在早期实验性阶段,不可用于实际生产。

  • 新版本中Alembic导入器已改为迭代式导入帧,而非批量导入全部帧。这将改良PCA流程、整体稳定性和速度。

全新内容:Actor和内容浏览器快捷菜单脚本延展

使用蓝图工具在浏览器中延展Actor和内容资源的快捷菜单,无需编写代码即可轻松实现情境内工具和工作流的改良

  • 使用新的父类之一创建一个新蓝图工具——AssetActionUtility(用于内容浏览器延展)或ActorActionUtility(用于Actor延展)。

  • 可以用GetSupportedClass函数来指定操作将应用的actor或资源类型。

  • 添加无返回值的逻辑输入事件(或函数),将其标记为“Call In Editor”,使其在快捷菜单中显示。事件被触发来填入事件上定义的任意参数值时,将显示一个弹出对话框。

全新内容:动画重定向管理器改良

新版本中动画重定向管理器支持映射数据的保存和加载,因此可以 在多个网格体上保存和反复使用映射数据。可以使用此功能快速保存不同动画的多个绑定数据并重复使用。

image alt text

欲知详情,请查看重定向管理器页面。

全新内容:刚体动画节点改良

在新版本中使用“本地空间(Local Space)”模拟在世界场景中移动骨架网格体组件时,可以在模拟形体上构成运动,这将为模拟带来更高的稳定性。新版本中还添加了一些选项来查看组件在世界空间中的线性速度和加速度,并将其应用(缩放和限制)到本地空间模拟。

此外还加入了将任意关节作为模拟基础的选项,并支持便捷重设力学。

全新内容:布料改良

新版本中物理资源支持在布料模拟中将锥形胶囊体用于碰撞。

注意:刚体模拟的碰撞中并不支持这些内容。

还可以将骨架网格体顶点颜色复制到任意选中的布料参数遮罩。

全新内容:垃圾回收改良

垃圾回收性能已优化,减少的运算量达13倍之多!改良详细内容如下:

  • “标记”阶段已优化,现变为多线程。在多核机器上,将对象标记为无法达到的开销 已从8毫秒缩短为0.6毫秒(在约50万个对象上进行测试的结果)

  • “开始销毁(BeginDestroy)”阶段(取消对象散列)在多帧上运行,耗时 不超过2毫秒/帧。取消对象散列的开销将不会包含在“标记”阶段和可达性分析的相同帧中。

  • 在开发版本中运行的垃圾回收假设验证在新版本中使用与引用收集相同的多线程代码。因此,开发版本中的垃圾收集时间将得到提升。我们对约50万个对象进行了测试,采样时间 从320毫秒减少到80毫秒

全新内容:Visual Studio 2017

新版本的UE4使用Visual Studio 2017编译器,引擎将默认生成Visual Studio 2017的项目文件。引擎仍然支持Visual Studio 2015,但需要进行一些配置。此外我们还添加了对Windows 10 SDK的支持。

注意: Visual Studio 2017支持多个编译器版本并行安装。

欲知详情,请查阅硬件和软件规格

全新内容:GitHub上的开发流送

虚幻引擎开发流送现在会在GitHub上即时更新。如果您需要开发模式的最新版本,可以直接获取这些流送,无需等待Epic将开发团队的修改并入主分支中。但请注意,和二进制版本或主分支中的内容一样,我们的QA团队并未对发布的这些流送进行测试。

欲知详情,请查阅我们的博文t

全新内容:UMG安全区改良

新版本中,在UMG和Play-In-Editor(PIE)设置选择的屏幕大小与设备描述关联,这同样考虑到了移动内容缩放因子(Mobile Content Scale Factor)。意味着最终的分辨率和DPI缩放将基于选择的设备屏幕大小而变化。

image alt text

image alt text image alt text

针对UMG安全区工作流进行了以下改良:

  • 使用小于1的值来测试电视和显示器的屏幕大小时,调试游戏安全区(Debug Title Safe Zone)的安全区预览将自动启用。

  • 使用命令r.MobileContentScaleFactor对UMG预览和PIE模式中的手机和平板分辨率进行缩放。

  • 新版本支持在部分屏幕无法使用的设备(如iPhoneX)上实现非统一安全区。

  • 安全区、缩放框和常用边界空间能够正确响应非统一安全区和UMG设计器的大小。

  • 新版本中UMG将显示选中设备、其屏幕大小和等分缩放因子,便于在设计器图表中进行参考。

  • 使用r.MobileContentScaleFactor命令可对UMG和PIE模式中的手机和平板分辨率进行缩放。

欲知详情,请查阅UMG安全区

全新内容:UMG富文本块控件

UMG现在可通过全新的富文本块控件支持富文本块样式及内联图片。和富文本控件不同,富文本块支持标记样式、内联图片、超链接等功能!它还能让你指定自己的装饰符并用它定义您的项目所需要的标记行为。

UMGRichTextBlock.png

要使用该控件,您只需在UMG的Canvas面板上添加一个 富文本块控件 并创建一个数据表格资源来存储所有可以通过标记调用的文本样式和图片。在创建 数据表格资源 时,在您要添加图片或文本样式处选择可以被富文本块引用的 富图片行富文本样式行 即可。T

全新内容:材质中的曲线图谱

新版本中,材质可通过蓝图提供的额外支持,使用曲线图谱资源来保存和访问线性颜色曲线数据。曲线图谱使用的线性曲线颜色与旧版本中相同,不同之处是能够使用的线性颜色曲线数量与指定图谱的大小相同。

新建曲线图谱的方法:在内容浏览器中选择 “新增(Add New)” > “杂项(Miscellaneous)”,然后选择 “曲线图谱(Curve Atlas)”

打开曲线资源编辑器后,即可对单条曲线的色调、饱和度、明亮度、自然饱和度和透明度限制进行调整。此外,内容浏览器中的预览缩略图将显示曲线设置的梯度。

欲知详情,请查阅材质中的曲线图谱

全新内容:“网格体描述”网格体格式

新版本中UE4使用了一个更高级的媒介格式,其可代表引擎中任意类型的网格体资源。这是一个循序渐进的过程,将改良工作流,便于打造一些更棒的新功能。

使用全新网格体格式的目的是:

  • 所有网格体(静态网格体、骨架网格体,以及地貌和BSP等类网格体对象)都能拥有相同的内在代表,其拥有一定程度的可交换性。

  • 根据几何体格式,多数UE4几何体均可在任意类型的网格体上使用。

  • 使用新格式的所有网格体均可使用标准API启用的运行时以及原生或脚本修改来进行检查和修改。这样便会为过程化生成的内容带来非常多的可能性。

  • 网格体可以直接被导入格式,可以保留高级的网格体代表(如四边形或边缘硬度)。现版本中,导入静态或骨架网格体时这些代表均会丢失。

  • 全新的网格体格式拥有内部结构,可以实时进行修改(甚至能对极其复杂的网格体进行修改)。这便形成了半成品网格体编辑功能的基础,也可对其编写脚本,开发为未来的功能。

在此版本中,只有静态网格体被转换为使用全新的网格体格式。对用户而言常用工作流并未发生变化,资源本身也没有发生改变。在现版本中,新数据自动从旧格式进行创建,并在DDC中缓存。

全新内容:在取色器中标记保存的颜色

新版本中可对主题栏或主题菜单中保存的颜色贴上标签,便于进行识别。设置标签的方法非常简单:右击保存颜色的样本并输入颜色的命名。

如需了解更多详情,请查阅取色器

全新内容:内容浏览器中的“最近打开”过滤器

在新版本中可以使用全新的 “最近打开(Recently Opened)” 过滤器迅速查找到最近在内容浏览器中查看过的资源。此过滤器将列出 20 项最近打开的资源。

image alt text

“过滤器(Filters)” 中的 “其他过滤器(Other Filters)” 下即可找到“最近打开(Recently Opened)”过滤器。最近打开浏览器中列出资源数量的修改方法是:编辑器偏好(Editor Preferences) > 内容浏览器(Content Browser),然后选择“在最近打开过滤器中保留的资源数量(Number of Assets to Keep in the Recently Opened Filter)”

欲知详情,请查阅内容浏览器过滤器s

全新内容:Shotgun整合(测试功能)

使用虚幻引擎4全新的Shotgun整合来简化生产流程吧!

image alt text

功能包括:

  • 将虚幻编辑器添加到Shotgun启用程序,便于美术师打开Shotgun项目的正确虚幻版本。

  • 可在虚幻编辑器界面中打开Shotgun面板,便于在工作时即时了解Shotgun项目中的最新状况。

  • 它衔接到Shotgun加载器中,便于您便捷地将资源导入虚幻项目,并控制其在内容浏览器中所处的位置。

  • 它还将把Shotgun整合的命令添加到上下文菜单中(右击关卡中的Actor或内容浏览器中的资源打开)。

注意: 在GitHub上分享我们的整合之前,我们正在撰写最新的详情信息。请稍后再回来查看更新及文档!

全新内容:编辑器脚本编写和自动库

编辑器脚本编写工具 插件 现已对所有虚幻引擎用户开放。此插件提供了简化的接口,便于对虚幻编辑器编写脚本和设置自动化,兼容内容浏览器中的资源,兼容当前关卡中的actor,可编辑静态网格体资源的属性,以及其他功能。

欲知详情,请查阅编辑器脚本编写和自动化

全新内容:通过FBX文件导入资源元数据

将FBX文件导入虚幻引擎时,文件中保存的FbxProperty属性也将同时导入。您可以在蓝图、或在虚幻编辑器中运行的Python脚本中访问此元数据。这可以帮助您根据来自内容创建工具的资源信息来自定义虚幻引擎的资源管理流程。

欲知详情,请查阅FBX资源元数据流程

全新内容:改良脚本对静态网格体LOD和碰撞的访问

在新版本中,您可以利用在虚幻编辑器中运行的蓝图和Python脚本来修改静态网格体资源的更多属性。因此您可以对静态网格体编辑器用户界面中的一些工具实现自动化。例如:

全新内容:蓝图书签

用户可以使用蓝图书签功能在蓝图编辑器中的任意函数图表中创建命名书签。被创建的书签将列在一个新的UI窗口中,点击即可回到视口(以及正在查看的选项卡)中的位置和缩放等级。除创建的书签外,在单独的列表中选择注释还可以迅速跳至蓝图中的任意注释节点。书签保存在本机上,因此它们不会对蓝图产生影响,同步内容也不会使您的书签覆盖其他用户的书签。

全新内容:蓝图观察窗口

蓝图观察窗口 使您能够观察变量和节点(甚至可以在多个蓝图之间进行观察),提高调试的工作效率。编辑器中打开的所有蓝图的观察数据,其为当前调用堆栈的一部分,将被合并到单个列表中,便于用户查看变量和函数输出。此外,您可在蓝图之间轻松切换。点击“节点命名(Node Name)”栏中的一个条目将前往任意蓝图中的命名节点;而选择“对象命名(Object Name)”中的条目将选中与该条目相关的对象实例。可对数组、集、映射和其他数据结构进行延展,轻松便捷地深入查看其中包含的数据。

image alt text

全新内容:移动平台镜面光照模型改良

移动平台 镜面反应 已改为默认使用 GGX光照模型。它改良了移动平台镜面质量,与 SM5 匹配更佳,但增加了着色器处理时间的少许开销。

image alt text

图1 - 4.20版默认GGX镜面;图2 - 4.19版球形高斯镜面

旧版本中的 球形高斯镜面 模型仍然可以使用:前往 渲染(Rendering) > 移动平台(Mobile),选择 “使用传统着色模式(Use legacy shading mode)” 项目选项。

全新内容:移动平台天光反射

新版本中,如无相关的 反射采集,移动渲染器将为 镜面反射 使用 天光立方体贴图

image alt text

图1 - 移动平台,无反射采集;图2 - PC,无反射采集

全新内容:复制驱动/复制图表

复制图表(Replication Graph)插件为拥有较多Actor和玩家的游戏提供了一种优化的复制系统。此系统构建了一系列的自定义节点,这些节点能将数据和计算集中。这些节点会存在于多个帧中,可通过客户端连接进行共享,并基于游戏特定的更新规则减少多于的CPU工作并将Actor分组。我们还可能对API进行修改,因此4.20仅为实验性版本。但我们已经在《Fortnite Battle Royale》中使用过它,之后会将它作为正式版推出。

全新内容:Steam认证

新版本中加入了Steam认证功能!游戏现在可以添加一个数据包柄组件,连接到Steam的认证API,使其能够更好地进行服务器宣传、处理VAC/发行商的广告位,并提供更佳的客户端验证。功能启用后,加入服务器的客户端需要Steam进行认证才能进入游戏。未能通过认证的客户端默认将被踢出服务器。

虚拟摄像机插件

作为4.20的新增内容,虚拟摄像机插件可以让用户在虚拟制片环境中使用一台iPad Pro在虚幻引擎4(UE4)中驱动一台电影摄影机。有了ARKit,一台Vive Tracker或一套光学动作捕捉系统(如Vicon或Optitrack),iPad的位置与旋转就能被无线广播到PC,再由PC将视频传回iPad。

诸如焦长、光圈、焦距和稳定性等摄像机设置都可以使用触摸输入调整。此外,虚拟摄像机还可以用于截取高分辨率截图、设置锚点、录制摄像机运动和其他与虚拟制片相关的任务。

在Epic Games启动程序的“学习”页面上的 引擎功能示例 部分,有一个 虚拟摄像机 项目,其中包含一个可使用虚拟摄像机插件的示例场景以及相应的项目设置。

更多详情,请参阅虚拟摄像机插件文档

全新内容:Sequencer的帧准确度改良

新版本中,Sequencer把所有内部时间数据保存为整数,在必要时启用强健的帧准确度支持。关键帧、片段边界和其他数据固定锁定为下方用户可控制的序列分辨率。这可根据使用情况的需求调整优劣。非常高的分辨率将支持关键帧放置和子帧的更大精确度,同时缩小整体序列范围。

image alt text

主要更新:

  • 新版本中,Sequencer的时间指针以一个块来代表,这个块将跨越当前求值的Tick的整个范围,清楚地显示哪些关键帧被求值,哪些关键帧并非用于给定的帧。

  • “强制固定帧间隔(Force Fixed Frame Interval)”播放已改为“帧锁定(Frame Locked)”,将引擎的最高FPS设为序列的显示率、将时间锁定为整个帧数量(无子帧插值)。

  • 不考虑帧准确度时(如UMG动画),依然完全支持子帧求值。

  • 支持引擎时钟(支持游戏世界暂停)、音频时钟和平台时钟之类运行时求值的各种时间源。

  • 可在Non Drop Frame(NDF)和Drop Frame(DF)时间码中查看 UI。NDF时间码对所有帧率可用,可直接将帧数转换为时、分、秒和剩余帧。DF时间码只支持 NTSC 帧率(23.976、29.97、59.94)。显示格式可以通过Ctrl + T组合按键进行修改,或通过帧率UI菜单进行修改。

欲知详情,请查看Sequencer时间重构说明页面。

全新内容:Sequencer的媒体轨迹

Sequencer拥有播放媒体源的新轨迹。它就像是用于影片的音频轨迹。将 媒体源 资源简单拖放到轨迹视图中,或从 “添加轨迹(Add Track)” 菜单创建一个 媒体轨迹 即可。此功能与图像序列的兼容性最佳,与EXR的兼容性尤佳。媒体轨迹中的图像序列将与渲染输出精确同步帧。

image alt text

欲知详情,请查阅使用媒体轨迹页面。

全新内容:增强Sequencer曲线编辑器和求值

新版本对Sequencer中的 曲线编辑器求值 进行了数项增强,其中包括:

浮点曲线支持权重切线。

image alt text

在曲线编辑器中使用权重曲线

增加变更旋转时的欧拉角连续修改。欧拉角不再受限于-180到180之间,能够避免动画出现翻转。

现在能通过轨迹的属性菜单在3D变换片段中开启四元数旋转,利用四元数插值在两个旋转之间平顺地插值。此功能与之前Matinee中的功能有所类似。

全新内容:在Sequencer中的动画实例上设置变量的动画

新版本中可以通过可拥有物为 动画实例 上的变量设置动画,以便直接控制动画蓝图变量、函数和其他内容。将动画实例绑定添加到Sequencer的方法是在骨架动画组件的 [+Track] 按钮中寻找其命名。公开到过场的所有变量都将显示在其轨迹选取器上。

欲知详情,请查阅用Sequencer控制动画实例页面。

全新内容:Sequencer中的Final Cut Pro 7 XML导入/导出

新版本中,Sequencer影片场景数据可被导出为Final Cut Pro 7 XML格式,也可从此格式进行导入。这可使数据在Adobe Premiere Pro和其他支持FCP 7 XML的其他编辑软件中来会传递。您可以在编辑软件中裁剪并偏移镜头,并在导入时自动将这些映射回Sequencer。

注意: 此版本尚不支持音频。

全新内容:序列录制器改良

新版本中,序列录制器 支持保存在固定关卡中的分析系统。录制分析文件可以保存需要录制的actor及其设置,以及保存录制数据的输出路径。序列录制器还支持为选中的每个actor录制多个镜头次数。

欲知详情,请查阅序列录制器页面。

全新内容:Sequencer轨迹易用性改良

新版本进行了数项更新,改良Sequencer中 轨迹 的易用性。轨迹、Actor和文件夹可以被重新排序,事件轨迹名显示在事件关键帧旁,可以将片段大小重新设为其源长度,可以对单个变换轨迹设置遮罩,从混合姿势创建姿势资源等诸多操作。

欲知详情,请查阅全新的使用Sequencer中的轨迹页面。

全新内容:实例化立体渲染的半透明支持

我们将用于Robo Recall中的实例化立体渲染路径改良进行了再次改良,使其能够与引擎中的更多功能共用。虚幻引擎4.20版本中可使用实例化立体渲染执行半透明渲染通道,此法可极大降低渲染半透明元素较多的场景时的CPU开销。无需进行内容修改,在项目设置中启用了实例化立体渲染的所有项目都将受益。

全新内容:Magic Leap One™测试版

GDC时,我们公布了Magic Leap One™:创造者测试版。我们与Magic Leap通力合作,为开发者带来这个软件工具集,便于进行Magic Leap个人空间计算平台项目的早期开发。虚幻引擎从4.20版本开始将完全支持Magic Leap One™,开发者可安心进行开发。

image alt text

虚幻引擎4的Magic Leap One使用摄像机控制、世界场景网格体、运动控制器、前向和延迟渲染等内容的内置框架。此外我们还添加了眼睛追踪和姿势等功能的强力支持。

开发者可从developer.magicleap.com下载Magic Leap软件开发套件和模拟器。如果开发者拥有硬件,虚幻引擎4.20版可以部署并在设备上运行,并通过Play In Editor支持零迭代工作流。

全新内容:支持Apple ARKit 2.0版本

我们添加了对Apple ARKit 2.0的支持,追踪精度更佳,支持垂直面检测、面部追踪、2D图像检测、3D物体检测、固定AR体验和共享AR体验。您可以利用这些新功能将AR物体放置到更多表面上、追踪一个面的位置和朝向、识别2D图像并将其生动显示、检测3D物体,并实现新类型的合作式AR体验。

全新内容:支持Google ARCore 1.2版本

新版本支持Google ARCore 1.2版本,其支持垂直面检测、增强图像和Cloud Anchors。有了这些功能后,您便可以将AR物体放置在更多表面上,使图像效果更佳,并实现新类型的合作式AR体验。

全新内容:平台SDK升级

我们将在每个更新版本中对引擎进行更新,以支持各大合作平台的SDK版本。

image alt text

  • Build farm进行编译的IDE版本

    • Visual Studio: Visual Studio 2017 v15.6.3工具链(14.13.26128)与Windows 10 SDK(10.0.12699.0)

      • 最低支持版本

        • Visual Studio 2017 v15.6

        • Visual Studio 2015 Update 3

    • Xcode: Xcode 9.4

  • Android:

    • NDK 12b(发布前Android 1r6u1安装程序的新CodeWorks将替代Android 1R5的CodeWorks,仍在NDK 12b上)

  • HTML5: Emscripten 1.37.19

  • LInux: v11_clang-5.0.0-centos7

  • Lumin: 0.12.0

  • Steam: 1.39

  • SteamVR: 1.39

  • Oculus Runtime: 1.25

  • Switch:

    • SDK 4.5.0 + 可选NEX 4.2.1(固件 4.1.0-1.0)

    • SDK 5.3.0 + 可选NEX 4.4.2(固件 5.0.0-4.0)

    • 支持IDE:VS 2015 / 2017

  • PS4:

    • 5.508.031

    • 固件版本5.530.011

    • 支持IDE:Visual Studio 2015、Visual Studio 2017

  • Xbox One (XB1, XB1-S, XB!-X):

    • XDK:2018年4月

    • 固件版本:2018年4月(版本号 10.0.17133.2020)

    • 支持IDE:Visual Studio 2017

  • macOS: SDK 10.13

  • iOS: SDK 11

  • tvOS: SDK 11

RELEASE NOTES(以下不作翻译)

AI

  • Bug Fix: Updates have been made to the Instance Prepare Context Function of Env Query which will now return vectors and rotators now ignore Invalid Location and Invalid Rotation.

  • Bug Fix: Updates have been made so the Env Query Item Type_Actor of Get Item Location function and Env Query Item Type_Actor of Get Item Rotation function now return Invalid Location and Invalid Rotation instead of 0 when the hosted Actor pointer is set to null.

  • Bug Fix: The On Listener Forgets Actor function of AI Sense_Sight now removes queries only relating to the actor being forgotten.

  • Bug Fix: The AI Sense Config Blueprint and AI Sense Blueprint no longer show up in class drop-downs when selecting AI senses.

  • Bug Fix: Donut EQS generator no longer fails if inner radius is set to 0.

  • Bug Fix: THe Env Query Manager and Behavior Tree Manager classes are now transient to avoid being accidentally serialized.

  • Improvement: The Get Raw Value Ptr function of AI Data Provider Value is now accessible from outside of the AI Module

  • Improvement: Additional functions from Blueprint Node Helpers are now exposed in the AI Module's API.

  • Improvement: More public properties from AI Controller have now been exposed to Blueprints.

Behavior Tree
  • Bug Fix: The correct tooltips for Composite Behavior Tree nodes are now displayed in the Editor.

  • Bug Fix: The Rotate To Face BB Entry Behavior Tree Task now properly faces the location of the target agent.

Debugging Tools
  • Bug Fix: Navmesh debugging now properly displays octree elements with "per instance transforms".

  • Bug Fix: 'Get Categories' in the Visual Logger Helper no longer omits relevant information when called.

  • Improvement: Code maintainability and performance upgrades have been made to Nav Mesh Rendering Component when drawing navmesh and octree collision polys.

  • Bug Fix: The Static Mesh Editor now display AI-navigation-related data whenever Has Navigation Data is set to true.

  • Bug Fix: Navigation data gathering has been fixed for navmesh tile generation by expanding tile's bounding box by the agent's radius.

  • Bug Fix: Layers are now removed after Navmesh generation if they become empty after rebuilding the Navmesh.

  • Bug Fix: Calling Set Poly Area in Recast NavMesh no longer sets an improper flag when changing the poly's Area ID.

  • Improvement: The Tick in Navigation System Base is now called even when the world is paused.

  • Improvement: The Navigation System Config can now be subclassed to allow configuration of other aspects of navigation system, like overriding or modifying the Supported Agents list.

  • New: A flag has been added to Nav Modifier Component to control whether agent's height is being used while expanding the modifier's bounds during navmesh generation.

  • New: A Console Variable has been added that controls whether to cook and use Nav Collision.

  • New: World Settings has a property, called Navigation System Config, that allows you to specify the Navigation System class to be used on a per-world basis.

Animation

  • Crash Fix: Fixed a crash when attempting to shut down a Message Bus Source after the Heartbeat Manager had already been shut down.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Alembic asset and placing it in the world.

  • Crash Fix: Trying to extract a transform from a raw track with no track data no longer crashes.

  • Crash Fix: Re-registering a Skeletal Mesh Component with a post process instance that references deleted virtual bones will no longer crash.

  • Crash Fix: Fixed crash on deleting Virtual Bones that are referenced by Bone Controller nodes.

  • Bug Fix: Fixed Live Link Client Panel not refreshing for sources that were not added through UI.

  • Bug Fix: Fixed an issue where the Skeletal Mesh was not ticking correctly and updating its bounds (it would use the cached bounds with an extent of 0 and not render).

  • Bug Fix: Fixed not-a-number (NaN) values occurring during Blend Space sampling.

  • Bug Fix: Fixed issue with double ticking a reused Animation Instance on set Skeletal Mesh because of parallel evaluation.

  • New: Added Anim Instance Get LOD Level override point to allow custom Anim Instances the ability to provide a different (potentially significance-based) LOD to the graph update/eval phase.

  • New: Added Blueprint functions to create a Message Bus Source for use in projects where the Editor UI is not available or is impractical.

  • New: Added a remapping of curve values in a range to the modify curve anim node.

  • New: Added a weighted moving average method to the modify curve anim node.

  • Improvement: Reduced per-frame allocations in the animation system.

Animation Assets
  • Crash Fix: Fixed a crash when retargeting a Skeleton when some of its animations are still open.

  • Crash Fix: Fixed a crash on Pose Asset when Skeleton has changed hierarchy.

  • Bug Fix: Fixed additive blending in PoseAsset.

  • Bug Fix: Fixed a deterministic cooking issue where notify names could change during load.

  • Bug Fix: Montage or Anim Blueprint assets can no longer modify the Skeleton during cook (causing non-deterministic cooking).

  • Bug Fix: Using the name "None" in a curve will no longer cause it to disappear.

  • Bug Fix: Fixed incorrect preview mesh being applied after retargeting an animation.

  • Bug Fix: Bone rotations are now forced to be normalized during bone extraction from raw animation data.

  • Bug Fix: Animations that have transform curves are considered up to date upon loading.

  • New: Added animation names to ensure when missing anim data.

  • New: Added notification when updating source for the Pose Asset.

  • New: Added Blueprint interface to get list of curve names, consisting of Get Active Curve Names, and Get All Curve Names. Pose Assets can use this interface to get pose names instead of curve names.

  • New: Materials can now be set on a Geometry Cache asset.

  • New: Added Socket Override Lookup to the Skinned Mesh Component, which will allow mapping one socket to another and when calling Get Socket By Name or Get Socket Bone Name.

  • New: Added LISTANIMS console command to generate CSV report on all loaded anims.

Animation Blueprints
  • Crash Fix: Fixed a crash when opening Animation Blueprints with sub graph inputs.

  • Crash Fix: Fixed a crash when running a standalone editor build using Animation Blueprint sub-instances that copy properties.

  • Bug Fix: Fixed Skeletal Mesh Components using post process Anim Instances but not anim script instances running on the Game Thread (work is now correctly pushed off-thread).

  • Bug Fix: Fixed duplicate node GUIDs in the Animation Blueprints that were causing state machine transition errors.

  • Bug Fix: Wrapped wind update using dynamics console variable so unnecessary work is not done if dynamics aren't running.

  • Bug Fix: Fixed issues with Skeletal Mesh Component teleports not being passed through to in-graph dynamics nodes. They are now passed through from transform updates.

  • Bug Fix: Fixed teleports causing anim dynamics to duplicate the limits that are generated, causing over-corrections for constraints.

  • Bug Fix: Animation state machine correctly handles copy-pasted transition getter nodes.

  • Bug Fix: Fixed stretching on spawn for Skeletal Mesh Components using Rigid Body Node.

  • Bug Fix: Fixed bad initial rigid body node states when spawned with non-reference pose.

  • Bug Fix: Fixed NaN in Rigid Body node when teleporting on a zero timestep.

  • New: Anim dynamics can now be globally turned off at a specific LOD threshold.

  • New: Added ECVF_Scalability to anim dynamics CVars.

  • New: RigidBody node supports any joint as a base of simulation.

  • New: RigidBody node supports reset dynamics. Anim Instance supports reset dynamics, and if you call it, it will reset simulation.

  • New: Added console variables to control rigid body node update and evaluation.

  • New: Added deterministic cooking warning to node GUID fix-up in Animation Blueprints to suggest a resave.

  • New: Added new "Apply limits" anim node.

  • New: RigidBody AnimNode has new options to automatically apply local space accelerations based on world component translation. Options are only active when using a non-worldspace simulation:

    • Component Linear Acc Scale - Amount of world space acceleration should be applied in local space (should be between 0 and 1)

    • Component Linear Vel Scale - Applies 'drag' to a body in the local space, based on the components world-space velocity.

    • Component Applied Linear Acc Clamp - Overall clamp on acceleration applied by Component Linear Acc Scale and Component Linear Vel Scale options.

  • New: Bone references are now validated during compilation for all anim graph nodes that use them.

  • Improvement: Optimized cases when Update Curve was called many times if you were using Sub Anim Instance and/or Post Process Graph.

  • Improvement: Animation Curves have faster lookups, and are not evaluated unless they're actively used.

Animation Tools
  • Crash Fix: Fixed a crash when undoing an operation performed in a Skeletal Mesh editor after it is closed.

  • Bug Fix: Fixed an issue with Skeletal Mesh bake pose not correctly applying when containing non-uniform scaling.

  • Bug Fix: Fixed accidental operation of pinned commands when closing them in animation editor viewports.

  • Bug Fix: Notify Trigger Chance is now hidden for anim notify states, since it has no effect.

  • Bug Fix: Automatic rules for animation state transitions are now shown in tooltips.

  • Bug Fix: Fixed anim notify drag/drop not allowing movement beyond halfway on high DPI displays.

  • Bug Fix: Prevented Blueprint notifies from destroying the animation preview actor.

  • Bug Fix: Fixed cropping of animations that have transform curves.

  • New: Added an "auto blend out" option to Anim Montage.

  • New: Animation Retargeting Manager now supports loading/saving the mapping data.

  • New: The Control Rig Experimental feature has been refactored, you now can create your own rig using Control Rig Blueprint.

  • New: In the Skeletal Mesh Editor, added section settings to ignore a section when creating a reduced LOD.

  • New: Added new animation viewport notifications.

  • New: Added option to preview Fixed Bounds in Skeletal Mesh tools.

  • New: Blendspace samples can now be be optionally moved off-grid by holding Alt and dragging samples to disable grid snapping.

  • New: Enabled "Follow Bone" to be popped out of the menu into the viewport by shift-selecting.

Import/Export
  • Bug Fix: Re-importing a mesh will no longer clear the Post Process Graph.

  • Bug Fix: Fixed an issue with not Regenerating LODs when re-importing Skeletal Meshes and when it has been simplified, causing mismatched LOD data.

**Skeletal Mesh**
  • Crash Fix: Fixed a crash in lazy-initialization of morph targets when LODs are stripped from Skeletal Meshes.

  • Crash Fix: Fixed crash when Skeletal Mesh tangent buffer is empty after the build and we serialize the tangent array.

  • Crash Fix: Importing a Skeletal Mesh with no vertices no longer crashes.

  • Crash Fix: Fixed an editor crash when setting Min LOD above the total number of LODs for Skeletal Meshes.

  • Bug Fix: Fixed various issues with Bake Pose related to missing animations, sharing Skeletons, and removing joints.

  • Bug Fix: Statically-rendered Skeletal Meshes now correctly report their rendered LOD.

  • New: Added a new console variable "r.SkeletalMesh.StripMinLodDataDuringCooking" which, when non-zero, will strip out unused rendering data as the asset is cooked.

  • New: Added per-platform minimum LOD for Skeletal Meshes.

  • New: Added per-platform overrides for Skeletal Mesh screen size.

  • New: Master pose component will now ensure slaves are using ref pose for the missing joints.

  • New: Added "Use High Precision Tangent Basis" option on Skeletal Meshes.

  • New: Recompute Tangent and Skin cache will now be higher precision (16 bits per channel).

  • Deprecated: The wireframe color in Skinned Mesh Component has been deprecated.

Audio

  • Crash Fix: Fixed a crash when Audio Capture Component is re-initialized.

  • Crash Fix: Fixed a crash when flushing audio device.

  • Crash Fix: Calling "Set Sound Wave" on Synth Sample Player or Synth Granulator no longer crashes.

  • Crash Fix: Fixed audio component threading issue, which could manifest in crashes during async loads.

  • Crash Fix: Audio Capture components don't crash if they are started a second time during a play session.

  • Bug Fix: Fixed an issue where Synth Sample Player would not play a Sound Wave set in Property Inspector.

  • Bug Fix: Fixed an issue where recording audio for a Sequence would keep the Editor from properly shutting down.

  • Bug Fix: Fixed issues with seeking Sound Waves on iOS.

  • Bug Fix: Fixed an issue where the Delay Submix Effect was over-allocating for delay lines.

  • Bug Fix: Fixed issue with Distance Scale with Focus Feature and Attenuation Settings.

  • Bug Fix: Fixed issue where audio was cut off abruptly when a UE4 application was moved to the background on iOS.

  • Bug Fix: Fixed regression that caused no audio to be returned when applications directly queried IVoiceCapture.

  • Bug Fix: Fixed Quality issues with mic component.

  • Bug Fix: Fixed issue where Set Mic Threshold Blueprint function would not change the threshold value on shipping builds.

  • Bug Fix: Audio now stops sounds when destroying its data.

  • New: Added settings fields, enabling iOS and Android to use specific quality indices by default on SoundCue nodes.

  • New: Added settings fields, enabling iOS and Android packaged projects to use a maximum amount of branches on a random node to reduce memory usage.

  • New: Audio assets can now be resampled when being cooked for iOS and Android.

  • New: Added BypassVolumeScaleForPriority bool to SoundBase properties, enabling specified sounds to ignore Volume Weighting during Priority Sort.

  • New: The Steam Audio Plugin now supports AMD TrueAudio Next on supporting platforms.

  • New: Added ability in C++ to register an ISubmixBufferListener with FAudioDevice to receive post-mixed audio buffers from any Submix.

  • New: Added simple source delay effect.

  • New: Added class type, enabling inherited versions of UAudioComponents to be created.

  • New: Activated reverbs will now take priority when World Settings are used (for example, no Volume Proxy is in use).

  • New: Added ability to bypass volume-weighted prioritization for sound sources and only use priority.

Automation

  • Crash Fix: Fixed crash during Editor Asset automation tests.

  • New: Added a Build Reflections option to the Resave Packages commandlet.

Blueprints

  • Crash Fix: Fixed crash when cooking with Blueprint Nativization enabled after encountering a nested, instanced, Editor-only default subobject inherited from a native C++ base class.

  • Crash Fix: Fixed crash when removing a pin that has been split from a "Make Struct" node.

  • Crash Fix: Fixed crash in Actor Component Instance Data floats, which occurred after deleting a Blueprint function.

  • Crash Fix: Fixed crash when redoing a change to a Blueprint's sub-object.

  • Crash Fix: Fixed random crashes seen when running searches in multiple global Find-In-Blueprint tabs.

  • Crash Fix: Fixed crash where the Component Instance Data Cache would try to duplicate streaming Levels when Component Delegates were bound to Actors in that Level.

  • Crash Fix: Fixed crash when deleting multiple Bookmarks selected in the Bookmarks tree view.

  • Crash Fix: Fixed occasional crash when dropping a Blueprint onto a node.

  • Crash Fix: Fixed rare crash when hovering over invalid Blueprint nodes.

  • Crash Fix: Fix crash when reloading or force deleting Blueprints open in a Blueprint diff window.

  • Crash Fix: Fixed crash when Find in Blueprints discovered a string table reference.

  • Crash Fix: Fixed crash when selecting an invalid interface class.

  • Bug Fix: Fixed memory corruption that occurs when reparenting a Blueprint to a class that already has a property of the same name as a component in the Blueprint.

  • Bug Fix: Fixed scoping issue for generated instanced sub-object reference local variables in nativized Blueprint C++ code.

  • Bug Fix: Fixed build failure that could occur with Blueprint Nativization enabled and EDL disabled.

  • Bug Fix: Set & Map fields containing converted assets are now properly emitted with proper syntax to generated C++ Blueprint class headers when Blueprint Nativization is enabled.

  • Bug Fix: Fixed bug where gameplay tag container literal created in Blueprints would not be correctly initialized, and the parent tags would not be populated.

  • Bug Fix: Blueprint Nativization bug fixes, including:

    • Ensured that Safe Context Scoped Emitters Validation Chains generate code calls to the global "Is Valid" utility function on objects.

    • Blueprint Compiler Backend class Emit Create Array Statement function now generates a proper cast on "Make Array" node inputs for enum class types.

    • Modified the Blueprint Compiler Backends' Emit Call Statement Inner function to more correctly identify an interface function call site.

    • Modified Emit Helpers' Generate Automatic Cast function to properly handle automatic casts of enum arrays.

    • Added new Component Data Utils static functions to consolidate custom init code generation for converted special-case component types (for example, BodyInstance). This ties native DSOs to the same pre or post steps as converted non-native component templates around the "Outer Generate" loop.

    • Modified Expose On Spawn Validator's "Is Supported" function to include CPT Soft Object Reference property types.

    • Modified Blueprint Generated Class' Check And Apply Component Template Overrides function to no longer break out of the loop before finding additional ICH override record matches.

  • Bug Fix: Ensured that sub-object class types are constructed prior to accessing its CDO in a nativized Blueprint class' generated C++ constructor at runtime in a cooked build.

  • Bug Fix: Fixed bug where the class of the "Get Class Defaults" node was being set to None.

  • Bug Fix: Fixed incorrect access to nested instanced subobjects in nativized Blueprint C++ constructor code.

  • Bug Fix: Fixed an ensure when exiting PIE after tracing into a BP Function Library source graph while single-stepping.

  • Bug Fix: Reduced the number of stat events generated by Blueprint execution. This reduces overhead, and makes things easier to read when using event-based 'flame graph' captures.

  • Bug Fix: Disabled ticking for Level Script Actors (if not used).

  • Bug Fix: Functions that require a World context can now correctly be used in CheatManager-derived Blueprints.

  • Bug Fix: Avoid inclusion of monolithic engine header files in nativized Blueprint C++ code.

  • Bug Fix: Resetting an array property to its default value now properly propagates to derived Blueprint's default values.

  • Bug Fix: Fixed Compositing Plugin source files to conform to updated relative include path specifications, ensuring compatibility with Blueprint Nativization.

  • Bug Fix: Integer math functions are now consistently tagged in menus.

  • Bug Fix: Fixed case where sub components with bAutoRegister false would get registered anyways.

  • Bug Fix: Fixed EDL cycle at load time in nativized cooked builds when a circular dependency exists between converted and unconverted Blueprint assets.

  • Bug Fix: Fixed array functions Add, Add Unique, Insert, and Remove, which were not correctly using the appropriate boolean value when a bit-packed boolean member function was supplied as input.

  • Bug Fix: Fixed initialization of special UMG struct types in nativized Blueprint Actor code.

  • Bug Fix: Improved handling of circular dependencies during Blueprint Nativization between converted and unconverted assets.

  • Bug Fix: You can now successfully set the category for Timeline component variables in the My Blueprint tab.

  • Bug Fix: Negate, Increment, Decrement Int, and Float macros output the desired result, even if a non-mutable pin is passed in.

  • Bug Fix: Undo of changing select node index type now works correctly. Connections to option pins are now maintained across change of index pin type.

  • Bug Fix: Blueprint pins on some nodes were incorrectly being displayed as out of scope because they were not directly under the active object being debugged.

  • Bug Fix: Message (interface) call nodes no longer display the Skeleton class name in the node subtitle.

  • Bug Fix: Fixed comments on Map and Set Add Blueprint library functions.

  • Bug Fix: Prevent "Defer Dependency Loads" from being dropped when we preload an object in another linker.

  • Bug Fix: Blueprint Native Event methods declared an interface class now implement the required Implementation method as Pure Virtual function rather than declare it as pure virtual in the UHT-generated boilerplate code, enabling Blueprint classes that implement a native C++ interface declaring one or more Blueprint Native Event methods to be nativized.

  • Bug Fix: Significantly optimized performance when refreshing the components tree in the Actor details panel.

  • Bug Fix: Fixed deterministic cooking issue by avoiding use of Make Unique Object Name when instantiating component templates.

  • Bug Fix: The compilation manager avoids purging old classes until they are being recompiled, fixing an issue that could cause Construct Object to fail to assign values on construction.

  • Bug Fix: Fixed existing placements of nativized Blueprint Actors with a non-zero (legacy) root component scene transform at the CDO level.

  • Bug Fix: Setting a Class Blueprint variable will correctly enable unloaded Blueprint children to be selected in the picker.

  • Bug Fix: When Blueprint debugging during PIE, step over and out commands no longer cause the mouse pointer to jump back to the game viewport after each step.

  • Bug Fix: Breakpoints on nodes that are connected to "For Each" Loops are no longer skipped.

  • Bug Fix: Soft Object / Class reference variables now correctly validate the type of an asset that is dragged or pasted into them, which prevents making invalid references from the Editor.

  • Bug Fix: Soft Object / Class references stored in Blueprint function local variables are now correctly tracked when Blueprints are saved, which means that they will be properly fixed up when assets are redirected, and may pull more content into your cook if you have unused local variables.

  • Bug Fix: Editable Blueprint events now add 'const' to array type and reference parameter properties when compiled.

  • Bug Fix: Sub-Anim instance nodes can now orphan pins as expected.

  • Bug Fix: Blueprints will no longer warn on load about member get nodes for members that have been removed if they are just on the canvas and not be used during compilation.

  • Bug Fix: Fixed a bug where Blueprint async task node names could not be redirected after a function rename.

  • Bug Fix: Blueprints are now reparented before replacing references when using the 'delete and replace references' tool, making the delete and replace references workflow more reliable when performed on Blueprint assets.

  • Bug Fix: Prevent struct properties with an Identical type trait (for example, Gameplay Tag Container) from showing up as different in a Blueprint diff, even if they were unmodified.

  • Bug Fix: Fixed a typo in name validation error messages where the name was already in use.

  • Bug Fix: Keyboard navigation when selecting an object or asset from a Blueprint node now works correctly.

  • Bug Fix: Fixed issue where reroute nodes inside macros could break AutoCreateRefTerm function parameters.

  • Bug Fix: Fixed an invalid child Actor template cast in nativized Blueprint code when the child actor class type is a converted Blueprint class asset.

  • New: Exposed vertex and triangle counts for Skeletal Meshes to Blutilities.

  • New: Exposed collision complexity to Blutility scripting.

  • New: Exposed more static mesh functionality to Editor scripting.

  • New: Add new parameter UX on a Blueprint delegate is now at parity with Blueprint functions.

  • New: Added the ability for Blueprint async task nodes to have additional output parameters, which can be added to the exposed factory method.

  • New: Added several Blueprint methods for reading color values from render targets.

  • New: Added a Blueprint method (Import File As Texture2D) for loading an image file from disk and creating a texture from it.

  • New: Exposed Blueprint nodes for "Get Number Verts" and "Get LOD Screen Sizes" functions for Static Mesh exposed in the Static Mesh Utility Library.

  • New: Added UV1, UV2, UV3 inputs to Procedural Mesh Component.

  • New: Pins for Blueprint async task nodes now display Tooltips consistent with other functions.

  • New: By default, the "For Each Enum" node will now skip over values marked as 'Hidden' in new placements, additionally, a new input pin has also been added into the "Advanced" section on the node, enabling users to control this behavior if needed.

  • New: Select node now displays "Add Pin" button.

  • New: Display "Object Reference" instead of "Object Object Reference", and display "Soft Object Reference" instead of "Object Soft Object Reference".

  • New: Select node now resets pins to wildcard if none of the pins are in use.

  • New: Execution flow, Blueprint call stack, and Blueprint watchpoint viewer refactored into a single Blueprint Debugger tab.

    • The call stack viewer now indicates whether the call stack is stale, and the watch point viewer layout now matches the call stack viewer.

  • New: Modified the watch window to provide more clarity for when watches have valid information versus stale watch values. Watches in the window are only valid when Blueprint execution is paused, and when execution is paused, the window will update to show the values for all Blueprint instances in the current call stack.

  • New: Exposed "Get Local Role" function to Blueprints, returning the value of the "Role Member Property."

  • New: Enable modification of camera shake oscillators at runtime in Blueprints.

  • New: Exposed the Game Mode class' "Player Can Restart" function to Blueprints.

  • New: Exposed PlayerController class' "Can Restart Player" function to Blueprints.

  • New: Exposed Playerm Camera Manager class' "Client Simulating View Target" boolean to Blueprints.

  • New: "Last Hit By" reference on Pawns now marked as Blueprint Read Only.

Core

  • Crash Fix: Fixed a threading crash with non-scoped Low-Level Memory tracking (seen in Android GL tracking).

  • Crash Fix: No longer crashes when disabling a cooling down tick function during a pause frame.

  • Crash Fix: Fixed a Startup crash that could happen depending on file compilation order.

  • Crash Fix: Deserializing tagged property containers containing bad elements no longer crashes.

  • Crash Fix: Fixed a crash in when allocating memory with the Malloc profiler.

  • Crash Fix: CSV Profiler no longer crashes on exit.

  • Crash Fix: Fixed crashes caused by defining UObjects with certain types of constructors.

  • Crash Fix: Fixed a Slate crash related to the Async Loading Thread.

  • Crash Fix: Fixed crashes when converting filenames to long package names and when running commandlets.

  • Crash Fix: Fixed A crash while destroying global Engine objects during shutdown.

  • Bug Fix: Fixed some Pak file code to use an int64 instead of int32 to handle large pak files.

  • Bug Fix: Undo/Redo history in Editor now works as expected.

  • Bug Fix: Fixed a buffer overrun when copying a context string in Malloc Leak Detection.

  • Bug Fix: Changed the internal Object Array to not be allocated up front. This fixes strange OOM reports on Editor startup.

  • Bug Fix: Made TCircularQueue thread-safe.

  • Bug Fix: MediaPlayer module no longer loads on non-game threads, as this could lead to thread safety issues when the Async Loading Thread was enabled.

  • Bug Fix: Corrected a buffer overflow debug logging code.

  • Bug Fix: Fixed abbreviations not displaying properly in Editor dialogs.

  • Bug Fix: Plugged a potential LinkerLoad leak when a package that still has a linker associated with it is being destroyed.

  • Bug Fix: Calling Reset on a String sometimes now always results in a null-terminated String.

  • Bug Fix: Unchanged Levels are no longer included in Pak patches.

  • Bug Fix: When Blueprint Clustering is enabled, the Widget Blueprint template will also be added to the parent cluster when the template is being replaced.

  • Bug Fix: Asset encryption settings are now being properly parsed from .ini files by UBT.

  • Bug Fix: Enabled C++ 14 usage of decltype(auto) in TTuple. This preserves the Engine's ability to compile in C++ 11.

  • Bug Fix: Corrected Format Int To Human Readable function for values greater than 999999 or negative.

  • Bug Fix: Asset redirectors can now redirect from a parent class to a child class, which can happen when using Consolidate Assets.

  • Bug Fix: Editor tutorials and related content are not accidentally included in a cooked build. References loaded from editor project settings are now treated as Editor-only.

  • Bug Fix: Fixed issue where the cooker could incorrectly load an asset registry cache built with "-game", causing missing dependency information.

  • Bug Fix: "-cookonthefly" and "-iterate" can be used at the same time, to avoid recooking unchanged packages when cooking on demand.

  • Bug Fix: Fixed asset registry memory tracking in memreport (and added some new fields).

  • Bug Fix: Corrected int64 -> int32 Archive offset truncation in several places.

  • Bug Fix: Fixed a Serialization History bug that occurred when trying to serialize 0 bytes.

  • Bug Fix: Fixed some bad offsets in non-deterministic cook report.

  • Bug Fix: Stats chunked array will now use smaller blocks to prevent malloc deadlocks when running in the editor with TBB allocator.

  • Bug Fix: Corrected stack space errors in generated code in Debug builds caused by the amount of code generated by very large UCLASSes.

  • Bug Fix: Moved level actor cluster creation to after actor construction scripts have been re-run to make sure all actor references are processed by the cluster creation code.

  • Bug Fix: Fixed non-determinism of the Raw PCM Data Size property of Sound Waves during cooking by making it transient.

  • Bug Fix: Fixed InitCommandArgs to parse command lines and handle errors gracefully.

  • Bug Fix: Bit Writer default constructor now initializes ArIsPersistent and ArIsSaving variables.

  • Bug Fix: Corrected a lot of inconsistent warning output and log categories while running the PkgInfo commandlet.

  • Bug Fix: Solved threading deadlock caused by the rendering thread trying to minimize the window after being ejected from full screen on Windows platform.

  • Bug Fix: Fixed a potential buffer over-read when converting UTF-8 characters to TCHARs when provided with invalid UTF-8 data.

  • Bug Fix: Corrected Get Len function for Strings.

  • Bug Fix: Explicitly defined the DEPRECATED_FORGAME macro only for non-engine modules in UBT.

  • Bug Fix: Fixed LoadEngineClass local to "UnrealEngine.cpp" to check class redirects before falling back to default class instance.

  • Bug Fix: Added initialization of deprecated Slate Brush member Tint_DEPRECATED, which was causing deterministic cook issues.

  • Bug Fix: Linker no longer incorrectly outputs warnings when LOAD_Quiet has been passed as a flag to the load call.

  • Bug Fix: Fixed asserts being fired when calling TBaseStructure's Get function while saving packages.

  • Bug Fix: Error codes are no longer discarded from zlib inflate.

  • Bug Fix: Fixed a compile error in UHT when declaring a function which returns a UEnum pointer.

  • Bug Fix: Calling the auto-generated Get Outer function on a CDO will now ensure and return null rather than returning the containing Package cast to the named class.

  • Bug Fix: Corrected export outer name when reporting differences in the export map for deterministic cooking

  • Bug Fix: Fixed hot reload of modules which were unloaded, changed, then compiled and reloaded.

  • Bug Fix: Solved several bad uses of Script Map Helper and Script Set Helper, which could have skipped elements during iteration. Affected searching for subobjects, exporting JSON, copying properties in the editor and property value iteration.

  • Bug Fix: Made Archive's Reset function public and virtual so it can be overloaded. Bit Writer's Reset function is now an overload of that function.

  • Bug Fix: Changed new anonymous object names to be based on an incrementing suffix per-outer, rather than per-package to fix some non-determinism issues when cooking.

  • Bug Fix: Fixed log output when displaying the number of skipped differences when diffing cook for deterministic cooking

  • Bug Fix: Fixed UTF-8 encoding detection in FXmlFile.

  • Bug Fix: Clarified Get Allocated Size comments in containers to make it clear that they only count direct allocations made by the container, not allocations made by the contained elements.

  • Bug Fix: Fixed the 4096 char limit on FParse::Value.

  • Bug Fix: Clarified the misleading error message when omitting the WithValidation specifier on a UFUNCTION(Server).

  • Bug Fix: Disabled warning C4868 in Visual C++ builds, which warns about the evaluation order of elements inside braced initializer lists.

  • Bug Fix: Made sure that lazy object pointers are only fixed up for Play In Editor in actual PIE worlds.

  • Bug Fix: Several fixes to ensure deterministic material cook results, mainly centered around ensuring ShaderMaps are consistently serialized regardless of cook order.

  • Bug Fix: Fixed verify cluster assumptions logic so that it also checks if some other cluster root object referenced by the current cluster is referenced through 'mutable' objects lists before asserting.

  • Bug Fix: Hitch detection will now be suspended when synchronously loading a new map.

  • Bug Fix: Disabled 'Took X.Y ms to ProcessLoadedPackages' warning in the editor so it doesn't show up when cooking.

  • Bug Fix: UFUNCTION metadata is once again correctly prevented when it is for a function of the same name as one in the parent class.

  • Bug Fix: We now destroy any world-owned particle FX on replay timeline scrub, since they shouldn't persist.

  • Bug Fix: Restored assertion message logging just before breakpoint is hit in Visual Studio output window.

  • Bug Fix: Overrides of const functions correctly inherit the const-ness of the parent function.

  • Bug Fix: Corrected issue where Property Value Iterator would skip value properties when used on a map with struct keys and direct values.

  • Bug Fix: Fixed sublevels not being recognized as properly loaded during cooking, which caused non-determinism issues.

  • Bug Fix: Solved non-determinism in Widget Tree when cooking.

  • Bug Fix: Meshes with painted vertex colors that did not use static lighting will no longer be cooked differently each time when Non-deterministically cooking.

  • Bug Fix: Fixed barycentric computation case causing a check. Now outputs an invalid coordinate so the caller can resolve issues.

  • Bug Fix: Default values specified in UFUNCTION metadata for TSubClassOf parameters that do not specify the full path name will now attempt to determine the desired class from the short name.

  • Bug Fix: Trying to convert a Soft Object reference to a hard reference during async load will throw a useful error instead of silently failing.

  • Bug Fix: Reference Chain Search class used by 'obj refs' command now reports all reference chains properly.

  • New: RHI Command List Enqueue Lambda method which can be used to enqueue arbitrary tasks on the RHI thread from the render thread, without having to write lots of bolierplate RHI Command functor classes.

  • New: Added "-csvdemostarttime" and "-csvdemoendtime" command line arguments to automate CSV profiles when running replays.

  • New: On dedicated servers, .CSV profile capture writing completion can now be indicated with an empty *.complete file that is also written out.

  • New: The .CSV profiler now tracks used physical and virtual memory usage by default.

  • New: Hang detector has a duration multiplier to allow extending the hang timeout on loading screens etc.

  • New: Added frame index named events for the game, render and RHI threads. This makes it possible to track end-to-end frame progress in platform-specific CPU profilers.

  • New: FPS Charts now can output stats assuming a 20 hz framerate.

  • New: The CSV profiler is now always compiled in on the server.

  • New: The CSV profiler can now handle both int32 and float stats.

  • New: Async helper for executing functions on a given thread pool

  • New: Added "debug hitch" and "renderhitch" console commands to sleep game or render threads. Also added "debug spin" and "renderspin" console commands that spin in a tight loop instead of sleeping.

  • New: Support for target configuration whitelist/blacklist support for modules/plugins. This could permit things like a Plugin containing debug/development code being excluded from a shipping build for testing purposes.

  • New: TSharedPtr can now be used as a bool in conditionals.

  • New: Enabled the master data cryptography for iOS and Android platforms, meaning they'll now respect the project settings.

  • New: Made Class Cast Flags and Property Flags enumerated types are now visible in the Visual C++ debugger.

  • New: The ability to get the actual filename of the log file Output Device File writes to.

  • New: Crypto Keys changes:

    • Removed UAT command line params for encryption. Centrally configured by the editor settings now.

    • UAT staging now creates a small json file containing the keys and settings used for encryption and signing and stores it in the build metadata.

    • UnrealPak can be told to get its encryption settings from a json crypto file with "-CryptoKeys=".

    • UnrealPak can now accept a "PatchCryptoKeys=" parameter which gives it a filename to a cryptokeys json file that it can use to unpack the patch reference paks.

  • New: When parsing crypto settings, UBT will always load legacy data first, then the new system can override it. Provides the same key backwards compatibility that the editor settings class gives.

  • New: Format string type checking added to output log code.

  • New: constexpr support to Variant's GetType function.

  • New: Initializer list support added to TMap.

  • New: Support for brace-initialized default member initializers in UnrealHeaderTool.

  • New: Support for writing specific log channels to their own files. Command line usage is as follows, including quotation marks:

    • -LogCategoryFiles="Category1=Filename1, Category2=Filename2"

  • New: Added support for CoreRedirects when resolving Soft Object Paths. Works for class, object, and module redirectors.

  • New: Reduced asset registry memory in cooked builds by stripping out searchable names and empty dependency nodes by default, modifiable with [AssetRegistry] .ini settings.

  • New: AvfPlayer on MacOS and iOS now has added support for streaming media.

  • New: Added a Property Temp Val helper class for owning a temporary instance of any UProperty value, which can be exported as text for later inspection.

  • New: Archive will now log its name when complaining about corrupted bool values.

  • New: Added reporting of absolute byte offsets into packages when detecting differences in non-deterministic cooks.

  • New: A non-determinism warning appears if we have imported a legacy Static Mesh Component during a cook.

  • New: A non-determinism warning has been added when importing a legacy Reflection Capture Component during cook.

  • New: Added a new engine CVar, "s.PriorityLevelStreamingActorsUpdateExtraTime", for controlling how much extra time is spent registering actors after streaming in a level when in "priority loading mode". The default is 5 ms.

  • New: Created a level streaming CVar, "s.MaxLevelRequestsAtOnceWhileInMatch" (defaults to 0). When non-zero, this limits the number of level load requests when the player is actively playing in a match.

  • New: Command line overrides for cook diff settings: -MaxDiffstoLog=x overrides maximum number of differences to log per file -HeaderDiffs forces cook commandlet to show differences for header files (.uasset files) -IgnoreHeaderDiffs ignores header files' differences.

  • New: Added interpolation functions for quaternions.

  • New: Implemented a generic Levenshtein distance to core algorithms.

  • New: Deterministic cooking tests will now also log out Name/Import/ExportMap items that moved within the file

  • New: Diffing cooked packages will now dump package header differences in NameMap, ImportMap and ExportMap

  • New: Constructing a new Weak Object Pointer at cook time will generate a non-determinism warning.

  • New: The window title bar now displays the Unreal Engine 4 build configuration (Debug, Development or Test) in non-Shipping configurations. You can customize this in your project settings.

  • New: A non-determinism warning is generated when upgrading clothing assets during a cook.

  • New: Static Memory Reader supports reading from memory specified by a pointer and size.

  • New: Added a before-and-after dump of values from certain property types which have changed during a deterministic cook.

  • New: Natvis visualizers for Frame Number, Frame Time, and TRange.

  • New: Math now contains a Divide And Round Nearest function.

  • New: Async support for single-threaded applications.

  • New: Custom version mismatch messages now include the friendly name of the custom version in addition to the tag GUID.

  • New: Unreal Header Tool now emits an error if ExpandEnumAsExecs metadata references a parameter name that is not a parameter to the function.

  • New: Changed the uncompiled modules report when starting the editor to display module names instead of DLL filenames.

  • New: PkgInfo commandlet can now dump all the info to a separate file for easier diffing with "-dumptofile=filename" argument.

  • New: PkgInfo commandlet can now dump information for unversioned packages

  • New: PkgInfo commandlet can now dump the list of properties that have been serialized for exports. This can be used for comparing cooked assets when investigating deterministic cooking issues.

  • New: -diffonlybreakoffset has been added to provide a way to break into the debugger when serializing data at a particular absolute offset during a -diffonly cook.

  • New: Functionality to track and log the debug name stack for diffonly cooks.

  • New: Randomize the package order when doing diffonly cooks, which can be explicitly disabled via -DIFFNORANDCOOK.

  • New: Allocator (TNonRelocatableInlineAllocator) which eliminates conditional logic from GetAllocation(), at the expense of not being trivially relocatable. This provides a significant performance increase for allocators that are dereferenced frequently, but prevents instances of it being stored inside other allocators (which are expected to be trivially relocatable by default).

  • New: Get Assets By Tags (Asset Registry function) optimizes tag look-up when you can have several potential values.

  • New: Added the ability to dump all objects to log before cooking a package while doing deterministic cook tests to help with tracking problems between deterministic cook tests.

  • New: Get Device Temperature Level function. iOS returns a value between 0 and 3, matching the values of the Temperature Severity enumerated type, while Android returns a temperature in Celcius, matching what was already being retrieved from the BatteryState.

  • New: Added an error message directing the user to the problematic file when the XML parser fails.

  • New: USE_SMALL_DELEGATES, USE_SMALL_MULTICAST_DELEGATES and USE_SMALL_TFUNCTIONS macros which switch from an inline allocator to a heap allocator for these types when defined to 1 at a project level. These will trade reduced object footprints for extra heap allocations.

  • New: The "-SaveForDiff" command line argument makes it possible to save packages that are different from their disk versions when running deterministic cooking tests.

  • New: Exec command CoreUObject.AttemptToFindUninitializedScriptStructMembers that can be used to try to find uninitialized reflected pointers in in USTRUCT() declarations

  • New: Directories To Never Cook and Directories To Always Cook in the packaging settings now support Plugin and Engine directories. It will convert from the old format of relative to game content to the new /Game/ format on startup. If you have any game-specific code accessing this you will have to take this into account

  • New: Exposed an optional name to Create Dynamic Material Instance.

  • New: Added a function, Is Async Loading Suspended, to check if async loading is currently suspended.

  • New: Enabled the overloading of functions which take TFunction or TFunctionRef of different signatures when the lambda being passed to them will unambiguously bind to only one of the overloads.

  • New: Changed Visual C++ debugger visualization of TFunctions to allow a lambda to be right-clicked on and the source jumped to by selecting "Go To Source Code".

  • New: MallocStomp can now be enabled on desktop platforms using the "-stompmalloc" command line argument.

  • New: Initial implementation of tracing profiler to show CPU and GPU on the same timeline. Use "TracingProfiler frames=N" console command to trigger a capture of the next N frames. Trace is saved to disk as a JSON file into the "Saved/Profiling/Traces" directory. Trace file uses Google Tracing format and can be visualized in Chrome built-in profiler (chrome://tracing).

  • New: New parameter to "obj list" command, "-INSIDECLASS=classname", filters objects that are inside of all objects of the specified class.

  • New: Non-determinism is reported when changes to CDOs and archetypes are made by Pre Save during a cook.

  • New: TDefaultReferenceCollector and Simple Reference Processor Base classes to extract common code for classes that are used by TFastReferenceCollector

  • New: Option to save non-deterministically cooked assets to a folder specified by "-diffoutputdir", when differences are detected during a "-diffonly" cook.

  • Improvement: Made a minor optimisation to the deserialization of bad properties by using Seek() instead of skipping one byte at a time.

  • Improvement: Archetype pointer will now be cached to avoid locking the object tables when acquiring its info. It should also be faster this way regardless of any locks.

  • Improvement: Optimized lazy pointer fixup when starting Play In Editor. It should be up to 8x faster now.

  • Improvement: Optimized asset registry filter intersection.

  • Improvement: Moved PostLoad to the async loading thread where possible. This reduces the time the main thread spends on PostLoad by about 20%.

    • Added a .ini setting to disable PostLoad on ALT globally. In the [/Script/Engine.StreamingSettings] section, add "s.AsyncPostLoadEnabled=True".

    • Added command line param overrides: "-NoAsyncPostLoad" "-AsyncPostLoad"

  • Improvement: Pak Signing:

    • Unified naming of pak precacher and signed archive reader signature check functions to make it easier to search for them in crash reporter.

    • Formatted the signed archive reader output to match the pak precacher.

    • Optimization for pakprecacher signature checks. Instead of locking the cached files mutex for every decoded signature, take a local copy in blocks of 16.

  • Improvement: Crypto:

    • AES keys that are too long or short (need to be 32 bytes) will now emit a warning when being parsed, and be truncated or expanded before adding to the crypto settings.

    • Signing keys will emit an error when they are too long (greater than 64 bytes).

    • Unrealpak will still assert when invalid settings are passed via the other mechanisms (command line or -encryptionini mode).

    • Settings via the crypto .json file should now be sanitized and not cause issues.

  • Improvement: Headers for compressed blocks in a pak file now contain relative offsets, reducing the amount of data entropy between builds and improving patch efficiency.

  • Improvement: Use-after-free detection mechanism and physical memory usage of MallocStomp on Windows.

    • MallocStomp on Windows will now reserve virtual address space for every allocation and then commit physical pages only to the valid usable part. Physical pages will be unmapped on Free, but virtual address space will not be released and therefore will never be re-used.

  • Improvement: Unhashing unreachable objects will now also be done incrementally, just like the purge phase of Garbage Collection.

  • Improvement: Faster GUID creation. Previous method used a system Date / Time system call, which could be slow on some platforms. This change can decrease GameThread time on those platforms.

  • Deprecated: Direct access to Archive members Ar Is Text Format, Ar Want Binary Property Serialization, Ar Force Unicode, Ar Is Persistent, Ar Is Saving, Ar Is Transacting, Ar Licensee UE4 Ver, Ar Engine Ver, Ar Engine Net Ver and Ar Game Net Ver private. These should now only be accessed via their associated member functions.

  • Removed: Packaged UE4 applications that you distribute will no longer send anonymous usage data to Epic. Previously, this had to be disabled in project settings.

Garbage Collection
  • Crash Fix: Fixed a crash in Garbage Collector, when an object that was still being loaded was added to GC cluster.

  • Crash Fix: No longer crashes after a skeletal mesh that was already in a GC cluster created a new BodySetup object in Garbage Collector.

  • Crash Fix: Fixed a crash with async loading code referencing objects that were marked as Pending Kill in Garbage Collector.

  • Bug Fix: Fixed a possible hang when worker threads are preventing the Garbage Collector from running.

  • Bug Fix: Serializing object will now be passed to the Garbage Collector so that it can be logged in case the referenced object is thrashed.

  • Bug Fix: Global Garbage Collector Sync Object no longer wastes cycles in non-game threads while waiting for Garbage Collector to finish running.

  • Bug Fix: Objects that still haven't been through Post Load code will be added to Garbage Collector Clusters as 'mutable' objects, so that clusters can prevent them from being destroyed too early.

  • Bug Fix: Fixed Garbage Collector Clustering issues with Async Loading Thread enabled.

  • Bug Fix: Parallel Garbage Collection on the Mac is no longer turned off by default.

  • Bug Fix: Added code to detect hangs and log objects preventing the Garbage Collector from finishing when doing full purge in cooked builds,

  • Bug Fix: When async loading, GC Clusters will be created after packages have been processed to avoid situations where some of the objects that are being added to a cluster haven't been fully loaded yet

  • New: The Garbage Collector and the Async Loading Thread now coordinate timing, with the Async Loading Thread attempting to finish its current work to give GC a chance to run whenever GC sends a notification that it would like to run. The Async Loading Thread is more stable as a result.

  • New: Added "gc.ForceCollectGarbageEveryFrame" console variable that triggers a forced GC every frame.

  • New: Async package names will now be dumped to log when reporting Object references in Garbage Collection.

  • New: Added the ability to sort clusters by name/object count/mutable object count/referenced clusters count when dumping them with "gc.ListClusters" command.

  • New: Added the ability to toggle incremental BeginDestroy with "gc.IncrementalBeginDestroyEnabled".

  • Improvement: Set the minimum GC cluster size to 5 with "gc.MinGCClusterSize" console variable so that GC doesn't have to process micro clusters, which are more expensive to process than individual objects.

  • Improvement: Optimized Mark Phase of Garbage Collection by up to 10ms (depends on the number of objects and the number of threads available) by making it run in parallel and removing a huge array preallocation which we didn't need.

  • Improvement: Garbage Collector assumption verification should now be up to 4 times faster.

  • Improvement: GC Cluster creation will now be time-sliced to avoid hitches on the game thread when streaming packages.

Editor

  • Crash Fix: Fixed a crash when simplygon failed to generate LOD for Skeletal Mesh.

  • Crash Fix: Fixed a crash when saving HLOD assets if some have not been fully regenerated.

  • Crash Fix: Fixed an occasional Garbage Collector crash in HLOD proxy generation.

  • Crash Fix: Fixed a crash when the HLOD outliner is open in PIE when actors are destroyed.

  • Crash Fix: Generating HLODs for mesh components with no mesh assigned no longer crashes.

  • Crash Fix: Generating HLODs from child actor components no longer crashes.

  • Crash Fix: Fixed a crash when removing HLOD setup asset.

  • Crash Fix: Fixed a crash when viewing some complicated material instances generated by the HLOD system.

  • Crash Fix: Fixed a crash when overwriting existing level during level save as.

  • Crash Fix: Fixed a circular referencing issue causing the conversion of a BSP to a static mesh to crash.

  • Crash Fix: Fixed a crash when re-importing an animation and choosing a skeleton for the anim sequence.

  • Crash Fix: Fixed FBX import crash.

  • Crash Fix: Fixed a crash in Mac editor when copying unusual characters in the output log.

  • Crash Fix: Generating HLODs in a map with sublevels that also have HLODs no longer crashes.

  • Crash Fix: Fixed a crash occurring when Propagating Vertex Colors to Asset's source mesh.

  • Crash Fix: Using "Save As" on maps having more than 2 GB of build data no longer crashes.

  • Bug Fix: Fixed incorrect group name being returned by Get Group Name function for stat groups, causing incorrect editor tooltips.

  • Bug Fix: Fixed "Check Out Assets" window not properly receiving keyboard focus.

  • Bug Fix: Fixed bug causing "HighResShot" command to capture shots at a lower resolution in Immersive Mode.

  • Bug Fix: Scene Capture Component 2D properties, Hidden Actors and Show Only Actors, are no longer displayed in the Scene Capture Component 2D's Blueprints layout panel, but are still available on Blueprint nodes.

  • Bug Fix: Fixed an asset registry size calculation bug.

  • Bug Fix: Fixed Play in Editor recorded replays not writing their last marker when the user goes to end the simulated instance while recording.

  • Bug Fix: Fixed issue with out of range UV sampling in material baking.

  • Bug Fix: Fixed mesh merging producing incorrect UV mapping for mirrored meshes.

  • Bug Fix: Fixed texture binning UV transforms not being correct according to the gutter settings.

  • Bug Fix: Removed the two-actor limit when generating HLOD hierarchies.

  • Bug Fix: Fixed a bug in the editor where a user's Editor Startup Map setting would be ignored if the project had no default startup map set.

  • Bug Fix: Collision generation is now disabled by default for HLOD proxy meshes.

  • Bug Fix: Fixed a memory leak in FBX Scene during import.

  • Bug Fix: Fixed extra re-allocation of memory buffer holding files during asset import.

  • Bug Fix: Fixed case in Perforce source control code where the server available flag was set even when the server was not successfully connected.

  • Bug Fix: Output Log suggestions list is now clamped to the work area width of the monitor that hosts the widget.

  • Bug Fix: Fixed an issue where saving a sub-level level would cause Map Build Data to be deleted.

  • Bug Fix: Selected joints can now be removed even after bone simplification fails.

  • Bug Fix: HLOD generation commandlet now caches any shaders it generates.

  • Bug Fix: Fixed infinite loop in Simplygon mesh reduction when a LOD actor is encountered with no valid meshes.

  • Bug Fix: HLOD rebuild resave packages commandlet now does not pre-checkout levels.

  • Bug Fix: Removed spurious Simplygon errors when rebuilding HLODs.

  • Bug Fix: Popping the view out of a locked actor and manipulating the view will no longer jump to the previous "look at" location.

  • Bug Fix: Fixed static mesh simplification with input meshes that have nearly singular triangles. Applies to Static Mesh LODs.

  • Bug Fix: A new level now prompts to be saved when lighting or build data has been modified.

  • Bug Fix: Fixed property table not working with multi-line editable text.

  • Bug Fix: Per-instance added components marked as editor only will now always display in the component tree.

  • Bug Fix: Fixed macOS Magic Mouse zoom in world composition editor.

  • Bug Fix: We now display a Blueprint's parent Blueprint class in the content browser when hovering over it.

  • Bug Fix: Fixed not being able to enter simulate more than once in a row.

  • Bug Fix: Corrected UV generation for merged HLOD meshes.

  • Bug Fix: Fixed expand/collapse issues and performance issues for details customizations which were using external properties.

  • Bug Fix: Updating the max on the size of texture the material proxy now generates successfully. The old max value could cause int32 overflow.

  • Bug Fix: Merged, negative-scaled meshes now have materials mapped correctly.

  • Bug Fix: Fixed emissive scale not being set correctly during material baking.

  • Bug Fix: Fixed bug where "Merge Actors" or HLOD proxies result in too many mesh sections.

  • Bug Fix: FBX exporter now supports non-uniform scale scene transforms for skeletal meshes.

  • Bug Fix: Fixed undo spam when changing colors in the gradient editor.

  • Bug Fix: Added Client target options for iOS, TVOS and Android ETC1a flavor.

  • Bug Fix: Key Up triggers no longer hit the disk during PIE sessions.

  • Bug Fix: Editor MacOS main menu now correctly displays unicode items for keyboard shortcuts.

  • Bug Fix: Shared DDC is now correctly being used for installed engine builds.

  • Bug Fix: Niagara Editor fixes:

    • You can only Add Parameters in graphs where it makes sense to do so. Promoting variables also follows the same logic.

    • Fixed community issue where you could connect an input and output node and encounter a check that the warnings variable array was no longer the same size as the variables array.

    • Multiple fixes to the Niagara Spline Data Interface. It is currently only supported on CPU VM.

    • Niagara Systems now run their Update on the first frame with a small delta time so that they can begin spawning immediately after creation. This also simplifies Emitter and System Spawn logic by guaranteeing that if you want to animate a value, you don't have to special-case the first frame.

    • Added support for dynamic inputs that don't have any external inputs.

  • Bug Fix: Niagara Editor Houdini fixes:

    • Added a version to Niagara Data Interface Parameters CS Houdini CSV to avoid further issues when deserializing them.

    • Fixed a bug causing no points to spawn when all points in a file spawned at the same time value.

    • Removed unneeded tests/restriction when calling functions requiring time values on files without time values. When no time value is in the file, it is treated as time 0.

    • Fixed differences between GPU/CPU code.

    • Fixed special attributes column for Vectors in the CSV file not properly named after being expanded.

    • Moved the logic of Get Point IDs To Spawn At Time to Houdini CSV so the function can be called from Blueprints.

  • New: Datasmith now imports 3ds max object user-defined properties and CAD metadata as Unreal readable metadata through the Datasmith User Data.

  • New: Added a way to generate diffs from editor transactions

  • New: Added support for relative asset source paths in content plugins.

  • New: Built Data is now deleted with map files.

  • New: Added support for importing grayscale PSD images.

  • New: Implemented vertex welding threshold in the quadric simplifier.

  • New: The FBX importer converts "LODX_" prefixes into "LodGroup".

  • New: Added a "Reimport All" feature for both static and skeletal mesh. Reimport All will reimport the base LOD and also reimport all custom LODs and regenerate the generated LODs.

  • New: Added source import filename per LOD for static meshes.

  • New: Added HLOD "Save All" button.

  • New: Added UV gutters to material atlasing when merging meshes.

  • New: Enabled Blueprint Read Write for the bool Enable Auto LOD Generation.

  • New: Added the ability to strip UV channels from merged meshes.

  • New: Added new 'lowest detail LOD' setting to mesh merging & allowed base material override.

  • New: Added a property on Primitive Component to be excluded from a specific HLOD level. This behavior can be enabled inside of the HLOD level settings with the "Allow Exclusion" boolean.

  • New: Added the ability to set base material for Hierarchical LOD proxy materials. This can be done in Project Settings, HLOD Setup asset and world settings.

  • New: Added -csv parse option to the OBJ LIST command.

  • New: Added new static mesh instancing tool.

  • New: Added editor scripting utilities plugin.

  • New: Added option to auto remap morphs when generating LODs.

  • New: Made it possible to get the value address of a struct property via Get Value Data for struct detail customizations.

  • New: Added info/warning and error message storage to all the source control operation structures so additional information can be made available via the Source Control Operation Get Result Info function.

  • New: Ensured that the Source Control Provider's Execute delegate is called on initial connection even if it fails immediately. Modified Perforce, Git and Subversion source control providers to do the same.

  • New: Added a delegate to the function Source Control Windows Choose Packages To Checkin that gives info for result, result description, files added, files checked in and flag indicating whether files were checked out again. Also added result info to the function Source Control Windows Prompt For Checkin.

  • New: You can now label the colors stored in the theme bar of the Color Picker. Right-click on any color to give it a label.

  • New: HLOD now minimally rebuilds according to whether source data (actors, materials, meshes etc.) has actually changed.

  • New: Tweaked numbers to maintain previously perceived wire thickness in various graph-based editors.

  • New: Added support for clipping ProxyLOD geometry. Clipping volumes will now be supported by the HLOD generation system allowing the user to specify regions to be clipped from the proxy geometry.

  • New: When generating distant proxy geometry (for example HLOD), added hole filling and the ability to specify the base color that will be used for proxy geometry that can't be associated with source geometry (e.g. a newly closed window or door).

  • New: Added ability for HLOD levels to reuse clusters of the previous HLOD level. For example, HLOD level 1 can have the same clusters as HLOD level 0.

  • New: Added a command line argument to specify a working directory for shader compilation. For example, "-ShaderWorkingDir=D:\ShaderWorkingDir".

  • New: Added the option to close tabs to the right of the active tab.

  • New: The experimental ProxyLOD system now has support for generating split normals on hard edges, and additionally selecting the method used for normal calculation.

  • New: Added import/export of Static Mesh user-defined FBX properties as metadata.

  • New: Linear Color Curves now create with 2 keys at 0 and 1, and you can shift-click to add both a color and an alpha key.

  • New: You can now edit the H,S,V of a color curve in the curve editor. This fixes the curve in-editor not reflecting the sRGB color.

  • New: You can now create, playback and manipulate Geometry Cache Tracks when Geometry Cache Components are added to the Sequencer.

  • Improvement: Mesh merging uses available texture space better.

  • Improvement: Optimized editor startup time.

  • Improvement: Improved the experimental ProxyLOD system to make it more robust and eliminate a potential hang.

  • Improvement: Optimized skeletal mesh import speed for larger meshes.

  • Improvement: Scene outliner is now more performant. (especially during Play In Editor)

  • Improvement: HLOD workflow:

    • Levels now do not get dirtied unless actual changes are made to the LOD actors.

    • UI reworked to promote standard workflow (i.e. regeneration without dirtying the level).

    • UI states now better expose available options.

    • Made horizontal/vertical arrangements work better.

    • Buttons are now coded to their 'danger level'.

    • LOD selection now follows the dropdown convention found in other parts of the editor.

  • Improvement: Removed extra file read into memory buffer during FBX import.

Content Browser
  • Crash Fix: Fixed a crash when content hot-reloading the build data for the current world, or a world with streaming sub-levels.

  • Crash Fix: Fixed a crash after attempting to content hot-reload a package that is too new.

  • Crash Fix: Saving over the level you're about to load no longer crashes.

  • Bug Fix: Fixed "ghost asset" in Content Browser when an asset is added and renamed before the Recently Added Assets list had a chance to be processed.

  • Bug Fix: Fixed content browser favorites making config files very large.

  • Bug Fix: Updated config file to keep folder color in sync.

  • New: Added "Search Asset Class Names", "Search Asset Paths", and "Search Collection Names" toggles to the Asset View options. These options allow the user to further filter their search results and appear under a "Search" header in the "View Options" panel on the bottom right of the Content Browser / Asset Picker.

  • New: Added "LODs" searchable tag to "Skeletal Mesh" assets.

  • New: Add a new menu to show the metadata of an asset.

  • New: Asset metadata can now be transferred to the Asset Registry through configurable metadata tags in the Asset Manager Settings.

  • New: Added "recently opened assets" filter under Other Filters in the Content Browser. It shows the most recently opened assets, and defaults to storing 20 assets. You can change the number of assets saved for the filter in Editor Preferences.

  • New: The Editor now saves editor config to file first time a favorite folder is added in the Content Browser.

Foliage
  • New: Added the bool Enable Density Scaling flag to Landscape Grass assets, to prevent density scaling for grass types with gameplay significance.

  • New: Cooking the instance buffer is now supported.

  • Bug Fix: Fixed the array duplicate button behavior of Per Instance SM Data.

  • Bug Fix: Disallowed specifying two types of the same grass asset in a material.

  • Bug Fix: Foliage density scaling in editor is applied correctly when not in foliage editing mode.

  • Bug Fix: Fixed Editor instance count to only include placed instances. Calling Generate Procedural Content will no longer automatically remove the current content.

  • New: Added the possibility to edit the full Body Instance on a Landscape Spline Segment instead of only some parameters.

  • New: Exposed LD Max Draw Distance.

  • Improvement: Changed the UI of the Copy tool to be more clear, and added a drop down that will suggest a valid size for the specified heightmap to import.

Landscape
  • Bug Fix: When changing Component size, Foliage will be properly added again.

  • Bug Fix: World Offset is applied properly to Landscapes.

  • New: Added two new console variables to allow scaling of the landscape LOD distribution values in a device profile or scalability group, "r.LandscapeLOD0DistributionScale" and "r.LandscapeLODDistributionScale".

  • New: Added ability to set Landscape Material from an Editor Blueprint.

  • Improvement: Added some debug text info to Landscape Layer Usage Material, listing how many layers each component uses. This is much easier to read than the old "stripes" method.

  • Improvement: Changed the UI of the Copy tool to be more clear, and added a drop down that will suggest valid size for the specified heightmap to import.

  • Improvement: Added the possibility to edit the full Body Instance on Landscape Spline Segment, instead of only being able to edit some parameters.

  • Improvement: Exposed LD Max Draw Distance.

Material Editor
  • Crash Fix: Fixed a crash on pasting comments. All other accesses to Material Expression Comment check its validity first.

  • Crash Fix: Fixed a material editor crash if content hot-reloading a texture used by the material.

  • Bug Fix: Prevented materials from showing up in the editing assets list twice.

  • Bug Fix: Updating an atlas texture now correctly updates materials and material instances.

  • Removed: Default keybinding for 'apply' in the material editor removed.

Scripting
  • Crash Fix: Fixed crashes associated with Python threads when external C code called into Python without taking the GIL.

  • Bug Fix: Fixed generated Python types sometimes using reserved names.

  • Bug Fix: Python files executed from the Output Log can now support arguments.

  • Bug Fix: Fixed Python parameter packing sometimes treating bool output parameters as return values.

  • Bug Fix: Removed redundant outer parameter from find_asset, load_asset, find_package, and load_package.

  • Bug Fix: Python now honors Edit Instance Only and Edit Defaults Only when setting property values.

  • Bug Fix: Fixed default value application for some struct types that use a custom default value format when exported by UHT.

  • Bug Fix: Fixed old-style enums being missed by the Python glue generation if they're only referenced by a property of function.

  • Bug Fix: Fixed context leaking between the console and files.

  • Bug Fix: Fixed lingering exception state when converting a dict to a struct in Python.

  • Bug Fix: Fixed Execute Python Script failing when passed file arguments.

  • Bug Fix: Implemented negative indexing for Python wrapped arrays.

  • Bug Fix: Fixed Python menus failing to execute scripts with spaces in their name or path.

  • New: Source Control API:

    • Updated Source Control Helpers commands to use smart file strings that can convert from any of fully qualified path, relative path, long package name, asset path, or export text path.

    • Added script bindings and helper functions for version control (Source Control Helpers) for the Editor as Source Control class and associated Source Control State.

  • New: Added support for struct operator extension functions in Python.

  • New: Exposed asset import and export.

  • New: The CDO can now be accessed via the get_default_object class method on Python wrapped object types.

  • New: Added Python iterators for selected actors. (Actor Iterator, Selected Actor Iterator)

  • New: Added Python iterators for Unreal objects, classes, and structs, as well as the Python types wrapped by Unreal classes or structs. (Object Iterator, Class Iterator, Struct Iterator, Type Iterator)

  • New: Exposed Scoped Slow Task to Python to allow you to report progress to the editor while performing slow, blocking tasks.

  • New: Added make and break support in Python.

  • New: Logging runtime errors or warnings will now produce Python exceptions.

  • New: Added support for init_unreal.py start-up scripts. These can be placed in any known sys.path in Python, including the Content/Python folders we automatically add, and the UnrealEngine/Python directory under the user's home directory.

  • New: Added support for UPARAM(ref) on arguments exposed to Python.

  • New: Added support for extension constants in Python.

  • New: Moved Editor Scripting Utilities to be a general Editor plugin.

  • New: Exposed generic get_default_object function that takes a type and returns the CDO.

  • New: Marked Asset Registry Helpers functions dealing with Asset Data as Script Method so they're available as methods of Asset Data in Python.

  • New: Exposed some asset registry functions that may be useful in a commandlet environment.

  • New: Added support for deprecated (renamed) classes, structs, enums, functions, and properties in Python.

  • New: Added warnings for conflicting Python type and field names.

  • New: Added support for using Python callables with delegates.

  • New: Added assign method to Python exposed structs.

  • New: Added callbacks for when Python is initialized and shutdown so that external modules can hook in appropriately.

  • New: Updated wrapped enums to be more consistent with native Python enums.

Sequencer
  • Crash Fix: Fixed Sequencer copy/paste crash.

  • Crash Fix: Fixed crash when trying to record audio without any active capture devices. A warning is logged if the number of input channels is not 1 or 2.

  • Crash Fix: Added Null checks to prevent crash when saving the default state of a spawnable.

  • Crash Fix: Opening a new sequence while another is still active will no longer crash.

  • Crash Fix: Fixed a crash on compiling Blueprint with a deleted actor sequence.

  • Crash Fix: Fixed a crash when an actor factory is not found.

  • Crash Fix: Fixed a copy/paste crash for lights.

  • Crash Fix: Added template signature that is re-generated every time the base template is regenerated, which invalidates evaluation fields. Fixed a crash where the same sub-sequence is instantiated multiple times in a sequence is saved without the master sequence also being saved.

  • Crash Fix: Sequencer now resets if the focused movie scene is null. This fixes a crash if the user is focused in on a shot and undo takes the user past the point of where the shot was created.

  • Crash Fix: Fixed a crash with stale section pointer.

  • Bug Fix: Restricted spawnables from being created if they have a Class Within that Movie Scene is not a child of.

  • Bug Fix: Sequencer now skips if the binding ID's sequence can't be found.

  • Bug Fix: Sequencer overrides the animation asset in the player state if it doesn't match the animation asset that's being evaluated.

  • Bug Fix: HDR Compression Quality is clamped between 0 and 1 for Movie Scene Captures.

  • Bug Fix: Fixed overlapping ranges being inserted into the evaluation field during compilation.

  • Bug Fix: Fixes curves changed on end drag so that only curves that had keys/tangents changed receive notifications, otherwise all loaded curves were getting notified that they were changed.

  • Bug Fix: Sequencer now swaps the camera object to the camera component's owner if it's not the same.

  • Bug Fix: The UI for adding tracks that only support one instance (such as the Fade track) now gets disabled after an instance has been added to the sequence.

  • Bug Fix: Sequence Recorder now logs an error if the number of frames changes while recording. This can happen if the skeleton changes while recording.

  • Bug Fix: Sequencer now clears autoscrub offset when stopping autoscroll.

  • Bug Fix: Sequencer now determines whether a transform track is for a camera by using the spawned object or template.

  • Bug Fix: Sequencer now prevents Goto and Transform boxes from overlapping by allowing them to be visible at the same time in an autosized horizontal box.

  • Bug Fix: Fixed sibling folders being allowed to have the same folder name.

  • Bug Fix: Removed the bool Keep Stale Tracks so that stale tracks are now always purged.

  • Bug Fix: Fixed unbound possessable components when pasting spawnables.

  • Bug Fix: Convert to possessable now uses object template instead of copying properties. This fixes MIDs getting lost when converting to spawnable and back to possessable.

  • Bug Fix: Property values are no longer lost when converting back and forth from possessable to spawnable.

  • Bug Fix: Fixed stale object references remaining in Level Sequence Binding References when using convert to spawnable/possessable, or assigning an actor to an unresolved binding.

  • Bug Fix: Sequence Recorder no longer creates a spawn section if the object is a possessable.

  • Bug Fix: Removed Sequence Actor Tag when converting to possessable. This fixes the icon for actors so that they don't appear as spawnables after converting to possessable.

  • Bug Fix: Sequencer now stops recording if the preview window is destroyed.

  • Bug Fix: Locked down the first and last keys in the redundant keys removal range so that they're unaffected.

  • Bug Fix: Restored hud based on whether it was enabled. This fixes a bug where the HUD is getting restored to true after the level sequence actor disables it.

  • Bug Fix: When enabling the "MovieCapture", the Stereo-3D display now does not turn off.

  • Bug Fix: Spacer nodes are no longer selectable.

  • Bug Fix: Validated actor names passed to Set Actor Label to ensure 'None' isn't passed in, which could corrupt levels.

  • Bug Fix: Sequencer no longer preserves root component when copying object properties.

  • Bug Fix: Fixed Key Frame Manipulator assignment operators and copy/move constructors.

  • Bug Fix: Sequencer now jumps to the playback start frame instead of 0 to start playback for recording.

  • Bug Fix: Sequencer no longer automatically marks transforms to be recorded by sequence recorder.

  • Bug Fix: Sequence template source signatures are now also compared to catch the case where a sub-sequence asset has been saved but not modified.

  • Bug Fix: Sequencer now stops all sounds before generating audio waveforms.

  • Bug Fix: Appended command list to global level editor actions so that shortcuts for recorder are accessible in level editor.

  • Bug Fix: Sequencer sections that do not properly support infinite time ranges will no longer allow you to set an infinite range.

  • Bug Fix: Audio that is split into 2 channels no longer gets a duration that's twice as long as it needs.

  • Bug Fix: Level Sequences with spawnables no longer mark the package as dirty on close unless the spawnable default state has actually changed.

  • Bug Fix: Flipped Cine Camera Vista Vision width and height.

  • Bug Fix: Fixed FBX camera import so that the default tracks use the values from the FBX instead of inheriting the default properties of the camera.

  • Bug Fix: Changed path/attach track sequence binding ID to currently focused sequence ID so that bindings can be created in subsequences.

  • Bug Fix: Fixed Set Playback Position so that it jumps or plays based on playback status.

  • Bug Fix: Sequencer no longer shows Transform/Path/Attach track if the actor has the "Mobility" property hidden.

  • Bug Fix: Dragging the time slider no longer causes the time slider to ignore the Snap to Interval setting when "Snap to Keys While Scrubbing" is enabled.

  • Bug Fix: Made the track color picker focusable so that it will close when you click away or lose focus.

  • Bug Fix: Added support for "Enter" key to add assets for all sequencer track editors that have asset pickers.

  • Bug Fix: Legacy Blueprint spawnables are now purged from Level Sequence packages on load.

  • Bug Fix: Fixed issue with being able to drag/drop montage onto Animation Track in Sequencer.

  • Bug Fix: Fixed an issue with Sequence Evaluator to handle properly when jumps from end to front or front to end.

  • Bug Fix: When getting selected tracks for the external selection api, include tracks if any of their child nodes are selected. This behavior now matches the behavior for object guid external selection.

  • Bug Fix: Fixed instances where sequencer data was being modified without calling Notify Movie Scene Data Changed.

  • Bug Fix: Allowed actor components for synchronization.

  • Bug Fix: Fixed some sequences not evaluating correctly with "Evaluate Sub Sequences in Isolation" enabled.

  • Bug Fix: Fixed a case where the first recording is null but there are other valid recordings. Stop Recording wasn't getting called because the EndPIE delegate wasn't bound since ActorWorld was incorrectly set.

  • Bug Fix: Fixed edits to sub-sections not invalidating their sub sequence data for deep hierarchical sequence structures.

  • Bug Fix: Fixed various issues copy and pasting Spawnables from one sequence to another and within the same sequence. No longer prints superfluous warnings on paste and properly initializes the new object template so that it does not get garbage collected/cause issues on save.

  • Bug Fix: When rotating Euler angles with gizmos, rotation keys are now wound correctly.

  • Bug Fix: The Camera/Shot Lock button no longer changes state inappropriately when exiting a sequence.

  • Bug Fix: Step to Next/Previous key now works for all tracks when none are selected.

  • New: Added notification when the blend type is changed.

  • New: Dragging onto a particular row would move out any overlapping sections to make space for the newly created section. Newly created sections are now selected and throbbed to draw attention to themselves.

  • New: Added getter for media player in media sound components.

  • New: Disabled sub-sequences now show [Inactive] in their title bars in the Sequencer UI. This helps communicate why a sequence isn't being evaluated as you scrub through it.

  • New: Added an option to toggle 'disable screen percentage' in Movie Scene Capture. By default this is on (no change to current behavior).

  • New: Items that are now added to the Sequencer via the "+Track" menu will be selected after being added. If a folder is selected the item will be added inside of the folder.

  • New: Split camera properties to two groups, "Camera Options" and "Camera Settings". The cine camera now hides properties in the "Camera Settings" group so that properties like the bool Constrain Aspect Ratio (in the "Camera Options" group) can be visible.

  • New: Sequence Recorder can now store preset groups of Actors to record.

  • New: Added logging per frame to Movie Scene Capture.

  • New: Added section selection throbbing.

  • New: Sequencer Sub section now has a takes menu.

  • New: Added attenuation visualizer for media sound components in the media player editor.

  • New: Added sprite visualization to media sound components.

  • New: Removed unfinished overlay asset types from Content Browser menu.

  • New: Added various media assets to Content Browser filter menu.

  • New: Added FBX property mapping for "FocusDistance" to "FocusSettings.ManualFocusDistance".

  • New: Added format mapping for the name of the current camera.

  • New: Enabled "Run Construction Scripts in Sequencer" by default.

  • New: Implemented thread scheduler for higher performance in image sequence loaders.

  • New: Exposed Is Reversed from Movie Scene Sequence Player Sequence Recorder.

  • New: Renamed Automated Level Sequence Capture's StartFrame and EndFrame to Custom Start Frame / Custom End Frame to reflect that it is user-overriden. This will also resolve upgrade issues due to the variable datatype changing.

  • New: Import the camera switcher track as a camera cut track in Sequencer when importing an FBX with the "Create Cameras" option selected.

  • New: Similar to Matinee, there is now a Skip Anim Notifies Toggle for being to control whether or not notifies should be fired when the animation plays in the sequence.

  • New: Added option to toggle the behavior of locking the rail mount to the orientation of the spline. By default, the option is off. (No change in behavior.)

  • New: Added ability to Rekey the selected key at the current time.

  • New: Bound rename command to selected track so that F2 shortcut invokes renaming.

  • New: Array elements within USTRUCT properties can be animated.

  • New: Adding a single key to the Particle Toggle track now makes an infinite range section that is displayed in the UI.

  • New: Moved Record to possessable "Actor Recording" group.

  • New: A selected animation track in the sequencer will now show the animation frame number of the sequence when it is playing.

  • New: Event names are shown when the event track is selected.

  • New: Added the option to key a group of transform channels instead of just the changed channel, or all of them.

  • New: Transform sections in the sequencer now include a Quaternion Interpolation option which takes the smallest rotation path during rotation interpolations.

  • New: Dragging the left or right handles of the Time Range slider in Sequencer will now zoom your view in on the current center of the screen. This prevents the view from being translating as you tried to zoom in which caused issues at high zoom levels.

  • New: Scrubbing with the Snap to Keys setting enabled now mirrors the behavior of the "jump to next key" feature. If a track is selected, it only snaps to keys on the selected track, otherwise it snaps to all keys.

  • New: Enabled keying the "Enable Look at Tracking" toggle on Cine Camera.

  • New: Added create pose asset to skeletal animation section. This allows animators to blend animations in sequencer and create new pose assets from them.

  • New: Exposed default level sequence instance data to Blueprints.

  • New: Added level name to spawn a spawnable into. Added sublevel menu option to set the level.

  • New: Added Edit -> Autosize Section Length to duration of source.

  • New: Added event names to selected event tracks.

  • New: Sequencer will now focus the vertical scroll view on newly created items.

  • New: Initial scripting exposure and support for movie scene types, including:

    • Find/add/interate master tracks.

    • Find/add/interate bindings (both possessables and spawnables).

    • Find/add/interate tracks on bindings.

    • Add/interate sections on tracks.

    • Get/Set section ranges.

  • New: Timecode recording saved as editor-only data to the Movie Scene Section and Movie Scene.

  • New: Introduced a common base class for all movie scene channel data.

  • New: The Transform dialog (Ctrl + M) now can now transform sections, including when you have a section and keys within that section selected.

  • New: Added audio support to FCP XML import/export.

  • New: Exposed "Add Scalar Parameter Key", "Add Vector Parameter Key", and "Add Color Parameter Key."

  • Improvement: In Sequencer, inactive tracks are dimmed.

  • Removed: Removed the ability to bind sequencer to PIE/simulate while recording.

  • Removed: Removed experimental image plate media playback functionality.

Static Mesh Editor
  • Bug Fix: Fixed an issue where we would fail to pack the UVs properly if we had multiple identically sized charts.

World Browser
  • Crash Fix: No longer crashes when performing an Undo operation right after generating LOD of a sub-level.

  • Bug Fix: Fixed filtering of sub-levels in hierarchy view by world composition layers.

Level Editor and Tools
  • Crash Fix: Fixed a crash when a level is in an incorrect level collection after reverting the changes of a sublevel of the current level being edited.

  • Bug Fix: Fixed attenuation settings not being disabled when Override Attenuation is false for force feedback and non-English builds.

  • Bug Fix: Actors in the open editor level can no longer be set as the default value for maps, sets, or arrays in user defined structs.

  • Bug Fix: PIE sessions can no longer inappropriately affect editor sessions when the input setting "Use Mouse For Touch" is active.

  • New: Source control history control now includes revisions made prior to branch actions

  • Improvement: The Actor Component function, On Rep Is Active, can now be overridden in subclasses.

Learning Resources

Documentation
  • New: The "-GenerateBlueprintAPI" commandlet now writes clean JSON and provides the option to export information about a subset of the Blueprint nodes available in the Editor rather than all nodes.

Gameplay Framework

  • Bug Fix: Get Components now collects components from child actors when requested to.

  • Bug Fix: Can Crouch In Current State now returns false when character capsule is simulating physics.

  • Bug Fix: Uncrouching now uses the right height for "unencroached" test, when jumping from crouch or uncrouching while in the air.

  • Bug Fix: Moves are no longer combined, when a move triggers a new actor and/or component overlap event.

  • Bug Fix: Character Movement Component's Get Client Net Send Delta Time function now uses this time if Acceleration and Velocity are zero, and the control rotation matches the last acknowledged control rotation from the server.

  • Bug Fix: Input Chords that are set to "None" no longer get replaced with "Any Key" value when the containing Blueprint is reopened.

  • Bug Fix: Removed a dereference that was causing a crash inside Gameplay Cue Manager.

  • Bug Fix: Fixed an issue where Save Game objects could be loaded with the wrong class type when using a Blueprint Save Game type.

  • Bug Fix: Set Allow CPU Access now correctly dirties Static Mesh assets.

  • Bug Fix: Character Movement Component's Server Move function no longer sends the movement base component / bone name unless it's a dynamic base.

  • Bug Fix: CharacterMovementComponent now removes branches when using repeated access of TSharedPtr with FSavedMovePtr.

  • Bug Fix: NaN checking has been removed in Shipping configs within Character Movement, even when checks are enabled in Shipping.

  • Bug Fix: The Actor function called Is Overlapping Actor now avoids function calls on each Primitive Component unless there are actually any overlaps on that component.

  • Bug Fix: Calling Rename on an Actor now correctly removes and adds the Actor to the Actors array of the Level.

  • Bug Fix: Walking in to a wedge between geometry and a slope no longer launches the player in the air with a variable height affected by framerate.

  • Bug Fix: You can now import Data Tables from .CSV files that contain only a header row and no data rows.

  • Bug Fix: Client move combining now works while holding down the jump key or while jump is providing force.

  • Bug Fix: Simulated proxies now correctly simulate gravity when jump force is being applied.

  • Bug Fix: Jump height dependency on framerate has been fixed when applying jump force for more than a single frame burst.

  • Bug Fix: Fixed unsafe weak object pointer when dereferencing iterating pawns.

  • Bug Fix: Force feedback events are now played on the correct controller if the Offset Player Gamepad IDs feature is in use.

  • Bug Fix: Fixed Characters using default scoped movement updates. They no longer visually rotate when rotated at small rates at high framerate.

  • Bug Fix: You now receive a warning rather than an assert on a child promotion failure when destroying a non-root scene component within an Actor's scene component hierarchy.

  • Bug Fix: Child Actor Components are no longer attached to a CDO's root component.

  • Bug Fix: Component instances no longer crash due to sub components.

  • Bug Fix: EndPlay will now be executed if the Actor is destroyed as a result of actions from within its own BeginPlay call.

  • Bug Fix: Gameplay Ability System has been optimized to remove redundant uses of Weak Object Pointer operator.

  • Bug Fix: Scoped Movement Update now propagates the teleport flag from an inner scope to outer scope when they are nested.

  • Bug Fix: Revert Move correctly resets the Teleport Type now.

  • Bug Fix: Fixed log spam when a client character receives acknowledgment for a move that has been removed from the saved moves.

  • Bug Fix: Jump force for character proxies is more accurately predicted to stop on time in case state is not yet replicated from the server.

  • Bug Fix: Blueprint dynamic force feedback effects now update their values when the update node is invoked and while the latent action is active.

  • Bug Fix: Gameplay tag serialization now handles "NumBitsForContainerSize=8" correctly without uint8 overflow.

  • Bug Fix: Invalid Ground Movement Mode coming from Character Movement Component's On Movement Mode Changed function has been fixed.

  • Bug Fix: Delegates now have calls when a periodic Gameplay Effect executes a final time as it is being removed.

  • Bug Fix: The current result of Get Max Speed is now saved in client character saved moves and avoids combining moves with different max speeds.

  • Bug Fix: Ensured that Flush Server Moves only runs on autonomous proxies in case the caller erroneously calls it elsewhere.

  • Bug Fix: Time dilation and frame time values in world settings are now clamped so they won't accidentally be set to negative values.

  • Bug Fix: Target Point's Arrow component is no longer too small to see.

  • Bug Fix: Project World To Screen no longer returns true in the event that the projection failed.

  • Bug Fix: Async Load Primary Asset nodes can now be called safely from a loop.

  • Bug Fix: Placed Editor Utility Base once again ticks in the editor as intended.

  • Bug Fix: The default physics volume can now be spawned during construction script execution if it needs to be lazily created.

  • Bug Fix: In Level Streaming, Should Block On Load now properly blocks for the entire loading process, not just the file load.

  • New: Added Client Net Send Move Delta Time Stationary (default 12Hz) to supplement existing Client Net Send Move Delta Time and Client Net Send Move Delta Time Throttled.

  • New: A Post Script Construct trait has been added that allows users to perform initialization after a blueprint has created a temporary object. If the With Post Script Construct trait is true for a class, that class must implement Post Script Construct. This function is called after an instance of the class is constructed by a blueprint.

  • New: Saved Moves now support subclasses adding combination logic by overriding the Combine With function.

  • New: User Defined Enums now support redirecting.

  • New: Added "r.CookOutUnusedDetailModeComponents" CVar to cook out actors on a per-platform basis. Actors (and Components) are now optionally removed on cook if the device detail level is lower than the component's detail level. This behaviour is controlled by a CVar which can be set via the device profile.

  • New: A toggle has been added to disable the gesture recognizer to input settings. By default this is disabled.

  • New: Radial Damage multicast delegate has been added to Actor and is consistent with Point Damage.

  • New: A Console Variable has been added to enable Async Trace: "RunAsyncTraceOnWorkerThread".

  • New: Added a constructor for Gameplay Ability Spec that takes an ability class instead of forcing the caller to supply the CDO.

  • New: Added macros to Attribute Set to declare helpful accessors, a version of which is used by all Epic internal games.

  • New: Added a function to Gameplay Ability called Get Ability System Component From Actor Info .

  • New: Implemented a new Ability System Component function, Add Gameplay Event Tag Container Delegate, to enable listening for gameplay events using non-exact tag matches, and an option to Wait Gameplay Event to use this.

  • New: Added a Save Game flag to Gameplay Tags so they can be used for native save systems.

  • New: Added a Development Always Cook setting to the asset manager cook rule, this works like Always Cook in development and like Never Cook in production. Development Cook works like Unknown in development.

  • New: "WindDirectionalSourceComponent.h" can now be fully used outside of the Engine module.

  • New: Keys (FKey struct) can now register a short display name, and Get Display Name can request either the long or short version of the name.

  • New: Added a new type of Gameplay Tag called Restricted Gameplay Tag. At runtime, it behaves exactly the same as normal Gameplay Tags, but in the editor, it allows for more control of higher level tags while still leaving flexibility for more specific tags. Restricted gameplay tags are intended for larger projects that want to be able to enforce a high level hierarchy on their tags while still allowing full control and flexibility over lower levels of the tag structure.

  • New: A public method, Strip Save Game Header, has been added for serializing internal header data from save game data buffers.

  • New: A helper function has been added to make it easier to query containers for the presence of a single tag.

  • New: CSV stats have been added for Character movement.

  • Improvement: Gameplay Tags now import from config files by default. Previously the default method for importing was through tag tables.

  • Improvement: Workflow has been improved to support multiple config files that store Gameplay Tags.

  • Improvement: You can now invoke dynamic force feedback effects from native code using Player Controller's Play Dynamic Force Feedback function. The latent function has been made private and only usable from blueprints so it can no longer be misused.

  • Improvement: Attribute Set's Init From Meta Data Table function is now virtual.

  • Improvement: Optimized Update Overlaps by 20% in test cases with large numbers of overlapping actors moving. Further optimized by improving Weak Object Pointer usage to avoid deep comparisons when not necessary.

  • Improvement: Bandwidth is now reduced for replicated characters by only replicating 4 byte timestamp value to clients if it's actually needed for Linear smoothing. By setting Network Always Replicate Transform Update Timestamp to true, you can revert to the old behavior.

  • Improvement: Reduced network RPC overhead for characters that are not moving.

  • Improvement: Projectiles now feature a variable, Bounce Additional Iterations, to control physics iteration count, rather than being hardcoded to one iteration. Default value is two.

  • Improvement: Update Character State Before Movement and Update Character State After Movement now include a DeltaSeconds argument.

  • Improvement: Process Input Stack from the Player class has improved evaluation of which Actions occurred during a frame.

  • Improvement: Actors now have a Pre Register All Components virtual function to match the Post Register All Components function.

  • Improvement: Updated the process of loading/unloading and hiding/showing streaming levels. Many of the variables involved in level streaming have been made private and you must use functions to modify/interact with the them.

  • Improvement: Added delay functionality to MediaPlayer. This will allow more than one player to start at a same time. They will play at the same frame, but be offset in relation to each other.

  • Improvement: Cleaned up and reorganized the public headers of the GameplayAbilities plugin. Many comments were added and the classes were reorganized to group related things together.

  • Improvement: Made several changes to Projectile Movement Component that have improved the default performance settings with minimal behavior impact.

  • Improvement: Per-frame allocations have been reduced in the input manager.

  • Improvement: Reduced per-frame allocations when using DataTables. Accessing a DataTable with a string literal now avoids a allocating an FString variable with each call.

  • Improvement: The Actor function called Is Overlapping Actor is optimized to avoid function calls on Primitive Components that have no current overlaps.

  • Improvement: Optimized SetCollisionProfileName when calling it from a constructor.

  • Improvement: Made some improvements and added flexibility to how Character Movement Component saved moves are combined.

  • Improvement: Removed 3 branches from the Weak Object Pointer function, Get.

  • Improvement: Looping camera shakes can now be blended out.

Localization

  • Bug Fix: Fixed "Should Exclude Derived Classes" option not working in the asset gather.

  • Bug Fix: Fixed PO files failing to import translations containing only whitespace.

  • Bug Fix: Text that doesn't belong to the current package is no longer cached in the localization cache for that package.

  • Bug Fix: Fixed struct instances comparing against the wrong default values when gathering for localization.

  • Bug Fix: PO import no longer fails if a PO file is missing, which is the case for new languages.

  • Bug Fix: Localization multi-line fix.

  • Bug Fix: Fixed single-culture PO import/export failing.

  • Bug Fix: Fixed an issue where some languages would be unavailable due to how ICU reports available cultures.

  • Bug Fix: Fixed placeholder string table entries for different keys being considered identical.

  • Bug Fix: Fixed class/actor names in the placement panel not localizing correctly.

  • Bug Fix: Added missing Hiragana combining character range.

  • New: Localization Pipeline Optimization that mainly focus on asset gathering and other general improvements to other parts of the pipeline. The gather time for 250,000+ word project spanning 80,000+ assets down from over an hour, to just over 10 minutes now.

  • New: Improved the localized asset cooking so that it only cooks L10N variants if their source asset is cooked.

  • New: Added some command line options for GatherText to detect and fix stale or missing package localization caches.

  • New: Added a way to view the localization cache on a package through Asset Localization > Show Localization Cache.

  • New: Improved the ability to lockdown available game languages.

    • In addition to the previous "Disabled Cultures" array, you can now add an array of "Enabled Cultures" (using the same per-build config filters) to explicitly list the cultures that are allowed to be used in your build (if the list is empty, then everything is allowed unless otherwise disabled).

    • This also stops the game from attempting to fallback to the native language if the native language has been disabled (it will fallback to the first available language instead).

  • New: Added an optimized conversion process between Unreal strings and Unicode strings for platforms that use UTF-16 strings natively.

  • New: Added support for additional localized text sources, including arbitrary polyglot data.

  • Deprecated: "Get Cultures With Available Location" is deprecated and should be replaced with "Get Localized Culture Names" to get the names, or "Get Available Cultures" if a pointer to the full culture data is needed.

Networking

  • Crash Fix: Cleared a debug callback when "Curl HTTP Request" was destroyed to prevent crashes.

  • Bug Fix: Fixed several issues with seamless travel while using Play-In-Editor that could cause crashes.

  • Bug Fix: Fixed an issue with stateless handshake, when the server sends a challenge and receives a response during the same tick.

  • Bug Fix: Pitch is now properly stored when aiming in client recorded replays.

  • Bug Fix: Removed the overhead of "Compress Axis" in the function Rotator for each element in Serialize Compressed when loading.

  • Bug Fix: An issue with stateless handshake was fixed, where the server sends a challenge and receives a response during the same tick.

  • Bug Fix: Guaranteed a return value of 0 when the "Get Port No" function of "Socket" fails.

  • Bug Fix: Fixed MULTIHOME returning the incorrect host address on Linux and Android.

  • Bug Fix: Infinite recursion no longer occurs when trying to flush/send on socket close.

  • Bug Fix: Fixed a rare bug where a remote function call from the client could use the wrong value for an object reference in a struct.

  • New: Cleaned up the "Get Type Hash" function on the "Unique Net ID Replication" function to call into the "Unique Net ID Version" function.

  • New: Added a keyfunc class for use with Unique Net ID as a key in TMap.

  • New: Added support for message bus in single-threaded applications.

  • New: Added support for single-threaded applications in UDP socket sender/receiver.

  • New: Added some parameters to "Rep Layout" member functions const-correct.

  • New: Included a sample replication graph for ShooterGame.

  • New: The CVar "CVar Ping Exclude Frame Time" is now enabled in shipping builds.

  • New: Net Connection now tracks how many total bytes of data it has sent and received during its lifetime.

  • New: Net Driver now tracks how many bunches its connections have sent and received.

  • Improvement: Unique Net IDs serialized over the network in 18 bytes, down from 41.

Replays
  • Crash Fix: Fixed a potential crash when recording replays.

  • Bug Fix: Fixed the current replay's timestamp if the replay is close to finishing.

  • Bug Fix: Allowed Automatic Replay / Stream names to be configurable.

  • Bug Fix: Fixed up edge cases in Replays where Actors were being destroyed inappropriately.

  • Bug Fix: Net Connection now keeps track of both in and out packet loss during its entire lifetime.

  • Bug Fix: Fixed a security issue if a malformed packet was sent with a channel index greater than the maximum number of channels.

  • Bug Fix: Fixed the "Play Replay" function of Game Instance to return false if the replay fails to play.

  • Bug Fix: Fixed many issues with replicated, placed-in-map Actors and replay scrubbing. Places Actors will now always respawn correctly after scrubbing, with the correct transformas applied and correct replicated properties.

  • Bug Fix: No processing will be done in "Demo Net Driver" if the Stream isn't ready.

  • Bug Fix: Fixed up DemoNetDriver to always call Handle Demo Net Playback Failure for cases when the demo is stopped due to errors.

  • Bug Fix: Fixed initially dormant replicated actors not being recorded in client replays.

  • Bug Fix: Replays now ignore RPCs while fast forwarding.

  • Bug Fix: Dedicated server no longer runs the render thread.

  • Bug Fix: Fixed an issue where the client could receive redundant actor destruction messages during level streaming, which could cause broken actor channels.

  • Bug Fix: The dithering effect on LOD actors during replay playback now ignores time dilation.

  • Bug Fix: Placed Actors now appear correctly in replays.

  • Bug Fix: Replays handle dynamic level streaming correctly, instead of keeping all levels loaded at all times.

  • New: Added an option for replays to track additional Actor state to be applied after the actor is respawned during playback scrubbing.

  • New: Added an option to allow multiple connections to share network serialization state during server replication. This applies to both property replication and multicast remote procedure calls.

  • New: The maximum number of actor channels can now be configured by setting the "net.MaxChannelSize" console variable.

  • New: Added additional stats around network GUID remapping, with new options to limit the number processed per frame and filter the list based on closed and broken actor channels.

  • New: Net connections now maintain a mapping of class names to an array of time differences between replication instances of actors of that class. This can be used to help track if certain classes of actors are taking too long to replicate.

  • New: Added Support with Rewindable Actors for replays.

  • New: Added a way to retrieve the active replay name from the Demo Net Driver.

  • New: Added functions Save Property State and Compare Property State to Demo Net Driver.

  • New: Added the function "Is Saving Checkpoint" to Demo Net Driver to allow other code to query whether the driver is currently saving a checkpoint.

  • New: Added a console variable demo with "Time Burn In" to show the current replay timestamp on-screen with debug text.

  • New: Added "-csvdemostarttime" and "-csvdemoendtime" commandline arguments to automate CSV profiles when running replays.

  • New: Local File Streamer replaces Null Streamer as the default Replay Streamer. Works asynchronously and performs better on low-speed hard drives, such as those found in game consoles.

Online

  • Crash Fix: Fixed a CEF browser threading issue causing rare crashes.

  • Crash Fix: Fixed a rare crash in Steam Sessions.

  • Bug Fix: The HTTP Retry System function now uses the "Retry-After" or "X-Rate-Limit-Reset" header to determine when it should connect next for responses that returned 429 or 503.

  • Bug Fix: Changed the behavior of Curl HTTP requests that failed and had no HTTP activity to be a connection failure instead of a generic failure.

  • Bug Fix: Changed access pattern to the HTTP Thread function removing a critical section.

  • Bug Fix: Online Hotfix Manager restores old ini settings in the same frame as applying the new ini values.

  • Bug Fix: Changed the behavior of Curl HTTP requests that failed and had no HTTP activity to be a connection failure instead of a generic failure.

  • Bug Fix: Fixed voice failing to play locally after performing a seamless travel when using NullOSS.

  • Bug Fix: Cleaned up Steam P2P connection logging to prevent excessive log spam.

  • Bug Fix: Fixed Steam Leaderboard code to overwrite stat variables instead of increment them as per the documentation.

  • Bug Fix: Added missing domains for Google/Facebook to properly delete cookies on logout.

  • Bug Fix: Fixed iOS/Mac HTTP requests repeating the contents of their user agent header.

  • Bug Fix: Fixed a non-null termination close reason coming from "LWS Web Socket."

  • Bug Fix: Fixed Steam Dedicated Server from forcibly linking Steam Client dlls which can cause issues depending on environment setup.

  • Bug Fix: Fixed OSS Live not initializing its subsystem name.

  • Bug Fix: A crash no longer occurs when receiving unhandled XMPP stanzas in debug builds.

  • Bug Fix: Re-added max connections per host and multi home http support to Curl HTTP.

  • Bug Fix: The b.VerifyPeer ini setting is now used by Windows Curl HTTP implementation.

  • Bug Fix: Fixed a connection failure to Google API during initialization for Google Sign In.

  • Bug Fix: Fixed an issue with Google sign in where delegates fire inappropriately in Login() as well as giving a bad return value.

  • New: LibCurl now advertises that it accepts compressed HTTP content in gzip and deflate formats.

  • New: Default UserAgent sent with HTTP calls is now "$Product/$Version $OS/$OSVersion".

  • New: Added serialized json as a valid value type for Variant Data function Serialize Online Key Value Pairs function.

  • New: Added bulk UnregisterPlayers function to AGameSession.

  • New: Update libwebsockets to v2.2.

  • New: Added SSL Manager to the SSL module to manage the lifetime in monolithic builds and create SSL contexts.

  • New: Added the ability to override Facebook app id, set API version via config and added more debugging options.

  • New: Updated Facebook SDK to 2.12 which allows you to use a version config value.

  • New: Implemented more tests into the leaderboard testing harness.

    • Added the ability to fetch arbitrary rank for platforms that support it. Command is "online test leaderboards [optional arbitrary user id for lookup]"

  • New: An HTTP retry option was added to allow for multiple alternate domain attempts if a connection to the host fails.

    • Only attempt other domains if it fails to connect, not if the request fails for non-connection related reasons.

  • New: An ini setting was added to set the maximum number of connections that curl will use.

  • New: Implemented "Online Play Time Limit" in the "Play Time Limit" module to the Online Framework plugin.

  • New: The OnlineSubsystem "Get By Platform" is now more extensible with new platforms.

  • New: Online Hotfix Manager now supports a version value that is compared against the network compatible version.

  • New: Updated cacert.pem from https://curl.haxx.se/docs/caextract.html.

  • New: Added a delegate when receiving an http header Add FHttp Request Impl to implement simple virtual functions that all platforms implement in the same way.

  • New: Upgraded Google Sign In SDK for Android to the latest version.

  • New: The "Get Online Environment Name" function of Online Subsystem now allows for subsystem implementations to give specific names for their online environment.

  • Deprecated: Disabled the Slate Remote server in shipping builds and on non-Desktop platforms.

Paper2D

  • Bug Fix: Corrected commands mapped in the incorrect location.

  • Bug Fix: Fixed Tile Maps being edited in the Tile Map Editor always having a selection color tint.

  • Bug Fix: Fixed collision generation for Tile Maps with non-orthogonal projections.

  • Bug Fix: Improved positioning of newly added collision or rendering shapes (box/sphere) when a sprite is not at the origin in UV space.

  • Bug Fix: Double-clicking to change the UV region in the Sprite Editor now correctly marks the Sprite Asset as modified.

  • New: The Tile Grid color is now customizable.

Physics

  • Bug Fix: Fixed a cook warning with "Contains Physics Tri Mesh Data" returning true but "Get Physics Tri Mesh Data" returning false.

  • Bug Fix: Re-enabled warnings for when PhysX fails to cook a mesh.

  • Bug Fix: Origin-shifting no longer causes big impulses on Cable Components.

  • Bug Fix: Improved load times for PhysX tri meshes by turning off 8-bit index buffer optimization and avoiding conversion from 8-bit to 16-bit one index at a time.

  • New: Contact modification callbacks have been exposed in the Engine, allowing access to custom contact modifications.

  • New: Added a warning when applying a non-substepped force while inside a substep callback.

  • New: Cable Actor class is now exposed with the Engine API.

Clothing
  • Crash Fix: Fixed a crash when clothing simulation was dispatched from a pending kill Skeletal Mesh Component.

  • Crash Fix: A crash no longer occurs during clothing actor creation when a clothing simulation mesh has no simulated vertices.

  • Crash Fix: Fixed a crash caused by switching clothing meshes when clothing LOD0 is unbound on a clothing data object.

  • Crash Fix: Fixed a crash reimporting over clothing when the bind step would make a section exceed MAX_GPUSKIN_BONES.

  • Bug Fix: Proxy now updates cloth shader data independently, causing sections to no longer get stuck in the clothing rendering path due to the component not ticking.

  • Bug Fix: Changed clothing render data to always use component-relative transforms so we don't see single frame stretching of clothing on component spawning.

  • Bug Fix: Fixes to clothing 'pops' during server corrections due to unexpected linear forces.

  • Bug Fix: Motion Blur is now correctly calculated on clothing sections of Skeletal Meshes.

  • Bug Fix: Fixed clothing data binding state becoming mismatched after a reimport over multiple LODs.

  • Bug Fix: Fixed clothing LOD update receiving empty bone transform array on initialization if a master pose component was used

  • New: Added support for Tapered Capsules to physics assets. Tapered Capsules are only supported by clothing, not by rigid bodies.

  • New: Added tool to copy Skeletal Mesh Vertex Colors to selected clothing parameter mask.

Collision Detection
  • New: Added rest offset for geometry, which allows us to smooth out contact generation. This helps with sliding objects on sharp irregularities.

Physics Asset Editor
  • Crash Fix: Fixed a crash caused by using the undo command to undo primitive regeneration while simulation is in progress & stopping simulation.

  • Bug Fix: Fixed physics asset editor relying on the "Block All" profile for its Collision Enabled in case a project has redefined the properties of the "Block All" profile.

  • Bug Fix: Constraints and bodies now rotate in their own Local Space in the Physics Asset Editor when local coordinate system is applied.

Rigid Bodies
  • Bug Fix: Removed unnecessary read locks when updating kinematic targets during substepping.

  • Bug Fix: Substepping is no longer used on Query Only kinematic bodies.

  • Bug Fix: Fixed Rigid Body awake check needlessly iterating all bodies in a Skeletal Mesh component.

  • Bug Fix: Fixed bug where only points on one side of a plane were being checked in Convex Hull validation.

  • Bug Fix: Mass scale of Physics Bodies is no longer incorrectly clamped. It now allows mass scales below 0.01 and above 100.

  • New: Added new boolean flag, "Not For Dedicated Server," to Physics Assets, which disables creation of bodies on dedicated servers.

Platforms

  • Bug Fix: Added support to check if persistent storage is available before attempting to use it.

  • New: Made the Apple Vision Plugin use version checking consistent with ARKit.

  • Improvement: Optimized JPEG compression, saving about 20-25 percent time on the CPU.

  • Removed: Removed SharpZipLib and references from bundled Mono on Mac and Linux.

All Mobile
  • Bug Fix: Shaders are now synchronously loaded if not previously requested.

  • Bug Fix: Fixed issue where landscape would not render when cooked for a PC mobile emulation shader platform.

  • New: Distance Fields no longer included in cooked data on iOS and Android.

  • New: Added ability to cook contents for the PC mobile emulation shader platforms PCD3D_ES2 and PCD3D_ES31.

Android
  • Crash Fix: Added a fix for '+' conversion modifier for Android in vswprintf because it caused crashes with non on-the-hour time zones.

  • Crash Fix: Fixed a potential crash that could occur when Virtual Keyboard Widget is hidden while trying to use in it in the game thread.

  • Crash Fix: Due to a possible crash on Galaxy S8 on Android 7.0, notifications are now downgraded to simple suggestions on text change. This is due to suggestions not being hidden and disabling predictive input.

  • Crash Fix: Fixed potential crash if virtual keyboard is hidden on Android before deferred action.

  • Bug Fix: Force Completion is now called for the initial movie player on On Pause and App Restart is called on Resume.

  • Bug Fix: Made tutorial and documentation links optional and disabled any unnecessary tutorial link for Android license agreement error.

  • Bug Fix: Used UPL hash to invalidate build if any UPL files are changed.

  • Bug Fix: Prevented Android virtual keyboard input from being covered by software buttons.

  • Bug Fix: Fixed distribution build issue with OBB downloader.

  • Bug Fix: Disabled manual vertex fetch on Android.

  • Bug Fix: Used physical memory is now returned from JNI after initialization completes on Android.

  • Bug Fix: We now wait for the audio thread to pause audio so playback stops properly in background on Android.

  • Bug Fix: Fixed Resonance Audio Api warning about wrong library format.

  • Bug Fix: Updated Android license used to generate licenses file for Gradle.

  • Bug Fix: Added fix so that Android no longer tries to queue ticks in parallel because it could cause hitches.

  • Bug Fix: Stopped Gradle from leaving a daemon process running after completed.

  • Bug Fix: Fixed missing text input field for Android virtual keyboard in cases where it doesn't show properly by forcing a layout request.

  • Bug Fix: Changed how we count available cores on Android, skipping ones that are dedicated to external uses.

  • Bug Fix: Fixed navigation bar showing during splash screen with full immersive setting enabled.

  • Bug Fix: Removed unnecessary #include "AndroidTargetDevice.h", which caused circular reference and nightly build errors.

  • Bug Fix: Fixed issue where a r.MobileContentScaleFactor variable specified in a Device Profile was immediately recreating the Android window, breaking Vulkan detection.

  • Bug Fix: Fixed store version used for saving symbols directory on Android Shipping builds with bBuildWithHiddenSymbolVisibility.

  • Bug Fix: Removed early stop if missing Android SDK and if Gradle can download it.

  • Bug Fix: Fixed Material texture coordinate compile error when compiling landscape materials for ES2.

  • Bug Fix: Added missing Android AMOTION relative axis defines for older NDKs.

  • Bug Fix: Fixed issue where native WebView could not load HTML5 movies if the control's layout didn't have FILL_PARENT param.

  • Bug Fix: Fixed issue with unresponsive WebView on iPhone X that was caused by touches not registering due to a parent being smaller than a child.

  • Bug Fix: Added a proguard exception for WebViewControl.FrameUpdateInfo.

  • Bug Fix: Fixed install/uninstall batch filenames for Android Blueprint-only projects.

  • New: Added GL memory tracking to LLM, and added LLM Alloc functions to Android.

  • New: Made changes to Android toolchain support to use new includes with NDK 14b and above.

  • New: NEON instructions now enabled by default on ARMv8. Can be optionally enabled on ARMv7 with bUseNEONForArmV7=True in Android Runtime Settings.

  • New: Added client Android platform variants and proper filtering out of non-game types from package menu flavors.

  • New: Added message box with reasons for failure if ES2 fallback fails.

  • New: Added option to disable IMU for performance on Android.

  • New: Added Android Get Network Connection Type support.

  • New: Added AndroidThunkCpp_LaunchPackage() to start another application.

  • New: Implemented Clipboard function on Android.

  • New: Added logging on low memory conditions for Android.

    • Check logcat for GameActive.onTrimMemory messages.

  • New: Updated Google Play Services dependencies to 11.8.0.

  • New: Added handling of Android mouse events, a way to block them, and hardware keyboard events.

    • Android.EnableMouse=1 enables mouse events (disabled by default).

    • Android.EnableHardwareKeyboard=1 enables hardware-generated key events (disabled by default).

  • New: UE4Commandline.txt is now enabled in APK.

  • New: Provided support for disabling ASTC texture compression on devices where it does not work properly but driver extension is present (r.OpenGL.DisableASTCSupport=1).

  • New: Added a new Device Proxy type called "All devices".

    • Holds a list of physical device IDs for every texture format variant instead of a single device ID.

    • Updated automatically by the device discovery thread.

  • New: Device discovery is now used to signal when a running device is disconnected.

  • New: Added Mali G72 device profile for Android.

  • New: Added support RHI Thread for startup movie playback on Android.

  • New: Added XBox 360 wired controller support for Android.

  • Improvement: Overrode "Max Object In Game" on Android to save approximately 30M with the Object Array size by default.

  • Improvement: Removed color attachment while rendering depth on ES3 devices, saving 16mb.

  • Improvement: Added improvements for handling of Android IMU updates

    • Reduced memory allocations needed to handle sensor events.

    • Low-pass gravity filtering was made more consistent (only at rate of accelerometer updates, not all sensor events).

    • Changed to only push final sensor update state per tick instead of for any sensor update (reducing JNI calls).

  • Improvement: Improved Android debugging, including:

    • Detect java and gdb/lldb debugger are now attached.

    • Added proper implementation of DebugBreak for each architecture.

    • Improved stack walking, and now properly terminates, showing relative offset for addr2line.

HTML5
  • Bug Fix: Controller axis and button max value is now set in code instead of relying on the function "Emscripten Get Gamepad Status" as it seems emscripten might be uninitialized by the time controllers being used.

  • Bug Fix: Virtual joysticks are no longer shown by default and mouse not captured, now behaving like the Windows-64bit client version.

  • Bug Fix: Disabled "Supports Screen Percentage" as it was causing the HTML5 screen to only render a portion of the screen properly.

  • Bug Fix: Fixed issue with double printing to console.log.

  • Bug Fix: Fixed unnecessary padding margins that were present when using Fixed scale mode.

  • New: Added project setting drop down box to select canvas scaling mode when editing HTML5 game window size.

iOS
  • Crash Fix: Fixed crash on backgrounding for non-backgrounding apps.

  • Crash Fix: Fixed crash on iOS being caused by large mismatches between a drawable texture and a scene's depth-stencil target.

  • Bug Fix: Fixed bug that occurred when the last Slate element to be drawn in the scene is a Scroll Bar with progress between 0 and 1 with Metal on iOS.

  • Bug Fix: Fixed Metal Mip-to-Mip copying validation errors when copying mips smaller than 4x4 with ASTC.

  • Bug Fix: Fixed Metal ring buffer memory leak.

  • Bug Fix: Fixed issue causing distribution build errors for some Blueprint projects on iOS or tvOS.

  • Bug Fix: Fixed compilation error being caused by enabling Location Services Plugin on iOS.

  • Bug Fix: Renamed "Initial Movie" to "Startup Movie", including methods related to the Android platform.

  • Bug Fix: Changed to allow for empty paths in UPL Init which may occur for remote iOS builds.

  • Bug Fix: Client/Host input mapping will now use only interactable area of host window, without title bar and borders.

  • Bug Fix: If host's TCP socket was already connected, we get SE_ECONNRESET when trying to re-use it. When client disconnects, we now also reset the host TCP socket.

  • Bug Fix: Fixed potential memory leak in iOS display logic.

  • Bug Fix: EnumerateFiles().ToList() now prefaced with a check for if the CookOutputDir exists, preventing exception from being raised.

  • Bug Fix: Fixed TVOS/iOS error resulting in numerous errors related to 'no such file or directory' (Binary builds only).

  • New: Added availability checks for Apple Image Utils Plugin (similar to ARKit).

  • New: Added UTexture2D to CGImage conversion in Apple Image Utils Plugin.

  • New: Added ability to push a single file to an iOS app's Documents folder from PC using a command such as DeploymentServer.exe copyfile -bundle com.mycompany.MyApp -file C:\PathToFileOnPC -file /Documents/MyApp/MyFileOnDevice.

  • New: Added listener to viewport resize event on host.

Linux
  • Crash Fix: Added check for null StdOut and ReturnCode parameters on input to ExecProcess on Unix platforms, otherwise code will crash if the process failed to be created.

  • Crash Fix: Fixed crash when importing to level.

  • Crash Fix: Converted Vulkan initialization failure crash to be a graceful exit.

  • Bug Fix: Linux now correctly sets current working directory as executable location.

  • Bug Fix: Fixed splash image for big endian machines.

  • Bug Fix: Implemented use of X11 pointer barriers to bound cursor to region over warping the pointers.

  • Bug Fix: Fixed RPath issues when bundling a project.

  • Bug Fix: UBT will now disable -fPIE when producing monolithic binaries if the compiler is configured to enable it by default.

  • Bug Fix: Remove tracking of CLion/CMake build files.

  • Bug Fix: Default to -as-needed for debug builds resulting in faster startup times.

  • Bug Fix: Added more verbose message about missing VK extensions.

  • Bug Fix: Fixed gamepad thumbstick clicks not registering.

  • Bug Fix: Fixed infinite logging when failing a system operation.

  • Bug Fix: Fixed UE_ENGINE_DIRECTORY not being set on Linux.

  • Bug Fix: Fixed forked child process trying to wait on a sibling process.

  • Bug Fix: Fixed possibly selecting multiple clock sources during initialization.

  • Bug Fix: Restored better printing of FNames through GDB.

  • Bug Fix: Fixed performance regression in Editor (for OpenGL RHI).

  • Bug Fix: Fixed checking commandline arguments prior to being initialized.

  • Bug Fix: Filename and line numbers are now printed during an ensure.

  • Bug Fix: Fixed reporting crash handling frames during an ensure or crash.

  • Bug Fix: Fixed a deadlock in crash handler.

  • Bug Fix: Fixed issue with Mono persisting after RunUAT has exited.

  • New: Added script to download the latest toolchain.

  • New: Added support for terminfo2.

  • New: Added support for a bundled native toolchain on Linux.

  • New: Enabled EXR support for Linux.

  • New: Added binaries for GoogleTest and add to BuildThirdParty script.

  • New: Added LXC container script for building some third party libraries.

  • New: Added support for Unreal Version Selector.

  • New: Added a new way to symbolicate symbols for ensures and crashes at runtime.

  • New: Updated Build Cross Toolchain script to enable a Linux host targeting multiple Linux architectures (including the host's architecture).

  • New: Implemented Low Level Memory (LLM) tracker for Linux.

  • New: Added functionality to cache recently accessed files that required case insensitive look-ups.

  • New: Added pop-up message box to prompt for whether or not the user wants to submit crash report data.

  • New: Enabled RenderDoc support for Vulkan RHI.

  • Improvement: Removed unused start-up module, ALAudio.

  • Removed: Removed Linux SDL2 dependency from Core.

Mac
  • Bug Fix: Progress Bar widgets on Mac no longer render as full when fill value is 0.

  • Bug Fix: Restored Mac Graphics Switching Plugin, refactoring it to support switching the Editor between Metal GPUs:

    • Primarily this is of benefit to those with eGPUs.

    • Changing the GPU will ask you to restart.

    • Fixes a bug where 27" iMacs report an Intel GPU even though it is physically disabled.

  • Bug Fix: Updated Mac OS deployment target version to 10.12 from 10.11 as we officially ended support for El Capitan a while ago.

  • Bug Fix: Fixed deprecation warnings for macOS 10.12.

  • Bug Fix: Make Light Propagation Volumes debug visualisation work on macOS.

  • Bug Fix: Refactor Metal RHI debugging tools to move away from reimplementing Objective-C protocols, to adding separate debugging classes. This makes it easier for future OSes without having to update each time new functionality is added.

  • Bug Fix: Added update for Xcode 10 Beta, moving the metal shader compiler and requiring different arguments.

  • Bug Fix: Xcode project generator now preserves the schemes' command line arguments when regenerating the project.

  • New: Added LLM support for macOS, including tracking of memory allocated in Objective-C. This makes use of runtime method swizzling in the Objective-C runtime and the rd_route library, which enables arbitrary runtime function interposition, enabling Unreal to hook the custom allocators used in Objective-C frameworks and charge Objective-C allocations to the caller.

  • New: Added INTELLISENSE to preprocessor definitions for indexing to improve indexing without generating game header files.

  • Improvement: Changed button mapping for PS4 controller on Mac to use Touchpad instead of Share button as "Special Left" to match other platforms.

  • Improvement: Reduced incremental build times on Mac by updating dependencies for dSYM files so that only cross-referenced Modules have their dSYMs recreated on subsequent builds.

  • Improvement: Improved CPU performance of some post-processing passes on Mac by changing the way we allocate a fallback depth-stencil texture to avoid constantly reallocating it.

  • Improvement: Improved the way we generate groups in Xcode project's source code navigator. They are now sorted alphabetically and have correct paths, making it so Xcode no longer displays them in red.

Rendering

  • Crash Fix: Fixed crashes inside "Remove Speed Tree Wind" function and "Remove Speed Tree Wind Render Thread" function.

  • Crash Fix: Fix for Intel HD 4000 crashing on driver 10.12.6.

  • Crash Fix: Fixed a crash occurring when two Post Process Volumes, in a level and sub-level with elements in their Blendables array, were simultaneously selected.

  • Crash Fix: Fixed crash inside DFAO resource allocation, when DFAO viewport has zero area.

  • Crash Fix: Fixed crash caused by automatic building Reflection Captures, while being in Mobile Preview mode.

  • Bug Fix: Vulkan will now expose additional driver information for Unix platforms.

  • Bug Fix: Vulkan now prefers mailbox present mode if available.

  • Bug Fix: Fixed an issue with compressed (packed) normals on the GPU which were off by one integer representation.

  • Bug Fix: Optimized bounding sphere radius for objects with non uniform scale.

  • Bug Fix: Allow disabling VSync in windowed mode for macOS 10.13.4+ and above.

  • Bug Fix: Fixed Freeze Rendering on non Editor builds.

  • Bug Fix: Fixed remaining Quad Overdraw Viewmode contents on screen after switching to certain other View modes (e.g. light overlap or complexity).

  • Bug Fix: Fixed tesselation shader texture and uniform initialization in OpenGL3 and OpenGL4.

  • Bug Fix: Fix the black ground scattering on Metal by changing the Atmospheric Fog shader to avoid passing small negative values into the sqrt() function.

  • Bug Fix: Fixed compiling Metal shaders into native shader libraries by disambiguating structs defined by tessellation shaders.

  • Bug Fix: Now Vulkan only uses up to 95% of available GPU memory to handle some OS fragmentation.

  • Bug Fix: Shadow Setup will now only stencil mask drawn Static Meshes.

  • Bug Fix: Asynchronous SSAO now automatically switches to Synchronous SSOA when there are multiple Ambient Occlusion levels.

  • Bug Fix: Fixed a possible GPU hang. Initialize all of Function Forward Global LightData to avoid uninitialized numreflections or other bad params.

  • Bug Fix: Make Manual Vertex Fetch a property of the shader platform for Metal - only the desktop platforms (METAL SM5/SM5_NoTess/MRT) will use manual vertex fetch. The Mobile platforms use vertex descriptors.

  • Bug Fix: Fixed not releasing SRV on render thread for Function Position Vertex Buffer, Function Static Mesh Vertex Buffer, Function Color Vertex Buffer, Function Static Mesh Instance Buffer.

  • Bug Fix: Adjusted HLODs to use the "Never Distance Cull" flag by default.

  • Bug Fix: Retconned Texture 2D Dynamic to include a deprecated API path.

  • Bug Fix: Fixed Planar Reflections on Vulkan.

  • Bug Fix: Fixed assert inside Bind Light Map Vertex Buffer when re-importing meshes with auto generated UV channels.

  • Bug Fix: Fixed a memory leak fix when playing video and main thread blocks.

  • Bug Fix: Improved responsiveness audio synchronization when unpausing or seeking video on Windows platforms.

  • Bug Fix: Slightly improved CPU performance on Metal by caching all the state objects.

  • Bug Fix: Fixed an assert that intermittently fired on Metal with tessellation enabled caused by retaining unused uniform buffers.

  • Bug Fix: Implemented more *_RenderThread functions in MetalRHI to avoid stalling the RHI thread on macOS.

  • Bug Fix: Fixed a number of subtle bugs in the handling of uniform buffers within MetalRHI that could result in unbound buffers or invalid data being provided to shaders.

  • Bug Fix: Enabled use of 4-component formats for Buffer UAVs in MetalRHI.

  • Bug Fix: Metal shaders don't provide an actual instruction count, but the line count is a sufficient proxy to make the shader complexity views work in the Editor.

  • Bug Fix: Fixed compilation of the Forward Shading METAL_MRT shader platform for iOS by removing references to native Cubemap-array Textures that are only available on some Apple GPUs.

  • Bug Fix: Fixed issues with the mesh simplifier when simplifying meshes with large Texture coordinate values.

  • Bug Fix: Altered the way we invalidate Metal visibility buffers inside MetalRHI to slightly increase performance on iOS by sharing them across encoders when possible.

  • Bug Fix: Fixed MetalRHI memory reporting in non-default path.

  • Bug Fix: If a Metal shader has an error it will now generate the shader hash and function name.

  • Bug Fix: Fixed a hitch when enabling Shader Complexity view mode.

  • Bug Fix: Fixed case typo in path for Custom Mesh Component build file.

  • Bug Fix: Bounds of Skeletal Meshes will no longer get inverted when an object has negative scaling causing Occlusion Queries to break, leading to flickering.

  • Bug Fix: Fixed incorrect SV_InstanceID and SV_VertexID conversions in the Metal shader compiler backend.

  • Bug Fix: The Metal Backend for Shader Compile Worker will now correctly convert the return type of Depth Texture Samples to float4 from Metal's float to fix compile errors in newer shader code.

  • Bug Fix: Extended the Mac & iOS Frame-Pacer API to provide the target output time and the intended duration.

  • Bug Fix: Enabled Volumetric Fog on Vulkan.

  • Bug Fix: Fixed a race condition inside MetalRHI caused by misuse of the Function RW Scope Lock.

  • Bug Fix: Fixed a memory leak in Batched Lines.

  • Bug Fix: Fixed a crash on Apple TV caused by using an unsupported Metal API call.

  • Bug Fix: Fixed missing debug markers on Vulkan (TCHAR_TO_ANSI lifetime issues)

  • Bug FIx: Improved performance by unifying the Metal buffer implementation so that the different types have a common parent and can share pooling and sub-allocation behavior.

  • New: Added "framegrabber.framelatency" command to allow variable frame-latency in Frame Grabber frames.

  • New: Added r.Vulkan.SubmitAfterEveryEndRenderPass command to help track down GPU crashes.

  • New: Ansel photography plugin improvements:

    • The free-roaming photography camera has new constraints by default. These prevent it from passing through walls.

    • Photography session can be started and stopped programmatically, making it possible to bind photography to a hotkey or button combination.

    • Tweakables and utilities are now exposed through a Blueprint Function Library, rather than requiring direct manipulation of console variables.

    • The Ansel photography session UI now exposes some Engine effect tweakables as sliders. For example, if the game is using Depth-Of-Field, a slider for Focal Depth becomes available. This behavior can be turned off through the Blueprint Function Library.

    • Letterboxing is now removed during multi-part capture.

    • Tiled shots are taken at full resolution even if Screen Percentage is less than 100.

    • Screen Space Reflections are enabled during super-resolution shots since Ansel is now better at hiding any ensuing artifacts.

    • Postprocess settings are frozen at session start to avoid discontinuities during photography such as when wandering between postprocess volumes during stereo and 360 shots.

  • New: Added support in Vulkan to prefer a specific GPU using -preferNvidia|AMD|Intel.

  • New: Added scalability control to adjust Object Draw Scale with Camera Field of View under the "r.ViewDistanceScale.FieldOfView***" command.

  • New: Added support on Vulkan for vktrace using the command line "-vktrace".

  • New: Added support for RenderDoc on Vulkan, Android, Debug and Development builds.

  • New: Added support on Vulkan for r.DisableEngineAndAppRegistration.

  • New: Added the ability to segment shade code libraries for global shaders and different .pak files in packages.

  • New: Added -AllowSoftwareRendering command line to allow D3D11 to fall back to software rendering if desired.

  • New: Added a explicit error message that tells users when they are over the maximum size when allocating very large Render Targets.

  • New: Added support for VK_AMD_buffer_marker on Vulkan to dump information when a GPU crash occurs.

  • New: Added support for D3D11, D3D12 & Vulkan for UAVs off Index Buffers.

  • New: Added support for r.DefaultBackBufferPixelFormat on Vulkan.

  • New: Added support for storing Vulkan validation information with r.Vulkan.SaveValidationCache which uses the VK_EXT_validation_cache extension

  • New: Added support for NVIDIA Aftermath to be enabled by default.

  • New: Refactored Function Realtime GPU Profiler Frame to avoid splitting profile events when calculating exclusive times of scopes. This allows tracing profiler to retain the hierarchical view of the data, while keeping CSV and GPU Stat system behavior intact.

  • New: Vulkan now uses 256MB pages for Device heap allocations (or 1/8th if less).

  • New: Updated to 1.1.70.1 Vulkan headers to use for both Windows & Linux.

  • New: Added support for multiple UV channels on the Procedural Mesh Component.

  • New: Extensively refactored the MetalRHI GPU profiling code. There is now a "MetalProfiler Start/Stop/Frames=X" in-game command that will spit out JSON files similar to the platform-agnostic TracingProfiler. The MetalProfiler shows the frame in terms of command-buffers, V-Blanks (if frame-pacing is enabled) and resource allocations.

  • New: Vulkan now generates a generic pipeline cache file, and a device specific one.

  • New: Support for DX12 quad buffer stereo rendering.

FX
  • Bug Fix: Fixed Motion Blur vectors on Mesh Particles.

  • Bug Fix: Return far plane when Scene Textures are disabled in order not to break Depth Fade.

  • Bug Fix: Fixed Particle shadows, when Particle Material uses Depth Fade.

  • New: Engine level pooling system for Particle system components.

  • New: Improved interpolated spawning behavior in Cascade. Gated behind a property that defaults to true for existing content.

  • New: Implemented get previous position to Niagara sprite Particles in order to fix Sprite Particle Motion vectors.

Lighting
  • Bug Fix: Fixed 1.5 Texel offset inside Manual 2x2 PCF shadow filtering.

  • Bug Fix: Fixed white thumbnails and other issues with Sky Lighting on ES3_1 path.

  • Bug Fix: Removed lights with Lighting Channels out of tiled deferred light list, as tiled deferred lights do not support Lighting Channels.

  • Bug Fix: Fixed DFAO resolution scaling border artifacts.

  • Bug Fix: Fixed crash inside Indirect Lighting Cache, which can happen when user cancels Lightmap generation.

  • Bug Fix: Fixed hard coded Reflection Capture Cube Map size, this will fix Static Light Aliasing in captures.

  • Bug Fix: Fixed joined charts forming an L so they inflate both axes.

  • Bug Fix: Fixed Checkerboard Subsurface Scattering for resolutions non divisible by two.

  • Bug Fix: Fixed missing Reflections in Blueprint Editor.

  • New: Indirect Lighting Color Scale is now applied to Subsurface Lighting and Diffuse Lighting.

  • New: Added RTDF r.DFShadowQuality allowing to adjust for shadow performance or quality.

  • New: Added r.AOQuality allowing to adjust for DFAO quality or performance.

  • New: Added a toggle for specifying Contact Shadow Length in World Space units.

  • New: Exposed Contact Shadow parameters to Blueprints.

  • New: Added Dual Specular for Subsurface Profile Shading Model.

  • New: Added Subsurface profile for Eye Shading Model.

  • Improvement: Contact shadow Improvements:

    • Contact shadows now use representative light's direction.

    • Will keep constant Screen Space length independent of FoV settings.

    • Added Contact shadows for Translucents.

    • Added Contact shadows for eye Shader model.

Materials
  • Crash Fix: Fixed case where using "Shader Cache" and "Share Material Shader Code" was causing crashes in games.

  • Bug Fix: Reduced memory usage of Materials in cooked builds by marking properties of Material Expression and Material Expression Material Function Call as WITH_EDITORONLY_DATA.

  • Bug Fix: Fixed case where iterative cooking will not working properly when project has "Share Material Shader Code" option enabled.

  • Bug Fix: Shader compilation log output now correctly identifies which Material Instance is being processed.

  • Bug Fix: Fixed Material Expression Functions for External Texture support.

  • Bug Fix: Changed Material Instance Dynamic Function Copy Material Uniform Parameters and Material Instance function Copy Material Instance Parameters to do no work if passed in the same Material (preventing accidental clearing out parameters on a MID).

  • Bug Fix: Added support with SketchUp Alpha channels and Texture/Color on Opacity.

  • New: Translucency Lighting mode on Materials are now searchable via the asset registry to make finding FX with expensive Materials easier.

  • New: Added Vertex Interpolator node support for Post Process Materials.

  • New: Material Cross Product nodes are now treated as a uniform expression and can be folded with other math operations.

  • New: The Object Orientation Material node now returns a Decal projection vector when used on the 'Deferred Decal' Material Domain.

  • New: Material Attribute Get/Set nodes now append the next unused attribute to the list rather than a Default value.

  • New: Material Attribute nodes have been reordered in a few locations to give a more consistent experience.

  • New: Added a "Estimated Number of Texture Lookups" stat to Material Views, split by vertex and pixel counts.

  • New: Material Texture Sample nodes now re-use previous samples when only differing by swizzle, reducing HLSL size and compiler burden.

  • New: Improved code generated by the HLSL Translator by re-using intermediate function results where possible.

  • New: Optimized Material and Material Instance loading by trimming and caching more data at cook time.

Mobile Rendering
  • Bug Fix: Removed GL_EXT_shader_io_blocks extension requirement to run games packaged for Android ES3.1

  • Bug Fix: iOS now properly discards Depth and Stencil buffers at then end of scene rendering if those buffer are not required.

  • Bug Fix: Material 'Apply Fogging' will no longer be ignored on Mobile.

  • New: 'stat unit' on Mobile devices along with frame timings will now show number of Draw Calls and number of Drawn Primitives in a frame.

Optimizations
  • Bug Fix: Updates for HLOD visibility now take place before frustum and Occlusion Culling.

  • Bug Fix: Stopped forcing NVIDIA GPUs to use slower retained command-buffers as the mtlpp refactor provides stronger resource lifetime guarantees.

  • Bug Fix: Material Parameter Collection instances only setup when initializing a persistent world, which drastically reduces the instance creation count for levels with many Streaming sub-levels this.

  • Bug Fix: Optimized PCF 2x2 and PCF 3x3 Shadow Filtering.

  • New: Improved bounding sphere for Spotlights by making them tighter.

  • New: View frustum shadow caster culling for Point Lights and Spotlights.

  • New: Added option to Skinned Mesh Component to render it as a Static Mesh.

  • New: Instanced Static Mesh per-instance data size was reduced by 20%.

  • New: Implemented segmented shader code libraries on all platforms, with one shader code library generated for the global shaders, one for the project's Materials and then one for each DLC package that contains Materials. This allows downloading of additional shader libraries as DLC.

  • New: Merged Sky Diffuse and Reflection passes in order to save performance by reading the GBuffer and writing target Texture only once.

  • New: Added support for not flushing compute jobs on D3D11 via the Automatic Cache Flush After Compute Shader function and Flush Compute Shader Cache function.

  • New: Rewrites have been made to MetalRHI in terms of mtlpp, which is a C++ wrapper library built around Metal's Objective-C API that attempts to reduce overheads and eliminate resource lifetime errors. New: Implemented a new shader pipeline cache called Function Shader Pipeline Cache to replace the older Function Shader Cache API.

  • New: Added log to Vulkan when compiling new PSO.

  • Removed: Disabled Global Clip Plane for Post Process and UI Material Domains.

  • Removed: Removed redundant divide by w during World Space decoding from Scene Depth.

UI

  • Bug Fix: Using scroll into view now selects the item being brought into view.

  • Bug Fix: Fixed improper scaling for on-screen debug messages, causing them to be hidden.

  • Bug Fix: Fixed Common Popup Menu staying on top of Activatable Panel stack even if the Popup Menu has been closed.

  • Bug Fix: Set Common Text Block's inner Text Block to Self Hit Test Invisible when a scroll style is applied.

  • Bug Fix: Fixed monochromatic font rendering:

    • All non-8bpp images are now converted to 8bpp images for processing in Slate.

    • We convert the gray color of any images not using 256 grays (for example, monochromatic images that use 2 grays).

    • Added a CVar "Slate.EnableFontAntiAliasing" to control whether you want anti-aliased (256 grayscale) rendering (default), or monochromatic (2 grayscale) rendering.

  • Bug Fix: Fixed Canvas Safe Zone offset.

  • Bug Fix: Hid the controller input on the Storm Shield check mark box.

  • Bug Fix: Fixed list views not wrapping properly in some cases.

  • New: Added an event to Common List View for when an item has finished scrolling into view.

  • New: Added support for TTC/OTC fonts:

    • These can be used via a sub-face index on FFontData, which can be set via a new combo in the Font Editor.

    • You can also see the cached list of sub-faces within a font file from the Font Face asset.

  • New: Added "Allow Engine Tick" option to Loading Screen Attributes used when starting a loading screen movie.

    • If set, it will run the main engine tick while waiting for a manually disabled loading screen to finish displaying. This enables latent actions such as level streaming to complete before stopping the load movie, but is disabled by default as it may not be safe for every game.

Slate
  • Crash Fix: Fixed a crash when Object Table is null.

  • New: Added "Show Only Keyable" and "Show Only Animated" to the Filter list in the property editor.

  • New: The Slate Tree View is now able to show wires that clarify the parent-child. relationship of the items in the tree. It has been enabled in the Widget Reflector.

  • New: Line and Spline rendering changes:

    • Lines/Splines now use 1 UV channel to anti-alias. The channel can be used for texturing.

    • Anti-aliasing filter will now be adjusted based on resolution.

    • Modified Line/Spline topology to accommodate new UV requirements.

    • Disabled vertex snapping for anti-aliased lines/splines; previously vertices were snapped, but vertex positions did not affect line rendering leaving the behavior effectively unchanged.

    • Splines now adaptively subdivide to avoid certain edge-cases.

  • New: Added a way to defer Slate retainer widget render target updates until the end of Slate draw. This avoids the extra copy operations that result from switching render targets in the middle of the frame. This feature is controlled by the "Slate.DeferRetainedRenderingRenderThread" variable. Note that UI updates will render more quickly, but will show one frame later, if this feature is used. By default, this feature is enabled only on mobile devices.

UMG
  • Crash Fix: Fixed a crash on adding an "On Clicked" event to a button in Widget BP.

  • Bug Fix: In the UMG editor it will now indicate the name of the property that is not bound.

  • Bug Fix: Fixed template finish not getting called on stop. This fixes a bug where sections aren't restored when finished.

  • Bug Fix: Refresh the widget preview even if the dragged widgets are dropped in an invalid location.

  • Bug Fix: UMG evaluation will now properly finish on stop.

  • Bug Fix: Fixed incomplete state when undoing after deleting user widgets from the widget tree.

  • Bug Fix: Widgets will not be removed from parent when they are pending garbage collection/

  • Bug Fix: Replacing widgets should now also clear out references to the widget.

  • Bug Fix: Reordering will now correctly handled by a undo, and will no longer cause a "ghost" widget to also be part of the tree.

  • Bug Fix: Animating a Slate Brush's material will now invalidate the cached widget's layout and volatility when setting MIDs.

  • New: Added right-click functionality to replace the object reference of a track with a different object in UMG Sequencer.

  • New: Added support for 2D transform mask (translation, rotation, scale, shear).

  • New: Improved copy/paste behavior for UMG editor:

    • Pasting in the Designer while a canvas is selected will place the new widget under the cursor.

    • Pasting multiple times while a canvas panel is selected in the hierarchy view will cascade the widgets starting at 0,0.

    • Pasting while something that isn't a panel is selected is now allowed, and will cascade the pasted widgets off the position of the selected widget (as siblings).

    • Newly pasted widgets will now be selected automatically.

    • Pasting multiple widgets at once will try and maintain their relative positions if they're being pasted into a canvas panel.

  • New: Added a function to Scroll Box to determine what fraction of the window we're displaying.

  • Removed: Removed legacy uses of Get Editor Icon from UMG.

  • New: UserWidgets have a new setting to determine how the Widget will tick. By default, this will be set to "Auto", meaning Widgets will turn ticking on only in the following cases:

    • A latent action (such as Delay nodes) is triggered.

    • An animation was triggered.

    • A script implements the Tick event.

    • A native tick is assumed to exist (meaning the Widget lacks "DisableNativeTick" metadata).

  • New: Added a new way to audit the tickability of a Widget with three Asset-Registry-searchable properties.

XR

  • Crash Fix: Fixed a crash when setting screen percentage to less than 100 in VR preview.

  • Bug Fix: Fixed a bug with Motion Controller Components not properly overriding the display model's material. XRAsset API now handles asynchronous resource loading.

  • Bug Fix: Fixed SteamVR headset detection on platforms with more than one GPU.

  • Bug Fix: VR preview now works with dedicated server mode in the editor.

  • Bug Fix: Fixed late update floating point precision issues when far from the origin.

  • Bug Fix: Improved tracking latency on Oculus. Cached poses are now updated at the end of the frame.

  • Bug Fix: Fixed an issue where aliased textures were mistakenly deleted by OpenGL.

  • Bug Fix: Morpheus HMD "World To Meters Scale" now updates camera offset scale in "On Start Game Frame."

  • Bug Fix: Fixed a bug that caused a crash when using SteamVR motion controller models.

  • Bug Fix: Fixed a bug that caused a slow down in reallocating render targets when using reflection captures in VR.

  • Bug Fix: Fixed a bug that caused world locked stereo layers to drift on Oculus when using an explicit camera component.

  • Bug Fix: Fixed a issue where the Oculus controller models wouldn't show up in cooked builds when using the motion controller's display model property.

  • Bug Fix: Fixed a crash that occurred when building lighting in VR.

  • New: Added a label to the VR spectator screen render call so it is distinguishable in profiling tools, such as RenderDoc.

  • New: Added the ability for Motion Controller components to track/display HMD devices by using "HMD" as the source name.

  • New: Added experimental support for lens calibration on MR projects using OpenCV.

  • New: Updated SteamVR SDK to version 1.0.11, this includes improved Vulkan support.

  • New: Improved SteamVR compositor timing and overall engine performance through more accurate CPU utilization data.

  • New: Added Render Bridge base class, FXRRenderBridge, to reduce code duplication when creating an XR Plugin with a Custom Present implementation.

  • New: Added initial support for omni-directional stereo captures.

  • New: Made Oculus code-scheduling functions available for use by other XR Plugins through the "Head Mounted Display" module.

  • New: Added virtual curves for head rotation from FaceAR's face tracking LiveLink streaming.

  • New: Added support for instanced stereo translucent rendering.

  • New: Added support for enabling the ARKit 1.5 auto-focus setting.

  • New: Added checks for ARKit 1.0 availability when creating the AR session, preventing calls to invalid selectors on older iOS devices.

  • New: Added functions for checking ARKit version availability at runtime.

  • New: Refactored how ARKit supports #define, simplifying wrapping individual features by ARKit version.

  • New: Added a console command to change where Face AR is publishing LiveLink curve data. "LiveLinkFaceAR SendTo=192.168.1.1".

  • New: Wrapped vertical plane detection in an "if iOS 11.3" check, since ARKit 1.5 is only available in 11.3 and later.

  • New: Added orientation to the "AR Candidate Image" object for passing to the detection system.

  • New: Added support for handling "AR Image Anchor" notifications from ARKit.

  • New: Added a friendly name to UARCandidateImage objects.

  • New: Added base types for detecting images in an AR session.

  • New: Added the name from the candidate image when creating the Apple side representation.

  • New: Added support for configuring which images to detect during an AR session.

  • New: Improved debug layer rendering on Oculus, circumventing a superfluous blit by rendering directly to the layer.

  • New: Added models to the Oculus plugin for HMD and Sensors.

  • New: Added "Use Camera Rotation" feature to "Stereo Panorama" Plugin. Now this plugin can take the current camera's rotation. To enable this feature, use the console command "SP.UseCameraRotation 7".

  • New: Updated Camera Component can now tell the "Late Update Manager" to store that we don't want to do a late update this frame. Default XR Camera checks this flag before applying the late update to the camera.

  • New: Refactored PSVR Minor reprojection for Frame Counter comparison.

  • New: Added a new PSVR API function for getting a transform between "floor" and "eye" tracking spaces.

  • New: Added a new PSVR delegate that can detect when an app changes between "floor" and "eye" tracking space.

  • Removed: Unused Stereo Rendering function "Get Custom Present" method has been removed.

Programming

  • Crash Fix: Fixed crash in FBX Scene Importer caused by user importing a FBX LOD group with no geometry under it.

  • Bug Fix: Fixed issue where FBX Importer used the incorrect owner when creating asset import data.

  • Bug Fix: Fixed FBX Static Mesh re-import to properly match names between the existing data and the incoming FBX file.

  • Bug Fix: Fixed import socket logic for Static Meshes to prevent it from duplicating sockets when re-importing.

  • Bug Fix: Fixed issue where FBX Importer's Global Transform options were not persisting in config file.

  • Bug Fix: Fixed SColorGradingPicker, which were preventing PIE sessions from working.

  • Bug Fix: Removed external profiling support from shipping builds to fix an issue that caused DLL queries for external profiles at start-up to fail.

  • Bug Fix: Changed FPlatformTime::Seconds(), FPlatformTime::Cycles(), and FPlatformTime::Cycles64() on Android to use CLOCK_MONOTONIC instead of system time-of-day clock.

  • New: Consolidated codepaths for embedding version information in the Engine.

    • Engine/Build/Build.version is now the authoritative place to configure version information.

    • Engine/Source/Runtime/Launch/Resources/Version.h no longer includes macros for the current branch and changelist.

    • These settings are compiled into the BuildSettings module at runtime rather than being exposed as global macros.

    • Licensee builds of the Engine are now automatically detected, no longer needing to be manually configured.

  • New: Added FBX Re-Import Resolve Material windows, enabling users to manually resolve materials if the importer failed to find a match with existing materials.

  • New: Added Visual C++ 2017 redist files to AppLocalDependencies.

  • New: Updated prereq installer to include Visual C++ 2017 support DLLs.

  • New: Added base include paths relative to the "Public" directory in Engine source files to reduce the number of public include paths needed for Engine modules.

  • New: Added rd_route v1.1.1 to provide macOS function interposition, which can be used for debugging.

  • New: Enabled undefined identifiers in conditional preprocessor expressions (by default).

  • New: Exposed Consolidate function through EditorAssetLibrary.

  • New: Added new Ray/Plane intersection function, named FMath::RayPlaneIntersection(), to Unreal Math library.

  • New: Exported Mobile Patching Library API so it can be used by Plugins.

  • New: Exported World Browser API so it can be used by Plugins.

UPGRADE NOTES

Animation

Control Rig
  • Removed: Control Rig has been completely redone and the previous BaseHuman has been removed and will not work anymore. If you wish to still use the previous Control Rig, this build will break it.

Core

  • Bug Fix: Fixed archive serialization issues for archives larger than 4 GB.

  • Bug Fix: UnrealHeaderTool now reports an error if a ufunction is used to mark up a function in a subclass where a ufunction of the same name already exists in the parent class, even if they have the same signature and markup data. To handle this situation:

    • For virtual functions, remove the UFUNCTION tag.

    • For blueprint implementable events, remove it entirely from the subclass. The parent class definition is adequate.

    • For blueprint native events and rep notifies, remove the UFUNCTION tag and instead simply define the "Implementation" or "Verify" virtual overrides as needed.

    • Any non-virtual cases that were essentially allowing parameter overloading for functions in blueprints we recommend renaming the functions and redirecting to new locations using CoreRedirects. At the very least, the base class version must be renamed, since the Engine will find that instead of your CoreRedirect.

Gameplay Framework

  • Projects making use of gesture bindings will need to enable the gesture recognizer in the project's input settings.

  • Direct access to UWorld::StreamingLevels, CurrentLevelPendingVisibility, CurrentLevelPendingInvisibility, bShouldForceUnloadStreamingLevels, and bShouldForceVisibleStreamingLevels, as well as most members of ULevelStreaming is no longer available. Instead, developers should use the appropriate get/set functions.

  • Projects that were calling SetToDefaults to make sure that their overridden implementation was called may want to remove their calls to avoid duplicated work. If your project overrides SetToDefaults and gives it side effects or introduces a dependency on the order of operations, this change may force you to change that.

Online

  • If you need to disable accepting compressed content, this is typically done on the webserver. The webserver should not be compressing images, since they are already compressed. If you need to prevent your game from ever accepting compressed HTTP content, this can be done with the .ini setting AcceptCompressedContent.

  • There has been a data format change to the UserAgent string. If you have backend code identifying HTTP calls from the game based on the UserAgent string, it will need to be updated.

  • Added pure virtual GetType() to FUniqueNetId, implemented in all subsystems that use their own subclass of FUniqueNetId or FUniqueNetIdString.

    • Created concrete types for all subsystems that were previously relying on a generic FUniqueNetIdString for their UniquePlayerIds, replaced all usages in their respective OnlineSubsystems with new type.

    • FUniqueNetIdString now contains a "Type" member variable that can be set at construct time to denote which OnlineSubsystem is required to properly interpret/instantiate that type.

Platforms

XBox One
  • You may now specify an optional DebugStackSizeOverride value in your XBox One target settings in the editor.

Rendering

  • Meshes might have to be re-imported to get precision of tangents and normals back to where they were. Unfortunately the old serialized data only stored the already compressed values and realigning them (to allow zero as value) might cause jitters and imprecision, re-importing should fix those issues.

  • Bug Fix: Fixed crash when using FreezeRendering in non editor builds.

  • Bug Fix: Fixed quad overdraw viewmode contents remaining on screen after switching to certain other viewmodes (such as light overlap or complexity).

  • Bug Fix: Enabling Forward Shading rather than the Mobile renderer on iOS now requires an Apple A9 or later iOS device.

FX
  • Bug Fix: Fixed motion blur vectors on sprite particles.

  • Bug Fix: Fixed particle shadow, when using material with depth fade.

Lighting
  • Bug Fix: Fixed white thumbnails bug when mobile preview is enabled.

Tools

UnrealBuildTool
  • Errors and warnings from UnrealBuildTool are now output in a format that allows them to be double-clicked in the Visual Studio output window.

PROGRAMMING UPGRADE NOTES

AI

  • New: Most Navigation System-related code has been moved out of the Engine code and into a new Navigation System Module. Game-specific code using navigation system functionality might need to be updated.

    • Include statements need to be updated (the removal of the AI/Navigation part of the header files path should be sufficient).

    • NavigationSystem class has been renamed to UNavigationSystemV1.

    • Navigation-related entries in DefaultEngine.ini and DefaultGame.ini need to be updated manually.

    • NavigationSystem code being removed from the Engine module means you will have to add NavigationSystem module to your project's dependencies.

    • World->GetNavigationSystem was renamed to FNavigationSystem:::GetCurrent

    • GetMainNavData was replaced by GetDefaultNavDataInstance

    • This Python (3.5) script parses game's sources and points at lines that need updating.

      • Optionally, the script can perform the changes but make sure to use this option with caution and assisted by a version control system.

      • Script options can be found at the top of the file.

Animation

  • Bug Fix: Removed unused CopySkinnedModelData function.

Animation Blueprints
  • Exposed types on SkeletalControlBase to allow creation of derived classes.

  • Added support for creating sub-classes of FAnimNode_StateMachine outside Engine module.

  • Allowed UAnimNotify_PlayMontageNotify to be inherited by other modules.

  • Bug Fix: Fixed sub-classes of FAnimNode_SkeletalControlBase not having deprecated CacheBones called.

Skeletal Mesh
  • Bug Fix: Removed unused RigidInfluenceIndex from CPU skinning code.

  • SkeletalMesh.LODInfo is also now private. You can use a function to add/remove LOD Setting, which ensures the correct setting is set when adding a new LOD.

Blueprints

  • If you have a default implementation of a BlueprintNativeEvent's required _Implementation() method inside of an interface class, the default implementation must now be removed from the interface class.

  • Removed FUnloadedClassDragDropOp as it was only used by the class viewer and had several issues. Any uses should be switched to use FAssetDragDrop instead.

Core

  • Logging calls like UE_LOG() or GLog->Logf() will no longer compile if the formatting string is not a string literal. These should be updated.

  • Direct access to FArchive members ArIsTextFormat, ArWantBinaryPropertySerialization, ArForceUnicode, ArIsPersistent, ArIsSaving, ArIsTransacting, ArLicenseeUE4Ver, ArEngineVer, ArEngineNetVer and ArGameNetVer should be replaced by their IsTextFormat(), WantBinaryPropertySerialization() etc. member functions.

  • Added a value of Unkown to FCoreDelegates::ETemperatureSeverity enum (and mirrored ETemperatureSeverityType). This adjusts the integral values of each enum to ensure Unknown == 0.

  • Bug Fix: StringToBytes() used to return a value one less than it should have. This has now been fixed, so if this error was being compensated for at the call site, the call should be updated.

  • Renamed confusing argument in LineBoxIntersection function

Editor

  • Crash Fix: Fix for crash when using macOS clipboard string copy commands.

  • Bug Fix: macOS Play In Editor performance fix when key / mouse up event occurs.

Scripting
  • Deprecated ExportToFileEx(), use newly created UAssetExportTask with RunAssetExportTask() instead of FExportToFileParams.

Sequencer
  • All movie scene channel types must now implement FMovieSceneChannel.

Gameplay Framework

  • Renamed the EReplicationMode enum used in AbilitySystemComponent to EGameplayEffectReplicationMode as the old name was misleading and too general for global scope. Also fixed several typos on function and variable names used in the ability system.

  • Deprecated FSavedMove_Character::MovementMode in favor of StartPackedMovementMode and EndPackedMovementMode, so they are more explicit (about being packed modes) and capture the state separately at the start and end of the move.

Localization

  • FInternationalization::GetCulturesWithAvailableLocalization was deprecated as it would only provide cultures that used LocRes files (ignoring additional localization text sources). This should be replaced with a call to FTextLocalizationManager::GetLocalizedCultureNames, and an optional call to FInternationalization::GetAvailableCultures if you need culture pointers (rather than just their names).

Networking

Replays
  • FRepLayout::DiffProperties now takes an enum flag type instead of a bool as its last parameter.

Online

  • See CurlHttpManager.cpp for more information on the AcceptCompressedContent INI setting. Also see CurlHttp.cpp where the curl option CURLOPT_ACCEPT_ENCODING is set to support curl's default encodings.

  • The UserAgent is set in FGenericPlatformHttp::GetDefaultUserAgent.

  • FUniqueNetIdString::FUniqueNetIdString(String) style constructors will likely be hidden soon to enforce usage of Type across the game.

  • Calls to IXmppChat::SendChat and IXmppMessages::SendMessage will need to be updated.

  • Bug Fix: Please note that Steam leaderboards no longer automatically increment variables (its original behavior was a bug). As such the new behavior follows that of other platforms.

  • Bug Fix: The dedicated server fix introduces a new launch argument ("-force_steamclient_link") that can be used to force the steamclient link for dedicated server projects that require it.

Physics

Rigid Bodies
  • Added ENGINE_API to UPhysicsHandleComponent so it can be sub-classed.

  • Removed unnecessary InitialLinearVelocity vector from BodyInstance (reduces PrimitiveComponent size by 12 bytes).

  • Bug Fix: Threading is no longer used for PhysX if ShouldUseThreadingForPerformance is false.

Rendering

  • Bug Fix: Changed texture streaming to not use background task when FApp::ShouldUseThreadingForPerformance is false.

UI

Slate
  • While ITableRow was never intended as a public-facing interface, some advanced programmers may have chosen to implement it. Two additional methods were added to the interface, so any code implementing ITableRow will have to add an implementation for these methods. Sample implementations can be found in STableRow.h.

XR

  • If you maintain an XR plugin that implements IStereoRendering::GetCustomPresent, it should be removed.

  • If you maintain a XR plugin implementation, please review the new FXRRenderBridge base class if your module needs to provide a custom present implementation.

DEPRECATIONS

Animation

  • Removed: BaseHuman has been removed and will not work anymore.

Blueprints

  • Deprecated BlutilityActor & DatasmithBlutilityActor in favor of PlacedEditorUtilityBase. Existing data will migrate to PlacedEditorUtilityBase. PlacedEditorUtilityBase should be used for Blutility base class.

Core

  • Deprecated Lex namespace and converted all existing methods to Lex- prefixed functions instead. This avoids issues with using the Lex namespace generically in the presence of 2-phase template instantiating compilers like clang.

  • Passing anything other than a literal string to ensureMsgf() as its format string has now been deprecated. Please ensure formatting strings are always string literals.

  • De-virtualized from FArchive::IsSaveGame() and FArchive::IsFilterEditorOnly(). Please ensure that your custom archives do not try to override these functions.

  • Passing anything other than a literal string to FString::Printf() as its format string has now been deprecated. Please ensure formatting strings are always string literals.

Gameplay Framework

  • FInputActionBinding::ActionName is now private. Direct setting after construction is no longer permitted, access to read the name can be done via GetActionName accessor.

Physics

Rigid Bodies
  • Removed unused PhysX serialization support.

Programming

  • Removed welded vertices option from the FBX exporter dialog. The vertices are always welded.

  • Deprecated FindOverlappingCorners() storing data as TMultiMap, replaced with struct FOverlappingCorners. New container is optimized for better performance and memory usage.

  • Removed experimental "SubD Surface" feature. This feature was never completed, and will be superseded by Editable Mesh in a future release.

  • Merge plugin AssetScriptingUtilititesEditor with plugin EditorScriptingUtilities. Existing data will be migrated.

Tools

  • Removed old, invalid Niagara Collision Bounce module. Please have your Niagara Emitters and Systems use the Collision Linear Impulse module.

BuildGraph
  • UnrealFrontend is no longer included in the BuildEditorAndTools.xml script. This functionality is available through the editor, and is rarely required in standalone.

UnrealBuildTool
  • The explicit construction of RuntimeDependency objects from .build.cs files is now deprecated. The path string can be added to the list of runtime dependencies instead.

Select Skin
Light
Dark

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见