虚幻引擎4.25版本说明

虚幻引擎4.25版本说明

Windows
MacOS
Linux

全新内容

在虚幻引擎4.25版本中,我们仍然在努力为大家提供最完善、最灵活、最强大,且操作便利的实时3D创建工具。新版本进一步拓展了工具集,加入了 更多游戏和可视化开发领域的内容创建与编辑 功能,同时改良了功能集、改善了现有工具的工作流程。线性媒体工具得到了改良,能够更高效地创建身临其境的线性与动画内容。对现有平台的支持也得到了进一步提升,并 为次世代游戏主机提供一流支持

设计者和创作者从终端产品中移除的内容越多,越难以实现最初的创作愿景。虚幻引擎4.25版本提供了全新及改良的系统和工具,使创作者能够以前所未有的自由度在编辑器的情境中直接对最终内容进行创建、修改和迭代。Niagara视效和Chaos物理系统已得到改良和拓展,能够提供 高质量、高性能动态模拟。Control Rig和Sequencer已结合,能实现 编辑器内的绑定角色动画。同时还添加了建模和造型工具,能够 在视口中构建和更新环境

虚幻引擎继续提供新鲜好用的方式,让用户可以制作出混合数码元素的影片和线性内容。新增的影片渲染管理器(Movie Render Manager)能够 以简化工作流输出高质量渲染,并整合到任意流程中。nDisplay多显示技术也变得 更容易配置且更强大,能让任意虚拟产品通过LED壁投和大型场馆显示屏进行展示。除此之外,新版本还对其他几个领域进行了改良,如摄像机内视效、直播和实况工具、3D文本动画打造的动态图形,用户甚至还能 在虚幻编辑器中直接生成表格和图表

在每个版本中,我们都倾注了不少精力来提升对各个平台的支持,以便开发者的项目面向更广平台的用户。此版本新增了 对次世代游戏主机的支持,也就是微软Xbox Series X及索尼PlayStation 5。此外,iOS与Android的 渲染和开发工作流程已得到大幅改进。HoloLens 2和Magic Leap之类的增强现实设备也加入了新功能,开发工作流程同样得到了改良。

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

Filippo Tarpini "Filoppi", Doug Richardson "drichardson", Daniel Marshall "SuperWig", Doğa Can Yanıkoğlu "dyanikoglu", "projectgheist", Artem V. Navrotskiy"bozaro", "KieranNewland", "sturcotte06", "ohmaya", Morva Kristóf "KristofMorva", Kalle Hämäläinen "kallehamalainen", Eric Spevacek "Mouthlessbobcat", "mattpetersmrp", "doublebuffered", "SaltyPandaStudios", "Fi",Charles Alexander "muchcharles", Kristján Valur Jónsson "kristjanvalur", "solasin", "zzgyy123", Alex Stevens "MilkyEngineer", Artem Gurevich "glcoder", Konstantin Heinrich "kheinrich188", Jørgen P. Tjernø "jorgenpt", "CA-ADuran", Muhammad A.Moniem "mamoniem", Paul Greveson "moppius", Cristiano Carvalheiro "ccarvalheiro", "farybagj", Robert Khalikov "nbjk667", "ecolp-improbable", "unrealTOM", "fuchuanjian2016", Ilya "Neo7k", Mikhail Zakharov "real-mikhail", Cameron Angus "kamrann", Sam Bonifacio "Acren", Michael Kotlikov "mkotlikov", "Yaakuro", "dbaz", "kshokhin", Joe Best-Rotheray "cajoebestrotheray", Selivanov Artem "broly", Toru Hisai "torus", Lucas Maldonacho "Maldonacho", Maxim Marinchenko "mmarinchenko", Matan Shukry "matanshukry", Ben Hetherington "BenHetherington", "No-Face-the-3rd", Jeong ChangWook "hoiogi", Geordie Hall "geordiemhall","jessicafolk", Franz Steinmetz "Kartonfalter101", "fieldsJacksonG", Rune Berg "1runeberg", "DCvipeout", Nick Edwards "NEdwards-SumoDigital", "harshavardhan-kode-sb", Lukas Tönne "lukastoenneMS", Noah Zuo "NoahZuo", Chris "minimpounminimpoun", Viatcheslav Telegin "vstelegin", Ryan "RyanyiNF", smallshake "smallshake", Sergey Igrushkin "shkin00", Punlord "Punlord', Andrey Chistyakov ,"roidanton", Vasilii Filippov "DrizztDoUrden", Yi Qingliang "Walkthetalk", HugoLamarche "HugoLamarche", Gerke Max Preussner "gmpreussner", "RPG3D", Zak Strange "StrangeZak", "heavybullets", Alexander "DecoyRS", Martin Nilsson "ibbles", Peter Giuntoli "petergiuntoli", Torsten Raussus "Getty", Evan Hart "ehartNV", Arvid Hansen Díaz "DonHansonDee", Gregory Hallam "greghs".

主要功能

新增内容:次世代平台支持

image alt text

虚幻引擎4.25将首次为索尼PlayStation 5和微软Xbox Series X提供一流的平台支持。今年,我们还将继续更新4.25的后续分支,提供优化、修复和验证以帮助开发者在次世代主机上发布产品。新功能包括针对各平台的功能,如全新音频改良,首次支持在线子系统,以及对TRC和XR验证的早期支持。

新增内容:Unreal Insights改良

新版本对 Unreal Insights 进行了用户体验及架构改良,加入独立的追踪浏览和记录、全新查看器进程及追踪组织通道。此版本还包括Timing Insights的搜索和可视化,新增"Network Insights"窗口,帮助用户优化和调试网络流量。

image alt text

Unreal Insights用户体验改良(测试版)

此版本中,Unreal Insights包含以下用户体验和架构改良:

  • 在新版本中查看追踪将启动单独的Insights进程,将追踪的浏览和记录清晰地分离开

  • 选择新追踪时,Unreal Insights支持自动生成新的查看器进程

  • 追踪事件纳入通道,可在Insights中开关实时会话的这些事件

    • 用户可以从命令行选择通道

Timing Insights

在新版本中,用户可以使用定时事件过滤来改善搜索体验。用户可以借助图表支持改良来追踪和显示数据相关性的指标。

欲知详情,请参阅Unreal Insights

Networking Insights(实验性)

首先了解如何获取和使用Unreal Insights

Unreal Insights包含用于优化、分析和调试网络流量的 Networking Insights。用户可以利用以下功能记录追踪信息,以显示网络行为:

  • 游戏实例(Game Instance)功能按钮,用于在记录网络会话期间显示可见机器

  • 连接模式(Connection Mode)功能按钮,用于显示传出或传入的数据

  • 数据包概览(Packet Overview)面板,用于显示游戏期间传输或接收的数据包时间轴(和大小)

  • 数据包内容(Packet Content)面板,用于显示数据包内容,例如重复的对象、属性和远程函数调用

  • 网络统计数据(Net Stats)面板,用于显示选定数据包的追踪事件,包括数据包总大小、大小上限、以及排除式或包含式数据包平均大小

欲知详情,请参阅Networking Insights

Animation Insights(实验性)

image alt text

新版本中,编辑器拥有 Animation Insights 插件,可显示gameplay状态和实时动画行为。用户可以使用以下功能记录追踪信息,以显示动画行为:

  • 通道过滤,选择写至记录数据集的追踪数据

  • 源过滤,选择输出追踪数据的gameplay对象

  • 姿势、曲线、混合权重、动画图表、蒙太奇和动画通知轨迹

  • 包含实时更新的动画图表原理视图,用于替换 'showdebug animation' 系统

欲知详情,请参阅Animation Insights

欲详细了解追踪会话和追踪录制器,请参阅Unreal Insights概述

新增内容:Niagara已可用于生产

Niagara视效(VFX)系统已可用于生产。Niagara已通过严苛测试,用途广泛:它既能制作《堡垒之夜》中的视效,也能制作高端技术演示项目或进行电视电影虚拟制片。新版本对用户界面进行了改良,更便于使用。性能和伸缩性也得到了极大提升。另外还新增了音频数据接口、粒子间粒子通信等诸多功能。

Niagara的粒子属性读取器

新版本中,用户可以使用新的粒子属性读取器数据接口 直接访问其他粒子的属性。发射器或系统可直接读取其他粒子的参数(如位置、颜色、年龄等),从而实现聚集、距离约束、尾迹等各种效果和行为。

粒子属性读取器数据接口可以从使用它的同一发射器、或从同一系统中的其他发射器中读取粒子属性。当它从自己的发射器读取时,将返回上个tick或模拟阶段的数据。当粒子属性读取器从不同的发射器读取时,Niagara会先模拟它正在读取的发射器,然后再模拟粒子属性读取器的发射器。如此,数据接口便能从同一tick返回结果。

Niagara的参数面板UI改良

Niagara脚本编辑器的参数面板布局已得到更新,极大提高了Niagara脚本中所使用参数的清晰度。新布局与蓝图参数面板布局类似。参数不再按命名空间(系统、发射器、粒子等)分类,而是按描述其在脚本中用途的功能标签(输入、引用、输出和本地)来分类。新版本中,用户也可以用下拉菜单来选择参数的目标命名空间!

image alt text

image alt text

参数面板(旧版)

参数面板(4.25版)

输入(Input) 类别中的参数可由脚本的用户配置(之前在 模块(Module) 命名空间中写入的参数也是如此)。引用(Reference) 类别中的参数不可配置。输出(Output) 类别中的参数包括脚本修改的任何内容。本地(Local) 类别中的参数在脚本中定义,且仅在该脚本中有效。

音频示波器和音频频谱数据接口

用户可以利用新版本中的 音频示波器(Audio Oscilloscope)音频频谱(Audio Spectrum) 数据接口将Niagara系统连接到虚幻音频引擎。音频示波器 可用于直接访问音频信号的波形,而 音频频谱 可用于创建可视化效果,该效果将随音频在特定频率下的响度而变化。

这些接口能够尽量减少延迟和性能开销。这两个接口默认使用游戏的最终音频,但也可以设为仅使用特定的音频副路混合。

Niagara效果类型资产

效果类型资产可用于设置伸缩性和性能相关设置的默认值,这些设置在特定类型的所有效果之间共享,以便在项目中不同的效果类型间保持一致性并执行预算限制。

平台的性能可扩展性

新版本中可逐平台指定Niagara效果的性能伸缩性,对平台伸缩性进行简单明了的控制,同时仍可根据需要微调性能。

可以使用质量级别来控制启用发射器的平台,例如只对拥有 效果质量的设备启用发射器。为便于更好地控制,可以使用各个质量级别下的设备概述文件树,在平台集中包含或排除特定的设备概述文件。

image alt text

低效果平台下拉选项

基于平台的伸缩性也能够在效果类型资产的伸缩性设置中进行指定。详情请见"Niagara效果类型资产"章节。

发射器继承重设父项

新版本中,用户可以在创建后使用Niagara中的继承来更改发射器的父项,以增强灵活性、并在保留发射器观感的同时重组项目中的资产。父项变化时,子发射器中与新父项匹配的所有模块都将更新;但与新的父发射器不匹配的所有内容都将保留在子发射器上。

选中发射器后,设置菜单将包含名为 更新父发射器(Update Parent Emitter) 的选项。选择该选项显示菜单,可在其中选择新的父发射器。选择新的父发射器后,子发射器将自动更新。

image alt text

点击齿轮图标打开发射器设置

用于模块创建的Niagara作用域

Niagara现在拥有一个新的模块创建概念模型,名为 作用域(Scopes),它定义模拟运行从开始到结束的信息流。举例而言,系统作用域 流向 发射器粒子 作用域;发射器作用域 流向 粒子作用域,等等。作用域取代了 命名空间 的概念。结合类别(输入(Input)、引用(Reference)、输出(Output)、本地(Local)),使参数在Niagara脚本编辑器中的使用更标准化、更清晰。

用户更新至4.25版本时,现有参数将更新至新范例。

Niagara暂存区

使用Niagara系统和发射器编辑器中的全新暂存区,用户可以创建包含在发射器或系统资产中的模块和动态输入,尝试为效果开发模块或动态输入,并实时查看结果!可从现有的脚本资产导入模块和动态输入脚本,在暂存区中创建的内容也可导出至现有或新的脚本资产。还可使用暂存区创建专属于所创建系统或发射器的内容。可直接在暂存区中进行创建,在发射器或系统内使用,无需新建一个其他方面用途有限的脚本资产。

Niagara选择面板UI改良

新版本已对Niagara系统和发射器编辑器进行改良!现可以使用右键快捷菜单复制、剪切和粘贴模块、模块输入(包括动态输入)和渲染器。此外用户还能够自定义模块显示名称、改善模块的高亮显示,并为设置变量(Set Variables)模块命名创建更好的UI。系统概述中的发射器节点现在将显示这些发射器中所用材质的缩略图。

新增内容:着色模型改良

此版本对材质着色模型进行了较大改良与增补,支持各向异性属性、带精确物理属性的真实着色半透明材质,以及能准确响应不同时间光线物理变化的改良透明涂层着色模型。

这些改良十分适用于创建汽车和建筑视觉表现的材质,以及用于媒体和娱乐。

image alt text

各向异性材质支持(测试版)

我们已利用GGX各向异性公式实现了支持正确各向异性材质的第一步。在此版本中,这些材质将支持准确的IBL光源,以及在透明涂层和默认光照着色模型材质中的反射。而针对区域光源,BRDF则回退到之前使用的各向同性响应。

各向异性(4.25)

各向同性(4.24)

为支持各向异性材质,我们已对GBuffer进行扩展,可在BasePass不发射速度时提供切线缓冲。用户可以选择通过材质进行顶点变形,在速度传递期间触发对象渲染,免去在BasePass过程中输出速度的麻烦。这意味着可启用切线缓冲,且BasePass过程中没有速度,但不会丢失任何功能。

在项目中启用各向异性材质的方法是使用项目设置(Project Settings)将 使用各向异性BRDF(Use Anisotropic BRDF) 设为true。在材质中,主节点现有 各向异性 的输入,用于控制光沿表面照射的方向。

欲知更多详情,请参阅着色模型

基于物理的半透明度

新版本添加了基于物理原理的新半透明着色模型 薄半透明(Thin Translucency),能够在单通道中处理材质(例如彩色或有色玻璃)。这样能使材质根据物理原理准确地呈现透明材质,同时玻璃着色器的质量和性能也优于之前使用的方法。

image alt text

举例而言,在创建有色玻璃材质时,需要添加白色高光,并将其用于背景上色。在旧版本中,要实现这种效果,唯有使用单独的对象处理白色高光,同时执行复杂的设置,才能以正确的顺序混合。薄半透明着色模型根据物理原理使用着色器在单通道中渲染,着色器会考虑光线从空气反射到玻璃和从玻璃反射到空气中的情况。

执行以下操作,在材质(Material)中启用薄半透明(Thin Transparency):

  • 着色模型(Shading Model) 设为 薄半透明(Thin Translucent)

  • 光照模式(Lighting Mode) 设为 表面前向着色(Surface ForwardShading)

  • 将纹理或颜色表达式插入 Thin Translucent Material Output 表达式。

欲知更多详情,请参阅使用透明度 文档。

透明涂层着色模型改良

此版本显著提高了透明涂层着色模型的物理准确度。新版本对模型进行了修改,并首先使用路径追踪器实现这些修改,所以能够根据引擎中生成的地面实况图像来提高传统栅格化和光线追踪技术的质量。

4.25透明涂层

4.24透明涂层

此外,虚幻引擎的透明涂层模型在设计时便考虑到了环境光照因素。在新版本中它对精确光源有正确的方向响应,其中衰减和菲涅耳项主要针对带有方向性的光源,而环境光照则保持不变。

欲知更多详情,请参阅着色模型

新增内容:Chaos物理系统更新

image alt text

Chaos物理系统现在已成为《堡垒之夜》版本更新的必备工具之一,它支持以下功能:

  • 破坏——这个高性能系统能实时打造影片级的大范围破坏

  • 静态网格体与碰撞的动态交互——场景中动态物体的刚体模拟

  • 布料——布料、旗帜及其他织物的动态布料模拟

  • 毛发——基于发束、准确反映物理特性的毛发模拟

  • 刚体骨骼控制——马尾辫之类物体的简化模拟

  • 场景查询——在场景中执行追踪

新增内容:高质量多媒体导出(测试版)

高质量多媒体导出(High-Quality Media Export)是Sequencer影片渲染功能的升级版,可以提升质量、简化生产流程集成,并提升用户可延展性。使用高质量多媒体导出可以累积多个渲染样本来生成最终输出帧;从而实现更高质量的抗锯齿、径向动态模糊,并减少光线追踪中的噪点。

高质量多媒体导出还支持一些新功能来生成高质量渲染,如支持分块渲染的全新高分辨率设置,其能克服GPU内存限制和设备超时限制。用户还可以导出半透明图像(借助相应项目/场景设置),生成拥有线性数据的16位HDR图像,并将渲染配置保存为开发者可以重复使用并与分享的资产。最后可通过新的渲染队列进行批处理,从而轻松批量渲染多个序列,其类似Adobe After Effects中的渲染流程。

最终,高质量多媒体导出将取代Sequencer的现有渲染影片功能。在当前版本中导航至 窗口(Window)> 过场动画(Cinematics)> 影片渲染队列(Movie Render Queue),再将关卡序列添加至渲染队列便能使用高质量多媒体导出。请注意:高质量多媒体导出暂时还没有渲染影片的完整功能,因此Sequencer仍将默认使用渲染影片。

image alt text

欲知高质量多媒体导出的详情,请参见高质量多媒体导出概览

全新内容:音频系统更新

虚幻音频引擎中新加入了卷积混响处理和声场渲染。音频设计者可以模拟出高度真实的声效空间,将听众包围在其中,从而使项目拥有身临其境的真实音效体验。

卷积混响

用户可以利用全新的 卷积混响 效果,使用来自真实或设计空间的样本在虚拟环境数码模拟真实声效,构建更真实的混响。

  • 卷积混响是对传统混响技术的改良,由数据驱动。它并不是使用延迟缓冲、滤波和各种其他DSP拓扑的组合来模拟混响,而是使用音频采样来用作真实或设计空间的声学测量,以模拟实际房间和环境的声音。

  • 卷积混响能增强在舞台之外或录音棚中录制声音和对话(通常是在后期制作中)的"临场感",因此通常用于电影电视制作中,打造出更丰富、更逼真的声音混合。

原生声场环境立体声渲染

虚幻引擎新版本支持渲染 声场环境立体声,来提供全沉浸式的空间音效。声场与传统环绕声有所不同。环绕声资产可提供静态声床的良好展示;而环境立体声资产能包围听众,让音效在声场中旋转,打造出交互环境更真实的沉浸体验。

image alt text

球面谐波函数前4个波段的视觉展示。蓝色部分是函数为正的部分,黄色部分代表函数为负的部分。图片由Inigo.Quilez 提供。此文件已获得Creative Commons Attribution-Share Alike 3.0 Unported 授权。

  • 声场是音频对光照球面谐波的音频模拟。使用引擎中的声场录音作为音频"天空盒",声场可以相对听众和声源方向旋转。

  • 原生声场通过环境音效极大提升空间深度,无视用户的扬声器配置。

  • 因为可以用专用麦克风从现场录音中采集声场,因此渲染这些声场可显著增加场景的真实感。

新增内容:LiDAR点云

虚幻引擎现已内置激光扫描点云,能更轻松地将真实世界带入实时展示。

image alt text

image alt text

我们对商城中LiDAR点云插件的性能和伸缩性进行了重大改良,添加了新的设置和功能,使其可直接在虚幻编辑器的插件(Plugins)窗口中使用。

导入

  • 支持几个主要的点云格式,包括ASCII(.txt、.xyz、.pts)和.las文件。

  • 可将文件拖到内容浏览器上,或在运行时使用蓝图API将其导入编辑器。

  • 异步导入可避免在加载内容时锁定引擎。

渲染

  • 点云可以投射和接收动态阴影,有助于研究太阳和光照。

  • 支持极大的数据集,以及文件按需数据流送和GPU流送。动态的细节等级(LOD)系统可保持较高性能,同时通过优先处理视口中央的点来保持视觉效果。

  • 使用简单点或自定义材质来渲染数据。

  • 多种着色技巧(RGB、强度、仰角、分类等等)。

  • 广泛的颜色调整。

  • 用包含的后期处理材质所提供的Eye-Dome光照技术加强形状。

交互

  • 在编辑器视口中隐藏、删除、合并和提取单独的点。

  • 根据点数据创建碰撞网格体。

  • 使用蓝图API在编辑器中或运行时新建云和添加点。

新增内容:HoloLens 2改良

虚幻引擎中的HoloLens 2经过了大量改良,能更高效地开发针对增强现实平台的应用程序,并为用户带来更强的参与性和沉浸感。

image alt text

图片由微软提供

  • 虚幻引擎新版本支持从桌面应用程序远程运行应用程序,无需再运行虚幻编辑器。

  • 我们还添加了实验性的OpenXR支持(可在HL2上显示像素)以及后期重投影,可实现从第三人称摄像机视图中进行混合现实采集,并消除来自帧、深度和第三人称摄像机渲染缓冲的渲染目标副本,每帧可减少2毫秒帧渲染开销。

Azure空间锚(测试版)

虚幻引擎现在还支持Hololens 2的Azure空间锚,全息图可持续留存在会话之间的真实空间中。

Mixed Reality UX Tools

  • Unreal现在支持使用混合现实UX工具插件,该插件通过GitHub 上的开源插件为混合现实开发者提供了一组UX工具(按钮、操作器、近+远交互、跟随行为),以便加速开发。

  • Unreal还支持在UE4的PIE视口中模拟双手,这使得开发者可以使用模拟出的双手来测试混合现实应用,而不需要将应用部署到模拟器或设备上(需要混合现实UX Tools插件来提供手部模型)

新增内容:光线追踪更新,可用于生产

随着新版本的发布,我们高兴地宣布,虚幻引擎的光线追踪功能现已就绪,可用于生产!经过之前数个版本的开发后,我们终于实现了这个目标。新版本还将继续添加新功能并改善现有功能,同时保持稳定性和性能。

image alt text

左上:堡垒之夜 | Epic Games;右上:塞娜的传说:地狱之刃II | Ninja Theory:左下:A5 Cabriolet模型由奥迪提供,HDR图像由HDRI Haven提供:右下:建筑可视化内饰渲染示例 | Epic Games

本版本有以下新增内容和改良:

  • 在CPU和GPU上添加了对Niagara网格体发射器的支持。

  • 添加了对全新各向异性着色模型的支持。

  • 极大改良了透明涂层着色模型结合光线追踪功能使用时的质量。

  • 向路径追踪器添加了透明涂层BRDF材质的支持,可生成地面实况对比。

  • 添加了对次表面分析材质的光透射支持。

欲知详情,请参阅实时光线追踪 文档。

新增内容:导航改良(测试版)

我们在虚幻引擎4.25中对寻路网格体进行了一些改良,重点是提高灵活性并进行优化。

离线寻路网格体构建

可将-BuildNavigationData添加到ResavePackages命令行,在离线状态下重新构建寻路网格体。开发者可借此在自定义构建流程中更轻松地构建寻路网格体。

用于FindPath查询的CostLimit参数

新版本中,FPathFindingQueryData结构拥有CostLimit变量。CostLimit限制了可在导航期间添加到开放列表的节点总成本,提供了一种提前退出寻路进程的方法(尤其是在处理较长的路径时)。

CostLimit默认值为FLT_MAX,但可在FPathFindingQueryData中手动定义限制,或使用ComputeCostLimitFromHeuristic计算限制。

在寻路网格体下方填充碰撞

新版本中UStaticMeshComponent拥有一个名为bFillCollisionUnderneathForNavmesh的属性。设置此属性后,其将模拟用碰撞填充静态网格体下方的空间。若对象位于寻路网格体边界体积内,则不会在对象表面之下生成寻路网格体。这种方法可以排除不需要生成寻路网格体的区域,用多层碰撞优化关卡。

用重投射寻路网格体生成器重新生成时间分片寻路网格体

重新生成实时寻路网格体的开销可能极高,通常会导致网络游戏出现长时间的服务器高峰。时间分片寻路网格体重生生成将重新生成寻路网格体图块的过程分布到所需时间段中,大幅降低非异步寻路网格体生成造成处理高峰的可能。

新增内容:动画时间轴重构(测试版)

image alt text

新版本中,动画资产的资产编辑器使用类似于Sequencer的时间轴,在处理动画数据时能提供更一致的外观和感觉。新版本中,动画蒙太奇部分的编辑将在拥有breadcrumb轨迹和下拉菜单的专属选项卡中完成。此外,动画曲线现在使用类似于Sequencer的全功能曲线编辑器。

新增内容:动画压缩改良(测试版)

动画压缩系统现已全面升级,提高了灵活性和生产效率。新版本中插件能够指定新的动画压缩方案和压缩数据结构。动画序列现在引用压缩设置资产,其中包含一个或多个应用于动画序列的编码解码器,取代了旧版本中硬编码的"自动压缩"概念。新版本中的动画压缩为异步操作,在虚幻编辑器中作为非阻碍性的操作执行,因此在压缩过程中可以继续进行其他操作。

新增内容:Control Rig改良(实验版)

image alt text

Control Rig已经过优化,处理速度最高提升了 20%,内存用量最高减少了 75%!此外,添加这些功能后,整体用户体验也得到了改善:

  • 值的可视化调试和直接操作

  • 层级现在支持骨骼树、空间和控制,其中控制按钮代表绑定的3D用户界面。

  • 我们提高了用户界面设计的灵活性,增加了Python脚本编写全覆盖,实现了工作流任务的自动化,扩展了对序列中的Control Rig的支持。

新增内容:带Control Rig的编辑器内动画(实验性)

用户可使用Control Rig在关卡编辑器中对绑定角色添加动画,然后将资产导出为动画序列在游戏中使用。在虚幻编辑器中即可创建、保存和显示动画。直接在引擎中创建这些动画也无需用到外部第三方程序。

image alt text

新增内容:声场和终端副路混合(测试版)

在虚幻引擎中实现空间音频格式时,声场和终端副路混合(测试版) 可有效缩短开发时间,并提供更好的空间定位控制,打造出身临其境的游戏体验。

新增内容:默认副路混合资产化(测试版)

默认副路混合现可在音频设置中定义,可像其他副路混合资产一样处理,实现更快的迭代速度。到目前为止,默认音效副路混合(主音效、环境立体声、混响、EQ和混响插件副路混合)在UE4中皆为硬编码,意味着用户对这些副路混合添加效果的能力很有限。

新增内容:主/侧链压缩(测试版)

主/侧链压缩(测试版) 是一种改良方法,可以在听众需要集中注意力聆听特定声音时避开环境音效。例如当敌人靠近时,远处更响的手榴弹爆炸声不会掩盖掉敌人的脚步声。音效设计人员能够通过混音的动态范围进行更好的音效控制,并考虑实际的音频特性。

新增内容:转换为带子Actor的蓝图

在新版本中,用户能够使用关卡编辑器中的"转换为蓝图(Convert to Blueprint)"操作 将多个Actor转换为带子Actor的单一蓝图资产。可以使用新的 子Actor(Child Actors)选项创建单个蓝图资产,其中包含任意类的主Actor,且所有选定Actor的副本(以及任何修改的属性值)都通过子Actor组件附加到该资产。将此蓝图资产放入关卡后,所有选定Actor将生成为一个组。

新增内容:UObject属性优化

  • 此为API更新,不使用源代码的最终用户可能不会注意到此更新。

  • 插件开发者请阅读UProperty版本说明

UProperty已重构为FProperty,意味着用UPROPERTY宏标记的属性不再承担作为UObject的开销。此重构拥有以下好处:

  • 提高加载性能,在加载大量蓝图时尤其明显

  • 提高垃圾回收性能,项目拥有大量蓝图时尤为如此

  • 节约内存,在《堡垒之夜》中进行的测试显示内存节省量超过30 MB

  • 性能改良包括:

    • UObject迭代(要检查的对象更少)

    • FProperty转换速度是UObject转换的三倍

    • FProperty迭代速度几乎是UProperty迭代速度的两倍。

新增内容:Visual Dataprep改良(测试版)

Visual Dataprep系统已经过改良,初学者更容易上手,高级用户则能更灵活地加以运用。

图表编辑器现在拥有独特的外观和感觉,能够更好地反映其执行状况和数据流:

image alt text

它强调操作的线性序列,而非连线式蓝图风格节点图表。视觉提示更清晰,帮助用户添加新的操作步骤,并用颜色区分过滤器块和运算符块。

此外:

  • 已向蓝图和Python公开最常见的Dataprep操作。自定义编辑器脚本可通过Visual Dataprep系统驱动导入,甚至可使用操作、过滤器和运算符设置新的dataprep图表。

  • 新增了一些 Select By 块,可按图层、顶点数或三角形数来过滤对象。

  • 新增了几个 Operator 块,提供用于设置场景和资产的额外选项,比如向Actor的3D位置添加随机偏移的功能、在静态网格体中翻转三角形朝向的功能、替换资产引用功能,等等。

详情请参见Visual Dataprep

新增内容:Datasmith对PLM XML的支持

大型CAD项目将Siemens PLM XML作为专业3D应用程序之间丰富互操作性的标准。虚幻引擎中现已添加实时可视化功能,用途也更加广泛。

Datasmith CAD导入器导入PLM XML文件,提供其为其他数据格式所提供的全部功能。导入流程从引用文件中自动导入几何体,保留场景层级和位置,并提供无损级重新导入功能,可保留在虚幻引擎中所做的更改。它将PLM XML用户数据转换为Datasmith元数据,甚至为各个PLM XML产品视图创建变体,以供变量管理器使用。

欲了解Datasmith的使用基础知识,以及导入进程的细节,请参见Unreal Datasmith

新增内容:Datasmith交互操作改良

每个版本我们都会不断改良Datasmith对第三方应用程序和文件格式的兼容。

Rhino

  • 新版本中,用户可以更好地控制虚幻引擎中使用的三角形网格体来渲染Rhino文件中的参数化表面。从Rhino文件导入场景时,可以为文件中的参数化表面选择两种不同的曲面细分策略:

    • 可使用导入选项(Import Options)对话框中提供的曲面细分设置,通过Datasmith对所有参数化表面进行曲面细分。(仅4.24版有此选项。)

    • 可重复使用之前由Rhino创建并存储在Rhino场景中的三角形网格体。若对Rhino渲染器中实现的曲面细分效果感到满意,此策略还可为虚幻引擎的实时可视化效果保留相同的曲面细分效果。

  • 新版本中Datasmith会将Rhino点作为空Actor导入。此操作将保留这些点在场景层级中的位置,并可在Rhino场景中放置占位符和目标点,将它们带入实时显示效果。

  • 新版本中,Datasmith将Rhino对象的相关技术元数据作为Actor上的标签导入。

详情请参见使用Datasmith和Rhino

Revit

在新版本中,可以将Datasmith导出整合到Dynamo脚本中,从而更好地控制设计实时可视化效果的自动生成流程。Revit的Datasmith导出插件现在包含用于Dynamo的插件:DatasmithDynamoNode.dll。此插件包含新的 DatasmithDynamoNode.Export3DViewsToDatasmith 节点,可用于将多个3D视图从Revit批量导出到.udatasmith文件。

用户可以指定要导出的Revit文档、生成.udatasmith文件的路径、要导出的3D视图的ID,以及Revit生成的三角形网格体所需的曲面细分等级。

我们还进行了很多其他修复和改良:

  • 对于在Revit有起始点的实体(如墙壁、栏杆、管道和线路),现在其枢轴已放在虚幻引擎中的正确位置。

  • 在新版本中,除了Revit项目文件(.rvt)之外,还可将Revit族系文件(.rfa)导出到.udatasmith文件。

  • 导入的纹理现在在内容浏览器中将正确进行标记,对应其Revit源。同样,用于幕墙面板等对象的静态网格体组件也在命名方面有所改良。

  • 新版本中,来自Revit的PBR材质类在导入时可保持其视觉属性的完整,而非一律变成灰色。

  • 新版本中,虚幻引擎中的Actor可以存储标签,用于表明Revit中的相应对象为翻转或镜像。这有助于用户对需要特殊处理的翻转或镜像对象进行自动化dataprep操作。

详情请参见使用Datasmith和Revit

新增内容:变体管理器改良

变体管理器可帮助用户提前设置关卡的多个不同变体,并在运行时在这些变体之间进行切换。新版本对变体管理器UI进行了几处易用性改良,以便根据需要设置变体:

image alt text

  • 现可将外部图像文件设为变体的缩略图。

  • 可置换出变体中的任何绑定Actor,替换为另一个Actor。

  • 可将任何Actor的已采集属性拖动到新位置,对其重新排序。这有助于让最关键的属性轻松地显示出来。

  • 若采集颜色属性,现可使用取色器更轻松地设置属性值。

  • 现可从过场动画摄像机Actor中采集更多摄像机设置。

  • 设置变体在激活时调用蓝图函数后,该函数现在会接收来自情境的额外参数:关卡变体集资产、被激活的变体,以及拥有已激活变体的变体集。此情境有助于设置复杂的响应。举例而言,有时可能需要激活其他有依赖性的变体。

欲知变体管理器的详情,请参见使用场景变体

新增内容:实时USD改良(测试版)

提升了虚幻编辑器对来自Pixar的通用场景描述(USD)交换格式的支持力度,可利用选择的场景构建和动画工具更轻松地打造资产管理流程。在新版本中:

  • 将USD数据导入实时USD阶段更快、响应更灵敏,采用多线程导入且渲染性能更佳。

  • 现在每个USD图层都将进入自身的Sequencer轨迹,便于单独处理每一层的对象和动画。

  • 导入器将把场景对象的USD用途导入虚幻引擎中。在编辑器中,可在USD支持的不同用途(默认渲染代理指南)之间切换场景的视觉效果。

  • 该导入器现支持USD点实例化器,用静态网格体实例自动设置虚幻引擎场景,与点实例化器创建的各个对象匹配。

  • 可将虚幻引擎材质指定到USD基元。

  • USD Python API现在在虚幻编辑器中公开。可以使用它在Python编辑器脚本中控制USD场景。

  • 若使用自定义USD模式,用户可连接自定义C++回调函数来处理自己的数据结构。

如需了解相关概述和使用说明,请参见UE4中的通用场景描述

新增内容:编辑器性能改良

我们每发布一个新版本都会显著提升性能,尤其是提升处理大场景时的性能。4.25版中加入的性能改良有:

  • 在部分情况下,通过Incredibuild进行的着色器编译效率提升90%。我们用内部设置进行测试时,发布着色器的编译时间已缩短五倍。

  • 代理网格体创建流程可以更好地根据CPU数量进行调整,复杂设置下也能将处理时间轻松缩短三倍以上。

  • 在部分情况下,大场景上的批凸包计算较旧版提速100倍之多,缩减4倍内存用量,将数小时的处理时间缩短为数分钟。

  • 材质烘焙改良后,处理速度快14倍,内存用量减少3倍。性能提升各有不同,具体取决于使用的GPU后端。

  • Datasmith处理数据重导入改良后,重导入时间和内存用量都有了可观减少。

  • Datasmith CAD场景的保存方式已改良。新CAD场景的保存和加载只需数秒即可完成。

  • Datasmith VRED及DeltaGen FBX导入工作流在处理大型FBX文件时速度更快。

  • 距离场在多核CPU上的计算效率更高,处理时间将缩短5倍,核心优化更佳。

  • 将影片成片导出为PNG文件的速度得到了前所未有的提升。在计算机上检测到此功能时,其将使用AVX-2之类的新指令集功能。新版本中,可以在16核CPU上将4K视频实时导出为PNG文件。

新增内容:灾难复原改良

最新版本的灾难复原使用的内存更少,处理的资产更大(大于2 GB)、处理速度更快。新版本中加入了新的复原中心(Windows > 开发者工具(Developer Tools) > 恢复中心(Recovery Hub)),删除现有的恢复会话。因为恢复会话可能较大,新版本添加了新设置,以便用户选择保存恢复会话的位置。

新增内容:编辑器涂绘模式改良(测试版)

网格体涂绘系统已得到改良,可提供更流畅的工作流程,并为高级团队提供更高的生产效率和扩展性。上个版本的网格体涂绘工具集功能得到保留,并新增了一些优点:

  • UI更简洁。

  • 不依赖于物理追踪。

  • (高级用户)可以扩展顶点绘制,以便绘制其他顶点数据

新版本中,模式选择位于工具栏中,而并非面板上的选项卡。进入网格体涂绘模式后,选择工具将独立于涂绘工具。

image alt text

VR模式不支持这些功能。

新增内容:视口中建模和造型改良(实验版)

我们在各个版本中不断对在虚幻编辑器视口中直接处理几何体的实验工具集进行重大改良,目标是实现完善、端到端的几何体建模和自适应网格体造型工作流程。

本版本中还加入了几个网格体修复工具,旨在修复导入资产涉及的小问题,尤其是那些来自CAD应用程序的问题。这些工具可以填补漏洞,相对于几何体移动枢轴点,以及交互式地生成和调整UV贴图。

新增内容:移动设备的默认渲染特征等级

新版本中,OpenGL ES3.1Metal 2.0 分别是Android和iOS项目的默认特征等级。Vulkan、ES3.1和Metal 2.0都有类似的特性,能够在移动平台之间建立更好的特性对等。我们还可借此利用先进的移动技术,建立与台式机/主机之间更好的特性对等。

OpenGL ES3.1和Metal 2.0在新的Android和iOS项目中将默认启用,可在虚幻编辑器中将其设为预览特征等级。从旧版本虚幻引擎中迁移过来的项目会默认升级到这些特征等级。

OpenGL ES2和Metal 1.2的渲染特征等级已从虚幻引擎中移除。

新增内容:Android NDK 21b更新

虚幻引擎4.25版将更新至 Android NDK 21b。它提供大量Android工具链优化和bug修复;使用最新NDK版本的Android库现将兼容虚幻引擎。

为促成这一变化,虚幻引擎现在需要使用新的Android项目安装进程。现在需要从Android开发者存档下载并安装 [Android Studio 3.5.3 ,而不使用Codeworks for Android。完成安装后,在 Engine/Extras/Android 文件夹内找到 SetupAndroid 脚本,运行它来完成此流程。此脚本有相应的Windows、MacOS和Linux版本。

若已为虚幻引擎的上个版本安装CodeWorks,建议在使用SetupAndroid脚本之前建议先将其卸载。运行CodeWorks卸载程序,然后删除安装CodeWorks的目录即可完成卸载。

如果你需要支持更早版本的NDK,以便使用之前安装的虚幻引擎,请使用Android Studio安装NDK 14b并根据你的安卓项目设置手动选择NDK路径。关于此类支持的更多信息,请参考我们的关于NDK 21更新的博文 。注意,只有在你需要同时支持4.25及更早版本的虚幻引擎时才需要这么做。如果你不打算将项目迁移到4.25,可以继续放心使用Codeworks安装程序。

虽然4.25的预览版本使用了NDK 21,但其发行版本现在使用NDK 21b了。如果你已经设置了NDK 21,可以在更新到4.25.0后再次运行SetupAndroid以下载必须的组件。

新增内容:iOS启动故事板

新版本中,虚幻引擎可以使用 iOS启动故事板(iOS Launch Storyboards) 作为iOS上的启动画面。启动故事板支持动画,还可根据用户屏幕大小动态调整内容,提供更佳的启动体验。

Launch Storyboard Options

要使用启动故事板,请在 XCode 中创建 LaunchScreen.storyboard,并将其放在项目的 Engine/Build/IOS/Resources/Interface/ 文件夹中。之后,在 项目设置(Project Settings) > 平台(Platforms) > iOS 中启用 故事板(Storyboard) 选项。已创建的静态启动画面将不会再打包到iOS版本中。

为了方便需要占位符的项目使用,引擎会为没有启用自定义故事板的游戏自动打包一个默认故事板。你可以用静态启动图片替换此故事板,只需将图片放到 启动屏幕图片(Launch Screen Image)。该图片必须为没有alpha通道的PNG图片。同时为了尽可能兼容不同的纵横比和布局,它的长宽都必须为平方值。

自iOS 13开始,苹果要求开发者使用启动故事板,且不再接受带静态启动画面的送审内容。欲知详情,请参见Apple官方启动画面和故事板文档

新增内容:Android App Bundles

Android App Bundles 是Google Play商店的一种新上传格式。用户可上传单个AAB文件,不必为每种目标设备配置编译、签署和管理单独APK。然后,Google Play的动态交付系统使用该AAB自动生成针对终端用户设备配置的最终优化APK。这极大简化了为Google Play商店准备版本的过程。此外,通过App Bundles版本发布的最终APK的最大容量可达150 Mb,而非先前的100 Mb。注意,不使用App Bundles的项目容量限制仍为100 Mb。

使用App Bundles的方法是:在 平台(Platforms) > Android > App Bundles 下的 项目设置(Project Settings) 中启用 生成包(AAB)(Generate bundle (AAB))。在为Android平台打包项目时,它会将其打包为AAB,而不是APK。虚幻引擎还会自动生成通用APK,以供测试使用。

App Bundles目前不支持使用Android扩展文件(.OBBs)。

新增内容:Android交换帧同步器(测试版)

虚幻引擎现在集成了Google的Android游戏SDK中的 交换帧同步解决方案,以改进虚幻引擎游戏的渲染处理和Androi显示管线间的同步性。此功能将使Android游戏的帧率更稳定,触屏输入的延迟也将得到改善。

要为Android项目启用交换功能,请在想要使用的设备概述文件中添加配置变量a.UseSwappyForFramePacing=1,并使用r.setframepace [value]将帧同步的刷新率设为想要的值。

新增内容:移动设备上的虚拟纹理(实验版)

虚拟纹理 目前在移动设备上尚属实验性功能。使用虚拟纹理时可遵循与PC项目相同的步骤。详见虚拟纹理 documentation文档。

运行时虚拟纹理目前不使用纹理压缩,这意味使用的内存大约是预期的4倍。此外,为确保项目有必要的资产来利用虚拟纹理,目前推荐使用兼容ES3.1或Vulkan的Android设备、iPhone 8或更新版本。

新增内容:移动设备上的眼部适应(测试版)

眼部适应自动曝光 现在不但可用于PC和主机平台,还可用于移动平台项目。开发者可利用此功能重新创建人眼适应亮度变化的效果。

要使用眼部适应,必须启用 MobileHDR 来开启移动设备上的后期处理。可在 引擎(Engine) > 渲染(Rendering) > 移动(Mobile) 下的 项目设置(Project Settings) 中进行启用。

还必须将r.EyeAdaptationQuality和r.Mobile.EyeAdaptation这两个控制台变量设为大于0的值,以启用眼部适应。r.EyeAdaptationQuality变量通过sg.PostProcessQuality伸缩性设置进行配置,该设置位于[PostProcessQuality]部分的BaseScalability.ini中。r.Mobile.EyeAdaptation变量则是直接在BaseDeviceProfiles.ini中的设备概述文件中设置。它默认在Android_Low及Android_Mid设备描述中禁用,以及在部分低端iOS设备上禁用。

虽然眼部适应的性能开销不会很高,但若需要禁用,可将r.Mobile.EyeAdaptation设为0。

新增内容:Niagara模拟和迭代阶段(实验版)

模拟阶段会让一组模块在下一阶段模块之前对所有粒子进行计算。因此在下一个算法步骤(比如约束求解、高度场水模拟和基于位置的动态模拟)开始之前,模拟需要更新所有粒子。

迭代阶段是一个新概念,其中调度数由特定数据接口驱动,而非由粒子数量驱动。还有几个数据接口利用了这一概念,例如Grid2D集合,它修改了2D流体等模拟的2D网格数据。

模拟阶段和迭代阶段都属实验性功能,目前仅适用于使用GPU模拟的发射器。

新增内容:眼部适应(自动曝光)改良

新版本统一了现有参数和设置,对眼部适应(也称自动曝光)进行了重大调整,使其更加易用。

image alt text

新版本添加了以下改良和功能:

  • 统一了柱状图和基础模式的统一测光模式,可汇聚到中间的灰点,而非在柱状图上形成单独的汇聚点。

  • 新增曝光测光遮罩,使用纹理遮罩控制像素对画面的影响。

  • 使用手动测光模式时可切换至调整物理摄像机曝光(Adjust Physical Camera Exposure),以便在使用曝光时显式使用摄像机后期处理(Camera Post Processing)设置。

  • 改良了HDR(眼部适应)可视化模式,包含显式后期处理设置信息和柱状图信息。

    • 另外还添加了一种新的调试可视化模式,用于识别极亮和极暗的像素,以便将其排除在HDR计算之外。

  • 改良了HDR(眼部适应)可视化模式的曝光补偿曲线,以明确曲线X轴值和Y轴值的起源处。

  • 更改对曝光速度的感知,便于以相同速度沿曲线上移或下移。

这些修改确实打破了使用虚幻引擎旧版本的项目的向后兼容性。虽然有升级途径,但却无法保证项目 外观 得以保留。可参阅我们的技术博文"Epic Games在4.25版中处理自动曝光的方法 "。其中包含这些修改的详情,以及它们对项目的影响。

欲知详情,请参阅眼部适应(自动曝光)

新增内容:毛发和皮毛渲染更新(测试版)

我们一直在研究毛发渲染和模拟功能,现在已进入测试版功能开发阶段。新版本对工作流程、性能、光照等方面进行了大量改良。

image alt text

工作流程改良:

  • 现在,只要网格体拥有相同的UV空间,Groom便可在这些网格体之间转移。

  • 此外还提供其他Groom组件选项,用于控制根部和梢部的比例,以及发夹的长度。

  • Niagara模拟参数现可直接从Groom组件中进行编辑。

    • 新版本提供了一些基于曲线的属性,用于控制沿发束的Niagara参数值。

  • 在新版本中导入复杂的groom资产时还将提供资产验证和时间估计。

  • 更好地处理物理资产插值,从而改良对形体的碰撞检测。

  • 新增替换插值法,此法使用径向基函数,而非三角形刚性变换。

性能改良:

  • 毛发模拟和渲染的稳定性和速度得到整体提高,其中包括光线追踪功能的使用。

  • 新版本使用连续的细节等级(LOD)系统,其会在其屏幕覆盖范围缩小时大幅降低groom。

  • 簇剔除用于将groom细分为更小的簇,然后根据层级深度缓冲进行遮挡剔除。

  • Groom资产现在支持派生数据缓存(DDC),可加快关卡加载速度。

光照改良:

  • 毛发系统使用GPU驱动的稀疏体素化结构,无需使用深度不透明度贴图即可实现更精确的光照。它还能实现更薄的体素化。

  • 光照通道现在支持Groom组件。

新增内容:天空大气改良

新版本中增加了强大功能,可根据物理原理创建大型大气,天空大气组件因此得到了进一步改良。

逐像素透射(4.25)

非逐像素透射(4.24)

本版本中有以下改良:

  • 新版本可逐像素计算透光率,确保从太空中查看时行星表面的亮度正确。

  • 行星大气现可在附近的行星体上投射阴影,例如邻近的卫星。

  • 大气现可在关卡中自由移动。

欲知详情,请参阅天空大气

新增内容:材质层改良(测试版)

新版本中材质层已更新,蓝图函数可在运行时修改材质层参数,将图层修改从基本材质传播到派生材质时的行为同样也得到了改良。

欲知详情,请参阅材质层

新增内容:内存着色器加载时间重构

着色器相关资源已通过新的反射系统转换为扁平内存图像,以便直接从硬盘到内存进行反序列化,而无需使用CPU。反射系统能以健壮的方式处理编译器之间的内存布局差异,显著提高引擎的加载时间性能。

新增内容:向Sequencer添加空间化主音频

新版本中,用户可将音频分段附加到指定时间处的各个音轨组件,向序列添加空间化主音频。在视口中的附加点处绘制音频图标,帮助显示空间化效果。

新增内容:摄像机切换混合

新版本中,摄像机切换轨迹支持混合。用户可使用此功能轻松混入和混出过场动画,或在不同过场动画切换之间混合。启用混合的方法是右键单击Camera Cut轨迹节点并选中 可混合(Can Blend)

新增内容:镜头试拍录制器增强

新版本提供了一些新增强,简化镜头试拍录制器的使用,同时改善整体用户体验。

指定帧率

现在可针对特定序列选择所需的录制帧率。支持帧率范围为 12 fps(动画)240 fps。默认帧率基于时间码提供方的帧率。

在新版本中,录制数据在录制时将转为匹配时间码

在新版本中,关键帧数据被采集时录制序列将显示时间码。包含每个采样时间码的Live Link源将直接映射到带时间码的序列。就分层录制而言,如果从之前的镜头试拍进行录制,现有轨迹将偏移到录制开始时的新时间码。举例而言,用户便能在之前录制的情境中录制新的相机移动。此外,数据将直接序列化,所有浮点通道的保存时间将提升五倍。这点在录制拥有多个actor的长镜头时尤为重要。

新增内容:模板序列(测试版)

用户可以使用模板序列在多个对象上轻松重复使用轨迹。其还将减少整体的资产复制与保存时间。使用与骨骼动画相似的单根绑定,可将模板序列添加到另一个序列的轨迹,并像其他动画那样进行操纵。

新增内容:HoloLens 2和协作查看器模板

协作查看器模板 现支持在HoloLens 2中查看设计内容。

新增内容:产品配置器模板

在新模板中构建新的产品配置器,先人一步。此模板包含内容范例(其展示以多个场景配置设置的变体管理器)和一组可重复使用的UMG控件、这些控件自动构建UI来公开这些配置,以便用户在运行时进行控制。

可在 汽车、产品设计和制造(Automotive, Product Design, and Manufacturing) 类目下找到 产品配置器(Product Configurator) 模板。

新增内容:摄像机内视效更新(测试版)

自摄像机内视效(In-Camera VFX)工具首次推出以来,我们和众多合作伙伴共同努力将虚幻引擎用于现实世界的影视开发项目,在LED屏幕前拍摄真实动作场景。我们汲取了这些经验,并以此对现有工作流程和工具进行了一些改良:

  • 支持多个摄像机同时对着同一屏幕进行拍摄,并将多个虚幻摄像机的视锥渲染到LED墙的不同部分。

  • 可以控制摄像机视锥内外区域的分辨率。可降低LED墙在物理摄像机画面以外区域的分辨率,以此提高性能,而摄像机画面区域之中的渲染质量不会因此受损。

  • 绿屏追踪标记更易于设置,在后期制作中也更稳定(因为它们不会在屏幕上漂浮或移动)。

  • 现在用户能更便利地设置三层合成,在真人演员或布景上合成虚拟前景元素。还能更便利地控制应在虚幻引擎中LED墙上隐去的图层。

  • 可在关卡中放置新的颜色校正体积(将对场景应用局部颜色校正),利用更精细的美术掌控让虚拟场景达到真实世界布景的效果。

  • 可旋转nDisplay生成的渲染输出,增加构建LED墙的选择。

新增内容:nDisplay改良

nDisplay多显示渲染技术是摄像机内视效(In-Camera VFX)系统的一个重要组成部分,支持上述诸多改良。此外还有一些改良能让所有nDisplay用户受益:

  • 现可指定各个nDisplay簇节点,以使用特定GPU进行渲染。

  • 可选择让nDisplay使用NVIDIA硬件提供的帧同步服务,在簇节点网络上同步每个连续帧的呈现。

  • 用户可更轻松地设置nDisplay来渲染到曲面。不再使用PFM或MPCDI来配置nDisplay如何弯曲最终输出以将其投射到曲面上,而是实施新的投影策略,该策略根据在nDisplay蓝图API中指定的网格体自动弯曲渲染的输出。

新增内容:运动图形改良

新版本中,用户可以直接在虚幻编辑器中轻松创建有趣的运动图形,无需切换到外部设计工具。用户可更快地完成屏幕上的图形,并在虚拟世界背景下进行合理设计。

  • 3D文本动画(测试版):用户现在可以利用全新的 文本3D字符变换(Text 3D Character Transform) 组件,使用Sequencer对3D文本对象的每个字符添加平移、缩放和旋转动画,而非将整行文本作为一个单元添加动画。

  • 表格和图表(实验版):现在用户可以直接在虚幻引擎中设置统计数据的显示。新的 数据图表(Data Charts) 插件提供预先制作的蓝图,可从数据表资产中提取统计数据,并将其中的数字呈现为条形图、饼状图或图表。

新增内容:直播和实况工具

此版本加入了一些新功能和改良,可以在直播环境下更轻松地开发和使用虚拟布景、合成视频源和增强现实(AR)。

新版本添加了以下改良和功能:

  • 合成版(Composite Plate) 是一种摄像机蓝图,可将视频源投射到平面或场景中的一组静态网格体对象上。主播可利用此功能通过虚拟方式将自己的才艺置于3D场景中的任何指定深度,而无需选择将物体标记为前景或是背景。此技术还可用于模拟完整的环境,方法是从给定的角度拍摄真实场景中的位置,然后将拍摄的图像或视频投影到场景几何体上。这两种技术都十分有效,因为从相机的角度看,合成版是被投影到3D空间中的几何体上。

  • 绿屏键控器 进行改良,提升了现有色度键控系统。

新增内容:DMX支持(实验版)

此版本加入的实验版功能之一,支持将虚幻引擎连接到使用DMX协议的第三方控制器和设备。通过ArtNet和aSCN网络上的双向通信和交互,可从虚幻引擎中控制舞台表演和光照设备,并在设计阶段在虚拟环境中预先显示表演效果。

新增内容:Magic Leap改良

此项新增功能面向Magic Leap开发者,支持使用新GameMode、PlayerController和GameState类设置共享场景体验。在API方面,改良为了内容的持久性添加了更多工具API,为连接和摄像机内部函数添加了API集成。此外还改良了AugmentedReality接口,便于手持式AR项目迁移到Magic Leap,并提高了零迭代的性能和稳定性。为便于调试和优化,我们添加了Visual Studio调试器对纯蓝图项目的支持,并支持通过配置变量来修改线程亲疏度。

新增内容:支持SteamAudio的动态几何体

现在可以在虚幻中使用SteamAudio的动态几何体了。单个静态网格体组件可以单独移动、旋转和缩放,Steam Audio会随之更新音效。关于该功能的更多详情,请点此 查看SteamAudio插件和演示视频。

新增内容:平台SDK升级

在每个版本中,我们都会更新引擎来支持平台合作伙伴的最新SDK版本。

image alt text

  • Windows

    • 推荐:

      • Visual Studio 2019 v16.5

    • 最低:

      • Visual Studio 2017 v15.6

    • Windows SDK 10.0.18362

    • NET 4.6.2 Targeting Pack

  • Build farm编译针对的IDE版本

    • Visual Studio - Visual Studio 2017 v15.9.4工具链(14.16.27023)与Windows 10 SDK(10.0.18362.0)

      • 最低支持版本

        • Visual Studio 2017 v15.6

      • 需要NET 4.6.2 Targeting Pack

    • Xcode - Xcode 11.1

  • Android

    • Android Studio 3.5.3

    • Android NDK r21

      • 同样支持NDK r20b,并处理部分低端设备上的兼容性问题。

  • ARCore

    • 1.7

  • ARKit

    • 3.0

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

  • Oculus

    • 1.44

    • API Level 23

  • OpenXR

    • 1.0

  • Google Stadia

    • 1.44

  • Lumin

    • 0.23

  • Steam

    • 1.46

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 9.3.1 + 可选NEX 4.6.3(固件版本:9.0.1-1.0)

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

  • PS4

    • Orbis SDK 7.008.001

    • 系统软件7.008.021

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

  • XboxOne

    • XDK:2018年7月 QFE-9

    • 固件版本:2月恢复版10.0.18363.9135

    • 支持 IDE:Visual Studio 2017

  • macOS

    • SDK 10.15

  • iOS

    • SDK 13, 12, and 11

  • tvOS

    • SDK 13, 12, and 11

主要升级说明

烘焙数据兼容性

虚幻引擎4.25版中加入了一些主要序列化修改,以改良加载时间。这些修改的负面效果是 烘焙数据在Win32和Win64可执行文件之间不再兼容。项目需要烘焙两套数据来支持两种编译类型。然而,64位Windows仍将运行Win32可执行文件,因此部分需要支持32位Windows的项目可以选择只发布一个Win32版本。

加载时间改良

由于UObject的优化、常规渲染和物理优化以及材质和着色器的序列化开销降低,各平台的用户将体验到10-20%的加载时间改良(具体改进幅度因平台而异)。

Win32支持

我们将正式废弃Win32支持。 在虚幻引擎4.25和4.26版本中仍会支持32位Windows操作系统,但对这将在之后的版本中被移除。

GitHub版本分支

如果使用GitHub来访问虚幻引擎的源代码,您可能会看到两个单独的分支:4.25和4.25-Plus。

我们 建议大家使用4.25分支,除非Epic特别告知您使用4.25-Plus进行开发。

移动平台

OpenGL ES2和Metal 1.2的渲染特征级别已移除。

XR

  • 运动控制器按键已在4.24中废弃,在4.25中完全移除。

Release Notes

AI

  • Bug Fix: UAIDataProvider_QueryParams: Fixed data binding for Boolean values.

  • New: UEnvQueryTest_GameplayTags.SetTagQueryToMatch was added to support the EQS test class in native code.

  • New: Added a Project option to tell the AI Perception System to forget Actors with perception past the Max Age duration.

  • New: AIPerceptionComponent: Added functionality to allow clearing of perception data by making ForgetAll callable from Blueprint.

  • New: UEnvQueryInstanceBlueprintWrapper.OnQueryFinishedEvent can now be accessed from native code by calling the GetOnQueryFinishedEvent function.

  • New: SpawnAIFromClassnow allows callers to specify the Owner of the spawned AI agent.

Behavior Tree

  • Bug Fix: Behavior Tree restarts that were caused by execution requests queued for branches getting deactivated while applying search data can now be prevented.

  • New: Blueprint-implemented Behavior Tree nodes can now specify a custom name that will appear on the nodes in the Behavior Tree Editor.

  • New: Added functionality to allow custom BrainComponents to run, as well as allow BrainComponents to be set up as components on AIController and run automatically when Actor is possessed by the AIController.

  • New: Added functionality to support the use of UBlackboardKeySelectoroutside Behavior Tree Editor.

Debugging Tools

  • New: Navigation path debug drawing now uses NavTestRenderingComponent to draw arrowheads indicating the path direction.

  • New: Corrected minor typographic errors in Gameplay Debugger user interface.

  • New: While using Simulate in Editor, Actor filtering in UGameplayDebuggerLocalController now allows non-Pawn AActor selection.

  • New: Added new GameplayDebugger console commands:

    • EnableGDT(for legacy support)

    • gdt.Toggle

    • gdt.SelectPreviousRow

    • gdt.SelectNextRow

    • gdt.ToggleCategory

  • New: Verbose logging for start and stop queries were added to EnvQueryManager.

  • Bug Fix: UPathFollowingComponent::RequestMoveWithImmediateFinish and UPathFollowingComponent::AbortMove were made consistent in terms of handling given move requests' bStopMovementOnFinish value.

  • Bug Fix: Fixed how ARecastNavMesh.DefaultMaxSearchNodes gets applied to make it consistent.

  • Bug Fix: Fixed FNavAgentProperties::IsNavDataMatching to make it respect null-navigation-data properly.

  • Bug Fix: Fixed how NavigationSystem rebuilds Static and DynamicModifiersOnly NavData in Play in Editor and Game modes, if bAutoCreateNavigationDatais set to False.

  • Bug Fix: Fixed ARecastNavMesh::ReplaceAreaInTileBounds to properly apply the requested new area type.

  • Bug Fix: Fixed a navigation filter bug resulting in it not blocking null-area navigation links.

  • Bug Fix: Fixed navmesh polygons so they can connect diagonally across tile boundaries.

  • Bug Fix: Fixed a bug in NavigationSystem so that registration of CustomNavLink from a different world is now prevented while in Play in Editor. Multiple NavigationSystems may coexist (For example, Editor, Client Game, and Server Game worlds) so now any given NavigationSystem instance performs a single flush of the global pending queue to register the links associated with their outer World.

  • Bug Fix: Fixed a navmesh rasterization issue, where a wrong offset on the vertical axis caused some voxels to be rasterized outside of their source geometry. This also addresses a side effect where a NavModifier aligned with geometry would not mark the navmesh, even when taking cell height into account.

  • Bug Fix: Fixed Chaos convex mesh indices winding so that triangle normals point outward for nav collision.

  • Bug Fix: Fixed rasterization area merging when adding new spans. Navmesh now generates correctly on a slope.

  • Bug Fix: Fixed a NavigationTestingActor path reset issue when toggling bSearchStart.

  • Bug Fix: Fixed updateSlicedFindPath not behaving like findPath (missing check for DT_UNWALKABLE_POLY_COST).

  • New: Added support for a cost limit in Detour pathfinders and added a parameter in the navigation query, DetourNavMeshQuery.

  • New: Added a minimum CostLimit value to FPathFindingQuery::ComputeCostLimitFromHeuristic. Exposed the minimum CostLimit parameter in NavigationTestingActor.

  • New: Added an option to prevent navmesh generation under terrain.

  • New: Added LogNavigationDataBuild to output a basic build summary in the log.

  • New: Added an option to the ResavePackagesCommandlet to rebuild navigation data. This option will check out, save and check in dirty packages only.

  • New: Added a callable-in-editor function for copying endpoints from NavLinkProxy's simple links over to smart link.

  • New: NavMesh links debug drawing was streamlined to more easily distinguish active links from inactive ones.

Animation

  • Bug Fix: BeginPlay() is now called appropriately on Anim Instances linked to Anim Notifies.

  • Bug Fix: Curve compression now prevents curves from collapsing into a single value when using all constant keys.

  • Crash Fix: Control Rig nodes are no longer evaluated twice in Animation Tracing.

  • Crash Fix: Initialization of linked layer/graph nodes no longer crashes when the Anim Instance is re-used.

  • Crash Fix: Anim Instances using linked Anim Instances no longer crash on re-use.

  • Crash Fix: Calling undo after adding a slot in Anim Montage Editor no longer crashes.

  • New: Animation Notifies are now optionally propagated to and from linked Anim Instances with propagation options for each linked Anim Graph/Layer node. Grouped Layer nodes propagate as a whole; so, if any grouped Layer nodes propagate, all nodes in the group will propagate as well.

  • Crash Fix: Removed use of AllSortedComponentData in Animation Budget Allocator Debug HUD that was causing a crash.

  • Bug Fix: Added extern keyword to VirtualBonePrefix declaration to prevent it from ending up in every .cpp file.

  • Crash Fix: Remapping an additive animation no longer crashes.

  • Bug Fix: Deleting virtual bones no longer displays the "GetBoneMatrix(x) out of range of Spacebases" message.

  • Bug Fix: Linked instances are now cleaned up properly on unlink and reset, ensuring that Anim Notify states are fired off correctly and any playing Anim Montages are correctly terminated.

  • Bug Fix: Scrubbing an Animation in Sequencer no longer crashes.

  • Bug Fix: Fast-path is no longer incorrectly disabled for array properties.

  • Bug Fix: Const transform accessors in FAnimInstanceProxy are now correctly marked.

  • Bug Fix: Reloading Skeleton with unsaved virtual bone changes no longer causes an ensure.

  • Bug Fix: Stepping through a geometry cache now shows the frame corresponding to the time set in sequencer.

  • New: Animation compression is now exposed to plugins and uses Compression Assets in place of Compression Schemes.

  • New: Animation compression is now performed asynchronously when opening the Unreal Editor, similar to the way shaders are compiled.

  • New: Gameplay Abilities can now specify the Anim Instance on which to play a montage.

  • New: There is a new plugin to support reading Live Link Animation and Transform data inside of Control Rig.

  • New: There is a new Animation Blueprint event callback that is called when the Linked Animation Layers are initially initialized.

  • New: CSV Animation stats are updated and expanded.

  • New: Error messaging around the default curve compression asset has been improved.

  • New: Added ISPC optimization for Animation for Windows, Linux, Mac and Android platforms.

  • Bug Fix: Cooking of conformed-on-load interface graphs is now deterministic.

  • API Change: Anim Nodes now name their node properties without using the node GUID.

Animation Assets

  • Crash Fix: Calling undo after editing a curve no longer crashes.

  • Crash Fix: Deleting a Pose before base Pose no longer crashes.

  • Crash Fix: Removing a curve through an Animation Modifier no longer crashes.

  • Bug Fix: Loading cooked Animations in Unreal Editor no longer causes an ensure.

  • Bug Fix: Cooking with smart names on USkeletons is now deterministic.

  • Bug Fix: Montage Sections panel now scrolls when it gets too large.

  • Bug Fix: Right-click dragging to scroll on Anim Notify tracks now works correctly.

Animation Blueprints

  • Crash Fix: Doing a fast-path copy of FName values in FExposedValueHandler no longer crashes due to differing size of the type between compile and run time. Ensure that non-compatible types always skip the fast copy path.

  • Crash Fix: Moving or renaming an Anim Blueprint no longer crashes.

  • Bug Fix: Fix compilation crash after adding an animation blueprint interface with duplicate names

  • Bug Fix: Implemented several fixes for the RandomPlayer animation BP Node:

    • Fixed a problem where we would advance twice during the update loop if we both exceeded the loop count and blending had finished, resulting in a possible double play of the same animation in shuffle mode.

    • Related to the double-advance problem, changed the shuffle generation so that it's done after popping the last shuffle value, to hint to it directly which value was the last one to be used so that the permutations are non-contiguous.

    • Ignore empty play entries and entries with zero play chances in random mode.

    • Ensure we play each sequence fully, instead of just the portion from blend stop to end. This eliminates the "popping" effect when transitioning between animations.

  • Bug Fix: Derived classes of FAnimNode_StateMachine no longer fail to compile in Animation Blueprints.

  • Bug Fix: Changing the Widget Mode on a bone in the Anim Blueprint Editor no longer causes an infinite loop.

  • Bug Fix: State machine recorded weights are now correctly reported.

  • Bug Fix: Split pins now work correctly in Animation State Machine states.

  • Bug Fix: The Control Rig Anim Node ticking no longer ticks the sub tree multiple times.

  • Bug Fix: Control Rig now initializes correctly from Sequencer.

  • Bug Fix: There are no longer duplicate Hide Unrelated nodes in the Animation Blueprint Editor.

  • New: Reroute nodes for Pose links now use a Pose icon.

  • New: ApplyMeshSpaceAdditive now has extended alpha support including support for boolean and curve controlled alphas with clamping.

  • New: Added Blend Space node debug widgets to display the current sample of the Blend Space when debugging.

  • API Change: The interpolating solver is available as a templated helper class, called TRBFInterpolator in RBF/RBFInterpolator.h. It can be used to smoothly interpolate any N-dimensional target value for any M-dimensional input values, assuming a suitable distance metric exists.

Animation Tools

  • Crash Fix: Deleting curve keys in Animation Curve Editor no longer causes a crash.

  • Crash Fix: Interacting with the Animation Insights transport controls when a session is tracing to an external application no longer crashes.

  • Crash Fix: Calling undo after adding an Anim Montage segment no longer crashes.

  • Bug Fix: PostUpdateAnimation is now called on linked instances if NeedsUpdate on the main instance returns false.

  • Bug Fix: Animation Curve Editor auto-zoom now works consistently.

  • Bug Fix: Renamed curves displaying now display the correct name when edited directly.

  • Bug Fix: Highlight of Loop button in Anim Editor is no longer triggered by Reverse button.

  • Bug Fix: Linked-instance asset players are no longer ticked twice when a post process graph is enabled.

  • Bug Fix: Undo/redo no longer closes Details panels for Anim Notifies

  • Bug Fix: Renaming curves in the Animation Timeline now marks the asset as dirty and can be undone/redone.

  • Bug Fix: Reverse playback of an Anim Montage now sets the play rate of the Anim Montage instance correctly.

  • Bug Fix: Sync marker selection has been improved. \

  • Bug Fix: Reported number of frames in the Montage Editor is now accurate.

  • Bug Fix: Anim Notifies can no longer be dragged outside of the notify area.

  • Bug Fix: Editing the section time of an Anim Montage no longer crashes.

  • Bug Fix: Anim Montage sections now refresh correctly when edited via the Details panel.

  • Bug Fix: Anim Sequence frames can now be added from the Curve Editor view.

  • Bug Fix: Anim timeline now allows access to times outside the Anim Sequence range.

  • Bug Fix:

    • Right-click dragging on an Anim Notify track to scroll no longer flickers.

    • DPI scaling is now correct when drag/dropping Anim Notifies.

  • New: Unreal Insights channel filtering plugin now has a "Trace Data Filtering" Tab which allows for setting individual Trace Channel states and allows for specifying Presets, or groups of Channels that should be enabled together.

  • New: Implemented ControlRigLayerInstance to support Sequencer layering using ControlRig Tracks

  • New: Implemented Additive Control Rig to be used in Sequencer for layering/tweaking Animations.

  • New: Added simple multi effector FABRIK rig unit.

Import/Export

  • Bug Fix: Bones metadata from FBX are now transferred to the Anim Sequence at import.

Skeletal Mesh

  • Crash Fix: Calling USkinnedMeshComponent::SetSkeletalMesh() after destroying its ChildPoseComponent no longer crashes.

  • Bug Fix: The SetVertexColor engine test no longer fails when skin cache is enabled.

  • Bug Fix: The AlternativeSkinWeights engine test no longer fails when using skin cache mode.

  • New: The maximum number of bone indices allowed per Skeletal Mesh section is increased from 255 to 65535.

  • New: The maximum number of bone influences per vertex is now 12.

  • New: Support for variable influences per vertex has been added and is used by default for meshes with more than 8 bone influences.

  • New: Vertex color is now used as a factor when blending between original tangents and recomputed tangents when Skeletal Meshes are rendered via skin cache.

  • New: Added Niagara support of unlimited bone influences per vertex for Skeletal Mesh rendering.

Audio

  • Crash Fix: Fixed a crash that occurred when attempting to set a delay line for a submix effect length beyond a statically allocated maximum length.

  • Crash Fix: No longer crashes when the maximum for audio sources is reached and stopping sources are enforced but not observed by spatialization/modulation plugins.

  • Crash Fix: Fixed a memory scribble/crash in the OSC plugin when passing empty strings as a payload in message members, or when sending messages larger than 1024 bytes.

  • Crash Fix: Fixed a rare crash due to a race condition when stream caching is enabled and stat audio streaming is turned on.

  • Crash Fix: Fixed a crash that occurred when FAudioCaptureAndroidStream::CloseStream was called on a stream that was already opened.

  • Crash Fix: Fixed a rare crash in the Google Resonance plugin due to a race condition.

  • Crash Fix: A PGO crash in NonRealtimeAudioRenderer has been fixed.

  • Crash Fix: If a USoundWave has the Is Ambisonics flag set to true but is not a four-channel file, this will no longer cause a crash.

  • Bug Fix: Removed a shadow variable that could cause XAudio2 to go silent if in an extreme performance-heavy state.

  • Bug Fix: Fixed a bug that occurred when importing audio files that caused playback of out-of-date audio or no audio play at all.

  • Bug Fix: The sound file importer no longer prompts for a template update if reimporting a sound, and no longer logs to the display if a sound is stopped due to reimport.

  • Bug Fix: Audio engine no longer goes silent when swapping from a null device.

  • Bug Fix: Fixed a hang when using -deterministicaudio during PIE (Play in Editor) shutdown.

  • Bug Fix: Fixed the SoundCue Undo feature that resulted in SoundWavePlayers being left in a state where sound wave data would stop loading in the editor.

  • Bug Fix: Overflow is now prevented in audio output by clamping before converting from float to PCM on a master output.

  • Bug Fix: Changed the default value of the audio underrun timeout value from 0 ms to 5 ms to be generally more defensive against platforms requesting audio at too high of a rate.

  • Bug Fix: Added an optional config to wait for audio to be rendered before falling back to submitting an underrun buffer.

  • Bug Fix: Fixed a race condition between USoundWave being garbage collected and the AudioMixerSourceBuffer destructor.

  • Bug Fix: Fixed a race condition with rapid stop() then start() calls on a procedural sound.

  • Bug Fix: Fixed an issue with the buffer read/write in audio renderer.

  • Bug Fix: Fixed iOS issues with audio playback and iOS notifications such as a user's Alarm Clock.

  • Bug Fix: Moved StopLowestPriority/StopLowestPriorityThenPreventNew to use culling logic instead of eviction so it would no longer require evaluation of priority via a call to the SoundBase parse.

  • Bug Fix: Fixed an issue with modulation output curves reordering incorrectly when modifying output curve values in the editor.

  • Bug Fix: The output curve is now hidden when the respective sound control modulation patch is bypassed.

  • Bug Fix: Various bug fixes were made for Time Synth.

  • Bug Fix: Incorporated Microsoft's replacement DLL files for XAudio2_9 to fix missing audio on Win8 when running in Win7 backward-compatibility mode.

  • Bug Fix: Memory usage of the VoIP system has been greatly optimized.

  • Bug Fix: Fixed a minor leak that would occur when multiple audio components tried to play the same USoundWaveProcedural.

  • Bug Fix: Fixed an issue in cook for some short assets when stream caching was enabled for iOS/Switch.

  • Bug Fix: Changes to the Compression Quality slider while stream caching is turned on no longer leads to aberrant playback behavior.

  • Bug Fix: Fixed an issue that would occur in priority sorting if an audio source was set to bAlwaysPlay and had an overall volume greater than 1.0f.

  • Bug Fix: Various issues that would occur if a server were cooked with stream caching enabled have been fixed.

  • Bug Fix: Made a fix for an audio hang at exit, such as during a PGO build, when using the NonRealtimeAudioRenderer.

  • Bug Fix: Fixed a regression issue in the SoloSound console command.

  • Bug Fix: There was an issue where the Preselect At Level Load field on the Random sound node would sometimes not actually cull child nodes. This has been fixed.

  • Bug Fix: Sounds failing to cull on priority by the concurrency system has been fixed.

  • Bug Fix: Fixed a rare COM initialization failure.

  • New: The dynamic volume mix feature is now available for Sound Classes.

  • Bug Fix: Fixed the stub issue for source descriptions in stat sounds when running the audio mixer.

  • New: Added color options for the debug body text for audio debugging.

  • New: Added a CVAR, au.DisableAppVolume, for debugging in IDE while the app is backgrounded.

  • Bug Fix: For Natural Sound attenuation falloff, when dBAttenuationAtMax is set to a value larger than the default minimum of -60 dB, it no longer causes looping sounds to virtualize even though volume doesn't go to 0.

  • New: Added the ability to specify whether a sound should continue to attenuate, go silent, or hold the maximum value when beyond the bounds of the attenuation shape.

  • New: Added a bool return to the message payload array requests in the OSC API to determine whether it failed, or if the value is fresh.

  • New: Added Blueprint functions to convert the Object path to and from the OSCAddress.

  • New: Added the ability to remove OSC containers at index.

  • New: Fixed pattern matching for wildcarding over a span of containers/methods.

  • New: Added serialization for .ini files to control audio modulation mixes, with the audio modulation plugin to set game mixes without recooking the game.

  • New: Mixes can now also activate any bus they act on if the bus is not already active.

  • New: Integrated an update to SteamAudio, which brings dynamic geometry support and a number of bug fixes.

  • New: Added the CVARs osc.servers, osc.server.connect, osc.server.connectById, osc.clients, osc.client.connect, and osc.client.connectById to manipulate and test OSC client/server connections.

  • New: Added submix assetization for all master submixes that gives users better control over the master submixes and master submix effects.

  • New: Added the ability for a user to set up distance-based sends to an array of submixes defined in attenuation settings.

  • New: Added the ability to modify submix effect chains from Blueprint (add, remove, or replace).

  • New: The Synthesis plugin is now enabled by default for new projects.

  • New: Added soundfield submixes, endpoint submixes, and soundfield endpoint submixes to the engine, as well as extensible interfaces for soundfield formats and audio endpoints that are external to the audio engine.

  • New: Added the ability to attenuate sound priority as a function of distance in attenuation settings.

  • New: FAudioDevice lifespans have now been fully decoupled from the UWorld, meaning that you can arbitrarily spawn and use instances of the audio engine in code. This is useful for building profilers, or for rendering audio for arbitrary systems. \ Example usage: \ FAudioDeviceParams DeviceParams; \ DeviceParams.Scope = EAudioDeviceScope::Unique; \ MyAudioDeviceToRecord = AudioDeviceManager->RequestAudioDevice(DeviceParams);

  • New: Added a noise gate to outgoing VoIP audio that can be controlled with the CVAR voice.MicNoiseGateThreshold. This is useful because it can be controlled separately from silence detection.

  • New: Added voice.debug.PrintAmplitude to print the current outgoing loudness of the microphone.

  • New: Made minor CPU optimizations to the VoIP system.

  • New: Added voice.playback.ResyncThreshold, which can be used to target a given audio latency in order to better sync incoming VoIP with other systems.

  • New: Added support for stereo VoIP input/output.

  • New: The user can now scale distance attenuation ranges of attenuation settings via Sound Class properties.

  • New: Added an option to override the default chunk size for streaming audio on most platforms.

  • New: Added the console command au.streamcaching.FlushAudioCache to flush the audio stream cache. Various updates to the stat audio streaming debug view were also made.

  • New: Added the ability to safely resize the stream cache at runtime using the au.streamcaching.ResizeAudioCacheTo console execute.

  • New: For clarity, the Oculus Audio plugin now prefixes its logs with the words "Oculus Audio".

  • New: Added voice.MicInputGain and voice.MicStereoBias CVARs to control the loudness and panning of outgoing VoIP audio.

  • New: By default, VoIP will now be prioritized over all other audio sources. If you want VoIP sources to have the same priority as other audio sources in the engine, set au.voip.AlwaysPlayVoiceComponent=0.

  • New: Added the ability to patch both outgoing microphone audio and incoming VoIP audio out of the VoIP engine using FVoiceInterface::GetMicrophoneOutput() and FVoiceInterface::GetRemoteTalkerOutput().

  • New: Added missing Solo/Mute icons.

  • New: Moved the AudioCaptureModuleName spec to an .ini setting, and updated all relevant .ini files.

  • New: Added a sort-by-priority feature for stat sounds; only shows pertinent information when sorting by a given field.

  • Improvement: You can now disable the full path for a debug.

  • Bug Fix: The MaxDistance calculation is now correct for box attenuation.

  • Improvement: There is now a debug draw CVAR (au.3dVisualize.Listeners 1) to help debug if a listener is in or out of bounds for third person. Previously it was off by default with au.3dVisualize.Enabled 1).

  • Improvement: Upgraded XAudio2_7 to XAudio2_9 to improve audio device-swapping support on a PC, and for general stability improvements.

  • Improvement: Improved XAudio2Device logging; reduced log spam by adding a log-once behavior.

  • Deprecated: Moved fast reverb to default and removed the fast reverb asset.

  • New: Updated debug exec console commands to have new "au" prefix instead of the now deprecated "Audio" prefix.

  • Deprecated: The "Audio" prefix has been replaced by the new "au" prefix.

Automation

  • Bug Fix: Fixed Gauntlet support for 32-bit Android builds. 32-bit builds are considered but discarded if 64-bit versions are also present.

  • Bug Fix: Fixed issue where new/changed screenshots could not be approved in the editor on some platforms (Mac/Xbox/Switch).

  • New: All test methods now return a boolean to indicate if the test passed or fail. Implemented new macros run those methods and, if they return false, insert a "return false" in the code, so that it exits the current test immediately. This lets programmers write automated tests much faster.

    • See comments and example in Core/Public/Misc/AutomationTest.h

  • Improvement: EngineTest runtime caps the number of threads used in System.Core.Misc.LockFree to reduce the run time on machines with many processors.

Blueprints

  • Bug Fix: Reused the default scene root node when creating a blueprint from an actor that has a root node named the same as default scene root (most likely an "empty actor")

  • Bug Fix: Removed a legacy "always compile on save" code path for LSBPs.

  • Bug Fix: Fixed an editor crash caused by leaking Blueprint context menu actions for new sublevel script actors.

  • Bug Fix: Removed an inconsistent tool tip from the interface list on BP editor.

  • Bug Fix: Now allowing an interface function graph to be converted in the case where the interface function has changed and should now be placed as an event.

  • Bug Fix: Fixed duplicated default scene root when creating a new blueprint subclass from an actor in the level.

  • Bug Fix: Deferred the serialization cost of unloaded Blueprint asset search data versioning info from editor startup.

  • Bug Fix: Fixed improper context menu options. Blueprints now conform to an interface when it refreshes to ensure you cannot make graphs with the same name as an interface.

  • Bug Fix: We now clear any existing reference to a class object on a new connection to the 'Class' input pin for the 'GetClassDefaults' node.

  • Bug Fix: Fixed the nativized Blueprint class code output debugging tool to include interface types.

  • Bug Fix: Reduced the overall time spent constructing search result nodes during a global Blueprint search. This should significantly improve the overall Find-In-Blueprint search speed in large-scale projects with lots of content.

  • Bug Fix: Optimized Blueprint compilation dependency checking when large numbers of blueprints are loaded.

  • Bug Fix: Fixed a Blueprint compilation error that would result when a custom event was bound to a server-only delegate.

  • Bug Fix: Changed blueprint editor tab history to work across the entire blueprint.

  • Bug Fix: Fixed a typo in code that's emitted for properties that reference explicitly-mapped 'noexport' struct fields in nativized Blueprint code.

  • Bug Fix: Fixed an invalid cast in nativized Blueprint code for converted user-defined enum fields.

  • Bug Fix: Fixed incorrect target platform names for some client/server configs that led to an ensure at cook time with Blueprint nativization enabled.

  • Bug Fix: Updated menu item labels for the native AttachToActor/AttachToComponent APIs to better tell them apart in the Blueprint editor context menu.

  • Bug Fix: Removed the clearing of keyboard focus when showing the details panel because it caused errors when undoing while a property edit still had keyboard focus. Clearing the keyboard focus during the process of the undo would cause another transaction to start, breaking the current undo transaction.

  • Bug Fix: Fixed an incorrect platform name being used in manifest lookup for some cook targets during Blueprint nativization.

  • Bug Fix: Fixed blind reinstancing of natively-constructed nested subobjects during class-owned sub-object initialization in nativized Blueprint C++ code.

  • Bug Fix: UCLASS metadata now supports a 'CustomThunkTemplates' class so that CustomThunk nodes can be nativized.

  • Bug Fix: Updates force deleting to also replace references on Actors with no owning World (previously these actors were just ignored). This ensures in the correct results of objects created in actor components such as Child Actor Component and in Sequencer.

  • Bug Fix: Updated blueprint graph to cancel ZoomToFit on nodes when panning with the middle mouse button.

  • Bug Fix: Self pins are now properly automatically converted to soft object references when required.

  • Bug Fix: Viewing a blueprint actor in the Blueprint Editor Viewport no longer changes a custom thumbnail zoom level when the zoom level is really close to the actor.

  • Bug Fix: Fixed asset registry discovery slowdown caused by logic that was trying to build up a cache of component type information.

  • Bug Fix: Fixed bug that would cause blueprint default values to be lost after a blueprint member variable was renamed

  • Bug Fix: CompileAllBlueprints commandlet now re-instances, ensuring that it does not later crash during garbage collection.

  • Bug Fix: Fixed deterministic cooking issue with multicast delegates on components bound in actor event graph.

  • Bug Fix: Fixed issue where blueprint compilation errors trigger a modal dialog in unattended mode.

  • Bug Fix: Fixed bug that would cause references in UI code to be updated to point at the child blueprint after compiling the child blueprint (or blueprint that resulted from duplication.)

  • Bug Fix: BlueprintDisplayName and BlueprintDescription now get cleared on the new copy when duplicating a Blueprint asset.

  • Bug Fix: Prevented deprecated async action factory methods from showing up in the BP context menu (unless the show deprecated functions setting is enabled.)

  • Bug Fix: Toggling the 'Expose Deprecated Functions' setting now takes effect immediately rather than requiring an editor restart.

  • Bug Fix: Fixed native struct-typed variables on spawned Blueprint instances not being initialized to the modified default value of any non-reflected field of the struct exposed for edit through a details customization.

  • Bug Fix: When checking for zombie members in a user defined struct, now ensure that container types get checked as well.

  • Bug Fix: Using "Assign selected Actor" in the context menu of an event node in a level blueprint to assign an event to an unrelated type of actor will no longer cause a crash.

  • Bug Fix: Fixed bug where subobjects of blueprint classes that were async loaded in the editor would stick around forever as phantom objects, which could cause crashes or corruption when changing maps.

  • Bug Fix: Ensured that the RF_DefaultSubobject flag now persists when copying an object in the level editor.

  • Bug Fix: Fixed the cause of NewClass != OldClass assertion failure when async loading blueprints in the editor.

  • Bug Fix: Fixed a crash in the blueprint debugger when hovering over container types inside a function call.

  • Bug Fix: Fixed non-functional collision in a nativized Actor Blueprint containing one or more components set up to use a custom collision profile.

  • Bug Fix: Fixed a bug introduced in 4.24 where soft object and class references on blueprint pins were not being properly tracked for cooking/reference viewer. Any assets that were saved in a 4.24 version of the engine and are missing references can be resaved to fix this.

  • Bug Fix: Changed duration of a notification toast in the Blueprint Editor to improve visibility.

  • Bug Fix: Added compilation validation for pin connections on tunnel nodes, allowing the proper display of error messages when changing input pin types on macro graphs.This additional validation may point out errors that were previously undiscovered in blueprints.

  • Bug Fix: Fixed graph pin default values being editable even when set to read-only/

  • Bug Fix: Fixed issue introduced in 4.24 where breakpoints or navigation could cause multiple tabs to be open at once for the same function.

  • Bug Fix: Updated Unreal Header Tool to properly support int64 variables that are marked with with ExposeOnSpawn metadata.

  • Bug Fix: UBlueprintGeneratedClass::GetAuthoritativeClass() returns itself as the authoritative class when it's cooked and therefore has no source UBlueprint.

  • New: Made the "Select Function" drop down searchable on Create event nodes.

  • New: Added Blueprint support for FIntPoint.

  • New: Added conversions from int64 to int32 and to uint8 (byte).

  • New: Decoupled Blueprint indexing from the search thread in order to take advantage of multiprocessing, and improved the overall Find-In-Blueprints experience while indexing.

  • New: Added GetPlatformUserDir to Kismet function library.

  • New: Added additional type support(bool, string, name, and Object) for the "Format Text" node.

  • New: Added an IsEmpty function to String types in the KismetStringLibrary.

  • New: Now allowing TArray, TSet and TMap elements to be visible in the SCS tree if the container is marked as Visible/Editable.

  • New: Users now have the options to display access specifiers for functions and variables in the "My Blueprint" window. This feature can be enabled by selection the view options for the "My Blueprint" and selecting "Show access specifiers in My Blueprint view"

  • New: Exposed Runtime Virtual Texture assets to blueprint.

  • New: Optimized component instance data determination and application when rerunning construction scripts. This can significantly speed up rerunning the construction script when using AddComponent nodes in the User Construction Script.

  • New: Implemented variadic function support for Blueprints

    • Variadic functions are required to be a CustomThunk marked with the "Variadic" meta-data. They can then be used from a custom Blueprint node to accept arbitrary arguments at the end of their parameter list (any extra pins added to the node that aren't part of the main function definition will become the variadic payload).

    • Variadic arguments aren't type checked, so you need other function input to tell you how many to expect, and for a nativizied function, also what type of arguments you're dealing with.

  • New: Exposed TransformVector4 as a static function to blueprint. This will allow users to transform vectors by 4x4 matrix in BP.

  • New: Added a BlueprintFileUtils plugin to expose file system operations to blueprint.

  • New: The output array of GetAllActorsOfClassWithTag will now use the type of the input class if a class literal is used.

  • New: Now allowing container pins in "make" nodes and structs to be empty by default. This will auto generate the default value if none is provided. This makes the experience of using custom UStructs more fluid and prevents there being a node with a compiler error by default.

  • New: Added horizontal view mode to the Blueprint diff tool.

  • API Change: Removed unused variable UBlueprint::SearchGuid.

Core

  • Crash Fix: Fixed a crash when a sparse multicast delegate gets destroyed mid-execution.

  • Crash Fix: Fixed UAnimCurveCompressionCodec serialization crash when loading cooked content in the editor.

  • Crash Fix: Fixed a server crash when an asset file exists but can't be read.

  • Bug Fix: Fixed GDB pretty printers for FString, FName, FMinimalName, FNameEntry and TWeakObjectPtr.

  • Bug Fix: FString::Mid now gracefully handles negative start and negative count inputs. \ FString::RemoveAt can no longer leave an unterminated string.

  • Bug Fix: Ensure that unsaved and unused Blueprint classes are removed from the class hierarchy cache when deleted.

  • Bug Fix: Added the name of failing struct to the bad alignment assert message in UScriptStruct::InitializeStruct.

  • Bug Fix: Fixed FName number parsing from unterminated strings—copy the number to a temporary buffer until we have an overload of Atoi64 that takes the input length. The generic implementation of Atoi64 for TCHAR converts the input to ASCII then converts that to an integer. For unterminated strings, this could cause an access violation or convert an obscenely large input to ASCII.

  • Bug Fix: Fixed a race condition in FOutputDeviceRedirector that was corrupting logs. Calling EmptyBufferedLines() before serializing the buffered lines was allowing their memory (owned by FLogAllocator) to be reused by buffered lines from other threads before the main thread had consumed them.

  • Bug Fix: Added support for passing "abscrashreportclientlog" and "nullrhi" command line arguments to crash reporter monitor.

  • Bug Fix: Fixed ensure messages disappearing in editor log. Calls to PanicFlushLog should only happen on crashes, and not ensures. For ensures on any thread other than the main thread the editor log, which is not thread safe, the editor will lose these messages. On crashes we don't care about, like on non thread-safe output devices since we will not recover, we are only interested in the log file.

  • Bug Fix: Fixed incorrect sandboxed paths. When the argument is an already sandboxed path, ConvertToSandboxPath was adding another copy of the path to the end. We need to test if the path is inside the full sandboxed path before testing if it's inside the project directory (since the former is inside the latter).

  • Bug Fix: Fixed incorrect callstack in crash reports. When a ensure was reported before a crash, the callstack from the crash was added to the ensure stack frames. This is because the debug helper instance used to analyze the minidump is a singleton and not designed to be reused. Use the GetNew method to create a new instance of the helper, and delete the old one.

  • Bug Fix: Fixed TIndirectArray::operator=(TIndirectArray&&) The default version of the move assignment operator fails to free the pointed at data in the existing array before assigning, and thus the current contents were all leaked.

  • Bug Fix: Implemented a faster version of FRandomStream::GetFraction that doesn't require a type conversion to integer and back to float. This fix affects any use of FRandomStream::GetFraction, which will now return a different value for the same seed.

  • Bug Fix: VS2019 v16.5.0 compilation fixes.

  • Bug Fix: Changed logic in FArchiveFileReaderGeneric::InternalPrecache to avoid buffer shrinking. Previously, the buffer could potentially be shrunk to a very small size if you read data at the end of a file before seeking to the beginning and continuing to read other data.

  • Bug Fix: Fixed VS2019 compilation issues with int32 to bool implicit conversions.

  • Bug Fix: The engine will now skip Collecting Garbage during initial load because it's not safe since garbage collection token streams may not be assembled yet.

  • Bug Fix: When cooking by the book, the engine will now check if the specified target platforms are editor platforms and reject them if so. This is to prevent common mistakes when manually entering cook command lines that result in crashes when cooking.

  • Bug Fix: Fixed TFastReferenceCollector not setting the serializing object when processing TMap and TSet references that resulted in issues with finding all references.

  • Bug Fix: Changed how the engine detects trashed user structs—instead of looking at field lists, it's now going to be using dedicated functions.

  • Bug Fix: Fixed FAsyncPurge::TickGameThreadObjects not respecting Garbage Collector time limit that could lead to bigger hitches on the game thread (regression).

  • Bug Fix: Reduced stack size usage by LogTrace in debug builds.

  • Bug Fix: Change the cached World reference in ULandscapeInfoMap to a TWeakObjectPtr to safeguard against order or destruction issues on World unload.

  • Bug Fix: Fixed incorrect UObject archetype caching when the object's Outer is still pending load.

  • Bug Fix: Fixed a crash when accessing TSubclassOf default object when its class is null.

  • Bug Fix: Fixed Tickable objects sometimes failing to register when re-allocated with the same address as previously destroyed ones.

  • Bug Fix: Fixed application hanging in MapProperty serialization.

  • Bug Fix: FORCEINLINE functions that were made virtual in FAsyncLoadingThread.

  • New: Removed _VTABLE define in favor of fvisibility-ms-compat. This will hide symbols but keep type visibility as default (for example, exported) over needing to explicitly mark the types as exported.

  • New: TResizableCircularQueue now supports non-trivial types and default constructed pod types.

  • New: Added an implementation of Robin Hood hash table optimized for small keys and values.

  • New: Added float/double comparison function (FMath::IsNearlyEqualByULP) that compares floats according to the number of units-in-last-place differences (rather than using an absolute tolerance value).

  • New: Added double version of FMath::IsNaN and FMath::IsFinite.

  • New: AddAnnotation function (in various annotation classes) now consistently supports moving incoming annotation data.

  • New: FString::Left, LeftChop, Right, RightChop, Mid, ConvertTabsToSpaces, and TrimQuotes now have inline versions.

  • New: FString:: Left, LeftChop, Right, RightChop, and Mid now have rvalue versions.

  • Added rvalue overloads for Left, LeftChop, Right, RightChop, and Mind.

  • Added inline version of TrimQuotes.

  • New: FPaths::ProjectSavedDir now returns const FString&.

  • New: Added the ability to stop a demo after a CSV profile completes with -csvDemoStopAfterProfile.

  • New: Added a CSV_PROFILER_USE_CUSTOM_FRAME_TIMINGS preprocessor macro to enable a game to call FCsvProfiler::BeginFrame and EndFrame instead of using the engine defaults.

  • New: Added new API for querying extra development memory. In the CSVProfiler, this gets reported as metadata and by default, it subtracts the dev memory from the free memory stat.

    • This is controllable with the csv.AdjustPhysicalFreeForExtraDevMemory CVar.

  • New: Added FPathViews as an analog for FPaths that use FStringView and FStringBuilderBase. This includes implementations and tests for:

    • GetCleanFilename

    • GetBaseFilename

    • GetBaseFilenameWithPath

    • GetPath

    • GetExtension

    • GetPathLeaf

    • Split

    • Append

  • New: Optimized FFileHelper::BufferToString to eliminate its use of a temporary allocation. Converting UTF-8 inputs was using a temporary TCHAR buffer the same size as the output. The conversion is now done directly into the allocation for the target string.

  • New: Optimized engine startup times by creating and polling fewer streamable handles. This targets AssetManager::ChangeBundleStateForPrimaryAssets().

  • New: For CsvToSVG 3.31, reduced event spam by grouping duplicate events if they appear within a certain number of pixels of each other, including:

    • Displaying the count

    • Reducing the frequency of event lines

    • Reduce the alpha when spamming occurs

  • New: Implemented an experimental Robin Hood hash table container for performance-critical code.

  • New: Attempting to read past the end of a file on Windows will once again return false rather than being silently truncated. All platforms should now treat this as an error.

  • New: Running with -LLM enabled now handles more memory allocations than before.

  • New: Fixed a potential (but rare) deadlock when attempting to load pak file data from multiple threads at once.

  • New: Added warning to FBulkDataBase::GetCopy to highlight cases where it would be faster to let the method allocate the buffer rather than allocating one up front.

  • New: Added and used StringFwd.h for string builder and string view declarations. Including StringFwd.h in place of forward declarations offers more flexibility to change how these types are declared.

  • New: Cleaned up FQueuedThreadPool interface to make it easier to plug in alternative implementations.

  • New: Backed out pull request (submitted as CL10610795 ) for TInterval::ToString() because it interacts poorly with some as-yet-unidentified change which was robo-merged later from another stream.

  • New: VS2019 compilation fix for #include because VS2019 only supports #include as per the standard.

  • New: Added TryMalloc(), which may return a nullptr if the memory allocation request cannot be fulfilled.

  • New: Made refcount validation conditional (only in Debug or when slow checks are enabled).

  • New: Added mimalloc allocator from https://github.com/microsoft/mimalloc because it performs better than mimalloc in cooker benchmarks. We still default to TBB malloc until the behavior has been explored in more depth.

    • To opt in to mimalloc, pass -mimalloc on the command line.

  • New: Fixed -nothreading logic not working properly due to one-time initialization of flag before the command line has been set.

  • New: Added SCOPE_MS_ACCUMULATOR (used now to track load times via on-screen stats, but can be used generally).

  • New: Changed the AsyncPreload stuff to be opt-in by platform.

  • New: Garbage Collector will now only run clustering code if clusters are enabled and when actual clusters are allocated.

  • New: When doing incremental unhashing, Garbage Collection will no longer log each iteration to reduce log output.

  • New: Fixed an issue with the resave commandlet not being able to perform a P4V commit after the UAsset was resaved.

  • New: Added event tag suppression to OutputDeviceMemory.

    • Fixed ring buffer writing when bounds crossed.

  • New: Cleaned up Garbage Collector Token Stream generation code and merged token debug info with the token stream to reduce data duplication and simplify the API.

  • New: Added -skipiostore UAT option to help with batch files that specify -iostore.

  • New: Added FReferencerFinder helper class that finds all objects referencing the provided list of objects. This is similar to FArchiveHasReferences but up to 16x faster.

  • New: Disabled filename extension exclusions when using pak files in an editor build.

  • New: Move module manager extra search path configuration out of FModuleManager::Get() and into a seperate function which is called from the launch engine loop after the platform files are created. This ensures that editor builds that use pak files have the paks mounted before we start scanning for data driven platform *.ini files.

  • New: Pak platform file changes to support mounting pak files in the editor.

    • Always look for pak files in the standard locations to determine whether we should create the platform layer.

    • When looking up a decryption key, check the registered list for all guids, even empty ones. We want to support pak mounting in non-monolithic builds where we don't have an embedded key.

    • Remove the initialization-time check that the decryption key exists for pak files with an encrypted index. The condition to test is more complex when considering editor pak mounting, and we will get a meaningful error almost immediately afterwards anyway.

  • New: Don't try and load plugin manifests in editor builds

  • New: Optimized GetArchetypeFromRequiredInfoImpl by reusing cached archetypes

  • New: Inlined IsGarbageCollectionWaiting so that it doesn't appear in profiles

  • New: Kismet reinstancing code will now use FReferenceFinder instead of FArchiveHasReferences to improve reinstancing performance

  • New: If Garbage Collector Clustering is disabled, Garbage Collector will now run with code responsible for handling clusters compiled out to avoid unnecessary checks.

    • Actor clustering will now be disabled if clustering is disabled in general

    • Added a separate setting for clustering generic assets (gc.AssetClustreringEnabled) to be able to enable actor clustering independently from asset clustering as it was possible in the past

  • New: Included the global UObject array memory usage in 'obj overhead' command report

  • New: Added 'obj overhead [-detailed]' console command to print out the total memory overhead of UObject hash tables and maps

  • New: FORCEINLINE IsCollectingGarbage to fix performance hotspot.

  • Improvement: Extended FStringView to make it easier to use as a drop-in replacement for FString where appropriate The family of functions that return a slice of the view has been mirrored from FString, including the variants of Left, Mid, Right, and Trim. Like FString, Equals and Compare are now available and case-sensitive by default. View literals are now available, such as TEXT("Value"_SV). A string view is now treated as a contiguous container of characters which makes it compatible with many algorithms.

  • Improvement: Fixed up some code for C++17 compilation ( std::binary_function, std::unary_function and register keyword are all deprecated).

  • Improvement: Fixed missing vtable for FActorTickFunction.

  • Improvement: Garbage Collector optimization where class reference will now be completely ignored by the Garbage Collector for instances of native classes. Additionally, the Outer reference will not be processed for Packages. \

  • Deprecated: Deprecated fixed string builders for 4.25. Fixed string builders are difficult to use correctly in many cases, and when used correctly, offer no performance or memory improvement over an extendable string builder of the same size.

  • Deprecated: Removed FGenericPlatformMisc::HandleIOFailure since it's no longer in use.

  • Deprecated: Removed rollup support from DDC interface since it is no longer useful.

  • Deprecated: Added deprecation warnings when using the old (non-EDL) loading path in cooked builds and when cooking. Toggling EDL off in Project Settings will also result in a deprecation pop up in the editor. Deprecation warnings can be disabled by adding the following lines to DefaultEngine.ini in the project's config folder:

    • [/Script/Engine.StreamingSettings] s.DisableEDLDeprecationWarnings=True

  • Removed: Removed deprecated TWeakObjectPtr operator=.

  • Removed: Removed FAsyncUncompress.

  • Removed: Deleted deprecated functions from UnrealString.h

  • Removed: Removed FPaths functions marked as deprecated for 4.18.

  • Removed: Removed deprecated Histogram functionality.

  • Removed: Removed (miscellaneous) deprecated functions from:

    • App.h

    • AssertionMacros.h

    • MonitoredProcess.h

    • Serialization/CustomVersion.h

  • Removed: Removed deprecated functions from Compression(.cpp/.h).

  • Removed: Removed deprecated functions from OutputDevice(.cpp/.h)

  • Removed: Removed redundant UPackage::AddReferencedObjects function.

Cooker

  • Bug Fix: Fixed a crash in the cooker difference check caused by FArchiveProxy not forwarding on calls to SetSerializedProperty() and SetSerializedPropertyChain().

  • Bug Fix: Fix to make sure SandboxDirectory is always absolute.

  • Bug Fix: Fix to handle an invalid platform passed to the cook commandlet without a fatal assert.

  • Bug Fix: Fixed extra DDC puts when DDC logging is enabled on the command line.

    • Before the fix, enabling verbose DDC logging with -ini:Engine:[Core.Log]:LogDerivedDataCache=Verbose was causing extra idempotent puts because of checks for the DerivedDataCache commandlet that checked for "DerivedDataCache" anywhere in the command line.

    • Check for "Run=DerivedDataCache" avoids the problem.

  • Bug Fix: Fixed path prefix comparison when cooking with ErrorOnEngineContentUse. This is a fix for not being able to cook plugins content.

  • Bug Fix: Fixed iterative cooking on Windows when the project is outside of the root directory but on the same drive.

  • Bug Fix: Fixed the following cook performance and correctness issues in UPackage::Save.

    • Cook Performance:

      • Avoid performance cost of calling CreateTempFilename() for cases where we don't actually need a temp filename (cost involves a FileSize check with the file system).

      • Avoid the performance cost of calling FileSize() to get the saved size of packages and use the recorded buffer size instead (which gives uncompressed sizes).

    • Correctness:

      • When saving packages asynchronously, the UPackage::FileSize field was populated with the filesystem size of the package, but since that may not have been written yet by the async writer, it was often set to (uint64)-1.

      • When computing the MBWritten cook stat, make sure that bulk data is included in the accumulated total and that the stat isn't calculated incorrectly in DiffOnly modes.

      • Temporary files would be left lying around if the package was determined to have no exports or to have been completely nativized.

  • Bug Fix: If chunk size is too small, abort generation of streaming install manifest.

  • Bug Fix: To fix log spam (of about 1.8 GB in cook logs), changed ShaderPipelineCacheToolsCommandlet's log to verbose.

  • New: Moved MD5 computation on writer thread during package save.

  • New: Improved cook times by avoiding re-computing the static parameter values twice during calls to FMaterial::CacheShaders (once in FMaterialResource::GetShaderMapId and again in FMaterialResource::GetStaticParameterSet) by enabling the MaterialInstance to store a cached parameter value set and re-use it in selected scopes (only applied to FMaterial::CacheShaders for now, but may be applicable elsewhere). Testing notes include:

    • QAGame produced the same WindowsNoEditor cooked data (barring metadata that had some non-determinism issues) with/without this change.

    • InfiltratorDemo looked visually correct on Win64 with and without cooked data.

  • New: Added SessionPlatforms to record the platforms being cooked in the current CookByTheBookSession or CookOnTheFly request. This fixes the performance issue of unnecessarily generating AssetRegistries for unused platforms when cooking in the editor.

  • New: Optimized IsEventDrivenLoaderEnabledInCookedBuilds for commandlets like the cooker.

  • New: Reduced iterations on Material Functions in UMaterialInstance::GetStaticParameterValues by changing the underlying API to do lookups for multiple parameters at the same time. Tested by a full cook with debug code that checked (using check()) whether the parameter values and expression IDs output from the old code path was equal to the parameter values and expression IDs output from the new code path.

  • New: To save time when the sandbox directory has many files to delete, delete the Sandbox directory asynchronously while the rest of the cook goes ahead.

  • New: Reduced cost of GetDependentFunctions on UMaterialFunction. Changed the following:

    • Introduce IterateDependentFunctions as a method to reduce temporary allocations when computing dependent functions.

    • Add transient UMaterialFunction::DependentFunctionExpressionCandidates field (computed in PostLoad and PostEditChangeProperty) with only function expression types that we might have dependent functions on to reduce the amount of time we spend iterating on FunctionExpressions and casting them to see if they're a type we could have to get dependent functions from.

  • New: Reduced cost of FMaterialUpdateContext and RecacheMaterialInstanceUniformExpressions to save 4 minutes off of a large dataset cook time. Changed the following:

    • FMaterialUpdateContext doesn't create a FGlobalComponentRecreateRenderStateContext instance unless FApp::CanEverRender is true.

    • FGlobalComponentRecreateRenderStateContext stores FComponentRecreateRenderStateContext instances in a TArray instead of a TIndirectArray to avoid excessive numbers of individual allocations and frees.

    • FGlobalComponentRecreateRenderStateContext doesn't create FComponentRecreateRenderStateContext instances for components that aren't registered or those that don't have a render state created. Analysis of the code shows that constructing those component contexts is pointlessly hitting the allocator (or bloating the TArray) because they will not do any useful work in their destructor.

    • RecacheMaterialInstanceUniformExpressions doesn't incur the cost of a TObjectIterator if FApp::CanEverRender() is false, as static analysis of the code shows no useful work done within the iteration if FApp::CanEverRender() returns false.

  • New: Optimize significant callers of FName::ToString to save about 30 seconds when cooking a large title

  • New: Add debug context to DDC requests that take the key as a parameter The existing GetSynchronous, GetAsynchronous, and Put functions are deprecated in favor of the DebugContext overloads.

  • New: Optimized FindTargetPlatform and its most expensive caller during cooking to save 42 seconds of wall time when cooking a large project.

  • New: Optimized ShaderPipelineCacheToolsCommandlet to reduce the execution time of the build command by 90 percent on a large title—time savings affect full, iterative, and single-package cooks.

  • New: To help with profiling, added named events to package saving.

  • New: Optimized IsEventDrivenLoaderEnabledInCookedBuilds() to not query the config system for the current state, but just use the global cvar variable that the config system writes to.

  • New: In the Cooker, do not traverse primitive components to update the material (resulting in a minor speed improvement).

  • Improvement: Major update which makes -DiffOnly cooks 20x faster to help find non-deterministic cooking issues. Testing on a large title showed a 99.6 percent reduction in the cost of FindAssetInPackage and a 95 percent reduction in the overall -DiffOnly cook time.

  • Improvement: Made the following API change:

    • A type that derives from FDerivedDataCacheInterface will need to change to the new API for GetSynchronous, GetAsynchronous, and Put that have a DebugContext parameter.

  • Improvement: Improved DDC error when no backends are available.

CsvCollate

  • Bug Fix: Fixed an out-by-one bug with -avg for CsvCollate 1.31. The stats were being divided by csvCount-1 instead of csvCount.

  • New: Added CsvCollate support for search patterns via -searchpattern .

    • Fixed out-by-one error with logging

    • Added -recurse argument to make recursion optional

    • Listed CSV files to log

  • New: Added CsvCollate 1.32- metadata filtering support.

    • -metadatafilter "key0=value0,key1=value1,..."

Memory Profiler

  • Crash Fix: Fixed crash if UEngine::AddOnScreenDebugMessage was called in threads other than the Game thread. This fix secured the usage of UEngine::PriorityScreenMessages and UEngine::ScreenMessages.

  • Bug Fix: Fixed a bug occurring in scenarios where reporting ensures to the Crash Report Client would overrun a fixed size string buffer. This issue appeared after two ensures fired, since the dynamic string buffers lifetime was equal to the crash reporting thread, and only reset on initialization.

  • Bug Fix: Added back stats instrumentation of local Blueprints function calls.

  • Bug Fix: Fixed FName batch loading check (OldUsedSlots == UsedSlots) in EngineTest.

  • Bug Fix: Prevented use of Hidden enum entries as default values for UHT exposed functions. These enum entries aren't exposed to Blueprints and Python, so they were causing UI issues or script syntax errors.

  • Bug Fix: Crash report client doesn't need full access handle to runtime when monitoring. This behavior triggered anti-cheat warnings in some cases. Use a limited access flags instead.

  • Bug Fix: Made StaticFindObject handle "any package" search with specific package name supplied in object path, fixing the ambiguous search warning.

  • Bug Fix: Fixed issues with plugin stack traces not resolving correctly. Disabled on demand symbol loading due to an issue where modules that are not in the main binary directory would not have symbols loaded correctly. This manifested as "UnknownFunction" entries in the logged stack trace. External crash reports were not affected.

  • Bug Fix: Fixed unterminated number parsing for new FName constructors with fixed length.

  • Bug Fix: Made StaticFindObject handle nested subobjects when searching for any package without a package pointer.

  • Bug Fix: Fixed LevelStreaming when changing desired level between request and completion with a loaded level. Pending unload is never processed and the state machine stays indefinitely in the LoadedNotVisible state.

  • Bug Fix: Fixed file helper utilities not returning failure when closing/flushing fails.

  • Bug Fix: Fixed FMacPlatformProcess::GenerateApplicationPath to prevent searching applications anywhere on the machine (anything indexed by Spotlight) rather than just looking under the Engine directory (as specified by the function's documentation).

  • Bug Fix: Enable TStrongObjectPtr to be created during static initialization.

  • Bug Fix: Added static assert to TPointerIsConvertibleFromTo to stop it from being instantiated with incomplete types and giving wrong answers.

  • Bug Fix: Fixed error message in FMatrix::ErrorEnsure().

  • Bug Fix: To handle Presaves that cause a circular reference that loads the package being saved again, moved ResetLoaders after Presave.

  • Bug Fix: Fixed WriteTableAsJson to enable writing utf8 so that FillDataTableFromJSONFile and applications other than Unreal can recognize and parse the file type.

  • Bug Fix: Changed FConfigFile::UpdateSections to preserve relative location of modified sections in the ConfigFile.

  • Bug Fix: Fixed transient properties being written out during JSON object serialization.

  • Bug Fix: Fixed TArray and FString assignment ignoring previously reserved memory.

  • Bug Fix: Fixed PURE_VIRTUAL containing code with commas in it.

  • Bug Fix: Fixed WindowsPlatformFile not handling greater-than 32bit read and write sizes correctly.

  • Bug Fix: Improved argument type deduction for TLess and TGreater.

  • Bug Fix: Fixed various LLM scope counters, added some missing texture scopes, and removed the explicit RHIMisc scopes from uniform and structured buffers so the parent scope is used. This makes tracking down buffer memory much easier (and more correct), as the various calling scopes will inflate rather than a single large RHIMisc scope containing all uniform and structured buffer allocations.

  • Bug Fix: Added GetTypeHash() support to TWeakObjectPtr properties.

  • Bug Fix: Fixed StaticFindObject() search for any package with substring package. names

  • Bug Fix: Fixed FName construction to avoid stomping the stack for long names.

  • Bug Fix: Fixed CString::Strspn and Strcspn.

  • Bug Fix: Fixed value FGenericPlatformMemoryConstants::TotalPhysical, which wasn't being set on Windows. Before the fix, it was initialized to zero without being set.

  • Bug Fix: Use UsedPhysical memory stats in LLM captures for memory allocated like on mobile devices to provide more accurate data.

  • Bug fix: FLazyName handles literals with "_[number]" suffix and ASCII literals, which unintentionally created an eager FName and converted that to a FLazyName.

  • New: Deprecated FCustomVersionContainer::GetRegistered, replacing it with a new thread-safe API, which includes the following changes.

  • Common use case:

    • The most common use case of getting a single registered version has changed:

      • Old: CustomVersionContainer::GetRegistered().GetVersion(Guid);

      • New: FCurrentCustomVersions::Get(Guid).GetValue();

  • Advanced use cases:

    • More advanced use cases that compare multiple custom versions should use new FCurrentCustomVersions::Compare instead of looping over versions and doing lookups.

  • New: Implemented unique Algo to remove duplicates from a range (similar to std::unique).

  • New: Allowed TruncToFloat intrinsics used on platforms that support them. Also, added SSE and AVX defines to allow specifying availability on PC, MAC, and Linux.

    • SSE and AVX defines have ALWAYS_HAS and MAYBE_HAS variants to distinguish between available to compile and available to run without the need to check cpuid.

  • New: Added FName length bounds-checking on top of existing check() to guard against malicious input in shipping builds.

  • New: Optimized unversioned array property loading.

  • New: Added a parameter to GetActorBounds and GetComponentsBoundingBox to recursively inspect sub-actors. Also added generic ForEachComponent utility function on actor, and merged code from GetComponent/GetActorBounds/GetComponentsBoundingBox/ ... to benefit by avoiding building an array of components in place. Modifying the list of components in the functor is prohibited (like in C++ range-based iterators), otherwise, users can still use GetComponents to retrieve components in a local list and perform changes afterwards.

  • New: Added another variant of DrawCoordinatesSystem.

  • New: Fixed FArchiveFileReaderGeneric to always align buffer sizes to a power of two in order to take best advantage of hardware I/O.

  • New: Implemented graceful handling of ue4stats files that don't have frames.

  • New: Enabled 'if constexpr' support on more compiler versions.

  • New: Added a UE_STATIC_ASSERT_COMPLETE_TYPE(Type) macro that causes a compile error if Type is incomplete.

  • New: Added functionality for bImplicit send configuration variable when Crash Report Client runs in monitor mode. This allows a game to automatically send crash reports without user interaction, displaying a native OS dialog when completed.

  • New: Optimized FCborStructSerializerBackend (used by MessageBus/UdpMessaging) to encode TArray/TArray as a byte stream rather than an array of numbers, approximately reducing message sizes by a factor of two.

  • New: Added move construction between TArrays with different-width heap allocators (for example, TArray to TArray64).

  • New: Added GetGeneratedTypeName(), which creates a non-portable static string representation of any C++ type.

  • New: Made FPrimaryAssetId FString constructor explicit, added new faster construction paths and StringBuilder << support.

  • New: Added rvalue support to TSharedPtr::ToSharedRef, TWeakPtr::Pin, and TSharedFromThis::AsShared.

  • New: Removed unnecessary circular dependency load deferring work during property serialization when EDL is enabled.

  • New: Exposed working directory for FInteractiveProcess.

  • New: Added ProcessHandle getter in FMonitoredProcess and FInteractiveProcess.

  • New: Added Algo::ForEach.

  • New: Added a predicate version of LoadFileToStringArray, which filters lines based on content.

  • New: Made the following classes final when they already had a final virtual destructor:

    • TGraphTask

    • FD3D12StagingBuffer

    • FOpenGLGPUFence

    • FOpenGLStagingBuffer

    • FD3D11StagingBuffer

  • New: Separated out FArchiveState from FArchive so that it can be queried from FStructuredArchive without providing access to the entirety of the underlying FArchive.

  • New: Added PLATFORM_COMPILER_HAS_FOLD_EXPRESSIONS feature check macro.

  • New: Added operator* for TOptional.

  • New: Used a fixed-size inline buffer for the pimpl in FStructuredArchiveFromArchive to avoid frequent allocations.

  • New: Added FName batch serialization and aligned up IoStore chunks to 16B. The batch serialization is used by the new IoStore and AsyncLoading2.

  • New: Tagged property serialization optimizations.

  • New: Added stateful deleter support to TUniquePtr. Also, fixed TUniquePtr's assignment operator which takes a TUniquePtr with a different deleter.

  • New: Added UE_ASSUME macro that works on both MSVC and Clang.

  • New: Fixed wasteful slack being allocated during TCHAR* -> FString construction.

  • New: Implemented LexFromString from FStringView for primitive types.

  • New: Optimized byte swapping to use intrinsic code provided by MSVC and Clang, resulting in up to 6x faster performance on MSVC. Also, Clang was able to optimize the generic C++ code into the intrinsic equivalent.

  • New: Added UE::String::BytesToHex and UE::String::HexToBytes, which do not require FString as input or output.

  • New: Added FName::TryAppendAnsiString as an optimization because most names are not wide.

  • New: Implemented the following engine init optimizations and new string conversion paths.

    • Added:

      • Core string conversion paths

      • FString::Append() and += overloads to avoid pointless temporaries when appending C strings

      • UTF32 <-> TCHAR string conversion macros

    • Optimized:

      • QuotedString parsing

      • Property parsing

      • PackageName

      • SoftObjectPath

  • New: Added TEqualTo as a binary predicate to perform equality comparison of its arguments.

  • New: Added the following:

    • Algo::Replace can be used to replace FString::ReplaceCharInline on array views of characters such as on a view of a string builder.

    • UE::String::ParseLines can be used to split a string view on line endings to find the non-empty lines in the view. The intent is to replace functions like FString::ParseIntoArrayLines and FFileHelper::LoadFileToStringArray.

    • UE::String::ParseTokens[Multiple] can be used to split a string view on one or more single-character or multi-character delimiters. The intent is to replace FString::ParseIntoArray.

    • Extend Algo::CompareByPredicate to allow the input ranges to be different types and to take them by universal reference.

    • Extend TArrayView and MakeArrayView to allow array views to be created from initializer lists.

  • New: Extended StringBuilder to make it easier to use in place of repeated FString concatenation. The new functionality includes:

    • AddUninitialized

    • Appendf

    • Join

    • JoinQuoted

    • RemoveSuffix

    • Reset

    • Integers can now be written to string builders using operator<<

  • New: Extended FSHAHash for string view and string builder.

  • New: Added string view constructors and a string builder append operator to FName.

  • Improvement: This major improvement includes unversioned property serialization disabled by default, resulting in 2x faster loads and 6x more compact compared to tagged property serialization. The most important differences to tagged properties are the following :

    • Assumes code and data schema matches

    • Only used in unversioned (cooked) packages

    • Doesn't store field types nor converts values when field types change

    • Does't handle name or GUID redirects

    • Doesn't store memory-wise zero properties

    • It's based on property indices instead of property names/tags

    • The metadata is placed in a compact header instead of tags/metadata being interleaved with data

  • Improvement: Optimized iteration-heavy StreamableManager functions.

  • Improvement: Optimized FPackageName::GetShortFName.

  • Improvement: Optimized FPackageName::TryConvertFilenameToLongPackageName to save 13 seconds of wall time when cooking a large project.

  • Improvement: Added initial capacity for container allocators so containers can start with inline allocator capacity. Speeds up TBitArray, TMap and TSet construction and initial insertion.

Natvis

  • Bug Fix: Fixed TArrayView Natvis sometimes not working correctly.

  • New: Changed FNameEntryId visualizer to always display all names without any quotation marks.

  • New: Added FStatNameAndInfo visualizer, using it to visualize FStatMessage in non-debug builds.

PerfReportTool

  • Bug Fix: Fixed PerfReportTool issue when adding numeric and non-numeric metadata to summary metadata columns. When this happens, we just convert the column to strings instead of throwing an exception.

  • Bug Fix: Fixed collated/email display when there are missing values. Instead of displaying nothing for that entry, compute min/max/avg only for values that exist.

    • Added support for map overlay summaries

    • Added support for limiting decimal places for CSV graphs

    • Reduced report size by limiting decimal places for CsvToSVG graphs.

  • New: Added boundedstatvalues summary type for visualizing particular stats between two events, with configurable columns.

    • Each column displays a stat value, computed with one of the following formulas: sum, percentoverthreshold, percentunderthreshold, average and streamingstressmetric (the latter is used for File I/O)

    • Added support for shared summaries (set up once and use in multiple reports)

    • Added snapToPeaks property for graphs, so that it can be disabled in some cases (for example, with smooth graphs).

  • New: Added support batched graph generation for PerfReportTool. This update increases performance by 30 percent over the old multi process method, and significantly lowers CPU and disk usage.

    • Fixed determinism issues with report generation (Test cases are now identical between runs)

    • Enable with -batchedgraphs

    • Added batch and multi thread support via response files for CsvToSVG

  • New: For PerfReportTool 4.01, batched graph generation is enabled by default.

    • Disable with -nobatchedgraphs

    • Report generation is 33 percent faster and no longer consumes the entire CPU

Unreal Insights

Channels
  • New: New concept "channels", which categorizes events into named groups. This allows users to manage the amount of trace data generated. Channels are disabled by default, and can now be toggled during live sessions.

  • New: "Developer/TraceDataFilters" plugin contains UI for controlling channels in Unreal Insights and Gameplay Insights.

  • Improvement: Unified command line argument to control events, "-trace=channel1,channel2,...". This replaces the previous arguments. For example "-trace=cpu,frame,bookmark" enables cpu profiler events, frame markers and bookmarks.

Session Info
  • New: New "Session Info" tab showing general info for current trace session being analyzed.

  • New: Available info: session name, URI, analysis status, session duration, analysis modules.

Store Browser Start Page
  • New: Added a splash screen to appear each time session analysis is started in a separate process.

  • New: Added "Auto-start" toggle option to allow session analysis to automatically start for new live sessions. It is also possible to set a filter by Platform or by Application Name (for live trace sessions allowed to auto-start).

  • Improvement: Changed Unreal Insights workflow to start in "Browser mode" (the old "Start Page"). Trace session analysis is now started in a separate process ("Viewer mode"), for each session being analyzed. A single Browser window can be open at a time.

  • Improvement: Improved tooltip for traces in the Trace Sessions list.

  • Improvement: Renamed the "..." button to "Explore" (Explore the Trace Store Directory).

  • Removed: Removed Start/Stop recorder functionality.

Asset Loading Insights
  • Crash Fix: Fixed crash when selecting Object Type Aggregation Tab on second open of a trace session.

Misc
  • Bug Fix: Fixed Timing Insights to have the layout persistent.

  • New: Added "-OpenTraceFile=file.utrace" and "-OpenTraceId=id" command line parameters to force UnrealInsights to start analysis of the specified trace file or id. In this case Unreal Insights starts directly in "Viewer mode").

  • New: Added "-Store=address:port" command line (also as "-StoreHost=address -StorePort=port") to be able to connect Browser with a specified trace store.

  • New: UnrealInsights now loads 'Default' phase plugins. Find the plugin at:

    • Animation/GameplayInsights

    • Developer/TraceDataFiltering

  • New: Analysis: Implemented reading from session while holding write lock. Added support for recursive session read/edit scopes and multiple concurrent session readers.

Networking Insights
  • Improvement: Changed the Networking Insights tabs to open automatically only if the trace has net events.

Networking - Packets view
  • Crash Fix: Fixed rare crash (trying to use an invalid ConnectionIndex).

  • Bug Fix: Fixed infinite loop if zooming in (vertically) too much.

  • Bug Fix: Fixed package selection being reset if selection is made too soon.

  • New: Added key shortcuts for selected package / package range:

    • Left/Right --> selects previous/next package

    • Shift + Left/Right --> extends selection (multiple packages) toward left/right side

    • Ctrl + Shift + Left/Right --> shrink selection (multiple packages) from left/right side

  • New: Added highlight for packets with at least one event matching the filter (by NetId and/or by Event Type). The packets with no event matching the filter will be displayed with a faded color.

Networking - Packet Content view
  • New: Added "Find Packet" UI on top of packet breakdown visualization:

    • Previous / Next buttons + PacketIndex editbox.

  • New: Added "Find Event" UI:

    • First / Previous / Next / Last buttons --> to navigate between (filtered) events

    • By NetId checkbox + NetId editbox --> to enable filtering by NetId

    • By Type checkbox + EventType readonly editbox --> to enable filtering by EventType. The EventType can be set by double clicking in NetStats or an event in Packet Content view.

    • "Highlight" checkbox --> to enable the Packet Content view to highlight only the filtered events (shows all other events with faded colors).

  • Bug Fix: Fixed sorting of net stat groups (always by name).

Runtime
  • Bug Fix: Fixed issue where scope IDs of zero could sometimes be traced out from dynamic scopes.

  • New: Cleared up load time profiling instrumentation--mainly removed tracking and reporting of internal EDL events. Added support for having multiple async loading threads. Added AsyncLoading throughput graphs.

  • New: Implemented tracing of network traffic to Unreal Insights, which allows capturing all game network traffic which can be visualized using the new Network Insights tab.

Timing Insights
Timing view
  • Crash Fix: Fixed a rare crash where a log message had a null category name.

  • Crash Fix: Fixed a rare crash when trying to display a timing event having no name (invalid timer).

  • Bug Fix: Fixed the vertical scrolling issue with track being discovered on the fly (for example, total vertical height of all scrollable tracks is now properly computed all the time).

  • Bug Fix: Fixed "auto snap to limits" for vertical scrolling to allow "any position inside view" when the total height of all tracks is less than the height of the view.

  • Bug Fix: Fixed the tooltips not showing the hovered timing event correctly in some situations (when a previous event has EndTime equal with StartTime of hovered event).

  • Improvement: Improved performance by using draw state caching for each track.

Graph tracks
  • Bug Fix: Fixed high-DPI issues with graph tracks. It fixes issues when Unreal Insights runs inside the UE4Editor. Support for high-DPI is still disabled in Unreal Insights standalone application.

  • Bug Fix: Fixed issues arising from tracks being zero-size when they 'scale-in' at first.

  • New: Added a colored bullet next to each series in the context menu (for easier correlation). Also the list of series is now scrollable in the context menu.

Timers view
  • Bug Fix: Fixed tooltips not appearing on Linux when the trace session is first opened.

  • New: Added highlight/filtered mode for a selected timer. Double clicking a timing event (in the Timing view) or a timer (in the Timers list) will highlight all timing events of the same type (timer). The other timing events are displayed with a faded color. Double clicking an empty space (in the Timing view) or same filtered timer (in the Timers list) will reset the filter.

  • New: Added the ability to scrub the Time Marker (the orange vertical line; one set by clicking a message in the Log view) by holding Ctrl or Shift and scrubbing the ruler track. The time marker now also displays the time, similar to the current time readout.

  • New: Added warning red line on sides of timing view when trying to over-scroll using key shortcuts (Ctrl + Left/Right/Up/Down) or using Shift + Mouse Wheel.

  • New: Added ">" in front of the name of the selected (pinned) track.

  • New: Added Frame timing tracks (for Game and Rendering frames) to correlate frame index and duration of each frame with gpu/cpu timelines. The two tracks can be made visible using the R key shortcut or using the "Tracks" menu.

  • Bug Fix: Fixed auto vertical zoom to allow bigger value ranges (was initially limited to around 10^6, now should be around 10^18 -- for a 100px height graph).

  • New: Added toggle header state to Frame timing tracks. When expanded, the respective track will draw vertical marker lines on edges of each frame (overlapping the entire view).

  • Improvement: Improved navigation by using a pinned track for vertical position reference when scrolling or zooming. Ex.: Pinned track will remain at a stable vertical position relative to mouse pointer while panning. Also, the pinned track will remain at a fixed vertical position when scrolling horizontally using the scrollbar.

  • Bug Fix: Fixed Ctrl + Double Click in Timing view not keeping the selected timer visible in Timers view. Ctrl + Double Click action selects a new timing event (and the corresponding timer in the Timers list), but also selects the time range of the selected event. When time selection is updated the aggregation stats is re-computed and timers list is re-sorted, so the selected timer needs to be made visible again.

Counters view
  • Improvement: Changed double click on a counter to also turn on visibility of the Graph track when adding a graph series for the respective counter.

UnrealPak

  • New: Added an option (-forcecompress) to UnrealPak that forces all compressed files inside a pak to be compressed, even if the compression results in a larger file size.

  • New: Added memory freezing target platform layout into DataDrivenPlatformInfo (removed from TargetPlatform) so that UnrealPak can get it—although UnrealPak no longer needs it with index freezing disabled.

  • New: Added support for disabling secondary order in UnrealPak to reduce fragmentation in platforms that use delta patching.

Datasmith

  • Crash Fix: Fixed a crash when switching Variant Manager Variants during Standalone Game mode.

  • Crash Fix: Fix a crash when importing a VRED variants file with invalid transform variants data.

  • Crash Fix: Fixed several crash issues around the MDL Importer.

  • Bug Fix: Resolved many issues related to SubLayers when using the USD Stage window.

  • Bug Fix: Fixed SubLayers disappearing when reloading a stage with the USD Stage window

  • Bug Fix: Fixed translucent VRED materials not importing with Translucency Blend Mode override.

  • Bug Fix: Fixed object metadata not importing correctly from Cinema4D scenes.

  • Bug Fix: Fixed behavior of Variant Manager Enum property captures so that the widgets now behave similarly to the Details panel.

  • Bug Fix: Fixed imported animations ignoring source framerate when importing VRED and DeltaGen FBX files.

  • Bug Fix: Fixed an issue where the string shown when dragging an editor Actor onto a Variant Manager Variant.

  • Bug Fix: Fixed animations imported from DeltaGen FBX files behaving incorrectly when multiple animations per Actor are present on the same timeline.

  • Bug Fix: Fixed some Cinema4D files not being imported completely due to allocation issues.

  • Bug Fix: Fixed missing objects and scene hierarchy when importing some Cinema4D scenes.

  • Bug Fix: Fixed an issue where the wrong transformation was applied on some parts. These parts have a transform with a pitch component of +/-90 deg (Rotation around the right axis (around Y axis)). During the import process, a lot of conversions of the transforms are done: World transform to Local transform to World transform and these repeated conversions generate numerical errors. A fix is now in place to avoid this problem.

  • Bug Fix: Fixed additional internal Cinema4D import options being exposed to Blueprint and Python scripting.

  • Bug Fix: Fixed Actors with zero scale being discarded when importing Cinema4D scenes.

  • Bug Fix: Fixed materials properties not being captured when enabling auto-expose on the Variant Manager. Fix additional Actors being captured when dragging Actors to the level with auto-expose enabled.

  • New: Added support for IES light brightness when importing Cinema4D scenes.

  • Bug Fix: Fixed animations not resetting properly when reloading the USD stage from the USD Stage window.

  • Bug Fix: Fixed light/fog color property captures in the Variant Manager not correctly detecting when they differed from the current values.

  • Bug Fix: Resolved an issue with Variant Manager Actor selection clearing when selecting through the editor Actor's components on the Details panel.

  • Bug Fix: Fixed objects not referenced by any IFC project being ignored importing IFC files.

  • Bug Fix: Fixed extra geometry being imported from Cinema4D scenes with Connectors and Atom Arrays.

  • Bug Fix: Fixed texture tags not being propagated from parent Actors when importing Cinema4D scenes with Datasmith.

  • Bug Fix: Resolved incorrect transform when importing VRED or DeltaGen FBX scenes with Actors that have 90 degree rotations on the Y axis.

  • Bug Fix: Applied fixes for materials being imported from Alias Wire files.

  • Bug Fix: Fixed the reimport of GLTF scenes not recognizing asset changes in some circumstances.

  • Bug Fix: Fixed errors when using the Construct Object from Class node with some Variant Manager classes on Editor Utility Blueprints.

  • Bug Fix: Fixes for nested SwitchActors overriding each other's effects.

  • Bug Fix: Fixed DeltaGen SwitchVariants targeting the wrong objects on imported scenes in some circumstances.

  • Bug Fix: Fixed warnings when importing IFC scenes without lightmap generation.

  • Bug Fix: Fixed incorrect SpecularGlossiness to MetalRoughness conversion when importing GLTF files. Also fixes all textures being imported as sRGB mode.

  • Bug Fix: Fixed primitives not animating after their visibility was toggled from the USD Stage window.

  • Bug Fix: Fixed some shader compilation errors in the MDL Importer.

  • Bug Fix: Fixed an issue about duplicates in scene hierarchy from a Revit Datasmith export.

  • Bug Fix: Fixed mesh collapsing mechanism incorporating prims that were invisible, when using the USD Stage window.

  • Bug Fix: Fixed an issue with Rhino import for UV orientation and UV mapping transform.

  • Bug Fix: Fixed reimport of Datasmith materials.

  • Bug Fix: Fixed incorrect location of spawned Actors using Spawn Actors At Location operation.

  • Bug Fix: Fixed an issue with the glTF Importer for importing materials with an ambient occlusion map.

  • Bug Fix: Fixed an issue with the AxF Importer for the import of materials with a period (".") in their filenames. We now provide better error/warning messages.

  • Bug Fix: Fixed rounding errors on LevelSequence section sizes for animations created with the USD Stage window.

  • Bug Fix: Fixed wrong normals orientation on wall entities exported from Revit Datasmith.

  • Bug Fix: Fixed illegal characters in texture name don't survive datasmith export.

  • Bug Fix: Fixed an issuer where Dataprep Merge and Proxy Mesh Operators leave empty mesh Actors in the hierarchy.

  • Bug Fix: Fixed an issue where importing a new LOD on a StaticMesh asset imported with Datasmith would prevent that asset from being reimported.

  • Bug Fix: Fixed an issue during a DatasmithScene reimport where the parent material of a material instance would change and cause incorrect results.

  • Bug Fix: Fixed a bug where reimporting a Datasmith scene with different import options would not have any effect on the imported asset.

  • Bug Fix: Fix importing of linearly-interpolated animations from Cinema 4D scenes.

  • Bug Fix: Fix Relative Location, Rotation and Scale properties not being captured by the auto-expose feature of the Variant Manager when the Actor is manipulated via the viewport handles, in some situations.

  • Bug Fix: Fixed an issue during a DatasmithScene reimport where the user's changes would not be reapplied properly to the lights in the scene after the reimport.

  • Bug Fix: Fixed some situations producing empty dummy rows on the USD Stage window primitive tree view.

  • Bug Fix: Fixed imported DeltaGen materials being shared when they have different AO textures.

  • Bug Fix: Fix incorrect camera transform correction when opening z-up USD stages with the USD Stage window.

  • Bug Fix: Fixed an issue with Rhino that resulted in incorrect use of mapping channel id.

  • Bug Fix: Fixed missing export timing information in datasmith files exported from revit.

  • Bug Fix: Fixed an issue with glTF that resulted in geometry normals imported when degenerate triangles present.

  • New: Enabled Blueprint runtime access to the IsActive function of the Variant asset

  • New: The DatasmithCore module is now available at Runtime.

  • New: We now support "Smooth", "EaseIn" and "EaseOut" curve interpolation modes when importing animations from DeltaGen FBX files.

  • New: Use mesh labels for imported Static Mesh asset names when importing IFC scenes.

  • New: It's now possible to reorder Variant Manager property capture rows.

  • New: The Variant Manager Actor binding selection is now synchronized with the editor Actor selection.

  • New: We now re-use identical Static Meshes when importing Cinema4D scenes.

  • New: Added sRGB flag control for imported Datasmith texture elements.

  • New: It's now possible to rebind Actors to existing Actor bindings on the Variant Manager.

  • New: Added support for loading (and quickly toggling the visibility of) USD purposes on prims imported with the USD Stage window.

  • New: Added options to control purposes to load and view, as well as payload behavior when opening USD stages via the USD Stage window.

  • New: Added color picker widgets for captured color and linear color properties in the VariantManager.

  • New: Auxiliary files will now only be auto-completed on import options dialog for VRED and DeltaGen scenes if they match the filename of the scene exactly.

  • New: VariantManager FunctionCallers now also provide access to the Variant, VariantSet and LevelVariantSets asset.

  • New: Added support for capturing CineCamera properties with the Variant Manager.

  • New: Added additional buttons on the top of the Variant Manager window for adding Actor bindings and property captures.

  • New: Save CAD patch into Static Mesh polygon group for re-use in Geometry tools.

  • New: Added support for animation and track delays when importing DeltaGen animations from FBX files.

  • New: Added sharing of a common USD stage cache between the USD Stage window and Python scripting.

  • New: Enabled support for Shininess textures imported from DeltaGen FBX files.

  • New: We now allow controlling the offset and scale of SubLayer animations from USD Stages (when importing using the USD Stage window) by using the Sequencer and SubSequence tracks.

  • New: Added combo boxes to edit primitive Kind and Purpose on the USD Stage window.

  • New: Improved the logging and display of all errors and warnings emitted from the USD SDK when using the USD Importer. modules.

  • New: Added support for Rhino sub-object materials to be imported.

  • New: Added support for Rhino extrusion render meshes to be imported.

  • New: Added support for undo/redo for most actions when using the USD Stage window.

  • New: Added the PLMXML Importer.

  • New: Added support for Rhino pivot set to geometry bbox center.

  • New: Fixed incorrect names on Subcomponents imported with Datasmith.

  • New: Updated Dataprep operation "Spawn Actors At Location" to support Blueprint based Actors.

  • New: We now support the option to export Revit Structural Steel Connections.

  • New: Added an option to Dataprep for folder importer to use multi-process import to speedup import on multi-core CPUs.

  • New: You can now batch export Revit views.

  • New: Implemented filter by layer for Dataprep.

  • New: Revit can now export proper pivots location on entities.

  • New: Export Revit.DB.FamiliyInstance.Mirrored/Handflipped/Facefliiped as tags.

  • New: Added support for exporting Revit PBR materials.

  • New: Added a TranslateScene method to populate the Datasmith scene.

  • New: Implement an operation to add tags to Actor/component for Dataprep..

  • New: Added an option in Dataprep to implement a filter for Actors based on the number of triangles and/or vertices.

  • New: Added an option in Dataprep to implement an operation to add meta-data to asset/Actor/component.

  • New: Added support for importing points from Rhino models.

  • New: Added Entity Tags to Rhino.

  • New: Implemented "Randomize Transform" operation for Dataprep.

  • New: Implemented consolidate operation for Dataprep.

  • New: Added support for the MDL Importer on Linux.

  • New: Added an option to Rhino import that lets you choose on import whether to have Datasmith tessellate all parametric surfaces for you or whether you want to reuse triangular meshes previously created by Rhino and stored in your Rhino scene.

  • New: Reworked asset preview widget to become more consistent with the Level Editor's Content Browser.

  • New: Added the ability to hide/show Actors to the scene outliner in the Dataprep Editor.

  • New: Export Pipe/Duct Insulation and Lining in correct hierarchy.

  • Improvement: We redid how Variant thumbnails are stored in the Variant Manager allowing setting thumbnails from file and fetching. thumbnails via Blueprint at runtime. Also fixes bugs with thumbnails sporadically disappearing.

  • Improvement: Improved Rhino import to avoid cracks in the mesh.

  • Improvement: Improved performance of datasmith CAD scene save/reload.

  • Improvement: Improved performance of some Datasmith reimport.

  • Deprecated: Previous versions of VRED and DeltaGen FBX importers have had their Blueprints cleaned up. To upgrade, scenes that used those Blueprints need to be imported again, or those old Blueprints need to be copied over from a previous Unreal Engine version.

  • API Change: The python import API for Datasmith now reflects the internal processing. To now access the scene representation, you can call "translate_scene" method on the scene, and the workflow looks like this:

    • call construct_datasmith_scene_from_file()

    • Edit options...

    • call translate_scene()

    • Edit scene...

    • call import_scene()

  • API Change: The DatasmithCore module has been moved from "Engine\Source\Developer\Datasmith\DatasmithCore" to "Engine\Source\Runtime\Datasmith\DatasmithCore".

DevTools

AutomationTool

  • Bug Fix: AutomationTool now looks for the IsBuildMachine environment variable set to 1 to set an implicit -buildmachine argument, rather than inferring it from uebp_LOCAL_ROOT being set. The uebp_LOCAL_ROOT variable is set at runtime, which was causing the IsBuildMachine flag to be set incorrectly for child instances.

  • New: Added support for AutomationTool scripts when using foreign projects, and for game projects to output binaries under their own project directory. When compiling *.Automation.csproj files, the $(EngineDir) property will be set to the appropriate engine directory, allowing the project to resolve assembly references to the correct location.

  • New: Refactored ini key stripping in UAT to be driven by config settings—exposed in the project packaging settings. Added the ability to set a list of config sections to strip while staging.

  • Improvement: Improved startup time when running the BuildCookRun command by lazily constructing metadata for every project in the branch.

BuildGraph

  • New: Added option for building the installed engine with VS2019 instead of VS2017:

    • -set:VS2019=true

UnrealBuildTool

  • Crash Fix: Fixed UnrealBuildTool crashing (rare) on launch.

  • Bug Fix: Fixed issues where overriding the Visual Studio version from the command-line would not be used in targets, resulting in errors when an option like setting the compiler version was also used. Some command-line arguments are now passed to target creation (specifically, Visual Studio version). Also fixed so that HololensTarget is actually getting configured from setting sources, including command-line and BuildConfiguration.xml which we added attributes to match how Windows targets can be configured.

  • Bug Fix: Fixed Rider projects failing to generate when a program was defined in the game projects folder—this is similar to how VS project generation works.

  • Bug Fix: Added the engine version as a dependency for checking that the module rules assembly was up to date, fixing issues where a new UBT version can attempt to use an old version of the modules rules assembly.

  • Bug Fix: Fixed issue with installed projects trying to use VSCode and getting incorrect IntelliSense for engine source code.

  • Bug Fix: Added detection of all .NET Framework versions, throwing BuildException if none are found.

  • Bug Fix: Fixed issue in UBT *.ini parsing not combining multiple escaped newlines into a single line.

  • Bug Fix: Fixed log file being written to the Engine directory (even in installed builds). The log is now written to AppData/Local on Windows.

  • Bug Fix: PVS Studio intermediates are now stored in a separate directory to avoid cloberring intermediates for regular builds.

  • Bug Fix: The makefile is now invalidated if resource files or other leaf prerequisites are removed.

  • Bug Fix: Read-only files are now removed when cleaning a target.

  • Bug Fix: Any targets that can't be built on the current host platform are ignored when generating Intellisense data for project files.

  • Bug Fix: Prevent writing compiled assemblies to installed engine directory. Write them to the AppData folder instead.

  • Bug Fix: The C++ standard version is now propagated to the generated project files in order to use the correct environment for intellisense.

  • Bug Fix: Fixed missing UAT/UBT log output on Mac. Standard macros set through the DefineConstants property (for example, "TRACE") were being overwritten by MonoCS, causing TraceLog() function calls to be compiled out.

  • Bug Fix: - Removed extra Engine directory under the UE4 project above the Platform extension directory.

  • New: Added Thread_UseAllCpuGroups to UnrealBuildTool config that enables UBT to use both CPU groups on high-core systems (such as 64-core ThreadRippers).

  • New: Visual Studio solution files and project files are now generated deterministically by UnrealBuildTool to reduce the frequency of solution and project reloads.

  • New: Improved IncludeTool error output when encountering unbalanced curly braces or conditional preprocessor macro blocks.

  • New: Added option to build a list of plugins while not enabling them per target.

  • New: The set of target configurations included in generated project files can now be configured via BuildConfiguration.xml.

    • ProjectFileGenerator/Configurations

  • New: Visual Studio 2019 is now the default compiler and IDE on Windows.

  • New: Added a BuildConfiguration setting for forcing UBT to be built in debug configuration.

    • VCProjectFileGenerator/bBuildUBTInDebug

  • New: Single file compile now works correctly with generated *.cpp files.

  • New: JetBrains Rider is now supported as an IDE from the editor and when generating project files.

  • New: An explicit error will occur if engine modules are out of date when launching the editor, rather than UBT trying to build them and triggering sharing violation errors.

  • New: Added an explicit check for output paths being longer than MAX_PATH on Windows.

  • New: Added support for different analysis modes in the PVS toolchain. Defaults to just using general analysis, but other options can be configured by setting TargetRules.WindowsPlatform.PVS.ModeFlags or by setting TargetRules.WindowsPlatform.PVS.UseApplicationSettings = true to read from the PVS config file.

  • New: A warning is now output if any intermediate path is > 200 characters under the Unreal Engine root directory, to trap MAX_PATH issues running the engine from longer base directories.

  • Deprecated: Generating project files by passing -2017 or -2019 is discouraged—this is due to the lack of visibility this provides to other engine tools that generate project files.

UnrealGameSync

  • Bug Fix: Fixed a problem with auto-update not working correctly if the application is run directly (such as via a pinned start menu icon).

  • Bug Fix: The editor is built with the selected project file even when running a content only project. This ensures that any non-default plugins are enabled.

  • Bug Fix: The latest checked-in version of the UGS config file is now used to determine sync filter and stream settings, rather than the local version.

  • New: Added support for parallel syncing. UGS now internally spawns multiple threads to sync on, and attempts to distribute sync commands evenly between them. Two threads are used by default, but this value can be adjusted from the Options > Application Settings menu.

  • Bug Fix: Fixed syncing of individual changes ignoring selected sync filters.

  • New: By setting the Enable=false parameter on a custom sync category entry in the project config file, sync categories can now be configured as disabled by default.

  • New: The recent projects list is now capped at 10 entries.

  • New: Each project tab now has a color tint matching the configured color tint for the editor frame in that branch.

UnrealHeaderTool

  • Bug Fix: Exposed the new 'UncookedOnly' UnrealBuildTool module type to UnrealHeaderTool and added 'PKG_UncookedOnly' as the corresponding package flag.

  • Bug Fix: Fixed skipping over PURE_VIRTUAL macros in UnrealHeaderTool.

  • New: To support UnrealHeaderTool error reporting, enabled exception support when building with Clang for Windows.

  • New: Removed requirement for "= true" on AllowPrivateAccess metadata tag.

  • Improvement: UnrealHeaderTool no longer exports Z_Construct_UFunction declarations.

UnrealVS

  • Bug Fix: SingleFileCompile mode now works when compiling with PVS static analysis.

  • Improvement: XAML changes to the UnrealVS batch builder panel:

    • Columns are now resizable

    • Label colors come from VS themes and are visible with the dark theme

    • Alignment fixed and dead space reduced

Editor

  • Crash Fix: Fixed an issue where DisasterRecovery crashed if the recovery session database could not be open or was corrupted. Fixed an issue where DisasterRecovery was freezing the Editor if the new session database could not be created successfully.

  • Crash Fix: Fixed a crash that occurred when undoing the painting on a Skeletal Mesh.

  • Crash Fix: Fixed a crash that occurred on certain files when using the speed tree importer. Mainly it occurred with those that had multiple assets with the same name.

  • Crash Fix: Fixed a crash occurring with skeletal mesh bake material, and incorrect ID remapping.

  • Crash Fix: Disabled input in Level Editor Viewports when a map is being torn down. Speculative fix - the call stack in the bug looks like we think we have a valid actor pointer, but it is probably getting garbage collected. The log is outputting level unload messages right before the crash.

  • Crash Fix: Fixed a crash that occurred when a selected spline point was removed from the Details panel.

  • Crash Fix: Fixed a crash that happened when compiling a running Editor Utility Blueprint that contained a Details view. Rebuilding the Details view widget after a compile is now a synchronous operation. Compiling multiple times caused the underlying widgets to be cleaned up on the main thread from the compile. The asynchronous Details view task created widgets that were then destroyed by the main thread's compile before finishing the task.

  • Crash Fix: Crash fix for trying to open the Asset editor for an invalid Asset.

  • Crash Fix: Fixed a crash occurring when a user deleted an actor from the level.

  • Crash Fix: Fixed a crash occurring in the Static Mesh Editor after copy-pasting primitives.

  • Crash Fix: Fixed a crash occurring during garbage collection when UObject references a SAssetViewItem().

  • Crash Fix: HISM: fix crash when manually setting a instancing random seed to zero.

  • Crash Fix: Fixed a crash occurring with SPropertyEditorInteractiveActorPicker.

  • Crash Fix: Fixed a crash occurring when saving over an existing level and pressing the ESC key.

  • Crash Fix: Fixed a random crash observed when enabling or disabling disaster recovery during a Multi-User session because 'compiled in' or 'memory only' packages were hot-reloaded.

  • Crash Fix: EditConditions no longer crash when their parent object gets deleted from under them, such as when editing a blueprint CDO and then compiling.

  • Crash Fix: Fixed a crash that occurs when trying to get SlateApplication in ShouldThrottleCPUUsage if called from a commandlet.

  • Crash Fix: Fixed a crash that occurred after clicking launch if failed and message log was open to 'Packaging Results'.

  • Bug Fix: Fixed the Disaster Recovery to prevent prompting the user to recover a session only containing non-recoverable activities (Multi-User activities).

  • Bug Fix: Editor now logs an error if there is an issue importing a collision model.

  • Bug Fix: Fixed an issue occurring when a static mesh is re-imported with the "Combine Mesh" option off. If the FBX has many different static meshes, it can pick the wrong mesh when re-importing one of them.

  • Bug Fix: Fixed an issue with custom LOD workflow; the Insert LOD into the base mesh function was not updated to work with the latest skeletal mesh build refactor.

  • Bug Fix: Made FBX Import accessible using Blueprint and Python.

  • Bug Fix: Fixed some issues in the proxy merge tool. Static parameters of materials instances are now properly used. In some cases, the tool would only use the first section of a mesh when backing the texture of the merged mesh.

  • Bug Fix: Made sure post-build refactored skeletal mesh has its dependent LODs regenerated after importing the base mesh.

  • Bug Fix: When building a skeletal mesh, Editor now forces the Tangent and Normal options to True if the source data does not have the tangents or normals data.

  • Bug Fix: The mesh click tool now uses hit proxies to find initially clicked Actors.

  • Bug Fix: Fixed an issue in the Node Graph where a deferred Zoom to Fit would be lost due to deferred UI updates.

  • Bug Fix: Added opacity texture to FBX Material instance imports. When importing an FBX, you have the option to import Materials as instances of a base Material, as opposed to creating new Material Graphs for each FBX Material. This change adds the option to import anything connected to the TransparencyColor.

  • Bug Fix: Added support for content plugins in content-only projects. These were not being staged due to a unique target receipt for the project being generated.

  • Bug Fix: When importing animation from FBX files, Editor now only merges Anim layers as needed. Unreal Engine requires all animations be merged to a single layer, so you cannot skip the merge entirely. This change only performs the merge when necessary, keeping the curve fidelity as long as it is part of an AnimStack with a single member. FbxCurveAPI is now using the same code as the FBX animation curve importer. The curve import now supports "tangent break" and "User tangent". Removed bad unit conversion for curve tangent.

  • Bug Fix: Fixed an issue with HLOD Volumes and meshes' offset from origin.

  • Bug Fix: The paint tool and current/next texture is turned off if there are not any paintable textures on the mesh.

  • Bug Fix: Fixed skeletal mesh conversion so that it uses the LODMaterialMap when converting to a static mesh.

  • Bug Fix: Fixed the mesh painting tools to allow navigation if the user is not clicking or painting on a paintable component.

  • Bug Fix: Fixed an issue that prevents shadows from being rendered for dynamically-built static meshes. Added an option to build simple collisions when building static meshes.

  • Bug Fix: Fixed an issue with spline component visualizer regression, which was preventing interaction with spline points in certain circumstances.

  • Bug Fix: Fixed an issue where LoadLevelInstance location offset was not affecting the BSP geometry in a dynamically loaded level. Now a level's ModelComponents also have the same transform applied. This fixes their rendering, physics and static lighting.

  • Bug Fix: Fixed an issue with propagating vertex color to a custom LOD.

  • Bug Fix: Editor no longer tests against zero; instead it tests against nearly zero when computing the tangents for skeletal mesh.

  • Bug Fix: Added missing shutdown/tool ending code to Mesh Paint tools and Mesh Paint mode.

  • Bug Fix: Added a configurable threshold for Morph Target position delta. Also makes the other threshold available in the skeletal mesh build settings.

  • Bug Fix: Fixed the static mesh re-import override of complex collisions.

  • Bug Fix: The asset registry tags are now restored properly after a static mesh re-import.

  • Bug Fix: Moved RawSkeletalMeshData into a private uasset in order to reduce the skeletal mesh asset size when there are a lot of morph targets.

  • Bug Fix: Class View no longer loses selection when losing focus.

  • Bug Fix: Fixed a bug where combo boxes could affect the wrong field when choosing the type for map variables.

  • Bug Fix: Removed Editor Modes are also removed from the set of default modes for a mode manager. Speculative fix for an issue where Activate Mode was attempting to activate an invalid Editor Mode. When modes are destroyed, they may not be removed out of the default modes for the manager, which may cause an Activate after a deactivate to fail.

  • Bug Fix: Mesh Texture Painting no longer allows painting on source textures with more bytes per pixel than the created render target data.

  • Bug Fix: When using the "asset import tasks" in Python or in Blueprints, if you import multiple assets, the result can now return more than one asset per factory import.

  • Bug Fix: Fixed an issue with starting the editor with "-vulkan".

  • Bug Fix: Fixed verbosity of Multi-User/DisasterRecover endpoint discovery/timeout to prevent spamming the log.

  • Bug Fix: Fixed transaction buffer being cleared when hiding Levels.

  • Bug Fix: Updated the look and feel of the lock icons displayed on top of an Asset in the Content Browser when a user in a Multi-User session locked the asset.

  • Bug Fix: Fixed some sub-optimal UV layout packing on some geometries.

  • Bug Fix: Perforce Plugin: Use -P4Passwd cmd argument value when connecting to Perforce.

  • Bug Fix: HideCategories on components in an actor now correctly hides the categories when the actor is selected.

  • Bug Fix: Fixed dynamic tool menu entries appearing at the end of a section.

  • Bug Fix: The New Project dialog no longer shows a second redundant Open button.

  • Bug Fix: Updated session front end to properly hold on to log messages, even if they are currently filtered out.

  • Bug Fix: Fixed a bug with HighResScreenshot arguments being parsed incorrectly.

  • Bug Fix: Fixed validity checks not firing anymore and displaying an error when creating/removing project files on disk with the New Project dialog wizard open.

  • Bug Fix: Fixed an issue where Editor 'SessionSummary' analytic event was not being sent.

  • Bug Fix: The AttachToActor menu is no longer allowed to shrink.

  • Bug Fix: "Snap Pivot to Vertex" now works by holding Alt+V.

  • Bug Fix: Fixed a memory leak in SOutputLog.

  • Bug Fix: The AssetEditorSubsystem now handles windows again, fixing "Restore Open Assets Tabs on Restart".

  • Bug Fix: Fixed an ensure that was generating with the input binding editor panel.

  • Bug Fix: Added a message when there are no Recent Projects available, because it was unclear what was wrong when there were none showing.

  • Bug Fix: Fixed source control errors occurring during rename of file open for add.

  • Bug Fix: Fixed issues where a temporarily set realtime state is saved between editor sessions causing users to be unaware that their viewport is not realtime. Shutting down the editor during PIE or remote desktop were two such cases.

  • Bug Fix: The Component menu in the Actor Details view now filters out allowed classes based on UClassViewerSettings AllowedClasses.

  • Bug Fix: Fixed analytics to emit the Editor SessionSummary event using the correct AppId, AppVersion, SessionId and UserId when emitted from another instance or process.

  • Bug Fix: When you add an entry to an array in a component that is being edited in a locked Details view, it no longer generates asserts.

  • Bug Fix: Fixed an issue where disaster recovery remote endpoint was not re-registering with MessageBus UDP transport layer restarts or auto-repairs.

  • Bug Fix: Added tooltips to Save As error labels.

  • Bug Fix: Fixed VS accessor to make sure source files are placed in the precise module that was selected, and not just a module beginning with the same name.

  • Bug Fix: HideCategories on components in an actor now correctly hides the categories from the Details panel when the Actor is selected.

  • Bug Fix: Font editor monitor DPI scale fixes.

  • Bug Fix: Edit conditions no longer show themselves as duplicate inline toggles when shared between multiple properties.

  • Bug Fix: Fixed Disaster Recovery plugin to prevent reapplying changes that were discarded during the session.

  • Bug Fix: Disable "Hide Folders Containing Only Hidden Actors" for now.

  • Bug Fix: Unregister all delegates when shutting down FEditorSessionSummaryWriter. This is necessary because Shutdown() is called even when the app is not shutting down, but rather when we are only shutting down analytics such as when toggling the sending of analytics in the editor settings.

  • Bug Fix: Set texture render target 2d's default size to 1x1 so that reset to defaults tooltip will say 1 instead of 0.

  • Bug Fix: Changed utility widgets to rebuild on compile instead of on reinstance, because the BlueprintReinstanced delegate fires when unrelated blueprints are reinstanced as well.

  • Bug Fix: Empty implementations of IPropertyTypeCustomization::CustomizeHeader() will no longer break containers by hiding the header row of a customized struct when the struct is viewed in a container.

  • Bug Fix: Game default map is now correctly set to Minimal_Default when creating a project with Include Starter Content set.

  • Bug Fix: Typo fix: changed PersistenWorld to PersistentWorld.

  • Bug Fix: Fixed a bug where the 'Cancel' button sometimes couldn't be clicked on popup windows.

  • Bug Fix: Fixed issue where the color picker wouldn't update color properties on components after the mouse was released for the first time.

  • Bug Fix: Fixed an assertion occurring when clearing Disaster Recovery widget search field entry.

  • Bug Fix: Source Control: Unattended package save now handles adding new files to source control in more situations.

  • Bug Fix: We now use the display name for asset thumbnails.

  • Bug Fix: Fixed the Multi-User active session widget so that it displays the client location as "N/A (-game)" if the client is in -game, because clients in -game do not emit their presence/level.

  • Bug Fix: When you create a Blank project with starter content enabled, it now opens the Minimal_Default map.

  • Bug Fix: Memory stomp detection in FTickableEditorObject.

  • Bug Fix: Moving a folder with a numeric name (eg. "1", "1234") to another level in the hierarchy no longer causes an infinite loop.

  • Bug Fix: Duplicate names for preview assets should no longer appear on the "Close Asset Editors" dialog. # No longer add preview type "assets" which return false to IsAsset() call as opened assets.

  • Bug Fix: Fixed uncommon scenario which caused some assets to be duplicated when renaming.

  • Bug Fix: We now clamp the Niagara parameters menu to 700 to avoid a flickering bug.

  • Bug Fix: Trying to reload an in-memory-only no longer unmarks it as dirty.

  • Bug Fix: Fixed an issue where pasted arrays would not perform deep copies of instanced objects, because children properties were not being rebuilt.

  • Bug Fix: Combo boxes for enum bitflags will no longer display enum values that have been marked with UMETA(Hidden).

  • Bug Fix: The Class Viewer now scrolls to the selected item on refresh.

  • Bug Fix: When starter content is not available because the user's FeaturePacks folder is missing or empty, the option will not be selected by default in the New Project settings panel and then disappears when trying to reselect it.

  • Bug Fix: Fixed StaticMeshActor losing the root component scale when placed with Surface Snapping enabled in Editor Viewport. # The inverse of the entire matrix was being applied for surface rotation snapping. This caused the scale to be reduced when the value of the transform was used in PlaceActor to multiply with the default transform information.

  • Bug Fix: New Project wizard now correctly lists a Blank project when the Templates folder has not been synced.

  • Bug Fix: Fixed an issue where GUIDs wouldn't be generated properly when they belong to a component attached to a child BP class.

  • Bug Fix: Fixed an issue where the object selector UI was not working if the object was not loaded and had the same name as another object, such as 'Texture'.

  • Bug Fix: Updated package autosaver to suppress the restore dialog when running in unattended mode.

  • Bug Fix: - Added a small version of map check image brush so it shows up properly when using small icons.

  • Bug Fix: Selected text is discernible in the Output log with default settings. Reverted the default setting for the selected text background color to what it was before.

  • Bug Fix: Fixed the Disaster Recovery logs that could spam many 'lost server', 'discovered server' or 'timeout' logs.

  • Bug Fix: Eliminated the need to archive a Disaster Recovery session after a crash or normal exit to ensure the recovery system exit and release all resources in a timely manner, ensuring the crashed session is immediately available for restoration on Editor restart. Added routine to clean up temporary files left over by Disaster Recovery in the project intermediary folder after a crash.

  • Bug Fix: Fixed Multi-User/DisasterRecovery client not canceling in-flight connection task when Connect()/Disconnect() were called in a very short interval.

  • Bug Fix: Fixed the Disaster Recovery service using a dangling reference when unmounting a repository. Fixed the Disaster Recovery service to unregister all request handlers on shutdown. Fixed the Disaster Recovery service to report a repository as mounted if the requesting client already mounted it in a previous request. Fixed Disaster Recovery service to clean up its repository database when a repository doesn't exist anymore on disk.

  • Bug Fix: Fixed potential Disaster Recovery service name collision on the network that could happen if two Editor instances on two different machines get the same Editor process ID.

  • Bug Fix: PIE sessions which launch a new standalone window no longer double render debug safe zones and all PIE options are more consistent with handling r.DebugSafeZone.XXXX cvars.

  • Bug Fix: Reordered instanced components are no longer set to transient and disassociated from the current world.

  • Bug Fix: With SPropertyEditorNumeric, if the value has changed using a slider then set the value without flags to ensure that all the callbacks are called.

  • Bug Fix: Now the unique name is created from the same outer the object will be spawned into.

  • Bug Fix: Stylus input plugin usage of Windows Ink API has been changed, to prevent an occasional deadlock that occurred when moving a mouse or stylus between open windows in the editor.

  • Bug Fix: Fixed an issue where actor picker mode's tooltip was only present on first use.

  • Bug Fix: Fixed analytics to compute session duration and idle time consistently.

  • Bug Fix: Fixed an issue where Place Actor was not showing up in the Level Editor viewport context menu.

  • Bug Fix: Changed the delta on the Number of Players slider so it does not get stuck on the max value.

  • Bug Fix: Changed FAssetEditorToolkit to log invalid saved Assets instead of crashing, because individual Asset editors may not be checking for Asset validity.

  • Bug Fix: Now the mesh adapter is checked to make sure it is valid before using it for mesh paint.

  • Bug Fix: Fixed an issue where Lightmap UV channel was not set to correct index after import.

  • Bug Fix: Fixed an issue on Linux where the EditCondition on a UProperty would sometimes not evaluate properly.

  • Bug Fix: FSoftObjectProperty now correctly respects CanEditChange for properties when edited from the Details panel.

  • Bug Fix: Fixed an issue where Message Bus UDP Messaging static endpoints were not being properly sent when the unicast endpoint was forced to a specific interface. Modified the Multi-User Server launch to bind a different port on the unicast endpoint if the port of the editor is set when it transfers its settings to it. Also added a way to explicitly choose a Multi-User server port for its unicast endpoint when launching it from the editor.

  • Bug Fix: Fixed an issue that occurred during a FBX Skeletal Mesh import, where custom properties on imported skeletons would be applied on unrelated skeletal meshes.

  • Bug Fix: Fixed an issue where the FBX import option "Material Search Location" was sometimes being ignored.

  • Bug Fix: Fixed an invalid material baking result that occurred when "Reuse Mesh Lightmap UVs" is used with a mirrored (negative scale) mesh.

  • Bug Fix: Fixed a race condition in Editor analytic code. Fixed an issue with idle time returned by Editor analytic when Slate did not register any user interaction since the Editor started.

  • New: Added self-registering undo/redo client Reduces boilerplate for the common case where objects register on construction and unregister on destruction.

  • New: Message dialog text and results are now logged.

  • New: Added text verification to SEditableTextBox, similar to SInlineEditableTextBox.

  • New: Added system to whitelist commands.

  • New: FSlowTask improvements:

    • ShouldCancel now ticks the UI from time to time (only on the game thread, max 5 times per second) so that the Cancel button interaction can be checked without artificially calling EnterProgressFrame.

    • Added checks to make sure that EnterProgressFrame and ShouldCancel are only called from the game thread.

  • New: Perforce source control provider now detects login expiration and displays error status in level editor toolbar.

  • New: Niagara Override Parameters are now searchable in the Actor Details view.

  • New: Calls to OpenMsgDlgInt now use FMessageDialog::Open instead.

  • New: Fixed an issue where a long file system scan by DDC caused the system to hang when the Editor was shut down.

  • New: Added a virtual CreateTitleRightWidget() method to SGraphNode, to allow for adding widgets to the far right of the title in a graph node.

  • New: Updated the Tool menu to use a generic blacklist filter.

  • New: Plugins can now disable tabs in the tab manager.

  • New: Added support for command line files to be found inside project, and project plugins' directories.

  • New: Added option to constrain tool menu height.

  • New: When using UI scaling on a high DPI monitor, lines to pins on nodes outside the current viewport now draw correctly.

  • New: Improved the performance of proxy mesh creation.

  • New: When the engine detects that an abnormal shutdown has occurred, we now spoof a crash report and send it from the CrashReportClientApp. "Abnormal shutdown" defined as: the shutdown did not appear to use a known exit path.

  • New: TransactionSystem: Exposed SnapshotTransactionBuffer to Blueprint as SnapshotObject.

  • New: Multi-User: Display which packages are the culprit when failing to join a Multi-User session due to in-memory changes (dirty packages).

  • New: Improved disaster recovery widget:

    • Added 'Show Unrecoverable Activities', 'Show Package Activities' and 'Show Transaction Activities' to the View options.

    • Prevented the 'Recover Through' button from being overlayed on top of 'unrecoverable' activities.

    • Improved the tooltips for 'Recover All' and 'Recover Through' button to make it clear what is recovered and what is not.

  • New: Improved material baking performance.

  • New: Added support for "view modifiers" for editor viewports. These are delegates that allow plugins and other 3rd party code to affect the transform of the viewport. Removed the call to UpdateViewForLockedActor in CalcSceneView because that violated the expectation that this method was only computing some view information based on the current transform/FOV/so on.

  • New: Multi-User: adjusted base transaction transient property filters path in config files.

  • New: Improved the performance of convex hull computation.

  • New: EditCondition now supports bitflags that use enums. Example: MyIntProperty & MyEnum::Flag (and negation by tacking on == false).

  • New: Modified AsyncTaskNotification to add a prompt state, along with a hyperlink for slate-based notification. Added a function to pulse basic notification with a specified glow color while they are pending.

  • New: Multi-User: Added a setting for a different connection validation mode, allowing for a prompt on connection instead of hard failure. Source Control validation now checks if checked out files are actually modified, instead of just being checked out; if validation mode is soft, Multi-User connections are allowed to proceed. There is now hot reload for dirty packages on connection.

  • New: Multi-User: Exposed Multi-User Default Connect to Blueprint along with a mean to query connection errors.

  • New: Added a parameter to thumbnail renderers' Draw function, so that we can instruct them whether to clear the render target or not. This is for fixing thumbnails that render multiple sub-thumbnails to the same render target.

  • New: Added a sine wave deformer to the DisplaceMeshTool.

  • New: Added Perlin noise option to the DisplaceMeshTool.

  • New: CoreDelegates::FCrashOverrideParameters now includes values for SendUsageData and SendUnattendedBugReports. These values are set when the values change in UAnalyticsPrivacySettings and UCrashReportsPrivacySettings respectively.

  • New: Improved the performance of shader compilation when using Incredibuild.

  • New: Added handling of UObject pointers to edit conditions to enable equality, inequality and nullptr checks of UObject pointers in the form of: MyProperty != nullptr, or MyProperty == OtherProperty.

  • New: Added an option to set a custom StarterContent feature pack in a template. This is to allow different sets of starter content to be specified for different project types. The New Project wizard will always create an empty Content directory.

  • New: Optimized AssetView filtering for DataTables.

  • New: Updated actor selection blueprint nodes to call modify on the selection state, allowing them to be picked up by active transactions.

  • New: Updated "Prompt When Adding To Level Before Checkout" to use cached source control state, instead of running a fresh query each time an actor is added.

  • New: Hidden settings in the new project wizard will now write no values to the config file. This puts more burden on the template writer, but should not cause any template settings to be overwritten by hidden settings.

  • New: EditorViewportClient now supports temporarily overriding the current EngineShowFlags, to temporarily disable rendering features like TAA, Motion Blur, and so on within a specific EdMode.

  • New: Play-In-Editor failures due to invalid credential indexes now give better error logging, instead of a generic "Login Failed" which was easily confused with username/password issues.

  • New: Raised the minimum slot height of the Actor Details panel from 20 to 80 to reduce overlap.

  • New: Multiple improvements to the "View Mode" menu of the Viewport, including a feature request from JIRA UE-81469. Most of these improvements are related to the submenu of "View Mode" called "Buffer Visualization":

    • Issue 1/6 (the JIRA itself): The "View Mode" UI displays as its title the name on the selected category or subcategory chosen by the user (or otherwise the default one). However, this behavior was not consistent across different categories. For the "Buffer Visualization" category, if any of its subcategories were chosen, "View Mode" was only displaying "Buffer Visualization" as title, rather than the particular subcategory chosen. This was not the case for the other 2 categories ("Level of Detail" and "Optimization Viewmode"). Solution 1: The displayed name of "View Mode" is now forced to be the exact chosen (sub)category, regardless of the category ("Buffer Visualization", "Level of Detail", or "Optimization Viewmode").

    • Issue 2/6: The name displayed as the selected "View Mode" was being assigned in parallel with the displayed name of the buttons representing each (sub)category. This resulted in some categories and subcategories having different names in the buttons than in the "View Mode" label itself. The behavior was also not consistent across the different menus inside "View Mode". Solution 2: The displayed name of the chosen label is forced to match the displayed name of the button itself.

    • Issue 3/6: "Optimization Viewmodes" was the only category without an icon. Solution 3: Icon assigned to one of the icons of its subcategories. In particular, the one from "Quad Overdraw".

    • Issue 4/6: "Buffer visualization" was the only category without a proper tooltip, it was displaying a FName, rather than a more human-readable FText. Solution 4: Assigned its tooltip to the FText field of DisplayedName.

    • Issue 5/6: When the subcategory "Overview" (of "Buffer Visualization") was chosen, the displayed name on each individual subwindow that are generated corresponded with limited FNames (rather than a more human-readable text). Solution 5: Assigned their value to the FTexts corresponding to their DisplayedName value.

    • Issue 6/6: Inside the possible Buffer Visualization Materials, LightingModel and ShadingModel are being used interchangeably all over the code, leading to mismatches and confusion for the user. For example, UMaterialInterface and UMaterial use LightingModel, while FBufferVisualizationData (thus FBufferVisualizationMenuCommands and FEditorViewportClient) use ShadingModel.

  • New: Disaster Recovery now has improved scalability, memory footprint and performance.

  • New: Changed the default behavior of the Interactive Tools Framework to auto-accept instead of auto-cancel when the user is swapping away from tools.

  • New: The mesh paint brushes now adapt to the size of the selected mesh.

  • New: Added a warning that displays when passing the wrong type of option class during FBX automated import, instead of silently ignoring the given options.

  • New: When reimporting a FBX file and a material conflict occurs, the user has the option to "Reset to FBX" to resolve the conflict. The conflict resolution was UI not available during automated reimport, so we added a new option called "bResetToFbxOnMaterialConflict" to the automated import. When enabled, any material conflict that may occur during an automated reimport will apply the "Reset To FBX" behaviour automatically.

  • New: We have fixed a number of issues with mouse high-precision mode behavior over Remote Desktop.

  • New: Added the "Res=1280x720wf" format command line argument to set window resolution in a compact way.

  • New: Volumetrics: Updated SubUVMaker by adding the ability to export EXR textures to disk. Made the Blueprint capable of being edited during simulation, which will trigger a recapture using the new settings automatically.

  • New: Volumetrics: Updated SubUV Maker tool to support Motion Vectors, Baked Lighting, Temperature, Normals. Flipbook_MotionVectors Function.

  • New: Volumetrics: Voxelization BP now supports any Actor type as long as it has a MeshComponent. Included examples for using meshes with WPO as forces.

  • New: Added OnEnginePreExit() delegate to core delegates. This delegate is fired off before closing out the AssetTools, WorldBrowser and AssetRegistry modules, for handling shutdown tasks that would require these.

  • New: You can now add metadata to FString and FName UPROPERTYs; this metadata specifies a dynamically called function to get the options that are available to the user in a Details panel.

    meta=(GetOptions="FuncName"), UFUNCTION() TArray<FString> FuncName() const;
  • New: The Disaster Recovery Hub UI is now accessible from the Editor menu by selecting Window > Developer Tools > Recovery Hub where you can explore, import and inspect recovery sessions. Added a Disaster Recovery user setting to configure the root session repository folder (folder containing the recovery sessions). Added a Disaster Recovery user settings to configure how many 'recent' and 'imported' sessions should be kept in the history.

Content Browser

  • Bug Fix: Fixed ensure that occurred while scrolling in the Content Browser.

  • Bug Fix: Columns in the Content Browser's column view can no longer be resized until they are uneditable.

  • Bug Fix: Relaxed project name assumptions when estimating the cook length for an asset.

  • Bug Fix: Fixed an issue where thumbnail editing mode was not responding to mouse drags.

  • Bug Fix: Fixed IsValidFolderPathForCreate so it uses the path on disk for maximum length check.

  • Bug Fix: We now hide dynamic collections from the reference viewer list, as they require frontend filters.

  • Bug Fix: Updated "Submit to Source Control" to include plugin content.

  • Bug Fix: Pressing the delete key now deletes a folder when the folder sources view is focused, even if assets are also selected in asset view.

  • Bug Fix: Text properties now write as basic strings when exporting a Data Table to CSV for diffing.

  • Bug Fix: Fixed an isee where Show Engine Content was a disabled option in debug builds.

  • New: Added "Remove All But This" context menu option to the content browser filters list.

  • New: Fixed a delete pop-up that pointed to the last selected folder after the folder was deleted in the content browser.

  • New: Split asset path validation into two separate checks, to provide clearer messaging to users on length rules.

  • New: Added a "docked" mode for the collections view.

Foliage

  • Bug Fix: Fixed cook non-determinism in UFoliageTypes.

  • Bug Fix: Fixed foliage non-deterministic cooking by removing unused UProceduralFoliageSpawner::bNeedsSimulation that can change depending on the cooking order.

  • New: Fixed HISM Cluster Tree display not taking into account actor's transform (reported in a UDN).

Landscape

  • Bug Fix: Fixed a crash that occurred after moving a Landscape Actor to another Level.

  • Bug Fix: Fixed a bug that occurred for NaN in Landscape when zero scale is set. Also clamped bounds to avoid hitting a check.

  • Bug Fix: Landscape now obeys the Render in Main Pass setting correctly.

  • Bug Fix: Previously, there was a problem with bad index buffer generation on mobile landscape. Vertex Key generation was not unique for a 255*255 grid. Removed this, and replaced it with a simpler array lookup. Also removed its use as a TMap key.

  • Bug Fix: There was a copy-paste typo that broke landscape tessellation in 4.24. This is now fixed.

  • Bug Fix: Fixed a crash occurring when using RVT and tessellation together in a landscape material.

  • Bug Fix: Fixed an issue with FTriangleRasterizer DrawTriangle division by zero case.

  • Bug Fix: Fixed a SimpleCollision null DominantLayer crash.

  • Bug Fix: Reimport Tiled Landscape Layer Weightmaps now has the same behavior as Import (no more forcing a normalization of layer weightmaps).

  • Bug Fix: Fixed an issue with landscape simple collision returning incorrect physical material.

  • Bug Fix: Fixed a crash that occurred when entering Landscape Mode with Mirror Tool enabled and mirror point set to 0,0 but without any landscape.

  • Bug Fix: Fixed lost landscape data when opening/making visible a level with non-edit layers data only while the main landscape level has been converted to edit layers : moved copy from old data to layers in PostRegisterAllComponents, which is executed upon making the level visible. Also fixed the logic for detecting data conversion is needed and fixed a crash when cleaning up weightmap layer allocations.

  • Bug Fix: Fixed a crash that occurred when creating a landscape from scratch with edit layers enabled.

  • Bug Fix: Fixed some places in landscape code where the editor LOD override is not respected.

  • Bug Fix: Fixed a crash that occurred when creating a layer info on a list of layers with none assigned yet.

  • Bug Fix: Fixed an issue with ALandscape::PostEditChangeProperty not properly handling transform changes. Fixed an issue where ALandscapeProxy::PostEditChangeProperty was not properly handling Z-scale changes.

  • Bug Fix: Fixed an issue with the update of Physical Material not being propagated properly.

  • Bug Fix: Fixed bad index buffer generation on mobile landscape with subsection vertex count of 256x256.

  • Bug Fix: Fixed an issue with flickering landscape when using edit layers in D3D12.

  • Bug Fix: Landscape Visibility Painting: Fixed the tool so Visibility can be painted even if some Landscape actors do not have a Hole Material set (check per component).

  • Bug Fix: Fixed a crash occurring with landscape grass mesh when there are more mips than the landscape currently has.

  • Bug Fix: Fixed Add Ramp landscape tool debug display when landscape is rotated.

  • Bug Fix: Fixed a crash occurring when unloading a level with a landscape actor being displayed in the details view and both the details and level tools on-screen.

  • Bug Fix: We now support use of grayscale textures for landscape image brushes.

  • Bug Fix: Fixed an infinite loop that occurred when undoing a landscape change.

  • Bug Fix: Fixed a crash that occurred when importing Landscape layers in the New Landscape Tool.

  • Bug Fix: Fixed an issue with landscape component ForcedLOD option.

  • New: Changed display name of Landscape spline control point's "Width" parameter to "Half-Width" so that it reflects what it really controls.

  • New: Removed loose global parameters from landscape vertex factory.

  • New: Landscape Layers: UI Reverse order of Layers.

  • New: Grass map rendering now uses the fixed grid vertex factory. This keeps it independent of view LOD.

  • New: Modify default for Landscape VirtualTextureNumLods from 0 to 6 This new value reduces vertex interpolation artifacts when writing to a virtual texture at the cost of increased vertex count in the runtime virtual texture page render pass.

  • New: Landscape Layers: Collapse Feature.

  • New: Reimport weightmap paths are now stored per tile when importing a tiled landscape.

  • New: Runtime virtual texture world height packing now depends on the volume extents to give optimum precision for each volume.

Material Editor

  • Bug Fix: Added additional validity checks before pinning a weak pointer.

  • Bug Fix: Fixed back facing plane in default camera view in Material Editor.

  • Bug Fix: The Defer Compression default arrow is hidden after compressing a texture.

  • Bug Fix: Fixed an issue where pin names on SetMaterialAttributes node would not match Material input names.

  • Bug Fix: Added a null check when copy/pasting Material nodes. This prevents a rare crash, but it could cause nodes to be pasted improperly when the same crash conditions are met.

  • Bug Fix: Removed MaterialFunction expressions from the list of types that allow parameter conversion.

  • Bug Fix: Fixed an issue where grid lines appeared not to draw in the Material Editor on initial launch.

  • Bug Fix: Updated material editor to save and restore metadata when updating materials.

  • Bug Fix: Fixed the Material Instance Editor to properly respect Undo.

  • Bug Fix: When deciding what to recompile after changing an MF, look at all Material Instances instead of stopping after the first match.

  • Bug Fix: Fixed an issue with layer parameters being inherited from one MIC to another MIC.

  • Bug Fix: Set the stats message log to use a fixed size font, and removed tooltip text that was duplicated.

  • Bug Fix: Channel names for the channel mask parameter are no longer allowed.

  • Bug Fix: The Material layer Parameter Preview panel will no longer crash in the Material Editor.

  • Bug Fix: Added more validity checks to LinkMaterialExpressionsFromGraph.

  • Bug Fix: The visibility of the Material layer parameter is now correctly impacted by static switches.

  • New: Added a GetNumberMaterials function to UEditorStaticMeshLibrary for getting the count of material slots on a static mesh.

  • New: Now Material Editor propagates changes made to layers in the base material to derived Material Instances.

  • New: Removed an unneeded Realtime checkbox on the UI for material viewport.

  • New: Added Physical Material Masks to Materials, which are used to associate multiple physical Materials with a single Material based on a mask. This is only supported when Chaos physics is enabled. In the Material, set the Physical Material Mask to a mask and Physical Material Map to an array of physical materials. In the Static Mesh properties, Support Physical Material Masks must be enabled and additional data will be stored at runtime.

Media Framework

  • Bug Fix: Added code to WmfMediaPlayer to avoid a deadlock during shutdown between a tickable thread asking for player time and the player actually shutting down.

  • New: Introduced a tighter active period for FMediaTicker thread and a new optional feature that destroys players after closing. To use this feature, players must implement GetPlayerFeatureFlag and have the function return True when AllowShutdownOnClose is passed in.

Static Mesh Editor

  • Bug Fix: Fixed the Reset Camera toolbar button in the Static Mesh Editor.

  • Bug Fix: In the Static Mesh Editor, fixed a bug causing the lightmap coordinate index to be stuck at 0 when there were generated LODs in the Static Mesh.

  • Bug Fix: Fixed a bug that could sometimes crash the Editor when trying to visualize convex collision in the Static Mesh Editor.

  • Bug Fix: In the Static Mesh Editor, the "Remove UV Channel" option now supports Undo/Redo.

  • Bug Fix: Fixed a bug that sometimes crashed the Editor when modifying values in the Static Mesh Editor.

  • Bug Fix: Fixed a crash that sometimes occurred when opening the Static Mesh Editor.

  • Bug Fix: Fixed a bug that could prevent the user from using the LOD picker after the number of LODs was changed in the Static Mesh Editor.

  • New: Static Mesh Editor no longer triggers a lighting rebuild while interactively changing the lightmap properties.

Scripting

  • Bug Fix: Ensured that start-up scripts run when using Python in commandlet mode.

  • Bug Fix: Ensured that Python-wrapped objects have a valid internal state before attempting to nativize them.

  • Bug Fix: PySlate now checks that Slate is available rather than crashing.

  • Bug Fix: Emit RuntimeError (rather than a generic Exception) in Python for Blueprint execution errors.

  • Bug Fix: The OnPythonInitialized notification is now deferred until after start-up scripts have run.

  • Bug Fix: Fixed const-ref parameters passed to Python overridden functions losing their value.

  • Bug Fix: The Alembic Importer now uses the import settings provided by the user script.

  • New: Added a way to force a change notify when using SetEditorProperty in Python or Editor Utilities, even if the value is unchanged:

    • This may be needed if you've edited data on an instance indirectly (eg, modifying an array reference on the object), and need to force a change notification to update some dependent data.

    • In Python, this can be done by passing unreal.PropertyAccessChangeNotifyMode.ALWAYS as the notify_mode argument to set_editor_property. In Editor Utilities, there is a new advanced pin available for setting the "Change Notify Mode".

    • In both cases the default method is to notify only when the value actually changes.

  • New: Exposed the Get/SetEditorProperty functions to Blueprints.

  • New: Exposed enum asset types to Python:

    • They must be accessed via unreal.get_blueprint_generated_types(...) as asset names are not guaranteed to be unique, so they're not added to the unreal module.

    • Once a type has been generated for Python, it will be updated if the underlying asset is changed. Should the asset be deleted then the Python type will be reset to clean state and become mostly unusable.

    • This change also ensures that the Unreal type pointers referenced by the Python are referenced for garbage collection correctly. This will cause a warning if you try and delete an asset with a type used by Python.

  • New: Added a Blueprint node for calling Python with arguments:

    • This allows people to create a Blueprint node that can define a blob of literal Python script, along with wildcard inputs and outputs to be used by the script itself.

    • The node takes care of marshalling data in and out of the Python script, and allows custom Python to be invoked from Blueprints.

  • New: Added set_editor_properties to let you set multiple properties but only emit a single pre/post change notification.

  • New: Marked LevelSequenceFactoryNew as BlueprintType, so Editor utility blueprints/widgets can create Level Sequence Assets.

  • New: Added support to script re-imports of FBX animation sequences.

  • New: Added support to script re-imports of FBX animation sequences.

  • New: Added PropertyAccessUtil to contain the common logic of getting and setting properties in a way that emits change notifications. The existing Python code has been ported to use this, and this can also be used by Blueprints (or other C++ setting properties) to allow property changes that emit change notifications.

  • New: Improved the error message occurring when attempting to create a container property in Python that directly nests another container. This is not supported by the reflection system and is already disallowed, but the error message was confusing. It now gives an error message more like the Unreal Header Tool, and suggests using a struct as an alternative to direct nesting.

  • New: Improved the error message occurring when creating a Python property directly from a container type. It is a common mistake to omit the type or types for the container elements, so this case will now present an error stating the reason and the correct fix.

Sequencer

  • Crash Fix: Fixed a crash that occurred when displaying keys in the cinematic viewport with a large view range.

  • Crash Fix: Sequencer now closes if any of the sequences were reloaded/replaced. This fixes a crash that could occur if subsequences were reloaded while viewing the Master Sequence.

  • Crash Fix: Resolved a crash occurring when using "Store Curves" in Curve Editor.

  • Crash Fix: Creating an actor with a duplicate name no longer results in crashing Editor.

  • Crash Fix: Accessing a child folder after postloading a movie scene folders no longer crashes Editor.

  • Bug Fix: Fixed a Return Early event triggering incorrectly when and event is specified by an object binding, but there aren't any bound objects (ie. spawnable hasn't been spawned).

  • Bug Fix: You can now visit key areas from track, key area, and category nodes only. This prevents selecting keys when object binding nodes are collapsed.

  • Bug Fix: Fixed an issue with transform baking for rig rails. The current position on rail is updated per tick, so the actor needs to be ticked on each baked frame.

  • Bug Fix: Added protection against assigning a sequence that would produce circular dependencies. For example, if the current level sequence is named NewLevelSequence, this fix prevents the user from naming a subsection the same thing (NewLevelSequence, in this example).

  • Bug Fix: Autoscrub now only occurs if you are in a scrubbing state. This fixed double evaluations occurring when autoscroll is enabled during play.

  • Bug Fix: Setting the end range is now exclusive instead of open. This fixes an issue where if you tried to set the end range through the Properties menu, it would be inconsistent with dragging the end range.

  • Bug Fix: Added reentrant guards to prevent starting and stopping recordings while recording is in progress with Take Recorder.

  • Bug Fix: AddGivenTrack now allows for tracks with the same name, and the duplicate check is only done on copy/paste. This resolved an issue that occurred with a previous bug fix.

  • Bug Fix: Fixed an issue with adjusting the animation start time during resizing, and the start time is now clamped to the beginning of the clip.

  • Bug Fix: Viewports are now redrawn after restoring state on close(). This fixes a bug where if Realtime is not enabled in the viewport, closing Sequencer leaves objects drawn in a Sequencer animated state before the next redraw.

  • Bug Fix: A spawnable's object template is now copied so that it is not limited to the given transient outer. This fixes a bug where the DefaultSceneRoot for an empty actor would be lost on a copy/paste.

  • Bug Fix: Fixed the "Transform Selected Sections" tool so that now sections and their keys are transformed.

  • Bug Fix: Expanded the track node if row indices were changed. This fixes an issue where if a multi-row track is regenerated, it shows the multiple rows rather than displaying collapsed rows.

  • Bug Fix: Fixed upper playback range for subframes so that keys that lie beyond the integer frame are evaluated. For example, [400, 800.5] now returns an upper bound frame of 801 so that a key at 800 will be evaluated. This includes tests for frame number range.

  • Bug Fix: Fixed spawnable particles not firing by setting force particles as inactive on spawn by default, as opposed to "not autoactivate".

  • Bug Fix: Fixed subframe end playback range conditions so the playback range excludes flooring and tests the stop condition with GetLastValidTime() rather than with DurationFrames.

  • Bug Fix: Sequencer now only restores pre-animated states on actors that are being removed from the binding. Otherwise, all actors would be restored unnecessarily.

  • Bug Fix: Bake transform now refreshes the skeletal mesh the object might be attached to (just like export fbx performs updates).

  • Bug Fix: Added check for bound component when exporting 3D transform data to properly support applying rotations when exporting camera components in a Blueprint.

  • Bug Fix: Fixed an issue where the name check allowed more characters than the limit when renaming sequencer folders and object bindings.

  • Bug Fix: Return early in GoToEndAndStop now triggers correctly if the sequence player is already stopped and at the end of the sequence.

  • Bug Fix: Fixed an issue where changing levels with ClientTravel was breaking the ability to activate a sequence when using Play In Editor.

  • Bug Fix: Fixed Mute/Solo incorrectly applying to parent binding instead of selected track.

  • Bug Fix: Spawnable objects no longer fall in streamed levels during Play in Editor.

  • Bug Fix: Fixes several usability issues when dragging tracks or sections between rows.

  • Bug Fix: Fixed many special cases when using text search.

  • Bug Fix: ProRes/DNX now defers file creation until after the sequence updates. This allows file format tokens like {sequence} to be replaced with the name of the rendered sequence.

  • Bug Fix: Thumbnails no longer display over blending areas of the Camera Cut track.

  • Bug Fix: Camera bindings now correctly auto-create camera cuts.

  • Bug Fix: Fixed a zooming issue with mouse wheel in CurveEditor while panning with mouse dragging.

  • Bug Fix: Adding a key to a blueprint component now correctly uses the existing value of the component.

  • Bug Fix: The geometry cache now evaluates correctly from Sequencer when the cache is not visible.

  • Bug Fix: Fixed sections not being visible on some pinned tracks.

  • Bug Fix: Dropping assets onto an object binding now allows the drop to occur below so an asset can be moved to last in the tree.

  • Bug Fix: When building a menu in Sequencer, the common base class now correctly passes to the selected object bindings.

  • Bug Fix: Made several fixes to prevent reentrant play/evaluation during stop.

  • Bug Fix: Sequencer now forcibly ticks if the animation pose has already ticked this frame. This fixes first frame discrepancies if a sequence is played after actors have ticked on a particular frame.

  • Bug Fix: The active animation instance on a skeletal animation component now correctly clears when stopping a sequence. This results in the anim-notifies stopping as expected.

  • Bug Fix: Sequencer now only renders the waveform preview for assets that are currently visible on an audio track section.

  • Bug Fix: BeginSlipSection now calls correctly in Sequencer.

  • Bug Fix: GetUniqueName now returns correctly if the name is already unique.

  • Bug Fix: The Local Time is now set as Looped by default so the evaluation is Play To instead of Jump when autoscrolling.

  • Bug Fix: Fixed an issue where the sequence was not playing again if the world is unloaded and reloaded.

  • Bug Fix: Section easing now updates the section correctly when it is moved or resized through property editing.

  • Bug Fix: Loop markers in audio tracks now render correctly.

  • Bug Fix: The "Add a Camera" button now always displays on the transform track's object binding edit button. This fixes an issue where looking at the spawnable template isn't enough to determine whether a camera exists because the camera component might not exist at the time the button is created.

  • Bug Fix: Resolved an issue that allowed cyclic inclusions within template sequences.

  • Bug Fix: Replicated sequences now increase their sync threshold by client ping. You can verify hitch correction through the "Correcting de-synced play position for sequence..." message in the log. For more information more often, enable "log LogMovieSceneRepl VeryVerbose".

  • Bug Fix: Sequences not considering TimeScale or DemoPlayTimeDilation during playback now functions correctly.

  • Bug Fix: Implemented manual checks for broken tangents on FBX imports to avoid incorrectly passing broken tangents through the import.

  • Bug Fix: Track count display on sub-sequences now functions correctly.

  • Bug Fix: Copying and pasting tracks with multiple subtracks now functions correctly.

  • Bug Fix: Exporting a transform in FBX now correctly exports the combined, whole blended track, instead of just exporting the first section.

  • Bug Fix: Custom Cinematic Camera film back text now correctly receives values for focal length and aperture.

  • Bug Fix: The Director Blueprint is now renamed whenever a Level Sequence is renamed. This resolves an issue where Event Tracks stopped working when Level Sequences were renamed.

  • Bug Fix: Set curve attributes now operate on all curves, rather than just the selection in Curve Editor.

  • Bug Fix: transient flags on spawnable template components now clear correctly. This resolves a bug where components added to an empty actor were not saved.

  • Bug Fix: Prevented a crash that occurred when loading a sequence that has broken data.

  • Bug Fix: UnfocusedVolumeMultiplier should be fixed at 1.0f during movie rendering so that audio doesn't cut out during movie rendering.

  • Bug Fix: Curve Editor: Fixed an issue where the Filter window was not opening for standalone curves; this was caused because no tab manager was provided when creating the curve asset editor's SCurveEditorPanel in FCurveAssetEditor::SpawnTab_CurveAsset, which is needed to create the Filter Window.

  • Bug Fix: Sequencer: If you change a skeleton on a skeletal mesh while its sequence is playing, and then do a restore state the Editor could crash. This is because the Anim Instance is referencing an old skeleton which has a different number of bones. Now Sequencer uses InitalizeAnimScriptInstance so bones/morphs/curves get recalculated.

  • Bug Fix: Sequencer: Import onto objects with the focused template ID. This fixes an issue preventing importing onto an object in a subsequence.

  • Bug Fix: Timecode: Fix crash in details customization when data is empty.

  • New: Added "Time Warping" as a new form of time transformation when looping sequences. This enables you to transform time from a root sequence into a looping sequence and, assuming you know which loop number you are in, you can convert from a local/sub-sequence time back into a root time.

  • New: Sequencer and the sequence API compiler now deal with time transforms that might include looping. The API is mostly backwards compatible, except for inverting a time transform.

  • New: Exporting an FBX through Python now creates spawnables for scripted Sequences.

  • New: Added a PostProcessingMaterial command line argument to specify the post processing material to use for custom render passes in Movie Scene Capture.

  • New: Added a new API for customizing track in/out easing.

  • New: Updated the digits type interface for number padding (such as 02, 002) in Take Recorder.

  • New: The Sequencer clock now uses a global timecode based on the timecode provider, and is now called the Relative Timecode, instead of Timecode.

  • New: The Sub-Sequence and Cinematic Shot tracks now display looping indicators.

  • New: Added a module operator to frame times.

  • New: Added support to search channel and folder names, in addition to track names.

  • New: Keys and channels in Curve Editor can now be copy/pasted.

  • New: Updated Sequencer scripting options to include SetReadyOnly and IsReadOnly to the Level Sequence.

  • New: Updated Live Link log files to reflect updated fps options, with the default setting at 30 fps. You can find this information in the VeryVerbose log file.

  • New: Live Link recordings now discard samples if the sample is outside the start frame.

  • New: Updated Sequencer's scripting to create bindings in the root or local space.

  • New: When you duplicate a possessable object binding, it now duplicates the possessed objects into the current level and assigns them to the duplicated binding.

  • New: Sequences can now be run in Clean Playback Mode, which toggles the game view and hides the viewport UI when running a sequence in-game. Clean Playback Mode automatically defaults to On.

  • New: You can now designate the tooltip display to include the section title, and is useful for when the width of the section is smaller than the section title. This adds tooltips for sections like Shots, Animations, Camera Cuts, and so on.

  • New: Added {date} {month} {day} {year} {time} format strings for Movie Scene Capture.

  • New: Added GetBoundObjects(), which allows access to spawnables through Python scripting by evaluating a frame range.

  • New: Sequencer Audio templates now check for a 0.2s desync (cvar Sequencer.Audio.MaxDesyncTolerance) between expected audio time and actual audio time. This makes it easier to detect the audio play duration after starting Play, particularly when replaying, rewinding, and fastforwarding sequences.

  • New: The Take Number now defaults to 2 digits for better readability. Take Recorder also uses this Sequencer Project Setting when creating filenames and Take metadata.

  • New: In Curve Editor, you can now save loaded curves to the Level Sequence.

  • New: You can now specify an external clock source to interface with Sequencer. This is supported by a new media component that controls the media player and texture to support multiplayer PIE through real-time playback rather than offline, frame-accurate playback.

  • New: Added cvar for controlling net playback synchronization threshold. Sequencer.NetSyncThreshold defaults to 200ms and defines the point at which desync is deemed unacceptable and a force sync is required.

  • New: Take Recorder: Fixed an issue with recording spawned particle systems. Particle systems are spawned and attached to the World Settings Actor. These were not getting picked up when gathering newly created components, because they are scene components on the Actor and not the root component. Also, fixed an issue where the property map needs to be regenerated when adding the world settings actor as a new actor source during PreRecording.

  • New: Renamed Play Rate track to Time Dilation track.

  • New: For command line rendering, the CaptureGammut command line argument now parses names of enum entries as well as numbers.

  • Improvement: ImageWriteTask now uses a TUniqueFunction instead of TFunction to store PixelPreProcessors. This allows storing unique pointers in the PixelPreProcessor tasks.

  • Improvement: Changed the following Curve Editor hotkeys to remove conflicts with other shortcuts in Editor:

    • Transform: Ctrl-T

    • Retime: Ctrl-E

    • Multi: Ctrl-M

  • Improvement: Updated Sequencer to use other minor behaviors in Editor, such as drag/drop and layout/access of menus and toolbars.

  • Improvement: The TRange LexToString now uses "," to split the upper/lower bounds instead of "-" to avoid confusion with negative upper bound values.

  • Improvement: Updated the Cinematic Camera's ratios: Changed 16:9 Digital Film SensorWidth and SensorHeight to 23.76 x 13.365 to match Arri Alexa, and changed 16:9 Film SensorWidth and SensorHeight to 24.00 x 13.5.

  • Improvement: There are several updates to the Sequencer toolbar:

    • Added Save As to the Toolbar

    • Added an Actions menu for operations that manipulate data or selection;

    • Renamed General Options to View Options;

    • Moved Auto Scroll and Show Range Slider to View Options;

    • Removed Go to Time from the menu (it is already in the UI);

    • Removed Show in Content Browser from the menu (it is already in the top Toolbar).

  • Improvement: In Take Recorder, the Animation Asset Name in the Project Settings now defaults to {actor}{slate}{take}.

  • Improvement: Updated Take Recorder settings to the selected Actor is always listed first.

  • Improvement: The Sequence Level Actor now supports RewindForReplay, which stops a sequence when seeking starts in a replay.

  • Improvement: Modified Sequencer network playback so it takes the ping of a player into account when jumping forward in time. This prevents players' systems from constantly needing to resynchronize with the server when playing under high latency situations (resynchronizing with the server causes audio and visual hitches).

  • Improvement: Locked sequences now display a visual indicator with a red border and dims display node text.

  • Improvement: Added tick marks in the audio track display to show audio loop points.

  • Improvement: Improved processing frame rate when outputting video frames as PNG.

  • Improvement: Added keys to the snap field when the user is resizing sections so that resizing sections can snap to keys.

  • Improvement: Added channel extensions for MovieSceneObjectPath.

  • Improvement: Updated marked frames so they are based on the hit index, rather than finding it by the FFrameNumber. Renamed "Clear Marked Frame" to "Delete Marked Frame".

  • Improvement: Dragging and dropping sequences into the tree view now moves items to the root.

  • Improvement: You can now save animations in a Skeletal Mesh track as an AnimSequence. This is also supported by Python.

  • Improvement: You can now change the min/max playback, view, and working values outside of the current range.

  • Improvement: Updated the Cinematic Camera so the Depth of Field method is now Do Not Override to more accurately describe the functionality, as opposed to None. You can also Disable the depth of field completely by overriding the post process settings.

  • Improvement: Sequencer now saves times with FMovieSceneFloatChannel through a serialized buffer, which will significantly speed up Live Link data orders.

  • Deprecated: NewTake in Take Recorder is now deprecated in favor of ClearPendingTake. This lets users simply clear the pending level sequence rather than also clearing out the sources.

  • Removed: Removed the Label Browser option because it was not used.

VR-Editor

  • Bug Fix: Fix for crash on exiting VR mode from the taskbar.

  • Bug Fix: Adding a check that we are using the default interactors before warning about legacy UI. This prevents unneeded warnings for Virtual Production.

  • Bug Fix: Fixed a bug causing smooth scrolling with the HTC Vive touch pad in the Unreal Editor VR Mode to be less than smooth, and somewhat erratic.

  • Bug Fix: Fix out-of-date view uniform buffer for selection rendering post-process (broken selection highlights in VRMode).

  • Bug Fix: Changed "Toggle VR" hotkey to add 'Shift' modifier (now Shift+V).

  • Bug Fix: Removed direct null of slate widgets on the VR Editor floating UI because the UI is in the middle of shutting down.

  • New: VR Editor no longer allows transitioning to Play in Editor from Simulate in VR mode.

  • New: Prevent force deleting assets in the Content Browser if VR mode is active. Force deleting is an intensive task that would negatively impact the user experience in VR.

World Browser

  • Bug Fix:** Move WorldTileInfo from old to new package when renaming in the editor: this makes sure to propagate WorldComposition settings for this level.

  • Bug Fix:** Prevent double selection notifications when selecting via the Scene Outliner.

Gameplay Framework

  • Crash Fix: Fixed a crash in FStreamableManager::OnPreGarbageCollect that happened when deletion of one FStreamable caused other FStreamables to be removed from the manager.

  • Crash Fix: Fixed a crash that happened when passing null to SaveGameToMemory. AsyncSaveGameToSlot now properly handles SaveGameToMemory returning false.

  • Crash Fix: Fixed a crash when adding a gameplay tag without a valid tag source selection.

  • Crash Fix: Fixed a crash related to party members not being local players.

  • Crash Fix: Fixed warning messages and a potential crash when adding a component to an instance in the world if the default mobility of the new component was incompatible with the component it would be attached to.

  • Crash Fix: Removed a few ways for attackers to crash a server through the ability system.

  • Crash Fix: We now make sure we have a GamplayEffect definition before checking tag requirements.

  • Bug Fix: UCameraComponent::OnRegister no longer creates editor-only components when running a commandlet.

  • Bug Fix: The Default Physics Volume is now marked as transient to avoid a failure in CheckForWorldGCLeaks. Because it is transient, it will not be saved or loaded.

  • Bug Fix: Actors that have pending latent actions will no longer be automatically destroyed if bAutoDestroyWhenFinished is true.

  • Bug Fix: Local variables in the user construction script now show up in the details panel.

  • Bug Fix: Fixed the oscillation blend out time for camera shakes. Previously, the blend out's OscillationDuration was not used in the calculation, which led to the camera shake ending earlier than it should have.

  • Bug Fix: Fixed an issue with gameplay tag categories not applying to function parameters in Blueprints if they were part of a function terminator node.

  • Bug Fix: TActorIterator and GetAllActorsOfClass will no longer return actors from a level that is in the process of being incrementally removed from world, unless you are in the RemoveFromWorld scope for that level.

  • Bug Fix: UWorld::Async* trace functions will now assert when run outside of the game thread, as this will result in memory corruption.

  • Bug Fix: Fixed incorrectly set social user on a party member when we have multiple local players.

  • Bug Fix: The InvertedAxis array in the input system no longer grows unbounded.

  • Bug Fix: Fixed an issue with gameplay effects' tags not being replicated with multiple viewports.

  • Bug Fix: Fixed an ensure that could occur when a streaming level was removed as a side-effect of updating the streaming state of another streaming level.

  • Bug Fix: Child actors spawned by child actor components now correctly update their positions when moving the component on a per-instance basis.

  • Bug Fix: The split screen game view port client now has higher precision float values when creating the split screen info in order to remove unwanted black bars at higher resolutions.

  • Bug Fix: "ke " console commands no longer attempt to execute commands on Archetype Objects which belong to CDOs. CDOs were already excluded from "ke " commands, but not default subobjects created by a CDO.

  • Bug Fix: The engine no longer attempts to get the NetMode on server worlds before the world is fully set up.

  • Bug Fix: Fixed cooking to remove non-determinism in FStaticMeshLODResources.

  • Bug Fix: Fixed a bug where a gameplay ability spec could be invalidated by the InternalTryActivateAbility function while looping through triggered abilities.

  • Bug Fix: Instance components are no longer lost after undoing an apply to Blueprint transaction.

  • Bug Fix: Children of added instanced components now appear in the details panel without requiring the user to deselect and reselect the actor.

  • Bug Fix: Child actors no longer lose properties set in the parent construction script when changing properties on the child actor component instance.

  • Bug Fix: Fixed crouching clients observed from a listen server popping up briefly before interpolation corrects the location down. Applied the same fix as for simulated proxies on the listen server.

  • Bug Fix: Added smoothing to replicated server world time delta This ensures that spikes in the perceived server world time caused by delayed replication updates are not directly and immediately reflected in the client calls to AGameStateBase::GetServerWorldTimeSeconds() which would be problematic for systems that want to work relative to server world time.

  • Bug Fix: Prevented NaNs (or excessively large input values causing later NaNs) from entering AController::SetControlLocation.

  • Bug Fix: Filled in ServerLastTransformUpdateTimeStamp for simulated proxies with the value of ReplicatedServerLastTransformUpdateTimeStamp, for code paths that may try to read that value instead. Added client and server timestamps to "p.NetVisualizeSimulatedCorrections" output.

  • Bug Fix: We now call UpdateCharacterStateBeforeMovement and UpdateCharacterStateAfterMovement for simulated proxies during simulation. However, the base implementations avoid the crouch state changes in those functions because those are replicated from the server. This is more for overrides to be able to run custom behavior to match the server simulation.

  • Bug Fix: Changed how we handle updating gameplay tags inside of tag count containers. When deferring the update of parent tags while removing gameplay tags, we will now call the change-related delegates after the parent tags have updated. This ensures that the tag table is in a consistent state when the delegates broadcast.

  • Bug Fix: Added location and current client base (if any) to logging in ClientAdjustPosition if the client does not resolve the movement base.

  • Bug Fix: Fixed cases where FMod and VectorMod would fail to return a result within the expected output range for very large input values. This could in turn result in NaN/Inf propagation if for example those values are used with SinCos during Rotator/Vector/Quat conversion. Added some additional ensures during development to catch similar overflow and uninitialized variable issues sooner.

  • Bug Fix: Fixed a bug that caused some per-class properties to read incorrect data in the editor.

  • Bug Fix: We now ensure that per-class properties, if they exist, will be available as Blueprint variable get nodes.

  • Bug Fix: Fixed actor names of user construction script child actors not reflecting the child actor class if the child actor class is changed on the add component node.

  • Bug Fix: Properties inside sparse class data now respect the AssetRegistrySearchable flag.

  • Bug Fix: Rotating movement component now works as expected in standalone.

  • Bug Fix: Modified SetBaseAttributeValueFromReplication to take the old value as an input parameter. Previously, it was reading the attribute value to try to get the old value. However, if called from a replication function, the old value had already been discarded before reaching SetBaseAttributeValueFromReplication so we'd get the new value instead.

  • Bug Fix: We now make a copy of the spawned target actor array before iterating over it inside when confirming targets because some callbacks may modify the array.

  • Bug Fix: Fixed a bug that was causing properties that were marked as asset registry searchable not to be included with asset data in the asset registry.

  • Bug Fix: Fixed a bug where stacking GamplayEffects that did not reset the duration on additional instances of the effect being applied and with set by caller durations would only have the duration correctly set for the first instance on the stack. All other GE specs in the stack would have a duration of 1 second. Added automation tests to detect this case.

  • Bug Fix: Fixed a regression causing actor overlaps to not properly trigger during initial level load even if bGenerateOverlapEventsDuringLevelStreaming was enabled. Fixed some incorrect related comments in the header.

  • Bug Fix: Fixed a bug that could occur if handling gameplay event delegates modified the list of gameplay event delegates.

  • Bug Fix: Fixed a bug causing GiveAbilityAndActivateOnce to behave inconsistently.

  • Bug Fix: Reordered some operations inside FGameplayEffectSpec::Initialize to deal with a potential ordering dependency.

  • New: SpawnActor can now accept a requested name in its SpawnActorParameters. If the name is unavailable, SpawnActor can return null, report an error, or generate a unique name that is available.

  • New: Added the option to include components from child actors when hiding/showing components in SceneCaptureComponent.

  • New: UChildActorComponent::SetChildClass can now specify the template to use instead of the default instance of the desired class. If used on an archetype, the stored template will be a copy of the supplied template. If used on an instance in the world, this will result in a one-time spawn of a child actor using that template, but if the child actor is destroyed and recreated, it will use the original template again.

  • New: Added a version of GetManagedObject to SignificanceManager that is const and accepts const parameters.

  • New: UGameplayAbility now has an OnRemoveAbility function. It follows the same pattern as OnGiveAbility and is only called on the primary instance of the ability or the class default object.

  • New: Camera shakes now have a new actor/component type which defines a "shake source", along with some attenuation settings. Some new Blueprint functions enable users to start camera shakes that are "anchored" to those sources, and whose shake intensities will change dynamically based on the current camera's distance to the respective sources.

  • New: Added the GetActiveCameraShakes function, which gets the list of currently playing camera shakes.

  • New: When displaying blocked ability tags, the debug text now includes the total number of blocked tags.

  • New: Added two broadcast delegates to GameViewportClient. These events listen for UGameViewportClient::InputKey and UGameViewportClient::InputAxis events, respectively. You can access references to these with the OnInputKey and OnInputAxis functions.

  • New: Blueprint creation from the selected in a level is now presented through a modal dialog box that allows specification of the blueprint name, path, creation mode, and parent class. The available creation modes are via Harvesting Components (previously available from the Blueprints main tool bar dropdown), Subclassing (previously available from the details panel when a single Actor selected), and Child Actor (a new mode that creates an Actor blueprint with a child component for each selected Actor).

  • New: When harvesting components from multiple actors, the Actor name will now be included in the harvested component name.

  • New: Renamed UAbilitySystemComponent::InternalServerTryActiveAbility to UAbilitySystemComponent::InternalServerTryActivateAbility.Code that was calling InternalServerTryActiveAbility should now call InternalServerTryActivateAbility.

  • New: Improved data validation for sparse class data types. UHT now checks for the following:

    • Max of one sparse class data struct per class

    • Sparse class data struct must inherit from the parent class' sparse class data struct

    • All sparse properties must be BlueprintReadOnly and EditDefaultsOnly

    • Blueprint-assignable delegates cannot be sparse properties

  • New: Continue to use the filter text for displaying gameplay tags when a tag is added or deleted. The previous behaviour cleared the filter.

  • New: Don't reset the tag source when we add a new tag in the editor.

  • New: Added the ability to query an ability system component for all active gameplay effects that have a specified set of tags. The new function is called GetActiveEffectsWithAllTags and can be accessed through code or blueprints.

  • New: When root motion movement related ability tasks end they now return the movement component's movement mode to the movement mode it was in before the task started.

  • New: Made SpawnedAttributes transient so it won't save data that can become stale and incorrect. Added null checks to prevent any currently saved stale data from propagating. This prevents problems related to bad data getting stored in SpawnedAttributes.

  • API Change: AddDefaultSubobjectSet has been deprecated. AddAttributeSetSubobject should be used instead.

Localization

  • Bug Fix: String Table find/load is now deferred until the internationalization system is initialized.

  • Bug Fix: Correctly updated in-memory String Table asset references when a String Table asset is renamed.

  • Bug Fix: Translation Editor now shows stale translations as "Needs Review" rather than "Untranslated".

  • Bug Fix: Fixed an issue where Blueprint components instanced into a Level could lose their localization data.

  • New: Exposed "exclude classes" localization gather option to the Localization Dashboard.

  • New: Added support for splitting localization data into separate PAK chunks during cooking.

    • There is a new packaging setting, LocalizationTargetsToChunk, which lets you specify which of your localization targets should be chunked during cooking.

    • If enabled, any localization entries corresponding to assets will be split into a separate LocRes file for the chunk containing that asset, and will be removed from any chunks (including the primary chunk) that do not contain that asset. This is useful to restrict localized text to the chunk that contains the corresponding asset for the text, and allows localization data to be selectively encrypted based on the chunking rules.

    • At runtime this chunked data will be loaded into the text localization manager automatically when the chunk is loaded.

  • New: Added the ability to filter the metadata gathered by field and field owner types. This allows you to do things like "gather all properties belonging to actors", or "gather everything but functions".

Networking

  • Bug Fix: Added support for IsEncryptionEnabled for child connection objects.

  • Bug Fix: Modified the network driver's accumulated time to use double precision. This changes the format of the stateless connection handshake packet used to negotiate a client to server connection.

  • Bug Fix: Added support for non-default allocator in the TArray passed to SafeNetSerializeTArray utility functions. Incoming array size is clamped if it is too large. Issues with bOutSuccess and return values have been fixed.

  • Bug Fix: Fixed a potential underflow error in the AES packet handlers.

  • Bug Fix: Fixed infinite recursion in UIpConnection::HandleSocketSendResult when SocketSend failure occurs with a PendingNetGame.

  • Bug Fix: Only limit the net tick rate if it's lower than the engine tick rate.

  • Bug Fix: Changed UActorChannel::ProcessQueuedBunches to better respect timeslicing. This addresses issues with over-logging warnings regardless of whether or not the channel was simply ignored for processing.

  • Bug Fix: Fixed an edge case in PackageMapClient where the NetGuidCache could return a partially loaded Package.

  • Bug Fix: ServerFrameTime sends the current frame's time instead of the previous frame. PacketInfo payload for ServerFrameTime and Jitter will now only be sent on the first packet of the frame. This reduces overhead when sending large data chunks in a single frame.

  • New: Full address protocol resolution and round robin connection attempts are now made in the IpNetDriver/IpConnection classes automatically. This enables connecting over both IPv6 and IPv4 networks, and takes advantage of platforms that can use both in order to find the best method to connect to a server.

    • Platforms where this behavior is not desired must call DisableAddressResolution either in their connection class constructor or in InitLocalConnection and InitRemoteConnection before calling any base class functionality. This will make sure that resolution is properly disabled for inherited IpConnection classes.

    • For testing, users can take advantage of CVARs such as net.DebugAppendResolverAddress which will always add the value to any address resolution done and net.IpConnectionDisableResolution which will disable address resolution on any future connections made.

  • New: Modified actor tear off to notify all active network drivers when it occurs on the client or server.

  • New: Added the ability to swap local and remote roles when replicating actor properties in the network driver and replication graph.

  • New: Optimized handling of initially dormant actors to avoid adding them to the active network object list for a single frame, only to be immediately removed.

  • New: Added an export for FScopedActorRoleSwap for use by other modules.

  • New: NetConnection will now sample packet loss on every StatPeriod and store the current value along with a rolling average in the InPacketsLossPercentage and OutPacketsLossPercentage variables

  • New: IPv6 support is now included by default in all desktop platform builds, but is disabled. Setting the CVAR net.DisableIPv6 to 0 will enable IPv6, provided there is device OS level support.

    • Network addresses should be passed through a resolution method like GetAddressInfo in order to express the address in the best way possible.

    • SetIp and GetAddressFromString are still usable, but may require address translation in usages where connection protocols are not defined anywhere.

  • New: GetLocalBindAddresses can be used to get all the addresses a machine can use to bind a socket to instead of relying on the first result or just returning a blank address. This new function automatically checks for multihome requirements and uses them as appropriate.

  • New: There is a new implementation of GetLocalAdapterAddresses, allowing for all platforms to obtain all of the network addresses tied to the current machine.

  • New: Generate enums with RepIndex values for native Replicated Properties. These can be used with simple macro expansions to get Rep Indices for properties without actually looking up UProperty pointers.

  • New: Specifying -NetTrace=[VerbosityLevel] on the commandline now implicitly enables the Net TraceChannel.

  • New: Added Jitter calculation to NetConnection. Jitter is the difference in latency between every packet. The closer to 0 it is the more stable the latency is. To support this, packet headers now contain local clock data used to calculate jitter, and EEngineNetworkVersionHistory has been increased to account for new jitter clock time in packet headers.

    • This will cause connections to fail between pre/post engine builds.

  • Improvement: Added configurable IMessageBus and Debug Name to Messaging RPC to improve encapsulation.

  • Deprecated: The RemoteSaturation variable has now been deprecated, and the InBytesPerSecond value will no longer be sent in every packet header.

  • Deprecated: NetConnection's BestLag variable is now private since it is just a mirror of AvgLag.

  • Removed: Deleted IPv6 specific classes, as they've been deprecated for several engine versions.

Replays

  • Bug Fix: Fixed incorrect use of a non-squared value in AActor::GetReplayPriority.

  • Bug Fix: Fixed a crash while using Play In Editor replays related to replicated level script actors.

  • Bug Fix: Fixed a race condition where replay events that are added immediately after beginning recording would be immediately discarded.

  • Bug Fix: Fixed incorrect scale on replicated level actors after scrubbing a replay.

  • Bug Fix: Fixed several warnings related to level script actors of streaming levels in PIE replays.

  • Bug Fix: Custom Delta Tracking state will not be created when recording or playing back replays. )

  • New: Removed multiple deprecated replay streamer calls that took user strings.

  • New: Added the ability for games to record arbitrary per-frame data to replays and access this data during playback using FNetworkReplayDelegates::OnWriteGameSpecificFrameData and FNetworkReplayDelegates::OnProcessGameSpecificFrameData.

  • Deprecated: Deprecated UNetConnection's InternalAck flag to eventually make it private.

Replication Graph

  • Bug Fix: Fixed debug actor counting towards the bandwidth budget in the replication graph.

  • Bug Fix: Fix ReplicationGraph ignoring traffic for the saturation calculations when ActorDiscoveryMaxBitsPerFrame is set to 0. This caused the ReplicationGraph to send more data than was budgeted by the MaxInternetClientRate.

  • Bug Fix: Upgraded ReplicationPeriodFrame to uint16 to fix an overflow error when the NetUpdateFrequency is very low.

  • Bug Fix: Fixed a bug with implicit cast of ReplicationPeriodFrame from uint32 to uint8.

  • New: Added a flag to FActorDestructionInfo that ignores the distance culling test.

  • Improvement: DestructionInfo is now always sent to connections that are aware of AlwaysRelevant Actors.

  • Improvement: Optimized ReplicateDestructionInfo by not testing the destroyed actors list every frame. Instead, it will test if viewers are near destroyed objects only after they travel far enough from the previously tested location.

    • You can set Net.RepGraph.OutOfRangeDistanceCheckRatio to 0 to disable this optimization and test the destroyed Actor list every frame.

Socket Subsystem

  • New: Improving Windows GetLocalAdapterAddresses filtering such that only active, up network adapter addresses are returned.

  • New: Socket subsystem now supports creation of FInternetAddrs pre-set to a specific protocol at allocation. This allows for less ambiguity when obtaining/creating an any/broadcast/loopback address.

  • Bug Fix: Fixed MULTIHOME command line argument in SocketSubsystemUnix.

Online

  • Crash Fix: Fixed a crash if a log message is emitted during vivoxclientapi initialization.

  • Bug Fix: Fixed Steam OSS initializing a server when starting a client build. This is an outdated initialization flow that was never meant to be a feature and is no longer necessary to perform at startup. To restore this behavior, set OnlineSubsystemSteam.bInitServerOnClient to true in any Engine*.ini file.

  • Bug Fix: Fixed the error messages in various online latent Blueprint actions to mention the correct action.

  • Bug Fix: Fixed a buffer overrun in FVoiceEngineImpl::ReadLocalVoiceData

  • New: Implemented showing and sending friend messages on Steam. Additionally, implemented the store overlay and functionality for automatically adding a product to the user's cart. Also updated test cases to the existing external UI harness to support the new functionality.

  • New: Modified the approval flow when joining a party to support a group of players joining together.

  • New: In a Pixel Streaming setup, the Signalling Web Server will now attempt to connect to the Matchmaker server at an interval determined by the "matchmakerRetryInterval" setting (the default is five seconds) if the "UseMatchmaker" flag is set to true. This also means that the Signalling Web Server and Matchmaker Server can be started in any order.

  • New: Added the "LastOnline" field to OnlineUserPresence.

  • New: We now provide a copy of the Party Member Data to PostReplication in case validation checks desire to roll back to previous data values.

  • New: Moved NotifyPartyInitialized out of PARTY_SCOPE so game subclasses of SocialManager can override it.

  • New: Added OnlineTracing interface for capturing HTTP/WSS/XMPP traffic.

  • New: VivoxVoiceChat plugin - Exposed rtp timeout settings through RtpConnectTimeoutMs and RtpTimeoutMs in the [VoiceChat.Vivox] section of DefaultEngine.ini.

  • New: Added On(X)Complete stubs in the SocialToolkit and called them from within their respective Handle(X)Complete handlers. The game can now react to these notifications while preserving a robust API.

  • New: Added support for multiple local users to the VivoxVoiceChat Plugin.

  • New: Refactored Leaderboards Interface to admit additional parameters when querying leaderboards. The new possible syntax of the command is: \ ONLINE TEST LEADERBOARDS LeaderboardName SortedColumn NColumnName NColumnFormat ... UserId

  • Improvement: Updated the Online Subsystem to use SteamSDK 1.47.

  • Deprecated: Deprecated Steam voice packet classes. Steam no longer requires any platform-specific functionality as of UE 4.23.

BuildPatchServices

  • Bug Fix: BuildPatchServices will no longer call GLog->FlushThreadedLogs() when not on the main thread during directory chunking.

  • Bug Fix: Failing to load a file during chunking no longer causes an assert.

  • Bug Fix: Fixed an issue where a generated optimised delta between two binaries will break an installation if the destination binary is re-processed as different data, replacing the original manifest at the same version string.

  • Bug Fix: MergeManifests preserves the original, newly generated buildid rather than clobbering it with one of the input manifests.

  • Bug Fix: Extended the life of the IOptimisedDelta instances to match the FBuildPatchInstaller to avoid race conditions for destruction that occurred when finishing FBuildPatchInstaller::Initialize.

  • Bug Fix: Removed an unnecessary, explicit delete of resume data when completing an EInstallMode::StageFiles installer.

  • Bug Fix: Fixed a possible shutdown crash when packaging chunks. When processor classes complete quickly, the IBuildManifestSet instance will no longer be deallocated before other systems that are using it.

  • New: Added EFeatureLevel::UsesBuildTimeGeneratedBuildId for storing a build-time generated ID.

  • New: When saving a manifest of EFeatureLevel::UsesBuildTimeGeneratedBuildId or higher, a buildid field is serialised as part of the manifest meta data block. This field is generated as part of the FManifestMeta constructor, and thus uniquely saved upon creation of a new manifest object.

  • New: When loading a manifest object, the buildid will be serialised or runtime generated based on the manifest object version.

  • New: When downloading an optimised delta, we verify for agreeable SHA1 and file list, rejecting with error if a problem is detected.

  • New: BuildPatchTool's ChunkDeltaOptimise mode now chooses the appropriate output FeatureLevel for the patch data, based on the provided source and destination manifest files.

  • New: Exposed the file verification error counter from verify statistics.

  • New: Added the meta folder to staging so that the Install staging folder will only ever contain install files. Moved the $resumeData file to a new location if it is found in the legacy location.

  • New: Refactored FBuildPatchFileConstructor error handling to catch serialisation errors as soon as they occur.

  • API Change: Renamed EFeatureLevel::StoresUniqueBuildId to EFeatureLevel::UsesRuntimeGeneratedBuildId.

HTTP

  • Bug Fix: The hotfix manager now informs the HTTP module when any HTTP section is updated (for example, [HTTP.Curl]).

  • Bug Fix: [HttpServer] Request query parameters are now correctly parsed with the "&" delimiter.

  • New: Implemented the seek function in libcurl. Currently, this is only implemented for complete rewinds that happen when retrying connections.

Online Subsystem

  • Bug Fix: Fixed get user profile process returning failure on all paths. Fixed soting pointer to local user profile object leaving dangling pointers.

  • Bug Fix: Moved bShowBrowserPointer variable getter before ShowWebPageArg->SetPointerEnabled in order to set this using the boolean as expected.

  • Bug Fix: Fixed an inconsistency with the tests where we returned platform IDs instead of UE4 IDs, then passed them back in to the interface expecting UE4 IDs.

  • Bug Fix: Added propper state tracking for the Async task.

  • Bug Fix: Added error handling for individual achievement-setting tasks and fixed error reporting for batch achievement-writing tasks. Note that these tests are only valid for 2017/title-managed achievement format. 2013/event-based achievements will correctly fail the write tests. Read succeeds.

  • New: Modified the base voice engine implementation to store an instance name and not cache the online subsystem directly.

  • New: OnlineSubsystem's method GetFirstSignedInUser will now return the first fully logged in user it can find. Otherwise, it will fall back to its original behavior and return the first local user.

  • New: Added tests for Store and Purchase OSS interfaces usage: "online sub= test store " - eg. "online sub=live test store 9MWBK8Z14MXD" to get product details for ShooterGame store offer 9MWBK8Z14MXD "online sub= test purchase " - eg. "online sub=live test purchase UNUSED 9MWBK8Z14MXD" to initiate checkout for ShooterGame store offer 9MWBK8Z14MXD

  • New: First pass of changes relating to sessions. Users can host, search for, and then join sessions.

  • API Change: Updated FOnControllerPairingChanged (in OnlineIdentityInterface) to provide the number of controllers now assigned to the New and Previous user in the event. If New or Previous user is null, they will be considered to have 0 controllers. Updated the comment about LocalUserNum to be more clear that it describes a person, not a device. Anyone subscribing to FOnControllerPairingChanged will have to update the signature of their handler to take in the extra information.

WebSockets

  • New: Added OnWebSocket, created delegate. Added OnMessageSent delegate.

XMPP

  • Crash Fix: Fixed a crash in FStropheWebsocketConnection::OnRawMessage when dealing with multiple XMPP connections.

  • Bug Fix: We now properly clean up closed XMPP connections by calling ProcessPendingRemovals through a new Tick function in XmppModule.

  • New: Added IXmppStanza abstract interface to expose stanza data getters independent of implementation; FStropheStanza now inherits and overrides from it. Added OnXmppConnection created delegate. Added OnStanzaSent and OnStanzaReceived delegates, only implemented in Strophe.

Paper2D

  • Crash Fix: Updated Paper2DEditorModule to check the validity of GEditor before registering for OnAssetReimport. This prevents a crash when running a commandlet with IsEditor=false.

  • Bug Fix: The Sprite List window in the Sprite Editor now correctly shows all Sprites that come from the same texture as the one being edited.

  • New: Added support for registration of tutorial assets from plugins. Also moved Paper2D tutorial assets into the Paper2D plugin.

Physics

  • Crash Fix: Generating a levelset from an empty triangle mesh no longer crashes the editor.

  • Bug Fix: Resolved a cloth binding issue that occurred when applying a cloth that has been created with the Remove-from-Mesh box checked.

  • Bug Fix: Resolved a debug issue by splitting symbols from PhysX/APEX for Linux Add PhysX/APEX and running the symbols as a DebugNonUFS runtime file for dependencies.

  • Deprecated: The Get Default Simulation Factory Class in Clothing Simulation Factory Class Provider is now deprecated. This is replaced by the Get Simulation Factory Class.

Platforms

  • Bug Fix: - Fixed the platform extension config location checks in C# to match C++

  • Bug Fix: Platform - When calculating screen density, we no longer fallback to 0. We instead report unknown, but we use 96 dpi as our default when returning screen density if we don't know it. This is both the default Windows assumes, and what we use internally for fonts in Slate. This allows us to at least do something reasonable on platforms that can't know the physical size of their screen.

  • New: Add support for Apple Development and Apple Distribution certificates from Xcode 11.

  • New: Updated DDSPI with bSupportsGPUScene but also refactored the .inl platform ones to make it easier to add more settings

All Mobile

  • Bug Fix: Addressed a case in Mobile Patching Utilities where UMobilePendingContent object could be GCed while content download is in progress.

  • Bug Fix: Packaging will attempt to enforce the correct casing for project file paths to avoid problems when packaging/running builds from the editor to target platforms that are case sensitive (eg: Android & iOS).

  • New: Mobile device profiles have been overhauled. These will not work for all users but are much more appropriate for shipping high quality mobile games.

    • Removed device profiles for iOS and Android devices that are no longer supported.

    • Android devices from minimum spec (Adreno 4xx/Mali T6xx) and above are now mapped to to Android_Low, Android_Mid, Android_High and Scalablity Groups 0,1,2 respectively.

    • Vulkan now disabled by default, enabled only on Adreno 6xx Android 9+, Mali G72/G76/G77 and PowerVR 9xxx devices.

    • The range of iOS devices map their post process and shadow quality using scalability groups.

  • New: The safe zones specified in the PIE advanced options menu are now applied to mobile standalone PIE Mobile standalone PIE now defaults to the ES3_1 feature level.

Android

  • Crash Fix: Fixed a crash that can occur when audio manager properties are missing.

  • Bug Fix: IsAllowedRemoteNotifications will now return false if GCM or Firebase plugin is not included for Android.

  • Bug Fix: Added a missing extension to HLSLcc to enable GL_EXT_texture_buffer for atomic imagebuffer operation.

  • Bug Fix: Added an option to force use of legacy ld instead of lld.

  • Bug Fix: Launch notification events will now be verified before registering them.

  • Bug Fix: Added an extra condition to check for 64-bit ABI support.

  • Bug Fix: Provided NDK20 fallback tool paths for some architectures.

  • Bug Fix: Disabled ld.gold for ARM64.

  • Bug Fix: Fixed an issue with Stratus XL triggers not appropriately firing input events on Android.

  • Bug Fix: Fixed bindings for DualShock controllers on Android devices running version 10 or greater.

  • Bug Fix: Empty AAR directories on Android will now be ignored.

  • Bug Fix: Fixed an issue with attempting to acquire WRITE_EXTERNAL_STORAGE when we already have it granted on non-shipping builds.

  • Bug Fix: Fixed a potential error in detection of needed install batch files for Android.

  • Bug Fix: Threshold trigger button pressed events are now optional by device type on Android. Some controllers do not need this functionality and will send double input events.

  • Bug Fix: Fixed issue with PLATFORM_USED_NDK_VERSION_INTEGER. It will now show the proper NDK level used to compile.

  • Bug Fix: Added AndroidRelativeToAbsolutePath to AndroidPlatformFile.

  • Bug Fix: Fixed an input issue that can occur with floating keyboards on Android due to improper Y offsets.

  • Bug Fix: Fixed an issue with the Android virtual keyboard interacting incorrectly with emoji when using backspace.

  • Bug Fix: Fixed linker warnings with libvrapi.so.

  • Bug Fix: Added bDisableFunctionDataSectionsoption for Android. Add this to DefaultEngine.ini under AndroidRuntimeSettings if you see an issue with R_AARCH64_JUMP26 being out of range with the linker.

  • Bug Fix: Fixed a compile error with bUseNEONForArmV7=true for Android where vqtbx1q_u8 is an A64 instruction. Now has a fallback to use FPU version for VectorContainsNanOrInfinite.

  • Bug Fix: Fixing readonly check for PlatformFile.

  • Bug Fix: Now using libc++_shared STL on Lumin to match rebuilt Android libraries.

  • Bug Fix: Deleted problematic copy constructors on named pipe.

  • New: May now select path and filename overrides for OBBs from Java on startup.

  • New: Added Engine/Extras/Android scripts to install needed components and set up environment variables for Android with new NDK 21

  • New: Enabled WEBM for Android media player.

  • New: Added bDisableFunctionDataSectionsoption for Android. Add this to DefaultEngine.ini under AndroidRuntimeSettingsif you see an issue with R_AARCH64_JUMP26 out of range with the linker.

  • New: Eliminated recursive file system search for cursor assets on platforms that don't support them.

  • New: Changed FQueuedThread so that it doesn't wake up every 10ms while waiting for work. This wakeup is a waste of cpu time from having to context switch for no reason.

  • New: Added more control over Gradle project. The following are available in UPL:

    • — Sets ANDROID_TOOLS_BUILD_GRADLE_VERSION in gradle.properties

    • — Adds settings.gradle

  • Improvement: Updated small OBB limit to 1 Gb.

  • Improvement: Improved the Network Changed Manager's ability to detect offline networks that are incorrectly identified as having a connection by the Android system.

iOS

  • Bug Fix: The iOSReplayKit plugin's blueprint functions are now allowed to be used in the editor and on other platforms as stub functions.

  • Bug Fix: Prevents an error being displayed in the log before staging if the bundle is not already installed.

  • Bug Fix: GameCenter popup no longer appears on iOS even when GameCenter is deactivated.

  • Bug Fix: Fixed issue with iOS remote build ssh command failing for some Windows users.

  • Bug Fix: Made a change to prevent iOS provisioning parse failure when remote building on a Mac without internet access.

  • Bug Fix: Re-enabled iOS Metal GPUtime by removing any overlaps between commandlists, including overlaps across frames. GPUtime is counted as close to the expected end of pipe time as possible.

  • Bug Fix: Fixed FMetalShaderPipeline initresourcemask.

  • New: Added support for thumbstick buttons and special left on iOS.

  • New: Fixed an issue where packaging for tvOS would fail for Client targets.

  • New: Increased the number of Metal blend state bits in the PSO key from 5 to 7 because we now pre-initialize many more blend modes.

  • New: Added a project setting to allow files created by UE4 to appear in the iOS on-device Files app.

  • New: Removed manual command buffer internal resource tracking and debug group association.

    • All of the data this was tracking is available from the Xcode tools.

    • The manual resource tracking did not interoperate well with the Metal validation layer and could cause a crash on exit in development and/or debug configurations.

Linux

  • Bug Fix: Fixed issue that prevented editor windows from restoring when minimized.

  • Bug Fix: Added PLATFORM_LINUXAARCH64 to Platform.h

  • Bug Fix: Set UserTempDir for Linux to $TMPDIR or fallback to /var/tmp

  • Bug Fix: Added missing space to SanitizerInfo string.

  • Bug Fix: Implemented module path name for Unix to avoid hard coded default path.

  • Bug Fix: Disabled ispc for Linux AArch64 Currently using ispc v1.12 which has add "experimental AArch64" support.

  • Bug Fix: Addref Vulkan memory allocation so it's released when not used by framebuffer and surface FrameBuffer ctor was creating a view directly onto a texture surface, but was not holding the allocated memory. If the texture was freed before the framebuffer was destroyed, we could run into use after free type issues.

  • Bug Fix: Fixed Linux address sanitizer builds.

  • Bug Fix: Reduced NullRHI static buffer size by using dynamic buffer Reduces allocation size & fixes potential silent buffer overrun.

  • Bug Fix: Fixed issue with shell script not being able to handle quoted arguments.

  • Bug Fix: Default LinuxAArch64 platform in binary now builds to the same default as Linux platform.

  • Bug Fix: Don't add local launch device for Linux AArch64 platform Local device right now will never be an Arm64 device.

  • Bug Fix: Set PrecompileForTargets to None for AArch64 builds of SoundVisualizations and Kiss_FFT.

  • Bug Fix: Send 127.0.0.1 by default for Linux/Mac as well for UnrealInsights. Since there's no Event to close dont need to check for this.

  • Bug Fix: Added win64 platform check for VisualStudioDTE.

  • Bug fix: Fixed Linux build break with case sensitive headers.

  • Bug Fix: FixedLinux build break (SEnumComboBox.h -> SEnumCombobox.h)

  • Bug Fix: Fixed race when two threads are trying to create a folder on Linux.

  • Bug Fix: Fixed command quoting in Linux chmod command.

  • Bug Fix: Override GetPortableCallstack to avoid 1MB allocations in crash signal handler.

  • Bug Fix:: Removed VulkanLinuxPlatform RenderOffScreen logging.

  • Bug Fix: Fixed Linux build break (includes paths with backslashes)

  • Bug Fix: Fixed UnrealBuildTool unused variable warnings.

  • Bug Fix: Fix for ISPCTexComp dll not loading on projects on a different directory. Fixes this warning on UE4Editor startup: LogCore: Warning: dlopen failed: /epic/UE4.git/Engine/ThirdParty/IntelISPCTexComp/Linux64-Release/libispc_texcomp.so: cannot open shared object file: No such file or directory LogTextureFormatIntelISPCTexComp: Warning: Unable to load ../../../Engine/ThirdParty/IntelISPCTexComp/Linux64-Release/libispc_texcomp.so

  • Bug Fix: Ensures start time for events is now greater than last end time for all nodes.

  • Bug Fix: GpuProfilerEvent times now clamp to valid values, SanitizeEventTree was not clamping start times to be >= to previous root start times, so we were hitting asserts in TraverseEventTree() for: lastStartTime >= GpuProfilerEvents[Root].GetStartResultMicroseconds(). Also removed unused variables.

  • Bug Fix: Now using secure_getenv() instead of getenv().

  • New: Missing toolchain warning now only appears on Linux + Win64.

  • New: Added linux sanitizer information to build details if set.

  • New: Build nvTriStrip and ForsythTriOptimizer with UE clang toolchain (link with libstdc++) Removed stdc++ dependency for MeshBuilderCommon.

  • New: Added LinuxAArch64Server and LinuxAArch64Client build targets.

  • New: Added VULKAN_ENABLE_DUMP_LAYER to VulkanLinuxPlatform.h.

  • New: System compiler is no longer the default fall-back on Linux. We now only check for and use the system compiler if "-ForceUseSystemCompiler" command line is passed Also, no longer default to epic compiler if -ForceUseSystemCompiler is specified and the system compiler can't be found.

  • New: Moved Linux architectures to Linux package project submenu. Added a PlatformSubMenu ini entry to DataDrivenPlatformInfo sections, and coalesced these in FPackageProjectMenu::MakeMenu().

  • New: Added a more descriptive error messages for Linux SDK Toolchain Not Found for three cases:

    • .$ LINUX_MULTIARCH_ROOT=/tmp/foobar make BlankProgram bash "/epic/UE4-23.git/Engine/Build/BatchFiles/Linux/Build.sh" BlankProgram Linux Development Fixing inconsistent case in filenames. Setting up Mono Building BlankProgram... Unable to locate Linux SDK toolchain at /tmp/foobar/x86_64-unknown-linux-gnu. ERROR: GetBuildPlatform: No BuildPlatform found for Linux make: *** [Makefile:183: BlankProgram] Error 5

    • make BlankProgram ARGS="-forceusesystemcompiler" bash "/epic/UE4-23.git/Engine/Build/BatchFiles/Linux/Build.sh" BlankProgram Linux Development -forceusesystemcompiler Fixing inconsistent case in filenames. Setting up Mono Building BlankProgram... Unable to locate system compiler (-ForceUseSystemCompiler specified). ERROR GetBuildPlatform: No BuildPlatform found for Linux make: *** [Makefile:183: BlankProgram] Error 5

    • LINUX_MULTIARCH_ROOT= make BlankProgram bash "/epic/UE4-23.git/Engine/Build/BatchFiles/Linux/Build.sh" BlankProgram Linux Development Fixing inconsistent case in filenames. Setting up Mono Building BlankProgram... Unable to locate Linux SDK toolchain. Please run Setup.sh. ERROR GetBuildPlatform: No BuildPlatform found for Linux make: *** [Makefile:183: BlankProgram] Error 5

  • New: Added Linux AArch64 FreeType2 libraries.

  • New: Added support for Linux offscreen Vulkan rendering, which is enabled with -RenderOffScreen flag. This fixes several Slate issues when rendering offscreen.

  • New: Enabled Neon instrinsics for Linux AArch64.

  • New: Moved to new llvm clang 9.0.1 v16 toolchain.

  • New: Added bGdbIndexSection bool to LinuxToolChain.

  • New: Added Linux AArch64 libs for FreeType2 v2.10.0, ICU 64.1, and HarfBuzz 2.4.0 Includes BuildForLinuxAArch64.sh cross compilation scripts Adds LinuxAArch64 back to installed engine builds.

  • New: Linux now always uses lld linker with clang v9 and above.

  • New: Can now generate .debug_pubnames and .debug_pubtypes sections in a format suitable for conversion into a GDB index. This option is only useful with a linker that can produce GDB index version 7.

  • New: Added protected to bGdbIndexSection bool.

  • New: New build of python2.7 for Linux now supports zlib, bz2, and ssl.

  • New: Use msbuild in mono for Linux when using an installed copy and mono >= 5.0.

  • New: Batch writing of ini files is now possible.

Mac

  • Bug Fix: Move GetTickableObjects() and GetPendingTickableObjects() definitions to cpp to ensure there's only a single instantiation. This fixes editor objects not ticking and updating sometimes.

  • Bug Fix: Fixed a path encoding issue when drag-dropping files containing non-ASCII characters on macOS

  • Bug Fix: Re-enable FMacPlatformProcess::IsSandboxedApplication.

  • Bug Fix: Moved a couple of Cocoa calls that hide the window on Mac before it's destroyed to the main thread. This should solve a rare game hang at exit.

  • Bug Fix: Fixed crash at exit on shutting down the PSO cache

  • New: Enabled Metal RHI runtime virtual texture support.

  • New: Implemented FPlatformMisc::GetCPUBrand() for Mac, based on Linux implementation. Also, switched FMacPlatformMisc to use __cpuid intrinsic.

  • New: Enable Metal RHI runtime virtual texture support for macOS.

Windows

  • Bug Fix: Reset Windows key mappings when input language changes

  • New: Added raw input simulation over remote desktop on windows since remote desktop uses absolute mouse position in mouse move events. This prevents the cursor from getting stuck over RDP.

Rendering

  • Crash Fix: Wait for streaming Virtual Texture transcode to complete before deleting file handles. Fixes a rare race condition crash when destroying then recreating a streaming Virtual Texture.

  • Crash Fix: Fix import crash with low guide count for hair grooms.

  • Crash Fix: Disabled render to Virtual Texture on primitives with no Static Mesh, which fixes a crash when inadvertently adding a render to Virtual Texture on a scene primitive component that doesn't support it such as a Brush component.

  • Crash Fix: Fixed a crash due to giving a negative MipCount to "RHICalcTextureCubePlatformSize" from various engine Texture classes.

  • Crash Fix: Fixed a crash when trying to ray trace the sky light prior to generation of sky light importance sampling data.

  • Crash Fix: Fixed crash in Pixel Streaming Signaling Web Server when some users disconnected.

  • Crash Fix: Fixed Vulkan crash on shutdown in TEST/SHIPPING.

  • Crash Fix: Don't transition single mip individually. This is not needed, and also causes inconsistent layouts across the different mips, which fixes a crash when enabling edit layers on landscape.

  • Crash Fix: Fixed crashing that could occur in Vulkan on exit in certain circumstances.

  • Crash Fix: Fixed the handling of "FRHITextureReference" in Vulkan that could cause a crash when importing UDIM textures.

  • Crash Fix: Fixed crashes that could happen in D3D12 when indirect argos buffer can be a previously pending UAV, which becomes a PS\Non-PS read. ApplyState will flush pending transitions, so enqueue the indirect arg transition and flush afterwards.

  • Crash Fix: Fixed a crash that could happen when "OnWorldCleanup" is called with "NewWorld == this". This happens when loading levels through the Content Browser and modifying the "Levels". In this case, do not clean up the persistent uniformbuffers of the FScene, as it will not be deleted

  • Crash Fix: Applied a fix for editor crashes when pressing Build.

  • Crash Fix: Fixed a D3D12 crash where it initialized over garbage data in the StreamOut section of D3D12_GRAPHICS_PIPELINE_STATE_DESC. This also initialized D3D12_COMPUTE_PIPELINE_STATE_DESC and added missing validation code to PSO creation.

  • Bug Fix: Added fix for incorrect vertex indexing in canvas tile renderer.

  • Bug Fix: Fixed a missing barrier in "RenderUnderWaterFog." The pass was not calling "CopyToResolveTarget" and therefore the render target was left in a writable state.

  • Bug Fix: Fixed an issue with a nullptr vertex buffer being passed in with "FSkinWeightLookupVertexBuffer". The "GetNeedsCPUAccess" check was overriding the check for valid "VertexBufferRHI", when setting bSRV, in FSkinWeightLookupVertexBuffer's "InitRHI" function.

  • Bug Fix: Added debug names to Distance Field lighting resources to aid debugging.

  • Bug Fix: Fixed the creation of cube array resources in the reflection environment. The old code was clamping the minimum number of cubes in the reflection environment cube array to 2. This would force that the RHI resource was always an array, rather than a single cube. This is no longer necessary.

  • Bug Fix: Fixed incorrect barriers in Light Propagation Volumes. Auto-write was enabled on the LPV targets despite the LPV system handling the required barriers manually.

  • Bug Fix: Fixed missing resource barriers in "PrecomputedVolumetricLightmap.cpp."

  • Bug Fix: Resolved an issue that was causing negative draw call counts.

  • Bug Fix: Fixed a validation error in "FVulkanResourceMultiBuffer" to store the size explicitly when using BUF_Volatile when updating buffers larger than the default MaxSize.

  • Bug Fix: Moved Vulkan indirect draw barriers into Transition Resources making it impossible to transfer a resource used as a normal shader resource, which is rarely done in practice. A transition refactor will fix this.

  • Bug Fix: DX12 bulk data texture upload now works properly with mipmapped texture arrays and compressed textures.

  • Bug Fix: Fixed an issue with FRHIGPUFence by adding a thread safe counter to prevent "Poll" from returning wrong values while "Enqueue" hasn't yet been processed.

  • Bug Fix: Fixed an incorrect check for usage of scene depth by a material.

  • Bug Fix: Fixed a tangent space computation for Material Billboard component.

  • Bug Fix: Fixed "CopyToStagingBuffer" implementations on D3D12. Other platforms apply the Offset parameter to the source buffer address only.

  • Bug Fix: Applied a fix for case when "MAX_SRVS == 64" and "CurrentShaderSRVCounts == 64".

  • Bug Fix: Added a fix for textures accidentally not getting any inlined mips.

  • Bug Fix: Added vertex buffer debug names to DX11 RHI.

  • Bug Fix: Some 64-bit fixes for "FTextureSource" that fixes import of large UDIMs.

  • Bug Fix: Standardize "-novendordevice" on D3D11, D3D12, and Vulkan.

  • Bug Fix: Fixed compiler warnings in MCPP and made main arguments a dynamic array when "MAX_OPTIONS" is exceeded.

  • Bug Fix: Fixed incorrect calculation of tangent space in landscape vertex shader.

  • Bug Fix: Fixed incorrect calculation of Runtime Virtual Texture volume bounds when copying from a component with zero volume bounds.

  • Bug Fix: Fixed calculation of footprint offset for DX12 texture copy. The previous logic was only correct if copying a mip or slice range starting at zero.

  • Bug Fix: Fixed an issue computing wrong sizes for mips of non-power of two UDIM texture when computing Virtual Texture address wrapping.

  • Bug Fix: Fixed issues with the Virtual Texture Streaming property in the Texture Editor that would be hidden if the project has Virtual Texturing disabled. This also includes a fix for the Thumbnail/editor text that reflects the actual VT state of the texture, not just the property being set.

  • Bug Fix: Fixed lifetime issues with VulkanShaders deleting themselves while still needing to be used.

  • Bug Fix: Fixed DiaphragmDOF on data driven platforms.

  • Bug Fix: Added shader index to FD3D12RayTracingShaderTable's "FShaderRecordCacheKey." This fixes a problem where same resources may be bound at the high level to records that have potentially different local root parameter layouts.

  • Bug Fix: Making overlay menu button transition on click from + to x when menu is opened/closed.

  • Bug Fix: Fixed the wrong atmosphere being applied on opaque objects in front of it.

  • Bug Fix: Fixed rare validation error issues with transition textures that are not render targets or depth targets to GENERAL initially. This makes Vulkan work as D3D reading uninitialized textures used to create a validation error.

  • Bug Fix: Fixed unity test breakage caused by Vulkan global function by fixing a typo inside "DumpMemory".

  • Bug Fix: Added option to do a single renderpass for shadows which fixes flickering on some devices and improves performance.

  • Bug Fix: Fixed a sample out-of-bounds issue in single layer water pass.

  • Bug Fix: Fixed potential denormalized quaternion when manipulating atmospheric lights.

  • Bug Fix: Fixed hair strand bounding box when attached to Skeletal Mesh.

  • Bug Fix: Moved Abstract specifier out of "HideCategories" list in "SceneCaptureComponent".

  • Bug Fix: Removed hair from environment capture and Planar Reflection capture.

  • Bug Fix: Fixed HISM not updating scale and rotation in the game mode.

  • Bug Fix: Fixed the wrong hair width being displayed into the group option in the Details Panel.

  • Bug Fix: Applied fixes to DX12 for potential erroneous transition when using "ReadSurfaceData/GetStagingTexture:. Also, fixed "ReadSurfaceData" of DXGI_FORMAT_R8_UNORM render targets.

  • Bug Fix: Fixed non-determinism in cooked UMapBuildDataRegistry.

  • Bug Fix: Fixed dummy texture being overwritten in some cases.

  • Bug Fix: When computing instances dithering LODs, offset instances by the mesh pivot to match CPU LOD logic more closely.

  • Bug Fix: Wait for Streaming Virtual Texture transcode to complete before deleting file handles.

  • Bug Fix: Fixed responsive TAA on translucent materials.

  • Bug Fix: Applied fix for FConditionalScopeResourceBarrier-related assert to not trigger a resource transition for resources that don't have state tracking enabled when the source and destination state are identical (in the case of the landscape edit layers : CPU readback resource, whose state is always D3D12_RESOURCE_STATE_COPY_DEST) This could be handled on the client side by not using a FConditionalScopeResourceBarrier object in the first place but this would require the client to do pretty much what the scope object does internally.

  • Bug Fix: Added a workaround for corrupt instancedata.

  • Bug Fix: Applied fix for FXSystem being reused across level changes.

  • Bug Fix: Added Option to prevent multithreaded PSO creation. Temporarily disabled multithreaded PSO creation on some problematic devices.

  • Bug Fix: Fixed an issue where bHasInputAttachments was never initialized.

  • Bug Fix: Release uniformbuffers when the world is cleaned up. This releases a lot of render target references.

  • Bug Fix: Release FXSystem GPU resources "onworldcleanup." This frees some lingering render resources that are not free until the UWorld is released, which it might never be.

  • Bug Fix: Fixed two validation issues in Vulkan caused by the Track Editor Thumbnail.

  • Bug Fix: Fixed computation of miss shader table size.

  • Bug Fix: Added missing Vulkan pixel formats.

  • Bug Fix: Fixed an issue with "RHIReadSurfaceData" not allocating a large enough buffer. Fixes an issue with texture painting.

  • Bug Fix: Fixed Vulkan shutdown issue that could happen when refcount from pending state would hit 0. It would end up modifying the array being iterated on.

  • Bug Fix: Fixed Vulkan "RHIReadSurfaceData" when reading back mip levels other than 0. Added missing transition back to Readable in LandscapeEditLayers and added VULKAN_EXTERN_EXPORT for VULKAN_ENABLE_IMAGE_TRACKING_LAYER.

  • Bug Fix: Fixed an issue with Sky Light triggering a check when set to 0 ray traced samples per pixel.

  • Bug Fix: Fixed more incorrect NEE Pdf calculations due to not taking exact material determination and ordering into account.

  • Bug Fix: Fixed erroneous calculation of NEE Pdfs for environment contribution off of diracs.

  • Bug Fix: Fixed HitT not set on full payload. PackedPayload is overwritten at the end of the shader.

  • Bug Fix: Fixed incomplete tool tip for building static lighting, that was giving misleading information on the reasons building lighting could be disabled.

  • Bug Fix: Fixed mip sky light pdf texture and solid angle texture defines set in the incorrect location for sky light direction sampling.

  • Bug Fix: Fixed shader compile fails when 'GBUFFER_HAS_TANGENT' is enabled.

  • Bug Fix: Applied a fix for Background Blur in UMG being filled with black when UI.CompositeMode is used in HDR.

  • Bug Fix: Shader compile log messages now appear during shader compile instead of after all shaders compiled.

  • Bug Fix: Updated debug name of render targets when they are recycled.

  • Bug Fix: Disabled "r.Vulkan.UploadCmdBufferSemaphore" to fix a validation error on shutdown.

  • Bug Fix: Added a fix to prevent overwriting perv cloth xform since cloth xforms are written multiple times per frame.

  • Bug Fix: Fixed pixel depth offset invariance between depth pass and base pass that was causing z-fighting in some cases.

  • Bug Fix: Write out 0s instead of FLT_MAX when morph target LOD's bounds are absent (lower LOD isn't using full morth target buffer).

  • Bug Fix: Fixed a typo for initial layout transition wasn't actually using the intended layout type.

  • Bug Fix: Fixed inverted V component when using hair root UV.

  • Bug Fix: Do not perform project setting based validation on engine visualization materials during DDC warming.

  • Bug Fix: Make AO decals respect meshes that disable receiving decals.

  • Bug Fix: Refactor RT selection during base pass into a single function. Expose helpers to retrieve used RT for specific systems.

  • Bug Fix: Exposed pre-skinned vertex buffer to local vertex factory so that pre skin vertex position is available to material nodes that use it when derived vertex factories generate position buffers that are post skinned. This is particularly relevant for GPUSkinCache.

  • Bug Fix: Removed applying decal fade all the time in the shader. It is by design that the fade parameters are exposed to the material and it will decide how "fade" is applied to the material.

  • Bug Fix: Fixed decals reading GBufferA. It cannot be always indiscriminately set as a RT. Packing active RT together as we do with base pass shading.

  • Bug Fix: Handle RT bindings for decals that write or read to Gbuffer.normals.

  • New: UAV's in the PS stage are now bound as normal resources, and are no longer tied to "SetRenderTargets."

  • New: Added sparse voxelization for hair strands. This allows you to have thinner details on hair and fur when not using "Deep Shadowmap" enabled on lights.

  • New: Added "FrameIndex" override to "FSceneView."

  • New: Adjusted default streaming priorities for Virtual Textures so that they now match the standard texture streaming priorities.

  • New: Added support for export of Runtime Virtual Texture streaming mips to BMP image format.

  • New: Added source mesh slot (optional) into the Groom Component to project hair on a different meshes than the Skeletal Mesh to which a Groom Component is attached. The source and the target mesh need to share the same UV space.

  • New: Added support for Crunch compression of Runtime Virtual Texture streaming mips.

  • New: Added Groom Binding Asset that stores the binding information of a groom onto a Skeletal Mesh.

  • New: Added Matrices.ush which provides functions to build projection and look-at matrices identically from the CPU version.

  • New: Reduced size of "FFileCache" (the file cache used by Virtual Texture system) from 32MB to 16MB. You can make the size configurable with the console variable "fc.NumFileCacheBlocks."

  • New: Increased the SRV limit in DX12 from 48 to 64 so a shader with 50 SRV fits.

  • New: Added visibility pass for hair rendering that improves performance (enabled by default).

  • New: Added support for light channels when hair strands.

  • New: When registering a component, "CaptureOnMovement" is now considered. This prevents updating the render target in the editor when "CaptureOnMovement" is disabled. As a result, when it is disabled, the user is responsible for initializing the render target and update whenever they need.

  • New: Added guard for UPrimitiveComponent's "Set Custom Primitive Data Internal" from being sent an invalid index below zero (it already guarded the upper bounds).

  • New: Added hair group information onto groom instance and hair component, such as Hair width, and the root and tip can be overridden.

  • New: Created streaming Virtual Texture staging textures with flags dependent on whether we are running in multithreaded rendering mode. This fixes very slow performance for D3D11 non-multithreaded mode.

  • New: Changing image writing API from TArray to TArray64 data so images can be over 2 billion pixels.

  • New: Add new Runtime Virtual Texture format "BaseColor_Normal_Specular_Mask_YCoCg." This adds an additional 8 bit "mask" channel for generic use in RVT materials.

  • New: Added validation and time estimate when importing a Groom asset.

  • New: Added multi-shader variant of "ClearUnusedGraphResources."

  • New: Added "CanCreateNew" function to "UTexture2DArrayFactory."

  • New: Added "GRHIMinimumWaveSize" which can be used to query the smallest GPU SIMD width possible on current GPU. Value can be between 4 and 128, depending on the GPU architecture.

  • New: Added "bSupportsWaveOperations" to "FDataDrivenShaderPlatformInfo."

  • New: Added 64-bit support to jpeg and EXR file writing.

  • New: Implemented FD3D11DynamicRHI::RHIBlockUntilGPUIdle function.

  • New: Added DXC integration into Vulkan shader compiler. The DXC path for Vulkan can be enabled with console variable "r.Vulkan.ForceDXC." Currently, this is only supported on Windows platform.

  • New: Renamed "r.DumpSCWQueuedJobs" to "r.ShaderCompiler.DumpQueuedJobs."

  • New: Renamed "r.SkipShaderCompression" to "r.Shaders.SkipCompression."

  • New: Added optional per-instance custom data for Instance Static Meshes. This comes with a material node to sample the custom data by index. Also added a Blueprint setter for the data. This data will be serialized on the InstanceStaticMesh Component. By default the number of custom data floats is 0 and this will not allocate any additional data.

  • New: Added support for using "VkImageFormatListCreateInfoKHR: for sRGB textures.

  • New: SkyAtmosphere component is now accessible from the Actor instance.

  • New: Added support for creating structured and vertex buffers with initial CPU data through the render graph.

  • New: Converted FRHIAsyncComputeCommandList" to "FRHIComputeCommandList." Moved "FRHICommandList" to inherit from "FRHIComputeCommandList."

  • New: Added option to compute SkyAtmosphere transmittance per pixel. This is controlled with the console variable "r.SkyAtmosphere.TransmittanceLUT.LightPerPixelTransmittance."

  • New: Added support for the use of GPU assisted validation using the console command "r.Vulkan.GPUValidation."

  • New: Implemented AMD D3D12 vendor extension support (with custom UAV root signature binding).

  • New: Added Global Uniform Buffer Support in the RHI.

  • New: Implemented bSupportsUInt64ImageAtomics in "DataDrivenPlatformInfo," along with "COMPILER_SUPPORTS_ULONG_TYPES" and "COMPILER_SUPPORTS_UINT64_IMAGE_ATOMICS" compiler definitions, and a generic "ImageInterlockedMaxUInt64" abstraction.

  • New: RHI Viewports now take float parameters.

  • New: Added bSupportsRTIndexFromVS to \DataDrivenPlatformInfo.

  • New: Added generic hooks for primitive shader support.

  • New: Implemented GRHISupportsPrimitiveShaders capability flag.

  • New: The command line "-NumAFRGroups=" now implies AFR in addition to setting the number of AFR groups; if just "-AFR" is specified "NumAFRGroups" is set to "MaxGPUCount", as before.

  • New: Added support for temporal history upscaling on data driven platforms.

  • New: Upgraded AGS to 5.4. It enables 64-bit atomic support on AMD hardware, as well as custom UAV bind slots in D3D12 (among other features).

  • New: Added Vulkan support for exclusive fullscreen extension for Windows.

  • New: Added an option the SkyAtmosphere component for the atmosphere to follow the SkyAtmosphere's transform.

  • New: Added virtual planet shadow when sampling transmittance per pixel to the SkyAtmosphere. Transmittance lut does not contain planet shadow so shadow from one planet on another was incomplete in space view. This is achieved using a simple ray/sphere intersection for now. In the future, we'd like to integrate it in the transmittance lut (last texel data on mu).

  • New: Added console variable to control fine-grained RHI command profiling events. Use "r.RHICmdTraceEvents=1" to enable tracing events (off by default).

  • New: Make Buffer Visualization can config with Material Instances.

  • New: Support for shader categories, for shader cook statistics. Added "CompileTime" stat with some tool tips.

  • New: Added tracking code to help debug memory leaks from Vulkan objects. This is disabled by default. Use "r.vulkan.dumpmemory" to dump when enabled.

  • New: Added "MinBitrate" console variable, that makes PixelStreaming ignore video encoder bitrate recommended by WebRTC if it drops below MinBitrate value. This can be useful to sacrifice interactivity for better video quality on low-bitrate connections. It is disabled by default.

  • New: Added stats for shaders compiled by materials.

    • "CookByTheBook" now outputs a .csv file into Saved/MaterialStats.

    • Statistics View now lists all the csv files from that folder.

    • Load is done lazily

    • Added shortcut key in Content Browser

    • MaterialPath is now serialized into a shadermap (if debug info is allowed).

  • New: Vulkan Graphics PSO cache rewrite/cleanup.

    • Multithreaded creation of PSOs, which should reduce hitches and make optimizing shaders faster.

    • It only uses one map&lock and has one type.

    • It uses UE4 shaderkeys instead of bytecode shaderhash

    • It enables parallel PSO creation

    • We added the "VulkanPSO" stat group

    • LRU is now compiled in but disabled on all Vulkan platforms.

  • New: Added Support Virtual Texture Streaming for Vulkan Linux.

  • New: Added opaque shadow mask permutation for hair for evaluating the transmittance instead of the front depth. This helps to attenuate shadow cast by groom when the hair strands are small/thin.

  • New: Swapping Bcrypt node module to native js version Adding npm console commands to ease usage.

  • New: The Virtual Texture category is hidden on non-UMeshComponent.

  • New: Added a parameter for the lens effects principal point to not be in the center of the screen. Needed for overlapped rendering.

  • New: Added supersampling permutation for hair transmittance evaluation, which is used for cinematic quality.

  • New: Added an option to disable Z-ordering for world widgets (Slate.WorldWidgetZOrder = 0). Disabling Z-ordering may improve widget batching and rendering performance but could result in an incorrect rendering order of overlapping widgets. World widget Z-ordering is enabled by default.

  • New: Pre-exposure is now being forced to always be enabled shaders.

  • New: Added a RenderDoc "CapturePIE" command which starts a PIE session and captures the specified number of frames. Useful when debugging initialization problems, as it allows the first frame of a PIE session to be captured.

  • New: Added ability for selective Skin Cache on Skeletal Mesh Components. Skin Cache can be specified per LOD, and the USkinnedMeshComponent can override per LOD what the Skeletal Mesh Component specifies. There is also a project setting to use as Skin Cache as inclusive or exclusive.

  • New: Added optional per-instance custom data for Instance Static Meshes. This comes with a material node to sample the custom data by index. Also added a Blueprint setter for the data. This data will be serialized on the InstanceStaticMesh Component. By default the number of custom data floats is 0 and this will not allocate any additional data.

  • New: Updated the nvTextureTools libraries for Win64.

  • New: Added DX11 support for EnumAdapterByGPUPreferences. This allows OS assisted selection for the GPU. Use the command line "-gpupreference=[n]" to set the selection. 1 will set the preference to minimum power, and 2 (the default) will set the preference to highest power. Any other value causes it to fall back to the old code. Also, upgrade DXGI to the latest.

  • New: Enabled "SingleLayerWaterIndirectDraw" for Vulkan desktop.

  • New: Added a console variable to skip shader compression with "r.Shaders.SkiCompression." Enabling this can save a significant amount of time when using debug shaders.

  • New: Added limited forward rendering support for hair strands rendering.

  • New: Added ability for WPO and Tessellation to render into velocity pass even if the Actor has not moved. This behavior can be toggled with the console variable "r.BasePassOutputsVelocity." By default it is set to 0 and not enabled.

  • New: Downgraded missing "TexCreate_ShaderResource" error to be non-fatal.

  • New: Exposed "AllowShaderWorkers" to console variables so that it can be set from CansoleVariables.ini.

  • New: Shader compiler warnings can now be stored in the DDC and re-emitted during a cook. Logging is gated on "r.ShaderCompiler.EmitWarningsOnLoad" (off by default).

  • New: Renderer settings should not be hidden behind Defines. Moved ray tracing's texture LOD console variable out. This fixes all non-raytracing platforms.

  • New: Added updates for how we call the Metal compiler, version our DDC key, and find our toolchain. The following has changed:

    • Uses "xcrun" to invoke xCode tools.

    • Picks the SDK based on ShaderPlatform.

    • Fetches the correct version from Metal.

    • Command line "-v"determines the binary path and header paths through Metal.

    • Command line "-print-search-dirs" uses xcrun for Metal-ar and metallib. This should prevent us from mixing versions of metalfe, metal-ar, and metallib (and the headers.

  • Improvement: improved Vulkan LLM support to track render target and spare memory usage.

  • Improvement: Improved Clear Coat shading model to support directional sources.

  • Improvement: Added code for Vulkan to prevent overlap of upload and graphics buffers.

  • Improvement: RenderDoc plugin improvements:

    • In the plugin options, we can now set a delay before the capture takes place after hitting the button, either in seconds or in ticks. The default delay is still 0.

    • In the plugin options, we can choose the number of frames to capture. The default is still 1. This implies the capture turns into a "capture all activity" as we cannot selectively capture a single viewport across frames. As before, the options are accessible with the command line so that this also works in PIE mode.

    • Fixed the notification that stayed on screen forever in PIE mode. The notification shows when a delayed capture will start as well as which frame is currently being captured.

  • Deprecated: "BUF_UINT8" and "BUF_UAVCounter" have been deprecated.

  • Deprecated: Added "RHIClearUAVUint" and "RHIClearUAVFloat" functions and deprecated "UAV" global functions in ClearQuad.h:

    • The ClearUAV implementation for structured buffers was not correct and would lead to D3D debug layer validation errors. This is because it is not allowed to bind a structured buffer UAV to a type RWBuffer<> shader parameter, as found in the clear replacement CS.

    • Use of "NumBytes" was also not correct. The ClearUAV functions using this would assume the UAC format is R32_UINT and divide the NumBytes parameter by 4. For example, if the format was R8_UINT, the divide by 4 means only ¼ of the resource was cleared.

  • Deprecated: "ViewCustomData," "CustomLOD," and "StaticMeshBatchVisibility" are now deprecated and will be removed in the next engine release.

  • Removed: Deleted "SRGBO_ForceEnable" flag, and replaced the one usage of it with "SRGBO_ForceDisable".

  • Removed: Removed "Default Virtual Texture Material" as this was creating unnecessary shader compilation overhead from being a special engine material.

  • API Change: With the new functions, rendering code should call either the "Uint" for Float version depending on what the underlying format of the UAV is. Everything the UAV covers is cleared, so there is no need to pass "NumBytes" anymore.

    • Structured buffers are treated as "R32_UINT" in both the Uint and Float implementations. The X component of the value vector is copied directly into the buffer with no format conversion. This matches D3D11 semantics.

    • It is invalid to call "RHIClearUAVFloat" on an integer-format UAV, or "RHIClearUAVUint" on a float-format UAV. This leads to D3D debug layer validation errors due to mismatched RWBuffer type binding.

    • The caller is also responsible for handling appropriate resource transitions. The underlying resource must be writable when calling "RHIClearUAVFloat" or "RHIClearUAVUint."

Ray Tracing

  • Crash Fix Fixed potential crash when ray tracing Instanced Static Mesh with invalid render data.

  • Crash Fix: Fixed a driver crash when scrubbing in the Sequencer with ray tracing enabled with geometry cache. The index buffer was modified by the render thread while the RHI thread was reading it for building the ray tracing acceleration structure.

  • Crash Fix: Fixed a crash when creating ray tracing geometry if any section has a null vertex buffer.

  • Crash Fix: Fixed a crash when isolating materials in the Static Mesh editor with ray tracing enabled.

  • Crash Fix: Fixed a crash when in Path Tracing or Ray Tracing Debug view modes when "r.raytracing.forceraytracingeffects" is set to 0.

  • Bug Fix Clear Coat custom data channels are correctly populated in the ray tracing payload.

  • Bug Fix: Fixed light's "Affect Global Illumination" flag being ignored by ray traced global illumination.

  • Bug Fix: Ray Tracing Reflections bounces are clamped to a minimum of 1 to avoid artifacts if there were no bounces.

  • Bug Fix: Changed geometry tolerance of primary rays in translucency pass to avoid artifacts due to transparent objects contacting opaque objects.

  • Bug Fix: Applied a small fix in ray tracing reflections where "AccumulateResults" early return was missing.

  • Bug Fix: Fixed incorrect usage of Indirect Irradiance in packed ray tracing payload. Renamed members of FPackedMaterialClosestHitPayload to avoid accidental use of packed members instead of using accessors.

  • Bug Fix: Fixed missing GPUSkinCache barrier transitions when ray tracing is disabled. Basically we would queue up back-to-readable transitions after updating the cache, but only flush this list if ray tracing was enabled. This change reworks the logic to make skin cache barrier flushing independent of ray tracing.

  • Bug Fix: Fixed reflection captures were not working properly in ray tracing because material bindings were incorrect due incorrect views handling in WaitForRayTracingScene. Fixed ray tracing translucency alpha channel in Composure.

  • Bug Fix: Fixed resource state tracking and transitions for ray tracing resources.

  • Bug Fix: Fixed ray tracing was not taking into account layer visibility to add and exclude objects from the ray tracing world. This was affecting Composure layers with ray tracing.

  • Bug Fix: Forbid ray tracing shaders in the landscape thumbnail render.

  • Bug Fix: Fixed an uninitialized out parameter causing undefined behavior in the spot light estimator. Fix other similar instances through path and ray tracing shaders to prevent similar issues in the future.

  • Bug Fix: Fixed Sky Light Color not being set properly in ray tracing global illumination.

  • Bug Fix: Fixed Static mobility in Sky Lights not generating required information when ray tracing is enabled.

  • Bug Fix: FGenerateReflectionRaysCS is not compiled when ray tracing is disabled.

  • Bug Fix: Fixed incorrect throughput calculation path tracing specular reflection material sampling.

  • Bug Fix: Initialized the path tracer's previous material payload to fix validation errors.

  • Bug Fix: Fixed old path tracing regression where the payload was expected to carry previous material hit information upon a miss (for MIS with next-event estimation).

  • Bug Fix: Fix Path Tracer specular transmission material over and under contribution due to incorrect throughputs and pdfs.

  • Bug Fix: Fix checks for setting Sky Light related parameters to rely on what they require rather than if the sky light should be ray traced to allow proper functionality in path tracing and other passes.

  • New: Implemented native instancing for ray tracing geometry. Same shader bindings can now be used with many copies of the geometry that have unique transforms. This results in a significant CPU time savings for GatherRayTracingWorldInstances, BindRayTracingMaterialPipeline, and SetRayTracingHitGroup functions.

  • New: Implemented batched ray tracing material bindings. Materials are now bound to the ray tracing scene using async tasks, which saves approximately 1.6 milliseconds of render thread critical path in the "Infiltrator" scene.

  • New: Packed ray tracing payload is now used during the main ray traced reflection rendering. Same payload instance is used for main material ray trace and for shadow rays during direct lighting. This significantly improves performance for the regular code path when not using miss shaders to evaluate lighting.

  • New: Implemented lighting calculation using a miss shader that's invoked during shadow ray tracing in reflections and translucency. This removes a significant amount of code from ray generation shader and results in up to 2x speedup for reflection rendering in many scenes. The miss shader code path is enabled by default and can be controlled with "r.RayTracing.LightingMissShader." Also, moved some common lighting resource initialization from per-effect to per-view.

  • New: Added parallel GatherRayTracingWorldInstances which makes critical path time of this function approximately 2x faster in a typical large scene on a multi-core CPU.

  • New: Added support for GPU Niagara Meshes in ray tracing. Instances are copied directly from the Niagara GPU float buffer into the ray tracing instances descriptor GPU buffer through a compute shader.

  • New: Added support for disabled sections for dynamic meshes in ray tracing

  • New: Added "bEvaluateWorldPositionOffset" for ray tracing changed from BlueprintReadOnly to BlueprintReadWrite.

  • New: Ray tracing reflections now evaluates the bottom layer before the top one. This is because the top layer data needs to stay live until the bounce is computed, so allowing the bottom layer to execute first reduces overall live state.

  • New: Added option to render opaque objects only in ray tracing debug view modes (r.RayTracing.DebugVisualizationMode.OpaqueOnly - Enabled by default).

  • New: Implemented "SV_InstanceIndex" emulation for ray tracing shaders.

  • New: Added an option to allow for a ray traced Sky Light contribution in reflections. The existing Sky Light functionality has been refactored to allow for better code reuse when using ray traced sky lighting sampling.

  • New: Texture LOD for ray tracing shaders is now a per-project setting, disabled by default.

  • New: Implemented support for binding different vertex buffers per ray tracing geometry segment. Removed the skin cache vertex buffer merging step, improving GPU performance. Deprecated RHICopyBufferRegion/s, as it was exclusively required for skin cache VB merge. Unified bottom level acceleration structure build and update APIs.

  • New: Exposed "Force Opaque" in Ray Tracing Flag for Static Mesh Assets.

  • New: Added base instance index to ray tracing hit group system parameters. This can be used to emulate SV_InstanceID in hit shaders.

  • New: We now allow unique custom user data to be provided per instance when native ray tracing instancing is used. Previously only transforms could be unique.

  • New: Added support for binding multiple ray tracing miss shaders with custom local resources.

  • New: Ray Tracing shader bindings array size increases to match D3D12 RHI limits.

  • New: Deduplicated flag generation in ray tracing reflections and move ray tracing reflection related consol variables and additional flag generation into the proper file.

  • New: Added options to turn off compilation of ray tracing material closest or any-hit shaders. This may be useful for titles that use custom shaders or don't require full material evaluation (For example, only using ray tracing for shadows or AO). This adds new console variables "r.RayTracing.CompileMaterialCHS" (default 1) and "r.RayTracing.CompileMaterialAHS" (default 1) The value is read-only and must match between cook-time and run-time.

  • New: Added flags to improve ray tracing performance on visibility rays not requiring hit depth.

  • New: Implemented simplified ray tracing material hit shaders which forces everything to diffuse and no static lighting evaluation.

  • New: Improve generic TraceRay helper functions and replace existing common TraceRay calls which fit established material and visibility ray patterns.

  • New: Ray tracing reflection rays are not traced from pixels that have the "Unlit" shader model.

  • New: Added better messaging when ray tracing reaches the maximum number of sections supported per mesh.

  • New: Enabled multi-bounce refraction from interface tracking and model total internal reflection in ray tracing translucency.

  • New: Shadow rays in RTGI are shortened by default to avoid hitting the sky sphere making it possible to get desired sky reflections without affecting GI.

  • New: Added an option to disable hair ray tracing when the engine is in ray tracing mode.

  • New: Improve path tracing sky light sampling to use normal-based SH irradiance rather than a highest-mip cubemap guess.

  • New: Implemented basic tiled mGPU support for the path tracer.

  • New: Implemented wiper mode to compare the current image output with the path tracer. It can be enabled with the console variable "r.pathtracing.wipermode." Path Tracing view mode must be active.

  • New: Added DefaultLit material model to path tracer

  • New: Added ClearCoat material model to path tracer.

  • Improvement: Improved multi-sample ray tracing reflections.

    • Multi samples per pixel is now handled from a high level loop.

    • The reflections shader adds an extra stage that reads the current accumulated color/hit distance on anything beyond pass 0, and only applies the final weighting on the final pass.

FX - Cascade and Niagara

  • Crash Fix: Fixed crashes that were occurring when a user performed an Undo/Redo in the system and emitter editor.

  • Crash Fix You can now access the Niagara shader compilation manager through a static Get() function instead of through a globally initialized variable. This stops the compilation manager from crashing in monolithic builds, where it attempts to access FCommandLine during global construction where FCommandLine has not been initialized.

  • Crash Fix: Fixed a crash that occurred when the user duplicated an emitter through the right-click menu.

  • Crash Fix: Fixed crash that occurred when shutting the engine down if Niagara shader compiles were still in process.

  • Crash Fix: Fixed a difficult to reproduce shut down crash.

  • Crash Fix: Fixed a problem with random crashes that occurred when closing the Niagara system and emitter editor.

  • Crash Fix: Fixed crashes that occurred when the user loaded broken data.

  • Crash Fix: Fixed a crash that occurred when adding an Event Handler. This was caused by system instances being active, and the event handler modifying the cached data.

  • Crash Fix: NiagaraDataInterfaceVectorField was crashing when trying to bind a vector field texture with a null render thread representation (likely a timing or init order problem). This is now fixed.

  • Crash Fix: Fixed a bug that could lead to a crash when a variable default value was not initialized.

  • Crash Fix: Fixed a bug where changing the type of a static switch could result in a crash.

  • Crash Fix: Fixes system/emitter editor crashes when creating a circular reference in the Niagara Graph.

  • Bugfix: Fixed distortion of velocity-aligned particle sprites at low velocities.

  • Bugfix: Fixed issue where a Particle System Component would not tick with its owner's time dilation when using the Particle System Component Manager.

  • Bug Fix: Added support for uint32 vertex indices when using Niagara ribbons. Fixed a bug occurring with Niagara ribbons when requiring more than 16-bit indices.

  • Bug Fix: Fixed issues that were causing compile messages to show up inconsistently in the system and emitter editors.

  • Bug Fix: Fixed an issue with GPU fences so that Clear() will result in Polls failing until the fence has actually been hit.

  • Bug Fix: New user parameters now correctly enforce having a unique name. Fixed a bug occurring in the use of Undo/Redo that caused the preview system to stop running.

  • Bug Fix: StaticMesh interface is now more stable when no mesh is provided, or when CPU access is not enabled on the mesh provided.

  • Bug Fix: Fixed a bug that could prevent the SimulationTarget static switch to work for GPU emitters.

  • Bug Fix: Reset system simulation when setting fixed bounds, so the Preview panel shows the new bounds even when paused.

  • Bug Fix: Cleaned up the registering of Niagara emitter events to resolve multithreaded access.

  • Bug Fix: Made Niagara material loading correctly pass the "loaded from cooked material" parameter around, so that we can load cooked data.

  • Bug Fix: Removed the "Simulating" overlay from the Niagara System Overview Graph and the Script Editor Graphs since modifying Niagara graphs in real time is supported.

  • Bug Fix: Fixed an issue with the CPU async collision queries within Niagara.

  • Bug Fix: Updated the compile error for disconnected numeric pins in module scripts, so that the error tells the user how to fix the issue and provides links which navigate to the issue.

  • Bug Fix: Allocated space in Niagara ParameterStore for missing parameters, to fix potential memory overwrite.

  • Bug Fix: Fixed a problem where Niagara curves were not rendering in the Curve Editor if the curves are linear (all keys have the same value).

  • Bug Fix: Matrices now default to the identity matrix by default when they are added.

  • Bug Fix: Updated force and velocity solvers to ensure that Drag stays entirely framerate independent, even at extremely high values.

  • Bug Fix: The Scale Color and Scale Color by Speed modules now properly stack with each other and with duplicates in the stack.

  • Bug Fix: The Curl Noise Force module is now correctly deterministic when it is used in "Pan Curl Noise" mode.

  • Bug Fix: Fixed simulation inconsistency issues when enabling and disabling emitters.

  • Bug Fix: Fixed ownership of FNiagaraParameterStore when dealing with hierarchies of Blueprint.

  • Bug Fix: Fixed major performance problems in the system editor when editing systems with a large number of emitters (8 or more).

  • Bug Fix: Fixed an issue where dependencies were not refreshing correctly in emitter scripts.

  • Bug Fix: Added the "Library Only" option to the module and dynamic input reassignment menus, which are used when assigning new scripts to modules, and also for dynamic inputs with missing scripts.

  • Bug Fix: Fixed an issue where redundant Niagara GPUComputeShaders were being saved into cooked builds, resulting in non-deterministic cooked builds.

  • Bug Fix: Data Interface functions which need per-instance data can now be called from custom HLSL on CPU emitters.

  • Bug Fix: It is no longer possible to rename emitters to reserved names: [Emitter, Engine, User, Local, Module, NPC, Particles, System, Transient]. Doing so could cause a compiler failure in the system.

  • Bug Fix: You can now undo Niagara module deletions after using the Trashcan button.

  • Bug Fix: Fixed a barrier error in NiagaraEmitterInstanceBatcher::SortGPUParticles. Need to reissue a ComputeToCompute RW barrier after each simulation dispatch (at least until UAV overlap is implemented instead).

  • Bug Fix: Removed premature error logging from a step in the enum loading process. Real errors are handled after both methods are tried.

  • Bug Fix: When you focus the selected emitter in the Niagara Preview viewport, it no longer disables the orbit camera.

  • Bug Fix: When you delete an isolated emitter, it now clears the isolated status of the system itself.

  • Bug Fix: Fixed bool access to NiagaraParameterCollection.

  • Bug Fix: Fixed a "No mesh assigned error" being erroneously reported when using the Sample Skeletal Mesh Skeleton module.

  • Bug Fix: Fixed an issue around destroying a Niagara Component on the same frame as a tick group promotion has been requested. You can reproduce this issue if you have the instance change tick group during system sim ticking, to a tick group before the current one, and then removing the instance before post-actor tick (such as DestroyComponent being called on the owner).

  • Bug Fix: Fixed a deadlock that occurred if TickDataInterfaces destroys the system instance; it will still flag for async work and finalize even though it is complete.

  • Bug Fix: Mark Niagara Component parameter stored UObjects as dirty after reachability analysis; this fixes an issue where instances can reference stale UObjects. We may be able to refactor this later, but for the moment this fixes a pretty nasty GC related issue.

  • Bug Fix: Fixed a race condition where unbinding parameters could be modified while the instances are still ticking.

  • Bug Fix: Cleaned up ExecIndex and implemented Engine.ExecutionCount for GPU systems.

  • Bug Fix: Fixed an issue with races in Volume / Texture data interfaces; it was reading from data set by the RT when determining if the texture is valid.

  • Bug Fix: Fixed an issue with having a RenderTarget still bound that is going to be used as an SRV during Niagara's compute pass.

  • Bug Fix: Fixed an issue that occurred if a GPU emitter was disabled on the first frame and never ticked.

  • Bug Fix: Fixed mesh renderer stats so we do not increment each section.

  • Bug Fix: Fixed a bug where renaming a parameter lost the default value settings for that parameter.

  • Bug Fix: Static switches are now prevented from receiving drag and drop inputs, because it leaves them in a permanently broken state.

  • Bug Fix: Fixing memory problems with the shader compiler jobs being either leaked or prematurely deleted by using TShadredRefs instead of raw pointers.

  • Bug Fix: Fixed a bug with integer type static switches that had exactly two input values.

  • Bug Fix: Fixed a bug where particle attribute reads could be referenced from the wrong namespace.

  • Bug Fix: Fixed a bug where an actor with a Niagara components on autodestroy could be destroyed before the system was finished.

  • Bug Fix: Fixed a bug where modifying a static switch node could cause the loss of all its parameter metadata.

  • Bug Fix: Fixed the matrix access in the spline data interface.

  • Bug Fix: Fixed a bug where the Static Mesh DI did not return the correct transform for a mesh.

  • Bug Fix: Fixed concurrency problems of the export data DI by moving the callback to a separate task graph call.

  • Bug Fix Making it impossible to make attributes as numeric. Numeric is a generic conversion type, not a physical storage type.

  • Bug Fix Fixing issue where particle vector random instance parameters were incorrectly using VRand, causing unit vector sizing instead of a box for certain assets. A new unit vector sizing option was added to allow data created under the incorrect implementation to have the same behavior.

  • Bug Fix No longer using FNiagaraVariable names in UNiagaraScriptVariable names as periods can lead to bad behavior.

  • Bug Fix Fixes for Niagara vector field resources being accessed on the gamethread without it being necessarily initialized.

  • Bug Fix Fixed bug where killing particles on spawn wasn't being honored.

  • Bug Fix Making texture sampling DataInterface emit an error if used in CPU sims.

  • Bug Fix Fixed if multiple instances of a DI were used in a script, the HLSL translator produced all function combinations for each instance.

  • Bug Fix Fixed world time in level editor viewport. Niagara and Cascade culling behavior that works via the component's LastRenderTime will now function correctly in the Level Editor Viewport.

  • Bug Fix Fixed several issues with Particles.UniqueID.

  • Bug Fix UEdGraphPin BreakAllPinLinks and MakeLinkTo don't by default notify the owning node that changes have happened. In some cases, this means that we don't detect that the graph has changed out from underneath us and so we don't recompile.

  • New: Added missing debug names to some Niagara buffers (makes barrier tracking and debugging easier).

  • New: Disabled interpolation on dynamic parameters for sprites/mesh Cascade vertex factories because they are constant and do not require interpolation.

  • New: Moved GPU and CPU script compilation to the shadercompile worker process.

  • New: Niagara mesh particle rendering:

    • Added locked axis and camera offset to Niagara mesh renderers.

    • Fixed issues with the roll of velocity-facing and camera-facing mesh particles.

    • Niagara mesh particle rendering fixes may cause slight differences in existing velocity-facing or camera-facing Niagara mesh particle emitters.

  • New: The "Fix issue" and "Dismiss issue" buttons in the System Editor Selection panel now wrap to the following line when the error message is longer than the width of the panel.

  • Cut, Delete, Rename, and so on).

  • New: Replacing a deprecated module or dynamic input with the suggested replacement now also renames the module, and tries to retain any dynamic inputs or input values that were set on that module previously.

  • New: Niagara View Options combo button in the Selection panel is now highlighted with an orange background if any options are set to non-defaults.

  • New: Added an Experimental Message field to modules, to enable module creators to enter a reason for why a Niagara script was marked as experimental.

  • New: Added a flag to enable/disable motion blur per Niagara Renderer. Fixed local space motion blur for mesh/sprite particles. Disabled velocities on ribbons, because they were not accurate and making them accurate is a difficult problem due to tessellation.

  • New: Removed deferred deletion from Data Interfaces, as it is not required. Removed TSharedPtr from DI proxy as it is no longer required.

  • New: Added an ability to mark Niagara modules, dynamic input classes and functions as Experimental, which will display an Info icon next to their name in the Selection panel, System Overview node and Parameters panel.

  • New: Added a "Create Asset from This" context menu option to emitters; this will duplicate the selected emitter in a Niagara system and re-parent the emitter to the new asset.

  • New: Emitters now have an Edit section in their context menus. It is now possible to rename an emitter by pressing F2.

  • New: Added a console variable "fx.MaxNiagaraGPUParticlesSpawnPerFrame" to control per frame spawn capacity on the GPU.

  • New: Various fixes to matrix related functionality, some were transposed and some were not:

    • You can now generate a matrix inside Blueprints, pass in the vectors to a Niagara system and have it work as expected on both CPU and GPU.

    • Added MatrixToQuaternion. This uses the fast path library under the hood, but gives us a location to replace once we address matrix access issues inside the VM.

  • New: Added a Deprecation Message to Niagara scripts, to enable module creators to communicate why a module is deprecated and what users can do about it.

  • New: Cycling through issues with the issue button in the Niagara Selection panel now cycles through the specific emitter when multi-selecting emitters.

  • New: Added support for SubUVs on the Niagara Mesh Renderer. Added nointerpolation to various attributes that do not require interpolation.

  • New: Added "Create Duplicate Parent" for Niagara Emitters, which duplicates the selected emitter and reparents it to the newly-created emitter. This allows you to insert parents into the inheritance chain of emitters.

  • New: Moved the Isolate toggle to the Render section in the Niagara emitter node. Added a "Go to Parent" button to emitters that have parents.

  • New: Various memory savings for NiagaraScript - Saves ~33% in a simple test level (713.61kb -> 478.70kb).

  • New: Disabled sorting in Niagara by default on sprite and mesh renderers. The existing system will use the previous default to avoid undesirable behaviour.

  • New: Modules can now be renamed from the Niagara Selection panel. The module will still display its original name in parentheses when renamed. This does not affect compilation of the emitter/system scripts in any way.

  • New: Niagara dynamic inputs now display a tooltip in the Selection panel.

  • New: Added a button to isolate a selected Niagara emitter to the System Overview panel. Emitters that are not shown when the system is isolated are greyed out in the System Overview panel.

  • New: Added a context menu to Niagara emitter nodes in the System Overview panel.

  • New: Added an option to filter the Selection panel to only display modules that have issues. Clicking the issue icon in the Selection panel header now cycles through all the issues in the view.

  • New: Added VertexFactory array per View for Cascade particle systems. This fixes issues for split-screen, where particles are oriented to View 0's camera for example.

  • New: Niagara System Overview nodes now have their issue icon right-aligned. Clicking the icon cycles through modules in the selected emitter that contain issues.

  • New: We now use FriendlyName with Niagara Shader Compile Jobs.

  • New: Niagara now tracks GPU particle memory.

  • New: Niagara now calculates the max number of instances required across all sim passes. This reduces memory pressure when Sequencer is scrubbing the timeline and is forcing many simulation ticks at once, because now it will not progressively increase buffers but instead will do it once up front.

  • New: Niagara's "CPU - Ray Traced" and "GPU - Scene Depth" Collisions' stability has been increased by eliminating surface interpenetration correction using particle teleportation. The Pure Roll component has also been improved to handle arbitrary surface angles.

  • New: Niagara can now optionally show a "real time disabled" warning.

  • New: Niagara parameter Map Get and Map Set nodes now get a drop target highlight when they are hovered over.

  • New: Niagara "Set Variables" modules now display the name of the variable that they are setting, and the number of additional variables changed is in parentheses.

  • New: Added icons to the Emitter Properties row to indicate CPU or GPU sim target.

  • New: Now FNiagaraUpdateContext can split its Destroy and Reinit phase to help in cases such as PreEditChange/PostEditChange where systems are torn down before the change, and reinitialized after the change.

  • New: Added an occlusion query data interface that samples the depth buffer in a circular or rectangular pattern to estimate how much of the sample area is occluded. This can be used to find out how much of a sprite or mesh is visible on screen and either optimize performance or create effects such as lens flares. Since this data interface is using the depth buffer, it only works for GPU particles and not for CPU particles.

  • New: Added a Camera Query data interface that can be used to get common camera properties, such as position, for both CPU and GPU particles. On GPU, it can be used to get advanced properties such as the view transforms. There are some limitations to the camera data interface:

    • When used with splitscreen or stereo rendering, the data interface returns only the info for the first available view to the particle simulation.

    • When combined with a data interface that requires a depth buffer or distance field (such as for collision) then the camera information in the particle simulation will be a frame latent.

  • New:

    • Particle emitter memory allocation is now based on a runtime estimation of the max particle count.

    • Added an option to display current particle count estimation in the editor viewport.

  • New: Optimization of bool from {float,int} comparison dynamic inputs. Added "Less Than" operations for ease of use.

  • New: Update to Niagara SetBoolByFloatComparison module to include "Less Than/Less Than or Equal" choices for ease of use.

  • New: Static switch parameters in the stack view can now be reset to their default value.

  • New: Added an LOD highlight category to give a visual indication that these two nodes work together.

  • New: Swapped Niagara SetBoolByFloatComparison to use Static Switches.

  • New: Fixed derivative calc in PolarToCartestiaCoordinates.

  • New: Added SetBoolByIntComparison dynamic input.

  • New: Modules can now define custom upgrade paths when deprecating old modules. See the Emitter State module for an example.

  • New: Added an Audio Spectrum Niagara Data Interface for creating live audio particle effects.

  • New: Because it is impossible to set a reference to a world within the system editor, all the properties referencing AActors or UActorComponent derived classes are now disabled in the system editor.

  • New: Fixed custom HLSL node to support DataInterfaces. Once you name the Data Interface, you can invoke any supported Data Interface method with a period (.), followed by the function invocation. Niagara detects this behind the scenes and sets up all the necessary connections. Also, now users can rename a pin when creating it.

  • New: Logging for the SetEmitterEnable parameter is not implemented for Niagara components.

  • New: It is now a compile error to have multiple different event reads.

  • New: Added two new pairs of UNiagaraNodeOp nodes for generating integer and floating point random numbers. This is because integer and floating point random numbers are semantically different due to how they handle the upper range of an interval. The old "Random" and "Seeded Random" were inconsistent about this across CPU, GPU and determinism modes. Floating point random number ranges are typically half-open, meaning they do not include the upper limit. Integer random number ranges typically do include the upper limit. This adds the following ops that are consistent with the equivalent Blueprints functions:

    • Random Integer: Non-deterministic, produces numbers between 0 and Max-1.

    • Random Float: Non-deterministic, produces numbers between 0 and Max, but not including Max.

    • Seeded Random Integer: Deterministic, produces numbers between 0 and Max-1.

    • Seeded Random Float: Deterministic, produces numbers between 0 and Max, but not including Max.

    In addition, it includes two new helper functions, also consistent with the equivalent Blueprints functions:

    • Random Range Float: produces numbers between Min and Max, but not including Max.

    • Random Range Integer: produces numbers between Min and Max.

    The old Random Range function and the old Random and Seeded Random ops are not touched.

  • New: Adds a new default initialization mode to Niagara variables where you can bind to available compatible parameters using a dropdown menu in the Selected Details panel inside the Script Editor. By selecting a variable in the Parameters panel there is now a new DefaultMode widget that can be "Value", "Binding" or "Custom".

    • When "Value" is selected, it will display an appropriate widget below it to set the default value. A value can only be defined if that variable is referenced in the graph.

    • When "Binding" is selected, it will display a dropdown list of available names to bind. Only built-in names and names explicitly added to the graph or Parameters list will show up.

    • When "Custom'' is selected, it will display neither of the widgets, and indicates that the initialization is done using a sub-graph. This will be streamlined later when the default pins are removed in favor of a separate initialization node. The bindings should be functionally equivalent to the old version of setting the default with a sub-graph and the Begin Defaults node.

  • New: Niagara Parameter Map pins now look like BP exec pins. We will be expanding upon this in a future release where flow control support is added.

  • New: Added support for Materials being set in BP for Sprites and Ribbons that use UMaterial user variables.

  • New: Added the ability for renderers to provide warnings/cues to users.

  • New: Now a warning is displayed when fixed bounds are not set for GPU simulations.

  • New: Niagara script Graph node contents are now being hashed to more reliably identify DDC candidate data. Created Engine\Plugins\FX\Niagara\Shaders\Private\NiagaraShaderVersion.ush that currently works in tandem with FNiagaraCustomVersion::LatestScriptCompileVersion, but is needed for the desired in-editor workflow of making an edit to source files and having it update if a proper console command is set. Added console commands fx.InvalidateCachedScripts and fx.RebuildDirtyScripts, similar to r.InvalidateCachedShaders and recompileshaders changed.

  • New: Info, warning and error messages in the stack view now use different colors.

  • New: Updates Niagara modules, dynamic inputs and functions to use the new explicit RandomRangeFloat and RandomRangeInteger functions from CL # instead of the old RandomRange helper.

  • New: Added an optimization to the VectorVM pattern of acquiring indices and outputting a stream of attribute data.

  • New: Added the Collision Channel enum as a parameter type.

  • New: CPU and GPU Emitters are now differentiated by icon in the System Overview mode.

  • New: Optimized the calculation of the bounds of Niagara CPU particles; an emitter of 100 sprites now has a cost reduction of 40%.

  • New: Fixed up support for GPU mesh emitters that use a mesh with multiple sections.

  • New: Enabled per-particle material parameters for materials used with Niagara systems when targeting GLSL ES3.1.

  • New: Added a set of constant buffers to hold engine-driven Niagara variables, so that we can reduce the cost of managing the parameters through the script execution pipeline.

  • New: Added support for PrimitiveComponent's BoundsScale to NiagaraComponent.

  • New: Location modules now can be optionally masked by SpawnGroup (as defined in Spawn modules such as Spawn Rate or Spawn Burst Instantaneous). This allows a simple form of grouping, and it means that different buckets of particles that are all in one emitter can be easily placed and controlled.

  • New: When script compile errors occur in the system or emitter editor, it now shows the errors in the System Overview and Selection panel. These errors are shown on the module or dynamic input where they occurred, when that information is available. Navigation links are also displayed when that information is available.

  • New: Skeletal Mesh sampling has been rewritten completely to be more full-featured and performant. The old sampling/apply modules have been hidden (but not deprecated) and replaced with Skeletal Mesh Location. The new module is more consistent, easier to use, has more options for which attributes are sampled and written, and is much more lightweight from a performance perspective.

  • New: The Niagara Collision GPU/CPU enum has now been removed from the collision module, because now we can set the value automatically.

  • New: Uniform Ranged Linear Color has been enhanced to give more control over how the color channels are randomly chosen. This enables artists to connect the RGB channels together with a single random value (for example, a random value between black and white would give shades of grey) or to disconnect the channels to drive each channel with its own random value (for example, random values between black and white would give a whole rainbow of colors).

  • New: Changed the default usage bitmask for modules and function scripts to include the particle simulation stage flag.

  • New: Added comments to the Curl Noise Force module, to show how memory usage and performance changes based on the quality of the underlying vector field or function evaluation.

  • New: Spawn modules (Spawn Rate, Spawn Burst Instantaneous) now have an optional spawn probability, which is the chance that the module will generate particles at all during that frame. This allows for more erratic random behavior in spawning without the need for complex logic chains in the Spawn Count inputs.

  • New: Scale Sprite Size and Scale Sprite Size by Speed modules now accumulate a transient scale factor. This enables multiple scale modules to properly accumulate scale offsets, and also enables them to function with sprite size scaling at the LOD level.

  • New: Niagara Graph nodes now retain invalid (no longer exposed) pins which have non-default values or links to other nodes. These invalid pins turn red, and will generate compile warnings which are visible in the emitter and system editors. The warnings also provide navigation links to find and fix the invalid pins.

  • New: The Apply Initial Forces module can now apply forces placed in a Spawn module as if the time was less than 0. This enables users to break up initial spawn positions using forces such as curl noise, wind, or random vector offsets.

  • New: The emitter execution order takes into account events, so that emitters which consume events run after the emitters which produce those events. This makes it possible for events to be delivered in the same frame as they are generated, removing the need for extrapolation in most cases.

  • New: Niagara ribbons now preserve multi-ribbon ordering to prevent random flickering when the camera moves around. Disabled multi-ribbon ordering when using opaque materials. Fixed random flickering when using multi-ribbon in Niagara.

  • New: Added FGPUSortManager that handles different GPU sort tasks. The current clients for it are Cascade and Niagara.

  • Deprecated: Set volumetric scattering default for light renderer to 0 (same as Cascade).

  • Deprecated: Removed fast path implementation from Niagara. This feature was only visible by setting a cvar, so this deprecation should not affect any users.

Lighting

  • Bug Fix: Applied a fix for rendering both Capsule Indirect Shadows and SSAO in the Foward renderer. Previously the SSAO would overwrite the results of the capsule shadows.

  • Bug Fix: Fixed Virtual Texture encoding of BC4 textures which fixes lightmap AO material mask when using VT lightmaps.

  • Bug Fix: Fixed the specular highlight in lighting-only mode that was accidentally introduced in the last release.

  • Improvement: Updated GTAO to improve spatial and temporal filters to bleed better across discontinuities. Added a Thickness Heuristic to bias AO around smaller objects that can be controlled using "r.GTAO.ThicknessBlend." Also added console variables to control the falloff so it is not hardwired which can be controlled using "r.GTAOFalloffEnd" and "r.GTAO.FalloffRatio."

Materials

  • Crash Fix: Removed various UMaterialExpression::NeedsLoadForClient impl, and instead it always returns true for UMaterialExpression::IsEditorOnly, as we no longer want any expressions in a non-editor build. MaterialCachedData now checks for nullptr expressions and avoids updating if any are encountered. This fixes a crash occurring with the editor loading cooked/non-editor data.

  • Bug Fix: Fixed an issue in shader complexity that prevented materials using depth pixel offset from rendering.

  • Bug Fix: Fixed an issue with SSS specular when checkerboard is off.

  • Bug Fix: Fixed an issue with the scene color node in translucent shaders.

  • Bug Fix: Scalar type now correctly propagates through a vertex interpolator material node.

  • Bug Fix: Fixed a race condition that resulted in duplicate shadermaps for material instances.

  • Bug Fix: Made "GDefaultMaterialParameterCollectionInstances" a TMultiMap instead of TMap. This makes it possible for the same MPC to be loaded multiple times. If this happens, it will get added to this map multiple times. If it's not a multimap, the first instance that's destroyed will remove the ID from the map, which will cause further lookups against the map to fail.

  • Bug Fix: Update the runtime Virtual Texture contents after any relevant Material Instance parameter change.

  • Bug Fix: Applied a fix for Deferred Decals after base pass not being rendered when GTAO is enabled. This was due to them not being registered in the render graph as a dependency when rendering the GTAO.

  • Bug Fix: Updated "CopyMaterialUniformParametersInternal" to work without requiring a FMaterialResource.

  • Bug Fix: World Position Offset can be affected by not only regularly connected nodes (Current WPO), but also using Previous Frame Switch nodes (Prev WPO). Take that into account when setting compilation output flags.

  • Bug Fix Prevent forcing low or medium quality usage for platforms that cannot lower the shader quality. This reduces the number of shaders to compile.

  • Bug Fix Fixed unnecessary recompilation of the material when simply clicking on its textual and numeric parameters.

  • Bug Fix Fixed the "Failed to find material attribute, PropertyType: 28" warnings happening during the cooking process.

  • New: Added Burley sample override for offline rendering.

  • New: Allowing modulate translucency to render into the post Depth of Field pass with Dual Blending.

  • New: Allow additional defines and include macros for custom nodes.

  • New: Added a framework to allow user to override the streamed mips of UTexture2D Assets. This allows custom implementations to fill in mip data (from other sources than the cooked mips). Users must derive a class from UTextureMipDataProviderFactory and add it to the UTexture's "AssetUserData." This one has to allocate a custom implementation of FTextureMipDataProvider to fill the streamed mips with its own strategy.

  • New: Default to World Space Normals when writing to Runtime Virtual Texture through standard material attributes.

  • New: Added optional World Position Offset input to Runtime Virtual Texture Sample node. This allows us to manipulate sample coordinates. One use case is to sample using the world position from before material World Position Offset is applied.

  • New: Added Blueprint API for setting layer parameters on Material Instance Dynamics.

  • New: Added texture group TEXTUREGROUP_Project11 to TEXTUREGROUP_Project15.

  • New: Added support for moving Translucency Pass to before water rendering depending on if the camera is above or below the water surface. This introduces a water depth state on the scene view making it now possible to, for example, call IsUnderwater() on a view.

  • New: Write output hash as part of the shader debug info.

  • New: Optimize getting the material parameters for the UI speeding up editing "master" materials with a large number of parameters.

  • New: Sharing material shader code is now the default.

  • New: Added support for the shader pipelines in the shader code library's stable map.

  • Improvement: Minor time savings during shader compilation by not including the preprocess defines.

Mobile Rendering

  • Crash Fix: Fixed an assert in PreparePrimitiveUniformBuffer with Skeletal Meshes when ES3.1 Preview mode is enabled.

  • Crash Fix: Fixed a crash related to Reflection Captures when running DirectX mobile emulation.

  • Bug Fix: Fixed HQreflection on mobile. The first empty spot in the ReflectionCubeMapTextures (if there is any) will be taken by the Sky.

  • Bug Fix: Updated Graphics Resources for Indirect Commands; this fixes Niagara for OpenGL.

  • Bug Fix: Fixed roughness clamp causing IBL mip0 never to be used.

  • Bug Fix: Try to update all PassUniformBuffers before start rendering to avoid GPU flush.

  • Bug Fix: Fixed a precision issue at mobile base pass pixel shader.

  • Bug Fix: Fixed an issue with Spot Lights not working in the mobile renderer when not enabling cast shadow.

  • Bug Fix: Fixed a problem that movable objects never get reflection captures updated in Forward renderer.

  • Bug Fix: Fixed a Software Occlusion issue that Landscape does not generate correct VB and IB data for multi-sections components.

  • Bug Fix: Added an option to promote 16bit index buffers to 32bit on load, which is needed for some Android devices (Mali T8X series). Activate it by setting "r.Android.MaliT8Bug" to 1.

  • Bug Fix: Fixed a mismatched depth/stencil buffer access type when adding a scenecapture2d in the scene on mobile preview.

  • Bug Fix: Niagara GpuSim fixed for Android. Disabled overlap compute on Android. Workaround for Mali Compiler bug that assumes a texture index is warp invariant.

  • Bug Fix: Moved mobileDepthPrepass Uniform buffer update to the start of the frame.

  • Bug Fix: Fixed an issue where the global shader is not recompiled after turning MobileHDR on or off.

  • Bug Fix: Fixed an issue with "Render in main pass" component option now works correctly on mobile.

  • Crash Fix: Resolved occasional crashes on iOS devices while using scene captures.

  • Crash Fix: Fixed a crash in Post Process Visualize Complexity when in ES3.1 preview mode.

  • Bug Fix: Disabled Vulkan support for Android devices with Mali-G72 GPUs that use Android 8 or older version. Those devices can't create a PSO with a compute shader that uses texel buffers.

  • Bug Fix: A8 textures are not writable in Metal. This change switches the backing to R8 and leverages Texture2DSample_A8 so we sample the correct channel.

  • Bug Fix: Fixed a small issue that local light's diffuse color was not correctly cosine-weighted.

  • New: The texture buffer is greater than the 2D texture for GPU Scene Mobile devices. This was done because of the MALI GPU limitation of 64kb texture buffer. The default precision of compute shaders to high precision was done because of the MALI GPU limitation of 64kb texture buffer. The GPUSceneUseTexture2D was changed requiring a recompile of all shaders.

  • New: Android projects will now use SensorLandscape as orientation and Immersive full-screen options by default. Previous engine versions were using Landscape and non-Immersive as defaults. If you would still prefer that setting, you can change it back from the project settings.

  • New: Added support for light shafts with MSAA on iOS. Makes all post process passes, including post process materials, work properly with MSAA on iOS.

  • New: Niagara GPUSim iOS/Android glGenVertexArrays, glBindVertexArray, glMapBufferRange, glCopyBufferSubData, glDrawArraysIndirect, glDrawElementsIndirect added One VAO bound per context now (different from Default VAO - indirect ES requirement).

  • New: Added an option on Materials for Forward shading (including mobile) to use EnvBRDF instead of EnvBRDFApprox to have a better IBL effect.

  • New: ImageBasedReflectionLighting now keeps coherence between mobile and PC.

  • New: LightMapPolicyType now keeps selection coherence between mobile and PC.

  • New: Added particle related material properties for Position, Time, Direction so that they can now be used on Mobile.

  • New: Emulated uniform buffers will now be used by default on OpenGL ES3.1. These buffers significantly reduce shader memory usage and often improve rendering performance slightly. You can revert to old behavior by adding "OpenGL.UseEmulatedUBs=0" into project DefaultEngine.ini file.

  • New: Corrected the Stationary Sky Light contribution for two sided primitives.

  • New: Fixed an issue of incorrect indirect lighting on movable objects because of the mismatch of SHCoefficients.

  • New: Added support for Post Process Material stencil test on mobile platform based on the new mobile custom depth implementation.

  • New: Changed mobile custom stencil format from B8G8R8A8 to G8. This saves depth to the R16F color target and uses less memory for the depth target to reduce memory cost on mobile platforms. Added a console variable for using half-res custom depth.

  • New: Hardware occlusion queries will now be enabled by default on Mobile platforms. Occlusion queries can be disabled on a specific mobile device by adding "r.AllowOcclusionQueries=0" to a corresponding platform's device profile.

  • New: Refactored GpuScene & UniformBuffer to unify mobile and console code paths.

  • New: Added ClearCoat shading model for mobile renderer.

  • New: Refactored the MobileBasepassPixelShader to make further shading model extension to be more easy and maintainable.

  • New: Saved some bandwidth for mobile post-processing by splitting RT from R16FG16FB16FA16F into R11G11B10 and R16F.

  • New: Implemented Eye Adaptation for mobile.

  • New: Added support for Eye Adaptation Lookup from material graph for mobile.

  • New: Added Android Desktop Forward Rendering (Experimental).

  • New: Fixed RandomSeed difference seen on different devices Function argument order evaluation is undefined.

  • New: Added 3x3 PCF shadows for mobile and support for texGather on ES 3.1

  • New: Added experimental support for Virtual Textures on mobile platforms. It requires IPhone8 or newer iOS devices, and preferably Vulkan on Android devices. Runtime Virtual Texture compression is not implemented yet. VT on mobile is disabled by default and should be enabled in the project settings.

  • Improvements: Improvements to Mobile Custom Depth:

    • Added a console variable "r.Mobile.CustomDepthDownSample" which if set to 1, will use a half-resolution custom depth texture.

    • Changed stencil format to G8, and depth format to R16F, both memoryless color targets to reduce memory cost on mobile platforms.

  • Deprecated: Removed ES2 support. See blog post on www.UnrealEngine.com for more information.

  • Deprecated: Removed ATC/ETC1 and Android PVR texture formats.

Optimizations

  • New: Replaced flipping "gl_Position.y" coordinate in HLSLcc by flipping viewports in Vulkan RHI (uses VK_KHR_maintenance1 extension). Primarily used to simplify the consumption of SPIR-V modules generated by DXC.

  • New: Added support for UAV overlap on Intel and renamed the console variable "r.D3D11.NVAutoFlushUAV" to "r.D3D11.AutoFlushUAV."

  • New: Fixed possible CPU stalls when using the GPU readback framework.

  • New: Use "TSherwoodMap/Set" instead of "TMap/TSet" for resource residency tracking and descriptor table deduplication in DXR implementation.

  • New: Added low quality setting for Distance Field shadow (uses 20 steps, no SSS).

  • New: Added runtime Distance Field GPU downsampling.

Post Processing

  • Crash Fix: Fixed a crash in shader complexity pass when visualizing complexity in a cooked build.

  • Bug Fix: Added a fix for bloom application in split screen. The "PostProcessTonemap.usf" now properly accounts for a restricted ViewRect on the Bloom input texture.

  • Bug Fix: Applied a fix for debug draw pass using MSAA depth instead of resolved depth.

  • Bug Fix: Fixed an issue with bloom being sampled incorrectly in tonemap pass.

  • Bug Fix: Fixed the visualizer for motion blur to accept the last pass override.

  • New: Changing default Exposure Bias for Auto Exposure to 1.0.

  • New: Locking eye adaptation exposure to 1.0 when auto-exposure is disabled.

  • New: Added ShaderComplexity support in cooked content. This requires the console variable "r.ShaderComplexity.CacheShaders=true" to be set in your .ini files.

Tools

  • Bug Fix: Passed through the DepthPriority parameter in PrimitiveDrawingUtils instead of hardcoded value.

Tools

  • Crash Fix: Fixed a crash in CrashReporterClientEditor occurring if the user closed the windows before the call stack was resolved, preventing the crash reporter from sending the crash report.

  • Bug Fix: Fixed FArchive not properly writing when byte swapping is enabled. The written value was swapped after being written and the swapped value was returned to the user.

  • Bug Fix: Fixed FString not swapping the bytes when the archive was written byte swapped.

  • Bug Fix: Fixed an issue where the HLOD Outliner would stop updating while Play-in-Editor was running.

  • Bug Fix: Fixed the HLOD MergeSetting for "LOD Selection Type" that was being overridden on load when saved to level instead of Blueprint Asset.

  • Bug Fix: Fixed DMX Gobo Rotation effect and added a texture mask.

  • Bug Fix: Actions are no longer posted to the right-click menu for the Curve Editor if the curve/key's parent curve is set to "read-only."

  • Bug Fix: Fixed an issue when importing a Skeletal Mesh that would sometimes cause the material slots to not be properly assigned.

  • Bug Fix: Renamed "UnrealDisasterRecoveryService" as "UnrealRecoverySvc" to shorten several build/install paths on Windows.

  • Bug Fix: Fixed an issue with SN-DBS compilation with precompiled headers. This change restores generation of the dummy include file of PCHs.

  • Bug Fix: Applied fixes for various custom debugger object views (from natvis).

  • New: VTune 2019 ITT Notify library update.

  • New: Enabled verbose output for SN-DBS code builds. This has been enabled by default to catch issues as they arise so that supported platforms can compile cleanly.

  • New: Changed the default minimum scope time for framepro captures from 25us to 50us. This is the default for framepro windows client live captures. It significantly reduces hitching from scope "FramePro Start Frame" when recording captures.

  • New: Added new DMX Fixture Content and removing old DMX Fixture content.

  • New: Added a new UDP Messaging option to change the message format used to encode UDP messages. The choices are "CBOR (Standard Endianness)" and "CBOR (Platform Endianness)".

  • New: Added a "Quit" menu along with the "CMD + Q" shortcut to close the Multi-User server window on Mac.

  • New: Added a choice to the HLOD Outliner for "No HLOD" in the HLOD level dropdown menu.

  • New: Added "Do not resave _BuildData.assets" in the HLOD rebuild commandlet as they aren't dirty.

  • API Change: This change list added a minor feature along with 2 bug fixes discovered while adding the feature.

AutomationTool

  • New: UAT: Change the default "DeployFolder" name to be "ShortProjectName-RootFolderName-UserName" truncated to 50 characters. This will deploy the same project from different streams, or users, to different workspaces. And, use the "DeployFolder" instead of the "ShortProjectName" for all platforms. The existing "-deploy=DeployFolder" argument can be used to specify any custom workspace name.

  • API Change: Make sure to use the new "DeployFolder" location in any command line parameters or debugger options when launching a deployed game.

UnrealVS

  • New: Added "TArray<*,FMemoryImageAllocator>" and "TMemoryImagePtr<>" visualizers.

  • Bug Fix: Fixed the project file generator to put the proper Engine PlatformExtension directory in the solution.

Virtual Production

3DText

  • New:

    • Switched to UStaticMesh-based components.

    • Characters are now instanced meshes, allowing faster text generation and transformation-based animations.

    • Characters are now cached at runtime for reuse.

    • Added text animation tools using Text3DCharacterTransform, which allows position, scale and rotation-based character animations.

    • Optimized speed of Kerning, Line Space, and Word Space.

    • Removed third-party libraries (FTGL, GLU-Tessellate).

  • New: Added a plugin that can create 3D charts based on data tables. The plugin currently provides 3 types of charts: Bar, Pie, and Line. All charts are fully customizable and support showing and hiding animations that can be triggered through an event. The plugin is still in beta.

Composure

  • New: Added the two-pass Color Difference Keyer to Composure, replacing the RGBtoHSV Material function and updated all references to it.

  • New: Added a new keyer based on color channel difference that provides the user with better results, especially when keying hair or transparent objects. Materials include additional functions, such as Alpha Erosion and Despill. Materials are structured to support a single-pass setup for Composite Planes and a two-pass setup for Composure.

  • Bug Fix: Fixed a bug when interpolating SceneTime from LiveLink frames to now use linear interpolation.

  • Bug Fix: Fixed incorrect background color of LiveLinkClientPanel when docked.

  • Bug Fix: Fixed default LiveLink preset to load when depending on other modules. Moved to PostEngineInit instead.

  • Bug Fix: Initialized the LiveLink source setting when connecting via Blueprint.

  • Bug Fix: Changed the name of LiveLinkMessageBusDiscoveryManager thread.

  • New: Changed how MobuLiveLinkPlugin reads reference time, so that it reads value set by reference time provider without adjusting for system time difference.

  • New: In Create LiveLink Timecode provider, added GetLiveLinkTime to LiveLinkBaseFrameData. Renamed FOnLiveLinkSubjectFrameDataReceived to FOnLiveLinkSubjectFrameDataAdded.

  • New: [LiveLinkComponent]

    • Subject Role was split into a hierarchy, in which each role class is assigned a controller.

    • Users can now select a specific controller for a role.

    • For each role class, Project settings were added to set a default controller.

  • New: Added a picker for LiveLinkSubjectKey.

  • New: Added support for multiple virtual subject sources to provide better extension flexibility.

  • New: Added a new LiveLink Axis Switch option to switch the translation unit.

  • New: A LiveLink Preset can now be loaded from a command.

Miscellaneous

  • New: Added a plugin that allows a cine camera to project textures and videos on selected objects. An alpha can be used with textures as a cut-out. An alpha can be generated using the new color channel difference keyer. The plugin is still in beta.

nDisplay

  • Crash Fix: Fixed cluster event packing from a slave node that could lead the engine to crash during a second Play in Editor session. JSON data was being generated in a wrong way.

  • Crash Fix: Fixed a crash when a non-nDisplay StereoRendering device is used with nDisplay active.

  • Crash Fix: Fixed a bug when nDisplay is used with instanced stereo enabled that could crash the engine.

  • Crash Fix: nDisplay sync components now unsubscribe from the replication process on EndPlay. This fixed some unexpected issues and crashes.

  • Bug Fix: Fixed the 32K limit in networking. The networking buffer size for nDisplay internal communication and cluster events is now a UINT (32 bits).

  • Bug Fix: Fixed a bug where DisplayClusterRootActor could not be found when located in a sublevel.

  • Bug Fix: Fixed synchronization issue. All replication data on a master node is now acquired on game thread.

  • Bug Fix: Fixed several issues with receiving/emitting nDisplay cluster events during Play In Editor.

  • New: The nDisplay Master node will now send its MessageBus interceptor settings to the cluster so all nodes use the same setup and avoid multi-user synchronization bugs.

  • New: Added the LiveLinkOverNDisplay plugin, which provides synchronized live link data across an nDisplay cluster.

  • New: Added mesh-based warp rendering. Added Chroma Key markers, allowing continuity rendering over multiple cluster nodes.

  • New: Created a new Actor type, DisplayClusterTestPatternsActor. It enables us to use both console and cluster events to control calibration patterns appearance. Supports custom patterns.

  • New: Integrated NVIDIA hardware-based Frame Lock and Swap Sync for Quadro and RTX Pro cards.

  • New: Added the option to assign an nDisplay instance to an available GPU from the configuration file.

  • New: Added a temporary warning display if a config path has spaces. nDisplay config files that have spaces in the path are temporarily disabled.

  • New: RootNode is now used as the default if a parent Component is not found for simple projection policy. If a screen for simple projection policy has a non-existent parent node, the nDisplay origin will be used.

  • New: Added Three-Layer Composition changes for In-Camera VFX, including the ability to ignore Actors for In-Camera VFX rendering.

*ake Recorder

  • Bug Fix: Recorded data in Take Recorder is now smoother.

Timecode

  • Bug Fix: Updated code to directly access FApp::GetTimecode instead of using the engine's timecode provider.

  • Bug Fix: Updated TimecodeSynchronizer to use the FApp flags instead of the GEngine flag.

  • New: TimedDataMonitor plugin was added. This adds a new way to configure and monitor different Timed Data Inputs such as LiveLink and MediaIO data. This adds interfaces a user can extend from so its data is automatically picked up by the monitor. It gives the user one central place to visualize different data sources alignment compared to the engine's evaluation point. This tool is meant to be used first before considering using TimecodeSynchronizer.

  • New: System timecode can now generate subframes.

  • New: A SystemTimecodeProvider can now be created when requested. Let the user change the CustomTimeStep and TimecodeProvider in the Project settings.

  • New: Added SubFrame delay for TC Provider and LiveLink.

  • New:

    • Replaced FTimecode with FQualifiedFrameTime in FApp.

    • If there is no TCProvider, you can now use TOptional in Fapp to invalidate the frame time.

    • Remove FTimecode for maths in LiveLink and nDisplay, only use timecode for display.

    • You can now use FTimecode::IsDropFormatTimecodeSupported to convert from FrameTime to Timecode.

    • You can now generate a default timecode value when no timecode is set. By default it's enabled and the framerate is 24 fps.

    • Added a CVar that sets the engine in DropFrame or NonDropFrame when the timecode is 29.97 or 59.94. Removed the Sequencer option to select between the two.

  • New: You can now set a frame delay in the Timecode panel.

  • New: Added the option to report dropped frames with Blackmagic Custom Time Step.

  • New: Added support for fractional timecode to the ARKit face protocol.

USD

  • Crash Fix: Fixed a bug when reading normals that were not varying per vertex on a USD geometry Actor.

  • Bug Fix: USD instances are now processed correctly when using the Import Into Level command.

  • New: The USD primitive Details panel now lists all attributes of the selected primitive and their values.

  • New: Added support for USD MetersPerUnit metadata when loading a USD Stage through the USD Stage Actor.

  • New: Universal Scene Description (USD)

    • Added auto-collapsing of all Geometry Actors under a Component type to achieve better performance.

    • Reloading a USD Stage will be faster as derived data generated from USD assets are now stored in the derived data cache.

    • Static meshes generated from USD primitives now have a physics body and VR scouting can be used to interact with them.

  • New: Added USD support for the Linux editor. The editor must be compiled with run-time type information (RTTI) enabled.

  • New: Extended the USD schemas translation framework to allow overriding a schema translator and adding support for custom USD schemas.

  • New: Added support for USD Point Instancers through the USD Stage actor. A point instancer is converted as a HISM component.

  • New: Multi-threaded the creation of the Static Meshes when loading a USD Stage, drastically reducing loading time.

  • New: Materials added to Actors spawned by the USD Stage will now be saved as custom Assets in the current USD edit target. When USD Stage reload, any custom UE4 Materials found in the USD data will supersede other USD materials. This behavior allows the user to set up the look in the engine using Unreal Material assets.

Video IO

  • Crash Fix: Fixed a bug the could cause the engine to crash when trying to use the HAP video codec with DX12

  • Crash Fix: A bug was fixed so that inputting a negative size in the Media Capture panel could no longer cause the engine to crash.

  • Bug Fix: Fixed incorrect category name for Avid DNxHD encoding.

  • Bug Fix: - Fixed AJA output timecode overriding timecodes of other channels.

  • Bug Fix: When outputting with AJA, a ready frame is no longer used when no frame is available. Frame capture is skipped when the gameplay thread is not executing.

  • Bug Fix: When outputting with AJA, the correct number of drop frames are now reported.

  • Bug Fix: The AJA Timecode provider frame rate is now capped to 30 when read from the reference pin.

  • Bug Fix: Fixed how the engine detects if an AJA card is already used, to better handle when Unreal Engine 4 crashes and leaves the card in an unpredictable state.

  • Bug Fix: Fixed InlineEditCondition for FileMediaOutput.

  • New: Added the AJA plugin.

  • New: Updated the AJA SDK to 15.5.1.2.

  • New: Added the AJA Auto-Detect button.

  • New: Added the Blackmagic Media plugin.

  • New:

    • Updated MediaIO to work with Timed Data Monitor.

    • Disabled LiveLink' ValidEngineTime and ValidTimecodeFrame setting by default.

    • Added the option to set the LiveLink MessageBusSource to Timecode by default.

  • New: When using an AJA media card, the name of the device app type being used can now be printed.

Virtual Camera

  • Bug Fix: Fixed log spam when using a custom tracker in VirtualCamera.

  • Bug Fix: Fixed incorrect string comparison that stops RemoteSession from finding the correct channel.

VirtualProduction Utilities

  • Bug Fix: Teleport to bookmark now takes the headset offset into account.

  • Bug Fix: Fixed flying feature in VR scouting. Replaced action type string TrackpadPositionX and TrackpadPositionY with TrackpadPosition_X and TrackpadPosition_Y in related blueprints.

  • Bug Fix: Fixed camera grabbing when snapping is on.

  • Bug Fix: Fixed crashing when in VR and Multi-User, where other machines may crash when one starts VR Mode.

  • New: You can now create an Actor that controls how to display Unreal Motion Graphics in fullscreen in different game modes.

  • New: Added Color Correction Volumes/Regions to the VirtualProductionUtilities plugin. These are used to blend real sets with LED wall extensions. Three-dimensional shapes, such as spheres, cylinders, and cones, can color correct pixels located inside of them, with an editable fade-out region.

XR

  • New: Reorganized XR rendering options. Single-pass stereo options are now consolidated.

    • Multi-View Direct is now automatically used for supported plugins when targeting Mobile.

    • Multi-View is now automatically used when Instanced Stereo is enabled.

    • Mobile HDR has been migrated to an XR rendering option and has to be disabled for Mobile Multi-View.

  • Improvement: Improved logging for remote connection failures.

  • Improvement: Scene capture and reflection capture in VR Mode use Grow rather than Resize in select cases to improve performance.

  • Removed: Leap Motion plugin removed from engine as it is no longer supported.

HoloLens

  • Crash Fix: The camera can be explicitly turned on or off at runtime, and defaults to off. This fixes a crash that only shows in newer HoloLens flashes and generally reduces power consumption for all HoloLens apps.

  • Bug Fix: HoloLens now uses its device profile rather than creating a default device profile.

  • Bug Fix: Fixed a crash while changing the IP address of the remote device.

  • Bug Fix: Added a warning if developers run with the wrong XRSystem active and trying to remote to HoloLens.

  • Bug Fix: Updated default minimum Windows 10 SDK for HoloLens packaging to version 10.0.17763.0.

  • Bug Fix: Fixed issues that would cause packaging plugins on HoloLens to fail due to incorrect architecture string.

  • Bug Fix: Interop projects now handle spaces in the path for custom build step.

  • New: Added support for mobile multi-view on Hololens

  • New: Exposed HandMesh for HoloLens.

  • New: Updated to latest HoloLens QR tracker plugin.

  • New: Exposed controller and hand-tracking status to WMRFunctionLibrary.

  • New: Implemented remoting from game.

  • New: Displays remoting connection status (connecting, connected, disconnected) in remoting settings window

  • New: Added webcam support for HoloLens.

  • New: Exposed hand state to C++.

  • New: Exposed hand joint radius so that a pointer can appear on the tip of the finger instead of the middle.

  • New: Returns a boolean whether hand tracking is supported.

  • New: Enabled HoloLens support for Microsoft Spatial Audio

  • New: Added HoloLens third camera MRC support.

  • New: Moved HoloLens input sim injection for controller tracking status to the HMD class.

    • The SpatialInput class only implements the IMotionController interface, but does not provide input sim data through the WMR function library. The function library directly calls the HMD function, so implementing it on that level covers both code paths.

  • Improvement: Changed failure reason on HoloLens Remoting connect logs from a numerical int to the enum value name.

AR

  • Bug Fix: Fixed a typo in a log message for attempting to start an AR session without a session config object.

  • Bug Fix: Fixed issue with converting UnrealTargetPlatform to string when parsing command line options Added a TypeConverter for UnrealTargetPlatform.

  • New: Added check if a typeconverter exists when parsing command line arguments

ARKit

  • Bug Fix: Changed ARKit to use the material-based method for camera image color space conversion and rendering.

    • The material based code path is enabled by MATERIAL_CAMERAIMAGE_CONVERSION=1 in the Build.cs file.

    • The CIContext based method can still be enabled with MATERIAL_CAMERAIMAGE_CONVERSION=0 but is reserved for testing purposes

Magic Leap

  • Crash Fix: Fixed vertex normal calculation for Magic Leap hand meshing, as using incorrect normals was crashing on low poly meshes.

  • Crash Fix: UpdateTrackedGeometry is called in FLuminARTrackedPointResource::UpdateGeometryData even if we couldn't get a valid position and orientation to update to. This addresses a crash that occurs within certain Blueprint functions (GetLocalToWorldTransform, for example) if Point does not have a valid ARSystem pointer during scene transitions.

  • Bug Fix: Added hooks into input focus callbacks for Lumin

  • Bug Fix: Fixed an error where legacy button code would send home button taps twice, resulting in behavior tied to home tap toggling on and off immediately.

  • Bug Fix: Fixed hand mesh winding order.

  • Bug Fix: Exposed mic mute state getter and setter.

  • Bug Fix: Fixed bugs with flushing audio buffer when device goes in standby.

  • Bug Fix: Updated deprecated functions in MLAudio and MagicLeapAudioCapture

  • Bug Fix: Fixed multiple input tracker creation and disabling mouse / keyboard input during VRPreview.

  • Bug Fix: Export Vulkan Command Wrappers FWrapLayer methods imported for Magic Leap and OpenXR plugins to avoid build breaks when VULKAN_ENABLE_IMAGE_TRACKING_LAYER is enabled.

  • Bug Fix: Fixed AndroidRelativeToAbsolutePath() for Lumin.

  • Bug Fix: Depth target is no longer rendered to MLGraphics in Zero Iteration.

    • Only reallocate the depth target if the requested size matches the expected size. This workaround is required because this depth allocation function can receive requests for targets other than the one for eye stereo render, such as when using a SceneCaptureComponent.

  • Bug Fix: Fixed ImageTracking not working on consecutive VRPreview launches.

  • Bigfix: Fixed an issue preventing light estimation from working when ARSession is restarted on the device.

  • Bug Fix: Fixed a Vulkan validation layer error for missed layout transition.

  • Bug Fix: Fixed planes not working on consecutive VRPreview runs when using the AugmentedReality interface.

  • Bug Fix: Added a workaround fix MRMesh flickering on Vk desktop renderer. Enable mesh occlusion when the MRMesh is connected to the MagicLeapTrackerComponent. Since this happens after the MRMeshProxy is created, modify SetEnableMeshOcclusion so that it updates the proxy's value as well.

  • Bug Fix: Fixed flickering caused by garbage data being used for the bounds in a frustum/bounds visibility check.

  • Bug Fix: During tangent generation, normals are now generated by adding the normal of each triangle that a vertex is part of and then normalizing the result. This removes the need to add a separate iteration over the mesh just to do normalization.

  • Bug Fix: Hands now support one-sided materials.

  • Bug Fix: Reset worker thread setup for image tracking so it restarts on consecutive VRPreviews.

  • Bug Fix: Fixed file permissions on Mac binary builds to replace existing artifacts for lumin.

  • Bug Fix: Added a missing config property to allow developers to manually call the lifecycle set ready notification function.

  • Bug Fix: Re-install app on device if it is uninstalled outside of Unreal context during consecutive LaunchOn iterative deployments.

  • New: Defined a PLATFORM_SUPPORTS_VULKAN preprocessor flag for Magic Leap.

  • New: Exposed function to indicate if the user is holding a controller in hand.

  • New: Added some helper methods to convert between motion sources and hand keypoint enums.

  • New: Added events in MagicLeapImageTracker to notify when a target has been added in the backend, exposing all functionality via direct C++ calls in the module.

  • New: Added PLATFORM_SUPPORTS_VULKAN in MagicLeapOpenGL module.

  • New: Updated Magic Leap SDK to .23 - includes changes to support new externally-owned Vulkan semaphores.

  • New: Implement setting Lumin thread affinities via a config file.

  • New: Added MagicLeapConnections plugin.

  • New: Updated the MagicLeapContacts plugin.

  • New: Update privileges for the 0.23 Magic Leap SDK.

  • New: Moved MagicLeapARPin interface into its own plugin called MagicLeapPassableWorld. This is re-implemented as a ModularFeature and will be used in the Magicverse plugins as well on iOS and Android. The MagicLeapPassableWorld also contains MagicLeapSharedWorld helpers.

  • New: Pass depth buffer to MLGraphics Improve frame synchronization in MagicLeapMetalCustomPresent.

  • New: Implement LocationServicesBPLibrary interface for MagicLeapLocation plugin.

  • New: Update privilege management in AppEventHandler, update available privileges in the 0.23 SDK, and some cosmetic updates to the MagicLeapMedia plugin.

  • New: Refactored MagicLeapAR module - fold FLuminARFrame, FLuminARSession and FLuminARDevice into FLuminARImplementation.

  • New: Implemented LightEstiamtion, ImageTracking in MagicLeapAR. This requires small updates to the AugmentedReality interface itself.

  • New: Added the new MagicLeapMovement plugin, and updated deprecated function usage in MagicLeapMusicService plugin.

  • New: Added Support for localized app names and icons.

  • New: Magic Leap: Implement persistent planes queries to MagicLeapPlanes. Force request LocalAreaNetwork privilege on Lumin if a map travel is requested via the command line

  • New: Magic Leap: Add MagicLeapCVCamera module

  • New: Add support for debugging Blueprint-only projects on Lumin via Visual Studio.

  • New: Updated default device profiles and runtime settings config for Lumin

  • New: Exposed input focus events in the LuminApplicationLifecycleComponent.

  • New: Expose raw perf numbers given by the MLGraphics api.

  • New: Added functions for querying platform API level.

  • New: Add 'MagicLeap' prefix to MeshTrackerComponent.

  • New: Added blueprint callable function to set whether to use triangle weights when calculating the vertex normals. False by default, as this is slightly more expensive and doesn't have a huge impact.

  • New: RemoveHandleIf now takes in a higher-order function that is applied to every stored handle if the geometry type matches. When the applied function returns true, the tracked handle stops tracking and is removed internally. Users of the tracking system can perform additional removal behavior as they see fit via the input function.

  • Improvement: Supplied a box based on the HMD position and orientation.

  • Removed: Deleted unused TextureReader class.

  • Removed: Removed GetTrackableHandleMap from the ARTrackingSystem interface. Instead, a new function RemoveHandleIf is used to set the StoppedTracking state and remove the handle.

  • Removed: Removed FLuminFileMapper, as it was returning the same names without case changes.

  • Removed: Removed deprecated fixation comfort api from MagicLeapEyeTracker.

  • Removed: Removed explicit caching and re-sending of the current mesh data. This is not required because MRMesh keeps a local cache of the current data to be rendered. We only need to send new data when we want to update the mesh.

VR

  • Crash Fix: Fixed resource transition with SteamVR on Vulkan to avoid an assert on SteamVR startup.

  • Crash Fix: Addressed a crash that occurs during Ovr Avatar shutdown due to delay load helper throwing an exception when the module has been unloaded.

  • Crash Fix: Fixed a crash that occurs during Oculus room invites

  • Crash Fix: Fixed an assert on ending PIE or closing an app using D3D12 and SteamVR. This also fixes other potential issues around lifetime with D3D12 and Vulkan textures with the XrSwapChain class and resource aliasing.

  • Crash Fix: Fixed out-of-order shutdown crashes with Oculus Avatar plugin.

  • Bug Fix: Fixed a bug preventing developers from mapping actions to the Oculus Touch's menu button.

  • Bug Fix: Switched XrSwapchain and SteamVR to use the new RHICreateAliasedTexture API. This prevents a redundant/dummy texture creation during initialization.

  • Bug Fix: Added D3D12 renderbridge implementation, including a SteamVR bUseExplicitTimingMode flag to ensure thread-safety in DX12.

  • Bug Fix: Fixed Vulkan timer query buffer overflow.

  • Bug Fix: Removed redundant swapchain re-creation when switching modes (Example: VRMode/PIE and back).

  • Bug Fix: Addressed an issue where fragment density map in Vulkan (when using Vulkan foveation) is added in the renderpass, but not in the renderpass attached to the graphics pipeline.

  • Bug Fix: Fixed a bug where default bindings weren't correctly generated for SteamVR if the manifest file didn't exist, causing packaged games to have no bindings and motion controllers not to be tracked.

  • Bug Fix: Fixed hitching that occurs on Oculus when a level contains uninitialized or hidden stereo layers when entering VR preview.

  • New: Implemented SteamVR high-quality stereo layers by implementing a plugin-specific stereo layer shape.

  • New: Updated OVRPlugin to version 1.45.

  • New: Implemented Oculus Audio update, adding support for Arm64 on Quest.

Windows Mixed Reality

  • Bug Fix: Changed status text delegate binding from BindRaw to BindSP to fix an occasional AV on ExecuteIfBound.

  • Bug Fix: Updated status text to use a non-deprecated SetText override.

  • Bug Fix: Disabled rendering when headpose is lost. In these cases the system dialog takes over.

  • Bug Fix: Fixed audio cutting out when VRPreview window is not in focus.

  • Bug Fix: Fixed use of finger transform buffer that will be freed rather than the local copy we make for one hand.

  • Bug Fix: Fixed a bug in SpatialStageFrameOfReference that would cause camera height to decrease when tracking is lost.

  • New: Implemented simulation for button press state in the Windows Mixed Reality HMD.

  • New: Implemented new input simulation module for the WindowsMixedReality plugin. This module provides an engine subsystem that stores generated data for replacing device input in case no HMD is connected.

Programming

  • Deprecated: The MeshDescriptionOperation module has been deprecated. It's utility functions are being moved over to the StaticMeshDescription module.

  • Bug Fix: Removed the duplicated object name from output paths when performing an Advanced Copy operation.

  • Bug Fix: FXmlFile now supports the ">" character within attribute strings. It doesn't need to be escaped in a valid xml file.

  • New: Static Meshes and cached Mesh Draw Commands are now generated in parallel. Watch out for any race conditions that might arise in code that is called downstream.

Upgrade Notes

Animation

Animation Blueprints
  • Changed AnimNode Layer Blend Curve Options to:

    • Override

    • DoNotOverride

    • NormalizeByWeight

    • BlendByWeight

    • UseBasePose

    • UseMaxValue

    • UseMinValue

  • "MaxWeight" is now called "Override".

Blueprints

  • Merged UK2Node_LatentOnlineCall into UK2Node_AsyncAction, and moved it from the Kismet module into BlueprintGraph. If you have a custom K2 node derived from either you may need to update your module dependencies or remove your subclass and add a redirector to your DefaultEngine.ini.

Core

UProperty

This is an API breaking change.

  • Converted UProperties to FProperties. This means that internal Engine objects that represent member variables of UClasses will no longer be UObjects themselves. This results in memory overhead reduction (123 bytes per property on average) and improved performance when constructing, destroying property objects, when collecting garbage and iterating over all objects. Property casts and property iteration is now faster too.

    • U*Property classes have been renamed to F*Property classes so all references to UProperties in your project code should be updated

    • FProperties use different Cast functions (CastField / CastFieldChecked) so all property casts should be updated in your project game code.

    • UPROPERTY() UProperty* MemberVariable; declarations should be replaced with UPROPERTY() TFieldPath<FProperty> MemberVariable;. It still is a Garbage Collector exposed hard reference with PendingKill support (becomes null if the owner UStruct is PendingKill) and automatically serialized with SerializeTaggedProperties with automatic conversion on load for all existing saved references to UProperties in packages.

    • TFieldIterator<UField> no longer iterates properties, use TFieldIterator<FProperty> instead

    • FindField has been split into two functions: FindUField and FindFProperty. The former should be used to find member Functions or Enums, the latter should be used to find member variables.

    • FProperties are no longer constructed with NewObject, use C++ new instead

    • UStruct::Children linked list no longer contains properties. Use UStruct::ChildProperties instead.

    • FArchive derived classes that collect UObject references now need to override virtual FArchive&amp; operator &lt;&lt; (FField*&amp;) to catch FProperty references. All existing cases that needed it should already support it.

    • There's no FProperty::GetOuter(). Use FProperty::GetOwner() instead. The reason is that Outers are an UObject thing. FProperties are now owned by their parents in a more explicit way.

    • There's a helper structure called FFieldVariant that acts as a container that can be either UObject or FProperty. It's used in a few places across the codebase to ease the conversion to FProperties where otherwise a separate, almost identical version of the existing function would have to be created. However, the goal is to remove it eventually as the affected system owners will be upgrading their code.

    • In editor builds, there's a helper UPropertyWrapper class that's used by Details Panels to pass FProperty references around. Again, this was to prevent doing very extensive changes to systems that only actually deal with FProperties as editable objects in a handful of places.

DevTools

AutomationTool
  • New: Added BuildCMakeLib UAT automation script for building third-party libraries that use CMake.Use this to support platform extension and to rebuild some of the third party libraries that the engine provides.

    For example, if the binary library output is located in Engine/Source/ThirdParty/ExampleLib/examplelib-0.1/lib/PlatformName/Release/ExampleLib.a

    • You could run the following command to build that lib:

      RunUAT.bat BuildCMakeLib -TargetLib=ExampleLib -TargetLibVersion=examplelib-0.1 -TargetConfigs=relase+debug -TargetPlatform=PlatformName -LibOutputPath=lib -CMakeGenerator=Makefile -CMakeAdditionalArguments="-DEXAMPLE_CMAKE_DEFINE=1" -MakeTarget=all -SkipSubmit
    • The -LibOutputPath command line is to override the directory that libraries are stored in, the default is to not place the output inside an additional directory.

    The script is currently intended to be run once for each platform, as the expected CMakeGenerator may differ per platform.

    The script will attempt to find the CMakeLists.txt in a number of locations, first in the root of the library directory for example, Engine/Source/ThirdParty/ExampleLib/examplelib-0.1/then in BuildForUEinside that root and then a per platform BuildForUE,which may either be inside the platform extension's source e.g. Engine/Platforms/PlatformName/Source/ThirdParty/ExampleLib/examplelib-0.1/BuildForUE or inside the third party root's directorye.g. Engine/Source/ThirdParty/ExampleLib/examplelib-0.1/BuildForUE/PlatformName.

    -TargetLibSourcePath= can be used if the source for the library is external to the engine and only the binaries are stored with the engine. In that case the path should be to the root where the CMakeLists.txt is stored.

UnrealBuildTool
  • Changes to child plugins and platform extensions:

    • Added support for white-listing additional plugins in the child plugin.

    • Added support for adding additional modules to child plugin extensions.

    • Child plugins can now override SupportedTargetPlatforms if it is not defined in the parent.

    • Monolithic programs inside platform extensions can now output to the Binaries directory in the extension instead of the main Engine binaries directory. Previously, if SupportedTargetPlatforms was not defined in the parent plugin but was defined in the child plugin, it would have been ignored, meaning all platforms would be supported. Child plugins can now override SupportedTargetPlatforms, which means that if SupportedTargetPlatforms is not defined in the parent plugin, it will start from a base list of no platforms being supported for that plugin. Child plugins cannot remove SupportedTargetPlatforms from other child plugins. If you have child plugins where the parent plugin does not use SupportedTargetPlatforms, you will need to make sure to remove the SupportedTargetPlatforms from the child to return to the original functionality.

Editor

Sequencer
  • The IMovieScenePlayer interface's UpdateCameraCut method was changed: it now takes the new camera object, and a parameter structure. The parameter structure contains what was previously passed as loose arguments, plus some new blending information.

Gameplay Framework

  • Replicated properties in AActor, UActorComponent, and USceneComponent are no longer marked deprecated, but are now private. Replace direct usage of these variables with calls to accessor functions.

  • AActor::bAutoDestroyWhenFinished is now private. Replace direct references to this variable with calls to AActor::GetAutoDestroyWhenFinished and AActor::SetAutoDestroyWhenFinished.

Networking

  • Moved ResizableCircularQueue.h from Engine/Net to Core/Net. Anywhere that you have included this file, change "Engine/Net/ResizableCircularQueue.h" to "Core/Net/ResizableCircularQueue.h".

Socket Subsystem
  • The commandline flag "-PRIMARYNET" has been dropped due to its obsolescence; GetLocalHostAddr will perform the same operation without the flag specified.

Online

  • The Steamworks build script now supports updating or changing the SteamSDK to specific versions. In Steamworks.build.cs, the variable SteamVersionNumber now controls all the versioning for the SteamSDK.

  • Changes to IVoiceChat interface:

    • VoiceChat.h has moved from Engine/Source/Runtime/Online/Voice/Public/Interfaces to a new VoiceChat header-only plugin in Engine/Plugins/Online/VoiceChat/VoiceChat/Source/Public. This header can be included by adding "VoiceChat" to the PublicIncludePathModuleNames/PrivateIncludePathModuleNames in Build.cs files as necessary.

    • The variable FVoiceChatResult::bSuccess has been replaced with the function FVoiceChatResult::IsSuccess.

    • Added an enum called FVoiceChatResult::ResultCode, providing a success value and a variety of error values.

    • FVoiceChatResult::ErrorCode changed from an int to an FString. This avoids collisions, and allows for both shared error codes (such as errors.com.epicgames.voicechat.not_initialized), and implementation-specific ones (such as errors.com.epicgames.voicechat.vivox.missing_config). The intent is that errors will be mapped to one of the common error categories in EVoiceChatResult if possible (or EVoiceChatResult::ImplementationError if none apply), and to one of the common error codes in VoiceChatErrors.h. If no common error codes apply, then the implementation can provide its own error codes (see VivoxVoiceChatErrors.h for reference).

    • FVoiceChatResult::Error has been renamed to ErrorDesc. The intent is for this to provide additional information for logging.

  • Changes to VivoxVoiceChat plugin:

    • Errors originating from the plugin (not the SDK) which were previously reported with a small negative integer and FString (for example, -2 and "Not Connected"), have been changed to provide error categories and string codes (for example, EVoiceChatResult::NotConnected and errors.com.epicgames.voicechat.not_connected).

    • Numeric errors originating from the Vivox SDK itself were previously reported directly in the ErrorCode. These are now mapped in the following ways:

      • Where possible, some errors, e.g. VX_E_NOT_INITIALIZED are mapped to common error categories and codes, in this case EVoiceChatResult::NotInitialized and "errors.com.epicgames.voicechat.not_initialized".

      • Some errors are not mappable to common error codes and are therefore mapped to vivox specific error codes, with the error category EVoiceChatResult::ImplementationError. For example, VX_E_CALL_TERMINATED_KICK is mapped to the error code "errors.com.epicgames.voicechat.vivox.kicked_from_channel".

      • Any errors that are not mapped to specific error codes are reported as EVoiceChatResult::ImplementationError and "errors.com.epicgames.voicechat.vivox.".

      • The actual numeric error code and status string sent by the SDK are provided in FVoiceChatResult::ErrorDesc in the format "StatusCode=%d StatusString=[%s]" \ Please look in VivoxVoiceChat.cpp and especially FVivoxVoiceChat::ResultFromVivoxStatus to see the current mapping.

  • USocialManager::bLeavePartyOnDisconnect has moved to USocialSettings. Config files referencing the old location will need updating.

Platforms

All Mobile
  • Renamed the mobile "Support Distance Field Shadows" setting to "Support Pre-baked Distance Field Shadow Maps" and improved the tooltip to reduce confusion with the desktop Distance Field Shadows feature.

Android
  • Updated Android toolchain to NDK 21 (20 is also supported for x86_64). See the new Android setup documentation using Android Studio and Engine/Extras/Android/SetupAndroid scripts.

  • Refactored com.epicgames.ue4.network.NetworkChangedListener to com.epicgames.ue4.network.NetworkConnectivityClient.Listener. The NetworkChangedManager now conforms to the com.epicgames.ue4.network.NetworkConnectivityClient interface. Existing calls to NetworkChangedManager.addListener(Listener listener) and NetworkChangedManager.removeListener(Listener listener) will supply the above updated Listener class instead of the old NetworkChangedListener.

  • The NetworkChangedManager now determines the connectivity through a combination of Android system network callbacks to determine connectivity, then verifies connectivity by performing an empty HEAD request to "https://example.com/ ". Should this request fail, the manager will indefinitely continue to retry against this URL with an exponential back-off up to the NetworkChangedManager.MAX_RETRY_SEC. This constant defaults to 13 seconds.

  • OpenGL on Android will now use a separate thread (RHIT) for graphics commands submission. Older engine versions had RHIT disabled by default. To disable RHIT in 4.25, add r.OpenGL.AllowRHIThread=0 into your project DefaultEngine.ini.

Rendering

  • HLOD proxy meshes can now cast dynamic shadows.If you want to keep the old behavior without adjusting your data, you can set the r.HLOD.ForceDisableCastDynamicShadow cvar to 1

FX - Niagara
  • Niagara now features the Niagara Platform Set, a new feature for controlling which platforms use certain aspects of Niagara. Current users include:

    • Emitter Enabled/Disabled switch

    • System-level scalability settings in EffectType, and overrides in System

    • Emitter-level scalability settings in EffectType, and overrides in Emitter This entirely replaces the previous Detail Level feature. Users now select from Quality levels as a basic use case for scaling across platforms. Further fine grained control can be achieved by setting per device profile overrides to this. For example, all Quality levels could be enabled but Android, iOS, or some subset of mobile devices could be specifically disabled. Quality Level is controlled by fx.Niagara.QualityLevel. Emitters are optionally pruned from cook when disabled by fx.Niagara.PruneEmittersOnCook. Old projects that had custom setup for Niagara Detail Level will have to update their systems to the new setup. Projects using default detail levels will automatically update.

  • Updated module graph UI to better support parameter default modes. Changes:

    • "Value" mode variables do not allow connections to their input pins

    • "Binding" mode variables are hidden completely

    • Changing the default value in the details panel automatically updates all the graph nodes

    • Existing graphs are validated and updated on PostLoad Old assets should automatically be updated to the new schema. If the default value pins are connected to a subgraph to initialize the value, then the default mode is automatically set to "Custom", otherwise it is set to "Value" and the pins are marked as read-only.

  • Data Interface functions which need per-instance data can now be called from custom HLSL on CPU emitters. This required changing the order in which parameters are passed to DI functions on the CPU. Specifically, the instance data pointer is now the first input parameter, instead of the last. If you have custom data interfaces which use per-instance data, you need to update the code to read the user pointer first instead of last, for example: ``` VectorVM::FExternalFuncInputHandler FirstInput(Context); VectorVM::FExternalFuncInputHandler SecondInput(Context); VectorVM::FUserPtrHandler InstData(Context); // last input VectorVM::FExternalFuncRegisterHandler Output(Context); ``` becomes: ``` VectorVM::FUserPtrHandler InstData(Context); // first input VectorVM::FExternalFuncInputHandler FirstInput(Context); VectorVM::FExternalFuncInputHandler SecondInput(Context); VectorVM::FExternalFuncRegisterHandler Output(Context); ```

  • Updated Niagara modules, dynamic inputs and functions to use the new explicit RandomRangeFloat and RandomRangeInteger functions from CL # instead of the old RandomRange helper. This might have breaking changes for non-deterministic CPU-side random numbers, as the upper bounds will be off by one compared to earlier for integer based types (booleans, enums, regular integers).

  • Added FGPUSortManager that handles different GPU sort tasks. The current clients for it are Cascade and Niagara. Added a framework to allow any system to send GPU sort tasks (like sorting particles).

  • The emitter execution order takes into account events, so that emitters which consume events run after the emitters which produce those events. This makes it possible for events to be delivered in the same frame as they are generated, removing the need for extrapolation in most cases. Set "Gap Correction Amount" to 0 on any "Generate Location Event" modules you are using. If you are performing manual position extrapolation on received events, disable it and verify that the values are correct. Manual extrapolation may still be necessary for spawn events if the source emitter is using interpolated spawning, since there's no equivalent for interpolated spawning on event scripts.

  • Niagara ribbons are now preserving multi-ribbon ordering, in order to prevent random flickering when the camera moves around. Disabled multi-ribbon ordering when using opaque materials. Fixed random flickering when using multi-ribbon in Niagara.

  • Added support for uint32 vertex indices when using Niagara ribbons. Fixed a bug with Niagara ribbons when requiring more than 16-bit indices.

Known Issues

For a complete listing of known issues affecting Unreal Engine 4.25, please see the Unreal Engine Public Issue Tracker .

Select Skin
Light
Dark

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见