虚幻引擎4.27版本说明

介绍虚幻引擎4.27版本的全新功能和升级内容

Windows
MacOS
Linux

新内容

虚幻引擎4.27为各行各业的开发者带来了全新的功能和内容升级。例如,在本版本中,我们为虚拟制片用户提供了一整套可用于实际生成的功能集,还为建筑业和制造业用户提供了一系列新功能。4.27版本所引入的这些工具和工作流,将有助于虚幻引擎继续引领技术前沿。

其他亮点包括:改良的GPU Lightmass功能,能为同一天内的光照和布局变化提供高速烘焙。mGPU技术能为ICVFX提供更宽广的镜头视野,并实现双机同步拍摄场景。成熟的像素流功能可以为用户提供更自由的创作空间以及更丰富的虚幻引擎部署方案。此外,RAD游戏工具也已经加入Epic Games,内含的Oodle压缩套件和Bink Video将对所有虚幻引擎开发人员开放。

虚幻引擎4.27将兼容明年推出的UE5正式版!

虚幻引擎4.27尚不兼容UE5抢先体验版。

此次版本更新包含大量由虚幻引擎社区开发者在GitHub上提交的内容!感谢以下这些开发者为虚幻引擎4.27版本做出的贡献:

AlbinBernhardssonARM、Alexandr Kondratenko、author evolution、ayumax、bailehang、colinpy、Collabora、Dave Merriman、dendnk、dev (bovesan.com)、drichardson、Evan Hart、frals、HSeo、fieldsJacksonG (Microsoft)、igor-kondratiev、JDCruise、Josef-CL、kidsmurf2000、kihl、kristjanvalur、KristofMorva、liang47009、Marc Olano、MarcusH(Yager)、MattHesseling、Microsoft、moppius、neste、NexusEast、PanagiotisChristopoulosCharitos-ARM、Punlord、Remi.Palandri、rlabrecque、Robmaister、Sergey Budaretski、shovaen、Skylonxe、stefan-zimecki、thejinchao、tinyogre、triboud、Ultrahead、Wang Hao、wrflemin、X-Stuff、Xiang.Wei (Oculus)、yuriy.odonnell、ZeroEightSix

虚拟制片

nDisplay配置可视化以及工作流程优化

在这个版本中,我们重点改善了nDisplay相关的用户体验,例如nDisplay群集的设置和操作流程——这类流程是许多功能的核心,例如摄像机内视效(ICVFX)。引擎新增了3D nDisplay配置编辑器,可用于设置你的nDisplay系统。此外,系统新增了 nDisplayRootActor,可将所有与nDisplay相关的功能和设置并入一个UAsset中,以便制作流程更加顺畅,并让设置可重复使用。

在4.27版本开始使用nDisplay:

  1. 在虚幻编辑器中创建一个新的nDisplay Root Actor

  2. 在nDisplay 3D配置编辑器中配置你的nDisplay Root Actor

  3. 将Root Actor拖到关卡视口中,以群集视角预览项目内容。

  4. 通过Switchboard在物理nDisplay设备上启动项目

这个新流程取代了之前需要在引擎外部修改配置文件来创建nDisplay网络的方法。你可以导入之前创建的.cfg和JSON配置文件,将它们转换为新的UAsset格式。

优化了nDisplay mGPU支持(测试版)

4.27中的mGPU功能允许你同时使用多台摄像机,并能提供更宽广的视锥体以支持大角度镜头,还能让硬件部署的平衡更高效。你可以让一颗GPU专门负责内视锥,以便显示更加复杂的内容。在使用多台摄像机时,底层的mGPU技术会为多摄像机的设置和操作流程提供支持。

nDisplay过扫描(试验阶段)

现在你可以利用过扫描(Overscan),确保多个nDisplay渲染节点之间的连续性,从而获得各种高品质的后期处理效果,如泛光、环境光遮蔽和动态模糊。你还可以设置过扫描的性能开销。

此功能适用于最基本的画面和投影策略,但目前不支持高级策略,如网格体。

nDisplay中的Linux支持(试验阶段)

我们在nDisplay及其工具生态系统中添加了对Linux的初步支持。Linux支持依赖于显卡驱动程序,而且目前暂不支持部分渲染功能,如光线追踪和Vulkan。

图像替换文本

nDisplay同步

我们利用之前4.25和4.26版本中的工作成果,在性能和可用性方面对同步策略#2进行了优化。优化项包括:

  • 支持非阻塞呈现的NVIDIA驱动程序461.72版和更高版本

  • 内部同步渲染线程的屏障管理优化,有助于修复崩溃和计时问题

  • 暴露控制台变量,用于辅助调试

nDisplay中的OpenColorIO支持

考虑到UE渲染画面、LED处理器、LED面板以及制片摄像机等各个因素,要实现可重复且精准的颜色管理是一项十分复杂的任务。因此,我们在nDisplay中添加了对OpenColorIO的支持,以便将虚幻引擎中的创意内容与摄像机在LED影棚中拍到的内容联系起来,以便内容艺术家与摄影指导能在相同的镜头参考画面下共同工作。

image alt text

更加易用的远程控制流程以及API完善(测试版)

image alt text

由可触控设备驱动的高效控制选项允许更多人员在片场与虚幻引擎交互。这些优化有助于你掌控更多属性和函数,并让复制流程更加简化。

远程控制预设现在支持:

  • 逐属性元数据

  • 重新绑定属性,可跨多个关卡使用相同预设

  • 可以公开自定义事件

  • Actor函数

  • WebSocket的缩略图预览

  • nDisplay的远程控制复制

用于远程控制Web应用的UI构建器及用户体验提升

你现在可以使用新的拖放接口快速构建复杂的网页控件,无需使用任何代码。我们还重新设计了控件接口,同时添加了更多以虚拟制片场景为核心的控件类型,其中包括:

  • 舞台位置

  • 墙体校色

  • 光源卡

  • 关卡快照

  • Sequencer

  • 绿幕

image alt text

DMX、OSC和MIDI专用远程控制插件

你现在可以通过虚幻引擎的远程控制系统使用 DMXOSCMIDI 等现有现场活动协议。

远程控制C++ API

远程控制系统现在纳入了C++ API,提供了更多的方法来访问和远程控制引擎。以前,你只能通过使用了远程控制的HTTP和WebSocket API的web应用来访问引擎中的属性。现在,你还可以借助C++ API来控制引擎,并在外部桌面应用程序中使用公开的远程控制属性。

针对关卡变体管理引入的关卡快照(测试版)

在现场制片和一些特定的ICVFX流程中,通常需要逐个场景,对一个通用关卡进行细微调整。这会造成数据方面的挑战,减缓舞台操作的效率。凭借关卡快照,你可以记录关卡的当前状态,而不必对项目或源码管理进行永久性的改变。之后,你可以选择从关卡快照中恢复哪些内容。该工具对于"摄像机内视效(ICVFX)" 拍摄中的舞台操作员特别有用,因为你可以满足影片制作方复杂的还原要求,例如:"回到第6个镜头的样子,移开所有树,只留下这五棵"。对于那些需要创建各种场景并在创意评审上演示的艺术家来说,该工具也很有用。

image alt text

扩展了虚拟摄像机系统

虚幻引擎4.26中新引入的虚拟摄像机系统现在可以投入正式使用。无论用于虚拟堪景,还是记录摄像机的有机移动,它都能游刃有余。

虚拟摄像机系统包括以下功能:

  • 编辑器中支持多用户操作。

  • 重新设计的用户体验。

  • 用于虚拟摄像机的可扩展核心架构。

  • 可以将虚拟摄像机的输出传送至Composure、媒体框架(Media Framework)、编辑器视口或任何运行Unreal Remote应用程序的设备。

  • 可以将自定义UMG控件叠加到输出(画面)上,并在编辑器中或设备上与其交互。

  • 为触摸屏以外的硬件输入设备提供内置支持,例如控制手柄。

  • 一套用来处理摄像机数据的修饰符系统,例如筛选、追踪和自动聚焦等自定义效果。

  • 可以切换至已通过Live Link连接的追踪系统。

  • 便于摄影师使用的桌面操作面板。

全新的虚拟摄像机iOS应用程序

我们还发布了一个全新的iOS应用程序,Live Link VCAM。该应用程序专门用于虚拟摄像机功能,相较于Unreal Remote应用程序,可提供更加个性化的用户体验。图像替换文本

通用场景描述(USD)优化以及虚幻管线支持优化

通用场景描述(USD) 交换格式仍是媒体和娱乐行业的主流格式。这个版本有多项增强功能,能实现更深度的管线集成,其中重点是提供了其他导出选项。虚幻引擎4.27还提供了对于多用户编辑和运行时附加选项的额外支持。

image alt text

完善了导出至USD功能

USD场景导出程序现已扩展,新增了多个选项:

  • 从USD舞台编辑器编辑USD属性:你现在可以直接使用USD舞台编辑器细节面板编辑大部分USD属性。

  • 将关卡和子关卡导出到USD:你现在可以选择一个已载入虚幻中的关卡,将其导出为主要USD文件。关卡中的任何子关卡或资产,如 静态网格体骨骼网格体光源植被地形,均会导出为单独的USD文件供主文件引用。

  • 将动画序列导出到USD:动画序列现在有多种USD文件导出格式。新的导出操作将同时导出动画预览网格体和动画,并会将它们绑定在一起。这会包括所有骨骼和Blendshape轨道。

  • 纹理烘焙和材质导出:带纹理的材质可以在烘焙后随关卡一起导出。这些材质随后可以被其他支持USD的应用读取。

完善了USD导入程序

现在当你导入一个USD舞台时,动画轨道和其他资产都会导入到内容浏览器中。该工作流程类似于FBX的使用方式,所有资产都会在磁盘上转换为uAsset,从而允许使用一套完整的虚幻工作流程。

Direct USD工作流程以及场景缓存

USD Stage Actor可用于在虚幻引擎中加载USD场景。信息会被保存为USD信息,这些信息会作为USD信息保存,你可以调整它们并将其作为编辑层保存回USD。USD资产会在内存中转换为uAsset,伴有一个缓存,用于在后续会话中加速加载过程。当USD数据需要通过虚幻引擎传输,但在其他支持USD的DCC中也会继续使用时,这是首选的工作流程。

Nvidia MDL支持

新增了对Nvidia材质定义语言(Nvidia Material Definitions Language,MDL)模式和MDL表面材质的支持。如需了解更多信息,请参阅Nvidia MDL模式文档。

运行时的其他USD支持

现有多个可在运行时使用的USD功能,供你创建能够加载和显示USD文件内容的应用程序。

USD专用多用户支持

大多数USD舞台操作现支持多用户编辑

更新了Alembic缓存支持并优化了Groom的工作流程

虚幻引擎进一步扩展了对Alembic的支持——一种在媒体娱乐行业中广泛使用的动画数据缓存标准。本版本改善了Alembic缓存支持的健壮性,并优化了毛发的工作流程。

优化了Alembic Groom支持

我们进一步扩展了对毛发的支持,现在你可以将Groom与Alembic导入的GeometryCache数据相互绑定。你现在可以省去将Groom与骨架网格体绑定。我们现在支持用于驱动虚幻Groom系统的Groom,也支持驱动在其他DCC中模拟的毛发缓存。

此外,我们很高兴地宣布,现在能直接将带有动画的Groom从Alembic导入到GroomCache资产——一种可作为GroomComponent一部分使用的资产。

如需了解更多信息,请参阅我们的Groom专用Alembic文档。

优化了Alembic缓存支持

除了优化了毛发的工作流程,Alembic缓存现在能更好地支持子帧采样(Sub-frame sample)、非一致拓扑缓存、以及以空帧开始的缓存。这使得Alembic模拟缓存能获得更好的结果。

Archicad专用Datasmith导出插件

虚幻引擎4.27带来了全新的Archicad专用Datasmith导出程序,这是Graphisoft推出的热门建筑CAD软件。该插件支持Datasmith直接链接工作流程,可让Archicad用户与虚幻引擎和Twinmotion同步他们的应用程序;同时也可将数据导出为.udatasmith文件格式。

image alt text

该插件可保持Archicad数据和Datasmith之间的高保真度,且支持:

  • 使用元数据井然有序地导出几何体和层级数据

  • PBR材质

  • 光源

  • 摄像机属性

  • 图层

  • 热链接和外部引用

  • Actor标签

Sketchup专用Datasmith导出程序

Sketchup专用Datasmith导出已完全回炉重构。新版本包含多项优化,现可支持Datasmith Direct Link工作流程,可让用户将Sketchup应用程序与基于虚幻引擎的应用程序和Twinmotion同步。

为了支持这些增强内容,我们还开发了一个全新的Datasmith工具栏。

image alt text

新工具栏允许你直接访问Direct Link功能,并提供了将数据导出为.udatasmith文件的选项。

我们还更新了导出程序,为PBR材质提供了新的支持,提高了与我们现有插件的一致性。

其他优化:

  • 支持Sketchup 2021

  • 新PBR材质图表

  • 使用Ruby脚本批量导出。

Rhino专用Datasmith导出程序

Rhino专用Datasmith导出插件已经进行了一系列优化。在这个版本中,我们增加了Rhino和基于虚幻引擎的应用程序(如Twinmotion)之间的直接链接功能。

image alt text

在4.27版本中,我们新增了对Worksessions的支持。当Rhino工作会话导入进虚幻引擎时,多覆层模型结构会被转换成一个简易的层级结构。

image alt text image alt text

其他优化:

  • 支持Rhino 7

  • 支持各种新的Rhino几何体修饰符

  • 已命名视图现可导出为摄像机

优化了Datasmith导出插件的稳定性和应用支持

4.27版本对我们现有的Datasmith插件进行了多个增强和编辑流程优化。除了改良插件的稳定性和可靠性之外,我们还增加了对Revit、3ds Max和Navisworks新版本的支持。

Revit
  • 已优化天花板的枢轴点

  • 支持Revit 2022

3ds Max
  • 支持 3ds Max 2022

  • 支持Navisworks 2022

Solidworks专用Datasmith(试验阶段)

image alt text

全新Solidworks专用Datasmith插件现可以虚幻引擎和Twinmotion中的文件导出到热门CAD软件。将材质和产品几何体导出为.udatasmith文件格式,或者使用Datasmith直接链接在Solidworks和基于虚幻引擎的应用程序之间创建一个实时连接。

优化了Visual Dataprep工作流程

Visual Dataprep提供了各类运算符和筛选器,允许自动导入和准备3D数据。在这个版本中,我们对它进行了多项强化和编辑流程优化:

image alt text

image alt text

  • 新筛选器选项:这个版本新增了多个筛选器选项。通过一组精选Actor创建一个新筛选器,或者采用一组Actor的所有可见Actor筛选出一个选择。你还可以创建一个筛选器,用于选择重叠一组Actor的Actor。

  • 新运算符:已新增各种新运算符,如平面切割(Plane Cut)、设置碰撞复杂度(Set Collision Complexity)和设置最大纹理尺寸(Set Max Texture Size)。

  • 支持Actor 组件:我们新增了对所有运算符和筛选器组件的支持。

  • 特定于文件格式的导入选项:用户现在可以为Dataprep输入设置特定于文件格式的输入选项。

  • 场景统计面板和简化统计覆层:场景统计面板和统计覆层已经过重新设计,可读性提升。

  • UI优化:用户现在可以折叠一组动作,然后水平调整动作节点大小。

Datasmith运行时导入支持

有数个Datasmith功能现可在运行时使用,这将有机会创建可导入Datasmith文件的应用程序,并可采用各类蓝图操作来操纵这些应用程序。

image alt text

image alt text

image alt text

Datasmith运行时Actor现在可访问 "Datasmith Runtime Import Options" 变量,它暴露了一些导入选项相关的参数,例如:

  • 构建层级——一个确定文件层级暴露程度的参数。增加层级将增加加载时间和渲染时间。

    • 无:层级存储在运行时的Actor中(4.26版本行为),用户不能访问单个节点。

    • 简化:简化层级,移除部分中间节点。这项内容允许公开对象,以便应用程序修改对象属性,同时因场景中存在大量Actor而限制绘制调用。

    • 未筛选:来自CAD模型或datasmith文件的原始层级。

  • 构建碰撞:无碰撞、仅限查询、仅限物理、启用碰撞(查询+物理)。查询通常用于Pawn导航,以及墙壁/地板与对象拾取的碰撞。

  • 碰撞类型:项目默认,简化版和凸包,使用简化版作为凸包,使用凸包作为简化版。由于我们无法微调个体部分产生的碰撞,如果你希望在导航场景时精确碰撞,那么你可能需要使用"使用复杂碰撞作为简化版(Use Complex Collision As Simple)"。

  • 导入元数据:读取并添加元数据至Actor。增加加载时间。

通过摄像机校正获得精准的镜头画面(测试版)

你现在可以使用校准后的摄像机数据在过场动画摄像机上驱动镜头畸变,从而提升实时合成流程的效果。你可以使用全新的摄像机校准和节点偏移工具来校准镜头,或者以ST图(STMap)的形式引入外部校准数据。

在这个版本中,我们添加了一些新资产类型以及对虚幻工具的镜头畸变的支持:

  • 将经过校准的镜头数据储存在新的 镜头文件(LensFile) 资产中的多个焦点和变焦位置。

  • 将新的 镜头畸变后期处理材质 应用到过场动画摄像机。

  • 直接为电影摄像机添加一个 镜头畸变组件(LensDistortion Component)

  • 对Composure的 CG层 应用畸变。

  • 根据实时对焦和变焦值数值评估 Live Link 摄像机主题中的镜头文件。

  • 使用新的 Live Link镜头角色 直接从某些摄像机跟踪系统流送预先校准的失真数据。

Live Link FreeD插件(测试版)

Live Link现支持FreeD数据协议——一种用于摄像机追踪、平移、倾斜、变焦(PTZ)等功能的常用协议。松下AW-UE150和索尼BRC-X1000在内的许多PTZ摄像机都可通过该协议获得支持。通过此方法将追踪数据添加到项目极具成本效益。

Live Link VRPN插件(测试版)

VRPN是虚拟现实和虚拟制作的常用协议。以前,VRPN只兼容nDisplay。全新Live Link VRPN插件是一个更通用的解决方案,可在虚幻引擎中分布和复制多个被追踪的设备。为了避免与Live Link VRPN插件重复,我们从nDisplay中删除了VRPN输入。

image alt text

Live Link Face

我们对Live Link Face iOS应用程序进行了部分优化,改进了面部捕捉和数据记录方式。

Live Link Face校准

Live Link Face可用于调整演员的面部捕捉数据。使用Live Link Face中的新校准功能提高流送给虚幻引擎的动画数据的质量。这就是可以设置中性——或静止姿势——表情,应用程序用它来抵消ARKit中的数据,提供更贴近实际表演的定制化结果。

image alt text

iPad专用Live Link Face

尽管Live Link Face在配有TrueDepth前置摄像头的iPad上始终可以使用全套功能,但其显示和比例并非是针对iPad屏幕大小量身定制的。我们已更新了应用程序,现正式支持iPad和iPhone,让喜欢平板设备操作的用户更容易上手。

使用Sequencer和影片渲染队列实现精确到帧的视频同步

使用媒体框架播放视频时,将能与Sequencer中的时间轴实现精确到帧的同步,并且不受媒体播放器的实时行为的影响。Sequencer会在内部处理与媒体播放器的同步通信和设置。

目前,只有ImageMediaPlayer支持这种新同步方式。如果你使用的媒体播放器不支持此功能,播放起止点会在Sequencer时间轴中起止点的附近;不过,逐帧对齐可能是随机的。

为媒体框架中的图像序列提供EXR Mipmap支持

媒体框架的图像序列播放现支持多级监禁纹理化的EXR图像(mipmapped EXR image)。Mipmap可用于图像序列,以减少加载的数据量。在UE中,除非设置项中有其他设置,否则会根据每个显示此图像的对象预估像素对纹素密度来选择mip关卡。

如需更多详细信息,请参阅Image Sequence Mips。

优化了DMX的性能和集成

我们对DMX插件做了进一步优化,包括优化协议、蓝图和sACN,提高了它在压力条件下的整体性能和稳定性。我们还添加了与其他引擎功能的集成,如远程控制和nDisplay,同时使用新网络设置DMX端口替换了使用端口的控制器。

像素映射(测试版)

我们改版了像素映射的UI面板和核心功能。你现在可以通过获取场景缓冲(或实时纹理)来高效驱动低分辨率面板或矩阵灯具,从而高性能地生成所需DMX数据。

多用户协作中的逐用户镜头试拍录制器

你现在可以控制 多用户 会话中的哪些节点在 镜头试拍录制器(Take Recorder) 捕获中起作用。这意味着你可以将节点设置为记录节点,其中包含对多用户主运算符不可见的附加模拟数据或动画数据。

全新的设计配置器模板以及产品配置器模板更新

产品配置器模板最初随虚幻引擎4.25版本发布(属于汽车类模板),旨在帮助用户快速启动其交互式产品配置器。该模板展示了变体管理器(Variant Manager)的最佳用法,并提供了多种方法来动态生成基于UMG的界面。

在虚幻引擎4.27中,我们已经发布了设计配置器模板。

image alt text

这个新模板在 建筑、工程和施工(Architecture, Engineering, and Construction) 类别中可用,并演示了与产品配置器模板产品演示相同的交互功能和建筑最佳用法实践。

这两个模板还包含以下UI增强功能:

  • 按钮大小:调整变体按钮大小。

  • 按钮大小轮廓:调整按钮周围彩色轮廓的宽度。

  • 按钮轮廓法线颜色:设置默认按钮轮廓颜色。

  • 按钮轮廓悬停颜色:设置鼠标悬停在按钮上时的按钮轮廓颜色。

  • 按钮轮廓按下后的颜色:设置按下按钮后的按钮轮廓颜色。

  • 弹窗线条颜色:设置UI文本下划线颜色。

  • 弹窗文本颜色:设置UI文本颜色。

LiDAR点云插件优化

虚幻引擎4.27为LiDAR点云插件带来了多项增强功能,同时优化了点云数据的导入和操作。

此版本包含多项优化:

  • 更好的点尺寸算法:优化了可扩展算法,同时添加了定点模式。这种新模式在处理嘈杂资产时尤为实用。

  • 优化了性能和稳定性:对点云数据的处理和流送的多项优化已为终端用户显著提升性能。

  • 优化了保存/加载性能:大幅优化了序列化器和流送机制。

  • 简单间隙填充:使用最小化可见重叠的新技术对点进行放大和渲染。

禁用视锥剔除:现在可以禁用视锥剔除,这有助于解决在拍摄过场动画时出现的数据流送延迟。

  • 新的选择方法: 添加了新的多边形、套索和绘制选择方法。

像素流送

image alt text

我们很高兴地宣布,像素流送插件在虚幻引擎4.27中将能正式用于生产环境!像素流送会提供全新部署选项,比以往更有可能将虚幻第一类实时渲染流送到更广泛的设备和用户。虽然设置像素流送应用程序的工作流程基本完全相同,但该版本包含数个关键优化和新配置选项。

Linux支持像素流送

现在你可以使用Linux服务器实例部署像素流送应用程序,在效率、可延展性和整体部署难易度方面创造诸多有利条件。

AMD解码器支持

像素流送现支持AMD高级媒体框架硬件编码器,基于AMD GPU的应用实例可以在Windows和Linux系统中使用像素流送。

使用升级版WebRTC优化稳定性和品质

我们已将像素流插件使用的WebRTC升级到M84版本。该次升级可缓解流送延迟并且改善流送品质,还可防止性能随时间推移而降低,同时优化了与多数网页浏览器的兼容性,其中包括Firefox和Safari。

浏览器音频输入支持

优化后的WebRTC将支持读取用户浏览器的音频输入,从而允许像素流送应用捕获麦克风输入。更重要的是,一旦捕获到的音频输入至引擎中,即可对其进行空间化或其他处理。

渲染

扩展了GPU Lightmass功能(测试版)

GPU Lightmass系统进一步优化了渐进式光照烘焙功能,并能为虚幻引擎4的更多功能提供支持。

4.27中的优化内容包括:

  • 支持更多光源参数,如衰减、非平方反比衰减和矩形光源谷仓门

  • 支持烘焙细节级别(LOD)网格体。

  • 支持彩色半透明阴影。

  • 优化了多GPU(mGPU)支持。

    • 需要支持NVLink和SLI的Nvidia显卡。

  • 现已默认启用Irradiance Cache,而且在现实场景中的速度明显加快,并解决了UE 4.26中存在的问题,所有用户都因此而受益。

  • 为Full Speed设置了全新的默认值,能防止可能出现的GPU超时(或TDR),从而使所有用户受益。新的默认值不再是16,而是将速度减半为8。该速度可以根据需要,在"系统"分段的GPU LIghtmass设置面板中调整。

  • 修复了大量错误和稳定性问题。

image alt text

详情请参见GPU Lightmass文档。

路径追踪(测试版)

路径追踪(Path Tracer)是虚幻引擎中的渐进式渲染模式,无需任何其他设置即可渲染场景。路径追踪器通过物理上正确且无妥协的全局光照、物理上正确的折射,以及在反射和折射方面功能完备的材质和超级采样抗锯齿,弥补了实时光线追踪功能的功能缺陷。

image alt text

路径追踪器需要Windows 10和DXR显卡。

在4.27版本中,路径追踪器经过了大量优化,使其成为用于渲染常见场景的有力候选工具;其重点使用领域包括:建筑、工程和施工(AEC)、汽车和产品设计。

4.27的优化项包括:

  • 支持除毛发、眼睛和单图层水面(SingleLayerWater)之外的所有材质着色模型。

  • 支持折射和所有材质混合模式。

  • 光源透过玻璃表面传输,包括近似焦散。

  • 支持随机游走类型(random-walk)的次表面散射

  • 支持大多数光源参数,例如区域大小、半影、衰减、矩形光源谷仓门、矩形光源纹理和IES配置文件等等。

  • 支持近乎无限数量的光源。

  • 优化了采样技术,减少相似渲染时间下产生的噪点。

    • 该领域仍在持续开发中,会在未来发布的版本中继续优化。

  • 支持正交摄像机。

  • 优化了对影片渲染队列的支持。

如需了解更多信息,请参阅路径追踪器文档。

优化了毛发和皮毛渲染的视觉效果和性能

虚幻引擎的毛发渲染和模拟功能。许多视觉效果和性能优化均从虚幻引擎4.26版本开始,由MetaHuman Creator推动实现。

image alt text

在4.27版本中,有两个新的缓存相关功能:

  • 可以为Alembic缓存毛发Groom。

  • 可以导入已模拟的Groom,并包含缓存的逐帧毛发数据。

    • 缓存的Groom可以绑定到骨骼网格体或Alembic角色上。

    • 支持在PIE、Sequencer和影片渲染队列(Movie Render Queue)中播放,但尚不支持打包的项目。

在导入Alembic Groom期间,导入程序将检测Groom是否有动画。如果有,则会自动生成两个Groom缓存,一个用于已设置动画的发束,一个用于已设置动画的导线,而这个缓存将使用模拟为正在渲染的发束设置动画。

可使用 Groom缓存 指定插槽,将Groom缓存指定给 Groom 组件。

如需了解更多信息,请参阅毛发渲染与模拟文档。

扩展了光线追踪的覆盖面并对其进行优化

光追进一步扩大了支持范围,并优化了现有功能的工作流程。此版本包括以下优化和新增内容:

  • 实例化静态网格体(ISM)和层级实例化静态网格体(HISM)目前支持光线追踪功能中的世界位置偏移(World Position Offset),如反射和阴影。

  • 反射图像中的Niagara粒子目前支持由粒子驱动的材质属性,如基本颜色(BaseColor)。以前,在反射中看到的粒子缺少对应材质中的所有逐粒子功能。

  • 折射现在由主材质节点上的 折射(Refraction) 输入控制,而非源自 高光度(Specular) 输入。目前,这与用于控制透明材质折射的传统栅格化方法相匹配。

  • 重新启用虚幻引擎4.26中禁用的透明对象阴影投射。透明对象的实时光线追踪阴影只能是不透明的。部分半透明的光线追踪阴影仍仅限于烘焙的静态光源。可禁用的透明对象阴影投射:

    • 允许在材质编辑器的细节面板中逐个禁用材质的 投射光线追踪阴影(Cast Ray Traced Shadows)。

    • 允许在关卡细节面板中逐个禁用对象的 投射阴影(Cast Shadows)。

如需了解更多信息,请参阅实时光线追踪文档。

RAD游戏工具

RAD游戏工具已加入Epic Games系列,其许多技术现已包含在虚幻引擎中。

Oodle压缩套件

image alt text

Oodle数据(Oodle Data) 压缩可为游戏数据提供拥有最快和最高比率的压缩器。为了满足你的项目需求,此产品系列提供四种压缩算法。Oodle数据解压缩比其他编解码器要快得多,而且它的算法可在所有虚幻引擎支持的平台上运行。

虚幻引擎目前默认启用Oodle数据压缩,为打包的项目提供高效压缩和快速加载。

Oodle纹理 压缩是用于块压缩BC1-BC7纹理的最快且质量最高的编码器。Oodle纹理的率失真优化(RDO)编码器可以制作高质量视觉效果的编码,这种编码比非RDO编码器小2到3倍!

虚幻引擎默认启用Oodle纹理压缩,并且可以在项目设置中启用RDO编码(RDO编码默认为关闭状态)。

Oodle网络 压缩是一种独特的网络流量实时压缩解决方案,大大降低了游戏服务器所需的带宽。该解决方案适用于所有TCP和UDP网络数据包,且能显著降低多人游戏所需的最低带宽。

Oodle网络压缩已被用于《堡垒之夜》,同时可针对游戏自身的网络流送选择开启和接受训练。

Bink Video:最快的游戏视频编解码器

image alt text

Bink Video 是最流行的游戏视频编解码器,目前已纳入虚幻引擎中。它是一种高性能的视频编解码器——解码速度比其他编解码器快10倍,内存占用量减少了8到16倍。在一些平台上,为了进一步加速,还可以将Bink解码卸载到GPU计算着色器上。Bink Video是完全独立的(无需进行其他安装),且拥有易于使用的虚幻引擎插件接口。

XR

OpenXR插件可投入生产环境

OpenXR框架是许多公司的VR和AR开发标准。你可以借助OpenXR插件在虚幻引擎中使用相同的API处理多个XR设备。OpenXR插件还支持来自虚幻商城的扩展插件,因此你可以将功能添加到OpenXR,而无需依赖引擎版本。

image alt text

鸣谢:OpenXR和OpenXR徽标是Khronos Group Inc.的商标。

在这个版本中,我们在虚幻引擎OpenXR插件中增加了对以下功能的支持:

  • 立体图层

  • 启动画面

  • 查询玩家游戏区域边界

  • 运动手柄可视化

平台专有插件在4.27版本中仍然可用。 默认情况下,引擎会根据设备兼容性按以下顺序对插件进行优先级排序:

  • OculusVR

  • SteamVR

  • OpenXR

如果你想针对OpenXR进行专门开发,请禁用OculusVR和SteamVR插件。

重新设计的VR模板

我们使用 OpenXR 框架开发了新的VR模板。此模板可作为各类VR项目的起点。它包含以下封装好的功能:

  • 传送运动(Teleport Locomotion)

  • 捕捉旋转(Snap Rotation)

  • 抓取组件(Grab Component)

  • VR旁观者摄像机(VR Spectator Camera)

  • 菜单(Menu)

VR模板目前支持的VR平台包括:

  • Oculus Quest 的1代和2代

  • 支持Oculus Link的Oculus Quest

  • Oculus Rift S

  • Valve Index

  • HTC Vive

  • Windows Mixed Reality

请参阅VR Template了解更多细节。

重新设计的手持平台AR模板

此项目模板取代了之前的AR手持平台模板,专门作为ARCore和ARKit平台上开发AR应用程序的起点使用。

包括以下功能:

  • 专门适配iOS和Android,开箱即用、简单易行

  • 基本的用户界面和触摸界面

  • 可以拍摄快照图像

  • 可以移动、旋转和缩放模型

image alt text

协作查看器模板优化

协作查看器是一个模板项目,这个模板项目可以在VR或桌面上对CAD/BIM 3D模型进行实验,并与多个用户进行协作设计审查。

4.27的优化项包括:

  • 多尺度支持

  • 分段工具

  • 可配合Datasmith运行时

  • 输入文本注释

image alt text

固定注视点渲染(试验阶段)

借助固定注视点渲染(Fixed Foveated Rendering),你可以在VR头盔中使用基于图像的可变速率着色,来调整目标的着色速率。固定注视点渲染能提升性能,且用户不会感知到图像质量的明显下降。共有四个级别的固定注视点:已禁用、低、中和高。

此功能目前仅支持Windows平台,且此等平台必须具有DX12和支持VRS Tier 2的GPU。

容器部署(测试版)

Image courtesy of Michael Wallace

Image courtesy of Michael Wallace

虚幻引擎从4.27版本开始正式支持容器部署。你可以使用容器将应用程序及其依赖项打包成单个的便携单位,然后在本地机器上部署或通过云部署。这与虚拟机的工作原理类似,但从计算方面上讲,容器更加轻便,有助于进行更多并发部署。

TensorWorks开发的开源基础设施和虚幻容器社区方案的基础上,虚幻引擎支持两种类型的容器图像:开发图像和运行时图像,前者包含虚幻编辑器及相关构建工具,后者可运行打包的虚幻引擎项目。你可以将自己的开发工具或终端用户应用程序广泛部署到云上。

如需了解容器和容器图像的多种使用方法,请参考容器文档。

Gameplay框架和脚本

增强输入(测试版)

增强输入(Enhanced Input) 是一套精简但拥有高可配置性的输入处理系统,支持运行时输入重新映射以及可定制的复杂触发规则。在4.27版本中,增强输入插件已经过扩展,可提供完整的蓝图可视化脚本支持,因此开发人员可直接使用所有相关功能,无需编写C++代码。

image alt text

数据注册表(测试版)

实验性 数据注册表(Data Registries) 插件可帮助开发人员为基于结构体的数据表创建高效的全局存储空间。你可以利用数据注册表同步或异步访问数据、按需加载数据、设置缓存规则,甚至是扩展系统以编写自己的间接规则。你可以将数据注册表与 游戏功能模块化Gameplay 插件结合使用,从而引入整个数据注册表或数据源,以此填充现有数据注册表。

image alt text

数据注册表插件目前支持标准数据表和曲线表。

虚幻引擎作为库使用

虚幻引擎作为库使用(Unreal Engine as a Library):该功能允许将UE4运行时构建成库,并通过最小限度的内置API与其交互,同时支持以下功能:

  • 运行UE4,可选择性接受命令行和引擎应发送输出的客户端窗口。

  • 更新(即"tick")引擎,让你控制何时运行它。

  • 接收Windows消息,以便与引擎进行进程间通信。

  • 完成相关操作后关闭引擎。

你还可以扩展API来满足你的需求,公开现有功能或新功能,以供外部使用。

地理配准

地理配准(Georeferencing) 插件将物理位置(如行星表面区域)与虚拟位置(如UE4关卡)相关联。UE4支持地理、地心和投影坐标参考系统,可将真实或虚构的位置(包括支持纬度/经度和UTM坐标等系统)映射到你的引擎内关卡中。你可以在四个坐标系之间转换坐标:

  • 虚幻引擎坐标系。

  • 你选择的投影坐标参考系统(CRS)。

  • 你选择的地理CRS。

  • 标准的地心地固(ECEF)CRS。

image alt text

由于该系统不局限于现实世界,甚至是现实位置,因此你可以用它来描述具有一致空间关系的任何大型世界中的位置,无论是球面还是平面世界。

在线

在线子系统EOS插件

UE4中的在线子系统(Online Subsystem)接口现支持 Epic在线服务 (EOS)。 我们可以在桌面平台、主机和移动平台上实现这些功能,并为想要使用这些功能的游戏提供跨平台在线功能。部分可用功能包括:

  • 使用和不使用 Epic账号服务 (EAS) 的身份验证流程,以及通过第三方供应商进行的身份验证。

  • Epic好友列表功能,包括覆层UI界面支持的社交互动,以及玩家信息和在线状态更新。

  • 使用配对和直接邀请来管理和加入会话。

  • 多人游戏大厅。

  • 统计数据、排行榜和成就系统激励玩家进步。

    • 基于标题生成文件和逐用户云存档。

  • 为游戏内交易提供存储商品清单和购买结账功能。

  • 基于专用服务器和玩家托管的比赛,以及点对点连接内置支持。

EOS语音聊天插件

UE4现使用可用语音聊天接口来支持新的EOS语音服务。该功能的实现可用于桌面平台、主机和移动平台,并支持跨平台语音通信。

你可以使用全新在线子系统EOS插件激活大厅语音聊天,让参与者自动加入相应的语音频道。系统会自动创建一个IVoiceChatUser接口,你可以通过在线子系统EOS访问该接口,进一步实现大厅语音信道的交互和更新。

从Vivox VoiceChat插件迁移来的用户应该会看到EOS VoiceChat插件实现了相同的IVoiceChat和IVoiceChatUser接口,并且能以相同方式驱动。

音频

适用于专用服务器的Quartz

Quartz现可在无音频设备的情况下运行。这个新功能可使Quartz在专用服务器上运行。如果没有混音设备,Quartz时钟将通过UObject的更新函数(tick)更新,不会通过音频引擎更新。

Quartz的操作流程提升

Quartz具有新的时钟句柄蓝图(Clock Handle Blueprint)函数,该功能可为音频设计师优化编辑流程——包括启动、停止、暂停当前时钟。Quartz还可以在精确到采样的边界上启动另一个时钟,因此音频设计师可在运行期间在两个时钟之间切换。这个功能可以实现到另一个时钟的无缝切换,使改动时间签名更加容易。

为尽快执行Quartz命令,"NONE"已作为一个枚举变量添加到量化(Quantization)枚举中。 这可以与新的"Reset Transport Quantized"蓝图函数结合使用,以便硬重置时钟,使之与外部设备保持同步。

移动端设备

移动端专用FXAA和TAA

快速近似抗锯齿(FXAA)时序抗锯齿(TAA) 现在均可在移动渲染器中使用。你可以通过启用Mobile HDR,然后参照桌面设备的步骤来使用这些抗锯齿后期处理。

优化了移动延迟渲染器的性能

移动延迟渲染器 的性能和稳定性得到显著提升,并且可以在更广泛的Android设备上运行。该组件现在还支持光源函数、IES光源配置文件和简单光源。

使用Visual Studio调试Android项目

Android项目现可使用Visual Studio调试。如果你为Visual Studio安装了谷歌的AGDE插件,虚幻引擎将在你创建Android项目时从内部启用它。然后,你可以用它直接从Visual Studio部署和调试项目。

Android内存分析器支持

虚幻引擎4.27现通过谷歌的开发库向Android内存分析器公开虚幻的内存分配器。这令使用Android内存分析器进行开发、测试和调试配置成为可能,同时无需变通方法。如需详细了解关于在Android Studio中使用内存分析器的方法,请参考Android原生内存分析器文档

Android编辑流程优化

当你为Android Studio生成一个项目时,它会自动将调试器类型设置为Dual(C++和Java),并为虚幻数据类型设置原生可视化器。这修复了Android Studio中原生字符串可视化问题,并使虚幻数据类型变为可用,而无需在Android Studio项目中进行其他设置。

Sequencer

影片渲染队列

image alt text

我们为 影片渲染队列概述 新增了一个导出格式,采用的形式是命令行编码器。命令行编码器可以通过第三方软件创建自己的输出格式,例如 FFmpeg

image alt text

对象ID 渲染通道已得到优化,支持以多种方式分组ID。你现在可以根据Actor名称、材质、文件夹等将对象分组。

image alt text

Sequencer界面更新

为简化事件轨道(Event track)的操作性,我们添加了一个快捷方式,用于在Sequencer工具栏中打开 事件轨道的导演蓝图

image alt text

除了在 镜头试拍录制器参考 工具中添加 开始录制(Start Record) 按钮,我们还在Sequencer的播放功能按钮中添加了该按钮。你可以使用Sequencer的录制按钮,将选定的Actor录制到当前序列中,且无需开启镜头试拍录制器(Take Recorder)窗口。

image alt text

启用 影片渲染队列概述 插件后,现在点击Sequencer的 渲染(Render) 按钮后,你可以选择要使用的渲染器。你可以选择 影片渲染队列(Movie Render Queue)旧版渲染器

image alt text

模板序列属性乘数

使用模板序列 现支持乘法属性。属性乘数将允许模板序列实例在引用原始资产的情况下具有不同强度。

Gameplay Cue轨道

Sequencer中加入了一个全新轨道,可在使用 Gameplay技能系统 构建的Actor上触发通知状态。与通知一样,Gameplay Cue轨道可以使用基于范围的事件或基于触发的事件。

image alt text

提示(Cue)中有多种可用于自定义触发方式的选项,包括对发起者、位置或附件的功能按钮。

image alt text

Gameplay Cue轨道需要启用 Gamplay技能插件(Gameplay Abilities Plugin) 才能使用。

image alt text

Niagara视觉效果

模块版本管理

你现在可以对模块、函数或动态输入进行版本管理。这使你在制作自有模块时更加灵活,因为你可以设置功能,然后根据版本号保存。你在创建新版本模块时,用户可以使用这些新版本。

首次将模块添加到Niagara系统时,它将使用指定为公开的版本。当新版本添加到该模块时,你可以选择升级到新版本或还原到以前的版本。

image alt text

此功能还包含python集成,可在升级时自动将现有输入传输到任何新模块版本上。

如需了解更多信息,请参阅Niagara模块版本管理页面。[插入新功能页面链接]

行为示例

从Niagara 4.27版本开始,创建新Niagara系统时,你会看到一个名为行为示例(Behavior Examples)的新选项卡。这些示例是一些十分基础的Niagara发射器,专用于展示Niagara的某一方面,有助于新手了解该技术。

image alt text

Niagara调试器

关卡编辑器中添加了一个名为 Niagara调试器(Niagara Debugger) 的新面板。该面板可以让你了解和调试关卡中的Niagara模拟,查看运行期间的情况。

image alt text

你可以切换视口中的Debug HUD来显示关卡中的Niagara模拟信息。

你可以暂停模拟或慢速播放它,从而观察它的变化。当你在Niagara调试器中启动慢动作播放后,只会减慢关卡中的Niagara粒子模拟速度,而关卡的其余内容会以正常速度播放。此外,你还可以打开每个粒子的数据读数。

调试绘制

某些模块,例如球体(Sphere)和盒体(Box),都新增了一个 调试绘制(Debug Drawing) 选项。启用后,它将以可视化形式显示该模块。然后,你可以调试系统并且按需调整模块参数。

如果某个模块可以使用"调试绘制",则该模块复选框左侧会出现一个蓝色复选框。如需启用调试绘制,请点击该复选框。

image alt text

如果你为多个模块启用 调试绘制(Debug Drawing),你会看到每个形状的绘图。

调试绘制还可用于追踪个体粒子的轨迹。以下示例显示了它在流体模拟中的样子。

你还可以将调试绘制添加到个人自定义模块中。

如需了解更多信息,请参阅调试绘制[添加功能页面链接]。

网格体渲染器中的网格体数组

你现在可以为 网格体渲染器(Mesh Renderer) 添加多个网格体。这样会生成一个网格体数组。你可以随机生成这些网格体粒子,也可以在序列中将它们用作图像序列视图(flipbook)。

如需添加多个网格体,请选择网格体渲染器(Mesh Renderer)。点击加号添加网格体。注意,每个网格体都会被分配一个整数值,从0开始。

image alt text

如需使用数组中的网格体创建随机粒子,请点击初始化粒子(Initialize Particle)。你现在可以将 网格体渲染器数组可视性模式(Mesh Renderer Array Visibility Mode) 设置为 随机(Random),并在 源(Source) 中选择要使用的渲染器。

image alt text

你现在可以找到 particle.meshindex —— 一个可拖入Niagara系统的属性。例如,如果你想让粒子随时间随机变化,则可以将particle.meshindex拖入粒子更新(Particle Update)组。然后,你可以将MeshIndex参数设置为 随机范围整数(Random Range Integer),并让它循环使用与你在渲染器中为网格体设置的同等数量的整数。

如果你希望让一组网格体随时间循环播放,在网格体渲染器中,有一个分段允许你填充数组,以便生成图像序列视图(Flipbook)。网格的命名应与 图像序列视图后缀格式(Flipbook Suffix Format) 匹配,在默认情况下,名称应设置为 _{frame_number}。

image alt text

如需进一步探究这项功能,你可以为Niagara系统添加一个名为 网格体数组(Mesh Array)行为示例(Behavior Example)

曲线编辑器流程优化

Niagara曲线编辑器 已经过更新,能与 Sequencer 中的曲线编辑器实现匹配。现在它能为你提供更加高级的编辑工具,可用于调整关键帧和重新定时。

曲线(Curves) 面板已经过重新设计,可以显示系统中所有的曲线层级。你可以搜索层级,固定它们以便快速访问。双击某一行曲线,就能在 选择(Selection) 面板中打开该模块。

image alt text

显示在 选择(Selection) 面板中的内嵌曲线编辑器也已更新。

image alt text

image alt text

点击曲线 模板(Templates) 可快速应用常用曲线形状。你还可以使用 曲线 编辑器底部的箭头按钮快速浏览按键。

如果你常用某条曲线,但并没有相关预设,你可以在 项目设置(Project Settings) 中自定义一个曲线模板。

在此版本中,曲线编辑器 的性能也得到了优化,解决了拖动关键帧时速度变慢的问题。

参数定义

Niagara 中有一项名为 参数定义(Parameter Definitions) 的新资产。你可以创建一个参数定义,为任意数量的系统、发射器或粒子命名空间参数定义默认数值和描述。这些默认数值和描述可在Niagara发射器、系统和脚本中引用。

若在另一个Niagara资产中引用参数定义,会自动注册(或链接)参数定义资产的所有参数更改。例如,你可以使用它自动将参数名称、默认数值和描述的更改推送给该参数的所有引用。

条带形状预设和自定义

在以前的版本中,条带渲染器(Ribbon Renderer ) 只能固定输出一个平面来表示条带。现在,你可以自定义各种形状,包括单个平面、多个平面、管道或输入顶点。

如需使用这些设置,请查阅 条带渲染器(Ribbon Renderer) 中名为 条带形状(Ribbon Shape) 的分段。

image alt text

根据所选形状的类型,会显示不同的形状设置选项。注意,在尝试使用这些选项时,你可能需要把 条带渲染器(Ribbon Renderer) 中的 朝向模式(Facing Mode) 设置为 自定义(Custom),而不是 屏幕(Screen)

image alt text

初始化条带(Initialize Ribbon) 模块中,你应该将 条带宽度模式(Ribbon Width Mode)条带朝向模式(Ribbon Facing Mode) 设置为 直接设置(Direct Set)

image alt text 4

除了以上新增选项,你还可以设置新的参数,从而减少条带中的瑕疵。把 条带形状(Ribbon Shape) 设置为 平面(Plane)多平面(Multi Plane) 后,你可以调整 宽度分割计数(Width Segmentation Count),为网格体添加其他顶点,让变形更平滑。把 条带形状(Ribbon Shape) 设置为 管道(Tube) 后,你可以调整 管道细分(Tube Subdivisions),为管道添加更多顶点。

脚本统计信息面板

你可以使用Niagara脚本统计信息面板,在Niagara编辑器中为不同平台编译Niagara系统。它能为你提供特定平台的错误信息,且而无需烘焙。当你的GPU平台的PSSL比较消耗性能时,它很有用。

image alt text

选择节点

Niagara脚本新增了一个"选择(Select)"节点。该节点会取代现已废弃的IF节点。你可以指定一个选择器类型(整型、布尔值或枚举)。你也可以一次选择多种数值。它将根据输入到Select节点中的数值输出一个数值。

image alt text

以上示例展示了一个设置为布尔值类型的Select节点。它将检查给定输入的真假。

如果Select节点设置为Int32,那么你可以点击"+"号添加一个整数或点击"-"号删除一个整数。

image alt text

你也可以在枚举列表中创建一个Select节点。在下述示例中,Select节点是通过"缩放Sprite大小(Scale Sprite Size)"创建的。然后使用可设置"缩放Sprite大小"的所有选项进行填充。

image alt text

哈希函数

哈希函数有两个新节点,分别是 Hash IntegerHash Float。它们都会读取一组输入,并输出一个随机数值。哈希函数和"种子随机(Seeded Random)"的区别在于,如果给定相同输入,哈希函数将始终输出相同数值,即使跨函数调用也是如此。相比之下,种子随机(Seeded Random)只为每个函数生成一致值。

image alt text

Niagara用户体验优化

Niagara编辑器的用户体验进行了一些优化。包括但不限于:

  • 自动填充所有选项 现可在骨骼网格体的过滤骨骼和过滤插槽列表中使用。

  • Niagara热键支持:J和K可在播放中进行向前和向后循环。S可隔离选定发射器。D可禁用选定发射器。

  • Niagara脚本、模块和动态输入的新菜单和优化菜单。

  • 在脚本操作菜单中添加了"仅限库(Library Only)"复选框。

  • 推荐功能可让你将资产预先标记为"推荐的"。搜索时,这些操作会以分段形式出现在列表顶部。如果是动态输入和模块,在不搜索的情况下它们会显示在顶部。

  • 许多数据接口函数现在会显示帮助提示内容。

平台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

  • 编译农场适用的IDE版本

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

      • 最低支持版本

        • Visual Studio 2017 v15.6

    • Xcode - Xcode 11.1

  • GDK

    • Windows SDK: 10.0.19041.0

    • GDK: April 2021 QFE2

    • 固件版本:2021年5月恢复版QFE1 10.0.19041.7772

    • 支持的IDE:Visual Studio 2019

  • Android

    • Android Studio 4.0

    • Android NDK r21e

      • 此外还支持NDK r20b,以便解决部分低端设备的兼容性问题。

  • ARCore

    • 1.24

  • ARKit

    • 4.0

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

    • 基于v18 clang-11.0.1 (CentOS 7)

  • Oculus

    • 27.0

  • OpenXR

    • 1.0

  • Google Stadia

    • 1.6.2

  • Lumin

    • 0.24.1

  • Steam

    • 1.47

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 12.3.2 + NEX 4.6.6(可选)

    • 最低固件版本:12.0.2-1.0

    • 支持的IDE:Visual Studio 2017、Visual Studio 2019

  • PS4

    • Orbis SDK 8.508.001

    • 系统软件8.508.021

    • 支持的IDE:Visual Studio 2017、Visual Studio 2019

  • PS5

    • Prospero SDK 3.00.00.27

    • 系统软件 3.00.00.38

    • 支持的IDE:Visual Studio 2017、Visual Studio 2019

  • XboxOne

    • XDK:2018年7月QFE-13

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

    • 支持IDE:Visual Studio 2017

  • macOS

    • 支持

      • macOS Catalina 10.15.7、Xcode 12

    • 推荐

      • macOS Latest Big Sur、最新版Xcode

    • 最低

      • 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

New:

  • AIPerceptionSystem's class method RegisterAllPawnsAsSourcesForSense has now been marked as virtual.

  • Added an optional "FName Tag" to AISense_Damage, which gets propagated to the PerceptionSystem from AIStimulus.

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

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

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

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

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

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

Optimization:

  • Bit fields located in the PawnAction class have been optimized to pack into a single 32 bit allocation.

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

Crash Fix:

  • Fixed a crash which occured when a new empty generator is added to an EQS query template while an EQSTestingPawn is using it.

Bug Fix:

  • Dynamic EnvQuery graph node titles will now update correctly when properties in their details panel are changed.

  • Initializing AI related USTRUCT data types will no longer have uninitialized fields.

  • Fixed calling AIPerceptionComponent methods SetSenseEnabled and UpdatePerceptionWhitelist when there is no SenseConfig registered.

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

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

Behavior Tree

New:

  • Tick text on Blueprint BT Services that don't have a Tick implementation are now hidden.

  • Added the capability to categorize Blackboard Variables.

Improvement:

  • Added validation on instance arrays (aux nodes, parallel tasks and memory) to update stats properly and to prevent modifications while iterating through them.

Bug Fix:

  • Added minor BTDecorator_Loop fixes:

    • Loop will now force at least 1 execution.

    • Prevented the number of remaining executions from becoming a negative value.

    • Remaining time is now properly displayed.

  • Fixed an issue where iterating through active nodes would sometimes cause a node to be deactivated.

  • Fixed an issue where the BT evaluation of a Conditional Flow Abort skips a higher priority state if the evaluation triggers another Conditional Flow Abort in the previous state.

  • Fixed an issue where a BT task was being executed even though it had lower priority than another task higher in the hierarchy.

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

Debugging Tools

New:

  • GameplayTasks debug data is now available when being compiled with developer tools.

  • Added the ability to select the local player for debugging in GDT through the command "gdt.SelectLocalPlayer".

Bug Fix:

  • [VisualLogger] Timeline fixes:

    • Prevented a freeze when trying to pan after zooming in.

    • Prevented panning below 0 by initializing the clamp range to the view range.

    • Prevented changing the zoom factor while panning outside the clamp range.

    • When using the right mouse button the Timeline will no longer snap to the closest element as it interferes with panning.

    • Removed the zoom sensibility due to the possibility of becoming stuck at a given zoom factor.

  • Fixed a bug in FVisualLoggerFilters::MatchCategoryFilters that resulted in log lines being filtered out if their category couldn't be found in FVisualLoggerFilters.Categories.

  • Fixed an issue where the EQS composite generator was not displaying CPU stats correctly.

  • Fixed an issue where clearing debug data would not properly clear the stored EQS debug drawing text.

New:

  • Added an option to debug draw poly flags and area flags in Recast Debug draw.

  • Added documentation tips to optimize Navmesh generation speed.

  • Added a templated RecastAStarGraph implementation so users can modify pathfinding logic using Recast Navmesh data.

  • Added the Console variables ai.debug.nav.refreshinterval and ai.debug.nav.displaysize to control the refresh rate and the size of the displayed area in the Navigation Mesh.

  • Added logs to track the geometry added when generating navmesh tiles.

Improvement:

  • Fixed the convex element export in the NavModifierComponent to improve the precision of navmesh generation around those elements.

Crash Fix:

  • Fixed a crash that occurred when changing navmesh generation parameters.

Bug Fix:

  • Fixed an issue where the Navigation Mesh was making the current map "dirty" on load without any user action.

  • Fixed an issue where unloaded levels were being added to the NavOctree, impacting the Navigation Mesh.

  • Fixed NavMesh method ‘closestPointOnPolyInTile' from returning the incorrect height.

  • Fixed missing Navmesh tiles when cooking Maps from the Editor's 'Launch' option.

  • Fixed the computation of the vertice count between mesh and detail mesh when creating the BVTree in DetourNavMesh.

  • Prevented the Navigation Mesh from being removed when a level is saved without a Navigation System.

Animation

New:

  • Added debug draw control support to the Control Rig Component.

  • Added support to bind a groom on a GeometryCache.

  • Added support to frame interpolation for subframe sampling to USD mesh animations.

  • It is now possible to import an animated groom through Alembic as a GroomCache asset and play it back on its associated Groom asset through the Groom Component.

  • Converted SkinWeightProfile scalability settings to CVars in order to be set through Device Profiles rather than Scalability settings.

Crash Fix:

  • Fixed a potential crash with Level of Detail Material mapping which occurred during a Skeletal Mesh merge.

Bug Fix:

  • Fixed Cyclic Coordinate Descent Inverse Kinematics (CCDIK) rotation limits in Control Rig Component.

  • Fixed virtual bones being generated on animations that don't animate them.

Animation Assets

Crash Fix:

  • Removing unused bones from the Skeleton no longer causes a crash.

  • Disabled Supplemental Streaming SIMD Extensions 3 (SSSE3) instructions, which was causing crashes when loading MetaHuman Creator assets on older CPUs that don't support SSSE3.

Bug Fix:

  • Fixed a CHECK_PUREVIRTUALS error in AnimMontage.h

Animation Blueprints

Crash Fix:

  • Fixed a crash ending PIE when a sequence is playing and is driving an Animation Blueprint with a Spring Bone Controller active.

  • Prevented a crash when re-selecting a group of trail nodes.

Bug Fix:

  • Output pose now initializes when no sources are present.

  • The Animation Blueprint Transition warning when the rule is bound is fixed. Pins are automatically disconnected if they are replaced with a bound rule.

  • RandomPlayer anim node will now support blend in times that are less than the frame delta, including 0.

  • Re-ordered AnimInstance's property access class method to copy after Event Graph methods in order for properties to be correctly transformed when accessed from Blueprint functions.

  • Fixed an uninitialized struct member in Property Access.

  • Fixed curve weights out of bounds access in the Inertialization node.

  • ControlRig AnimNode's exposed pins will now have the correct default values as specified in the source Control Rig Blueprint.

  • Fixed warnings about missing variables making property accesses non-functional.

  • Prevented memory corruption caused by unconnected pins on Control Rig nodes.

  • Fixed Animation Blueprint compiler issues occurring with collapsed graphs and isolated errors in state transitions.

  • Property Access nodes will now be able to generate unique property names.

Animation Tools

Crash Fix:

  • Fixed a crash from occuring when re-opening an Asset Editor after a new preview mesh is applied.

Bug Fix:

  • During the retargeting process, curves now copy correctly on child Animation Sequences.

  • Fixed Asset import path issues during the retargeting of Animation Sequences.

  • Fixed debug drawing of raw animation bones in Persona when component has post process or sub anim instances.

  • Changed layout of Animation Graph overrides to improve readability.

Import/Export

Optimization:

  • Improved motion blur for GeometryCache.

  • Improved support for GeometryCache starting with empty frames, such as fluid simulation, explosion, and other effects.

Crash Fix:

  • Fixed crash that would occur when importing a SkeletalMesh from Alembic with the "Merge Meshes" option.

Bug Fix:

  • Removed invalid Motion Vectors when importing GeometryCache with the option "Import Abc Velocities As Motion Vectors". This results in cleaner subframes.

Skeletal Mesh

New:

  • Added ENGINE_API Macro to Export SkeletalMeshVertexClothBuffer's Initialization method.

Crash Fix:

  • Fixed a crash which occured from concurrent access to a Skeleton's smart name map.

Bug Fix:

  • Fixed a conversion issue between signed and unsigned integer structs.

  • Added additional safety checks to ensure the bone transform is not being accessed out of bounds.

Removed:

  • Removed deprecated Skeletal Mesh Component check for Lerp Curves.

Audio

New:

  • Enabled the deletion of existing Quartz Clock Actors from Blueprints.

  • Added more efficient search options for Audio Streaming Cache.

  • Added Audio Modulation support for Sound Submixes from their Output Volume, Wet Level, and Dry Level properties.

  • Added new static gameplay functions to prime sounds for audio stream caching.

  • Updated Quartz with the ability to query for the duration of time that a given number of Quantization Type events will run based on the clock's sample rate and time signature settings.

  • Made Blueprint-accessible versions of audio-utility functions that were previously only available in C++, including:

    • GetFrequencyFromMIDIPitch

    • GetMIDIPitchFromFrequency

    • GetPitchScaleFromMIDIPitch

    • GetGainFromMidiVelocity

    • ConvertLinearToDecibels

    • ConvertDecibelsToLinear

    • GetLogFrequencyClamped

    • GetLinearFrequencyClamped

    • GetFrequencyMultiplierFromSemitones

    • GetBandwidthFromQ

    • GetQFromBandwidth

  • Added radius as a channel position parameter within the sound field format API.

  • Added a new log category for stream caching to independently control log levels from the logaudio category.

  • Added a Quartz function to return the current transport in a human-readable format.

  • Added a Quartz function that returns the time since a specified Quartz clock was last reset.

  • Added booleans to enable Base Submix, Submix Sends, and Bus Sends on Sound Base objects. These booleans replace the previous "Output to Bus Only" parameter. Assets created prior to 4.27 will be updated automatically.

Improvement:

  • Reduced memory overhead when using SoundCues by pruning branches that do not match the cooking target's quality level.

  • Added major optimizations for exhaustive search code path in Audio Stream Caching.

  • Raised maximum value for max global pitch scale.

Crash Fix:

  • Fixed crashes in Quartz when calling FQuantizedPlayCommand::OnFinalCallbackCustom().

  • Fixed crashes caused by race condition when adding new clocks to low-rate Quartz.

  • Fixed crash issue when Audio Modulation is enabled in an editor running using -nosound.

  • Fixed an issue where using a Submix Effects chain in Blueprints would cause a crash if no Submix Effects Preset was found.

Bug Fix:

  • Fixed issue where Sound Classes would sometimes load before certain referenced types could be known, breaking those referenced assets

  • Added fix to prevent rare memory stomp within 2DChannel map.

  • Fixed issue where sometimes a "divide by zero" check would get triggered if Quartz was using very high BPM.

  • Fixed ensure caused by clocks not being removed during Quartz Clock Manager shutdown.

  • Fixed issue with Vorbis in which it failed to load streamed data before the initialization phase was over. This primarily impacted Multichannel streams where the initial pages couldn't fit into 6 KB.

  • Fixed issue that caused activated reverbs to not be set.

  • Fixed channel-order issue when using 5.1 and streaming sounds.

  • Fixed an issue where the multi-channel source bus was using the number of frames instead of the number of samples.

  • Fixed a wrap-around issue on imported .ogg Vorbis files.

  • Fixed issues when importing audio files with higher than 16 bits.

  • Fixed an issue where restarting in virtual mode would not properly reset the active sound cue and playback time.

  • Fixed an issue where the multi-channel TSampleBuffer was using the number of samples instead of the number of frames.

  • Added a warning when applying a submix effect to a submix that doesn't exist.

  • Fixed an issue with "soloaudio" persisting in the Content Browser.

  • Added a fix for NaN appearing within the GetLogFrequencyClamped and GetLinearFrequencyClamped functions.

  • Added DLL exports to Audio Modulation statics.

Removed:

  • USoundBase::GetDefaultSoundClass() has been removed. Any references can be replaced with USoundBase::GetSoundClass() or UAudioSettings::GetDefaultSoundClass().

AutomationTool

New:

  • Added a Perforce helper to revert / delete multiple files at once.

Bug Fix:

  • Fixed the Replace All Reports feature in the Test Automation window not functioning the first time it is used.

Control Rig

New:

  • Prevented duplicate curves from being added when importing curves into Control Rig

Crash Fix:

  • Fixed a crash that occurred in cook builds that contain Full Body IK and Control Rig nodes.

  • Fixed a crash in Control Rig Editor that occured when connecting a sub-pin of a Get Variable Node to a Set Variable Node's value pin.

Bug Fix:

  • Changing pin values in Control Rig will now trigger the necessary recompile.

  • Control and Space will now work correctly with the "Add Mapped Elements" Blueprint function for the Control Rig Component. \

  • Fixed jittery movement animation when using Control Pin Value on the ModifyTransform Node's pin.

  • Prevented watched pins from causing ControlRig Editor to keep marking a ControlRigBlueprint as dirty after being saved.

Core

New:

  • Commandline argument "-buildmachine" now propagates to subprocesses (like ShaderCompileWorker) started by the engine.

  • The package difference test commandlet now produces a hexdump when differences are found.

  • In the editor preferences the "Enable Live Coding" option no longer requires an editor restart to take effect.

  • Improved feedback to Live Coding when it would not start due to a prior hot reload.

  • Added messaging about delays to live coding to accommodate cases where the Unreal Editor has stopped in the debugger when a system using a large number of processors.

  • Improved live coding feedback in the Unreal Editor when compiling is initiated using the keys Ctrl-Alt-F11.

  • Updated messaging when live coding is enabled after using hot reloading.

  • Moved live coding warnings from the live coding window to the log.

  • Fixed misleading comment on PostLoadMapDelegate function.

  • Added a UTickableWorldSubsystem as a base class for all world sub systems that need to be ticked along with their world. This is now the preferred method for UWorldSubsystem that also inherits from FTickableGameObject as it prevents some common pitfalls. By default:

    • It implements FTickableGameObject::GetTickableGameObjectWorld to return the subsystem's world.

    • It prevents the subsystem from ticking as soon as the subsystem is deinitialized.

    • It prevents the subsystem's CDO from ever ticking.

  • Improved performance for Unreal Insights Timing View when having a large number of frames.

  • Editor asset tagged property loading is now more resilient by seeking the expected end position and logging an error, as opposed to setting the archive into an error state.

  • Added new WIN32_WINDOWS macro to avoid a compiler error in SwitchBoardListener.

  • Added support for UE as a Library, which enables external applications to run and control their own UE4 instance.

  • Operator new overloads will now always allocate at least one byte.

  • Added new alignment-aware C++17 new/delete operator overrides.

  • Extended FGenericDataDrivenShaderPlatformInfo settings to support "opt-out" settings by adding the ability to set default values.

  • Setting GIsRequestingExit on the start of Engine Tick is now disabled unless SET_REQUEST_EXIT_ON_TICK_ONLY is enabled.

  • IoStore Diff command - helper is a command to diff two sets of container files. An example use:

    -UE4Editor-Cmd.exe-run=IoStoreCommandlet-Source=<Path>-SourceCryptoKeys=<PathToCrypto.json>-Target=<Path>-TargetCryptoKeys=<PathToCrypto.json>-DumpToFile=<OptionalFilename>

  • Added FPackageName overloads for FAnsiStringView.

  • A new package option to specify the URL to where crash reports will be sent, in cases where the crash report client is packaged with the game. This option can be found in the advanced package options, by default crash reports from the Editor are sent to Epic unless otherwise specified.

  • Support for single quotes around attributes has been added in the FXmlFile.

  • IoStore command to List container files to csv. An example use:

    -List=<ContainerFileNameOrWildcard> -csv=<filename> Outputs <PackageId, PackgeName, Filename, Container, Offset, Size, ChunkHash>

  • Included the name of the slowest unit test in a warning log for when a less than two second smoke test run time is executed.

  • Added coarse parallel name batch loading.

  • Added C++17 structured binding support for TTuple.

  • The TWeakInterfacePtr<T> class now has an API that is more consistent with the weak object pointer class.

  • Enabled comparison of string views of different types Compare, Equals, and the associated operators are now supported for any pairs of string views and C-style strings that FPlatformString has a comparison function for.

  • Added additional descriptive information to FMallocBinned2 asserts when they fire.

  • The Engine can now build successfully with CHECK_PURE_VIRTUALS enabled in order to verify that all PURE_VIRTUAL functions are correctly implemented in subclasses. UClasses that use PURE_VIRTUAL must be marked abstract and UStructs that use PURE_VIRTUAL must have the WithPureVirtual trait set.

  • Added RetainedRef Template to be used as a function parameter when the reference will be held beyond the length of the call, causing a compile error when passing an rvalue.

  • Added find functions for string views.

  • In FPropertyTextUtilities, the TextToPropertyHelper method can now have PortFlags specified.

  • Extended MakeValue and MakeError to take a variable number of arguments.

  • Added FNameBuilder to simplify passing FName to functions that take FStringView.

  • Changed DDC CachedDataProbablyExists to skip slow cache backends.

  • Allow copy constructor and assignment of ValueOrError template.

  • Smoke test responsible for finding uninitialized struct members will now also try to construct all structs with 'new FMyStruct' syntax to find properties that are uninitialized despite their struct having a custom default constructor.

  • Added const access to source in the String Reader.

  • Added command line options to PerfReportTool "-Add -cleanCsvOut <filename>", for writing out a standard format .CSV file with events stripped.

  • Added wildcard support to PerfReportTool for metadata filter values.

  • Recompiled CSV tools as 64-bit.

  • Added PerfReportTool SummaryMetadata disk cache support. This skips CSV processing entirely for files already in the cache, which is significantly faster for bulk queries.

  • Added PerfReportTool Scrollable summary tables with the command line option "-scrollableTable". This makes the summary table scrollable, with frozen first rows, columns, and automatic colorization. These are useful for historical data tracking.

  • Added Csv.bin compression support. Run CsvConvert with pass -binCompress 1 or 2 to enable compression on .csv.bin files.

  • Updated clang atomics to use newer atomic functions in favor of sync and added support for 128-bit atomics for platforms that support it.

  • Added Support for multiple wildcards in arbitrary positions has been added to CsvTools. Wildcards can be used for PerfReportTool reports and CsvToSvg stat lists.

  • Added a checkpoint heartbeat hang detector to help diagnose issues such as infinite loading screens.

    • This detects cases where all the main threads are ticking but the high level logic is stuck.

    • Adds calls to ThreadHeartBeat class methodMonitorCheckpointStart and MonitorCheckpointEnd to use.

    • If it takes longer than the threshold to reach MonitorCheckpointEnd, a fatal error will be thrown.

  • Added MakeBinaryConfig commandlet. This will optionally run at stage time to generate a BinaryConfig.ini, which if present at runtime will load up ini files.

    • Can be enabled in Packaging settings, or -makebinaryconfig option to BuildCookRun.

    • Can use -textconfig at runtime to go back to non-binary config files.

  • Added const access to source in String Reader.

  • Removed several low-value/high-frequency profiling scopes to improve performance and stability while capturing.

  • FObjectIterator has now the option to lock the global UObject array when it's iterating over it to prevent thread safety issues when iterating over all objects while other threads are creating new UObjects.

  • Added cvar ‘Engine.DelayTrimMemoryDuringMapLoadMode' that will delay calling TrimMemory until the end of LoadMap.

  • a CsvProfiler stat for 2d camera speed has been added to Profiling.

Optimization:

  • Asset registry optimizations have been made to reduce Engine initialization time.

  • Optimized the time required to resolve call stack symbol names on Windows OS. The Engine now loads and caches the debug symbols on demand rather than loading all debug symbols at once on the first request.

  • Asset registry optimizations have been made to reduce Engine initialization time.

  • Optimized FName batch loading and added FArchive batch serialization

  • Saved one-hundred and twenty milliseconds to next gen load time by removing superfluous sleeping on a critical path.

  • Optimized Cooked AssetRegistry loading optimizations.

  • Improved performance of GetSubSystem calls from C++ code.

Crash Fix:

  • Fixed crashes when running commandlets with -noshadercompile argument.

  • Fixed crash when polling to see if a UTexture is ready for PostLoad while it is processing it's texture data on a background thread.

  • Fixed a crash that could occur if an imported package was garbage collected during loading.

  • Fixed hot reload crash caused by EInternalObjectFlags' PendingConstruction function.

  • Fixed possible crashes when loading Blueprints with circular dependencies.

  • Fixed a crash in UnrealHeaderTool when parsing a BlueprintImplementableEvent with an int64 return type.

  • Fixed a crash that occurred when working with map instanced properties if the map's sparse storage has gaps.

  • Fixed a crash from occuring when decryption of a pak signature fails.

  • Fixed a crash which occured when running commandlets with the -noshadercompile argument.

Bug Fix:

  • Fixed an issue where files were not getting cleaned after hot reloading.

  • Fixed debugger support in Live Coding to properly display FName values.

  • Garbage Collection will now treat cluster objects with Internal Object Flags set to Garbage Collection Keep, the same way as if they are in the root set to prevent them from being destroyed while being referenced by the async loader.

  • Fix for non-unity build of BuildPatchTool.

  • Fixed automated test compiler error in shipping builds.

  • Fixed hot reloading where a change would not be detected due to a mismatch between how Unreal Editor and Unreal Build Tool formatted the module name.

  • Fixed an error where changing projects from the Unreal Editor which had been "Quick Restarted" from the live coding console would result in the Unreal Editor failing to start properly.

  • Fixed multiple issues where live coding would fail to compile code changes.

  • Fixed issue where live coding fails to compile changes when both the editor and game are running.

  • Fix for uninitialized variables.

  • Fixed the building of the live coding console in non-unity builds.

  • Fixed a compile issue in the live coding console when building without pre-compiled headers.

  • Fixed misaligned noexport structs.

  • Fixed Missing initializers for bool members in source control.

  • Added a missing call to the EngineSubsystemCollection Deinitialize method when on engine shutdown is invoked.

  • Missing initializers for bool members in template project defs.

  • Fixed potential race conditions when calling GC'd objects' destructors.

  • GC weak references will now be cleared after gathering unreachable objects as more objects become unreachable during the process.

  • Fixed FString class method SanitizeFloat from returning "0.0" when built under the /fp:fast command.

  • Fixed a hot reload assert when reloading an Engine-derived type.

  • Fixed POSIX platforms not honoring the -log= parameter in forked processes.

  • GarbageCollection: Changed InternalObjectFlag priority to make sure that objects are not being destroyed while being referenced by the async loader.

  • Fixed a memory stomp that occured when comparing file paths.

  • Improved instanced propagation.

  • Creating an FName with FNAME_Find no longer asserts if the name length exceeds the maximum name size.

  • Fixed code generated by UnrealHeaderTool when a const UObject pointer is returned by a UFUNCTION.

  • Fixed a problem in ArrayProperty's SerializeItem method when using a user-defined structured archive formatter, caused by a mismatch between the saving and loading branches when doing unversioned property serialization.

  • Fixed a UnrealHeaderTool error when building a project inside a .tmp folder.

  • FMallocBinned3 will now try to allocate memory from a bigger pool to avoid Out of Memory crashes.

  • Fixed perfect forwarding in the PimplPtr header.

  • Fixed a possible buffer overflow when reporting a failed 'ensure'.

  • Due to Windows 7 no longer being supported by Microsoft, the bundled version of DbgHelp.dll is no longer compatible.

  • Added a missing call to AsyncLoading's class method PumpEssentialAppMessages when processing loaded packages PostLoad and CompletionCallbacks on the GT.

  • TArray's conversion constructor now enables library templates to work correctly.

  • Fixed a parse error in UnrealHeaderTool when a UENUM is deprecated.

  • Fixed a race condition in FMallocLeakDetection.

  • Fixed backward compatibility with 32-bit platforms for LLM tags tracing.

  • Prevented an object from being accessed from weak pointers after it's been destroyed and fixed a race condition between FWeakObjectPtr and Garbage Collection AsyncPurge.

  • Changed the checkSlows to checks in theFixedAllocator template to allow them to detect user error in Development builds.

  • Added static assert to detect inherited Structs which are not polymorphic unless inherited base struct also is polymorphic. If this happens, there are two options:

    • Add a vtable to the superclass (and a virtual destructor), or

    • Remove any virtual methods from the derived struct

  • Fixed IsContiguousContainer template concept checking compile error.

  • We now check that cache keys are valid before they are shortened in the Derived Data Cache.

  • Avoided a stack overflow in FOutputDeviceRedirector.

  • CsvToSVG will no longer throw an exception in multiple CSV mode if a single CSV has missing metadata.

  • Fixed edge cases with stripping by events.

  • Fixed a bug causing an exception in graph generation when the temp directory contained spaces.

  • OutputDeviceRedirector's buffered lines will now only be emptied if there are any output devices to redirect to.

  • Fixed a bug that prevented the PkgInfo commandlet from loading UAsset files.

  • Fixed a potential concurrency issue when renaming objects and enabling UObject hashing error asserts in development builds.

  • Fixed a rare case which a compressed IO read re-using a cached buffer that wasn't intended.

  • A Compiler error with Visual Studio 2019 has been fixed.

  • Async loads from the async loading thread during the final async loading flush will now also be allowed to prevent a safeguard from firing.

  • Async loading will no longer be allowed after the final async loading flush to prevent crashes on exit.

  • Fixed a typo of "Tuesday" in FDateTime.

  • FPackageReader will now copy the Editor only filtering flag from the underlying reader archive to the owning package reader.

Deprecated:

  • Deprecated UPackage::Guid.

Removed:

  • Removed safety check from FUObjectAllocator's FreeUObject constructor.

Cooker

New:

  • Reduced memory usage of EDLCookChecker in Cooker memory.

  • AssetRegistry EditorOnly dependencies. This change adds different Game and EditorOnly dependencies to the AssetRegistry.

  • Added command -NeverCookDir option to the cook commandlet.

  • Added a cooker parameter 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.

  • Added a "-BasedOnReleaseVersionPathOverride" parameter which can be used to override the value generated by GetBasedOnReleaseVersionPath.

Bug Fix:

  • Fixed pathing mismatches in DLC cooking when the cooker executable is built with a unique build environment, so it is not rooted in the Engine/Binaries/<platform>.

Network Profiler

  • Re-added a "Check All Connections" checkbox functionality in network profiler that got removed by mistake.

  • Fixed issues with network profiler graph view not loading if there are fewer than 30 frames worth of data in the profile.

  • Fixed anchoring to work with the "Check All Connections" checkbox.

Unreal Insights

New:

  • Network predication traces can now be examined using the external Unreal Insights application.

Bug Fix:

  • Fixed issues when tracing data from multiple threads.

  • Fixed a crash in NetworkPredictionInsights when jumping in time for a live session.

UnrealPak

  • Signed pak files now ensure the validity of the pak file's index.

Datasmith

New:

  • Actor visibility attribute is now serialized. An exporter can decide to export hidden actors that way.

  • You can now add a .neu.* extension (.neu.1, .neu.2, and so on) to a Creo neutral format.

  • A Datasmith scene can now declare new materials that inherit existing Material Instances and override their parameters.

  • Dataprep has been enhanced to allow operators/filters cards to look in the graph.

  • The Dataprep operators/filters palette has a new look and feel.

  • The Dataprep string array in filters has a new look and feel.

  • Cleaned up statistics displayed in the Visual Dataprep 3D viewport.

  • A Plane Cut operator was added to Dataprep.

  • The UI for Dataprep stats has been improved for easier visibility and use.

  • Dataprep now has the ability to horizontally resize action nodes.

  • Dataprep can now collapse a group of actions.

  • Dataprep has a new operator to set collision complexity.

  • The Datasmith Revit Exporter now corrects Structural Steel Connection pivots.

  • In Dataprep, you can now set format-specific import options.

  • Dataprep has a new operator to resize textures.

  • A panel was added to visualize, browse, and select components in Visual Dataprep.

  • Dataprep now has the ability to create a filter from a selection.

  • You can now disable/enable groups of actions in Dataprep.

  • In Datasmith Revit exporter, you can correctly export hierarchy based on Super Component.

  • Datasmith Revit exporter provides Floors and Ceilings pivots at scene origin instead of at their own local pivots.

  • Added support for thin translucency shading models on the Datasmith UE PBR (physically based rendering) materials.

  • Facade now includes an exposed variant API, with bCleanupUnusedElements parameter to FDatasmithFacadeScene::ExportScene().

  • Added AP242 XML Step, XPDM, SolidEdge formats in Datasmith supported file types.

  • Add support for reading FBX metadata into Datasmith when importing scenes from DeltaGen and VRED.

  • Fixed a memory corruption issue on export of scene in 3dsMax exporter.

  • Revit Datasmith exporter now exports luminance color temperature.

  • A processing time control in CADWorker has been added. This prevents a DMU from not being imported due to a referenced file looping. The processing max time is based on the size of the file to process, and its format. Only the blocked file is canceled. This can be disabled with cvar r.CADTranslator.EnableTimeControl=0.

  • In Dataprep, the filter is now updated from Selection with a simpler UI, and uses object/actors path as the unique ID.

  • Update of KernelIO dll with 2021 sp1.2 version. With this new release, the supported version by format are:

    • CATIA V5 (.CATPart, .CATProduct, .cgr) R10 → R31

    • CATIA V6 (.3Dxml) 2011 → 2013X

    • 3D Experience (.3Dxml) 2014 → 2020X

    • Inventor (.ipt, .iam) All → 2021

    • JT (.jt) 7.0 → 10.5

    • Pro/Engineer part files (.prt, .asm) ProE 13 → Creo 7

    • Pro/Engineer neutral files (.neu) ProE 13 → WF5

    • SAT : ACIS (.sat) All → R27

    • Solid Edge (.par, .asm, .psm) All → 2020

    • Solidworks (.sldprt, .sldasm) 99 → 2021

    • STEP (.stp) 203/214/242

    • XT Format (.x_t) All → 32

    • NX / Unigraphics (.prt) 11 → CR 1957

  • Navisworks 2021 is now supported by the Datasmith Navisworks exporter.

  • For PLM XML files, some error messages have been replaced by warning messages when files are prevented from parsing.

  • Added new Collaborative Viewer content: two new templates in Collab Base that use shared resources.

  • Support has been added for a multilingual installer for the Revit exporter.

  • For the Navisworks importer, Mesh Actors for merged geometry are now re-pivoted to the bottom center of the bounding box.

  • Added a Mobility property to the Datasmith Area LightActor:

    • The Datasmith Area Light Blueprint now sets its components (mesh/light) for mobility in construct in accordance with this.

    • Dataprep Set Mobility supports setting ADatasmith Area Light Actor (in addition to the usual Scene Component).

Crash Fix:

  • A crash no longer occurs when an asset referenced by a captured UObject property in the Variant Manager is swapped with an asset of an incompatible class.

  • Fixed a crash that occurred when trying to capture Variant Manager thumbnails from the viewport during standalone mode.

  • No longer crashes when a landscape is imported by Dataprep or reimported from Datasmith.

Bug Fix:

  • Fixed the Variant Manager spawning function director outer ALevel Variant Sets Actors so they always spawn on the persistent world levels instead of on the vestigial worlds of sublevels.

  • Fixed the Variant Manager function directors that were unnecessarily collected and recreated repeatedly.

  • It is now possible to set nullptr values on UObject property captures in the Variant Manager.

  • User-set Material overrides are no longer replaced when reimporting Datasmith scenes in some scenarios.

  • Fixed support for Variant Manager thumbnails using transparency.

  • For DataSmith Content StdMasters:

    • Fixed normals when using triplanar mapping.

    • Fixed POM when using rotated UVs.

    • Added double-sided support to normals.

    • Reduced cost and complexity of triplanar mapping.

    • Tweaked glass master default values.

  • Fixed an issue where Variant Manager visibility changes were not applied to the viewport on some scenarios when the viewport's Realtime property was set to Off.

  • Added the newest decals to be on par with Twinmotion, and fixed a POM issue.

  • Updated decal material usage to avoid material compile failure.

  • FDatasmithSceneCleaner::Clean() will no longer remove materials that are referenced only by a variant.

  • Fixed incorrect exported joint indices when exporting skeletal meshes to USD if the skeleton has a different number of bones than what is used by the skeletal mesh.

  • Fixed an issue in the material generation by a datasmith import. The expression names in the material functions used by a Datasmith-created material are now unique.

  • Emissive master now uses the alpha channel of the Luminance Filter Map as an opacity mask.

  • Tweaked triplanar projection, added panning in triplanar, tweaked glass default values, and added decals material permutations.

  • The following fixes have been made to the Automotive and Architecture Collab Viewer templates:

    • 3D cut plane no longer cuts the model.

    • Added creation of bookmarks at Runtime.

    • You can now load saved states in the editor.

    • Changed the title of the popup window of datasmith runtime load.

    • Removed the Transmission hierarchy in the architecture template.

    • Fixed Reset and Reset All Fail on the Collab Viewer with data imported through runtime Datasmith.

  • Fixed a broken documentation link on the import help button and added an automated test to make sure the link stays valid.

DevTools

New:

  • Added a custom solution section to allow Visual Assist to identify the solution as an Unreal solution.

Bug Fix:

  • The full path to the VsCode compiler is now specified, as well as command line arguments in the format expected by the compiler.

Automation

New:

  • The automated tests report is now more resilient in cases of critical failure or timeout.

    • The JSON report is saved after each test execution.

    • Test artifacts are now copied after each test execution.

    • The HTML report now displays not run and in process test states.

    • Removed the undocumented command line option checkpoint.

Bug Fix:

  • Corrected an issue with degenerate artifact creation. Attempting to create files with the same source and destination folder hierarchies when the Role was null would lead to file errors. These required five 30-second timeouts each to skip when ending runs using -skipserver

  • Fixed an issue with NullPointerExceptions on run when the Configuration's "Build" was null.

  • Fixed automation and gauntlet tests exit code on Unix systems (docker).

    • FPlatformMisc::RequestExit(force = true) caused editor exit with code 1 due to implementation for the UNIX platform.

    • This led to problems in the CI pipelines, the CI stage was sometimes assumed to have failed despite the fact the tests were ok and the tests' status code was 0.

    • Added a simple call of RequestExitWithStatus to correct the problem.

AutomationTool

New:

  • Added the AdditionalIoStoreOptions parameter to the UAT ProjectParams class, which lets you supply extra parameters to the iostore commandlet when staging a build.

  • Fixed an incorrect default value being applied for the skipiostore parameter in UAT.

Bug Fix:

  • Corrected the handling of the -skipdeploy UAT \ UBT command. This now reduces the time it takes to Launch the game from the Editor.

  • Fixed staging chunk assignment failing when there were case mismatches between paths in the staging manifest and the pak chunk lists.

  • Corrected a case during project param creation where we still assumed there was a single editor target per project.

Memory Profiler

Bug Fix:

  • FileCache memory is no longer attributed to the first caller.

UnrealBuildTool

New:

  • Fixed issues when running UBT in a build environment without a local data directory, by falling back on the Engine folder.

Bug Fix:

  • Corrected module dependencies not working when a module has no source files.

  • Fixed IsHostOnVpn() always returning false, so Incredibuild isn't used for building C++ over VPN.

UnrealHeaderTool

  • The ExpandEnumAsExecs metadata now properly handles spaces in a comma-delimited list of parameters.

Editor

New:

  • When toggling sub-level visibility on the Levels Editor, Multi-User editing now reflects the corresponding game flags so that -game nodes will properly display updated visibility. Users can opt-out of this behavior by disabling the Reflect Level Visibility to Game option in the Multi-User project settings.

  • The spline point property editor now allows toggling between absolute and relative position and rotation.

  • Added Copy and Paste options to the context menu on each field of the spline point property editor.

  • Specific fields and interp types for subclasses of USplineComponents can now be disabled.

  • Reworked water actor sprites to a more dynamic system.

  • Water actor sprites are now replaced with an error icon if certain checks fail.

  • Added new icons for the WaterLandscapeBrush and WaterMeshActor.

  • Package save events are now captured when running in -game mode. This is to support remote recording of takes on headless nodes.

  • Transaction events on Multi-User are now synchronized on nDisplay nodes.

  • Added an API ConcertSyncClient module that enables users to participate in transaction filtering. API users can indicate if a UProperty or UObject should be included, excluded, or have default behavior applied to it.

  • Added support to nDisplay to properly synchronize Multi-User activity stream when the nDisplay nodes first connect to the session. All nodes will coordinate their activity sync and they will finalize simultaneously. Note: If a node reconnects during an active session after initial synchronization, it is no longer possible to synchronize it. All nDisplay nodes should be restarted if synchronization is required.

  • Implemented a custom asset editor for waves assets which shows a preview of the resulting waves.

  • Multi-User take recording is now automatically available when connected to a Multi-User session. Previous versions required you to enable a special CVar.

  • Added a new Editor preference (Check References on Delete). When disabled, Unreal Engine no longer checks actor references when deleting actors from the World Outliner or warns about possible lost references. This can reduce the delay of initial deletion for levels that contain a lot of soft references.

  • Users can now control the maximum transmission rate for packets on a UDP connection. The default value is 1 Gbit/second. This value can be adjusted in the Project Settings for UDP Messaging.

  • Users can now use new controls in the Take recorder to specify who is recording and who provides the source data to nodes connected in a Multi-User session. This feature is only enabled when connected to a Multi-User session.

  • FNames can now be initialized with a string that starts with an underscores in the Editor.

  • Reference Viewer now has an option to show only the filtered node.

  • Reference Viewer now has a Compact Mode that hides thumbnails on the graph nodes and reduces the space taken by each one.

  • Added an Editor delegate that is broadcast from ObjectTools::AddExtraObjectsToDelete. It allows the insertion of secondary assets that should be deleted at the same time as the ones selected by the user.

  • Added icons for landscape BP brush actors.

  • Added an option to UTextureFactory to specify the source image color space. This saves processing time when importing MDL materials by creating the textures with the right color space at the factory level.

  • You can now load a material from a module path and a definition name instead of loading it from a file.

  • You can now add and remove MDL module search paths for the MDL importer.

  • Very large (2GB+) skeletal meshes can now be imported into the Editor.

  • Name resolution can now be performed on TCP Message Bus and File Server connections. You can use IPv4 style addresses or a named address.

  • The Reference Viewer no longer displays the graph state overlay.

  • 16-bit grayscale PNGs are now imported as 16-bit gray textures.

  • Added support for changing the aspect ratio axis constraint when the viewport is locked to an Actor.

  • If there is a still pending open transaction when trying to launch PIE, UE now cancels the transaction instead of preventing PIE from being launched.

  • Added -BulkCheckout and -GarbageCollectionFrequency=X options to the ResavePackages commandlet. -BulkCheckout causes all assets likely to be saved during the commandlet's run to be checked out of source control before loading packages. This reduces the number of source control operations needed when working with large numbers of files. -GarbageCollectionFrequency=X helps control how often garbage collection happens, which also helps when operating on a large number of Assets.

  • Changed the spline SnapToPoint / SnapToActor default hotkeys to Shift+P / Alt+Shift+P to avoid conflict with viewport navigation hotkeys.

  • Added spline point selection buttons to the spline details panel "Selected Points" category.

  • Plugins for remote control protocols (DMX, OSC, MIDI) now have their own icons.

  • Fixed a regression in Editor loading time when using GameplayCues.

  • Added support for negative values in CurveAtlas when color adjustments are disabled.

  • DDC - Added detailed stats about the DDC that are browsable in the Editor.

  • Added an Editor setting that writes to the engine global setting key/value storage instead of the environment variables. If you're already using the global DDC environment variables, these will remain in use.

  • Added per-project settings you can configure to recommend the setup of a globally shared DDC. These settings are off by default.

  • Added code support for using the gameplay tag UI in other Editor customizations via GameplayTagsEditorModule.

  • Added a new SGraphPinStructInstance class to make it easier to build custom UI for struct pins in Blueprints.

  • Added support for non-square resolutions in Curve Atlas.

  • Added default color and grayscale calibration chart materials to Engine content and BaseEngine.ini project settings.

  • Added the -FrameproEnableContextSwitches command-line interface argument to turn on context-switch tracking in Framepro captures.

  • For the MDL Importer, imported material graphs no longer contain unused constants and parameters.

Crash Fix:

  • Fixed a crash that happened when moving Light Cards on an nDisplay Stage Actor.

  • Fixed a crash that was caused by an uninitialized FBox in BaseMeshPainComponentAdapter causing infinite recursion.

  • Removed a message dialogue from skeleton processing to fix a crash with destroying SAssetPicker while it is rendering thumbnails in its Tick().

  • Fixed multiple crashes related to selecting options from Event Graph context menus.

  • Fixed how the base address was being calculated in FPropertyValueImpl::EnumerateObjectsToModify. This caused a crash with UObjects that use Sparse Class Data.

  • Fixed SVN integration crashing the Editor on Mac because libserf-1.dylib was not found.

  • Fixed a crash that happened when right-clicking certain elements in the source control history.

  • The editor no longer crashes when importing a corrupted EXR image.

  • Fixed a crash that happened when dragging new elements onto arrays of Actor instances.

  • Fixed a crash when reimporting a UDIMs base texture that was renamed.

  • Fixed a crash caused by Replace References.

  • Fixed a crash that occurred when trying to use Blueprints derived from AUsdStageActor in standalone mode.

Bug Fix:

  • Fixed a bug with the CSVToSVG tool that caused invalid HTML to be generated when system locale used commas as the decimal separator.

  • The Multi-User actor no longer displays in raytraced reflections when running in -game mode.

  • Fixed an issue where water actor sprites would not load due to Water Subsystem being nullptr in the actor constructors.

  • Client windows no longer spawn in a position where their title bars are hidden.

  • Fixed a bug where the first texture imported in an Editor session could have the wrong settings applied to it.

  • The type of first texture imported in an Editor session is now correctly identified.

  • ConfigureEnabledPlugins() now reports success when plugin count is zero. (Contributed by WenchaoXia)

  • The Ctrl + Alt + Shift + P keyboard shortcut now works while in Play In Editor mode.

  • Fixed an issue with a sub-level not being garbage collected properly when creating a new world from a template.

  • Fixed a sub-level offset issue that happened when loading a top-level world in World Composition when that sub-level had been already loaded.

  • Added a missing water sprite category in the viewport options. Billboard components now need to be added to the CDO in order to be detected by the Editor as proper sprite categories.

  • Fixed an issue that caused the icon for river water body actors to appear oversized the first time a water actor was placed in the level.

  • Fixed two separate issues that prevented the Goto Definition Editor feature from working in relocated Installed Builds.

  • Added support for displaying floats greater than e18 in the Editor, and removed cast losing double precision.

  • Fixed a bug that prevented reporting when not using the crash reporter. (Contributed by Phyronnaz)

  • SDetailsViewBase now allows deferred actions to call EnqueueDeferredAction. These additional deferred actions are then immediately processed in the same frame.

  • Fixed a bug with instanced objects not updating the reset to default state in the parent object when changed.

  • Fixed a bug where explicitly setting the IsEnabled attribute of an FDetailWidgetRow would not be respected, because SDetailSingleItemRow was only checking IsBound(), not IsSet() as well.

  • The Paint tool is now correctly grayed out when painting textures with mesh paint if the mesh has no paintable textures to cycle through.

  • Fixed an issue that caused Fixed FApiContext::AddSearchPath to register a folder's parent folder to the MDL path instead of the folder that was requested.

  • Fixed an issue that caused a missing portable call stack in the crash report generated when the Editor had more than 256 threads and the crashing thread was not in the first 256 threads visited by the OS.

  • Fixed an issue that caused the Editor to deadlock randomly while reporting a failed ensure().

  • Fixed an issue that caused sublevel components to fail to toggle when changing sublevel visibility in the Editor.

  • Fixed an issue that caused the crash reporter UI to sometimes take several minutes to process and display crash information after an Editor crash.

  • Fixed a bug that caused HighRes Screenshot SetResolution to ignore Resolution Scale.

  • Improved the messaging for file I/O errors in JSON deserializer that usually happened when users ran the Editor from a network drive that disconnected or failed to read.

  • Fixed an issue where specifying multiple TCP connection endpoints from the command line did not work.

  • Fixed a bug that prevented Camera Shake Actors from previewing correctly.

  • Range selection in the Persona tree view now behaves correctly when the initial selection is made from the viewport and the second selection is made from the tree view.

  • Updated string table CSV export to apply the .csv extension.

  • Fixed a bug that caused disabled toolbar combo buttons to incorrectly appear enabled when shown in a sub-menu.

  • Fix loading map status text displaying the word "loading" twice.

  • Fixed duplicated transactions when pasting sub-objects

  • Fixed an issue where some Asset editors would end up in a non-functional state after a window closing request was canceled, including the Blueprint Editor showing 'Unrecognized Tab' panels.

  • Preview widgets are now marked as being in Design mode before being destroyed, to prevent them from invoking NativeDestruct in the Editor.

  • Added ConditionalPostLoad call before building collision on a display mesh, fixing a potential issue where complex collision meshes didn't work properly in PIE.

  • Transient Actors spawned through BP are now also transactional.

  • Fixed an issue with FBX exporting where multiple meshes with the same material would receive the default material instead.

  • Camera piloting now takes into account the camera component's additive offset.

  • Fixed issue where SkipProperty wasn't being passed to WriteRow in the data table CSV writer.

  • Fixed a vulnerability due to an integer overflow and a heap overflow when loading a modified TGA file.

  • Fixed 'More Actions' menu items not doing anything when using the embedded gameplay tags editor within the Blueprint editor details panel.

  • Fixed an issue where transform changes were applied twice to attached Actors when selecting both the Actor and its parent.

  • SGraphEditor now correctly returns the value of GetSingleSelectedNode.

  • Fixed an issue where expansion state was not being properly retained in trees with more than 500 items

  • The new mesh paint mode is now correctly hidden if legacy mode is set in the Editor preferences.

  • Fixed an issue that caused map built data to be marked dirty too aggressively (for example, when placing an invisible / logical actor that did not affect lighting in the Level).

  • Fix a crash that happened when syncing out of date Assets in the Editor if a dependency package was not found.

  • Fixed a crash that happened when importing an OBJ file and using the create instanced materials option.

  • Updated AdvancedCopyPackages to pass the bShouldSuppressUI flag in headless mode.

  • Fixed FEditorModeTools::IsSelectionAllowed to allow selection if any Editor modes do instead of just checking the last mode in the list.

  • Fix an issue that caused a duplicate copy of a package to remain on disk with the old name when renaming the package.

  • Open Color IO UI: Fixed a UI issue where Colospace Index was not serialized into string and therefore appeared as invalid on instanced objects.

  • Fixed a bug that caused DPI adjustment to be incorrectly applied to the new window spawned when starting PIE.

  • Fixed an issue where socket snapping didn't work unless the component was the root component.

  • Base brush properties (size, strength, and falloff) are now correctly restored after leaving and re-entering Mesh Paint mode.

  • Fixed an import problem with FBXs containing LODs with meshes which could not be triangulated (for example, due to being non-manifold). Problematic meshes will be omitted and a warning will be generated. If a LOD cannot be imported at all, it will be auto-generated instead.

  • Fixed a hang during startup when a Blueprint-based Trace Source filter was active.

  • Fixed a bug with spline component Undo/Redo when the component was selected, rather than the Actor.

  • Reimporting a .FBX file no longer deletes custom metadata on the reimported assets. Only the FBX metadata are now affected by the reimport.

  • Fixed an issue where the FBX import would wrongly assume the importing of a skeletal mesh when the FBX file contained animation but no skeletal mesh.

  • Fixed a potential failure in the FBX collision mesh import.

  • When importing a FBX file, fixed an issue where some custom curves configurations were not properly imported, causing incorrect tangents.

  • Fixed a bug in the editor which would open the file selection window twice when reimporting an asset with the "reimport with new file" option.

  • In MDLimporter, clears the log error when an .mdl file can't be imported because the plugin was built without MDL SDK.

Cascade

Crash Fix:

  • UParticleModule is now marked as within ParticleSystem to prevent instancing with other outers, which caused several crashes.

Content Browser

New:

  • Asset tooltips now display data tags based on the asset's parent class.

  • Added a Writable Content filter to the Content Browser.

Bug Fix:

  • Fixed a bug that prevented any type of Haptic Feedback assets from being created in the Content Browser.

  • Fixed a bug that prevented the creation of Sub UV Animation assets from the Content Browser.

  • Fixed a bug that prevented the creation of UForceFeedbackAttenuation assets from the Content Browser.

  • Fixed a bug that prevented native classes from appearing in the Content Browser Collections.

  • Fixed a bug that caused thumbnails for child Blueprints which override parent Blueprint data to render incorrectly.

  • Updated SetPrimaryContentBrowser in FContentBrowserSingleton to verify that the browser can be set as primary.

  • Fixed an issue where files could not be dragged into new folders in the Content Browser's column view.

  • Optimized source control operations when renaming Assets to fix a large stall when renaming or moving a large number of files.

  • Advanced copy will now find all dependencies, even if they are not in memory.

Geometry

  • Prevent crashes when creating mesh sections in ProceduralMeshComponent with out-of-bounds vertex indices or non-unique vertex indices within a triangle.

Material Editor

New:

  • Added tooltips for Scalar parameters in the Material Editor.

  • Added support for texture arrays with TextureSize material expression.

  • Added local variables and portal nodes to Material Graph. (Contributed by Phyronnaz)

Optimization:

  • Sped up opening material editor for material instances with many parameters.

Crash Fix:

  • When a material function changes, all in-memory material functions are now checked to see if they use that function, and recompiled if they do.

Bug Fix:

  • Vector parameter children should now be editable as expected when the vector parameter is overridden.

  • Stopped unnecessary recompilation of shaders when changing texture compression.

Media Framework

New:

  • Overhauled AMF support, including support for Linux.

  • Media Capture: Added support for unconventional pixel formats such as R, RG, RGB10A2, and BGR.

  • Merged alpha manipulation function into one shader. Media capture options allow you to force the alpha channel to be set to 1. This is useful if the render target doesn't have an alpha channel.

  • Upgraded NVENC to version 10.0.

  • Overhauled AVEncoder to support Linux and Windows with both NVENC and AMF.

Scripting

  • Added GetLevels in EditorLevelUtils for Blueprint and Python scripting.

  • Added a function to EditorStaticMeshLibrary for setting material slot assignment for LODs.

  • Exposed UEditorLevelLibrary::ReplaceSelectedActors to Python.

Bug Fix:

  • Updated Editor utility widgets to not dirty the level when reinstancing.

  • Fixed an issue where utility widgets could fail to spawn properly on Editor startup.

Static Mesh Editor

Crash Fix:

  • Fixed a crash that happened when the Preview Scene Settings tab was spawned before the Viewport tab.

USD

New:

  • Added support for the treatAsPoint attribute on UsdSphereLights. This attribute will change how the light surface is calculated when converting USD light units to physical light units.

  • Added support for the UsdLuxShapingAPI schema. If a sphere light has the schema, a spot light component will be generated in UE and its cone angle will be set according to the cone angle attribute.

  • Added support for USD render contexts. When parsing materials, Unreal Engine will now load the shaders associated with the requested render context.

  • User code can register new render contexts to display in the USD Stage Editor.

  • Added the ability to export an Anim Sequence asset to a USD file.

  • Added progress display to the USD Stage asset creation steps.

  • Added support for the UsdLuxLight exposure attribute when calculating the light intensity for Unreal.

  • Added support for the EmissiveColor input when parsing UsdPreviewSurface materials.

  • Improved the conversion from Unreal skylight components to UsdLuxDomeLights. The cubemap will now be written out as relative to the USD layer Unreal Engine is writing to.

  • Attributes will now be written out to the default time code instead of at the UsdStageActor time.

  • Added an asset cache to speed up reloads for USD Stage actors. Textures can be persisted in the cache and won't be recreated unless the source file has changed since the last time it was processed.

  • Added support for the USD MDL Schema in the USD importer. This enables referencing MDL materials in a USD file and importing those in Unreal.

  • Updated the USD SDK to version 21.05.

  • Added a script to convert USD lights to the new USDLuxLight schema in USD 21.05. The script is located in "Engine\Plugins\Importers\USDImporter\Content\Python\usd_unreal\update_lights_to_21_05.py". Detailed instructions can be found within the script itself.

  • More warnings and feedback have been added for when the prim configuration is incorrect for the parsing of LOD meshes from USD files.

  • Persistent support was added for muting tracks and disabling sections on the Level Sequence Asset generated when opening a USD Stage.

  • Improved the undo/redo and multi-user support for USD stage manipulation via the USD Stage Editor window. Most operations and attribute changes are now tracked.

  • Added Blueprint and Python functions to fetch prim/component/asset correspondence for opened USD Stages via the USD Stage Editor window.

  • Allows editing other properties via the prim properties panel on the USD Stage Editor window.

  • You can now use tags to correctly handle USD-style pruning visibility when toggling Scene Component visible flags and prim visibilities in the USD Stage Editor.

  • There has been a complete rewrite of the level exporter to USD to add support for exporting foliage, landscapes and sublevels, and to update legacy scripts to Python 3.

  • In-memory stages are now created when using File > New on the USD Stage Editor instead of immediately presenting the Save prompt.

  • Stabilized behavior of AUsd Stage Actor when it is a Blueprint parent class.

  • Allows exporting Static/Skeletal Meshes and scenes to USD using dedicated payload files.

  • Back light and camera component property changes are now written to the opened USD Stage when edited on spawned components.

  • Removed the dedicated stage info panel on the USD Stage Editor. This now shows (along with more data) when no prim is selected; additionally, the stage now shows as the root prim entry on the stage tree view.

  • Synchronizing prim selection on the USD Stage Editor window with viewport selection is now allowed by picking Options > Selection > Synchronize with Editor on that window.

  • A dedicated asset cache has been created to store the assets generated from opened USD Stages to the AUsdStageActor.

  • Added static and skeletal mesh export options when exporting to USD to allow setting of Meters Per Unit and Up Axis.

  • Changed how the Usd Stage Actor binds stage loading and unloading to actor lifecycle functions. This provides more predictable behavior in complex scenarios like level streaming, switching levels during PIE, and Movie Render Queue operations.

  • Added support for loading USD files at runtime.

  • Changed the USD material import workflow to use master materials instead of generating new materials on each import.

  • Support has been added for renaming prims via the USD Stage Editor.

  • Added an export options dialog when exporting UAnim Sequence assets to USD.

Crash Fix:

  • No longer crashes during reimport of a material from USD when the original replaced material is currently in use on the scene.

  • Trying to import LOD meshes out of some elaborate prim hierarchies in USD files no longer causes crashes.

  • Sequencer no longer crashes if an opened USD Stage has animations and startTimeCode < endTimeCode.

  • Fixed a crash that occurred when loading a project with the USD Stage Editor window open in the layout along with a startup level without an AUsd Stage Actor.

  • Fixed a crash that occurred when handling mesh components with material overrides on LOD meshes from USD Stages.

  • A crash no longer occurs when switching levels after opening USD Stages that generated UGeometry Cache assets.

  • Fixed multiple crashes when parsing LOD meshes out of USD variant sets while opening a USD Stage.

Bug Fix:

  • Fixed an issue that caused texture file names to be lost when importing from USDz packages.

  • Fixed an issue that caused only one texture to be imported from USDz packages.

  • Fixed an issue where the cubemap was not getting assigned to the SkyLightComponent if the texture was already cached.

  • On the USD Stage Editor window, fixed the right-click interactions on prims inside variant sets.

  • An issue where USD AnimSequence exporter was not, in some cases, finding a preview mesh to export with has been resolved.

  • Fixed incorrect skeleton matching when exporting AnimSequences/SkeletalMeshes to USD in some instances, such as when the mesh's skeleton differs slightly from the skeleton asset.

  • Fixed the USD stage sometimes failing to close after interacting with prims on the stage tree view (left pane) of the USD Stage Editor window.

  • Fixed an issue where the USD stage would unnecessarily close or open when the USD Stage Actor was in a persistent level that was hidden or shown.

  • The stage now properly closes and reopens when the USD Stage Actor is in a streamed sublevel that is hidden or shown.

  • Fixed the Post Edit Change Property so it no longer forces the USD stage to load when already loaded.

  • A warning now displays if cubemap is not found on the filesystem when setting it onto a USD prim.

  • Incorrect color space conversion was corrected when importing vertex colors from USD geom meshes.

  • Fixed an issue so skeletal meshes are no longer visible on the viewport in some scenarios after exporting UAnimSequence assets as USDs.

  • The USD Stage Importer now uses the provided import options if triggered from an automated task.

  • Fix camera transform orientation compensation when writing back camera transforms to the USD stage.

  • Spawned components are no longer left in an invalid state after undoing a transaction where their owning AUsd Stage Actor is deleted.

  • Fixed a stationary light overlap problem for lights imported or spawned from USD files.

  • Fixed an issue where USD Stages and layers remained open even after being closed via the USD Stage Editor window.

  • Fixed the AUsd Stage Actor trying to use a deleted Level Sequence in some scenarios.

  • Fixed an issue where normal maps would disappear in the MeshEditor tab of the Static Mesh Editor for some meshes imported from USD files.

  • Added support for material overrides on Point Instancer prototypes when opening/importing them from USD Stages.

  • Fix an issue of spawned actors and components being visible for an AUsd Stage Actor in a hidden level or layer opened a new USD Stage.

  • It is now possible to mute/unmute USD layers via the USD Stage Editor window if the root layer is within the project's folder. This fix included a way to add USD layers as a sublayers of themselves.

  • Fixed some USD meshes that were losing their UV sets when opened with the USD Stage Editor and imported with Actions > Import.

VR-Editor

Crash Fix:

  • Disabled the placement of VR editor mode gizmo actors from the place actors panel. This prevents the VR gizmo actors from saving into a level and causing a crash when that level is deserialized.

World Browser

Bug Fix:

  • Fixed an issue where the Level Browser would lose folder information when switching streaming type.

Gameplay Framework

New:

  • Added GetSquaredHorizontalDistanceTo function to Actor class.

  • Added FindNearestActor function to Gameplay Statics class.

  • Added BindKey with key signature delegate to Input Component class.

  • Can now hide all unused pins when using Blueprint Make Struct nodes.

  • PlayerState Actor's IsOnlyASpectator function is now exposed to Blueprints.

  • Action level modifiers and triggers are evaluated in a second pass, after all mapping level modifiers and triggers. \

  • Added new Blueprint Compiler options and internal reinstancer flags to allow users to enable delta serialization.

  • Camera modifiers; including Camera Shakes, will now affect post-process settings. Matinee Camera Animations are played directly by the Player Camera Manager.

  • Moved legacy Matinee Camera Shake into the new GameplayCameras plugin. This makes it possible to add a Sequence shake pattern onto this class, because Matinee is deprecated and will be removed in a future version.

  • Moved Camera Shake implementation in a "shake pattern" class, leaving the base class as a container. This is to make it easier for artists to change a shake completely without having to make a new one, as well as for programmers to write new shake behaviors that can work with existing ones.

  • Game feature action for adding a Data table or Curve table as a Data Registry source.

  • Modified UGameplayAbility's PreActivate method to optionally take in trigger event data.

  • Newly placed comment nodes will no longer show comment bubbles when a graph is zoomed out.

  • Applied limits to Camera Shake Rotation when not using headsets.

  • When restarting a single-instance camera shake that was blending out, the current blending weight will transfer into a blend-in if appropriate.

  • Camera shakes with a custom duration can provide a "hint" of that duration.

  • Camera shake time-keeping and result handling logic have been refactored for reusability. \

  • Added new method ‘GrantAndActivateAbilityOnSelfWithParams' which allows Designers to pass in FGameplayEventData when granting and then activating an ability from Blueprint.

  • Sequence camera shake can now animate post process settings, and better handles the difference between focal length and field of view.

  • Added support for a custom camera shake initializer.

  • Added API for scrubbing camera shakes. This results in better support for putting shakes inside sequences.

  • Removed an unused virtual method ‘ApplyStackingLogicPostApplyAsSource' in the ActiveGameplayEffectsContainer class and made the destructor of the ActiveGameplayEffectsContainer class non-virtual.

  • Changed the Gameplay Cue Interface to pass Gameplay Cue Parameters Struct by reference.

  • Added more support to filter Gameplay Tags in the Editor using a project-specific filter. OnFilterGameplayTag supplies the referencing property and the tag source, so you can filter tags based on what asset is requesting the tag.

  • Improved Asset Manager to support virtual paths like AssetSearchRoots that can be replaced with dynamically set paths. Additionally, several new utility functions have been exposed as part of increased support for data registries and game plugins. \

  • Added OnActorPreSpawnInitialization delegate which is broadcasted before the Actor and its components have been initialized.

  • Exposed SourceObject to GameplayAbility's K2_CanActivateAbility method.

  • Native Gameplay Tags. Introducing a new FNativeGameplayTag, these make it possible to do one off native tags that are correctly registered and unregistered when the module is loaded and unloaded.

  • Improved Scalable Floats in the Gameplay Abilities plugin to support dynamic lookup of curve tables from the new Data Registry system. Added a ScalableFloat header for easier reuse of the generic struct outside the abilities plugin.

  • Added option to preserve the original captured SourceTags when GameplayEffectSpec's class method SetContext is called after Initialization.

  • Editor-only references are no longer followed when assigning management references in the Asset Manager.

  • Improved UI for registering Gameplay Tags from specific plugins. The new tag UI now lets you select a plugin location on disk for newly added Gameplay Tag sources.

  • Exposed AddControlPointPosition and ResetControlPoints to Blueprint in the InterpToMovementComponent.

  • The script execution recursion limit is now stored in a cvar named bp.ScriptRecurseLimit. The default value on desktop is now 120 to match consoles, instead of the previous value, 250. You can set this value higher in the [Console] section of DefaultEngine.ini file if you need to keep the limit at 250 on desktop.

Optimization:

  • Improved member packing on FHitResult to reduce size from 148 bytes to 144 bytes.

  • Made several performance improvements to loading and regenerating the gameplay tag table were implemented so that this option would be optimized.

Crash Fix:

  • Fixed a crash when calling CanSelectActor on an Actor that is not in a level.

  • Fixed a crash that occurred on loading placeholders iteration.

  • Fixed a crash that occurs when dragging and dropping a Geometry Cache asset into Blueprint Editor viewport to instantiate a Geometry Cache Component.

  • Fixed a crash which occurred when applying instance changes to a Blueprint while a child Blueprint with different properties is also present in the level.

  • Fixed an Editor crash that could occur when reparenting a Blueprint with at least one Blueprint-added component to a duplicate of the Blueprint as the new parent class.

  • Fixed crash when diff a blueprint asset which contains an enum variable while the enum class has been moved to another file/ folder.

  • Fixed a serialization crash that could occur when a previously-compiled function's outer Blueprint class object had not yet been freed by Garbage Collection.

  • Fixed an ensure that occured when running in-game when a Text3D component was added in a Blueprint.

  • Fixed a crash when reinstancing a Blueprint with an abstract outer.

  • Fixed a crash that could happen when compiling a Blueprint after loading it for a diff.

Bug Fix:

  • In the Kismet Math Library, BlueprintAuthority has been removed from MinimumAreaRectangle .

  • Prevented the CharacterMovementComponent from continually sending client location corrections when World Origin is rebased.

  • Any Completed or Canceled action event delegates will now report proper timing data.

  • The upper threshold clamp on the input system's deadzone modifier is now applied correctly.

  • AxisConfig settings from the old input system are now ignored for all devices, except for mouse axis scaling.

  • Fixed a case where a Level Blueprint would not run during Play In Editor (PIE) sessions after the Editor had been restarted.

  • Linkage to UStaticMesh when inheriting from your own module has been fixed.

  • GamePlayEffectsContainer's SetActiveGameplayEffectLevel method will no longer dirty FastArray if setting the same EffectLevel.

  • Added null checks to prevent Garbage Collection crash in ChildActorComponent's DestroyChildActor class method.

  • Fixed Actors who are attached to the World Outliner as a Child Actor from becoming detached when a level is reloaded.

  • Improved the display of structs when watching their values in Blueprint.

  • Fixed split pin defaults from being wrong when splitting nested user defined structs.

  • Fixed a root motion source issue where a networked client could crash when an Actor finishes executing an ability that uses a constant force root motion task with a strength-over-time modifier.

  • Property chains will now resolve when old and new objects are not of the same class.

  • Fixed missing struct-typed TSet and TMap default value overrides in a dynamically-instanced Blueprint-added component when "optimized Blueprint component instancing" is enabled for an Actor class in a cooked build.

  • Added an additional check in GameFrameworkComponentManager while dealing with an AddComponentRequest call so we don't hit an ensure before the Actor has begun play.

  • Fixed an edge case in gameplay effect mixed replication mode where Actors not explicitly owned by the net connection but who utilize that connection from GetNetConnection will not receive mixed replication updates.

  • Fixed a case where cyclic dependencies could cause default values to be unloaded.

  • When checking if a Blueprint variable is in use, the Editor will now consider references from other Blueprints as well, Additionally this is used when attempting to delete a variable.

  • Fixed an endless recursion occuring in GameplayAbility's class method EndAbility which was called by calling EndAbility again from K2_OnEndAbility.

  • Allow wildcard connections to the wildcard pins in the Format Text node so that it can be used inside of macros.

  • Gameplay tags Blueprint pins will no longer be silently cleared if they are loaded before tags are registered. They now work the same as gameplay tag variables, and the behavior for both can be changed with the Clear Invalid Tags option in the Project Settings.

  • Improved thread safety of Gameplay Tag operations.

Deprecated:

  • Deprecated SimpleConstructionScript's class method GetAllNodesConst FBlueprintEditorUtils::FindSCS_Node, which now returns the USCS_Node pointer and not the index to the node.

Learning Resources

Content Examples

New:

  • DMX Fixtures - DMX spot lights now correctly emit constant total energy distributed over a dynamically changing cone area (steradians). This better mimics a real spotlight with zoom and affects both the light and the light beam.

Localization

  • FText::AsCurrencyBase now takes an optional additional parameter that can be used to override the number of fractional digits.

  • ICU timezone data has been updated to v2021a.

Bug Fix:

  • We now rebuild the package localization cache for all current cultures when the culture changes. Previously, we would only rebuild the cache for the current language, which could leave the asset group cultures uncached and lead to the incorrect localized package being used.

Mobile

New:

  • Added profile-guided optimization (PGO) to optimize build options to Android Toolchain. PGO-optimized builds can be up to 10% faster in some CPU-bound scenarios.

  • The Editor Preview Rendering Level mode now activates the IOS or Android device profiles in the editor, allowing mobile-specific console variables to be set.

  • In DefaultDeviceProfiles.ini, the PreviewAllowlistCVars and PreviewDenyListCVars arrays can be used to specify the CVars that will be applied when Preview Rendering Level is enabled.

  • Android now calls the Memory Warning Handler when triggered via Java-side on Memory Trim callback and memory advisor state changes.

  • Android GLES has a new texture LRU system that is enabled by default. 2D textures are now held in system memory until required for draw calls. The textures are returned to system memory after 500 frames of non-use.This reduces the GLES memory footprint for most devices; however, it can have an impact on performance, and should be disabled if many new textures are frequently required in a single frame. Setting r.OpenGL.DeferTextureCreation to 0 will disable the GLES texture LRU.

Crash Fix:

  • Fixed a crash in FSkeletalMeshObjectGPUSkin::GetSkinVertexFactory when no valid LOD render data is available — for example, due to platform MinLod.

Bug Fix:

  • Fixed the stat Draw Count mobile preview in the editor. It now displays correct draw count statistics

  • Android Java logging callback is now initialized earlier to capture more messages at startup.

  • When handling a fatal log message, Android now calls out to FCoreDelegates::OnHandleSystemError and FCoreDelegates::OnShutdownAfterError as well as filling GErrorExceptionDescription with the actual error string.

Android

New:

  • Added an option that allows DOM storage on Android WebView.

  • The CPU per-core frequency is now exposed to CSV Profiler and Unreal Insights.

  • HWC Pipe (GPU performance counters for ARM Mali) is now only enabled when -hwcpipe is specified in UE4CommandLine.txt.

  • Java can now pass logging to Unreal with NativeCalls.UELog* on Android.

  • While the editor is running, Android devices now maintain a port forwarded over USB to allow Cook-on-the-Fly (COTF) network file server and Unreal Insights to work without requiring WiFi connectivity. Specifying the IP address 127.0.0.1 will now allow Insights or COTF traffic to work across the USB cable.

  • Improvements for Memory Advisor include an updated crash reporter state at once instead of per property, and a 10-second delay on reporting less critical states.

  • Exposed the Memory Advisor's Memory Warning state (from 0, OK, to 2, Critical) to CSV Profiler and Unreal Insights.

  • Added a per-project Gradle-warning filter with Build/Android/GradleFilter.txt (see an example in Engine/Build/Android/Java).

  • SoC temperature and\or thermal notifications are now exposed to CSV Profiler and Unreal Insight. This information might be unavailable on some devices.

  • Exposed Android Memory Trim messages to the CSV profiler.

  • Added config rule variable access to Android's Device profile-matching rules. The SRC_ConfigRuleVar source type is now available to Android's Device Profile Selector. \ The 'MatchString' must be in the format of MatchString="<configrule.txt variable name>|<desiredmatchstring>". The <desiredmatchstring> will be used for the CMP operation against the actual value contained in <configrule.txt variable name>. \

    • Example: \ +MatchProfile=(Profile="Android_DeviceA",Match=((SourceType=SRC_ConfigRuleVar,CompareType=CMP_Equal,MatchString="DeviceA_Enabled|true") \ Thus Android_DeviceA will be matched if the config rule variable 'DeviceA_Enabled' CMP_Equal's 'true'.

  • Added preliminary support for DualSense controllers on Android.

  • Added support for alternate mouse events on Android to support DualShock4/DualSense controller touchpads.

  • Unregisters listeners from SensorManager when not being used to reduce the SensorManager battery cost.

  • Updated to use AndroidX instead of older support libraries.

Crash Fix:

  • Fixed crashes with the Android Web Browser Widget that were due to event delegates being called from the wrong thread.

Bug Fix:

  • Fixed the GooglePAD handling of disable checks.

  • Changed the handling of the Android console history to work with Android 11 (buttons instead of a swipe).

  • Updated Android distribution install scripts to use /data/local/tmp instead of /sdcard/Downloads for staging OBB files.

  • Fixed a permissions issue with access to UE4Game directories.

  • Updated the default icons and splash screens.

  • Fixed an issue with releasing previous media samples.

  • Corrected the per-file cost calculation of an OBB that is used to determine how to split up PAK files between OBBs.

  • Fixed an issue where the editor's Preview Rendering Level menu only showed the first Android preview platform even when OpenGL ES and Vulkan were both enabled.

  • Fixed high refresh rate support on Android 11 devices.

  • Fixed backup log saving on Android—now registers the log file in the UFS/NonUFS manifest after it is created so that it can be correctly backed up later.

  • The timestamp is now removed from the UFS/NonUFS manifest when a file is deleted on Android.

  • Fixed a GLES assert that could fire during PSO cache processing if the incoming PSO had already been rendered/instantiated before PSO cache loading began.

  • Fixed an issue when UE failed to detect Samsung's family of Exynos SoCs, and would not set Big\Little core affinity masks for threads.

  • Included a config rules version in logging.

  • Now uses proper line endings for Android install scripts based on the target platform.

  • Fixed Android gyro rotation.

  • Fixed ProGuard to keep defaults for AndroidX annotations.

  • Added cleanup of previous APK/AAB before the packaging step to fix an issue with package size growth.

iOS

New:

  • Added an option under Project Settings > IOS, to allow you to override the path on the remote build Mac where iOS builds are performed. This is useful for saving space on the primary hard drive on a remote Mac.

Crash Fix:

  • No longer crashes when destroying text entry fields on iOS.

  • Fixed a crash that occurred when trying to open a new dialog while an existing dialog is transitioning in or out.

Bug Fix:

  • Fixed a texture leak related to movie player on iOS devices.

  • Fixed some capitalization issues with iOS in plugins. When using Whitelist Platforms inside a uplugin file, the correct syntax for iOS is "IOS" not "iOS". Using the incorrect case can cause dependency problems.

  • iOS now uses a default compressed format for textures set to BC7 compression instead of falling back to uncompressed formats.

  • Fixed a path-quoting issue linking Frameworks that caused link errors for IOS when using the Launcher binary build.

  • Fixed a bug in iPhonePackager Mach-O handling by updating signatures to use SHA-256. This resolves a problem where iOS apps built on a PC or re-signed by iPhonePackager would fail to load on iOS 14.5 or later.

  • Fixed build errors when compiling iOS C++ on Mac using Unreal Engine installed from the Mac Epic Games Launcher.

Networking

New:

  • Updated PacketHandler components so that they can be added from non-engine C++ using a delegate.

  • Added a maximum number of retry-attempt settings for message bus UDP messaging auto repair mode.

  • Updated IpNetDriver‘s maximum time budget check in the packet reception iterator to correctly check only after a specified number of packets

  • Added optional logging of synchronous loads triggered by the replication system.

  • Modified the "LogNet: NotifyStreamingLevelUnload" to verbose by default to prevent log spam.

Crash Fix:

  • Fixed crashes when trying to clone adapter addresses when none are available.

  • Fixed issue causing potential crashes in SetNetDormancy.

  • Fixed crash issue caused when UDP message errors are received after the UDPMessaging module is unloaded.

  • Added null check to GetLevel() in UNetConnection::UpdateLevelVisibility.

  • Fixed potential crashes in server NetDriver code.

Bug Fix:

  • Fixed issue in which DTLS packet handler failed to connect under high-packet-loss conditions.

  • Fixed a potential underflow error in the DTLS packet handler.

  • Fixed issue in which invalid authentication tags prevent the AESGCM packet handler from connecting.

  • Suppressed expected warnings triggered by NetPacketNotifyTests.

  • Fixed issue in which fast array struct delta serialization does not properly resend on NAK.

  • Added a check to detect RPC calls from non-game threads.

  • Fixed issue where UniqueNetIdRepl replicated when the net ID string is numeric and contains the + or - character, or has an odd number of digits.

  • Fixed a rare hash collision within shared property serialization.

  • Optimized the building of LevelsToTick list in LevelCollection to reduce build time.

  • Prevented InitConnect from failing during IpNetDriver's garbage collection.

Beacons

Crash Fix:

  • If an OnlineBeacon attempts to destroy the NetDriver while the NetDriver is ticking, the destruction operation will be deferred to PostTick to prevent a crash.

Network Emulation

New:

  • Added Net.DisconnectSimulatedConnections cheat to disconnect simulated connections.

Bug Fix:

  • Prevented SimulatedConnections from destroying PlayerController when disconnected.

Replays

New:

  • Added a path export table to network GUID cache serialization in checkpoints to reduce its size.

  • Added option to not reload the default map after a replay stops.

  • Added a flag to replay headers indicating recording connection type.

Crash Fix:

  • Fixed crash issue during delta checkpoint loading.

  • Fixed a replay crash when scrubbing in the editor.

Bug Fix:

  • Updated ReplaySubsystem::PlayReplay to use WorldOverride in StopExistingReplays.

  • Fixed regression where information about net startup Actors destroyed prior to recording start were lost.

  • Added broken channel cleanup during playback.

  • Added handling for serialization errors when reading net field export groups from a replay checkpoint.

  • Prevented replay delta checkpoints from recording unnecessary property data.

  • Prevented replays from incorrectly forwarding RPCs during playback to other drivers.

  • Fixed network path remapping when using duplicate level IDs.

  • Fixed delayed replication when using replay connection recording.

  • Fixed an issue when recording DORM_Never Actors into checkpoints.

  • Prevented delta checkpoint recording from overflowing the changelist history.

  • Fixed an issue with reused destroyed channel index in amortized checkpoint recording.

  • Fixed cleanup for broken Actor channels that never spawned.

  • Fixed uninitialized members of FMulticastRecordOptions.

  • Prevented inactive property changelist from being modified by replay checkpoints.

  • Fixed a replay ensure by using the base function when finding the layout for a received RPC.

  • Fixed issue when the server could stop replicating based on the position of the replay connection.

  • Removed unused checksums from replay GUID serialization.

Replication Graph

New:

  • Exposed the LogReplicationGraph category.

  • Optimized DormancyNodes in ReplicationGraph using a configurable setting to improve RepGraph performance when adding or removing dormant Actors after multiple clients disconnected.

  • Added number of total connections replicated during a frame to the FFrameReplicationStats.

  • Updated ReplicationGraph to send statistics on replicated Actors on every frame that must be collected using PostServerReplicateStats.

  • Optimized ReplicationGraph by allowing ConnectionDormancy nodes to be considered obsolete if they have not been gathered for a specified time.

  • Added the ability to log statistics on all RepLists held by RepGraphNodes using Net.RepGraph.Lists.Stats.

  • ActorList nodes will now empty their RepList on TearDown.

  • Added TearDown support to StreamingLevelListCollection.

Bug Fix:

  • Updated the DynamicSpatialFrequency node's ActorChannelCloseFrameNum to prevent dependent Actors from being prematurely destroyed.

  • Fixed an issue where multicast RPC channel opens ignored Actor's bOnlyRelevantToOwner flag.

  • Fixed issues when a join a progress client reused the pointer of a disconnected client.

  • Fixed RemoveClientConnection not removing the proper GraphConnection if it was in the PendingConnection list

  • Fixed the GraphConnection's ConnectionId potentially clashing after removing a NetConnection

Deprecated:

  • Renamed GraphConnection's ConnectionId to ConnectionOrderNum. This is to prevent users from thinking the ID persists across the lifetime of the object. It is only unique during a single tick of the RepGraph and will change during a session as clients join and disconnect.

  • FActorRepListRefView::ResetToNull is deprecated and has been renamed to TearDown.

  • Deprecated the FActorRepListRawView struct in favor of the new FActorRepListConstView, which uses a cleaner interface to the allowed operations when parsing a gathered list.

  • Updated DependantActor lists to use a TArray instead of a FActorRepListRefView which reduces the number of allocated lists in the list pool.

  • Updated FActorRepListRefView to use TArrays to store its replication list instead of FActorRepLists which increases its overall performance by up to 10 times.

  • Deprecated IsValid and PrepareForWrite.

  • Deprecated Remove() in favor of RemoveFast and RemoveSlow.

  • Deprecated the PreAllocateRepLists function.

Socket Subsystem

New:

  • Added a warning to BSDSockets for when the destination protocol does not match protocol.

  • Added a warning to FUdpSocketReceiver when MaxReadBufferSize limit is reached.

Niagara

  • Added new Asset type "Niagara Parameter Definitions." The Niagara Parameter Definitions Asset allows defining a set of parameters, and those definitions are shared with all Niagara Scripts, Emitters and Systems in the project. The intended use for Niagara Parameter Definitions is to predefine a name, type and description for parameters used in Scripts, Emitters and Systems, and automatically synchronize changes to the parameter definition's name, default value, and description with all parameters it is linked to.

    • Menus to add parameters in Niagara Scripts, Emitters, and Systems are now populated by all Parameter Definitions in the project.

    • Parameters that share the same Namespace, Name and Type with a Parameter Definition are now linked to the Parameter Definition. The description, default value and name of the Parameter Definition are synchronized to all Parameters it is linked with.

    • Parameters have a new default value mode "Definition". Parameters that are linked to a Parameter Definition can choose "Definition" as the default value mode. This automatically copies the Default Value Mode and Default Value of the linked Parameter Definition to the parameter.

    • Parameters created before a Parameter Definition but which share the same Namespace, Name and Type with the Parameter Definition will become linked to the Parameter Definition. The Parameter's description will be overwritten with the description of the linked Parameter Definition. If the Parameter default value is different from the default value of the linked Parameter Definition, the Parameter retains its default value; otherwise, the Parameter has its default value mode set to Definition, and its default value will be overwritten with that of the linked Parameter Definition.

  • Users can now handle a buildup of render ticks inside the batcher in a user-selectable way. Use "fx.Niagara.Batcher.TickFlush.Mode" to select the mode (Do Nothing, Process, Kill). Use "fx.Niagara.Batcher.TickFlush.MaxQueuedFrames" to decide how many frames before you need to flush.

  • Added a new Select node that can use an Index type for its selector pin (bool, integer, enum). This is used to select one or more values at runtime, based on the input of the selector pin.

  • Previously established output types in the Select and Static Switch nodes can now be altered by using the "Pin Type Selector" next to its respective output pins.

  • A wildcard pin type in the Select node now allows changes to the existing pin types using drag-and-drop.

  • Added to Mesh Arrays:

    • Added the ability to choose multiple Static Mesh resources for the Mesh Renderer (selectable via Particles.MeshIndex).

    • Added "Mesh Flipbook" feature to fill the array with a sequence of Static Mesh assets.

    • Added a Mesh Renderer Info data interface, to enable systems to query info about their mesh renderers (such as the number of meshes selected and the bounds of each).

  • New menus and features have been added to the Niagara Editor. This includes options for better filtering, as well as a "Suggested" section in the modules, dynamic input, and Script action menus that will list often used actions at the top. Scripts and Modules can be marked as "Suggested" in the metadata.

  • Exposed Collision Material Surface ID on Niagara's CPU Collision Module.

  • Added a random seed offset to Niagara System instances, to allow for variance between duplicated deterministic systems (this must be set on either the component or from Blueprint before activating the system when spawning).

  • Curves can now be exposed to material bindings.

  • The Select and Static Switch nodes driven by an enum will now automatically refresh when the enum is changed. This excludes Static Switch nodes created before this release.

  • Render target Data Interfaces can now be an iteration source. You can not read from the render target, as they do not handle flipping buffers correctly, so they are considered write-only.

  • You can use a Define to control partial write code generation; this enables you to keep the same functions for reading in, making it compatible with CustomHLSL. It also means Niagara doesn't rely on the compiler to strip out the bindings for input values, which has been unreliable on some platforms.

  • Added "Source Mode" to the Skeletal and Static Mesh Data Interfaces, so users can more explicitly identify where the source mesh should come from.

  • Added support for tooltips on Data Interface function inputs and outputs.

  • Niagara now supports configurable playback speeds in its editor settings.

    • New shortcut: S key isolates all currently selected Emitters.

    • New shortcut: D key disables all currently selected Emitters.

  • Added options to control how many bits we use to store probability/alias buffers for uniform sampling. The default is set to 24 bits, triangle 8 bits probability, allowing for 16.7 million triangles.

  • For Niagara 2D gas fluids, added offset to the Advect Scalar Module, to allow for the parent velocity to be used without it integrating into the sim's local velocity grid.

  • Added Niagara Texture 2D Array Data Interface.

  • If a Static Switch is switching on an enum that isn't registered yet, it now can be registered as a Niagara-wide enum using the new context option.

  • Added the "Set Fixed Bounds (System)" command in the "Bounds" section of the toolbar. Previous command for Emitters is now only available if any Emitter is selected (in a System); it is always available when in an Emitter Asset.

  • Added a new Waveform Module and Dynamic Input which can be used to generate and combine many different waveforms, including: triangle, square, sawtooth, trigonometric functions and multiple spline variants.

  • In Niagara 2D Fluid, added a world space noise option to the turbulence field module (the default is "Off").

  • Added an option to the Light Renderer to scale light brightness by color alpha.

  • Added support for overriding textures used with UNiagaraDataInterface2DArrayTexture.

  • Added "Renderer Visibility" to the Component Renderer, and fixed a bug where components would be deactivated but not set to invisible when a particle dies.

  • Added the ability to collide with custom depth in the Collision Query Data Interface.

  • Grid3D Updates: Added a preview.

  • New: Grid3D Updates: Users can now expose user parameter/render target binding to materials.

  • New: Grid3D Updates: Added an override for material/resolution selection.

  • New: Grid3D Updates: Added Details so users can display Attribute names (when hooked up).

  • Added mip map generation options to Niagara Render Target 2D.

  • Added a variable binding for the Pivot Offset of Niagara sprites.

  • Added an Inherit Source Movement module which emulates the Cascade Source Movement module.

  • Added "Default Exponent" (value to use when a variable is not bound) and "Renderer Visibility" to the Niagara Light Renderer.

  • Added Distance Culling and Renderer Visibility to the Niagara Sprite Renderer.

  • Added GPU support for GetFilteredSocketTransform.

  • Added symbolic search capability (+,-,*,/) in the search filter for common math dynamic inputs such as add, divide, and some boolean operations.

  • Added Show Flag for Niagara.

  • Improved Niagara's indirect dispatch argument buffer allocation scheme (the buffer that is used for GPU systems and for culling and sorting meshes and sprites).

  • Niagara now allows Particle Reader to be used as an iteration source.

  • Added "Pivot Offset" to the Niagara Mesh Renderer.

  • Exposed CustomDepth to the gbuffer interface.

  • Added support for the 2D Array Render Target.

  • New Static Switch nodes that switch on an enum will now automatically refresh upon load, or if it's open. Old Static Switch nodes will not do that, they do not break existing usages. CVar "Niagara.StaticSwitch.EnableAutoRefreshOldStaticSwitches" has been introduced to enable refreshes on old static switches as well.

  • New: Enum context options for Select and Static Switch when user performs a right-click on these nodes.

  • Added the ability to right-click and select "Auto-fill all options" on various array properties in Niagara (such as "Filtered Bones" on a Skeletal Mesh Data Interface).

  • Added unused attribute trimming for Niagara particle scripts. \ This improves the existing heuristics for figuring out which particle attributes are not needed (either by a renderer or an external reader), and adjusts the generated code so that the attributes can be stripped. This results in a ~25% reduction in particle payload for typical scripts.

  • Made updates to static VectorField. 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 DI for sampling. For supported platforms, it reduces memory cost (from 16 bpp to 6 bpp) and improves sampling time (2x speedup).

  • Refactored significance handling. This now allows for various metrics such as Age and Distance. Projects can also define their own game-aware significance calculations. Spawn Only EffectTypes also have the option to consider the significance of Systems when spawning.

  • New: Systems with Dynamic Bounds can now make use of visibility culling.

  • New: Exposed fx.Niagara.Quality level as a System constant.

  • New: Added a new Data Interface that allows checking of the current platform. As an example, this can drive specific behavior that only works on a certain platform.

  • Optimized FNiagaraScalabilityManager for cases where there are large numbers of registered components. It now tries to meter out updates to scalability state over a number of frames, limited by a new cvar (fx.ScalabilityMaxUpdatesPerFrame) and based on the frequency of updates. It cleans up how significance is processed, so that it is done only for necessary components. It updates how we consider the component state to be dirty, which limits how often Niagara tries to unnecessarily activate/deactivate components.

  • Added a new instance count culling option, to cull for each System as well as for each effect type.

  • Updated the GridCollection2D and GridCollection3D node APIs to be more descriptive and consistent. Older paths still operate, but they are suppressed from creation.

  • Added a new experimental feature to Niagara Skeletal Mesh Data Interface, for generating and querying a quadtree mapping UV to the vertex index. A quadtree is created on demand for a given Skeletal Mesh when referenced by the Data Interface.

  • Prevented byte code generation by particle scripts for GPU emitters; this reduces runtime memory costs and compile time costs, and eliminates some edge cases where shader warnings can be generated.

  • Implemented RibbonRender DistanceFromStart to allow for correct train track-style UV tiling with minimal effort; spawn modules are being updated to set this by default.

  • Added a new module to the Skeletal Mesh Data Interface supporting adjacency information. A buffer containing up to 8 adjacent triangle indices for each vertex is created at runtime. Currently two methods are supported (on GPU only): one for retrieving an indexed element from the buffer, and one for finding the first adjacent triangle.

  • Niagara now supports reading barycentric coordinates and adjacency information. This allows users to traverse Skeletal Meshes using those values.

  • Implemented tessellation across ribbon width, this helps reduce stair stepping in UVs.

  • New: Implemented multiplane/sheet rendering for ribbons, similar to Cascades "Sheets".

  • New: Implemented tube ribbons with 3-16 sides, and custom shaped ribbons with 3-16 sides.

  • NiagaraPlatformSet now has the ability to select platforms based on arbitrary Float, Int or Bool CVars.

  • Added the ability for the Spline Data Interface to be driven by a User object variable.

  • Changed "Simulation is invalid..." message to "No active preview..." to better reflect the meaning of the message, which is that you don't have a preview simulation running, not that there's something actually wrong with the emitter.

  • The collision module now supports post-solve collisions.

  • Added a new mode "Fail if not previously set" to defaults; it makes Niagara generate a compile error if the variable hasn't been set previously. This is optional within graphs, but is set any time a variable is linked in the stack. This is only for new changes, as old Assets in the field "work" but will likely be using these defaults unintentionally.

  • Implemented Emitter mode rendering for the Mesh Renderer. Implemented material parameter binding for both the Mesh Renderer and the Ribbon Renderer.

  • Added an optional property to NiagaraParameterCollections to allow a MaterialParameterCollection to drive values in Niagara. Parameters are automatically created when an MPC is assigned, and the backing parameter store is updated as changes are made to the MPC.

  • Niagara Outliner tab in the Niagara debugger now allows gathering and display of information about the current state of Niagara systems on the connected debugger client.

  • Fixed an issue with disabling simulation stages; they will no longer generate a shader for the stage.

  • Updated debug draw UI, so it only shows the option to turn it on or off if the module contains debug switches.

  • The Collision Module now returns the material type index when CPU ray casts are used.

  • Added the ability to output compiler metadata, called Compiler Output Tags. This will allow users to get named metadata, like MaxLifetime or bIsImmortal, out of a complicated particle System.

  • Added a category field for Niagara Emitters, to specify a sorting category when adding an Emitter using the New Asset wizard or the asset picker.

  • Niagara Outliner can now display performance information about Systems on the connected client.

  • Moved Niagara's SkeletalMess Generated Data to a more generic implementation so it can be used by other Systems.

  • Niagara now contains all of Pivot Painter's functions, except the full foliage simulator.

  • Tweaked the HLSL shader generation for GPU particle simulations to reduce the burden on the HLSL compiler. Added preprocessor directives to limit the scope of FSimulationContext for simulations using shader stages. Reduced compilation time by 20x (for serial compilation, about 10x for regular usage in the editor).

  • New features have been added for timed Niagara effect notify.

    • GetSpawnedEffect returns the system spawned for a given mesh component.

    • GetNotifyProgress returns a 0-1 progress value between the notify's beginning and end for a given mesh component.

  • Added a unified FX Budget. You can now track and budget Cascade and Niagara runtime costs together. Niagara has some new scalability features to act upon this, such as reducing cull distances and max instance counts when budget usage is high. Projects using the Significance Manager with Cascade or otherwise driving SetRequiredSignificance calls into Cascade can use the result of the FFXBudget function, GetWorstAdjustedUsage, to influence calculations. This function returns the worst current budget usage for GameThread, Concurrent Threads or Render Thread work. It also has some decay on the value to help prevent fast oscillations that could cause FX to turn off/on repeatedly.

CL: 16199909 (Niagara)

Bug Fix: Fixed a bug where linked module outputs could be renamed to a wrong namespace.

CL: 16223604 (Niagara)

Bug Fix: Dialogs and graph pins now correctly show tooltips for intrinsic Niagara parameters.

CL: 16355938 (Niagara)

Bug Fix: Fixed a crash caused by checking compile results when the rendering thread is suspended.

CL: 16369575 (Niagara)

New: You don't need to create full copies of scripts and graphs when compiling. You can reuse objects instead, using an object pool that increases compile performance.

CL: 16386669 (Niagara)

Bug Fix: Fixed a bug where the Parameters panel would show all attributes and not filter by Static Switch selection.

CL: 16389995 (Niagara)

Bug Fix: Fixed a bug where propagating a Static Switch would delete it from the Parameter panel.

CL: 16400325 (Niagara)

Bug Fix: Fixed a bug where the Script.Usage and Script.Context Static Switches would generate an error if a new default value was defined behind one of its branches.

CL: 16410927 (Niagara)

Bug Fix: When duplicating a parameter in the module editor, metadata is also copied.

CL: 16518408 (Niagara)

Bug Fix: Fixed an issue where the Simulation Stage iteration source was showing unrelated items in the dropdown. Also fixed a problem with Simulation Stag iteration sources not updating on rename.

CL: 16531962 (Niagara)

Bug Fix: Fixed a bug where a deleted renderer's name remained in the Editor data.

CL: 16590157 (Niagara)

Bug Fix: Fixed a bug where tooltips for Map Get were not showing the parameter description from the metadata.

CL: 16590574 (Niagara)

Bug Fix: Fixed a bug where creating a duplicate parent created a redirector instead of a new Emitter Asset.

CL: 16590726 (Niagara)

Bug Fix: Fixed a bug where resetting a NPC instance caused a crash.

CL: 16605005 (Niagara)

Bug Fix: Fixed a bug where various engine constants were not displayed. Also improved sorting in the "add" menu.

CL: 16605005 (Niagara)

Bug Fix: Fixed a bug where various engine constants were not displayed. Also improved sorting in the "add" menu.

  • Updated Niagara sprites and meshes so they provide precise motion vectors for motion blur and temporal anti-aliasing by default (as opposed to the prior linear motion approximation).

  • A project setting was added to the Niagara project settings (Default Motion Vector Setting) to globally choose between the previous behavior and the more precise new behavior; the setting can also be overridden individually for each renderer.

  • Added Niagara GpuReadback Opengl optimization.

Crash Fix:

  • Fixed a potential crash in Niagara meshes when sections have materials with invalid indices.

  • Fixed a crash in Niagara sprites.

Bug Fix:

  • Fixed bugs occurring with Niagara Mesh Particle distance and frustum culling in Point, Spot, and Rect light shadow.

  • Fixed issues occurring with Niagara mesh shadows when the shadows are frustum culled, or culled using VisibilityTag.

  • Fixed crashes related to Static Mesh Data Interfaces being assigned a mesh that was marked Pending Kill.

  • Fix a crash that could occur when cooked out Niagara Emitters reset on some platforms.

  • Fixed crashes that could occur in the Niagara Mesh Renderer when reloading the Static Mesh Asset, and then changing the mesh.

  • Fixed bugs in Niagara occurring with Instanced Stereo for VR.

  • Fixed an issue in Niagara Blueprint functions caused by passing None in for various objects.

  • Exposed the Position for Point Attraction as an Input, but defaulting to Particles.Position.

  • Fixed an issue causing incorrect skeleton calculation when a master pose is used on CPU.

  • Fixed crashes that occurred when re-importing a static mesh that was being used by a Mesh Renderer.

  • Fixed frame-behind issues with the Niagara Component Renderer.

  • Fixed Z-axis sampling for Niagara curl baked fields.

  • Added copy-paste support for comments in the Niagara Overview graph. Emitter node positioning has been updated to be consistent with comment nodes when pasted, and will be pasted at the cursor location.

  • Fixed an issue occurring when trying to sample a Skeletal Mesh that has no valid LOD data streamed in.

  • Added the memory used by the 3D Neighbor Grid Data Interface to Niagara's GPU memory stats.

  • Fixed a bug where occlusion queries did not take perspective into account.

  • Dynamic Parameters beyond Cascade's range now return the material default value rather than the same value for all inputs.

  • Fixed a bug with culling/visibility shader for GPU emitters, where it would attempt to cull dead particles.

  • Fix a tear down/GC issue where the FFXSystem would be destroyed before the particle components that reference it.

  • Fixed a bug causing crashes when setting nullptr Asset.

  • A bug was causing incorrect removal of instances from the SpawningDataSet when they were in the MainDataSet; this has been fixed.

  • Bug Fix: Fixed a potential race that occurred when removing from pending spawn.

  • Fixed bugs caused by Particle Read Data Interfaces referencing emitters that are excluded when cooking for the target.

  • Wait for all simulation to complete before performing tick group update, to avoid potentially accessing simulation data that is still running concurrently.

  • Fixed an issue causing a crash when applying vertex painting to a Static Mesh that was being used for a Mesh Renderer in an active Niagara Editor.

  • Fixed issues that occurred with GC and pooled components when debugging was not enabled. The objects were created with the wrong outer, allowing them to be garbage-collected while playing.

  • Bug Fix: Removed strong reference from pool debugging to avoid confusion between different build configs; originally this was causing the shipping config issue to be masked due to the strong reference.

  • Bug Fix: Fixed HandleTimelineScrubbed so it uses UFXSystemComponent to handle all FX component types (Mainly Cascade and Niagara).

  • Previously, it was possible to use rapid iteration parameters in a worker thread while also accessing on the game thread. This has been resolved.

  • Niagara can now handle SkeletalMesh changes on a SkeletalMeshComponent when more than one Niagara System is referencing them.

  • Made RandomTriIndex more robust against missing or invalid data.

  • Ensured that pool prime does not occur inside PostLoad. It is not safe, as UStaticMesh does not ConditionalPostLoad the materials we need access to.

  • In certain cases, such as when there is no Asset set, a crash could occur. This has been resolved.

  • Fixed a crash that occurred when CalculateTickGroup is called from the SystemSimulation, as the prereqs were not updating.

  • Fixed a bug where local-space simple lights would render with a frame-old transform.

  • Fixed an issue where dump was not working with cooked out Emitters; modified the dump command so that we can perform a full dump of all Systems.

  • Fixed an issue with unmatched LODIndex between Register and Unregister. Also fixed potential nullptr access to SkelMesh.

  • Fixed an issue that could lead to transient namespace variables leaking between Emitters in a Niagara System.

  • Fixed the normals for Ribbon MultiPlane. The default is to flip normals on the standard two-sided render based on the view direction. An option has been added in renderer properties, to duplicate geometry with correct normals for opposite face and to re-enable backface culling for any material that doesn't behave correctly with the flipping normal. Updated test to show normals.

  • Optimized the Generated Code window in the NiagaraEditor.

  • Fixed a crash in the Scalability Manager.

  • Fixed an issue with dynamic bounds calculations for Niagara components with negative coordinates.

  • Fixed an issue where Niagara renderers were trying to update while their dependent objects (System/Emitter/Script) hadn't finished loading (RF_NeedsPostLoad). Since PostDuplicate is called before PostLoad, we need to defer any work on the renderers till after PostLoad. This existing work is handled by the System on load.

  • Fixed a problem where SpriteRenderer ParticleAlignment and ParticleFacing parameters were not respecting the LocalSpace setting on Emitters, and were defaulting to Worldspace. Regression from prior behavior.

  • Fixed issues with Niagara's compute shader generation.

    • Moved some string properties to Editor-only.

    • Now it skips deferred deletion of scripts unless they actually have cached shaders.

    • Moved FNiagaraShaderProcessorTickable to an FTickableGameObject so that compute shaders will be properly handled in -game situations.

  • Fixed an issue for a non-determinism cook with Niagara Renderer properties.

  • GPU Simulations were continually spawning the previous contents of their SpawnInfo struct if they became inactive. This has been fixed.

  • Fixed VectorVM assembly debug output.

  • Fixed an issue where device profile preview would not set correctly, because its device profile had not been loaded from its platform INI file.

  • Bug Fix: Fixed an issue where a Niagara-specific override console command would override the DP but would not set the fx.Niagara.QualityLevel cvar.

  • Bug Fix: Fixed an issue where after setting a DP preview, you could no longer properly use engine scalability.

  • Fixed a problem with the Niagara Matrix Multiplication node; made it actually a mul() rather than per-component scaling.

  • Fixed an issue causing a race condition in processing Niagara shaders. Now they are only processed when they have been released from the FShaderCompilingManager. BReleased has been added to the job, which is flipped when the job has actually been fully processed by the compiling manager.

  • Fixed an issue where internally complete Emitters would still render their final frame's data.

  • Fixed an issue for pooled Niagara components; components marked hidden in game would remain hidden when re-used from the pool.

  • Fixed a crash that happened when passing large text blobs into Niagara scratch pad names. Limited names to 256 characters.

  • There was a problem with Niagara VM bytecode compilation where self assignments had rvalues replaced in all expressions: A = A + B; OutputFloat(A); This has now been fixed.

  • Prevented some Niagara logspam in server builds.

  • Fixed an issue that could cause an incorrect component tick state for Niagara components.

  • Fixed uninitialized struct values for the Niagara plugin.

  • Fixed the initial bounds on fixed bounds systems.

  • Fixed an issue that could lead to incorrectly culled effects, due to the LastRenderTime not being reset early enough in Activate.

  • Fixed an issue where Ribbon Rendering with 2-3 particles was causing invalid UVs; these were either flipped or zeroed unless EdgeMode was set to Locked, due to same-age particles. Updated several Ribbon tests based on UV fixes with same-age particles, like beams, to show fixed UVs now. Updated some naming/descriptions, and the edit conditions of Ribbon UV Properties, to better reflect meaning and show what affects what.

  • Fixed a crash that occurred when you changed the size of a user-provided RenderTarget2D.

  • Made several Niagara shader compilation logging improvements.

    • Downgraded the importance of some of the logging.

    • Added system names to VectorVM logs so that they are more actionable.

    • Added NiagaraTrace channel.

  • Fixed a crash caused by a race condition in the unbinding of the GPUExecContext combined parameter store.

  • Fixed graph convert node pins so they properly dirty the graph.

  • Fixed a crash that occurred when spawn event handlers kill particles.

  • Ensured we don't try to resolve Niagara NPC references during PostLoad.

  • Fixed an issue with non-deterministic cooking with the Texture Asset backing Niagara curves. Added UTexture::SetDeterministicLightingGuid to be used for assets generated during cooking.

  • Fixed up UNiagaraComponent::GetDataInterface so that it just uses the existing implementation for the user parameter Data Interface (rather than the very specialized implementation that would only support the first GPU emitter).

  • Fixed ribbon indexing issues with multi-segment ribbons and initialization order of FNiagaraRibbonShapeCustomVertex.

  • Fixed an issue with resetting GPU Systems in some situations.

  • Fixed a bug with Niagara VM bytecode compilation for swizzled mask on LHS: MyVec3.yz = float2(1.0f, 2.0f);.

  • Fixed Niagara VM bytecode compilation for preserving original swizzle mask during self-assignments.

  • Ensured that NPC are fully loaded before we access them which was causing an issue if a compile was triggered from the PostLoad of a script/emitter/system.

  • Fixed crashes and bugs with Niagara Data Interfaces that must rebind their VM functions after a reinit.

  • DDC was getting polluted with NiagaraScript results when rapidly generating compile requests. This fix ensures that the data cached is associated with the source request rather than the current CompileId of the UNiagaraScript.

  • Fixed FNiagaraDataInterfaceArrayBool to use a Buffer<uint> on the GPU.

  • Fixed a problem for some cases in the Editor where CVars changed at runtime weren't applied correctly. Also created a threadsafety fix for CVar changed callback handles.

  • Fixed an issue causing Niagara crashes with -noshadercompile.

  • Fixed Niagara's Pow node to clamp the base to zero; it now matches materials and prevents divergent behavior between platforms.

  • Fixed a use-after-free bug within Cascade GPU simulations.

Deprecated:

  • Deprecated If node, Usage Selector node, and Sim Target node in favor of the new Select node and the old Static Switch node. Deprecated nodes will continue working, but are no longer offered in the action menu.

Online

New:

  • Updated libstrophe for android with openssl-1.1.1x support

  • OpenSSL has been upgraded to openssl-1.1.1k for Windows, macOS, iOS, and Android. All older versions of openssl for the Windows platform have been deprecated and removed from the source tree.

  • Added an ini-based setup for TestLeaderboardInterface, allowing ShooterGame to test its own leaderboard keys instead of using test keys.

  • Re-enabled Steam when running Single Process Play-In Editor, but disabled Steam Sockets. This will keep the connectivity path using local TCP/IP.

  • Pixel Streaming CVars can now be set using command line arguments. See documentation for specific arguments.

  • Multiple Pixel Streaming improvements such as parameterisation of many encoder settings, AMF encoder, and better pixel streaming stats.

  • Added indexed cache storage functionality for Switch Indexed cache storage support.

  • To use Indexed Cache, set [/Script/SwitchRuntimeSettings.SwitchRuntimeSettings] CacheStorageIndexMax to the max index of cache storage that will be used.

  • Fixed a clang issue with LPTSTR conversion.

  • Changed LogHotfixManager default verbosity from Verbose to Display. Significant log lines were updated to Log.

  • Engine bundled WebRTC upgraded to Release M84 for Windows and Linux. Engine Opus version upgraded to 1.3.1-12 on Windows and Linux to match WebRTC. Developers using the old bundled WebRTC directly, instead of through the Pixel Streaming plugin, will need to manually link the old WebRTC or upgrade their custom implementations to utilize the new WEBRTC library.

  • Moved Party Beacon crossplay restriction definitions to ini.

  • Added additional platform information to the Social Platform Description in order to to group similar platforms.

  • Improved functionality of Pixel Streaming web player, including more statistics data.

  • Added a CVar to allow guest accounts on GDK account picker. To use it, add [OnlineSubsystemGDK] bAllowGuestLogin=true

  • Added a configuration option to perform or skip the XBox Live Gold check. Defaults to XBox Live Gold account required.

  • Promoted LogHotfixManager lines to "Log" due to community feedback that they are commonly used as a reference.

  • Added Exec function to SocialToolkit, SocialManager now attempts to call Exec on all its SocialToolkit instances.

  • Quality of Service (QoS). Quality of Service pings are now performed using non-blocking sockets on a single async task thread. Spawns one socket per protocol type such as IPv4 and IPv6, based on the list of target host addresses supplied.

  • Promoted IsFriendRestricted from Protected to Public to allow for quick usage by Game implementations.

  • Added configuration options to enable or disable EULA and waiting room checks on PC/Mac.

  • The Engine Framebuffer Pixel now formats automatically.

  • Commandlets are now configured to function correctly if rendering is enabled or when passing -AllowCommandletRendering.

  • Made SocialUser's class method ValidateJoinTarget virtual, in order for it to be overridden at the game level.

  • Adjusted MarkupTag code to no longer use TypeName.

  • Added virtual "GetMarkupTagForPlatform" function to SocialUser class, so that games can override the icon or platform.

Crash Fix:

  • OnPartyJoined delegate listener will now clear on user logout. This fixes a crash observed when the local player changes.

  • Fixed an ensureMsgf crash that occurs when an Interaction Type is not recognized.

Bug Fix:

  • Audio over Pixel Streaming is now of higher quality and correctly plays in stereo.

  • Fixed platform specific issues in Party Platform Session Monitor.

  • Improved parsing of RTC ice server configuration for Pixel Streaming

  • Fixed instances of UserPlatform being constructed with an empty string which triggers an ensure.

  • Secondary local players can no longer be promoted by primary players.

  • Fixed connecting to Pixel Streaming session from browsers running on Mac or iOS.

  • OnApplicationActivationChanged now correctly fires on application reactivation

  • Changed GetCachedAchievements in Sony interfaces so they return an array of readable values.

  • SocialManager no longer marks itself as PendingKill on shutdown. Instead it sets a "bShutdownPending" bool.

  • Added ABORT_DURING_SHUTDOWN macro that checks the bShutdownPending bool, then displays a log message, and immediately returns. This macro is used in all SocialManager callbacks that might fire after a Shutdown occurs.

Deprecated:

  • The VivoxVoiceChat plugin is deprecated as of Unreal Engine 4.27, and is scheduled for removal in Unreal Engine 5.0.

  • Deprecated old versions of WebRTC that were not used by any of the projects.

  • Added new version of ProcessRequest (and derivative methods) that returns void instead of bool. Deprecated the previous versions for 4.27.

Removed:

  • Removed STUN/TURN server binary as it is no longer maintained.

HTTP

New:

  • Added configurable time limits for the flushing active HTTP requests when shut down or suspended. This aids compliance with platform requirements for shutdown and suspend times.

  • The trusted root certificate bundle used by the SSL module has been updated.

  • Added a new "Optional Object" JSON Serialization Macro.

  • HTTP Request Interface. The IHttpRequest interface has been modified so that a timeout can be specified on a per-request basis.

Bug Fix:

  • Resolved a non-thread safe execution pattern when handling request progress updates in AppleHTTP.

  • ProcessRequest and CancelRequest completion callbacks always fire on the main thread for all HTTP implementations.

  • Added ability to cancel all requests in progress when suspending.

Online Subsystem

New:

  • OnlinePurchaseInterface FinalizePurchase method now takes ReceiptInfo as an optional parameter.

  • Included party data in QueryPartyJoinability response.

  • Implemented GetSocialPlatformName method in the OnlineSubsystem Interface for use in labeling a platform's friend list.

  • Added a missing enum "VoiceChatResults" to the LexToString function in the VoiceChatManage class.

  • Modified the User Search to use the new "withUserGuid" endpoint.

Bug Fix:

  • Fixed OnlineEncryptedAppTicketInterfaceSteam using a unicast delegate where a multicast delegate was intended.

  • FUniqueNetId Thread Safety: It is now possible to use ESPMode's class method ThreadSafe with FUniqueNetId shared pointers and references by opening CoreUObject.Build.cs and changing the UNIQUENETID_ESPMODE public definition from ESPMode::Fast to ESPMode::ThreadSafe, then recompiling. The FUniqueNetIdPtr/FUniqueNetIdRef typedefs in CoreOnlineFwd.h are provided to help migration. For example, you can replace TSharedPtr<FUniqueNetId> with FUniqueNetIdPtr to cause it to use the appropriate ESPMode.

Deprecated:

  • Deprecated Online Subsystem Twitch. The web API has not been kept up to date. This will be removed in a future engine release.

OpenSSL

  • Deprecated old versions of OpenSSL for all platforms.

WebSockets

Bug Fix:

  • LWS Web Socket connections will now use a dynamic string buffer size when dealing with UrlPaths.

XMPP

Deprecated:

  • XMPP Jingle has been deprecated, licensees must move over to using the updated XMPP Libstrophe system for their message handling.

Physics

New:

  • Added Element Index to the Blueprint Break and Make hit result functions.

  • Added PopFutureOutputData_External to SimCallbackObject to get all physics thread outputs, including outputs past the current time.

Bug Fix:

  • Fixed Sweep_Geom to calculate the correct transform for queried shapes when querying from a component with multiple shapes like a skeletal mesh component.

  • Corrected SyncBodies logic for scenes with multiple custom Chaos solvers to correctly sync back results to components.

Clothing

New:

  • Chaos Cloth - Added fictitious centrifugal forces to compensate for when the Velocity Scale is reduced.

  • Chaos Cloth - Added a new Continuous Collision Detection mode. This is more accurate than sub-stepping, but can be more taxing on performance.

Improvement:

  • Added ISPC optimizations.

  • Improvement: Removed inactive LOD constraint rules from the simulation.

  • Re-enabled geodesic long range attachment and deprecated bUseGeodesicDistance.

Bug Fix:

  • Chaos Cloth - Fixed a crash caused by constraint map re-allocations.

  • PhysX Cloth - Fixed a crash when applying a higher definition LOD 1 cloth than the one used in LOD 0.

  • Cloth Painter - Reduced the long pause / delay before being able to interactively preview the simulation (while pressing on the H key) while in the cloth paint editor mode.

  • Chaos Cloth - Fixed an issue causing a bad simulation impulse at startup.

  • Chaos Cloth - Fixed issues that were occurring when a non unit scale was used on the owner component.

  • Chaos Cloth - Removed collision tests from collision particles that are not in the active LOD.

  • Cloth Painter - Fixed lag that was occurring after each paint stroke.

  • Chaos Cloth - Corrected an issue that occurred in cases where the simulation data was queried before the simulation's first step.

  • Chaos Cloth - Fixed an issue with the AnimDriveSpringStiffness parameter effect on the simulation that occurred when its value was changed in the Chaos Clothing Config UI.

  • Cloth - Added tapered capsules to the primitive lists to pass as external cloth collision sources.

  • Chaos Cloth - Fixed a crash in multi-cloth simulations caused by a race condition on the offset creation.

  • Chaos Cloth - Fixed a crash that occurred when a Skeletal Mesh asset with more than one LOD had only one cloth LOD.

  • Chaos Cloth - Fixed an overzealous collision LOD deactivation that was preventing external collision source updates.

  • Chaos Cloth - Fixed missing Animdrive stiffness and MaxDistancesMultiplier updates.

  • Chaos Cloth - Fixed a bad local space simulation impulse at simulation startup, that only became apparent with a lower than one Velocity Scale.

  • Cloth - Fixed an issue where sometimes the Undo function would reset the cloth LOD. \

Collision Detection

New:

Physics Asset Editor

Bug Fix:

  • Fixed simulation sometimes starting unexpectedly in the Physics Asset Editor when editing asset properties.

  • Keyboard navigation in the Physics Asset Editor skeleton tree view is now properly ignoring hidden elements.

  • The Physics Asset Editor 3D viewport and skeleton tree view are now properly synchronized when the selection changes in one or the other.

Rigid Bodies

  • Fixed the Rotation of Mass computation in all oriented implicit geometries to properly account for the rotation of the geometry axis compared to the Z axis.

Physics

Platforms

New:

  • Unreal Engine now ships with Dockerfiles and example code for official Docker container images.

  • The Steam SDK has been updated to 1.51.

  • Refactored Platform TextureFormat classes to be subclasses from a new FChildTextureFormat class that handles compressing with other modules, and then runs a post-process on it.

  • New: Pulled GetPixelFormatForImage out into a separate function in ITextureFormat, so that child formats can inherit a parent format that generates without needing to compress a test texture.

Bug Fix:

  • Added the function UserHomeDir to FGenericPlatformProcess, so that TestPAL could be updated to test UserHomeDir on Linux without breaking other platforms.

All GDK

New:

  • For GDK Pass-type entitlements, acquiredDate is appended to the receipt ID format, so that your game service can tell separate purchases apart. If your game services parse receipt IDs, or you have already stored receipt IDs in your game services, please consider migrating to this new format.

Bug Fix:

  • Fixed a potential block that occurred when checking account privileges.

  • Stopped the creation of search handles for sessions that aren't meant to be searchable.

  • Fixed a thread safety issue that could arise when the user was querying consumables on the platform store.

  • Fixed a crash that occurred when the user joined a multiplayer session with verbose logging enabled.

  • Removed the memset of a shared pointer in FOnlineAsyncTaskGDKQueryAchievements.

  • Fixed an issue with AutoPIX not working on GDK.

  • Fixed a crash that occurred while toggling between constrained and running applications. Added thread safety when handling responses from multiple checks.

Linux

New:

  • Moved to LLVM 11.0.1

  • When dynamically loading libraries under a Unix platform, the engine now also checks the global path.

  • Android support added for Installed Builds on Linux.

  • Added support for returning the last measured CPU time on Windows and Linux platforms. UnixPlatformTime can now update the CPU time independently of the fixed 250ms threshold.

  • Forked Process - Added DEFAULT_FORK_PROCESS_MULTITHREAD definition thats sets the default multithread behavior of a forked process (the default is singlethread).

  • New: Forked Process - Added -DisablePostForkThreading cmdline option that disables MT if the default is true.

Bug Fix:

  • Time moving backwards has been changed to a warning over a fatal error. This allows that time to be clamped and provides an opportunity for the system to recover.

  • This fix ensures that our ClockSource is always initialized.

  • LinuxAArch64 is now allowed to build and package CrashReportClient.

Mac

New:

  • macOS Catalina and above now supports Apples Game Controller framework for connecting the latest console controllers.

Windows

Bug Fix:

  • Previously, when using more than one monitor and switching from Window mode to Fullscreen mode, if the window was partially outside the virtual screen one monitor switched to Fullscreen and the other monitor only showed a single frame of the game. This has now been fixed.

  • GetWorkArea on Windows now correctly supports Remote Desktop.

WinGDK

New:

  • Added support for D3D11 RHI.

Bug Fix:

  • Fixed an issue that occurred with Visual Studio project generation after installation of February GDK. This prevents the Visual Studio solution from failing to load due to a duplicated project item MGCCompile error if the UWP component is installed in Visual Studio.

Linux

Crash Fix:

  • Fixed a crash that happened when no HOME environment variable was set.

Rendering

New:

  • Ray traced ambient occlusion, shadows, reflections, GI and skydome passes use a new sampling sequence that converges faster and diffuses the visible error in screen space.

  • The path tracer now performs anti-aliasing with a multi-pixel filter kernel for improved quality. The width of the filter can be set in the PostProcessVolume settings. Settings such as TAA are automatically disabled while the path tracer is active.

  • Improved the support for using the path tracer with Movie Render Queue.

  • The path tracer supports per light show flags and can isolate direct vs. indirect lighting.

  • The path tracer now applies backface culling to camera rays to match raster modes.

  • Orthographic cameras are now supported by the path tracer.

  • Updated the Vulkan SDK to 1.2.162.0 from 1.2.148.2.

  • Added Scene Capture visibility flags.

  • MovieRenderPipeline and DLSS - Added support for the DLSS Plugin to MRQ and for the supporting UI to control quality settings.

  • Adding logging of the before and (attempted) after states to viewport resize failure logging.

  • Enabled RenderDoc in cooked builds.

  • Added support for PIX GPU captures on Windows with a new plugin.

  • Added an option to disable ray tracing for old drivers.

  • Adding logging of the GPU status when a query timeout is hit.

  • Hair passes and hair shaders shouldn't have any performance impact on runtime when the HairStrands plugin is disabled.

  • Implemented RAY_TRACING_PAYLOAD_FLAG_IGNORE_TRANSLUCENT.

  • Added bIgnoreTranslucentMaterials to TraceMaterialRay.

  • Added extra logging for CreateSwapChain failing with E_INVALIDARG.

  • Fixed hair transmittance applied on hair cards in forward rendering.

  • Movie Render Queue: Users can now set overscan to work in combination with EXR output.

  • Added a cvar to set the minimum Windows version to enable ray tracing in DX12.

  • Added adaptive voxel allocation to avoid overallocation, allowing for a large set of grooms casting shadow.

  • Added support for screen percentage in ray-tracing skylight.

  • Changed the hair cards sampler to use anisotropic sampling for better rendition.

  • Added Blueprint methods to create volume / array textures.

  • Added a project setting to enable / disable auto virtual texture import. The setting defaults to enabled to match existing functionality.

  • Updated the hash functions Rand3DPCG32 and Rand4DPCG32 to have higher quality and faster GPU runtime performance.

  • Moved the location of virtual texture feedback per frame. Previously, we sampled the same location for feedback each frame, now we jitter the location over the virtual texture feedback tile to ensure we touch each location over time.

  • Added new optional hair strands composition points (after the separate translucent pass, and before the translucent render after DOF). \

  • Added an option to cull objects by distance and solid angle behind the camera in ray tracing.

  • SortedIndices and SortedIndicesOffset in NiagaraMeshVertexFactory are now part of FNiagaraMeshUniformParameters instead of being separate resources. This is needed for ray tracing hit shaders, which should always be uniform buffers or loose parameters.

  • Added ray tracing support for per instance attributes such as color for Niagara meshes.

  • Refactored per-vertex attribute interpolation in ray tracing shaders to reduce register usage. Attributes are now interpolated explicitly inside the per-vertex loop. Removed a few variables that are no longer used.

  • All ray tracing shaders now explicitly share the global root signature. This allows separate pre-compilation of ray tracing pipeline collection objects containing only hit shaders.

  • Added support for AMD HitToken extension.

  • Added clear coat approximation to the experimental ray-traced reflection shader.

  • Added cvars to globally control ray tracing 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 cvars are intended for global easy overrides, allowing fine grained control over quality vs performance in games, without content changes. New cvars:

    • r.RayTracing.Shadows.Lights.Directional

    • r.RayTracing.Shadows.Lights.Point

    • r.RayTracing.Shadows.Lights.Spot

    • r.RayTracing.Shadows.Lights.Rect

  • Moved pixel coord into an explicit field of the ray-tracing payload. This grows the payload structure to 64 bytes and invalidates all ray-tracing shaders.

  • Added r.RayTracing.Shadows.AcceptFirstHit CVar that adds RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH to shadow rays, allowing the ray tracing process to terminate before the real closest hit point is found. This improves shadow ray tracing performance, but may theoretically result in worse shadow denoising quality.

  • Added various improvements for the experimental ray-traced reflection shader:

    • Implemented support for the reflection capture fallback.

    • Excluded unlit and hair pixels.

    • Now respects cvars for direct and indirect lighting.

  • Implemented a roughness threshold for skipping any-hit shader invocation in the experimental ray-traced reflection shader.

  • Implemented a roughness bias for experimental ray-traced reflection, controlled by r.RayTracing.Reflections.ExperimentalDeferred.SmoothBias (default = 0). 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.

  • Ray-tracing shader creation is now skipped when run-time ray-tracing support is compiled out. This replicates logic from FShaderCodeArchive::CreateShader in FShaderMapResource_InlineCode::CreateRHIShader.

  • Added the r.D3D12.DXR.MinimumDriverVersionAMD cvar to allow banning ray tracing on drivers that may be too old or have known issues. The default is 0, which allows any version.

  • Implemented an optional non-blocking ray-tracing PSO compilation mode, eliminating CPU time spikes at the cost of rendering some objects using a fallback shader (opaque black). \ The new cvar r.RayTracing.NonBlockingPipelineCreation can be used to opt-in to non-blocking mode (default=0, preserving previous PSO creation behavior). Non-blocking mode should only be used in the game where hitches are not acceptable. Any offline engine use cases, such as cinematic rendering, should use a default blocking mode to avoid any artifacts due to fallback shaders.

Improvement:

  • Improved the sampling pattern used by the path tracer to speedup convergence.

Crash Fix:

  • Corrected a crash with invalid ISM indices and ray tracing enabled.

  • Fixed a crash caused by a null pointer dereference in distance field generation while cooking assets.

  • Corrected a RHI Bypass crash caused by RHI Resources losing their reference counts before being used in a draw.

  • Fixed a Lightmap Density view mode crash when using tessellation.

  • Ensured that adaptive virtual textures allocation happens before any virtual texture flush. This fixed an intermittent crash bug when using adaptive virtual textures.

  • Fixed a crash when enabling r.RayTracing.ExcludeDecals because ray tracing instances were skipped but VisibleRayTracingMeshCommands had already been registered.

  • Fixed a crash with hair strands when running in split screen / VR due to VR not being supported yet.

  • Fixed a crash when deleting a groom asset while it is still being used.

  • Fixed a crash when ray tracing shadows is the only active ray tracing effect and r.raytracing.shadows is set to 0. While the "r.RayTracing.Shadow" cvar is thread safe, it is bound to the GRayTracingShadows variable, which is not. This could produce a scenario where the variable was still set to 1 when the cvar was already 0, and therefore the RenderRayTracingShadows function would be called when it should not have been.

  • Fixed a crash in SingleLayerWater when using the forward renderer.

  • Fixed a ray-tracing-related crash on startup when running on an old windows version or an old driver. The version checks must be done much earlier during initialization.

Bug Fix:

  • Fixed possible NaN values from UniformSampleDiskConcentric.

  • Corrected washed-out appearance in path traced images at high exposure values.

  • Fixed UI clamps of Path Tracing related scene settings.

  • The path tracer output is invalidated in more cases such as object deletion and setting changes.

  • Fixed the LockStructuredBuffer to work correctly with the OpenGL RHI thread.

  • Fixed a case where per-instance data size did not match a number of instances the Hierarchical Instanced StaticMesh Component was attempting to render.

  • Corrected a hair strands precision issue that occurred when a groom was attached to a skeletal mesh whose bounding box was too large.

  • Fixed the groom property override and reset on component. This allows a clearer view of what properties are overridden by a Groom asset compared to a Groom component.

  • Fixed forward lighting on hair strands rendering.

  • Fixed bad BC compression of the Runtime Virtual Texture mask channel.

  • Fixed a missing uniform buffer in custom depth passes.

  • Disabled occlusion meshes for primitives that only render to runtime virtual texture.

  • Fixed a D3D12 Race condition for ActiveGenerations having dequeue called concurrently in WaitForCompleteion and CleanupActiveGenerations, resulting in an incorrect double pop, causing an unrelated sync point to be dropped from processing (this fixed random meshes flickering, random GPU crashes / hangs, possibly fixed numerous texture corruption cases).

  • Copied strings being registered to FVisualizeTexture, because it can accept textures with dynamic string names allocated with FRDGBuilder::AllocObject, while GVisualizeTexture outlives the RDG builders.

  • Fixed an issue where pending barriers wouldn't always be submitted in DirectX12.

  • Enforced respect for the existing virtual texture setting on texture reimport. Previously a texture might change from a regular to a virtual texture simply because of a reimport, which is usually not desirable.

  • Configured the procedural mesh object to accept ray tracing updates.

  • Fixed virtual texture pages not being unmapped for virtual textures with a non-zero FirstMipToUse.

  • Fixed handling of null SRVs in RHI Validation.

  • The RHI command list is now flushed if we are using null RHI and are exiting the RHI just in case commands have been queued up.

  • Fixed the graphic corruption caused by streaming levels reloading in combination with the DisplayCluster module.

  • Format support is now checked before using display formats.

  • Fixed RTAO to work correctly when SSAO intensity is set to 0

  • Fixed a compilation warning for material referencing the hair attributes node.

  • Fixed RenderTarget validation.

  • World Origin shifting for Runtime Virtual Texture volumes is now supported.

  • Fixed an uninitialized texcoord value for LoadVertexFactoryInputForHGS in GeometryCacheVertexFactory.

  • Corrected a missing application of pre-shadow onto the hair strands shadow mask.

  • Added some checks in RHIGetAvailableResolutions around GetDisplayModeList returning DXGI_ERROR_NOT_FOUND.

  • Fixed disable section in ray tracing that was not working with cooked content.

  • Re-added missing SSR Visualization.

  • Fixed an issue where ray-traced reflections were not being accurately represented in multi-view (such as split-screen) when material sorting for ray tracing is enabled.

  • Fixed an issue with querying for local video memory in DX12.

  • Now correctly use anisotropic filtering instead of bilinear by default for runtime virtual textures.

  • Remapped virtual texture ancestor pages when doing an Evict. This fixed an issue where unmapped pages were still referenced in the page table leading to incorrect rendering for a few frames when the physical page was reallocated and written.

  • Fixed RHIReadSurfaceFloatData ignoring the mip / array index.

  • Fixed the resource size calculation for streaming virtual textures. The size should be based on the memory footprint, not the disk footprint. Note that any streamed data ends up in a fixed-size pool.

  • Corrected RenderDoc captures asserting when running with -onethread.

  • Fixed transforms of CPU Niagara meshes instances in ray tracing.

  • Fixed the IsRotationNormalized() assert in Niagara meshes with ray tracing enabled.

  • Fixed a possible deadlock in the ray-tracing PSO compilation tasks on machines with low CPU core counts. Ray-tracing PSO 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 run on other task threads.

  • Fixed DeprojectScreenToWorld inaccuracy when the camera is very far from the world origin (for example, painting clouds on earth from space when using the Volumetrics plugin).

  • Texture - Stopped logging an invalid data warning for DDC misses.

  • The stencil buffer is now cleared prior to the distortion accumulation pass to prevent unintended screen distortion.

  • Clamped the frame sync slack amount to not exceed one frame interval.

  • Fixed dynamic memory allocation every time FStaticMeshSceneProxy::GetLOD is called in development builds.

  • Fixed a potential use-after-free issue when RenderData is null, because the static mesh name did not live long enough.

  • Fixed the MeshBatch.SegmentIndex assignment for procedural ray tracing meshes.

  • Fixed a potential deadlock on shutdown in the FRHIFrameOffsetThread.

  • Corrected the handling of the mip tail in Texture2DArrays. FTexture2DArrayResource was not respecting the mip tail count, and CreateTexture was not correctly copying the bulk data.

  • Output pixel coordinates are now explicitly passed to ray-tracing hit shaders through payload instead of using DispatchRaysIndex to emulate SV_Position. This fixes dithering effects in ray-tracing shaders when ray sorting is used.

  • Fixed a race condition that occurred when initializing FormatVersionMap for FShaderCompileUtilities::DoWriteTasks.

  • A BitMask template function is now used to avoid bugs when creating masks where the number of bits requested equals the type bit size.

  • Added a fix to prevent the pre-loadscreen pumping of render thread ticks when RHI is suspended.

  • Fixed incorrect validation of the stencil plane in DSV surfaces. SRVs were always set up to validate against the depth plane, even for stencil SRVs, causing the validator to miss some barrier errors.

Deprecated:

  • Deprecated the PreviousLODLevel in UStaticMeshComponent. This member was added back in 2005 and all uses of the member have since been removed.

  • The groom length clip property is now deprecated and will be removed in a subsequent release.

  • Deprecated the unused function UStaticMeshComponent::UpdatePreCulledData

FX

New:

  • Open Color IO - Now when a user makes any external changes to the raw OCIO config file or any related files, UE4 will bring up a dialog prompting the user to reload the related config file.

    • These files will also be reloaded on UE4 start.

    • Added a button to reload the raw config file manually.

Bug Fix:

  • Fixed an issue with texture resources being deleted before being released.

Lighting

New:

  • The path tracer now implements multiple-importance sampling for all light and material types to improve sampling quality across the full range of light source sizes and roughness values.

  • The Source Length attribute on point and spot lights is now supported by the path tracer.

  • Skylight is now hidden from view in the path tracer unless real-time capture mode is active.

  • Textured Rect Lights are now supported in the path tracer.

  • The path tracer now approximates caustic light paths to reduce noise on scenes with glass and shiny metals by default.

  • Non-shadow casting lights, objects, and materials are now supported in the path tracer.

  • The path tracer now supports barn doors on Rect Lights.

  • The path tracer now supports the attenuation radius falloff controls.

  • Added MaxPathExposure to PostProcessVolume to clamp path tracer fireflies.

  • Added a setting for the path tracer to control if emissive materials affect other surfaces or not. This is enabled by default, but can be turned off to reduce noise if those surfaces are already represented by lights.

  • The Path Tracer now supports more than 256 lights. Performance will vary based on the amount of overlap in the attenuation radius.

  • Ray-traced shadows from Skylights now support the real-time capture mode.

  • Improved sampling quality for Skylights.

  • IES profiles are now supported in the path tracer.

  • An OpenImageDenoise-based plugin is now provided for the Path Tracer to reduce visible noise after the target sample count has been reached.

  • Added Sky Atmosphere functionality to recover the atmosphere transmittance from Blueprint (for a Directional Light).

  • The LMGPU panel is now forced to refresh on starting and stopping building to enforce CanEditChange settings.

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

  • Contact shadows now respects the "cast dynamic shadows" flag

  • Added ray tracing global illumination improvements to the final gather method.

  • 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 where the density of this volume is proportional to the shading model's opacity.

  • Subsurface falloff is now applied to contact shadows similar to the PCF path. This replaces the ad-hoc lightening of transmission shadows

  • Added a new flag for "cast contact shadows", which is stored in Gbuffer and respected (as much as possible) when applying contact shadows.

  • Added cvars to enable / disable ray-traced global illumination contribution by light type.

    • r.RayTracing.GlobalIllumination.Lights.DirectionalLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.PointLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.SpotLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.RectLight (default = 1)

Improvement:

  • Adjusted barn door visualization to match how lighting is computed from Rect Lights

Bug Fix:

  • Fixed shading of points inside the barn door volume of Rect Lights

  • Fixed path traced shadow artifacts on point lights with tiny radiuses.

  • Ray traced shadows from point lights are now more robust for small radiuses.

  • Fewer auxiliary passes are rendered when the path tracer is active, speeding up render times in complex scenes.

  • Fixed lighting inconsistency with point lights of 0 radius.

  • Materials tagged as sky are now skipped for indirect rays by the path tracer to prevent double-counting against the skylight. Ensure that any such materials have the "Is Sky" checkbox enabled.

  • PostProcessVolume and Skylight now respect the different editor Hidden flags (Outliner, DataLayers, Level).

  • Fixed DFAO artifacts when the global distance field is disabled.

  • Fixed multi-view rendering for the Path Tracer.

  • The Indirect Lighting Intensity factor is now respected when computing ray-tracing global illumination.

  • Made Distance Field Ambient Occlusion (DFAO) mutually exclusive with Ray Traced Ambient Occlusion (RTAO).

Materials

New:

  • File containing stable shader keys used for PSO cache is no longer text (scl.csv) but a binary (.shk)

  • Performance of "expand" step during the PSO cache collection has been greatly improved.

  • ShaderCompiler will print a warning if it detects that a shadermap is taking too long to compile.

  • ShaderCompiler will print out a warning when a shadermap is taking too long to compile and can crash the build if configured so (useful to prevent the builds from being stuck indefinitely).

  • For a chunked build, shader library is now also split into chunks, so the shader code is there for the assets that need it.

  • Mapping between the assets and shader code will now be copied to build's Metadata after the cook.

  • Added an in-memory cache of shader compile jobs, which reduces the amount of shaders needed to be compiled.

  • "Missing cached shadermap" string now includes more information about the asset, including the DDC key hash.

  • The path tracer now supports Subsurface and Subsurface Profile materials with a random walk approach.

  • The cloth shading model is now supported in the path tracer.

  • Improved sampling quality for the shading models supported by the path tracer.

  • All material blending modes are now supported in the path tracer. Translucent materials will produce (rough) refraction when a non-unit IOR is provided.

  • The Thin translucent shading model is now supported in the path tracer. This produces colored transparency by default, and when refraction is specified, will produce (rough) thin refraction.

  • An error is now thrown when a translucent material with 'Output Velocity' enabled (in which case it writes to depth buffer) contains material nodes reading from the depth buffer, as it cannot read from and write to the depth buffer at the same time.

  • Added an option to blend skylight cubemap on forward shaded elements. Disabled by default to preserve performance.

  • Added Supports Anisotropic Materials as a DDPI setting to disable anisotropic materials on a per-platform basis. By default, Supports Anisotropic Materials is false.

  • The "missing cached shadermap" string now includes more information about the asset, including the DDC key hash.

  • ShaderCompiler will now print out a warning when a shadermap is taking too long to compile and can crash the build if configured so (this is useful to prevent the builds from being stuck indefinitely).

  • Added an in-memory cache of shader compile jobs, which reduces the amount of shaders needed to be compiled.

  • Added a Blueprint API to query material statistics.

  • Removed the dedicated logic around compiling debug view mode shaders on demand, instead they are now included in the regular shader map, and now compiled on demand by the new system used for all shaders.

  • Added the ability for shaders to check whether the editor is being targeted in ShouldCompilePermutation.

    • This now excludes debug view mode shaders from non-editor paks. Previously, debug view mode shaders were never cooked into .pak files, so this should match previous behavior.

    • This means more compile jobs will now be submitted in-editor, since debug view mode shaders jobs are now submitted by default, but this shouldn't affect overall editor performance, since important shaders should still compile on demand at a higher priority.

  • Now, when a 'ForceLocal' shader compiler job is prepared, if an existing job for the same key has already been started on an XGE worker, a copy of the job is also kicked with the 'ForceLocal' priority.

  • Added on-demand shader compiling:

    • Rendering from potentially incomplete shader maps is now allowed, as long as all required shaders are present.

    • Attempts to access missing shaders will now kick compile jobs on demand.

    • Shader compiler interface was refactored to better handle lots of (potentially duplicated) jobs being submitted from multiple threads.

Bug Fix:

  • Relaxed PSO cache filtering logic as to prevent it from flagging valid cases (particularly with packed normals in vertex declaration).

  • Fixed GPU skin vertex factory using too many TEXCOORD semantics.

  • Fixed non-deterministic name sorting in memory images that resulted in spurious build differences.

  • Fixed non-determinism in material shader maps (reduces patch sizes).

  • Added a saturate node to the parallax bomb material function to prevent Max Steps potentially exploding, which can hang the GPU.

  • Added support for sampling Eye Adaptation in decal materials.

  • Fixed the generation of material texture scales, used for texture streaming.

  • Fixed debug texture scale rendering.

  • Debug view rendering now takes the blend mode from the original material, which fixes flickering translucent materials.

  • Information from FDebugViewModeInterface is now considered when deciding whether or not to compile specific debug view mode shaders.

  • Fixed inheriting static material parameters from one material instance to another.

  • Fixed various problems related to material layer parameters.

  • Added changes to clear coat shading model, addressing several UDN issues:

    • Corrected ClearCoat not properly modifying roughness for specular contribution of the under-coat when lighting with area lights.

    • Fixed an issue with bottom-normal not initializing all context dot-products needed by some lights.

    • Now prefers NoL for the geometry term to have closer parity with DefaultLit when ClearCoat=0.

    • Now respects GBuffer.Specular for reflection specular contribution when ClearCoat=0.

    • Reverted the application of NoL to the refracted specular lobe.

    • Now apply the Fresnel term to the non-refracted bottom coat to handle cases when ClearCoat<1.

  • Relaxed PSO cache filtering logic to prevent it from flagging valid cases (particularly with packed normals in vertex declaration).

  • Trying to compile/render debug view mode shaders is now skipped, if FMaterial::ShouldCache returns false for any of the required shader types. This fixes a failed check / crash which occurred when trying to compile landscape debug shaders, as landscape material resources have a complicated ShouldCache override.

  • Various fixes related to material layer inheritance

  • Ensured FMatExpressionPreview::ReleaseResource happens on the render thread.

  • Ensured the Lambda that assigns RenderingThreadPendingCompilerEnvironment holds a ref-count

Deprecated:

  • Volumetric Cloud prototype: Disconnected the material connection to the volumetric cloud .ush file that was causing cook errors on some platforms. Please use the Volumetric Cloud actor, or reconnect the pins in the prototype material.

Mobile Rendering

New:

  • Vulkan is now allowed on devices with Adreno5xx GPUs running Android 10 or a newer Android version.

  • Added an onscreen warning for mobile for a misused Sky Atmosphere. This will help to identify why Sky Atmosphere is missing on mobile platforms.

  • DepthPass FullOpaque is now added when SDF or AO are activated on mobile.

  • DepthPass is now decoupled from BasePass when SDF or AO are active.

  • Removed reprojection from basepixel, it is no longer needed as we are now using current frame depth.

  • The TC_ReflectionCapture setting is now hidden.

  • Added support for Panini projection on mobile.

  • FXAA mobile is now available, it can be enabled with r.DefaultFeature.AntiAliasing=1

  • Added a SSAO technique to the mobile forward renderer.

  • Added a config cache for a per-platform toggle of MobileNumDynamicPointLights.

  • Implemented DistanceField Shadow on mobile (no GL / Metal for now).

  • Added support for the ASTC decode mode on GL.

  • Updated Metal version to 2.1 for the iOS desktop renderer.

  • Enabled Manual Vertex Fetch on the iOS desktop renderer.

Bug Fix:

  • Reducing the number of supported dynamic point lights on mobile (r.MobileNumDynamicPointLights) will now correctly reduce the number of bound constant buffers.

  • Read-only buffers are now explicitly marked as read-only in Vulkan shaders to improve device compatibility.

  • Fixed incorrect usage of Vulkan sub-passes while MSAA is enabled.

  • Fixed a case where unbuilt static objects were not affected by indirect lighting on mobile.

  • Generated Vulkan shaders will no longer initialize variables to zero where it is not required.

  • Added a missing DBuffer Emissive blend mode remapping for a mobile decal rendering.

  • Fixed runtime mipmaps generation on mobile.

  • It is now possible to opt out Encoded TextureCube from the package if the platform doesn't need EncodedData.

  • Fixed modulated shadows so that the Modulated Shadow option is greyed out if the Light is not Stationary.

  • Made fixes to the VK_EXT_ASTC_decode_mode extension.

  • Corrected the VertexInterpolator material node so that it functions correctly when used in a mesh particle material.

  • Fixed the DisableFlipCopyGLES logic that inverted scene captures with Android GLES RHI.

  • Fixed the Vulkan CPU readback.

  • Fixed a thread deadlock between ray tracing and RHI.

  • The calling context is now passed down during defrag instead of accessing the global context.

Postprocessing

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.

Improvement:

  • The following improvements have been made to Cubemaps to introduce better prefiltering that limits excessive blur from occurring from the sources:

    • Cubemaps generated from .hdr long-lat sources were being strongly blurred in cases when mipmaps were enabled. This happened originally because such cubemaps were intended for use only with the "Ambient Cubemap" lighting feature, and their mips were generated using angular filtering. Skylights now have many mechanisms for visibility and shadowing, causing that feature to become obsolete. Angular mipmap filtering for long-lat textures is disabled, and therefore mipmaps for cubemaps no longer introduce significant blur.

    • Cubemaps generated from long-lat originally were low quality because their maximum size was set to 512 pixels by default. This limitation has been removed, and resolution of generated cubemaps is now determined by the size of the source long-lat texture.

    • Imported .hdr textures were incorrectly marked as sRGB, even though they were internally processed as textures using linear color space. Now, they should have sRGB mode automatically disabled when imported.

    • Cubemaps generated from long-lat sources can now use the texture adjustment settings of the Texture Editor.

Bug Fix:

  • Color Correct Regions - changed the Regions refresh method to better support environments other than Editor.

  • Regions that occupy less than 1 pixel on the screen are no longer rendered.

  • Fixed a color correction issue where shaders with Highlights assumed that max Scene color was capped at value 1.

Sequencer

New:

  • Implemented a Camera Shake upgrade tool to convert any legacy Matinee camera shake asset to a Sequence animation. Shakes with no CameraAnim asset are left untouched.

  • The Dummy Camera Manager now enables you to see the camera shake FX in the Camera Shake Previewer tool.

  • Added per-material support for each Object ID instead of per-component in Movie Pipeline. Additionally, per-material support now applies to Instanced Static Meshes, such as foliage. Individual materials are not supported on instanced static meshes.

  • The "Write all Samples" debug option moved from HighRes settings to the new Debug Setting in MoviePipeline.

  • New options in Control Rig enable ticking on all skeletal mesh components and warm up frames when baking an animation sequence.

  • FK Control Rigs are now masked in all sections when a Control is inactive.

  • Add an aspect ratio axis constraint accessor on the IMovieScenePlaybackClient.

  • Add a serial number on bound object caches.

  • The Level Sequence playback context picker now lets you pick actual level sequence actors instead of just worlds.

  • Add support for previewing camera shakes' post process settings to the camera shake previewer tool.

  • Added track pre-compilation parameters. This lets tracks alter the default metadata at compile time for all the entities that will be created by their sections.

  • Added the HasAnyData method to non-float channels

  • Debug visualization now supports more component types for the new core evaluation system.

  • The asset picker in the Camera Animation Track now remembers your toggled preferences for showing / hiding outdated assets.

  • Added a component flag to CopyToOutput for the new core evaluation system.

  • Added an API to get the list of sequence IDs in a hierarchy.

  • Added a utility function to find a related sequence instance in a given hierarchy.

  • The Entity Import metadata allows a property track to use a different property binding that can also be computed during compiling.

  • The Camera Cut Track can now blend out to a parent sequence's camera cut track. Blend times are affected by sub-sequences time dilation.

  • The Frame Time Range conversion helper now includes a frame number range.

  • You can now directly load an Animation Sequence into a Control Rig Section at the current time.

  • Added return value to OnSectionMoved to know when a moved section caused other sections to be added/removed.

  • The interrogation linker now has a utility function to get the animated value of a property.

  • Camera Shake track now uses the base shake class instead of the (deprecated) Matinee shake class.

  • Camera animation sequences can now be toggled between the camera component and cine-camera component.

  • Added network masks to sub-sections allowing for server and / or client only sub-sequences. This optimizes cinematic assets such as FX or audio when playing back on dedicated servers.

  • Sequencer can now be emulated as a client or a server using the Networking section of the settings menu in the Sequencer UI.

  • High performance ECS-based evaluations now support Byte, Enum, Integer, Vector, and Color properties. This includes the following:

    • Byte, Enum, Integer, Vector and Color properties all now run through the ECS supporting greater parallelism and efficiency.

    • Vectors and Colors both leverage metadata components for the number of vector channels and the color type, respectively.

    • Both types run their own derived property component type handler (FVectorHandler and FColorHandler) for initializing their metadata components.

    • Automatic overriding of PostProcessing properties is now supported. This means that users no longer need to manually override PP settings when animated through Sequencer for them to apply to the camera.

  • Entity systems can now run in multiple phases. Systems can check the currently executing phase by checking Linker > GetActiveRunner() > GetCurrentPhase().

  • Trait Classes for runtime metadata simplify the runtime process, and removes the need for using the PropertyType and OperationalType template parameters. This includes the following improvements:

    • Built-in property accessors are refactored to correctly utilize a trait's class.

    • The API now uses traits which supports the specification of metadata components for switching property types at runtime. This lays the foundation for also using Vector and Color property types.

    • Traits now specify the conversation layer from storage type to the UObject property application for custom accessors, fast PTR offsets, and track instance bindings. This includes the storage type and the required metadata components.

    • Blend Output entities now also contain an FMovieScenePropertyBinding, which is copied from the contributors.

  • Added Read/WriteComponent methods to FEntityAllocation to make custom component access now return a scope-locked wrapper around the component data.

Improvement:

  • There are several new improvements for Sequencer playback.

    • Playback speed is now configurable per sequencer instance by using a delegate. Defaults to previous values.

    • Shuttle Backward/Forward now uses speeds from the delegate.

    • Added the Restore Speed command to restore the speed to the designated playback speed. No default binding.

    • TogglePlay now actually toggles play and no longer calls PlayForward.

  • Upgraded boolean property tracks to use the new evaluation core.

  • Resizing and moving camera cut and shot track sections are more streamlined and easier to do.

  • Files converted from Matinee to Sequencer are now broken into multiple files.

Crash Fix:

  • Duplicating a Control Rig track in Sequencer no longer crashes the Editor.

  • The Matinee to Level Sequence converter plugin no longer crashes Editor.

  • The Editor no longer crashes when playing / rendering level sequences that contain template sequences.

  • Dragging track sections over each other or completely overlapping other sections no longer crashes the Editor.

  • The Editor no longer crashes when you switch worlds with Sequencer open.

Bug Fix:

  • The Output Directory in MRQ now correctly uses a local file path.

  • Template Sequences now correctly have no hierarchical bias. This allows Template Sequence animation to blend with any animation set directly on the same object.

  • Fixed various minor issues with the Matinee to Level Sequencer Converter tool.

  • The camera cut global start times are no longer changed when new global times start.

  • Don't stomp the global start time of camera cuts when new ones start

  • FBX Export options can now correctly be created in Blueprints.

  • The FOV blending preview in Editor now displays correctly when scrubbing/playing over a blend-out at the end of a cinematic.

  • Non-Linear Animation now correctly only caches root transforms when an offset transformation is set.

  • Blending preview code is now viewable in the modifier callback. This solves problems with cameras who have look-at constraints and problems with system dependencies in the new core evaluation system.

  • Zero-frame-wide sections are no longer created when converting Matinee files to Sequencer.

  • Template Sequences now correctly use base classes instead of child classes for compatibility with other Template Sequences.

  • Resolved an issue that prevented a sequence from playing more than once.

  • Exiting a camera cut now correctly goes back to the previous Editor location for blending cuts.

  • Sequencer now correctly counts property composites in the non-float method in the new core evaluation system.

  • BlenderType component values now correctly copy child entities in the new core evaluation system.

  • The warning Number of TAA samples is no longer hard coded in MoviePipeline, and it now respects the actual variable set.

  • Camera shakes with a custom duration no longer incorrectly shows a warning on the shake track.

  • Ease in and out is now correctly enabled for the first and last sections on the Camera Cut track.

  • Easing durations are now automatically reset if auto-easing is not allowed for the given section.

  • Sequencer no longer incorrectly fails to animate an object's properties.

  • World depth green channels now have the correct values for view-relative depth in MoviePipeline. The values now represent the distance from the camera by direction-to-pixel.

  • The latent action setup is now simplified and correctly handles re-entrancy in latent actions.

  • Fixed an issue in MoviePipeline where using Camera Cut for Motion Blur caused camera motion vectors to be incorrect for motion blur.

  • The Camera Shake Previewer is now compatible with Matinee shakes.

  • Selections between Template Sequences and the Editor Viewport now synchronize correctly.

  • Fixed camera jitter problems related to camera blending after a blend has finished.

  • Sequencer: Can now Bake Anim Sequences from a loaded sub sequence.

  • Resolved various outlier issues with Camera Cut blending.

  • The Camera Shake previewer tool now correctly cleans up the completed camera animations and initializes the base FOV.

  • Correctly clean-up finished camera anims and initialize the base FOV in the camera shake previewer tool.

  • Event tracks now correctly rebind to the Sequence Director when copy / pasting tracks.

  • Initial Values are now correctly shared between FSequencer instances and Interrogators. This ensures that exports and trail rendering share the same initial value data, despite objects potentially being in animated states when an interrogation is performed.

Deprecated:

  • You can no longer use ForEachAllocation task callbacks for resolving access to component data. The task internals already handle the callbacks and the lock is maintained correctly for the duration of the task.

Tools

AutoSDK

New:

  • Updated AutoSDK to allow unprivileged execution of the install / uninstall hooks when possible.

UI

  • SRadialBox : Added support for Radial sectors with a central angle smaller than 360 degrees.

Slate

  • Added Custom Safe Zone support for runtime builds.

  • Added debug callstack to root Invalidation Widgets in Slate Insights plugin.

  • Added a new Slate.bAllowNotificationWidget console variable to enable / disable the display of notification widgets.

Crash Fix:

  • Fixed a crash related to Preload Screen multi-thread protection.

Bug Fix:

  • Fixed an issue where mouse input was ignored when the application ran in Standalone mode or after packaging when FSceneViewport wasn't associated with UGameViewportClient.

  • Fixed a bug with the Component Visualizer Manager that prevented right-clicks in the Editor from being reported correctly.

  • Fixed a possible bad reinterpret cast in WidgetRenderer.

  • Fixed an issue that caused combo boxes to sometimes start capturing keyboard or gamepad input upon construction, even though that was not intended.

  • Updated the Slate LetterSpacing property to take font scale into account. Zooming on the UMG designer no longer causes text with line spacing applied to change (relative) size.

  • OnItemScrolledIntoView can no longer be called if the item provided doesn't correspond to a valid Widget.

  • Fix to a possible deadlock in Slate Loading screen code.

  • You can now use the CVar, Slate.Font.AsyncLazyLoad, to force fonts marked as LazyLoad to be loaded on a background thread. This prevents IO hitches in font loading.

  • When reflowing the UI based on Right To Left, the pivot point is now also mirrored about the middle.

UMG

New:

  • UWidgets that had their SWidget component garbage collected now have a (No Slate Widget) label in the Debug Filter of the Blueprint Debugger.

  • The SetSelectedItem function in UCommonRotator (part of the experimental CommonUI plugin) is now virtual.

  • Added a Cvar to limit the Render target size used for Widget Components (4K size by default).

  • Renaming a UMG animation to a name longer than 100 characters now issues a warning and prevents you from submitting that name.

  • Added a new function to allow updating the render target on the UWidgetComponent even if ticking is disabled.

Crash Fix:

  • Fixed a crash that happened when trying to paste multiple items on a Widget that only supports one child if it already has one.

  • Fixed an issue that caused WidgetComponent to try accessing deleted resources in the render thread.

  • Fixed an issue that caused a crash on iOS when entering Korean text.

Bug Fix:

  • Copying and pasting a widget no longer pastes the copy as a child of the original.

  • Fixed a copy-paste issue where editing the text on the copy also changed the text on the original.

  • Fixed an issue that made it impossible to undo changes if window focus was lost while dragging a slider (for example, by using a keyboard shortcut to switch to a different window).

  • Fixed an issue that caused LongPress touch events to end prematurely when the finger or mouse didn't move.

  • Fixed a UMG bug that prevented Widgets from being dragged in the Designer view.

  • Added a null check in RichTextBlock's SetTextStyle.

  • Fixed an assert when renaming UMG animations to strings greater than 1023 characters

  • Fixed crash that could happen when pasting a Widget in UMG Editor.

Virtual Production

New:

  • Performance improvements are now in place for handling large files in Multi-User Editing. This means users can now sync light bakes, take recordings, and other heavy package data efficiently. These files now transfer in seconds on local networks.

  • Multi-user servers will do asynchronous writes with large files instead of serial processing. This improves multi-user servers and reduces possible timeouts when processing large files. \

  • We added Multi-User support to Virtual Camera Actors and authority is configured via the roles assigned in VPRoles.ini.

  • Overall cluster and per-viewport Post Process settings were added to nDisplay clusters.

  • Live Link FreeD is a plugin that allows cameras and other devices that send the FreeD protocol over UDP to be utilized as a Live Link source in the engine. The FreeD protocol sends a combination of device position, orientation, and/or FIZ (Focus, Iris, Zoom) data. These are combined into a Live Link Camera Role that can easily be used in the engine.

  • Live Link VRPN is a plugin that allows connection to a VRPN server to fetch device data as a Live Link source in the engine. VRPN device types that are currently supported are Analog, Dial, Button, and Tracker. Analog, Dial, and Button device types are seen as a basic Live Link role as an array of labeled floats. Tracker device types are seen as a Live Link Transform role.

  • Support has been added for Live Link rebroadcast to virtual subjects.

  • Timestamp functionality was added to Blueprint Live Link virtual subject.

  • Virtual subject Take Recorder support is now available.

  • Added a way to intercept requests before they are handled by the Web Remote Control.

  • The nDisplay plugin now includes a LightCard Blueprint Actor. The LightCard Actor is a customizable card used to provide practical lighting on nDisplay stages.

  • Improved Switchboard config file management allows subdirectory-based organization.

  • Added the ability to access exposed preset entities by ID through the web API.

  • Added a way to get, set, and delete exposed entities metadata, which shows up in the Remote Control Details panel.

  • You can now make Remote Control API requests by using either preset ID or preset name.

  • Improved Remote Control support in -game and packaged games. Properties or functions that can't be used in -game will be marked in the Remote Control Panel, which can be disabled by a project settings. \

  • Added rebinding to the Remote Control Preset, which allows you to re-use presets across levels.

  • The function-picker search is now reliable in the Remote Control Preset.

  • Added a Details panel for exposed fields in the Remote Control Panel.

  • For Switchboard, added autodetection of project and engine paths:

    • Looks for Unreal Editor processes and projects in their command lines for detection.

    • If UE isn't running, then it will try to fill out the engine directory that Switchboard is running from.

  • For Time Management, added a genlocked, fixed-frame rate, custom timestep. It is very similar to the Fixed Rate in Project Settings implemented in UnrealEngine.cpp, except that it keeps up with platform time by accounting for any missed frames when the fps drops below the specified fixed rate.

  • For Camera Calibration, prepared NodalOffsetAlgoPoints to become a base class for algos with machine vision.

    • Now that OpenCV doesn't crash, an extra copy of the media frame was removed.

    • Moved ReadMediaPixels to the step controller so that it can be used by any step without reimplementation.

    • Changed methods and member variables in NodalOffsetAlgoPoints from private to protected because they need to be accessed by derived classes.

    • Added a button to apply the nodal offset to the calibrator parent.

    • Improved a few user-facing error messages.

  • For Switchboard, added local P4 settings detection. These settings can be detected when P4 is enabled in the new Switchboard config dialog, but will respect existing values (if there are any), or if the new Detect button is pressed, in which case it will replace existing values with any values found.

  • Added Multi-User support to nDisplay.

  • In Movie Render Queue, added a stills automation editor utility called Still Render Setup Automation. This automates the creation of a sequence with a still for a given camera. The Python script required a plugin dependency to Sequencer Scripting.

  • The Composure ICompElementManager is now public.

  • RCWebUI: Added a command line option "-RCWebInterfaceDisable" to prevent the WebApp from starting. This is useful when starting instances of the same project that are not meant to run the web server.

  • VPUtilities: Created a Blueprint library function for virtual production rendering-related functions. Added a functor generator to activate a given Scene View Extension when it is:

    • A PIE viewport.

    • A SIE viewport.

    • The active editor viewport.

    • The game primary scene viewport.

    The initial use case is to be able to set an OCIO config in BP.

  • Added Line Wrap and Auto Scroll controls to the log pane in Switchboard. Enabling Line Wrap breaks long messages into multiple lines, ensuring you can read them in their entirety without needing to scroll horizontally. Auto Scroll causes the view to follow the newest messages as they're appended to the bottom of the log, but can be disabled to make it easier to inspect older log messages (and is disabled automatically when you drag the scroll bar).

  • SwitchboardListener now caches the mosaic topologies reported via NvAPI, which change infrequently and can be expensive to query, rather than updating them every second. A Refresh Mosaics button was added to Switchboard's nDisplay Monitor to manually trigger an update.

  • Switchboard now includes the ShaderCompileWorker target when performing compilation on Unreal and nDisplay devices.

  • Switchboard now uses a new Python script called sbl_helper to perform Perforce syncing, rather than the Unreal Automation Tool Sync Project. Syncing is now faster, with better progress reporting, and build versioning is more consistent with UnrealGameSync. sbl_helper laying the groundwork for additional planned improvements.

  • Added Linux support for Blackmagic.

  • Switchboard now includes a toggle setting for nDisplay devices (labeled Unattended, and enabled by default) to include the -unattended argument on the command line, suppressing undesirable interactive UI and notifications.

  • The Switchboard toolbar options, Install Listener and Uninstall Listener, were replaced with a checkbox labeled Launch Switchboard Listener on Login, which more accurately describes its behavior, and a bug in creating the corresponding registry entry was fixed.

  • Added an editor command line argument "-AutoDeclinePackageRecovery" to bypass the Restore Packages prompt and discard autosaves. This is controlled by a corresponding Skip Package Recovery checkbox in Switchboard's Unreal device settings. This can be useful in multi-user editing scenarios, where restoring autosaved packages may not be desirable.

  • Switchboard will send the local nDisplay cluster configuration Blueprint asset to nDisplay devices upon launching them, which simplifies iteration and testing of these configurations without the overhead of submitting to and syncing from version control.

  • Added a new Blueprint editor, the nDisplay Config Editor, specifically for creating nDisplay assets. You can create a cluster, assign projection policies, and model 3D previews of the complex configurations of physical displays. The assets created here are now Blueprint Actors which you can drag and drop into levels. Once instanced in a level, properties can be exposed to Remote Control and replicated with Multi-User. Assets from UE4 4.26 will update to the new version provided that the imported JSON config file is available and at the location where the old asset was imported. It is still possible to import old JSON config files manually by dropping them into the content browser.

Crash Fix:

  • Fixed a crash in the Virtual Camera remote output provider.

  • No longer crashes when force-deleting a Live Link remap asset.

  • Live Link virtual subjects API no longer crashes when multi-threaded.

  • Fixed a crash that occurred when loading a preset with an exposed BP function.

Bug Fix:

  • Fixed an issue with Multi-User Sequencer playback where scrubbing the timeline would result in playing game nodes.

  • Playing back a sequence on a game node no longer results in the spawned objects persisting when closing the Sequencer Editor.

  • Fixed a bug in the Live Link Transform Axis Switch preprocessor that caused incorrect mappings in some cases. The UI was also simplified to use standard Front, Right, and Up axis notation to match other available tools and software. Position and Orientation offsets were added as well to shift the incoming tracking origin to match the desired world origin.

  • The default OCIO 3D LUT file size was increased to 65x65x65.

  • The Camera component frustum now updates when driven from Live Link.

  • Added a way to avoid applying data coming in from Live Link on camera, and to force using the camera component's range instead of relying on the lens file.

  • Fixed the Timed Data Monitor timecode provider display.

  • Added getters for raw animation static and frame data from the Blueprint helper struct SubjectFrameHandle.

  • Fixed an issue where LiveLinkComponent selection based on role did not go down the hierarchy.

  • Resolved an issue with the Timed Data Monitor stage events type that made it unfilterable.

  • Updated the static assert to catch wrong base types for stage events.

  • Added a validity check when updating the Source Framerate from the first enabled Subject with valid data.

  • Fixed the TimedDataMonitor MediaIO input GetDisplayName, where player base SetRate would always return false, causing it to not play back correctly.

  • Composure is now allowed to run packaged builds.

  • Fixed presets with the same names not displaying when querying presets.

  • It is now possible to expose custom events in the Remote Control Preset.

  • In OpenCV, added cv::unreal module. This adds functions to override new and delete operators, so that UE can replace them with its FMemory implementations and avoid crashes when UE passes containers (such as std::vector<T>) that OpenCV populates, then UE tries to release the container memory.

  • Fixed an issue with Switchboard's multi-select combo boxes that could sometimes cause them to show a stale string after all items had been deselected, and improved their handling of mouse clicks.

  • Fixed several instances where malformed JSON commands could cause SwitchboardListener to crash, and added diagnostic logging indicating when required command fields are missing.

Deprecated:

  • Removed a property in FixedFrameRateCustomTimeStep that has been deprecated since 4.21.

Removed:

  • We removed old Virtual Camera tools and assets. Users should now use Simple Virtual Camera or VirtualCamera2 Actor.

  • All references to the deprecated VirtualCamera actor have been removed from the Virtual Camera Showcase project.

Worldbuilding

Bug Fix:

  • Fixed a race condition happening due to the render thread accessing the materials in the main thread.

  • The transient actor UBuoyancyManager is now hidden from Scene Outliner (it will eventually become a subsystem).

  • Deterministic fixes for water:

    • Deterministic names are now used for all automatically-generated UObjects generated by water body actors.

    • Hack around UBodySetup's BodySetupGuid, which generates random GUIDs each time a new UBodySetup is created (this can happen on construction for lake and ocean collision components).

    • With deterministic names for collision components, they can be made net-addressable. This is a solution for warnings occurring on the server about replicated references not being net-addressable.

    • Generated objects have been made NonPIEDuplicateTransient to work around a check in NewObject, which can happen when saving as a map. Otherwise, a duplicated and named object marked for NeedsPostLoad might end up being reused without the flag being cleared.

  • GC collector was not properly tracking materials used by WaterMeshComponent, and this caused a crash. This issue has been fixed.

  • Fixed an issue causing an assert when the debug information for underwater materials was displayed.

  • Fixed an issue where river spline point parameters were getting out of order when the user added new points; it now uses the ordered list of spline mesh components from the river water body, instead of relying on the Actor's GetComponents function which returns components in an undefined order.

  • Fixed a reentrance crash with UWorld::UpdateLevelStreaming.

HLOD

New:

  • Added an HLOD build option "-MapCleanup" that will delete any invalid LODActor.

  • Added the ImpostorBaker Plugin to Plugins\Experimental.

  • HLOD - Added support for per-level custom HLOD baking transform; this allows materials with WPO to be baked properly for the HLOD.

  • HLOD Rebuild Commandlet - Added a "-SkipSubLevels" option to allow building HLODs only for the persistent level.

Bug Fix:

  • Material Baking - Fixed a color constant conversion issue in FMaterialUtilities::CreateProxyMaterialAndTextures. This will only affect the "Bake out materials" tool in the Static Mesh viewer, with no change to HLODs.

  • Fixed a bug causing some Actors with multiple static mesh components to be excluded from the HLOD generation by error.

  • HLOD Clustering - Meshes excluded from HLOD volumes were not considered by the next HLOD level; this is now fixed.

  • HLOD - Ensured that all ISMC instances are properly added to the LODActor instances.

  • Fixed an issue with unbuilt HLOD detection being too sensitive.

  • Mesh Merging - Lightmap UV generation is now skipped if no free channel is found.

Landscape

New:

  • Added a render capture tag for each landscape brush being rendered.

  • Reduced runtime virtual texture invalidation during landscape editing. Editor now invalidates the brush region instead of full components.

  • Deferred readback of landscape edit layer textures to the CPU, to avoid stalling on GPU during landscape layer editing.

  • Neither selecting landscape components nor locking/unlocking landscape layers will dirty world packages anymore.

Bug Fix:

  • Fixed a problem where heightfield data was not being updated when the water brush was updated; if a heightmap/weightmap readback modification was detected during the frame, and the component was not requesting that the collision data be updated, it would fail to update the collision data when a later request was made and no modification was detected at the time of the later request.

  • Fixed an issue where the landscape layer reserved for spline was being lost upon resize.

  • Edigrated CL 14156485 - Fixed a crash that occurred when using the Smooth tool in landscape mode.

  • Edigrated CL 14193183 - Fixed a rare crash that occurred during landscape painting. LandscapeComponent's SceneProxy was recreated while RenderThread was accessing it through the component. Now it makes its copy first.

  • Fixed a problem with landscape component bounds being invalidated when using the water brush; the components were first updated with the ELandscapeComponentUpdateFlag::Component_Update_Approximated_Bounds flag, (temporarily) invalidated the bounds, and then were updated with the IsUpdateFlagEnabledForModes(ELandscapeComponentUpdateFlag::Component_Update_Heightmap_Collision) flag, but the bounds weren't updated if the heightfield was actually unchanged. Now, the bounds are not invalidated (with an approximate bounds computation) if no change is actually detected on the heightmaps.

  • Edigrated CL 14187664 - Fixed a crash occurring in RenderLandscapeComponentToTexture_RenderThread when LandscapeComponentSceneProxy is null. Added ensures at a couple of places to help track rare crashes.

  • Default landscape grass inputs to zero now, instead of throwing a compile error when not connected. Previously we threw an error as soon as node was created but not set up.

Worldbuilding/Landscape

New:

  • Added CVars landscape.RenderCaptureLayersNextHeightmapDraws and landscape.RenderCaptureLayersNextWeightmapDraws to trigger a render capture during the next heightmap/weightmap draw calls.

Improvement:

  • All landscape edit layers, render targets, and draw calls now have a proper debug name.

  • Replaced CVar landscape.OutputLayersDebugDrawCallName, which was forcing the layers to update, with landscape.ForceLayersUpdate, which does the same thing but more explicitly.

Bug Fix:

  • Fixed an issue where landscape layers were incorrectly compositing/decompositing heightmaps when a heightmap was shared between multiple landscape components and not entirely covered by its components (for example, 3x4 components).

  • Generation of landscape normals now matches the CPU version.

  • Fixed an issue where deleting a layer from the Landscape would have no lasting effect when Edit Layers was enabled.

  • The landscape scale XY constraint is now respected when using the viewport gizmo.

  • bFillCollisionUnderLandscapeForNavmesh and bUsedForNavigation were not propagating from landscape streaming proxies to their components when setting the property. This has been fixed.

XR

New:

  • Added the -xrtrackingonly command line parameter to start OpenVR in a mode where frames are not submitted to the renderer. This allows for reading the tracker and device info separately. It also allows multiple instances of the engine to run on a single machine, and for all instances to share incoming tracking and input data.

  • Added support for StereoLayer Quads to the OpenXR plugin.

  • Took OpenXR out of Beta and set it to On by default.

  • Implemented OpenXR Controller Visualization.

  • Implemented missing Head Mounted Display Blueprint nodes for OpenXR.

  • Updated the OpenXR loader and headers to version 1.0.17.

  • OpenXR doesn't support 10-bit sRGB swapchains, so we're forcing 8-bit sRGB swapchain format in OpenXR.

  • Added support for late updating the projection of each stereo view. This ensures that you are projecting for the latest field-of-view information from the headset.

  • Added WebXR standard controller models to OpenXR plugin content. The OpenXR plugin now includes all commonly found XR controller models. \

  • Added Linux support to the OpenXR plugin.

  • Added Head Mounted Display Blueprint nodes to query play space size.

Improvement:

  • For OpenXR, improvements were made to swapchain pipelining.

Crash Fix:

  • Editor no longer crashes when opening a project with OpenXR enabled if an HMD is not attached.

Bug Fix:

  • Start Session/Stop Session in OpenXR plugin now uses exclusive locks so frame calls can't overlap session calls.

  • Fixed the swapchain timeout by increasing retry count, adding a timeout for stereo layers, and increasing the timeout value to 100ms by default.

  • Get Camera Intrinsics for WMR was implemented.

  • Windows Mixed Reality Anchor Store case-sensitivity problems were resolved by setting all IDs on the way into WMRInterop to lowercase.

  • Added Hand Mesh as an AR Capture type for use in WMR and OpenXR.

  • WMR Hand Mesh now hooks up to XRVisualization.

  • WMR's Hand Mesh has been decoupled from spatial mapping. Previously, the Hand Mesh was part of the MRMesh, would only show if spatial mapping was enabled, and could leave zombie hands in view as the hands lost and regained tracking.

  • XR now allocates backing MSAA targets from XR runtimes.

  • Temporarily disabled ScreenSpaceDiffuseIndirect rendering for VR.

  • OnControllerButtonReleased now triggers when isActive becomes false.

  • Fixed ShadowSetup incorrectly checking for Multi-Viewport instead of Mobile Multi-View.

Removed:

  • The deprecated Mono Culling Distance variable was removed from World Settings.

AR

New:

  • Live Link was updated to handle a tick from OpenXR hand tracking.

  • HoloLens apps can now launch a website from an existing Unreal interface in an Edge pop-up.

  • A quality-of-life improvement has been added for using an EHandKeypoint directly as an input in arrays from FXR Motion Controller Data. Previously, developers could cast the EHandKeypoint byte to a 32-bit int using built-in math conversion Blueprint functions, but this was not discoverable, and is not automatically suggested when dragging an EHandKeypoint to a Blueprint integer input.

  • A Scene Understanding update adds an Occlusion Hint OpenXR extension that could return different meshes with different levels of detail for the same surface. This could be a higher detail visible mesh, an occlusion mesh that is not meant to be visualized, or a mesh for collision.

  • Since multiple meshes could be returned for the same surface, we now ensure that only the collision meshes are used with the physics system. The user can set materials on the meshes based on what the mesh usage type is. This also fixes a bug where the trackable added event was firing before the spatial mesh was initialized. Meshes now have an appropriate material applied or added to a particular list when the mesh is first added, rather than waiting for the first update.

  • Add NV12 texture format support for DX11 and DX12 RHIs for HoloLens

Crash Fix:

  • WMR Spatial Mapping has been fixed so that it no longer crashes on Stop/Pause in an AR Session.

Bug Fix:

  • AR Actor types are now cached so the AR Session is not used erroneously in Update.

  • Plane finding in OpenXR no longer checks that spatial mapping meshes exist before processing planes. This allows updating plane finding if spatial mapping is not being used. This has been fixed by making the check predicated on the list of planes.

  • The function SupportsMultipleRenderTargets() now returns true (instead of false) for the Magic Leap OS Lumin.

  • UXR Visualization Function Library methods are now accessible via C++.

  • The ability to toggle Spatial Mapping on and off at runtime without needing to stop/resume the ARSession is now exposed. Toggle failures return false for each of WMR's AR Captures (QR, PV, SR) so a toggle retry can be made.

  • Updated WMR Toggle AR Capture to work before Start AR Session.

  • Added an option to write depth to translucent materials for HoloLens devices.

  • ARCore now uses parent class FDefaultXRCamera for SetupView.

VR

New:

  • The Oculus OVR plugin has been upgraded to v25 (v1.57). Some deprecated API usages were also fixed.

  • Enabled the Mobile Phase Sync for mobile Oculus devices in the Oculus VR plugin.

  • Update HMD priority list to be in this order:

    • Oculus VR

    • OpenXR

    • WMR

    • SteamVR

    Since SteamVR also works with the Oculus Rift and Windows Mixed Reality, give priority to the native Oculus and Windows Mixed Reality plugins before trying SteamVR.

OpenXR is production-ready. If enabled, it should be the priority plugin. In 4.27, the native Oculus plugin still requires higher prioritization to address runtime features that are required for shipping by Oculus but not yet supported in OpenXR .

Crash Fix:

  • Fixed a crash on startup with Oculus when -nohmd was specified in the command line.

Bug Fix:

  • Oculus HMD Module can now set up the Oculus Plugin Wrapper when the Oculus Service is not installed or broken.

  • Redundant OVRPlugin.dll verification has been removed from the Oculus Editor Module.

  • For the Steam VR Input Device, unchecked static_casts to FSteamVRInputDevice were fixed.

Upgrade Notes

AI

Upgrade Notes:

  • The signature for IAISightTargetInterface::CanBeSeenFrom has changed to give users more information about the previous visibility state, and provide access to a userdata payload. Please update your code accordingly.

Datasmith

Upgrade Notes:

  • If you have an existing project using the USDImporter plugin on platforms other than Win64, Mac, or Linux, you may get and error like this:

"ERROR: USDImporter.uplugin is referenced via YourProject.uproject with a mismatched 'SupportedTargetPlatforms' field"

To fix this, open the .uproject file for the project, and change the USDImporter entry in the plugins section from this:

  {
     "Name": "USDImporter",
     "Enabled": true
  },

To this:

  {
     "Name": "USDImporter",
     "Enabled": true,
     "SupportedTargetPlatforms": [
        "Win64",
        "Mac",
        "Linux"
     ]
  },

Editor

  • This introduces a breaking API change for classes inheriting IPersonaPreviewScene or ISkeletonTree that override SetSelectedBone, and for user code that binds to their SelectionChanged event. These now take an extra argument to route the cause of the change (user interaction or direct code) through to the UI elements.

Niagara

New:

  • Updated the Niagara system and emitter asset tag generation code. There are multiple new tags that can help in mass-analyzing content, but these tags will only be available on assets from UE4 4.26 or earlier after resaving the assets in UE4 4.27.

Online

Upgrade Notes:

  • Matchmaker and Signalling server have been moved from Engine/Source/Programs/PixelStreaming to Samples/PixelStreaming. References to these paths will need to be updated. Both Signalling server and Matchmaker can now log to a file.

Deprecated:

  • Deprecated PixelStreamingIP and PixelStreamingPort in favor of the new PixelStreamingURL command line parameter to specify Signalling Server url using ws:// or wss:// Users should replace -PixelStreamingIP <ip> and -PixelStreamingPort <port> with -PixelStreamingURL=ws://<ip>:<port>

Platforms

Windows

Upgrade Notes:

  • Profile Guided Optimization is now available on Windows. Build the client with -PGOProfile and -PGOOptimize to create Profile Guided Optimization executables for improved performance.

Rendering

Bug Fix:

  • Default maximum texture size for cubemaps generated from long-lat sources has been changed from 512 to unlimited. Cubemap textures saved before upgrading to UE4 4.27 will be explicitly set to 512 on asset load to preserve their old behavior, but new generated cubemaps will base their resolutions on the sizes of their source long-lat textures.

  • Previously imported .hdr textures were processed in linear color space but marked as sRGB, which could lead to incorrectly using "Color" sampler type instead of "Linear Color" in texture expressions. This can cause incompatibility between new textures and old texture expressions; to resolve this, update the texture expressions to use "Linear Color" sampler type when referencing newly imported .hdr textures.

UI

Slate

  • WidgetInteractionComponent's PointerIndex variable is now an integer; it used to be a float.

Virtual Production

Upgrade Notes:

  • The LiveLink camera controller has been moved to its own plugin, called LiveLinkCamera. You must enable this to get LiveLink camera controller functionality. Previously, the controller was automatically added when enabling the LiveLink plugin.

New:

  • To improve performance of Multi-user in situations of large files, we have added heuristics to the message construction to use compression. With this change, the system only compresses messages between 512 bytes and 3 megabytes. This is a major update to the session database, and existing sessions will be incompatible.

已知问题

有关虚幻引擎4.27的完整已知问题列表,请参见虚幻引擎已知问题追踪工具

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消