虚幻引擎4.26版本说明

虚幻引擎4.26版全新及更新功能概述

Choose your operating system:

Windows

macOS

Linux

新功能

虚幻引擎4.26发布后,你可以 创建环境、角色、无比逼真的生物,并围绕虚幻引擎设计整个开发管线

你可以通过头发、毛发和羽毛系统(已可投入实际应用) 设计最逼真的人类和动物 。你可以将体积云组件与天空大气和天空光照结合使用,以充分的艺术自由 创作和渲染逼真或风格独特的天空、云、和其他大气效果 。你可以通过新的水系统 在地形中创建逼真的水域 ,与角色、载具和武器互动。功能集改进并扩展后,除了刚体外,你现在可以通过Chaos物理系统 模拟载具、布料和布娃娃 ,环境的各个细节都能栩栩如生。

Sequencer现在可结合Control Rig和全新的全身IK解决方案使用, 可在Sequencer内部创建新动画 ,从而减少使用外部工具的需求。影片渲染队列(此前称为高质量媒体导出)已经过增强, 支持渲染通道,使下游复合应用中的最终图像进一步加强 。除了 能够以更高帧率渲染更多像素 ,nDisplay 多显示器渲染的设置和配置更轻松,从而提高性能并使用现有硬件支持更大的LED体积。协作查看器模板已大幅改进, 可增强协作设计查看体验,并使更多的用户加入会话 。远程控制API改进后,可将虚幻引擎中的属性和功能与UI控件无缝连接,使用户能够 从外部设备快速更改属性 ,如舞台上美术师通过 iPad 更改天空旋转或太阳位置。

此版本中包括GitHub上虚幻引擎开发人员社区提交的改进!感谢以下虚幻引擎4.26贡献者:adamnv, Aintaer, aknarts, Antonrr, bitdewy, blakeanator, broly, ckendal3,codeslicer0,D3adKnight,dd-sbinet, DecoyRS, dogles, doublebuffered, drichardson, erebuswolf, eugene-rho, geordiemhall, gmpreussner, gunsungithub, HafdisE, hgamiel, HSeo, iwlasny, jackknobel,jessicafalk, jgilbert-ca, jiahuah-owi, JorgeQuesada, jpark37,kristjanvalur, KristofMorva, LizardThief, lolmx, Magic Leap, Mattiwatti, mengran3275188,MichaelBell, Microsoft, moppius, muchcharles, muchcharles, nklose, Oculus, projectgheist,RPG3D, SertacOgan,Skylonxe, smallshake, stephan-nordnes-eriksen, The Coalition,tommybear, valval88, Vawx, vsolobay, yaakuro,Zeblote, zompi2

主要功能

毛发、毛皮和羽毛已可投入实际应用

随着本版本的发布,我们无比兴奋地宣布,毛发渲染系统现已就绪,并可随时可投入实际应用!在过去的几个版本中,我们一直在改善毛发渲染的视觉效果,使其在中高端设备上具有高性能和可扩展性,并且在虚幻引擎中支持更广泛的功能。

image alt text

Groom资产编辑器

在全新的Groom资产编辑器中,属性编辑器被替换为一个全功能编辑器,允许你在单独的视口中编辑导入的Groom的视觉效果。

在Groom资产编辑器中,你将能够:

  • 对Groom进行插值、发束外观和长度、物理等方面的微调

  • 使用编辑中工具生成和设置发束、发片和网格体细节层级(LOD)

  • 管理各种毛发的外观材质

更多信息,参见 毛发渲染 和Groom资产编辑器文档。

天空、云层和环境光照

此版本达到了前所未有的高度,将来自天空、大气和云系统的动态昼夜变换光照带到大型场景中。我们还添加了统一窗口,可以在单独的位置创建和编辑这些环境和光照组件。

体积云

我们添加了新的云渲染系统,用于大规模的云景和大气雾,提供了全动态的材质驱动型工作流,可以在主机和桌面平台上以可扩展质量创建云。该系统支持实现电影和电视制作的电影级质量。

材质驱动型工作流提供美术师友好型方法,该方法使用体积纹理创建任意数量的云类型和变体,包括向大气中延伸的浪云、沉闷的阴天甚至是可以与你创建的天气效果结合的旋风。

image alt text

云系统完全集成并支持与来自天空大气、天空光照和两个定向光源(代表太阳和月亮)的环境光照的交互。快速上手云系统的使用,将 体积云 组件拖动到场景中并为它分配具有体积纹理的材质。你可以在引擎内容文件夹Engine/EngineSky/VolumetricClouds/m_SimpleVolumetricCloud中找到已为你设置好的入门云材质示例。

更多信息,参见体积云文档。

天空大气组件改进

这一版本的天空大气组件新增和改进了几个功能,使用起来更方便,提高了整个项目的质量。

image alt text

  • 天空现在可以接收来自不透明网格体和体积云的阴影。

    • 启用 在大气上投射阴影(Cast Shadows on Atmosphere) 和在定向光源上 投射云阴影(Cast Cloud Shadows) ,以支持大气阴影。

    • 使用 云阴影强度(Cloud Shadow Strength) 大气上的云阴影强度(Cloud Shadow on Atmosphere Strength) 控制阴影强度。

    • 可以通过设置适当的阴影贴图分辨率和阴影覆盖范围来控制不透明阴影距离、深度偏差和可伸缩阴影贴图分辨率,从而实现良好的性能。

    • 云还会遮挡其下方多次散射的大气。这种环境光遮蔽是创建黑暗险恶风暴的重要工具。

  • 使用滑块对用于追踪大气的样本进行计数,从而提高可扩展性。

    • 追踪大气时,启用不透明网格体或云的体积阴影需要更多的样本,以确保捕获所有的体积阴影细节。采样质量现在可以在天空大气组件上调整。

    • 对于过场动画,要获得较高质量的效果,可以使用控制台变量r.SkyAtmosphere.SampleCountMax提高样本计数上限,并在天空大气组件的属性字段中键入较高的值。

详情请参阅 天空大气 文档。

实时天空光照捕获

天空光照现在支持对大气、云、高度雾和不透明网格体(使用启用了"为天空"的无光照材质)的实时场景捕获,与蓝图节点相比,效果更佳,速度更快。天空光照上的 实时捕获(Real Time Capture) 模式在GPU上执行所有计算,不会在捕获场景时产生任何CPU回读解析故障。

详情请参阅 天空光照 文档。

环境光源混合器

新的 环境光源混合器(Environment Light Mixer) 将用于天空、云、定向光源和天空光源的环境光照组件纳入同一个窗口,便于访问和编辑。设计师和美工可从此窗口中创建和编辑这些组件,并选择属性面板显示的细节层级。

image alt text

在主菜单的 窗口(Window) 下拉菜单下选择环境光源混合器,即可在你的场景中使用它。

详情请参阅 环境光源混合器 文档。

水体渲染和网格划分系统(实验性)

我们拥有一个功能齐备的全新水渲染和网格体系统,它支持大型开放世界,你可使用基于样条的工作流快速创建河流、湖泊和海洋。水系统还提供了统一的着色和渲染管线集成以及表面网格体,支持游戏的物理交互和流体模拟。

image alt text

image alt text

水(Water) 插件利用现有的 Landmass 插件,使水体Actor能够使用无损级的 地形编辑图层 功能与地形表面交互。

image alt text

水系统代表了世界编译的两个功能组件,编译和编辑河流、湖泊和海洋以无缝地与你的世界融合,以及使用材质和后期处理来定义外观和感觉的渲染和着色管线。

水渲染和着色功能

水渲染管线做了许多改进和增强,并包含大量属性,可以帮助定义你的世界中水的外观。这意味着你能够创建自己的材质,或者可以从引擎随附提供的可编辑默认材质着手。你可以从一开始就创造出任何类型的水,并拥有你定义的外观,比如浑浊的湖泊,流动的河流,或者美丽的蓝色海洋。

以下属性和功能可用于执行水渲染和着色:

  • 一种水下后处理材质,基于摄像机位置自动应用,允许部分浸没在水中。

    image alt text

  • 水体类型之间的具体转换是由材质所驱动的,如流动的河水转换到平静的湖泊。

    image alt text

  • 一种散焦线生成工具,帮助你定义和渲染自己的散焦材质,可以应用于浅水表面下。

    image alt text image alt text

  • 一种单层水着色模型,提供具有一个深度图层的物理水面,支持折射和用户定义的散射、吸收和消光系数。

水体Actor和编辑

无论你是在小场景还是在开放性世界中添加水,相关的创建和编辑工作都应该是相当无缝且毫不费力的。利用水体Actor,你可以从各种各样的水体类型中进行选择,它们可以放置在你的关卡中来表示水,例如河流、湖泊和海洋。基于样条的工作流使这些水体类型看起来直观且容易上手,并可快速创建和编辑你的关卡。

新的水体Actor拥有以下功能:

  • 使用不同的水体Actor创建或简单或复杂的世界,支持混合和编辑地形表面。像地形一样,水体网格体使用放置的图块基于距离动态地缩放,以实现高度的曲面细分,使近距离水表面清晰,远距离水表面略粗糙。

    image alt text

  • 水体采用高度可定制的盖斯特纳波模拟,可用于创建简单或复杂的水面,以更简单的方式创建和编辑放置于在世界场景中的每个水体的外观。

    image alt text image alt text

  • 利用基于样条的工作流,可以快速编辑和复制水体以填充你的世界。

    image alt text

  • 一种交互式流体物理模拟,可在水面上实现角色和对象互动。代表示例有水波纹、泡沫和溅起的水花。

    image alt text

影片渲染队列的工作流及功能强化(测试版)

此版本通过添加新的工作流和导出功能,对 Movie Render Queue (原名为High-Quality Media Export)的功能做了进一步的扩展。

全新工作流

有数个全新的工作流支持导出和渲染:

  • 支持Final Cut Pro XML到EDL

  • OpenColorIO集成

  • 支持实现在运行时进入用户自己的应用程序

image alt text

渲染通道支持

为生成用于标准制片流程(例如样片、后期、剪辑等)诸多方面的内容,渲染影片队列(Movie RenderQueue)在新版本中能在单独的通道中渲染不同数据。当前支持以下通道:

  • Matte IDs (Limited) / User Defined Layers

  • Z深度

  • 世界位置

  • 世界法线

  • 环境光遮蔽

  • 反射

image alt text

除通道之外,还有其他数项改良:

*可以启用或禁用单个镜头,以隔离要渲染的特定镜头。

*现在可以将队列保存到资产中,该资产会存储当前作业、设置和镜头蒙版。

*某些配置现在可以逐镜头调整。

此外,新版本还对使用第三方渲染管理工具(如Deadline)简化导出和批量渲染进行了一些UI UX改良。

专业媒体编码解码器支持

Render Movie Queue现支持以下编码解码器:

  • Apple ProRes(更高的位深度 10-12位)

  • Avid DNxHR(810-12位)

  • 多通道EXR (16、32位)

image alt text

以下是支持的EXR压缩设置:

  • 无压缩

  • PIZ

  • ZIP

image alt text

你可以在 渲染并导出Sequencer的内容 查阅与Render Movie Queue相关的所有文档。

Sequencer非线性动画(NLA)工具(测试版)

借助非线性动画,你可以快速创建、修改、添加和混合动画资产,以便创建新的动画和过场动画。它改进了与动画序列有关的重用和创建流程,这对虚拟制片特别有帮助。

这点可以通过多种方式得到支持:

  • 允许可预测地和非破坏性地将序列混合在一起。

  • Root Motion解决方案现在可以更无缝地与游戏集成。

  • 能够通过Sequencer编辑骨架结构中的单个骨骼。

  • 增强和简化了各种Sequencer工具,以便进行非线性编辑

image alt text

将控制动画导入到Sequencer中的ControlRig(实验性)

现在,你可以通过FBX将稀疏动画数据从DCC Rig中的变换导入到Sequencer中的ControlRig。这意味着你不再仅限于将骨骼动画数据导入到Sequencer中。

如需导入FBX数据,请通过 ControlRig 轨道选择 导入Control Rig FBX 。你可以指定要导入的控件,还可以筛选选项,选择如何将动画曲线映射到Control。

nDisplay改进

在此版本中,我们在 nDisplay 中增加了若干功能来改善用户体验,并确保能渲染到不同类型的显示界面上。现在,你可以轻松地使用JSON文件格式自定义nDisplay配置文件,并将二进制格式与集群事件一起使用,以便改善数据吞吐量和延迟。

nDisplay配置查看器(测试版)

使用全新的 nDisplay配置查看器 来轻松配置你的nDisplay设置。查看器可以显示配置层级、渲染节点、窗口、视口、输入、摄影机和投影策略的树状结构,每个都有自己的 细节 面板。你还可以看到视口的2D布局和投影策略的3D显示。

image alt text

通过NVIDIA NVLink获得多GPU支持

我们通过NVIDIA NVLink添加了多GPU(MGPU)支持,以便能够将**nDisplay**扩展到大容量LED。现在,你可以使用配置文件中视口的**GPU_NODE**参数指定应使用系统中的哪个GPU渲染nDisplay视口。在摄影机内VFX方案中,如果指定一个GPU渲染摄影机内部锥体,并指定另一个GPU以较低的屏幕百分比渲染外部锥体,则可以看到性能的提高。

image alt text

image alt text

nDisplay VIOSO集成(实验性)

我们在虚幻引擎中增加了对VIOSO技术的集成和支持,以便在高度复杂的表面上进行投影弯曲和软边缘混合。你可以使用以下nDisplay投影策略加载原生VIOSO格式( .vwf )的弯曲和混合文件:

  • MPCDI

  • Native SDK集成

image alt text

nDisplay 穹顶投影投影工具集成 (实验性)

我们在虚幻引擎中增加了对 DomeProjection 投影工具(ProjectionTools) 技术的集成和支持,用于在巨大的穹顶表面上实现投影弯曲和柔和边缘混合。你可以使用nDisplay投影策略 原生SDK集成 加载原生DomeProjection格式的弯曲和混合文件。

image alt text

Chaos的确定性集群渲染(测试版)

我们为 Chaos 等实时功能增加了确定性渲染,以实现跨集群渲染节点进行渲染时的视觉一致性。

修复了天空大气渲染的问题

天空大气由nDisplay所用的场景捕捉组件捕捉,但是即使标记为不捕捉,也会导致场景的上半部分更亮。我们提供了一种解决方法,因此在nDisplay中应该不会再出现此问题。

镜头内视效模板

你可以使用镜头内视效虚幻项目模板(in-camera VFX Unreal project template)作为设置实景LED舞台的起点。该项目所演示的功能包括:

image alt text

  • 镜头内视效相关的nDisplay配置和蓝图设置

  • 内视锥和外视锥

  • 使用基于网格体的弯曲来定义nDisplay中的LED墙面

  • Live Link

  • 色度键和跟踪标记

  • 颜色校正区域

  • Web远程控制

  • OSC

协作查看器模板改进

在此版本中,我们重新设计了用户界面,并为协作会话添加了更多用户输入。我们还提高了性能,以便你的会话可以扩展到更多的用户。

协作会话中的语音通信

你可以使用项目中默认启用的IP语音与会话中的其他用户进行通信。你可以在桌面用户界面中打开或关闭语音通信。

重新设计的用户界面

所有的用户界面元素都经过了重新设计,包括2D桌面用户界面和VR菜单。3D替身已经更新,现在假如远程参与者不在视线中,会出现一个指示器。

image alt text

image alt text

网络改进

我们对网络蓝图进行了性能改进,以避免出现瓶颈和连接中断。网络设置已针对高负载进行了调整,因此你可以拥有更多参与者,从而使对象操作和移动更加流畅。

image alt text

双手交互

现在,你可以使用双手或控制器在沉浸式体验中同时与不同对象交互。

image alt text

远程控制API(测试版)

远程控制API现在是完全兼容的REST API,拥有GET、PUT、POST和DELETE访问权限。我们还添加了一个附带默认窗口控件(如滑块、面板和按钮)的Web应用程序,用于远程控制引擎中的属性。

image alt text

  • 持久Web连接 - 你的WebSocket连接现在会持续存在,因此你可以在不关闭连接的情况下接收实时数据。

  • 打包应用中的Web服务器 - 你现在可以在打包应用中运行Web服务器,以便通过Web应用远程控制它。

  • 远程控制预设 - 我们添加了远程控制面板,以显示远程控制预设资产中显示的所有控件。借助此面板,你可以公开UI中的属性,并显示公开细节面板中不可见的函数库。

  • 远程控制预设API层 - 除了让远程控制预置变得界面友好,我们还为它增加了一个API,让你可以方便地访问场景中的信息,例如检索所有公开的Actor。

  • Http服务器端口更改 - 远程控制接口的默认Http服务器端口现在是30010。

Chaos物理系统(测试版)

Chaos物理系统 《堡垒之夜》 中的轻量级物理模拟解决方案。在此测试版中,我们将向学习使用此功能的开发人员提供此功能。在虚幻引擎4.26(可通过Epic启动程序获得)中,PhysX默认处于启用状态。等到我们将来默认启用Chaos物理系统后,PhysX将被废弃。

不久后,我们会提供一个特殊版本,该版本将默认启用Chaos解算器。

image alt text

以下功能将在Chaos物理系统测试版中提供。

参见 Chaos物理系统 文档,了解相关功能的更多信息。

Chaos车辆(实验性)

如需了解如何创建Chaos车辆,请阅读 Chaos车辆设置指南 。如需了解如何将PhysX车辆转换为Chaos车辆,请阅读 转换指南

Zen加载器(测试版)

我们将发布适用于下一代主机的运行时 Zen加载器 ,以利用最新的硬件技术,其优势包括:

  • 改良的加载时间

  • 缩短流送和启动进程的加载时间

  • 全新的输入/输出机制,提供一个低开销的数据存取接口

  • 整合次世代存储API,使数据能够以最小的CPU开销直接读入目标内存

尽管Zen Loader基于现有的EDL加载器,但其并不支持EDL加载器的完整功能集。

网格体创建工具改良(实验性)

网格体创建(Mesh Creation)已拓展更多工具和改良,进一步提升了引擎中网格体资产的创建。对工具集的更新创建了一个拓展的工作流,用于编辑器中的基本建模和编辑任务。

image alt text

导航至顶部菜单条的 编辑(Edit) > 插件(Plugins) ,启用 Modeling Tools Editor Mode 插件,即可使用这些工具。插件启用后,点击工具栏中的"模式(Modes)"按钮,并选择 建模(Modeling) 选项并按下 Shift + 7 组合键。

图元创建工具栏

参数图元拥有了自己的工具栏,用户可以更轻松地访问可自定义图元形状的这个标准集合。

image alt text

旋转网格体工具改良

我们为自定义旋转网格体的创建添加了两个新工具。美术师可以交互式地在编辑器窗口中绘制一个新的交叉区,或选择现有内容再将其旋转,创建大量的独特形状。

image alt text

  • 用户定义的轴,用于自定义旋转

  • 借助用户定义的参数,让形状更上一层楼

镜像工具改良

用户现在可以围绕一个指定的轴对选定的网格体进行镜像。可以选择将新网格体与原始网格体合并,或生成另一个新网格体:

image alt text

镜像工具加入了数项改良,移除了对对称的依赖,并将几个重复的功能组合到了一个单一工具中,以便使用者合并网格体、反转法线,并沿轴对资产进行镜像。

布尔工具

网格体创建(Mesh Creation)工具集现在加入了 布尔工具(Boolean Tool) 。布尔运算利用多个静态网格体的交叉、结合或差异来创建一个单一的静态网格体。

image alt text

1, Boolean: Union; 2, Boolean B-A.

布尔工具集还提供了减去两个静态网格体重叠的选项,以及提取这些网格体被删部分的选项。

网格体编辑工具改良(实验性)

网格体编辑(Mesh Editing)工具集已加入新的工具,纳入了常用的建模技术和方法。此外,现有工具也加入了新选项,以提高易用性。

image alt text

image alt text

  • 借助 插入边缘(Insert Edge) ,可以交互式地对基于四边形的多边形分组进行拆分,对结果网格体进行二次三角剖分,以便更清晰地拓扑。

  • 边缘循环(Edge Loop) 工具可用于在拥有基于四边形的多边形分组的网格体上添加单个或多个边缘循环。

  • 洞填充(Hole Fill) 工具已强化,加入了平滑洞填充的新选项。

  • 美术师现在可以创建带壳的网格体;或使用 偏移 工具按指定值对网格体进行偏移,拓展现有的网格体形式。

  • 现在可以使用 编辑切线(Edit Tangents) 工具在一个选定的网格体上配置或重新计算切线。

造型工具改良(实验性)

image alt text

造型(Sculpting)和变形(Deformation)工具已拓展新功能和笔刷选项。美术师现在可以在引擎中创建自定义权重贴图,其能增强平滑(Smooth)和替换(Displace)工具的功能。

image alt text

权重图

image alt text

带有权重图的位移网格体

我们进一步扩展了Datasmith支持的3D应用。现在Autodesk Navisworks也得到支持了。

我们的Navisworks导出器插件包含其他Datasmith导出器相同的功能,并支持Navisworks 2019、Navisworks 2020和Navisworks 2021。

导出元数据

此插件完全支持从Navisworks场景导出元数据。数据将使用以下格式前置在标签名前方:

[TabName]_[PropertyName] = [Value]

image alt text

上图中的结果将如下所示:

MyTab_MyStringProperty = "MyStringValue"

MyTab_MyBooleanProperty = "Yes"

MyTab_MyFloatProperty = "0.000"

MyTab_MyIntegerProperty = "0"

Rhino的Datasmith Exporter插件已可投入实际应用

我们的目标之一就是支持大量的3D应用程序,因此虚幻引擎现已支持直接从Rhino导出Datasmith文件。

我们的新导出器工作原理与现有的Datasmith插件类似,支持MacOS和Rhino 6。此插件将维持Object名称、枢轴点、材质名、图层、层级等内容与现有UE 4.25 Rhino导入插件完全一致,或高度相似。

元数据

为协助保留重要的细节,用户在新版本中可以将资产上的自定义属性作为键值对添加,再将这些值作为Datasmith元数据转移到场景中:

image alt text

Rhino工作对话数据

Rhino导出器插件可以将通过工作会话加载的数据进行导出,并且是作为场景的一部分导出。Datasmith会将这些对象视作本地场景的一部分并导入数据。

改进的USD Live Actor和阶段导入器(测试版)

新版本提升了虚幻编辑器对来自Pixar的通用场景描述(USD)交换格式的支持力度。增加了使用USD格式的数个不同应用程序和数项强化,将虚幻引擎整合到现有的生产流程中:

image alt text

USD阶段改良

  • 你现在可以直接在Sequencer中设置UsdGeomXformable变换的动画,并将动画写回USD。

  • 添加了对USD灯光(UsdLuxLight模式)的支持。

  • 添加了对来自USD预览曲面的法线贴图的支持。

  • 增加了对USD混合变形作为虚幻变形目标的支持。

  • USD几何动画现在将通过虚幻几何缓存播放,以提高性能。

USD 导入期改良

  • 全新的USD导入器可以导入我们的USD阶段支持的所有USD模式。

  • 全新的导入器将导入静态网格体、骨架网格体、变形目标、动画序列、材质、Actor、摄像机、光源和分层静态网格组件(HISM)。

  • 通过使用变体集和变体来处理以USD表示的LOD级别。

USD导出器改良

  • USD导出器现在可以在导出静态网格体时会导出顶点颜色、不透明度、LOD和材质指定内容。

  • 烘焙并将虚幻引擎材质直接作为USD预览曲面输出到USD。

  • 添加了导出骨架网格体和变形目标的功能。

其他USD改良

  • 在MacOS上增加了对USD的支持。

  • 支持USDZ文件扩展名。

  • 将支持Python 3的USD SDK升级到20.05。

改良Alembic流送(测试版)

image alt text

在媒体和娱乐产业中,Alembic广泛用于缓存复杂的静态或动画数据,传入硬盘上可流送缓存文件。虚幻引擎现在支持将缓存的Alembic数据直接流入引擎,无需再先导入为几何体缓存。

进程间的GPU纹理共享(测试版)

image alt text

TextureShare 是一款全新的插件,可以高效地发送和接收GPU纹理,并在虚幻引擎和任意其他进程中缓存,同时绕开CPU。TextureShare支持同步机制和线程障碍,因此可以保证共享应用程序之间的一致性。可以在nDisplay或standalone中使用此功能。

全新虚拟摄像机(测试版)

我们重建了 虚拟摄像机 的架构,使其成为一种模块化的 组件 ,这样你就能自定义、扩展或创建自己的专属虚拟摄像机。我们还提供了一个全新的虚拟摄像机实现(基于这个重新设计的架构),以便实现可投入实际应用的解决方案。不使用该新架构的虚拟摄像机将被废弃。

全新的虚拟摄像机包含以下内容:

  • 编辑器 中的所有功能,支持多用户。

  • 重新设计了用户体验。

  • 虚拟摄像机开发的核心架构变为可拓展。

  • 能够将虚拟摄像机的输出发送到 Composure 媒体框架 编辑器 视口或任何运行 虚幻远程(Unreal Remote) 应用的设备。

  • 能够在输出上覆盖自定义的 UMG 控件,并在编辑器或设备上与它们交互。

  • 除触屏之外,内置控制器和其他硬件输入的支持。

  • 新增 修改器 系统,可对摄像机数据进行过滤、跟踪、自动对焦等自定义效果操作。

  • 可从ARKit切换到自定义追踪系统。

  • 桌面操作器面板,便于使用摄像机操作器。

  • 更新iOS应用Unreal Remote,以便改良UI和流送体验。应用程序中的ARKit数据现在通过 Live Link 发送。

保证帧准确性的视频反馈(测试版)

新版本进行了数项改良,提升视频反馈中的帧准确性:

  • 播放基于图块的媒体时,只会将摄像机视图中的内容流送到GPU。这意味着不需要流送整个剪辑片段,能够缩短处理时间,让播放迅速而高效。

  • 媒体轨道现支持Apple Pro Res和Avid DNxHR编码解码器剪辑片段。

*EXR Reader GPU模块现已优化,可在EXR使用未经压缩的RGB或RGBA时提高速度并将CPU使用量降至最低。

DMX插件已可投入实际应用

DMX (Digital Multiplexer)插件将虚幻引擎连接到使用DMX协议的第三方控制器和设备。通过ArtNet和aSCN网络上的双向通信和交互,使用者就能在虚幻引擎中控制舞台效果和照明灯组,并在设计阶段在虚拟环境中提前展示效果。

DMX改良

image alt text

DMX插件加入了更好的UX、统一的UI元素、改良的性能、重构的代码及DMX矩阵支持,为主播和实时活动制作人带来了成套的品质改良。新版本除了在虚幻引擎中加入DMX按钮外,还改良了以下功能。

  • DMX监控器

  • DMX控制器面板

  • DMX输出控制台面板

  • 灯组类型(Fixture Type)面板

  • 灯组补丁(Fixture Patch)面板

  • DMX属性贴图

此外,此插件现在支持DMX组播和单播,并增加了DMX GDTF的支持。

DMX和Sequencer

image alt text

DMX和Sequencer 已经整合,开发者可以使用实体DMX和虚幻引擎来构建舞台效果。此整合能够创建自定义DMX时间轴,让用户可以轻松快捷地利用动画和事件触发来打造线性光照体验。结合Sequencer,可以利用曲线或子序列之类的功能来对DMX进行编程和控制,而不需要用到蓝图脚本或C++程序。

DMX像素映射(实验性)

image alt text

DMX像素映射 会将像素缓冲(渲染目标)转译到一个DMX流送。拥有此机制后,开发者就可以使用实时渲染目标纹理数据来驱动DMX灯组或驱动低分辨率LED面板和设备。本质上,每个像素都代表一个DMX灯组。

image alt text

DMX像素映射LED灯条

DMX像素映射含有以下内容。

  • 包含XY坐标采样和排序的工具

  • 使用纹理数据来设置LED灯条或低分辨率LED显示屏的动画

image alt text

LED显示器

欲知详情,请阅读 DMX

DMX灯组和VFX蓝图

许多用户有志为多行业实时节目设计者、音频视觉(AV)整合者与专业人士、创意机构和制作公司提供DMX支持。为了协助这些用户,我们在新版本中加入了 DMX灯组和VFX蓝图 ,增强了DMX的用户体验。该蓝图在DMX模板中有所展示。

DMX灯组(DMX Fixture)系统现在利用了基于C++的模块化系统,让用户能够启用或禁用大量子功能,其中包括以下操作:

  • 平移

  • 倾斜

  • 旗板(Gobos)

  • 闪光灯及其他内容

DMX灯组系统还包含质量级别可调的体积光束着色器、以及一个矩阵和条灯组模型。此外,针对蓝图脚本用户,我们提供了一套启用了DMX的VFX蓝图Actor,包括以下内容:

  • 火焰

  • 激光

  • 焰火

  • 喷泉

DMX模块

我们创建了一个测试版 DMX模板 来展示以下功能:

  • 接收并发送Artnet + sACN协议

  • 灯组补丁和GDTF支持

  • 属性映射

  • 灯组代理

  • Sequencer集成

  • DMX录制

  • 像素映射

image alt text

DMX模板

我们还向开发者展示了如何预显示(previz)实时场地、利用灯组控制,以及使用实时内容触发器。

实时场地视效预览

借助DMX,用户便能利用以下功能预显示实时节目舞台和大量实时场地。

  • 灯组补丁

  • DMX输入和蓝图逻辑

  • Sequencer整合和DMX录制

灯组控制

用户可以借助虚幻引擎的以下功能来控制DMX灯组:

  • 灯组补丁

  • DMX输出和蓝图逻辑

  • 像素映射

内容触发器

用户可以利用虚幻引擎中MDX的以下功能来触发实时、生成或预录制内容:

  • 灯组补丁

  • DMX输入和蓝图逻辑

欲知详情,请下载模板并阅读 DMX模板 文档。

阶段监视器(测试版)

image alt text

新的 阶段监视器 工具连接到多用户会话中的所有机器,并报告性能统计数据和故障,如FPS和GPU使用率。你可以从会话中的任何计算机查看这些报告,并且可以将报告设置为关键部分的上下文以便于过滤,还可以将它们导出为JSON文件。

Switchboard(测试版)

Switchboard 是一个可扩展的PySide应用,其能够协调诸多设备和工具与场景交互,并生成虚拟制片舞台上的数据。Switchboard支持以下操作:

  • 在不同机器上启动多个虚幻引擎和 nDisplay 实例,并自动将其与 多用户编辑器 连接。

  • 在所有机器上将内容与Perforce同步。

  • 通过 镜头试拍录制器(Take Recorder) 在虚幻引擎中和其他更多性能采集软件和设备上设置镜头试拍命名和初始录制。

  • 提供关于nDisplay同步状态的诊断信息。

Live Link XR插件

用户现在可以使用XR设备作为虚拟摄像机进行性能采集,或作为 Live Link XR 插件实时动作拍摄的实时摄像机跟踪。无论使用XR设备或是其他追踪系统,Live Link工作系统都相同,因此可以根据项目的需求和使用的设备来修改跟踪系统。在这个版本中,Live Link XR只支持基于Steam的设备。

Visual Dataprep工具已可用于生产

Visual Dataprep工具提供了一个高阶构建块的清晰工作流,来描述准备流程,从数据导入到UE资产创建。Dataprep现在已可用于生产,还得到了用户界面和易用性改良。用户还可利用大量新的操作器和选择过滤器。

  • 替代材质表(Substitution Material Table) - 直接在Dataprep中创建一个替代材质表,以快速替代即将到来模型的材质。

    image alt text

  • 网格体建模操作(Mesh Modeling Operations) - 网格体建模操作器现已在Dataprep中可用。包括减面、UV生成等诸多内容。

  • 改良图形和选择工具(Improved Graph and Selection Tools) - Dataprep对图表和选择工具进行了数项改良。

  • 用户现在可以绕过图表中不必要的节点。

  • 从一组Actor中选择所有可见的Actor。

  • 选择与一组Actor重叠的所有Actor。

  • 选项变换,所有操作器和过滤器现能结合Actor组件使用。

  • 输入面板已更新,增强易读性和易用性。

  • 现在可以在使用内容预览中所选资产的场景预览中选择Actor。反向操作也能完成。

  • 使用预览过滤器时,选项将与内容预览和场景预览自动同步。

OpenColorIO支持

现在,你可以对虚幻引擎渲染的图像和线性媒体的颜色空间进行更为广泛的控制,让色彩从摄像机捕获、到虚幻编辑器中的工作、再到最终输出都保持完全一致。新版本加大了对 OpenColorIO (OCIO)颜色变换的支持力度,你可以进行以下操作:

  • 为每个编辑器视口设置一个颜色空间变换。

  • 在影片渲染队列(Movie Render Queue)中渲染镜头时设置一个颜色空间变换。

  • 为每个nDisplay视口设置一个颜色空间变换。

Control Rig分支与循环

借助分支与循环,用户就能以最少量的设置来创建灵活且动态的Control Rigs。用户可以利用循环来创建动态填充的物体集合(骨骼链条、控制列表),并在此之上进行迭代。这能极大缩小图表大小,并改良图表性能、构造时间和绑定的灵活度。

image alt text

  • 全新的分支/条件节点,可以根据条件因素来对图标进行分支。

  • 循环将利用逻辑来创建更精确且灵活的图表。

  • 已添加分组物体和支持节点的支持。

Control Rig反向

image alt text

借助Control Rig反向功能,用户可以将现有动画重新映射到可以使用Sequencer修改的Animation Rig上。用户现在可以轻松使用 Control Rig来修改现有的骨骼动画。全新的向后事件节点可以定义骨骼如何映射控制逻辑上。

  • 数值PreSequencer功能允许用户在Sequencer动画中每帧运行向后事件,以便烘焙到Control Rig。

Control Rig组件

用户现在可以利用Control Rig组件从蓝图访问Control Rig数据。用户能够利用蓝图中的Gameplay逻辑来驱动Control Rig、重新初始化Control Rig来匹配不同比例的角色,并直接读写其他的Control Rig数据。此外,用户现在还能用Control Rig组件中的存取器将非骨骼网格体对象附加到Control Rig层级。

image alt text

  • 可利用Control Rig中的新Setup事件来初始化骨架和控制。

  • 在Control Rig初始化状态中,骨架和控制(Control)可进行放置。

  • 可在蓝图中使用Getter和Setter函数,来获取/设置骨骼,并控制变换/值。

  • Control Rig控制和调试绘制在蓝图视口中可见。

  • 可从Control Rig获取骨骼变换,以驱动静态网格体变换。

全身IK节点(实验性)

对于需要在运行时按程序修改角色姿势的用户,我们添加了FullBody IK解算器。基于雅可比伪逆阻尼最小二乘法(Jacobian Pseudoinverse Damped Least Squares),全身IK Control Rig节点具有用于控制刚度、骨骼限制、极向量和其他解算器参数的附加属性。

  • 适用于任何骨架。

  • 通过附加属性(如约束和刚度设置),用户可以优化解算器以满足特定的美术要求。

GPU Lightmass(测试版)

虚幻引擎的光源烘焙系统Lightmass现在将利用GPU来构建场景灯光。GPU Lightmass在基于CPU的Lightmass系统上有所改良,其利用了DirectX 12和DXR光线追踪功能,极大降低了构建复杂场景所需的时间,并降低基于CPU的系统出现的瑕疵。

image alt text

感谢Dekogon Studios提供的美术内容 - www.dekogon.com

新的GPU Lightmass通过以下手段改良了当前的光源烘焙系统:

  • 使用了先进的光照贴图映射器,视口中有可选的实时预览。

  • 构建光照的多个模式: 全烘焙 烘焙所见内容

  • 极大提升复杂场景的光线烘焙速度。

  • 相比基于CPU的Lightmass,生成物理上更为精确的结果。

启用 GPU Lightmass 插件并进行以下项目设置,即可开始使用GPU Lightmass:

image alt text

  • 将默认RHI设为 DirectX 12 (需要Windows 10 1809或更新版本)

  • 启用 Ray Tracing 支持(需要能够使用DXR的显卡)

  • [任选]启用交互预览模式的 虚拟纹理(Virtual Texturing) 虚拟纹理光照贴图(Virtual Texture Lightmaps)

    image alt text

    image alt text

Unreal Insights Insights

Memory Insights(测试版)

添加 Memory Insights 之后,Unreal Insights能让开发者得知应用程序的内存使用情况,以便更好地了解自己的工作会对应用程序性能和引擎行为产生何种影响。

image alt text

默认图标轨迹可用于显示以下内容的内存使用:总计(Total)、追踪总计(TrackedTotal)、未追踪(Untracked)、网格体(Meshes)、纹理(Textures)、物理(Physics)和音频(Audio)。

要了解Memory Insights面板中的更多LLM标签,请参见 Unreal Insights 的更新概览。

Slate Insights

为了帮助用户界面开发者了解他们的用户界面是如何运行的,我们正在用UMG和Slate分析工具扩展UnrealInsights。开发者在使用**Slate Insights**扩展时,可以使用**Slate Frame View**获取每帧正在绘制、失效或更新的控件(Widget)列表。

image alt text

如果开发人员启用GlobalInValidation,他们就可以确定哪些控件导致了帧画面的开销比较大。

如需了解有关UMG和Slate分析工具(例如Slate Frame View)的更多信息,请阅读 Slate Insights概述

移动平台渲染改良

传统移动平台渲染流程已改良,加入了对现有功能和新后期流程的优化。

移动平台虚拟纹理压缩(正式版)

新版本增加了移动平台运行时虚拟纹理的纹理压缩支持。这能让移动设备在使用虚拟纹理时拥有更好的性能。请参见 虚拟纹理参考 ,了解虚拟纹理使用的更多信息。

移动平台反射捕获压缩(正式版)

反射捕获组件(Reflection Capture Components) 现已支持移动设备上的纹理压缩。这将降低反射捕获的内存足迹,使其更适用于移动平台项目。

移动平台地面实况环境光遮蔽(实验性)

地面实况环境光遮蔽现已可用于移动设备。环境光遮蔽的这个实现让移动平台项目能以更低的性能开销来改良间接光照和阴影的外观。

GTAO disabled

GTAO enabled

*GTAO启用后,可在此场景的角落中发现环境光遮蔽。***_模块化建筑集由PurePolygons提供_**

在移动平台上实现GTAO之后,Mali设备将遭遇性能问题,因为他们的最大计算着色器线程少于1024。

移动平台动态聚光源阴影(实验性)

移动平台现支持动态聚光源阴影。这允许聚光源在静态和可移动网格体上投射阴影。

移动平台像素投影反射(实验性)

我们在4.26版中加入了移动设备的像素投影反射支持,让移动平台上的反射平面可以生成屏幕空间反射。

image alt text

当前支持以下模式:

  • Usual - 平面反射actor在所有平台上的功能均相同。

  • MobilePPR - 平面反射actor在PC/主机平台上将正常运作,但在移动平台上使用像素投影反射。

  • MobilePPRExclusive - 平面反射actor只用于移动平台上的像素投影反射。这留下了空间,让PC和主机项目使用传统的SSR。

光线追踪更新与改良

我们将继续扩大功能覆盖范围,并在游戏中不断提升光线跟踪的效果。比如,我们最近将 光线跟踪支持引入了堡垒之夜 。我们为了让堡垒之夜支持光线跟踪而付出的努力,不仅提高了实时性能,还带来了一些提高质量的优化,并且可以用于你自己的项目中。

image alt text

1, 启用光线追踪; 2, 禁用光线追踪。

新版本包含以下内容:

  • 优化 CPU性能 ,包括有效的缓冲分配器、堆管理、更快的动态路径,以及更好的RTPOS处理,这也让DirectX 12拥有了更好的体验。

  • 优化 GPU性能 ,可以更为精确地禁用非视觉相关世界位置偏移(WPO)计算、拥有更高效光线采样的空间结构、摄像机视图后物体的剔除选项等。

  • 提升 稳定性 ,解决了在游戏和项目中大量使用光线追踪时引擎中的多个崩溃以及不稳定源。

  • 光线追踪功能的多处 视觉改良 ,其中包括改良的全局光照质量和性能、支持两面植物、拓展半透明支持、半透明阴影等诸多内容。

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

烘焙工具改良(实验性)

借助引擎的烘焙工具可以便利地将法线、环境光遮蔽、曲率、位置和纹理直接烘焙到项目的内容浏览器。美术师可以选择网格体并根据特定的UV通道来烘焙贴图。

image alt text image alt text

UV编辑工具改良(实验性)

我们的UV编辑工具继续拓展了在编辑器中显示和调整UV布局的新选项。全新的 UV显示(UV Display) 选项可以借助任意一个UV工具在编辑器视口中显示网格体的UV布局。全新的"裁剪选定边缘UV(Cut Selected Edge UV)"工具为美术师提供了一种调整静态网格体UV贴图的便利方法,无需从其3D软件中进行修改并再次导出。

image alt text

体积编辑工具(实验性)

用户可以使用最新的体积编辑(Volume Editing)工具集直接在引擎中编辑碰撞和体积形态。将BSP形态、现有体积或碰撞形态转换为静态网格体Actor,再使用网格体编辑工具对其进行编辑。完成自定义后,这些网格体又可以转换回体积或碰撞形态。

第五代时序上采样(实验性)

我们目前正积极开发一个新的时序上采样算法,专用于次世代主机平台和PC。我们目前正在使用这个新算法在4K下对堡垒之夜进行相关发布测试。虽然第五代时序上采样仍在紧锣密鼓的开发当中,但它还是能够实现更高的图像质量输出,高于当前的TAA和时序上采样;不过它需要采用更低的屏幕百分比配置,才能避免同等品质、相同帧率下所产生的额外性能开销。

Gen4 时序上采样

Gen5 时序上采样

提升质量后,时序上采样所产生的性能优势体现在降低屏幕百分比后,性能提升超过了上采样品质提升带来的开销。它通过启用或提高其他渲染功能的质量,来释放某一帧其余部分的新增的GPU预算,这些功能最终有助于获得更高质量的最终输出像素。

我们会维护较旧的Gen4平台的时序上采样(只要我们还支持这些平台),并将其与Gen5的活跃开发隔离开来,以避免现有内容出现回退。

Python 3.7.7支持

本年早些时候Python 2.x已结束使命,跟随 VFX参考平台 指南,我们在虚幻引擎中添加了对Python 3.x的支持。引擎中自带的是Python 3.7.7,但也包含对Python 2.7的支持。在此版本之后,Python 2.x将在引擎中被废弃。

虚幻引擎中的USD支持也已迁移至Python 3.x。如果需要继续使用Python 2.7,就需要重新编译USD插件,让引擎针对Python 2.7。要了解如何在引擎中修改Python版本,请参见 使用Python对编辑器编写脚本

Datasmith改良

我们继续对Datasmith进行了改良,加大了对大家最爱3D软件包的支持力度:

  • Revit的Datasmith导出器添加了对Revit 2021的支持。

  • 3ds Max插件的Datasmith得到了拓展,加入了对数个Corona材质和贴图的支持。

Datasmith性能提升

Datasmith获得了多项性能提升,能处理更大更复杂的CAD模型,为汽车和制造业用户带来更好的支持:

  • 借助MSVC2017以正确的优化设置来进行编译。

  • 在多线程中读取Siemens JT单块模型的临时解决方案实现。

  • 增强内存分配以优化性能。

Datasmith导出API的MacOS支持

如果你是一位第三方开发者,希望为一款在Mac OS X上运行的设计应用程序添加Datasmith支持,现在可以使用Datasmith导出API中的工具和助手类来创建你自己的导出器,将你的物体和场景数据转译为 .udatasmith 文件。

Animation Insights中的对象属性跟踪(实验性)

Animation Insights现在支持跟踪与游戏相关的对象的属性,如Actor、组件或动画实例。这使你可以可视化对象中的属性随时间变化的情况,而不需要外部调试器,并且同时支持原生类和蓝图类。

image alt text

如需要使用它,请启用 'ObjectProperties' 跟踪通道,然后在编辑器中右键单击Actor以跟踪其属性。可以通过在Insights中的轨迹上单击鼠标右键来跟踪组件和其他对象的属性。

动画节点属性访问系统

动画蓝图节点现在可以通过属性访问系统将其引脚暴露的参数绑定到游戏中的任何可访问属性。

image alt text

与通过引脚输入数据相比,这有许多优势:

  • 数据始终以线程安全的方式访问。

  • 减少手动将数据传递到动画蓝图中的需要。

  • 将多个节点绑定到同一个值时,操作更简单、更具可读性——画面也更整洁。

  • 性能比常规的 "快速路径" 提高了约25%。

  • 支持绑定到函数、数组、链接对象、嵌套结构以及以上所有组合。

Quartz(测试版)

image alt text

Quartz 是4.26中的新音频工具,可以将序列片段精准采样到音频引擎中的所有音效,处理主要的功能请求,实现音频渲染进程中更高层次的控制。

利用Quartz,用户可以在完美、采样准确的时间界限(音乐或其他)上播放世界音效,并任意在世界中同步这些音效发射器。

音频调制(测试版)

image alt text

全新的 音频调制插件(Audio Modulation plugin) 包含了源音频混合功能更为直观的一个子集,通过以下方式来动态控制并参数化音频属性:

  • 公开一个灵活、解耦且泛型的参数调制和混合系统

  • 建立一套更为强大的工具集,以便创建和调试游戏的混合

  • 提供了一个易于拓展的API;通过插件,其可用于进一步调制源、效果、子混合和诸多其他音频类型

音频流送缓存

流送缓存 可以在任何时间点加载音频,不使用时则自动释放。这样音效设计师就能根据需要来加载音频资产,不会超过内存界限。此功能在4.24版中便已作为测试版存在,而在4.26版中已成为全平台正式版。

适用于移动端的桌面渲染器(iOS-Beta/Android-实验性)

在虚幻引擎4.26中,我们为移动设备提供了前向和延迟桌面渲染器,这为兼容设备提供了改进的渲染功能集。这些设备既适用于iOS设备,也适用于使用Vulkan的Android设备。iOS相关的功能实现还处于测试版,而Android Vulkan的实现则还处于试验阶段。

image alt text

采用了桌面正向渲染器并且正在演示"渗透者"的iPad Pro

有关这些渲染选项的详细信息,请参考手册中的 前向着色渲染器 ]。

移动延迟渲染器(实验性)

虚幻引擎4.26现在为移动渲染器提供了延迟渲染模式。此模式支持高质量反射、大量动态光源、发光贴花和其他移动正向着色不支持的技术。

移动前向渲染器

移动延迟渲染器

默认的移动正向渲染与新的延迟渲染器

目前,iPhone 6和更高版本的iOS设备以及用于Android Vulkan的Galaxy S9和更高版本的设备都支持移动延迟渲染器。

各向异性已可用于生产

各向异性(Anisotropy)现在已可用于生产!新版本改良了它的性能,将它默认公开,未使用时也不会带来任何额外性能开销。

各向异性可用于控制镜面高光和反射的形状和朝向,最常用来表现拉丝金属材质。

image alt text

1, 各向异性响应; 2, 各向同性响应

材质使用各向异性时将启用一个各向异性通道,它将专门为使用各向异性材质的物体发出额外的gbuffer属性。此外,如果场景包含各向异性材质,那么只有在像素包含各向异性属性时,光照通道才将照亮使用各向异性BRDF的每个像素。实际上,各向异性的开销与显示的像素数量(例如材质)成正比。

各向异性只在PC和次世代主机(XBXS / PS5)上默认启用。它当前不支持区域光源,或带有源区域大小的聚光源和定向光源。

欲知各向异性的详情,请参阅 材质输入 文档。

UMG和Slate输入调试工具

在调试用户界面(UI)时,不以进程干扰而重现输入(例如来自游戏手柄或键盘的输入)序列可能存在难度。这个新版本提供了一个工具来调试UI导航,并显示导航事件的静态行为。这让开发者能够有效识别与特定UI bug相关的输入。

image alt text

在控件反射器中模拟导航事件*

控件(或系统) 可能会在运行时发出一个不同的结果。

要了解更多信息,请阅读 控件反射器

主机Slate调试器

Slate调试器 的主机版现已加入以下分析扩展:

  • 一个绘制选项,显示为此帧绘制的控件

  • 启用GlobalInvalidation模式后,调试器将帮助开发者找到经常使用户界面无效的控件

以及以下输入扩展:

  • 更多的过滤器和事件选项

  • 一个路由选项,便于开发者观察系统如何将一个控件选为事件处理器

image alt text

欲知详情,请阅读 Slate调试器参考

LiDAR点云改良

LiDAR点云(LiDar Point Cloud)插件改良了性能和工作流,并添加了对更多文件类型的支持。

image alt text

  • 添加了对LAZ和E57文件格式的支持。

  • 全新的LidarClippingVolume actor与场景中的所有LiDAR组件实时结合。

  • 插件现在允许用户计算点的法线向量。可以对整个云进行操作,也可以对选择的内容进行操作。

  • 大幅降低导入、处理和导出点云的RAM要求。

  • 反转选择:添加了一个开关,可以切换点的全选和取消全选。

  • 动态点预算:用新系统来控制屏幕上的点预算。

    • r.LidarTargetFPS X - 它会持续调整点预算,来维持X的整体FPS。

    • r.LidarIncrementalBudget X - 如设为true,只要视口保持静态,它就将自动把点预算增加到极高的值(- 10 FPS)。

  • 移除了每个资产20亿个点的限制。

OpenXR整合(测试版)

用户只需要将一个插件,即OpenXR插件,添加到项目中即可针对多台XR设备。OpenXR插件现支持来自商城的扩展插件,无需引擎版本就能为OpenXR添加功能。

image alt text

OpenXR和OpenXR商标由Khronos Group Inc提供。

我们在虚幻引擎的OpenXR插件中加入了对以下功能的支持:

  • 输入,如眼部追踪、手部追踪,以及捏握和瞄准手势。

  • 虚幻引擎在真实世界中的兴趣点,ARPin。

  • DirectX12 RHI。

平台专属的插件在4.26版中仍然可用。用户可以选择使用OpenXR插件,或平台专属的插件。

Azure空间锚(测试版)

可以在沉浸式移动app的不同会话之间设置真实世界中存在的兴趣点。我们在虚幻引擎中加入了ARKit和ARCore的Azure空间锚支持,并更新了C++ API。

image alt text

RHI变更:障碍重构、RDG更新

这是一个API更新。不使用源代码的终端用户应该不会注意到这些变更。

RHI源障碍/过渡API已被重构,以支持拆分过渡、子资源状态追踪和显式资源状态。利用拆分过渡可以在相同的硬件流程上启用工作量的重叠,而更显式的状态过渡会造成更多定向GPU缓存清空。全新的过渡API需要源的当前和目标状态,完全采用了现代图形API的设计。状态现在也拥有了更强的粒度:新的API中,渲染目标、SRV、UAV等内容都拥有单独的标签,替代了泛型的可读/可写状态。这允许将更精确的障碍发送到GPU,在一定情况下可以改良性能。

我们还移除了由RHI内部执行的多数显式障碍,最为明显的便是BeginRenderPass中的那些内容。在开始渲染通道之前,调用代码现在必须将渲染目标显式过渡到正确的状态。

资源的当前状态在一些情况下可能难以追踪。我们建议将 渲染依赖性图表 (RDG)用于新的渲染代码,因为它将处理状态追踪和障碍批处理。旧有的过渡API现已废弃,将在未来的引擎版本中移除。使用这些函数的现有代码将触发编译器警告,需要转换为使用新的API。

我们还添加了一个验证层,命令提交时(绘制调用、计算着色器调度、复制操作等)其将检查资源是否处在正确的状态。它的启用方式是将 -rhivalidation 标签添加到命令行,可以结合任何RHI使用。

RDG实现现在支持异步计算排程、合并渲染通道、剔除未使用的通道、合并只读状态,以及拆分在子资源粒度上追踪的过渡。新版本支持RDG资源的统一缓冲。延迟渲染器已进一步重构,使用统一的RDG构建器实例。深度前通道之后的内容现在都是一个单块渲染图表。

智能二次曲面细分改良

二次曲面细分工具已得到改良,用户能够对要重新生成三角形的表面进行更多控制。

二次曲面细分的新选项包括:

  • 所有完整和修改表面(但未删除)

  • 所有表面

利用音效类进行衰减距离缩放

使用音效类时,用户现在可以根据距离来缩放音效衰减。

Submix效果

此功能提供了与源效果立体声延迟相同的数字信号处理/DSP,但应用到了子混合之上。

垃圾回收改良

我们喜欢快速引用集合,降低了 FArchive 使用,从而改良了 垃圾回收 的性能。

欲知详情,请阅读 垃圾回收

变体管理器改良

新版本中,变体管理器更加易用,用户能够轻松设置变化并切换Actor层级的可视性。用户现在可以设置变体之间的依赖性、使用Python来设置变体缩略图,并设置变体集的缩略图。

image alt text

用于iOS的Metal Shader编译器

我们为Windows上的Metal加入了新的着色器编译器。Windows用户能够以简化的工作流来编译iOS项目的着色器,无需再使用远程着色器编译。

要使用Windows Metal Shader编译器,需要安装 Windows的Metal开发者工具 。之后可以在 项目设置 > iOS 下启用着色器编译器。

iOS/tvOS游戏手柄输入(正式版)

iOS、tvOS和iPadOS 14现支持大量的输入设备,包括游戏手柄、键盘、鼠标和触控板。另外,用户可以在操作系统层面上重设Xbox和PlayStation的按钮,而操作系统将负责处理按键显示。

从4.26版开始,我们重构了这些设备的输入处理,以完全利用输入设备的新选项;用户可以使用蓝图中的 Get Gamepad Button Glyph 节点来获得精确到用户按键绑定的字形。

ChunkDownloader插件(测试版)

我们在虚幻引擎4.26版中加入了一个名为 ChunkDownloader 的全新打补丁插件。这是用于给《Battle Breakers》打补丁的系统,适合用来定期打数量较多但内容不大的补丁。

ChunkDownloader初始化后,它首先将下载清单文件的最新版本。为了让后续的.pak文件下载,它将使用清单来检查本地文件是否为最新、丢弃不在清单中的文件,并下载硬盘上没有的文件。

欲知如何着手使用ChunkDownloader,请参见ChunkDownloader快速入门指南。

支持Google GamePAD(测试版)

虚幻引擎也支持Google的 Play Asset Delivery 系统,其在Google Play Store上的 App Bundle 版本中。

创建App Bundle版本(.aab)时,用户可以将纹理、模型和文本文件等资产单独分入.pak文件中,让后将其作为 Asset Packs 纳入你的App Bundle版本中,并将其上传到Google Play Store。Google的动态内容交付系统将在用户的设备上安装一个优化的.apk;使用GooglePAD插件包含的库,用户就可以请求下载自己提供的资产包。可以进行配置,在应用程序的特定阶段进行交付。

请参见 Google Play资产交付参考 ,了解在项目中使用Google GamePAD的更多细节。

此插件仍在测试阶段,需要进行一些手动设置才能将.pak文件单独分入资产包。

太阳天空插件性能改良

Sun和Sky Actor( 太阳位置计算器(Sun Position Calculator) 插件的一部分)利用了实时采集模式天空光照渲染的最新改良,移除天空和材质之间的视觉差异,同时改良场景的性能。

欲知此插件及其使用的详情,请参见 Sun与Sky Actor 文档。

Niagara更新与改良

新版本中,我们继续提升了Niagara的稳定性、性能和整体内存使用率。具体更新如下:

  • 持续努力提升在各个平台上的性能,并降低内存使用。

  • 将Niagara粒子系统与Sequencer进行更好的整合。

  • 更新用户界面,改良用户体验和易用性。

  • 全新的 数组输入(Array Inputs) 允许在Niagara UI堆栈中加入数组。数组可以由用户创建,且拥有内置选项,可按索引来进行直接对其进行处理、在生成时间、每帧随机选择数组元素,或利用绑定属性对数组元素进行插值。

  • 添加了一套新的 粒子属性阅读器(Particle Attribute Reader)模块 ,允许一个发射器采样另一个反射器的粒子,并根据此采样做出决策,例如根据其进行生成、要复制哪些属性,以及采样后对其进行何种操作。此行为在GPU上运作,并启用了领头者/跟随者关系。Niagara发射器中刚性和柔韧链新泛化的约束函数便是利用了粒子属性阅读器。

    image alt text

  • 全新内置Niagara分析器。它整合了现有统计数据系统,能够提供CPU模块及GPU整体脚本开销的实时编辑器内分析。它也可用于发射器和系统脚本。

    image alt text

欲知最新信息,请参见 Niagara视效 文档。

Niagara随机输入重构

Niagara随机数动态(Niagara Random Number Dynamic)输入已被重命名为 Random Range X ,以更好地匹配蓝图中的对应内容。现在使用random number dynamic输入默认只在生成时计算一次随机数,简化更新脚本中随机数的使用。在发射器或系统脚本中使用时,生成可设为每次循环重计算一次。例如每次循环计算一次生成喷发时间。

从数组选择X(Select X From Array) 可用的随机数组动态输入新集合中存在新的数组输入。这个随机数组动态输入集合将自动创建一个数组,可以随机选择,或使用数组索引直接在堆栈UI中进行处理。

image alt text

Cascade to Niagara Converter(实验性)

新版本中加入了一个 Cascade to Niagara Converter 插件,便于使用者快速将粒子系统快速从Cascade迁移至Niagara。

image alt text

要使用它,请在插件窗口中启用 Cascade to Niagara Converter 。启用后,你可以右击Cascade粒子系统资源并选择"转换为Niagara系统",在同一目录中生成一个等效的Niagara系统。生成的Niagara系统保存转换过程的日志,以帮助指导从Cascade范例进行上转换。

"Cascade to Niagara"转换器工具是实验性的,并不支持Cascade系统的所有模块、渲染器和属性,包括事件、光束和AnimTrail渲染器、向量场和逐LOD缩放。建议使用此Converter工具作为在Niagara中创建拥有类似Cascade行为的FX资源的入门工具,以便帮助你向上升级Cascade系统。

Cascade系统的转换是通过Python脚本层实现的,该脚本层支持逐Cascade模块的Drop In/Out脚本,以实现定制的资产转换,并以编程方式生成新的Niagara发射器和系统资产。

Niagara组件渲染器(实验性)

Niagara 组件渲染器 是一个实验性节点,可以添加到**渲染(Render)** 堆栈下的Niagara发射器中。它通过编辑器中提供的各种组件类型提供逐平台的可伸缩性覆盖(scalability overrides)。组件渲染器使你能够快速指定任何组件类型,例如点光源或静态网格体组件,并允许你将粒子模拟前的数据绑定到任何组件属性。它是美术师和设计师的理想之选。他们通常会希望通过一系列新功能快速迭代他们的想法。

Niagara高质量粒子光源

现在Niagara中,使用 Component Renderer 节点(其使用点光源组件)的粒子模拟能够形成高质量的投影光线。这适用于针对高端设备和画面极佳的项目。

和Light Renderer节点不同(其只能提供模拟的基础属性和光照),Component Renderer使用了点光源组件,为美术师和设计师提供了光源属性和功能的完整集合。

image alt text

从Niagara粒子模拟播放音频

在新版本中,从粒子交互播放音频的方法要简单许多,可以使用简单的一次性"用后即忘"音效,或对音频进行更为复杂的控制(例如控制音效播放时的音高)。这改良了将粒子数据导出到蓝图的工作流,来触发需要的音频效果。

对于那些在Niagara系统禁用或销毁后仍在播放的 一次性音效 ,可以将 Play Audio 节点添加到一个模块堆栈并进行配置,以此方法来进行设置。现在每次模块计算时,它都将检查Particles.PlayAudio属性,如属性已启用便创建一个音效。

对于已启用绑定为true时进行播放、Niagara系统被销毁或重设时停止播放的音频而言,可以通过 full audio control 对其进行高级控制。将一个 Play Persistent Audio 模块添加到模块堆栈,并对其进行配置即可设置。要修改播放音效的属性,则将 Update Persistent Audio 模块添加到堆栈并进行配置。

首先请阅读Epic Games Launcher"学习"选项卡中更新的内容范例项目,其中展示了这两种方法。

Advanced Niagara Example Content

内容示例(Content Examples) 项目添加了许多新的Niagara粒子示例,供你在此版本中学习。

image alt text

你可以通过Epic Games启动程序 学习 选项卡来下载内容示例工程,以此访问最新添加的内容。然后,加载 Niagara Niagara_Advanced 关卡。

Niagara GBuffer数据接口(实验性)

此数据接口允许你在Niagara GPU模拟中从GBuffer读取属性。例如,阅读漫反射颜色、世界法线、自定义深度、场景深度、场景颜色等。打开Niagara_Advanced关卡,通过1.4示例了解如何准确使用这些内容。

已移除:OpenGL桌面渲染

在4.23版中,OpenGL便已无法再用于桌面渲染(SM4/SM5)。4.26版现在已经将其桌面选项移除。它的使命便宣告结束,无法再使用,我们也不会再提供维护。Vulkan是Linux上的支持RHI。OpenGL仍可用于运行桌面上的移动渲染器,在启动时传递这些标签"-game -opengl -featureleveles31",对GLES问题进行调试。单独传递"-opengl"将显示错误,并使用平台的默认RHI。

Sequencer的全新运行时性能系统

随着实时电影内容的复杂性、规模和保真度不断推动虚幻引擎达到新的品质,我们能够以批判的眼光来评估虚幻引擎电影工具Sequencer的运行时能力,并确定可以优化的潜在领域。

在4.26中,我们推出了一个新的底层运行时架构,使大规模电影和并发用户界面动画的性能比以前更好。通过借助面向数据的设计原则并重新组织运行时数据结构及逻辑,我们在处理大型数据集时实现了更大的优化潜力和更强的第三方可扩展性,并为未来实现更具交互性和动态化的线性内容铺平了道路。

要了解更多系统变化、旧版本到4.26的升级内容以及API中断的信息,请参阅技术博客《Sequencer through a new lens: Cinematic performance in 4.26》。

Sequencer品质强化与改良

新版本中加入了数项全新的Sequencer品质强化与改良。

UI/UX改良

  • 全局标记

  • 曲线编辑器

  • 带有编辑器内预览的摄像机抖动源抖动轨迹

  • 树分组便于用户创建特定轨迹的自定义视图。用户可以借此轻松查看和调整特定轨迹,而无需调整轨迹层级。

  • 子序列现在将在浏览器层级中显示完整的操作历史足迹(breadcrumb)。

  • 现在可以使用热键F快速锁定选中的关键帧。

流程改良

Sequencer现支持访问Python中的脚本层。用户可以借助编辑器工具控件使用以下内容:

  • GetSelectedSections、SelectSection

  • GetSelectedTracks、SelectTrack

  • GetSelectedFolders、SelectFolder

  • GetSelectedObject、SelectObject

  • EmptySelection

计算改良

用户现在可以播放特定的帧,并在任意点停下。这对实时活动和直播的字幕系统很有帮助。

iPad的Live Link Face

我们更新了 Live Link Face app,提供对iPad和iPhone的官方支持,以便用户轻松利用大屏进行面部采集。

校色区域

利用 校色区域(Color Correct Regions) 可以将颜色分级应用到虚幻场景中的一个区域。就摄像机中的VFX拍摄而言,用户可以将真实世界布景和LED屏上显示的虚幻场景的光影进行对比。

时间码及同步改良

在此版本中,我们增添了数个采集时间码数据的功能。使用AJA或BlackMagic SDI撷取卡内锁引擎时,能够以快于时间码源的速度来运行它们。现在它将自动生成中间的时间码值,而非对它们进行重复。

定时数据监控器

插件 Timed Data Monitor 将基于源时间码来对齐多个Live Link和媒体源的计算。在Timed Data Monitor面板中可以管理多个源,并查看其同步状态。

节点上的自定义属性

我们在节点上添加了自定义时间码属性的支持。在录制 Sequencer 和动画资产中的actor时, 镜头试拍录制器(Take Recorder) 将生成自定义属性。此外,FBX导入和导出现在将保留时间码数据。

通过动画序列资产存储和评估的自定义属性是 实验性的 ,不应用于制作项目。

AR合一(测试版)

我们找出了支持AR平台功能集的常用功能,将它们整合到了虚幻引擎的一个通用AR工具套装中。拥有不限平台的AR工具套装后,用户就可以在每个平台上编译相同的API,甚至不支持也可以操作。

ARCore 1.18支持

用户可以借助最新ARCore版本中的Depth API,让真实世界的物体遮挡增强现实app中的全息投影。Depth API将使用运动深度(depth-from-motion)算法来生成带单个RGB摄像机的深度贴图。

image alt text

ARKit 3.5支持

用户可以使用ARKit 3.0中的高级功能,包括场景几何体、实时AR,以及对动捕和遮挡的改良。

ARKit 4.0支持(测试版)

新版本支持ARKit 4.0及其功能,例如深度API,其使用LiDAR扫描器和几何体锚点(Geo Anchors)来设计真实世界中的兴趣点。

新增内容:平台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 r21b

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

  • ARCore

    • 1.18

  • ARKit

    • 4.0

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

    • v17 clang-10.0.1-based (CentOS 7)

  • Oculus

    • 1.44

    • API Level 23

  • OpenXR

    • 1.0

  • Google Stadia

    • 1.53

  • Lumin

    • 0.23

  • Steam

    • 1.47

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 10.4.0 + NEX 4.6.4(可选)

    • 最低固件版本: 10.0.2-1.0

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

  • PS4

    • Orbis SDK 8.008.011

    • 系统软件 8.008.041

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

  • XboxOne

    • XDK:2018年7月 QFE-13

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

    • 支持IDE:Visual Studio 2017

  • macOS

    • 支持版本

      • macOS Big Sur 11.0.1,最新版 Xcode 12

    • 推荐版本

      • macOS Catalina 10.15.7,最新版 Xcode 12

    • 最低版本

      • macOS Mojave 10.14.6,Xcode 11.3. 1

    • 设备架构说明

      • 为MacOS目标添加了对原生Apple Silicon的初步支持*****

      • 某些SDK还不支持ARM64 (例如Steam、Vivox)。

  • iOS / tvOS**

    • 推荐版本

      • 最新版 Xcode 12

    • 最低版本

      • Xcode 11.3.1

    • 目标SDK版本 12.00 - 14.XX

主要升级说明

AI

  • Bug Fix: Fixed UAIPerceptionStimuliSourceComponent's issues with unregistering from all senses if RegisterForSense has already been called during its lifetime.

  • New: The Environment Query Editor is now an engine plugin that is enabled by default; Individual users are no longer required to enable it via the experimental settings. The editor is still considered experimental and disabling the plugin will remove access to the feature.

  • New: Fixed issues in AIPerceptionComponent where perceptual data associated with actors were no longer valid and being broadcasted through delegates.

  • New: Moved AI domain automation tests to System.AI " over from System.Engine.AI '.

  • New: Removed AIController dependencies of the AIPerceptionComponent and now it can be used with non-AI agents.

  • New: Made the UE4ML plugin public. Engine/Plugins/AI/UE4ML/README.md contains the basic documentation.

  • Improved: Added a tiny optimization to avoid calling AIPerceptionSystem.OnNewPawn when the perception system is configured to not care about new pawns.

  • New: Switched AIPerceptionSystem's stimuli aging from previously using a timer to now counting elapsed time. In normal circumstances this doesn't make any difference, however, this change does help when trying to use the perception system in replays where UAIPerceptionSystem::StartPlay ends up not being called.

  • New: Added a blueprint-callable function to AIPerceptionComponent.GetPerceivedHostileActorsBySense and the native alternative GetHostileActorsBySense in addition to a new flexible filter GetFilteredActors that can use any arbitrary predicate for filtering.

Behavior Tree

  • Crash Fix: Fixed a BlackboardComponent issue resulting in a failed check crash when a new BlackboardComponent is being created as part of AAIController::UseBlackboard call and the BB asset being used has synchronized keys.

  • Bug Fix: Fixed an issue with behavior tree combo buttons in the editor resulting in creating multiple instances.

  • Bug Fix: Fixed Behavior Tree highlight for decorators using abort priority.

  • Bug Fix: Fixed stats for instance memory, number of loaded templates and number of created instances.

  • Bug Fix: Fixed computation of the child execution index of a composite node when the child is a task node with services.

  • Bug Fix: Fixed a bug where a tick function that is ready to run during the current frame could get rescheduled back to a previous frame

  • Bug Fix: Fixed a bug with Behavior Tree Component not Ticking even though ticking was still enabled.

  • Bug Fix: Fixed a bug in UBTNode::CastInstanceNodeMemory that was making it impossible for BT node child-classes to extend its parent class" memory structure.

  • New: Newly created Blackboard assets using the "New Blackboard" button are now automatically assigned to the BehaviorTree.

  • New: Added unregister queue for decorator abort to prevent removing auxiliary nodes while iterating through them.

  • New: Added unit tests when exiting a branch due to a parent decorator failure to validate that all auxiliary nodes below it are unregistered.

  • New: Made automatic creation of "SelfActor" entry in newly created blackboard assets optional. This is controlled via AddBlackboardSelfKey property in the Project Settings.

  • New: Added a failed-case warning to UBehaviorTreeComponent::RestartTree to let the user know that restarting has failed and why.

Debugging Tools

  • Bug Fix: Fixed FGameplayDebuggerCanvasContext::PrintAt functions to properly save and restore previous cursor and default positions

  • Bug Fix: Fixed EQSTestingPawn to update it's query and results upon selection in the Editor.

  • Bug Fix: Fixed SIGHT_LOG_SEGMENT and SIGHT_LOG_LOCATION AIPerception logging macros.

  • Bug Fix: Fixed Label drawing on a numerous amount of vislog shapes.

  • Bug Fix: Fixed CrowdManager from not displaying debug drawing if it's being run in Client-Server PIE.

  • New: Zoom is now applied at cursor position in VisualLogger.

  • New: Added tweakable cvars to control refresh rate "ai.debug.nav.RefreshInterval" and size of the displayed area 鈥渁i.debug.nav.DisplaySize" for navmesh through the GameplayDebugger.

  • New: AI testing framework improvements:

    • Changed signatures of test-time FAITestBase methods to give those functions a way to signal that the test went wrong.

    • Added an easier route for implementing a bunch of high-granularity tests using a common fixture. (see the IMPLEMENT_INSTANT_TEST_WITH_FIXTURE macro)

    • Switched a numerous amount of 'latent' AI tests to properly mark them as 'instant"

    • Changed how assertions are being tested to replicate how UTEST_* macros work. Updated all AI tests to utilize the new approach.

  • New: Improved FGameplayDebuggerCategory_Perception::CollectData so that it can now collect PerceptionComponent data even if the current DebugActor is not AI-controlled.

  • New: Added a console command to the gameplay debugger (gdt.EnableCategoryName) that allows setting an enable/disable state of a category indicated by a partial name.

  • New: Added a flag to VisLog settings that controls how we differentiate between logged objects. The default behavior remains, but by setting the flag ForceUniqueLogNames, we generate IDs more probable to be unique across the engine session.

  • New: Enabled the capability to summon an in-game hud for GameplayDebugger during replay playback.

  • New: Added an option to enable shadows by default for gameplay debugger's text. (DebugCanvasEnableTextShadow in Project Settings).

  • Improvement: Fixed a vislog's performance and architecture issue that resulted in vislog constantly recreating AVisualLoggerRenderingActor in client-server PIE due to vlogging with different worlds.

  • Bug Fix: Fixed computation of the navmodifier area in the NavModifierComponent when using the failsafe extents.

  • Bug Fix: Fixed a scenario where navmesh might get deleted on load when streaming in NavigationData and NavMeshBoundsVolume from different levels depending on the loading order.

  • Bug Fix: Fixed holes in NavMesh caused by single voxel areas near the area boundary.

  • Bug Fix: Fixed computation of the vertices count between mesh and detail mesh when creating the BVTree in DetourNavMesh.

  • Bug Fix: Fixed InstancedStaticMesh components that were not registered to the navigation octree if their associated mesh was assigned post registration.

  • Bug Fix: Added error reporting and fixed calls to GetNavigationParent in UNavRelevantComponent that were being made before the cache initialization.

  • Bug Fix: Added a safe-guard to make sure FRecastBuildConfig.tileSize doesn't end up being 0.

  • Bug Fix: Fixed mesh loading dependency for static mesh using a ComplexCollisionMesh and ensured physical meshes are created before creating the nav collision. This fixes missing collisions when using ComplexCollisionMesh to create nav collisions for meshes.

  • Bug Fix: Fixed missing navmesh tiles when cooking maps from the editor 'Launch" This includes fixing multiple AI tests failing when locally running in a cooked build, and enemy bots not moving when launching Sanctuary in the ShooterGame example project.

  • Bug Fix: Changed UNavigationSystemModuleConfig::UpdateWithNavSysCDO to no longer copy the value of UNavigationSystemV1.bStaticRuntimeNavigation since it resulted in the the value of static bStaticRuntimeNavigation persist between maps.

  • Bug Fix: Fixed possible NaN when calling GetPolysInBox.

  • Bug Fix: Fixed a serious issue with FRecastQueryFilter::SetIsVirtual that resulted in losing virtual function overrides if called on a derived filter class.

  • Bug Fix: Fixed navigation octree not being updated when custom navlinks state change. This fixes dynamic navmesh updates causing navlinks to reset to their default state.

  • Bug Fix: Modified how we react to RecastNavMesh's generation-category value changes. The main goal is higher reliability while changing properties in the editor, meaning that the property being changed is the driving factor of other properties" changes which keeps the value from being changed.

  • Bug Fix: Fixed a navmesh rasterization offset by one when projecting spans to bottom. This is related to the usage of the bFillCollisionUnderneathForNavmesh property.

  • New: Changed the CrowdFollowingComponent dependencies to use IRVOAvoidanceInterface from the movement component instead of the UCharacterMovementComponent.

  • New: Added CSV stats for navigation generation tasks.

  • New: Added error reporting for large areas dirtying the navigation data. Error reporting is disabled as long as navigation lock is effective.

  • New: Added advanced property "DirtyAreaWarningSizeThreshold" in NavigationSystem to report warning logs when tiles larger than the specified threshold are pushed to the dirty queue.

  • Optimization: Optimized RecastNavMeshGenerator MarkDirtyTiles by reducing search size in dirty tiles set and the number of copies between containers. The order of the pending elements is now preserved if tile sorting isn't used.

  • New: Added compile switches for segment links ( WITH_NAVMESH_SEGMENT_LINKS ) and cluster ( WITH_NAVMESH_CLUSTER_LINKS ) to allow projects that don't require them to save memory.

  • New: Added support for asynchronous pathfind queries with dynamic generation.

  • New: Synchronization between the async pathfind query tasks and the game thread. The sync point is implemented in OnWorldPostActorTick. This prevents pathfind requests from running at the same time as Navmesh generation tasks or beyond the engine frame boundary.

  • New: Replaced task to broadcast async pathfinding results by a queue that is flushed by the NavigationSystem update. This prevents tasks from being started during loading or other undesired locations.

  • New: Replaced task to register new active path instance by a lock to ensure all paths are registered for potential invalidation before adding a generated tile on the main thread.

  • New: Added a new project setting bUseExtraTopCellWhenMarkingAreas to control the addition of extra cells on top of shapes when marking areas. Added a similar option on FAreaNavModifier to allow exceptions. This is useful for objects that affect navigation on the floors above them.

  • New: Made UNavCollision.AreaClass read only in the StaticMesh editor if bIsDynamicObstacle==false.

  • New: Added 'bMaskFillCollisionUnderneathForNavmesh" option on NavModifierVolume to go along with 'bFillCollisionUnderneathForNavmesh" This allows navvolumes to mark a 2D area to be ignored by the fill under feature.

  • New: Added additional logs to track geometry and their bounds when added to navigation.

  • New: Ensure to mark map packages as dirty when navmesh tiles are built, except for when automatic navigation build is occurring on load.

  • New: RecastNavMeshDataChunk can now be used to move and rotate navmesh tiles on the tile grid.

  • Added utilities to allow movement and rotation of navmesh tiles on the tile grid (dtTransformTileData and dtComputeTileOffsetFromRotation).

  • New: Added functionality to properly account for time slicing across multiple generators. The time slicing is now calculated in the navigation system.

  • New: Added some more stats to help trace down long navmesh tile generator times.

  • Improvement: Improved logging of locks and rebuild all for the navmesh.

  • Deprecated: IsNavigationBuildInProgress(bool) and IsBuildInProgress(bool). These functions behaved inconsistently between the different navmesh build types and were causing issues.

Animation

  • Crash Fix: Fixed a crash when re-opening an asset editor after a new preview mesh is applied.

  • Crash Fix: Fixed a crash when duplicating older Control Rigs.

  • Crash Fix: Fixed a crash when opening a level with a saved skeletal mesh component that has a post-process anim Blueprint.

  • Crash Fix: Fixed a crash when compiling an actor implementing an interface referenced by its mesh component's anim notifies.

  • Crash Fix: Fixed a crash when trimming a rich curve with invalid key handles.

  • Crash Fix: Renamed FComponentData in AnimationBudgetAllocator.h to FAnimBudgetAllocatorComponentData. This fixed a crash that's suspected to be caused by the compiler generating code with the size of another struct with the same name.

  • Crash Fix: Fixed various crashes when playing back Geometry Cache.

  • Crash Fix: Fixed crash when exiting while async animation compression is still in progress.

  • Crash Fix: Fixed crash in TallyErrorsFromPerturbation when animation contains a track that doesn't exist on the target skeleton.

  • Crash Fix: Fixed editor crash when exporting anim sequences with a changing UIDToArrayIndexLUT.

  • Bug Fix: Fixed FStringView overload of IAnalyzer::FEventData::GetString to now return the correct buffer size.

  • Bug Fix: Fixed notifies from not being fired for linked instances when running "root motion from everything".

  • Bug Fix: Pin watches now work for property access bindings.

  • Bug Fix: Fixed some thread safety issues with parallel physics blending.

  • Bug Fix: Fixed linear interpolation in the Pose Driver.

  • Bug Fix: Restricted fast-path MakeStruct support to split pins in order to ensure nodes update correctly.

  • Bug Fix: Fixed a bug with AnimNode_SaveCachedPose not properly propagating Initialize to children.

  • Bug Fix: Fixed linked anim graphs that were not properly tearing down their anim instances in TeardownInstance.

  • Bug Fix: Restricted Animation Blueprint compiler subsystem APIs.

  • Bug Fix: Re-enabled ticking for controlled components when the animation budget allocator is disabled.

  • Bug Fix: Implemented a Guard against tracing object properties when the channel is disabled.

  • Bug Fix: Fixed root motion playing faster when the animation budget allocator is enabled.

  • Bug Fix: Animation Layer defaults for a single group can now come from different Animation Blueprints.

  • Bug Fix: LinkAnimClassLayers can now be called from within UAnimInstance::UpdateAnimation.

  • New: Moved away from templated getters for value arrays, replaced with regular function overloading.

  • Bug Fix: Fixed baked additive data for Custom Attributes. Previously the base sequence data was not taken into account. + Changing additive automation test to use an animation sequence as base pose rather than ref-pose

  • Bug Fix: Ensure geometry caches adhere to lighting channels.

  • Bug Fix: Changed how multiple additive states are handled within the Animation Sharing system to ensure state-specific animations will be ticked.

  • Bug Fix: Fixed crash reimporting a skeletal mesh in skeletal mesh editor with LOD or weight filter applied.

  • Bug Fix: Fixed a crash when inspecting a BlendProfile property within the Blueprint Diff tool.

  • Bug Fix: Fixed SkeletalMeshes with AnimSharing from being unable to turn off ticking.

  • Bug Fix: Fixed Control Rig from folding into itself when loops are present.

  • Optimization: Heavily optimized TraceSourceFiltering plugin runtime performance.

  • Bug Fix: Added new EulerTransform Control Type to allow rotations above 180 degrees.

  • Bug Fix: Fixed collapsing hierarchy when using root motion on additive animations.

  • Bug Fix: Fixed virtual bones being reordered during removal.

  • Bug Fix: Changed how Anim Node Live Link determines whether or not an animation and basic roles are supported.

  • Bug Fix: Async anim compression now cancels existing attempts if we are requesting a new compression on the same animation.

  • Bug Fix: Fixed baked transform curves crash when the track doesn't currently exist.

  • Bug Fix: Fixed deterministic cook issue with the pre smart name skeletons.

  • Bug Fix: Fixed insert frame leaving raw/source animation data in invalid state.

  • Bug Fix: Get marquee selection is now working with Control Rig controls.

  • Bug Fix: Stopped UAnimSequence CDO from trying to load a compression scheme.

  • Bug Fix: Fixed looping in marker sync blend spaces.

  • Bug Fix: Removed filtering on async anim compression toast notification.

  • Bug Fix: Fixed blend space marker sync popping when markers land on animation boundaries.

  • Bug Fix: Fixed Apply compression in the editor from blocking the main thread.

  • Bug Fix: Added new functionality when selecting multiple Controls with different gizmo's supported (pos,rotate,scale), Select will now use the first gizmo, otherwise a flash will indicate as you cycle between them.

  • Bug Fix: Added option to edit mode in Control Rig. Edit mode will now translate multiple objects in their own local space instead of the first object's local space.

  • Bug Fix: Removed USkeleton reference from anim compression to address thread safety.

  • New: Sync groups can now optionally sync with other linked instances.

  • New: Added CustomAttribute feature to support float/int/string curve data within AnimationSequences on a per-bone basis.

  • New: Added customization details for (Baked)Custom attribute structures - Showing bone name rather than the index - Grouping the attributes according to their types - This will only show the number of keys for individual attributes. (no data)

  • New: Added support for URO/interpolation of custom attributes #misc fix attribute look-up crash with nullptr skeletal mesh

  • New: Added hide baked custom attributes property, which was causing performance issues with Slate.

  • New: Added AnimSequence.h Include into CustomAttributeCustomization.cpp

  • New: Moved deprecated functionality to AnimSequenceBase and deleted all overrides from child classes.

  • New: Reworked the TraceSourceFiltering tab.

  • Pulled out source filtering widgets into a separate CompoundWidget.

  • Wrapped different filtering widgets within SExpandableArea rather than into splitters.

  • Fixed incorrect ComboButton style name.

  • New: Reworked (SourceFiltering) World filtering tab.

  • New: Added toggle button style it, World filtering will now use toggle buttons rather than menu items.

  • New: Introduced high-level actor class filtering concept to TraceSourceFiltering plugin.

  • New: Added Actor class specific filtering.

  • New: Added Widget to SourceFiltering tab for setup.

  • New: Added Actor class filtering data to SourceFilterCollection.

  • New: Added filter picking functionality to session service.

  • New: Added ActorCollector, similar implementation to TActorIterator, this functionality filters the AActors at UObject hash table level, drastically increasing performance for a large number of actors vs IsA () within user filters.

  • New: Added ForEachObjectOfClasses.

  • New: Added the ability to create a data source filter class from within the Source Filtering tab.

  • New: Added Blueprint and Python exposed functionality to retrieve curve names from an Animation Sequence.

  • New: GetBoneIndex, GetRigidBone and GetBoneWeight on FSkinWeightVertexBuffer are now exported.

  • New: Converted 'a.SkinWeightProfile.LoadByDefaultMode=1" from Scalability to Default cvar. Users should set these in the device profile rather than scalability from now on.

  • New: FullBodyIK plugin - this includes a FullBodyIK Solver Node that you can use in the ControlRig.

    • Takes a list of Effectors as inputs.

    • Takes a list of Constraints, which you can apply to any joint within the chain.

    • Enables users to tweak Joint's Limit, Stiffness, and PoleVectors.

  • New: Added the ability to scale gizmo's in the Animate Panel.

  • New: Eigen library has been upgraded to 3.3.7

  • New: Added an "AddToClient" method in ULiveLinkPreset that will not destructively add subjects and sources to Live Link.

  • Improvement: Optimized TallyErrors to significantly reduce anim compression overhead and worker thread blocking.

Animation Assets

  • Crash Fix: Fixed a crash when deleting a pose if the pose was prior to a base pose.

  • New: Added Support to ControlRig AnimNode and Pose Driver to support LOD Threshold for optimization.

  • New: Added Weighted Tangents for Rich Curve in Animation Editor.

Animation Blueprints

  • Crash Fix: Fixed a crash when selecting nodes in sub-graphs of deleted nodes.

  • Crash Fix: Fixed a crash when compiling an anim BP containing an animation node with a TMap exposed as a pin.

  • Bug Fix: Prevented pasted linked anim graph nodes from referencing Blueprints with other skeletons.

  • Bug Fix: Fixed ensure when resetting a preview mesh while a specific animation is set to be previewed for an animation Blueprint.

  • Bug Fix: Fixed Linked Anim Layer nodes without input poses failing to trigger inertial blends.

  • Bug Fix: Fixed being able to place input poses in state machine state graphs.

  • Bug Fix: Fixed inertial blending not being triggered when switching a Linked Anim Layer to a child Animation Blueprint.

  • Bug Fix: Added the option to force an update on the K2Event Node, to guarantee that the node is up to date in case any function declarations have moved from parent to child.

  • Bug Fix: Sequence players can now use bindings for pin-exposed sequences.

  • Bug Fix: An orphan pin will no longer be created when hiding a pin.

  • Bug Fix: Removed experimental flag from linked anim layers.

  • Bug Fix: Fixed an issue with sync group collisions when syncing with 'component" scope.

  • Bug Fix: Fixed an issue with ConvertComponentPosesToLocalPoses.

  • New: Enabled auto-sizing functionality for bone reference widget to allow it to grow larger to show the full bone name.

  • New: Added support for CopyPose AnimNode to allow ComponentSpace Pose. This can be useful when you want to copy a part of the hierarchy as an optimization.

  • New: Added Support for CopyPose AnimNode to select which joints to copy from 'select a root bone to copy from"

Animation Tools

  • Crash Fix: Fixed a crash when tracing an animation Blueprint with linked anim graphs/layers.

  • Crash Fix: Fixed a crash when closing the animation document tab with a curve editor tab open.

  • Crash Fix: Fixed editor crash in PersonaMeshDetails.cpp.

  • Crash Fix: Fixed a crash when removing a curve that hasn't been edited.

  • Crash Fix: Fixed a crash when a native control rig is selected when creating a new ControlRig.

  • Bug Fix: Fixed Animation Insights tab from always popping up in the editor when the plugin is enabled.

  • Bug Fix: Fixed frames provider to use Algo::LowerBound, it now supports int64.

  • Bug Fix: Added FStringView overload to string store.

  • Bug Fix: Fixed to prevent animation asset preview tooltips from continuing to advance after closing.

  • Bug Fix: Added a feature to loop animation insights playback inside the currently selected range.

  • Bug Fix: Fixed notify tracks not resizing when external modifications are made to notifies.

  • Bug Fix: Added copy/paste keyboard shortcuts for anim notifies.

  • Bug Fix: Converting a curve to metadata now zooms-to-fit for a consistent appearance.

  • Bug Fix: Added safety checks to prevent OOM when panning anim timeline after an anim notify is placed.

  • Bug Fix: Fixed notify labels jittering when label color changes.

  • Bug Fix: Fixed keyboard shortcuts registered in the Insights plugins from not functioning in standalone app.

  • Bug Fix: Fixed and improved snapping in animation editor timelines.

  • Bug Fix: Fixed Animation Insights traced data not appearing until PIE is stopped when enabling tracing while PIE is in progress.

  • Bug Fix: Disabling snapping to grid when editing 1D Blend Spaces now functions as expected.

  • Bug Fix: Changed Animation Graph Overrides layout to make it more readable with long property names.

  • Bug Fix: Added Ensure to maintain global and initial transforms in Control Rig, when reparenting items in hierarchy view.

  • Bug Fix: Moved Control Rig BoneIndex to CachedRigElement.

  • Bug Fix: Added Support for debug watches on variable nodes. You can now right click pins on variable nodes and debug watch them in the editor.

  • Bug Fix: Control Rig now uses defaults when exporting RigVM memory contents. Previously the VM was storing differences to a zero mem version of each register, with this fix we now use the default for structs.

  • Bug Fix: Control Rig will now draw bones in the editor when there is no skeletal mesh.

  • Bug Fix: Fixed marking assets as dirty upon opening Control Rig.

  • Bug Fix: Fixed Bool Math Constants from not working correctly in Control Rig.

  • Bug Fix: Fixed connectability issues by allowing mutable nodes to connect to previous nodes in the execution stack.

  • Bug Fix: Fixed a bug with resetting ControlRig Mapping info.

  • New: Added basic RBF interpolation nodes to Control Rig.

  • New: Added ability to trace an Object's property to the trace stream.

  • New: Added functionality to preserve camera speeds in animation editor viewport similar to how we preserve FOV.

  • New: Moved virtual destructor to ControlRigDrawContainer from ControlRigDrawInterface.

  • New: Implemented Base functionality around interaction rigs in Control Rig.

  • New: Introduced new "offset transform" for controls which allows spatial offsets without the use of spaces.

  • New: Implemented Looping in Control Rig. Users now have the ability to build graphs which can loop, solve multiple parts of the pose sequentially or perform a computation multiple times.

  • New: Implemented RigElementCollection for Control Rig. The collection data type allows the ability to group a series of items in the hierarchy using name based search, hierarchy traversal, and group operations such as union, difference etc.

  • New: Added Support for ControlRigComponent in Sequencer.

  • New: Added Support for Curves in the Control Rig Component.

  • New: Added Mirror functionality in Control Rig for hierarchies. Includes support for bones, controls, and spaces. This functionality can be utilized by right clicking elements in the hierarchy and choosing "Mirror" to create a matching, mirrored hierarchy.

  • New: Added Support for enums in Control Rig. Controls can now represent enums. To utilize this feature, turn the Control to be of type int32 and enable the enum setting in the details panel.

  • New: Added RigVM Support for external variables in Control Rig. External variables represent unowned memory and allow the VM to read / write to those.

  • New: Added Control Rig Inversion: Added Backwards event to enable users to define the execution to invert the rig, solving from an existing pose to animation inputs.

  • New: Added Control Rig: Constant folding - allows the VM to fold constant branches into a resulting set of values to optimize runtime performance.

  • New: Added Control Rig Component - a new component to host a Control Rig on an actor and connect other components. For example, this allows the ability to drive static meshes.

  • New: Added pin redirector functionality to Control Rig. Pins / struct members now properly support redirectors. If you need to change a data structure after serializing assets, you can rely on the default pin director functionality in the project ini files. The Control Rig graph will pick up the redirection and adjust pin default values accordingly for backwards compatibility.

  • New: Enabled blueprint-side variables and implemented an upgrade path. Control Rig now uses normal Blueprint Variables (through the MyBlueprint) widget. Parameters are auto converted to public variables in UE 4.26.

  • New: Added support for if and select branching in Control RigVM. New If and Select nodes perform branching based on a value selection. To use this functionality drag a pin out and look for If and Select in the context menu.

  • New: Added Support for nested dynamic arrays in Control RigVM.

  • New: Added Aim Math node in Control Rig.

  • New: Introduced bracketing scope system to bracket init, update, setup, interaction and sync in Control Rig.

  • New: SetRelativeTransform node now replaces SetRelativeBoneTransform.

Deprecation Note: Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Updated descriptions, keywords, and tooltips in Control Rig nodes.

  • New: Lift error reporting nodes to be interactive - nodes will now show changes as the graph is running in Control Rig.

  • New: Added new generalized GetTransform node to replace GetBoneTransform and 5 other nodes in Control Rig. The GetTransform takes in an item, and can now read any transform within the hierarchy.

  • New: Added Control Rig operation nodes : Name endswith, startswith, contains. String operation / Name operation nodes.

  • New: Control Rig will now Save default expansion state for nodes. Users can provide a default expansion state for a node and save it by right clicking the node and choosing "Save Default Expansion State".

  • New: Enabled Control Rig Component to drive the root component of an Actor.

  • New: Added a new Control Rig Ability to create collections by drag & dropping.

  • New: Added a Control Rig Collection Difference node.

  • New: Moved mode on FK Rig to UProperty instead of Control RIg.

  • New: SetTransform node in Control Rig will now replace SetBoneTransform, SetSpaceTransform, SetControlTransform, SetInitialTransform, SetInitialSpaceTransform. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Added support for sending events from a Control Rig to the Engine/Editor.

  • New: Added an "Additive" option to the context menu in FK Control Rig.

  • New: Added Branching support for execution model in Control Rig.

  • New: Added new Control Rig node: Propagate to Children Unit. This node enables the ability to propagate a transform change within the hierarchy to the children of a provided item. This is useful if you want to delay the propagation to a later time and manually call it.

  • New: Initialize Verlet integrator during the first run, not during init. To avoid an issue concerning determinism, we now initialize all verlet simulated nodes during the first run of the node instead of initialization time.

  • New: The Rig Hierarchy now uses Int32 for comparison of hierarchy topology versions. (adding, removing, renaming / repairing items).

  • New: Introduced notion of SliceContext per pin in Control Rig.

  • New: Added weight to fit on a curve node in the Control Rig.

  • New: Added new node to Control Rig 'Quaternion Scale Unit" A node which enables magnitude scalability of a quaternion.

  • New: Added 'Twist Bones Unit Node" to Control Rig.

  • New: Added PreSetup / PostSetup events and support units to Control Rig Component.

  • New: Added new functionality to Control Rig to support entry names + init execution.

  • New: Enabled Control Rig access to mapped elements in Blueprint.

  • New: Added Blueprint functionality to Control Rig component. You can now drive the Control Rig Component's functionality through Blueprint.

  • New: Added Hierarchy accessor units such as GetParent, GetParents, GetChildren and GetSiblings to Control Rig.

  • New: Introduction of slice context and support for a loop node in Control Rig.

  • New: Added Support for additive mode to FK Control Rig.

  • New: Introduced slices data structure to ExecuteContext and Dynamic Memory support in Control Rig.

  • New: Disabled Control Rig auto-compile during setup mode.

  • New: Added new hotkey Ctrl+Shift+G to reset all Control Rig transforms.

  • New: Provided access to event names and information about controls being accessible. The Control Rig API including the RigVM API has been extended to provide access to the supported event names as well as the accessibility of Controls.

  • New: Pin Watches now support slices (multiple values per loop) in Control Rig.

  • New: Added new node 'Item Exists" to Control Rig. Item Exists node will return false if a specified item cannot be found.

  • New: Enabled Shift P hotkey to Parent/Unparent User defined bones. Within the Rig Hierarchy Widget or the Control Rig Editor viewport press 'Shift+P" on your keyboard for parenting or unparenting the selection to the root of the tree.

  • New: Added draw space functionality to Control Rig. The Control Rig Editor's viewport now provides the option to draw all spaces by default.

  • New: Introduced support for the constant / varying state of pins and nodes in Control Rig to prepare for constant folding.

  • New: Events coming from Control Rig will now provide a total time.

  • New: Added Ensure to set map range and other settings on alpha interp during Execute in Control Rig.

  • New: Enabled the option to retain control values within the ControlRigEditor during compile. Within the editor preferences you can now choose if you want to retain the pose of Controls during a compile or not.

  • New: Added a new menu entry for adding an FK Rig in Control Rig and removed additive and automaticbonecurve rig from the asset filter when adding a track.

  • New: Added a new setting to Control Rig that enables the automatic reset of all transforms on compile.

  • New: Control Rig / RigVM: Change MaxArraySize tag to ArraySize Since we no longer support resizing of arrays we are dropping the Max prefix.

  • New: Replaced Control Rig Name unit.

  • New: Added Copy & Paste functionality to mouse location in Control Rig.

  • New: Added Support to Control Rig for creating comments using the 'C' hotkey.

  • New: Moved all DebugSettings on Control Rig node to "details only".

  • New: Added DetailsOnly functionality for RigUnits. Pins can now provide the "DetailsOnly" meta tag to make them show in the details panel.

  • New: Implemented access to all Control Rig control values in python. This includes minimum and maximum.

  • New: Upgraded Control Rig's AimBone, BoneHarmonics, ChainHarmonics and DistributeRotation to use FRigElementKey.

  • New: Added Mirror functionality to the Control Rig graph. To use, right click on a selection of nodes to allow string replacement and mirroring of transform pins.

  • New: Control Rig Sequencer will now use a display name test to track a name, rather than the class name.

  • New: Implemented new SetControlVisibility Node in Control Rig. You can utilize Control Visibility within the graph to hide sets of controls.

  • New: Implemented RigVM access to currently active instructions.

  • New: Implemented new nodes to Control Rig 'Collection enumerate' 'Index accessor' and 'get length" These nodes enable the user to get the index of an enumeration as well as the overall count / length.

  • New: Added new ControlRig Component to get two auxiliary Blueprint functions which simplify mapping elements.

  • New: Added new Plane intersection node to Control Rig.

  • New: Implemented int32 nodes and all related int32 math nodes to Control Rig.

  • New: Control Rig will now Set Initial Transforms on Controls in order to affect Offset.

  • New: Renamed Control Rig helper nodes for item and collection.

  • New: Implemented Control Rig API for introspection on available events / entries.

  • New: Added support scale for BasicIK in Control Rig.

  • New: Added Control Rig support for auto compile during setup mode.

  • New: Added weight to Control Rig DistributeRotation node.

  • New: Replaced GetBoneRelativeTransform with GetRelativeTransform node in Control Rig. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Replaced AddBoneTransform with OffSetTransform node. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Added Control Rig functionality to apply effector transform even if FABRIK or CCDIK doesn't change bone locations. In certain scenarios FABRIK and CCDIK nodes would not perform changes to the effector in the past.

  • Improvement: Improved keyboard workflow in Control Rig with pin name list widgets.

  • Improvement: Improved gizmo material and integrated with eye adaption in Control Rig.

  • Improvement: Added Branch folding for branch, if and select nodes. Optimized Compiler to remove unnecessary dead branches when using If and Select nodes.

  • Deprecated: Removed IControlRigManipulatable and IControlRigManipulationLayer in Control Rig.

  • Deprecated: Deprecated Blend(Transform) Node in Control Rig.

  • Deprecated: Removed ControlRigPickerWidget. The Control Rig Picker is no longer supported and has been removed.

  • Deprecated: Deprecated all other get transform nodes and updated "GetUnitLabel" in Control Rig. Users won't be able to the old nodes anymore, but content won't break. Old nodes will show up as 鈥渄eprecated" with a red node title.

  • Deprecated: Removed the manipulation module and moved the GizmoActor to the Control Rig module.

  • Deprecated: Disabled Point Simulation Node in Control Rig. Please note that this node is using a deprecated point solver which is going to be replaced by another physics solver. Please do not rely on this node.

  • Deprecated: If you were using the "MaxArraySize" metadata tag in a custom Control Rig node, replace it with 鈥淎rraySize" for 4.26+.

Import/Export

  • Crash Fix: Fixed various crashes when importing Alembic as a Geometry Cache or a Skeletal Mesh.

  • Bug Fix: Fixed materials not applying correctly to a flattened GeometryCache.

  • Bug Fix: Fixed a bug when importing animations that would try to report invalid progression values on an animation with multiple channels.

  • New: Added a new Alembic import option to skip computing tangents that can improve playback performance of a streaming Geometry Cache.

  • New: Added an experimental editor plugin to stream a GeometryCache from an Alembic file without having to import it as an asset. Enable the "Geometry Cache from Alembic File(Experimental)" plugin to start using it.

  • New: Improved playback performance of animated meshes inside a USD stage.

Skeletal Mesh

  • Bug Fix: Fixed missing macros in FSkinWeightVertexBuffer and FSkinWeightDataVertexBuffer.

  • Bug Fix: Explicitly specify which UAV buffers participate in overlapped compute shaders.

  • Bug Fix: Exposed Skin Weights public API to external modules.

  • Bug Fix: Fixed PoseableMeshComponent to now tick when the transform is updated.

  • New: Added warning on mobile if skelMesh LOD number of influences per vertex is greater than twelve.

  • New: 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.

  • New: 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.

  • New : Added LODSyncComponent to synchronize LOD across different mesh components, for example, SkeletalMeshComponent or GroomComponent. This can be used for synchronizing LOD to ensure the intended LODs are used together between different parts.

  • New: When the recomputing tangent option is on in GPUSkinCache, allow the user to select which Vertex Color channel to use to blend between the recomputed tangents and the skinned tangents. The color green is used as the default channel color.

  • New: Allowed classes that have FBoneReference properties to specify what skeleton to use by inheriting from IBoneReferenceSkeletonProvider.

Audio

  • Crash Fix: Fixed a crash on an audio device hot swap when channels have changed.

  • Crash Fix: Fixed a garbage collection crash with an async task owned by FMixerSourceBuffer.

  • Crash Fix: Fixed a crash due to a race condition with the Audio Spectrum Analyzer.

  • Crash Fix: Fixed a crash on load with the Oculus audio plugin.

  • Crash Fix: Fixed a crash that occurred during Submix Graph editing when trying to connect certain pins to or from a parent submix.

  • Bug Fix: Cooked Quality Node Culling now works properly; when enabled, projects will only cook the branches of the quality node that are enabled for that platform, discarding all other branches. This saves memory and speeds up serialization.

  • Bug Fix: Fixed a SoundConcurrency issue where StopLowestPriority and StopLowestPriorityThenNewest had swapped logic.

  • Bug Fix: Fixed a deadlock caused by listeners attempting to access an audio device instance during device destruction when it should no longer be accessed.

  • Bug Fix: SoundCueTemplate code now utilizes the new ClassTemplateEditorSubsystem.

  • Bug Fix: The proper SoundClass per SoundWave now shows when using stat waves/au.debug.soundwaves 1.

  • Bug Fix: Low-pass filters now behave correctly when set through a Sound Class mix.

  • Bug Fix: Fixed a submix issue with muting audio output in unrelated submixes.

  • Bug Fix: Fixed issue with ambisonic decoding where rotation had to occur in both elevation and azimuth to update the decoding instead of either/or .

  • Bug Fix: Fixed a bug where SoundCues wouldn't update the Stream Caching loading behavior of their USoundWaves.

  • Bug Fix: Fixed the mic noise gate threshold for OSS VoIP.

  • Bug Fix: Fixed a bug where sounds with a short fade-in were not playing.

  • Bug Fix: Impulse responses (IRs) have been removed from the list of assets that can be created from the Content Browser. This fixed an issue when using raw imported .wav data vs. compressed data for IR Assets.

  • Bug Fix: Fixed the default device selection in OSS VoIP.

  • Bug Fix: Fixed an issue with a flipped X-axis in ambisonics decoding.

  • Bug Fix: Fixed a bug where sounds in a concurrency system were becoming orphaned and stale if set to PlayWhenSilent.

  • Bug Fix: Added a normalized version of FSpectrumAnalyzer::GetMagnitudeForFrequency() called GetNormalizedMagnitudeForFrequency().

  • Bug Fix: Fixed submixes not re-registering in editor when modifying an effect array or reparenting submixes. Also fixed a crash that occurred when attempting to call InitInternal() from a render thread.

  • Bug Fix: Fixed a memory stomp in the editor when importing audio files.

  • Bug Fix: Fixed a bug with import math for impulse responses.

  • Bug Fix: Fixed an error on the gains of the upmixing function Mix2ChannelsTo6ChannelsFast.

  • Bug Fix: Fixed an issue with AudioComponent::StopDelayed() not stopping the audio component under certain conditions.

  • Bug Fix: A fix was made for the submix envelope follower delegate not outputting the correct envelope for the submix.

  • Bug Fix: Fixed a race condition on rebuilding the submix graph.

  • Bug Fix: Fixed an issue with updating params on submixes.

  • Bug Fix: Fixed a bug in the source effect chain initialization that caused source effects to not play in certain cases.

  • Bug Fix: Fixed the ability for audio components to control source bus sends in Blueprint through SetSourceBussendPreeffect and SetSourceBusSendPostEffect.

  • Bug Fix: Swapped function descriptions to match audio volumes for interior and exterior settings.

  • Bug Fix: Fixed an issue with sound class-based distance attenuation scaling.

  • Bug Fix: Fixed the audio component start time offset for playback percentage.

  • Bug Fix: Fixed short XMA stream truncation.

  • Bug Fix: Fixed a bug with passing an incorrect target platform name for cook overrides.

  • Bug Fix: Fixed an issue with soundfield submixes connecting to incompatible soundfield submixes in the submix graph. They are now shown as disconnected and incompatible.

  • Bug Fix: Fixed an issue with submix assets not opening correctly when double-clicked in the Submix Editor.

  • Crash: Fixed a crash caused by the immediate teardown of an audio device if the device fails to initialize.

  • Bug Fix: Fixed the audio distortion when resuming after a constrain/suspend app life cycle event on Xbox.

  • Bug Fix: Fixed a buzz issue with resonance when outputting to output > 2 channels (such as for surround) and graph has no binaural sources to process.

  • Bug Fix: Fixed a crash when calling GetMMDeviceInfo.

  • Bug Fix: Fixed an assert in FinishRecordingOutput when given an invalid path argument.

  • Bug Fix: Fixed a COM exception in the audio mixer.

  • Bug Fix: Fixed an issue with the non-realtime renderer outputting silence.

  • Bug Fix: Fixed a race condition in the audio renderer by refactoring the audio render buffers to use a thread-safe circular buffer.

  • Bug Fix: Fixed an OSS VoIP failure that occurred after level travel.

  • Bug Fix: Fixed an APU crash caused by a race condition on shutdown on Xbox.

  • Bug Fix: Fixed the support for audio Niagara Data Interfaces on the CPU.

  • Bug Fix: Fixed an issue of sounds failing to cull based on priority.

  • Bug Fix: Fixed an issue where sound cue node culling was not working in non-editor builds.

  • Bug Fix: Fixed an issue with rotating ambisonics sound sources.

  • Bug Fix: Fixed to ensure on servers when USoundWave::RetainCompressedAudio is called. Retained audio is not relevant for servers.

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

  • Bug Fix: Fixed an issue for when sample rate quality changes asset do not recook.

  • Bug Fix: Fixed an issue with source buses and submixes not getting properly imported or discovered when the editor is run with -nosound.

  • Bug Fix: Fixed a bug with quality 100 seekable streams (LPCM) hitting the EOF correctly.

  • Bug Fix: Fixed a bug with baked envelope data returning data for non-looping sounds.

  • Bug Fix: Fixed a hang on PIE exit.

  • Bug Fix: Fixed a shutdown for single-threaded applications.

  • Bug Fix: Fixed a rare hang when the application exits on Xbox.

  • Bug Fix: Fixed a dynamics processor key gain issue.

  • Bug Fix: Fixed an issue where the reverb dry level was not working correctly.

  • Bug Fix: Fixed a bug with the IR asset being in the correct category in the sound submenu.

  • Bug Fix: Fixed a race condition with audio device swapping.

  • Bug Fix: Fixed a Solo Sound Wave action that was not working.

  • Bug Fix: Fixed an issue with the Create New option in the editor for IR assets since they are converted from SoundWaves.

  • Bug Fix: Fixed an issue with audio assets getting compressed/retrieved from the DDC even when cooking the server, which resulted in long server cook times.

  • Bug Fix: Fixed a bug with multiple submix effects not processing.

  • New: Migrated modulation plugin debug commands to work properly with the au.debug.soundmodulators command.

  • New: A new interface was added for procedural audio generation to avoid UObject dependencies in the audio render thread: the ISoundGenerator.

  • New: Audio volumes can now send audio to submixes.

  • New: Dry (initial sound) and wet (repeated sound) level controls were added to submixes.

  • New: Improved the FAudioChunkCache::GetChunk()鈥攊f it is called with bBlockForLoadCompletion, it will perform that load synchronously instead of starting and waiting for an async task.

  • New: Added a LoadingBehavior category to the Audio Stream Caching section in AudioMemReport, as well as an on-screen debug print.

  • New: Added a new Audio Bus Asset feature that allows audio to be routed to effects but not rendered as audible.

  • New: A multiband compressor was added to the DSP library.

  • New: Multi-channel sources can now send to source buses.

  • New: Real-Time Submix Spectrum Analysis Delegate contains a host of improvements and new functionality over the existing submix spectral analysis utilities:

    • Convenience functions for creating spectrum bands make it easier to choose the right set frequencies for the sounds you want to visualize.

    • Custom delegate events and a configurable update rate provide easy control over the runtime cost of performing spectral analysis.

    • Normalization and Auto Range make the spectrum analyzer robust to all types of content.

  • New: Subtitle-related properties of Sound and Dialogue Wave are now exposed to Blueprints.

  • New: Added AssetUserData support to SoundBase.

  • New: Organized attenuation categories when they display in the Details panel.

  • New: Added a new convenience method in Blueprints for creating an OSC Server and Client that avoids common problems with the garbage collector.

  • New: Moved the Audio Modulator update to the audio render thread for smoother transitions and better audible masking of game thread hitches.

  • New: Added the ability to use PlaySound2D for non-UI related sounds.

  • New: Updated libsndfile to 0.1.9.

  • New: Added a Modulation Envelope Follower Generator.

  • New: Added a Class template.

  • New: Added the ability for plugins to define their own Modulation Generators.

  • New: Added data-driven Modulation Parameters, which are now assets that can be referenced by Modulation Destination Settings and modulator types.

  • New: Added delegates for reporting when playstate and virtualization change in an AudioComponent.

  • New: Added functions to audition Modulation Mixes in the editor.

  • Improved: Added an SIMD-optimized version of the plate reverb effect.

  • New: Added visual data and layouts for linear and unit encoding for Modulation Bus values in the editor.

  • New: Added a retrigger threshold for sound concurrency. Sounds that trigger on the same sound concurrency below the threshold will not be played.

  • New: Added new CVAR-based debug commands that replace and deprecate the older, stat-style debug commands.

  • New: Added an option for enabling all viewports in editor (present and future), as well as per viewport, by setting -allViews to on or off.

  • New: Added support for True Stereo impulse responses for the Convolution Reverb Submix Effect.

  • New: Additional multichannel mixing controls provide the tools needed to create a consistent convolution reverb for stereo and surround channel configurations.

  • Deprecated: Deprecated OnStart and OnStop synth component virtuals as they are redundant to OnBeginGenerate and OnEndGenerate.

  • Deprecated: Deprecated specialized import for multiple .wav files with special cased file names.

Automation

  • Bug Fix: Expected errors in automated tests are no longer reported as errors in commandlet runs or causing commandlet runs to return a non-zero return code.

  • Bug Fix: Fixed a typographic error ("Screnshots") for Automation errors.

  • Bug Fix: Fixed Linux packaging failure resulting from Lumin key being copied locally into Gauntlet.

  • Bug Fix: Fixed an issue where, on some platforms, new and modified screenshots for the automation framework could not be approved in the Editor.

  • New: Added stompmalloc and d3ddebug options to the EngineTest BuildGraph script.

Blueprints

  • Crash Fix: Fixed a crash on cook with Blueprint nativization enabled if an unexpected class type was specified in the 'ExcludedBlueprintTypes" list.

  • Crash Fix: Fixed crash loading a map after adding an entry to a set on an instance of a Blueprint when the set's default values in the Blueprint had at least 1 entry.

  • Crash Fix: Fixed an occasional crash during nativization of child Blueprint assets that were reparented to a native Actor class in an older editor version.

  • Crash Fix: Fixed a crash when renaming a nested UserDefinedStruct would incorrectly access pin indices after reconstruction.

  • Crash Fix: Fixed a crash when creating a Blueprint User Struct with the same short name as a C++ struct.

  • Crash Fix: Fixed a crash in SetLinker when loading actors with components that have subobjects.

  • Crash Fix: Fixed a crash that could occur after deleting and replacing references to a Blueprint asset.

  • Crash Fix: Fixed crashes that could occur after reloading Blueprint assets from the Content Browser.

  • Crash Fix: Using Undo after duplicating Custom Event nodes no longer causes a crash.

  • Crash Fix: Fixed a crash in SGraphPinKey construction of orphaned pins.

  • Crash Fix: Fixed a crash that could happen when gathering asset registry tags from a cooked Blueprint.

  • Crash Fix: Fixed an editor crash after converting a class with a user-defined type dependency when using the Blueprint native code generation developer menu tool.

  • Crash Fix: Fixed an editor crash that could occur when compiling a Blueprint Function Library with a function graph that contained an error if a dependent Blueprint contained a call to the library function in its construction script.

  • Crash Fix: Fixed an editor crash on process exit if one or more Blueprint assets were still being indexed in the background.

  • Bug Fix: Prevented pin types from propagating on the target array if it is a wildcard and there is already a connection type.

  • Bug Fix: Updated EnumEditorUtils to propagate to user defined structs as well, not just classes when the order of an enum is changed.

  • Bug Fix: Fixed the Blueprint delegate references not being updated after duplication.

  • Bug Fix: Added a missing code thunk for nativized Blueprint assets utilizing an array swap node.

  • Bug Fix: The construction script is now correctly run from FinishSpawning when an actor is spawned via Blueprint in the editor world.

  • Bug Fix: Fixed Reset Instance Changes to Default for Blueprint added components.

  • Bug Fix: Function nodes added by dragging from the function list will now correctly snap to the grid.

  • Bug Fix: Disabled adding parameters to functions during PIE.

  • Bug Fix: CompileAllBlueprints whiteList option will now work as one. Previously, It was acting as a black list.

  • Bug Fix: Fixed call in editor buttons visible in Blueprint editor.

  • Bug Fix: Fixed incorrect encoding on UHT boilerplate source files generated from a nativized Blueprint class header file with Unicode characters in one or more Blueprint function names.

  • Bug Fix: Fixed a potential C++ type ambiguity in a nativized Blueprint function call site with at least one input argument that accessed a non-native member through an unconverted stub class.

  • Bug Fix: Hid Shortest Path Pin by default on the Ease Function Blueprint node.

  • Bug Fix: Added missing nativized Blueprint typecast support for map key/value and set element wildcard-typed function call inputs.

  • Bug Fix: Fixed an edge case in nativized Blueprint ctor code generation where custom collision profile response values would sometimes not be applied to a mesh instance.

  • Bug Fix: Component Expose on Spawn properties are now correctly set before OnConstruction or OnRegister events occur.

  • Bug Fix: No longer display the bindable events if the object property cannot be resolved.

  • Bug Fix: Added Component nodes now correctly hide the comment bubble on disabled "ghost" nodes.

  • Bug Fix: TSubclassOf is now correctly reflected to nativized Blueprint C++ code for "wrapped" object ptr types.

  • Bug Fix: Fixed negative time check in K2_SetTimer.

  • Bug Fix: Instanced components will no longer remain visible in the component tree view after resetting to Blueprint defaults.

  • Bug Fix: Fixed a bug where using a reroute node connected to GetClassDefaults would cause pins to become hidden on compile.

  • Bug Fix: Fixed a bug where variables created by promoting a pin would lose their default value on undo.

  • Bug Fix: Fixed an unrecognized tab that appeared when opening a Blueprint that was not up-to-date in defaults-only editor mode.

  • Bug Fix: Fixed "Call Parent Function" nodes having an incorrect tooltip in duplicated Blueprints.

  • Bug Fix: Fixed non-commutative binary operators in FBasicMathExpressionEvaluator.

  • Bug Fix: Removed the ability to create a Property Reference type in the Blueprint editor as it is not functional on it's own. Native FFieldPath properties can still be used with a customization.

  • Bug Fix: Added missing code thunks for auto generated SetMapPropertyByName()/SetSetPropertyByName() call sites in a nativized Blueprint class.

  • Bug Fix: Fixed a compiler error that occurred when removing interfaces from duplicated Blueprints.

  • Bug Fix: Added IsConnectionDisallowed to UK2Node_CallArrayFunction to correctly block connections from related object classes.

  • Bug Fix: Added a KismetSystem function for setting FColor's properly, instead of incorrectly calling the setting for "FLinearColor" upon compilation.

  • Bug Fix: Added 'Self" as a reserved name for function parameters in Blueprints.

  • Bug Fix: When collapsing a to Function and Add Function in a const Blueprint, it will now automatically make the new function const.

  • Bug Fix: Updated the green "+" or 鈥渧iew" buttons in the details panel to properly utilize the ComponentTemplate class so native component delegates will show up as well.

  • Bug Fix: BP Variable sets will now only clear wildcard types if both pins are empty.

  • Bug Fix: Removed an unnecessary call to NotifyPostChange which was causing UserDefinedStruct recursion guard to trigger and not save references to assets.

  • Bug Fix: MaterialParameterCollection can now be promoted to variable in Blueprints.

  • Bug Fix: Map Variables now have an icon in the Blueprint Editor Action Menu.

  • Bug Fix: Fixed interface-typed inputs on non-native Blueprint functions leading to a compile error in its nativized C++ code if the input was cast to an object inside the function graph.

  • Bug Fix: Fixed case sensitivity for Switch on String node.

  • Bug Fix: Added soft class/object support to FDynamicOutputHelper::IsTypePickerPin. Remove invalid ensure about dynamic output pin directions.

  • Bug Fix: Updated the amount of padding for graph nodes by default so that it better fits our compact math nodes.

  • Bug Fix: Fixed non-nativized Blueprint stub functions failing to copy values back out to any output parameters after VM execution when using exclusive nativization.

  • Bug Fix: Fixed the default BlueprintNativeEvent method definitions in the DataSourceFilter/IDataSourceFilterInterface APIs to be overridable in C++ in order to support nativization of Blueprint implementers.

  • Bug Fix: Added more explicit messaging for map/set errors when attempting to create a container of non-hashable type.

  • Bug Fix: Disabled connections of exec pins to array, set, or map container nodes.

  • Bug Fix: Made local function variables global when converting from a function to an event.

  • Bug Fix: Fixed keyboard navigation issue after renaming a component in Blueprint Editor.

  • Bug Fix: Added UFUNCTION parameter name validation to UHT on native functions.

  • Bug Fix: No longer set autogenerated nodes to transactional unless the owning graph is also marked as transactional.

  • Bug Fix: Added ATAN2 naming alias which allows it to be placed in the Math Expression node.

  • Bug Fix: Removed Blueprint recompiling on rename as it is redundant with new BP Compiler updates and causes a re-entrance into FileHelpers::SaveWorld.

  • Bug Fix: Dragging off a pin in Blueprint Function Libraries will now allow the user to Promote it to a Local Variable.

  • Bug Fix: Components added directly as a child node will now have an initial transform consistent as if they were added to the root and then attached to the parent node.

  • Bug Fix: Native Components will now only display the "Add Event" context menu if editing is allowed on them.

  • Bug Fix: Duplicating a function now correctly updates the details panel to edit the new function.

  • Bug Fix: Marked child Blueprints as modified when removing an interface to prevent phantom references in the Reference Viewer.

  • Bug Fix: All subobjects are now preloaded when preloading templates for the Inherited Component Handle.

  • Bug Fix: Fixed duplicate nodes being created when Promoting a collapsed graph to a function or macro.

  • Bug Fix: Exported the FFindInBlueprintsResult and FStreamSearch APIs.

  • Bug Fix: Duplicating variables inherited from a parent class in the MyBlueprint panel now copies the default value from the old variable to the new one.

  • Bug Fix: Enabled renaming Enumerators to the same name with different capitalization.

  • Bug Fix: Self-context function calls that are implemented as an event will now be properly created as such.

  • Bug Fix: Enabled wildcard pins for assignment nodes to take on container types from other wildcard pins.

  • Bug Fix: Fixed Blueprint type-checking logic so that an error is properly raised after a member variable changes type.

  • Bug Fix: Fixed an edge case where custom collision profile response values were not being applied in nativized Blueprint ctor code.

  • Bug Fix: Refactored UEdGraphPin::GetPrimaryTerminalType to use the existing FEdGraphTerminalType::FromPinType method.

  • Bug Fix: Fixed non-functional collision in a nativized Actor Blueprint with one or more components set up to use a custom collision profile to override the component's inherited default collision response.

  • Bug Fix: Added a check to guard against a reported crash while scanning a new object redirector to a Blueprint asset when surfaced by the directory watcher.

  • Bug Fix: Fixed variables on spawned Blueprint instances from not being initialized to modified native struct types with details customization and no UPROPERTY() fields.

  • Bug Fix: Fixed a compile error during packaging when nativizing a Blueprint class with a MakeStruct node used to create an FFrameTime struct value literal.

  • Bug Fix: We now validate bound events at compile time to ensure that the owning component has not been removed from the Blueprint. This may throw Blueprint Warnings in existing assets and exposed events that were bound, but never called. The error will read " does not have a valid matching component".

  • Bug Fix: Blueprints with containers that reference user-defined structs that have been deleted outside of the editor are no longer unfixable. Users can now delete these references so that the Blueprint compiles again.

  • Bug Fix: Skeleton classes will now only reinstance into valid class hierarchies, enabling garbage collection to handle them properly, avoiding reprocessing during every instance.

  • Bug Fix: Blueprint diff tool's AdvanceMapIterator and AdvanceSetIterator will now correctly advance valid iterators. This fixes a bug where only the first element in a map would be diffed against, but it would be done N times.

  • Bug Fix: We no longer relocate transient ICH override templates when compiling a parent Blueprint class. This avoids archetype lookup failures on a child class load.

  • Bug Fix: Added functionality to break custom event node links when promoting from a collapsed graph to a new function graph to avoid creating a cross-graph pin link.

  • Bug Fix: Fixed an issue where Blueprint functions called from UMG or async callbacks would run in the wrong client/server context when using Play In Editor. Now every time a Blueprint function gets executed it will correctly set the "world context" which should fix issues with soft object references.

  • New: Added Move to Parent option for variables and functions in MyBlueprint list.

  • New: Added Copy/Cut/Paste Support for variables, functions, and macros.

  • New: Disabled editing of default values on soft object reference member variables.

  • New: Added "Create Matching Function" context menu option to unresolved CallFunction nodes.

  • New: Improved Replace Node References feature and promoted from experimental.

  • New: Component tick properties can now be modified by a Blueprint that has added a component of that type.

  • New: Instead of just removing connections on latent action nodes, rewire them if possible and if not then create an orphan pin.

  • New: Exposed TSoftObjectPtr variants of LoadStreamLevel, UnloadStreamLevel, and OpenLevel.

  • New: Generated new Variable GUIDs when duplicating Blueprint assets, preventing them from finding false positives in Blueprints.

  • New: Added GetPlatformUserDir to kismet function library.

  • New: Fixed static functions on network-enabled classes like Actor to correctly handle Authority Only/Cosmetic correctly.

  • New: Blueprint Variables now show tooltip text when hovering over the tooltip EditableTextBox in the details panel.

  • New: Added reverse function for arrays to Blueprint API.

  • New: Added bOpenInEditor parameter to CreateBlueprintFromActor and CreateBlueprintFromActors.

  • New: Adjusted the Blueprint debug toolbar to better fit on the screen for smaller window sizes.

  • New: Added the ability to convert functions and events from the "My Blueprint" window as well as by right clicking on the node.

  • New: Added export flag to UK2Node_GetSubsystem.

  • New: Enabled Vectors and other struct types to edit the value and slider range metadata in the details panel.

  • New: The context search will now prefer options that have been favorited by the user.

  • New: Added automatic naming of Blueprint variables to match their target pin when "Promoting to Variable".

  • New: Added controllable length to ArrowComponent and expose in TargetPoint, which grants ability to use them as an editor visualization from Blueprints.

  • New: Added GetSystemPath function for finding the full path to an Asset on disk.

  • New: Subsystems that are marked NotBlueprintType in their metadata are now hidden from showing up as subsystem targets in Blueprint editor, allowing native-only subsystems. Static functions will still be available.

  • New: Added suppressable warning dialog when attempting to rename RepNotify functions.

  • New: Added prompt when pasting unresolved function nodes to ask how they should be resolved.

  • New: Added new "Random" and "RandomFromStream" to KismetArrayLibrary.

  • New: Enabled UEdGraphPin to opt out of "Friendly" Names in Editor without explicitly declaring an override.

  • New: Added int64 type to Temporary variable action registry and GetValueFromString in Blueprints.

  • New: Actor Component Blueprints now use the same Data Only Blueprint logic as all other types. They will open in the Data Only Blueprint editor if they contain no nodes.

  • New: Blueprint debugger commands Step (Into/Next/Out) will now ignore the currently selected filter object, making it easier to trace execution from one Blueprint to another.

  • New: Blueprint Editor will now display which Blueprint library is currently being loaded so that developers can have visibility on which libraries take a long time to load.

  • New: Exposed InterpToMovementComponent's AddControlPointPosition and ResetControlPoints functions to Blueprint.

  • New: Added an on-by-default CVar that enables users to suppress warnings about events that are missing their bound components. Turning this on will result in possible silent failures of the Blueprint compiler.

  • New: Added a new Blueprint compiler safety check that will warn when a bound event's component has been deleted. This can possibly expose a lot of previous silent failures. If you wish to disable these warnings, then you can set the Config variable "bp.PinValidityCheck.bDisplayMissingBoundComponentWarning" to false in your DefaultEngine.ini file. We don't recommend turning off these warnings in the long term, but it can be useful to clean up the issues over time on large projects instead of all at once.

  • New: Added function alias "FCeil" for 鈥淐eil" on math expression nodes

  • New: Added wildcard connections to the wildcard pins in the Format text node so that it can be used inside of macros.

  • New: Added Preview Playback FPS option to SubUVMaker, changing settings will no longer reset the preview result.

  • New: Added new Macros "Create and Assign Render Target" and 鈥淐reate and Assign MID" that handle the logic to assign the resulting assets to variables and avoid re-allocating memory if the variable still contains data that matches the requested input.

  • New: Added Cloud Compositing BP tool to Volumetrics Plugin, includes some example shaders from simple billowy clouds to storms.

  • New: Made SubUV maker work with Niagara systems and capture them directly in the editor viewport.

  • New: Exposed more LiDAR interactions to Blueprints.

  • New: Added a simpler preview subUV that works better and is easier to start from.

  • New: Added override functionality for fluid simulation testing in Landmass.

  • New: Added a "DisableSplitPins" metadata tag for native make/break nodes. Adding the metadata tag to the 鈥渕eta" section of your UPROPERTY tag will disable split pins on your custom UClass/UStruct.

  • Improvement: Improved behavior when using the Blueprint debugger object filter on an actor that was dynamically spawned. It will attempt to save and restore your selected actor/object over multiple PIE sessions until the filter is manually changed.

  • Deprecated: Fixed "Quaterion" typo by renaming two functions with the type to Conv_VectorToQuaternion and Conv_Vector4ToQuaternion.

Core

  • Crash Fix: Fixed a crash in UnrealHeaderTool when you have a UInterface but no corresponding IInterface.

  • Crash Fix: Fixed a crash when using the property system to edit a TMap property with a TWeakObjectPtr key.

  • Crash Fix: Fixed rare crash occurring during LoadTime analysis threading issue where EditCpuTimeline ended up being called without being under the proper edit session scope.

  • Crash Fix: Fixed hot reload crashing when creating a new user-defined Blueprint struct.

  • Crash Fix: Fixed a crash in UnrealHeaderTool when parsing two headers with the same leaf name but different paths.

  • Crash Fix: Fixed shutdown crash in monolithic editors, this was due to a global static being marked destroyed and falling out of scope.

  • Crash Fix: Fixed an UnrealHeaderTool crash when you have a UInterface but no IInterface.

  • Crash Fix: Fixed skiprows crashing in CsvToSvg, csvdir will now read .csv.bin files.

  • Crash Fix: Fixed nullptr crash when cooking.

  • Crash Fix: Fixed a crash when running clients and -nullrhi. Ensure the preload screen manager is running even though there is no window to render.

  • Crash Fix: Fixed a rare crash when incremental Garbage Collector is running and other threads create new UObjects.

  • Crash Fix: Fixed TCHAR_TO_UTF8 crash for illegal UTF-16 strings that end with the first half of a UTF-16 surrogate pair.

  • Crash Fix: Fixed Garbage Collector crashes caused by Object class 'ClassPrivate pointer" being null, and added an assert to FObjectPropertyBase::CheckValidObject when an object class is null.

  • Crash Fix: Fixed a crash when generating native code for Blueprints that contain 'Property Reference" variables.

  • Crash Fix: Fixed a rare crash when destroying objects caused by logging code trying to log path names of destroyed objects.

  • Crash Fix: Fixed a crash when saving Blueprints with 'Set Float Attribute" node.

  • Bug Fix: Fixed potential precision error in FEngineWaitLatentCommand::Update and FStreamAllResourcesLatentCommand::Update.

  • Bug Fix: Changed DDC file writes and reads to be silent. This avoids commandlets failing because of errors logged during access to DDC.

  • Bug Fix: Fixed usage of SCOPED_NAMED_EVENT and TRACE_CPUPROFILER_EVENT_SCOPE in various places. This avoids scope event names to get additional quotes and avoids the overhead of using macros with dynamic string as scope names.

  • Bug Fix: Fixed TRACE_PLATFORMFILE_FAIL_OPEN to use -1 as an invalid handle for trace events.

  • Fixed missing TRACE_PLATFORMFILE_END_WRITE event when write operation fails to write all bytes.

  • Bug Fix: Updated ProjectManager.cpp.

  • Bug Fix: Remapped soft/weak object pointers when duplicating multiple actors.

  • Bug Fix: Fixed the FGenericPlatformOutputDevices::GetAbsoluteLogFilename() not reporting the correct log filename when more than one instance of the same application was running. This could lead to attaching the wrong log file to a bug report.

  • Bug Fix: Fixed leaked process handles on Windows.

  • Bug Fix: Fixed issue where the crash reporter was truncating some pointers.

  • Bug Fix: Fixed XMLFile. It wasn't properly dealing with a single quote in a content field.

  • Bug Fix: Fixed a race condition occurring when an ensure and a crash executed concurrently.

  • Bug Fix: Fixed the name generation of the folder containing the crash/ensure artifacts to avoid collisions.

  • Bug Fix: Fixed a race condition when generating the crash error message.

  • Bug Fix: Fixed a deadlock that could occur between an application and CrashReportClient.

  • Bug Fix: Fixed CrashReportClient HttpSendTimeout configuration having no effect because it was set before GConfig was initialized.

  • Bug Fix: Fixed a variety of subobject instance issues:

    • ComponentInstanceDataCache will now compare instances when evaluating whether objects are identical or not.

    • ComponentInstanceDataCache now preserves object names by duplicating them in unique objects rather than directly in the transient package where the name could already be taken.

    • ComponentInstanceDataCache now overwrites objects with the same name when restoring a duplicated object during the apply phase.

    • Fixed PPF_DeepCompareInstances between 2 instances not working. Now only template against template is skipped.

    • Deep comparisons now work on objects instanced in Blueprints. Instead of insisting the CDO itself has a DSO of the correct name, we simply compare that the objects have the same name and that they either have the same archetype, or one is the archetype of the other.

    • Comparisons of instanced objects in containers are now correctly using a deep comparison for property panel purposes.

  • Bug Fix: Fixed a bug that resulted in an infinite loop when launching a project where the editor was built with a Unique Build Environment.

  • Bug Fix: Fixed UnrealHeaderTool wrongly emitting a UObject::Serialize adapter function when a type provides overloads for both FArchive& and FStructuredArchiveRecord.

  • Bug Fix: Fixed UnrealHeaderTool generated code when a BlueprintNativeEvent UFunction is inside a WITH_EDITOR block.

  • Bug Fix: Fixed a hang in UnrealHeaderTool when a class inherits an interface with the same name except for the prefix.

  • Bug Fix: Fixed a bug in FVector::Coplanar. The test was returning a false result when plane B was 'under" plane A.

  • Bug Fix: Fixed usage of Encode 7bit in trace code. It may now use up to a maximum of 10 bytes.

  • Bug Fix: Fixed FString::TIsCharRangeNotCArray and FString::TIsTCharRangeNotCArray to avoid recursive template instantiation on some compilers.

  • Bug Fix: Fixed issue where application aborted when plugins failed to load due to EnableAllPlugins command.

  • Bug Fix: Removed CPF_HasGetValueTypeHash from FArrayProperty as arrays are not hashable.

  • Bug Fix: Changed the generated code emitted for properties by UnrealHeaderTool to avoid a PVS static analysis warning.

  • Bug Fix: Renamed CVar Debug.EnableLeakTest to EnableLeakTest. It was not possible to change from the console as "DEBUG" was consumed by UEngine::Exec.

  • Bug Fix: Fixed a MallocStompOverrunTest for 64 bits platforms. The original code was not causing a buffer overrun because of the 16 bytes alignment.

  • Bug Fix: Fixed a compile error TSparseArray::PointerToIndex.

  • Bug Fix: DisableEnginePluginsByDefault is now saved as part of the written Uproject JSON.

  • Bug Fix: Added support for namespaced native base types of UStructs in UnrealHeaderTool.

  • Bug Fix: Fixed a compile error in TLruCache::RemoveByPredicate.

  • Bug Fix: Fixed a compilation error with Algo::Rotate.

  • Bug Fix: Increased read buffer limit to 1MB (from 48K) for reading metadata from a trace file.

  • Bug Fix: Fixed TSet not being able to accept const pointers as search inputs when the element type was a non-const pointer.

  • Bug Fix: Fixed the nulling of properties during hot reload when a reinstanced object refers to another reinstanced object.

  • Bug Fix: Removed the "Channel" suffix from channel names when tracing them. This fixes regression for Trace Data Filtering plugin (showing 鈥淐hannel" suffix and presets not working anymore) and backward compatibility with previous traces.

  • Bug Fix: Added comments to TRACE_CPUPROFILER_EVENT_SCOPE macros.

  • Added TRACE_CPUPROFILER_EVENT_SCOPE_STR macro that receives static string parameters.

  • Fixed SCOPED_NAMED_EVENT macros adding extra quotes to named events when traced.

  • Fixed SCOPED_BOOT_TIMING to use TRACE_CPUPROFILER_EVENT_SCOPE_STR instead of the dynamic string version.

  • Bug Fix: Fixed FString::ParseIntoArray when the string has uninitialized reserved memory but is zero length.

  • Bug Fix: Fixed TSet properties text import of a struct type, where the struct doesn't initialize all of its members in the constructor.

  • Bug Fix: Fixed ObjectName:FieldName reversal bug in FField::GetPathName. Added StringBuilder version of FProperty and UObject GetPathName to optimize allocations in Niagara graph cooking.

  • Bug Fix: Changed GetNum(std::initializer_list) to return int32. This fixes the construction of a TArrayView from an initializer list.

  • Bug Fix: Fixed bias in Array_Shuffle.

  • Bug Fix: Fixed ObjectName:FieldName reversal bug in FField::GetPathName().

  • Bug Fix: Fixed TArrayView comparison ambiguity with == and != when both operands are TArrayView.

  • Bug Fix: ReadLibraryImportsFromMemory will no longer read past the end of the Imports table. This could result in invalid symbols added to the ImportNames table which resulted in increasing the engine start time.

  • Bug Fix: Allowed FStringView to be used with the ByHash TMap functions for FString TMap key queries.

  • Bug Fix: Forced stat groups to register in the constructor of their FThreadSafeStaticStat. This fixes a situation that prevented a group without FScopeCycleCounter from being activated if no other group was activated.

  • Bug Fix: Disabled copying of FUObjectItem.

  • Bug Fix: Prevented precision loss when passing an int64 value with basic math expression. The default value of the min and max is now the limit of the numeric type.

  • Bug Fix: Save INI files as UTF-8 by default.

  • Bug Fix: Subsystems will not attempt to instance non-authoritative classes.

  • Bug Fix: Avoided a stack overflow in FOutputDeviceRedirector.

  • Bug Fix: Added double overloads of IsNaN and IsFinite for Unix and Mac.

  • Bug Fix: Added an Ensure to AssetRegistry OnPathAdded and OnPathRemoved events are always fired hierarchically.

  • Bug Fix: Prevented the render thread from tracing an unmatched frame event.

  • Bug Fix: Fixed pak signature file data from incorrectly storing the original decrypted master hash after the initial load. This behavior caused future chunk hash mismatches to incorrectly report a master table corruption.

  • Bug Fix: Fixed CrashReportClient/CrashReportClientEditor sometime uploading the wrong log file.

  • Bug Fix: Fixed GenericPlatformOutputDevices to reserve and lock the name of the log file to prevent a concurrent instance to use it and ensure CrashReportClient.exe pick up.

  • Bug Fix: Fixed memory hangs when flushing async loading and the queue gets stuck on a low priority job which is not being serviced due to throttling. Please note that this is disabled by default due to a potential performance impact, but can be enabled via the CVar pakcache.AsyncLoadingAllowFlushProtection.

  • Bug Fix: Fixed a present hang detector race condition.

  • Bug Fix: Fixed initialization workflow of ExternalProfilers.

  • Bug Fix: Fixed a random memory corruption when using FMallocBinned.

  • Bug Fix: Fixed a Check failure in FD3D12CommandListManager::EndTrackingCommandListTime when running ProfileGPU.

  • Bug Fix: Fixed access violation in subsystem container startup discovered with the command '-stompMalloc"

  • Bug Fix: Disabled use of FPreloadFile for the asset registry. To re-enable define ASSET_REGISTRY_USE_PRELOAD_FILE to 1.

  • Bug Fix: TAllFieldsIterator will now iterate over nested inner fields. This fixes a bug where adding a new property to a user defined struct that's used in an array property on a Blueprint will corrupt the array values.

  • Bug Fix: Fixed up analytics WeakPtr reference by using Pin.

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

  • Bug Fix: Added Ensure that FParse::Value returns a string with a correct length when used with an input string which length is greater than 4096.

  • Bug Fix: Fixed FPackageReader to copy the editor only filtering flag from the underlying reader archive to the owning package reader. It can be set by the summary reading code and affect how future serialization occurs.

  • Bug Fix: Fixed type conversions between Percentages and Multipliers.

  • Bug Fix: Fixed cooked builds using async archives, if we fail to load the package file summary then advance the async archive's load state out of "waiting for header" so that the failure can be processed gracefully and not trigger a check.

  • Bug Fix: Fixed StaticFindObject to search for any package with a package name that is only a substring of the full package name.

  • Bug Fix: Fixed a rare thread hang that could occur when reading from signed pakfiles from multiple threads.

  • Bug Fix: Fixed operator precedence and associativity in basic math expression evaluator.

  • Bug Fix: FReferenceFinder will no longer use multithreading until all native classes have been registered in order to avoid asserts when assembling token streams for classes that haven't had it assembled yet.

  • Bug Fix: Fixed FFieldPath::ToString from not removing nativized BP temp package prefix.

  • Bug Fix: Fixed a wrong printf conversion specifier for int64 type.

  • Bug Fix: Fixed final window size computation when only the window height is specified.

  • Bug Fix: Fixed global fstructuredarchive insertion operator not closing the adapter after use, added slot insertion overloads for TEnumAsByte, and enum class types.

  • Bug Fix: Fixed FAsciiSet::Skip skipping wide characters, Optimized Skip speeds, simplified ParsePropertyToken, and added some unit tests.

  • Bug Fix: Fixed issue with non-ASCII directory names.

  • Bug Fix: Added missing AddReferencedObjects functions to FDelegateProperty and FMulticalDelegateProperty.

  • Bug Fix: IncrementalPurgeGarbage will now lock the Garbage Collector guard only once to avoid too many locks.

  • Bug Fix: Made FPageAllocator a singleton to control global initialization/destruction order. Avoids a potential startup crash in monolithic builds.

  • Bug Fix: FFieldPaths should no longer re-resolve themselves each time a Blueprint is destroyed and only re-resolve if the Blueprint that owns the property they resolve is destroyed / or recompiled.

  • Bug Fix: Fixed Garbage Collector skipping some generated class references because they were incorrectly marked as CLASS_Native.

  • Bug Fix: Fixed a rare case of a compressed IO read re-using a cached buffer that it shouldn't have.

  • Bug Fix: Fixed StaticFindObject to handle nested sub-objects when searching for any package without a package pointer.

  • Bug Fix: Added ensure to fail the loading of an async package correctly when the summary load fails.

  • Bug Fix: FieldPath property's ImportText will now properly support full path names including the field type as well as delimited strings.

  • Bug Fix: UStructs with AddStructReferencedObjects are now correctly marked as containing object references, even if it contains no UPROPERTY object references

  • Bug Fix: Fixed memory stomping occurring when a long command line is used.

  • Bug Fix: When cooking, references to editor-only FProperties will be nulled out.

  • Bug Fix: Fixed wrong return type of rarely used ExportTextPathToObjectPath overload.

  • Bug Fix: FKismetCompilerContext::ValidateVariableNames will now look through both UFields and FProperties when looking for conflicting names.

  • Bug Fix: FFieldPaths will no longer attempt to resolve themselves to new fields after the original field they resolved to has been destroyed.

  • Bug Fix: FReferencerFinder will now properly find GGCObjectReferencer as one of the referencing objects.

  • Bug Fix: When converting UProperties to FProperties, the engine will rename the old property so that it doesn't collide with potentially valid objects of different type.

  • Bug Fix: Fix incorrect default value being applied for the skipiostore parameter in UAT

  • Bug Fix: Fixed memory stomping occurring when a long command line is used. Modified FGenericCrashContext to perform safe string copies which caused TLazySingleton to crash due to static memory being overloaded.

  • Bug Fix: Fixed code for c++17 compilation. std::binary_function, std::unary_function and register keyword have all been deprecated.

  • Bug Fix: Added ensure to UAnimBlueprintGeneratedClass::EvaluateGraphExposedInputs" ValueHandlerNodeProperties so they now properly resolve against their class which can be in a renamed package when loading.

  • Bug Fix: TFieldPaths will now always try and use the provided struct when resolving themselves and update its path with the resolved package if it's different to the existing serialized value.

  • BugFix: The command line '-handleensurepercent=" now works correctly.

  • Bug Fix: Changed TArray version of TMap::GetKeys to reset supplied array before adding keys as the function did not work correctly if used to accumulate keys over multiple maps.

  • New: Updated API in FAxisViewportInt32 and FAxisViewportDouble. All functions from FAxisViewportInt32 and FAxisViewportDouble classes that change positions now return true if the position was changed.

  • New: Exposed a more customizable EnforceScrollLimits, in addition to UpdatePosWithinLimits.

  • New: Converted StaticConstructObject_Internal to use a parameter block.

  • New: TMap::GetKeys now resets the TArray passed into it.

  • New: Moved DeveloperSettings into its own module so it can be used outside of Engine. When inheriting from UDeveloperSettings, you will need to add DeveloperSettings as a module dependency.

  • New: Made the string builder types more generic. The string builder type hierarchy has been simplified to TStringBuilderBase and TStringBuilderWithBuffer .The append operators have been simplified to append anything convertible to a string view.

  • New: Changed TStringView to be usable where CharType must be deduced Both FString and TStringView can now be constructed and assigned from any contiguous container of the same character type. This allows FString to be constructed and assigned from FStringBuilderBase and TStringBuilder.

  • New: Added GridSnap and Floor as a templated function.

  • New: Added Emplace functions to SparseArray. New: Made internals of LoadFileToStringArray[WithPredicate] to support 64-bit sized files (still returns a 32-bit TArray of 32-bit FString lines).

  • New: Added Game and EditorOnly dependencies to the AssetRegistry. The information for which imports and soft package references are editor-only is calculated during SavePackage, and requires resaving packages to use; until packages are resaved, all of their dependencies are assumed to be used in-game. The interface of dependencies in the asset registry changed to support reporting the extra information for each dependency: EAssetRegistryDependencyType was split into EDependencyCategory and EDependencyProperty.

  • New: Added an option to view full reference chains (ignoring non-GC objects). Just add "full" to the argument list.

  • New: Custom versions can now register a validation function that can flag an asset as unloadable.

  • New: Added the IsValidPath function to FPackageName. This function checks for a valid root. FindOrLoadAssetsByPath (in EngineUtils) now uses IsValidPath to be able to load the content of roots. This was not possible before as IsValidLongPackageName on a root is always false.

  • New: Added FindDisplayNameTextByValue and FindAuthoredNameStringByValue functions to UEnum. These are like their Get equivalents, but return whether a value was found or not.

  • New: Updated ApplyBefore and ApplyAfter to TTuple. These functions use Invoke instead of a direct call to the callable object so that member function pointers can be used instead. Also removed TMemberFunctionCaller from the delegate system, which was doing the job that Invoke now does.

  • New: Added TDelegate and TMulticastDelegate syntax, similar to TFunction, to be used instead of the DECLARE_DELEGATE and DECLARE_MULTICAST_DELEGATE macros.

  • New: Added the Get function to TTuple to enable developers to get a tuple element by its type rather than by its index.

  • New: Updated AsConst to work the same as std::as_const. The overload for pointers is deprecated because it caused arrays to decay to pointers.

  • New: Added a check for VS2019 redist, and to trigger the prereq installer if it isn't found.

  • New: Moved AssetRegistry structs into CoreUObject - AssetData, AssetBundleData, ARFilter, and AssetDataTagMap were moved into CoreUObject. This will enable us to remove the link requirement that all functions in these structs are inlined.

  • New: Moved all AssetRegistry headers into AssetRegistry subdirectory to match include style in the rest of the engine. Includes using the invalid include path AssetRegistry/Public/ will need to immediately change to AssetRegistry.

  • New: Added "Render" thread group (trace events) also to the "RHIThread" and to the "RTHeartBeat" rendering threads.

  • New: Added support for the %hs format in FGenericWidePlatformString::GetVarArgs.

  • New: Added a TTupleIndex trait for getting the index of a type in a tuple, and a TTupleElement trait for getting the type at a given index.

  • New: Changed TTuple::Get() to work like std::get<>, which behaves differently from struct member access when elements have rvalue reference types and are extended to allow volatile tuple access.

  • New: Added a ::type typedef to TEnableIf and ::value static members to TAnd, TOr and TNot for compatibility with the standard library.

  • New: Added policy support to delegates, allowing them to take a user policy to configure behavior and state. Added .natvis support for multicast delegates.

  • New: Added IoStoreUtilities: Compression support.

  • New: Promoted the prototype RingBuffer class into Core\Public\Container, this is the recommended container for a single-threaded queue, dequeue, circular buffer, or ring buffer.

  • New: The following minor additions have been added to the TaskGraph interface:

    • FFunctionGraphTask supports functors that take the completion graph event as a parameter.

    • A shortcut for FTaskGraphInterface::GetWaitUntilTaskCompletes()->FGraphEvent::Wait().

  • New: Captured and logged the call stack of a crash inside CrashReportClientEditor.exe. The log is emitted with the Editor analytics to help diagnose crash in the crash reporter.

  • New: Memory-mapped bulk data in IoDispatcher.

  • New: Made the Algo:: Sort algorithms take rvalue refs so that they can be passed temporary TArrayViews.

  • New: Added an option for potentially increased performance when getting UTC time via FDateTime::UtcNow when PlatformUtcNow is slow. This can be enabled with 'bUseEstimatedUtcNow" located in the TargetRules.

  • New: TMap::StableSortByValue now works when your value contains a TUniquePtr.

  • New: Enabled the unhandled exception filter on Windows for games. This captures crashes in non-engine threads and from Windows Kernel callback.

  • New: Added a version of CreateOptionalDefaultSubobject which allows specification of the type to create by default.

  • New: Added a version of TMap::GetKeys that takes a TSet instead of TArray to populate.

  • New: Vectorized several FQuat operations and improved numerical stability of FQuat::GetRotationAxis().

  • New: Added .natvis visualizers for FVector, FQuat, FRotator and FTransform.

  • New: Implemented new class FEventRef - an RAII-style alternative to FEvent which gets or returns an FEvent instance from or to the pool automatically. The class definition is placed into Event.h to be close to FEvent so Users can see that there's an alternative to FEvent . Implementation is placed in ThreadingBase.cpp where FEvent and FScopedEvent implementations are.

  • New: Allowed TTuple to be constructed and assigned from tuples with different types, as long as all the destination element types are constructible or assignable from the source types.

  • New: Added Tie function for destructuring TTuple return types into individual variables, like std::tie().

  • New: Added a ForwardAsBase function which allows the perfect forwarding of a reference as a base type.

  • New: ReadLibraryImportsFromMemory was reading past the end of the Imports table. This could result in invalid symbols added to the ImportNames table which was increasing the engine start time.

  • New: Added new code comment inside TUniquePtr; containing advice for when its use inside UObjects causes a compile error.

  • New: Added First function and Last function to TPageArray.

  • New: Added a new compile error when binding a delegate with a const object pointer and non-const function.

  • New: Added a new TVariablePagedArray implementation with fixed-size pages, but a page may have unused items either at the beginning or at the end of it's items array.

  • New: Added FPlatformProcess::Yield method.

  • New: Changed the definition of LLM_ALLOW_ASSETS_TAGS to allow activation without modifying the header.

  • New: Added Move operations to TAttribute.

  • New: Made trace channel names tolerant to ending 's" or 'S.

  • New: Added new BuildPatchErrorUtils to add patching error utilities.

  • New: Added support for passing "abscrashreportclientlog" and 鈥渘ullrhi" command line arguments to crash reporter monitor.

  • New: Added a TPimplPtr type which can be used as a substitute for TUniquePtr of an incomplete type; without forcing the outer class to define all of its special member functions in the .cpp file where the type is fully defined.

  • New: Added a TInvokeResult trait for getting the return type of a callable with given argument types.

  • New: Added templatized InitializeDependency to subsystems. Also modified InitializeDependency to return the subsystem.

  • New: Extended TValueOrError with TryGet functions, perfect forwarding of arguments, and more efficient storage.

  • New: Fixed PLATFORM_CAN_ASYNC_PRELOAD_FILES code path in FPreLoadFile to correctly handle files that are not available when the read request is executed.

  • New: Created a new trace event " Diagnostic.Session2". This event includes improved formatting that utilizes string type fields and handles the new event in the DiagnosticsSessionAnalyzer.

  • New: Enabled the unhandled exception filter on Windows for all applications. This is to capture crashes in non-engine threads, additionally, this captures some crashes from Windows callback that are not going through the main thread except blocks.

  • New: Added CreateStandardFileName, implemented by MakeStandardFilename, and optimized both to be approximately 30% faster than the original MakeStandardFileName.

  • New: Added Ensure when getting the correct case for the project path during engine startup on the Windows platform. This no longer resolves directory junctions at the same time as it can cause problems for p4 operations. This is done using the slow 'FindFirstFile" approach on EVERY SEGMENT of the project file path.

  • New: Enabled CONTAINER_INITIAL_ALLOC_ZERO_SLACK, this provides cross-platform memory saving functionality which saves up to 96MB on consoles.

  • New: Added Ensure that the project directory is updated after the first time that the project file path is set.

  • New: Added support for passing strings in execcmds, enclosed in single quotes.

  • New: Added Silence warnings regarding the possible loss of precision converting from integer to floating-point types.

  • New: Removed unnecessary conversion to float in FTimecode::FromFrameNumber to minimize loss of precision in FThreadHeartBeatClock::Seconds for long-running titles

  • New: FGenericPlatformMath::FRand now truncates Rand to 24 bits or RAND_MAX, whichever is smaller. This prevents values closer to 1.0 being higher probability due to loss of precision.

  • New: Added TArrayView64 by adding a SizeType parameter to TArrayView.

  • New: Added Ensure to no longer resolve directory junctions when also getting the correct case for the project path during engine startup on Windows.

  • New: Fixed an infinite recursion error when calling Add in TDiscardableKeyValueCache.

  • New: Added csvExecCmds command line option to run exec commands on particular CSV frames. E.g: -csvexeccmds="500:listtextures,1000:listtextures". This can be useful when doing deterministic benchmarking.

  • New: Added the command line option '-d3d12instrumented" to control the use of the instrumented d3d driver.

  • New: Added a new CSV tool for binary support. Use the conversion tool 'CsvConvert" to convert CSVs to a packed binary representation (csv.bin), which is smaller and faster to parse. All CSV tools will seamlessly read .csv.bin files.

  • New: Added a version of FPaths::ChangeExtension to FPathViews that uses FStringView as the input type rather than FString.

  • New: Removed identical duplicate types from PS4UE4.natvis that existed and matched in UE4.natvis.

  • New: Added a fallback so that '-mempro" and '-memprollmtag" will work if the command line wasn't initialized when FMemProProfiler::Init when it was first called,

  • New: Fixed a bug where fatal UE_LOG messages could potentially return and continue execution if several threads were issuing fatal log messages at the same time.

  • New: Added Ensure to no longer resolve directory junctions when also getting the correct case for the project path during engine startup on Windows. This is done using the slow 'FindFirstFile" approach on EVERY SEGMENT of the project file path.

  • New: Added two new arguments to PerformanceReportTool for bulk query support '-spreadsheetfriendly" which outputs a single quote before non-numeric entries in summary tables and '-noSummaryMinMax" which makes disables min/max columns for each stat in a condensed summary.

    • Fixed a bug with duplicate header entries in email summary tables.

    • Added a support for reading .csv.cache files. These contain metadata and stat names, so they are faster to read than the full CSV when filtering with '-metadatafilter"

    • Allowed specifying a condensed summary table type, with '-condensedSummaryTable "

    • Made the tool robust to accommodate zero-length CSVs.

  • New: FString now supports construction from an FStringView with an additional memory slack in its internal buffer.

  • New: Mempro tag tracking improvements:

  • Added support for tracking multiple LLM tags, for example, mempro.llmtag "chaos,chaostrimesh"

  • New: Added support for enabling mempro and specifying tags without the need for execcmds. This can be done with -mempro and -memprotags= respectively.

  • New: Added a cooker parameter (-DevelopmentAssetRegistryPlatformOverride) which allows DLC cooks to override the platform name used to find and load the development asset registry. Allows different platforms to use a single registry where that makes sense. Guard a loop that accesses asset registry data for cases where that data doesn't exist.

  • New: Added FScopedMemory, which will scope out the difference in Physical and Virtual memory in addition to capturing other threads allocating.

  • New: Added GetTypeHash() support to TWeakObjectPtr properties.

  • New: Refactored stage time only encryption config to be "explicit" groups that can take normal assets and external non-UAsset based files for encryption.

  • New: Removed comments from *.ini files when staging.

  • New: Reduced the constant memory cost of keeping FProperty related references from 32 to 8 bytes per UStruct.

  • New: Added additional asserts when failing to remove UObjects from hash tables due to a rare crash in Garbage Collector.

  • New: Creating new UObjects while Collecting Garbage will now result in an assert.

  • New: Added a missing constructor definition of FAutoConsoleVariableRef when NO_CVARS is defined.

  • New: Fixed a spelling error located in assertion.

  • New: Added the name of the slowest unit test in warning for >2s smoke test run time.

  • New: Only inject encryption key asset metadata into the cooked asset registry for platforms that actually require it.

  • New: Various engine init optimizations and new string conversion paths:

    • Added some core string conversion paths, added FString::Append and += overloads to avoid pointless temporaries when appending c strings and various other string types.

    • Added UTF32 <-> TCHAR string conversion macros.

    • Optimized QuotedString parsing, and property parsing.

    • Added PackageName optimizations and SoftObjectPath optimizations.

  • New: Added logic to change how background generation of distance fields works in the editor, Instead of creating a new thread pool for the distance field tasks the editor will now use GLargeThreadPool when available. This reduces thread spam in profilers and reduces overhead on machines with a large number of available logical processors.

  • New: Removed unnecessary target dependencies for ShaderCompileWorker on Linux.

  • New: Folded FSynchronizedArchiveState into FArchiveState to reduce complexity and restore private FArchiveState inheritance.

  • New: Disabled STATS in UHT.

  • New: Core will now be aware of multiple CPU groups to make better use of high-core systems. Reimplemented FWindowsPlatformMisc::NumberOfCores and FWindowsPlatformMisc::NumberOfCoresIncludingHyperthreads in terms of GetLogicalProcessorInformationEx.

  • New: Added in-game console key for Swedish keyboard layout.

  • New: Avoided pointless FString temporaries when appending c strings.

  • Added Append and += overloads compatible with C strings, char arrays, string views, and string builder as well as FString.

  • New: Added some core string conversion paths.

  • New: Added FPlane::IsValid, FPlane::GetOrigin, and FPlane::GetNormal.

  • New: Added FVector::XAxis, YAxis, and ZAxis constants.

  • New: Added .uptnl to the list of extensions that must exist in pak files, and won't trigger a lower level platform file call.

  • New: Refactored sandbox file system creation so it gets funneled via a factory function, to support multiple implementations.

  • New: Optimized Garbage Collection, Core Redirect, and SavePackage related code in UHT since they contribute greatly to the overall build time.

  • New: BMP writing is now supported in shipping config.

  • New: Converted UEdGraph::Serialize over to a structured archive format.

  • New: Parsed int64 value with basic math expression without losing precision. Added the option to only parse FText to number parsing only if the parsed number is inside the limit of the desired type and the option to clamp that value to the limit of the desired type.

  • New: PluginManager now takes into account the default editor target config param when trying to decide which editor target to use.

  • New: Moved the hardcoded list of ini suffixes in the staging system out into lists in the deployment context so that projects can choose to override them.

  • New: Added a PreModifyDeploymentContext callback to the project params struct which will be invoked after the deployment context is created, but before any files are processed by the staging system.

  • New: Fixed staging chunk assignment from failing when there are case mismatches between paths in the staging manifest and the pak chunk lists.

  • New: Added ELogVerbosity to FDebug::DumpStackTraceToLog.

  • New: Added Windows SetProcPriority implementation.

  • New: Added FArchive error propagation to all proxies.

  • New: Changed how FFieldPaths are internally stored and serialized. Now instead of storing the full path from the outermost UPackage to the innermost FProperty, FFieldPaths will store the owner's UStruct reference and a short path to its property or inner property of its property. The same applies to serialization: both the owner UStruct reference and only the short path will be serialized. Serializing the owner reference will enable proper handling of any owner struct package renames as well as greatly increase the initial field resolution performance.

  • New: Added CanUseUnversionedPropertySerializationForServerOnly setting to disable UPS for dedicated servers.

  • New: Fixed a path comparison in LaunchEngineLoop.

  • New: Added a bAllowShrinking parameter to TArray::RemoveSwap().

  • New: Published UE_NODISCARD and UE_NORETURN.

  • Improvement: Improved TSet and TMap .natvis to skip invalid entries.

  • Improvement: Optimized TArray::RemoveSwap() and TArray::RemoveAllSwap() to shrink once at the end of the operation, rather than each time it removes an element.

  • Improvement: Improved delegate system comments and added pointer from DelegateCombinations.h to the proper Delegate.h header that should be included instead.

  • Improvement: Improved ResavePackage commandlet reporting.

  • Improvement: Optimized TSet::Empty to avoid a pathological case where the hash size would be large, without many elements populated in the hash set.

  • Improvement: Implemented FString equality optimizations that checks length before touching data and incurring cache misses.

  • Improvement: Optimized code in XmlFileParser.

  • Improvement: Optimized QuotedString parsing and added UTF32 <-> TCHAR string conversion macros.

  • Improvement: Added Property parsing optimizations.

  • Improvement: Optimized PackageName.

  • Improvement: Optimized SoftObjectPath.

  • Improvement: Fixed and Optimized TBitArray. Initialized unused TBitArray bits, switch to faster unsigned operator%, and don't shrink past initial allocation size operator<, == and GetTypedHash would access unused bits in the last word.

  • Improvement: Removed redundant ToLower calls which caused slowdowns when launching console while using -stompmalloc.

  • Improvement: Refactored FindField into FindUField and FindFProperty to avoid confusion caused by the fact that FindField will no longer return FProperties.

  • Improvement: Optimized TRobinHoodHashMap by changing a costly check to a checkSlow.

  • Improvement: Significantly improved MarkObjectsAsUnreachable phase of Garbage Collection performance in scenarios where there are many root objects.

  • Improvement: TBitArray fixes and optimizations. Initialize unused TBitArray bits, switch to use a faster unsigned operator% and don't shrink past initial allocation size operator<, == and GetTypedHash will access unused bits in the last word.

  • Deprecated: Deprecated TracingProfiler.

  • Deprecated: Deprecated GRenderThreadId and GRenderingThread global vars as preparation for removing the rendering thread.

  • Deprecated: Macros deprecated: FUNCTION_CHECK_RETURN_START FUNCTION_CHECK_RETURN_END FUNCTION_NO_RETURN_START FUNCTION_NO_RETURN_END.

  • Deprecated: Deprecated GRHIThreadId and GRHIThread_InternalUseOnly as preparation for removing the RHI thread.

  • Deprecated: Added a comment to use std::atomic instead of `TAtomic"

  • Deprecated: Removed FSubobjectPtr and TSubobjectPtrDeprecated.

    • Removed deprecated FObjectInitializer functions 'CreateAbstractDefaultSubobject" and 'CreateDefaultSubobject" with a bAbstract parameter.

    • Removed deprecated FCoreUObjectDelegates StringAssetReferenceLoaded, StringAssetReferenceSaving, and RedirectorFollowed. Removed deprecated private_subobject define.

    • Removed unused EPropertyFlags::CPF_SubobjectReference.

  • Deprecated: EPowerSavingEligibilityFGraphEvent::SetGatherThreadForDontCompleteUntilFCompletonList.

  • Deprecated: Deprecated GAudioThread and GAudioThreadId in preparation for removing named threads. This allows to remove them completely in the next version and to modify IsAudioThreadRunning and IsInAudioThread functions to work correctly even without the audio thread.

  • Deprecated: Deprecated the PROJECTION and PROJECTION_MEMBER macros, replacing them with UE_PROJECTION and UE_PROJECTION_MEMBER.

  • Deprecated: Deprecated AddAtLowestFreeIndex in favor of EmplaceAtLowestFreeIndex.

  • Deprecated: Added deprecated support for Cast and CastChecked functions for FProperties to minimize compilation errors when upgrading to the new engine version

  • Deprecated: The existing StaticConstructObject_Internal has been deprecated in favor of a version that takes a parameter struct.

  • Removed: Removed legacy file profiling wrappers.

  • Removed : Removed AddFrameRenderPrerequisite and AdvanceFrameRenderPrerequisite.

Cooker

  • Crash Fix: Fixed a crash that was occurring when cooking a scene containing a runtime-generated static mesh.

  • Bug Fix: Fixed cooking without a project.

  • Bug Fix: Corrected the name of 'GetContentDirecctoryForDLC" and implemented it in terms of "GetBaseDirectoryForDLC" so that it doesn't throw an assert when building DLC without plugins.

  • Bug Fix: Fixed MapsToCook to match its documented behavior. Maps in MapsToCook will no longer be added to cook when there are maps specified on the command line using -Map or -MapIniSection.

  • Bug Fix: Fixed a bug where a substring could be replaced multiple times when path remapping is done when using COTF server.

  • Bug Fix: Fixed a bug to ensure the DDC graph used when launching a command-line cook from the editor is the same one used in the editor. While UAT will accept this argument as part of the 'Run" command, the editor/launcher does not supply this argument in those scenarios for now.

  • Bug Fix: Fixed duplicated property comment in cooker settings.

  • Bug Fix: Fixed bug where recursive directory traversal would not reach plugin or platform extension directories when using the cook on the fly server.

  • Optimization: Optimized FindTargetPlatform during cooking.

  • Optimization: Optimized Skip VerifyEDLCookInfo when cooking DLC.

  • Bug Fix: Added a warning to resave static meshes that invalidate physics when loaded. Meshes that generate the new warning need to be resaved to suppress the warning and ensure deterministic cooking. The warning text is, "Mesh {MeshName} is recomputing physics on load. It must be resaved before it will cook deterministically. Please resave {MeshPath}."

  • Bug Fix: Removed duplicated warnings when cooking.

  • Bug Fix: Fixed a bug where platform-specific raytracing data is incorrectly stripped during a cook.

  • Bug Fix: Fixed a non-deterministic cook issue with hierarchical precompiled Level Sequence data.

  • New: Cooker LoadQueue CookOnTheFlyServer now has an additional state for UE::Cook::FPackageData - EPackageState::Load. When in the Load state, FPackageData are contained in the new FPackageDataQueue LoadQueue. When processing requests, the load dependencies of FPackageData are read from the asset registry, and dependencies are inserted into the LoadQueue ahead of the requested package.

  • New: Added a diagnostic during cooking that shows the number of open file handles.

  • Added hooks for PlatformFileTrace on Mac.

  • Added tracking of open file handles in FPlatformFileTrace.

  • New: Cooker LoadQueue Preloading. Divide LoadQueue into LoadPrepareQueue and LoadReadyQueue; Packages in the LoadPrepareQueue are waiting for FPreloadableFile archives to be asynchronously opened for their Package; these archives are passed into the linker for use when loading the package.

  • New: UCookOnTheFlyServer - Refactor PackagesPendingSave into a SaveQueue.

  • New: Replaced Regex of COOKTIMER macros to all have UE_ prefix.

  • New: Changed LoadTimer & CookTimer to use a metadata field to record the package name instead of creating new scopes for the package name.

  • New: Marked save/load custom trace events as NoSync.

  • New: Included StaticSwitch and StaticMaskComponent to the cached data set and leveraged it from the UpdateParameterSet.

  • New: Added Cook insights instrumentation.

  • New: Changed DLC Mount point to be '/ /" rather than '/Game/" when cooking DLC.

  • New: Added a new method to the AssetManager ModifyDLCCook, which preserves the current behavior of scanning the path for all assets, however, this can be overridden for custom game DLC cooking logic.

  • New: Fixed cooking non-determinism issue related to ChildActorComponent.

  • New: Added command-line options for DisableUnsolicitedPackages and NoDefaultMaps to the Cook Commandlet.

  • New: New setting ProjectSettings -> Project -> Packaging -> Test directories to not search. This setting is similar to DirectoriesToNeverCook, except that it applies to all commandlets that enumerate assets, including the DerivedDataCacheCommandlet which populates DDC from all files on disk. This is useful for test assets or incomplete assets that are known to give errors on load.

  • New: Added an option to not populate the entire asset registry when cooking for DLC

  • Improvement: Avoided having native packages look up on disk by considering them "fully loaded" without checking if a file already exists on disk for them.

  • Improvement: Improvements to PostLoad and Serialize profiling instrumentation in the LoadTimes channel for use during a cook.

  • Improvement: Avoided scanning and sending superfluous files under the Plugins directory server during initialization.

  • Avoided requesting the same package as a .uasset and as a .umap by allowing the server to return a different file than the one that was requested.

  • Improvement: Optimizations and bug fixes to improve Cook On The Fly server iteration times.

    • Avoided performing both FileExists and GetTimeStamp operations on the same file in IPlatformFileSandboxWrapper.

    • Added Ensure for *.uasset files that are not excluded from the cached files list sent by network filesystem connection.

    • Avoided having the network file system server do two passes recursively iterating over directories to get file timestamps.

    • Fixed the network file system to handle looking for packages with FindPackageFileWithoutExtension as a .uasset file first, and then as a .umap file. If the target file already exists in the local cache as a *.umap file, then the filesystem will not ask the COTF server to cook the map again.

  • Improvement: Avoided calling UpdateStaticDrawListsForMaterials in the FMaterialUpdateContext destructor at cook time if there's no renderer that needs to be updated.

  • Improvement: Optimized cook time in large project cooks due to repeated calls to UMaterial::UpdateCachedExpressionData.

  • Improvement: Optimized large cached project cooks, by using material cached data when remapping override values to the parameters they鈥檙e overriding.

  • Improvement: Avoided calling SerializeInlineShaderMaps during a save if the archive save pass is non-persistent, is an object reference collector pass, or should skip bulk data.

  • Improvement: Avoided excessive realloc and memcpy overhead when regenerating procedural foliage.

  • Deprecated: Deprecated the -DiffCookedPackage command-line argument with a warning in the log when used.

  • Deprecated: Deprecated the -dumpsavestate and -dumpsavestatebyarchetype command line support with a warning in the log when used. Please note that the aforementioned commands will be removed in a future version.

Memory Profiler

  • Bug Fix: LowLevelMemTracker fixes.

  • Bug Fix: Fixed memory leak in FLLMArray Add, a critical section to prevent simultaneous calls to UpdateStatsPerFrame from multiple threads.

  • Bug Fix: Fixed console variable usage to work on threads other than the game thread.

  • Bug Fix: Fixed use of physical memory rather than virtual memory on Windows.

  • Bug Fix: Disabled ShouldReduceThreads; it is currently used by FGenericPlatformMisc::UseRenderThread, which is defunct and crashes if it returns false.

  • Bug Fix: Fixed calculation of total memory in TrackFree which was using (int64)(-(uint32)), and getting additions of large uint32 instead of subtraction of small uint32. Fix missing critical section, header, and parent tag handling in LLM_ALLOW_ASSETS_TAGS.

  • Bug Fix: Changed Bump LLMMap in LowLevelMemoryUtils to handle a 64-bit number of allocations. When running on a large project, Cook Margin Capacity was causing the cook time to become arbitrarily slow.

  • New: Added FullClassName option to "obj list" command. If present, this will output the full pathname of each class rather than the short name.

  • New: Added FMallocFrameProfiler class to get callstack of allocation/deallocation of the same pointers in the same frame.

Network Profiler

  • Crash Fix: Network Profiler will no longer cause a crash when it's enabled before a map is loaded.

  • Bug Fix: Resized cut-off UI elements of Network Profiler.

  • Bug Fix: Fixed the "check all connections" checkbox in the networking profiler which had stopped working.

  • Bug Fix: Fixed an issue in the networking profiler where profiles with fewer than 30 frames of data could not be loaded.

UnrealPak

  • Crash Fix: Fixed a crash after removing a property from a struct while being used in a Blueprint that's also open in the Editor.

  • Bug Fix: Fixed some bad logic for calculating when padding is needed in Pak files.

  • Bug Fix: Fixed UnrealPak patch generation crash when the crypto.json file for the source data isn't explicitly specified. Core

  • Bug Fix: Fixed Crash Report Client dealing with crashes that occur very early in the process lifetime.

  • Bug Fix: Fixed async purge phase to finish with the same multithreading settings before switching multithreading off for the exit purge to prevent an assert.

  • Bug Fix: Added missing UDelegateProperty deprecation macros.

  • Bug Fix: Fixed classes that have potential thread-safety issues with their destructors when they are not destroyed asynchronously by Garbage Collection.

  • Bug Fix: Fixed disregard for the Garbage Collector pool, it no longer needs to be enabled for Garbage Collector clustering to be enabled.

  • Bug Fix: Fixed modifications to the command line using environment variables to be correctly used in PreInitPreStartupScreen.

  • Bug Fix: Enabled SEH on Clang on Windows.

  • Bug Fix: Removed the requirement for AddStructReferencedObjects to be const. AddStructReferencedObjects should not be const because GaC will attempt to null references to pending kill objects when calling this function.

  • Bug Fix: Fixed Project-specific tags from being collected When LLM tags were summarized per frame.

  • Bug Fix: Disabled permanent object pool when disregard for Garbage Collector pool is disabled due to permanent object pool objects becoming marked as unreachable and potentially becoming destroyed.

  • Bug Fix: Fixed Crash Report Client from needing full access to the process on Windows.

  • Bug Fix: Soft Object Pointers will no longer return pending kill objects in PIE.

  • Bug Fix: Fixed issue with plugin stack traces not resolving correctly in logs. This manifested as "UnknownFunction" entries in the logged stack trace.

  • Bug Fix: Fixed issue where CrashReportClientEditor would crash while exiting due to the "request exit flag" not being set.

  • Bug Fix: When defining AddStructReferencedObjects for Garbage Collector exposed structs, GC will now continue to process other UPROPERTY exposed UObject references instead of only calling AddStructReferencedObjects on that struct.

  • Bug Fix: Imported FFieldPathProperty from the text.

  • Bug Fix: Toggling TraceLog CPU channel could result in incorrect timing data. Due to mismatching begin/end events and batches that weren't flushed incorrect scopes would frequently be displayed in UnrealInsights when toggling the CPU channel on and off.

  • Bug Fix: Added Ensure for getting the correct case of project path during engine startup on the Windows platform.

  • Bug Fix: Fixed buffer overrun and static buffer reuse in crash context.

  • Bug Fix: No longer load pak verification data if pak verification is turned off, this leads to a slight reduction in memory footprint.

  • Bug Fix: Fixed a small bug in which pak verification data was being loaded, when pak verification was turned off. This is always in memory so represents a small memory gain.

  • Bug Fix: Fixed some bad logic for calculating when padding is needed in Pak files.

  • New: Moved environment command-line parsing earlier. This allows setting up for example log output using environment variables in automated scenarios.

  • New: Added Ensure fix for getting the correct case of the project path during engine startup on Windows platforms. The case will no longer resolve directory junctions at the same time as doing so can cause problems for p4 operations.

  • New: Added Ensure to the project directory so that is updated after the first time the project file path is set.

  • New: Added Support for "-ddc=default" syntax. It functions the same as omitting the " ddc" argument, but useful for CI environments.

  • New: Refactored TFastReferenceCollector template arguments to use enum options instead of multiple bool flags.

  • New: TFastReferenceCollector now supports traversing weak pointer properties when collecting references to UObjects.

  • New: Added a callback to allow custom property types (from plugins etc) to be converted from UProperties to their respective FProperty types.

  • New: Added support for additional properties to TraceLog channels.

  • New: Cooker File IO improvements:

    • No longer check the End-of-File tag unless working in a Windows uncooked build with DO_GUARD_SLOW enabled.

    • Avoid emptying the file content buffer in FArchiveFileReaderGeneric when performing a seek but staying within our current buffer window.

    • Avoid emptying the file content buffer in FArchiveFileReaderGeneric when performing a seek outside the buffer window then a seek back into our buffer window without any read in between.

  • New: Added more debug info to ensure triggered by invalid object path when setting Soft Object Path.

  • New: Introduced additional UE_LOG statements in SavePackage.cpp.

  • New: Refactored ContainsObjectReference and ContainsWeakObjectReference so that the latter is implemented in terms of the former.

  • New: TraceLog channels now use refcounting to track enabled state. In order to easier manage enabled channels and initialization, Trace::FChannel now uses reference counting. Negative values mean the channel is disabled.

  • Improvement: Optimized Pak file indices by computing the PathHashIndex in Unrealpak rather than using strings at runtime. This removes the need to shrink the string indices for performance, which was triggering a bug due to unsynchronized multithreaded access.

  • Improvement: Garbage Collector will now use the token stream instead of serialization for TMap and TSet properties.

  • Improvement: Flipped the logic for UObject::IsDestructionThreadSafe. It will now be whitelisting classes instead of blacklisting resulting in memory and performance optimizations for async destruction of UObjects.

  • Improvement: Optimized internal Garbage Collector functions by removing inline in order to optimize compile times.

  • Deprecated: Deprecated CreatePackage(Outer, Name) and replaced it with CreatePackage(Name).

Datasmith

  • Crash Fix: Fixed a crash that occurred when importing variant data from some DeltaGen scenes.

  • Crash Fix: Fixed a crash when parsing UsdGeomPointInstancersin USD where the prototype is a reference to another primitive.

  • Crash Fix: Fixed a Datasmith Addin crash on export of Line and Curve entities with Revit.

  • Crash Fix: Fixed a crash that occurred when adding new USD layers via the USD Stage Editor window, and fixed meshes that were unnecessarily rebuilding when adding empty layers via the USD Stage Editor window.

  • Crash Fix: Fixed a crash from changing the framerate of the AUsdStageActor's imported LevelSequence after opening a USD stage.

  • Crash Fix: Fixed a crash that occurred when trying to import meshes from Cinema 4D scenes that have more than 7 UV channels.

  • Crash Fix: Crash caused by Set Convex Collision Dataprep node was fixed.

  • Bug Fix: Fixed USD PointInstancers that did not update their spawned HISM components when their prototypes were updated and the file was reloaded via the USD Stage Editor window.

  • Crash Fix: Fixed a crash that occurred when reloading a USD stage and a PointInstancers prototype path could not resolve.

  • Crash Fix: Fixed a crash when adding empty existing USD layers as references in the USD Stage Editor window.

  • Crash Fix: Fixed a crash caused by parsing USD SkelRoot meshes with interleaved triangles and quads.

  • Bug Fix: Fixed USD stage not animating when going into PIE in some scenarios.

  • Crash Fix: Fixed a crash when unchecking prim payloads on the USD Stage Editor window.

  • Crash Fix: Fixed a crash when importing a USD prim that doesn't have enough displayColors.

  • Crash Fix: Fixed a crash when importing a USD SkelRoot mesh that does not have joint weights.

  • Crash Fix: Datasmith no longer crashes when parsing VRED variant files with invalid transform data.

  • Crash Fix: Closing the USD stage or switching variants via the USD Stage Editor window no longer leads to a crash.

  • Crash Fix: Fixed crashes related to undoing a change of the metersPerUnit field on the USD Stage Editor window.

  • Crash Fix: Fixed a crash after clicking Execute button in a Dataprep asset instance.

  • Crash Fix: For OpenNurbs importer, a potential crash if the scale vector was non-uniform was fixed.

  • Bug Fix: Fixed the displacement scale for MDL files.

  • Bug Fix: Fixed an incorrect export time field in a Datasmith scene when imported from Revit.

  • Bug Fix: Fixed metersPerUnit display not resetting when closing the USD stage.

  • Bug Fix: Now shows original import options when reimporting USD assets.

  • Bug Fix: Fixed Variant Manager variants with unspecified dependencies being marked as invalid dependencies for others; fixed Variant Manager variant dependencies not being updated when the target variant has been removed.

  • Bug Fix: Fixed the blend shape and animation bugs that occurred when the same SkelRoot was referenced multiple times in the same USD stage.

  • Bug Fix: FBX Exporter now supports material instances.

  • Bug Fix: Fixed an issue where Cinema 4D objects would always use display color materials even when set to off.

  • Bug Fix: Components name collision is now better handled when importing through Datasmith.

  • Bug Fix: Corrected a wrong Normals orientation on wall entities exported from Revit Datasmith.

  • Bug Fix: Dataprep Merge and Proxy Mesh Operators no longer leave empty mesh actors in the hierarchy.

  • Bug Fix: Volumes from Boolean operations are now removed by the IFC importer.

  • Bug Fix: Datasmith now supports Opacity Mask Clip Value.

  • Bug Fix: SkeletalMesh now outputs logs with the mesh name when there is a compute tangent error.

  • Bug Fix: The Dataprep Disable/Enable function now populates the undo stack.

  • Bug Fix: The Reimport workflow for FBX from Import to Level now updates in place.

  • Bug Fix: For PLM XML, the ProductRevisions and ProductViews actors are no longer created if not present in the original file.

  • Bug Fix: Fixed the Selected Option property where Switch Actors were not capturable via the Variant Manager window.

  • Bug Fix: Fixed an issue where, in some cases, the Corona default light units conversion wasn't correct, making the lights too bright in Unreal.

  • Bug Fix: Incorrect location of spawned actors using Spawn Actors At Location no longer happens.

  • Bug Fix: Scene hierarchy from a Revit Datasmith export no longer has duplicates.

  • Bug Fix: Fixed a section length rounding error for LevelSequences imported from USD for optimized builds.

  • Bug Fix: Fixed animations that were not resetting properly when reloading the USD stage via the USD Stage Editor window.

  • Bug Fix: Dataprep no longer creates assets that cannot be moved to dataprep subfolders.

  • Bug Fix: Revit Structural Steel Connections are now exported with Datasmith.

  • Bug Fix: Incorrect names on subcomponents imported with Datasmith integrated from Dev-Enterprise no longer occur.

  • Bug Fix: Fixed the behavior of AUsdStageActor when going into and out of PlayInEditor sessions, and fixed the stage not closing when switching maps with the USDStage window closed.

  • Bug Fix: Fixed a behavior of AUsdStageActor when undoing and redoing in the editor, along with the USD Stage Editor window not updating when switching maps.

  • Bug Fix: Fixed the parent SwitchActor option switching, clearing the chosen choices of child SwitchActors; fixed child SwitchActors being able to set children as visible when they themselves are unselected.

  • Bug Fix: You can now hide USD mesh prims with the USD Stage Editor window in some circumstances; invisible meshes sometimes contributing to collapsed parent meshes when importing from USD has also been fixed.

  • Bug Fix: Fixed skeletal meshes disappearing when toggling the visibility of SkelRoot meshes in the USD Stage Editor window.

  • Bug Fix: The DataPrep Output to Folder now does a sanitize check on the name of the folder.

  • Bug Fix: Illegal characters in a texture name will now survive a Datasmith export when integrated from Dev-Enterprise.

  • Bug Fix: Fixed incorrect CineCamera transforms and parameters when importing from USD files.

  • Bug Fix: Entities in Revit exporter Datasmith scenes no longer have offsets on their meshes.

  • Bug Fix: Fixed incorrect camera transforms when opening or importing stages with Z as the up-axis.

  • Bug Fix: Fixed an issue where escaping out of renaming a prim with the USD Stage Editor window sometimes left an empty row on the prim hierarchy view; fixed updates to USD Stage Editor prim hierarchy view resetting item collapsed states; when creating prims with the USD Stage Editor window, no longer allows names that would lead to USD errors.

  • Bug Fix: It is now possible to drag and drop actors onto empty Variant Manager actor lists.

  • Bug Fix: Fixed some USD scenes from being opened purely as components of the AUsdStageActor.

  • Bug Fix: Fixed importers incorrectly traversing into USD PointInstancers when generating meshes.

  • Bug Fix: Fixed additional static mesh and components from being generated when collapsed USD prims update under some circumstances.

  • Bug Fix: Stabilized behavior of AUsdStageActor during some complex editor interactions such as undoing deletes, undoing stage changes, and map changes.

  • Bug Fix: Fixed exported CineCamera parameters when exporting levels to USD.

  • Bug Fix: Fixed an error when exporting level to USD due to incorrect CineCamera property names; improved name sanitizer when exporting USD levels.

  • Bug Fix: Fixed an issue where the PurposesToImport import option was not being saved to a config file between USD imports.

  • Bug Fix: Fixed an issue where imported USD assets were not being updated in some circumstances when reimported.

  • Bug Fix: Fixed a USD error message when trying to import AnimQuery objects of SkelRoots that do not have any SkelAnimations.

  • Bug Fix: Fixed an issue when importing a USD stage after opening it via the USD Stage Editor window.

  • Bug Fix: UE4 materials are no longer ignored when importing from an existing USD stage.

  • Bug Fix: USD PointInstancer prims no longer import with extra actors.

  • Bug Fix: Fixed mesh with partial material assignment not receiving DisplayColor materials on unassigned faces when importing USD scenes.

  • Bug Fix: Fixed USD SkelRoots not generating DisplayColor materials when imported.

  • Bug Fix: Added support for importing all USD interpolation types for displayColor and displayOpacity for SkelRoots.

  • Bug Fix: Fixed displayOpacity USD materials not being created when importing unless there's also a displayColor.

  • Bug Fix: Fixed Normals being unnecessarily discarded and recomputed in some scenarios when importing Cinema 4D scenes.

  • Bug Fix: Imported actor and component visibility now import correctly from VRED scenes.

  • Bug Fix: Improved support for parsing USD primvars as UV sets.

  • Bug Fix: Fixed the File > Reload option on USD Stage Editor window not re-reading the USD file in some scenarios.

  • Bug Fix: Fixed GeomBindTransform not being applied to imported blend shapes when importing USD SkelRoot scenes.

  • Bug Fix: Wrong Normals orientation on wall entities exported from Revit Datasmith Integrated from Dev-Enterprise no longer occurs.

  • Bug Fix: Renamed Scale to metersPerUnit on the USD Stage Editor window.

  • Bug Fix: Fixed mismatching frame rates on imported LevelSequence when the parent USD layer is not animated but the child layer is.

  • Bug Fix: Fixed USD message log messages that never cleared on sequential imports.

  • Bug Fix: Fixed displayColor interpolation support for varying mode in USD scenes.

  • Bug Fix: In the USD Stage Editor window, fixed hiding UsdGeomMesh prims that are part of SkelRoots but were having no effect.

  • Bug Fix: Fixed USD blend shapes desyncing with SkeletalMesh in some scenarios.

  • Bug Fix: Old assets no longer show up in content folders when importing USD scenes from the USD Stage Editor window.

  • Bug Fix: Fixed AUsdStageActor not loading USD stage on startup if loaded from a sub-level.

  • Bug Fix: Fixed the USD Stage Editor window not refreshing when the StageActor was destroyed.

  • Bug Fix: Fixed a behavior when opening, closing and reloading USD stages if the AUsdStageActor is in a sublevel.

  • Bug Fix: Fixed undoing an Action > Import in the USD Stage Editor window removing the dirty flag from imported assets.

  • Bug Fix: Fixed a warning when creating an import package with an invalid name when importing USD scenes.

  • Bug Fix: Fixed an issue where assets were not being generated if parsing a custom, user-defined schema when opening a USD stage, or during USD import.

  • Crash Fix: The following crashes were fixed:

    • The USD plugin no longer crashes when opening USD stages (both via USD Stage Editor as well as importing) with generated static meshes containing more than 255 material slots if the ray-tracing plugin is enabled.

    • It no longer crashes on every second reimport when reimporting USD scenes.

    • A crash that happened in some scenarios when importing the same skeletal mesh twice in a row from USD scenes no longer occurs.

    • USD materials destined for Renderman are ignored by our USD importer.

    • Fixed a crash that occurred when closing an open USD stage via the USD Stage Editor window with one of the generated static mesh components selected.

    • Fixed a rare crash when closing the USD Stage Editor window after deleting its AUsdStageActor.

  • Bug Fix: The following bugs were also addressed:

    • Fixed skeletal meshes not updating material assignments whenever the USD stage was reloaded via the USD Stage Editor window.

    • USD skeletal mesh reimports now only consider vertex positions when deciding whether the skeletal mesh was changed on disk.

    • Skeletons now import alongside their skeletal meshes when importing USD scenes in some scenarios.

    • Fixed USD importer and stage editor ignoring higher index UV sets if a lower index UV set wasn't available.

    • Now keeps intended UV set indices when importing or opening USD scenes, as opposed to always packing them sequentially.

    • Improved feedback related to UV set or primvar problems when importing or opening USD scenes.

    • Refresh metersPerUnit display on USD Stage Editor window whenever the stage is reloaded.

    • Fixed undoing USD Stage Editor stage openings, sometimes leading to duplicate components.

    • Fixed SkinnedMeshComponents generated when opening USD scenes not refreshing their render state when undoing or redoing changes.

    • Added basic editor multi-user support for USD Stage Editor (opening/closing stages, manipulation of the AUsdStageActor directly, and undo/redoing those operations).

    • Added support for sharing meshes and using material overrides when importing USD static and skeletal meshes via the USD Stage Editor window or direct import.

    • Fix bugs on USD Stage Editor related USD always converting layer file paths to lower case (especially visible if layers had absolute file paths).

    • Fixed some generated static and skeletal meshes losing their UV sets whenever the USD stage was reloaded via the USD Stage Editor window.

    • Fixed file extensions when browsing for USD files to open or save via the USD Stage Editor window on Mac.

    • Fixed a stack overflow when importing USD stages (or opening via the USD Stage Editor window) if a layer has itself as a sublayer.

    • Fixed the USD Stage Editor window to correctly remember the stage variant state between different openings of the same stage.

    • Fixed undoing a AUsdStageActor deletion with an opened USD stage that sometimes caused a component to pop out of its actor/component hierarchy.

    • On the USD Stage Editor window, visibility buttons for prims that can't be hidden via USD were removed.

    • Minor tweaks were made to the USD Stage Editor window so that column splitters can be used for the variant and variant sets panel.

    • Fixed rounding errors when parsing some types of animation curves imported from USD scenes.

  • Bug Fix: When importing an Alembic file as a Skeletal Mesh, normals will be computed for each of the generated morph targets.

  • Bug Fix: Fixed duplicate objects being spawned when importing Cinema4D scenes with instanced nodes; also fixed animations of instanced nodes not importing correctly from Cinema4D scenes.

  • Bug Fix: Fixed an issue where material instance parameters that were overridden in Unreal were not preserved during a reimport.

  • Bug Fix: Fixed mesh reimport not using tessellation parameters specified at import time.

  • Bug Fix: Improved support for lights with no attenuation when importing Cinema4D scenes.

  • Bug Fix: Fixed multiple LevelSequence bindings when importing Cinema4D scenes with instanced nodes.

  • Bug Fix: Fixed SwitchActor label incrementing twice when dragging and dropping it onto the viewport.

  • Bug Fix: An issue with Materials was fixed where material parameters were not updated when parent master material changed by reimport.

  • Bug Fix: Fixed a reimport issue where new components would be created instead of updating the existing ones in the case where the label of a component had changed since the last import.

  • Bug Fix: Improved support for the standard 3ds Max blend material. Its conversion has been updated to use the newer Datasmith UE Pbr material system.

  • Bug Fix: In MDL, fixed excessive material compilation on import.

  • Bug Fix: Removed a redundant folder creation in MDL.

  • Bug Fix: Dataprep folder import no longer creates an unexpected folder hierarchy.

  • Bug Fix: Fixed incorrect shading on LiDAR Point Cloud assets when extracted from another asset.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent the FDatasmithSceneImpl::Reset() function from fully resetting the scene.

  • Bug Fix: DatasmithFacadeCSharp鈥擨n C#, FDatasmithFacadeActors now stay valid after they are added to a scene.

  • Bug Fix: The scene orientation of the OpenNurbs (.3dm) Datasmith importer has been modified to match the orientation of the .FBX scene importer and of the upcoming DatasmithRhinoExporter. Effectively, this translates into a 180掳 rotation around the Z-axis, between .3dm scenes imported with UE4.25 and those imported with UE4.26.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent the Flatness property for FDatasmithMaterialExpressionFlattenNormal to be properly set.

  • Bug Fix: The failure message when trying to import huge meshes(bigger than 2Gb) has been improved.

  • Bug Fix: Fixed a bug in the DatasmithSDK when exporting an IDatasmithTextureElement with a custom Label, where the label would not be exported to the generated .udatasmith file.

  • Bug Fix: MDL: Removed a misplaced error message.

  • Bug Fix: Fix a bug when reparenting an actor during reimport did not give the proper result.

  • Bug Fix: In Dataprep, an actor nesting for Folder import was fixed.

  • Bug Fix: Fixed color- and contrast-related issues when importing LAS files containing 12-bit components.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent exporting 2 textures with the same file name but different paths. A suffix is now added to the conflicting file name instead of ignoring that texture file.

  • New: PLM XML now retessellates imported geometry without having to reimport it.

  • New: Improved conversion of UVs and transforms for tiling/shift coordinates when importing Rhino files.

  • New: Pivot for files imported from Rhino now set to geometry bounding box center.

  • New: Implemented a new class: UDataprepFilterTransform.

  • New: Added support for normal maps when processing UsdPreviewSurface materials.

  • New: Added support for USD on Mac.

  • New: Added support for USD Lights. The following UsdLux schemas are now supported: UsdLuxDistantLight, UsdLuxDiskLight, UsdLuxRectLight and UsdLuxSphereLight.

  • New: Support now in place for exporting and importing variant data from .udatasmith files.

  • New: Implemented Flip Face operation in Dataprep.

  • New: Implemented a Spawn Actors at Location operation.

  • New: Created a selectable material substitution table.

  • New: Added support for UsdLuxDomeLight as UE SkyLight with a cubemap for USD.

  • New: Implemented the ability to skip a step within an action node in Dataprep.

  • New: Updated the USD SDK to 20.05 with Python 3 support.

  • New: In Dataprep, you can now copy a name from an asset/actor in a content/scene preview.

  • New: Dataprep now has a wizard for custom operation and filter creation.

  • New: Regroup Add New and search bar in operators/filters tab now available in Dataprep.

  • New: Automatically synchronize selection with filter preview.

  • New: You can now implement Reference Filter Transform in Dataprep.

  • New: The USD importer will now reuse identical generated DisplayColor materials when importing USD scenes; support for generating double-sided DisplayColor materials when importing USD scenes has also been enabled.

  • New: Setting thumbnails to the Variant Manager's variant sets is now allowed, along with setting Variant Manager thumbnails at runtime with Texture2D objects. An event was added that is fired whenever Variant Manager thumbnails are updated.

  • New: Exposed access to the Variant Manager's UPropertyValue's prop segments.

  • New: The UI for the Variant Manager was updated to better separate elements.

  • New: Multiple transform animations are now combined into the same LevelSequence when importing animated DeltaGen scenes.

  • New: Some materials are now always set on the base imported mesh when importing Cinema 4D scenes, even if there are multiple overrides.

  • New: Added support for exporting materials to USD as preview surface materials with baked textures.

  • New: The USD importer now imports baked UAnimSequence skeletal animations when importing USD stages with animated SkelRoots.

  • New: Updated the Dataprep operation Spawn Actors At Location to support more asset types.

  • New: Added support for exporting SkeletalMeshes to the USD formats.

  • New: Changed USD Exporter to emit Z-up stages by default.

  • New: Added widgets to control prim kinds and purposes on the USD Stage Editor window; set root prim to Assembly kind by default when creating stages via the USD Stage Editor.

  • New: Fixed multiple bugs that occurred when adding, removing, or renaming prims in the USD Stage Editor window. Now allows adding top-level prims with the USD Stage Editor window.

  • New: Allows setting dependencies between Variant Manager variants.

  • New: Added support for parsing USDZ archives as regular USD scenes.

  • New: Now writes back the visibility of scene components to the USD stage when opened via the AUsdStageActor; fixed prims that sometimes were not hiding when toggled in the USD Stage Editor window.

  • New: Support for:

    • Exporting vertex color and opacity to USD

    • Exporting all static mesh LODs to USD as "LOD" variant sets

    • Exporting to USD multiple material assignments per LOD

  • New: Added support for importing USD Skel blend shapes as Morph Targets.

  • New: Implemented a Set Layer operation.

  • New: Disabled actor importing when importing USD scenes from the Content Browser.

  • New: It is now possible to import Alembic velocities. This is useful when the topology is not constant during an animation since Unreal cannot compute motion vectors without matching vertex pairs between frames. If the velocities are available in the Alembic file, they can be imported, and motion vectors will be deduced from them.

  • New: Removed an icon that showed when moving a node onto itself and replaced the associated message.

  • New: Datasmith now exposes a multi-process CAD import to Python.

  • New: The MDL SDK has been upgraded to 2020.1.

  • New: With Datasmith, you now have the ability to author USD xform animations in Sequencer when using the USD stage.

  • New: Import of folders has been speeded up by making use of multi-core processing.

  • New: Datasmith now supports the thin translucency shading model.

  • New: Improved support for 3ds Max Corona materials when exported through Datasmith. The following materials and maps conversion have been improved: CoronaMtl and CoronaLayeredMtl, CoronaAO, CoronaColor, CoronaNormal and CoronaBitmap.

  • New: Support is now available for display and document color when importing Cinema4D scenes.

  • New: PLM XML now accepts .xml. It also includes minor wording fixes.

  • New: Datasmith importers should now only recompute invalid normals and tangents, and leave valid ones intact, as opposed to discarding them all and recomputing the entire set.

  • New: A Navisworks exporter has been added.

  • New: Individual LiDAR Point Cloud assets no longer have a 2-billion point limit, which allows virtually unlimited amounts of points per asset.

  • New: Added support for importing and exporting point clouds in LAZ format.

  • New: Significantly improved performance (up to 80%) when merging LiDAR Point Cloud assets.

  • New: Added LiDAR Clipping Volume Actor, allowing real-time clipping of LiDAR point clouds.

  • New: It is now possible to calculate the Normal vectors for points, either for the whole cloud or for only a selection. The current model is best suited for urban and human-made surfaces.

  • New: Added support for importing point clouds in E57 format.

  • New: Significantly improved performance (up to 65%) and RAM usage (up to -80%) when exporting Point Cloud assets as LAS.

  • New: Significantly improved performance (up to 50%) and RAM usage (up to -40%) when importing LAS files.

  • New: The DatasmithFacadeCSharp is now Mac-compatible. With it, it is now possible to export Datasmith scenes in C# on Mac.

  • New: Better handling of incorrectly formatted LAS/LAZ files

  • New: Rhino Exporter is now available.

  • New: Datasmith OpenNurbs (.3dm) import now supports importing the Rhino Attribute User Text as metadata.

  • Deprecated: Deprecated the old version of the USD Importer in favor of the new module, USD Stage Importer, that shares code paths with the newer USD Stage Editor window.

  • Deprecated: Removed deprecated async functions from actors and components.

  • New: DatasmithFacadeUEPbrMaterial was added to the DatasmithFacadeCSharp. With it, it is now possible to export material graphs using the DatasmithFacade.

  • API Change: We must now use the FDatasmithFacadeScene.AddMaterial() function instead of the FDatasmithFacadeScene.AddElement() when adding materials to the scene.

  • New: FDatasmithFacadeTexture was added to the DatasmithFacadeCSharp, allowing for better customization of the exported textures.

DevTools

  • Bug Fix: Fixed incorrect quotation in VSCode configuration files thus breaking IntelliSense.

  • Bug Fix: VSCode - Stopped iterating to parent directories when the root directory is reached, as there can not be any relevant compiler options specified further up than that. Avoids reaching the root of the drive.

  • Bug Fix: Fixed an error that occurred when the ParentDirectory property was used on non-windows paths and it would iterate to the root (index out of bounds exception).

  • Bug Fix: Fixed an issue with converting UnrealTargetPlatform to a string when parsing command-line options. Added a "TypeConverter for UnrealTargetPlatform Added" check to verify if a type converter exists when parsing command-line arguments.

  • Bug Fix: Separated CppStandards into different PCHs to not mix Cpp17 with Cpp14 in the same shared PCH.

  • Bug Fix: Fixed excluded files in VsCode for foreign projects. Hid the .vscode folder as it only contains configuration files for the project itself.

  • Bug Fix: Corrected settings.json generation for single projects (VSCode).

  • Bug Fix: Added a small variance to the time the UGS scheduled sync starts (+/- 10 minutes) to avoid everyone hitting the P4 server at exactly the same time.

  • Bug Fix: Fixed VsCode error failing to find the omnisharp extension.

  • Bug Fix: A display message will now only be issued when NvAPI / AGS isn't available due to RenderDoc being enabled. Reduced the normal path verbosity to Warning from Error.

  • Bug Fix: The UAT script SyncProject can now be used outside of Perforce when syncing a project without syncing the engine.

  • Bug Fix: The RenderDocPlugin should now only prompt to find RenderDoc when not running in Unattended mode.

  • Bug Fix: The editor Perforce plugin will now sync all revisions up to the specified changelist instead of just the specified change.

  • Bug Fix: Because the RenderDoc plugin loads well before DPCVars are loaded, it was not possible to disable RenderDoc during Ray Tracing tests. Support for disabling frame trace captures via cmd line was added as a workaround.

  • Bug Fix: Fixed infinite loops for DMX Blueprint events.

  • Bug Fix: For DMX, the default Protocol Name is no longer None.

  • New: VSCode Intellisense mapping has been reworked, it now creates a C++ configuration per project, with a name that makes it clearer to which target/platform/configuration the Intellisense is mapped.

    • Win64 development is still mapped for each target so run a build for it to make UHT generate the headers in the expected location.

    • The clang cpp file now specifies PCH / defines for each cpp file, which will correct occasional Intellisense errors for certain files.

  • New: Added a Perforce cstat command wrapper to the editor Perforce plugin.

  • New: Exposed AllowShaderWorkers to CVars as well.

  • New: Added the 'Res=1280x720wf" command line argument to simplify setting window resolution.

  • New: The RenderDoc plugin no longer loads when automation is not allowed to take frame traces. Loading the RenderDoc plugin is disallowed when RayTracing tests are being run.

  • New: Optimizations for DDC access on remote/slow drives.

    • Added a new 'ConsiderSlowAt" property to the 'Filesystem" DDC entries in DefaultEngine.ini. If latency to the node is greater than or equal to this value then the node will be marked as slow which disables touching and reduces file stats.

    • Added a new 'PromptIfMissing" property to the 'Filesystem" DDC entries in DefaultEngine.ini. If a path is set but not accessible, the user will be prompted and able to retry if they had to start a VPN or mount a drive.

  • New: Implemented auto mapping of Function Names to Attributes in the DMX Attribute system when parsing a GDTF file.

  • New: Added a "-Info" option for UnrealPak to dump some header information about a pak file.

  • Improvement: Disabled attempting frame trace captures when the cmd line is specified.

  • Improvement: Tweaked job scheduling in ParallelExecutor to make ISPC jobs execute early; ISPC jobs tend to run long so starting them early prevents ISPC from causing the build to take longer than necessary.

  • Improved: Updated DXC to rev. 04a84f0.

AutomationTool

  • Bug Fix: AutomationTool: Force the usage of backslashes in the *.exe path that will be set as resource 201 for BootstrapPackagedGame. The usage of slashes resulted in a part of the path being truncated by PathRemoveFileSpec which was preventing the test of local DLLs from succeeding.

  • Bug Fix: The BuildPluginCommand now properly supports non-Test and non-Shipping Game targets. The previous code prevented the DeveloperTool modules from being compiled if there were no Runtime modules in the plugin.

  • Bug Fix: Removed the [STAThread] attribute from the AutomationTool entry point as this was causing issues with some platforms" use of COM APIs.

  • New: Added CSVTools to installed builds.

  • New: Added a callback to the UAT project parameters so a script that uses buildcookrun can choose to modify the deployment context before staging.

  • New: Exposed a function from the staging code which allows remapping staged file paths based on the project remapping configuration.

  • New: Extended cooked target staging so that any programs or editor server targets are forced to Development configs, rather than what the master client/server targets request.

  • New:

    • Missing target receipts are now ignored when staging a DLC plugin. A content-only DLC plugin can now be staged using the previously-built executables from the staging of the original project.

    • Disabled chunking when staging a DLC plugin.

  • New: In UAT, added a staging option to disable the use of existing .pak files from the staging folder of other build targets, when forcing the reuse of another target's cooked data.

  • Improvement: Hardened UAT to not crash when the PATH variable contains a path with invalid characters.

UnrealBuildTool

  • Bug Fix: Fixed retry in Linux when linking batch files.

  • Bug Fix: Moved VS Code file exclusions to .ignore to fix large projects.

  • Bug Fix: Fixed a crash in ListThirdPartySoftware.Automation.cs.

  • Bug Fix: Fixed the UnrealBuildTool crashing on launch if the initialization of UnrealTargetPlatform static members variables happens out of order.

  • Bug Fix: Corrected the ConfigHierarchy parsing of negative integers. The value parsing code was not handling the "-" character so config items such as 鈥淰alue=-1" would fail to parse.

  • Bug Fix: Corrected some inconsistencies with how inlining compile options were applied to the VCToolChain:

    • The CompileEnvironment variable 'bUseInlining" is now correctly applied in all configurations.

    • Enabling 'Edit and Continue" will now disable inlining for all configurations.

  • Bug Fix: Fixed IsHostOnVpn always returning false (so XGE will now be turned off when working on a VPN).

  • New: Build targets are now allowed to use config file attributes.

  • New: Added code in UBT to detect circular dependencies in module references early in the build process. This will display an error message such as: Error : Circular dependency on PhysicsCore.Build.cs detected. Route is Target -> Launch.Build.cs -> Engine.Build.cs -> RenderCore.Build.cs -> RHI.Build.cs -> (Dynamic) -> VulkanRHI.Build.cs -> HeadMountedDisplay.Build.cs -> AugmentedReality.build.cs -> MRMesh.build.cs -> PhysicsCore.Build.cs -> ChaosEngineBridge.Build.cs -> ChaosSolvers.Build.cs -> PhysicsCore.Build.cs. Break this loop by moving dependencies into a separate module or using Private/PublicIncludePathModuleNames to reference declarations As part of this change, all current UE4 modules with circular references have been modified to declare them and those dependencies either whitelisted or fixed if the change was straightforward.

  • New: Added an option to UBT project generation to allow users to specify include paths to be omitted from project files. This speeds up parsing, reduces the memory footprint, and allows irrelevant symbols to be excluded from IntelliSense suggestions. Example usage in BuildConfiguration.xml: ThirdParty\WebRTC;ThirdParty\PhysX Example savings - Adding ThirdParty\PhysX = 47% vcproj reduction (28MB -> 15MB) Adding ThirdParty\ = 61% vcproj reduction (28MB -> 11MB)

  • New: Added Thread_UseAllCpuGroups to the UnrealBuildTool config to enable UBT to use both CPU groups on high-core systems such as 64-core ThreadRippers.

  • New: Performance improvements to SN-DBS integration in Unreal Build Tool:

    • Switched to the json interface and removed local task execution, allowing all task scheduling to be handled by SN-DBS.

    • A full engine rebuild demonstrated an improvement of ~40% vs the previous implementation on a network with 4 worker agents.

  • New: Added a minor fix for the bCreateHotPatchableImage property setter which ignored the requested value.

  • New: Exposed a function to clear plugin and directory caches. If new plugins are created by the owning UAT script, then they can be ignored because they weren't there when the directory/plugin availability information was cached.

  • New: When generating visual studio project files, projects with multiple editor targets will now use the default editor target config setting, if it exists, to determine which editor target should be added to the main project file. All others will generate separate projects inside the VS solution.

  • New: Clang 10 is now the default for Windows Clang configuration.

  • Improvement: Turned off parsing of platform data that fails for disabled plugins during project generation.

UnrealGameSync

  • New: Added a "View in Swarm" command to the context menu for changelists.

UnrealHeaderTool

  • Bug Fix: UHT will now correctly parse an implemented interface class function declaration that includes one or more TSet/TMap parameters.

  • Bug Fix: Added a static assert to detect that inherited UStructs are not polymorphic unless basestruct is also polymorphic as this is currently not supported by the reflection system.

Editor

  • Crash Fix: Fixed a crash in the P4 Source Control plugin when parsing the history of an asset that was deleted, then added back.

  • Crash Fix: Fixed crash when issuing the Console command stat none.

  • Crash Fix: In multiplayer, you can reload your level in-game.

  • Crash Fix: Fixed a crash that occurred when resetting the layout.

  • Crash Fix: The Level Editor no longer crashes when adding a new level.

  • Crash Fix: Duplicates are filtered out when gathering Source Control states, preventing a crash when syncing Editor data.

  • Crash Fix: Fixed a crash on Undo and Redo actions when the Preview Material source instance is null.

  • Crash Fix: Cancelling a transaction now cancels the entire transaction instead of a part of it.

  • Crash Fix: The tutorial closes when the Editor window is closed.

  • Crash Fix: Updated ObjectTools where we de-referenced an Editor transaction without checking its validity. This caused a crash when using these functions from commandlets.

  • Crash Fix: Fixed an issue where canceling the PIE multiplayer client while loading would cause a crash.

  • Crash Fix: Fixed an issue with scripted toolbar buttons where implementing IsVisible or CheckState functions would cause a crash because no UFunction was allowed.

  • Crash Fix: Fixed a crash when calling CanSelectActor on an actor that is not in a Level.

  • Crash Fix: Fixed an issue where newly-created redirectors would be garbage-collected before being renamed, causing a crash.

  • Crash Fix: Fixed a crash when opening a recent level that had changed to a redirector.

  • Crash Fix: Fixed a crash when trying to restore a package at startup that no longer exists.

  • Crash Fix: Fixed a crash when following tutorials that opened the Modes tab.

  • Crash Fix: Fixed an Editor crash when toggling to full screen after a layout change.

  • Crash Fix: Fixed a crash where SPropertyEditorInteractiveActorPicker was trying to deactivate a mode that was not active.

  • Crash Fix: Fixed a crash when an Asset is deleted inside the Save As dialog.

  • Crash Fix: Fixed an issue where re-importing a SpeedTree that had its original materials removed from the Project caused a crash.

  • Crash Fix: Fixed a crash with the transactional temporary UI stub object.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Mesh with new bones that had animations using that skeleton.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Mesh that failed to re-import.

  • Crash Fix: Fixed an Editor crash during multi-user editing when using the Retopologize Tool.

    • Fixed the file sharing service to gracefully handle the case where the file containing the list of active processes using the service failed to open or save.

    • The service will only delete the expired files after one hour, rather than removing the entire shared folder.

    • Fixed the recovery service being killed on Editor exit.

  • Crash Fix: Fixed crash when syncing out-of-date Assets in the Editor if a dependency package was not found.

  • Crash Fix: Fixed a crash when the frame rate was zero in the animation timeline.

  • Crash Fix: Fixed an issue where the Editor crashed if the package path being passed to Map Load was a redirector, such as the EditorStartupMap.

  • Crash Fix: Fixed an issue where removing a Level from the world would cause a crash if actors in that level were selected inside the Hierarchical Level of Detail (HLOD) Outliner.

  • Crash Fix: Fixed an issue where accessing certain static functions caused a crash due to the EditorStyle module not being loaded first.

  • Crash Fix: Fixed a crash on auto-save when a Hierarchical Level of Detail (HLOD) Actor was manually deleted from the HLOD Outliner.

  • Crash Fix: Fixed a crash when importing an FBX file containing degenerate tangents or invalid meshes.

  • Crash Fix: Fixed a potential crash when force-deleting textures or materials used by BSP geometry in the current Level.

  • Bug Fix: MessageBus: Fixed infinite message sending when sending a direct message to a combination of local and remote recipients.

  • Bug Fix: Fixed initialization for UInstanceStaticMeshComponent after an owning actor Blueprint compilation.

  • Bug Fix: Fixed the mesh paint adapter so it handles larger meshes.

  • Bug Fix: Undo/Redo actions now work after adding a Component to an Actor, when the Component name was scrolled out of the view while still being edited.

  • Bug Fix: - USplineComponent::ClearSplinePoints now updates its SplineMetadata - SplineComponent.

  • Bug Fix: Fixed the text location in HiDPI.

  • Bug Fix: Restored child Editor windows now display their name.

  • Bug Fix: The JSON data table import now respects the Ignore Extra Fields option.

  • Bug Fix: In the Content Browser, the Asset file path is no longer cleared in the Editor after cancelling and closing the browser.

  • Bug Fix: When using Force Delete, the selection change is now detected.

  • Bug Fix: Vertex data statistics now update in Mesh Paint mode.

  • Bug Fix: Painting is no longer permitted on textures with an unknown number of bytes per pixel.

  • Bug Fix: Updated CSV import factory to prevent setting the import path to an empty string when importing text directly

  • Bug Fix: The Play dropdown menu now reflects the correct value for the number of clients.

  • Bug Fix: Fixed several issues with Editor UI interaction when using single-process multiplayer mode, and fixed the client number in the window name to always match the log client number.

  • Bug Fix: Updated Class Viewer to allow unloaded Editor-only classes.

  • Bug Fix: Updated Level Editor floor snapping to properly ignore all Actors in a group selection.

  • Bug Fix: Fixed nodes that were placed in unexpected locations on Material, Blueprint, and Niagara graphs.

  • Bug Fix: Broadcast Camera Moved event when the user jumps to a Bookmark in Editor.

  • Bug Fix: The selected Actor and corresponding Details panel now transfers to the current PIE or SIE instance when starting the session.

  • Bug Fix: Fixed legacy world rename handling, avoiding potentially renaming map build data with the name of an existing build.

  • Bug Fix: In the Perforce plugin, you can now use the command, -P4Passwd cmd , when connecting to Perforce.

  • Bug Fix: Fixed FName and exponential behavior when fixing up Meshes with many duplicate material names.

  • Bug Fix: When using Replace Actor, the mobility of the original Actor is retained.

  • Bug Fix: The Details panel no longer attempts to select separator nodes, which resulted in an invalid selection.

  • Bug Fix: Fixed viewports getting stuck upside down after orbit because of pitch locking.

  • Bug Fix: The Message Log now uses a fixed size font, and duplicate tooltip text was removed.

  • Bug Fix: User configuration is now preserved across package copies. Copying a package no longer causes packs like StarterContent to re-import and overwrite changes.

  • Bug Fix: Disabled editing of data table rows in the composite data table editor since changes are not saved.

  • Bug Fix: The SVN connection log message has been rewritten.

  • Bug Fix: Properties that have subcategories specified for them and have the ShowOnlyInnerProperties metadata flag now display correctly.

  • Bug Fix: World subsystems now initialize after a map rebuild.

  • Bug Fix: When Class Viewer is refreshed, it now scrolls to the selected item.

  • Bug Fix: The Parameters menu size has been clamped to no longer appear larger than the screen, also preventing flickering.

  • Bug Fix: When resetting Transform from the Details panel, the Transform of the rendered instance updates correctly.

  • Bug Fix: When resetting Curve Atlas Row, the row value resets correctly and no longer locks the user out of editing the value.

  • Bug Fix: Fixed PropertyEditor argument names for clarity and consistency.

  • Bug Fix: In the Details panel, the spacing of Float Curve Asset widgets was fixed.

  • Bug Fix: If the index is greater than the default array size, you can now export the last item of an array containing default values.

  • Bug Fix: There is no longer a prompt to save content when the user has bUseSingleProcess turned off, regardless of whether or not their PIE session was occurring in a separate process.

  • Bug Fix: When invoking CodeLite, a path name that includes spaces is now recognized correctly.

  • Bug Fix: PIE session windows now open with the correct Multiplayer Viewport Size setting found in Editor Preferences.

  • Bug Fix: Fixed an issue with Source Control submitting Project files.

  • Bug Fix: Updated Asset Picker to simultaneously show the filtered menu and hide the Search field.

  • Bug Fix: StatsRender no longer overlaps when using a custom LegacyFontSize.

  • Bug Fix: The MeshSimplifier & ProxyLODPlugin plugins were updated. The ProxyLOD plugin no longer generates uninitialized vertices at the end of the vertex buffer.

  • Bug Fix: The Editor analytic now correctly accounts the computer hibernation time as idle time.

  • Bug Fix: Updated Socket Manager to correctly adjust for DPI scaling. It no longer moves to the corner of the screen.

  • Bug Fix: In a VR PIE session, only the first viewport is marked as stereo-capable.

  • Bug Fix: When joining a multi-user session with in-memory change, the notification message has been rewritten for clarity.

  • Bug Fix: Moving an Actor to a World Outliner folder now created the proper transaction.

  • Bug Fix: Allow parsing of complex and localized numbers when emitting change events from SNumericTextBox.

  • Bug Fix: Fixed Level Details that were not using all of the space in its panel.

  • Bug Fix: Class Viewer now retains its selection when losing focus.

  • Bug Fix: Edit conditions now work correctly with fixed-sized C arrays.

  • Bug Fix: Fixed Class Viewer selection of unloaded Blueprint classes.

  • Bug Fix: Added partial Perforce state support for Move and Delete actions and Move and Add actions.

  • Bug Fix: Fixed a grammar mistake in the FBX Scene Import dialog.

  • Bug Fix: Changed Python3 TCHAR to PyApiChar(wchar_t) for platforms where wchar_t is 4 bytes.

  • Bug Fix: Fixed an issue where double-clicking a water mesh would cause a run-time error if the engine was compiled from source.

  • Bug Fix: Editor actions that try to focus a particular tab, like Blueprint debugging, will always work, even if the window is minimized.

  • Bug Fix: Fixed an issue where the Show in Explorer menu was not working properly for plugins in the Content Browser folder tree.

  • Bug Fix: Fixed an issue where displaying multiple instances of the InstancedStaticMeshComponent caused a long UI refresh. Now, if there are more than 512 instances (controlled by CVar r.Editor.MaxNumInstancesDetails), a performance warning displays with a button to show or hide instances per user preference.

  • Bug Fix: Fixed a thread safety issue in Perforce integration.

  • Bug Fix: Fixed the map-built data not being saved when closing a Level due to a save prompt re-entrance guard.

  • Bug Fix: Fixed an issue where changing the preview rendering level to Android and creating or opening a new Level would cause a mismatch between the tool button status and the feature Level.

  • Bug Fix: Fixed an issue where clicking the Clear option for a Streaming Volume was not working correctly.

  • Bug Fix: Fixed an issue where CreateNewStreamingLevel would try to load a streaming level of abstract type, causing an error.

  • Bug Fix: Fixed source control errors during rename of a file open for an add operation.

  • Bug Fix: Fixed the unsafe cast of IAssetTypeActions to FAssetTypeActions_Base

  • Bug Fix: Fixed an issue where opening the Landscape Spline Tool would cause a run-time error if the engine was compiled from source.

  • Bug Fix: Fixed a memory leak in SDetailsView when it was refreshed while not visible.

  • Bug Fix: Fixed an issue where a redirector was being saved as a .uasset instead of a .umap if the file did not exist.

  • Bug Fix: Fixed an issue where users were able to create a new streaming layer with a streaming distance of 0 when distance streaming was enabled.

  • Bug Fix: Fixed a bug where resizing the Content Browser was not updating the hit detection correctly.

  • Bug Fix: Closing a menu now releases the memory taken by the menu widget.

  • Bug Fix: A 1.0 vertices/triangles reduction will now correctly reduce the mesh if the source model has more vertices/triangles than the MaxNumOfVertsPercentage/MaxNumOfTrianglesPercentage value.

  • Bug Fix: Fixed an issue where the ChildActorComponent was not properly previewing in the editor.

  • Bug Fix: Fixed an issue where a column customization passed to the PropertyTable widget was ignored.

  • Bug Fix: Fixed an issue where re-importing a Static Mesh with custom LODs would result in the LODs to have incorrect materials assigned to their sections.

  • Bug Fix: Fixed a crash when moving the mouse during LOD generation. Some UI delegates were not unbound properly.

  • Bug Fix: Fixed Editor Analytics sessions not correctly reporting bIsLowDriveSpace field.

  • Bug Fix: Fixed an issue where importing a Skeletal Mesh with custom LODs and no skinning was resulting in incorrect remapping of the bones.

  • Bug Fix: Fixed an issue to ensure that the Skeletal Mesh source data supports 16 bits of materials to be on par with the render data.

  • Bug Fix: Fixed an issue where screen messages were displaying when GAreScreenMessagesEnabled was set to False.

  • Bug Fix: Fixed an issue where the Mesh Bone Reduction would use a fixed InfluenceIndex, instead of the MAX_TOTAL_INFLUENCES.

  • Bug Fix: Fixed the Editor Analytics so it reports a project name by concatenating UGeneralProjectSettings::ProjectName and FApp::GetProjectName().

  • Bug Fix: Fixed an issue where re-importing a Skeletal Mesh would result in the values of Use High Precision Tangent Basis and Use Full Precision UVs to be reset in the Skeletal Mesh asset.

  • Bug Fix: Fixed an issue where the Editor would check for a pre-existing realtime override on viewports when doing a blanket removal.

  • Bug Fix: Fixed an issue where the Project Creation dialog would display a blank selection for the Starter Content option if the Feature Packs folder was unavailable.

  • Bug Fix: Changed the sharpening method for mask textures so that each color channel is processed separately.

  • Bug Fix: Fixed an issue where Instanced Static Meshes (ISM) were not initializing properly after a Blueprint re-instance.

  • Bug Fix: Fixed an issue where an old reduced Skeletal Mesh asset with a disabled section would not keep the disabled section state after a re-import.

  • Bug Fix: The Actor Picker Mode now gets disabled when the Editor loses focus. This prevents the Unreal Engine tooltip from rendering over the top of other applications.

  • Bug Fix: Fixed an issue in the Static Mesh Importer where it would use the FBX bounding box to test if the mesh was too small to be imported. Now, it correctly multiplies the mesh bounding box by the node global scale transform to test the real bounding box size.

  • Bug Fix: Fixed an issue to prevent a FBX node name clash when not keeping the namespace.

  • Bug Fix: Fixed an issue where using USkeletalMesh::ReleaseResources would use the FlushRenderingCommand in PIE tick.

  • Bug Fix: Fixed an issue where screen warnings were displayed even when bSuppressMapWarnings was set to False.

  • Bug Fix: Fixed an issue where an old package was not properly deleted when renaming a package.

  • Bug Fix: Fixed crash on map load when world legacy rename handling was renaming over other existing maps.

  • Bug Fix: Fixed level streaming volume properties so they can be cleared.

  • Bug Fix: Fixed an issue where the Skeletal Mesh was being rebuilt every time the LOD settings were changed in the Persona Editor.

  • Bug Fix: Fixed source control checkout errors when a package is saved. Errors will no longer appear if the file is already open, or being renamed.

  • Bug Fix: Fixed an issue where the Editor transaction buffer was being cleared when hiding levels.

  • Bug Fix: Fixed an issue with the transaction system in the Editor where intermediate transactions would record incorrect information due to using a different serialization algorithm.

  • Bug Fix: Fixed an issue where the message dialog would appear after a FBX import if no import error was found.

  • Bug Fix: Fixed an issue where the last item of an array would not export if it contained default values and the index was greater than the default array size.

  • Bug Fix: Fixed an issue where Actors with Editor-only Static Mesh components or components with no Static Meshes assigned were being included in the Hierarchical Level of Detail (HLOD) generation.

  • Bug Fix: Fixed issue causing some actors with multiple static mesh components to be excluded from the Hierarchical Level of Detail (HLOD) generation.

  • Bug Fix: Fixed an issue where selecting a spline point in one viewport and manipulating that point in another would result in the entire spline component being transformed, instead of the selected spline point.

  • Bug Fix: Added a fix to ensure that the Editor style module is loaded before calling its static functions from MeshPaintMode.

  • Bug Fix: Fixed an issue that caused invalid material baking in Hierarchical Level of Detail (HLOD) meshes when using the option 'Reuse Mesh Lightmap UVs" on mirrored (negative scale) meshes.

  • Bug Fix: Fixed incorrect DPI scaling of the selection box inside the LiDAR Point Cloud asset editor.

  • Bug Fix: Fixed an issue that occurred when attempting to convert a procedural mesh component without materials to a static mesh. If no material is assigned, the new static mesh will now use the default material.

  • Bug Fix: Fixed an issue where newly created Hierarchical Level of Detail (HLOD) packages that were only present in memory, did not appear in the Save All dialog.

  • Bug Fix: Fixed an issue in the Hierarchical Level of Detail (HLOD) volumes caused by overlapping meshes with offsets from their origins.

  • Bug Fix: Removed unneeded UV sets generated for Hierarchical Level of Detail (HLOD) meshes.

  • Bug Fix: Fixed an issue where a code-less project would fail to compile after adding a feature pack.

  • Bug Fix: Fixed multiple UV remapping issues in merged meshes created by the Hierarchical Level of Detail (HLOD) system.

  • Bug Fix: Added the Hierarchical Level of Detail (HLOD) results to the Message Log user interface.

  • Bug Fix: When adding the first C++ class to a source-less project, the internal UBT target name is now correctly set to the default Editor target name for the project.

  • New: Removed cast to SceneComponent when drawing component visualizer HUDs in the Blueprint editor. Actor component visualizers can also draw to the HUD.

  • New: Added BLUTILITY_API to UEditorUtilityWidgetBlueprint.

  • New: Loaded and on-disk gather functions for external actors are now split.

  • New: When requesting a PIE session, an open PIE transaction is now cancelled and the user notified, instead of preventing the PIE session entirely.

  • New: Added list of real-time overrides for level viewports. Previous APIs were deprecated or renamed to better indicate that a list of overrides is keyed to a system name. A system name is now required to ensure the caller removes the override they actually want to remove. This solved the problem where various systems added or removed real-time overrides in interlocked ways, especially when starting or stopping a PIE session.

  • New: Broadcast OnActorMoved for all Move and Snap Editor actions.

  • New: Added Package class filters similar to transaction class filters in multiplayer mode. This allows the Editor to filter package save from an asset type and/or a folder path. When a package is filtered out, the package event is not sent out to the server and the file is locally persisted instantly.

  • New: On Windows, handled WM_ENDSESSION message to detect the user logging off the system, calling the core delegate OnUserLoginChangedEvent to notify the event.

  • New: Pasting properties in a Details panel now retains the existing item expansion state, when possible.

  • New: Added the Rendering Hardware Interface (RHI) to the Editor analytics summary session.

  • New: Made an improvement to avoid memcopies in MergeFlattenedMaterials.

  • New: Level Play Settings now include Logical Resolution and Content Scale for device profiles.

  • New: User-defined filters are now allowed in the Open Blueprint Class dropdown menu using View Options.

  • New: When duplicating levels for PIE, Actors are duplicated instead of loaded from disk.

  • New: Class Viewer filters match with cpp-prefixed Search text.

  • New: Added Editor Utility version of Tool Menus for Blueprints in the Editor.

  • New: When all items are filtered from the Details panel, a message displays indicating that there are active filters.

  • New: Improved Scale to Fit Zoom mode in Texture Editor.

  • New: Added the display of native component names in the Simple Construction Script tooltip.

  • New: Added Mesh CSG operations (union, intersect, subtract, and a self-union to resolve self-intersections) to the modeling tools.

  • New: Code templates can now be easily added to Plugins using the UClassTemplateEditorSubsystem. Class template .h/.cpp files can be added to the plugin's Content/Templates subdirectory. By implementing a child class of UPluginClassTemplate in a plugin's Editor module, developers can override the default code UClass generation of their given class provided by the Class Generation Wizard.

  • New: Added the ability to bundle commands in the Keyboard Shortcuts menu.

  • New: Added a context menu when there is no valid selection that allows you to select all Actors or place an Actor.

  • New: The DisplaceMeshTool was updated. Multiple layers of Perlin noise can be combined. For each layer, the user can specify the frequency and amplitude. A new option was added to apply the offset only to vertices with normals pointing in a given direction.

  • New: Category expansion state in the Details panel is now restored after clearing the Search bar.

  • New: FMouseDeltaTracker can be exported from a DLL.

  • New: Always Center Window to Screen checkbox is now disabled by default.

  • New: The last known size of the PIE window is saved.

  • New: Added procedural animation support to the Data Charts plugin. This allows growing and collapsing data charts based on user events.

  • New: Added the bAvoidRelabelOnPasteSelected option to avoid relabeling Actors when pasting them.

  • New: Made all linked instancing context pointers pass as constant.

  • New: PIE sessions that launch a new standalone window no longer double render debug safe zones and all PIE options are more consistent when handling r.DebugSafeZone.XXXX cvars.

  • New: The following fields were added to Editor analytics:

    • bIsUserLoggingOut detects when the Editor closes because the user logged out.

    • bIsCrcExeMissing detects if the user compiled CRC.

    • SessionTickCount detects if the Editor ticked.

    • UserInteractionCount detects if the user interacted with the Editor.

    • MonitorTimestamp gets the approximate time of crash of CrashReportClientEditor.

  • New: Loading an Editor layout keeps the displayed asset sub-editors open. If PIE or SIE is open, the Editor displays a warning to prevent loss of work, and if the user accepts, it will close PIE and load the desired layout.

  • New: Added a Blueprint Editor option for short tooltips.

  • New: In Editor Preferences, added Minimum Orthographic Zoom option to the Level Editor - Viewport settings.

  • New: Added Title Property meta support to arrays of Instanced UObjects.

  • New: Common pin action menu items in the Graph Editor were moved to the Base Graph Editor.

  • New: In the Graph Editor, the Tab key opens the context menu to create a node at the current mouse position.

  • New: Details panel dropdown menus for Enums and other items now display a Search field if there are more than 20 items. This threshold can be changed for a custom property dropdown menu using the new FPropertyComboBoxArgs structure.

  • New: Files created by the Editor for a new C++ class can be put into subfolders.

  • New: Mouse panning was added to the Texture Editor.

  • New: Added spline point fast selection buttons to the Spline component Details panel.

  • New: Added an optional background Brush setting for all Graph Editors.

  • New: Replace references now considered subclasses of DataTable to be compatible, including CompositeDataTable.

  • New: Added the option to make BoundsCopyComponent usable outside of RuntimeVirtualTextureVolume and made it Editor-only.

  • New: GeometryProcessing library updates:

    • Added copy Boolean improvements from Main.

    • Added a catch out-of-range search tolerance in MergeCoincidentMeshEdges.

    • Added TMeshSimplification::SimplifyToMinimalPlanar, which simplifies flat areas of the mesh only.

    • Enabled the GeometryProcessing plugin for Runtime use.

  • New: Made the spline point details show up first in the Details panel of a Spline component.

  • New: We now allow a SaveConfig to not update the class default object.

  • New: Added a maximum number of debug strings per actor for AddDebugText in the HUD to avoid long frames when possessing the player after having ejected from it in PIE.

  • New: The Gameplay tags are now saved to a separate configuration file to improve performance of the main Editor configuration file.

  • New: Made the UDP Messaging Module add and remove static endpoint functions thread-safe.

  • New: Made the FBX Scene Importer accessible in Python.

  • New: You can now call SetLODGroup directly in Blueprint and Python to set a static mesh LOD Group.

  • New: You can now set all material properties directly in Blueprint when importing a material.

  • New: The Place Actors panel now allows filtering by the native class name as well. For example, PointLight is now a valid search term for the Point Light item.

  • New: Added the export flag to UK2Node_GetSubsystem.

  • New: Added the ability to import and re-import custom LODs directly in Blueprint and Python by adding functionality to EditorStaticMeshLibrary and EditorSkeletalMeshLibrary.

  • New: Added an option to downscale textures without Mips to allow for texture compression.

    • Accepts values between 1.0 and 8.0.

    • Can be overridden per-platform, for a specific texture or texture group.

    • Downscaling will keep texture size divisible by 4 so they can still be compressed

  • New: Added the new console command stat framecounter to see the overlay of the GFrameCounter that increments for every frame.

  • New: Added improvements to the Editor analytics.

    • Added WasDebuggerIgnored Editor summary event analytic fields.

    • Updated the save frequency on Windows from 1 minute to 30 seconds.

  • New: SpeedTree assets can now be imported using automated imports.

  • New: Updated the tooltip and display name for the Editor preference LogTimestampMode to make it clear that it affects the Output Log Window, and not the log file itself.

  • New: Added a delegate that allows developers to add widgets to individual property rows in the details panel via C++.

  • New: Added improvements to the Editor analytics

    • Added the filtered Editor command line to the Editor summary analytic event.

    • Added the engine tick count to the Editor summary analytic event.

    • Added the engine last tick timestamp to the Editor summary analytic event.

    • Added the Editor death timestamp as captured by CRC to the Editor summary analytic event.

  • New: Made the Static Mesh reduction options available directly in Blueprint and Python.

  • New: Users are now able to set the AssetImportData source file directly in Blueprints and Python, in addition to C++.

  • New: Added a Max Vertices/Triangle option to the skeletal mesh reduction options in addition to the current Percent Vertices/Triangle. This allows the user to enter a percentage while still keeping a budget limit.

  • New: Reduced the memory used when building textures.

    • Reduced the maximum memory usage when importing 16k PNG textures from 12 638 MB to 8 885 MB (Delta from before the import).

    • Allowed the function ITextureCompressorModule::GenerateMipChain to reuse the BaseMip when possible instead of generating another intermediate texture of the same size as the BaseMip.

    • When compressing the texture, the compressed texture is moved to the output instead of being copied.

    • Added some moves instead of copies in the CompressImage function of FTextureFormatUnCompressed.

    • Avoided an unnecessary copy in the CompressImage function of FTextureFormatDXT.

  • New: Added Editor settings to avoid Actor relabel on paste.

  • New: Added GRHIName to the Editor Analytics summary report.

  • New: The DumpPrimitives command creates a CSV file of visible primitives in the Logs folder.

  • New: Added a Voxel Solidify tool to the Mesh Modeling Toolset that turns mesh inputs into solid meshes by running marching cubes on the fast winding number of the mesh. In addition, added an option to pre-process other voxel tool inputs with a solidify pass to make them work more easily on bad inputs.

  • New: Added option to focus the viewport on the selection when inside the LiDAR Point Cloud Asset Editor.

  • New: The meta flag GetOptions now handles TArray as well. In addition, added support for multiple selected items.

  • New: Minor update to Editor target selection on launch to account for the possibility of default targets living in the engine.

  • New: Improved the built-in menu searching so it now filters options with more consistency. In addition, the search box now allows for actions such as copying and pasting as well.

  • New: Added a TArray64 overload to FImageUtils::ImageResize for working with pixels already in linear space.

  • New: Made the multibox search filter reset on gaining focus.

  • New: Added a new hyperlink to the Project root folder that appears when the Project has completed the zipping process. This notification now appears for a longer period of time to give the user more time to click on the hyperlink.

  • New: Replaced the Wiki option in the Editor Help menu with Online Learning.

  • New: Added new spline component options for selected spline points: Snap To Actor, Align to Actor and Align Perpendicular to Actor.

  • New: Hierarchical Level of Detail (HLOD) actors can now be saved to the HLOD packages.

    • Added a Save LOD Actors To HLOD Packages project option, which will cause all properties necessary to rebuild LODActors from scratch to be saved in the _HLOD packages.

    • When loading a level in the editor, the LODActors from the level are destroyed and new (transient) actors are spawned from the content of those packages. This extra processing isn't performed in cooked builds as LOD actors are recreated one last time during cooking.

    • The HLOD rebuild commandlet will avoid submitting the level itself and will now only update its associated _HLOD packages.

  • New: Added an option to create transient actors in EditorLevelLibrary.

  • New: Updated disaster recovery icons.

  • New: Projects now use the default editor target configuration setting, if specified, to determine the name of the editor target file for startup re-compilation purposes.

  • New: Added hotkeys to reset spline point tangents in the spline component. With a spline point selected, pressing T will reset the tangent to the default unclamped value, while pressing Shift-T will reset the tangent to the default clamped value.

  • New: Added Snap To Last Selected Axis options to the spline component. In addition, modified the option Snap All to Selected Axis to set the spline point to Auto so tangents are automatically adjusted.

  • New: Added post-process calibration materials for display calibration. Materials are set in Project Settings with show flags for visualizing materials full-screen when calibrating.

  • New: Added spline component functions SetScaleAtSplinePoint and SetRotationAtSplinePoint.

  • New: Added the concept of EditorUtilityTasks. These tasks are long running operations that can be queued to execute as soon as the previous task finishes.

  • You can create and customize your own tasks by extending the base class and can run a task by simply calling RunTask .

  • New: Introducing a new optional plugin called Asset Search. Its job is to index different asset types and store an indexed set of searchable data in a local SQLite database.

  • This plugin complements the Content Browser search by adding the ability to search for tags and phrases that appear on any asset in the project. In addition, it can be extended to support new asset types in your project or plugin.

  • New: Splines: Changed Alt-drag behavior when dragging off spline endpoints. The attached segment will be split if the drag direction is within 60 degrees of the segment rather than always creating a new point.

  • New: Splines: Added Editor Preferences for spline hit proxies to adjust point size, tangent handle size, line thickness and tangent scale.

  • New: Added a configuration value to determine if the asset registry scanner should gather data on cooked packages that it didn't find an asset export for. Defaults to TRUE to match existing behavior.

  • New: Added the failed assert error message that terminated the Editor to the Editor session summary analytic event.

  • New: The ResavePackages commandlet can now customize its garbage collection frequency via the command line GCFREQ=??? where ??? is how many packages should be resaved before a garbage collection is run.

  • New: Point selection within the LiDAR Asset Editor can now be inverted.

  • New: During advanced copy, don't reparent and recompile a Blueprint unless the parent changes, and don't reparent any Blueprints in the restricted list.

  • New: Improved performance of tangent generation when building Static Meshes after import, or when modified in the Static Mesh Editor.

  • New: Added Tangent Color property to spline components.

  • Improvement: Increased write performance for the .ini configuration files.

  • Improvement: Loading an Editor layout now leaves the open Asset sub-editor open. If either PIE or SIE is open, the editor will warn the user and once accepted, it will automatically close PIE or SIE and load the desired layout. This alert notifies the user of potential loss of work.

  • Improvement: A Project user can set their own default layouts for a selected Project. Each Project can have its own DefaultEditorLayout.ini file, which opens the first time a Project is opened and overrides the default engine layout found in Engine/Config/BaseEditorLayout.ini.

  • Deprecated: Deprecated the duplicated IBookmarkTypeTools functions that were inside FEditorModeManager.

  • Deprecated: The SnapGrid macro definition. Going forward, use the UEditorStyleSettings::GridSnapSize config.

  • New: The property Collision Accuracy has been renamed to Max Collision Error to better reflect its intent. Going forward, references to ULidarPointCloud::CollisionAccuracy should be updated to use ULidarPointCloud::MaxCollisionError instead.

Content Browser

  • Bug Fix: Fixed it so object properties marked AssetRegistrySearchable " such as DataAsset native class " properly show in the content browser.

  • Bug Fix: Initialized asset view search options in content browser so that they don't need to be toggled in the active session to take effect.

  • Bug Fix: Changed SizeMap to use the standard FText::AsMemory function.

  • Bug Fix: Fixed a bug when reloading unsaved packages.

  • Bug Fix: Added a fix to prevent Delete Assets Dialog from compiling every Blueprint when you open the Replace References drop down.

  • Bug Fix: Fixed the Skeletal Mesh assets vanishing thumbnails, caused by incorrect bounds calculation of empty Chaos Cloth simulations.

  • Bug Fix: Fixed an issue where the Content Browser was not showing the newly created asset after merging LiDAR Point Clouds.

  • New: Added support for extensible data sources for the Content Browser:

    • UContentBrowserDataSource is the common implementation of a "do nothing" data source for the Content Browser. You can derive from this type to create new data sources for the Content Browser, overriding any required functionality and validation logic.

    • See UContentBrowserAssetDataSource and UContentBrowserClassDataSource as an example.

  • New: The function CopyFilePathsToClipboard in ContentBrowserUtils now returns the absolute path of an asset, instead of the relative path.

  • Improvement: Improved the experience of renaming a read-only asset when SCC is disabled.

Foliage

  • Bug Fix: Fixed a rare desync between GPU/CPU when Foliage was erased completely and then painted again.

  • Bug Fix: Fixed a crash in HISM.

  • Bug Fix: Reminded UE to make sure to BuildTree non-async when in a Serialize call with Ar.IsSaving() cases Cleanup HISM Duplication/PostEditImport/Serialization.

  • Bug Fix: Grass Maps updated during Tick are no longer dirtying packages. Instead, they mark themselves as dirty/need rebuilt. The new map warning will display "GRASS MAPS NEED TO BE REBUILT" whenever grass maps are outdated. We鈥檝e added a new 鈥淏uild Grass Maps" command to the Build menu options.

  • Bug Fix: Fixed an issue where foliage instances snapping was dirtying/invalidating foliage component's lighting cache even when result didn't change.

  • Bug Fix: Fixed an issue where foliage Erase Mode radio button remains highlighted even after releasing Ctrl and Shift keys.

  • Bug Fix: Fixed a bug with foliage that was writing to both a Runtime Virtual Texture and the main pass. Previously hierarchical and distance culling were getting disabled in the main pass.

  • Bug Fix: Fixed landscape grass not updating in edit layers mode when landscape material doesn't have any paint layers.

  • Bug Fix: Fixed Grass Align to Surface normal computation when using Halton sequence placement.

  • Bug Fix: Fixed an issue when removing null entries in AInstancedFoliageActor::CleanupDeletedFoliageType that never worked properly.

  • Bug Fix: Made sure we EndTransactions on ExitMode. Also wrapped most Begin/EndTransactions inside scopes.

  • Bug Fix: UE now deletes null entries from the types before rebuilding foliage actors.

  • Bug Fix: Fixed an issue where UpateGrass discarded components were processing in the next loop.

  • New: Added CustomDepthStencilWriteMask support to foliage.

  • New: Fixed foliage non-deterministic cooking by removing unused UProceduralFoliageSpawner::bNeedsSimulation that can change depending on the cooking order.

  • New: Added support discarding Foliage types independently from density scaling.

  • Improvement: Improved performance when adding multiple instances to InstancedStaticMeshComponent.

Landscape

  • Bug Fix: Fixed Landscape Grass Scale to not be applied when min and max are the same value.

  • Bug Fix: Fixed crash when applying spline component to landscape without a proper edit layer (when Edit Layers is enabled).

  • Bug Fix: Fixed a crash when copying offset regions.

  • Bug Fix: Reimported tiled Landscape Layer Weightmaps now have the same behavior as Import (no more forcing a normalization of layer weightmaps).

  • Bug Fix: Addressed a crash when entering Landscape Mode with Mirror Tool enabled and mirror point set to 0,0 but without any landscape.

  • Bug Fix: Resolved a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed a crash when using the smooth tool in landscape mode.

  • Bug Fix: Addressed a crash when importing sublevels with landscape layers.

  • Bug Fix: Resolved a crash when creating a new Landscape with Edit Layers enabled.

  • Bug Fix: Fixed Landscape rotation not being considered in ULandscapeComponent::GetLayerWeightAtLocation.

  • Bug Fix: Fixed a bug with ForeignWorld not being updated properly on SplineControlPoints.

  • Bug Fix: Fixed Undo/Redo of Clear/FillLayer which was filling MaterialInstanceConstantMap with mismatching Key/MI.

  • Bug Fix: Fixed ULandscapeSplineControlPoint not updating its body instance when changing mesh collision preset.

  • Bug Fix: Fixed a crash using landscape add component tool.

  • Bug Fix: Addressed a crash from unbound shader parameters when using RVT and tessellation together in a landscape material.

  • Bug Fix: Fixed a bad index buffer generation on mobile landscape. Vertex Key generation was not unique for a 255*255 grid. Removed it along with its use as a TMap key and replaced it with a simpler array lookup.

  • Bug Fix: Fixed crash using GetLandscapeMaterial node in BP.

  • Bug Fix: Fixed not thread-safe Landscape CVar code.

  • Bug Fix: Fixed a bug preventing the edit layer brush from applying when one of its resources is not ready. Editing layer brush resources may now include all types of objects but only handles UTexture2D (texture resource needs to be streamed in) and UMaterialInterface (material shader needs to be compiled). UE will now display user notification after the brush fails to apply for more than 3 seconds.

  • Bug Fix: Fixed a crash with grass scattering when virtual texturing is not enabled. We use the fixed grid vertex factory for both the grass and virtual texturing now.

  • Bug Fix: Fixed crash when importing Landscape layers in the New Landscape Tool.

  • Bug Fix: Fixed an issue with grass components trying to be detached while not attached after undoing a location change.

  • Bug Fix: Fixed a crash when Resizing a Landscape with Edit Layers.

  • Bug Fix: Fixed an occasional crash when creating a new landscape with edit layers.

  • Bug Fix: Fixed a crash when opening an old map with Chaos.

  • Bug Fix: Fixed landscape grass placement shader to correctly calculate SvPosition. This fixes landscape grass placement materials which use AbsoluteWorldPosition.

  • Bug Fix: Fixed LandscapeExportHeightmapToRenderTarget to take exported components" overall extent into consideration. Added option to export or not all landscape proxies when LandscapeExportHeightmapToRenderTarget is used with Landscape Actor.

  • Bug Fix: Fixed an infinite loop when undoing a landscape change.

  • Bug Fix: Fixed crash when creating a landscape from scratch with edit layers enabled.

  • Bug Fix: Fixed an issue with Runtime Virtual Texture updates to landscape paintings when working with landscape streaming proxies. Before the fix if no Runtime Virtual Texture targets were set in the main landscape actor (but were only set in the landscape streaming proxies) then the virtual texture wouldn't immediately update on landscape painting.

  • Bug Fix: Fixed an issue preventing stored reimport weightmap paths per tile when importing a tiled landscape.

  • Bug Fix: Fixed an issue causing problems when going in and out of landscape (and in manage tab).

  • Bug Fix: Fixed a crash in Landscape Mode when a paint layer gets its Layer Info assigned but no Edit Layer is selected. Also made sure to always have a valid Edit Layer selection.

  • Bug Fix: Fixed an issue with landscape shadows still rendering when the landscape show flag is disabled. To help with this we exposed shadow settings on the landscape proxy.

  • Bug Fix: Replaced temporary toolbar Landscape Resize icon with new one.

  • Bug Fix: Fixed a crash with landscape grass mesh when there are more mips than the landscape currently has.

  • Bug Fix: Fixed crash after moving Landscape Actor to another Level.

  • Bug Fix: Fixed crash when Resizing a Landscape with Edit Layers.

  • Bug Fix: Fixed warnings about invalid material for landscape thumbnail renders.

  • Bug Fix: Fixed crash in Landscape Mode when a paint layer gets its Layer Info assigned but no Edit Layer is selected. Also made sure to always have a valid Edit Layer selection.

  • Bug Fix: Fixed an issue with the Resize Landscape Tool not showing up in the manage landscape toolbar. We鈥檝e also replaced the temporary toolbar Landscape Resize icon with a new one.

  • Bug Fix: Fixed crash in Landscape Edit Layer mode that occured when Landscape Material changes are applied without Landscape properly updating/creating the necessary rendering resources.

  • Bug Fix: Fixed an issue causing the landscape max draw distance from updating correctly in landscape components when set on the owning landscape proxy.

  • Bug Fix: Fixed an issue preventing the landscape cached heightfield from being cleared when the landscape is changed.

  • Bug Fix: Fixed Landscape LOD selection for stereo rendering.

  • Bug Fix: Fixed SimpleCollisions from being incorrect on Landscape when the specified Simple Collision mip level is greater than Collision mip level.

  • Bug Fix: Fixed non-determinism in the generation of Runtime Virtual Texture low mips. This is done by forcing textures to stream before each tile render.

  • Bug Fix: Fixed an issue preventing all split screen views from using view 0 for landscape LOD calculation. This fixes bugs where landscape components would be rendered with the wrong scale in the second view.

  • Bug Fix: Fixed Landscape Edit Layers warning text to be read-only.

  • Bug Fix: Fixed a crash when attempting to re-import weightmaps with Landscape Edit Layers disabled.

  • Bug Fix: Fixed a memory leak of FViewInfo objects in Runtime Virtual Texture rendering.

  • Bug Fix: UE now accounts for StaticMeshLODDistanceScale when calculating landscape shadow LOD. This fixes bugs where offscreen landscape components could render shadows at a scale too large or too small.

  • Bug Fix: Fixed bug where user was able to select actors while in the Landscape Edit Mode.

  • Bug Fix: Fixed an issue where resetting sub-levels in the World Composition window where new position and old position overlap would cause visual defects.

  • Bug Fix: Fixed crash when loading a map with a BP landscape brush that is not compiling.

  • Bug Fix: Fixed grass.MaxCreatePerFrame.

  • Bug Fix: Fixed landscape visibility mask material warning when using the landscape base material for holes.

  • Bug Fix: Fixed a crash when using the smooth tool in landscape mode.

  • Bug Fix: Fixed Landscape rotation not being taken into account in ULandscapeComponent::GetLayerWeightAtLocation (Procedural Foliage).

  • Bug Fix: Fixed a crash in ULandscapeMaterialInstanceConstant::UpdateCachedTextureStreaming.

  • Bug Fix: Fixed a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed Landscape Grass Scale not being applied when min and max are the same value.

  • Bug Fix: Fixed a regression with Landscape Collision when the whole LandscapeComponent is painted as a hole.

  • Bug Fix: Fixed Undo/Redo of Clear/FillLayer which was filling MaterialInstanceConstantMap with mismatching Key/MI.

  • Bug Fix: Fixed ForeignWorld not being updated properly on SplineControlPoints.

  • Bug Fix: Fixed a crash occurring when copying offset regions.

  • Bug Fix: Fixed an issue where UpdateCachedTextureStreaming compound TexelFactor every load/save.

  • Bug Fix: UE will now allow the landscape editor to continue gracefully if the CDO alpha texture doesn't contain any source data. This can happen when the editor is loading cooked data.

  • Bug Fix: Fixed a bug allowing edition of landscape proxy properties that are shared with the parent landscape properties.

  • Bug Fix: Within a Landscape, UE will now use Equal() (with error tolerance) when testing whether a spline component transform should be updated.

  • Bug Fix: Fixed a crash when loading a cooked landscape in the editor.

  • New: Added experimental version 0.1 of the Virtual Heightfield Mesh plugin. The plugin is a mesh renderer for heightfields where the source data is a runtime virtual texture containing height values. It is intended as an alternative final rendering technique for very large landscapes

  • New: Added support for adaptive virtual texture added. This allows the support of larger runtime virtual texture resolutions. The new limit is 1GiTexel x 1GiTexel.

  • New: Added the UVirtualTextureBuilder asset type for building virtual textures. The URuntimeVirtualTexture low mips have been moved out of the URuntimeVirtualTexture asset and into this. The streaming mips build is now set up from the Runtime Virtual Texture Volume Actor. This allows multiple streaming mips to be built against a single URuntimeVirtualTexture for cases where the URuntimeVirtualTexture is reused in different levels.

  • New: Added a continuous update flag to Runtime Virtual Texture assets. This allows Runtime Virtual Textures to be marked to have a random small number of pages updated each frame. This can help in cases where Runtime Virtual Textures contain stale data due to late texture streaming etc.

  • New: Added the concept of virtual texture scalability groups to allow varying scalability settings for different Virtual Texture assets and components.

  • New: Changed the naming for the Runtime Virtual Texture setting: "Virtual Texture Pass Type" to 鈥淒raw in Main Pass" The enumerated option names have also changed to try to make the usage more clear.

  • New: Rewrote the Runtime Virtual Texture Volume SetBounds logic so that all relevant primitives are considered in the bounds calculation, not just the selected alignment actor.

  • New: UE now provides additional information in message dialogs when import using the landscape copy gizmo fails.

  • New: Added custom stencil write mask support for landscape. We鈥檝e also added full custom depth stencil support for landscape spline.

  • New: Primitives that write to a Runtime Virtual Texture but are hidden in the main pass are now shown in the Editor when selected. To support this we鈥檝e added a Show Flag that makes all such primitives visible in Editor mode even when non-selected. They remain hidden in game mode.

  • New: UE will now show a progress bar when reimporting tiled Landscape.

  • New: The transform for a Runtime Virtual Texture volume is now based around a corner of the bounding volume instead of around the center. This makes it more consistent with other actor types and simplifies any transform maths. Legacy data is fixed up on load.

  • New: World Composition layer creation menu now creates the layer on Enter keypress.

  • New: Exposed Blueprint function on RuntiveVirtualTextureComponent to invalidate VT pages within given world bounds.

  • New: Sped up landscape tessellation PIE load.

  • New: Landscape edit layers are now supported when importing/reimporting a World Composition Landscape.

  • New: Added Texture LOD Group setting to Runtime Virtual Texture assets. We;ve also added a Virtual Texture Tile Size Bias and Tile Count Bias to the Texture LOD settings. This allows us to apply Tile settings per platform and use smaller tile sizes on platforms with less processing power.

  • New: World Composition: Added Fit View to Selection command bound to F key.

  • New: Added a new material expression for landscape that outputs a physical material. This can optionally be used to generate the dominant physical material for each point on a landscape. When setup in a landscape material it overrides the standard layer based physical materials. The aim is to allow greater logical control over physical material placement on the landscape.

  • New: Made Landscape actors not placeable.

  • New: Made BP brushes use their actor factory upon spawning, if applicable. Default-named the spawned BP actor according to the landscape they鈥檙e added to.

  • New: Exposed Material Overrides to Grass Variety.

  • New: Made GetAllParameterInfo virtual, so UMaterialExpressionLandscapeLayerBlend can be subclassed.

  • New: ALandscape::LandscapeLayers is no longer 'TextExportTransient"

  • Improvement: Made Landscape actors not placeable.

  • Improvement: Fixed invalid foliage instance tooltip incorrect spelling.

  • Improvement: Made GetAllParameterInfo virtual, so UMaterialExpressionLandscapeLayerBlend can be subclassed.

  • Improvement: Released an update to not reset the landscape actor locked status when it's selected.

  • Improvement: Improved support for Runtime Virtual Texture components in PIE. This fixes issues where Runtime Virtual Texture did not respond to streamed in changes in PIE.

  • Deprecated: Removed redundant bEnable flag on runtime virtual texture assets. A better alternative is to use the visibility of the associated runtime virtual texture volume.

Material Editor

  • Bug Fix: The material editor no longer crashes when attempting to select a curve row parameter from a curve atlas when the atlas references invalid curves.

  • Bug Fix: Fixed Virtual Texture warning messages.

  • Bug Fix: Resolved a bad reference to structure variables.

  • Bug Fix: Fixed various items concerning opening material layers created by prior engine versions. Also released fixes for linking derived material layers to parent layers.

  • Bug Fix: Addressed key transient material parameter overrides on the MPI, rather than parameter index. This fixes material parameters getting scrambled while editing material.

  • Bug Fix: Updated virtual textures on any relevant material parameter value change while in the material editor.

  • Bug Fix: Fixed a crash on undo/redo when the preview material source instance is null.

  • Bug Fix: Updated UE to not perform project setting based validation on engine visualization materials during DDC warming.

  • Bug Fix: Fixed unnecessary recompilation of shaders when changing texture compression.

  • Bug Fix: Fixed a problem where material could display incorrect parameter values when parameters are added/removed in the material editor.

  • Bug Fix: Fixed material baking cache not invalidating cached material when changes are made to instance constants.

  • New: Added SmoothStep, Step, and InverseLerp material expressions.

  • New: Added function to material editing library to get a list of textures used by a material

  • New: Added editor scripting functions for iterating through expressions in a material.

  • New: Shader compile log messages now appear during shader compile instead of after all shaders compiled.

  • New: Added thresholdWithRange Material Function. This allows the artist to define a threshold value and a range value to falloff linearly towards. There is a bool to do a one sided falloff or to falloff on both sides.

  • New: You can now sort Material Parameter Collection entries alphabetically: material editor + Blueprint node.

  • New: UE will now ensure that overridden material parameter values are preserved, when override is disabled.

  • New: Custom HLSL nodes now support outputs of type FMaterialAttributes, and multiple outputs.

  • New: Engine functions: Added simple functions to convert between km and cm for sky work.

  • New: Engine Functions: Added Material functions to convert between degrees/radians.

  • Improvement: Made MID asset editor read-only.

Media Framework

  • Bug Fix: Released a fix to compute pipeline use by PS5MediaPlayer to improve performance. Also improved stability when using more then one player at once.

  • New: Added APIs to check on current aspect ratio and image orientation of UMediaTexture.

  • New: Added media player timing mode that simply displays the latest video frame without any timing.

  • New: Added AVEncoder module's documentation (in code).

Scripting

  • Bug Fix: Fixed Python int/long -> float/double conversion forcing unsigned.

  • Bug Fix: Fixed potential null pointer access during Python shutdown.

  • Bug Fix: Instructed UE to Invoke sys.excepthook when generating Python errors in UE4.

  • Bug Fix: Fixed documentation link for editor python scripting plugin.

  • Bug Fix: Fixed the automated FBX re-import to show the dialog under certain situations.

  • Bug Fix: Fixed Python defined UFunctions with a return type failing to pass data for some arguments.

  • New: Added a call_method method to unreal.Object to let you call functions via Unreal reflection.

    • This can be useful to let you call functions that haven't had Python glue generated for them, such as functions defined with a Blueprint class.

  • New: Added unreal.new_object as a way to create an object instance from a UClass* in Python without having access to its glue type.

  • New: Exposed source control sync functionality for files and directories.

  • New: Added support for showing Python files in the Content Browser.

    • This is disabled by default, and can be enabled by setting "Enable Content Browser Integration" to true in your Editor Python plugin preferences.

    • When enabled, this will show Python files in the Content Browser, and add an option to let you run them (either via the context menu, or by pressing "space" on an item).

  • New: Added debugpy_unreal.py utility to help debug the embedded Python interpreter using VS Code.

  • Improvement: Switched to Python 3.7.7 by default. If you need to continue to use Python 2.7.14, then you鈥檒l have to use a source build of UE4 and either:

    • Edit PythonScriptPlugin.Build.cs and PythonScriptPluginPreload.Build.cs to use "Python" rather than 鈥淧ython3" in their dependency lists.

    • Set your UE_PYTHON_DIR environment variable to point to a custom Python installation.

  • Improvement: Exposed UEditorLevelUtils::AddLevelToWorld to scripting.

  • Improvement: Exposed ReloadPackages to editor scripting.

  • Improvement: Changed Python objects to being transactional by default.

Sequencer

  • Bug Fix: Movie Pipeline: Fixed a bug causing cinematic shot section restore to not work properly when multiple segments map to the same shot section.

  • Bug Fix: Fixed a bug causing auto-easing computation of blending camera cuts when sections are completely underlapped.

  • Bug Fix: UE no longer notifies the game of camera cuts when using camera cut blending and there's no actual cut.

  • Bug Fix: Updated Sequencer to only autoscrub if in scrubbing state to fix double evaluations when autoscroll is enabled during playing.

  • Bug Fix: Performed an update to use camera component directly (if possible) to compute from/to transform when previewing camera cut blends.

  • Bug Fix: Fixed a bug to stop performing camera cut blending when the blend is finished. This fixes some interpolation problems that create jitter during cinematics with fast-moving cameras.

  • Bug Fix: Fixed renaming of MoviePipeline Master Config not correctly updating name.

  • Bug Fix: Sequencer no longer counts the root node when counting the number of items to be displayed in the tree.

  • Bug Fix: UE will now highlight the default filter option when opening the filter dialog in CurveEditor.

  • Bug Fix: Fixed several bugs related muting/soling tracks which have been renamed or moved.

  • Bug Fix: Fixed default MoviePipeline presets not being visible in Preset Importer.

  • Bug Fix: UE will no longer set viewports to realtime if they鈥檙e already running PIE.

  • Bug Fix: Fixed exported audio cutting out if movie rendering window loses focus.

  • Bug Fix: When rendering a movie, UE will now detect if there is no more disk space.

  • Bug Fix: UE will now skip processing of render passes in MoviePipeline that are not enabled.

  • Bug Fix: Added duration/wave support for dialogue player so that a sound cue with dialogue is added with the correct duration.

  • Bug Fix: Live Link will now discard recording samples if outside of the section start frame.

  • Bug Fix: In Take Recorder, renamed NewTake to ClearPendingTake.

  • Bug Fix: Fixed FCPXML Import/Export so that it uses the in frame as the start frame offset if the original start frame offset doesn't exist in the lognote.

  • Bug Fix: Fixed FCPXML Import/Export so that it supports same named shots and retrieves the lognote correctly from the logging info node given the master clip id.

  • Bug Fix: Will now focus on endpoint when creating a new binding or setting the event endpoint.

  • Bug Fix: When importing FCPXML, if the corresponding level sequence isn't found, UE will now skip past it. It will then set the correct in/out frames, and continue importing the rest of the sequence.

  • Bug Fix: The local time is now set to loop so the evaluation is automatically set to Play To, rather than Jump To when autoscrolling. This enables a swepts evaluation when autoscrolling.

  • Bug Fix: Fixed last tick game time seconds from being set to 0 which ends up stopping sequence playback immediately.

  • Bug Fix: Fixed subframe end playback range conditions so that playback that ends on a subframe will now fire events that lie between the last whole frame and playback end. Previously, the last valid time would be based on DurationFrames, which is display rate and would get rounded to a frame number in SetFrameRate(). The fix is introduced in DurationSubFrames which contains the subframe.

  • Removed: Removed unnecessary cast to ULevelSequence in selection synchronization. This allows derived classes to participate in the synchronization of selection in the editor with the Sequencer tree.

  • Bug Fix: Fixed issues with sequencer style definitions in SlateEditorStyle.

  • Bug Fix: Fixed missing blend-out handle on camera cut track when there's only one section.

  • Bug Fix: Made filters menu more consistent. Enable/Disable All operates on all level filters and group node filters as well. Now it doesn't close menu after clicking on group filter submenus

  • Bug Fix: Sequencer now only shows easing handles for sections that actually support manual easing.

  • Bug Fix: Fixed a crash in curve editor when widgets inexplicably disappear.

  • Bug Fix: Fixed an issue with modifying sequences when opening. OnNodePathChanged does not need to mark the sequence dirty.

  • Bug Fix: Fixed camera cut track giving control to the incorrect camera in some hierarchical use-cases.

  • Bug Fix: Renderpass is now inserted before the shot frame in file format string to fix import of image sequences exported by MoviePipeline.

  • Bug Fix: Fixed bugs with starting/stopping controlled shake source shakes.

  • Bug Fix: UE no longer displays thumbnails over blending areas of the camera cut track.

  • Bug Fix: UE no longer lets silent mode computations linger around after silent mode has ended.

  • Removed: Removed auto-exposure and shutter angle overrides from Movie Render Queue. The active camera is now respected in both cases.

  • Bug Fix: Warm-up frames can now optionally be rendered in the Movie Render Queue. This allows gpu particles to warm up correctly.

  • Bug Fix: Fixed large values in the console variable setting not applying correctly when the target cvar type was an int.

  • Bug Fix: Fixed an issue where jobs would not use the latest values from a preset if the preset had been modified after the job was created.

  • Bug Fix: Fixed a dependency with MovieSceneTracks.build.cs editor.

  • Bug Fix: Fixed an issue with the invalid key handles state after calling FRichCurve::SetKeys.

  • Bug Fix: MoviePipeline: If a movie render is interrupted, UE will now log it as an error as the render did not complete.

  • Bug Fix: Fixed a crash when copying a geometry cache track.

  • Bug Fix: Fixed a crash unregistering camera shake previewing view modifiers when there's no editor.

  • Bug Fix: UE will no longer make cyclic inclusions with template sequences. This fixes a possible loop with template sequence track editor.

  • Bug Fix: Fixed a bug where template sequences aren't correctly run on object bindings.

  • Bug Fix: Camera cut track blending is now handled by a parent sequence's camera cut track, and support blend times dilated by sub-sequence play-rates.

  • Bug Fix: Fixed a crash where creating a level sequence could spawn an actor in a world that's being torn-down.

  • Bug Fix: Fixed an issue where calling Set Playback End on a sequence resulted in an incorrect bounds type.

  • Bug Fix: Fixed an issue with Fade track rendering in MoviePipeline.

  • Bug Fix: When exiting a camera cut, UE will now only go back to the previous editor location for blending cuts.

  • Bug Fix: Fixed undo/redo adding a spawnable by setting the spawn flag to transactional.

  • Bug Fix: Control Rig: Fixed a crash when re-compiling BP and removing a transform control that's also open in sequencer.

  • Bug Fix: Movie Pipeline: Mode the restore fixed time step to OnPIEEnded. This was done to fix an issue where the editor plays back faster after rendering.

  • Bug Fix: Added options to selectively save transforms and curves when doing animation sequence baking from Sequencer.

  • Bug Fix: Extended the working range if trying to type in the time outside of it.

  • Bug Fix: Refactored making a unique spawnable name so it can be used when creating a spawnable camera in various places. This ensures that cameras are created with consistent names, Cine Camera Actor (1), Cine Camera Actor (2), Cine Camera Actor (3), etc. Otherwise some names are "CineCamerActor", 鈥淐ine Camera Actor" and they aren't numbered in order.

  • Bug Fix: Fixed a crash when trimming animation if length is 0.

  • Bug Fix: Movie Pipeline: Fixed an issue where unconventional aspect ratios would render with the wrong fov.

  • Bug Fix: Fixed subfolders getting muted when their parent folder is muted.

  • Bug Fix: Released a fix for null object binding with control rig when dragging in a control rig to a level sequence that isn't loaded.

  • Bug Fix: If there's multiple transform tracks affecting a given actor, UE will now export with interrogation. Previously, interrogation would only happen for multiple sections on a single transform track.

  • Bug Fix: Fixed Blending Sections in Control Rig.

  • Bug Fix: Fixed bake so that it doesn't attach to the previous parent's parent. The previous idea was flawed because the parent attachment could be animated, so it's more straightforward to just unparent to the root.

  • Bug Fix: Released a fix for importing broken tangents, FBX.

  • Bug Fix: UE will now clear transient flags on spawnable template components. This fixes a bug where adding components to an empty actor would not save those components.

  • Bug Fix: Curve Editor: Fixed an issue with filter window not opening for standalone curves since the tab manager may not exist.

  • Bug Fix: Released a fix changing blending type so that the object is restored to its pre animated state before applying relative/additive. This fixes an object flying away when changing the blend type to relative/additive since it would have been relative/additive to the current animated state.

  • Bug Fix: Expand the section when adding keys through the enter key, otherwise newly created keys wouldn't evaluate.

  • Bug Fix: Fixed sequencer curve editor 'selected node" filter continually expanding.

  • Bug Fix: Control Rig: Provided a fix for Control Rig in Sequencer breaking when Control Rig is compiled in it's Editor.

  • Bug Fix: Fixed default tracks not being added properly for some properties (ie. OuterConeAngle on SpotLights) because the object to be keyed should be the property owner, and not the actor.

  • Bug Fix: Fixed an issue when converting a possessable to spawnable failing when selection changes during the conversion.

  • Bug Fix: Fixed bake transform when the camera is an additive camera offset.

  • Bug Fix: Transform origins no longer apply to components and actors that are attached to other components or actors.

  • Bug Fix: Curve Editor: Fixed a crash when undoing inserting keys. The panel's edit box's CurveIDToKeyProxies becomes stale on undo. Invalidate the curve model ID and relevant key handles on undo.

  • Bug Fix: Sequencer will now set AlwaysTickAndRefreshBones on child skelmesh components when Skeletal Meshes are added to Sequencer.

  • Bug Fix: Fixed copy/paste of spawnables by forcing it to be spawned so that its possessable components can be bound.

  • Bug Fix: Changed GetPlaybackRange so that it returns values in display rate, similar to GetPlaybackStart and GetPlaybackEnd.

  • Bug Fix: When recording an anim sequence live link section, it's source can start at any time during the recording. Because of this UE will now always force tick and check for new sources every frame.

  • Bug Fix: Fixed event endpoints being lost when renaming or duplicating a Level Sequence.

  • Bug Fix: Fixed duplicate object bindings not pasting to original folder.

  • Bug Fix: Cine Camera: Moved the upgrade path to Serialize() so that newly created Blueprint cameras don't have their filmbacks incorrectly upgraded.

  • Bug Fix: Control Rig: Selecting Parent Control will now select single channel child control allowing for thing's like S to key as expected.

  • Bug Fix: CurveEditor: Scaling with Transform Tool no longer reverts on mouse up.

  • Bug Fix: Control Rig will now frame on selected controls. Note if any control is selected UE will focus on them, then if not UE will do actors.

  • Bug Fix: Curve Editor: Fixed the set curve attributes menu (ie. pre and post infinity) to operate on all curves rather than just the selection.

  • Bug Fix: Fixed fbx import through scripting not creating bindings for components. The bug here is that it's not able to import the focal length property because it doesn't create a camera component binding first.

  • Bug Fix: Fixed curve editor tree items not showing up when switching sub sequences.

  • New: Added TakeTrack and TakeSection which contains timecode tracks and a slate property. Take recorder records timecodes for each tick and adds them to the actor's take track section.

  • New: Added Python scripting support for the Movie Render Queue. Added example Python scripting support for rendering movies both in-editor and from the command line. See \Engine\Plugins\MovieScene\MovieRenderPipeline\Content\Python for more details.

  • New: The "-MoviePipeline=" argument has been changed to " LevelSequence=" to clarify what gets used for (as it only attempts to load a ULevelSequence). See MovieRenderPipelineCommandLine.cpp for examples.

  • New: Added the option to disable TDR (graphic driver timeout) when burning out sequences with MoviePipeline, defaults to on.

  • New: Exposed SetName to set the name of a track binding.

  • New: Added Create Group to the context menu in the group manager. Fixed undo issues not refreshing the groups manager.

  • New: Added RefreshCurrentLevelSequence() which refreshes the UI for the currently loaded level sequence.

  • New: Concerning MoviePipeline, we鈥檝e blended post processing volume settings to motion blur amount.

  • New: Made calls to OnSectionMoved consistent in dragging operations, calling it for sections being moved and resized, both during interactive dragging and at the end of the operation.

  • New: Added support for toggling markers in a subsequence to be globally visible in other subsequences.

  • New: Added a Timecode clock which sets the sequencer clock to the timecode provider. Renamed the existing Timecode clock to Relative Timecode.

  • New: Added the ability to create bindings in root or local space. Camera cut bindings in a subsequence should be created in local space so that they can resolve when opened on its own. Updated the master sequence example to create a binding in local space.

  • New: Added support for AvidDNx and AppleProRes video codecs. Does not support compositing burn-in data on top of video output.

  • New: Movie Render Queue's Burn-In setting now allows the burn-in to not be composited onto the final image.

  • New: Added access to sequencer selection. GetSelectedSections, SelectSection GetSelectedTracks, SelectTrack GetSelectedFolders, SelectFolder GetSelectedObject, SelectObject EmptySelection.

  • New: You can now use a non-realtime audio mixer to allow generating deterministic audio when rendering movies in PIE.

  • New: Added a warning via Message Log when levels are set to Blueprint Streaming for Movie Renders.

  • New: Added option (shift modifier) to append sections as they are dropped as opposed to stacking them on subsequent rows.

  • New: Exporting fbx through python now spawns spawnables if necessary on export.

  • New: Added ability to create an event repeater section through scripting

  • New: We鈥檝e exposed Set/GetClockSource and Set/GetEvaluationType.

  • New: Added the ability to record camera cuts/switching.

  • New: We鈥檝e exposed GetBoundObjects from FSequencer to retrieve the objects bound to the level sequence editor.

  • New: Added numeric type interface to pad take number digits.

  • New: Added veryverbose log for ingested live link frame times. You can enable this by using the console command: log LogLiveLinkSequencer.

  • New: Added the ability for sequences to opt in/out of certain track types. Each track editor can now call Sequence->IsTrackSupported to determine whether it should opt in/out or continue with its default implementation.

  • New: For converting existing track editors in a plugin to be compatible with LevelSequence, implement: virtual bool SupportsSequence(UMovieSceneSequence* InSequence) const override and return true if a sequence is a ULevelSequence.

  • New: Added display showing number of tracks and how many are hidden by filters.

  • New: Added get/set selected channels. Channel selection is defined as a FSequencerChannelProxy which is a section pointer and a channel FName.

  • New: Can now show marked frames in the cinematic viewport.

  • New: Take Recorder: Added option to exclude all properties for a component. For example, you can now do this in BaseEditorSettings.ini to exclude the light component properties from being recorded: (MatchingActorClass=/Script/Engine.Light,ExcludePropertyTracks=((ComponentPath="LightComponent0", PropertyPath="")).

  • New: Concerning Fbx, added import/export integer and string channels.

  • New: Added config to HierarchicalBias. For example, you can set this in EditorPerProjectUserSettings to set the default hierarchical bias for sections to -100: [/Script/MovieScene.MovieSceneSubSection] Parameters=(HierarchicalBias=-100)

  • New: Added options to cancel movie rendering via the movie pipeline executor from blueprint/python scripting.

  • New: Take Recorder: Added option on actor source to toggle whether the parent hierarchy is automatically added for recording if it isn't already. When disabled and recording to possessable, the child will be recorded in local space since it will retain its parent in the level. When disabled and recording to spawnable, the child will be recorded in global space.

  • New: UE now allows opening and navigating curve editor for locked sequences.

  • New: Added the ability to export custom attributes when exporting a skeletal animation track (mapped from an anim sequence).

  • New: Added Node Groups feature, which allows creating groups of sequencer nodes for selection, filtering, and editing.

  • New: UE will now warn users when we automatically insert the {render_pass} tag for them as it will cause the output filename to change names unexpectedly.

  • New: Sequencer Scripting: SetTickResolution now also migrates frame times to the target tick resolution. Added SetTickResolutionDirectly which does not migrate the frame times. Refactor MigrateFrameTime to MovieSceneTimeHelpers

  • New: Added movie pipeline queue subsystem for runtime.

  • New: Added an option to lock previous camera in a blending camera cut.

  • New: UE will no longer unlock cameras when going from a sub-sequence to a parent sequence. This lets artists and designers working in a sub-sequence use the camera from a "sibling" animation sub-sequence.

  • New: Added a new "additive from base" blend type, where values are animated relative to the first value of a section. This is mostly useful for camera animations and camera shakes.

  • New: Added support for hierarchical easing, where an entire sub-sequence can be eased in and out at the beginning and end, as if every single track inside had the same ease-in/out curves.

  • New: Added two tracks for starting and previewing camera shakes on a camera shake source component/actor: a "controlled" track where sections control when the shake starts and stops, and a 鈥渢rigger" track which is a 鈥渇ire-and-forget" way to trigger shakes. These cinematic camera shakes can be previewed directly in the editor by playing the sequence.

  • New: Added the ability to match animation sections in Sequencer by specified bones and visualize skeletons on sections to help with matching.

  • New: Movie Pipeline: Implemented the exporting of FCPXML project files, and added metadata tracking for the files output.

  • New: Added a motion trail editor mode for transform tracks, skeletons and control rigs.

  • New: Made ULevelSequenceBurnIn::GetSettingsClass_Implementation() overridable.

  • New: Added a reduce keys tolerance to specify how much keys should be reduced by after recording. Keys tolerance and key interpolation were also added to the section menu.

  • New: Ctrl-Drag dilate will now work with skel anim tracks, geometry cache tracks and geometry collection tracks. In all three we now scale the playrate to do time warping.

  • New: Added Control Rig Created FK Rig that replaces Additive Control Rig and allows one to override or add to existing transforms and curves(morph targets).

  • New: Added Sequence hierarchy navigation. There's now a new picker to show the sequence hierarchy which allows you to pick any subsequence to dive into directly. There's also forward and backwards navigation buttons, and subsequences are now always shown.

  • New: Control Rig: Added the ability to import FBX into a Control Rig, with options for matching, insert/replace, etc.

  • New: Cloth (Chaos) will now update in Editor if the Update Cloth In Editor flag is toggled on a Skel Mesh Component.

  • New: Added an option to disable sections when baking as opposed to deleting.

  • New: Added the ability to copy the contents of a track to another track.

  • New: Movie Pipeline: Added the ability to toggle the selected shots. If the shot being toggled is not selected, only that shot will be toggled.

  • New: Added meta DeterminesOutputType to UFUNCTIONs to eliminate the need to cast the return type in Blueprints.

  • New: Take Recorder: Added support for recording animated attachments.

  • New: Cine Camera: Updated 16:9 Digital Film SensorWidth and SensorHeight to 23.76 x 13.365 to match Arri Alexa.

  • New: Added support for animating properties on decal component materials.

  • New: Control Rig: Added 'default animating rig" to SkeletalMesh, which if specified will create a track with that Control Rig when a Skeletal Mesh Component with that Skeletal Mesh is added to Sequencer.

  • New: Movie Pipeline: Sequencer will now report errors/warnings to the FMessageLog.

  • New: Added support for toggling markers in a subsequence to be globally visible in other subsequences.

  • New: Movie Pipeline: Added warnings when camera cuts start on subframes.

  • New: Movie Pipeline: Renamed friendly name to "Movie Render Queue."

  • New: Sequencer is now more responsive when viewing large data sets.

  • New: Live Link / Rich Curve: Improved save times for take recorder by setting all times and values at once and not auto tangent each key.

  • New: Curve Editor: Changed mode hotkeys to have a modifier. Transform - Ctrl-T, Retime - Ctrl-E, Multi - Ctrl-M. This removes conflicts with w,e,r which are reserved for the viewport transform gizmo. Ctrl-W is used for weighted tangents.

  • New: Added a color gradient for color tracks (material parameter and material tracks). Added a color picker for color keys on double click. A key is added to all channels if it doesn't exist when the color is edited.

  • New: Control Rig: Added bidirectional links using asset user data between sequencer skeletal tracks and anim sequences. Users can now create and open these links either from Sequencer or via Animation Editor via asset and toolbar extenders.

  • New: Take Recorder / Animation: Improved logging by adding time for creating animation asset and saving sequences. With LogAnimation Log and LogTakesCore Log.

  • New: Control Rig: Now supports Baking Animation Onto Control Rigs.

  • New: You can now zoom to fit selected sections and keys. Hotkey 'f"

  • New: Control Rig: Added Sequencer Support for Int/Enum Control types.

  • Improvement: Movie Render Queue now supports a 'stencil" based layering system to better support unrendered objects.

  • Improvement: Improved usability of dragging and snapping keys in CurveEditor.

  • Improvement: Cine Camera: Updated 16:9 Film SensorWidth and SensorHeight to 24.00 x 13.5.

Static Mesh Editor

  • Bug Fix: The Toolbar is now shown in the Static Mesh Editor Viewport.

  • Bug Fix: Fixed Selection Highlighting in Static Mesh Editor.

  • Bug Fix: Fixed an incorrect calculation of LOD in editor static mesh wireframe and LOD coloration views.

  • Bug Fix: Fixed the "Additional Data" button in the Static Mesh editor, so that the changes are propagated to individual viewports.

  • Bug Fix: Fixed an issue that could cause a large difference in the binary output when saving a mesh multiple times in the editor.

VR-Editor

  • Bug Fix: Added a check to make sure legacy mesh paint mode is enabled before going into VR Mode.

  • Bug Fix: Fixed being unable to exit the VR Editor when using Valve Index controllers.

  • Bug Fix: No longer need to remove one element from the menu due to search element changes.

  • Bug Fix: Fixed VR Editor using invalid Valve Index bindings.

World Browser

  • Bug Fix: Fixed an issue where level browser would lose folder information when switching streaming type.

  • Bug Fix: Fixed an issue where expansion state was not being properly retained in trees with >500 items.

  • Bug Fix: World Composition - Fixed a crash when importing a heightmap using the Import Tiled Landscape feature. If the heightmap filename contained invalid characters, the level package would not be created

  • Bug Fix: Released various fixes to WorldBrowser and scripted streaming level creation to avoid crashing when setting an invalid level name. We鈥檝e also repaired world streaming levels when they point to an invalid level package.

  • Bug Fix: Fixed an issue with Level Details not using all of its panel's space.

  • New: Level Browser now scrolls to current level when using MakeActorLevelCurrent.

Gameplay Framework

  • Crash Fix: Prevented a crash when spawning an Actor into a Sublevel that is not Loaded/Visible.

  • Crash Fix: Fixed a crash when harvesting a subset of components from an actor such that a harvested component is attached to a component that is not being harvested or already exists in the Blueprint.

  • Crash Fix: Fixed a crash when adding a gameplay tag without a valid tag source selection.

  • Crash Fix: Added the path string arg to a message to fix a crash in UGameplayCueManager::VerifyNotifyAssetIsInValidPath.

  • Crash Fix: Fixed an access violation crash in AbilitySystemComponent_Abilities when using a ptr without checking it.

  • Bug Fix: Changed FComponentTypeRegistryData to only clear the 'needs to refresh" flag when a refresh actually happens.

  • Bug Fix: Fixed undo/redo of attached components when attached to an Actor which overrides DefaultAttachComponent.

  • Bug Fix: Fixed players standing on an object with static mobility teleporting when the object gains movable mobility.

  • Bug Fix: Fixed a UPawnMovementComponent::SetUpdatedComponent bug causing PawnOwner to potentially mismatch UpdatedComponent when component is pending kill.

  • Bug Fix: Fixed rotating movement component from not working in standalone.

  • Bug Fix: Child Actors created by nested Child Actor Components now inherit transience if an outer Actor is an editor-only Actor.

  • Bug Fix: Cameras now properly detect when shakes with duration end, and mark them as stopped in the preview panel.

  • Bug Fix: Components that are being harvested to create a new Blueprint will no longer perform collision checks as they are temporarily moved as part of the harvesting process.

  • Bug Fix: Fixed horizontal walking velocity calculation when bMaintainHorizontalVelocity is disabled and we call StepUp.

  • Bug Fix: Fixed Camera aspect ratio bug when computing view matrices.

  • Bug Fix: Fixed JumpCurrentCount discrepancy when JumpMaxCount is greater than 1 and there is a correction in the air.

  • Bug Fix: Fixed memory leak with infinite camera shakes staying around even after their blend out time expired.

  • Bug Fix: Implemented better protection against invalid values in lens and filmback settings.

  • Bug Fix: Fixed incorrect Spline Component comments.

  • Bug Fix: Fixed duplicating and copy/pasting of a root component which would result in an unexpected transform. Fixed pasting a component to the root component of an actor attached to another actor attempting to attach to the root of that other actor instead of its own.

  • Bug Fix: Fixed an issue where MaterialParameterName cache was not marked dirty when applying a UMaterialInstanceConstant.

  • Bug Fix: Added logging message of velocity in projectile when it detects that a bounce has failed because the object is stuck in penetration.

  • Bug Fix: Reset physics state when teleporting a player to their initial location causing large physics velocity and collision along the old path to the new location.

  • Bug Fix: Fixed Regression caused by actor overlaps not properly triggering during initial level load even if bGenerateOverlapEventsDuringLevelStreaming was enabled.

  • Fixed incorrect comments in the header file.

  • Bug Fix: Moved an overlap initialization used within AActor::DispatchBeginPlay to its own function for clarity and for any possible future adjustments.

  • Bug Fix: Added client character movement bit sent to server to indicate that we shouldn't perform a dual move inside a FScopedMovementUpdate.

  • Bug Fix: Disabled the filmback preset dropdown widget on CineCameraActors if the sensor size isn't editable.

  • Bug Fix: Fixed a bug where FieldPathProperties did not clear the old field path info before adding the new info.

  • Bug Fix: Fixed a bug where stacking GEs that did not reset the duration on additional instances of the effect being applied.

  • Bug Fix: Fixed an issue that caused CancelAllAbilities to only cancel non-instanced abilities.

  • Bug Fix: Reverted the DeferredRemove where it was before changes in the TickTaskManager.

  • New: Added OnDataTableChanged callback to FTableRowBase to handle changes to rows that aren't imported, this allows doing game-specific fixups to table rows that are edited by the Data Table editor.

  • New: Added a SetRelativeTransform_Direct helper function to USceneComponent.

  • New: Prevented users from setting single-instance shakes on shake source actors.

  • New: Added a templated version of GetOwner.

  • New: Added optional tag parameters to gameplay ability commit functions.

  • New: Fixed subsystems to work similar to Blueprint libraries in the editor and correctly guess whether they are run from a client or server context in the editor. This is accomplished by using new GetGlobalFunctionCallspace and GetCurrentPlayWorld functions that can be used by any class wanting similar logic.

  • New: Added StartTimeSeconds to PlayMontageAndWait ability task and improved comments.

  • New: Exported GameFramework log categories using ENGINE_API.

  • New: Enhanced Input experimental release - A highly configurable replacement input handler supporting collections of dynamically enabled prioritized button mapping contexts and complex customizable input trigger rules.

  • New: Prevented OnUnpossessed from being called multiple times. Blueprint events ReceivePossess/ReceiveUnPossess will only be called when the pawn was successfully possessed or unpossessed. OnNewPawn delegate is only broadcasted when a new pawn has been successfully possessed and when unpossessing a non null pawn. Calling Possess with a null pawn will unpossess any current one.

  • New: Added some utility functions like CallOrRegister_OnCompletedInitialScan to UAssetManager that allow other systems/plugins to depend on asset manager initialization.

  • New: Fixed FCollisionProfileName detail customization to have a reset to defaults button.

  • New: Added tag container "DynamicAbilityTags" to FGameplayAbilitySpec. These are optional ability tags that are replicated with the spec. They are also captured as source tags by applied gameplay effects.

  • New: GameplayAbility IsLocallyControlled and HasAuthority functions are now callable from Blueprint.

  • New: Moved AGameMode::HasMatchEnded up to AGameModeBase.

  • New: Added New methods for ending camera shakes of a given type that originate from a given source.

  • New: Added a multicast delegate to GameInstance that gets triggered when a pawn gets it's controller assigned.

  • New: Added support for PlayScale, PlaySpace, and UserSpaceRotation for camera shake source components.

  • New: Reverted code to set a parent component that was accidentally removed for runtime builds.

  • New: Visual logger will now only collect and store info about instant GEs if we鈥檙e currently recording visual logging data.

  • New: Added support for redirectors on gameplay attribute pins in Blueprint nodes.

  • New: Added new functionality for when root motion movement related ability tasks end they will return the movement component's movement mode to the movement mode it was in before the task started.

  • New: A new base class for camera shake, called UCameraShakeBase, has been created. It offers a few basic pieces of logic (managing time, blending, play space, and scaling of shake) to make writing sub-classes easier. All the core engine APIs now take and return this base class. The old camera shake class is now renamed UMatineeCameraShake, since it contains a Matinee camera animation. It will make it easy to deprecate Matinee later. Some backwards compatible core engine APIs have been added that take and return the Matinee shake. This makes it possible to have core redirectors in place and not break existing content.

  • Improvement: AFunctionTest now passes messages around by const FString& instead of copying them.

  • Improvement: Improved many source code comments and cvar messages for commonly used gameplay config options to better explain their functionality.

  • Improvement: CurveTables now strip redundant keys at cook time to optimize loading at runtime.

  • Improvement: Consolidated client-server character movement RPCs to a simple function signature using a new extensible struct, to more easily support custom data in RPC parameters without having to change engine source. This allows for customized serialization that can more efficiently pack the data over the wire, and solves some previous ordering issues with ServerMoveOld being sent as a separate RPC function. See the feature docs for more details.

  • Deprecated: Deprecated UWorld::BeginTearingDownEvent in favor of FWorldDelegates::OnWorldBeginTearDown.

Learning Resources

Code Examples

Localization

  • Crash Fix: Fixed a crash in LocalizationCommandletExecution caused by closing the process read and write pipes too early.

  • Bug Fix: Published a fix to stop watching a String Table CSV file when the String Table that loaded it is unregistered.

  • Bug Fix: Updated the localization source code gatherer so that it now reports warnings for localization macros that span multiple lines.

    • Previously the source code gatherer would not collect these since it runs line-by-line and would often ignore them.

  • Bug Fix: Fixed an issue where localization meta-data values with new lines would break the PO file.

  • Bug Fix: Enabled non-EDL archives to load Enabled String Table asset references when EDL is active.

  • Bug Fix: Added support for C++11 raw strings to the localization source code gatherer.

  • New: Added an alternative PO export mode that allows key stabilization to work correctly with Crowdin.

    • This uses the X-Crowdin-SourceKey tag to let Crowdin correctly track a piece of text over time. Crowdin is great for this as it uses a combination of msgctxt and msgid to find the text. The mode then puts the msgctxt into the msgid field and tells Crowdin to use msgstr as the source string.

    • The downside of this is that PO files no longer know which source string UE used to make a specific translation. Because of this UE4 is no longer able to tell whether a particular translation is "stale" when importing it from a PO file.

  • New: Added a way to get the language and locale, that the text localization manager will be requesting during initialization.

  • New: Added a data validator to ensure that localized assets conform to the rules needed to use them at runtime.

  • New: Enabled the AddToolbarExtender for use with StringTableEditor"

  • Improvement: Improved FText::IdenticalTo so it can now perform a deep comparison of the text history (comparing generated texts, like a format result). It can also now perform a lexical comparison of invariant text instances as well. This allows it to quickly compare two cases that would have previously failed the same check due to having different text data instances.

Networking

  • Bug Fix: Addressed an issue affecting level visibility changes received during seamless travel. These are now queued up and executed when the server has completed the travel to avoid issues with clients loading faster than the server.

  • Bug Fix: Fixed a crash where UE would not check NextIndex if valid in APlayerController::GetNextViewablePlayer.

  • Bug Fix: Fixed crash when cleaning up the world on seamless travel.

  • Bug Fix: SceneComponent - Fixed bug where UE might remove locally attached from AttachedChildren array if replicated AttachedChildren are not at once resolvable. This would call OnRep_AttachedChildren multiple times without receiving the array from the server.

  • Bug Fix: Added a check to prevent Actors pending kill from sending RPCs.

  • Bug Fix: Fixed an issue that would snap the Replicated Relative Location to zero. This was happening when UE attached the Component using snap-to-location and it changed the transform before replicating the attachment.

  • Bug Fix: Fixed an issue that caused initial lag statistics to be incorrect.

  • Bug Fix: Fixed a divide-by-zero compile error in ReadFixedCompressedFloat which occurred when instantiated with certain template parameters.

  • Bug Fix: Fixed replication bug causing re-used channels to permanently fail replication by moving closing of acknowledged channel closures to the end of ReceivedPacket. This restores the old behavior allowing channels to process incoming bunches before closing the channel.

    • The new behavior is closer to how it worked when we were sending explicit ack-bunches.

  • Bug Fix: Removed the ApplyStackingLogicPostApplyAsSource function from FActiveGameplayEffectsContainer because the system never called it. We also made the destructor of FActiveGameplayEffectsContainer non-virtual, since adding a VTABLE to a struct if not present in the base breaks reflection.

  • Bug Fix: Prevented calling PreReplicate and comparing properties multiple times for actors during multicast RPCs.

  • Bug Fix: Added a sanity check to prevent child net connections from creating channels.

  • Bug Fix: Fixed a potential underflow crash in the DTLS packet handler.

  • Bug Fix: Made sure we track property changes in Push Model due to mapping or unmapping network objects. This is only necessary for Client-Side Demo Recording.

  • Bug Fix: Prioritized FObjectKey in PushModel tracking instead of just UniqueId. This will guarantee uniqueness across Garbage Collections to prevent potential collisions.

  • Bug Fix: Fixed an issue where if UE added a replicated subobject to an actor that has already had its spawn acked, UE would prevent the actor from ever going dormant.

  • Bug Fix: Stopped NetSerializeStructs from using Property Identical checks on shadow state. Shadow State is not GC safe and this can cause crashes in rare circumstances.

  • Bug Fix: Fixed up a wrongly formatted log message in FObjectReplicator::StartReplicating and made it more descriptive.

  • Bug Fix: If SetReplicates is called on an already replicating Actor, we force property comparisons to capture the role change.

  • Bug Fix: Fixed "attempted to use an out of date NetDriver" log spam that could occur when a client attempted to connect to a new server.

  • Bug Fix: Fixed a regression in UEnum Net Serialization for max values.

  • New: In Networking Insights, specifying -NetTrace=[Verbosity] on the command line now implicitly enables the "net"-trace channel.

  • New: Added CSV Profiler events that can track when a Connection's Actor (or its Pawn) are stuck on network loads for a long time.

  • New: Added the choice to use the control channel for replicating destroyed static actors, rather than having each create its own channel.

  • New: Prioritized RemoveSwap over Remove when removing actors from actor rep lists in the Replication Graph to slightly improve speed.

  • New: Added a way to set certificate lifetime in the DTLS packet handler.

  • New: Made StatelessHandshakeComponent ENGINE_API.

  • New: Changed Fast Array Limits to configurable CVar. Added a log on the server when we know we have exceeded these limits.

  • Improvement: Exposed network dormancy types to Blueprint.

  • Improvement: Increased the default NetDriver bandwidth limit to roughly 100 KB/second. This will help alleviate latency users would experience when reaching the old limit. This new limit is still well within the ability of modern internet connections.

  • Improvement: Added a more explicit warning when UE replicates channel names as full strings and that causes overflows in bunch headers.

  • Improvement: The NotifyStreamingLevelUnload log from net drivers is now in the verbose category, reducing spam when LogNet is set to "log" verbosity.

Replays

  • Bug Fix: Fixed a rare crash when restoring startup actors during replay scrubbing where the actor's level was invalid.

  • Bug Fix: Fixed local replay streamer error on scrub if data did not decrypt properly.

  • Bug Fix: Changed how UE adds some actors to the network object list in replays to reduce the overall size of the list during recording.

  • Bug Fix: Fixed a rare replay bug where dynamic arrays would not be resized properly during playback.

  • Bug Fix: Fixed local replay streamer not raising an error properly when not decompressing or decrypt a chunk of streaming data.

  • Bug Fix: Fixed level script actor names in streaming levels that UE incorrectly mapped to the wrong game instance when using Play-In-Editor replays.

  • Bug Fix: Added better logging for replay header flags during playback. Fixed delta checkpoint loads skipping the last packet in each checkpoint.

  • Bug Fix: Modified serialization of class net cache exports in replays to be properly unique when two classes share a name but have different paths.

  • Bug Fix: Fixed a rare replay crash that could occur if two net export classes had the same name but different paths.

  • New: Added the ability for the replication graphs to record without using a demo net driver. We also added a replay subsystem as an interface for both recording methods. We鈥檝e also added support for when a dormant channel closes when recording. Lastly, we deprecated most public variables of UDemoNetDriver.

Replication Graph

  • New: Added a call to ShouldReplicateActor in the replication graph when adding a new actor to mirror the functionality of the network object list.

  • Deprecated: Deprecated the GraphConnection's ConnectionId and renamed it to ConnectionOrderNum. We did this to prevent users from thinking the ID persists across the lifetime of the object. In fact, it's only unique during a single tick of the RepGraph and will change during a session as clients join and disconnect.

Socket Subsystem

  • New: Added option to TcpListener that allows to make the socket non-reusable.

Online

  • Bug Fix: Fixed a crash when destroying an online session on iOS.

  • Bug Fix: Fixed a bug preventing UE from adding secondary players to platform sessions.

  • Bug Fix: Fixed a bug preventing platform sessions from clearing in Social Party's replicated data that have no members when we are promoted.

  • Bug Fix: Modified Party Platform Session Monitor to only do a FindSessionById and to not retry on failed session finds. This fixes repeated failed session finds happening on a timer.

  • New: Added optional iOS 13+ support to the WebAuth plugin, which adds the required protocols to handle view support.

  • New: Added directive to force account picker on login in defined platforms.

  • New: Updated IVoiceChatUser instances created with the IVoiceChat::CreateUser API so they are now released with the IVoiceChat::ReleaseUser API. These were previously released by calling "delete" on them.

  • New: Added ::Exec() function to SocialToolkit. SocialManager now attempts to call Exec on all its SocialToolkit instances (after attempting SocialDebug instances)

  • Improvement: Upgraded Android BillingApiV2 to version 3.0.0 to better support in-app purchases.

  • Improvement: Leaderboards now test interface refactor to admit more parameters when querying leaderboards.

  • Improvement: Improved NvEnc and Amf in the AVEncoder module so that they now use the unwrapped DX Device. This fixes pixelstreaming/highlight recording for both NvEnc and Amf when used in together with the EOS SDK. This is necessary because the EOS SDK hijacks the D3D11CreateDevice.

  • Deprecated: IOnlineStore is deprecated, please use IOnlineStoreV2 and IOnlinePurchase instead.

  • Deprecated: Removed deprecated iOS 11 SDK calls from WebAuth, as UE supports iOS 12+ by default.

  • Deprecated: The IVoiceChat interface (and therefore the VivoxVoiceChat implementation plugin) has migrated from using human readable display names as the device selector, to using unique device ids. This fixes issues where a user with multiple, identically named devices could not differentiate between them. New "Get" methods return a structure containing both the human readable display name, and the unique id, and new "Set" methods take the unique id.

Deprecated methods, and the relevant new method to use instead: GetAvailableInputDevices -> GetAvailableInputDeviceInfos GetAvailableOutputDevices -> GetAvailableOutputDeviceInfos SetInputDevice -> SetInputDeviceId SetOutputDevice -> SetOutputDeviceId GetInputDevice -> GetInputDeviceInfo GetOutputDevice -> GetOutputDeviceInfo GetDefaultInputDevice -> GetDefaultInputDeviceInfo GetDefaultOutputDevice -> GetDefaultOutputDeviceInfo

Deprecated APIs have been replaced with helper methods that adhere to the old contract, to aid migration.

  • Deprecated: Removed unused dead code from the PixelStreaming plugin

  • Deprecated: Changed OSS iOS instances of playerID to use gamePlayerID for iOS 12.4+. This is important because Apple no longer supports playerID in GameKit and for certain iOS revisions this may fail to give a result if used. The replacement gamePlayerID will not give you an id based on the older global playerID but an entirely new value. Be aware that if you have data that relies on the old playerID system you will need to track and migrate this data to the new gamePlayerID upon first successful login.

HTTP

  • Bug Fix: Updated IHttpRequest to use a thread safe shared pointer. This should help fix crashes caused by the system creating requests on threads other than the game thread.

  • Bug Fix: Added a http check in curlhttpRequest to avoid Download Image BP to fail when using a local file instead of a web URL.

  • Bug Fix: JsonSerializer now properly serializes an array of json values instead of treating it as a json object.

  • New: Added move-aware SetContent API to IHttpRequest to avoid copying the payload. This is especially helpful when passing large payloads to the HTTP system.

  • New: Added support for path parameters to the HTTP Server. You can now add routes with path parameters by providing them in the path like so: "/route/object/:objectid"

  • Deprecated: Changed instances of SecTrustEvaluate (which Apple deprecated) to instead use SecTrustEvaluateError when building for iOS 12+, tvOS 12+, and macOS 10.14+.

Online Subsystem

  • Bug Fix: The ToString function now reports the correct version number in all localizations.

  • Bug Fix: Fixed some race conditions and instances of not getting marked as complete in Online Subsystem GDK's async tasks.

  • New: Added Operations Support System (OSS) to support "Sign in with Apple" on iOS.

  • New: Provided a way to pass an obfuscated user id when purchasing using OnlineSubsystemGooglePlay. Google uses this as part of their anti-fraud efforts.

  • New: Added MaxSpectators session setting.

  • New: Moved parsing logic of ReadOnlineSubsystemConfigPairs into a public function ParseOnlineSubsystemConfigPairs.

  • New: Implemented FindSessionById in TestSessionInterface.

  • New: Added IOnlineSession::StartMatchmaking with per-user settings. Not implemented on most platforms.

  • New: OnlineSubsytemGDK has been added to help support new Microsoft GDK platforms.

  • Improvement: Changed iOS instances of playerID to use teamPlayerID instead for iOS 12.4+. This should make it easier to find the right players.

  • Improvement: Moved MAX_LOCAL_PLAYERS definitions to platform extensions to OnlineSubsystem.

  • Improvement: Modified FOnlineEventParms to use FString instead of FName.

  • Improvement: Added new implementation of QueryPresence that takes multiple ids.

WebSockets

  • New: Added error message handling to Matchmaking websocket clients for both client and Dedicated Servers.

  • New: Added flag from client settings to mcp ticket to signify legacy controls were forced to be changed to new control mappings.

XMPP

  • Bug Fix: Added a Tick function in XmppModule to call ProcessPendingRemovals to clean closed xmpp connections.

Paper2D

  • Bug Fix: Hosted mode toolkits can now display in the level editor for modes which are not part of the toolbar, such as Paper2D.

  • Bug Fix: Fixed a bug that caused old assets not to appear in the SpriteEditor if they were unloaded.

  • New: Exposed the GetSpriteColor function for UPaperFlipbookComponent.

Physics

  • Crash Fix: Attempting to generate a levelset from an empty triangle mesh no long causes Editor to crash.

  • Crash Fix: Updating shape bounds with invalid geometry no longer crashes Editor.

  • Crash Fix: Running scene queries against clustered objects no longer crashes Editor.

  • Crash Fix: Converting a static mesh with null materials into a Geometry Collection no longer causes Editor to crash.

  • Crash Fix: Chaos Niagara interface binding to events for non-active editor solvers no longer causes Editor to crash.

  • Bug Fix: Unculled fields no longer incorrectly apply dynamic parameters to inactive geometry collection particles.

  • Bug Fix: Holes are now properly supported in Chaos landscapes and navigation meshes.

  • Bug Fix: Geometry collection collision filters now correctly filter down from the component settings.

  • Bug Fix: GC scene proxy initialization for RHIs that do not support no-overwrite locking now function properly.

  • Bug Fix: Skipping navigation generation for geometry collection components when they have no available rest collection now works properly.

  • Bug Fix: Disabled particles now function correctly. They no longer get pushed into spatial acceleration structures, fixed cluster particles, and global objects or skip collision resolution while slowing down other queries.

  • Bug Fix: Geometry Collection non-threadsafe collection on DDC cook now functions correctly.

  • Bug Fix: Cluster implicits and initial cluster transforms now function correctly.

  • Bug Fix: Underlying Cull Field now correctly reports the type so the operator nodes can work properly with culled data sets.

  • Bug Fix: Resolved several LiDAR-related line tracing issues.

  • Bug Fix: External strains no longer incorrectly always trigger breaks in geometry collections.

  • Bug Fix: Geometry Collection non-threadsafe code in connectivity graph generation now functions correctly.

  • Bug Fix: Update Body Scale now correctly handles tri-meshes that were created from an externally owned mesh.

  • Bug Fix: Geometry Collection cluster transforms are now correct after changing leaf node transformations for fractured pieces.

  • Removed: Collision particles for Chaos unions and re-enabling child collisions for unions passing through the child simplicials.

  • Bug Fix: Cluster unions are no longer incorrectly filtered out of collision detection due to internally created clusters not having valid collision filter data.

  • Bug Fix: Phantom collisions in Chaos now function correctly. They no longer remove dynamic particles from a disabled active particle list and no longer force a dirty state on every Geometry Collection particle during Physics State Push.

  • Bug Fix: Material face remapping now works correctly when cleaning Chaos triangle meshes.

  • Improvement: Physics Material is now part of the Physics Core module so you can use it outside of the Engine.

  • New: Using physical materials now requires Physics Core as a module dependency.

  • New: Geometry collection now uses Unreal physical materials rather than the obsolete Chaos physical materials.

  • New: Landscapes that are re-topologized now have a new Chaos mesh collider.

  • New: Added an Experimental Chaos Caching plugin to manage and record and playback physical simulations. Currently implemented for static mesh and geometry collection components.

  • New: Heightfields in Chaos level-set collisions now can use the PhiWithNormal setting.

  • New: Reimplemented analytic solver floor for custom Chaos solver actors.

  • New: Implemented basic network replication for geometry conditions to correct the client. The replication can cause differing results with stacked objects since the client can run simulations between updates without prediction.

  • New: Chaos Solver Actor is now refactored and solver properties are now their own object. Additionally, the enable/disable is now replaced with the ability to "pause" a solver. A paused solver ticks at Dt=0 and still runs through the advance to update other systems, such as spatial acceleration.

  • New: Implemented Levelset sweep and overlap functionality.

  • New: Added Levelset overlap implementation

  • Improvement: Optimized Collision Detection through replacing expensive thread-safe queues with a pre-allocated cache that does not require synchronization and improved collision detection and gather to be move-aware and avoid repeated copies of contact data.

  • Improvement: Contact graph generation in Chaos is now optimized.

  • Improvement: Chaos field command types now use reduced evaluated sample sets.

  • Improvement: Scene queries for children of internal clusters are now enabled in Chaos.

  • Improvement: Volume levelset approximations are now closer to the actual value; however, it is not completely accurate at this time.

  • Improvement: Geometry collection collisions now default to implicit-implicit to match the default collision Box type.

  • Improvement: Union group generation in Chaos clustering no longer submits breaking events when releasing from a static cluster when building internal clusters.

  • Improvement: Added pre-skinned bounds for Geometry Collection render proxies.

  • Deprecated: The APEX Destruction plugin is now deprecated.

Clothing

  • Crash Fix: Restoring the cloth LOD index after undoing Remove Cloth to prevent simulation no longer crashes Editor.

  • Bug Fix: Resolved an error that occurred when deleting a duplicated SimpleCloth asset.

  • Bug Fix: Resolved an error when loading 4.24 cloth assets that displayed the message, "Attempting to replace an object that hasn't been fully loaded: ClothConfigNv object."

  • Bug Fix: Fixed an empty cloth configuration migration issue when reloading 4.24 assets that were caused by a deprecated config property having its UObject name recycled.

  • Bug Fix: Changing buffer buckets now size correctly when using 65k cloth.

  • New: The Clothing Simulation Factory property in the Skeletal Mesh Component will automatically change at run time to the first available factory that is compatible with the included cloth assets. This allows to run Chaos Cloth simulation on levels setup with the ClothingSimulationNv when PhysX is disabled, and vice-versa.

  • New: A warning message now appears in the Mesh Editor viewport when the Chaos Cloth simulation lost impulses due to running slow or being teleported

  • New: Cloth diagnostic and profiling functions are now part of the Clothing Simulation Interactor in Chaos Cloth, which means they can be called in Blueprints. This feature is not compatible with PhysX.

  • Improvement: Mesh-to-mesh skinning now supports multiple influence triangles. This change allows the use of multiple low-res/sim triangles to influence a high-res mesh vertex, and you no longer need to bind mesh vertices with barycentric weighting.

  • Deprecated: Removed the uninitialized member bEnableClothLOD_DEPRECATED from the Skeletal Mesh section serialization.

Collision Detection

  • Bug Fix: In the Details panel, the "Reset to Default" buttons on the mesh collision preset 鈥淥bject Response" channel now functions correctly.

  • Bug Fix: The Reset to Defaults button now works correctly on "Object Response" channel rows in the collision property details.

  • Crash Fix: On Create Physics State function of the Landscape Heightfield Collision Component no longer causes Editor to crash.

  • Improvement: Updated an asset warning for the Cook Collision Data function in the Landscape Heightfield Collision Component.

  • Improvement: Clustering contact rejection now considers the velocity along with the collision rather than the impulse of the collision.

Linux

  • Bug Fix: Resolved an issue with Linux with the SegFault in source filtering and notification manager when closing QAGame Clear Regional Lists at the pre-exit instead of during the global dtor.

  • New: Building with a -gbd-index with Clang v9 or above now cuts symbol loading time by more than half (45 seconds to 17 seconds).

  • New: Added the No Relative Mouse Mode command-line option to support remote VNC.

  • New: Lld linker is now supported with Clang v9 and above.

Rigid Bodies

  • New: You can now Reset Geometry Collections to empty (pre-fracture state) through the Reset button on the Fracture Mode toolbar. Reset only works with assets that are generated from the Geometry Collection.

Platforms

  • Bug Fix: Check if the platform's ini name is valid (not empty) before trying to load the target platform module. If the platform's ini name is empty and it drops down to using [IniName]+TargetPlatform it will try to recursively load TargetPlatform. This can happen in cases where the AllDesktopTargetPlatform module is not available.

  • Bug Fix: When using the HLSL Cross Compiler, the Shader Compiler Workers (SCW) no longer use more memory than was available on the PC. SCWs are now recycled after each job. You can also now enable the ability to restrict the SCW count based on the memory on non-build machines.

  • Bug Fix: Fixed an uninitialized variable in FShaderPipelineCache that was causing stable cache load failures on some computers.

  • Bug Fix: Released a fix for a console command not properly allocating the right amount for the string. This resolves a potential buffer overrun crash.

  • Bug Fix: Added a fix for PSO Cache not properly setting the mask when no cache is present but game mask usage is enabled.

  • Bug Fix: Fixed an issue concerning invalid PSO masks when the GameMask is disabled by default.

  • Bug Fix: Fixed the + issue on AdditionalRestrictedFolders in DataDrivenPlatformInfo.ini once and for all.

  • New: If an appropriately named platform directory exists under Platforms, it is assumed the project supports the named platform.

  • New: The ISPC compiler was updated to version 1.13.

  • New: CountLeadingZeros and FloorLog2 were optimized.

  • New: Editor Preview Rendering Level platforms are now extensible using DataDrivenPlatform.ini.

  • New: Made the per-platform properties evaluate to the current Preview Rendering Level in the editor.

  • New: Added platform extensions support for installed builds BuildGraph changes:

    • now accepts a semicolon-delimited list of includes to process.

    • This allows a list of includes to be determined dynamically.

    • Pass DataDrivenPlatformInfo names to BuildGraph scripts.

  • New: Made modifications to allow support for multiple build distribution backends. From now on, adding support for a new build distribution backend like XGE can be done by writing a new plugin. To support this we also renamed all classes/structs involved in generic tasks to remove XGE from the name, and we wrapped XGEControllerModule into a plugin. Additionally we exposed methods in Shader Core to figure out the real path from virtual paths for shaders, and added a method so each target platform can define their compiler dependencies.

  • New: Optimized the Expand command of ShaderPipelineCacheTools commandlet so that it takes less time to finish and uses less memory.

  • New: Added support for data sets larger than 2 GB to the ShaderPipelineCacheTools commandlet.

  • New: Enabled all categories in persistent storage manager and set all quota to unlimited. Access to containers in persistent storage manager is not thread-safe. This makes sure all files can still be written to persistent storage without any extra restriction, but analytics will still be able to collect usage information for each category.

  • New: Added a CVar per console to allow gamepad control of the cursor without requiring a mouse. These include: GSonyAllowGamepadControlOfCursor, GSwitchAllowGamepadControlOfCursor, and GXboxOneAllowGamepadControlOfCursor.

  • New: Changed the verbosity of detailed material info printed to the login ShaderPipelineCacheTools commandlet to not spam the log unnecessarily.

  • New: Improved platform extension plugin name error to indicate the proper fix depending on what is wrong.

  • New: UE no longer scans for .uplugin files for platform extensions where there is no support for the platform compiled into the editor. This helps with build machines that don't have NDAd platform support that makes precompiled binaries, but users sync those platforms so they have the .uplugin locally. We鈥檝e also added a FDataDrivenPlatformInfoRegistry::HasCompiledSupportForPlatform() function that can be used in other places to detect if a platform has been compiled or not.

  • Improvement : Platform extension changes:

    • Now uses <Option> to expose a command-line option enabling the platform.

    • This restores original command line args to existing platforms.

    • Test that platform is enabled in each of the macros defined so that the base script doesn't need knowledge of what platforms are enabled.

  • Improvement: Performed a big code reorganization for PlatformExtensions (Engine/Platforms/" and Restricted (for instance, Engine/Restricted/NotForLicensees/" and Engine/Restricted/NotForLIcensees/Platforms/" . This is to prepare a cleaner p4 permissions structure in UE5. Projects can also have a Platforms directory to put platform specific files into, but it is not required you re-layout your directories to match.

  • Deprecated: Removed deprecated GetUniqueDeviceId() from UE4. GetDeviceId() now returns an empty string on un-implemented platforms, instead of falling back to GetUniqueDeviceId(). This would end up returning a constant MD5 hash of an empty string on platforms that don't implement GetMacAddress(). GetHashedMacAddressString() will now return an empty string if the MAC address is not implemented on the platform.

  • Removed: Deleted fake XXX platform extension.

All Mobile

  • Bug Fix: Changed IntelISPCTexComp to use 6x6 for ASTC normalmap compression.

Android

  • Bug Fix: Fix to create video track info if unable to run media extractor (usually network streams),

  • Bug Fix: Corrected calculation of OBB per file cost.

  • Bug Fix: Fixed a crash in AndroidMovieStreamer if no PAK files to search. We also fixed the same issue in AndroidMediaPlayer.

  • Bug Fix: Addressed a handle exception that can occur when attempting to clear keyboard focus after having used autocomplete.

  • Bug Fix: Disabled --gc-sections on link if not compiling with -ffunction-sections and -fdata-sections for Android.

  • Bug Fix: Ensured android java restarts only happen from the UIThread. Fixes possible race conditions in which startActivity could create the new activity in the same process as the outgoing activity and then exiting process.

  • Bug Fix: Fixed a bug when GameThread will be displayed as Thread-2 and UI Thread will be displayed as "MainThread-UE4" in Android Studio.

  • Bug Fix: Added support for Android SDK Cmake for building PhysX for Android.

  • Bug Fix: Fixed incorrectly configured GL shader programs when an evicted binary program is restored from the BSS cache.

  • Bug Fix: Disabled autofill manager in GameActivity to prevent Android 10 crash.

  • Bug Fix: Performed an update to correctly track OpenGL resources in ELLTracker::Platform.

  • Bug Fix: Disabled WRITE_EXTERNAL_STORAGE permission if not needed (shipping and externalfilesdir enabled).

  • Bug Fix: Linking a compute shader will now print an error message only in Debug Android builds.

  • Bug Fix: Fixed random memory corruption when using BP arrays on Android armv7 platform.

  • Bug Fix: Enabled universal APK by default for Android. Bundles still need to be enabled for this to take effect.

  • Bug Fix: Fixed an issue where enabling Vulkan validation layers would cause a crash on Android devices

  • Bug Fix: Fixed an app crash when exporting a texture through 'Export to Disk" BP node on Android.

  • Bug Fix: Fixed inverted scene captures with Android GLES RHI. The "Disable Flip Copy GLES" option added in 4.25 introduced this regression as the flag was being treated opposite to what was intended. The 4.26 behavior is now the same as 4.24.

  • Bug Fix: Fixed crash that could occur when invalid memory is encountered during stack walk.

  • Bug Fix: Released a fix for an Android build issue where gradle was being run even if the apk was up to date due to some incorrect file paths.

  • Bug Fix: Changed android physical memory usage reporting on Android 10+ to use VmRSS. This is due to getProcessMemoryInfo only updating once every five minutes with Android 10.

  • New: UE will now report an error if x64 or x86 is the only platform and in binary build.

  • New: Added Android Vulkan frame pacer to support switching native display refresh rates.

  • New: Added the a.SupportNonVSyncMultipleFrameRates console variable to support CPU-based frame pacing to target frame rates that are not a multiple of any available vsync rates.

  • New: Added Android Platform support to query available screen refresh rates, and to set the current screen refresh rate.

  • New: Updated Network Changed Manager to provide network connection type. The Network Changed Manager is the best place to know what kind of connection type we have. This change introduces a Network Transport Type enum provided in the On Network Available callback of the Network Connectivity Client. The callback is called any time the transport type changes.

  • New: Added more UPL plugin injection points for Android Activity and Application.

  • New: Exposed memory warning state received from Google's MemoryAdvice library to CSV profiler as an integer value. This graph can be found under Android Memory section in your CSV report. This library might not be reliable on certain devices and it's output should be used as a guideline, not a hard rule. The warning state integer can have 3 states:

    • 0 (OK)

    • 1 (Approaching memory limit)

    • 2 (Critical, application can be OOM killed any time).

  • New: Added support for Texture2D arrays in OpenGL.

  • New: Exposed Android CPU Temperature (STAT_CPUTemp) and Thermal Status (STAT_CPU_ThermalStatus) to Unreal Insight and CSV profiler. In Unreal Insights these stats can be found under STATGROUP_AndroidCPU. In CSV reports these stats can be found under "Android Thermals".

  • New: Cleaned up OpenGL ES implementation and based it on ES3.1 spec. NDK minimum version is set to 21 (link against libGLESv3.so ).

  • New: Added option for up to 2 overflow OBB files if Patch OBB enabled.

  • New: Added GL RHI support for creating VB/IBs WithoutNativeResources and switching of VB/IB underlying resources. Required for mesh lod streaming support.

  • Improvement: LibPNG has been updated to version 1.6.37.

  • Improvement: FreeType 2 for Android has been updated to version 2.10.4.

  • Improvement: libsndfile has been updated to version 0.1.9.

  • Improvement: Shader models that are not compatible with Mobile feature levels will now fallback to a default shader model and display a warning in the console log. In the Defaults for your material, you can set the Shading Model to From Material Expression to add a Shading Model pin to the output node. You can then use a Feature Level switch to control the Shading Model.

iOS

  • Bug Fix: Fixed a crash in FIOSInputInterface::SendControllerEvents due to a call to UIInterfaceOrientation from the game thread

  • Bug Fix: Removed FullHDR as a reflection capture format on iOS. This prevented full hdr data from being stored in cooked data then discarded after load, which was causing memory spikes on load.

  • Bug Fix: Adjusted compression on iOS to fallback to a supported format instead of leaving texture uncompressed when compression is set to a BC7 format.

  • Bug Fix: Fixed an iOS GPU crash when PostProcess material uses a custom stencil while project sets r.CustomDepth=1.

  • Bug Fix: Fixed an issue where AnimSequence assets in DLC packages could not be correctly loaded on iOS.

  • Bug Fix: Fixed an iOS GPU crash when doing scene captures with MSAA enabled.

  • Bug Fix: Fixed a number of minor issues to enable the use of the Address Sanitizer with iOS.

  • Bug Fix: Added a fix for UObject invocation on non-game thread which could cause a race condition or crash.

  • Bug Fix: Added a device profile for TVOS that inherits AppleTV settings.

  • Bug Fix: [IOS] Added a check if the bundle exists before trying to copy manifests. This prevents an error being displayed in the log before staging.

  • New: Added a batch file in Engine\Extras\iTunes that will set the required file permissions to allow Unreal Engine to communicate with iTunes installed from the Windows Store.

  • New: Added code to hide the white bar indicating where to swipe the Home gesture on iPhone X and later devices.

  • New: Added Multi User support on tvOS.

  • New: Removed iOS 6 to 11 references, made iOS 12 minimum support iOS version, and added iOS14.

  • New: Removed ios 11 support and set ios 12 as default in webauth.

  • New: Fixed deprecated behavior of Menu button on iOS and tvOS.

  • New: Modified how provisioning profiles are selected for signing of IPAs on iOS. Newer profiles are now checked first by sorting the complete profile list into descending order based on creation date. This addresses the issue where people can recreate a profile (for example, by adding a new device or changing entitlements), reimport it, and still have the old profile be selected because the older file was returned first by EnumerateFiles.

  • New: Added device profile detection support for iPhone 12, iPad Air 4 and iPad 8 devices. Mapping of the iOS hardware string (such as "iPhone13,4") to a specific device profile is now performed using regular expressions in the [IOSDeviceMappings] section of BaseDeviceProfiles.ini for easier updating.

  • New: Added a setting to the ARKit plugin that allows projects to choose whether they may only be installed on ARKit-compatible devices. The setting is True by default (requiring AR capable devices) which is the existing behavior, and because apps can remove hardware requirements like this in updates but not add them.

  • New: Removed arm64 references as they鈥檙e now the only supported architecture on iOS

  • New: Added support for the Metal Compiler Tools for Windows, and modified the hash key to be based on the compiler version instead of the Xcode version.

  • New: Attempting to bind a memoryless texture is now a hard failure.

  • New: We鈥檝e moved all code into the .text segment on ARM.

  • New: Changed the memory statistics to use the OS jetsam values for determining total memory available.

  • New: Removed internal argument buffer emulation. This saves about 1.7MB on average under heavy load.

  • New: We now triple-buffer dynamic and volatile allocations. This pushes all transfer buffers (for platforms that use a staging buffer to blit into private buffers) into a short-lived frame allocator pool.

  • New: Memory usage is now obtained via usage of IOS 13 API, os_proc_available_memory(). This provides more accurate accounting of the memory left until being jetsamed.

  • New: Addied iPad Pro 2020 device profiles (12.9 and 11).

  • New: We now allow the use of presentAfterMinimumDuration Metal API to smooth out the framerate on IOS.

  • New: [IOS] We鈥檝e rebuilt IPhonePackager with new code to support Apple Development and Distribution certificates.

  • New: [IOS] Added support for Apple Development and Distribution certificates.

  • Improvement: Performed code cleaning and an overall refactor of ios14 and tvos14 input interface requirements (glyphs and current controller feature).

  • Removed: The Apsalar plugin has been removed. It had been relying on a deprecated SDK and APIs and had been non-functional for some time.

Linux

  • Bug Fix: Implemented GetWindowUnderCursor for Unix Platform.

  • Bug Fix: Updated README.md for Linux build.

  • Bug Fix: Fixed SegFault in source filtering and notification manager when closing QAGame Clear RegionalLists at pre-exit instead of during global dtor when many objects / modules have been freed. Call RemoveAll on FilterCollection->GetSourceFilters updated in PreExit instead of global dtor when many objects / modules have been shut down.

  • Bug Fix: For Unix, fixed FUnixPlatformMemory::GetStats() that always returned 0 when memory was over 10.24gigs.

  • Bug Fix: UE no longer hard codes c14 in LinuxToolchain as the default c standard.

  • Bug Fix: Added SP_OPENGL_SM4_REMOVED to IsDeprecatedShaderPlatform(). This fixes assert when getting shader stats (called from FShaderCookerStats::Initialize).

  • Bug Fix: Added error messagebox when vkGetPhysicalDeviceSurfaceSupportKHR fails (no present support).

  • Bug Fix: For Linux Vulkan, fixed amdgpu mesa crash where drawinstance call is outside render pass enabling shader complexity view.

  • Bug Fix: Update translucent rendering fix to use BeginRenderingTranslucency.

  • Bug Fix: Honor UE4's Mono-build environment using Build.sh .

  • Bug Fix: Fixed BC6H/BC7 texture formats not being available for Linux.

  • Bug Fix: Fixed submenus closing causing main context to close.

  • Bug Fix: Fixed focus issue where Windows with never activate policy were being set to active.

  • New: Updated Linux SDL2.0.10 to SDL2-2.0.13-13784. Also we removed Epic opengl and emscriptem changes. Source snapshot for SDL 2.0 (Updated Wed Apr 29, 2020) https://www.libsdl.org/hg.php .

  • New: Enabled ssse3 by default for Linux x86.

  • New: Build ShaderConductor for Linux Script now uses v16 Clang 9.0.1, and works around incorrect llvm-tblgen location. This also adds declspec guid -fms-extensions for build error.

  • New: Updated Linux SDL2.0.10 build files to SDL2-2.0.13-13784.

  • New: Added support for multithreading in forked processes. Use -PostForkThreading when SupportsMultithreading() is false to allow multithreading in forked processes. Forked processes do not inherit threads from the master, so this keeps the master process in single thread mode but transforms the RunnableThreads into real threads on the forked version. Use FForkProcessHelper::CreateForkableThread to use this feature. ForkableThreads will behave correctly according to the environment they are called in (singlethread, multi thread, forkable). SyncEvents created in -PostForkThreading environments are real events on the master process (Win, Unix platform only).

  • New: Added TaskGraph.ForkedProcessMaxWorkerThreads cvar to directly control the number of worker threads spawned on forked processes that enable multithreading.

  • New: TaskGraph can now be multithreaded on a forked server with -PostForkThreading. To do this the TaskGraph needs to be shut down and recreated entirely by the forked process for the switch to occur. The functionality can be disabled via "TaskGraph.EnableForkedMultithreading 0" if needed.

  • New: Linux AArch64 libs for FreeType2 v2.10.0, ICU 64.1, and HarfBuzz 2.4.0 now include BuildForLinuxAArch64.sh cross compilation scripts. This also adds LinuxAArch64 back to installed engine builds.

  • New: Added bGdbIndexSection bool to LinuxToolChain.

  • New: Changed default linux directory permissions to 775 from 755 to make working with them easier.

  • New: You can now use msbuild in mono for Linux when using an installed copy and mono >= 5.0.

  • New: Linux directory watcher optimizations and fixes for cases where we鈥檙e running with "virtual" layers in the platform file (i.e. pak files).

  • New: Added a skip linux UE4_DO_ROOT_PRIVILEGE_CHECK check for programs.

  • New: Updated to new LLVM V17 Clang 10.0.1 toolchain.

  • New: Moved to using llvm-objcopy for objcopy and strip.

  • New: Installed Linux builds now assume a bundled toolchain.

Mac

  • Bug Fix: Fixed build for Xcode 12.1.

  • Bug Fix: Updated Mac Chromium Framework binary with a version that fixes a crash on macOS 10.15 Catalina. This was caused due to CEF's use of TSM API outside of the main thread.

  • Bug Fix: Fixed flickering decals in mobile preview.

  • Bug Fix: Changed Mac toolchain to use relative paths where possible when linking. This solves the "Argument list too long" error during linking.

  • Bug Fix: Released a fix for a Metal validation failure. In MetalStateCache, make sure that the color attachment's slice is always set to 0 for 3D textures, as they don't support rendering to multiple slices.

  • New: Updated third party binaries required to support the majority of Mac client targets targeting Apple Silicon.

    • Remember that Steam SDK does not have an ARM64 slice and will not link to an ARM64 or fat target.

  • New: The minimum macOS version required has been rolled forward to Mojave 10.14.

  • New: Removed internal argument buffer emulation.

  • New: Updated FMacPlatformProcess::GetDllHandle() to accommodate macOS 11 Big Sur.

  • New: Enabled Metal RHI runtime virtual texture support.

  • New: Fixed an error adding Android tools to path in the SetupAndroid.command shell script.

  • New: Added support on Mac and Linux for user-defined .unrealrc files that allow developers to specify environment variables for UBT and UAT scripts. .unrealrc files in the home and the workspace directory will be applied before the editor, UnrealBuildTool, UnrealAutomation tool, etc are run.

  • New: -Wno-range-loop-analysis is now set when building iOS / Mac with Clang 12.0.0 or higher (Xcode 12.00). This should prevent warnings when ranged loops use copies and not references. Note that all instances have been fixed up, the warning is disabled as these issues are easily introduced but only Clang on Apple platforms currently warns about them.

  • New: Removed VR support for Mac. No longer supported and not compatible with current/future Mac updates.

  • New: Improved the GPUBenchmark accuracy on Mac.

  • New: Enabled MacClient target platform on windows.

Steam OS

  • Bug Fix: Changed the desc status for hidden in the Steam achievements query.

VR

  • Bug Fix: Fixed a bug where Windows Mixed Reality hand joint transforms were always returning an invalid radius.

  • Bug Fix: Fixed a bug where the VR Mode Vive touchpad was not scrolling smoothly.

Windows

  • Bug Fix: Fixed FWindowsPlatformProcess::GetPerFrameProcessorUsage to work with more logical cores.

  • Bug Fix: Fixed handling of UNC paths on Windows.

  • Bug Fix: Fixed a bug in ShaderPipelineCache commandlet that was making it generate too many PSO permutations on D3D12

  • New: Clang builds on Windows now build with the -mssse3 flag to match Visual Studio 2019 SSE support.

  • New: Made FD3D12GPUFence available externally.

  • New: Changed the File|Package menu for Windows to only show 32 or 64-bit options, based on the bTarget32Bit Windows project setting. It now won't cook with Win64 but run with Win32.

  • New: Made ProjectLauncher/UnrealFrontend/LaunchOn respect the Target32Bit windows project setting.

Rendering

  • Crash Fix: Fixed a crash that occurred when resizing a UTextureRenderTarget2D with autogenerate mips enabled.

  • Crash Fix: Corrected a startup crash that occurred when -disable-platform-chunk-install was enabled

  • Crash Fix: Implemented a fix for a rare crash, which happens for users with multiple adapters, where not all of them support ALLOW_TEARING.

  • Crash Fix: Vulkan: Fixed the handling of FRHITextureReference. This corrected a crash which occurred when importing UDIM textures.

  • Crash Fix: Corrected a crash that would occur if a game started up in a specific mode, and clicked in another window. This would cause DXGI_ERROR_INVALID_CALL, which would cause the engine to halt.

  • Crash Fix: Fixed a crash on certain platforms when running with "-onethread" caused by incorrect reference counting in FSlate3DRendering.

  • Crash Fix: Fixed a crash in the Hierarchical Instanced Static Mesh of Mesh with MinLOD set to 1 or higher.

  • Crash Fix: Fixed a potential crash in Sky Light when attempting to dispatch CDF compute shaders before the shader map was ready.

  • Crash Fix: 64bit math is now used for calculations when building large streaming virtual textures, which prevents crashes from 32 bit overflow errors when building the textures; out of memory errors during texture compression for 64K textures remain possible.

  • Crash Fix: Fixed a crash that occurred during ClearUAV in OpenGL ES due to the UnrealFormat being set incorrectly in the constructor of the FOpenGLStructuredBufferUnorderedAccessView.

  • Crash Fix: Fixed a crash on macOS when setting the budget too high.

  • Crash Fix: Fixed a crash when a texture was not null but the internal referenced texture was. This was handled individually by some RHIs but now it is managed at a high level.

  • Crash Fix: There will no longer be an attempt to add shader virtual paths if shader compilation was disabled on the command line. This avoids some crashes in editor builds that don't have a shader source.

  • Bug Fix: Fixed cloud interaction with opaques being biased by back and forth deviceZ/linear depth transform. Also unified the code and tested translucent rendering and intersection when using Translucent.ScreenPercentage < 100.

  • Bug Fix: Now uses the same reflection environment shader permutation for deferred reflections as for SSR. Fixes deferred reflections on clear coat materials.

  • Bug Fix: Fixed leaking frametempmemory in Vulkan.

  • Bug Fix: For the Pixel Streaming Signaling Web Server, add an error code for the disconnect player event.

  • Bug Fix: The DeviceRemovedReason is now logged to verify the device has not been hung.

  • Bug Fix: Vulkan textures created with TexCreate_CPUReadback are now created as buffers. This allows for support for mip levels on hardware that does not expose this feature. Added basic Transitions to LandscapeEditoLayers, so it passes validation.

  • Bug Fix: Fixed an issue with resource barriers being nonsense. Corrects an issue with subsurface scattering not working correctly on AMD.

  • Bug Fix: Added fixes to RendererScene.cpp.

    • Fixed sublevel loading.

    • Fixed a crash bug in the shadow generation code.

    • Added a missing FMemMark in FAsyncCreateLightPrimitiveInteractionsTask.

  • Bug Fix: Fixed deferred reflection reflection capture compositing on ray miss.

  • Bug Fix: Fixed an issue in DX11 RenderTarget binding. When Pixel Shaders write to a variable number of render targets within a pass and use UAVs, they end up overwriting bound RTVs. This caused issues with Objects -not- writing in the subsurface gbuffer, but binding a UAV for Virtual Texture feedback. This would leave the subsurface gbuffer unbound.

  • Bug Fix: Fixed the mGPU visibility mask when initializing FD3D12ResourceAllocator and FD3D12FastAllocator.

  • Bug Fix: Vulkan: fixed Uniform buffer allocations being released too early during the first few frames.

  • Bug Fix: Vulkan: Fixed leaking Pipeline and RenderPass objects, which occurred when multiple threads were creating objects with the same hash. Corrects a Vulkan validation error VUID-vkDestroyDevice-device-00378. The Renderpass fix was reapplied to work post barrier refactor.

  • Bug Fix: Fixed a bug with HDR UI composition where the render target was not being cleared if there were no slate render batches, leaving stale data when there are no UI elements on screen. This caused a black screen in ShooterGame.

  • Bug Fix: Vulkan UAVs now all get identity swizzle, as this is the only thing supported. This fixes a validation error.

  • Bug Fix: Fixed per-vertex lighting in forward shading when separate ratio is not 100.

  • Bug Fix: Fixed the issue causing the PVS-Studio Warning: CanvasRenderTarget Pointer Utilization Before Being Verified Against NullPtr.

  • Bug Fix: Added a dummy back buffer texture which is used to bind the current back buffer on the RenderThread.

    • On the RHI thread the actual current back buffer texture is retrieved from the viewport.

    • Removed the independent RenderThread and RHIThread back buffer index which might not be incremented in sync causing DXGI errors and lost device issues.

    • The expected back buffer index is still used to inform the mGPU what GPU will be used for the present, this is kept in sync when the present will be skipped.

  • Bug Fix: Re-enabled the GetDynamicMeshElements path in FInstancedStaticMeshSceneProxy for test and submission builds which was previously incorrectly disabled. This fixes a bug which prevented instanced Static Meshes with dynamic relevance from rendering.

  • Bug Fix: Fixed an issue with the D3D12 Query heap with a dangling resource on outstanding queries after a heap resize, and fixed the outstanding open query count to track if it's from the current active heap.

  • Bug Fix: Rendering editor selection for mesh batches without a PrimitiveSceneProxy is now prevented.

  • Bug Fix: Fixed a potential race condition when trying to render data that was not ready yet.

  • Bug Fix: Added an EndFrame and BeginFrame when performing garbage collection on slow running tasks (using the increment frame fence value which can currently be used to track internal resource lifetime). This corrects the out of memory error on D3D12 when exporting animations and other long running tasks.

  • Bug Fix: Fixed Vector Field debug visualizations.

  • Bug Fix: Fixed painted vertex loading in the Editor's -game mode.

  • Bug Fix: Fixed buffer visualization for the Overview rendering mode.

  • Bug Fix: Fixed an issue with transparent/translucent materials when forward shading is enabled and r.SeparateTranslucencyScreenPercentage is not 100.

  • Bug Fix: Fixed arrow perspective scaling when its origin is behind the view camera.

  • Bug Fix: Updated the RenderDoc plugin to support executables from RenderDoc 1.0 or higher.

  • Bug Fix: DirectX RHIs now fully supports MSAA textures.

  • Bug Fix: Fixed the UStreamableRenderAsset::IsTextureFullyStreamed not taking into account LOD Bias

  • Bug Fix: The loading of resolutions added by Dynamic Super Resolution now operates correctly.

  • Bug Fix: Pre-exposure for debug visualization modes now works correctly"

  • Bug Fix: Fixed issues with ByteAddressBuffers not calculating the correct offsets and sizes.

  • Bug Fix: Fixed MSAA on Vulkan.

  • Bug Fix: The overlay menu button will now transition on click from + to x when the menu is opened / closed.

  • Bug Fix: Fixed potential race condition when trying to render data that was not ready yet.

  • Bug Fix: Corrected a malfunction caused by Pixel Streaming always assuming a physical mouse would be attached, even when running on a cloud machine or in Windows session 0 with no physical mouse. The bPixelStreamerMouseAlwaysAttached setting can override this behavior.

  • Bug Fix: Fixed pre-exposure for convolution bloom in scenes with physical light ranges.

  • Bug Fix: Fixed the pipeline cache file GUID reporting in OpenPipelineFileCache.

  • Bug Fix: Fixed CleanUpWorld to release resources when closing an editor window. This prevents leaking of two things: RenderTargets, which are referenced in uniform buffers, and particle buffers from FXSystems.

  • Bug Fix: Delayed deletion of all buffer objects. This fixes a rare GPU corruption issue that occurred when buffer memory was reused.

  • Bug Fix: GeometryCacheSceneProxy now correctly marks lighting channel view relevance.

  • Bug Fix: Fixed the HLSLcc shader compilation by correcting ensure logic in ir_visitor_status visit_enter. Previously, the ensure logic may have triggered incorrectly, this has been remedied.

  • Bug Fix: Fixed the stat drawcount command for D3D12.

  • Bug Fix: Fixed a typo, the initial layout transition wasn't actually using the intended layout type

  • Bug Fix: Removed a redundant editor primitives mesh pass.

  • Bug Fix: Fixed an issue where custom depth meshes were using stale GPUScene data.

  • Bug Fix: Fixed issues with the clear coat shading model, in order of severity:

    • Removed energy normalization on the diffuse contribution.

    • Removed dependence on negative NoL and NoV when computing transmission.

    • Modified SphereSinAlpha to account for top-coat and bottom-coat roughness when using spherical area lights.

    • Eliminated the glossy contribution of bottom-coat for clear coat dielectric materials (noting that IOR ratio (Eta) approaches 1.0).

  • Bug Fix: Fixed an issue with indexbuffer and vertexbuffer views being created incorrectly when using WHOLE_SIZE.

  • Bug Fix: Corrected a Vulkan validation error when the VkBufferViewCreateInfo range does not equal VK_WHOLE_SIZE.

  • Bug Fix: The CommandBuffer reset now happens on reallocation instead of on-demand when updating fence. This fixes an issue where the VkCommandBufferPool was accessed from two threads.

  • Bug Fix: Fixed issues with sampler initialization for a Texture2DArray assets.

  • Bug Fix: Added missing Vulkan pixel formats.

  • Bug Fix: Fixed two validation issues in Vulkan caused by the Track Editor Thumbnail.

  • Bug Fix: Added a heuristic PSO cache sanitization (based on hardcoded knowledge).

  • Bug Fix: Fixed an issue with InOutMask for vertex shaders missing bits when there are arrays in Vertex Input semantics. Fixes the following validation error: UNASSIGNED-CoreValidation-Shader-InputNotProduced: Vertex shader consumes input at location 6 but not provided #review-14610138

  • Bug Fix: Fixed Vulkan command buffers being freed without waiting for them to finish first.

  • Bug Fix: Fixed an issue with automatic resource transition based on bindings, but binding to several slots.

  • Bug Fix: Fixed a Vulkan validation error for depth attachments (which can't have swizzling).

  • Bug Fix: Fixed an issue with bloom application in splitscreen. PostProcessTonemap.usf now properly accounts for a restricted ViewRect on the bloom input texture.

  • Bug Fix: Fixed out-of-bounds access in CalcSkyLightPdf and PdfSkyLightOcclusionRay due to both sides of the ternary operator always being evaluated in HLSL.

  • Bug Fix: Changed the PSO cache file to be smaller and easier to patch by removing redundant GUIDs.

  • Bug Fix: Fixed a GPU memory corruption in D3D12 that could happen when a FD3D12FastAllocatorPage is used from the RHI thread but then recycled from FD3D12FastAllocator::Allocate on the Render thread. The wrong fence value could end up being used to detect when it's safe to re-use the page. Occasionally this could result in pending vertex or index buffer uploads being overwritten by the CPU before they are consumed by the GPU, leading to severe visual artifacts.

  • Bug Fix: Fixed broken occlusion for planar reflections.

  • Bug Fix: Made sure the parent directory is created for the PSO cache file.

  • New: Made PSO hashes consistent across sessions so the specific PSO from a crash log can be identified for debugging.

  • New: The -d3ddebug status is now always indicated in the log.

  • New: Dumping shader debug info only on compilation errors or warnings is now supported. Valid settings for r.DumpShaderDebugInfo are now 0-3

    • 0 - Don't dump (unchanged).

    • 1 - Always dump (unchanged).

    • 2 - Dump on error (i.e. compilation failure).

    • 3 - Dump on generated errors or warnings.

  • New: Added two-sided foliage material to the path tracer, and applied energy conservation to the throughput. Currently, this uses diffuse transmission instead of rough transmission.

  • New: Added a reflection pass switch node. This is useful to tweak visuals for less volumetric clouds details according to the sample count in reflection capture, for instance for the sake of performance.

  • New: The barrier command list build and execute command list are now performed via a task to offload the RHI Thread:

    • Use a special fence which has a pending fence value while the task is running which can be used to get the 'correct" future fence value used for resource deletion and such.

    • Multiple places in the code now need to force the execute task to wait in order to make sure that the execute command list has happened on the device.

  • New: Refactored Global view heap code to use a global heap from which blocks can be allocated at fixed block sizes.

    • Block size can be controlled via D3D12.GlobalViewHeapBlockSize console variable (2000 default).

    • The fallback to the threadlocal heap is now really a very rare case and should be considered invalid (still supported as is, no changes done for that heap).

  • New: New pools depending on creation flags can now be created on the fly.

  • New: Added support for single-state resources (can be any state - even UAV and internal tracking is disabled for those resources).

  • New: Apply pow 2.2 on Roughness (the same as done by the BufferVisualization/Roughness engine material graph).

  • New: Added support for Intel hardware with non-local memory.

  • New: Added DX11 support for EnumAdapterByGpuPreference; this allows for OS-assisted selection of GPU use preferences.

    • Use -gpupreference=1 to set a preference for minimum power use

    • Use -gpupreference=2 to set a preference for highest performance.

    • The default value is 2.

    • Any other value causes the feature to fallback to the older code.

    • Also upgraded DXGI to the latest version.

  • New: Now allows optional per-vertex offset pre/post skinning to be applied to Skeletal Meshes. This is a temporary solution for applying correctives to animations.

  • New: Added tracking code to help debug memory leaks from Vulkan objects. Disabled by default. Use r.vulkan.dumpmemory to dump when enabled.

  • New: Refactored the scene texture uniform buffer to use RDG resources.

  • New: Added the -noexceptionhandler command line parameter. This allows the use of JIT debugging.

  • New: Applied D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX to the index buffer and texture.

  • New: Added support for VK_KHR_image_format_list, VK_KHR_shader_atomic_int64 and VK_KHR_driver_properties support for Linux; added gpu crash extension support on Linux for AMD and NVIDIA.

  • New: Moved GPixelFormats from the RenderCore to RHI module.

  • New: Replaced the compile time GD3DCheckForTypedUAVs toggle in D3DShaderCompiler.cpp with a console variable (r.D3D.CheckedForTypedUAVs) so the restriction on using typed UAV loads can be lifted if a project's minimum spec. is higher than the Windows 7 D3D11.0 feature level.

  • New: Added the PreExposure value to HDR visualization.

  • New: Added support for ATI1 texture format being interpreted as BC4

  • New: Optimization of excluding Separate Translucency Pass when no translucent objects are rendered.

  • New: For Pixel Streaming, the -PixelStreamingHideCursor command line option will make the cursor invisible in UE4. This should be used when you want the cursor to be shown only by the web-browser.

  • New: Added support for NV Aftermath on Vulkan via -gpucrashdebugging, and corrected AMD_buffer_marker not being enabled.

  • New: Updated Vulkan headers to 1.2.141.2.

  • New: Text3D: Added support for Arabic cursive writing.

  • New: Swapped the Bcrypt node module to the native .js version, and added npm console commands to ease usage.

  • New: Added support for BUF_Shared on D3D11

  • New: Ported custom depth/stencil rendering to RDG.

  • New: Ported Screen Space Ambient Occlusion and Ground Truth Ambient Occlusion to Render Graph.

  • New: Added the '-ForceAsyncCompute" command line option to force the D3D12 RHI to think the GPU is optimal for Async Compute.

  • New: Implemented DRED 1.2 support. Changed the DRED log to only show command lists that were partially completed (partial log up to the last completed command).

  • New: PixelStreaming: Added the MinBitrate console variable, that makes PixelStreaming ignore the video encoder bitrate recommended by WebRTC if it drops below the MinBitrate value. Can be useful to sacrifice interactivity for better video quality on low-bitrate connections. Disabled by default.

  • New: Added RDG_CSV_STAT_EXCLUSIVE_SCOPE / RDG_CSV_STAT_EXCLUSIVE_SCOPE_CONDITIONAL and cleaned up exclusive CSV tags in the deferred renderer. Added the 'r.RDG.VerboseCSVStats" console variable which toggles verbose CSV stats for the different phases of RDG itself. This restores CSV timings back to their original domains instead of being absorbed into the monolithic RDGBuilder_Execute tag.

  • New: Merged GPU skinning vertex factories for 4 and 8 bone influences into a single factory with branches inside a vertex shader. This reduces the total number of shaders generated for Skeletal Mesh materials.

  • New: Implemented a templated version of IMPLEMENT_VERTEX_FACTORY_TYPE_EX for templated Vertex Factories.

  • New: Updated Vulkan sdk to 1.2.148.2.

  • New: Implemented draw call counters into RDG stat scopes. This fixes missing RHI draw calls for mesh passes in the CSV profiler.

  • New: Integrate AMD QueryVideoMemoryInfo, this time with a fix for pre-GCN hardware.

    • This fix was implemented because when true, IsRHIDeviceAMD can indicate either integrated graphics or a discrete GPU.

    • The budget calculation comes from the OS via IDXGIAdapter3, falling back to the original calculation method if the interface for IDXGIAdapter3 does not exist (e.g. on Win7).

    • This update also includes a fix for old, pre-GCN cards used on Win10.

    • The QueryVideoMemoryInfo call can fail even though the QueryInterface for IDXGIAdapter3 succeeded, in which case, the system also falls back to the original calculation method.

  • New: Changed DX11 RT/UAV hazard detection to use UAV bind information instead of RTV bind information.

  • New: Added support for static samplers for D3D12 shaders compiled with DXC for PC (such as ray tracing shaders).

  • New: Text3D: Added support for creating outline text.

  • New: FRenderQueryPoolRHIRef is no longer used for fencing because it's not thread safe - one query is allocated and freed at a time.

  • New : Added defragging in the Vulkan memory subsystem:

    • Performed a partial defrag in an attempt to free up pages to release.

    • Free Pages are now kept in the Memory Manager, and the actual suballocators are no longer kept around; they are now freed after a while.

    • Added a bucket system for allocations, which covers the bucket system previously used on Android; Desktop platforms now also use buckets of less than two megabytes and less than sixty-four megabytes.

  • New: Reintegrated the new NvAftermath version which supports GPU Crash minidumps which now contains DXGI loading fixes for Win7 support.

  • New: The Global Shader Cook Commandlet now allows you to cook an override shader file that can be hot reloaded while the target is running.

  • Improvement: Cleaned up the Vulkan Memory System:

    • CallStackHandling has been rewritten; the new code defers symbolization (making it much faster), and it is now possible to enable it using a runtime parameter since it's now always enabled in the callstack code.

    • Vulkan memory classes have been merged.

    • All Vulkan allocations now have a meta tag.

    • The command "vulkanmemory stat" shows allocations per meta tag.

    • The command "vulkanmemoryraw stat" shows stats for heaps.

    • The memory dump output now gives a better overview over where memory is being used.

    • Vulkan memory allocations are now defer-deleted by default. Subsystems that don't need this can opt out (Uniform Buffers).

    • All Vulkan allocations now go through FVulkanAllocation. This class is intentionally not reference counted.

    • Some options that used to be hidden in definitions are now console variables so that they can be used and tested on all platforms.

    • The Vulkan memory system now supports an experimental automatic eviction of textures when running low on memory. Only non ray-traced, non UAV textures can be evicted. Currently, once evicted, textures are never promoted back to host.

    • The frame delay for freeing resources is now unified for all platforms (at 3, and no longer 10 for Desktop).

    • The fake memory limit is now controlled using a console variable that can be changed at runtime (in non-shipping builds). It now properly counts only memory on the primary host heap.

    • Corrected an issue with FXSystems which would leak when opening and closing the Material Editor.

  • Improvement: Improved logging when processing and loading the shader pipeline cache.

  • Improvement: Replaced check with a verbose error message in ExpandPSOSC.

  • Improvement: The Vulkan LLM now tracks spare and render target memory.

  • Improvement: Overlapping of draws or dispatches on D3D11 is now enabled by default, and UAV transitions determine when the next draw or dispatch shouldn't overlap the previous due to a UAV hazard (other types of hazards are still handled automatically by the driver in D3D11).

    • The BeginUAVOverlap /EndUAVOverlap functions now only affect the RHI validation layer. UAV validation is disabled between calls to these functions, so they should be used sparingly.

    • New overloads which take a UAV pointer (or array of UAV pointers) can inform the validator that specific UAVs are safe to access concurrently and don't need a transition. These overloads should be used whenever possible to allow the validation layer to still warn about missing transitions on any other UAVs used by the shader.

  • Improvement: Refactored the buddy allocator system for dynamic pool count.

  • Improvement: 2 frames of FrameLag are used before deleting unused buffer allocated pages.

  • Improvement: Removed some log spam for when virtual texture page allocation fails, and added a stat counter to keep track of failure occurrences.

  • Improvement: Corrected the range on the low clamp for basic eye adaptation to account for pre-exposure.

  • Improvement: Optimized the ISM culling structure to avoid transforming them at each frame, and replaced a linked list structure with a more efficient AOS.

  • Improvement: Improved the error message in the shader compiler if a shader uses typed UAV loads but they are disallowed.

  • Improvement: Renamed dxcompiler_sc.dll to dxcompiler.dll, added its .pdb file to help debugging, and ShaderConductor is now built using VS 2019.

  • Improvement: Refactored the DX12 buffer, unifying the buffer core to a single class.

  • Improvement: FReadBuffer now follows the FRWBuffer style and allows data initialization in "Initialize" as well.

  • Improvement: Updates from NVIDIA to the Ansel plugin.

  • Improvement: Performing culling and lighting is now iterated in batches of 32 lights (the previous implementation was limited to 64 lights and lacked a loop to cover the entire light list).

  • Improvement: Improved PSO init management.

  • Deprecated: Tessellation is now Deprecated.

  • Deprecated: Extend Default Luminance Range is now Deprecated

  • Deprecated: Deprecated TexCreate_DisableAutoDefrag as it's no longer used.

  • Deprecated: OpenGL is no longer supported for desktop rendering. If the -opengl command line option is used, an error message will be displayed, and Unreal will fall back to the default RHI for the platform.

Cascade

  • Crash Fix: Fixed a crash that would occur when adding LODs to a Cascade System while running Play In Editor (PIE).

  • Crash Fix: Fixed a crash in Cascade that would occur when refreshing a dynamic parameter module for a material with no dynamic parameter nodes.

  • Crash Fix: Fixed a crash that could occur when using spawn events with ribbons in Cascade.

  • Bug Fix: Fixed an issue with world time in the Cascade Preview window. This could cause odd issues with some culling features.

  • Bug Fix: Corrected an issue in Cascade SetTemplate calls on running systems.

  • Bug Fix: Fixed an issue where Cascade's High Quality lights would not respect the Spawn Fraction setting of the light module.

  • Bug Fix: Cascade GPU systems no longer submit simulation draw calls when inactive or culled by LOD.

Lighting

  • Bug Fix: Fixed an issue with a stale view uniform buffer. If "r.DoInitViewsLightingAfterPrepass 1" was enabled then UpdateGlobalDistanceFieldVolume would be called after view UB was created and cached. UpdateGlobalDistanceFieldVolume will modify view UB parameters, but previously there was no code which would re-cache view UB.

  • Bug Fix: Fixed an issue when rendering both Capsule Indirect Shadows and SSAO in the Forward renderer. Previously the SSAO would overwrite the results of the capsule shadows.

  • Bug Fix: Excluded billboards and shapes from light attachment groups.

  • Bug Fix: Fixed the temporal reprojection of the denoiser when using dynamic resolution.

  • Bug Fix: Fixed shading bugs in the path tracer for point and spot lights.

  • Bug Fix: Stopped the shadow fade-out transition at the end of CSM shadows for directional lights when there is static shadowing taking over (as blending is then done in the lighting shader).

  • Bug Fix: Fixed a bug where Spot Lights were treated as Point Lights in the Tiled Deferred shader if Specular Scale was 0.

  • Bug Fix: Fixed incorrect SSR when TemporalAA is turned off. The fix is to ensure the history buffer has the ViewportRect and ReferenceBufferSize filled in when TAA is turned off.

  • Bug Fix: Disabled the anisotropy pass for forward shading in a deferred shading class.

  • New: SunSky Actor Blueprint changes:

    • Activated Realtime capture on the SkyLight component.

    • Removed BP calls to force update SkyLight.

    • Removed an unnecessary call to the parent constructor script (the parent is "actor").

    • Removed the now-unused "UpdateSky" function.

  • New: Added r.SSS.Burley.BilateralFilterKernelFunctionType to the control screen space subsurface bilateral filtering.

  • New: Switched Burley screen space subsurface sampling sequence from Fibonacci to R2 in order to decrease noise.

  • New: Made the last cascade extend to include the near plane if r.SkyAtmosphere.SampleLightShadowmap is set and light is supporting shadows in the atmosphere or on clouds.

  • New: Changed the behaviour of ShadowResolutionScale = 0. For whole scene shadows, it disables the shadow maps and makes it possible to have contact-shadow only.

  • New: Relaxed the clamping of directional light depth ranges for cascaded shadow maps. This extends shadow ranges in large cascades, removing arbitrary shadow clipping, which is required to support shadows in atmosphere.

  • Improvement: Removed the anisotropy project setting and introduced an anisotropy pass if any object uses an anisotropic material.

  • Improvement: Contact shadows improvements.

    • Replaced the ad hoc transmission lightening for contact shadows with a subsurface falloff similar to the shadow maps path. Note that it will not match exactly since with contact shadows the occluder closest to the light is often not known, but the new logic will avoid over-shadowing subsurface transmission.

    • Added a new mesh flag for "cast contact shadows". Previously contact shadows would indiscriminately apply to all objects in the depth buffer. Now they will respect the new flag as much as possible given the information in the GBuffer.

  • Deprecated: Light Propagation Volumes have been deprecated and will be removed in a future release.

  • Deprecated: Atmospheric Fog has been deprecated. Sky Atmosphere should be used in its place.

Materials

  • Crash Fix: Fixed a crash that occurred when updating a material function used by a MID currently being edited.

  • Crash Fix: Prevent a crash if UMaterialInterface::GetParameterInfo is given a null LayerFunction, this can happen with a user-created BP.

  • Bug Fix: Fixed cook output stats to properly show savings due to sharing the material code.

  • Bug Fix: Corrected the automatic view bias not being applied to Runtime Virtual Texture samples in a material. This fixes slight blurriness for Runtime Virtual Textures in certain Temporal AA modes.

  • Bug Fix: Fixed an issue with materials not resolving Runtime Virtual Texture material parameters correctly.

  • Bug Fix: Forced UDIM textures to be built with the CLAMP address mode, to avoid seams between UDIM blocks.

  • Bug Fix: Adjusted the layout of UDIM tiles to account for the inverted V-axis when mesh data is imported into UE4.

  • Bug Fix: Virtual textures are now updated whenever a Material Instance parameter changes.

  • Bug Fix: When the r.SeparateTranslucencyScreenPercentage is not equal to 100, it will no longer cause separate translucency to be nearest upscaled instead of bilinearly upscaled.

  • Bug Fix: The Material Pow function now properly handles a Base value of 0. It will in this case return 0.

  • Bug Fix: For API, fixed the PositiveClampedPow to properly work with Base==0. This removes the max instruction but adds a conditional select instead.

  • Bug Fix: Fixed SSS specular when the checkerboard is off.

  • Bug Fix: Corrected the velocity buffer material expression when sampling geometry that is not drawing geometry.

  • Bug Fix: Fixed layer parameters being inherited from one MIC to another MIC.

  • Bug Fix: Fixed the external texture material parameters, used for media textures.

  • Bug Fix: Fixed issues caused by using Property Coloration and Level Coloration on materials with tessellation or world position offsets.

  • Bug Fix: FHashedName converts strings to upper-case before hashing, otherwise the hash depends on what particular case of a given string is first seen.

  • Bug Fix: Change order expressions are now visited while updating cached material expression data, which fixes a problem with getting correct values from parameters duplicated in multiple functions.

  • Bug Fix: Fixed a bug with FHashedName when using FNames with UTF32 TCHARs.

  • Bug Fix: Fixed a material tracking nested function dependency.

  • Bug Fix: Fixed recompileshaders command running on a target with COTF server.

  • Bug Fix: Removed canceled shader map compiled from the ShaderMapsBeingCompiled array, otherwise it was possible for a future compile request to be merged into the now-canceled compile job.

  • Bug Fix: It is no longer assumed that there are as many parent material layers as there are layers for the child.

  • Bug Fix: Introduced FMaterial::MaterialUsesAnisotropy to the MaterialCompilationOutput. This boolean is populated after compilation and saved in the compilation output (cooked & editor builds), and checked by the runtime to decide if anisotropy is used. DDC Key / Deciding whether to compile still uses the more permissive / conservative API HasAnisotropy, which returns true for MaterialAttribute nodes just in case anisotropy is actually used. This ensures all relevant shader variants are actually compiled.

  • New: Changes made to layers in a base material are now propagated to derived MIs.

  • New: Material Layers system is now enabled by default. The Project Setting has been removed.

  • New: Added an optional WorldPosition input to the Runtime Virtual Texture Sample node, allowing manipulation of sample coordinates.

  • New: Added a Blueprint API for setting layer parameters on MID.

  • New: Added a Time input to TimeWithSpeedVariable with the fallback of using the regular Time material expression to make it backwards-compatible.

  • New: Added a runtime virtual texture max mip level to view properties exposed to the material graph. This can be used along with the virtual texture mip level property for mip specific virtual texture generation.

  • New: Added the choice of WRAP or CLAMP texture address modes to the Runtime Virtual Texture Sample material node.

  • New: Added the ability to exempt certain materials from sharing code (to support chunked builds).

  • New: Added Blueprint API for setting layer parameters on dynamic material instances.

  • New: For TextureVariation, submitted a new material function to create texture UVs with variation applied to break up the tiling.

  • New: Replaced FHashedMaterialParameterInfo with FMemoryImageMaterialParameterInfo, which uses FScriptName rather than FHashedName. Names will be patched on load, but thus avoids frequent string hashing at runtime.

  • New: Fixed issues causing material DDC values to be non-deterministic.

    • Shader code within resources is now sorted by hash

    • Debug source code values are now sorted by type, also a mechanism was added to serialize any MemoryLayout described type to string.

    • This makes it easier to inspect material data to find sources of non-determinism.

  • New: Added a new material function for vector based refraction.

  • New : Added Blueprint setters for default custom primitive data.

  • Deprecated: Deprecated the RuntimeVirtualTexture material domain, and added code to auto convert materials with this domain to use an RVT output node.

Mobile Rendering

  • Crash Fix: Fixed a crash in the mobile renderer when the Sky Light cubemap resolution is less than 64.

  • Crash Fix: Fixed a crash related to reflection capture when running DirectX mobile emulation.

  • Bug Fix: Fixed brightness flickering on mobile related to eye adaptation.

  • Bug Fix: Set RGBA8 as a default backbuffer format on mobile devices. This avoids selecting HDR backbuffer formats when the device reports support for it.

  • Bug Fix: Fixed broken MobileSceneCapture when requesting HDR format.

  • Bug Fix: Fix a bug that caused the screen to be brighter on mobile compared to PC if there is a PP material whose blendable location is before tonemapping.

  • Bug Fix: Fixed shader compilation errors for materials that use certain particle properties (ParticleToWorld transform) on mobile.

  • Bug Fix: Fixed an issue where the Indirect Lighting Cache does not work correctly with multiple lighting scenarios on mobile.

  • Bug Fix: PostProcess materials will now correctly handle cases where viewport size does not match render target size on mobile.

  • Bug Fix: iOS and Android will now always use ETC compression for all Virtual Textures, ignoring project texture compression settings. This is done to avoid fragmentation of VT formats.

  • Bug Fix: Added fixes for the desktop renderer on iOS

    • Fixed inf in SingleLayerWaterComposite.

    • Added a flag to check for VertexFetch in Cloth.

    • Fixed tonemapping to use the correct color space on iOS.

  • Bug Fix: Opaque geometry will write 1.0 to the alpha channel when rendering directly to the backbuffer on mobile. This will make it easier to mask out opaque geometry in the final image.

  • Bug Fix: Fixed an issue causing black sky reflections on mobile if the scene has a non-static Sky Light actor.

  • Bug Fix: Fixed cases where toggling sub-levels visibility could lead to an incorrect precomputed Indirect Lighting in the mobile preview.

  • Bug Fix: Fixed a sRGB/Linear space mismatch for Runtime and Streaming virtual textures in the Editor mobile preview.

  • Bug Fix: Added a fix for some mobile GPUs when using Depth Read - Stencil Write.

  • Bug Fix: PostProcess materials with a blendable location set to BeforeTonemapping will now run after separate translucency on mobile.

  • Bug Fix: Fixed a bug causing rendering a black background on Tegra devices (Nexus 9).

  • Bug Fix: Removed the clamping of the light range for the receiver matrix and made it the same as the 'SubjectAndReceiverMatrix" This fixes a shadow culling bug for mobile.

  • Bug Fix: Removed a flag "D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS" which is not necessary for feature level es31.

  • Bug Fix: Fixed handling of MobileUseHWsRGBEncoding so it is correct in all cases.

  • Bug Fix: Corrected the issue of missing PreIntegratedGF textures in translucency passes

  • Bug Fix: Fixed a RGBM bug where it would not be calculated after the first buildReflectionCaptures

  • Bug Fix: Fixed the Editor GPUScene

  • Bug Fix: Corrected Niagara GPU for A10 and earlier devices.

  • Bug Fix: Corrected a GpuFence bug where RT would delete the Fence object while the RHIT was still using it.

  • Bug Fix : Reflection Capture change, fixed a check when postloading for console.

  • Bug Fix: Fixed the Encoded ReflectionCube when using old MapBuildData. The default is 16 RGBM.

  • Bug Fix: Corrected theEncoded ReflectionCube when old MapBuildData is present. It now defaults to 16 RGBM.

  • Bug Fix: Added a missing flattened material property enum that was overlooked when anisotropy was added.

  • Bug Fix: Made AO decals respect meshes that disable receiving decals.

  • Bug Fix: Handled RT bindings for decals that write or read to the normal Gbuffer.

  • Bug Fix: Corrected the blend state when the normal Gbuffer is not used during decal blending.

  • New: Added support for RHIClearUAVUint and RHIClearUAVFloat to work for TextureUAV on the OpenGL platform.

  • New: Added a '_centroid" parameter for tangentworld interpolation to have better quality and be consistent with PC.

  • New: Ported mobile postprocess to the RDG.

  • New: Implemented using a separate uniform buffer for each dynamic point light so the mesh draw commands can be cached.

  • New: Added support for alpha to coverage for masked material.

  • New: Added support for dynamic spotlight shadows for mobile

  • New: Pixel projected reflection is now supported on the mobile platform forward renderer.

  • New: Added support for Ground Truth Ambient Occlusion (GTAO) on mobile.

  • New: Added support for UMG background blur on the Android OpenGL platform.

  • New: Mali Offline Compiler is now supported for vulkan spir-v.

  • New: Reflection Compression - Android now will use ETC2 by default. The RGBM MaxValue is set to max M value from the cubemap, unless the value is set in the component. HQ Reflection cubemaps are now also compressed.

  • New: Allows depth sampling in the Compute shader on Mobile.

  • New: Added ETC compression support for a Runtime Virtual Textures on mobile (iOS, Android).

  • New: Removed a mobile-specific InverseOpacity shader permutation for translucent materials. This change reduces the total number of shaders generated for mobile platforms.

  • New: Added support for UMG background blur on Android.

  • New: Now no longer show the deprecation message when running Windows OpenGL in mobile emulation (-featureleveles31).

  • New: Added deferred shading path to a mobile renderer (to enable r.Mobile.ShadingPath=1). Only supported on iOS and Android Vulkan, it will fallback to forward shading on Android GL. This is an experimental implementation as some of the mobile rendering features are not supported yet. The deferred shading path allows efficient rendering of multiple dynamic local lights, high quality reflections, and lit decals.

  • New: Added support for static lighting in mobile deferred.

  • New: Added support for Qualcomm Transform in Vulkan.

  • New: Added limited support of Mesh Decals on mobile. Decals are unlit and support only modes that write to SceneColor

  • Improvement: Clamped the roughness to 0.015625 instead of 0.12, in order to improve the specular quality.

  • Improvement: Cleaned up the code of HQReflection and enabled it to work properly with the mobile clear coat. Added support for cube reflection to HQReflection.

  • Improvement: Improved performance for mobile eye adaptation.

  • Improvement: Reductions to LightGridSizeZ and MaxCulledLightsPerCell for Android as a workaround for the 64k texel limit

  • Improvement: Niagara GpuReadback OpenGL optimization.

  • Improvement: Reflection Capture change, the TextureCube is no longer cooked for non mobile rendering platforms.

  • Removed: Removed the mobile legacy shading model.

  • Removed: Removed remaining references to ES2 and AEP.

  • Removed: Removed mobile's separate CSM shader permutations. Shader side CSM calculation is now conditionally performed according to a parameter within the mobile base pass's uniform buffer. This should dramatically reduce the number of PSOs required when shadows are enabled.

Niagara

  • Crash Fix: Removed an incorrect call to GetSkinWeights that is not required and can potentially crash.

  • Crash Fix: Fix a crash when GetEmitterViewModel returns nullptr.

  • Crash Fix: Corrected a crash in the GPU ticks if the Interface has been garbage collected.

  • Crash Fix: Fixed a crash with Static Mesh streaming where GT would send too few materials to the RT; the GT was reading CurrentFirstLODIdx which is modified on the RT leading to a mismatch on a frame in which they are streamed.

  • Crash Fix: Fixed a crash in GetFilteredSocketTransform that occurred when there were no elements in the array.

  • Crash Fix: Corrected a crash due to no objects being modified in the property notification when fixing CPU access on a NPC.

  • Crash Fix: Fixed a crash that could occur when resetting a function input to its default value.

  • Crash Fix: Fixed a rare crash that would occur if a Niagara System auto-destroys when activated (for instance, from being culled by Scalability options).

  • Crash Fix: Fixed a crash in Niagara that could occur when calling SetAsset on a running component.

  • Crash Fix: Fixed a crash that could occur when deleting a Niagara Event Handler from a running system.

  • Crash Fix: Fixed a bug that could lead to a crash when a variable default value was not initialized.

  • Crash Fix: Fixed a crash that occurred when events spawn particles beyond the CPU max limit.

  • Crash Fix: Fixed a bug where a missing Data Interface implementation caused assets using that Data Interface to crash on load.

  • Crash Fix: Fixed a crash that could occur in Niagara with Mesh Renderers when force reloading the Static Mesh asset from the Content Browser context menu and then changing properties of the Static Mesh in its editor.

  • Crash Fix: Fixed crashes that can occur in some Niagara Blueprint Library functions when passing invalid (nullptr) components.

  • Crash Fix: Fixed an editor crash that would occur when applying vertex painting to a Static Mesh that was being used by a Mesh Renderer in an active Niagara editor.

  • Crash Fix: Adding multiple location events to a script stage will now result in a script compilation error instead of crashing.

  • Crash Fix: Fixed a crash which could occur when resetting a data interface user parameter to default in the details panel when the data interface pointer was null.

  • Crash Fix: Fixed a crash which could occur when merging changes from parent emitters when a simulation stage was added in a child emitter.

  • Crash Fix: Fixed a crash loading into WeapGun_Impacts in Shooter game.

  • Bug Fix: Fixed the DDC getting polluted with NiagaraScript results when rapidly generating compile requests. Ensures that the data cached is associated with the source request rather than the current CompileId of the UNiagaraScript.

  • Bug Fix: Corrected a subtle bug in the "Apply rotation vector" function that occurred when applying rotations which were far off axis. This stabilizes and improves quality on "Mesh Rotation Force" as well as the "Rotation" input on 鈥淚nitial Mesh Orientation"

  • Bug Fix: Added fixes to the MeshParticleSpace material transform node for Niagara.

  • Bug Fix: Fixed two issues with activation with the Niagara component system life cycle track.

    • When handling the beginning of the section, first deactivate and reset if the system is already active. This is necessary to have the correct reset behavior when the life cycle section starts on the first frame of the sequence and it was already active, or when the sequence is looping.

    • The default behavior of the section evaluation will now activate if it is inactive instead of being 'none."

  • Bug Fix: Fixed VectorCeil and VectorFloor and added a unit test for them.

  • Bug Fix: Fixed M_AddForce and BP_PaintClouds so that the alpha channel can be correctly painted along with the RGB channels.

  • Bug Fix: Fixed Niagara vector field resources being accessed on the game thread without it being necessarily initialized.

  • Bug Fix: Fixed a bug with Niagara NDC cooking by adding the system name into the hash to prevent collisions between identical systems.

  • Bug Fix: Exposed an attractor position override to Point Attraction Force. This improves the stability of the optional particle killing feature on the point attractor which accounts for fast moving particles in the kill radius check, which better prevents overshoot when the kill radius option is exposed.

  • Bug Fix: Comment boxes can now be edited in the stack overview graph.

  • Bug Fix: Parameter data will now not be reallocated when it is assigned during initialization.

  • Bug Fix: During VectorVM compilation, all rvalues are now evaluated for potential replacements, not just those that are in assignments.

  • Bug Fix: GPU shaders are now included when evaluating the auto compilation in the Niagara editor as changes are made to systems / emitters.

  • Bug Fix: Fixed the following issues with user parameter animation in sequencer. Parameter section boundaries are now infinite by default. User parameters which are animated by Sequencer now show their animated value in the selected actor details view. When adding a new user parameter track, it will default to the current parameter value instead of resetting to 0.

  • Bug Fix: Fixed an issue where emitter initialization would not have system bounds set in time resulting in unnecessary work creating bounds helpers.

  • Bug Fix: Systems with dynamic bounds can now be culled by the property "Max Time Without Render."

  • Bug Fix: Added a fix for a system's MaxDeltaTime not properly getting reset from the values of it's child emitters.

  • Bug Fix: Corrected an issue with VectorVM compilation mishandling the expression: MyVec3.yz = float2(1.0f, 2.0f);

  • Bug Fix: All Niagara engine parameters will now be correctly updated after a component transform change.

  • Bug Fix: Renderers will now always be stripped from cooked builds if their parent emitters aren't valid.

  • Bug Fix: Fixed an issue with RapidIterationParameters being out of date when they are being baked out by the cooker. The generation of the correct values was moved to the pre-compile so that when the translation is triggered the correct values are used.

  • Bug Fix: Added validation (at runtime and at cook time) to ensure there is no mismatch in bindings between RapidIterationParameters and ScriptExecutionParameters.

  • Bug Fix: Make / Break X dynamic inputs have been renamed to more accurately match their actual behavior.

  • Bug Fix: Fixed Sphere location to properly factor component scale and nonuniform scale into its Sphere Normal output.

  • Bug Fix: Fixed an issue with Spawn Per Unit not respecting emitter delay.

  • Bug Fix: Fixed an issue where a parameter couldn't be renamed through the parameters panel if it was created in a "Set Parameters" module.

  • Bug Fix: Fixed an issue with the handling of user override parameters on a component and how it handles booleans.

  • Bug Fix: Fixed a bug where new data interface inputs were always displayed as "invalid" until reset.

  • Bug Fix: Prevented the spawning of Niagara on dedicated servers.

  • Bug Fix: Fixed an issue with world time in some editor viewports. This could cause odd behavior with some culling features.

  • Bug Fix: Fixed PSC deactivating on launch due to LastRenderTime not being up to date.

  • Bug Fix: Fixed the attribute spreadsheet capture to handle Disabled / GPU sims.

  • Bug Fix: When autowiring, all possible pins will now be searched through for the first possible real match rather than just assuming the first pin matching direction will work and failing.

  • Bug Fix: Added a fix for the Niagara matrix multiplication node; make it actually a mul function rather than per-component scaling.

  • Bug Fix: Fixed instance override parameters getting confused when dealing with variables with / without the User prefix. It now uses the UserRedirectionParameterStore to disambiguate User. and when it comes to the InstanceParameterOverrides.

  • Bug Fix: Niagara will no longer block the shader compilation when running -game.

  • Bug Fix: Generate Location Event now caps event send rate at 60fps by default, this is user overridable but should provide stable counts and visuals across platforms now and be less framerate dependent.

  • Bug Fix: Fixed hitches that happen in the UI when editing some emitter and system properties that don't require a system reset.

  • Bug Fix: Made UNiagaraDataInterfaceSpline threadsafe with respect to the Spline data.

  • Bug Fix: NiagaraSystems are now guarded against system update and spawn scripts being mismatched (they need to agree upon the attributes in the dataset). Systems will warn / stay disabled on a mismatch and will force a full rebuild of the shaders in an attempt to fix the shaders.

  • Bug Fix: Fixed an issue with resetting GPU particle counts; particle systems which should allow their particles to finish out their lifetime can now survive the component being deactivated.

  • Bug Fix: Changed the fallback texture used by the VolumeTeture Data Interface to be a volume texture.

  • Bug Fix: Updated the EmitterChangeState module to fix an issue where emitters would only go from Inactive to Complete if the first emitter did too.

  • Bug Fix: Added a fix for NDC with parameters and static switches. This ensures the state of the StaticSwitch node is fully reset when there is no constant resolver so that the state can't leak across compiles / parses.

  • Bug Fix: VectorVM compilation - ir_propagate_non_expression_visitor now properly handles self assignment.

  • Bug Fix: Fixed an issue with emitter inheritance where inherited modules and inputs would not correctly show they were inherited.

  • Bug Fix: Fixed an issue with emitter inheritance where inputs with numeric values which matched the default wouldn't receive updates when the parent values were changed.

  • Bug Fix: Fixed an issue handling Niagara bone sampling when no bones are present.

  • Bug Fix: Added fixes to NiagaraLightRenderer

    • The generation of dynamic data is now skipped if deferred shading is not used.

    • Made it draw relevant so that they will actually render without relying on other renderers.

  • Bug Fix: Fixed ComputeMaxUsedComponents to properly handle different typed attributes in the dataset.

  • Bug Fix: Niagara will now only block for the shader compilation when spawning systems during the automated tests.

  • Bug Fix: Corrected a subtle bug with Jitter Position related to choosing new positions when delay was used.

  • Bug Fix: Fixed Niagara to not block on shader compilation during OnPreGC (happens on editor load).

  • Bug Fix: Fixed an issue with getting random bones on the GPU (Filter Socket / Bone was incorrect)

  • Bug Fix: Fixed the path where direct reads do not write data out to the VM which can lead to NaNs / invalid simulations.

  • Bug Fix: Fixed an uninitialized field in FNiagaraEventGeneratorProperties::MaxEventsPerFrame which was causing non-determinism.

  • Bug Fix: Corrected an issue caused by incorrectly using the first GPU script only to determine whether viewing the uniform buffer was needed or not.

  • Bug Fix: Fixed a dependency issue when sampling Skeletal Mesh data in solo mode; the tick group must be calculated in the same way Niagara does otherwise the Skeletal Mesh data will not be ready for the solo components" tick.

  • Bug Fix: Fixed the component pool.

  • Bug Fix: Fixed an edge condition with GPU emitters and going inactive on the first frame.

  • Bug Fix: Fixed a couple of issues with scaled transforms and bone sampling.

  • Bug Fix: Handled an edge case on world cleanup where ComponentPool has been destroyed before a component that can be returned to the pool.

  • Bug Fix: Handled an edge case where BeginDestroy is called before OnComponentDestroyed which will call DestroyInstance potentially returning to the pool incorrectly.

  • Bug Fix: Fixed a missing increment inside FNCPool::RemoveComponent.

  • Bug Fix: Now use advanced preview settings for background color.

  • Bug Fix: Removed early out as it skipped PostTick which will not clear events resulting in continual spawning.

  • Bug Fix: Fixed an issue with not clearing out LocalFunctionTable when data interfaces are dirty; this fixes an issue where Skeletal Mesh rebinding due to data changes did not choose the correct function since it was picking the old one from the table.

  • Bug Fix: Changed InverseFast -> Inverse to handle zero scaled Skeletal Meshes.

  • Bug Fix: Use of GetSystem is now prevented as it can race with the component; ArrayView is used rather than the constant TArray&.

  • Bug Fix: Handled an issue with incorrect area weighted sampled data when used with GPU systems, this will now result in a warning and uniform sampling being disabled.

  • Bug Fix: Fixed a bug when attempting to read from GPU buffers on the CPU with nullptr access.

  • Bug Fix: Fixed a read-early issue with Skeletal Mesh components that have identical start and end tick groups.

  • Bug Fix: Fixed a tick group ordering issue with physics enabled Skeletal Mesh components as they will have physics results interjecting during TG_EndPhysics.

  • Bug Fix: All emitters are now taken into account, not just those that are running, when working out whether view uniform buffer is required; this fixes an issue where multiple ticks in a single frame could jump between tick groups.

  • Bug Fix: Fixed mesh renderer stats so they don't increment per section.

  • Bug Fix: Fixed having a RenderTarget still bound that will be used as an SRV during Niagara's compute pass.

  • Bug Fix: Fixed races in Volume / Texture data interfaces due to reading from the data set by the RT when determining if the texture was valid.

  • Bug Fix: Fixed an issue that occurred if a GPU emitter was disabled on the first frame and never ticked.

  • Bug Fix: The velocity vector to quat function now correctly rotates meshes along the z axis. This will rotate existing particles that used the initial mesh orientation module's rotate feature.

  • Bug Fix: Fixed an issue with incorrect transform application (and reading from component) in GetFilteredSocketTransform -

  • Bug Fix: Removed the stub GPU implementation of GetFilteredSocketTransform which caused a stack error; the new functions should be used instead

  • Bug Fix: Corrected not applying the rotation on the GPU for gathering bone transforms.

  • Bug Fix: Fixed an issue with Niagara post work where the simulation is marked as dead but there is post work.

  • Bug Fix: Fixed stomping over override parameter data when they are set inside a constructor script.

  • Bug Fix: Corrected Niagara texture references when referencing things like MovieTexture / RenderTargets, etc. where the underlying RHI reference may be swapped out. The TextureReference will be used instead, rather than the TextureRHI.

  • Bug Fix: Fixed the occurrence of NaN/uninitialized values in Niagara GPU sort info.

  • Bug Fix: When setting a texture object, the editor will not stomp over the data if the system is duplicated because the component will be informed that it was overridden.

  • Bug Fix: The last render time will now be updated to the default value when a pooled component is reused.

  • Bug Fix: Fixed an issue where while waiting on the system simulation task, the finalize is executed which completes and removes the instance while attempting to remove the instance

  • Bug Fix: The system will now wait for all simulation to complete before performing a tick group update to avoid potentially accessing simulation data that is still running concurrently.

  • Bug Fix: Fixed dynamic material parameter names so that material function-defined dynamic parameters are also good.

  • Bug Fix: Fixed an issue with FName with case sensitivity in stack overview name changes.

  • Bug Fix: Fixed the UI alignment of the "Socket Name" property.

  • Bug Fix: Improved the "script usage" static switch to work as expected and across GPU scripts.

  • Bug Fix: Reading from CurrentData is now guarded to get the particle count if a fence has not been passed which guarantees that the tick has been processed on the render thread. This fixes an issue where we could deactivate a GPU emitter because the CurrentData is set to 0 instances as the tick was not yet processed.

  • Bug Fix: Fixed a bug where user parameters could not be assigned to Data Interfaces in the stack UI.

  • Bug Fix: Fixed a bug where if two modules use the same Data Interface function on two different Data Interfaces, they would both use the same data interface.

  • Bug Fix: Fixed the stack UI to correctly evaluate the usage constants for static switches.

  • Bug Fix: Fixed a bug where bound default parameters in Niagara modules would not behave correctly.

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

  • Bug Fix: SetAsset calls on currently active Niagara Systems will now correctly reset the system with the new asset.

  • Bug Fix: Corrected a bug where local-space, velocity-facing meshes would not be correctly oriented.

  • Bug Fix: Attempting to sample a Volume Texture in a Niagara CPU script now results in a compiler error.

  • Bug Fix: Fixed a bug with local-space Niagara Emitters where Simple Lights would render with a frame old transform.

  • Bug Fix: Fixed an issue with the particle read Data Interface return value when an invalid attribute is used.

  • Bug Fix: Fixed a bug where multiple renderer feedback issues clashed in the stack UI because they were assigned the same unique ID.

  • Bug Fix: Fixed a bug where a Skeletal Mesh Component user variable in a Niagara System set from Blueprint wouldn't get reset on pooled reuse.

  • Bug Fix: Fixed an issue in which pooled Niagara components being invisible.

  • Bug Fix: Fixed a bug where renaming a parameter lost all its metadata.

  • Bug Fix: Fixed the rename tooltip.

  • Bug Fix: Fixed a bug where pasting or resetting a user parameter Data Interface did not propagate to running systems.

  • Bug Fix: Fixed a bug where some Niagara engine parameters were not correctly updated after a component transform change.

  • Bug Fix: Fixed a bug in the Grid2D Data Interface that would allow an attempt to copy to an incompatible format, causing errors.

  • Bug Fix: Fixed a Niagara compile error that would occur when adding a new custom expression to an input in Niagara's module stack.

  • Bug Fix: Fixed a bug that could trigger an ensure when copying a stack value with a data interface in it.

  • Bug Fix: Fixed a bug where non-uniform scaled Niagara meshes would render with different normals than regular Static Meshes with the same scale would, causing them to be lit differently.

  • Bug Fix: Fixed an issue where emitters would enter a state unable to spawn if they ever exceeded their max allocation count.

  • Bug Fix: Fix errors with cooking volume textures that were not created from a 2D initial texture

  • Bug Fix: Fixed a scale bug with the Skeletal Mesh Location module when the Skeletal Mesh Component is scaled.

  • Bug Fix: Fixed a bug where default values of attributes behind static switches could not be set.

  • Bug Fix: Fixed an issue with FX not reactivating when changing scalability settings at runtime.

  • Bug Fix: Fixed an issue with the Vector VM Assembly view in Niagara's Generated Code window.

  • Bug Fix: Fix various bugs and visual issues in Niagara with Instanced Stereo VR enabled.

  • Bug Fix: Added a missing GPU flag to a function signature.

  • New: Added automatic partial write detection code that is enabled by default, which currently looks for InputData methods and ParticleReads on the same emitter; added a separate boolean to disable this in the advanced view for debugging purposes in case other edge cases are found.

  • New: Auto-detect if a simulation stage iterates over particles but does not modify the particle attributes, in which case the particle data will not be written out, saving performance. Added an option to enable partial particle writes on particle simulation stages, for example if a stage only modifies position (does not kill / add particles), data will read / write to the same buffer improving performance.

  • New: Added optional shader permutations generated when using simulation stages, enabled by default this will generate a unique permutation per stage to significantly increase GPU performance.

  • New: Material Instance Dynamic is now created on demand if the Material Parameter Bindings array is set.

  • New: Data Interfaces can define child variables that can be used to bind to these Material Parameter Bindings, like the render target from the DataInterfaceRenderTarget2D.

  • New: Material Parameters can also be bound to the System, Emitter, and User variables. Data Interface function signatures can now specify a usage mask and whether or not they need an exec pin if the function has side effects. This makes it easier to have functions that don't actually return results but write to a data interface internally.

  • New: The GPU simulation has been reworked so that they no longer get bindings from particle scripts, but instead get them from the same source that particle scripts got their data from since GPU scripts are a superset of particle script capabilities.

  • New: Added the ability to drive emitter activation from console variables for finer control than just specifying a platform.

  • New: Optimized SetUserParametersToDefaultValues to prevent creating unnecessary additional data interfaces.

  • New: You can now create a Texture Object variable type to add a texture to a Niagara System for use in simulation or rendering.

  • New: Added functionality to the Skeletal and Static Mesh Data Interfaces to enable explicit specification for how they should source the mesh component, preventing them from falling back to an undesired mesh.

  • New: Added a component renderer that enables you to drive individual components (such as lights and meshes) in the level using Niagara for CPU particles.

  • New: Added curve binding to enable the creation of curves inside Niagara that get baked to a texture to use in Material using the Material Attribute Binding user interface.

  • New: Added a new SubUV Animation module that includes four modes: Linear, Curve, Random, or Infinite. Infinite improves upon the Cascade "SubUV movie" mode with a start frame, end frame, play rate, and a start time offset.

  • New: A marked list can now optionally be used for PostActorWork, which can reduce overhead in certain cases.

    • Use the console variable 'fx.Niagara.WorldManager.UsePostActorMark 0" to disable using the marked list.

  • New: Added a Volume and Render target Data Interfaces and allowed Niagara to push Grid3D data into it.

  • New: Added a new preliminary plugin to convert Cascade Particle Systems to Niagara Assets. It is an experimental plugin that can be enabled and will be improved in later releases.

  • New: Added a Data Interface to play audio from within Niagara for CPU emitters.

  • New: Added a Data Interface to export particles, which works on both CPU and GPU.

  • New: Added a Niagara commandlet to find assets with warmup time / lights / GPU emitters.

  • New: Changed the attribute spreadsheet readback to use a readback manager; this is more reliable as the system is not required to tick in order to execute the readback.

  • New: Added RandomFilteredSocketOrBone functionality.

  • New: Added BP methods to create volume / array textures.

  • New: Now use the Enum string rather than the number in warning messages, makes it clearer to the end user on why the warning is visible.

  • New: Marked FNiagaraUserParameterBinding as NIAGARA_API so it can be used in other modules.

  • New: Niagara is now allowed to spawn new systems async and earlier if the TG has been processed already; this is enabled by default, use the console variable "fx.Niagara.WorldManager.SpawnPerTickGroup 0" to disable this function.

  • New: Added a performance option to allow event-based spawning to be combined into a single spawn. This results in a single execution from 0 to the number of particles rather than several when using the ExecIndex function, which is not recommended to do this.

  • New: Added support for Static Mesh socket sampling.

  • New: Added FNDIInputParam as an easy method to wrap complex data types, and cleaned up some data interfaces to use the new input / output wrappers.

  • New: Added a method to modify which sampling regions are used by the Skeletal Mesh data interface.

  • New: The max number of instances required across all sim passes is now calculated ahead of time. This reduces memory pressure when Sequencer is scrubbing the timeline and forcing many simulation ticks at once as buffers will not grow progressively but instead grow all at once up front.

  • New: Niagara tick behavior is now exposed to Blueprints

  • New: The collision module now supports simulation stages.

  • New: Implemented an export data interface for GPU systems

  • Added a GPU readback manager to allow enqueuing a readback that is not depending on a system tick.

  • New: Added the ability to go beyond a single dispatch dimension.

  • New: Added the ability for dynamic inputs to display custom text when being collapsed, using their child inputs in the format text.

  • New: Added an optional display to show emitter execution order, helpful for debugging dependency issues with events or particle reads.

  • New: The Niagara System no longer waits if it is not deactivating immediately; it won't wait for Activate Reset calls if running asynchronously, allowing them to defer until Finalize instead, which avoids stalling the GameThread.

  • New: Niagara arrays are now allowed to have data modified when running on the CPU; the functions added are Reset / SetNum / SetValue / PushValue / PopValue.

  • New: Added support for upgrading data interface function calls.

  • New: Added support for Skeletal Mesh IsValidBone and BoneCount on the GPU.

  • New: The collision module no longer requires users to specify whether it's a GPU or CPU system.

  • New: - Added fx.Niagara.SetOverridePlatformName as a way to quickly change between which platform Niagara is using; the caveat is that on cooked platforms only the device profiles that are contained within the cook are available.

  • New: Added a Data Interface that enables you to define a platform set and query whether it's currently active.

  • New: Stats on memory usage from data interfaces are now collected.

  • New: Added the option to change the grid format from 32-bit to 16-bit float.

  • New: The collision module's CPU trace channel is now exposed.

  • New: Added optimizations to reduce the cost of system and emitter creation and activation

    • Modified data set accessors into two separate structures so they can be cached on the System / Emitter to avoid map searching each instance, removing the need for various allocated arrays since there is one copy in memory rather than per instance.

    • Enqueuing multiple commands to initialize DataSets for GPU simulations is now avoided, this can be slow when waking task threads.

    • DebugSimName is now cached once in PostLoad to avoid per-instance memory usage / performance costs.

    • Removed various stat markers as they were measuring chunks small enough to introduce confusion / variance in profiling.

    • MaxInstanceCount is now cached inside the UNiagaraEmitter rather than generated with each instance created.

  • New: A number of distance field nodes have been added to allow artists to easily find the global distance field isosurface, its normal, to sphere cast through it, etc.

  • New: Added a function to get simulation stage iteration information, i.e. iteration index, max iterations, normalized iteration index.

  • New: Added minor tweaks to allow cleaner inheritance from NiagaraComponent if necessary:

    • Exported FNiagaraSceneProxy under NIAGARA_API.

    • Made GetViewRelevance public to match the primitive scene proxy API.

    • Removed the final keyword from FNiagaraSceneProxy's inheritance.

  • New: Changed the Niagara SetBoolByFloatComparison to use Static Switches for optimization reasons.

  • New: Extended the comparison operators to include greater than / less than / equal to for both inputs.

  • New: Added a new translator constant that is unique each time the node is translated. This can be used to calculate repeatable randoms.

  • New: Adding a new warning to Particle Attribute Reader Data Interfaces to notify end users when persistent IDs must be set in order to function properly.

  • New: An error message will now show if users attempt to reference the global distance field without it being enabled in the project.

  • New: Added the ability for the Sprite Renderer to be particle-less, if needed.

  • New: Added the ability for Data Interfaces to say they need execution pins and ensure that those functions don't get compiled out. This should clean up any write-only Data Interface functions that had to have a single parameter wired into the map previously, even if it wasn't really used.

  • New: Added a collapsed state text to dynamic input scripts. This formatted text is displayed in the stack UI when the node is collapsed. The text supports formatting placeholders for the function inputs, for example "myfunc({0}, {1})" will be converted to 鈥渕yfunc(1.23, Particles.Position)"

  • New: Removed "Is It Optimized Out" warnings in data interfaces as they are often benign and not necessary.

  • New: Added the Stack Context namespace to allow more reusable modules across different stacks. This also enables Data Interfaces to be used as iteration sources in Sim Stages to act like particles namespace and created named attributes on GridCollection2D

  • New: Added support for the Previous namespace modifier, which stores off the values from the previous script execution for use in a simulation.

  • New: Changed script visibility to an enum to allow for soft deprecation of assets.

  • New: Added two styles to the particle count display to reflect the different emitter states (normal, isolated, disabled). Also enabled showing particle count by default.

  • New: Sorted Niagara function input menus and added submenus for more clarity.

  • New: Niagara systems can now be spawned from pools to reduce CPU overhead of spawning and activation. These pools can now be optionally "primed" with a set number of initial instances. This prevents slow spawning and activation times when first spawning these systems and instead transfers this cost to load time.

  • New: Changed the color of the vector field visualization from white to red.

  • New: Added a shader compile error if using sim stages with the CPU.

  • New: Added a shader compile error if using events with the GPU.

  • New: It is now possible for Systems and Data Interfaces to ignore their dependencies, allowing them to potentially tick earlier in the frame, using the bRequireCurrentFrameData flag. When this option is disabled, the previous frame's data is used and the simulation is issued early. This greatly reduces overhead and allows the game thread to run faster, but comes at a tradeoff if the dependencies might leave gaps or other visual artifacts.

  • New: Niagara particles will now properly support custom depth writes, lighting channels, disabling rendering in the main pass, and volumetric translucent shadows.

  • New: Added a new static switch constant for the script context (system, emitter, particle).

  • New: Added a couple of new features to Niagara's Mesh Renderer:

    • "Locked Axis" enables combining the various facing modes with locking an axis to a specific direction.

    • "Camera Offset Binding" allows mesh particles to be pushed toward or away from the camera.

  • New: Added support for dragging Niagara assets into Blueprint graphs.

  • New: Added an option to switch between relative and absolute scale in Anim Notifys.

  • New: Niagara Emitters will no longer complete if no valid Static Mesh can be resolved. Instead, sampling the Static Mesh will result in sampling the Niagara System's location.

  • New: Changed the light renderer enabled binding to not be guarded behind a checkbox but always be evaluated (similar to other light values like radius or exponent).

  • New: Added a few new features to Niagara's Mesh Renderer:

    • The "Renderer Visibility" option allows particles to exclude themselves from certain Mesh Renderers.

    • "Distance Culling" disables rendering of meshes at a given distance from the camera.

    • "Enable Frustum Culling" culls individual sprites and mesh particles from rendering when they are not in view for performance optimization.

  • New: Added copy/paste support for stack entries in the user parameter default panel.

  • New: The Static Mesh Data Interface is now allowed to use the physics velocity rather than calculating it via the component transform.

  • New: GPU Simulation setup is now off to worker threads.

  • New: Local space mesh particle systems now support camera offset.

  • New: It is now indicated to the user when using the Camera Query Data Interface in a CPU emitter.

  • New: Changed the visibility of the ribbon renderer bindings to no longer be advanced.

  • New: Niagara Emitters will no longer complete if no valid Skeletal Mesh can be resolved. Instead, sampling the Skeletal Mesh will result in sampling the Niagara System's location.

  • New: Add a "Pivot Offset" feature to Niagara's Mesh Renderer and an ability to choose which space the offset should be in (Mesh, Local, or World).

  • New: Fixed the thumbnail generator to correctly crop the image to a quadratic size before scaling it down.

  • New: Extended the "copy metadata" action to static switches.

  • New: Niagara Renderers can now be optionally enabled / disabled for specific platforms.

  • New: Altering how default effect types are handled as existing behavior was confusing to users. Previously, Systems with no Effect Type set would use the project default Effect Type automatically. Now, setting no Effect Type does what you鈥檇 expect but new Systems are given the project default Effect Type on creation.

  • New: Hide the appended numbers after dynamic inputs to reduce stack visual noise.

  • New: Added a new Data Interface allowing Niagara modules to query the current platform.

  • New: A new Dynamic Input which returns one of the component axes of your mesh orientation as a vector.

  • New: Added a "Preview Mesh" fallback option to Static Mesh Data Interfaces in Niagara that will not be included in cooked builds for viewing in the editor. This saves memory over using the 鈥淒efault Mesh" if it will never be used in game.

  • New: ParticleToWorld and WorldToParticle can now be initialized (using the local matrix) for the local vertex factory, allowing better debug visualization.

  • New: "Solve Forces and Velocity" and 鈥淐alculate Accurate Velocity" now use the new Particles.Previous.Position paradigm instead of the manual cached off attributes, as .Previous is now an intrinsic characteristic of attributes when accessing a previous frame value.

  • New: Added support for copying and pasting parameter metadata in Niagara script editors.

  • New: Tweaked the HLSL shader generation for GPU particle simulations to reduce the burden on the HLSL compiler, and added preprocessor directives to limit the scope of FSimulationContext for simulations using shader stages. This reduced compilation time by 20x for serial compilation, and by about 10x for regular usage in the editor.

  • New: Added a new property called "Apply Owner Scale to Attributes". This allows users to decide which attributes to scale via the owner scale of the Niagara actor placed in the world.

  • New: Changed FNiagaraVariableBase to include an index to a type definition (in the type registry) instead of the definition itself. Reduces the size of FNiagaraVariableBase from 24 to 12 bytes (cuts about 5% of the memory cost of UNiagaraScripts), and significantly reduces the number of object references that gets processed by garbage collection.

  • New: A new Initialize Particle module has been implemented into all default templates. Common behaviors such as randomness, uniform vs nonuniform sprite / mesh size, mass initialization, sprite UV flipping, and more, are now in plain english dropdowns to reduce clicks and simplify setting defaults for common behaviors. A "direct set" mode is included on all attributes so the previous behaviors are always easily accessible if desired.

  • New: Refactored ribbon texture UV options to be easier to use and added options to override the U and V range values per particle. However, you may find some instances that need additional adjustments after these changes.

  • New: Performance improvements for the creation of uniform buffers for GPU compute scripts (different buffers are shared between the emitters and stages)

  • New: Added the ability to drag and drop parameters from the system editor parameters panel into a scratch pad script graph or script asset graph.

  • New: Refactored how significance is handled. It is now handled by helper classes called Significance Handlers. The effect type can select which handler to use from the list of any available ones. Currently, the selectable options are Distance, Age, and None.

  • New: "Calculate Kinetic And Potential Energy" now has a remapping option when outputting the total energy. This sets a max cap on the energy amount and then outputs a normalized total energy. This is useful for driving 0-1 attribute values based on energy in physical behaviors.

  • New: The Particle Attribute Reader now has two official modules, "Spawn Particles From Other Emitter" and "Sample Particles From Other Emitter" The spawn module replaces existing spawn modules in the child emitter, and the sampling module initializes sampled attributes in the spawn script. Together these allow for GPU-based lead / follow emitters where one emitter provides attributes to another emitter for sampling, and there is an example of these in action in the new 鈥淣iagara_Advanced" hallway in the Content Examples.

  • New: Added Set Mode for accurate value painting.

  • New: Since it is impossible to set a reference to a world within the system editor, made all the properties referencing AActors or UActorComponent derived classes disabled in the system editor.

  • New: Added a new metadata field to a Niagara type to indicate it is internal, and shouldn't really be visible to users (currently, this is limited to the half precision floats).

  • New: Changed the code generation for GPUComputeShaders to pull out the simulation code so that it's no longer duplicated in the spawn and update branches. This causes both compile times and instruction counts to drop significantly (about 50% savings in both cases).

  • New: Added a new module to cull individual emitters based on their significance. It enables you to have an expensive emitter on only the number of most significant instances of a System in the scene. It can also be used to set up a lower quality fallback emitter for all other instances. It works using a new engine constant passed in and named "Engine.System.SignificanceIndex."

  • New: The Niagara datasets are now trimmed, removing attributes that are never read by the VM (or special data interfaces). This reduces VM operations and should reduce memory consumption and work.

    • Trimming is disabled by default but can be enabled on the system level with an advanced flag.

    • Individual attributes can be added in an emitter's advanced properties for forced preservation.

    • ParticleRead and Export data interfaces will force an emitter to not trim their attributes.

    • Custom HLSL nodes / expressions are parsed for attributes to keep.

  • New: Made it possible to disable emitters from a console variable.

  • New: The internal structs of particle scripts are now prevented from being defined in system scripts, which dramatically improves compile times (2x faster).

  • New: Added a new dynamic input to return individual worldspace mesh orientation axis vectors from the Particles.MeshOrientation quat.

  • New: Removed the constraint on allowing access to engine.deltatime and engine.invdeltatime in particle spawn scripts.

  • New: Removed NiagaraEmitters and NiagaraScripts from dedicated servers. NiagaraSystems remain, but are light weight, and allow a consistent interface for Blueprints.

  • New: Added a "Scale UVs by Center" function when working with texture samplers

  • New: Added a "World Position to Screen UV" function when working with the new Gbuffer data interface.

  • New: Added the ability to add parameters to a "Set Parameters" module by dragging and dropping from the parameters panel directly into the module in the system overview.

  • New: Added an optional property to NiagaraParameterCollections to allow a MaterialParameterCollection to drive values in Niagara. Parameters will get automatically created when a MPC is assigned, and the backing parameter store will be updated as changes are made to the MPC.

  • New: The "Normalized Exec Index" functions and dynamic inputs now have a boolean input which makes the normalized result inclusive or exclusive. Exclusive does not return 1 and is useful when driving a periodic function such as sine.

  • New: Added Array data interfaces, which have two new dynamic inputs for "Select float/vector from array". There are now three array sampling modes: direct, random, and interpolate. Interpolate will interpolate through the entries in the array based on an interpolation factor, and has an optional input to normalize the interpolation.

  • New: Added an Official Module for the "Export Particle Data" Data Interface. This allows particles to export their data to Blueprint or gameplay code.The functions work on both CPU and GPU. The GPU is done via a readback and can be up to 3 frames latent depending on the platform.

  • New: Return Particle ID attributes now have an optional input to extract info from another Niagara ID, such as RibbonID.

  • New: You can now access generic GBuffer frames within Niagara using a Data Interface.

  • Improvement: On the Skeletal Mesh Data Interface, the array element name for "Specific Bones" and "Specific Sockets" have been renamed to 鈥淔iltered Bones" and 鈥淔iltered Sockets."

  • Improvement: Cleaned up parameters being passed to various RT Data Interface calls, i.e. Pre / Post Stage, to ensure that all parameters are set correctly to the functions that are called.

  • Improvement: Moved NiagaraComponentSettings into its own file.

  • Improvement: Extended NiagaraComponentSettings to allow forcing which systems use the component pool.

  • Improvement: We鈥檝e standardized how data is pushed to the render thread for GPU simulations, you may need to make some modifications to match it.

  • Improvement: Improved performance and compilation speed in Sim Stages.

  • Improvement: Made batching of System instances more common by reducing the need to go solo if using data interfaces as user variables.

  • Improvement: Preview meshes will now only show inside editor / preview windows, not inside PIE as it can be confusing when it is not visible inside a cooked build.

  • Improvement: Improved messaging for missing bones / sockets, sent in a single line to improve reception by various toolings.

  • Improvement: Renamed RandomFilteredSocketBone to RandomFilteredSocket.

  • Improvement: Optimized FNiagaraParameterStoreToDataSetBinding::Init by avoiding double map lookups in some cases.

  • Improvement: Moved the emitter dependency order calculation to the system from per system instance; now calculated on PostLoad, it may be possible to serialize for cooked platforms.

  • Improvement: Reorganized the Niagara sim stages RasterizeParticlesGrid2D minor module input to aid ease of use.

  • Improvement: Updated the Niagara SetBoolByFloatComparison module to use static switches for optimization reasons.

  • Improvement: Improved the stack UI to include parent/child relationships.

  • Improvement: Significant optimization for Niagara Systems that use Data Interfaces in particular ways.

  • Improvement: Improved CPU collision traces by skipping traces if collision is disabled for a particle.

  • Improvement: Added CPU optimizations for Niagara GPU emitters.

  • Improvement: Added minor CPU optimizations for Niagara Systems using Events.

  • Improvement: Updated the Niagara RasterizeParticlesGrid2D metadata for clarity from an artist's point of view.

  • Improvement: Added optimizations for CPU implementation of Niagara's Particle Attribute Reader Data Interface.

  • Improvement: Added some CPU performance gains when spawning Niagara Systems that are pooled.

  • Improvement: Added a minor optimization for CPU systems using the Skeletal Mesh Data Interface.

  • Improvement: Added updates for static VectorField Data Interface. CPU data is now stored as a half3 (instead of float4) when ISPC is available, and an ISPC kernel has been added to the Niagara Data Interface for sampling. For supported platforms it reduces memory cost (16 bpp -> 6 bpp) and improves sampling time (2x speed increase).

  • Improvement: Updated the sequencer particle trigger track to support triggering Niagara systems.

  • Deprecated: Added a "IsValidField" output to the distance field query function.

  • Deprecated: Removed old, unused collision Data Interface functions.

  • Deprecated: Deprecated data interface export function without exec pin.

  • Deprecated: Updated default values for the torus location module.

  • Deprecated: All "Uniform Ranged X" dynamic inputs have been soft-deprecated and replaced by the new "Random Range X" functions. These are more optimal from an optimization standpoint, and more critically, they now include two modes when used in an update script like Particle Update, "Spawn Only" or "Every Frame."

    • Spawn Only enables a random number to be calculated directly in an update script only once, instead of requiring a random variable to be initialized in spawn and then linked in an update, which is a significant workflow improvement.

    • Every Frame causes random dynamic inputs to revert to their original behavior of being recalculated every frame.

    • When used in Emitter Update, these functions also expose a new option to "Recalculate Each Loop", which returns new random numbers only on loop boundaries.

Optimizations

  • Bug Fix: Fixed the half resolution SSR rendering path.

  • Bug Fix: Reenabled and fixed dedicated memory allocations (used by NVIDIA cards). Allocations can never be reused as they are tied to the image.

  • Bug Fix: Fixed ref counting in FRenderTargetPool::FreeUnusedResource so that it frees resources correctly.

  • New: Sorted reflection material gather rays now use RAY_FLAG_FORCE_OPAQUE.

  • New: Added DEFINE_GPU_DRAWCALL_STAT to get the draw call count per specific category; DEFINE_GPU_DRAWCALL_STAT macro is now used instead of DEFINE_GPU_STAT to also get the draw call count in CSV for a specific pass. SCOPED_GPU_STAT will then output the CSV time for the GPU pass and the number of draw calls of this GPU pass in the CSV Draw Call category.

  • New: Added a batched RT material gather pipeline using batched / parallelized API. This saves ~50% of the RHI thread critical path time.

  • New: Symbols from RT PSOs are no longer exported. This slightly improves large PSO linking performance by avoiding some of the string deduplication cost in d3d12.dll.

  • New: Enabled r.Streaming.UseAsyncRequestsForDDC by default. This enables async DDC requests by default to prevent stalling the editor when the shared DDC network is slow.

  • New: Shader creation during drawing has been multi-threaded for the RHIs where this is thread-safe. This can be controlled with r.MeshDrawCommands.AllowOnDemandShaderCreation.

  • New: Redundant resource residency management is now skipped when the same SBT or RT scenes are used on the same command list repeatedly.

  • Improvement: Optimization of CREATE_NOT_ZEROED to reduce hitches on Windows 10 build 2004 and later.

  • Removed: Removed unused vertex input streams in c++ that should already have been removed.

Post Processing

  • Bug Fix: Fixed TAAU for DOF sampling outside the input viewport

  • Bug Fix: Corrected SignFastInt in FastMath.ush

  • Bug Fix: Fixed DOF sampling outside the viewport when using TAAU and SP > 100.

  • Bug Fix: Reduced DOF tiling artifacts when fast gathering foreground on foreground transition coc range by computing output opacity based on kernel size.

  • Bug Fix: Fixed the IF_PP handling of BloomMethod.

  • Bug Fix: Fixed bug due to incorrect subrects in Basic Eye Adaptation Compute Shader.

  • Bug Fix: Corrected white light appearing on cubes when disabling post processing.

  • Bug Fix: There is now a check that there must be correct viewport information after processing a frame while not in 'real time"

  • New: Added information about the depth velocity in the velocity buffer.

  • New: Color Correct Regions. A new plugin module that allows users to add color correction to regions in 3D Scenes. Based on the concept of Color Correct Volumes and optimized to support many Regions in one level.

  • New: Added a new step in the pipeline for view extensions to be able to access the rendering stages before Postprocessing. Users can subscribe to different stages of Postprocessing via the ISceneViewExtension. This adds more flexibility to postprocessing including giving an ability to do color correction before a tone map is applied.

  • New: Added interfaces to enable Temporal Anti-Aliasing GPU passes to be replaced by a plugin. No backward compatibility on this interface is guaranteed between major releases.

  • New: The Filmic Tone Curve portion of the tonemapper can now be individually disabled via ShowFlag.ToneCurve or by setting the ToneCurveAmount (in PostProcess->ColorGrading->Misc) to zero. NOTE: Typical use cases that require the tone curve to be disabled may also require ExpandGamut to be set to zero (the default is 1.0).

  • New: Added more flexibility to Post Processing via Scene View Extensions. This is required to support OCIO conversion after the tone map.

  • New: Added a Context that a Scene View Extension (SVE) can use to determine if it should be active or not, in addition to the FViewport pointer, for use when there is no FViewport, or when applying a SVE on a particular view that shares a FViewport. This provides a way to have an arbitrary Context that corresponds to the rendering entity, and a mechanism to provide the SVE lambdas that can find and parse the custom context. The SVE can then decide if it should be active for the current frame and context, or simply use default normal behavior. This does not change the normal behavior, and only adds an option for renderers to provide a context.

  • New: Added more flexibility to Post Processing via Scene View Extensions. This is required to support OCIO conversion after the tone map.

  • New: Added a new step in the pipeline for view extensions to be able to access rendering stages before PostProcessing.

  • New: Major Updates to Ground Truth Ambient Occlusion code.

    • Added the ability to set more than 1 angle per pixel. Having 1 angle is problematic due to the projection of the per pixel normals on the view direction.

    • Improved the fall off function to band less

    • Changed the dither pattern to be based on Interleaved gradient noise. This also reduces banding.

    • Added a PPV value to control the temporal blending rate.

    • Fixed a bug regarding running at full resolution.

  • New: Added support for Open Color IO (OCIO) in the Viewport and Movie Render Pipeline.

    • OCIO in the Viewport enables users to modify the Viewport's color output and add OCIO color conversion after the tone map, which disables the tone curve and gamma. To do this, create a new Open Color IO Settings Asset and assign it to the viewport using the OCIO Configuration menu in the View. Once assigned, you should select a source colorspace to convert from and a target colorspace to convert to.

    • OCIO in the Movie Render Pipeline enables users to add a custom color configuration to the Movie Render Pipeline. It allows for control over tone curve and OCIO color conversion settings. Similarly to the Viewport OCIO Configuration menu, you need to add a new OCIO Configuration Asset and then select a source colorspace and target color space.

Ray Tracing

  • Crash Fix: Corrected a crash in ray tracing when the value of the skin cache is null.

  • Crash Fix: Fixed a crash caused when ray tracing shadows is the only active ray tracing effect and r.RayTracing.Shadows is set to 0 while leaving GRayTracingShadows set to 1, resulting in the RenderRayTracingShadow function being called when it should not.

  • Crash Fix: Fixed a crash when turning off all ray tracing effects during run-time.

  • Crash Fix: Fixed a crash calling SetupRayTracingCullClusters when RT was disabled.

  • Crash Fix: Fixed a crash that occurred when enabling r.RayTracing.ExcludeDecals because ray tracing instances are skipped but VisibleRayTracingMeshCommands have already been registered.

  • CrashFix: Fixed a crash caused by RT Niagara ribbons with zero polygons.

  • Crash Fix: Fixed a crash that occurred when initializing foliage structures with RT enabled.

  • Crash Fix: Fixed a crash on startup when attempting to load a RT shader while run-time RT support is compiled out.

  • Bug Fix: Fixed a possible deadlock in RTPSO compilation tasks on machines with low CPU core counts. RTPSO compilation tasks used to run on high priority threads and would internally create additional tasks and immediately wait on them. The inner tasks also use high priority, but they may never get to run as WaitUntilTasksComplete does not execute anything itself and all HP threads already run the outer tasks. The solution is to make the outer tasks run at normal priority (or lower), so that inner tasks will always get to run on other task threads.

  • Bug Fix: GPU copies are now used to fill the ray tracing IES light profile texture atlas. This corrects the handling of pre-tiled source profile textures.

  • Bug Fix: Fixed a potential assert when rendering ISM with ray tracing enabled if the ISM proxy had no instances.

  • Bug Fix: Added a UAV barrier at the end of each BLAS build batch. This fixes a GPU bug when running with ray tracing due to build and update commands overlapping on the GPU and corrupting memory.

  • Bug Fix: Landscape grass is now visible in ray tracing. Grass does not have per instance indices so previously it was filtered out.

  • Bug Fix: Fixed a potential race condition accessing data that is being destroyed from another thread when ray tracing Skeletal Meshes.

  • Bug Fix: Fixed Ray Tracing Post Process Volume settings cannot be edited/interpolated by Sequencer.

  • Bug Fix: Fixed GRayTracingPlaformMask initialization, which could be incorrectly enabled in editor builds and lead to unwanted ray tracing shader compilation. The console variable r.RayTracing is checked in TTargetPlatformBase and it should always be taken into account, regardless of per-platform settings.

  • Bug Fix: Fixed missing transition barriers for ray tracing resources that are bound directly and not through uniform buffers.

  • Bug Fix: Added an explicit shader parameter to differentiate direct vs indirect dispatch in RayTracingDynamicGeometryConverterCS. Fixed the handling of MinVertexIndex.

  • Bug Fix: Fixed raytraced Niagara Meshes on the GPU with multiple sections.

  • New: Added ray-traced reflections to single-layer water.

  • New: Added ray-traced transmission support for subsurface material.

  • New: Ray tracing reflection rays are not traced from pixels that have an unlit shader model.

  • New: Added a console variable to disable WPO evaluation for Static Meshes in ray tracing

  • New: Rendering reflections is now skipped in ray tracing debug or path tracing view modes.

  • New: Ray Tracing Final Gather GI improvements:

    • Added optional neighbor sample stealing (and consistent stratification within the filtering neighborhood): r.RayTracing.GlobalIllumination.FinalGather.FilterWidth (default = 0)

    • Added optional gather point multi-sampling to improve per-frame convergence: r.RayTracing.GlobalIllumination.FinalGather.Iterations (default = 1)

    • Now uses reprojection on the temporal gather point history.

  • New: Added LightingChannelMask support to path tracing and ray tracing global illumination passes.

  • New: Added options to turn off the compilation of ray tracing material closest-hit shaders or any-hit shaders. The values are read-only and must match between cook-time and run-time. New console variables added:

    • r.RayTracing.CompileMaterialCHS (default 1)

    • r.RayTracing.CompileMaterialAHS (default 1)

  • New: Created large fixed-sized ray tracing view descriptor heaps instead of creating worst-case heaps for the current frame.

    • The initial heap size is set by r.D3D12.RayTracingViewDescriptorHeapSize (default = 250k).

    • This avoids the pathological performance issue when new meshes are progressively added to a large ray tracing scene. The previous allocation scheme resulted in ever-larger heaps being created as the scene grew, which caused significant CPU spikes (200-300 ms). The new scheme reuses the same heaps that are pre-sized to be large enough.

    • If an overflow is detected, the heap size will be doubled for the next frame, but the current frame will have some number of placeholder shaders bound to the ray tracing scene and will not be rendered correctly as a result.

  • New: Added support for parallel AddMeshBatch processes for DynamicRT meshes.

  • New: Shadow rays in RTGI are shortened by default to avoid hitting the sky sphere, which makes it possible to get desired sky reflections without affecting GI.

  • New: Ray tracing debug visualization modes are now consistent with GBuffer visualizations.

  • New: The RT debug show flags are now hidden in the editor menu, since the corresponding functionality is exposed via the view modes menu instead.

  • New: Ray tracing global illumination is now enabled on two-sided foliage.

  • New: Optimized the command list generation for the dynamic geometry RT update.

    • A shared vertex buffer is now used for the compute output (managed by the collector); the vertex buffer offset is now required in the compute shader and the acceleration segment data.

    • Commands are now sorted by shader and then by vertex buffer to reduce command list creation overhead.

    • The FShaderBindingState is used to reduce incidence of binding the same uniform buffers repeatedly.

    • The loose parameter data is now stored in the FMeshPassProcessorRenderState instead of setting it twice.

  • New: Added solid-angle sampling to RT spherical lights.

  • New: The Indirect Lighting Intensity factor is now respected when computing RT global illumination.

  • New: Added a console variable to control if RT BLAS compaction should be automatically performed after build

    • r.D3D12.RayTracing.AllowCompaction 0 / 1 (default)

    • Compaction is still enabled by default, but the console variable can be used to easily A/B test memory usage, GPU time, etc.

    • The value is read-only at runtime, as it requires all acceleration structures to be re-created.

  • New: Added ray tracing specific ambient occlusion parameters in the Post Process volume.

    • Intensity: a scalar factor applied to the ambient occlusion score.

    • Radius: adjusts the world-space radius of occlusion rays.

  • New: Implemented the DXR 1.1 PSO addition API. Ray tracingPSOs can now be grown/extended through AddToStateObject on a supported Windows version and driver. A compatible base pipeline is automatically selected from the pipeline cache based on how recently and frequently it was used, unless it is explicitly provided by the user.

  • New: Implemented a roughness bias for experimental ray-traced reflections. This can improve reflection performance in certain scenes by forcing ray directions to be more coherent. Additionally, this allows globally controlling RT reflection appearance without content modification.

    • The drawback of this technique is that it is not physically based and can produce surprising / inconsistent visual results and so it must be used with care.

    • The feature can be enabled using r.RayTracing.Reflections.ExperimentalDeferred.SmoothBias (default = 0). Only surface roughness below this value will be biased towards zero.

  • New: Added transmission to the RT global illumination pass. This feature does not yet have a global override control to systemically disable the effect.

  • New: Added console variables to globally control RT shadows for different light types. All light types are enabled by default and are still controlled by r.RayTracing.Shadows as well as per-light settings. The new console variables are intended for global easy overrides, allowing fine grained control over quality vs performance in games, without content changes. New console variables:

    • r.RayTracing.Shadows.Lights.Directional

    • r.RayTracing.Shadows.Lights.Point

    • r.RayTracing.Shadows.Lights.Spot

    • r.RayTracing.Shadows.Lights.Rect

  • New: Added support for ray-traced, subsurface shadows. This emulates raster, subsurface shadows by casting a secondary ray from the point-of-view of the light source. A homogenous volume is extruded from the furthest occluder to the shading point. The density of this volume is proportional to the shading model's opacity.

  • New: Implemented a roughness threshold for skipping any-hit shader invocation in the experimental RT reflection shader.

  • New: Added a shadow source angle factor for ray-traced shadows from directional lights. This allows artists to vary the penumbra shape without changing the light shape.

  • New: The cloth shading mode is now supportedl in the ray-traced reflections pass.

  • New: Implemented basic support for masked materials in the experimental ray-traced reflection shader.

  • New: Moved ray tracing vertex and index buffer tracking from SBT to the scene. This saves 2/3 of the time spent in FD3D12RayTracingScene::FindOrCreateShaderTable.

  • New: FD3D12CommandContext::RHISetRayTracingHitGroups is now able to internally parallelize the work to improve RHI thread critical path time. The maximum number of worker threads is limited to 5 (RHIT + 4 task threads). Each thread gets a dedicated descriptor cache as well as separate referenced resource tracking sets to avoid contention.

  • Improvement : A single-state resource is now used in Ray Tracing buffer allocation to speed up allocation time.

  • Improvement: Only allow tone mapping on radiance, indirect irradiance, and primary rays debug ray tracing view modes.

  • Removed: Translucent objects no longer cast ray traced shadows, which more closely matches the default behavior of dynamic shadows.

Water

  • Bug Fix: Fixed artifacts that occurred when computing underwater ray tracing reflections.

  • New: Added ColorScaleBehindWaterInput to the SingleLayerWater Shading Model. This can be used to add custom colorization effects such as caustics or custom surface shadows to the scene behind the SingleLayerWater surface.

  • New: The Water Plugin has been released as Experimental.

Tools

  • Bug Fix: MoviePipeline: Fixed an issue where having multiple shots pointed to the same inner movie scene would restore incorrectly, causing the inner Playback Range to slip further and further with each successive use of the sequence within a single render.

  • Bug Fix: Update source control helpers to properly resolve file paths for RevertFiles and RevertUnchangedFiles

  • Bug Fix: Fixed a crash in UATHelperModule where pointers for old notifications could potentially be invalid.

  • Bug Fix: Fixed a LevelStreaming issue that occurred when exchanging the desired level with an already loaded level between request and completion. The pending unload was never processed and the state machine remained in the LoadedNotVisible state indefinitely.

  • Bug Fix: Fixed FWorldTileCollectionModel::GenerateLODLevels not releasing generated assets.

  • Bug Fix: Fixed a crash when a map fails to load from the recently opened levels list.

  • Bug Fix: Fixed LevelStreaming when changing the desired level to an already loaded level between request and completion. The pending unload was never processed and the state machine remained in the LoadedNotVisible state indefinitely.

  • Bug Fix: Removed the clamp in USplineMeshComponent::SetEndTangent

  • Bug Fix: Returned previously renamed public members/methods in FWorldTileModel and UWorldComposition and deprecated them.

  • Bug Fix: The PIE window now correctly adjusts its window position if DPI scaling is in use.

  • Bug Fix: Added the -FrameproEnableContextSwitches command line argument to turn on context switch tracking in Framepro captures.

  • Bug Fix: Fixed a bug that would prevent the user from restoring an imported SkeletalMesh LOD after applying a reduction to it.

  • Bug Fix: Material slot names are no longer lost when merging multiple SkeletalMeshes together.

  • Bug Fix: Reimporting an FBX mesh no longer destroys custom collision meshes added in Unreal.

  • Bug Fix: Fix a bug in the MeshEditing toolbar where material assignments were not preserving shadow and collision settings when creating a new material section.

  • Bug Fix: Fixed an assert that could be fired regarding bad progression values when importing FBX files.

  • Bug Fix: Fixed a bug in FBX import where element names would not be properly parsed as UTF-8.

  • Bug Fix: FBX Import - Fixed a bug when reimporting a SkeletalMesh that would reset all the LOD settings.

  • Bug Fix: Fixed the SkeletalMesh "Bake Out Materials" option overriding Slot Names and Imported Material Names.

  • Bug Fix: Fixed a bug that would prevent a collision mesh from being generated during import if the collision data in the FBX file is invalid.

  • Bug Fix: Fixed the python import option ResetToFbxOnMaterialConflict introduced last release. Now, when enabled the FBX import will properly use the "ResetToFbx" behavior on material conflict.

  • Bug Fix: Fixed a bug that would open a new content browser window when cancelling FBX import with the existing browser window locked.

  • Bug Fix: Fixed an issue with bad texture assignment during FBX import when importing textures with names conflicting with material names.

  • New: Added BuildCMakeLib UAT automation script for building third party libraries that use CMake.

  • New: NetworkInsights/NetTrace - Improved tracing of bunches to capture open / close / sequencenumbers and channelid

  • New: Added FVisualLogExtensionInterface::OnScrubPositionChanged to make it easier to tie the visual logger to other debug systems. Contributed by The Coalition.

  • New: Enabled verbose output for SN-DBS code builds - supported platforms compile cleanly, so verbose output is now enabled by default so any issues will be caught as they arise.

  • New: The materials assigned to UStaticMesh and USkeletalMesh assets are now accessible in Python. The "StaticMaterials" and "Materials" properties are now respectively exposed.

  • New: The FBX SDK used has been updated to the latest 2020.1.1 version.

  • Improvement: Clarified function and parameter names in FWorldTileModel and UWorldComposition.

  • Improvement: Removed (or moved to a runtime toggle) some high-frequency/low-value engine performance counters. This improves performance and stability in some profilers.

  • Improvement: In the FBX Import dialog box, renamed "Auto Generate Collision" to "Generate Missing Collision" for clarity.

UI

  • New: Implemented a new Letter Spacing property for UMG/slate widgets with font attributes (text-based widgets). Due to limitations with the HarfBuzz library and issues with letter spacing for cursive text (e.g., Arabic), Discretionary or complex ligatures are not affected by the letter spacing, such as Arabic and Thai.

  • Improvement: Duplicating or copy/pasting widgets in UMG now behaves similarly with other comparable software applications that use layer and object hierarchies, such as Photoshop and Unity. Duplicated widgets now insert the duplication directly above the selected widget, and duplicated widgets are selected by default. When pasting a panel widget, the widget will appear as a child at the top of the draw order or replace the existing panel if you cannot have more than one panel for that particular widget.

Slate

  • Crash Fix: Editor no longer crashes when the Viewport size is set bigger than the maximum texture size allowed.

  • Crash Fix: Editor no longer crashes when rendering Slate from another thread.

  • Crash Fix: Changing to Fullscreen State or resizing the window no longer causes Editor to crash. This was required to support the new flip model, described here: https://devblogs.microsoft.com/directx/dxgi-flip-model/

  • Bug Fix: The Searchable Combo Box no longer incorrectly closes instantly when selecting the box.

  • Bug Fix: The timer handle now sets correctly in the List View Base.

  • Bug Fix: The retainer box no longer incorrectly applies animation render transforms twice.

  • Bug Fix: Memory no longer leaks when using font outlines.

  • Bug Fix: Calls are no longer incorrectly made to Slate Application when in headless mode.

  • Bug Fix: The mouse no longer incorrectly deselects on mouse release when using the Single Toggle selection.

  • Bug Fix: Tooltips now work correctly when receiving OnOpening and OnVisualizeTooltip callbacks.

  • Bug Fix: When right-clicking while dragging a gradient stop, a transaction no longer is incorrectly left open on the SColorGradientEditor.

  • Bug Fix: Rich text blocks now filter data tables correctly by allowed row type.

  • Bug Fix: Multi-select mode now correctly allows multiple selections in the widget tree view.

  • Bug Fix: Resolved an issue where the first item in a list view is skipped by navigation.

  • Bug Fix: Resolved an issue with the Rich TextBlock's Set Text Style by adding a null check.

  • Bug Fix: Register Commander no longer incorrectly attempts to register an unhandled key down event handler on dedicated services. This is because Slate is not initialized.

  • Bug Fix: Using inline text boxes in edit mode now work properly during a drag/drop.

  • Bug Fix: After receiving an element request with no gamma correction, the Slate opengl and d3d references now restore gamma correction values correctly.

  • Bug Fix: When rendering text, frame updates now occur on the game thread. This resolves a potential issue where the font cache is destroyed.

  • Bug Fix: The Invalidation Root now properly handles cases when Process Invalidation is called 2 times in a single frame.

  • Bug Fix: Slate RHI Resource Manager now locks mtex before GC to prevent multithread access to a UObject while processing rendering commands in the loading screen.

  • Bug Fix: Resolved an issue where the Retainer did not properly return the correct Layer ID.

  • Bug Fix: Changed paint calculations in the Retainer Widget to resolve an issue.

  • Bug Fix: We鈥檝e made a correction to the Slate Global Invalidation mode concerning volatile flags on SWidgets. Previously, flags under an invisible parent that have just been made visible were sometimes ignored in the updating process.

  • Bug Fix: Resolved threading issues with PreLoad Screen.

  • Bug Fix: The Invalidation Panel now updates correctly when used in another panel.

  • Bug Fix: Removed invalid widgets from the fast path. When the FastPathGenerationNumber is incremented on the same frame as when the widget is removed, then the widget would hold a pointer to the invalidation root. That pointer may then because invalid. We鈥檝e added code to detect that case and added WITH_SLATE_FIND_WIDGET_METADATA to help find the widget.

  • Bug Fix: Resolved an issue with the Slate Debugging Input Event parameter error.

  • Bug Fix: Resolved an issue with the Slate Invalidation Root by adding a test handler to check if the root is destroyed before the persistent Widget data is cleared. If so, the handler fixes the bad memory when the global invalidation flag changes.

  • Bug Fix: To fix a bug, UE will now delay the construction of ConsoleSlateDebugger and move the text construction from ConsoleSlateDebugger to the defined structure that holds the information. To support this we鈥檝e also added a filter and more info to SWidgetEventLog.

  • Bug Fix: Implicit conversion warnings for Slate Enable Global Invalidation now function correctly.

  • Bug Fix: Made a correction to resize cursor blinking when trying to resize a Window making it very difficult to resize.

  • Bug Fix: We鈥檝e released a fix to make sure the Retainer uses a valid InvalidationRoot. This should also fix issues in the fast path where the retainer was not updated when invalidated.

  • Bug Fix: Slate Tick is now correctly separated from replicated objects when using ClientRecordAsyncEndOfFrame1to replay recordings. This divides up the initial call to just Platform and Input ticking, which performs message pumping as well as some additional added Slate input tasks.

  • Bug Fix: Released a fix to invalidate the user widget canvas when its slot properties change.

  • Bug Fix: UE will now warn the user when the SRetainerWidget render target size is too big or 0.

  • Bug Fix: When reflowing the UI based on Right To Left, we now also mirror the pivot point about the middle, since everything is going to swap sides.

  • Bug Fix: Addressed a crash occurring when the widget loses focus and UE tries to open a submenu. The issue only occured on Mac because of how the message loop is handled.

  • Bug Fix: Menu anchors should now correctly create the popup window for dropdowns in a World space Widget Component.

  • Bug Fix: When the RHI texture resource is not ready, to keep the texture, transparent black now shows correctly, instead of rendering a white rectangle for a frame or two (which causes the UI to "flash").

  • New: The asset picker now includes Required Asset Tags so you can specify the required key/value pairs necessary to display an asset.

  • New: Added the SLayerImage widget to draw an arbitrary number of images on top of each other.

  • New: VCamCore now has an accessor for the protected Scene Viewport variable in the SEditor Viewport class.

  • New: You can now double-click to disable words in multiline text boxes, such as the Editable Text and Text Box.

  • New: SpinBox now supports double and int64.

  • New: The new Header Row now allows you to select the header you want to generate.

  • New: There are several new updates to the Widget Reflector:

    • Overall widget layout update

    • Ability to save your settings

    • Ability to toggle your column visibility in the menu

    • Widget Snapshot Visualizer includes a clipping zone

    • Added filters for other UMG widgets in the widget tree

  • New: Added the Console Slate Debugger Update, which enables you to determine which widgets have update flags. Other widgets can be updated as a side effect of the updated widgets.

  • New: Added debugging tool for a navigation event in the Widget Reflector.

  • New: Added debugging tool to support drawing debug information on top of Slate Widgets.

  • New: You can now use a Visualizer key input in Demo Mode through the commands Slate.DemoMode.KeyEvent or Slate.DemoMode.MouseEvent. This input is now separate from Widget Reflector.

  • New: Mouse Capture is now compatible with Widget Reflector events.

  • New: Added the Slate Navigation Event Simulator so when offline, the event simulates a navigation event as it would occur in game. The OnNavigation function and other callbacks are not executed. If the widget has special needs for simulation, the Simulated Navigation MetaData can be added to the widget.

  • New: Introduced a way to prevent IO hitches in font loading. You can now use the CVar, Slate.Font.AsyncLazyLoad 1, to force fonts marked as LazyLoad to be loaded on a background thread. Until these fonts show up you鈥檒l see your error glyph like, until the font finishes loading, once it does we鈥檒l invalidate font layouts forcing recalculation.

  • New: Exposed ListView's EntrySpacing to Blueprints.

  • New: Added the console command SlateDebugger.InvalidationRoot. We鈥檝e also enabled the option to display how the invalidation roots are updated.

  • New: Added the console command SlateDebugger.Invalidate. We鈥檝e also enabled the option to display how the widget gets invalidated.

  • New: Added a debug tool to see which widgets are painted. It's useful in a fast path, and can be activated from the console with 'SlateDebugger.Paint.Start"

  • New: Added Slate.CheckUObjectRenderResources to find UObject resources that are not valid but used by Slate RHI.

  • New: Added a log to record how input events are routed in Slate. This log uses the ConsoleSlateDebugger with the option "InputRoutingModeEnable" enabled.

  • New: Added entry size getters to Tile View.

  • Improvement: The checkbox widget now treats key down events similarly to events and carries over any settings for click/touch/press methods. The touch/press methods are now part of the SCheckbox and are all exposed to the UWidget.

  • Improvement: The Collapse Menu On Parent Focus setting now appears on the SComboBox node, in addition to the SComboButton.

  • Improvement: The MultiLine Editable Text Box now clears focus when pressing the Escape key. This is now consistent with the Editable Text Box behavior.

  • Improvement: You can now use Undo in any editable text field.

  • Improvement: The Rich TextBlock decorator class now uses the overridden default style, when provided.

  • Improvement: The Input Preprocessor mouse movement event call is now part of the Process Mouse Move Event, and is removed from OnMouseMove/OnRawMouseMove. This ensures touch events are always routed through the Input Preprocessor and can be handled appropriately.

  • Improvement: Several major improvements were made to RDP behavior with Editor.

  • Improvement: The Input Event only translates when needed.

  • Improvement: The Universal Search binding is now added to the Widget Blueprint Indexer.

  • Improvement: Changed FWidgetProxy::MarkProxyUpdatedThisFrame from static to class function.

  • Improvement: Added a tint option to the draw quad.

  • Improvement: In Slate, you can now use the window as a dangling pointer with the Pre Load Slate Widget Renderer.

  • Improvement: Fixed some instances of the deprecated EInvalidateWidget to EInvalidateWidgetReason. Moved EWidgetUpdateFlags into its own file. Changed FWidgetProxy::MarkProxyUpdatedThisFrame from static to class function.

  • Improvement: You can now use the Input Routing Mode Enabled to log how input events are routed in Slate.

  • Deprecated: The 'Slate.InvalidationDebugging" console command is not deprecated. Use 'SlateDebugger.Invalidate.Enable" instead.

  • Deprecated: Renamed TranslateMouseCoordinateFor3DChild to TranslateMouseCoordinateForCustomHitTestChild, to more accurately reflect its purpose.

UMG

  • Crash Fix: Editor no longer crashes when Widget Renderer's status is nullptr.

  • Crash Fix: Editor no longer crashes when dragging and dropping a named slot element.

  • Crash Fix: Added a null check to the Widget Blueprint Has Latent Actions to prevent Editor from crashing when pasting widget Blueprints from other projects that reference a Blueprint library.

  • Crash Fix: UMG slots now have a check for InSlot>Content to validate the property. This prevents an issue that caused Editor to crash.

  • Bug Fix: WidgetComponent now correctly supports Component only using SWidget.

  • Bug Fix: Widgets now clip correctly.

  • Bug Fix: Widget components with render targets that change colors now re-initialize correctly.

  • Bug Fix: Editor utility widgets no longer incorrectly dirty the level when reinstancing.

  • Bug Fix: When a Widget is renamed, you can now search for any previous variable "get" nodes and adjust the orphan pins correctly.

  • Bug Fix: Widget Components now correctly support using only SWidgets.

  • Bug Fix: Widget Components now re-initialize render target color changes correctly.

  • Bug Fix: UMG slot Details category no longer incorrectly changes position when multiple widgets are selected.

  • Bug Fix: When verifying if the BindWidget properties are bound to the correct Widget, UE will now test on the Widget owner when the Widget is part of a Named Slot. The Widget will appear 2 times because the ForEach is recursive. Also, an inner UserWidget may have a NamedSlot that contains the BindWidget. Keep in mind that BindWidget is part of the inner UserWidget tree but not part of the inner UserWidget class. To help support this, the CompileAllBlueprint commandlet has been changed to only compile a certain type of Blueprint.

  • Bug Fix: The UMG Designer Class Viewer now correctly populates the class tree when a parent Blueprint is loaded without the child Blueprint.

  • Bug Fix: Concerning Slate, added missing UPROPERTY tag on UMG widget.

  • Bug Fix: When renaming, we鈥檝e added a reason for when the BindWidget is not of the right type.

  • Bug Fix: Abstract & deprecated widgets are now hidden in the UMG Widget palette.

  • Bug Fix: We鈥檝e changed the Pointer Index to an integer.

  • Bug Fix: Implemented a correction in UMG Designer to prevent a crash due to drag/drop of the named slot element.

  • Bug Fix: Released a fix to prevent a crash in AsyncTaskDowloadImage when using nullrhi.

  • Bug Fix: Released a fix for when Background Blur in UMG is filled with black when UI.CompositeMode is used in HDR.

  • Bug Fix: WidgetInteractionComponent's implementation of OnComponentCreated now calls the parent class" implementation.

  • Bug Fix: Fixed "Replace Binding" incorrectly removing all bindings when all requested widgets are already bound to other tracks.

  • New: You can now use a scaling ruler when using ScaleToFit.

  • New: You can now use Set Animation Current Time to set the current time of the animation without changing the game state (playing, pausing, ect.)

  • New: UMG now has a new navigation simulation and debugging input.

  • New: Added Scale To Fit to the scaling ruler.

  • New: You can now add an unique UMG Designer Extension externally from the designer module.

  • New: The TickMode option on Widget Components improves widget performance by preventing the widget from ticking when the widget is not visible or not set.

  • Bug Fix: You can now correctly select which variable to delete with the "Delete unused variables" command.

  • New: Added a generic Check Box List to display a list of checkboxes with labels associated with your variables.

  • New: Added dialog to confirm that the user wants to delete a widget, when it's used in the graph.

  • New: Exposed WidgetInteractionComponent debug line thickness.

  • New: Added default Widget Blueprint parent class to Project Settings.

  • New: Added events for when interpolation starts and when it updates on the numeric textblock to allow for synchronized sounds or other stuff.

  • New: Added draw function to show the result of the Navigation simulation. UE now displays the result for selected widget or all the widgets if there is no selection.

  • Improvement: The Property Binding now hides by default in the preview widget.

  • Improvement: You can now use a culling rectangle for the appended grid. The owner of the grid may have a different culling rectangle than when it got created.

  • Improvement: Redesigned how templates (archetypes) are generated for widgets, resulting in large memory savings (approximately 60% of total template memory can now be recouped).

  • Deprecated: On Get Menu Content Event is now deprecated. Use the On Get User Menu Content Event instead.

Virtual Production

  • Crash Fix: Fixed a crash when r.D3D11.UseAllowTearing was changed after viewport creation and then was Resized. This was happening when using Multi-User with -ConcertAutoConnect and Oculus VR plugin was enabled, because auto connection created a notification window, then Oculus VR cleared r.D3D11.UseAllowTearing.

  • Crash Fix: Corrected a crash that occurred when r.D3D11.UseAllowTearing was changed after viewport creation and then got resized. This was happening when using Multi-User with -ConcertAutoConnect and Oculus VR plugin was enabled because auto connection would create a notification window and then Oculus VR would clear r.D3D11.UseAllowTearing.

  • Crash Fix: Fixed an AudioCaptureTimecodeProvider crash due to stack overflow when calling GetFrameRate().

  • Crash Fix: Fixed the editor crashing when stopping the WebControl server.

  • Crash Fix: Fixed a crash in nDisplay when DisplayClusterRootActor sits in the sublevel and this sublevel is not last in the list.

  • Crash Fix: Fixed a crash for when nDisplay was used with instanced stereo enabled.

  • Crash Fix: Fix crash when in VR and Multi-User, where other machines may crash when one starts VR Mode. This was happening because success of GetTransformAndForwardVector was not being checked, hence uninitialized location values were being sent in the Multi-User/Concert event to the other clients, and eventually cause NaN values in the bounds of laser spline mesh components of the VR presence actor.

  • Crash Fix: Fixed a crash when hot reloading level in -game by correctly resolving the world package.

  • Crash Fix: Fixed a possible crash where frame rate is bad in timecode synchronizer.

  • Crash Fix: MoviePipeline now skips null shots in the Executor Job to avoid crashing when trying to check if they match our target shot.

  • Crash Fix: Fixed an nDisplay crash that occurred when it was launched in windowed mode with a window size larger than the main display size.

  • Crash Fix: Fixed a crash that was preventing sequences to be saved at nDisplay cluster nodes via StartRecording/StopRecording Blueprint commands.

  • Crash Fix: Fixed a crash on nDisplay when adding VR Scouting Actors.

  • Crash Fix: Fixed some nDisplay crashes while working with Multi-User:

    • Crash on LoadLevel

    • Crash on root actor manipulations

  • Crash Fix: Fixed a crash when cluster events are sent to the second PIE session.

  • Crash Fix: Fixed a crash when nDisplay was used with instanced stereo enabled.

  • Crash Fix: Fixed an nDisplay crash when camera component was missing at Pawn in the in-camera VFX workflow.

  • Crash Fix: Fixed an editor crash when an nDisplay cluster event is emitted in PIE.

  • Crash Fix: Fixed various nDisplay crashes that were happening when Multi-User was used.

  • Bug Fix: Fixed a gamma issue in VPFullScreenUserWidget - PostProcess mode (UMG was rendered too dark).

  • Bug Fix: Fixed a missed frame warning that was missing when using genlock from the ref pin.

  • Bug Fix: Fixed a bug to prevent sending negative color values to OpenColorIO transforms.

  • Bug Fix: Fixed a jitter and periodic glitch for nDisplay when requesting screen percentage below 0.5. TAA Upsampling were only working well up to 2x, so if larger ratios are requested it now clamps the primary screen percentage to 0.5 and the secondary screen percentage does the remaining upscaling.

  • Bug Fix: Fixed three of functions in LiveLinkBlueprintLibrary to be static so that they are accessible from Blueprints.

  • Bug Fix: Teleport to bookmark now takes headset offset into account.

  • Bug Fix: Fixed a bug for Multi-GPU in DoCrossGPUTransfers, where it was using view rects without their offsets within the render target.

  • Bug Fix: CCRs: Made sure that Color Correct Regions appear during the search.

  • Bug Fix: AJA has improved format detection to include HDMI, and suggest progressive/interlaced based on request. Also fixed the sync rate calculation based on PsF. Tested using KONA 5, using PsF, interlaced and progressive inputs, with and without WaitForFrame flag, which currently has no effect.

  • Bug Fix: Fixed an issue with CCRs not getting Scene Textures for post processing.

  • Bug Fix: Fixed nDisplay's multi viewports functionality for DX12.

  • Bug Fix: Provided a fix for KONA 5/IO4k sub 30fps 4k issues.

  • Bug Fix: Fixed 3D audio in VR mode, where it was not taking the HMD rotation into account when setting the transform of the audio listener.

  • Bug Fix: Fixed incorrect settings in the RemoteSessionFrameBufferChannel.

  • Bug Fix: : Fixed a missing CloseProc in Switchboard.

  • Bug Fix: Composure preview window will now Suspend when in Simulate.

  • Bug Fix: Fixed the AppleProRes Media Encoder in MoviePipeline using a removed variable.

  • Bug Fix: Fixed queues in MoviePipeline that were losing their ShotInfo when the editor was restarted.

  • Bug Fix: Snapping functionality now automatically turns off when going into VR with the VR scouting plugin enabled, then turns back on when exiting VR. This avoids an issue of not being able to grab items.

  • Bug Fix: Delayed start (and device enumeration) in LiveLinkXR to OnEndFrame so that UpdatePoses can happen beforehand. Without this workaround, default LiveLink presets using LiveLinkXR would not work because it enumerates the devices before the first call to FSteamVRHMD::UpdatePoses() happens (since default presets are set in OnFEngineLoopInitComplete), and without a valid pose the tracker is not enumerated.

  • Bug Fix: Add missing UpdateResidency() calls in ConditionalCompactAccelerationStructure().

  • Bug Fix: Allow AppleARKit and AppleARKitFaceSupport plugins to package in Win64 (in addition to iOS). Without this, users are not able to stream from Live Link Face app into a packaged game in Windows.

  • Bug Fix: Fixed 3D audio in VR mode, where it wasn't taking the HMD rotation into account when setting the transform of the audio listener.

  • Bug Fix: TDM: Genlock status is now set to Synchronizing when the genlock signal is not valid in AJA card.

  • Bug Fix: Fixed zombie UE instances in Switchboard:

    • List of running programs can now detect multiple instances of the same program running on the listener, and so can send the command to kill them and avoid zombies.

    • Resolved cstat_project exception. The issue was that multiple instances of the cstat_project command were being issued, but only the last ID was remembered in the program_name to program_id dict.

    • Improved socket management and disconnect detection.

  • Bug Fix: Removed the dependency of VPCCR on D3D12 RHI because it was breaking compilations on platforms that do not support it.

  • Bug Fix: Fixed a Switchboard bug related to Monitor UI not populating when there are no initial devices. Can now take nDisplay config paths with double quotes. Also ensured config save flag is restored even when exceptions happen.

  • Bug Fix: Allows the Remote Control API to be used in shipping.

  • Bug Fix: Apply Multicast TimeToLive (TTL) to the Unicast socket, which is the one used to send the multicast packets. This does not affect unicast TTL.

  • Bug Fix: nDisplay now avoids a crash in Root Actor PostLoad when there is no World yet. PostLoad is being called without a World, and InitalizeRootActor was crashing. It now checks for the World and returns immediately without initializing. Since PostLoad is being called later when there is a World, initialization is performed then. This was happening in one of the test projects when nDisplay is in a sublevel, even with Always Loaded checked.

  • Bug Fix: Fixed PFM preview Blueprints.

  • Bug Fix: Color Correct Regions were fixed to handle an issue due to the fact that lower Scalability settings for the rendering pipeline were dropping the Alpha channel completely. Therefore, sampling Scene Texture for the Alpha channel was returning 0. Since we are pre-multiplying the output color by alpha, it was giving black color in a region area as a result. Since there was no Alpha channel in Scene texture or in color-correct region render-target texture, the blending pass was producing a black box.

  • Bug Fix: Moved LiveLinkXRSourceFactory out of LiveLinkXREditor so it would work in Runtime.

  • Bug Fix: Fixed high CPU usage due to spinning reading a pipe.

  • Bug Fix: Applied Multicast TimeToLive (TTL) to the Unicast socket, which is the one used to send the multicast packets. This does not affect Unicast TTL.

  • Bug Fix: Fixed rgb-to-yuv conversion shaders for mediacapture (mostly apparent in 720p).

  • Bug Fix: MoviePipeline has a fixed scenario where if one camera cut section in a moviescene was disabled, all subsequent camera cuts in that shot would get disabled.

  • Bug Fix: CCR: Fixed the issue related to how subsurface objects and other types of Materials are propagated further down the post processing pipeline, and processed by CCR incorrectly. In High Effects settings, scene color stored in RGBA texture and shaders can sample alpha correctly. In Lower Effects settings Shaders have to sample a special GBuffer texture containing opacity. Since these materials are processed properly much later in pipeline, Opacity looks more like a stencil than anything.

  • Bug Fix: Fixed a LiveLinkXR bug where OnEndFrame could call a destroyed object.

  • Bug Fix: Vcam was updated to prevent users from recording with a slate that has a space in it.

  • Bug Fix: Fix for VR Scouting ensured that Gaffer Light Level is propagated to Multi-User Clients.

  • Bug Fix: For Vcam, the following have been fixed: map indicators, screenshot info, stats readers, and focus/interact panel bugs.

  • Bug Fix: Fixed the GetAttributeNode pins.

  • Bug Fix: Fixed VProd Measure Tool not updating motion controller texture in context menu on construct.

  • Bug Fix: For Vcam, it now properly views clips recorded from the currently open LevelSequence.

  • Bug Fix: VR Scouting bookmarks are now spawned in the direction of the controller.

  • Bug Fix: Fixed a KONA HDMI RGB input issue.

  • Bug Fix: Fixed an issue where the Stop PIE button was not available after any error during nDisplay initialization.

  • Bug Fix: Updated protocols unit tests.

  • Bug Fix: Fixed the treads and sockets issue for sACN:

    • Removed the thread for each universe.

    • The socket now opens only when the universe is using it.

    • Sockets are cleaned if there are no listeners.

    • The sACN thread listener has been removed.

    • It is now using a gameplay tick for listening changes on the sockets.

  • Bug Fix: Fixed a custom origin component set for PICP and PICP-MPCDI projection policies.

  • Bug Fix: Fixed byte swapping for sACN.

  • Bug Fix: Implemented a fix for VR scouting tools that would not work after closing the VR menu if Undo/Redo was pressed.

  • Bug Fix: The Gaffer Actor is now transacted when modified via the Gaffer tool in VR Scouting

  • Bug Fix: Fixed an issue where nDisplay root actor could not be found if it was located in a sub-level.

  • Bug Fix: The sACN Universe not ticking when slate UI not in focus has been fixed. It now gets replace with core delegate. It blocks the ticking in ThrottleManager

  • Bug Fix: In VR Scouting, the Second Controller was unusable with First Controller submenu. This has been fixed.

  • Bug Fix: Fixed replication of all nDisplay internal real numbers to prevent precision loss.

  • Bug Fix: Switchboard had issues fixed relating to Settings:

    • Plugin Settings now properly clear between config loads and do not contaminate each other.

    • Fixed issues where instance settings variables were sometimes being used instead of class settings variables.

    • All settings are now in collections instead of independent attributes, simplifying parts of the code.

    • Cleaned the settings code, clearly separating plugin from instance-only settings.

    • Removed redundant cascade of resaving of settings every time a setting changes while the Settings Dialog is open.

    • Config paths now accept double quotes (as returned by Windows "Copy As Path").

  • Bug Fix: Switchboard has an improved project build command. Previously, it was not building the project cpp modules.

  • Bug Fix: An issue with Switchboard has been fixed where it was not able to build a non-Perforce project due to a hidden button. This also handles an error message from Perforce cstat instead of showing only the last word in the message.

  • Bug Fix: Fixed a bug in Switchboard where each listener_client could use up to 100% of a core.

  • Bug Fix: In Switchboard, fixed zombie PresentMon:

    • The Flip monitors are now being killed explicitly, not relying on their functionality to terminate when their watched process terminates.

    • Killing processes now send a close signal and allow 2 seconds for the process to close before forcing the termination, giving it an opportunity for proper cleanup.

    • To keep listener responsiveness given the new 2 second timeout, killing processes is now an async task.

  • Bug Fix: Switchboard was not updating the launch button when launch failed. This has been fixed.

  • Bug Fix: Switchboard miscellaneous fixes:

    • Added a CONCERTRETRYAUTOCONNECTONERROR command line option when launching MU.

    • Improved handling of cstat response.

    • Renamed the Workspace Name field to clarify that it is a name and not a path.

    • Fixed device removal notifications, where you can choose whether or not to update the config or not.

    • Added NoVerifyGC as a fixed option when launching nDisplay render nodes.

  • Bug Fix : Switchboard can now distinguish between multiple instances of Unreal opened by the same listener upon reconnection, by matching a caller field with the device.

    • Fixed mishandling of a program start failed delegate.

    • Parses the fullscreen parameter in nDisplay config file and uses it to properly construct the launching command line.

    • Added noxrstereo to nDisplay launch command to avoid conflicts with VR devices (such as Vive Tracker).

    • Added a way to specify ExecCmds.

    • Added DisableAllScreenMessages when launching the nodes to avoid sync issues due to notifications.

    • Re-parses config file before launch to update parameters that are exclusively controlled by it. Otherwise you could, for example, change screen resolution and it would not be updated unless the config file is re-added, losing all overrides and customizations of the nDisplay set of devices.

    • Added a way for Device instance settings to opt out from getting a UI in the Settings Dialog鈥攆or example, when these settings are controlled by the config file and not manually by the user.

    • Last column in nDisplay Monitor does not stretch anymore. It is more pleasing this way.

  • New: Switchboard now handles full screen nDisplay window configuration when launching the render nodes.

  • New: For Switchboard:

    • Added support for Maps to nDisplay launches.

    • Added a Default Map option to avoid forcing the map in the command line and instead use project defaults.

    • Moved map setting to configuration, since this is a per-project setting.

    • Map list now updates when map path is changed.

  • New: For Switchboard:

    • Added overrides for cmd line and execcmds for nDisplay nodes.

    • Separated cmd line and execcmds between "unreal" and 鈥渘display" devices.

  • New: Miscellaneous improvements for Switchboard:

    • Added -forceres to the nDisplay launch command line when in windowed mode.

  • New: Switchboard can now choose which commands are echoed in the output log of the listener. This is meant to avoid a spam of periodic messages.

  • New: For Switchboard:

    • Added device icons.

    • Improved handling of missing icons.

    • Renamed a specific mobile device to LiveLinkFace.

  • New: Switchboard status now includes the NVIDIA driver version.

  • New: Switchboard now has a taskbar monitoring autohide flag. Also removed one of the build flags that could prevent engine rebuild.

  • New: Switchboard now injects class overrides to avoid needing WindowsEngine.ini in Perforce. It also includes the bUseBorderlessWindow option in DefaultGame.ini.

  • New: Switchboard: Added the ability to read and report NVIDIA Sync Status and the Flip Mode of a process started by Switchboard (i.e. UE) Listener:

    • The task is performed asynchronously.

    • Added a mechanism to run tasks asynchronously based on Async and TFuture.

    • Fixed a bug related to the listener's main loop fps.

    • Added a mechanism to identify equivalent requested tasks so that they can be optionally rejected.

    • Used said mechanism so that repeated get sync status requests can be safely rejected if an equivalent task is already in progress.

    • Python App:

      • Added a mechanism for plugins to add their own UIs into the main window, namely the main toolbar and new plugin tab manager.

      • Using this mechanism, added a custom tab to monitor nDisplay nodes.

      • Added an nDisplay Monitor class to query and parse the new get sync status command and populate the model used by the tableview in the custom tab.

  • New: Switchboard now has detection of compatibility flags in UE4Editor executable. In particular, the Disable Fullscreen Optimization flag is of interest because it can cause tearing in LED walls. Also fixed the missing if PLATFORM_WINDOWS.

  • New: Switchboard Listener now reports its state, namely its running processes, to the Switchboard app upon connection. This is particularly useful when the Switchboard app gets restarted and needs to reconnect.

  • New: VCamCore is a new framework for creating, customizing, and using virtual cameras in Unreal Engine. It can be used in Editor, Play In Editor (PIE), and standalone game modes. It is fully customizable and does not require any special game modes, controllers, or maps. To create a Virtual Camera, add a CineCameraActor to your scene and attach a VCamComponent to it. Add various Modifiers and Output Providers to customize, and for added flexibility, the Composure compositing system can also be integrated.

  • New: Updated the Aja TimecodeProvider and internal library to support reading from a dedicated LTC pin.

  • New: Added a new type of asset鈥擱emote Control Preset鈥攖hat makes it possible to expose object properties and functions to remote control. It also allows grouping properties from different objects under a single panel.

  • New: For TextureShare, a plugin was added that can be used to share textures and buffers between Unreal Engine and third-party applications.

  • New: Added a LiveLink subject rebroadcast option to rebroadcast any LiveLink subject over a separate LiveLink provider. This allows the subject to be shared with other editors receiving the LiveLink data.

  • New: Added a Composure output option to VPFullScreenUserWidget that allows the widget to render the UMG into a separate render target instead of directly to a viewport. This is intended to primarily be used with the Composure system for compositing UMG layers with other layers.

  • New: For beam rendering:

    • Added more samples for high quality

    • Changed "set initial state" behavior to use defaults and 鈥渟nap" first DMX packets

    • Tweaked zoom (beam and light)

    • Added support for "Intensity Scale" in PIE

    • Fixed warning from dynamic materials when packaging matrix fixture

    • Tweaked beam culling

    • All lights fixtures are now moveable by default

    • Updated pan/tilt rotation range based on MF feedback

  • New: Added Blueprint and C++ accessors for various parts of the Composure pipeline. Also added a sample Editor Utility Widget Blueprint in the VirtualProduction/VCamCore plugin that uses the new functionality to setup a simple "A over B" composure stack with a single click.

  • New: Sample Blueprints and Assets for VCamCore are now available.

  • New: A new engine plugin is now available under VirtualProduction/LiveLinkXR. This plugin allows you to track any SteamVR-compatible devices and send the transform data out over LiveLink. Supports HMDs, controllers, Vive Trackers, and any other trackable device.

  • New: Removed the timecode frame rate requirement from a Live Link subject.

  • New: Added a smooth-latest mode to the timecode evaluation for Live Link subjects.

  • New: Updated Live Link to support loop playback by using received order dropouts. Also added verbose logs to help debug live streams.

  • New: Added a new StageMonitoring plugin to manage stage machine logging and monitoring.

  • New: Updated the clock offset estimation to be continuous so as to have a more accurate difference on each Live Link sample. That way, EngineTime evaluation mode can be seen as a smooth latest mode.

  • New: Added settings to RemoteControl plugin to auto start web servers on boot.

  • New: The Virtual Camera has been implemented, and GameMode/PlayerController has been deprecated. Please use the new SimpleVirtualCamera and VirtualCamera2 Classes.

  • New: For Concert: A command line option, -CONCERTISHEADLESS, was added to disable notification windows as these windows can interfere with nDisplay sync.

  • New: Added functionality to VPFullScreenUserWidget to optionally specify a viewport instead of always assuming currently selected viewport.

  • New: For nDisplay: Config paths with spaces are now supported. This requires a small change in the command line, where you need a '-" prefix, such as -dc_cfg="path\with spaces\config.cfg" iInstead of: dc_cfg=鈥減ath\nospaces\config.cfg" If it cannot parse the new form, it will try the old one, so that old custom launchers can still work. The same thing was done with -dc_node and -dc_gpu for consistency.

  • New: Composure can now be included in packaged game builds.

  • New: PresentMon binary and associated license file was added to Switchboard.

  • New: : Added to Switchboard support for the new JSON-based nDisplay config file format.

  • New: LiveLink: Added a flag to disable the LiveLinkComponentController when inside a Sequencer spawnable. This avoids LiveLink interfering with Sequencer when playing back spawnables. Also added a way to explicitly pause the controller from evaluating LiveLink.

  • New: On Cine Camera, there is a change to depth-of-field method from None to Do Not Override to describe what it is actually doing, as it is not overriding post process settings. Also added a new method of Disable, which disables depth of field entirely by overriding post process settings.

  • New: Added native delegates to the OSC server to pass address and port to callbacks.

  • New: ComposureWizard is an example Editor Utility Widget for use with VCamCore that shows how to create a simple composure stack and hook it up to a virtual camera automatically using Blueprints. Starting from an empty map, you can click a couple of buttons and instantly connect via the UnrealRemote 2 app from iOS.

  • New: In OCIO BP wrappers of the Scene View Extensions were added that can be assigned OCIO config and associated with a rendering context.

  • New: Added support for fractional timecode to ARKit face protocol.

  • New: Added WebSocket support to the Web Remote Control API.

  • New: MoviePipeline EXRs now write multiple render passes to a single EXR file instead of separate EXR files.

  • New: MoviePipeline now has metadata support for multi-layered EXR files. Implementation adds metadata for: Camera Focal Length, Focal Distance, FStop, Sensor Height/Width, camera position/rotation, previous camera position/rotation, frame rate, level sequence name, level name, and job date/time (UTC). Additional metadata can be added by implementing additional setting classes.

  • New: In MoviePipeline, added a {version} format string which can be either specifically versioned or can auto-detect the version number. Auto detection looks for the first {version} tag in the output directory, then searches all sibling files and folders for version tags before picking the highest one and incrementing that by one.

  • New: MoviePipeline has refactored the UMoviePipelineDeferredPassBase into a more common base class to allow additional rendering passes.

  • New: TDM has an added way to detect if the Genlock signal is present.

  • New: Added a command line option to tell XRSystem to not override GEngine->StereoRenderingDevice. This is useful when XR-tracking features are desired, but GEngine->StereoRenderingDevice should be implemented by a different system (such as nDisplay). In the absence of this cmd line parameter, everything works as usual.

  • New: Movie Pipeline has initial refactoring to simplify the setup of custom render passes.

  • New: In MoviePipeline, Path Tracer and select other Viewport Lit modes are now supported as output passes for the render pipeline.

  • New: Added Static and Unicast Endpoint configuration to MotionBuilder LiveLink plugin.

  • New: Added support for fractional timecodes to ARKit face protocol.

  • New: UDP Messaging: Fixed UDP Messaging static endpoints that were not properly sent to when the unicast endpoint was forced to a specific interface. Modified the Multi-User Server launching to bind a different port on the unicast endpoint port of the editor. This is set when it transfers its settings to it. Updated the UDP messaging settings tooltip as well as a multi-user launch server button. Now exposes Server Port settings for the Multi-User server unicast endpoint over the passed UDP messaging settings when booting the server from the Editor.

  • New: Exposed settings of UDP Messaging module

  • New: Switchboard has an added -ConcertIsHeadless command line option when launching nodes to avoid notification windows from interfering with nDisplay sync. Also disabled nDisplay logs that were on by default.

  • New: MoviePipeline now has the ability for passes to override show flags based on user settings such as disabling Depth of Field or Motion Blur.

  • New: Letterboxing support was added to Movie Render Queue.

  • New: In MoviePipeline, the separation between Engine Pass and Render Pass was removed. The abstraction layer was providing no benefits in practice, and complicating implementation of additional passes.

  • New: Timecode has converted the BlackMagic Timecode Provider and Custom Timesteps to genlocked versions. This allows the Blackmagic timecode to use genlock to count.

  • New: OCIO viewport display look now has a hook in the viewport View menu to configure a display look. Also added an OCIO display view extension to apply color conversion to viewport being rendered.

  • New: Timecode has an improved robustness for the LinearTimecodeDecoder, in particular, for AudioCaptureTimecodeProvider:

    • Checks for a pattern at end and beginning.

    • Checks for valid timecode value ranges.

    • Checks for valid bit time durations when provided. Also converted to GenlockedTimecodeProvider since LTC is typically genlocked to a master clock or video signal.

  • New: Timed Data Monitor now supports multi-format and timecode counts from Genlock Sync if the timecode provider allows it. Added an abstract class GenlockedTimecodeProvider and GenlockedCustomTimeStep to support this functionality. Added a function that more explicitly fetches the timecode, and can be used to encapsulate certain behavior (like checking genlock). The getters are now meant to not fetch from HW and instead return a cached value鈥攖his should not affect existing timecode providers. Also, AJA now defaults to trying to enable multiformat.

  • New: Added a MediaUtils.StartupProfile CVar that can be used to load the specified Media Profile at startup. Because this is usually a hardware-dependent setting (such as per PC), this allows the user to specify it in the -SystemSettings section when launching the project. An example would be in DefaultEngine.ini: [SystemSettingsNode0] MediaUtils.StartupProfile=/Game/MP_Test.MP_Test. You would pass -SystemSettings=SystemSettingsNode0 in the command line.

  • New: Added a Switchboard application that provides a way to control remote machines on a Virtual Production set. It can be used to sync and build Unreal projects on those machines, as well as launch nDisplay nodes.

  • To make launching Switchboard easier, an editor plugin named Switchboard was also added. This plugin can be used to:

    • install Switchboard's dependencies on first launch

    • launch Switchboard

    • launch the Switchboard listener

    • (un)install the Switchboard listener for windows autostart

  • It also adds several project settings that can be used to change how Switchboard and its listener are started. This then offers the opportunity to use a different Python interpreter than the one installed by default.

  • A UE4 program named SwitchboardListener was added to communicate with remote clients. It relays various information and commands between Switchboard and the remote machine. It is meant to be started on the remote host that the user wants to control via Switchboard. The SwitchboardListener can:

    • Start arbitrary applications and track their process

    • (Soft) kill previously started applications and send back their output

    • Send and receive arbitrary files

    • Report GPU sync state

  • New: Updates DXM fixtures assets.

  • New: Implemented a node for casting a fixture patch to a specified fixture type.

  • New: Added a new plugin that allows an exchange of any textures between UE4 and third-party applications; sample projects are provided as well. Also added integrated textures exchange functionality into nDisplay, and multi-GPU render support for nDisplay viewports.

  • New: Initial implementation of nDisplay configuration in-editor preview has been added. This is an early preview, limited by simple and MPCDI projection policies only. It will be finished in the next release.

  • New: Two new fixture types have been added: The first adds key inputs for Delete, Duplicate, Copy, and Paste for Functions and Modes The second adds attribute names next to the function name.

  • New: Users can now upload or download their created fixtures into the GDTF database as GDTF files.

  • New: The in-camera VFX workflow now supports Multi-User editing functionality. Modifying IncameraSettings and IncameraStageSettings no longer crashes the nDisplay cluster.

  • New: A new nDisplay projection policy was added to allow utilization of VIOSO SDK for multi-display setups (DX11, DX12).

  • New: A texture preview interface for Output Graph in "DisplayClusterConfigurator" has been implemented.

  • New: RemoteControlWebInterface provides a web control interface to remote control UE preset.

  • New: nDisplayListener properly sets a working directory for every nDisplay UE4 instance on launch.

  • New: nDisplay now syncs objects that are replicated on TG_PostPhysics tick group.

  • New: GameVice is now integrated with panning and teleport to home for Vcam.

  • New: Duplicated entities (when using Ctrl+W or the Context Menu command) are now added immediately after their original counterparts.

  • New: Vcam VirtualJoystick has been integrated with flight mode animations.

  • New: A master node of a preview config is used automatically by default for nDisplay PIE sessions.

  • New: Added a mode dropdown with the options Multicast, Broadcast, and Unicast.

  • New: Integration of modifier delegates into VCam2UI has been added.

  • New: Switchboard added a -MaxGPUCount setting to support mGPU.

  • New: Added a RenderSync log category to the nDisplayLauncher Log tab and nDisplay core synchronization logic.

  • New: In Switchboard, build progress for each device is now shown:

    • Sync progress also has an indication of progress in the form of stdout line count.

    • Build step is in the tooltip for build percentage.

    • Any program start request from Switchboard can now include a flag to get stdout updates as they happen.

    • Fixed an issue with keep alive while building.

    • Replaced TAtomic with std::atomic due to deprecation warning in source.

    • Fixed an issue when building a path to VPRoles.ini file where double quotes were incorrectly included.

    • Fixed getting the CL for the project instead of the Engine.

  • New: Added support for making Virtual Subjects in Blueprint. Blueprint Virtual Subjects can be created through the Create Advanced Asset dialog under Live Link > Blueprint Virtual Subject.

  • New: Replaced VRPN analog data serialization to text hex format to avoid precision loss.

  • New: In Switchboard, missing command line options for Stage Monitor to work properly with nDisplay have been added: VPRole, StageFriendlyName, and SessionId. It also now has an improved handling of writing strings on int fields in the settings dialog.

  • New: Updated focal length and aperture slider value labels now support GameVice integration.

  • New: Vcam has added MotionAdjustment stabilization delegates.

  • New: You can now use the nDisplay root node as an origin for a simple projection screen when its parent is missing in a config file.

  • New: Two-finger pinch-to-zoom and panning now implemented into VCam Map.

  • Deprecated: The OnProtocolReceived event has a deprecated.

XR

  • Crash Fix: Fixed a crash in Magic Leap when launching project via editor with -game and ZI is enabled and running.

  • Crash Fix: Fixed a crash in the Unreal test framework for HoloLens 2.

  • Crash Fix: Fixed a Vulkan editor crash on dual GPU machines. The lifetime of the strings given to UE via ml_remote.h were maintained by the VkExtensionProperties object sent to UE instead of providing a string view. When a second GPU queried GetVulkanDeviceExtensionsRequired, the original strings were cleared. The first GPU would then receive garbage data when acting upon the char*s it was given. This change allows dual GPU systems to launch the editor with ZI enabled.

  • Crash Fix: VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT support was added for pipeline stage and access mask. This fixes a potential crash on Quest/Quest2 with Vulkan.

  • Crash Fix: Added new texture aliasing APIs for OpenGL. The missing implementation was causing an assertion failure and crash when initializing mobile VR devices using OpenGL.

  • Crash Fix: Fixed an OpenXR crash when entering VR Preview a second time.

  • Crash Fix: Fixed a potential crash caused by null pointer access when cooking ARCore candidate images.

  • Bug Fix: Fixed an HMD-tracked query so it will ignore extra PIE worlds. This fixes problems with local multiplayer PIE and VR. The first player's camera will be VR. Others will not.

  • Bug Fix: Fixed a hologram jitter when not using multiview.

  • Bug Fix: Cleared MRMesh blocks when the world scale is changed.

  • Bug Fix: The USE_LOGGING_IN_SHIPPING macro now works as expected on Lumin.

  • Bug Fix: For HoloLens Remoting, addressed an issue where the first VR Preview against a remoting connection would only show a still image of the scene.

  • Bug Fix: Fixed a critical performance issue鈥擟ustomPresent now returns a correct value for the WMR plugin when presenting natively on a device.

  • Bug Fix: HoloLens: Visual Studio 2019 + new forwarders for the interop; updated Nuget libraries - including fix of remoting from game.

  • Bug Fix: Start/Stop QRCode detection from HoloLensARFunctionLibrary now works. Previously, QR would always start, with an unexpected webcam permission dialog at startup.

  • Bug Fix: GetTrackingQuality bugs fixed, and implemented TrackingQualityReason.

  • Bug Fix: Various fixes made for choppy audio, no audio, or random noise when the Magic Leap device went into or came back from standby mode.

  • Bug Fix: Fixed to use single speech recognition when remoting on HoloLens.

  • Bug Fix: HoloLens now uses correct cleanup of MeshUpdateObserver.

  • Bug Fix: The HoloLens third cam is now allocated for the HoloLens device only.

  • Bug Fix: Fixed a bug where apps did not launch on HoloLens devices that were not using developer mode.

  • Bug Fix: Magic Leap no longer exits early if another HMD hijacks the Vulkan initialization. This caused extensions required by MLRemote to never be queried.

  • Bug Fix: Added a debug for HoloLens x64 APEX binaries for use with debug CRT.

  • Bug Fix: HoloLens now explicitly uses only x64 remoting dependency binaries for x64 builds.

  • Bug Fix: Modified Avatar SDK mesh/bone conversion to align with FBX imported files and other SDKs.

  • Bug Fix: Added the functionality required for the Oculus Keyboard Overlay to work.

  • Bug Fix: Fixed the screenshot code to ensure that it grabs a screenshot from the correct window. Previously, it would just try to screenshot the first window to update after F9 was pressed, which, in preview, could have been any editor UI window.

  • Bug Fix: Oculus now ignores the app command APP_CMD_PAUSE if it occurs before APP_CMD_INIT_WINDOW.

  • Bug Fix: Fixed an issue where PokeAHole material was not loading on Android successfully.

  • Bug Fix: Oculus support added for device color specifications and hand tracking.

  • Bug Fix: Fixed the preview window clipping error that was introduced by a fix to backbuffer scaling/window resize handling in Slate. The preferred window size is now used in the UpdateFullscreenState call in the stereo rendering mode.

  • Bug Fix: Fixed an assert on Quest with HISM and mobile multi-view.

  • Bug Fix: Changed to RGBA format to avoid a Universal Bandwidth Compression (UBWC) bug with BGRA formats on mobile stereo devices (which fixes a potentially serious performance regression on these devices).

  • Bug Fix: Because the Microsoft Store requires a unique version number for each update for easier tracking, an auto increment project version has been added for each build. You can opt in to this feature in the HoloLens project settings under Packaging/Auto Increment Version.

  • Bug Fix: Fixed the FRHICustomPresent override where it gave an incorrect return value that caused a critical performance issue on the HoloLens 2 native.

  • Bug Fix: Updated the default minimum Win10 SDK for HoloLens packaging to correct an issue where the SDK < 17763 would fail to package if one of these SDKs were installed (for example, < 16299) on the build machine.

  • Bug Fix: Fixed issues in AugmentedReality implementation for MagicLeap:

    • Reset the worker thread setup for image tracking so it restarts on consecutive VRPreviews.

    • Handled UpdateTrackedGeometry in LuminARTrackedPointResource::UpdateGeometryData so that it would update even if there was not a valid position and orientation to update to. This would sometimes happen after a level transition, and if UpdateTrackedGeometry was not used, the Point might not have a valid ARSystem pointer, which could crash if certain Blueprint functions (GetLocalToWorldTransform, for example) were called at that time.

    • Removed GetTrackableHandleMap from the ARTrackingSystem interface. Instead, a new function, RemoveHandleIf, is now used to set the StoppedTracking state and remove the handle. 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.

  • Bug Fix: Fixed a memory overwrite issue in ARCore.

  • Bug Fix: Corrected volumetric particles that were drawn twice in left eye with instanced stereo.

  • Bug Fix: Fixed a bug where the fragment density map in Vulkan (if you use Vulkan Foveation) is added in the renderpass, but not in the renderpass attached to the graphics pipeline.

  • Bug Fix: The HoloLens world mesh has been fixed to prevent bricks from vanishing and reappearing. The bricks were actually being moved around whenever an update came through that did not change the mesh.

  • Bug Fix: Added an Android Dynamic RHI string for OpenXR render bridge.

  • Bug Fix: This fix forces the backbuffer to 1x1 for standalone VR mobile devices to save memory.

  • Bug Fix: Fixed a black screen issue if using the Mobile Preview when Mobile Multi-View is enabled.

  • Bug Fix: Fixed OpenXR occlusion masks and enabled them on supported runtimes.

  • Bug Fix: Improved frame pipelining in the OpenXR plugin to eliminate hitches.

  • Bug Fix: Headsets going into idle in the OpenXR plugin are now properly handled.

  • Bug Fix: There is now support for Texture2D Arrays with multi-view and MSAA.

  • Bug Fix: Fixed an assertion with certain materials on Magic Leap.

  • Bug Fix: Packaging fix for HoloLens was implemented to make sure to save the manifests for each architecture with unique names so they don't get overwritten. This fixes packaging issues when building from binary engine releases, where the build produces a manifest for the plugin for ARM64, which then would get overwritten by the manifest for x64. This, in turn, would cause another error during packaging, where the plugin was referencing a manifest for the wrong architecture.

  • Bug Fix: Added a delegate to allow external code to get notified when the brick data in UMRMeshComponent is updated. This fixed the problem that there's no easy way to expose the vertex data from UMRMeshComponent in a CPU readable format.

  • Bug Fix: HoloLens now has both x64 and Arm64 targets available.

  • Bug Fix: Fixed a bug where the ARCore camera feed was vertically inverted when mobile HDR was disabled.

  • Bug Fix: Enabled occlusion rendering for ARCore.

  • Bug Fix: Fixed the ARCore/ARKit camera passthrough material. MOBILE_STENCIL_COMPARE_FUNCTION was introduced in the shader code without a sensible default value. Its value was only set by FPostProcessMaterialPS but there were other native codes that also used the same shader code (FGoogleARCoreCameraOverlayPS, TARKitCameraOverlayPS). Now the default value for MOBILE_STENCIL_COMPARE_FUNCTION is set to MOBILE_STENCIL_COMPARE_NEVER, making it backward compatible.

  • Bug Fix: Fixed UARBlueprintLibrary::IsARSupported so that it returns a meaningful value.

  • Bug Fix: HoloLens and Windows Mixed Reality support for Windows Server 2019.

  • Bug Fix: Workaround fix for MRMesh flickering on Vulkan desktop renderer. To fix this, at least for now, 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: The MagicLeap ImageTracking now works on consecutive VRPreview launches, and Light estimation works when ARSession is restarted on the device.

  • Bug Fix: No longer attempts to update the depth texture unless scene depth is enabled for ARCore.

  • Bug Fix: Fixed AR overlay occlusion rendering. All the AR passthrough material has POST_PROCESS_MATERIAL defined, but they鈥檙e actually rendered at the end of the base pass. Since we cannot access SceneColor.A during the base pass, this change added an additional check against POST_PROCESS_AR_PASSTHROUGH when trying to access it.

  • Bug Fix: Add x64 architecture for HoloLens to fix packaging.

  • Bug Fix: No longer renders the depth target to MLGraphics in Zero Iteration. Only reallocate depth target if requested size matches the expected one. This workaround is required because this depth allocation function can receive requests for targets other than the one for eye stereo render (like when using a SceneCaptureComponent).

  • Bug Fix: Fixed a bug where the AR component visualization did not work when the ARActor was spawned locally on the client in a networked session. It is not necessary to set ARActor's owner to the player controller to get its RPC and replication working. In fact, setting the owner as the player controller confuses the networking logic when ARActor is spawned locally on the client. In particular, ServerUpdatePayload_Implementation is no longer triggered on the authoritative client, which breaks the callstack used for triggering visualization update.

  • Bug Fix: Call TriggerOnTrackableAddedDelegates until the AR component is first updated. This ensures that the UMRMeshComponent is created when the user code is triggered by the delegate.

  • 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 it is mostly kept for testing purposes.

  • Bug Fix: Fixed a Vulkan validation layer error for missed layout transition on Magic Leap.

  • Bug Fix: Converted the ARKit camera texture to the correct rotation:

    • The color space conversion code now also takes the device rotation into account and corrects the output texture rotation automatically. This makes it a lot easier to consume the converted texture in other places of the engine.

    • As a result, you now only need two vertex buffers for rendering the camera overlay, instead of four. The need to rotate the camera image in the Remote Session plugin is also removed.

    • Bonus: fixed a bug in the AppleImageUtils plugin regarding Metal texture image rotation.

  • Bug Fix: Internal GC object is now used to make all the UObject used by FGoogleARCoreDevice GC aware.

  • Bug Fix: Fixed planes not working on consecutive VRPreview runs when using the AugmentedReality interface.

  • Bug Fix: Fixed the compilation on VS2019 without VS2017, and Azure Spatial Anchors on the emulator.

  • Bug Fix: Moved the Azure Spatial Anchors plugin code to a new directory. The Microsoft directory caused build problems for Android, so these plugins moved up into the AR directory. Their names are unchanged.

  • Bug Fix: Azure Spatial Anchors now calls SubmitManifest instead of UpdateManifest.

  • Bug Fix: Issues with OpenXR motion controllers were resolved:

    • If no profiles are bound, aim/grip will bind to the Khronos Simple Controller profile.

    • The SimpleController OpenXRExtensionPlugin replaced by the HandTracking and EyeTracking OpenXR Extension Plugins.

  • New: Azure Spatial Anchor support for ARKit on IOS is now available.

  • New: Azure Spatial Anchor support for ARCore on Android is now available.

  • New: OpenXR Hand Tracking support now available for both motion controller left/right and getting joint transforms via Blueprint.

  • New: Added the spatial anchor ARPins to the OpenXR plugin. This added an interface where an AR anchor implementation can be provided as OpenXRExtensionPlugin. It also makes OpenXRHMD an IARSystemSupport.

  • New: Support was added for selecting between grip and aim poses for controllers in the OpenXR plugin. New motion sources for grip and aim were also added. The default left and right are the same as the grip, with either hand able to use either grip.

  • New: The default OpenXR loader was updated to 1.0.9 to ensure that it works with all prerelease extensions.

  • New: Support was added for querying pose and velocity at time of an action trigger with OpenXR:

    • A custom event can now be bound to receive an OpenXR input action event, along with a timestamp. In the future, the core input system would likely provide a 64-bit timestamp that could be used for this purpose.

    • A HeadMountedDisplayFunctionLibrary function and IMotionController function were also added to get the controller pose and velocity data at a specific time. For some platforms this defaults to a cached value, but when possible it returns more information.

  • New: QR code tracking was added for OpenXR:

    • Interfaces were added for using QR code AR-tracked geometries in OpenXR. This does not add QR support out of the box; Microsoft has a plugin that implements an OpenXR extension, and uses this interface to implement the feature. The user needs that plugin or a similar plugin for the feature to be active.

    • Fixed std:c++17 and other build settings for HoloLens (used in Microsoft's OpenXR plugin).

  • New: Implemented the XR_MSFT_hand_interaction OpenXR extension in a plugin using the Microsoft extension, which allows hand tracking to act like a motion controller, providing grip and aim poses and two gesture-based, button-like inputs, Select and Grip.

  • New: OpenXR now has Eye Tracking support for XR_EXT_eye_gaze_interaction OpenXR extension:

    • This was hooked up for worldscale and trackingtoworldtransform.

    • A few additions to the IOpenXRExtensionPlugin were made to enable extensions that need to set up and consume XrActions.

  • New: OpenXR AR anchor persistence support:

    • Added an interface to IOpenXRExtensionPlugin for ARPin Local Store support.

    • An extension plugin can be created to provide support for storing a pin/anchor to device-supported storage, such as the device or user account.

    • This change does not provide an implementation.

  • New: The HoloLensAR module was moved from the HoloLensAR plugin to the WindowsMixedReality plugin:

    • The module provides AR feature support via Windows Mixed Reality APIs.

    • This removed the dependency of WindowsMixedRealityPlugin on the HoloLensAR plugin, as it was no longer needed.

    • HoloLens Remoting now works with only the WindowsMixedReality plugin enabled. The HoloLensAR plugin is required for HoloLens device packaging with either WindowsMixedReality or OpenXR, but WindowsMixedReality HMDs do not require the HoloLensAR plugin.

    • UE4 code operates mainly at the module level, not the plugin level, so this change is unlikely to require code changes, but it might leave third-party plugins with unnecessary dependencies on the HoloLensAR plugin.

  • New: Adds support for ARTrackedGeometry to OpenXR. This infrastructure supports other OpenXR extension features.

  • New: Support for selecting between grip and aim poses for motion controllers now provides a way to hook up aim and grip to the legacy left EControllerHand so that these motion sources will work even on old content or code.

  • New: Image-tracking integration was refactored to fix a number of issues, and to allow users to select an image target orientation format:

    • FMagicLeapImageTrackerTarget was split into FMagicLeapImageTargetSettings and FMagicLeapImageTargetState.

    • The module/runnable integration was made into an on-request polling API for the image target state and transform. This means that it no longer queries the target state on its own in a tick, but provides a func for someone else to poll (in this case the ImageTrackerComponent). Because of this, the module/runnable also does not fire the target found/lost events. This is now the responsibility of the component itself, so it can manage the sequence of transform updates and delegate broadcasts. This design now fixes the bug where the target found event was fired before the transform of the component was updated.

    • The mutex locks were limited to the minimum possible scope, which fixed some bugs with potential nested mutex lock calls.

    • Some Blueprint function library getters have been marked as BlueprintPure.

    • The MagicLeapAR integration for image tracking was updated in accordance with the rework of the MagicLeapImageTracker module.

    • All image tracker-related code was moved (adding candidate images) into FLuminARImageTracker.

    • Unreliable pose updates in FLuminARImageTracker have been accounted for and corrected.

    • Tracker creation is now delayed until the first candidate image is added when using MagicLeapAR.

    • Fixed a bug in MagicLeapRunnable that caused CompletedTasks to never be reported on non-Lumin platforms. This was causing OnSetImageTarget delegates to never be called, and subsequently, the MagicLeapAR integration to never work for image tracking.

    • The AugmentedReality interface reports orientation for images tracked via ARKit and ARCore with Up (Z) axis as the normal, whereas on Lumin we report the Forward (X) axis as the normal. Added the option for devs to choose which orientation they want their image target transforms to be reported in.

  • New: Content bindings (friendly name and MagicLeapARPin ID combo) are saved and a callback is fired when MagicLeapARPins are found. Save and load game operations are now async in the MagicLeapARPin implementations. Added missing files from previous changelist.

  • New: Added support for ARSession mesh config properties in MagicLeapAR.

  • New: Updated Magic Leap SDK to 0.24.

  • New: Implemented MagicLeapARPin To/From string parsing helpers, which implement how the conversion is expected by the platform.

  • New: Implemented MagicLeapARPin query filters, exposed pin types, fixed actor restoration when using the MagicLeapARPinComponent, and defined functional use cases in the API.

  • New: Added an account for the listen server in MagicLeapSharedWorldGameMode. In a listen server, one of the clients was also the server; that client returned true for IsLocalController(), causing the condition in MagicLeapSharedWorldGameMode::Tick() to fail, which then caused the client to never contribute any PCFs. Since a PlayerController only exists for clients, local or remote, and the GameMode instance only exists on the server, we now do not need to check for anything鈥攁uthority, role, remote role, or net mode. If it is a PlayerController, we expect PCFs from it.

  • New: Provides the ability to run code analysis on HoloLens builds.

  • New: HoloLens Media Player plugin support is now available.

  • New: Added new privilege types available with Magic Leap SDK 0.24.

  • New: Added a HoloLens Remoting option to listen on a known port for connections.

  • New: Added D3D12 support for HoloLens 2 via OpenXR.

  • New: HoloLens will now only go immersive if bStartInVR is enabled.

  • New: Added a show-and-hide HoloLens system keyboard.

  • New: Added Dynamic Fixed Foveated Rendering on Quest.

  • New: Added Quest 2 support for adding Quest2 device type and manifest generation.

  • New: Updated OVRPlugin to version 1.49.

  • New: Added an interaction profile support to the upcoming HP Reverb G2 controllers for developers who wish to natively target the new button and axis mappings (a,b,x,y buttons/analog grip).

  • New: The Oculus Widget update included disabling mobile shader options to reduce shader permutations, and iteration through ULightComponentBase objects instead of ULightComponent so skylights will also be recommended to be set as static.

  • New: Updated the OVRPlugin to v19 (1.51).

  • New: Upgraded the Oculus plugin to 1.47. This also deprecates some old APIs (deprecated ZED camera device was removed, and Touchpad input was deprecated).

  • New: Updated the Oculus Platform Tools panel.

  • New: Unreal Insights has been enabled for HoloLens.

  • New: Support for OpenXR AR webcam capture support was added.

  • New: Depth composition on HoloLens when using OpenXR is now enabled.

  • New: Updated the HP Motion Controller and SteamVR so they would work with each other: Squeeze Action was renamed to Grip to work with SteamVR mappings, HP Controller was added to the list of devices looking for an x and y button, and the plugin was renamed HPMotionController.

  • New: The AR Pin/Anchor local store was refactored to create a cross platform-compatible API for Anchor Local Store in ARBlueprintLibrary. On the supported platform (currently Windows Mixed Reality and HoloLens) you can save an anchor to the Local Store or load them from it by a string key. This supersedes the old Named Pin system, which saved anchors to the store by pin name, because not all platforms have pin names. Some of the Blueprint API is being automatically transformed by redirect. Other functions that need more content work were deprecated.

  • New: Scene Understanding support in OpenXR AR makes DirectX12 the default for HoloLens OpenXR rendering Expose OnLineTraceTrackedObjects to OpenXRExtensionPlugins.

  • New: Added an OpenXR Hand Tracking extension plugin.

  • New: Added support for Instanced Stereo Rendering to Niagara VFX.

  • New: The OpenXR plugin can now be extended using Extension plugins.

  • New: There is now a unified code path for rendering the passthrough camera on handheld AR platforms:

    • The engine lacked a generic and unified code path for rendering the passthrough camera background, or onto occlusion mesh that users could add to the level. Previously each AR platform had its own way of rendering the passthrough camera, which usually involved different UV setups and custom materials.

    • We have now unified the pattern by using several standard materials in the ARUtilities plugin. These materials reply on the Map AR Passthrough Camera UVs node to map from normalized UV to a suitable one for a particular view/texture size combination.

    • Most of the custom materials from the ARKit, ARCore and remote session plugins have been removed due to the use of standard materials. The custom material expressions are also flagged as deprecated.

    • For rendering the passthrough camera onto a user defined occlusion mesh, there is a helper鈥擴PassthroughMaterialUpdateComponent鈥攖hat makes things easier. It handles picking the correct passthrough material based on the camera texture type, as well as updating the texture parameter in the tick, both of which are required for ARCore.

  • New: Added support for HoloLens 2 to the OpenXR plugin.

  • New: Integrated the Depth API for ARCore 1.18:

    • The new Depth API can be enabled by using EARSessionTrackingFeature::SceneDepth on the AR Session Config object.

    • The user can query if the feature is supported via IsSessionTrackingFeatureSupported.

    • If supported and enabled, the engine will create a R32F texture, holding the depth map data from ARCore.

    • The data in this texture is the depth of the environment with regard to the camera, in millimeters.

  • New: There's a CVAR controlling debug rendering of the depth map:

    • arcore.DebugOverlayMode=1: shows the raw value of the depth map, in meters.

    • arcore.DebugOverlayMode=2: shows a coloration of the value in the depth map.

    • To access the depth map, users can use GetARTexture from UARBlueprintLibrary.

    • Currently, occlusion rendering is disabled for ARCore as there is a bug about accessing the scene depth in the occlusion material; hopefully this can be fixed in a later change.

  • New: Removed beta tags on WindowsMixedReality and HoloLens plugins; both plugins are now production ready.

  • New: Added support for the hand pointer pose in input simulation

  • New: Basic stats pass for ARCore's frame update code path.

  • New: Replaced custom APIs in the ARCore plugin with a generic interface class for AR dependency and permission handling. Users should now call UARDependencyHandler::GetARDependencyHandler() to get a handler object, with which they can perform several tasks related to dependency and permission management. On platforms that don't support explicit dependency management, a nullptr will be returned.

  • New: Added support for the standard onboarding UX from ARKit 3.0. This feature is enabled by bUseStandardOnboardingUX from the session config object. For devices supporting ARKit 3.0 and above, the ARKit plugin will create a FARKitCoachingOverlay object managing the ARCoachingOverlayView, which is added to the root view of the application. Note that it is not easy for the overlay to show up, and there is no way to configure its sensitivity. The easiest way is to start the session with the camera covered and wait for ~10s.

  • New: Fixed a bug in Windows Mixed Reality when using a SpatialStageFrameOfReference where camera height decreases when tracking is lost. Context: The stage frame of reference is at the floor鈥攗sed by VR. The stationary frame of reference is at eye-level鈥攗sed by HoloLens The attached frame of reference is also at eye-level鈥攗sed for 3DOF fallback. When falling back to 3DOF, the expected transform to use was the last known transform between the tracking coordinate system and the attached coordinate system. However, we were accidentally creating new variables with the same name in a different scope, so an identity transform was being used instead. Since the stationary and attached frames of reference are both at the same height, HoloLens was not affected by this bug, but VR devices with valid stages were.

  • Bug Fixes: Various fixes for Magic Leap hand meshing:

    • Removed explicit caching and resending 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.

    • Fixed flickering caused by garbage data being used for the bounds in a frustum/bounds visibility check. The data was garbage because it was never supplied. A box is now supplied based on the HMD position and orientation.

    • Fixed the vertex normal calculation for Magic Leap hand meshing (using incorrect normals was crashing on low poly meshes). Generates normals by adding the normal of each triangle that a vertex is part of, then normalizes the result (this is done during tangent generation to remove the need to add a separate iteration over the mesh just to do normalization). If triangle weights should be used for this, multiply the normal by the area of the triangle first. Add a Blueprint callable 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.

    • Note: The order of the cross product in FMagicLeapMeshTracker::GetResult has been intentionally swapped to account for the left handed coordinate system of Unreal. One-sided materials should work on the hands now (a previous change to the hand mesh winding only seemed to work because the normals were not correct at that time).

  • New: Added support for multiple tracked faces with ARKit 3.0:

    • Use UARBlueprintLibrary::GetNumberOfTrackedFacesSupported to query the number of supported tracked faces on the device.

    • Use UARSessionConfig::MaxNumberOfTrackedFaces to specify the number of tracked faces to request. Right now no device supports more than three tracked faces.

    • If multiple faces are tracked, each one will be assigned an unique Live Link subject name, based on UAppleARKitSettings:

      • DefaultFaceTrackingLiveLinkSubjectName: #1:

      • DefaultFaceTrackingLiveLinkSubjectName #2:

      • DefaultFaceTrackingLiveLinkSubjectName-1 #3:

      • DefaultFaceTrackingLiveLinkSubjectName-2

  • New: Support was added for the smoothed scene depth data introduced in iOS 14 beta 5.

  • Deprecated: HoloLens 1 Remoting is now deprecated, and will be removed entirely in UE5.

  • Deprecated: Deleted the deprecated MagicLeapScreens plugin.

  • Deprecated: Deprecated the HoloLens 2 virtual keyboard show/hide methods; these were replaced by some virtual keyboard functionality improvements.

  • Deprecated: GearVR has been deprecated.

  • Deprecated: Oculus Go and 3DoF have been deprecated.

  • Deprecated: Mobile Multi-View Direct is now the default multi-view mode.

  • Deprecated: Deprecated UGoogleARCoreFaceMeshComponent:

    • Improved the implementation of UARFaceComponent so that it has all the functionality of UGoogleARCoreFaceMeshComponent, and deprecated the latter.

    • Fixed a problem where the ARKit face tracking integration did not upload the UV info to UARFaceGeometry.

    • Allowed additional vertex data to be uploaded to UMRMeshComponent via the UpdateMesh API, which is now used for uploading the vertex normal for the face mesh from ARKit/ARCore.

  • Deprecated: Deprecated individual GetAllTrackedXXX APIs in favor of a generic API: GetAllGeometriesByClass.

  • Deprecated: GetUpdatedAugmentedFaces was deprecated in favor of GetAllGeometriesByClass.

  • Deprecated: Removed the BlueprintSpawnableComponent flag from the deprecated ARCore actor components so that they can no longer be used in Blueprints.

VR

  • Crash Fix: Fixed out-of-order destruction crashes with the Oculus Avatar plugin.

  • Bug Fix: Fixed warnings when exiting VR mode.

  • Bug Fix: Added SteamVR Input JSON manifests as part of packaging. This fixes manifests not being packaged on Blueprint-only projects.

  • Bug Fix: Fixed an issue in Oculus for a VAO overwrite issue causing black screen on Quest in OpenGL.

  • Bug Fix: Fixed an out-of-date view uniform buffer for selection rendering post-process (broken selection highlights in VRMode).

  • Bug Fix: Disabled the selection outline for VRMode to avoid rendering artifacts.

  • Bug Fix: Fixed an initial button repeat delay being ignored on the Oculus Touch. Fixed cross and triangle buttons being swapped on PS Move controllers.

  • Bug Fix: More optimal handling of scene capture and reflection capture when in VR Mode (using Grow rather than resize in cases where it makes sense).

  • Bug Fix: Changed the OVRPlugin library linking to explicit from implicit, so the module is not loaded on platforms that do not use it. This avoids linking errors on various versions on Android, as well as some runtime errors鈥攂ut still works on Quest and desktop.

  • Bug Fix: Removed invalid Valve Index Grip Click and Trackpad Click controller keys.

  • Bug Fix: Fixed incorrect base pose caching in SteamVR Input module.

  • Bug Fix: VR devices are no longer initialized when the project launcher is opened if a project is not loaded.

  • Bug Fix: Warnings have been made more friendly for missing OVR DLLs.

  • Bug Fix: The selected Oculus audio DeviceId now passes to XAudio2. This fixes the case where it passed null, forcing the application to use the Windows default device, which would disable the functionality of allowing a VR headset to choose its preferred audio device.

  • Bug Fix: Fixed a bug in Vulkan Multiview: there was a case where a texture array would get the Depth attribute copied under NumLayers where depth should be 1, and numLayers 2 (for a multiview texture for example).

  • Bug Fix: Fixed SingleEyeLetterboxed mode in Spectator Screen for Oculus. The issue was that Oculus was setting the viewport with RHICmdList.SetViewport(DstRect.Min.X, DstRect.Min.Y, 0.0f, MipViewportWidth, MipViewportHeight, 1.0f); this was incorrect since the 4th and 5th parameters are supposed to be max X and Y (not width and height). This worked in most modes since Min.X and Min.Y are usually 0. In this mode, Min.X was non-zero which exposed the bug.

  • Bug Fix: Fixed the long timeout hitch when calling Enable/Disable HMD for Oculus headsets.

  • Bug Fix: Vulkan Submit for HMDs (which do not use swapchains) was causing assert on negative array index. This has been fixed.

  • Removed: The Oculus Avatars plugin has been removed.

  • New: Added Mobile Multi-View support for Hololens using instancing.

  • New: Added Oculus Quest platform support to OpenXR.

DMX

  • Crash Fix: Fixed a crash from the FDMXBuffer shared pointer getting destroyed when used among different threads.

  • Bug Fix: Fixed a double channel component in DMX Fixtures, and added a gobo spin component.

  • Bug Fix: For DMX Fixtures:

    • Resolved an initial state issue

    • Added strobe burst and sine wave effects

    • Matrix beam is now proportional to the matrix

    • Fixed Moving Mirror tilt rotation to always look down

  • Bug Fix: Fixed DMX Fixtures to ensure that texture resource is not null.

  • Bug Fix: DMX: Fixed reimport conflict.

  • Bug Fix: Fixed water fountain BP logic in DMXFixtures.

  • Bug Fix: The DMXFixtures lens is now modulated by intensity and color to avoid "glow in the dark", fixed the color disk to avoid desaturation, recompiled fireworks emitters and PS, set new default attributes for FW/pyro/water/laser, inverted zoom values, fixed color inconsistency between beam and light, and updated disk bake tool to output textures with needed settings

  • Bug Fix: DMXFixtures has had fireworks debug prints removed, and max light distance for beam mesh fixed.

  • Bug Fix: Fixed a DMXFixtures issue with lens effect and black color.

  • Bug Fix: DMXFixtures has a fixed beam scaling issue.

  • Bug Fix: DMXFixtures no longer have interpolation divergence between PIE and standalone.

  • Bug Fix: Upgraded the SendDMX subsystem function with arguments instead of functions.

  • Bug Fix: A DMX fix was made for references to Entities in a duplicated library so that they are no longer lost after restarting the editor.

  • Bug Fix: DMXFixtures has a fix for dynamic occlusion and a tweaked zoom component.

  • Bug Fix: DMX fixtures now return to their default state after Play in Editor.

  • Bug Fix: Fixed building issues with the collision in DMXFixtures, and added a check to make sure dynamic materials exist at init time.

  • Bug Fix: Added beam visibility options on all light fixtures in DMXFixtures, and tweaked the WashLED fixture (the lens is back and disabled pointlight).

  • Bug Fix: Tweaked lens materials in DMXFixtures to get a shiny look. This now supports a normal map. Disable light and beam visibility when lights are off.

  • Bug Fix: Get All Fixtures of Type node now has dropdowns for selecting a DMX Library asset and its Fixture Types. This replaces a previous custom node that was deleted.

  • Bug Fix: A DMX fix handled an issue where Fixture Patches copied into a different library asset with several Parent Types will no longer be pasted with the same Parent Type.

  • Bug Fix: DMX fixes for Controller updates to valid universes when created. Patches on default Universe 1 now display as assigned.

  • Bug Fix: DMX Bug Fix: SNameListPicker selected value on the dropdown menu is no longer incorrect after changing the property it represents through means other than the dropdown itself.

  • Bug Fix: Renamed SendDMX and SendDMXRaw map parameters to clarify their intent.

  • New: For DMX Fixtures, added Laser with DMX, changed the format of few Gobo textures, fixed the format of lavender texture, and resaved all assets.

  • New: Upgraded visuals and optimized performance in DMX Fixtures.

  • New: Streamlined pyro/water/fireworks Blueprints and FX in DMX Fixtures.

  • New: Fixed the matrix Blueprints for DMX Fixtures, and updated the matrix beam.

  • New: For DMX Fixtures:

    • Switched fixtures materials to metallic, updated strobe mesh

    • Set the default intensity of light fixtures to 2000cd (approximately 25000 lumens)

    • Fixed beam falloff since it was too strong

  • New: Updated water fountain for DMX Fixtures, and added a few new components.

  • New: For DMX Fixtures, switched pyro sim to the CPU for now so they show up, updated light intensity in materials, and updated the function category in matrix fixtures.

  • New: Added DMX Fixture Assets.

  • New: DMX now has a custom Sequencer Track for animating Fixture Patch function values.

  • New: DMXEngine, DMXFixtures, DMXProtocol are no longer experimental!

  • New: A DMX Fixture Patch Editor now visualizes its Fixture Patches, and allows for drag and drop for patches.

  • New: You can now use live render target texture data to drive DMX fixtures or low resolution LED panels and devices. Each pixel represents a DMX fixture.

  • New: Refresh Rate for incoming and outcoming DMX has been implemented.

  • New: Added an AddOrCreateUniverse into the IDMXProtocol API.

  • New: DMX now has a DMX Library Take Recorder Source.

  • New: DMX now supports Take Recorder and Sequencer for the new Attribute System.

  • New: FDMXProtocolName and FDMXFixtureCategory Name properties are now exposed to Blueprints.

  • New: The DMX Library asset now has its own category in the Asset Creation menu.

  • New: In the DMX attribute system, a search box was added on SNameListPicker for when the list has more than 15 values.

  • New: For DMX GDTF file import, a function's address span is computed from the actual addresses described on the Offset values of the imported functions. The functions" initial address are kept by computing their address offsets when needed.

  • New: DMX Libraries are now available without loading them explicitly.

  • New: DMX has experimental support for ETC consoles.

  • New: DMX has an initial implementation of the Attribute system for Fixture Functions names that can be easily referenced on Blueprints and other related systems.

  • New: Store DMX Input monitor console Protocol and Universe ID on .ini files.

  • New: There are new tools for collecting data about DMX for profiling and debugging, similar to other stat tools in Unreal Engine such as STAT FPS. These are console commands that display debug information or allow a user to query the currently connected fixtures and controllers.

  • New: DMX now has the correct naming of duplicated and copy-pasted Fixture Patches.

  • New: The DMX Attribute system now has Blueprint nodes that access DMX values through Attributes.

Programming Notes

  • Bug Fix: The AutoDestroy Subsystem will now tick only if the outer object exists and is not marked for destruction.

  • Bug Fix: Fixed usage of SCOPED_NAMED_EVENT and TRACE_CPUPROFILER_EVENT_SCOPE in various places. It avoids scope event names to get additional quotes. Also avoids the overhead of using macros with dynamic string as scope name where not necessary.

  • Bug Fix: Fixed usage of TRACE_CPUPROFILER_EVENT_SCOPE macro (to avoid adding extra quotes to named events).

  • Bug Fix: Fixed a crash due to uninitialized UVChannelData which could occur when adding a new material on a static mesh at runtime.

  • New: Added a Viewport Status subsystem which supports a more extensible API for displaying messages like "LIGHTING NEEDS TO BE REBUILT".

  • New: Added the third-party tool Cruncher Sharp to Engine/Extras/ThirdPartyNotUE.

  • New: Added horizontal drag and drop support for STableRow.

  • New: UHT now supports int64 properties marked as ExposeOnSpawn.

  • New: Implemented a GetDistanceAlongSplineAtSplineInputKey function on the Spline Component.

  • Improvement: Optimized TSet::Empty to avoid the pathological case where the hash size is large but there are not many elements in the hash. This is mainly used when marking and unmarking objects, such as during package saving and other archives tagging objects, but also in several cases all over the engine.

  • Improvement: UWorldSubsystem::GetWorld is now marked as final.

  • Improvement: Decreased the time it takes to discover game projects in the coding environment.

  • Deprecated: In MeshDescription, when accessing mesh attributes, TMeshAttributesView<> has now been deprecated. TMeshAttributesRef<> should be used instead.

Upgrade Notes

Blueprints

  • API Change: Renamed core FBlueprintExceptionTracker to FBlueprintContextTracker, moved it to Script.h, and added access protection for members. Deprecated global core delegate OnScriptExecutionEnd; moved it and entered a new context callback into FBlueprintContextTracker.

Core

  • Upgrade Notes: FMath::Clamp now has UE_NODISCARD; its return value must be used.

Editor

Sequencer
  • API Change: Decoupled the timing element of the PlayTo, ScrubTo, and JumpTo families of functions from their core operations. Now, users call SetPlaybackPosition to establish the time (in frames, seconds, or marked frames) at which operations should take place. The user then calls the new PlayTo, ScrubTo, or JumpTo function to perform the appropriate operation.

  • API Change: The UMovieSceneTrack::OnSectionMoved method has gained a parameter struct, which gives information about the section movement.

Networking

  • Upgrade Notes: NetworkDriver.cpp has been renamed to NetDriver.cpp to be consistent with class name and coding standards. Any custom code changes to NetworkDriver.cpp must also be moved or merged into NetDriver.cpp.

Online

  • Upgrade Notes: Following a Social Platform Descriptions refactor in FUserPlatform, any user extension of FUserPlatform needs to be updated.

  • Upgrade Notes: Code releasing IVoiceChatUser instances with the delete keyword should instead call IVoiceChat::ReleaseUser.

HTTP
  • New: HTTP Server Improvements

    • Listeners can be configured on a per-port basis via [HTTPServer.Listeners] config section

    • Fixed issue where HTTPListener::Tick() could be called after the underlying connection has been closed

    • Fixed unnecessary HTTPListener warning re: send buffer size

  • Upgrade Notes: HTTPListener instances now default bind to the loopback ethernet interface; users who wish to listen via an external ethernet interface must explicitly do so via the newly available configuration section [HTTPServer.Listeners]

  • Upgrade Notes: Any code that uses TSharedRef and TSharedPtr will need to be updated to use TSharedRef and TSharedPtr or FHttpRequestRef and FHttpRequestPtr.

Physics

Clothing
  • Upgrade Notes: If the results of a cloth simulation on a SkeletalMeshComponent are used on the game thread for any purpose, you must now set bWaitForParallelClothTask on the USkeletalMeshComponent.

Platforms

Android
  • Upgrade Notes:Any implementation of NetworkConnectivityClient.Listener will need to update the onNetworkAvailable callback to include the NetworkTransportType, a new Enum added to the NetworkConnectivityClient. Network transport types can be one of the following:

    • Wifi

    • Vpn

    • Ethernet

    • Cellular

    • Bluetooth

    • Unknown (other)

  • Upgrade Notes: The "Disable Flip Copy GLES" flag has reversed its meaning since the previous release due to a bug fix.

Rendering

Lighting
  • Upgrade Notes: The new "cast contact shadow" flag defaults to true, so behavior should match previous versions in any cases where meshes have the "Cast shadows" flag enabled. If the old behavior where contact shadows are cast for all objects (even if either flag is set to false) is desired, set the CVar "r.ContactShadows.NonShadowCastingIntensity" to 1.

Materials
  • Upgrade Notes: The default of r.ViewTextureMipBias.Min is now -2.0 for texture quality when temporally upscaling with a ScreenPercentage greater than 50%. To maintain backward compatibility, projects that use temporal upsampling (r.TemporalAA.Upsampling=1) without overriding this cvar that might affect should set r.ViewTextureMipBias.Min=-1 in DefaultEngine.ini.

XR

  • Upgrade Notes: Blueprints will warn that ConfigSession is deprecated and should be replaced by ConfigSession2.

  • Upgrade Notes: Removed XR's MRMesh hard reference to WireframeMaterial.uexp, which prevents it being pulled into packaged projects that don't use it. Users of MRMesh should set a wireframe material if they want one. We fall back to UMaterial::GetDefaultMaterial(MD_Surface) if nothing sets one.

  • Upgrade Notes: Renamed CreateCloudAnchor to ConstructCloudAnchor to better fit microsoft docs. A redirector will fix up existing content.

Known Issues

For a complete listing of known issues affecting Unreal Engine 4.26, please see the Unreal Engine Public Issue Tracker .

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消