虚幻引擎4.22版本说明

虚幻引擎4.22版本说明

Windows
MacOS
Linux
本页面的内容

image alt text

全新内容

无论您在打造沉浸式游戏、电视实时直播、演示创新型产品,亦或是打造全新商业大片,虚幻引擎4.22版都能助您 在实时环境中实现无限接近于照片的真实效果。 我们认为高度进步的新技术并不应该造成项目开发周期的增加。因此,我们将眼光再度投向工作流程,致力于为各个行业的用户打造更为快速便捷的工作流

虚幻引擎强大的性能足以 用最精确的实时光照和阴影效果来构建真实场景。利用Nvidia RTX显卡的实时光线追踪,动态全局光照、像素完美反射及精确物理折射等效果均能一一实现。 而柔和的区域阴影和环境光遮蔽则能为场景增色不少,使真实感更上一层楼。

我们丰富的虚拟生产功能套件中加入了 采集录制复杂实时性能并对其进行即时合成 的功能,帮助您加快现有的工作流。整个团队得以利用全新的多用户编辑功能进行协同合作,对场景进行实时调整。

每一秒用以等待你所创建的最新内容展现到你眼前的时间都是成本,你的成本、你面向的用户的成本,以及对你想要达成的愿景的成本。因此我们正努力让虚幻引擎能在每个后续版本中都能变得 更易用和快捷,为开发者留出更多时间来完善和调整用户体验。全新的“实时代码编写”功能为虚幻引擎提供了Live++支持,所以 用户在运行项目时可以很快将想法变为现实。编译时间已得到全盘优化,增量编译的迭代时间最高可缩短3倍,以便空出流程中的重要资源。

此版本还包含了GitHub虚幻引擎开发者社区提交的174项改良!特此对虚幻引擎4.22版本的每位贡献者表达诚挚谢意:

0xmono、Adam Moss (adamnv)、Ahsan Muzaheed (muzaheed57)、Alessio Sgarro (cmp-)、Alexander Stevens (MilkyEngineer)、AlexTimeFire、AlSafty、Andrzej K. Haczewski (ahaczewski)、Anton Rassadin (Antonrr)、Ben Peck (bpeck)、BinaryRK、Branislav Grujic (grujicbr)、Cameron Angus (kamrann)、Cengiz Terzibas (yaakuro)、Chris Conway (Koderz)、Chris Gallegos (Chrispykins)、Clinton Freeman (freemancw)、Cristiano Carvalheiro (ccarvalheiro)、Dan Ogles (dogles)、Daniele Benegiamo (kafumanto)、David Aylaian (davidaylaian)、David Nadaski (GlassBeaver)、David Sauve (notanumber)、Deep Silver Dambuster Studios (DSDambuster)、Dmitriy Donskoy (sentik)、doodoori2、Dorgon Chang (dorgonman)、Doug Moscrop (dougmoscrop)、Doug Richardson (drichardson)、Dzuelu、Erik Dubbelboer (erikdubbelboer)、H1X4Dev、Hargreawe、hkozachkov2、Ilyin Aleksey (IlinAleksey)、improbable-valentyn、Ivan Popelyshev (ivanpopelyshev)、IvanKuzavkov、James Cahill (Prouser123)、Jan Kaniewski (getnamo)、Jin Hyung Ahn (zenoengine)、jkinz3、Joe Best-Rotheray (cajoebestrotheray)、joemmett、Josef Gluyas (Josef-CL)、Kalle Hämäläinen (kallehamalainen)、Kartik Saranathan (Kartiku)、korkuveren、Kory Postma (korypostma)、Leon Rosengarten (lion03)、locus84、lotodore、Marat Radchenko (slonopotamus)、Marcel (Zaratusa)、Mark Whitty (Mosel3y)、mastercoms、Mathias Hübscher (user37337)、Michael Kösel (TheCodez)、Michael Samiec (m-samiec)、Mike Bell (MichaelBell)、Mike Slegeir (tehpola)、Mimus1、Mitsuhiro Koga (shiena)、momboco、Morva Kristóf (KristofMorva)、Muhammad A. Moniem (mamoniem)、Nick (eezstreet)、Nick Edwards (nedwardsnae)、Nick Pruehs (npruehs)、Ondrej Hrusovsky (skylonxe)、Paul Hampson (TBBle)、Philippe Chaintreuil (Philippe23)、Phillip Baxter (PhilBax)、projectgheist、RDIL、Riley Labrecque (rlabrecque)、Roman K. (CrispMind)、Robin Zoň (ZonRobin)、roidanton、ruzickajason、ryugibo、Sam Hocevar (samhocevar)、Satheesh (ryanjon2040)、Scott Fries (ScottFries)、Sébastien Rombauts (SRombauts)、ShalokShalom、spoiltos、stanley1108、Stephen A. Imhoff (Clockwork-Muse)、stkrwork、sturcotte06、Takashi Suzuki (wankotank)、tgroll、Thang To (thangt)、Tim Lincoln (Ratherbflyin)、TommyTesla、Vladimir Ziablitskii (rainlabs)、whoisfpc、YanaPIIDXer、Yannick Comte (demonixis)、yhase7、Zeblote

主要功能

全新功能:实时光线追踪和路径追踪(测试功能)

此次版本更新后,我们激动地宣布,虚幻引擎现在将支持使用Windows 10 RS5更新光线追踪和路径追踪的测试版。此功能能够完全利用NVIDIA RTX系列显卡的DirectX 12和DirectX光线追踪(DXR)。

image alt text

实时光线追踪器

光线追踪功能由一系列的光线追踪着色器和光线追踪效果组成。借助这些功能我们便能实时构建自然而真实的光照效果,其在阴影投射、环境光遮蔽、反射等方面完全不逊于离线渲染器。

image alt text

我们加入了大量光线追踪功能并将继续在后续的虚幻引擎版本中对这个模块的功能进行扩展。此版本中的部分功能包括:

  • 用于定向光源、点光源、聚光源和矩形光源的柔和区域阴影。

  • 相机视锥内外物体的准确反射。

  • 对场景中的地面物体应用软环境光遮蔽。

  • 对半透表面的物理正确的折射和反射。

  • 来自光源的动态全局光照的间接光照。

  • 及更多功能!

欲知详情,请参见[实时光线追踪]](https://docs.unrealengine.com/en-us/Engine/Rendering/RayTracing)部分,了解此版本当前支持功能的详解。

路径追踪器

除光线追踪器外,此版本还添加了一个无偏差路径追踪器,提供间接光照路径以实现完整的全局光照效果,在引擎中实现真正的真实效果参考渲染。它能改良虚幻引擎场景中的工作流内容,无需再导出到第三方离线路径追踪器中进行对比。

欲知更多详情,请参见路径追踪器部分。

全新内容:高层渲染重构

此版本中,虚幻引擎中的网格体绘制已被完全重新编写,现在绘制性能更佳,并支持实时光线追踪。之后的版本中我们将继续把更多渲染工作移到GPU上。

网格体绘制流程重构:

在全新的网格体绘制流程中,静态场景元素绘制信息的缓存将更为积极,并会尽量自动实例化合并绘制调用。这使mesh pass新实现的代码量降低了4到6倍之多!

此次重构对于自定义的场景代理在渲染器中的网格体绘制产生了较大影响,而对渲染器的接口影响较小。所有自定义Drawing Policy在新架构中都需要重新编写为FMeshPassProcessors。这意味着在这个较大的更改后,Drawing Policy将失去向后兼容性。

全新内容:C++迭代时间改良

实时代码编写(实验性)

所有开发者已获得在虚幻引擎项目中使用Molecular Matters Live++功能的授权,我们也已将其整合为全新的 实时代码编写 功能。用户可以通过实时代码编写在开发环境中进行C++代码修改,然后方便快捷地完成编译并将其打补丁到正在运行的编辑器或standalone游戏中。和旧有的热加载机制不同,实时代码便将对单个函数打补丁,而无需进行对象重实例化的特殊考虑,使其在大型项目中的可靠性和可扩展性大大提升。

要使用此功能,从编辑器中编译按钮旁的下拉菜单中勾选“实时代码编写(实验性)”选项,然后按下Ctrl+Alt+F11进行编译并应用修改。在控制台窗口中输入“LiveCoding”即可从烘焙游戏中启用。

注意:

  • 不支持在引擎运行时修改类布局。我们计划在未来的版本中修复此问题。

  • 当前只支持Windows。

编译时间

我们对 UnrealBuildTool(用于配置、编译、链接和发布引擎及多平台目标应用的工具)和 UnrealHeaderTool(用于预处理代码头文件的工具) 进行了优化,使 C++迭代时间最高能实现3倍速度提升

完整编译(UE4Editor Win64开发版本):

虚幻引擎4.21

虚幻引擎4.22

改良

总编译时间:

436.90

326.81

加快30%

编译 UnrealHeaderTool:

46.12

46.30

生成头文件:

25.05

15.50

加快60%

编译 UE4Editor

323.15

257.97

加快25%

UnrealHeaderTool 开销

42.58

7.04

加快600%

增量编译(UE4Editor Win64开发版本):

虚幻引擎4.21

虚幻引擎4.22

改良

总编译时间:

7.47

2.14

加快340%

编译 UE4Editor

1.19

1.08

UnrealHeaderTool 开销

6.28

1.06

加快590%

无代码修改(UE4Editor Win64开发版本):

虚幻引擎4.21

虚幻引擎4.22

改良

UnrealHeaderTool 开销

5.38

1.03

加快520%

此外我们还极大提升了增量编译依赖性检查的准确性,包括检测添加到项目和从项目中移除的文件,以及使用编译器驱动的包含依赖性检查。

全新内容:虚拟生产流程改良

虚幻引擎对实时虚拟生产流程的各个方面进行了重大改良,持续引领着技术的发展。

用Composure进行实时合成(测试功能)

我们对Composure合成系统进行了重大改良,在虚幻引擎中进行图像、视频和CG元素合成时将前所未有地轻松。

借助内置合成,使用者可以轻松地实时显示将绿屏场景和虚幻引擎关卡内容组合起来的效果。此功能适用于预显示,用虚幻引擎的数码内容提升实拍影片效果、并替代绿屏背景后,现场导演便能直观地了解最终场景的实际效果。引擎中显示的结果也能成为有价值的参考,便于合成师在其他第三方软件中离线工作。

改良包括:

  • 使用材质来驱动图层混合。

  • 利用“光源包裹”一类效果的后期处理流程。

  • 使用媒体框架和专业视频I/O系统来采集视频驶入和渲染输出。

  • 将内置渲染通道用于色度镶迭、防溢出、色调映射等功能。也可以构建您的自定义通道。

Composure系统同样支持传统的离线合成工作流,便于导出选中虚幻引擎对象的渲染,以便在第三方应用程序中与其他源进行合成。

OpenColorIO(OCIO)颜色描述文件(实验性)

在新版本中,使用者可以在虚幻引擎中使用OpenColorIO(OCIO)颜色描述文件直接变换任意纹理或Composure元素的色彩空间。这有助于让视频和电脑生成元素的颜色从合成到最终输出皆保持一致。

硬件加速视频解码(实验性)

在Windows平台上,使用者现在可以使用GPU来加速H.264视频流送的处理。它能减轻播放视频流送时CPU的压力,视频播放将更加流畅,用户可以使用更高分辨率的影片文件和更同步的输入馈送。

项目设置 窗口的 插件 - WMF媒体 部分启用 硬件加速视频解码(实验性) 设置后,即可使用硬件解码。

全新媒体I/O格式

新版本中添加了更专业的视频I/O输入格式和设备:

  • AJA和Blackmagic可接收的4K超高清输入。

    • 支持8位和10位输入。

    • 支持单连接、双连接和四连接。

  • 支持AJA Kona 5设备。

    • HDMI 2.0输入。

    • 支持高帧率超高清(最高可达60fps)。

nDisplay改良

新版本增添加数项新功能,使nDisplay多显示渲染系统拥有更强的灵活性,能处理新类型的硬件配置和输入。

  • 在新版本中,每个群集节点的应用程序窗口在定义的屏幕空间坐标处可拥有多个视口。这使得一个在单一计算机上运行的单一虚幻引擎实例能够处理多个互相错开的显示器。

  • 在旧版本中,为nDisplay系统中的节点提供输入的唯一方式便是通过VRPN。新版本中添加了一个名为“群集”事件的全新通信机制,其可用于在所有连接的计算机上触发同步响应。

  • nDisplay配置文件中已公开输入子系统的更多可能性,使用者无需重新打包项目便可修改属性和映射。

  • 如果您已在使用nDisplay,则可能需要对配置文件进行一些调整,以匹配新模式。新版本中nDisplay Launcher能自动升级您的配置文件。

欲知细节,请参见nDisplay文档

全新内容:HoloLens 远程流送支持

新版本中,虚幻引擎4将通过Windows混合现实插件来支持 Holographic Remoting! 这使得虚幻引擎在Windows桌面电脑上运行时能将渲染结果通过Wi-Fi连接实时无线传输到 HoloLens。

image alt text

全新内容:音频系统改良

时间同步(测试功能)

时间同步(TimeSynth)是一个全新的音频组件,致力于为音效设计师提供音频片段的开始、停止和串联的精确采样。TimeSynth将启用精确的同步事件音频事件队列,其对交互音乐应用程序而言十分重要。

image alt text

分层音效并发性

新版本中,音效并发性系统将观察多个设置或分组。现在,如果一个音效对象(AudioComponent、SoundBase,或SynthComponent)未满足其ConcurrencySet属性中指定的所有要求,新的音效将无法播放。此外,如果新音效满足所有并发性设置分辨率规则并开始播放,一个或多个音效可能停止播放。

Submixes频谱分析器(全新引擎)

新版本中,设计师能分析游戏进程中的Submix频谱能量,基于当前播放音频的频率内容来驱动游戏进程、材质或任意数量可驱动的目标对象中的调制。

image alt text

声波上的已烘焙频谱分析曲线和Envelope

新版本中使用者可以对声波进行预分析,让envelope和频谱能量在播放中驱动蓝图。这使得音效设计师能创建出强大的音频驱动系统,同时不再进行频谱分析,以改良运行时性能。此外,代理声波的分析数据可用声波的分析数据进行替换,使设计师在尝试驱动游戏进程时假冒独立的音效事件。

音效资源导入改良

新版本对音效资源导入进行了极大改良。除当前对多通道WAV文件的支持外,虚幻音频引擎现在还支持导入大量音效文件格式,包括AIFF、FLAC和Ogg Vorbis。

对MIDI设备插件的改良

除处理MIDI设备输出外,新版本中MIDI设备插件还允许用户发送MIDI消息到外部MIDI设备。另外,对插件蓝图API的改良还简化了MIDI消息的解析。这些修改使得音效设计师能更有效地将MIDI I/O整合到项目中。

全新内容:Sequencer改良

我们再次对业界标杆Sequencer线性动画工具集进行了重大更新。随着新工具和改良的加入,虚拟生产项目的制作将得到改善。此外还包含大量易用性改良。

Sequencer镜头录制器

在虚拟制作的工作流中,镜头录制器实现了 表演录制的快速迭代和已有镜头的快速预览!我们在序列录制器的基础上进行了改良:可录制的内容、数据的处理方式,并扩展了系统来满足不同的使用需求。使用者可以轻松从链接到场景内的动画捕捉角色来录制动画,也可以采集Live Link进来的动画数据用于之后的播放。通过将可以自定义的各种Actor录制为子序列,并以镜头元数据进行整理,从而轻松制作出大小不同、数量不等的镜头。

欲知详情,请参见镜头试拍录制器文档

Composure Sequencer轨迹

使用者能借助全新的Composure轨迹轻松 将序列导出为在Composure中定义的层。一次可添加多个轨迹来导出多个层。可直接将层从Composure拖入Sequencer来生成这些层的轨迹。

Sequencer中的分层动画工作流

新版本中使用者在一个轨迹中可以利用多权重片段来创建分层动画。Transform和数个其他属性轨迹支持分层动画。

Live Link Sequencer轨迹

新版本中使用者可以将Live Link进入的数据录制到sequencer轨迹上并进行播放。带有时间码的Live Link数据和每次引擎tick的多个样本保存的分辨率可以高于sequencer播放率。

对象绑定Sequencer轨迹

新版本中使用者可以修改指定到Sequencer中Actor属性的对象:静态网格体、骨架网格体、材质等。Actor被添加到Sequencer后,这些对象引用属性便会可用,和该actor“轨迹”菜单中的其他属性一样。

Sequencer中的网络复制

新版本中,设置为复制使用“复制播放”属性的关卡序列Actor将同步其在服务器和客户端之间的播放时间。

Sequencer的Python支持改良

Sequencer的Python支持已得到改良,实现了影片场景功能:

  • 影片场景部分和关键帧数据操纵

  • 影片场景采集

Sequencer杂项改良

  • 现在可以将多个对象指定到一个单一轨迹。

  • 现在可以一次性从多个轨迹复制/粘贴片段。

  • 现在可以用标签对帧进行标记,然后快速跳至该标记以播放序列。可为每个标记设置颜色,便于对其进行辨别。

  • 将轨迹/片段公开到蓝图(计划中),例如运行时切换子片段/镜头

全新内容:动画预算系统(测试功能)

全新的 动画预算编制器 可以为每个平台设置固定的预算(游戏线程上执行的工作的毫秒数),确定预算是否足以完成所有任务,还是需要削减开销才能完成工作。它的工作方式是测量动画更新的总开销,并计算单个工作单元的开销。如果需要削减开销来满足预算,其将针对几个区域基于重要性来进行削减:停止tick并使用主姿势组件、降低更新率、在更新之间进行插值(或不进行插值),等等。目标是动态调整加载,已满足固定(游戏线程)预算。

全新内容:动画共享插件

新增一个 动画共享(Animation Sharing) 插件,降低一群Actor所需的动画工作总量。其基于主姿势组件系统,同时添加混合和additive动画状态。动画状态是动画实例计算所用的分类容器。生成的姿势将被转移到对应的分类容器中的所有子组件。参见下方的图表了解系统详情。

image alt text

骨架网格体组件将根据动画状态连接到主组件来驱动动画。在视频中,只有动画状态的姿势才会被计算,群组Actor只会复制生成姿势的骨骼矩阵。

全新内容:支持长文件名(实验性)

我们为Windows十周年纪念版更新的用户添加了长文件路径支持! 在之前,Windows中的路径被限制为260个字符,其在复杂命名规则下和较深的资源层级中容易造成问题。Windows十周年纪念版提供了对长文件名的支持,以供用户和程序使用。在Windows 10中启用长文件名路径的方法是:

注意: 对长路径的支持并非整体存在。第三方工具,甚至操作系统自身的一些部分(例如Windows Explorer)均可能无法支持。

全新内容:蓝图索引编制优化

在对蓝图搜索数据编制索引的方式进行修改后,编辑器和PIE的启动时间得到了极大改良。现在我们将延迟搜索数据更新,直到“在蓝图中找到(Find-in-Blueprint)”选项卡打开、异步执行更新,并将资源加载进程从蓝图索引重编中独立出来。

全新内容:Steamworks支持改良

用UE4进行Steam开发变得前所未有地简单!我们针对Steam多人游戏开发者进行了一些实用性和易用性改良。

  • Steam上的专属服务器现在能通过全新的“-SteamServerName”启动参数来接收自定义命名(最高63个字符)。

  • 项目可以覆盖Steam网络层,方法为:停用“bUseSteamNetworking”配置值,并将其NetDriver配置设为优选的底层网络层。

  • 我们通过UE4信标极大地改良了Steam NetDriver在标准游戏网络连接之外的实用性。

  • 使用者现在可以在项目的Target.cs文件中设置特定的必需的Steam值,例如专属服务器命名或应用程序ID。对这些值进行修改不再需要重新编译引擎。

全新内容:预览场景设置改良

我们为预览场景设置新增了功能,使用者无需禁用灯光便可以隐藏环境立方体贴图(显示环境)。参见 预览场景设置 面板中的 使用天空光照 属性。

全新内容:骨架网格体LOD简化

现在,你可以在虚幻引擎编辑器使用骨架网格体简化工具,生成简化的骨架网格体的版本,用作细节等级(LOD)!用户不再需要依赖于耗时而容易出错的第三方数字内容创建(DCC)程序或第三方工具。创建精确的高质量LOD,并立即在视口中查看结果。

欲知更多信息,请参见骨架网格体简化工具

全新内容:逐平台属性改良

逐平台属性已得到延展,允许在平台分组之外基于目标平台设置值。

image alt text

全新内容:Gauntlet自动化框架改良

Gauntlet自动化框架加入了数项改良,提高了易用性,并增加了学习的文档和范例。

增加的文档和范例

  • 讲述Gauntlet架构和入门知识的文档

  • 更多ActionRPG和PGO优化范例

  • 追踪编辑器加载和PIE时间的范例

iOS支持

Gauntlet现在支持在iOS上安装和运行IPA文件(需要Mac host)。这样一来引擎的设备支持便扩展到PC、Mac、PS4、XB1、Switch、Android和iOS。

PGO优化

在PS4、Xbox One和Switch上生成项目PGO文件的自动化脚本范例。

报告创建

已新增HTML和Markdown构建器,将自定义报告创建为自动化脚本的的一部分。

全新内容:Visual Studio 2019支持

image alt text

新版本中已添加对Visual Studio 2019的支持。如需默认使用Visual Studio 2019,在编辑器的源码管理设置中选择“Visual Studio 2019”作为IDE即可。

我们还添加了切换至C++新标准版的功能。如需修改项目支持的C++标准版本,请在.target.cs文件中将CppStandard属性设为以下值中的一个。

版本

C++14

CppStandardVersion.Cpp14

C++17

CppStandardVersion.Cpp17

最新

CppStandardVersion.Latest

与此同时,我们已停止对Visual Studio 2015的支持。如果需要强制项目使用Visual Studio 2015编译器进行编译,可在项目的.target.cs文件中将WindowsPlatform.Compiler设为WindowsCompiler.VisualStudio2015。注意:从Epic Games Launcher上下载的引擎版本不支持Visual Studio 2015,我们将不再对其进行内部测试。

全新内容:子系统

子系统是自动实例化的类,其生命周期可以管理,能提供易用的扩展点,免除了复杂的修改或覆盖引擎类,同时能原生获取蓝图和Python的公开性。

当前支持的子系统生命周期

引擎

class UMyEngineSubsystem : public UEngineSubsystem { ... };

引擎子系统的模块加载时,子系统将在模块的Startup()函数返回后执行Initialize()。 子系统将在模块的Shutdown()函数返回后执行Deinitialize()。

这些子系统将通过GEngine进行访问:

UMyEngineSubsystem MySubsystem = GEngine->GetEngineSubsystem<UMyEngineSubsystem>();

编辑器

class UMyEditorSubsystem : public UEditorSubsystem { ... };

编辑器子系统的模块加载时,子系统将在模块的Startup()函数返回后执行Initialize()。 子系统将在模块的Shutdown()函数返回后执行Deinitialize()。

这些子系统将通过GEditor进行访问:

UMyEditorSubsystem MySubsystem = GEditor->GetEditorSubsystem<UMyEditorSubsystem>();

注意:这些纯编辑器的子系统不能访问常规蓝图,只能访问编辑器工具控件和Blutility类。

GameInstance

class UMyGameSubsystem : public UGameInstanceSubsystem { ... };

这能通过UGameInstance进行访问:

UGameInstance* GameInstance = ...;
UMyGameSubsystem* MySubsystem = GameInstance->GetSubsystem<UMyGameSubsystem>();

LocalPlayer

class UMyPlayerSubsystem : public ULocalPlayerSubsystem { ... };

这能通过ULocalPlayer进行访问:

ULocalPlayer* LocalPlayer = ...;
UMyPlayerSubsystem * MySubsystem = LocalPlayer->GetSubsystem<UMyPlayerSubsystem>();

从蓝图访问子系统

子系统将自动公开到蓝图,带有理解情境、不需要做类型转换的智能节点。

使用者可利用标准UFUNCTION()标记和规则来控制蓝图可用的API。

image alt text

image alt text

来自Python的子系统

如果使用Python来进行编辑器脚本编写,则可使用内置存取器在子系统中进行获取:

my_engine_subsystem = unreal.get_engine_subsystem(unreal.MyEngineSubsystem)
my_editor_subsystem = unreal.get_editor_subsystem(unreal.MyEditorSubsystem)

注意:Python当前是一个实验性功能。

全新内容:编辑器工具控件

利用编辑器工具控件,使用者能 借助完全由UMG UI编辑器和蓝图可视化脚本逻辑创建的新用户接口来扩展虚幻编辑器的功能!和其他虚幻编辑器面板一样,这些编辑器专属的UI面板可从“窗口”菜单中进行选择。

要创建编辑器工具控件,在 内容浏览器 中点击右键并选择 编辑器工具 > 编辑器控件 即可。

双击 编辑器控件资源 即可编辑蓝图。对编辑器控件资源的蓝图完成编辑后,右键点击编辑器控件并选择 运行编辑器工具控件(Run Editor Utility Widget),在选项卡中打开UI。选项卡只能停靠在关卡编辑器选项卡中。其位于关卡编辑器窗口下拉菜单内的 编辑器工具控件 类目中。这是一个实验性功能。

全新内容:材质分析器

材质分析器为使用者提供了材质和材质实例中参数使用的整体视图,以便帮助你快速找到可能存在的材质改进和优化方案,以最小化渲染状态的切换,并节约内存。在 窗口 > 开发者工具 下可访问材质分析器。

image alt text

材质列出在一个树中,并带有建议列表,其将显示拥有相同静态覆盖集的材质实例分组,以便进行优化。也可以将所有相关实例放置到一个本地集中,以便轻松进行查找和更新。

全新内容:选择子项和后代Actor

使用者在新版本中可以使用 世界大纲视图关卡视口 中的快捷菜单将选择扩展到所选Actor的所有直接子项或所有后代。在使用大型、复杂的场景层级时便更加容易。

全新内容:自适应的相机缩放和平移

在关卡中选择一个或多个物体后,相机缩放和平移操作的灵敏度将随物体和相机之间的距离自动缩放。这使得相机运动更加真实,在处理体积较为极端的物体(如微小的机械部件或大型地形)时尤为实用。

编辑器偏好 窗口中的 关卡编辑器 > 视口 部分中禁用全新的 使用距离调整相机速度(Use distance-scaled camera speed)

全新内容:选择物浏览轨道

与围绕屏幕中心运动相反,在新版本中,使用者可以围绕所选对象的枢轴旋转——当一个或多个对象在关卡视口中选中时。

编辑器偏好 窗口的 关卡编辑器 > 视口 部分中启用全新 使相机绕选中项进行轨道运动(Orbit camera around selection),即可启用此模式。

全新内容:切换多个层的可视性

新版本中使用者可以同时切换多个层的可视性。按住 CTRL 并点击每个层即可构建选择。点击这些选择层旁边的 眼睛图标 即可切换所有选中层的可视性。

image alt text

全新内容:多用户编辑(测试功能)

新版本中,多位关卡设计师和美术师能 将虚幻编辑器的多个实例连接起来,在共享的编辑会话中协同工作,实时构建同一个虚拟世界场景。

  • 专属服务器将持续追踪所有用户执行的所有修改,并同步编辑器和所有已连接计算机之间的状态。

  • 对一台计算机上的关卡和序列进行修改时,修改将自动被镜像,实时传输到参与同一个会话的所有其他计算机上。

  • 对材质之类的其他类型资源进行修改时,保存这些资源时修改将复制到所有的其他计算机。

  • 离开正在编辑的会话之前,每个使用者可以选择是否将会话中进行的修改应用到项目的本地副本中。

全新内容:预览渲染关卡改良

移动预览器的工作流已得到改良,使用不同设备和平台的着色模型时在所有编辑器视口中便能统一使用相同的着色模型,并便于在默认Shader Model 5(SM5)和选中的预览渲染关卡之间进行即时切换。

首先从主工具栏的 设置 下拉菜单中选择一个 预览渲染等级,以编译对应某个平台的着色器。完成编译后,使用主工具栏中添加的 预览模式 按钮来切换显示模式。

欲知更多详情,请参见“移动预览器”部分。

全新内容:移动平台的动态聚光源支持

新版本支持高端移动设备上的非阴影投射动态聚光源。

前往 项目设置 > 渲染 > 移动着色器置换支持可移动聚光源 设为true,即可启用动态聚光源。

欲知更多信息,请参见移动平台光照

全新内容:游戏存档系统iCloud支持

UE4新版本支持用ISaveGameSystem接口将游戏保存到iCloud(支持iOS和tvOS)。前往 项目设置 > 平台 > iOS > 在线 并启用 启用Cloud套件支持(Enable Cloud Kit Support) 选项即可将游戏保存到iCould。然后可以从 iCloud存档文件同步策略(iCloud save files sync strategy) 选项中选择最适用于项目的同步策略。当前可用的iCloud同步选项如下:

  • 永不(不使用iCloud加载/保存游戏)

  • 仅在游戏开始时(iOS)

  • 固定(LoadGame调用时)

全新内容:设备输出窗口改良

新版本对设备输出日志窗口进行了重大改良,使其脱离了实验性阶段。可使用设备输出日志窗口从PC发送控制台命令到iOS设备。在主菜单中点击 窗口 > 开发者工具> 设备输出日志 即可访问设备输出日志。

全新内容:HTML5平台改良(实验性)

新版本中添加了HTML5项目的多线程支持(实验性)。请注意:启用此功能需要访问虚幻引擎4的源代码。

部分浏览器需要启用特殊标签才能在多线程模式中运行。参见https://github.com/emscripten-core/emscripten/wiki/Pthreads-with-WebAssembly了解更多信息。

  • 针对Chrome:用以下标签运行Chrome:

    --js-flags=--experimental-wasm-threads --enable-features=WebAssembly,SharedArrayBuffer

    另外可选择在chrome://flags/#enable-webassembly-threads中将其作为“WebAssembly线程支持”启用/禁用

  • 在Firefox中,将javascript.options.shared_memory偏好设为true,即可在about:config中启用SharedArrayBuffer。

全新内容:iOS优选朝向

新版本中可以设置优选朝向,在横向左和右均支持时用作iOS启动的初始朝向。

全新内容:Niagara向量场数据接口

新版本中,向量场数据接口用于CPU和GPU粒子的方式完全相同!可使用采样向量场模块来对向量场进行采样。它将公开3个主要输入:

  • 向量场(VectorField):这是向量场数据接口实例,包含静态向量场对象自身,以及逐轴平铺标签。

  • 采样点(SamplePoint):这是对向量场进行采样的点。其默认为 Particles.Position,但可进行自定义。

  • 强度(Intensity):这将缩放被采样的矢量。

此外还有数个可选输入:

  • 应用衰减(ApplyFalloff):勾选此项将对采样的向量应用一个衰减函数,因此向量场的影响在其边界框的边缘时将接近于零。

  • 使用指数衰减(UseExponentialFalloff):勾选此项后,衰减函数将为指数性,而非线性型。

  • 衰减距离(FalloffDistance):应用一个衰减函数时,此参数将决定从边界框边缘应用衰减的范围。

  • 场坐标(FieldCoordinates):可以通过它来覆盖发射器的本地空间参数。其拥有3个选项:

    • 模拟(Simulation):使用Emitter.Localspace参数。

    • 世界(World):此项将覆盖向量场的位置和变换,使其无视Emitter.Localspace参数,固定相对于世界原点。

    • 本地(Local):此项将覆盖向量场的位置和变换,使其无视Emitter.Localspace参数,固定相对于系统自身。

  • 场平移(FieldTranslate):此项将相对于原点偏移向量场,由 FieldCoordinates 所定义。

  • 场旋转(FieldRotate):此项将相对于原点调整向量场朝向,由 FieldCoordinates 所定义。

  • FieldScale:此项将缩放向量场。

SampleVectorField 模块提供了大量效用功能,因此其可能含有一定开销。在脚本编辑器中包含向量场数据接口对象上的 SampleField 节点,便能使用特殊的向量场采样。

此处预计拥有的输出将相对于向量场自身的体积,因未应用转换。

轻松显示和使用向量场的范例已包含在内,其名为 VectorFieldVisualizationSystem

全新内容:Niagara Curl Noise数据接口

新版本中,Curl Noise数据接口将基于下方的单纯形噪点函数,CPU和GPU发射器的结果均相同。推荐使用 SampleCurlNoiseField 模块来生成粒子的Curl Noise。此模块公开了2个主要输入:

  • 强度(Strength):此项将缩放模块生成的输出向量。

  • 长度缩放(Length Scale):此项将描述Curl Noise生成的顶点的大概大小。

以及3个可选输入:

  • 偏移(Offset):此项用于平移噪点场。

  • 噪点场(Noise Field):这是数据接口对象自身,主要用于调整种子。

  • 采样点(Sample Point):此项将指定从何处进行采样。默认为 Particles.Position,但也可以使用其他值。

Curl Noise场并非固有平铺,不会因其过程化的特性而突然中止。要获取一个平铺的Curl Noise场,可考虑使用向量场数据接口,将周期性体积问题Curl Noise用作一个向量场。

全新内容:Niagara中确定性的随机数生成

我们在新版本中为CPU和GPU Niagara发射器添加了确定性的随机数生成。生成的随机数的行为可通过发射器属性模块进行整体控制,有以下选项:

  • 确定性(Determinism):用于在整个发射器确定随机数和非确定随机数之间进行切换的标签。

  • 随机种子(Random Seed):由确定性随机数生成器所使用的全局种子。

RandomRange Niagara函数是在脚本中生成随机数的推荐方法。其接受以下项:

  • 最小(Min):这将定义生成的随机数的下边界。其可为任意整数或浮点类型。

  • 最大(Max):这将定义生成的随机数的上边界。其可为任意整数或浮点类型。

  • 随机性模式(RandomnessMode):这是控制随机数生成器的确定性模式的列举,其可为:

    • 模拟默认项(Simulation Defaults):这是默认的行为,其继承 Emitter.Determinism 的值。

    • 确定性(Deterministic):使用确定性随机数生成器。

    • 非确定性(Non-deterministic):使用非确定性随机数生成器。

  • 覆盖种子(OverrideSeed):这将决定是否覆盖 Emitter.GlobalSeed 指定的种子。

  • 种子(Seed):如 OverrideSeed 已启用,此值将用于覆盖 Emitter.GlobalSeed

上述三项:随机性模式(RandomnessMode)覆盖种子(OverrideSeed)种子(Seed) 最初为隐藏,点击节点下方的箭头即可显示。

image alt text

生成确定性随机数的另一种方法是将种子显式传至 Seeded Random 节点。举例而言,随机范围功能的特殊化可能类似于下图:

image alt text

确定性随机数的开销略大于非确定随机数:前者约为后者的1.5到2倍之间,具体取决于生成的类型。总体而言,如果脚本中需要一个以上的随机数,建议您通过单次调用来生成,需要单独进行处理则划分结果。

image alt text

全新内容:Niagara数学运算的额外输入

诸多脚本数学运行现在均支持输入引脚的一个任意数,点击 添加+)按钮或连接到添加按钮旁的引脚便能进行添加。

image alt text

全新内容:支持废弃Niagara脚本

模块、动态输入和函数脚本现在能在脚本编辑器中被标记为已废弃。使用已废弃脚本的发射器和系统将在UI中显示错误,已废弃的脚本不会显示在菜单中以供添加。

image alt text

image alt text

全新内容:Niagara初始化模块

已添加全新模块,其将公开初始化粒子时使用的最常用属性。

image alt text

全新内容:Niagara中的Select by Simulation Target节点

使用者可利用全新的Select by Simulation Target节点来执行不同逻辑,具体取决于发射器是在CPU向量机上运行,还是在GPU计算脚本中运行。整体而言,多数脚本在在两个模拟目标上的运行应相同。然而,这并非固定可行,进行数据接口调用时尤为如此。准确奇偶性不可用时,这个新节点将为模块作者提供更多工具来搭建稳定的行为。如需了解其使用方法,请参见全新的碰撞响应模块。

全新内容:Niagara碰撞系统

Niagara碰撞已被完全重写,以支持基于射线追踪的CPU碰撞、CPU+GPU分析平面碰撞、GPU场景深度,以及距离场碰撞。

额外功能包括:

  • 较之于之前的Niagara和级联实现,稳定性已得到全方位的大幅提升。

  • CPU碰撞支持场景物理材质特性的合并(例如恢复力和摩擦力系数),并提供数个整合模式。

  • 系统已被重写为单一模式,以提升实用性。

  • 碰撞现可结合所有渲染器使用。

  • 加入一个可配置的“休眠”状态,使粒子在较为极端的环境下仍保持稳定。

  • 方程式基于物理/源于物理,兼容质量和其他系统属性。

  • 公开大量高级选项,包括静态、滑动和滚动摩擦力。

  • 为sprite和网格体自动计算碰撞半径。可选择直接指定此参数。

全新内容:平台 SDK 升级

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

image alt text

  • Build farm进行编译的IDE版本

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

      • 最低支持版本

        • Visual Studio 2017 v15.6

      • 需要NET 4.6.2 Targeting Pack

    • Xcode - Xcode 10.1

  • Android

    • Android NDK r14b(新的CodeWorks for Android 1r7u1安装程序将替换Windows和Mac上之前的CodeWorks;Linux将使用1r6u1及修改)

    • 注意: 现在将按功能请求许可(如:RECORD_AUDIO, CAMERA)。更多详情,请参见Android更新说明.

  • HTML5

    • Emscripten 1.37.19

  • Linux "SDK"(交叉工具链)

  • Lumin

    • 0.19.0

  • Steam

    • 1.39

  • SteamVR

    • 1.0.16

  • Oculus Runtime

    • 1.32

  • Switch

    • SDK 7.3.0 + 可选NEX 4.4.2(固件7.x.x-x.x)

    • SDK 6.4.0 + 可选NEX 4.6.2(固件6.x.x-x.x)

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

  • PS4

    • 6.008.061

    • 固件版本6.008.021

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

  • XboxOne

    • XDK:2018年7月 QFE-4

    • 固件版本:2018年12月(版本号 10.0.17763.3066)

    • 支持 IDE:Visual Studio 2017

  • macOS

    • SDK 10.14

  • iOS

    • SDK 12

  • tvOS

    • SDK 12

Release Notes

AI

  • Crash Fix: Fixed FEnvQueryInstance::FItemIterator::StoreTestResult crashes occurring when NumPassedForItem was 0

  • New: Added a concept of "AISubsystem" that acts as a tickable object but can be used to batch-tick all subsystems by another piece of code (for example the AISystem instance). AISubsystems live as part AISystem which controls their life cycle. EQS manager and AIPerceptionSystem are now AISubsystems.

Behavior Tree

  • Bug Fix: Fixed FEQSParametrizedQueryExecutionRequest::InitForOwnerAndBlackboard sometimes erroneously complaining about not being able to resolve a blackboard key when no BB key was being used.

  • Crash Fix: Switched nav octree element ID over from uint64 to uint32 and changed how we assign it - it's now set to Object.GetObjectID(). This is aimed at addressing occasional nav octree crashes when streaming out levels.

  • Bug Fix: UPathFollowingComponent::Cleanup now clears out the MovementComponent it points to, to ensure it is full hands-off when AIController::Unpossess is called.

  • Bug Fix: Changed the way we store UNavigationSystemV1.CrowdManagerClass so that it works with game-specific crowd manager class implementations.

  • Bug Fix: Changed how we initialize FNavigationSystem::CoordTypeTransformsTo. The old initialization order resulted in bad initialization on some platforms.

  • Bug Fix: Fixed the nav bounds calculation bug for InstancedStaticMeshComponents and HierarchicalInstancedStaticMeshComponents.

  • Bug Fix: Fixed RecastNavMesh not recreating default nav query when loaded instance has a different querying properties than the CDO.

  • Bug Fix: Made sure we clear out the EInternalObjectFlags::Async flag for UBodySetup instances that have been created off-game thread via UShapeComponent::CreateShapeBodySetupIfNeeded. This fixes a memory leak resulting from UShapeComponent::CreateShapeBodySetupIfNeeded sometimes being called as part of async navigation collision gathering.

  • Bug Fix: Fixed a bug forcing RecastNavMesh's default query recreation when query-related properties get changed in the editor.

  • Bug Fix: Fixed recast navigation queries' capabilities to limit the the available node pool size. The bug was noticeable when using shared queries.

  • Bug Fix: Fixed a navmesh generation bug that resulted in removing and not rebuilding parts of navmesh when a new navmesh bounds volume had been added.

  • Bug Fix: Fixed a bug in how/when FRecastNavMeshGenerator::RcNavMeshOrigin is being set. It sometimes ended up uninitialized.

  • Bug Fix: Fixed backtracking pathfinding issues resulting from reversing the path too late - it needed to be reversed before the string pulling to gather all the area information properly.

  • Bug Fix: Added special handling (including logging) when there are no walkable areas while generating recast navmesh tiles. We used to report those as errors while those are pretty normal circumstances.

  • New: Added a way to configure Recast pathfinding to restrict A from reopening nodes that have already been placed on closed list. Can be used to optimize A cost at the price of not-optimal paths.

  • New: Let NavigationSystem instances override "NavigationAutoUpdateEnabled" behavior.

  • New: Added an 'invert' function to FNavMeshPath

  • Improvement: Made it easier to extend navmesh generators (override ARecastNavMesh::CreateGeneratorInstance).

  • Improvement: Extended NavigationTestingActor with a way to do 'backtracking' pathfinding.

  • Deprecated: WorldSettings.bEnableNavigationSystem has been deprecated. Use WorldSettings.NavigationSystemConfig instead.

Animation

  • Bug Fix: Fixed physical animation automation test.

  • Bug Fix: Fixed UAnimSequence::CopyNotifies & exposed it to Animation Blueprint Library.

  • Bug Fix: Fixed custom Stencil/Depth not working on GeometryCache actors.

  • Bug Fix: Updated Header's signature to match body for AnimationEditorUtils::CreateNewAnimBlueprint

  • New: Added ability for Skeletal Mesh Component to propagate morph and or curve values to its slave components.

  • New: Added Per Subject delays to Live Link with Time Synchronization (Timecode Synchronizer).

  • New: Exposed FAnimMontageInstance to ENGINE_API.

  • New: Added Animation Budget library to allow for testing.

  • New: ControlRig: Added more options for GetJointTransform, Distance, and Clamp

  • Improvement: Optimized deferred kinematic updates

Animation Assets

  • Crash Fix: Fixed crash in BlendSpace editor when sample data being used is deleted

  • Bug Fix: Changing types of an Anim Notify will now try to copy over as many properties as possible from the old type to the new one.

Animation Blueprints

  • Crash Fix: Fixed crash on blend multi node due to invalid link node id.

  • Crash Fix: Fixed issue with crashing when switching to different a mesh while using copy pose node.

  • Crash Fix: Fixed crash when a curve hasn't been updated before updating the animation. Ensures to update curves prior to update animation, not just before evaluate.

  • Crash Fix: Fixed a crash with curves of the skeleton when joint has been removed.

  • Crash Fix: Fixed a crash with LiveLink nodes

  • Bug Fix: Fixed properties copied into sub anim instances being one frame out of date.

  • Bug Fix: Fixed setting name by pin in PoseByName node not being correctly updated.

  • Bug Fix: Improved anim node data packing and audited properties.

  • Bug Fix: Fixed incorrect spawn location for dragged assets in Anim Blueprints.

  • Bug Fix: Fixed assets being dragged over animation node pins displaying an incorrect error message.

  • Bug Fix: CopyPoseFromMesh node is now thread-safe

  • Bug Fix: Fixed to support correct Source for CurveSource node

  • New: Added an Experimental hook to UAnimInstance called ApplyAnimOverridesToCDO, which allows subclasses to do their own animation modifications as part of the Anim BP compilation process.

  • New: Added stricter range checks to AnimNode_CopyPoseFromMesh::Evaluate_AnyThread

  • New: RigidBody.ClampLinearTranslationLimitToRefPose - If rigid body node is set to lock a linear limit, this option clamps to the default translation. Only works if you set all axes to lock.

  • New: Support clamping input DeltaTime in AnimNode Trail

Animation Tools

  • Crash Fix: Fixed a crash converting a sequencer possessed actor to spawnable when it uses the rigid body anim node

  • Crash Fix: Fixed crash undoing the renaming of a deleted animation curve

  • Crash Fix: Fixed a crash reordering a preview mesh collection from inside an animation editor

  • Crash Fix: Fixed crash when editing notifies in a montage when one of its child montages is also open for editing

  • Bug Fix: Implemented a fix for Live Link disconnecting when the Editor is busy. The root cause was that FHeartbeatManager would send the heartbeat on a separate thread however we were only receiving the response on the Game Thread causing replies to be dropped during a slow task. This was resolved by calling the ReceivingOnAnyThread function in the Builder function in FMessageEndpoint and updating the relevant handlers to be Threadsafe.

  • Bug Fix: Fixed anim timeline scrub ticks extending outside of their track when zoomed.

  • Bug Fix: Animation Recorder now checks for curve validity before blending. Checking the element count wasn't enough, since the UIDToArrayIndexLUT could be null.

  • Bug Fix: Fixed anim viewport pinned command widgets being added incorrectly (when not holding shift).

  • Bug Fix: LiveLink: Modified FHeartbeatManager so that its thread is correctly killed during the manager's destructor.

  • Bug Fix: Bone selection is now cleared when entering section selection mode in skeletal mesh editor.

  • Bug Fix: Fixed pinned viewport commands being searchable in animation editors.

  • Bug Fix: Fixed incorrect displayed LOD level when editing skeletal mesh LOD counts in external sub-editors

  • Bug Fix: Animation Editor: Fixed when Reset to Default doesn't clear additional meshes

  • Bug Fix: Animation Editor: The mesh editor doesn't show any additional meshes

  • Bug Fix: Animation Editor: Fixed a bug with Apply to Asset where it doesn't show sometimes

  • New: Added Asset details panel to Skeleton Editor.

  • New: Added restriction to the value of Base LOD (to always be lower than the current LOD index) when generating a Skeletal Mesh LOD.

  • New: Animations and Pose Assets can now be created from Skeletal Mesh, Skeleton and Animation Blueprint Editors.

  • New: Bone drawing code now uses mesh bound to scale the thickness of the line.

  • New: Experimental: Live Link Curve Debug plugin

    • This provides a tool to quickly see what the output is of various LiveLink curves in an easy to debug manner.

    • Editor : Go to Window > Developer Tools > Live Link Curve Debugger once you enable the plugin

    • Type LiveLinkDebugger Show in the command-line

    • This may only work in editor or PIE.

  • Improvement: Displaying Vertex Colors in the Skeletal Mesh Editor has moved from 'Character / Mesh' to 'Show/Advanced' in line with other viewports.

Import/Export

  • Bug Fix: Fixed a potential crash when opening the master sequence due to UMovieSceneGeometryCacheSection::PostLoad() not properly calling the base function Super::PostLoad().

  • New: Added top-level checkbox to include/exclude all tracks when importing an Alembic File.

Skeletal Mesh

  • Crash Fix: Fixed a crash when setting skeletal meshes while tasks are in flight

  • Bug Fix: Fixed an issue when render bound doesn't get an update on Slave Component while Master Component is moving.

  • Bug Fix: Fixed motion vector issue (for motion blur/temporal AA) on PoseableMeshComponent

  • Bug Fix: Fixed one-off bone visibility changes causing flicker

  • Bug Fix: Moved ClearMorphTarget to SetSkeletalMesh from Initialize Animation, which gets called unnecessarily often.

  • New: Added OnBoneTransformsFinalized delegate to USkeletalMeshComponent.

  • New: You can modify Skeletal Mesh reference pose in the Editor with this change. Use normal bone manipulators to modify and call Update Reference Pose option in the Edit menu in Mesh Editor.

  • New: Support BakePose on LODSetting asset

    • This only works if the bakepose shares the same skeleton with the applied mesh

    • You can override per mesh using BakePoseOverride

Audio

  • Crash Fix: Fixed crashes with Flexiverb DSP initialization.

  • Crash Fix: Fixed a crash in FVorbisAudioInfo when attempting to get compressed info if the library was not loaded/found.

  • Crash Fix: A rare crash on cook was fixed for streaming USoundWaves.

  • Crash Fix: Fixed a crash when releasing reverb.

  • Crash Fix: Fixed a crash when playing TimeSynth that hasn't been activated.

  • Bug Fix: Releasing reverb no longer causes an indefinite hang when baking.

  • Bug Fix: Fixed an issue where Media Sound Component would play at level origin instead of the actor's location.

  • Bug Fix: Fixed the delay ratio for stereo delays source effects.

  • Bug Fix: Fixed the clamp min and ui min values on the DelayRatio property.

  • Bug Fix: Some minor issues were fixed with panning logic for the Granulator Synth Component.

  • Bug Fix: Fixed AttachTo and SnapTo enums for SpawnSoundAttached.

  • Bug Fix: Fixed a bug with duplicate speaker entries in SoundFactory for the left surround speaker.

  • Bug Fix: Several issues with the modular synth were fixed.

  • Bug Fix: Removed an invalid assert on the submix weak reference pointer.

  • Bug Fix: Fixed the optimization flag on synthesis plugin.

  • Bug Fix: Reverb dry-level channel pan was fixed.

  • Bug Fix: Fixed an issue with re-importing over an existing audio file.

  • Bug Fix: An issue was fixed where streaming USoundWave would not play if play was called right after it was loaded.

  • Bug Fix: Fixed log output for duration with Audio Recording.

  • Bug Fix: SpawnSoundAttached now treats location input as relative when EAttachLocation is KeepRelativeOffset.

  • Bug Fix: Hash collisions no longer causing unintended audio playback behavior.

  • Bug Fix: Fixed an issue in Pitch Bend MIDI-parsing where MSB/LSB was flipped.

  • New: Spectrum analysis for submixes is now available using the following Blueprint functions:

    • Start Analyzing Output

    • Get Magnitude For Frequencies

    • Get Phase For Frequencies

    • Stop Analyzing Output

  • New: An easy to use, cross-platform FFT implementation has been added to the AudioMixer module. DSP/PassiveFilter.h has been added as a simple example of using it for spectral signal processing.

  • New: An ITD Spatialization plugin has been added to the engine.

  • New: Support for reading/decoding of audio files to arbitrary paths has been added to the AudioMixer module as FAudioFileReader.

  • New: Generic encoding of audio signals to Ogg Vorbis, Opus, and WAV has been added to the Audio Mixer module for all platforms (except HTML5) using the DSP/Encoders folder.

  • New: Audio Importer now uses LibSoundFile to support importing AIF, FLAC, and Ogg Vorbis file formats. Re-import now supports multiple source file format extensions, and warns if source files of different formats (ex. Folder/Sound.wav & Folder/Sound.aif) are attempting to overwrite one another.

  • New: Add an opt-in smooth interpolation feature to the Doppler SoundCue node.

  • Improvement: Moved priority settings on USoundBase (and inheriting children) to its own category outside of concurrency.

  • Improvement: Added the option to automatically stream all USoundWaves above a set duration on mobile platforms. This option can be found in Project Settings, in the Audio category for each platform.

  • Improvement: Added the ability to adjust sound cue/wave trim volume by command line/ini file. This allows hotfixing volumes without cooked content or code changes.

  • Improvement: Added edit conditions for bDelayBasedOnDistance and SpeedOfSound.

  • Improvement: Added the ability for AudioMixer to render out audio when no audio output device exists on Windows.

  • Improvement: Added comments on stereo delay source effect.

  • Improvement: Renamed the synthesis plugin for clarity.

  • Removed: Removed unneeded whitelisting from the AudioCapture plugin.

Automation

  • Bug Fix: Addressed image comparison using the wrong image with EStructuralSimilarity::Color. #4806

  • New: PS4 now defaults to running from host. Previous deploy behavior is still available through "-deploy".

    • Cleaned up TargetDevicePS4, commented a number of things, and moved some code to a PS4Utils module.

    • Added utilities for marking/cleaning up old directories.

  • Improvement: Increased the speed and removed code bloat from automation tests.

    • Smoke tests now run about eight times faster in an internal project.

Blueprints

  • Crash Fix: Fixed a crash when dragging from the Blueprint Editor components list if there is no corresponding property.

  • Crash Fix: Fixed a crash in UpdateAnimation after compiling a Blueprint.

  • Crash Fix: Fixed crashes happening after reloading a Blueprint asset that had native default sub-objects.

  • Crash Fix: Nativized UMG widgets that include a custom button no longer crash.

  • Crash Fix: Fixed a crash when reparenting a Blueprint.

  • Crash Fix: DataAssets made out of Blueprint classes now properly reference their source.

  • Crash Fix: Fixed a crash when a Blueprint graph is in the process of being closed due to deletion.

  • Crash Fix: No longer crashing when diffing Blueprints with missing properties.

  • Crash Fix: Fixed a crash when compiling Blueprints with sub-objects created in C++.

  • Crash Fix: Fixed crashes when reloading a Blueprint that has children types also loaded.

  • Crash Fix: Fixed a crash in SGraphNode related to tooltips.

  • Crash Fix: Fixed a crash when loading a child Blueprint class after previously swapping component names in the parent Blueprint class.

  • Crash Fix: Fixed an editor crash on load of a Blueprint asset after switching a child component node's type to be a non-scene component type in C++ code.

  • Crash Fix: Fixed a crash when promoting an output pin on a "Get Class Defaults" node.

  • Crash Fix: Fixed a crash after force deleting a User Defined Struct that was being used in a Blueprint.

  • Crash Fix: Fixed a crash after loading a user defined structure with circular references to Blueprint classes.

  • Crash Fix: Fixed a crash when the Blueprint Editor Utilities (blutilties) window is open and a blueprint is compiled.

  • Bug Fix: GetQueryResultsAsActors and GetQueryResultsAsLocations now clear their output arrays. This means these functions will no longer append data to a non-empty array, which would likely be undesired behavior.

  • Bug Fix: Because literal Soft Object/Class Reference pins are now properly tracked, some packages may be getting pulled into a cooked build that were not before.

  • Bug Fix: Improved all tooltips for blueprint callable functions with single line documentation strings

  • Bug Fix: Fixed potential data loss in components when only part of a blueprint class hierarchy is nativized.

  • Bug Fix: Fixed UnrealBuildTool warnings about the PCH when building or packaging with Blueprint Nativization enabled.

  • Bug Fix: We now properly construct any native 'noexport' struct-typed literal term in a nativized Blueprint class.

  • Bug Fix: Compilation manager now correctly remaps old DefaultSubobjects to new instances of those DefaultSubobjects.

  • Bug Fix: An empty UFunction is no longer generated for empty User Construction Scripts.

  • Bug Fix: Adding an output to a collapsed node graph by dragging a pin to it now updates properly.

  • Bug Fix: Graph Editor alignment shortcuts now conform to the de-facto standard by default.

  • Bug Fix: Fixed UInheritableComponentHandler::PostLoad() to avoid some unnecessary loop iterations on load in a cooked build.

  • Bug Fix: A typo was fixed in the tooltip of "Pass-by-Reference."

  • Bug Fix: Fixed a Blueprint Nativization compile failure due to one or more unconnected "soft" class reference input pins on an event or function call node.

  • Bug Fix: Fixed uninitialized user defined struct fields in nativized, cooked builds.

  • Bug Fix: Warning spam fixed from an abstract or deprecated Blueprint trying to render a thumbnail.

  • Bug Fix: Fixed a circular dependency issue between converted Blueprint class/struct types and non-nativized Blueprint class assets.

  • Bug Fix: Only Blueprint-generated classes are allowed to be excluded from nativization by folder path.

  • Bug Fix: The display name of variable accesses now update correctly when changing the type of the variable to or from boolean.

  • Bug Fix: Categories no longer appear if they don’t contain any visible properties.

  • Bug Fix: Fixed compilation error when delegate properties reference function signatures on out of date classes.

  • Bug Fix: Fixed loss of references to instances of Blueprints that are simultaneously compiled.

  • Bug Fix: Fixed an issue where dragging assets to Blueprint nodes incorrectly displayed - as if it was not the correct type.

  • Bug Fix: Break Link, Jump, and Straighten Connection menu options are now consistent in their display. Also, no longer shows empty parentheses if connected to a pin with no name.

  • Bug Fix: Opening GameplayAbilityBlueprints that have no GeneratedClass is allowed but warns if it’s missing ParentClass.

  • Bug Fix: References to the old CDO referenced in other Blueprints now get updated by the Blueprint Compilation Manager.

  • Bug Fix: GameplayTags are now properly filtered in Blueprint SET nodes.

  • Bug Fix: Added code to keep orphan pins around for any links lost during backwards compatible node conversion.

  • Bug Fix: ActorComponent-derived visualisers now receive a HandleInputDelta() call in the Blueprint Editor's viewport.

  • Bug Fix: Multiple undo transactions for renaming no longer generated when setting the comment text on a comment box.

  • Bug Fix: Adding output pins to a Sequence node no longer removes the Then 0 pin.

  • Bug Fix: Fixed an invalid cast of a nativized enum term to its underlying pointer type in generated Blueprint C++ code.

  • Bug Fix: Levels that are unloaded (or if they failed to load) can now be removed from the Levels tab.

  • Bug Fix: Fixed Keys variables getting into an inconsistent state when set using a variable Set node in Blueprints.

  • Bug Fix: Fixed the graph displaying incorrectly after shift-dragging to select nodes and releasing the mouse button over a connection spline.

  • Bug Fix: Copy and Paste of components in MyBlueprints now correctly maintain relative hierarchy, duplicate of components, and per instance component window.

    • The per instance component window now maintains the name of the source component where possible and a modified version of the name when already taken instead of using the component class as name.

  • Bug Fix: EDL at cook time is now required when Blueprint component data for runtime spawning is enabled in the project settings.

  • Bug Fix: Fixed an ensure when compiling a Blueprint interface after changing a function signature.

  • Bug Fix: Fixed Alt+RMB zooming in UMG Designer and Blueprint Graph.

  • Bug Fix: Arrays of text properties no longer fail to propagate new default values to component instances

  • Bug Fix: Fixed UKismetMathLibrary::Hypotenuse returning NaN for a 0x0 triangle.

  • Bug Fix: Closing the "Blutility Details" panel is no longer possible as it cannot be re-summoned if lost.

  • Bug Fix: Fixed invalid pins not being removed when refreshing a 'select' node after an Enum option is removed.

  • Bug Fix: Fixed a compilation error describing undetermined type when calling an interface function with Set or Map properties.

  • Bug Fix: Conversion of a TWeakObjectPtr property value when referencing an instanced subobject in a nativized Blueprint class now works properly.

  • Bug Fix: Blueprint functions with a single output parameter now use full function descriptions for their tooltip if there is no explicit return value documentation.

  • Bug Fix: Changing a User Struct's defaults correctly propagates those changes to open Blueprints using that struct.

  • New: Added an equality operator for arrays in Blueprints.

  • New: Now enforcing rules about editor-only functions being called in runtime Blueprints.

  • New: Included Blueprint int64 support.

  • New: Can now call GetOuterObject from Blueprints to query the outer of a given object.

  • New: Created an asset picker for selecting external timeline curves.

  • New: Can now use home, end, page up, and page down in a filtered Blueprint action menu.

  • New: Get Console Variable Bool Value can be used to query the boolean state of a console variable from Blueprints.

  • New: Editor only functions can't be added to runtime Blueprints, only Blutilities and Editor Widgets.

  • New: Dragging from a class pin to a string will now automatically create a GetClassDisplayName node.

  • New: "Create" and “New” added as keywords to Construct Object node.

  • New: Added Hide Unconnected Pins button to Class Defaults.

  • New: Nativized Blueprint types can now instance other nativized Blueprint types as subobjects when there are one or more non-Blueprint asset preload dependencies.

  • New: Added scrolling to CreateEvent node method list.

  • New: Added Blueprint graph action name to the error message for "by ref" pin.

  • Improvement: Improved editor startup/load times by deferring Blueprint search data re-indexing work until a global Find-in-Blueprint tab is opened.

  • Improvement: ExpandEnumsAsExecs metadata for Blueprint exposed UFUNCTION can now be used for multiple pins. Limited to a single input pin, but can handle multiple output pins.

  • Improvement: Improved backward compatibility Blueprint node fix-up logic when using reroute nodes.

  • Improvement: Reduced overhead of calling blueprint functions with return values.

  • Removed: Removed overzealous ensure from UBlueprintGeneratedClass::FindArchetype

  • Improvement: Reduced overhead related to function 'callspaces' when calling script functions.

  • Removed: Removed legacy Blueprint code that triggered a copy of the skeleton CDO to the generated CDO based on a serialized flag.

  • Improvement: Game projects that rely on legacy include paths are now compatible with Blueprint Nativization.

  • Improvement: Added code to ensure that sequence assets are fully loaded before they are compiled.

  • Improvement: Now ensuring UserWidget bindings are created in packaged builds for child Blueprints.

  • Deprecated: GetCategoriesMetaFromStruct has been deprecated in favor of GetCategoriesMetaFromField.

  • Improvement: Call macro node titles now display with the same format that call function nodes, variable accesses, and others use.

  • Improvement: Renamed bSpawnPawn to bSpawnPlayerController for UGameplayStatics::CreatePlayer.

    • Also clarified the parameter name for UGameInstance::CreateLocalPlayer.

  • Improvement: Nativized replication of a child actor component’s internal actor template in a cooked client/server build.

  • Deprecated: To avoid build/cook warnings, deprecated UEnvQueryInstanceBlueprintWrapper::GetResultsAsActors and replaced it with GetQueryResultsAsActors.

  • Deprecated: To avoid build/cook warnings, deprecated UEnvQueryInstanceBlueprintWrapper::GetResultsAsLocations and replaced it with GetQueryResultsAsLocations.

  • Deprecated:Deprecated pure blueprint functions on UEnvQueryInstanceBlueprintWrapper: GetResultsAsActors(), GetResultsAsLocations() and replaced them with new impure functions GetQueryResultsAsActors(), GetQueryResultsAsLocations(). Deprecated pure blueprint functions on UEnvQueryInstanceBlueprintWrapper: GetResultsAsActors(), GetResultsAsLocations() and replaced them with new impure functions GetQueryResultsAsActors(), GetQueryResultsAsLocations().

  • The new functions will prevent accidentally doing the work of building the array more than once since they aren't pure. Also, they return false if the Query status was not a success to prevent possible bugs caused by trying to return results from unsuccessful queries. Returning the success state (having found at least one result) as well as outputting the array will also improve UX.

Core

  • Crash Fix: Fixed a crashing issue due to the invocation list getting cleared while delegates were being invoked.

  • Crash Fix: Fixed a crash that occurs when loading a UObject that has a missing outer.

  • Crash Fix: Fixed a crash when GFastPathUniqueNameGeneration was true (when enabled, saves ~50 MB on Win64 and faster execution time for MakeUniqueObjectName). It can be enabled in non-editor build by setting FAST_PATH_UNIQUE_NAME_GENERATION define to 1.

  • Crash Fix: Allowed MallocBinned2 to allocate up to 2^36-1 bytes without crashing.

  • Crash Fix: Fixed an underrun mode in mallocstomp not properly aligning FAllocationData for use by the Free function, causing a crash.

  • Crash Fix: Disabled GC clustering support for SoundCues, SoundNodes, and SoundWaves. This resolves a crash that was being experienced.

  • Crash Fix: Fixed EDL crash when terminating the Engine while initializing.

  • Crash Fix: Stopped a crash when saving a package with duplicate asset registry tag names.

  • Crash Fix: Fixed cooked skeletal meshes crashing when opened in the editor.

  • Crash Fix: Fixed a crash when loading cooked asset in the Editor that was caused by seeking past the header before uexp file was loaded.

  • Crash Fix: Fixed a potential crash when saving packages and fixing up Soft Object Paths.

  • Crash Fix: We now Create/Destroy pak platform file on startup and shutdown of pak module, rather than on first access and at some random time during global destruction. This fixes a shutdown crash on linux where threads were being destroyed during global destruction which is too late.

  • Crash Fix: Fixed a potential crash in FStructuredArchive when loading thumbnail data.

  • Crash Fix: Addressed a potential crash when verifying imports while async loading and resolving deferred exports.

  • Crash Fix: Fixed a crash in structured archive when using enum resolver archives.

  • Crash Fix: Fixed a potential crash when flushing linker cache when async loading.

  • Crash Fix: Resolved a crash when data encryption options are enabled but no key is set.

  • Crash Fix: IsValidLowLevelFast can fail during initial load so skip it when getting an archetype of an object early in Engine init. This fixes a crash when enabling default subobject checks in cooked builds.

  • Crash Fix: Stopped UBT and UAT from crashing when DefaultCrypto.ini was missing.

  • Crash Fix: Fixed TNonRelocatableInlineAllocator not switching to heap allocator correctly, due to the CalculateSlackGrow function not increasing to contain the requested number of elements. This was causing crashes in FStructuredArchive serializers with deeply nested objects.

  • Bug Fix: Corrected misleading or incorrect header comments in CoreUObject classes.

  • Bug Fix: Fixed Ctrl-C handling on Windows so that it always ends execution when there is a valid terminal.

  • Bug Fix: Corrected a typo in TaggedBinaryArchiveOutputFormatter: uint16->uint32

  • Bug Fix: Fixed a type mismatch issue in StringToArray function.

  • Bug Fix: The actual TargetPlatform name will now be printed instead of the module.

  • Bug Fix: Fixed some instances of string literals being passed as bool instead of FString as expected.

  • Bug Fix: Fixed Config file parsing to properly handle things like \' in quoted strings.

  • Bug Fix: Corrected a TAtomic compiler error caused by changes to VS2017's template parsing.

  • Bug Fix: Fixed a bug with alignment padding in compressed and encrypted pak files.

  • Bug Fix: CrashReportClient will no longer be started to report an ensure() in a non-Editor build.

  • Bug Fix: Fixed LITERAL macro so that it works with 16-bit TCHARs.

  • Bug Fix: Corrected race condition in Async testcase (FAsyncCompletionCallbackTest).

  • Bug Fix: Fixed a bug with spaces in filenames for stable shader cache generation during cook.

  • Bug Fix: It is now possible to load dependent modules located in platform subdirectories.

  • Bug Fix: MallocProfiler now uses a less complicated TArray instead of FCompressedBuffer to prevent deadlocks in stats.

  • Bug Fix: Fixed gc.LowMemory.TimeBetweenPurgingPendingKillObjects. This was pointing to the wrong global, causing us to always GC at this rate if the cvar was specified.

  • Bug Fix: Fixed a bug in Low Level Memory tracker (LLM) when using asset tags, which caused incorrect results.

  • Bug Fix: Changed it so a missing import class package does not crash the Engine. It will now report an error instead.

  • Bug Fix: Changed the CancelHandle function in FStreamableHandle to correctly stop the callback from happening if the handle has already completed loading but is in the delayed callback queue.

  • Bug Fix: Fixed an assert which fired for classes with no properties but was larger than its superclass.

  • Bug Fix: Disabled inter-property delta serialization in TSet and TMap when duplicating UObjects to force all elements through the object redirection process.

  • Bug Fix: Fixed the FindAndSetLastZeroBit and FindLast functions in TBitArray for containers of a multiple of 64 elements.

  • Bug Fix: Corrected a signed/unsigned mismatch in the GetVarArgs function.

  • Bug Fix: Fixed Visual Studio debugger visualization of FWeakObjectPtr and TWeakObjectPtr.

  • Bug Fix: Corrected TMap element replication in PIE which was caused by bad property comparisons.

  • Bug Fix: Fixed inconsistent behavior in the GetVarArgs functions in FGenericWidePlatformString and FStandardWidePlatformString where they don't completely fill the buffer before returning -1 when the buffer is too short.

  • Bug Fix: Fixed the GetVarArgs function in FPlatformString to make it return -1 correctly in ANSI mode.

  • Bug Fix: The CLion source code accessor will now wrap the path in quotes when opening a solution, and made it open the CMakeLists.txt file instead of the project file.

  • Bug Fix: Fixed a buffer overrun in the operator< overload in TBitArray.

  • Bug Fix: Added a potential thread-safety fix in the ClearFunctionMapsCaches function in UClass.

  • Bug Fix: Fixed Unreal Header Tool's code generation of const return types of interface functions.

  • Bug Fix: BulkData now supports data larger than 2GB - this allows very large meshes to be imported without problems.

  • Bug Fix: Const-corrected the TArrayView constructor from a std::initializer_list.

  • Bug Fix: Fixed TEnumAsByte to generate an error when a const instance is left uninitialized.

  • Bug Fix: Corrected a race condition in an Async testcase (FAsyncCompletionCallbackTest).

  • Bug Fix: Fixed an obscure bug in map list parsing in DDC commandlet.

  • Bug Fix: Addressed some timers being removed too early when removing all timers associated with a given object.

  • Bug Fix: Fixed aligned load of unaligned memory.

  • Bug Fix: Fixed C vararg usage which didn't call the va_end function to close the va_list.

  • Bug Fix: Corrected the ReallocExternal function in FMallocBinned2 that was storing the unaligned size of an OS allocation.

  • Bug Fix: Cleaned up some memory leaks in the stats system.

  • Bug Fix: Fixed some skipped security checks in FString caused by negated integer overflow.

  • Bug Fix: Fixed the wrong delegate being used to broadcast an OOM condition.

  • Bug Fix: Corrected the propagation of instanced property flags from TMap keys to the outer.

  • Bug Fix: Added missing support for the TimerManager and compactability in the weak lambda delegates.

  • Bug Fix: Fixed LoadPackageInternal returning the wrong package in the EDL case if an Outer package was supplied.

  • Bug Fix: Corrected an issue where new line character wasn't being inserted after PCH when generating new C++ classes.

  • Bug Fix: Cleaned up a stats memory leak.

  • Bug Fix: Made GetCleanFilename return an empty string if a directory is passed in.

  • Bug Fix: Fixed an issue where failure to load a plugin was a silent failure with unattended. It now results in a fatal error.

  • Bug Fix: Fixed incorrect path to Engine DDC when running an executable built with a unique build environment that's more than one path deep.

  • Bug Fix: We now only force all pending unreachable objects to have ConditionalBeginDestroy called on them when async loading when we're actually loading something.

  • Bug Fix: Enforced 2 worker threads as the minimum spawn count on Windows which resolves a potential initialization deadlock on low-end CPUs.

  • Bug Fix: Made sure the Editor custom version is serialized with package file summary in cases where the package doesn't have UMetaData object. Otherwise the package may get corrupted because the localization gather code already forces the Editor custom version on the linker after the file summary has been serialized. This fixes package redirects not being able to save.

  • Bug Fix: Avoided calling the strlen function when appending a single char in the ToString and AppendString functions in FName.

  • Bug Fix: Fixed bad string formatting when detecting issues with package dependencies.

  • Bug Fix: MaterialInstanceDynamic created by WidgetComponent will now be properly added to the component's GC cluster.

  • Bug Fix: Made sure that GC's incremental ConditionBeginDestroy is not running when async loading in editor builds as this may result in the async loading code getting unreachable imports from linkers that haven't been detached yet.

  • Bug Fix: Fixed Garbage Collector potentially destroying objects that were added to the "disregard for GC" pool after the Engine has been initialized.

  • Bug Fix: Fixed a hang when entering PIE when Background Streaming is disabled.

  • Bug Fix: Added a missing mutex lock to RemoveLoaderFromObjectLoadersAndLoadersWithNewImports.

  • Bug Fix: Fixed the HasProperty function in UClass returning false positives for properties that belong to a child class of the one being tested.

  • Bug Fix: Made sure that cooked materials work in the Editor.

  • Bug Fix: Fixed 'Missing DDC Key' log spam when interacting with a cooked texture in the Editor.

  • Bug Fix: When attempting to load an animation to make sure it doesn't exist on disk, the Engine will no longer log warnings as it's expected the animation may not exist.

  • Bug Fix: Fixed some cases of Garbage Collector hitches on some platforms.

  • Bug Fix: The archive created by FOutputDeviceFile will no longer try to log errors as in case of an error it would redirect logging back to itself or, in some cases, cause threading deadlocks.

  • Bug Fix: Target platforms now report secure package formats for windows/linux/mac dedicated servers, and for all other consoles. This works around the fact that some platforms don't return correct data for the IsClientOnly and IsServerOnly functions.

  • Bug Fix: Fixed unexpected custom version errors when re-saving Niagara particles.

  • Bug Fix: Changed the UObjectArray chunk size to 64K (down from 65K which was a mistake).

  • Bug Fix: Made sure MediaPlayer and MediaPlaylist don't get added to GC clusters as they violate GC assumptions.

  • Bug Fix: Fixed soft object paths not resolving the package name properly in some cases when loading.

  • Bug Fix: Made sure any files that are assigned to an encrypted pak file are duplicated into all other encrypted paks that reference them.

  • New: Added GetParentNativeClass util function to UObjectBaseUtility.

  • New: Added support for generating mapping file with UnrealPak by using GeneratePixMappingFile, which can be imported into PIX IO Trace capture to view loose file name directly in PIX.

  • New: Made TWeakObjectPtr's assignment operators return a reference to themselves.

  • New: Modernized unaligned reads so that sanitizers work and any potential optimization hazards are avoided.

  • New: Added support for JSON serialization of maps of FString keys with int64 values.

  • New: Added Reserve function to FLargeMemoryData.

  • New: Implemented USE_BOOT_PROFILING, which is used to profile the very early boot process.

  • New: Added a new define (AGGRESSIVE_MEMORY_SAVING) for some aggressive memory savings techniques. This is not enabled by default since there is some performance cost.

  • New: Added the ability to have "DisallowedClasses" metadata to prevent certain assets from being assigned to references. A current use case of this is that SlateBrush no longer allows UMediaTextures.

  • New: Added SQLiteCore:

    • SQLiteCore provides a UE4 friendly C++ wrapper around an embedded version of SQLite (currently 3.26.0) that is compiled using a custom "OS" that uses the UE4 HAL to provide consistent support on all of our platforms.

    • The UE4 HAL has some limitations (see below) compared to the native OS implementations of SQLite, however the native OS implementations don't compile on every platform supported by UE4. If SQLite compiles natively on every platform you want to target, then you can set bCompileCustomSQLitePlatform to false in your .Target.cs file. Note that this requires a source build of UE4 as the SQLiteCore plug-in must be recompiled.

    • The primary limitation of using the UE4 HAL with SQLite is concurrent database access, as the UE4 HAL doesn't provide an implementation of shared memory (as not all platforms implement it), nor does it provide an implementation of granular file locks. These two things mean that only one FSQLiteDatabase can have the same database file open at the same time.

    • The embedded version of SQLite is compiled with FTS4 and FTS5 enabled, and with extension loading support disabled. It is also compiled with ICU support enabled when bCompileICU is set to true for your target.

    • SQLiteCore provides lower-level access to the SQLite API than SQLiteSupport does, which allows you to take full advantage of things like prepared statements and data binding. SQLiteSupport is now internally implemented using SQLiteCore.

  • New: Added IsStale function to TWeakInterfacePtr in order to match IsValid.

  • New: Added support for garbage collection at a higher frequency if we're low on physical memory using the cvars gc.LowMemory.TimeBetweenPurgingPendingKillObjects and gc.LowMemory.MemoryThresholdMB.

    • gc.LowMemory.TimeBetweenPurgingPendingKillObjects is time in seconds we should wait between purging object references to objects that are pending kill when we're low on memory.

    • gc.LowMemory.MemoryThresholdMB is the threshold in MB for low memory mode GCs to kick in (this defaults to 0, which is disabled).

  • New: Enabled string pooling in optimized builds.

  • New: Exposed working directory in FMonitoredProcess.

  • New: Alignas() parsing in UnrealHeaderTool is now supported.

  • New: Added new experimental MallocBinned3 for 64bit platforms.

  • New: Added RemoveIf and StableRemoveIf algorithm functions to the Algo class.

  • New: Changed compile time PLATFORM_CACHE_LINE_SIZE to 64 on all platforms.

  • New: Added move support for the Add function in the TSparseArray class.

  • New: Added support for Default/BasePakFileRules.ini.

    • Allows specifying rules for overriding pak/chunk behavior.

    • Moved mobile bloom content stripping to BasePakFileRules.ini so it can be overridden by games.

  • New: Changed pak code to allow placing the same file into multiple paks if requested by the cooker. This can be disabled with bForceOneChunkPerFile.

  • New: Added StaticClass() and StaticStruct() non-member functions as an alternative to T::StaticClass() and T::StaticStruct(). Also added StaticEnum() for enumerated types.

  • New: Added CountBytes method to FString to match other Core and Container types.

  • New: Made ensure()s fire with a configurable chance.

  • New: Added an experimental option to use a compact version of the runtime asset registry. This saves about 3-13MB depending on the config.

  • New: Added CONDITIONAL_SCOPE_LOG_TIME*() macros, which only log when the condition is true.

  • New: Exposed LTCG and PGO settings to Core module (for logs and analytics).

  • New: Added support for priority for UObject loading to help tune streaming performance in scenarios where texture and audio requests are starving level streaming. This is controlled with s.AsyncLoadingPrecachePriority. Note: AIOP_MIN is still the default, but this can be adjusted per platform or project as required.

  • New: Added a conversion path for deserializing interface properties as object properties.

  • New: Added a simple TBasicArray RAII dynamic array type for low level code that can't use TArray because of its dependencies.

  • New: Updated Linux to now use C locale like all other UE platforms.

  • New: We now provide the file path of the ICU DLL that failed to load.

  • New: Added support for SetThreadDescription thread naming API. This API is better than the old SEH style thread naming since the names also show up in crash dumps and ETW traces.

  • New: Enabled std::aligned_storage to build under VS 2017 15.8.

  • New: Added asserts to the Reserve functions in TArray and FString in order to ensure the requested sizes are legal.

  • New: Added UE_STATIC_DEPRECATE() macros which conditionally display a deprecation warning.

  • New: Added UE_DEPRECATED() which uses C++14's [[deprecated]] attribute syntax and deprecated the old DEPRECATED() macro.

  • New: Implemented FGuardValue_Bitfield variant to make guarding bitfield values more convenient as TGuardValue cannot take them by reference.

  • New: Added comments to the reflection mirror of FPolyglotTextData so they show up when using it in the editor. Also added the note "(it should be the same as the originally authored text you are trying to replace)" to the NativeString description in both places.

  • New: The warning 'Calling StaticLoadObject during PostLoad of ...' will now also include the parameters passed to StaticLoadObject for easier debugging.

  • New: Added some Serialize function parsing tests to UHT’s internal test cases.

  • New: Added optimization to stat UObjects to prevent excessive rendering off of the screen. This gave us at least a 10x improvement.

  • New: Allowed overriding the thread pool to use when starting the background task with FAutoDeleteAsyncTask.

  • New: Added TargetRules option bAllowNonUFSIniWhenCooked which, when true, will disable non-UFS ini files from loading in cooked builds, except for GameUserSettings.ini.

  • New: Implemented utility for creating JSON DOMs manually.

  • New: Added gc.DumpRefsToCluster Name=ClusterRootObjectName command to dump references to all objects within a cluster. This is useful for determining if clusters are indeed 'stale.'

  • New: Implemented a new override for LoadPackageLinker that takes a lambda that can be used to process the linker before EndLoad is being called.

  • New: Added code that now dumps the callstack (including the specific function) from Engine or game code that unexpectedly added a new custom version in serialization code in a non-deterministic way.

  • New: It's now possible to enable support for cooked data in the editor in project settings. The ini setting moved from [Core.System] AllowCookedDataInEditorBuilds=True to [/Script/UnrealEd.CookerSettings] cook.AllowCookedDataInEditorBuilds=True.

  • New: Added an %\ENGINEDIR% variable that can be expanded from config files.

  • New: Implemented the != operator to FJsonValue and made both == and != symmetrical.

  • New: Added Unit Test for Timecode.

  • Improvement: Improved the performance of MallocBinned3 slightly and fixed some static analysis warnings.

  • Improvement: Improved memory of UObject hash tables

  • Improvement: Removed the redundant re-opening of .module files when calling the FindModulePaths function of FModuleManager.

  • Improvement: Optimized TSet assignment operator and copy constructor.

  • Improvement: Optimized Str[n]icmp function and ToLower/ToUpper functions in TChar. Replaced expensive CRT to[w]lower() / to[w]upper function calls with locale-independent implementations. The semantics match standard C locale that all UE platforms use - only ASCII characters are considered.

  • Improvement: CSV profiler improvements:

    • Added CSV_TIMING_STATS_EMIT_NAMED_EVENTS and CSV_EXCLUSIVE_TIMING_STATS_EMIT_NAMED_EVENTS defines so we can analyze Csv stats in PIX/Razor (disabled by default).

    • Further optimized the CSV processing thread by getting rid of the exclusive stat temp array copy by processing the stats inline.

  • Improvement: Changed implementation of check, verify, and ensure macros to generate much less code on the hot path. Assert sites can now be as little as four instructions. This improves instruction cache utilization, gives the optimizer more opportunity to inline, and improves debugging as more non-volatile registers are preserved. The cold path instructions were also moved to a separate section in the binary to further separate hot from cold.

  • Improvement: Implemented better packing for FNameEntry on 64-bit platforms to reduce memory usage.

  • Improvement: Updated Framepro captures taken using the framepro.startrec and framepro.stoprec console commands to now have the process ID added to the filename.

  • Improvement: Reduced the time locks are held during allocation and reallocation in MallocBinned2.

  • Improvement: Implemented several improvements to Asset Registry memory and load times in cooked builds.

  • Improvement: Allowed platform specific math test function implementations as well as the generic implementations.

  • Improvement: Refactored UnrealHeaderTool-generated structs to reduce executable space.

  • Improvement: Improved CSV profiler exclusive stats (better instrumentation for effects time, broke down WorldTickMisc further).

  • Improvement: Added a few drive-by optimizations to game startup times that yielded ~15% speedup in an internal project.

  • Improvement: Optimized size and and performance of TFunctions.

  • Improvement: Reduced CPU usage for Cook-on-the-fly server by not busy-waiting for assets to cook. Also added an event which is signaled when a network request has been received. The main COTF loop blocks on this event when the cook request queue is empty. This reduces CPU usage while keeping the request latency low.

  • Improvement: Optimized TSet's copy assignment operator to copy the existing hash rather than rehash all the elements.

  • Improvement: MD5 and SHA1 Update functions now handle input lengths of up to 61 bits.

  • Improvement: Improved MallocBinned2 reporting.

  • Improvement: Allow console variable changed callbacks to be defined inline in their declaration.

  • Improvement: Improved reporting of bad TimerManager internal state.

  • Improvement: Moved UObject serialization state out of FUObjectThreadContext to a local-only (to the current FAsyncPackage/LoadPackage call) FUObjectSerializeContext. This will allow more advanced changes to the old serialization paths and prevent objects from being added to random FAsyncPackages when async loading (and that will allow package prioritization).

  • Improvement: Moved TWeakInterfacePtr into CoreUObject, and added a lot more functionality to it and made it work more closely with TScriptInterface so that they're easier to compare and interchange.

  • Improvement: Added default Engine textures to root set in cooked builds (even though they are referenced by a root set Engine object) to prevent them from being added to clusters which would result in these clusters always staying in memory.

  • Improvement: Disabled the checks against adding or removing objects from the UObject hash tables when iterating over them in shipping builds to reduce their memory overhead.

  • Improvement: During asset registry generation in the cooker, we now pass the list of cooked files to the AssetManager when calling the PreSaveAssetRegistry function.

  • Improvement: Changed TEncryptedAssetSet to be a map of group-name to a set of package names, rather than primary asset ids.

  • Improvement: The cooker will now attempt to collect garbage when the Engine is getting close to running out of available UObject indices.

  • Improvement: Allowed JSON_SERIALIZE_OBJECT_SERIALIZABLE object to be an expression.

  • Improvement: Added various updates to the WIP dynamic content encryption system.

  • Improvement: Editor only data is not excluded from totals gathered from GetResourceSizeEx.

  • Improvement: When reporting ensures, ThreadHeartBeat will now be suspended for all threads to prevent detecting hangs on threads that are waiting for the thread that triggered and is now processing the ensure.

  • Improvement: Avoided a strlen function call in the AppendInt function in FString since we already know the length of the string we built. This was used frequently when converting FName to FString.

  • Improvement: Made sure there are no dependencies that are pending load when trying to create GC clusters when async loading.

  • Improvement: Cooker settings will now automatically update console variables associated with them so that they take immediate effect instead of after restarting the editor.

  • Deprecated: Deprecated TIndirectArray's placement new syntax, which can cause new/free or malloc/delete mismatches.

  • Removed: Removed ArchiveAsync.h since it didn't contain anything useful anymore.

  • Removed: Removed unnecessary startup scan in cooked games/server.

  • Removed: Removed invalid postcondition check in the Trim function in TLockFreeFixedSizeAllocator.

  • Removed: Removed a redundant buffer length argument from the GetVarArgs functions in FPlatformString and TCString, and deprecated old overloads.

  • Removed: Removed the SecureCRT mode from our string functions as it makes the implementation inconsistent with other platforms.

  • Removed: Removed redundant checks when allocating a small block in the ResizeExternal function in FMallocBinned2.

  • Removed: Removed NTSC 23.976 from the timecode drop frame list.

  • Removed: Removed the functionality to merge GC clusters as it was never used and generally could lead to keeping all assets in memory forever.

Editor

  • Crash Fix: Added a fix for a rare crash that occurred when the mouse entered or left a game viewport while it didn’t have an underlying SceneViewport.

  • Crash Fix: We now check asset validity to avoid rare crashes when reopening a level.

  • Crash Fix: Fixed a crash related to registering an editor mode after startup.

  • Crash Fix: Fix for rare crash when world settings weren't available during thumbnail rendering.

  • Crash Fix: Fixed a crash when importing a static mesh and the parent package is null.

  • Crash Fix: Fixed a Hot Reload crash related to maps containing streaming levels.

  • Crash Fix: Input action/axis mapping details customization will no longer display the remove from array icon if the input action or axis mapping is not in an array as pressing it could cause the editor to crash.

  • Crash Fix: Fixed a crash caused by re-importing assets in unattended mode.

  • Crash Fix: Fixed OOM issue when rendering SplineMeshComponent with a huge tangent vector.

  • Crash Fix: Fixed a bug that could make the editor crash when previewing LODs in the Skeletal Mesh Editor after importing a new LOD from the Content Browser.

  • Crash Fix: Fixed a crash that could happen when selecting instances.

  • Crash Fix: Fixed a crash when running with Instancing in some levels on a dedicated server.

  • Crash Fix: Fixed a crash where material was not valid when computing adjacency information.

  • Crash Fix: Fixed a crash when having a material with tessellation enabled but no layer painted.

  • Crash Fix: Fixed a crash that happened when using Change Component Settings on a setup where landscape is split between streaming level.

  • Crash Fix: Fixed a crash that could happen when force deleting a level with a landscape actor in it and using world composition.

  • Crash Fix: Fixed a possible crash that could happen if you tried editing a landscape streaming proxy when the landscape actor was not loaded.

  • Crash Fix: Fixed a crash that would happen when using a material with tessellation.

  • Crash Fix: Added another conditional to guard against crash with comment pasting.

  • Crash Fix: Fixed a crash in the blueprint debugger watch window.

  • Crash Fix: Fixed a crash in the case of the FrameRate being invalid. GetFirstFrameRate() could sometimes return a nullptr.

  • Crash Fix: Fixed a Crash when Cast to UStructProperty failed.

  • Crash Fix: Added AudioTrack::CreateNewSection() to fix crashes when adding an audio track through Python.

  • Crash Fix: Opening the static mesh editor while the socket manager has not been initialized no longer causes a crash.

  • Crash Fix: Fixed VR editor crash when spamming trigger press.

  • Bug Fix: Fixed a small memory leak in the CryptoKeys editor module.

  • Bug Fix: Fixed issues where "Use Mouse For Touch" was generating incorrect sets of event with incorrect positions. It is now a much better simulation of touch events.

  • Bug Fix: Fixed it so that Data Tables can be reimported from csv/json again if they were originally created in the editor.

  • Bug Fix: Updated tab key functionality in the output log's console box to not leave behind unwanted tab characters.

  • Bug Fix: When replacing an actor, we now make sure that its Owner and Instigator are correctly maintained.

  • Bug Fix: Added a fix for an issue where instanced EditInlineNew properties were being improperly linked after copying.

  • Bug Fix: Updated ResetToDefault widget to only mark properties as having a custom reset handler if one is passed in.

  • Bug Fix: A fix was added for a rare race condition in startup movies due to invalidating a texture while getting its size.

  • Bug Fix: The Static Mesh thumbnail will now always display LOD 0.

  • Bug Fix: Adding the same collision primitive more than once when importing them from an FBX is no longer allowed.

  • Bug Fix: Texture Editor: Fixed HSV controls to work correctly with HDR textures.

  • Bug Fix: Fixed an infinite loop that was caused when selecting an actor that has a component parented to the actor's parent.

  • Bug Fix: In the Details Panel for objects, the Collision Presets Object Type now immediately updates when toggling Simulate Physics.

  • Bug Fix: World Outliner: Search results now update properly after pressing ESC to clear search filter.

  • Bug Fix: Mask is now applied to fill color when filling LOD color data.

  • Bug Fix: Fixed issues with array handling in details panel when multiple actors are selected.

  • Bug Fix: Fixed new asset not being able to create objects if another window had focus.

  • Bug Fix: Disabled skeletal mesh sections are now restored when re-importing.

  • Bug Fix: Fixed an issue with 'Ambiguous search' warnings appearing that were unrelated to actual warnings or errors during cooking.

  • Bug Fix: Animation curves created within the editor can now be exported to an FBX.

  • Bug Fix: Fixed an issue with exporting to FBX with a skeletal mesh using cloth.

  • Bug Fix: Fixed a vertex painting migration issue with old skeletal mesh assets (from before 4.18).

  • Bug Fix: Details view is now properly refreshed when a locked actor is deleted.

  • Bug Fix: Fbx Importer: PostEditChange is now called on extra Static Meshes when importing without the combine flag. PostEditChange was previously called only on the first imported mesh.

  • Bug Fix: The Fbx importer now supports animation layers when computing the time span, the merge layer operation is done before the conversion.

  • Bug Fix: Targeted RHI ordering is now preserved when changing values.

  • Bug Fix: World Outliner: Fixed a bug causing deleted folders to reappear when a map is reopened.

  • Bug Fix: Skeletal Mesh LODs section data is now restored after when re-importing.

  • Bug Fix: Popup menus are now prevented from unexpectedly overlapping mouse position.

  • Bug Fix: Fixed an issue with visibility when Copy-Pasting actors from hidden layers.

  • Bug Fix: Fixed an issue with the naming of Materials generated by the Merge Actor tool to have a single 'M_' prefix.

  • Bug Fix: Fixed the material ID when auto-generating LODs from a mesh where the materials were re-ordered to the FBX order.

  • Bug Fix: Git Plugin: Fixed an issue where the directory was not being found using the git worktree.

  • Bug Fix: World Outliner: Fixed the Select All Descendants menu option to select all children rather than just the immediate children.

  • Bug Fix: The FBX re-import skeleton comparison now compares the incoming FBX skeleton bones with the bones used by the re-import asset. Before it was comparing the incoming with the full skeleton asset.

  • Bug Fix: Skeletal Mesh Editor: Fixed an issue where the Preview Asset was becoming detached when socket was renamed.

  • Bug Fix: Editor: Moved overridden public EditorViewportClient functions to public.

  • Bug Fix: Fixed an issue with connecting reroute nodes for enum types in Niagara graphs.

  • Bug Fix: Fixed DataTableRowHandle display name in Details panel when copy/pasting property.

  • Bug Fix: Fixed-size array properties will now copy/paste all array values.

  • Bug Fix: Level text in viewport will now correctly display names with trailing numbers.

  • Bug Fix: Fixed unit parsing bugs that would always choose first matching unit type instead of a complete match ("1.3cd" would match Celsius rather than Candela). White space between number and unit (like "10 cm") is also now correctly parsed.

  • Bug Fix: We no longer use the legacy localized fallback fonts in the font editor preview.

  • Bug Fix: The default vertex color is now white and not red.

  • Bug Fix: Fixed the FBX Static Mesh socket import to remove the extra conversion.

  • Bug Fix: Made a fix for Setting focus not working in Fast Path for WidgetComponents in world space. Also added a fix for a rare assert caused by widget components creating MID's in async tasks (alongside screen proxy creation) moved it out.

  • Bug Fix: Fixed an issue where editor utility widgets would stay in the windows menu after being closed.

  • Bug Fix: Fixed an issue with array builders used in details customizations not allowing copying/pasting of the property.

  • Bug Fix: Never hide the filter bar if there is a filter active.

  • Bug Fix: Feature level switching is now disabled when a lighting build is in progress.

  • Bug Fix: Fixed command line arguments passed through the project launcher not being escaped properly.

  • Bug Fix: Fixed Replace Selected Actors action when replacing Brushes. This now correctly rebuilds geometry instead of leaving a copy of the brush behind in the world.

  • Bug Fix: RHIs need frames in order to handle all their book-keeping - even when debugging a blueprint - without this they will leak memory into their internal pools.

  • Bug Fix: The sub-level view now shows the correct locked state instead of random locked states.

  • Bug Fix: Changed the texture details panel to allow maximum texture size to go up to the maximum supported size of the selected texture type.

  • Bug Fix: Fixed the Message Bus Source timing out when connecting with a large number of characters. Resolved by correctly initializing ConnectionLastActive variable when the Message Bus Source receives a Client.

  • New: World Outliner: Added Duplicate Folder Hierarchy menu option and Edit menu/hotkey functionality for folders (Cut/Copy/Paste/Duplicate/Delete/Rename).

  • New: Added viewport setting to invert right mouse dolly.

  • New: Selecting multiple keys of the same time now displays the time instead of "multiple values".

  • New: Supplying factory to asset import task is now supported.

  • New: Added exportPreviewMesh in the animation category of the fbx export options dialog. This allows the user to control if the preview mesh should be exported with animations or not. It replaces a dialog that was showing before the fbx export options dialog.

  • New: The Global Open Asset Window (Alt+Shift+O) now has filter support.

  • New: DeviceManager: platforms can now specify a custom widget for the Device Info panel.

  • New: Added "Enable cook on the fly" option to cooker settings and launch menu.

  • New: Skipped the text highlighting search when there isn't any highlighted text in a Slate text block.

  • New: Updated USD SDK to v19.01.

  • New: A message prompt is now shown when packaging with an empty game default map.

  • New: The display of the current level now is a button that allows you to change between filtered levels. Also, the level of the currently selected actor is displayed above.

  • New: FBX importer: Added warning for when there are too many UV channels.

  • New: Added more precision in the editor for float fields.

  • New: Fbx exporter can now export skeletal mesh LODs.

  • New: FSkinWeightVertexBuffer::AllocateData and FSkeletalMeshRenderData::RequiresCPUSkinning are now exported to be used by other modules.

  • New: Dropping of non-placeable UObjects in the editor viewport is now prevented.

  • New: Camera preview viewports can now also preview the game world if you are currently simulating.

  • New: Skeletal reduction is now allowed on LOD 0.

  • New: Search filters can be cleared with the Escape button in the settings windows.

  • New: Scene outline synchronization now makes sure that the tree view selector is within the selection set.

  • New: FFilePath: Added metadata "RelativeToGameDir" to support relative path to project directory.

  • New: The Accessible Platform list no longer includes platforms which have no Configuration directory present.

  • New: Added import vertex color options to the Skeletal Mesh FBX importer.

  • New: Source Control: Added a "Diff Against Depot" context action to the Submit window.

  • New: Added the ability to customize an existing property on a class in a details panel without moving it from its location on the details panel. See IDetailLayoutBuilder::EditDefaultProperty.

  • New: Excluded abstract classes in the ClassPin of CreateWidget.

  • New: Added FAsyncTaskNotification as a non-blocking alternative to FSlowTask.

    • FAsyncTaskNotification allows you to create Slate notifications for asynchronous tasks without having to directly depend on Slate (you only need a dependency on Core), which is useful for code that wants to report progress but doesn't want to be directly concerned about UI details.

    • It does this using an extensible factory that allows Slate to register its own implementation when available; this also allows the notifications to be customized by anything that wants to implement IAsyncTaskNotificationImpl and register a factory with FAsyncTaskNotificationFactory.

    • Note: FAsyncTaskNotification must be created on the game thread, but may be passed to other threads after being created.

  • New: Added the bindable command AlignBrushVerticesToGrid.

  • New: Added the possibility to reduce static mesh LOD from any lower LOD instead of reducing from LOD 0 only.

  • New: Added functionality to Preview Scene Settings that allows the user to hide Environment Cubemap without disabling lighting, see bUseSkyLighting in the Preview Scene details panel.

  • New: Git Plugin: Added an option to create a README.md file at the time of the git repository creation.

  • New: Added control over the collection paths being included in the asset tooltips. Also added wrapping for cases where an asset is in many collections.

  • New: Hiding the material conflict dialog during scripted FBX import is now allowed.

  • New: Selecting a child actor component (at any level of nesting) will select the parent actor.

  • New: DockTabs now supports a suffix string; it takes precedence in layout when space is tight, currently used by asset editors to show the dirty asterisk.

  • New: Added Support Simplygon reduction API for MeshDescription.

  • New: The Device Output Log is no longer an experimental feature and is enabled by default.

  • New: Import and export FBX metadata on SkeletalMesh and Skeleton assets.

  • New: Allow toggling visibility of all selected layers through the Visibility (Eye) icon in the Layers panel.

  • New: Added level editor actions to select immediate children or all descendants of the current selection.

  • New: PrimaryAssetId properties in the editor now have a thumbnail representing the asset they reference in details panels, similar to a normal asset reference.

  • New: Viewport setting to scale the camera speed based on its view distance. This helps to adjust the camera speed when zooming in on small objects and zooming out of big objects.

  • New: Added an -OnlyUnversioned option to the ResavePackages commandlet which will resave any unversioned packages.

  • New: Added support for type A files in the IES importer.

  • New: Editor Perforce connections do not set the program name of "UE4" for the session.

  • New: Viewport setting to allow the camera to orbit around the current selection.

  • New: Fixed "Loading Visual Studio" popup not closing when a specific Visual Studio version is selected in the editor preferences window.

  • New: VisualStudioSourceCodeAccessor now uses the Visual Studio Setup API to query installed VS2017 and VS2019 versions.

  • New: Disable fallback in the font preview viewport in the font editor so that you can see the real set of glyphs that will be rendered.

  • New: Added better warning messages for when users try to rename rows with invalid names in the row editor. Updated the editable text layout to prevent it from calling OnTextCommitted delegates when the text has not been changed.

  • Improvement: Optimized vertex paint performance in editor.

  • Improvement: Curve editor now allows changing the time on multiple keys if they're on different curves.

  • Improvement: Optimized editor load times by reducing the frequency of status updates about package loading.

  • Improvement: Changed the asset viewer profile customization to have proper sub-categories for easier reading.

  • Improvement: USD sequence export has been simplified to query world state instead of attempting to inspect curves on tracks.

  • Improvement: The currently opened tab is now preserved when closing another one.

  • Improvement: Increased the maximum amount of favorited levels from 10 to 20.

  • Improvement: Autosave no longer saves map build data, which saves time and hard disk space.

  • Improvement: Improved the tree view representation of collection inclusion.

  • Improvement: USD integration updated to support multiple layers.

  • Improvement: Improved consistency between in-game and output log console inputs, and various other QoL improvements.

  • Improvement: Deleting an Editor Utility asset now closes the tab associated with it.

  • Improvement: Made editor utility edit/run behavior more consistent.

  • Removed: Removed duplicate vertex paint undo events.

Cascade

  • Bug Fix: Particle emitter properties are now copied when Duplicate Emitter or Export Emitter is invoked.

  • Bug Fix: Fixed a number of DPI issues in Cascade.

Content Browser

  • Bug Fix: Toggling off the Gameplay Filter Tag no longer causes assets to be shown in the Content Browser.

  • Bug Fix: Fixed an issue with the recently opened filter triggering the modified filter.

  • Bug Fix: Fixed an issue with filters not applying when the Editor is opened.

  • Bug Fix: Drag and drop file import no longer blocks external file explorer for the duration of the import.

  • Bug Fix: Fixed an issue where the Content Browser cook path length estimation was not accounting for engine content and plugins properly, leading to overestimation of cook path length.

  • New: New content browser filter to show files that are not under source control.

  • New: Added an extension point for extra state indicator icons and tooltip on the top left corner of the Content Browser tiles.

  • See FContentBrowserModule::GetAllAssetViewExtraStateIconsGenerators and FContentBrowserModule::GetAllAssetViewExtraStateTooltipGenerators.

  • New: Asset Registry and Content Browser now also update on directory changes (in addition to file changes).

  • New: Advanced copy now updates references correctly for all Blueprint types. Levels are currently not supported.

Foliage

  • Bug Fix: Invalidate lighting when removing instance in editor.

  • Fixed a case where "lighting needs to be rebuilt" would appear if you had instances and it would remove all of them and build the lighting again.

  • Bug Fix: Fixed memory display of "stat foliage" to correctly track memory usage.

  • Bug Fix: Fixed an issue where loading order of a lighting scenario would affect lightmap application on Instanced Static Mesh.

  • Bug Fix: Correctly reapply lightmaps in editor when a lighting scenario change occurs.

  • Bug Fix: Fixed ProceduralFoliageVolume Foliage Type removal not taken into account at next Resimulate.

  • Bug Fix: Fixed instancing not taking into account instances scale while calculating LODs.

  • Bug Fix: Fixed an issue that would occur with foliage; if the user performed undo/redo very fast, it would end up in a buggy state.

  • New: If "in-place" foliage updates are desired, KeepInstanceBufferCPUAccess should be set to true. This comes at the cost of memory, as we would otherwise only keep the instance data on the GPU side in most cases.

Landscape

  • Bug Fix: Fixed a Page Allocator memory leak from custom data caused by a memory realloc, it was happening when using landscape with parallel init views.

  • Bug Fix: Fixed cases where it was possible to have your landscape become invisible if there were some errors in your landscape material.

  • Bug Fix: Cleanup nonrequired data for Adjacency information. Fixed a Memory leak where Adjacency index buffer would not be freed, when the owner was freed (Shared Buffer).

  • Bug Fix: Fixed a calculation error when importing a weightmap using the .r8 format.

  • New: Landscape Flatten Tool - terrace flatten mode added, allowing user to flatten landscape at specific intervals in world space.

  • New: All actors are now selectable in landscape mode, and their information will appear in the details panel.

  • New: Added support for keybindings for adjusting brush size, falloff, and strength while moving the mouse cursor while the key is pressed.

  • New: Improve the speed of Change Component Size tool.

  • New: When using World composition, if you go past the last LOD range, we will now always assume this one.

Material Editor

  • Bug Fix: Added a custom reset to default for refraction depth bias.

  • Bug Fix: Fixed missing conversions to/from texture object param, hiding convert to param on texture sample param.

  • Bug Fix: Fixed an issue with texture coord and property nodes not showing up in search.

  • Bug Fix: Fixed an issue with SetMaterialAttributes Input serialization by giving input pins names.

  • Bug Fix: Added a fix so that you can now undo the creation of comments.

  • New: Moved sort priority down in the material parameters panel.

  • New: Moved the node alignment tools to a more generic implementation and added menu options for them to the material editor.

  • New: Added some guards against nullptr and out of array bounds access when getting node titles.

  • New: Function inputs and outputs now rename correctly on duplication.

  • New: A fix was added for material functions’ input types being labeled incorrectly.

  • New: Material graph nodes can now have duplicate names in all cases except when creating a new parameter from a constant.

  • New: Fixed an issue with post process materials not previewing correctly. Nodes no longer blink on parameter refresh.

  • New: Scalar/Vector parameters and subclasses with different behavior can no longer have name conflicts. Renaming parameters to an existing name in the same class will also change the value to the existing value.

  • New: Lightmass settings now display in the same override style as the rest of the material instance properties. Base properties are read from parent on load if they are not overwritten.

  • New: Show Modified Properties is now hidden and added custom Show Overridden Parameters in Material Instance editor. This works for all parameters and needs additional work for general properties (Physical Material, and so on).

  • Improvement: Cleaned up the thumbnail / preview properties.

Media Framework

  • Bug Fix: Changed "WhitelistTargets" to be an array instead of a string.

  • Bug Fix: Media capture is now stopped when PIE is started and we are using the current editor viewport. Since it's 2 different worlds, it caused conflict by not capturing the proper viewport.

  • Bug Fix: Added support for MediaBundle in timecode synchronizer.

  • Bug Fix: MediaCapturePanel: Fixed an issue with the camera output not working for actors in the PIE world.

  • Bug Fix: Fixed an issue with the Timecode synchronizer which never resolved with SDI input.

  • Bug Fix: Blackmagic: Fixed problem when closing and reopening a device too quickly causing a failure during opening.

  • Bug Fix: Blackmagic: Fixed input/output usage on Decklink 8k pro.

  • Bug Fix: Corrected the FPS for Dual Link. Fixed an issue where it would try to select the item from the next column even if the previous didn't match.

  • Bug Fix: MediaTexture now returns last rendered guid to avoid having material expressions using a guid that will get registered the next frame.

  • Bug Fix: Prevented a case where MediaTextureResource could use a sample of the future but not remove it from the queue.

  • Bug Fix: MediaCapture capture Slate in standalone and in packaged build.

  • New: Added the option to output in 3G level B if the video format is 3G level A.

  • New: Added support for Kona5 12G.

  • New: Changed the MediaProfile and TimecodeSynchronizer UI to remove the long name from the toolbar.

  • New: HDMI enabled device is now supported as an input source.

  • New: Added support for YUV as input.

  • New: Added a cropping option to media capture. Also added FileMediaOutput which allows for output through the requested buffer using the ImageWriter.

  • New: Added Blackmagic 10bits conversion GPU support.

  • New: We now support 10bit YUV for Aja.

  • New: Implemented WMF hardware accelerated video decoding support.

  • New: Added AJA psf support. This includes input and output.

  • New: Added Blackmagic YUV conversion output GPU support.

  • New: Added option to invert key output in media capture.

  • New: Added bDisplayWarningIfDropFrames as an option. Use the already existing flag from MediaOutput and copy it to the AJA output options.

  • New: Log the device version when we open a connection.

  • New: Added stats to MediaCapture as "STAT MEDIA".

  • Improvement: Improved media player & timecodesynchronizer toolbar UX. Separated the main button from the combo box.

Scripting

  • Bug Fix: Fixed soft object properties not loading when accessed in Python, and fixed soft class properties not validating their meta-class correctly.

  • Bug Fix: Fixed the Python stub file missing code when running the editor with Python developer mode enabled.

  • Bug Fix: ExecuteConsoleCommand is now allowed to route to the engine as a fallback if there are no player controllers active.

  • Bug Fix: Custom collision channel names are now exposed to Python.

  • Bug Fix: Fixed GetNumLODs being exposed to Python as get_num_lo_ds rather than get_num_lods.

  • Bug Fix: Fixed type validation of objects within Python containers.

  • Bug Fix: Fixed Python commandlet -Script parameter failing to parse nested escaped quoted strings.

  • Bug Fix: Fixed a bug in the blueprint debugger where duplicated watches could show up.

  • New: Exposed GetWorldSettings to scripting.

  • New: Exposed FPaths to Blueprints and Python through a wrapper library. Functions can be found under Utilities/Paths in Blueprints and unreal.Paths in Python.

  • New: Exposed PoseAssetFactory to Python and Blueprints.

  • New: Added Python negated unary prefix operator (-obj) which also enables adding ScriptOperator = "neg" as metadata to a scripting reflected UFUNCTION.

  • New: - Hoisted static math functions and constants from KismetMathLibrary onto related script classes as methods (Python) - added additional math functions to KismetMathLibrary and exposed them to scripting (BP, Python, and so on) - grouped related math functions in KismetMathLibrary (all FVector commands together, all FRotator commands together, and so on) - removed hand-written Python Unreal math routines and replaced with hoised versions using "ScriptMethod" meta data in KismetMathLibrary.

  • New: Added an automatic material layouting function in UMaterialEditingLibrary to place the material expressions in a grid pattern.

  • New: Added a ScriptMethod tag to EditorSkeletalMeshLibrary::RegenerateLOD to allow it to be called directly on a SkeletalMesh object in Python.

  • New: Python find_object, load_object, find_asset, and load_asset functions will now automatically follow redirectors unless the 'follow_redirectors' parameter is set to False.

  • New: Exposed ULevelStreaming::GetLoadedLevel to scripting.

  • New: Exposed UEditorLevelUtils::SetLevelVisibility to scripting.

  • New: Added Python support on Mac.

  • Improvement: Data table improvements: Added a search for references on both the row handle as well as the row in the data table editor.

Sequencer

  • Bug Fix: Disabled the +Track and +Section buttons when the sequence is read only, rather than hiding them completely. Also, this allows the camera button to be visible and toggled for a read only sequence.

  • Bug Fix: We now get relative transform when caching data for converting possessable to spawnable.

  • Bug Fix: Moved section to paste destination rather than setting start/end frames individually.

  • Bug Fix: Step to next/prev key no longer uses ExclusiveEndFrame. This fixes cases where you want to step to the last key of a section and add another animation clip that doesn't overlap.

  • Bug Fix: Fixed an issue where CineCameraComponent settings would always revert to defaults.

  • Bug Fix: Pasting a track now clears flags on subobjects.

  • Bug Fix: Custom float channel serialize.

  • Bug Fix: The Render Movie Handle Frames feature no longer generates the incorrect number of frames under certain conditions.

  • Bug Fix: Autoscroll now works properly when in a subsequence.

  • Bug Fix: Fix for Debug exception due to TArray::Reserve(-1).

  • Bug Fix: Fixed an issue if the object being baked is attached through the map (and not through a track).

  • Bug Fix: When rendering shots with handle frames, only shots that are initially active will be rendered.

  • Bug Fix: Disabled the context menu when in read only.

  • Bug Fix: Removed restrictions on perspective viewports when updating camera cuts.

  • Bug Fix: Clear locked cameras for transform track if the viewport allows cinematic control. Fixes an issue where you are looking through a camera and start recording through Take Recorder, and the camera pops out of the viewport.

  • Bug Fix: Editing disallowed if level edits only is set.

  • Bug Fix: Forcing animation playback to be Custom when playing back Sequencer Animation Assets even if the character is trying to force itself back to BP.

  • Bug Fix: Fixed evaluating subsequences in isolation that were using the wrong time.

  • Bug Fix: Fixed some cases where the director class could become detached from its blueprint.

  • Bug Fix: Master event tracks no longer have an object pin by default. Level blueprints are now only accessible through interfaces.

  • Bug Fix: Fixed an issue where child possessable bindings would not be invalidated when their parent was invalidated.

  • New: A callback can be provided when invoking a Movie Render via Python. This callback will notify you when the Movie Render finishes so that you know you can invoke another one. To use this feature, provide an FOnRenderMovieStopped callback when calling the RenderMovie function. See \Engine\Plugins\MovieScene\SequencerScripting\Content\Python\sequencer_examples.py for more information.

  • New: Exposed Set/GetNumChannelsUsed for MovieSceneVectorTrack.

  • New: Sequencer's Track Color picker now uses the standard color picker dialog.

  • New: Added more Python extensions - set parent, set property name and path, set start/end frame bounded.

  • New: Exposed metadata from level sequence.

  • New: Added active shot to snapshot along with Slate and TakeNumber.

  • New: Added additional marked frame functionality.

    • Marks now have a label and color.

    • Movie scene sequence player can play from a named mark.

    • Sequencer scripting supports adding/removing/editing marked frames.

  • New: Added function to get the active camera cut camera. We also now allow camera cut evaluation, but disable binding to the player when CanUpdateCameraCut is false.

  • New: Extended UMovieSceneSequence::Stop to accept the time to reset the cursor to.

    • This ensures that at the point we trigger explicit network Stop events, the time cursor will not change unless the user has explicitly done so, which resolves an issue where a passive net update with a slightly different time can come in after the explicit stop RPC event has been handled by a client.

    • It also means we are no longer resetting the time twice when stopping.

  • New: Exposed GetSound/SetSound and GetStartOffset/SetStartOffset on MovieScene Audio Sections for manipulation from Python.

  • New: Added the option to show vertical frames/bounds per track.

  • New: Made FMovieSceneSectionParameters BlueprintReadWrite so they can be manipulated directly from Python without editor_get_property.

  • New: Take Recorder: We now autotrack actors that aren't being recorded in the world source.

  • New: Added GetReferencedBindings() to MovieSceneSection to get guides that the section references.

  • New: Added MovieSceneTrack and MovieSceneSection as BlueprintType.

  • New: Added playback and section range setters and getters.

  • New: Enabled autoscroll for playing state.

  • New: Added an ability to export generic/master float tracks (such as live link tracks).

  • New: Added start offset to media section/track.

  • New: MovieSceneSequence has been set as BlueprintType so that it's accessible in blueprints.

  • New: Propagated setting display rate and locking state to child sequences.

  • New: Changed StartOffset to FFrameNumber for Audio, Skeletal, GeometryCache sections.

  • New: Changed SlipSection from double to FFrameNumber.

  • New: Added SupportsType to MovieSceneTrack to indicate whether a particular MovieSceneSection class is compatible.

  • New: Added the ability to copy/paste sections.

  • New: Added transactions for renaming track nodes.

  • New: Added a new track type for swapping materials on primitive components.

  • New: Added new property track for any base UObject property type. Includes weak and soft object pointers.

  • New: Level sequences that exist in instanced levels will not resolve possessable bindings within that same level correctly.

  • Improvement: Changed Template::SourceSection to a weak pointer.

  • Improvement: Optimized camera cut thumbnail rendering by removing reliance on level viewport client.

Static Mesh Editor

  • Bug Fix: Preview socket mesh scales correctly when Editor is reopened.

  • Bug Fix: LOD radio button now updates the static mesh editor viewport.

  • New: Added support for reducing static mesh LODs by vertex percentage. There is now a dropdown to pick between triangle percentage or vertex percentage.

  • VR-Editor

  • Bug Fix: Integrated VR editing modification to Dev-Enterprise.

  • New: Added actor 'carrying' to VR Editor. Certain actors (cameras) are now "carried" by default with a one-hand drag in VR Editor.

    • This allows the objects to be freely rotated and translated, without having to grab them with two hands, and without scaling them accidentally.

    • This is useful for cameras or other objects that need to be "aimed" interactively.

    • This can be turned off with "VI.AllowCarryingCertainObjects 0".

  • New: Added extra parameter to allow custom UI size in VR editor.

  • New: Adds preview camera that is shared across multi-user VR

  • New: Rework VR Interactor

World Browser

  • New: In Levels tab, use the New Level Dialogs when creating a new level.

Editor and Tools

  • Crashfix: Fixed crash when duplicating a UMG animation but not renaming it.

  • Bugfix: UMG: Fixed deletion of rotation/angle track.

  • Bugfix: Fixed TC_HDR_Compressed texture visualization.

  • Bugfix: Fixed issue where foliage meshes were not being moved or deleted when with the geometry they are placed on is moved or deleted.

  • Bugfix: Fixed bug where UMG animation could not be renamed from [Name]_1 to [Name].

  • Bugfix: Fixed crash when renaming a duplicated UMG Animation.

  • Bugfix: UMG: Fix replace crash when source binding doesn't exist - add the source binding.

  • Bugfix: Movie Scene Capture: Removed unused codec.

  • New: Added option to Editor Settings to opt out from sending unattended crash reports / bugs / ensures.

Sequencer

  • Crashfix: Fixed crash when converting matinee assets to sequences due to changes in events. Event keys will now have blueprint event endpoints created in the level sequence blueprint when converting.

  • Crashfix: Refresh sequencer on map changed. This fixes a crash bug when unloading a map with actors attached to sublevels.

  • Crashfix: Fixed an issue with rare crash during sequencer playback when changing levels.

  • Bugfix: Force refreshed the Details Panel when sequencer is opened so that the keyframe buttons appear.

  • Bugfix: Fixed skeletal mesh getting ticked twice when the animation blueprint is set.

  • Bugfix: Fixed copy/pasting UMovieSceneTrack so that master tracks are only pasted to the root.

  • Bugfix: Added RF_Transactional to PrimitiveMaterialTrack::CreateNewSection and ObjectPropertyTrack::CreateNewSection.

  • Bugfix: Fixed issue where sequencer would not reset if simulating client viewport after a sequence stopped playing.

  • Bugfix: When auto set track defaults is off, make sure a key is always added when adding a track so that the value is saved.

  • Bugfix: Handled legacy conversions where DisplayRate is 0.

  • Bugfix: Fixed selection in/out undo.

  • Bugfix: Disabled can collapse to track for multi channel tracks.

  • Bugfix: Check for property type in evaluation. This fixes an issue where the property type is changed after the track has been created.

  • Bugfix: Forced refresh when sequencer is opened so that keyframe buttons appear.

  • Bugfix: Fixed issue where highlighting multiple keys would not select all keys for editing.

  • Bugfix: Restored drawing paths for selected nodes and channels.

  • Bugfix: All sounds stop on tear down.

  • Bugfix: Fixed fbx transform import so that if there are no keys in the fbx channel, the existing destination channel is not cleared.

  • Bugfix: Fixed media timing - seek to media time before blocking.

  • Bugfix: Fixed components for spawnables so that they also display in gray when despawned.

  • Bugfix: Gets animation skeleton from CDO if the actor hasn't been spawned.

  • Bugfix: Fixed animations continuing to play - make sure montage play state is set to sequencer play state.

  • Bugfix: Fixed key reduction not working on imported fbx channel. Implement channel Optimize() so that it follows the curve editor's SimplifySelection by evaluating whether a key is needed (rather than removing the key and checking whether the value has changed). The main fix is that the tangents need to be calculated as non-normalized (such as with the DisplayRate).

  • Bugfix: Inserting a section into a particular row moves existing sections down by one row.

  • Bugfix: Sequencer now accounts for frame rate when copying key tangents when converting from matinee to level sequence.

  • Bugfix: Pasting a spawnable doesn't set up defaults, since tracks will be included in the copy.

  • Bugfix: Fixed issue where vector 4 parameters could not have their fourth value edited in the sequencer UI.

  • Bugfix: Converting bound objects in sequencer preserves sorting order and folder hierarchy.

  • Bugfix: Closed Set Asset menu and rename MPC track when changing assets.

  • Bugfix: In PostEditImport, reconstruct sections that have variable channel proxies based on property data. This fixes an issue where pasting a track/sections doesn't result in valid channel proxies.

  • Bugfix: Defer construction for CreateLevelSequencePlayer() so that BeginPlay is called for autoplay. There used to be an explicit call to autoplay, but this is now all handled in BeginPlay().

  • Bugfix: Fixed switching takes so that the swapped in shot is swapped onto the original shot's track.

  • Bugfix: Calling GetMovieScene() now checks for Sequence validity.

  • Bugfix: Fixed field of view not getting imported through fbx.

  • Bugfix: Added a binding so that default tracks are added. For example, if you add a camera cut for a camera that is not yet in Sequencer, default tracks should be added for that camera.

  • Bugfix: Reset loop count on stop so that it doesn't persist to the next call to play.

  • Bugfix: Skip updating camera cuts if camera to set is null and the last active camera and the current active camera is the same.

  • Bugfix: Float channels are now natively serialized, which dramatically reduces load/save times.

  • Bugfix: Fixed handle frame issues when exporting XML during movie rendering.

  • Bug Fix: Linear keys in Sequencer now blend correctly with surrounding cubic keys.

  • New: Moved autoplay to playback settings so that CreateLevelSequencePlayer can be set in autoplay mode.

  • New: Autoscrub to the desired time when holding down shift and clicking in the sequencer timeline. Autoscrub is also enabled when stepping to the next/previous mark.

  • New: You can copy object bindings and tracks together.

  • New: FBX Export now exports selected objects if there are tracks selected (not just when there are object bindings selected).

  • New: Inverted row index for XML import/export. This should fix issues with overlapping shots having the wrong priority.

  • New: Added error checking for invalid labels with spaces.

  • New: Added transaction to track renaming.

  • New: Use automated level sequence to capture UI name when exporting from shot track so that user config is loaded

  • New: Added MovieExtension config to allow the extension of the shot names to be changed from the default .avi.

  • New: Sequencer Scripting: Added setters for playback range, frame rate, and tick resolution.

  • New: Allow setting/scrubbing the playback range beyond the view range. When out of range, also extend the view range by 10 percent.

  • New: Actor Sequence: Move actor sequence editor to actor sequence plugin.

  • New: Added support for converting material tracks from matinee to sequencer.

  • New: Adding support to create subclasses of ACameraActor with the Create Camera Here viewport action.

  • New: Added support for UCineCameraComponent to set Focal length from FOV when calling SetFieldOfView.

  • Improvement: Better error reporting for pasting tracks.

  • New: Add toast when the tick resolution of the subsequence doesn't match the parent.

  • New: Exposed GetAnimSectionsAtTime.

  • New: You can now import/export focus distance.

  • New: More descriptive comments for PlayToFrame, JumpToFrame and ScrubToFrame.

  • New: Undo/redo support for label browser.

  • New: Added support for filtering child labels from the parent.

  • Improvement: Removed restriction on hidden mobility. It's too wide to restrict transform tracks.

  • Improvement: Sequencer EDL: Moved export inactive shots to before InitializeShots (which can mutate active states)

  • Improvement: Import fbx now always tries to match by name first. Otherwise, if the binding isn't found and not matching by name, default to first and output a warning.

  • Improvement: Used cached object bindings when drawing motion trails. FindObjectId can be slow because it clears the cached bindings. Added FindCachedObjectId which retrieves the binding without clearing the cache.

  • Removed: Child labels are removed.

  • Removed: Removed "Keep Playback Range in Section Bounds" from level sequencer UI.

Gameplay Framework

  • Crash Fix: Fixed a crash when compiling Blueprints subclassed from AWorldSettings.

  • Crash Fix: Fixed a crash recompiling Blueprints that have multiple child actor components with the same child actor class.

  • Crash Fix: Fixed a crash with WebMMovieStreamer where it was missing a string parameter in the log line.

  • Crash Fix: Fixed a crash when trying to add an existing .ini file that doesn't have restricted tags as a restricted tag source.

  • Crash Fix: Fixed crashes in ToggleDebugCamera if actors were destroyed while selected.

  • Bug Fix: Fixed a crash that could occur on dedicated servers when using the SetControllerLightColor or ResetControllerLightColor functions of APlayerController.

  • Bug Fix: Fixed replication errors with DetachFromComponent, which involves the server setting AttachParent to null, by adding explicit replication of whether the component should be attached or not.

  • Bug Fix: AttachmentReplication.AttachComponent is now cleared out with AttachmentReplication.AttachParent to make sure that it stays in sync on the server and client.

  • Bug Fix: Re-registering an object in the Significance Manager now triggers an ensure instead of a check.

  • Bug Fix: Fixed an issue that caused stalling when cleaning up tick groups.

  • Bug Fix: Dynamic streaming levels set to be initially loaded, but not visible, now load properly.

  • Bug Fix: Fixed a discrepancy in SpringArmComponent location lag when substepping is enabled.

  • Bug Fix: Blocking removals of a streaming level will no longer fail if there is already a pending visibility level being processed.

  • Bug Fix: Objects created via duplication in PIE now correctly execute their construction scripts.

  • Bug Fix: Fixed an attachment issue for actors using a replicated root component where they could sometimes get invalid offset values on clients.

  • Bug Fix: Fixed an issue where the position of a replicated StaticMeshActor with bRepMovement set to false would be moved to the default location on clients after being detached.

  • Bug Fix: The World Settings object can no longer be destroyed by Blueprint scripts run in the Editor world.

  • Bug Fix: Fixed the debug string displayed for NoTagMatch inside gameplay tag queries.

  • Bug Fix: Composite data tables now rebuild in Loading instead of PostLoad. This fixes bugs where things that depended on data tables were sometimes trying to use composite tables that weren't ready in their PostLoad.

  • Bug Fix: When ending play, the RF_Standalone flags will no longer clear before level streaming has been flushed (with TeardownPlaySession).

  • Bug Fix: Fixed a bug that caused scope locks in data tables to have inaccurate counts.

  • Bug Fix: Added a missing scope lock in the ability system component.

  • Bug Fix: Fixed GetDisplayName (in FKey) returning an improper value when using a Blueprint setter node for an FKey variable without modifying the input pin.

  • Bug Fix: Created player controllers are now destroyed if initializing a new player fails during login.

  • Bug Fix: Rotated skeletal mesh component with non-uniform scales no longer get extremely large bounding boxes assigned to them.

  • Bug Fix: Added tunable control over the time sub-step used in Character movement velocity braking, rather than using a hard-coded value.

  • Bug Fix: In UCharacterMovementComponent, CalcVelocity no longer enforces player acceleration limit on the result of ApplyRequestedMove acceleration.

  • Bug Fix: Fixed cached rotator/quaternion conversion getting out of sync in rare cases where FScopedPreventAttachedComponentMove was used and the component rotation changed within the scope. This could happen for simulated characters running RootMotion.

  • Bug Fix: OnDataTableChanged or OnCurveTableChanged callbacks are now called when tables are reimported from .csv files.

  • Bug Fix: CharacterMovementComponent no longer delays sending saved character moves that set bForceNoCombine, since those are generally important to send immediately to avoid latency and misprediction.

  • Bug Fix: Fixed Controller.GetOnNewPawnNotifier to return a reference to Controller.OnNewPawn, instead of a copy of it.

  • Bug Fix: Controller.OnNewPawn is now properly broadcast when PlayerController is switching possessed pawns.

  • Bug Fix: The FMath function, Fmod, now returns the same value with or without optimization when using a constant modulus.

  • Bug Fix: Fixed conversions from FRotator to FQuat returning NaN when the input range is very high.

  • Bug Fix: Fixed a focus issue that prevented the Blueprint function override menu from being filterable.

  • New: AIController's OnPossess and OnUnPossess blueprint implementable events are now available for all Controllers.

  • New: ForceFeedback effects can now be flagged to play while the game is paused.

  • New: Improved GameplayTag load times and error reporting, and added warnings about invalid tags.

  • New: Where possible, controllers will no longer have their force feedback values updated per frame if the value has not changed. This allows other plugins to manage force feedback intensity.

  • New: Publicly exposed ReferenceViewer graph schema in the AssetManagerEditor module.

  • New: Added GetAllActorsFromTargetData function to get all Actors in TargetData without having to specify an index. Blueprints can use this function in order to avoid needing a macro or loops.

  • New: Splitscreen now includes support for 3 or 4 player horizontal splits.

  • New: Added Add/Remove to the "Gameplay Tags > More Actions" menu for adding and removing exact tags without affecting child tags.

  • New: Added the "Open Source Latent" Blueprint function to Media Player.

  • New: Added CustomPrimaryAssetRules to the AssetManagerSettings. This allows applying rules to subsets of assets easily. The base implementation covers directories, as well as a game-specific filter string. Several related changes were made to asset manager rule scanning.

  • New: An actor instance or Blueprint can now be marked as not being relevant to level bounds.

  • New: UWindDirectionalSourceComponent can now be fully utilized or extended in external modules.

  • New: RowUpdate hotfixes can now add entries that do not use existing keys to rows for curve tables.

  • New: Boolean values in data tables can now be hotfixed.

  • New: ULevelStreaming now supports a priority setting that dictates which level is considered first when determining what to load, unload, or make visible or invisible. A higher priority streaming level is not guaranteed to be loaded before a lower priority one and will not preempt any operation that is in progress, but will be prioritized over others at the next opportunity to choose which streaming level to consider operating on.

  • New: Exposed GetDisableSplitscreenOverride on UGameViewportClient.

  • New: Multiple movie streamer plugins can now register themselves with DefaultGameMoviePlayer, which will pick the right one for startup movie playback based on file format.

  • New: Added HandleWalkingOffLedge to UCharacterMovementComponent. This wraps calls to the character's BP native event, making it easier to override.

  • New: Added HasAnyRootMotion to ACharacter and exposed it to Blueprints.

  • New: Changed display name of IsPlayingRootMotion to "Is Playing Anim Root Motion".

  • New: Added UCharacterMovementComponent support for separate max speeds for input acceleration versus requested speed in the ApplyRequestedMove function. Input can now obey one limit while the custom acceleration/speeds can be applied separately at a different limit.

  • New: Added new constructor for FScopedConditionalWorldSwitcher that enables explicitly swapping the global world state when ticking/handling events while Playing In Editor.

  • New: SetTimerForNextTick now returns the handle of the timer it creates so that you can cancel it.

  • New: FIndexedCurve now has a Duplicate function to allocate a copy of the curve using a pointer to the base class.

  • Improvement: Additional logging was put in to help track down problems when debugging player controllers.

  • Improvement: Improved Blueprint access to vector variables inside GameplayCueParameters structures.

  • Improvement: Improved header comments for Actor, ActorComponent, SceneComponent, PrimitiveComponent, and EngineTypes. We removed some old deprecated fields as well.

  • Improvement: Changed Engine default of tick.AllowAsyncTickCleanup to false. This costs about 200ns / tick on a phone, but prevents really big stalls in the case where level collections cause multiple ticks per frame.

  • Deprecated: Deprecated ConvertTransformToRelative() and replaced it with MakeRelativeTransform().

  • Deprecated: Introduced a new signature version of InputKey on ViewportClients. GameViewportClient overrides the old one as final, so GameViewportClient subclasses will need to upgrade, and it's marked deprecated there.

  • Removed: Removed the experimental StructBox plugin.

Localization

  • Bug Fix: Reworked String Table asset loading to better handle asynchronous loading:

    • Note: This change removes the need to fully-load string tables most of the time, and the FindOrFullyLoad option is no longer the default (FindOrLoad is). FindOrFullyLoad can still be specified, but be aware that it will do a blocking synchronous load, so only use it when it is definitely safe to perform a blocking load (ie, only in the editor).

  • Bug Fix: Avoid gathering default text instances from bytecode.

  • Bug Fix: Ensured the package localization ID is correctly migrated when renaming an asset.

  • New: Made string table dropdown searchable when selecting localization string.

  • New: Renamed the "Localise" UAT command to "Localize" (with an alias for the old name).

  • New: Exposed functions to query the available and most suitable languages from Blueprints:

    • GetNativeCulture, wraps FTextLocalizationManager::GetNativeCultureName.

    • GetLocalizedCultures, wraps FTextLocalizationManager::GetLocalizedCultureNames.

    • GetSuitableCulture, uses FInternationalization::GetPrioritizedCultureNames to find the best match from an array of cultures.

  • New: JsonStructSerializerBackend and CborStructSerializerBackend now have an option to write FText properties as their complex exported form (for example, NSLOCTEXT(...)) to correctly support localization.

    • This option is disabled by default for the existing constructor (which is now deprecated), however should be enabled for any new code that doesn't require backwards compatibility.

  • New: Made FTextChronoFormatter and FTextTransformer available to do localized string manipulation without an FText instance.

  • New: Allowed polyglot data to fallback to the LocRes data if it only provides a minimal patch:

  • This can be enabled by setting bIsMinimalPatch to true (default false) on your FPolyglotTextData to avoid the polyglot data from falling back to its native string for any missing translations, thus allowing missing translations to use their LocRes version instead.

  • New: Exposed GetCultureDisplayName to Blueprints.

  • Improvement: Translation Picker improvements:

    • Fixed the wrong culture being used when editing translations.

    • Fixed being unable to edit translations that contained package localization IDs.

    • Fixed crash when the UTranslationUnit being picked was GC'd.

    • Fixed places performing case-insensitive comparisons.

    • Improved the layout and made all fields copyable.

Networking

  • Crash Fix: Fixed a crash in OnlineBeaconClient when a socket error occurs during the initial connection handshake.

  • Crash Fix: BasicReplicationGraph no longer causes a shutdown crash when replicating actors with bOnlyRelevantToOwner set to true.

  • Bug Fix: Increased the max bunch header size from 64 bits to 256 bits to handle cases where a high channel index could cause the old limit to be exceeded.

  • Bug Fix: Fixed MessageBus unicast endpoint settings where specifying a network interface other than the default one would prevent receiving multicast traffic on some platforms.

  • Bug Fix: Fixed an issue where the net mode of an actor could be incorrect during the shutdown of a Play In Editor world.

  • Bug Fix: Prevented GetAddressInfo queries on HTML5 from failing when querying address information using the OnlyUsableAddresses operation flag.

  • Bug Fix: Properties that are updated while not Active or while they don't meet Replication Conditions will now be sent to clients when they become Active again, or when their conditions are met.

  • Bug Fix: Role and RemoteRole now stay in sync on Server and Clients when changing Possession.

  • Bug Fix: Fixed Android GetLocalHostAddr from stomping on address information when determining the best address. Additionally, invalid query flags can no longer be added to requests when using non-default GetAddressInfo flags.

  • Bug Fix: Fixed socket multicast membership functionality failing on iOS devices.

  • Bug Fix: FObjectReplicator’s UpdateUnmappedObjects function now calls CallRepNotifies after PostNetReceived to be consistent with the order in ProcessBunch.

  • Bug Fix: PostRepNotifies is now called from all code paths that issue rep-notifies.

  • Bug Fix: Cleared out ObjectReplicator instances without active objects from actor channels to prevent memory growth and performance degradation. This is done for channels still receiving data.

  • Bug Fix: Added a check to prevent the destruction of replicated level script actors when the associated actor channel is closed on a client.

  • Bug Fix: Fixed the handling of custom data channel definitions when set to open from server or client.

  • Bug Fix: Fixed GetAddressInfo queries failing on PS4 due to invalid address storage sizes.

  • Bug Fix: Fixed a crash that could occur when using the replication graph's "fast shared" functionality.

  • Bug Fix: Fixed an issue where some elements of a previous struct value passed to a repnotify function would be incorrect.

  • Bug Fix: Fixed address storage issues when using the messagebus module functionality on a strictly IPv6 platform.

  • Bug Fix: Steam authentication messages no longer underflow the serialization buffer when requesting resends.

  • Bug Fix: WritePackedVector no longer causes unexpected values to be written if any of the source values were very large.

  • Bug Fix: Socket Multicast TTL and Loopback functionality now perform the right socket operations based off the socket's construction data.

  • Bug Fix: Fixed Reliable multicast dropping for Actors that are still alive on the server, but not currently relevant.

  • Bug Fix: Stale actor pointers will no longer be left in the replication graph after seamless travel.

  • Bug Fix: Fixed default scale when serializing new actors.

  • Bug Fix: Attached Actors are now properly updated on clients when moved on the server.

  • Bugfix: Fixed a rare case where in an IPv6 environment, storing an IPv4 address would be improperly handled due to a missing bit operation.

  • Bugfix: Fixed replication for TSoftObjectPtr/Soft Object Reference properties (and class versions), they will now replicate properly if the referenced object is not in memory

  • Bugfix: Increased the max bunch header size to 256 bits from 64 bits to handle cases where a high channel index could cause the old limit to be exceeded.

  • Bugfix: Bunches created in ReplicateActorListsForConnection_FastShared (in UReplicationGraph) now set their channel type correctly.

  • Bugfix: Fixed internal data issues with tracking Steam network communications between players when projects made use of multiple online beacons.

  • New: Steam network connections can now specify an cleanup timeout value in their engine configs (P2PCleanupTimeout in the [OnlineSubsystemSteam] section). This creates a window between a disconnection and when the connection data gets fully cleaned up to protect against lingering messages attempting to reopen the connection. By default, this value is 1.5 seconds. If set to 0, all disconnected connections will be cleaned up immediately.

  • New: Added a new configuration flag for disabling SteamNetworking from being the default socket subsystem when using the Steam OSS. This enables projects to use alternative netdrivers (like the IpNetDriver) and network subsystems instead of Steam. To do this, set bUseSteamNetworking to false in the platform's engine configuration.

  • New: PacketHandlers can now be configured on a per NetDriver basis, enabling targeted application of packet handler functionality. To use this feature, update the platform Engine configuration files to target the desired NetDriver like this:

    • [ExampleNetDriverName PacketHandlerProfileConfig]

    • +Components=ExamplePacketHandlerModuleInterface

  • Where ExampleNetDriverName can be any valid NetDriver name (for example, GameNetDriver). When a profile exists for a NetDriver, that NetDriver will ONLY load the components listed for that profile. The order of the PacketHandler components still matters, so make sure it is the same for all platforms. If a NetDriver does not have a profile configuration, it will fall back to loading the components as listed by the PacketHandlerComponents section in your configuration files.

  • New: IP address network serialization now supports additional network protocols.

  • New: Added a network driver definition name for online beacons to use rather than always using the game net driver.

  • New: Network sockets now keep track of the protocol information that was used to create it during construction.

  • New: The NetworkProfiler has been updated to support and display all supported address types, regardless of protocol. This allows for full support for SteamNet, IPv6/IPv4 Address, Oculus IDs, etc. Older profiles will still be readable by the tool interface.

  • New: The ReplicationGraph DebugActor can now be overridden.

  • New: Modified online beacon connections from a dedicated server to use the server unique network identifier.

  • New: Added an optional multihome parameter when initializing a hosting IpNetDriver to indicate a specific bind address.

  • New: Added a call to allow network drivers to modify the default behavior of destroying an actor when a channel is closed.

  • New: Made changes to better support multiple active network drivers running in a world context.

  • New: Replication Graph: Dynamic Spatial Frequency Node. -This node recalculates replication frequency per connection, based on the connections view angle and position. -This node is different in that it replicates actors directly in place, rather than returning a replication list for the generic prioritization/replication functions. -Actors replicated by this node use their own bandwidth limits. -Supports normal replication and fast/shared replication.

  • New: Added a new ping calculation method which only uses the fastest packets received over a given time period. This allows us to use the packets which were processed by the server and client more quickly after reaching them which produces more accurate calculations. This is currently experimental and not being actively used.

  • New: Added some missing tick categories on servers for CSV profiles.

  • New: Changed an ensure in the Fast TArray Serializer and an ensure in the Ability System Component to warnings because they are rare and not critical issues.

  • New: When simulating packet loss using the Pktloss setting, PktLossMinSize and PktLossMaxSize have been added to also be able to set the minimum and maximum packet sizes to drop

  • New: The net driver and net connections now track how many RPCs and packs have been sent

  • Improvement: Optimized SerializeIntPacked in FBitReader and FBitWriter.

  • Improvement: Networking related types (UNetConnection, UNetDriver, UPackageMap, and supporting structs, etc.) have better reporting in Obj List.

  • Improvement: Reduced number of cache misses when processing received acknowledgements in NetConnection by tracking written channels per packet and using this information to only touch relevant channels.

  • Improvement: Overrode SerializeIntPacked in FBitReader and FBitWriter. This is a minor performance optimization.

Replays

  • Crashfix: Fixed a crash that could occur during replay playback when streaming in sub levels.

  • Crashfix: Fixed a crash in replay checkpoint recording if the streamer destroyed the checkpoint archive during a flush.

  • Bugfix: Added missing function implementation to the replay net connection.

  • Bugfix: Fixed rep notify functions not being called for dormant actors in replays when queued bunches are disabled.

  • Bugfix: Fixed a crash that could occur while recording a replay on a client.

  • Bugfix: Fixed a replay bug where previously destroyed Net Startup Actors in sublevels may be respawned multiple times.

  • Bugfix: Properly timeslice actor prioritization for replays, and send destruction info first. This fixes "well of despair" issues that can arise from having too many replicated replay actors.

  • Bugfix: Fixed issue with net field exports in replays not being marked acknowledged immediately, causing them to replicate multiple times.

  • Bugfix: Fixed a crash in the replication graph during seamless travel due to world settings not being cleaned up.

  • New: Added additional replay error codes and logging for playback failures.

  • New: Removed unused cpp type data from serialized net field exports in replays.

Online

  • Crash Fix: Fixed a crash in the XMPP library libstrophe on client disconnection, when there were multiple clients.

  • Crash Fix: Fixed crashes in the PushSample function in FVoiceDelayBuffer when FVoiceCaptureWindows is initialized with an empty device name.

  • Crash Fix: Steam Dedicated Servers no longer crash on LAN due to invalid account information. Servers now send out the correct Steam LAN account identifier.

  • Crash Fix: Trying to matchmake as a Steam Dedicated Server no longer causes a crash.

  • Bugfix: Changed Steam server matchmaking data filters such that pushing server information doesn't overflow the buffers by default, printing out erroneous warning messages.

  • Bug Fix: Warnings about Steam being disabled no longer appear in Editor mode.

  • Bug Fix: Steam matchmaking queries will no longer stall out when attempting to search for new lobbies while the player is already in a lobby.

  • New: Added the "-SteamServerName" command-line option to enable developers or server hosting providers to set Steam dedicated server names/titles of up to 63 characters at application launch. The name will appear on the external server browser UI (and in some cases, in game). This also fixes an issue where servers running on a headless Steam instance (not logged into an account) would show up in server browsers as the dedicated server's numeric ID.

    • Example usage: -SteamServerName="My Test Server”

  • Bug Fix: Fixed a bug with Google REST login where OAUTH scopes were reset during logout, but the default scope was not being retained.

  • Bug Fix: Added detection for several error cases when sending a friend request. These are enumerated in ESendFriendInviteFailureReason.

  • New: Some error responses inside FOnlineError may have changed as we are working toward a more common expression of errors. Please review any error constants that your code compares against directly, and change them to use the new error-checking functionality in FOnlineError where appropriate.

  • New: Added support for disabling Facebook analytics on iOS. IOSRuntimeSettings now has two new variables for controlling Facebook analytics, bEnableAutomaticLogging and bEnableAdvertisingId. Refer to the Facebook documentation on their webpage for details.

  • New: Facebook SDK has been upgraded to 4.38.1 for iOS and 4.39 for Android. Some modules that are not required for login functionality are disabled by default.

  • New: Added file streaming uploads to the HTTP module.

  • New: Updated OpenSSL to version 1.1.1 on Windows platforms.

  • New: Updated included WebRTC library on Windows Platforms to WebRTC release 70.

  • New: Added the VivoxVoiceChat plugin.

  • Deprecated: Google+ scope used for Google login has been updated to use the basic userinfo scope.

  • Removed: Removed usage of libjingle as an XMPP provider on Windows targets, in favour of the libstrophe XMPP provider.

Online Subsystem

  • Bug Fix: PS4 User presence is filled out correctly now in all cases.

  • Bug Fix: The IsChatDisabled function on Playstation 4 no longer leaks NP requests.

  • New: Implemented StoreV2 and Purchase interfaces for OnlineSubsystemNull.

  • New: We now handle push notifications for changes to friend presence and friend add/remove events on Playstation 4.

  • New: All session and friend tasks on Playstation 4 that were done with the WebAPI now use the NpToolkit equivalents instead.

  • New: The Presence Interface on Playstation 4 now stores the game status string in the StatusStr field, as opposed to keeping it as a key-value property.

Physics

  • Bug Fix: Added PruneEmittersOnCookByDetailMode as a cvar to prevent any warnings in the log.

  • New: Added tracking for PhysX tasks for CSV profiles.

  • New: Merged LLM profiling category tags for PhysX.

Clothing

  • New: Remap clothing parameters on asset re-import.

  • New: Added feature to copy clothing assets from an existing skeletal mesh.

  • New: Added a feature that allows you to copy clothing assets from an existing Skeletal Mesh.

  • New: Added Remap Clothing Parameters on asset re-import.

  • Removed: Engine/Source/ThirdParty/PhysX was removed. Engine/Source/ThirdParty/PhysX3 should be used instead.

Physics Asset Editor

  • Bug Fix: Fixed the mirroring operation to rotate/translate.

Rigid Bodies

  • New: Exposed some properties for AnimDynamics (ComponentLinearAccScale, ComponentLinearVelScale) and RigidBody (ComponentLinearAccScale, ComponentLinearVelScale, OverrideWorldGravity) anim nodes as pins.

Platforms

  • Bug Fix: We now allow files opened by OpenWrite with bAllowRead set to true to also be read (opened in read/write mode) on Microsoft platforms. This makes them consistent with the behavior of other platforms.

  • Bug Fix: Microsoft platform file handles are now allowed to seek beyond the end of the file. This makes them consistent with the other platform file handles, which aren't asserting in this case as it is valid to seek beyond the end of a file, but reads and writes to that point may fail.

  • Bug Fix: Fixed incorrect VectorShuffle implementation on ARM Neon.

  • Bug Fix: Fixed error caused by building DotNETUtilities and then failing to package for IOS using the Unreal Automation Tool BuildGraph on PC.

  • Bug Fix: Fixed issue where the log would show iOS provisioning warnings when packaging for other platforms.

  • Bug Fix: We now make sure to check if GEngine and GameUserSettings are initialized at the time HDR settings are set.

  • New: Added RT write mask support to the UI composition shader. This is a good speedup on platforms that support the write mask when running in HDR mode and there is no/little UI drawn.

  • New: Implemented IFileHandle::Flush and IFileHandle::Truncate for all platforms.

  • New: Added iOS support for the Device Output Log window for both viewing log output and issuing console commands

  • New: Bitcode support is now available for tvOS projects (required for submission).

All Mobile

  • Crash Fix: Fixed an issue that caused mobile projects to crash with Event Driven Loader disabled.

  • Bug Fix: Fixed an issue where the splash screen was closed too quickly when not using startup movie or early preload screen, leaving several seconds of black before the level loaded.

  • New: Added a command line option to allow overriding of platform when loading scalability config files. This is useful for testing with PIE. '-ScalabilityIniPlatformOverride=Android'.

Android

  • Bug Fix: Fixed an issue where movie player materials drawn as UMG widgets would appear darker when running in ES2 Mobile Preview than either SM5 or on device.

  • Bug Fix: Fixed incorrect logging of Unicode strings on Android.

  • Bug Fix: Fixed issue where a Cook on the Fly process does not finish after closing the app on Android.

  • Bug Fix: Added a missing import for Android advertising module.

  • Bug Fix: Android NDK is now validated before before compiling.

  • Bug Fix: Exceptions from MediaExtractor are now handled when trying to stream movies.

  • Bug Fix: Added GetMaxPathLength for Android as it was missing.

  • Bug Fix: Fixed misconfigured MallocBinned2 which saves a modest amount of memory on Android.

  • Bug Fix: Memory report logging is now suspended on backgrounding.

  • Bug Fix: Fixed issue with compiler executable paths with spaces on Android.

  • Bug Fix: Fixed the TextureFormats variable in configrules.

  • Bug Fix: Fixed Mali debugger paths to work on Mac and Linux.

  • Bug Fix: Notification body details now set as second line of notification on Android 5.0+ instead of the ticker.

  • Bug Fix: Track info extraction for startup movies is now skipped on Android since it is not needed.

  • Bug Fix: The SlateUI.MaterialExpressionTextureBase for the WebTexture materials is now linked to the WebTexture Renamed the transparent material as WebTexture_TM to correctly identify the material in the Content Browser.

  • New: The engine version is now available in Unreal Plugin Language (UPL)

    • $I(EngineMajorVersion) = major version of engine (ex. 4)

    • $I(EngineMinorVersion) = minor version of engine (ex. 22)

    • $I(EnginePatchVersion) = patch version of engine (ex. 0)

    • $S(EngineVersion) = engine version string (ex. "4.22.0")

  • New: Currently selected build options are now shown in the log during packaging for Android.

  • New: Added support for using display cutout region on Android.

  • New: Added new project setting bUseDisplayCutout - Temporary restriction to HUAWEI devices for this release.

  • New:Android now supports playing media files from PAK files (encrypted PAK files require Android 6.0+ for this to work)

    • Supports both streamer (startup movies) and MediaPlayer.

    • Uses direct file sourcing if uncompressed and unencrypted in PAK file.

    • mp4 files in PAK files are now marked as uncompressed in response file to support this.

  • New: Added GetGamepadControllerName to get the name of the attached controller. This is the identifier used for mapping, not necessarily from the device itself.

  • New: Upgraded to Google Play Games 3.0.1 native C++ SDK.

  • New: Added checkbox to request EnableSnapshot during login to Google Play Games.

  • New: Features requiring depth buffer access such as soft particles, decals, and modulated shadows now work on most ES 3.1 devices even when MobileHDR is disabled, provided they have the framebuffer_fetch_depth_stencil extension.

  • New: We now check for errors when opening URL-based Android movie playback.

  • New: Added support for glap gamepad for Android.

  • New: Added some protection to controller polling for Java exceptions.

  • New: UWebBrowserAssetManager has been put under WITH_EDITOR || PLATFORM_ANDROID || PLATFORM_IOS.

  • New: Added support for Razer controllers in Android input and made the trigger threshold in line with other platforms.

  • New: r.Vulkan.DelayAcquireBackBuffer is now used by default on Android Vulkan. This helps stabilize the frametime by reducing the stalling effects of GameThread + RenderThread + RHI Thread, but only 3 backbuffers. This costs 1 extra blit, but is worth it to reduce periodic hitching.

  • New: Enabled support for PF_R8G8B8A8_SNORM on Android devices supporting GLES3.0 and above.

  • Improvement: Improved handling of AKEYCODE_BACK with gamepads.

  • Removed: Removed SDK API level missing error if Gradle is enabled since it can download it if necessary.

HTML5

  • Bug Fix: Only latest headers are stored when HTTP is detected.

  • New: WASM multi-threaded support has been added. (EXPERIMENTAL: note offscreen framebuffer only -- offscreen canvas coming soon)

  • New: Emscripten toolchain upgraded to 1.38.24.

iOS

  • Crash Fix: Fixed a crash caused by both MSAA 8X and depth of field being enabled.

  • Bug Fix: Fixed windows BinnedAllocationGranularity, saving quite a lot of memory.

  • Bug Fix: Fixed issue where a project with Preferred Landscape Orientation set to Left Home Button still launched on iOS devices oriented with the home button to the right.

  • Bug Fix: We don't zero-init threadgroup variables in Metal shaders anymore - it isn't necessary and causes shader compilation problems.

  • Bug Fix: Fixed issue where locking an iOS device before or during startup movie playback could cause the app to hang or display a black screen upon resuming the app.

  • Bug Fix: Added support for saving games to iCloud using the ISaveGameSystem interface, on both iOS and tvOS. Enable it in Project Settings, iOS with the iCloud Save File Sync Strategy setting.

  • Bug Fix: Fixed issue where iOS Media Player would pause when unplugging headphones from device.

  • Bug Fix: Export all the caps bits for more recent tvOS versions.

  • Bug Fix: Updated the expired Apple Worldwide Developer Relations CA certificate, replacing it with the one from https://developer.apple.com/support/certificates/expiration

  • Bug Fix: Fixed device profile support for iPhone XS, iPhone XS Max, and iPhone XR.

  • Bug Fix: Added a workaround for Apple A11 & A12 GPUs not clamping F32->F16 conversions to F16_MIN/F16_MAX like the A10 and earlier which meant reflection brightness of 0 would generate INF.

  • Bug Fix: Advertising Identified (IDFA) code for iOS is now optional in the Engine.

    • This can be changed by the new setting "Enable Advertising Identified (IDFA)" in Settings >> iOS >> Build.

    • This setting is enabled by default.

  • Bug Fix: For iOS distribution builds, the entitlements have a modified syntax comparing to the entitlements section from the mobileprovisioning file. When signing the ipa, the iPhonePackager uses the values from the mobileprovisioning file. Added filters to validate the entitlements before sending them as parameter for the codesign tool.

  • Bug Fix: We no longer throw a warning about text shaders on iOS when cooking from Windows - as XGE shader compilation is on by default and disables remote shader compilation all Windows-based builds of iOS projects will always use text shaders unless you first disable XGE shader compilation.

  • Bug Fix: Added a fix for iOS reflection captures when using the Metal desktop renderer.

  • New: Adding IOS Cursor to better support UI navigation on IOS.

  • New: Added an option for "Force 32bit Floating Point Precision" to the iOS project settings to have the shader compiler promote all half-float operations to FP32 as some projects on iOS encounter rendering issues when fragment shader calculations run into half-float precision limits.

  • New: Memoryless render-targets for MSAA textures are now used when using the mobile renderer on iOS where we never sample from the MSAA texture itself. When a texture does not ask for SRV or UAV support we can also use memoryless.

  • New: Added support for separate MSAA and resolve targets on Metal MRT for iOS devices - this means the Forward renderer can support MSAA the same way as on macOS. This isn't the optimal solution but is necessary to get it to work.

  • New: Added a new CVar "rhi.Metal.CacheShaderPipelines" which controls whether we cache Metal graphics pipeline states for the lifetime of the program.

    • This defaults to 1 (on) which preserves the existing behavior and improves performance at the expense of memory.

    • This can also be set to 0 in the project configuration to release PSO memory back to the OS once all RHI references are released.

    • This will save memory but at the expense of performance as PSOs will have to be recreated on-demand.

    • Even when this is disabled, RHI objects will still share references to a single Metal instance of each PSO.

  • New: Added the ability to push individual files to iOS using DeploymentServer.exe. Eg: DeploymentServer.exe copyfile -bundle com.myco.myapp -file "C:\Temp\UE4CommandLine.txt" -file /Documents/ue4commandline.txt

  • New: Added the ability to easily download the Documents and Library folders from an iOS device for a single app using DeploymentServer. The backupdoc command requires a -bundle and an identifier, and the first -file argument specifies the destination directory, defaulting to the current folder. Eg: DeploymentServer.exe backupdocs -bundle com.myco.myapp -file D:\temp

  • New: As Metal now supports layered rendering on the A12 GPU, we can support most of the features that require it on the Metal Desktop Renderer for iOS when using this GPU. These features are disabled on earlier GPUs.

  • Removed: XGE shader compilation has been disabled for IOS temporarily while we track down an issue related to it.

Linux

  • Crash Fix: Fixed crash in WebMMovieStreamer that was caused by playing more than one startup movie.

  • Bug Fix: Fixed UBT makefile generator not handling .target.cs with all lowercase.

  • Bug Fix: Updated default starting program for uprojects to UE4Editor.

  • Bug Fix: Fixed UnrealVersionSelectors slate window and defaults for running a uproject shortcut.

  • Bug Fix: A fix was added to avoid forcefully raising windows and stealing focus.

  • Bug Fix: Fixed iterative deployment when launching on to a Linux device.

  • Bug Fix: Fixed touch events handling.

  • Bug Fix: -fstandalone-debug is now avoided in monolithic builds.

  • Bug Fix: Fixed some focus issues for context menus.

  • Bug Fix: Fixed pointer barriers on resize/move and multi-monitor.

  • Bug Fix: NumStackFramesToIgnore is now respected when triggering Asserts.

  • Bug Fix: Fixed streaming issues on Linux headless clients due to viewport being zero-sized.

  • Bug Fix: Failure to init inotify will no longer result in a cooking error.

  • Bug Fix: The best clock is now always selected, avoid using CLOCK_REALTIME which might be unreliable.

  • Bug Fix: Reverted popup menus back to being set as a popup window versus a borderless window.

  • Bug Fix: Removed extra resize on window creation that was being caused by an off by one error.

  • New: Updated editor version of libvpx to match versions.

  • New: WebM movie streamer: SDL audio support added.

  • New: You can now preload the main module symbol file for more reliably faster runtime crash handling at the cost of loading the symbol file into memory at start with this command line: -preloadmodulesymbols

  • New: .NET framework is no longer forced, as the bundled Mono supports the latest version now.

  • New: Symbols are now hidden by default in monolithic builds.

  • New: Updated LLVM version to 7.0.1.

  • New: Added compiler-rt libraries.

  • New: Updated the toolchain to v13 toolchain (clang 7.0.1).

  • New: WebM: added media streamer implementation.

  • New: Updated Mono to the same version as Mac's: 5.16.0.220

  • New: Recognize misaligned access error and print message accordingly

  • New: WebM: added support for additional codecs: VP8 and Vorbis to fully support webm specification. Changed file extension from mkv to webm.

  • New: MediaShaders: Added the ability to crop images during YUY conversion.

  • New: Added Python scripting support.

  • New: Added support to generate binaries with profile-guided optimization (requires toolchain v13).

  • New: Added a new command line option to specify a signal to use a default signal handler rather then setting it to ignore -sigdfl=.

  • New: EGL device for offscreen rendering can now be chosen with -egldevice=N commandline argument.

  • Improvement: Optimized runtime crash time symbolication.

  • Improvement: Optimized dump_syms while linking by 30-50%.

  • Improvement: Reduced the size of the Linux binaries.

  • Deprecated: Only clang 6.x and 7.x are supported for 4.22.

  • Deprecated: Debug CEF3 library has been removed (it was 1 GB in size, while it wasn't used that much).

  • Removed: Removed all setlocale() calls so lowercasing/uppercasing logic matches other platforms.

Mac

  • Crash Fix: Fixed a crash in MacToolChain caused by an attempt to access null bundle path when linking a plugin during hot reload

  • Crash Fix: Fixed crash at exit on Mac that could happen if quit action was initiated during windowed to fullscreen transition.

  • Crash Fix: Fixed a race condition in the Mac startup movie player that could cause a crash due to checking movie status before it was loaded.

  • Bug Fix: Fixed an issue with Git LFS to allow it to work in the Git plugin.

  • Bug Fix: Fixed issue where the Material Editor was unable to execute the Mali Offline Compiler on Mac when using the Platform Stats feature.

  • Bug Fix: Fixed creation of texture 2d arrays and handling of texture2darray.gather in Metal.

  • Bug Fix: Re-enabled managed buffer sub-allocation as it works now - this reduces the cost of allocating buffers on macOS Metal.

  • Bug Fix: Fixed Metal error reporting when a vertex stream doesn't have enough data to work.

  • Bug Fix: Disabled Window->Enable Fullscreen menu item in Mac editor until we are able to properly support editor's fullscreen mode on Mac.

  • Bug Fix: Fixed the swizzle on Metal for reads from a RWTexture as the Metal function always returns as a vector-4.

  • Bug Fix: Fixed debug formatter for TArrays with inline-data allocators.

  • Bug Fix: Fixed the problem with Mac native window buttons not hiding in the editor viewport's immersive mode.

  • Bug Fix: Fixed issues with Content Browser on Mac showing duplicate folders for folders created using Finder with names containing certain unicode characters.

  • Bug Fix: Better handling of mixed atomic/non-atomic operations in Metal shaders.

  • Bug Fix: Fixed a problem with paths to third-party frameworks in Mac toolchain that was preventing these frameworks from being visible to the compiler.

  • Bug Fix: A fix was added to resolve heap-use-after-free bugs in Metal timer queries.

  • Bug Fix: For macOS games we can now use the present convenience functions, which helps profiling & capture tools understand the frame. The Editor still uses the lower-level API in order to correctly handle multiple and/or hidden windows.

  • Bug Fix: For Metal shaders, we now only zero-initialize non-const, non-struct, statics in hlslcc to match fxc and no longer generate incorrect initializers that fail to compile.

  • Bug Fix: Added more fixes for ByteAddressBuffers on Metal, allowing usage of the 2 parameter Interlocked functions and fixing swizzling on Store operations.

  • Bug Fix: We now make sure that we enforce the minimum Metal version to match the shader compiler.

  • Bug Fix: Fixed the validation of Metal parallel encoder validation in the mtlpp library.

  • Bug Fix: Fixed the handling of float3 Buffer/RWBuffer in Metal which was accidentally broken.

  • Bug Fix: Disabled the intermediate back-buffer in MetalRHI and instead we now render directly into the drawable texture which is much faster. We now make this texture available for read-back via the various mechanisms used for screenshots and movie capture using the mtlpp auto-released handles so that we don't need to worry about retain/release order.

  • Bug Fix: We no longer force MetalRHI to reallocate render-targets or depth-stencil surfaces that were marked as ShaderResource by disabling the PixelFormatView usage flag, as it makes no sense to do so.

  • Bug Fix: Metal pre-compiled header compilation is now tied to the specific Xcode build, not just the metal compiler version, to ensure that it is recompiled when appropriate.

  • Bug Fix: Separated Metal buffer tracking stats from LLM.

  • Bug Fix: We no longer allow Metal blit/compute work to overlap with previous render passes, as it causes a lot of problems.

  • Bug Fix: Fixed the handling of Metal shader versions so that warnings are shown when a user runs on the wrong OS and so that text shaders are compiled with the correct version.

  • Bug Fix: Fixed a memory leak in Metal's RHIReadSurfaceData.

  • Bug Fix: Fixed a pixel artifact showing in curve editors on Mac.

  • Bug Fix: Fixed issues with removing degenerate polygons when importing FBX meshes on Mac.

  • Bug Fix: Expanded a previous Metal workaround to more places to help the Nvidia driver compile tessellation shaders.

  • Bug Fix: Fixed an issue in Mac output log window that could cause the editor process to freeze on exit.

  • Bug Fix: We now use the custom-header parsing API for the Metal side-table index and centralize the printing of Metal types to make it easier to comprehend.

  • Bug Fix: Simplify the way tessellation shaders are compiled on Metal to reduce the time they take to instantiate at runtime by removing the use of function constants.

  • Bug Fix: A pool of render pass descriptors is now used and more scoped timers have been added for inspecting where time goes in MetalRHI.

  • Bug Fix: Fixed issues with menu and tooltips placement in some configurations that mix low and high DPI monitors.

  • Bug Fix: Disabled parallel Android texture compression on Mac due to thread safety issues with Qualcomm's Mac TextureConverter.

  • Bug Fix: The initial dispatch in a render pass is now allowed to be committed to the prologue encoder for Metal. This ensures ordering of tessellation dispatches versus the GPU scene update dispatch, but can punt any dispatch without prior dependencies which can help performance.

  • Bug Fix: Fixed MetalRHI to allow beginning, ending and accessing render queries without submitting frames as used by the new GPU startup profiling code.

  • Bug Fix: Solved an issue on Mac with child window contents not updating properly if its parent was minimized.

  • New: 10.13.6 is now the minimum version of macOS required by UE4 for games and the editor.

  • New: Non-monolithic targets on Mac now store their dylibs directly in Binaries/Mac folder instead of inside the app bundle.

  • New: Modified the Mac message box asking users to update to latest macOS to show once for every engine release.

  • New: Changed the default keyboard shortcuts for editor viewport's immersive mode and blueprint debugger's step into command to use Cmd+F11 instead of F11 on Mac to avoid conflict with default macOS Expose shortcut.

  • New: Changed the default setting for Mac scroll gesture direction from "Standard" to "Use System Settings".

  • New: Changed Mac Build.sh script to simply pass arguments to UBT so that it behaves the same as Windows and Linux equivalents. This should make it easier to use for people invoking it directly from the terminal or other scripts. Also, it can now be run from any directory. The old form of this script that translates Xcode params to UBT params still exists, renamed to XcodeBuild.sh and Xcode uses that now.

  • New: Updated text in the notifications about old or missing Xcode to be more helpful and let users know how to make sure correct Xcode version is used.

  • New: Added a compile-time asserts to Mac and iOS PlatformCompilerSetup.h header files to display an error message when attempting to build with Xcode version older than 9.4.

  • New: Configured the Metal pipeline state buffer descriptor table on macOS and iOS versions that support the feature to tell the driver which resources are likely to be modified or not.

  • New: Rewrote the MetalRHI fencing code so that MTLFence can be enabled by default on macOS and iOS versions that support the feature. This allows us to use MTLHeap to allocate MTLBuffer resources which can significantly reduce driver overhead on the CPU.

  • New: Added headers which can be included before and after Apple system headers (PreAppleSystemHeaders.h and PostAppleSystemHeaders.h), to avoid errors due to mach-o/loader.h redefining PLATFORM_IOS and PLATFORM_TVOS.

  • New: Added command-line arguments:

    • "nometalparallelencoder" to disable parallel encoders.

    • "nometalfence" and "nometalheap" to disable MTLFence and MTLHeap respectively.

  • New: The ability has been added to emulate atomic operations on Texture2D for Metal by creating textures marked as TexCreate_UAV|TexCreate_NoTiling from MTLBuffers as Linear Textures, which means we can bind the buffer for the atomic operations and the texture for normal operations. There may be a performance penalty and unexpected cache interactions with this approach and it is not used anywhere in the engine yet.

  • New: Added search paths for git.

  • New: Added support for the new MTLDispatchType control for compute command encoders to mtlpp and then use that to enable Concurrent dispatch for the async compute context for macOS 10.14 & iOS 12 and later.

  • New: Index buffer SRVs & UAVs now work on Metal.

  • New: Added support for Nintendo Switch Pro Controller and newer versions of PS4 and Xbox One controllers for Mac.

  • New: Added support packed vector types (e.g. 12-byte float3) in RW/StructureBuffer types in Metal shaders.

  • Improvement: We now keep sampler names in Metal shaders - makes it easier to debug compilation.

  • Improvement: There is no advantage in Metal to making visibility buffers use Managed memory, so just use Shared on both macOS and iOS.

  • Improvement: Improved the code for detecting Xcode install. The editor will no longer try to compile Metal shaders using offline compiler if it's missing (for example if only the command line tools are installed or they are set as default).

  • Removed: Removed bHasRegularUniformBuffers from the MetalShaderFormat because it is no longer required - Metal always uses real uniform buffers.

Windows

  • Crash Fix: Fixed a crash that occurred when text was selected in the Windows console for more than 25 seconds.

  • Bug Fix: The Editor on Windows now correctly detects attached iOS devices and allows you to target specific devices for Launch.

  • Bug Fix: Fixed startup movies on Windows not playing when no audio devices are enabled and hanging when audio devices are disabled during playback.

  • Bug Fix: Windows media can now be paused using 'Native Audio Out'.

  • Bug Fix: Fixed startup movie audio continuing to play on Windows platform after application has been closed.

  • New: Startup movies on Windows platform can now be 1920x1080 (resolution is no longer required to be a multiple of 16).

  • New: Windows startup movies now can handle more situations that cause playback to be interrupted.

  • New: WebMMediaPlayer: added Windows as supported platform.

Rendering

  • Crash Fix: Fixed a crash in the RepaintCanvas function in UCanvasRenderTarget2D.

  • Crash Fix: Fixed a final-delete while in flight crash on DX12.

  • Crash Fix: Fixed a crash using Pixel Inspector on Mac Editor.

  • Bug Fix: Fixed an issue where duplicated instanced static meshes would not render until their transform was updated.

  • Bug Fix: Fixed an issue where FColor::MakeRandomColor would return white.

  • Bug Fix: Applied change for RenderDoc settings object so that settings are now properly saved.

  • Bug Fix: Fixed an issue with AMD drivers where users were not able to run UE4 in Windows Vulkan Editor when using drivers ranging from 18.2.2 to 19.2.1 due to incompatibility. These drivers are now blacklisted.

  • Bug Fix: Fixed an issue where imported PNG files were flood-filling 0-alpha white pixels.

  • Bug Fix: Fixed an issue in morph targets causing render resource destruction to run on the game thread during a garbage collect. This was caused by an additional vertex buffer and SRV being added to the morph target vertex buffer info struct, which was not explicitly cleaned up in ReleaseRHI.

  • Bug Fix: Fixed an assert that could happen with CreateCanvasRenderTarget2D when running from commandlet. For example, this could happening during packaging.

  • Bug Fix: Resolved an issue where Decals were rendering in the main pass when bRenderInMainPass is false.

  • Bug Fix: When UAV is bound in D3D11 RHI, it will now explicitly unbind any VB/IB that reference the same resource.

  • Bug Fix: Fixed an invalid shader generation when repeatedly toggling Forward Rendering on and off in Project Settings.

  • Bug Fix: Made DX12 stencilref behavior consistent with other RHIs.

  • Bug Fix: Disabled Dual Lobe in Forward Rendering due to graphical artifacts since Subsurface Profile is not supported.

  • Bug Fix: Added missing UAV and SRV for texture arrays on Vulkan.

  • Bug Fix: Fixed and issue where batched sprites were sometimes redrawing multiple times during the same frame which could cause flickering.

  • Bug Fix: DrawDebugLine now respects bPersistentLines rather than using default lifetime.

  • Bug Fix: Stopped mysterious cooker asserts caused by a missing "&=" when processing whether batches of shader compiles were successful.

  • Bug Fix: Fixed post opaque extension running before lights.

  • Bug Fix: Removed Float16 values from BC6H which aren't correctly handled by the ISPCTextureCompressor.

  • Bug Fix: Fixed an issue where CopyTexture would return after copying the first mip when using Bypass Mode.

  • Bug Fix: Made the RenderDocPlugin module init be wrapped inside of WITH_EDITOR since it's not expected to work in a standalone build.

  • Bug Fix: Fixed an issue with Particle Cutouts where an alpha threshold of 0 would disable the feature. An alpha threshold of 0 now culls regions with exactly zero alpha.

  • Bug Fix: Fixed occlusion queries in Vulkan being read from the wrong frame when the CPU outruns GPU.

  • Bug Fix: Fixed the eyedropper not working in the Editor Color Picker panel on Mac.

  • Bug Fix: On Vulkan, we corrected the buffer to use the size of our "In Rect" rather than the size of the Texture, which is not always the same size as the buffer.

  • Bug Fix: Fixed an issue where updating a preview window would cause a "Compiling Missing ViewMode Shaders" dialog to always appear.

  • Bug Fix: Fixed Pixel Streaming Matchmaker web server for the parameters "matchmakerPort" and “httpPort”, which were mistakenly set as const.

  • Bug Fix: Fixed a static initialization ordering issue with the "GetIdentityPrimitiveParameters" function sometimes being called before FMatrix::Identity was actually initialized.

  • Bug Fix: Fixed static analysis warning in Win64 (PVS-Studio).

  • Bug Fix: Fixed errors compiling shaders when the editor executable is not in Engine/Binaries/Win64.

  • Bug Fix: Support the LOD argument on SRV .Load operations when compiling shaders with hlslcc.

  • Bug Fix: Fixed crashes when painting meshes with textures.

  • Bug Fix: Fixed issue where a actor's desired draw distance would sometimes fail to update.

  • Bug Fix: Improve video media playback quality by selecting correct H.264 decode pixel formats, color transform matrix and point sampling for the Luma texture during conversion.

  • Bug Fix: Fixed crashes caused when creation of a particle system component fails and returns a null pointer.

  • Bug Fix: Fixed quantization issue on coat material for low and high base color.

  • Bug Fix: D3D12 RHI - GPU idle time between commandlists is deducted from ProfileGPU results.

  • New: Added the CVar, r.ShaderPipelineCache.StartupMode to control what mode the PipelineCache starts in so we can control whether it starts paused (0), in 'fast' mode (1 - default), or in 'background' mode (2).

  • New: Added Ray tracing support for Alembic geometry cache

  • New: Fixed a material update problem with the particle component.

  • New: Easily opt out of all ray tracing features using the "-noraytracing" command line argument. Disables all ray tracing features even if they are enabled for the project.

  • New: Track down GPU hangs on NVIDIA cards with the help of "VK_NV_device_diagnostic_checkpoints", which can be enabled using the command r.GPUCrashDebugging=1.

  • New: Support for socket location is now available in Blueprint with the "Find Socket" node for Static Meshes.

  • New: Added debug console variables to disable back-face culling and any-hit shaders for all ray tracing geometry instances.

  • New: Added "SF_NumStandardFrequencies" that covers standard SM5 shader frequencies (excluding new ray tracing frequencies).

    • Some of the usage of "SF_NumFrequencies" is replaced with “SF_NumStandardFrequencies” to avoid memory and run-time overhead from new shader frequencies on platforms that don't support them.

  • New: Added support for OpenColorIO color space transformation on GPU using library v1.1. It’s accessible from Composure or Blueprint nodes.

  • New: Changed the name of the "Metal Desktop Forward Renderer" to “Metal Desktop Renderer” for the iOS platform since you can choose between the Forward and Deferred Renderer.

  • New: Pipeline State Object (PSO) caching now records game-side custom usage masks when collecting PSO's at game run time.

    • These can be based on render quality settings or any other desired feature defined by the game enabling a smaller subset of PSOs to be recompiled on load rather than the whole cache.

  • New: Foreground DPG now works for SimpleElementCollector which is used by many engine debug utilities like DrawDebugSphere.

  • New: REnder Command scopes have been added to buffer up lambdas and executes on the render thread. It switches FCanvas to using this so it no longer races with other threads enqueuing rendering commands.

  • New: In Niagara, we’ve added the new dynamic input option with "Calculate Radius from Size.

  • New: Changed building of WebRTC Proxy to use Unreal Build Tool.

  • New: Added a scale option to upsample or downsample the texture when using the ConvertToJPEG/PNG/TIFF/HEIF nodes in Blueprint.

  • New: Added sphere light sampling support for ray tracing. Sampling currently selects a uniform random position on a sphere as a connection point for a shadow ray. Sphere light sampling is enabled by adjust the source radius on a point light.

  • New: Adding profiling stats for ray traced reflections.

  • New: Added support for switching Vulkan present mode with -vulkanpresentmode=N where N is a VkPresentModeKHR.

  • New: Added support for Vulkan color conversion sampler extension.

  • New: Added r.Vulkan.DebugBarrier console variable to help debug resource issues.

  • New: Added a line thickness setting for UBoxComponent for when being used as a selector in game to make it more visible.

  • New: Added visualization of the AR system's point cloud to the ARObjectDetection sample.

  • New: Implemented support for wave operation intrinsics (Shader Model 6.0) as an extension of SP_PCD3D_SM5 and is available when running on compatible hardware and D3D12 is enabled.

    • Wave intrinsics can be enabled for a shader by providing CFLAG_WaveOperations to the compiler flags in ModifyCompilationEnvironment().

    • Run-time availability must be queried by checking GRHISupportsWaveOperations before trying to use a shader that was compiled with wave intrinsics.

  • New: Renamed D3D11ShaderCompiler.cpp to D3DShaderCompiler.cpp since it is now used for both FXC/DXBC and DXC/DXIL shader compilation.

  • New: Implemented ray tracing shader compile batch script generation and shader worker direct compile support.

  • New: All ray tracing shaders now use ShouldCompileRayTracingShadersForProject() to decide if they should be compiled.

  • New: Depth buffers can now be switched to 32 bit on D3D11 and D3D12 using r.d3d11.Depth24Bit=0 and r.d3d12.Depth24Bit=0, respectively.

  • New: Added Vulkan GPU crash debugging support with the command line argument "-gpucrashdebugging".

  • New: Added the ability to specify a rotation to an image during the JPEG/TIFF/HEIF/PNG conversion.

  • Improvement: Reduced excessive memory usage at the end of a cook when bShareMaterialShaderCode is enabled. Savings vary by the total number of shaders, but a shader library with 1.3 million shaders will use approximately 6GB less memory.

  • Removed: Removed CMD_CONTEXT and COMPUTE_CONTEXT macros since they are no longer useful and only disrupt intellisense.

  • Removed: Removed OpenGL3 RHI option from the nDisplay Launcher.

  • Deprecate: Deprecated ABGR16 and Float RGB from EDefaultBackBufferPixelFormat since they are not supported by D3DX SwapChain.

  • Deprecated: FGetHSV has been replaced with MakeFromHSV8 which wraps the existing method HSVToLinearRGB. This was because FGetHSV behavior is confusing or wrong and the behavior of HSVToLinearRGB is what we want because it matches with LinearRGBToHSV.

  • Deprecated: ENQUEUE_UNIQUE_RENDER_COMMAND_*PARAMETER is now replaced by ENQUEUE_RENDER_COMMAND instead.

  • Deprecated: As part of the mesh drawing refactor, legacy drawing policies and Static Mesh draw lists have been removed. These have been replaced by FMeshDrawCommand and FMeshPassProcessor everywhere in the renderer. See major release notes and documentation for more information.

  • Deprecated: SetRenderTarget RHI, API, and its variants have been removed. Instead, use BeginRenderPass and EndRenderPass.

FX

  • Crash Fix: Improved safety against possible crash in the PSC Pool.

  • Crash Fix: Resolved a possible debug message crash with ribbons.

  • Crash Fix: Fixed a random crash with particles when trying to trim memory data.

  • Crash Fix: Fixed a crash in Niagara data interface initialization where data interfaces with per-instance data (mesh data interfaces and others) would cause a crash when they were used in system or emitter scripts.

  • Crash Fix: Fixed crash when trying to compile Niagara scripts when running on PC with SM2 emulation.

  • Bug Fix: In the Niagara Emitter and System Editors, we addressed an issue where time was not resetting properly on a playing system when modifying data interfaces, renderers, or emitter properties.

  • Bug Fix: Fixed an issue in the Niagara stack view where renaming an input on a Set Variables module wouldn't work correctly with undo.

  • Bug Fix: Fixed an issue with Niagara Events not being generated correctly in cooked builds.

  • Crash Fix: Improved messaging and resolved some crashes that could occur in Niagara when encountering invalid type definitions, type definitions for malformed types.

  • Bug Fix: Ribbon rendering in Niagara had an issue which would result in invalid UVs when using "Ribbon ID" to render more than 256 ribbons from a single emitter.

  • Bug Fix: Fixed an issue in Niagara with Events where the event payload data could be corrupted when generating events from particle update script with interpolated spawn enabled.

  • Bug Fix: Updated ribbon rendering in Niagara to have more predictable behavior when a camera facing ribbon segment direction is close to parallel to the look vector.

  • Bug Fix: Fixed an issue with Niagara runtime script generation where emitter property constants weren't always generated correctly in system scripts resulting in incorrect runtime behavior for values like "Local Space".

  • Bug Fix: Fixed an issue in Niagara runtime script compiling where Select by Usage nodes wouldn't be handled correctly in emitter scripts.

  • Bug Fix: Fixed an issue in Niagara scripts where having disconnected pins in the graph would cause the runtime script compile to fail unnecessarily.

  • Bug Fix: Making Cascade's skelvertsurface module more robust to missing data in the mesh.

  • Bug Fix: Fixes for perf regressions managing particle systems. Apply visibility culling correctly when calling from the manager.

  • Bug Fix: Added a null check for GetScene() and added Skeletal Mesh for a SkeletalMeshComponent which was using both, causing access violation.

  • Bug Fix: Fixed an issue with task scheduling in PSC Manager.

  • Bug Fix: Made Niagara's Skeletal Mesh triangle sampling functions more robust to bad input.

  • Bug Fix: Rewrote the section of the EmitterLifeCycle Niagara module calculating Emitter.LoopAge to avoid floating point rounding errors depending on NextLoopDuration. SpawnInstantaneousBurst used to fail for some common values of NextLoopDuration due to rounding issues resulting in negative signed zeros such that no particles was spawned.

  • Bug Fix: Fixed an issue where the beam target was not correctly re-initialized after being destroyed. The beam emitter still referenced the deleted target object.

  • Bug Fix: Fixed an issue with GridLocation module where precision loss could result in incorrect grid layout on non-Windows platforms.

  • Bug Fix: Now properly handling enum names in multiple spots in the Niagara graph display.

  • Bug Fix: Now the Output namespace is allowed in Niagara HLSL expressions.

  • Bug Fix: Fixed a bug where background loading a Niagara asset would trigger an assert.

  • Bug Fix: Fixed an issue if Realtime is off in the viewport, SystemInstance would be found and a crash could occur when editing user variables on a Niagara Component.

  • Bug Fix: Fixed an issue where quaternion comparisons were not 16-byte aligned when flushing values.

  • Bug Fix: Fixed an issue where velocity could be Nan on first frame since the data isn't initialized on a Niagara component.

  • Bug Fix: Fixed an issue where exposed variables wouldn't update when clearing out a Niagara System in a Niagara Component.

  • Bug Fix: Fixed a bug with HoudiniNiagaraCSV datainterface where effects that burst spawned all particles at time 0 would never loop.

  • Bug Fix: Fixed Function and Dynamic-Input Scripts failing to compile with Parameter Map or Data Interface inputs.

  • Bug Fix: Fixed a bug with Converted nodes not properly adding structs they use into compiled HLSL.

  • Bug Fix: Fixed an issue where changing function scripts inside dynamic input scripts were not recompiling systems that use the modified dynamic input script.

  • Bug Fix: Fixed missing shadermap for Niagara assets after a cook where shader needed to be recompiled.

  • Bug Fix: Fixed an issue that prevented creating parameters inside the Event Handler section of the Stack.

  • Bug Fix: Prevented making or linking Niagara Parameter Maps where they can not be used.

  • Bug Fix: Fixed issue that prevented setting user parameters of Systems in cooked builds.

  • Bug Fix: Fixed velocity vector on mesh particles.

  • Bug Fix: Fixed invalid memory access with particle trails.

  • Bug Fix: Fixed issues with Niagara on Vulkan and OpenGL ES3_1.

  • Bug Fix: Fixed missing Niagara shaders when running uncooked builds.

  • New: Added the ability to undo parameters being dragged into the stack from the Parameters panel in Niagara.

  • New: Added a new "Select by Simulation Target" editor node that allows you to select different values for cpu and gpu execution.

  • New: Added velocity inheritance to Static Mesh queries within Niagara, which is useful when spawning particles from player controlled meshes.

  • New: Niagara components now show up under the name "Niagara Particle Systems" in the component assignment menu.

  • New: Added native Niagara VM ops for integer divide, left and right shifts.

  • New: Enabled the details panel for the selected node in the Niagara script editor UI.

  • New: NiagaraComponent's OnSystemFinished are now assignable via Blueprint like Cascade

  • New: Added the console variable "fx.ExecVMScripts" to disable Niagara VM script execution. It is useful when a script is crashing to examine all the data in the Editor.

  • New: Simulation delta time can now be clamped for Niagara Emitters.

  • New: Added the ability to deprecate modules within the Niagara Script Editor. Any users of a deprecated module will get an inline warning in the stack.

  • New: Allowing SourceMovementComponent to run asynchronously. Also adding debug text to show systems that can't run async.

  • New: Reverted the default emitter height in the Niagara editor from 100 back to 0 as this was confusing for users and made it harder to reason about world space vs local space transformation of systems.

  • New: Added the ability to refresh a node inline.

  • New: Added preliminary support for GPU emitters in the Niagara Attributes Spreadsheet.

  • New: Added a precise version of Module and Reciprocal that is used by default. It improves precision as the existing opcodes for this only had 12-bits.

  • New: Added a ModuloFast and ReciprocalFast to still use the 12 bit faster version.

  • New: Niagara system's world-space rotation transform are now exposed directly as Engine.Owner.Rotation.

  • New: Added new overview stats for Niagara and Cascade.

  • New: Added "plus" pin to Math nodes like "add", making it possible to add a dynamic number of inputs per node.

  • New: Added Editor shortcuts for subtract (S), lerp (L) and make bool (B).

  • New: Added OpenGL implementation of Fence and CopyToStagingBuffer.

  • New: Updates readback to not create/destroy stuff per emitter every frame. Updated RHI API to support this.

  • New: Added a new Implementation of FRHIStagingBuffer and EnqueueStagedRead. Async copies the contents of a buffer to a shadow. Optional fence to indicate completion. Multiple FRHIStagingBuffers can be created off the same Vertex Buffer to get snapshots at different points in the command stream.

  • New: Added a new module that aligns a sprite to the mesh orientation variable or a quaternion.

  • New: Adds a console variable to allow Niagara VM shader compilation to skip some of HLSLCC's backend optimization passes.

  • New: Added an additional option to Niagara module dependencies which specifies whether the module providing the dependency should be in the same script, or if it can be in any script.

  • New: In the Niagara stack view, added stack issues to report and fix button for missing function scripts for modules and dynamic inputs.

  • New: Created a "Wind Force" module in which particles attempt to match a goal wind speed with a simple air resistance model which controls how quickly they reach their target speed.

  • New: Added an "Add Velocity in Cone" module with controls for axis alignment and cone angle.

  • New: Added a module to sample Distance Field’s SDF and Gradient PseudoVolume texture in Niagara extras.

  • New: Gradient PseudoVolume texture has now been included in Niagara Extras.

  • New: Included an option for infinite particle lifetime on the update age module in Niagara.

  • New: Spawn Burst Instantaneous now supports spawn groups to allow independent spawning on discrete elements such as Skeletal Mesh bones.

  • New: Added the "Initialize Particle" and "Initialize Ribbon" Modules to simplify the editing and creation of new effects by setting common attributes in one location.

  • New: Added the Particle System Manager that when enabled will gather all valid particle system components for ticking in larger batches to reduce overhead. It provides minor performance improvements along but could enable greater savings in the future. It can be enabled/disabled with the console command fx.PSCMan.Enable.

  • Improvement: Improved Niagara light rendering by adding the following options:

    • Select between Inverse Square Falloff or Linear Falloff (defaults to inverse square falloff)

    • Light exponent for Linear Falloff

    • Affect translucency toggle

    • Allow to spawn lights on a per-particle basis

    • Volumetric scattering intensity

  • Deprecated: The old "SampleCurlNoiseField" and "CurlNoiseDimensions" modules from the Niagara Extras plugin are removed due to the new procedural nature of the curl noise.

  • Removed: Removed the "User." prefix for Niagara variable names in the Sequencer.

  • Removed: Removed the need to start Niagara component parameter names with "User." in Blueprints.

Lighting

  • Bug Fix: Fixed an issues with translucent masked shadows from dynamic meshes.

  • Bug Fix: Fixed Sky Light hiding/showing.

  • Bug Fix: Don't render preshadow projections for objects that don't render in the main pass.

  • Bug Fix: Fixed issues with Rect Lights and Clear Coat.

  • Bug Fix: Excluded lights with non-zero source length from tiled deferred pass. These don't work due to light tangent not being passed to tiled deferred shaders.

  • Bug Fix: Fixed an error when encoding shadowmaps with allocations that are not multiple of 4.

  • Bug Fix: Fixed a possible memory leak in FLightComponentDetails.

  • Bug Fix: Fixed an issue where the Global Distance Field wouldn't be cleared when switching between levels.

  • Bug Fix: Clamping r.TranslucencyLightingVolumeDim in order to fix crash when it's set to 0.

  • Bug Fix: Fixed various Rect Light issues in Lightmass.

  • Bug Fix: SourceTexture now affects Lightmass and uses bounces color.

  • Bug Fix: Fixed uninitialized lightmaps on some objects inside cooked builds.

  • Bug Fix: Fixed missing shadows when Far Shadow Cascade was used with Distance Field Shadows.

  • Bug Fix: Fixed errors in landscape Lightmass material UV calculations. Swarm Agent cache needs to be cleared for the fix to be effective.

  • New: Added a second set of parameters on the ExponentialHeightFogComponent to drive a light-weight second height fog. It includes a second fog density, a second height falloff, and a height offset relative to the first height fog setting.

Materials

  • Crash Fix: Fixed a crash when compiling material that uses multiple mask expressions with the same input expression.

  • Crash Fix: Added newly created Material Parameter Instance assets to the world. This fixes a crash in creating a Material Parameter Collection and adding a track for it immediately in Sequencer.

  • Crash Fix: Fixed a crash with Translucent Materials using the SceneDepth node.

  • Bug Fix: Fixed an issue accessing texture objects through Static Switch node and other forms of indirection. Previously, TextureSample expression would only look at nodes directly connected to the "Tex" input to determine which texture to use.

  • Bug Fix: Fixed access to Custom Stencil (and other scene textures) from slate materials.

  • Bug Fix: Fixed an issue where Material Instances would sometimes try to compile expressions connected to Material attribute Tessellation inputs, even if tessellation was not enabled.

  • Bug Fix: Fixed an issue where adding a new parameter to a Material Parameter Collection would break gameplay calls to SetVectorParameterValue until referencing materials were recompiled.

  • Bug Fix: Fixed an issue with the CopyMaterialInstanceParameters fast path where parameters exposed by static permutations were not copied.

  • Bug Fix: Fixed default filtering mode for volume texture to be wrap instead of clamp.

  • New: Added new Material Expressions "DeltaTime" and “ShadowPassSwitchDeltaTime”.

    • DeltaTime allows for custom motion blur effects by using Preview Frame Switch along with World Position Offset.

    • ShadowPassSwitch allows the material to behave differently when rendering into shadowmap.

  • Improvement: Improved warning messages in a cooked application when an invalid Material is used on a Skeletal Mesh.

Mobile Rendering

  • Bug Fix: Fixed case where enabling Depth of Field and having a primitives with a refraction effect in the scene was causing a black screen to render.

  • Bug Fix: Fixed a case where Android devices with PowerVR GPUs could have "black spot" rendering artifacts depending on the main light and camera view angle.

  • Bug Fix: Fixed Custom Stencil support with the Mobile Renderer.

  • Bug Fix: Fixed a case where meshes with AlphaComposite blending will incorrectly write to alpha channel.

  • Bug Fix: Fixed case where Mobile Separate Translucency is missing when High Quality Depth of Field option is enabled.

  • Bug Fix: Fixed iOS Custom Depth Only vertex shader functionality by removing out of date forced iOS Z-Bias.

  • Bug Fix: Fixed incorrect SceneTextureLookup size calculation when used with mobile Post Process Materials.

  • Bug Fix: Fixed a case where nearest filtering was not working properly on some Android Vulkan devices.

  • Bug Fix: Fixed a case where 'Indirect Ligthing Color' setting from Post Process Volume GI section was not working with mobile rendering.

  • New: Enabled cube scene captures for ES3.1 feature level devices.

  • New: Added Movable Spot Light support to mobile renderer.

  • New: Added a new spotlight mobile shader permutation option. It defaults to off to ensure this is enabled if Spot Lights are required for your project.

  • New: Added a Point Light fallback for Rect Lights.

  • New: RenderDoc captures from Android devices running OpenGL will now properly show mesh and material names.

  • New: Android OpenGL application will now use 16-bit depth for dynamic shadowmap rendering to be consistent with Android Vulkan and iOS Metal. This also reduces memory usage for dynamic shadows.

  • New: Improved Vulkan frame buffers handling on Android devices. This will remove periodic micro hitches during rendering.

  • Improvement: Improved creation of Vulkan vertex and index buffers on Android devices. This removes occasional micro hitches during rendering.

  • Deprecated: Disabled Vulkan support for Adreno 5xx based devices running on Android 6 due to driver issues.

  • Deprecated: Disabled OpenGL ES3.1 support for PowerVR Rogue G6xxx devices due to driver issues.

Optimizations

  • Crash Fix: Fixed DX12 texture upload crash by deferring upload to RHI thread. This also avoids stalling RHI thread.

  • Bug Fix: Disabled depth bounds optimization if RenderDoc is enabled as neither NvAPI nor Ags is handled by RenderDoc.

  • Bug Fix: GPU Profiler in DX12 now correctly reports GPU frame time excluding GPU idle time.

  • New: Implemented adaptive ray shortening based on roughness for ray traced reflections.

  • New: Integrated a GitHub change to optimize shadow occlusion evaluation.

  • New: Integrated a GitHub pull request to optimize vertex fog.

  • New: Allow depth textures without SRV on DX11. Unifies DX11/DX12 behavior.

  • New: Added Parallel object distance field atlas update. It can be enabled by setting r.DistanceFields.ParallelAtlasUpdate to 1. This is off by Default .

  • New: Added an explicit GPU stat for Volumetric Fog.

  • New: Disabled GRHINeedsExtraDeletionLatency for DX11, which was hiding issues on platforms that did not use it.

  • Improvement: Optimized the storage of Material Shader Map IDs, saving memory.

  • Improvement: Transient data for Scalar and Vector uniform expressions is now stripped in cooked builds, saving memory.

  • Improvement: Scene Captures will no longer use "Capture On Movement" if “Capture Every Frame” is enabled. This prevents the capture from happening twice in a single frame.

  • Improvement: Optimized shader preprocessing by re-routing memory allocations to Unreal allocators (Windows only). It speeds up ShaderCompilerWorker by almost three times in test cases using Fortnite shaders and all local compilation. For example, in basic benchmarking, the Preprocess step went from 65% of wall time to less than 10%. For XGE, the difference is likely smaller in practice since XGE seems to introduce massive stalls during process startup for the first few jobs starting on a remote worker.n

  • Deprecated: PrimitiveType is now deprecated on all RHI calls to RHIDraw*Primitive*, as the PSO controls the type. Those methods no longer take the parameter in.

Postprocessing

  • Bug Fix: Allowed Separate Translucency with alpha channel support in post processing.

  • Bug Fix: Fixed an issue with FFT Bloom causing apparent clipping of bloom shape when the screen has a high aspect ratio. The issue was only visible when a very small (few pixels) but very bright light source would produce a large convolution bloom that covered much of the screen.

  • New: Added an "Exposure Compensation Curve" to the Post Process settings that adds a bias based on the scene luminance in EV100.

  • New: Enabled the extended exposure range settings by default for newly created projects. See our auto-exposure documentation for further details.

  • Improvement: Removed Intensity units for Sky Lights when using a Scene Capture Cubemap. The property has also been renamed to "Intensity Scale."

DevTools

AutomationTool

  • Bug Fix: Fixed ue4commandline.txt being written to engine directory during staging.

  • Bug Fix: Fixed the ability to package projects using an editor that is not under the Engine/Binaries directory.

  • Bug Fix: Used the GetHostName function in Dns rather than MachineName property in Environment to determine the hostname for matching P4 clients. MachineName is the short NETBIOS name, and may not include the ".local" suffix typical on Mac.

  • New: UAT will now always create a directory before saving encryption parameters.

  • New: UnrealPak commands are now executed in parallel, so that each pak file produces its own output log.

  • New: UE4 games will now be packaged with a copy of dbghelp.dll by default, to work around corrupt minidumps originating from Windows 10 v1709. Set WindowsPlatform.bUseBundledDbgHelp = false; from a target.cs file to disable.

  • New: Targets can now be built with parallel executor and XGE in a single UE4Build instance. Some platforms don't support XGE (but do support parallel executor), so we need to allow them to build in parallel if possible.

  • New: AutomationTool and UnrealBuildTool now require .NET 4.6.2, and have been manifested to support for file names longer than 260 characters on Windows.

  • New: The Submit method in P4Utils will always force a changelist to be submitted, even if it contains unchanged files.

  • New: Updated version of the UCRT bundled in the AppLocalPrerequisites directory to the version included with the 10.0.17763.0 Windows SDK. Newer versions of Visual Studio require functionality that is not in older versions of the CRT.

CrashReportClient

  • Bug Fix: Fixed a crash if CrashReportClient is closed before the background thread has finished symbolicating the callstack.

UnrealBuildTool

  • Bug Fix: Fixed missing Visual Studio version indicator on generated solution files.

  • Bug Fix: The "-NoUBTMakefiles" argument will now be respected when building UnrealHeaderTool.

  • Bug Fix: Fixed generating CMake project files on Windows.

  • Bug Fix: Fixed packaging of framework resource bundles when doing a remote build for iOS.

  • Bug Fix: Fixed target not being rebuilt when a plugin that is not required for this platform is disabled. Added log output showing why a temp target was required during packaging.

  • Bug Fix: Fixed shared precompiled headers disabling shadow variable and undefined identifier warnings, which would not be re-enabled for modules using them.

  • Bug Fix: Addressed problems with custom icons not being set correctly for projects packaged with an installed engine build. The PCLaunch.rc file was one of the precompiled object files, and was not being rebuilt with the correct icon. Additionally, any projects specifying a custom resource file would not be able to use any of the dialogs in the default PCLaunch.rc file.

  • Bug Fix: Makefile will now be invalidated if the command line arguments to UBT change.

  • Bug Fix: Fixed the user's selected Visual Studio version in the editor not being respected when generating project files.

  • New: Mac applications no longer copy third party dynamic libraries from Engine/Source/ThirdParty subfolders inside the app bundle. The required dylibs were moved to Engine/Binaries/ThirdParty subfolders or changed to be copied to Engine/Binaries/Mac via RuntimeDependencies, like their Windows counterparts do.

  • New: Added a "hybrid" executor, which uses the XGE executor for large numbers of parallel actions, and the Parallel executor for any leaf actions that will not saturate the local machine. For platforms that take a long time to link, this frees up XGE to be used for compiling other branches. To enable, set true in the BuildConfiguration.xml file.

  • New: Enabled pre-build steps to do things that may invalidate the makefile. After loading a makefile, we validate anything that can affect the pre-build scripts and execute them, then check whether the makefile is still valid for the working set of source files. If not, we discard the makefile and rebuild it (without executing the pre-build steps).

  • New: Added -ftime-trace profiler support for Clang, which outputs a JSON file containing a timeline for the compile (set WindowsPlatform.bClangTimeTrace = true from a target file).

  • New: The registry is now checked for the installation location of Incredibuild, rather than just searching the system path.

  • New: Compiler-generated dependency information and is now used for determining whether translation units are up-to-date. This ensures that the dependency list is accurate, and makes incremental builds more reliable.

  • New: Added support for building multiple targets in parallel. ShaderCompileWorker is now built in parallel with the editor by default.

  • New: Provided a better error message when trying to use a module that is not included in an installed build.

  • New: Build targets can now specify additional build products produced by post-build steps, which will be included in the manifest and target receipt. Add paths to files in the AdditionalBuildProducts list from the target constructor.

  • Improvement: The bAdaptiveUnityDisablesPCH option is now disabled by default, which improves compile times when working on a small set of files. To validate a target builds correctly with PCHs disabled, set b

  • Improvement: Modules can now disable precompiled headers entirely by setting PCHUsage = PCHUsageMode.NoPCHs.

  • Deprecated: The ModuleRules.PublicAdditionalShadowFiles list has been deprecated. Additional files may be transferred for remote building using the filter lists in Engine/Build/Rsync.

  • Deprecated: The bCompileLeanAndMeanUE flag has been deprecated. Anything explicitly using bCompileLeanAndMeanUE now uses bBuildDeveloperTools instead, and the UE_BUILD_MINIMAL macro at runtime has been removed.

  • Deprecated: Visual Studio 2015 has been deprecated, and will not be used by default. To force a target to be compiled with Visual Studio 2015, set WindowsPlatform.Compiler = WindowCompiler.VisualStudio2015 from the .target.cs file.

  • Deprecated: The UEBuildFramework class instantiated from ModuleRules classes has been renamed to Framework to decouple it from the internal representation used inside UBT. A deprecated ModuleRules.UEBuildFramework class has been added to help migration.

  • Deprecated: The UEBuildBundleResource class has been renamed to BundleResource, in order to distinguish the public API from the internal UBT representation.

UnrealFrontend

  • Improvement: Refactored the device adder widget to support overriding by platforms.

UnrealGameSync

  • Crash Fix: Fixed a crash when creating a new workspace if logging into the server fails.

  • Bug Fix: Fixed an issue where the main window could be created without a taskbar button.

  • Bug Fix: Fixed tiny hand cursor when hovering over a hyperlink on a high DPI monitor.

  • Bug Fix: The server address is no longer read from the p4 info command. It invalidates if a proxy is being used or if the DNS endpoint changes.

  • Bug Fix: Fixed missing Perforce login prompt if an existing ticket has expired.

  • Bug Fix: Corrected the status panel not repainting when tint color changes.

  • Bug Fix: Files open for add are no longer shown in the "Clean Workspace" list.

  • New: Settings for auto-update are now stored on a separate "Application Settings" dialog under the Options menu.

  • New: The location, size, and state of the main window will now be preserved between runs.

  • New: Added a "Filter" menu to allow customizing which changes should be displayed in the main window.

  • New: Implemented an option in the Sync Filter dialog, controlling whether to generate a solution containing all projects or just the one being synced.

  • New: We now require that the user manually clicks on a link to fetch more changes from the server. Doing so is not an automatically bounded operation, since not all changes may match the chosen filter. Searching for a previously synced change with older tabs can cause massive slowdowns and take a large amount of memory.

  • New: When browsing for the project to sync in a new workspace, we now hide *.uprojectdirs files by default.

  • Improvement: Changes are now grouped by local time zone.

  • Improvement: Detection of project settings at startup now happens in parallel to improve startup time on remote connections.

  • Improvement: Switched the order of ‘Ok’ and ‘Cancel’buttons to follow Windows conventions.

UnrealHeaderTool

  • Improvement: Various optimizations resulting in a 2-3x wall-clock time improvement for internal projects

UnrealLightmass

  • Crash Fix: Clamped Volumetric Lightmap grid size so that it will not overflow int32 and crash.

UnrealPak

  • Bug Fix: Fixed custom compressor not working in unrealpak for the -extract -list functions.

UI

  • Bug Fix: Fixed corrupted textures on DX12.

  • Bug Fix: Fixed visual issues caused by code treating kerning values as unsigned values.

  • Bug Fix: The top/front/side options for the viewport now match the axis displayed. (X is treated as forward)

  • Bug Fix: Fixed multiple PIE windows not moving to their last-used position when opening.

  • Bug Fix: Fixed UFontFace not reporting memory correctly. It was always reporting max memory size even if the fonts were lazy loaded.

  • New: Avoiding stencil clipping on widgets that are just barely not axis aligned.

  • Deprecated:Legacy localized fallback fonts are now officially deprecated.

    • These have been "soft" deprecated since 2014, but will now emit a warning if they are loaded.

    • It is recommended that you run your game with the Slate.EnableLegacyLocalizedFallbackFont CVar disabled and ensure your font assets are set-up correctly: https://docs.unrealengine.com/en-US/Engine/UMG/UserGuide/Fonts/Overview

    • Note: This CVar will be disabled by default in 4.23.

Slate

  • Crash Fix: Fixed a crash caused by mouse capture being instigated by a keyboard event.

  • Crash Fix: Prevent touch-dragging a widget while already dragging another one.

  • Bug Fix: Fixed Slider widget not restoring cursor after dragging when a custom cursor is set.

  • Bug Fix: Fixed issue where AnalogCursor update events did not have the proper pointer index.

  • Bug Fix: MouseLeave no longer triggers when focus changes to a widget within the game viewport while Mouse For Touch is enabled.

  • Bug Fix: Fixed race condition with Slates usage of time for materials. Time was previously accessed directly on the render thread. It is now passed from the game thread to the render thread like scene rendering.

  • Bug Fix: Combo box now correctly scrolls selected element into view when opening for the first time.

  • Bug Fix: Only include SlateDebug content when packaging with debug files included.

  • Bug Fix: Fixed Slate Widget's support in UWidgetComponent.

  • Bug Fix: Fixed TouchStarted acquiring capture with a local position, not an absolute position. This caused mouse position restoration (when Mouse as touch) to be the wrong position.

  • Bug Fix: Fixed stencil buffer based clipping not working on some platforms.

  • Bug Fix: Reduced font cache thrashing by ensuring only vital properties that invalidate atlas data are used as comparison during hashing of the font data.

  • Bug Fix: Fixed a number of font perf issues

    • Cached the desired size of a simple text block unless it invalidates

    • Removed overhead of constantly checking threads when caching fonts

    • Simplified whitespace checking

    • Added stats for font cache misses

    • Removed stray pragma disable optimization

  • Bug Fix: Made temporary copies of state brush details to draw elements to allow the memory to go away without affecting the frame being rendered.

  • Bug Fix: Tweaked when SNullContentWidget is used in the threaded loading screen. Need to avoid any time that would increment the non-thread safe shared SNullWidget across threads.

  • New: The STableRow as a new slate argument. The SignalSelectionMode affect when the OwnerTable gets notified that selection changed with a left mouse button.

  • New: The SStructureDetailsView now use the DetailsViewArgs::ColumnWidth.

  • New: Added const-correctness for UGameViewportClient::GetGameViewportWidget().

    • Modified FSlateApplication::GetPressedMouseButtons() to return a reference instead of a copy.

    • Added FInputEvent::GetModifierKeys() to allow access to the full set of modifier keys at once.

    • Added FPointerEvent::GetPressedButtons() to allow access to the full set of pressed buttons at once.

  • New: SInlineEditableTextBlocks no longer incorrectly enter edit mode when being dragged.

  • New: Optimized memory and performance rendering very long text strings by culling glyphs outside the clipping area.

  • New: Added API to update consume mouse wheel for ScrollBox.

  • New: Added MouseWheel and Gesture API to the Input Preprocessor.

  • New: Made layout changes to SWidgetDetailsView.

  • New: Previous and Next now support Wrap and Stop navigation rules.

  • New: Exposed color deficiency settings to Blueprint.

  • New: Scrollbox keyboard navigation will now recursively search each element for a focusable widget instead of checking the top-level widget and moving on.

  • New: Changed default font size for SlateFontInfo from 0 to 24.

  • New: Added an option to SCheckBox to have the checkbox content not AutoWidth.

  • New: No longer load LastResort.ttf in cooked builds.

  • New: Moved input debugging over to SlateDebugging to make it possible to log input, this replaces the defunct LOG_EVENT system in SlateApplication.

  • New: Added the first version of the console slate debugger. It hooks into the available systems in the FSlateDebugger to print information about the internal goings on of Slate, as focus changes, or as it attempts to, key presses, who is handling them...etc. Console commands to get started, SlateDebugger.Start, SlateDebugger.Stop.

UMG

  • Crash Fix: Fixed a rare crash in UMG Editor during serialization.

  • Crash Fix: Tentative fix for double-rename crash.

  • Bug Fix: Exposed named slots in child widgets can now have their contents wrapped properly.

  • Bug Fix: Fixed circular dependencies in widget BPs.

  • Bug Fix: Fixed issue where setting "draw at desired size" for a widget component to true, the "Draw size" will no longer respond to input.

  • Bug Fix: Prevented deep copy full widget tree when copy/pasting user widgets.

  • Bug Fix: Fixed replace updating the animation binding that matches the name of the widget, rather than using the animation guid.

  • Bug Fix: Hid UMG widget extensions if the widget is hidden.

  • Bug Fix: Adding a new animation to a UMG widget now prompts for compile and shows the animation in the MyBlueprint panel before recompile.

  • Bug Fix: Reset to default now handles base properties and lightmass properties correctly.

  • Bug Fix: Fixed Widget Interaction Component's trace returning the wrong widget when stacked.

  • Bug Fix: Centered the notch unsafe zone in Blueprint widget templates for iPhone XS, XS Max, and XR.

  • Bug Fix: Fixed logic for displaying matching resolutions to the selected resolution in UMG.

  • Bug Fix: Fixed Designer view showing all android screen resolutions as checked if they shared a device profile but were not the same final resolution.

  • Bug Fix: Prevent unrelated undo entries when dragging UMG widgets.

  • Bug Fix: Fixed copy and paste causing multiple transactions.

  • Bug Fix: Fixed bug where multi-touch could interrupt drag and drop without cleanly canceling the drag operation.

  • Bug Fix: Fix for widget blueprint variable duplication when dragging and dropping to the hierarchy.

  • Bug Fix: Widgets hidden using the designer eyeball, now make it so the widgets or child widgets that are hidden don't appear selectable outside the hierarchy view.

  • Bug Fix: Fixed a bug where a copy/paste of a Widget that contains a NamedSlot in UMG Editor was incorrectly creating second copy of the widget at the NamedSlot root.

  • Bug Fix: Undo/Redo now works again on properties of UserWidget instances in a UMG hierarchy (including the root widget) - Added a couple WidgetTree static helpers for determining the child index of a PanelWidget that a given widget ultimately occupies (even if nested within other panels)

  • New: Added GetAllChildren() API to Panels.

  • New: Added setters for widget component layer properties.

  • New: Added UMG_API to FRichTextDecorator.

  • New: Added missing key handling for zoom level control.

  • New: Added more getters and setters for widget component properties.

  • New: Added clearer messaging when custom DIP scaling rules aren't set up correctly.

  • New: Fixed UMG ListView not propagating OnItemSelectionChanged events to its items.

  • New: Improved the consistency of the GetAllWidgetsWithInterface API.

  • New: Added an option to always show scrollbar track.

  • New: Added GetSelectedIndex to ComboBox.

  • New: Disabled mipmaps by default on UI texture group

  • New: Added some additional utility functions to blueprints to make transforming things from local to absolute and abs to local easier. TransformScalarAbsoluteToLocal, TransformScalarLocalToAbsolute, TransformVectorAbsoluteToLocal, TransformVectorLocalToAbsolute.

  • New: The navigation customization no longer provides just a free textblock for widget names for explicit. Now we provide a dropdown list for widgets. When you use Custom or CustomBounds we now provide a dropdown list with all possible functions matching the signature for navigation, as well as an option to create that function for you. You can now rename functions and widgets and we now update the corresponding navigation option.

  • New: Added a new console command, Widget.DumpTemplateSizes, it gets all widget templates in memory and dumps their sizes.

VR

  • Crash Fix: Vulkan no longer causes a crash when the SteamVR plugin is enabled.

  • Crash Fix: Fixed crash with haptic values beyond the supported range for Windows Mixed Reality.

  • Crash Fix: Fixed Stereo Layers crash when exiting a game through SteamVR's overlay menu.

  • Crash Fix: Using the Google Daydream streaming preview no longer causes a crash.

  • Crash Fix: Fixed a crash when enabling the Oculus Avatar plugin while the SDK is not installed.

  • Crash Fix: Fixed a potential crash in the experimental Mixed Reality Capture Plugin - guarded against a scenario where the world is not valid.

  • Bug Fix: Fixed outdated AMD drivers causing frame buffer corruption when using an Oculus Rift.

  • Bug Fix: Removed some code from the remote session client that was overriding the receive buffer size set by the config files.

  • Bug Fix: Fixed MRMesh normals problems - Normals should not be world scaled.

  • Bug Fix: Fixed the aspect ratio for landscape images being determined incorrectly for ARCandidateImages.

  • Bug Fix: Fixed runtime material switching on MRMesh.

  • Bug Fix: Fixed OculusHMD plugin linking to the Windows Vulkan libraries on Android platforms.

  • Bug Fix: Updated MagicLeap 4.21 redirects. Made redirectors more specific, and found a way to do the updates without the MatchSubstring package update flag warning.

  • Bug Fix: Fixed emissive decals rendering in right eye.

  • Bug Fix: Fixed an assert when having too many VR devices attached to SteamVR.

  • Bug Fix: Enabling GLES occlusion queries with mobile HDR disabled no longer causes meshes in view to disappear.

  • Bug Fix: Fixed a threading bug with the async GPU compression on iOS. Added support for a synchronous path to augment the async path.

  • Bug Fix: Fixed a bug where the menu button on the left Oculus Touch controller was mapped to Special Right instead of Special Left.

  • Bug Fix: Fixed log spam if Move Motion Controller is turned off during launch on PS4.

  • Bug Fix: Fixed log spam coming from AllocateDepthTexture in OculusHMD.

  • Bug Fix: Fixed a race condition in late update handling on AR and VR platforms.

  • Bug Fix: Removed the face mirroring setting from the ARKit settings class since it had a setting in the session config object. Changed the code to use the session config setting.

  • Bug Fix: Fixed console visibility in HMD with Vive on Mac. IStereoLayer now has an accessor to tell the DebugCanvas if it should copy the Debug layer, and the FDefaultStereoLayers version returns false.

  • Bug Fix: Fixed a bug preventing the user from reactivating a game after dismissing the "Place phone into daydream headset" dialog.

  • Bug Fix: SteamVR will now be restarted if it was shutdown while UE4 is running and a play-in-editor session is started.

  • Bug Fix: RemoteSession / VirtualCamera fixes.

    • Mapped OnTouchFirstMove / OnTouchForceChanged handlers.

    • Removed AR input from VCam.

  • New: Spatial anchor support, planes support for Lumin/MagicLeap.

    • Refactoring so Lumin implements the generic AR API, rather than only its own custom implementations (previous implementation will still work).

    • Added planes detection. Inner planes are not yet supported.

    • ARLineCheck works with extents or bounds. There is no 'ground plane' check now.

    • Added Pins/Anchors.

    • Added a new 3d line check (where you specify start and end point for the test) and is supported on Lumin and ARCore.

  • New: Instanced stereo rendering now supports rendering instanced meshes and distortions in a single pass.

  • New: Updated the GoogleARCore plugin and the GoogleARCoreServices plugin to the ARCore 1.6 release.

  • New: Updated Oculus plugins to the 1.32 release.

  • New: ARKit plugins are no longer experimental.

  • New: Added a stat to track the amount of CPU usage that ARKit and supporting threads use in total. ("stat arkit" to see it)

  • New: Added native Android systrace support.

  • New: Enabled ICU on Lumin.

  • New: Created MockDataMeshTrackerComponent to generate mesh data for MRMesh so it can be tested without an AR device.

  • New: Collision clearing on MRmesh.

    • Added support for generic runtime collision modification of MRMesh collision.

    • Generic Blueprint collision settings now work on MRMesh.

  • New: Added support for 6DOF motion controller tracking on Daydream.

  • New: First pass at Face AR networking support.

  • New: Added code to expose the Apple ARKit settings object to the project settings.

  • New: Added methods to get points from the point cloud inside or outside of a box in order to draw included and excluded points. Updated the movement controls, moved to the corresponding objects, and functionalized things.

  • New: Implemented vr.PixelDensity for Magic Leap.

  • New: Added support for trigger axis values for Windows Mixed Reality.

  • New: Added a stub API call to return the passthrough camera UVs to C++ code. Currently only implemented by GoogleARCore and not fully tested.

  • Improvement: Gave Install/Uninstall MPK batch files execute permissions on Mac by default.

  • Improvement: Added options to the file writer support to log face curve data as it is tracked.

  • Improvement: Improved the detected image debug drawing code.

  • Improvement: Added thread priority overrides when running an ARKit session so that ARKit has more CPU time available for better tracking.

  • Improvement: Added PostEditChange to UARCandidateImage to enforce proper aspect ratios of physical size with the image data.

  • Improvement: Added a device id in addition to subject name so that we can detect when a device changes its subject name.

  • Improvement: Changed how face AR curves use timestamps when receiving cross platform so that there isn't a local mismatch that causes dropped frames.

  • Improvement: Decoupled AR object timestamps and frame numbers from the game thread update rate.

  • Improvement: Changed how UAppleARKitTextureCameraImage is used when wrapping the underlying AR image. (reuse the object)

  • Improvement: Fixed some autorelease pool problems in the Apple image utils exposed by fixing lifetimes.

  • Improvement: Added a check for a missing ARSessionConfig object when starting an AR session. An error message is displayed if the ARSessionConfig is not found.

  • Improvement: Added checks for device support before enabling certain remote session channels.

  • Improvement: Simplified the shader setup for remote AR image rendering.

  • Improvement: Added a check to see if an AR session is running before automatically starting a session for the AR remote channels.

  • Deprecated: Marked the temp ARKit code from the 4.18 release as deprecated. It will be deleted in 4.23

  • Deprecated: Oculus-specific Stereo Layers (aka "splash screen") functions have been deprecated in the Oculus Function Library to bring them more in line with how they work on all XR platforms. You should update any code/Blueprints using the deprecated functions, as support in the SDK has been removed - they no longer function and instead throw errors when used in Play in Editor/Play in VR modes. The generic UStereoLayerFunctionLibrary functions should be used instead.

  • Deprecated: Google cardboard support is no longer available on iOS, and is no longer enabled by default on Android.

  • Removed: OSVR is no longer in development and has been removed.

Programming

  • Crash Fix: Fixed crash when there are too many pending tasks in ImageWriteQueue.

  • Bug Fix: Fixed Visual Studio 2017 compile errors with bStrictConformanceMode (/permissive-).

  • Bug Fix: FGenericPlatformMemory::DumpStats now properly reports free virtual memory.

  • Bug Fix: Added a slow scope to the "obj list" command to prevent the hang detector crashing the game while "obj list" is running.

  • Bug Fix: Fixed a bug in the hang detector which was causing it to fire even when it should have been disabled by a slow scope.

  • Bug Fix: Fixed a stack stomp / broken reference crash in FEngineLoop::Tick.

  • Bug Fix: Added a fix for CMake errors when using CMake on Windows with the Steam SDK installed.

  • Bug Fix: Added support to default an Xcode 10 workspace to the Original (legacy) build system type, since the new system doesn't work well with UE4.

  • Bug Fix: Fixed an issue with serialized case-insensitive hashes of wide character strings containing accent characters (128-255) which caused blueprints to not be able to be opened after conversion from an old version.

  • Bug Fix: Fixed function ComputeProjectedSphereShaft to return false when bound range is less than or equal to 0.

  • Bug Fix: Fixed ability to build lighting using Swarm from an editor built with a unique build environment.

  • Bug Fix: Disabled the Windows application error dialog when running with -unattended.

  • Bug Fix: Webm: Fixed some issues with audio synchronization.

  • Bug Fix: Fixed an issue with PlatformProcess::GenerateApplicationPath() always assuming the engine is in ../../Engine. This is not necessarily true for builds with a unique build environment.

  • New: Modified FSocket API to expose setting the multicast outgoing interface with SetMulticastInterface, and provided overloads to specify the network interface when joining and leaving multicast groups (JoinMulticastGroup / LeaveMulticastGroup).

  • New: Image Sequence Media Player no longer creates threads while the Plugin is being loaded.

  • New: Added an error message when building on versions of UE4 known to be affected by code generation bugs (see https://developercommunity.visualstudio.com/content/problem/345511/bad-code-generation-in-vs-2017-v1585.html).

  • New: SetMouseSensitivity console command now takes one argument again.

  • New: Timespan value is now clamped inside the wait function of the Event class.

  • New: Modified FPngImageWrapper to allow for multiple threads to compress PNGs at the same time on all platforms except Android.

  • New: Warnings for class member initializers being reordered (C5038) are now treated as errors on Windows.

  • New: FARFilter will now exclude classes when no classes are listed.

  • New: TRUE and FALSE macros are now undefined by default to prevent non-portable code. Use Windows::TRUE and Windows::FALSE instead, or include "Windows/AllowWindowsPlatformTypes.h".

  • New: The editor now builds cleanly with Clang 7.0.1 on Windows.

  • Improvement: Optimized DoesPackageExist to check the most likely file extension first.

  • Improvement: Large compile speed improvement due to large number of global begin()/end() overloads. These methods are now implemented as member functions on UE4 containers. Measured to save 20-40% compile time on files in the engine that use range-based for.

  • Improvement: The new MeshDescription API has been slightly simplified. When creating polygons with CreatePolygon[WithID], any extra edges required are generated automatically.

  • Removed: Code to filter out files for other platforms has been removed in GitDependencies.exe. This behavior can be useful to reduce download size, but is very non-intuitive to troubleshoot when remote IOS builds or cross-compiling Linux builds. The -exclude=(DirectoryName) argument can still be used to explicitly exclude folders.

Upgrade Notes

Core

  • New: Removed signing key generation functionality from unrealpak. Keys should be generated with the CryptoKeys plugin in the editor now. Any legacy processes that relied on generating an RSA key using the brute force functionality in unrealpak should be modified to use the functionality exposed by the cryptokeys plugin.

  • Removed: Removed deprecated "DebugBreak-" functions. Previous code using the deprecated functions should be updated to use the UE_DEBUG_BREAK macro.

Editor

Media Framework

  • New: Upgraded AJA SDK to ntv2sdkwin_15.0.1.1. Make sure you update the device firmware.

Online

  • New: The new Steam advertising filters for each Steam API function is as follows:

  • SetGameTags: ViaOnlineService (just this alone). It contains session flags and the build id as specialized cases.

  • SetGameData: ViaOnlineService + ViaOnlineServiceAndPing (No change)

  • SetKeyValue: ViaOnlineService + ViaPing + ViaOnlineServiceAndPing (No change)

Programming

  • New: Refactored the CSV Profiler to allow continuous streaming of CSV data to disk, reducing the in-memory overhead to almost nothing. Also added support for GZip compression of the output file.

  • In order to support streaming of the file to disk, we use a format where new stats are appended to the end of subsequent CSV rows after they are encountered. A complete header row with all the column names is written at the end of the file, immediately before the metadata. Tools that are processing CSV files must be aware of reading the complete header row from the end of the file in this case. An extra metadata field "[HasHeaderRowAtEnd]" indicates if the header row should be taken from the end of the file.

Rendering

FX

  • Bug Fix: We have removed all support for Metal prior to Metal 1.2 on iOS/tvOS and Metal 2.0 on macOS. This permits some fairly radical simplifications and removal of a number of workarounds.

    • All Buffer<>/RWBuffer<> objects are now bound as texture2d or texture_buffer, unless they are 3-component, in which case they are bound as raw T* buffer pointers.

      • 3-component Buffer/RWBuffer objects now work as expected.

      • Metal needed to use packed_* types internally as normal 3-component types in Metal are the same size as 4-component types, which is different from HLSL.

    • Texture Gather/GatherCompare operations have been fixed.

    • Removed all the TypedBufferFormat function-constant specialisation infrastructure and metadata as it is no longer necessary.

    • Removed all the raw-conversion for 1, 2 and 4 component vector types as it is no longer required.

    • Fixed input qualifiers (centroid, linear, etc.) for Fragment shader inputs.

    • Removed Metal-specific shader changes due to buffer type casting and swizzling, as they are no longer needed.

    • We now use the BGRA vertex format for FColor on Metal when available (everywhere but iOS/tvOS 10 using Metal 1.2).

    • ShouldCompilePermutation and similar functions are simplified now that there are fewer versions to support.

  • New: The "Sample Field" Niagara Data Interface function for the Vector Field Data Interface now assumes the sample position is in world space instead of being normalized to the bounding box of the vector field.

  • New: There is a change to the user interface of the SampleCurlNoiseField module. There are now three main parameters to this module:

    • Strength: A global multiplier on the sampled vectors

    • Offset: An offset used to pan the input

    • Length Scale: A scale describing the typical distance between coils/vortices

  • New: Any Niagara modules relying on exact comparison of Particles.Age and Particles.Lifetime should be converted to fuzzy compares.

  • New: We now limit building of WebRTC Proxy to just Win64.

  • New: Mac projects now require macOS 10.13.6 & Metal 2.0. iOS/tvOS projects now require iOS/tvOS 10 & Metal 1.2. These are the defaults for new projects. For existing projects, open the Project Settings and ensure that:

    • Metal 1.2 is selected for 'Metal Shader Standard' for iOS.

    • iOS 10 is selected for 'iOS Version' for iOS.

    • Metal 2.0 is selected for 'Metal Shader Standard' for Mac.

Tools

  • New: Added more accurate error messages to Unreal Front End.

UnrealLightmass

  • Bug Fix: Lightmass can now utilize more than 64 logical cores on Windows. If you have previously distributed Swarm Agent to your worker machines, you will also need to reinstall them

UI

  • New: Programs need to build with support for developer tools in order to get all SlateEditorStyle code. Make sure bBuildDeveloperTools is set to true in your program's Target.cs file if you need all styles.

UMG

  • New: Projects can now specify the default root panel widget type of new widgets. By default, all new Widget Blueprints have a Canvas Panel at the root. (We recommend that users familiar with UMG set it to "None".)

Slate

  • New: Changed the current implementation of FindWidgetWindow as it is generally unsafe to call when arranging slate widgets would be illegal, such as during modal dialogs or from other threads. GeneratePathToWidget still gets the parent window and the full path. FindWidgetWindow no longer returns a path, and uses parent pointers to find the parent window safely and more efficiently.

  • Deprecated: Deprecated SEditableLabel and removed all instances of it. It is functionally identical to SInlineEditableTextBlock.

VR

  • New: The Leap Motion plugin, which has been upgraded to version 3, breaks compatibility with previous versions of the plugin. Please visit https://github.com/leapmotion/LeapUnreal/releases for more information.

  • New: Updated minimum SDK support for Magic Leap to 0.19.

  • Removed: Removed StereoPair in favor of merging visibility maps into the instanced view. Any function that previously required a StereoPair now needs the Instanced View.

Core

  • Bug Fix: Serialize functions called from inside arbitrary preprocessor block now throw an error. If you encounter this new error, move the Serialize() function from your class outside of any custom preprocessor blocks. If no custom serialization is required, guard the internal contents of your function.

  • New: Moved SQLite database support into its own plugin.

  • New: Added UE_NONCOPYABLE macro to easily disable copy and move operations for a type

  • Deprecated: Renamed FSQLiteDatabase to FSQLiteDatabaseConnection to be consistent with other implementations.

  • Deprecated: Moved ADO database support into its own plugin.

  • Deprecated: Moved remote database support into its own plugin

  • Removed: Removed UObject::NotifyObjectReferenceEliminated and the HadReferenceKilled internal object flag. (This code was never enabled by default.)

Editor

  • New: Added a new serializable TStructOnScope which is a Type restricted FStructOnScope.

  • New: Modified FActorComponentInstanceData to be serializable so it can persist or be sent over the wire. Not all ComponentInstanceData properties has been properly converted to UPROPERTY yet.

  • New: Made EditorEngine::AllViewportClients and EditorEngine::LevelViewportClients private. Added an event when the list changes.

Gameplay Framework

  • New: UWorld’s memory footprint has been reduced.

  • New: FKeyHandleMap now stores a parallel TArray of KeyHandles in index order. This allows in-order iteration of key handles and optimized lookups of key handles by index.

  • New: FIndexedCurve now exposes Get/SetKeyTime and Shift/ScaleCurve at the base class, removing duplicate code in the process. FKeyHandleMap::Add/Remove now manages KeyHandlesToIndices in a consistent place rather than the Add/Delete key of each curve type implementing it.

  • Deprecated: Moved SceneCapture's visual components (mesh and frustum) to SceneCaptureComponent and subclasses

Localization

  • New: Extended FTextStringHelper support for lossless conversion of an FText instance into an FString (and back again).

    • In addition to the text literals and invariant data that it previously supported, it now has support for generated texts too, which are handled via the LOCGEN_X family of macros.

    • They should now covert almost any value that an FText can be generated from, and allows things like fully formatted messages to be sent as an FString before being re-generated in a culture correct way by the receiver.

Networking

  • Bug Fix: Improved robustness of network packet acks to avoid false reports of lost packets due to dropping packets containing acks. Each outgoing packet now includes a history of received packets.

  • Bug Fix: Fixed IPv6 scope interfaces leaking into the raw address byte arrays.

  • New: Optimized Replication Shadow State data. Previously, we would create copies of an entire UObject's memory, even though we only cared about the replicated properties. This change allows us to only pack and store replicated properties, reducing memory needs on clients and servers.

  • New: The GetTypeHash method on FInternetAddr is now const.

Online

  • New: XMPP supports non-anonymous rooms by storing the room member's full JID as FXmppChatMember::UserJid.

Platforms

Android

  • With this engine release the Target SDK now defaults to 26 which requires asking for permissions at runtime before using certain features, like the microphone or camera. You may change this back to previous behavior by changing Target SDK in Android project settings to 22.

  • Since 26 is now the minimum requirement for submitting to the Google Play Store you should consider adding code to use the Android Permission plugin (enabled by default) to check for and request permissions before using certain features. You may either do this in C++ or in Blueprints.

Linux

  • Bug Fix: Fixed an invalid pointer lock error in SDL2 wayland when no pointer device was found

Rendering

  • Bug Fix: The Windows hardware survey no longer relies on information from DxDiag, which could stall the process. The Mac hardware survey now correctly reports Metal as the active RHI.

  • New: Created of a framework to write the high level rendering code into passes organized in a direct acyclic graph. Also unified the uniform buffer, shader parameters, and pass parameters to the same single API structures with runtime metadata to have it interpreted by different components.

  • New: Projects should no longer use SetRenderTargets and similar functions. All rendering should go through the renderpass API.

  • New: The overview and guide to use the new FShaderPipelineCache system can be found here: https://docs.unrealengine.com/en-us/Engine/Rendering/PSO-Caching

  • Removed: Removed obsolete FShaderCache - use FShaderPipelineCache instead.

Online

  • New: Projects targeting Steam releases no longer require source code edits to properly register their dedicated servers on Steam. This change also enables setting the application ID for shipping projects without further modifications to source as well. The following macros have been added and should be defined in the project's Target.cs file:

    • For projects that use dedicated servers, these must be defined for your servers:

      • UE4_PROJECT_STEAMPRODUCTNAME

      • UE4_PROJECT_STEAMGAMEDESC

      • UE4_PROJECT_STEAMGAMEDIR

    • Clients for dedicated server projects must have the following defined:

      • UE4_PROJECT_STEAMGAMEDIR

    • All Steam-based projects must have the following defined:

      • UE4_PROJECT_STEAMSHIPPINGID

Please refer to the Steam project documentation regarding setting these flags and their appropriate values.

Known Issues

For a complete listing of known issues affecting Unreal Engine 4.22, please see the Unreal Engine Public Issue Tracker.

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见