新功能
虚幻引擎5.0使各行各业的游戏开发者和创作者能以前所未有的自由度、保真度和灵活性构建下一代实时3D内容和体验。
为了帮助大小各异的团队不断突破视效和交互体验的边界,我们允许用户:
- 实现颠覆性的真实度:通过Nanite和Lumen等开创性新功能,在视觉真实度方面实现质的飞跃,构建完全动态的世界,提供身临其境和逼真的交互体验。
- 构建更广阔的世界:想象有多大,场景就有多大。虚幻引擎5.0提供了所有必要的工具和资产,允许你创建广袤无垠的世界供玩家尽情探索。
- 快速构建动画和模型:新增了对美术师友好的动画创作工具、重定向工具和运行时工具,同时结合大幅扩容的建模工具集,可减少迭代并避免循环往复,从而加快创作过程。
- 加快上手速度:全新的用户界面灵动时髦,提升了用户体验和操作效率。更新后的行业模板可作为更实用的起始参考。迁移指南可帮助现有用户从早期版本平稳过渡。因此,虚幻引擎5.0比以往任何时候都更容易上手和学习。
本次版本内含虚幻引擎开发者社区在GitHub上提交的改进内容!在此,我们要感谢这些开发者的贡献。感谢下列为虚幻引擎5.0做出贡献的所有人:
AlexThiv, alwintom, aidinabedi, aknarts, anon-oss, congyue1977, Deathrey, Dyanikoglu, dorgonman, error454, erebel55, foobit, fieldsJacksonG (Microsoft), ggsharkmob, hach-que, iniside, ImaginaryBlend, IgnacioFDM, (Intel), jorgenpt, kasp1, Kirchesch, liuhao0620, matthewjnv (Nvidia), Mastercoms, Muchcharles, projectgheist, , RandomInEqualities, Stanley1108, scorpio20t, tuxerr, (Oculus), TheoHay, velvet22,
渲染功能
Lumen全局光照和反射
Lumen是一种全动态的全局光照和反射解决方案,能够对场景变动和光源变化作出实时响应,赋予美术师和设计师创建逼真动态场景的能力。当阳光照射角度发生变化时、当打开手电筒或大门时,甚至是在天花板上炸开一个洞后,间接光照和光照反射都会实时变化。
该系统可以渲染间接漫反射,支持无限反弹和间接镜面反射。即使在精心设计的宏大环境中也能突出最微小的细节。


美术师和设计师不再受限于将预计算光照烘焙到纹理的静态场景。Lumen能为其节省大量时间,因为可以直接在编辑器中看到更改的结果,无需重新生成光照或为单个静态网格体设置光照贴图UV。
Lumen实现了高效的软件光线追踪,可在各种显卡上运行全局光照和反射,同时支持能实现高品质视觉效果的硬件光线追踪。
自虚幻引擎5抢鲜体验版推出以来,Lumen进行了以下改进:
- 针对Lumen全局光照和反射提供了全硬件光线追踪管线
- 在次世代主机上发布的黑客帝国觉醒:虚幻引擎5体验中亮相
- 基于远场硬件光线追踪(Far Field Hardware Ray Tracing)支持大视野范围
- 基于反馈驱动的表面缓存(Feedback driven Surface Cache),提供了更高质量的反射
- 使用Lumen可视化视图模式调试内容
- 改进了最终采集(Final Gather)的品质,在植被上尤为显著
- 改进了反射去噪器(Reflections denoiser),尤其针对光泽反射和移动物体后方
- 半透明最终采集(Translucency Final Gather),提高半透明和体积雾的全局光照质量
- 地形支持
- 辐射度最终采集(Radiosity Final Gather),提高了反射中看到的多次反弹全局光照和全局光照质量
- 用户界面中提供了Lumen设置,以进行质量/性能权衡
- 支持次表面/双面植被着色模型
有关更多信息,请参阅Lumen全局光照和反射文档。
Nanite虚拟几何体
Nanite是一种虚拟微多边形几何体系统,借助它,开发者可以创建出含有海量几何体细节的游戏。你可以直接导入由数百万多边形构成的电影级品质的源美术资产——无论是ZBrush雕刻模型,还是摄影测量扫描数据——并在场景中放置百万次,而且能够保证帧率稳定且无任何明显失真。
Nanite十分智能,它可以只流送并处理你能够感知到的细节,能在很大程度上消除多边形数量和绘制调用方面的限制。同时,它摒弃了耗时的工作(例如将细节烘焙到法线贴图、手动创建细节层次等),真正解放了开发者的双手,让你能专注于创作。

自虚幻引擎5抢鲜体验版推出以来,Nanite进行了以下改进:
- 优化控制以降低磁盘上Nanite网格体的占用空间。
- 这允许在开发过程中先行删除最不重要的数据来优化网格体,使其更类似于有损压缩。例如,在技术演示"Lumen in the Land of Nanite"中,其中一个雕像的胸部可去掉88%的三角形(和磁盘占用空间),且不会导致明显的差异。
- 改进了压缩方法,使相同品质的Nanite网格体的磁盘占用空间减少约20%。
-
对于从UE4升级到UE5的项目,Nanite审核工具(Nanite Auditing Tool) 可帮助将大量现有内容转为使用Nanite,并诊断在开发过程中损坏的Nanite内容,例如启用了哪些不受支持的功能。
- 此工具诊断静态网格体后会显示两类结果:
- 错误(Errors) 显示启用了Nanite的网格体所存在的问题,例如与Alpha测试、世界位置偏移、像素深度等的材质不兼容问题。
- 优化(Optimize) 显示哪些非Nanite网格体可能适合启用Nanite,前提是未检测到不兼容问题。
- 你可以通过点击 工具(Tools)> Nanite工具(Nanite Tools) 从主菜单访问此工具
- 此工具诊断静态网格体后会显示两类结果:
- Nanite网格体现在支持常规视图模式,如"线框(Wireframe)"和"着色器复杂度优化(Shader Complexity Optimization)"模式。
- 着色器复杂度视图模式会显示屏幕像素的"热力图",表示渲染对象的每个像素点涉及的着色器指令数。Nanite现有的材质复杂度视图模式会显示Nanite几何体上每8x8瓦片的唯一材质数热图,而这是确定Nanite通道中材质一致性的有用指标。
- 改进了Nanite网格体,支持生成没有光照贴图UV接缝瑕疵的光照贴图。
- Nanite现在要求在Windows系统上使用DX12。不再支持DX11。
有关更多信息,请参阅Nanite虚拟几何体文档。
虚拟阴影贴图(测试版)
得益于虚幻引擎5的Nanite、Lumen和世界分区功能,虚拟阴影贴图将提供次世代实时动态阴影。它们可以为电影级品质的资产和大型开放世界提供稳定的高质量阴影。
传统的动态阴影技术通常仅限于中小型场景,迫使设计师和美术师不得不牺牲品质来换取性能。相比之下,虚拟阴影贴图提供了一种单一、统一的阴影方法,可以在最需要的地方自动应用质量。这意味着阴影能够在更远的距离为各种尺寸的对象提供始终一致的品质效果,软半影效果和接触硬化的效果也会更真实。


自虚幻引擎5抢鲜体验版推出以来,虚拟阴影贴图进行了以下改进:
-
用于关卡编辑器的新可视化模式
- 通过将虚拟阴影贴图与距离场阴影集成进行远场渲染,改进了植被场景
- 添加了对更多几何体类型的支持
- 添加了对(简单)次表面和植被材质的支持。
- 尚不支持次表面轮廓和透射。
- 改进了缓存的健壮性、性能和品质
- 支持大世界坐标
- (试验性)支持单独的静态缓存
- 虚拟阴影贴图现在要求在Windows系统上使用DX12。不再支持DX11。
有关更多信息,请参阅虚拟阴影贴图文档。
时序超分辨率
随着Nanite微多边形几何体的问世以及次世代游戏对真实感的需求,对屏幕细节的要求达到了前所未有的高度。为了满足这些需求,我们编写了时序超级分辨率(Temporal Super Resolution)算法。该算法将取代虚幻引擎4的时序抗锯齿(TAA),以满足高端平台需求。
时序超级分辨率提供了内置于虚幻引擎中的原生高质量上采样技术,广泛支持各类硬件。时序超级分辨率将是默认的抗锯齿方法,并用于所有项目。
时序超级分辨率具有以下特点:
- 在输入分辨率低至1080p的情况下,可以输出接近原生4K品质的渲染画面,并且保证更高帧率和真实度。
- 降低高刷新率背景画面中的重影(该问题在UE4的TAA中普遍存在)。
- 减少复杂几何体的闪烁问题。
- 支持在游戏主机上实现动态分辨率缩放。
- 可在任何支持D3D11、D3D12、Vulkan、Metal的硬件上以及PlayStation 5和Xbox Series S / X上运行。
- 支持DirectX 12着色器模型6。
- 着色器专门针对PlayStation 5和Xbox Series S|X GPU架构进行了优化。
在下图中,我们比较了基于原生4K分辨率渲染的画面以及基于1080p分辨率渲染并上采样到4K的画面,展示了其品质和性能差异。使用TSR可以实现接近原生4K分辨率的图像品质,同时将GPU时间减少近50%。


两张4K图片的分辨率都受到当前网页宽度限制。要查看其原始未压缩分辨率,请右键单击其中一张图片并选择 在新标签页中打开 或 图片另存为。
路径追踪器改进(测试版)
路径追踪器(Path Tracer)在虚幻引擎5.0中继续得到改进,可以实现物理精确且无损的效果。它可用于参考对比、独立帧渲染,如果与Sequencer的MRQ一起使用,还可以渲染高质量过场动画。
此版本在以下方面进行了改进:
- 材质支持:
- 眼睛
- 毛发(试验性)
- Alpha通道
- 原生光线追踪景深
-
实心玻璃现在支持颜色吸收(基于Beer定律),这使玻璃能够以逼真的方式折射颜色。
- 通过 PathTracingQualitySwitch 表达式,美术师可针对路径追踪器开发其材质的行为,而不会影响实时光栅路径的外观和性能。
- 改进了采样和性能
有关其他信息,请参阅路径追踪器文档。
局部曝光后处理
局部曝光(Local Exposure)是一种新技术,它可自动将局部调整应用于曝光(在美术师控制的参数内),从而在已有全局曝光系统上,保留高光和阴影细节。
如果项目包含一些复杂的高动态范围场景,并且其中使用了动态光照,但在这些场景中应用单一的全局曝光调整不足以避免高光溢出和完全黑暗的阴影,则特别适合使用这项技术。
例如,对于某些具有动态时间系统的游戏,玩家很容易在场景中同时遇到曝光不足和过度曝光的问题,例如在室内场景中通过门或窗看到非常明亮的户外。这种情况可能会带来游戏体验问题。如果场景的原有光照不能满足要求时,可以使用局部曝光获得更一致的最终画面。


局部曝光属性位于:镜头(Lens)> 局部曝光(Local Exposure) 类目下的 后期处理体积(Post Process Volume) 设置。

要查看如何将局部曝光应用于场景,请使用关卡视口的 显示(Show)> 可视化(Visualization) 菜单中的"可视化(visualization)"。

要了解有关局部曝光的更多信息,请参阅自动曝光。
后动态模糊半透明
出于某些后处理效果的影响(例如动态模糊和TAA),某些效果(例如场景内的UI元素)在当前的半透明通道中渲染时,会出现品质下降和瑕疵问题。
虚幻引擎5.0引入了一个新的后动态模糊半透明(Post-Motion Blur Translucency)通道,使美术师能够创建不受动态模糊和时序抗锯齿影响的半透明材质。
你可以在材质的细节面板(Details Panel)属性中将半透明材质分配给后动态模糊通道。在 半透明(Translucency)> 高级(Advanced) 分段下,从 半透明通道(Translucency Pass) 下拉菜单中选择 后动态模糊(After Motion Blur)。


此通道当前不支持深度测试。这意味着动态模糊后渲染的对象不能被场景中的其他对象遮挡,即使后者离摄像机更近。
材质编辑器可折叠节点
折叠节点 是材质编辑器中的一项新功能,可将选择的材质表达式或函数折叠到材质图表中的单个节点中。这使你可以简化复杂材质网络的外观,使其更易于阅读和交互。可以随时右键单击折叠的节点,并从上下文菜单中选择 展开节点(Expand Node),从而将折叠的节点恢复为其原始配置。

DirectX 12
现在,对于使用虚幻引擎5的Windows PC,推荐的RHI为Microsoft DirectX 12(DX12)。随着引擎对于DX12的支持逐渐成熟,内存管理、功能完整性和稳定性变得至关重要。虚幻引擎5中新建项目将默认使用DX12。
Vulkan
在虚幻引擎5中,Vulkan RHI进行了大量稳定性和功能方面的更新,使桌面平台和移动平台上的使用体验得到提升,其中包括在Linux上支持诸如Nanite和Lumen(仅包含软件光线追踪)之类的虚幻引擎5功能。
如需了解要求,请参阅硬件和软件规格文档。
为大型开放场景而生的世界分区
世界分区(World Partition)是一个在编辑器和运行时都能使用的自动数据管理和流送系统,它完全避免了手动将世界划分为无数子关卡来管理流送的麻烦,并减少了数据争用。
使用世界分区后,世界场景将作为单一持久关卡存在。在编辑器中,世界将使用2D网格进行分割,并使用世界分区编辑器窗口根据你感兴趣的区域部分加载数据。这使得处理庞大的世界成为可能,否则这些世界将无法完全加载到内存中,或需要很长时间才能加载。在烘焙或启动PIE时,世界被划分网格单元,通过对这些网格单元的运行时流送优化,使其分别成为动态载入关卡。

自虚幻引擎5.0抢先体验版推出以来,世界分区不断得到改进:
- 新的开放世界和开放世界空白默认地图类型
- 流送源现在支持自定义形状
- 支持地形笔刷
- 新的构建器命令行开关可自动执行批处理,并在世界分区关卡中生成或修改数据
在使用许多专为游戏设计的新项目模板以及开放世界和开放世界空白地图类型时,世界分区将默认启用。
有关使用世界分区的更多信息,请参阅我们的世界分区文档。
世界分区的数据层
世界分区的数据层是一个系统,通过在编辑器和运行时激活和停用某些数据层,有条件地加载世界数据。数据层是在编辑器中组织场景的绝佳方式。你还可以使用它来处理游戏中的不同场景,并且创建同一世界的不同变体。这对于白天和黑夜的不同设置或完成任务后的世界变化非常有用。
你可以在编辑器的"数据层(Data Layers)"选项卡或Actor的"细节(Details)"面板中控制数据层。

有关更多信息,请参阅世界分区 - 数据层文档。
一Actor一文件
全新的"一Actor一文件"系统在与世界分区配合使用后,可以让世界协作编辑更轻松。关卡编辑器会将各Actor保存为单独文件,而不是将它们添加到一个单一关卡文件中。这意味着用户只需从源码控制中检出需要的Actor,而不是整个关卡。
现在使用世界分区时,将默认启用此功能。
有关更多信息,请参阅一Actor一文件 文档。
自动网格化HLOD
使用世界分区时,自动网格化HLOD(Automatic Grid-Based Hierarchical Level of Detail)系统会创建数据驱动的自定义HLOD层,从而优化在加载区域外显示的大量静态网格体Actor。此功能会在未加载区域的网格上覆盖实例化静态网格体(ISM)或代理网格体,通过一组最低数量程度的HLOD,减少绘制调用数量并提高性能。

这些代理网格体是使用原始Actor几何体生成的,并经过简化以减少内存使用量。
有关更多信息,请参阅世界分区 - HLOD文档。
大世界坐标
在虚幻引擎5(UE5)中,大型世界坐标(LWC)引入了对双精度数据变体类型的支持,其范围涉及引擎所有子系统,作用是提升浮点精度。受其影响的系统主要包括建筑可视化、模拟仿真、渲染 (Niagara和HLSL代码)以及涉及大规模场景的项目。虽然我们已经做了大量工作来确保大世界坐标在UE5中具有高性能且广泛使用,但截止发布时由于我们尚未解决某些精度问题,在距离原点很远的一些情况下仍存在一些局限性。
被许可用户可以立即将他们的代码转移到这些新的数据类型。不过,我们打算在验证并确保引擎中的所有系统在LWC和当前系统下都能实现相同的高效运行后,在5.1中全面支持创建和填充大世界。然后,我们会将默认的最大世界尺寸设置为绝对大规模。
在虚幻引擎4(UE4)中,32位浮点精度类型会限制世界场景的规模。LWC可为你的核心数据类型提供64位双精度,大幅提高了项目的规模。这些新变化将支持你构建更为庞大的世界,大大提高了Actor的放置精度和方向精度。由于大世界坐标使用的是double类型,因此PhysX 物理系统 与UE5不兼容。
有关更多信息,请参阅大世界坐标文档。
动画
Control Rig的改进
Control Rig现可投入实际生产,并且会默认启用。它包含几个新工具、功能和模式,可帮助你在虚幻引擎5.0中对角色进行绑定和动画制作。
动画模式
动画模式(Animation Mode) 进行了改进,为你提供更友好的动画界面。
动画大纲视图(Anim Outliner) 和 动画细节(Anim Details) 面板包含一个含有控制点和属性的过滤列表,可以更轻松地管理你的选择和关键帧属性。

还有多个工具为你的动画工作流程助一臂之力。例如可为控制点保存并重用姿势数据的 姿势工具(Pose Tool) 工具,或可在视口中可视化关键帧移动的 运动尾迹工具(Motion Trail Tool)。

要了解有关动画模式的更多信息,请参阅虚幻引擎中的动画编辑器模式页面。
空间切换
空间切换(Space Switching) 用于快速轻松地重新设置控制点。使用此功能,可以在Sequencer中实时创建新空间并设置关键帧,或在Control Rig资产中预先进行构建。因此,你现在可以动态更改控制点的空间父节点,无需创建复杂的约束切换逻辑。

要了解如何在制作动画时使用空间切换,请参阅空间切换页面。
图表改进
我们在创建Control Rig时添加并改进了若干个图表行为,以便更加紧密地与蓝图工作流程保持一致。
你现在可以在Control Rig中创建 函数(Functions)。借助函数,你可以更好地组织大型图表、重复逻辑并轻松地在Control Rig之间共享功能。

也可以创建并存储 数组(Arrays),从而简化项集的管理。这种新的数组(Array)类型取代了集合(Collection)类型,并附带一组丰富的新节点以添加、删除和使用数组项。

Python脚本
你现在可以在Control Rig中使用 Python脚本(Python Scripting),从而将工作流程自动化并创建用于绑定过程的工具。你还可以使用 Control Rig Python日志(Control Rig Python Log) 对命令进行逆向工程并复制脚本以共享到其他项目。

请访问Control Rig Python脚本页面了解更多信息。
IK Rig和IK重定向器
全新的 IK Rig 系统提供了一种以交互方式创建IK解算器(包括新的全身IK)并随后为它们定义目标的方法。然后,可以将生成的IK Rig资产嵌入到动画蓝图(Animation Blueprint)中,进而可以在运行时控制目标。这种新的重定向方法废弃并替换了虚幻引擎4中的重定向管理器(Retarget Manager)。

通过使用 IK重定向器(IK Retargeter),IK Rig还可用于在不同骨骼网格体之间创建改进的动画重定向。使用这个新的重定向系统,可以在任意两个骨架之间准确传输动画(在运行时,或使用离线导出器生成重复的动画蓝图和序列)。

要了解有关IK Rig和IK Rig重定向的更多信息,请访问IK Rig页面。
混合空间改进
虚幻引擎5.0中的混合空间得到了改进,现在包含一系列新功能和行为。
平滑
平滑(Smoothing) 现已大幅修改,你现在可以轻松设置不同的平滑类型和时间。你可以选择多种插值类型,例如 线性(Linear)、缓入/缓出(Ease In/Out) 或 弹性阻尼(Spring Damper)。
有关不同平滑属性的更多信息,请参考混合空间资产细节部分。

混合空间图表
现在,也可以通过创建 混合空间图表(Blend Space Graph) 在你的动画蓝图中直接创建混合空间。使用这些图表,可为动画蓝图创建预定的混合空间,将它们与其他资产分开,并编辑示例逻辑。
要了解有关混合空间图表的更多信息,请参阅使用混合空间页面。

混合空间分析
现在可以使用 Blend Space Analysis(混合空间分析) 自动化混合空间样本的放置和管理。其中提供了几个分析功能,涵盖了大多数典型的混合空间设置,例如运动、瞄准等。
要了解有关混合空间分析的更多信息,请参阅混合空间分析页面。

倒回调试器
通过引入 倒回调试器(Rewind Debugger) 改进了动画的调试。此工具提供了Actor和动画事件的捕获游戏时间轴,可以暂停、步进和倒回到特定时间点。你还可以轻松地选择场景中的Actor和对象进行调试。使用倒回调试器,你现在可以更深入地了解游戏动画在实时播放时的运作方式。
骨骼改进
动画镜像
你现在可以使用 镜像数据表(Mirror Data Table) 和 镜像节点(Mirror node) 在动画蓝图中轻松镜像角色动画。使用镜像数据表,你不仅可以镜像动画序列,还可以镜像曲线、同步标识和通知。
要了解有关此功能的更多信息,请访问制作动画镜像页面。

骨骼兼容性
新的 骨骼兼容性(Skeleton Compatibility) 属性允许不同的骨骼共享其数据,无需进行冗长的重定向或重新导入工作流程。使用此功能,你可以轻松让相似的骨骼共享动画数据,例如动画序列、动画蓝图或混合空间。骨架兼容性要求骨架之间的骨骼名称匹配才视为兼容。

运动改进
虚幻引擎5.0现在包含了高级运动和交互,可用于各种游戏情景。
距离匹配
通过使用动画蓝图中新的 距离匹配(Distance Matching) 功能,可程序化管理游戏动画的速度和播放。距离匹配使用动画曲线数据将动画回放与角色运动进行同步。为解决常见的脚滑动问题,你可以将此调整与 步幅扭曲(Stride Warping) 结合使用。
![]() |
![]() |
---|---|
未使用距离匹配 | 使用距离匹配 |
姿势扭曲
现在,你可以通过使用 姿势扭曲(Pose Warping) 程序化更改角色的步幅方向、步行速度和脚部位置。姿势扭曲是一组新的动画蓝图节点,可以动态扭曲动画姿势的组件。使用这些节点可减少为角色开发复杂动画所需的手动工作。
有关新节点及其函数的更多信息,请访问姿势扭曲页面。
![]() |
![]() |
---|---|
未使用方向扭曲 | 使用方向扭曲 |
运动扭曲
使用新的 运动扭曲(Motion Warping) 功能可动态扭曲角色的根骨骼位移。使用运动扭曲,你可以定义类似于动画通知(Animation Notifes)的"扭曲窗口",然后在蓝图中配置这些窗口以扭曲到任意目标。
有关更多信息,请访问运动扭曲页面。

机器学习变形器
你现在可以使用新的机器学习变形器(Machine Learning (ML) Deformer)创建实时网格体变形。机器学习变形器的目标是将电影级品质离线处理的变形引入实时。这是通过在线性蒙皮骨骼网格体上应用校正变形来实现的。应用这些校正将使其看起来更接近离线模拟变形。这些校正是通过机器学习算法习得的。
为了训练机器学习变形器,它需要数千或数万个示例姿势,这些姿势使用复杂变形和线性蒙皮进行变形。然后,变形器将学习这些差异并在运行时应用它们。为了帮助生成训练数据,我们还创建了一个Maya插件,不过这个插件并非必须使用。
此功能仍处于高度试验阶段。内存要求很高,性能还不是最优的。
要了解有关如何使用机器学习变形器的更多信息,请访问使用机器学习变形器页面。

音频
MetaSounds
这个新的系统与材质编辑器等完全可编程的材质和渲染管线类似,可让你管理音频渲染的方方面面,将推动次世代程序音频体验。
MetaSounds使用来自游戏数据和蓝图的音频参数和音频事件,对声音进行精确采样控制和调制。还可以在MetaSounds中组合MetaSounds,定义和实现参数接口,以及使用预设系统来精简用户工作流程。
MetaSounds还显著改进了Sound Cue的性能,并提供了完全可扩展的API供第三方插件使用。

Project Acoustics

Epic与Microsoft的Project Acoustics团队合作,为其UE5插件的深度集成进行了开发。Project Acoustics是次世代烘焙声学系统,可模拟音频传播、混响和其他高级声学处理。Project Acoustics专注于性能和可扩展性,已经在许多3A级游戏中得到使用,并且现在可供虚幻商城的所有被许可方使用。
如需了解有关Project Acoustics的更多信息,请参阅Microsoft的Project Acoustics概述文档。
几何体工具
几何体工具为所有行业的虚幻引擎美术师提供了广泛的工具,用于创建和编辑所有分辨率的网格体。UE 5.0包含大量用于建模、烘焙和UV编辑的新工具和改进工具。架构的进步将支持这些改进并建立未来框架。

建模工具
变换工具
- 建模模式 变换 工具扩展了吸附和对齐功能,可大幅提高处理多个网格体的速度。
吸附
- PolyEdit吸附(PolyEdit Snapping)- PolyEdit工具现在具有额外的吸附和对齐功能。
- 体积和动态网格体的顶点/边吸附(Vertex/Edge Snapping for Volumes and DynamicMeshes)- 现在可以在体积和动态网格体组件上吸附顶点和边。
图元工具
- 添加图元 工具楼梯生成器(Add Primitive Tool Stair Generator)现在支持悬浮楼梯、曲线形楼梯和螺旋形楼梯。
- 动态网格体Actor/组件 - 除了体积之外,我们的建模工具中还添加了一种新的动态网格体Actor和组件类型。动态网格体Actor可以通过项目设置打开。这些动态网格体Actor可以进行序列化、复制、在编辑器之间进行剪切和粘贴、在PIE中运行,以及在构建的游戏中运行。它们目前仅支持复杂碰撞,未来将支持简单碰撞。
PolyEdit工具
- PolyEdit 工具包括许多改进,可增强功能和提高效率。
- 插入边缘循环(Insert Edge Loop) - 边缘循环插入器现在可以突出显示导致循环停止的有问题的(非四边形)组。这使得更容易理解插入限制,并为用户提供有关如何调整组拓扑来辅助工具的提示信息。
- 插入组边缘(Insert Group Edge)- 为改进工作流程并最大限度减少工具之间的来回切换,插入组边缘工具已移至PolyEdit工具。
- 剪切面(Cut Faces)- 添加了一个剪切工具。该工具将使用用户定义的剪切方向来剪切选定的面。
- 重新三角化(Retriangulate)- 重新三角化将重新计算选定多边形组上的三角形。
- 区域选择(Marquee Selection)- 现在,区域选择在PolyEdit中适用于所有网格体组件类型。
- 挤压(Extrude)- 挤压具有用于方向、测量方向和创建多边形组的新选项。
- 按组简化(Simplify by Group)- 在重复建模操作之后,拓扑可能变得低效。按多边形组简化是一个强大的工具,可根据用户定义的区域细化网格体。
- 推/拉(Push/Pull)- 推/拉工具充当"布尔挤压"工具。挤压的网格体不是拓扑编辑,而是作为实体进行添加或消减。这允许进行诸如在网格体中推出一个洞之类的操作。
- 斜面(Bevel)- 在PolyEdit中添加了一个新的斜面工具。
CubeGrid工具
- CubeGrid 工具是一种快速工具,可用于快速开发资产或关卡。该工具提供了以下相关选项:
- 选择/取消选择网格单元
- 推/拉选择
- 调整网格尺寸
- 将网格重新定向/吸附到非正交角度
LOD管理器
- LOD管理器(LOD Manager) 允许直接在视口中探索和管理LOD。
- 从高分辨率源模型恢复LOD0
- 在视口中预览上下文中的各个LOD
- 在SourceModel和RenderData LOD之间进行比较
枢轴点Actor
- PivotActor 工具为所选Actor创建一个新的空Actor父项。此功能类似于现有DCC中的"定位器"。pivotActor是一种控制和管理变换的简单方法。
细分
- 细分(Subdivide) 工具允许建模师和雕刻师使用不同的细分技术添加/平滑网格体以获得更高分辨率,从而满足分辨率需求。该工具目前支持:
- 双线性细分(Bilinear Subdivsion)- 双线性细分只是对多边形组进行细分,而不会生成平滑的表面。
- 循环细分(Loop Subdivision)- 循环细分直接作用于三角形网格体,这意味着它可以应用于具有任何多边形组拓扑或根本没有多边形组的网格体。它会产生类似的平滑表面。
- openSubdiv/Catmull-Clark - Catmull-Clark旨在处理四边形网格体,并依赖于相对简单且结构良好的多边形组拓扑。
- 新建多边形组(New PolyGroups)- 现在有一个选项可以为每个细分级别生成新的多边形组。这样就可以使用PolyEdit等工具继续细化/建模。
PolyCut
- Polycut 工具的功能已增强,现在可以使用网格体布尔运算。新模式允许穿过多个层进行剪切,或在剪切时让剪切曲线延伸超过主体网格体的边缘。
布尔
- 网格体的 布尔(Boolean) 和自联合(Self Union)得到了大幅改进。这些工具现在可以去除低级网格体操作中引入的虚假边缘。这些边缘在多次操作中累积,并可能导致精度错误。新的实现方案更加可靠和高效。
修剪工具
- 以前位于网格体布尔工具中的 修剪(Trim) 功能已移到自身单独的工具中。这个新工具包含一些附加选项,可以选择要修剪几何体的哪一侧。
晶格变形器
- 晶格变形器(Lattice Deformer) 工具的功能得到增强,其中添加了:
- 软变形模式选项
- 晶格点约束
扭曲变形器
- 光晕工具包含关于配置文件类型的附加选项,并更新了小工具以简化交互
- 新增了"显示原始网格体(Show Original Mesh)"选项
- 吸附小工具(Snap Gizmo)现在可以吸附到世界中的对象
- 新增了将小工具移至中心的选项
- 折弯工具包含新功能,使该工具更加强大和实用。
- 可以在变形时将一侧锁住。
- 有一个可视化功能可以显示当网格体弯曲时从下到上的线如何通过小工具中心绑定。
- 上限/下限对弯曲的影响更符合预期。
雕刻
- 顶点雕刻(Vertex Sculpting) 面板具有重新设计的UX面板。这个全新的UX有几处重要改进
- 浮出面板中较大的图标取代了以前的笔刷类型和衰减下拉列表,可提高效率和辨识度。
- 现在对笔刷Alpha遮罩采用了新的自定义平铺视图资产选取器(Asset Picker)。
- Alpha遮罩选取器现在支持基于本地用户配置的集合的过滤器。允许用户快速跳转到他们最常用的Alpha遮罩集,包括新增的最近使用列表。
- 在视口中可以显示激活笔刷印章和Alpha遮罩以作为笔刷指示器的一部分。
网格体简化
- 网格体 简化(Simplify) 工具新增了用于优化现有网格体的选项。
- 现有位置(Existing Positions)作为一种新的缩减方法,可以创建简化的网格体,同时保持原始网格体的一些现有顶点位置。
- 按多边形组简化(Simplify by Polygroup)仅使用多边形组作为简化中的约束。也可以通过PolyEdit工具访问此选项。
- 几何公差约束(Geometric Tolerance Constraint)。
网格体项目
- 网格体 项目(Project) 工具已得到改进,增加了一些参数并提高了性能。
重新网格化
- 重新网格化(Remesh) 工具现在有一个在重新网格化之前进行细分的选项。当重新划分多边形较少的网格体时,使用循环细分或Catmull-Clark细分进行细分可能会很有用,因此生成的网格体不会继承原始多边形结构的分面
网格体置换
- 网格体 置换(Displace) 工具已得到改进,增加了一些功能。
- PN三角形细分(PN Triangle Subdivision)- PN细分(PN Subdivision)定义了一个更平滑的网格体版本,将每个平面三角形替换为一个弯曲的网格体。
- 新增了曲面细分(Tessellation)算法 - 实现了一种新的网格体细分方法,可以提高Uniform和PN三角形细分的速度和粒度。结果更接近曲面细分着色器。
- 置换纹理贴图时可以选择通道。
- 缩放和平铺2D纹理。
- 使用对比度曲线调整强度。
创建和编辑体积
- 由于增加了几个重要功能,体积的创建和编辑得到了改进。
- 诸如图元工具(Primitive Tools)、PolyExtrude、PolyRevolve等创建工具现在可以发出体积(可选择体积类型)而不是静态网格体。
- 诸如布尔(Boolean)或平面剪切(Plane Cut)等可以发出新派生对象的编辑工具现在可以使用体积作为输入和输出。
体素混合和消减
- 体素 混合(Blend) 工具现在可以使用可自定义的平滑衰减来执行CSG减法。
包壳
- 包壳(Jacketing) 工具(通常用于移除看不见的几何体)的功能已得到增强。
- 现在可以选择基于被遮挡的三角形创建新组。这样就可以在移除之前进行更细粒度的手动控制。
- 在移除之前缩小被遮挡三角形的选择范围。这样可以降低移除三角形的激进程度。
静态网格体编辑器建模工具
- 现在,静态网格体编辑器中通过新的 StaticMeshEditorModeling 插件提供了网格体编辑工具。目前静态网格体编辑器中只会显示 AutoLOD、LOD管理器(LOD Manager) 和 检查器(Inspector) 工具。检查器工具可以显示出在静态网格体编辑器中不易看出的多种网格体信息,例如突出UV接缝和网格体边界,以及在着色对象上显示线框(wireframe-on-shaded)、显示UV棋盘格等(包括针对启用了Nanite的网格体进行此类显示)。
烘焙和网格体属性(测试版)
在虚幻引擎5中,我们继续扩展并更新了我们的纹理和材质烘焙工具套件。纹理和材质烘焙是资产开发的重要组成部分。烘焙工具不仅对于LOD生成至关重要,而且还可以直接在编辑器中创建用于高级材质创建的工作流程。

烘焙纹理
自虚幻引擎5.0抢先体验版推出以来,我们对这些工具进行了诸多改进:
- 组合输入法线和烘焙法线
- 多重采样
- 添加了其他几何烘焙类型
- 改进了环境光遮蔽的性能
- 将属性烘焙到顶点
- 纹理到顶点的烘焙
- 纹理过滤
- 支持UV层
- 能够将纹理贴图预览为效果或纹理
Bake All工具
新的BakeAll工具现在可在建模模式下使用。虽然BakeTexture工具提供了一种将单个网格体的细节烘焙到目标网格的解决方案,但BakeAll支持将多个源网格体的细节(通常是大型重实例化的Nanite程序集)烘焙到单个低多边形目标网格体上。
UV编辑(测试版)
虚幻引擎5.0中的UV编辑工具进行了大幅更新和扩展,使得直接在编辑器内创建和编辑UV的功能大幅增强。
新的UV编辑器面板

新的UV编辑器面板是编辑UV布局的主要工作区。2D UV面板是评估布局打包和UV方向的主要区域,并提供以下支持:
- 2D选择和变换
- UV通道可视性
- UV通道复制、添加和删除
- 自动解包和每个岛状区
- 剪切和拼接操作。
- 3D预览
- 纹理显示
Project UV工具
- Project UV已完全重写并支持许多用户要求的功能。
- 现在,使用世界空间维度而不是相对边界,并且可以在多次使用该工具之间保持固定,从而创建尺寸一致的平铺UV。
- 初步支持从PolyEdit和TriEdit工具传输表面选择。
- 现在支持多个UV通道。
- ExpMap UV算法:ExpMap UV方法遵循曲面,类似于平面投影。避免了当表面弯曲远离投影平面时可能发生的极端纹理拉伸,并且局部投影的贴花可更准确地保持其形状。
Auto UV工具
- Auto UV工具已更新,采用为在高多边形网格体上构建UV的新流程。新选项将多个步骤组合为一个操作(小型补丁生成、补丁合并、最终UV生成和UV打包)。可以轻松调整和重复各个参数,以在很短的时间内生成高质量的UV。
虚幻编辑器界面
用户界面经过重新设计
用户界面(UI)已针对虚幻引擎5.0进行了重新设计,可提供一致和顺畅的体验。已针对较暗的默认主题调整了默认颜色。用户还可以在 编辑器偏好设置(Editor Preferences) 中设置自己的 主题(Themes),将编辑器自定义为他们喜欢的样式。更新后的图标提供紧凑和一致的视觉提示。
内容抽屉(Content Drawer)、侧边栏 Tabs(选项卡) 和 创建菜单(Create Menu) 等新功能可让你轻松访问所需工具,同时为视口留出最大空间。

内容抽屉
内容抽屉 是一项新功能,可用于呼出 内容浏览器(Content Browser) 覆层。因此,你可以快速访问资产,无需预留空间用于停靠面板。可使用 Ctrl + 空格键 来呼出内容抽屉。或者,可单击内容抽屉选项卡名称来展开抽屉。内容抽屉也可以停靠在编辑器布局中,或与传统的内容浏览器结合使用。
侧边栏选项卡
你现在可以将侧边栏选项卡固定为打开状态。通过停靠选项卡,可轻松访问常用的面板,而无需牺牲屏幕空间。自抢先体验版推出以来,选项卡已更新,允许将它们固定为打开状态。
加载和后台进度指示
现在,在打开项目时,启动画面上会显示更多细节,提供关于加载过程的更多相关信息和可视性。

编辑器状态栏现在在右下角提供了后台任务的进度指示器。此进度条显示所有后台任务的综合进度,并且可以展开来显示各细分任务的进度指示器。
细节面板
细节面板(Details Panel)顶部新增的分段栏(Section Bar)可用于快速访问相关属性类目,由此减少滚动。此外,你可以将常用属性保存到收藏夹(Favorites),使这些属性显示在给定Actor类型的细节面板顶部。
创建菜单
关卡编辑器(Level Editor) 的主工具栏现在包含 创建(Create) 按钮。通过这个按钮可以快速访问可放置的Actor,以及 Quixel Bridge 或 虚幻商城(Unreal Marketplace) 等内容源。可直接将Actor从下拉菜单中拖到视口中,也可单击Actor以快速放置在摄像机前。这样,无需将"放置Actor(Place Actors)"面板永久停靠在关卡编辑器的布局中,也能放置Actor。

Quixel Bridge集成
Quixel Bridge现在直接集成在虚幻编辑器中。你可以将Quixel Bridge停靠在编辑器布局中,然后将资产直接拖到关卡中。可从关卡编辑器主工具栏中新增的 创建(Create) 菜单或从 窗口(Window)> Quixel Bridge 访问Quixel Bridge面板。

有关适用于虚幻引擎的Quixel Bridge的更多信息,请参阅此处的文档。
多选项卡模式
有些模式颇为复杂,需要显示额外的UI元素,因此重新设计为一个选项卡系统。这适用于破裂模式和动画模式。如果你关闭了一个选项卡,始终可通过从 窗口(Window)> 编辑器模式(Editor Modes) 中选择该选项卡重新将其打开。

可搜索的菜单
现在,你可以在具有嵌套子菜单的菜单中进行搜索。任何子菜单中与搜索条件匹配的操作均会显示,可供你访问。

重新组织了菜单和控件
一些菜单已重新组织,更为清晰,方便使用。
-
Actor上下文菜单已进行了重构。此菜单中的元素可以在主菜单栏中的"选择(Select)"菜单、Actor菜单或"组件(Component)"菜单下找到。
-
对于创建编辑器内工具的开发者,许多控件已从Editor/EditorWidgets移至Developer/ToolWidgets。
Lyra游戏示例

随着虚幻引擎5的发布,我们很高兴地推出Lyra。Lyra是一个新的游戏示例,作为学习资源内容,其目标是让你了解虚幻引擎5.0框架以及在UE5中开展项目时的最佳实践。

它的架构采用了模块化设计,包括核心系统和插件,这些插件会随着虚幻引擎5.0的开发而定期更新,并包括以下关键功能:
- 跨平台兼容性和可扩展性。
- 针对在线多人游戏和跨平台游戏,支持Epic在线服务和主机在线子系统。
- 自定义Gameplay技能系统。
- Niagara FX。
- Chaos破坏物理系统。
- 用于项目Gameplay概念的虚幻示意图形(UMG)控件类和UI图标,包括菜单设置、控制器操纵杆以及生命、法力和弹药的显示。
- 优化了手工制作内容,包括人形角色的运动动画资产、声音以及与任何Pawn兼容的武器系统。
- 新增UE5人体模型Manny和Quinn,这些人体模型是可操作角色,与MetaHumans共享相同的核心骨架层级,并具有兼容的动画系统。

城市示例项目

设计师和开发者等人员可以在城市示例(City Sample)项目中探索如何将各种新系统和改进的系统组合在一起,从而创建广阔而引人入胜的环境。此示例是使用黑客帝国觉醒:虚幻引擎5体验(The Matrix Awakens: An Unreal Engine 5 Experience)技术演示中使用的相同资产和设计技术构建而成的(该技术演示发布在PlayStation 5和Xbox Series S|X硬件上)。
通过使用虚幻引擎5的新功能和改进功能,你可以构建高度细节化的大型世界,再对这些世界进行设计、填充和提供动态光照,即可使这座视觉上令人震撼的城市栩栩如生。这座城市是使用规则处理器(Rules Processor)通过程序生成方法来设计和构建的,并使用以下功能使城市更加生动:
- "世界分区"与"一Actor一文件"结合使用,可改善关卡流送和编辑器工作流程效率。
- Nanite支持使用高保真的虚拟化微多边形几何体。
- Lumen使用硬件光线追踪(Hardware Ray Tracing)生成动态全局光照和反射。
- 虚拟阴影贴图(Virtual Shadow Maps)为城市提供一致的高分辨率阴影。
- Mass AI根据MetaHuman库管理交通和人群的行为和可视化。
- Chaos物理系统对载具和破坏系统进行驱动。
- MetaSounds系统向城市填充都市的声音。
- 使用Niagara作为粒子系统。
- 更多其他内容!
人工智能

虚幻引擎5.0推出了新的功能,可让用户能够创建比以往更可信的AI代理。MassEntity 为面向数据的计算提供了一个框架,可用于性能至关重要的用例,包括模拟场景中数以万计的AI代理。
此外,虚幻引擎5.0提供 智能对象(Smart Objects),这是放置关卡中的一组对象,供AI代理和玩家进行交互。该系统易于配置,可为你的场景带来前所未有的交互能力。
虚幻引擎5.0对AI代理导航进行了重大改进,提供了 Mass避障(Mass Avoidance) 和 区域图(Zone Graph) 等功能。Mass避障可为使用MassEntity系统的任何实体提供高性能的避障功能,区域图通过特定导航流程提供了高效的长距离导航。
虚幻引擎还推出了 StateTree ,这是一种可扩展的通用分层状态机,可将行为树中的选择器与状态机中的状态和转换相结合。用户可以使用StateTree创建灵活有序的高性能逻辑。
Mass Entity(试验性)
MassEntity 是一个面向数据的计算框架,允许玩家与数以万计的模拟实体进行高性能交互。

MassEntity的主要数据结构是 片段(Fragment),它表示一个在计算中使用的原子数据单位。片段的常见示例包括变换、速度和LOD索引。片段可按集合进行分组,此类集合的实例可以与一个ID关联。此集合的实例称为一个 实体。
实体的创建类似于面向对象编程中类的实例化。但是,实体并非严格声明一个类及其功能,而是由片段组合进行构建。这些组合可以在运行时更改。举例来说,一个实体的组合可以包括两个片段,例如一个变换和一个速度。
智能对象(试验性)
智能对象(Smart Objects) 是放置在关卡中的一组对象,供AI代理和玩家进行交互。这些对象包含该类交互所需的所有信息。

智能对象是全局数据库的一部分,使用空间分区结构。这意味着可在运行时使用过滤器对其进行查询,如位置、与代理的接近程度和标签等。
简要来说,智能对象表示关卡中的一组活动,可通过预留系统使用。
Mass避障(试验性)
Mass避障(Mass Avoidance) 是与 MassEntity 集成的基于力的避障系统。该系统为使用MassEntity系统的任何实体提供了高性能避障。

区域图(试验性)
ZoneGraph 是一个轻量级寻路/导航系统,它使用元数据来表示特定的导航流(交通车道、人行道、木栈道等),而非专注于世界物理表示的寻路网格体。元数据由通过段连接的点对点通道结构表示。


该系统可用于AI代理的高效、长距离导航。你还可以直接在关卡中指定特定的导航流,以便对关卡中的代理导航进行高级控制。
状态树(试验性)
StateTree 是虚幻引擎的可扩展的通用分层状态机,可将行为树中的 选择器 与状态机中的 状态 和 转换 相结合。用户可以创建灵活有序的高性能逻辑。

StateTree包含以树结构排列的状态。可在树中的任何位置(从根出发)触发状态选择。在选择过程中,每个状态的 输入条件 都会被评估,如果通过,则选择前进到该状态的子状态。
选择一个状态将激活从叶状态到根状态的所有状态。每个状态由 求值器(Evaluators)、任务(Task) 和 转换(Transitions) 组成。
物理系统
默认情况下,将启用Chaos物理系统
虚幻引擎5中的Chaos物理系统提供了高度可定制的轻量级物理模拟解决方案,这是一个全新构建的系统,用于满足次世代游戏的需求。

该系统包括以下主要功能:
- 刚体动力学和布娃娃物理
- 刚体动画节点和布料物理
- 破坏
- 载具
- 物理场
- 流体模拟
- 毛发模拟
Chaos物理系统取代了旧版物理系统,推出了一系列重要的新功能,例如:异步物理模拟、完备的破坏系统、物理场以及流体模拟。此外,它还完全支持双精度世界。
Chaos破坏系统

Chaos破坏(Chaos Destruction) 系统是一个工具集,可用于实现电影质量级别的实时破坏效果。除了炫目的视觉效果,该系统也在性能方面进行了优化,并通过使用直观的非线性工作流和称为几何体集合(Geometry Collections)的新资产类型,使美术师和设计师能够更好地控制内容创建和破裂效果。
用户使用预破裂几何体来构造模拟资产,并在模拟过程中利用动态生成的刚性约束对结构连接进行建模。模拟过程中生成的对象可以根据与环境元素的交互(例如物理场和碰撞)与连接结构分离。
此外,Chaos破坏系统还提供了一个新的缓存系统,可在运行时流畅地重新播放复杂的破坏效果,并能最大程度降低对性能影响。
Chaos破坏系统可轻松与其他虚幻引擎系统(如Niagara和混音器)集成,从而在模拟过程中生成粒子或播放特定声音。
Chaos载具

Chaos载具(Chaos Vehicles)是虚幻引擎5的新载具物理系统的一部分。
Chaos载具可支持任意数量的车轮,从两轮摩托车到有六个、八个甚至更多车轮的车辆。此外,该系统支持任意数量的前进档和倒档配置。
你可以为Chaos载具配置任意数量的翼面,可用于在车身特定位置提供下压力或升力。这些表面可以模拟载具扰流板,甚至飞机机翼。
你可以添加许多简单化的力,以提供对载具底盘的更直接的控制。常见的例子包括施加直接扭矩以保持摩托车直立,或直接控制直升机的俯仰或滚动。
载具变形

随着黑客帝国觉醒:虚幻引擎5体验体验的发布,Chaos载具展示了一个强大的变形系统,该系统可以与Chaos载具结合使用,在车辆受到损坏时产生逼真的变形。
这个新的变形系统将ControlRig与Chaos载具(Chaos Vehicle)系统的改进相结合,为每个载具创建独特的变形。每次动态碰撞都是通过利用载具的行驶动力学和修改载具的质心来实现的。
该系统通过使用放置在载具周围的几个物理对象来检测碰撞。UE5中引入的约束塑性(Constraint plasticity)功能允许在越过指定阈值后使物理约束永久变形。
虚幻引擎5支持通过蓝图来查询和修改约束属性,因此能够以更精细的方式操控变形。设计师还可以在游戏过程中激活和停用某个包含动态物理对象的层级,进而可以启用或禁用物理模拟中的某些部分以提高性能。
你可以从虚幻商城下载免费演示来测试该系统并了解更多信息。
Chaos布料模拟

Chaos布料(Chaos Cloth)系统具有一组全新的参数和用户功能选项,使用户能够轻松创建和管理各种外观以满足布料模拟需求。
Chaos布料系统通过增加每个布料的碰撞支持(>32)、调试绘制控制台变量以及新增的遮罩功能选项,使得创建高保真布料比以往更容易。此外,用户可以获得更直观的控制来可视化碰撞逆止、更有用的动画驱动以及改进的风力效果。
虚幻引擎布料系统的全新功能是使用蓝图交互器节点实现运行时更好地控制布料。我们还添加了对可用于本地化布料效果字段的支持,并且可以轻松创建世界碰撞。
物理场

物理场系统(Physics Field System) 使用户能够在运行时直接影响指定空间区域的 Chaos物理系统 的模拟。通过配置这些场,你可以通过多种方式来影响物理系统的模拟,例如对刚体和布料施加力、破坏几何体集合群集、锚定或禁用断裂的刚体,以及与刚体动画节点和布料交互。
此外,物理场系统可以与其他引擎系统进行通信,例如Niagara系统和材质系统。使用支持评估特定位置的物理场的内置函数,这些系统可以对物理场进行采样。
Niagara流体模拟
虚幻引擎5.0提供了一组对美术师友好的工具,可用于实时模拟流体效果,这其中包括各种基于GPU的模拟器、可重用模块和强大的数据结构,均可在Niagara编辑器(Niagara Editor)中使用。高级用户可以利用各种公开的参数来修改模拟,从而满足其需求。

流体模拟系统的设计目标是为可用于游戏和过场动画的实时环境生成复杂的流体效果。该系统还可用于烘焙出复杂的模拟实现纹理的图像序列视图,从而满足各种用例。
要了解有关流体模拟系统的更多信息,请从虚幻商城下载 内容示例(Content Examples) 项目并访问流体模拟文档。
异步物理模拟
在虚幻引擎5中,用户现在可以在整个引擎范围中启用更新异步物理(Tick Async Physics)。启用后,物理模拟就会在自己单独的物理线程上运行,而不是在游戏线程上运行。
在单独线程中运行物理的主要优势在于,物理模拟会以固定的更新间隔运行,从而改进模拟的确定性,并获得可预测的结果。
用户可以使用此功能对模拟进行微调,使其始终以可预测的方式运行。此功能还可以作为在网络中同步物理效果的基础,因为它能让服务器和客户端以相同频率更新物理,从而更轻松地同步结果。
Niagara
大世界坐标支持
虚幻引擎5.0支持在大世界坐标(Large World Coordinates)中工作,使用户可以在一个关卡中构建更宏大的世界。主引擎中的实现(参阅版本说明中的[#大世界坐标]小节)使用双精度数而不是浮点数作为核心数据类型。这会将32位精度提高到64位。
但在Niagara中,我们必须采用一种更经济的方法,以尽可能保持CPU和GPU上的渲染效率。因此,我们没有采用双精度,而是为世界实现了一个网格系统。用一个浮点保存Niagara系统在该网格中的位置,另一个保存该网格在世界中的位置。

因此,Niagara中采用了一个独特的设置来处理大型世界坐标。要了解更多关于大世界坐标配置Niagara的信息,请访问Niagara中的大世界坐标。
模拟阶段改进
在以前版本的虚幻引擎中,模拟阶段(Simulation Stages)是一项试验性功能。在UE5中,模拟阶段成为产品级的功能,可直接在Niagara编辑器中使用。
在Niagara堆栈中,诸如发射器更新或粒子更新这些组本身就是模拟阶段。但是,你可以根据需要添加任意数量的模拟阶段,从而获得所需的效果。模拟阶段是可以设置的阶段,你可以通过它让Niagara编辑器执行一些计算和迭代。你可以将其视为一个for循环,在其中定义是否迭代数组、2D网格、3D网格、渲染目标或一组粒子。

在Content Examples项目中,你还可以发现 Niagara_Fluids 示例大量使用了模拟阶段。某些流体发射器可能有十几个模拟阶段,甚至更多。

GPU光线追踪碰撞(试验性)
在Unreal中,你可以设置一个设置粒子系统,使用Collision模块来与关卡中的对象发生碰撞。在以前的Unreal版本中,当使用GPU发射器时,你在此模块中有多个选项。通常,大多数使用距离场(Distance Fields)选项生成环境的模拟。这是一种低成本但精度较低的解决方案。形状没有准确地描绘出来,并且当粒子离开屏幕会即刻消失。
在UE5中,我们为Collision模块添加了一个选项,以在GPU上使用光线追踪。无论发射器及其粒子在屏幕上还是离开屏幕,或是隐藏在物体后面,碰撞都会使用光线追踪来计算出准确的结果。
该计算是异步的,所以Niagara碰撞会落后一帧。此功能还需要硬件光线追踪。
要了解有关如何启用此试验性功能的更多信息,请参阅GPU光线追踪碰撞文档。
性能预算
构建游戏时,根据场景的构成,FX工作负载可能会有很大变化。有时你可能希望采取措施来帮助管理性能,例如剔除超出特定范围的实例,或剔除超出预算使用量的实例。
性能预算是在效果类型(Effect Types)中配置的。效果类型资产允许一次性配置大量设置并应用于一系列Niagara效果。这些选项均可在标题 预算缩放(Budget Scaling) 下找到。有关更多信息,请参阅性能预算文档。

Cascade转换器
Cascade到Niagara转换器可将Cascade资产迁移到Niagara。还可以通过右键单击Cascade资产并选择 转换为Niagara系统(Convert to Niagara System) 选项进行访问。
我们对其内部进行了改进,从而改进了转换的工作方式,例如:
- 现在,Niagara脚本会自动按照依赖顺序进行排列。这意味着用户将不再需要手动修复模块的顺序。
- 光源渲染器(Light Renderer)转换已得到改进。
- Cascade Shape模块现在转换为新的Niagara Shape Location 模块。
模块更改
在此版本虚幻引擎中,有几个模块发生了变化或增加了内容。
形状位置
Box、Sphere、Cylinder和Torus Location模块已废弃。这些模块将由功能全面的 形状位置(Shape Location) 模块所取代。在此模块中,你可以选择所需的形状,设置会相应调整。我们还添加了两个额外的形状:环/圆盘(Ring / Disc) 和 锥体(Cone)。

添加速度
Add Velocity in Point、Add Linear Velocity和Add Velocity in Cone模块现已废弃。这些模块将由功能全面的"添加速度(Add Velocity)"模块所取代。在此模块中,你可以选择添加速度的模式,设置将相应调整。

更新网格体方向
Orient Mesh to Vector、Flight Orientation和Pure Roll Orientation模块现已废弃。它们已合并到"更新网格体方向(Update Mesh Orientation)"模块中。在此模块中,你可以选择所需的网格体的方向,设置会相应调整。

默认情况下,"更新网格体方向(Update Mesh Orientation)"模块设置为"旋转速度(Rotation Rate)",与之前的"更新网格体方向(Update Mesh Orientation)"模块相同。
初始化粒子
在以前的版本中有两个模块:初始化粒子(Initialize Particle) 和 初始化条带(Initialize Ribbon)。现在,条带功能已合并到 初始化粒子(Initialize Particle) 中。

静态变量
针对自行创建自定义模块的用户,Niagara脚本编辑器中添加了一项新功能,称为"静态变量(static variable)"。静态变量是指包含编译后不会改变的信息的变量。它们可用于保存特定的信息,你可能要对这些信息进行数学运算或通过堆栈中的多个模块传播。
要创建新的静态变量,可单击"参数(Parameters)"窗口中的加号(+)。你可以从"参数(Parameters)"面板创建两种类型的静态变量:Static bool和Static int32。你可以看到一个带有红色S的静态变量。

静态变量可用于在发射器中一次性设置某些选项,然后在不同的模拟阶段使用这些选项。

静态变量的另一个用途是驱动模块中的"静态开关(Static Switch)"。这对于需要设置许多高级选项的复杂发射器特别有用。通常,这些选项是通过在模块脚本中使用"静态开关(Static Switch)"创建的。这使你可以根据选择的选项在用户界面中显示和隐藏元素。
在静态开关节点上,你将看到"公开为引脚(Expose as Pin)"选项。启用后,你可以连接静态变量。可连接的静态变量的类型取决于静态开关的类型。你可以连接Static bool、Staticint32或Static enum。

然后,当你在"选择(Selection)"面板中启用该静态变量时,静态开关将在用户界面中启用这些选项。

发射器摘要
有些Niagara系统包含许多不同的模拟阶段,会变得非常复杂,你可能很难找到经常需要调整的设置。因此,现在每个发射器的顶部都有一个区域,称为发射器摘要。通过配置,你可以将常用设置显示在此处。

要将某个参数添加到发射器摘要中,只需在模块中右键单击该参数,然后选择 在发射器摘要中显示(Show in Emitter Summary)。

GPU Spline
此前,Spline组件数据接口仅适用于CPU模拟。此功能现在也适用于GPU。
数据注册表
虚幻5.0支持数据注册表。数据注册表是一个高效全局存储空间,用于使用USTRUCT宏标记的数据结构。数据注册表支持同步和异步数据访问,包括用户定义的缓存行为。专用于处理通常仅读取的数据。
- 任务系统
我们新的任务系统(Tasks System)作业管理器提供了一个框架,允许通过构建和运行相关任务的有向无环图来异步执行用户代码。它带有一个新的通用API和系统,供开发者在多线程环境中安排任务。这个系统可以高效地将小任务分散到最佳数量的线程上。新的API使多线程设计的表达变得更加简单,并且在具有高和低核心数的目标上均可高效运行。新的Tasks Insights视图还改进了调试和优化过程。
这是虚幻引擎的作业管理器TaskGraph的改进版本。任务系统和TaskGraph使用相同的后端(调度线程和工作线程)。
Unreal Insights
Unreal Insights可识别项目中需要优化的区域。作为一个独立的分析系统,该工具自成一体,可对虚幻引擎发出的数据进行收集、分析和可视化。它简化了添加自有分析数据的过程,并具备远程记录数据的功能,从而最大限度地减少应用程序在执行期间对你的项目的影响。
Timing Insights窗口
在Timing Insights窗口中,你将看到沿CPU和GPU不同轨道的每帧性能数据。"时间(Timing)"视图中添加了一个新工具栏,将"轨道(Tracks)"下拉菜单拆分为多个菜单,你可以从中查看各种可视化显示,了解项目在各种任务上花费的时间。

快速查找
快速查找(Quick Find)控件用于搜索和过滤显示在时间视图(Timing View)中的事件。
该控件可以从时间视图上下文菜单中打开,也可以在时间视图获得焦点时使用CTRL+F快捷键打开。

快速查找控件的搜索逻辑是使用组和过滤器定义的。组节点包含子过滤器节点,并定义应用于子节点结果的逻辑。
Memory Insights
Memory Insights是一个新组件,用于调查项目中的内存使用情况和调用堆栈追踪。运行时组件会追踪运行时发生的所有分配、重新分配事件或空闲事件,然后在分析期间重建该内存的使用模式。Memory Insights时间轴支持叠加的额外轨道,例如书签、资产加载和CPU/GPU定时器。

使用Memory Insights时,开发者现在可以查看有关内存分配和释放的更多详细信息,包括在任何时间点与每个内存块关联的LLM标签和调用堆栈。

在"调查(Investigation)"面板中可以执行关于分配的不同查询。LLM标签用于控制不同LLM标签的可视性。
单独的服务器追踪进程
Unreal Trace Server作为单个服务器实例在后台运行,并可在项目的多个实例之间共享。它是一个轻量级程序,对性能的影响最小,且不含用户界面。
改进的延迟连接
在之前的Unreal Insights版本中,如果你与Insights程序的连接存在延迟,那么在你建立连接之前,任何一次性事件(重要事件)都会丢失。现在,重要事件缓存在虚幻引擎客户端,这样就会在连接期间发送到延迟连接的机器。
Task Graph Insights
Task Graph Insights提供对任务图(Task Graph)系统的分析。这包括可以查看与每个任务相关的时间事件,此外还可以查看任务依赖关系,其中会显示与嵌套任务、后续任务和时间事件的关系。

上下文切换
上下文切换(Context Switch)是一个新的追踪通道,用于显示有关CPU核心轨道的信息。每个CPU核心都有一个轨道可以显示所记录的追踪的细节,例如时间事件(显示从每个CPU线程执行的每个事件)。

用于运行时资产加载的Zen Loader
Zen Loader是虚幻引擎5.0的默认运行时加载程序,它从容器文件中加载资产。它使用在暂存阶段离线计算的优化包和对象依赖图来减少CPU开销。使用容器文件可避免文件系统抽象,并让加载程序能够使用新的I/O抽象层(称为I/O调度程序)以最小的CPU开销查找数据块。I/O调度程序使用特定于平台的后端从硬件功能和API中受益。
Zen Loader基于事件驱动的加载程序(EDL),并且需要烘焙器中的相同输出类型,例如名称表、导入/导出映射和预加载依赖项。旧版EDL运行时逻辑已离线,并会在暂存阶段生成。每当使用pak命令进行暂存时,都会使用Zen Loader而不是EDL。
其他改进包括:
- 包摘要、导出Blob、批量数据和着色器均放置在容器文件中。
- 最重要的包元数据和所有包相互依赖关系都收集到一个包存储区(按包ID建立索引)中。
- .uasset包头会转换为优化的包摘要。
- 已删除带有外链的导入映射,并替换为导出对象哈希的直接引用。
- 名称表具有新的经过优化的批处理格式。
- 预加载依赖项已扁平化为每个包的导出数据包节点,每个节点都指定了一系列
CreateExport
和SerializeExport
调用以及对其他导出数据包节点的依赖。
Common UI插件(测试版)
虚幻引擎5.0引入了 Common UI 插件,用于为开发具有复杂导航的跨平台用户界面提供支持,例如具有多个图层、弹出窗口或子菜单的用户界面。
你可以在 插件(Plugins) 菜单中启用Common UI。请注意,截至UE 5.0,此插件均视为测试版,但它已在Epic Games自有的产品(包括Fortnite)中经过广泛测试和大量使用。下面是CommonUI的工具汇总。有关如何使用这些工具的更全面信息,请参阅Common UI文档。
可激活的控件
Common Activatable Widget 类可在激活(Active)和非激活状态(Inactive)之间切换。激活控件已为接收输入准备就绪,而非激活控件则不然。此功能与隐藏或取消隐藏控件不同,因为它限制与控件的交互性但不限制可视性。它们非常适合表示可以在菜单导航中禁用和跳过的元素,例如"灰色"菜单选项。CommonButtonBase 和 CommonTabListWidgetBase 共享此功能。请注意,可激活控件(Activatable Widgets)默认处于非激活状态。
输入路由
输入路由(Input Routing) 将菜单的用户输入建模为一系列层级树。菜单通常充当根节点,而单个UI元素(例如按钮)充当叶节点。在任何给定时刻,CommonUI的输入路由都会将输入发送到一个激活的根节点,然后该根节点会相应将输入转发给其子节点。激活的根节点是当前绘制在Slate渲染层级中最高级别的节点,也就是当前在顶部渲染的菜单。

例如,如果你有两个相互重叠的菜单,则输入路由系统会将输入转到上层的菜单。此后,该菜单会将输入路由到其子项。下层的菜单将完全收不到输入,因此用户不能与该菜单的子按钮交互,直到上层菜单被移除,或者直到下层菜单移动到上层。处于非激活状态的可激活控件也会被忽略。这样会让使用游戏手柄进行导航更容易,但此功能也适用于触摸输入以及鼠标和键盘。
输入映射和平台支持

点击输入设备上的按钮将自动切换"通用动作(Common Action)"控件显示的图标。
Common UI提供了多种用于跨不同平台映射UI输入的实用工具,包括:
- UI输入动作映射(UI Input Action Mapping)– 创建输入动作数据表以将抽象UI动作映射到特定按钮。
- 每个平台的动作覆盖(Per-Platform Action Overrides)– 为特定的UI动作创建覆盖,例如在需要交换特定游戏主机上的确认和返回按钮时,便可使用此功能。
- 控制器图标管理(Controller Icon Management)– 使用特定控制器的图标集创建 控制器数据资产(Controller Data Assets),然后将它们与UI输入动作关联起来。通用动作(Common Action) 控件将根据选定的动作以及用户用于控制应用程序的任何设备来显示相应的图标。
请注意,输入动作数据表中列出的动作专门用于Common UI用户界面,并且与旧版输入或高级输入系统中用作游戏内动作的动作无关。
Common UI控件和UI样式

Common UI添加了一个新的控件库,相关控件列在虚幻示意图形的控制板中的 Common UI插件(Common UI Plugin) 分段下。其中许多是通常在大量游戏和应用程序中出现的UI功能元件。这些控件包括:
- 用于 日期/时间 和 数值 的专用文本块。
- 导航和可视性辅助工具(如 轮播 和 动画切换器)。
- 平台辅助工具(如 加载防护 和 硬件可视性边框)。
- 提供基本功能(如按钮和文本)但使用样式数据资产进行样式设置的控件。
Common UI的样式数据资产是蓝图类,其中包含通常在标准虚幻示意图形控件中出现的材质、纹理、字体和其他样式元素。Common UI的控件使用对这些资产的引用,而不是将样式数据保存在控件本身上。因此,UI设计师更容易在许多不同的菜单和HUD中创建一致的样式。
此外,你可以提供适用于任何Common UI控件新实例的全局默认样式。在 项目设置(Project Settings) > 插件(Plugins) > Common UI编辑器(Common UI Editor) 菜单中的"模板文本(Template Text)"、"模板按钮(Template Button)"和"模板边框(Template Border)"下可以找到这些选项。当为其中任何一个提供样式时,它们的更改都将传播到所有没有不同样式集的Common UI控件。
在 项目设置(Project Settings) > 插件(Plugins) > CommonUI框架(CommonUI Framework) 中,还可以选择更多专用元素的资产,包括用于加载防护的 默认动态浏览图示材质(Default Throbber Material),以及可充当UI中未加载元素的占位符图像的 默认图像资源(Default Image Resource)。
Slate和UMG性能
在虚幻引擎5.0中,我们改进了Slate和虚幻示意图形的性能。主要改进是使用了 全局无效 和 Slate属性,从而避免了每帧多次更新TAttributes。有关"Slate属性"的详细信息可以在 Engine\Source\Runtime\SlateCore\Public\Types\SlateAttribute.h 中找到。"全局无效"(在4.24版中引入)仅更新/绘制无效的控件。
现在更容易将你的项目切换到"全局无效",因为启用"全局无效"时,SlateAttribute会正确更新。出于性能原因,最好不要将SlateAttribute/Attribute用于游戏控件。默认情况下不会启用"全局无效",且一些小的SWidget仍然需要转换到新系统。
已添加多个验证功能来测试SWidget层级的完整性。从 控件反射器(Widget Reflector) 中可以启用它们。
虚拟制片

图像来自《THE EYE: CALANTHEK》,由Aaron Sims Creative提供。
虚幻引擎5.0标志着虚拟制片工作流程的新里程碑。UE 5.0继承了UE 4.27所达到的稳定性和成熟度。摄像机内VFX(In-camera-VFX)工具支持4.27的所有关键工作流程,并在UE 5.0中添加了新功能,以进一步支持舞台操作和内容制作。
视频渲染队列(Movie Render Queue)和nDisplay渲染管线中支持使用Nanite(测试版功能)进行虚拟制片。如果将此功能与GPULM或路径追踪器(Path Tracer)一起使用,则会使用Nanite后备网格体(Nanite Fallback Meshes)而不是完整细节的表面。USD的支持已从仅限关卡扩展到Sequencer,允许布局等制作工作流程在USD管线中使用虚幻引擎。
Lumen被认为是MRQ渲染管线的测试版功能,并在文档中说明了相关限制。虽然Lumen似乎可与nDisplay一起使用,但它还没有准备好用于采用VR和nDisplay渲染管线的摄像机内VFX制作以及类似工作流程。用户应注意它可能存在瑕疵或性能方面的问题。我们将继续开发Lumen,并期望在未来能够支持nDisplay和VR工作流程。
Nanite + GPULM + 路径追踪器用于摄像机内VFX
摄像机内VFX制作可以利用虚幻引擎5.0的新渲染功能,为制片人最大限度提高质量和创作自由度。借助Nanite,以前只能在后期制作领域使用的VFX样式资产现在可以实时使用,并可通过GPU Lightmass提供光照。nDisplay对路径追踪器的支持开启了光照工作流程,允许对舞台上所做的更改进行准确、实时的预览。该版本还在nDisplay中增加了全面的虚拟纹理支持,进一步强化了可用于虚拟制片内容创作的工具集。
nDisplay改进
我们继续改进了虚幻引擎5.0中的nDisplay工具,增加了对内部视锥体的过扫描支持、对故障转移的支持、nDisplay配置编辑器中的视口旋转以及对内部视锥体的过扫描支持。其他改进包括:
- 支持使用投影策略覆盖每个视口的统计数据
- 改进的蓝图API
- 视锥体可视化和内部视锥体边界可视化
- 支持程序化网格体
nDisplay各方向的内部视锥体过扫描
现在可以指定每个左/右/上/下方向的内部视锥体过扫描。对于摄像机内VFX场景,此功能可用于在特定方向上扩展内部视锥体,以适应移动摄像机的延迟,或者如果视锥体被部分遮挡,则可减小视锥体的渲染大小。可以选择自动适应它的分辨率来保持相同的视觉效果质量。

相机内VFX设置,显示内部视锥体上的边界可视化和过扫描功能。首先,不对内部视锥体应用过扫描,然后应用50%来扩展内部视锥体的右侧,最后对整个内视锥体应用1.25乘数。
输出映射中的视口旋转
以前,要将变换操作应用于nDisplay视口,你必须提供具有自定义UV贴图的静态网格体或外部.obj文件。你现在可以直接在nDisplay配置编辑器的输出映射(Output Mapping)面板中将变换操作(如旋转和缩放)应用于视口。

故障转移支持
现在,你可以为nDisplay群集启用故障转移策略。目前可用的故障转移策略是 故障时删除S节点(Drop S-node on fail),即如果某个辅助节点断开连接或超出网络超时设置,则会从群集中删除该节点。一旦故障节点被删除,群集便在没有故障节点的情况下继续运行。如果主节点被删除,群集仍将终止。
新的控制台变量编辑器插件(测试版)
控制台变量编辑器(Console Variables Editor) 是一个面板,显示有关项目中设置的所有控制台变量和命令的信息,并提供了一个查看和修改所有变量的中心位置。你可以创建预设,在多个项目中使用相同的控制台变量和值。控制台变量编辑器还支持在多用户会话中跨多台计算机对控制台变量和命令进行控制。

新的OpenCV插件(测试版)
在以前的版本中,OpenCV包含在虚拟制片工具集中。在这个版本中,它现在是一个独立的插件。该插件使用OpenCV版本4.5.5,并添加了新的蓝图节点,例如用于ArUco标识追踪和棋盘追踪。
远程控制改进
我们添加了一些方法来减少在新场景中设置远程控制预设(Remote Control Preset)和Web应用程序所花费的时间:
- 重新绑定: 现在你可以打开之前创建的远程控制预设(Remote Control Preset)并将其重新绑定到新场景中的Actor以重新链接功能按钮。
- 模板: 当你想要多个具有相似控件的Actor实例时,你现在可以在远程控制Web应用程序中将一组功能选项设置为Actor的模板。在Web应用程序中切换Actor实例以使用该实例上的功能选项。
相机镜头校准的改进
在此版本中,我们评估了两种用于校准镜头畸变和节点偏移的新算法,并对镜头校准过程进行了改进,包括:
- 校准镜头后手动调整图像中心。
- 在镜头文件资源编辑器(Lens File Asset Editor)的视口中添加覆盖,例如十字准线。
- 使用一种新算法校准节点偏移,该算法可找到镜头的光轴和入瞳位置。
- 使用新算法校准镜头畸变,你可以手动捕获一组3D-2D点对应关系。
- 镜头信息现在自动保存到镜头文件中。
- 以JSON格式导入和导出到ulens文件
DMX改进
我们继续改进了DMX工具集,包括:
- 使用Take Recorder显著提高了DMX轨道的保存速度。
- 输出端口可以延迟。
- 输出端口现在支持许多的单播地址。
- 输出端口每秒重新发送一次未更改的数据。
- 可在Fixture类型中分配矩阵。
- 增加了对GDTF标准的支持。

关卡快照的改进
我们为 关卡快照(Level Snapshots) 插件添加了对以下功能的支持:
- 删除了 用于nDisplay的关卡快照(Level Snapshots for nDisplay) 插件,并为 关卡快照(Level Snapshots) 插件添加了nDisplay支持。
- 添加了对植被的支持。
- 现在,可以从关卡快照中恢复父/子关系和组件。
- 提高了保存和加载关卡快照的性能。
Switchboard的改进
此版本中,我们专注于改善Switchboard的用户体验,包括:
- 改进了主Switchboard窗口和"设置(Settings)"窗口中的UX。
- 现在可以在主Switchboard窗口的底部访问多用户服务器,并添加用于控制多用户会话的操作。
- 你可以在节点启动时启用Unreal Insight收集。
- 现在可以从Switchboard以zip文件的形式收集日志。
Sequencer播放列表
使用新的 Sequencer播放列表(Sequencer Playlist) 功能,可动态实现关卡序列的准备、排队和触发。在与虚拟制片、广播和现场活动阶段的动画内容交互时,回放列表提供了更高的灵活性和敏捷性,无需提前为在编辑器中回放的所有子序列预先设置时间。
Sequencer播放列表包括以下功能:
- 对关卡序列单独或全部同时播放和停止。
- 回放时对序列进行修剪、循环和时间缩放。
- 根据需要对关卡序列静音,以跳过指定剪辑片段的回放。
- 无限保持序列的第一帧进行预演和对齐。
- 使用Take Recorder录制由回放列表触发的动画,以捕获实时回放以进行发布。

通用场景描述(USD)改进
Epic Games持续扩大对 通用场景描述(USD) 的支持。虚幻引擎5对USD进行了多项改进,重点是改进导入/导出流程以及扩大USD对Nanite和Sequencer等功能的支持。
USD舞台支持Nanite
虚幻引擎5新增的Nanite虚拟化微多边形几何体系统可与USD舞台Actor搭配使用。因此,可以导入由数百万多边形构成的电影级品质的源美术资产,并且3D美术师无需像以前一样创建其资产的高分辨率和低分辨率版本。
用户可以通过将Nanite标签添加到USD文件中的USD资产来为资产启用Nanite。或者,用户可以在USD舞台的设置中提供一个阈值。
其他USD改进
在此版本中,USD导入和导出管线继续得到改进:
- 虚幻引擎现在使用USD SDK版本21.08
- Sequencer现在将动画序列导出为USD文件格式
- 现在可从内容抽屉将静态网格体资产导出为USD
- 虚幻引擎关卡现在可以包含多个USD舞台资产
开发者工具
实时编码
虚幻引擎使用Live++集成支持 实时编码(Live Coding)。此功能在UE 4.22中作为试验性功能引入,现在默认针对5.0中的所有项目都会启用。
虚幻引擎现在使用Live++集成支持 实时编码(Live Coding)。使用实时编码,你可以在引擎运行时重新编译你的C++代码并修补项目的二进制文件,即使在使用"在编辑器中运行(PIE)"时也可以实现。与之前版本的热重载(Hot Reload)系统相比,实时编码提供了明显更快的迭代时间和更大的灵活性,因此默认启用。但是,你可以将其禁用,改用热重载系统。
在IDE中编辑C++代码时,会自动出现 实时编码控制台(Live Coding Console) 。

实时编码控制台提供了编译状态的输出日志。这与标准输出日志是分开的,并且只会显示实时编码构建信息。
每当你位于IDE或虚幻编辑器中时,按 Ctrl + Alt + F11 将重新构建代码并修补游戏的二进制文件。屏幕右下角将显示一条通知,显示构建的状态。在构建运行期间,你可以继续在编辑器中工作,项目测试也不会中断。

如果构建成功,你将立即看到根据你的代码所做的更改。当虚幻编辑器打开、使用PIE以及附加到本地桌面环境中的打包版本时,实时编码将启用。在主机和移动设备上启动时,实时编码则不启用。
请注意,当更改变量的默认值时,由.cpp实现的构造函数中设置的值不会在对象的现有实例中更新。但是,如果你在.h文件中更改默认值,则会看到更改生效。
实时编码本身会轻松处理少量的代码调整,例如值的更改和函数调整。但是,如果你在未启用 对象重新实例化(Object Reinstancing) 的情况下将其用于大规模的结构更改,它可能会出现不可预测的行为并导致崩溃。有关更多信息,请参阅下面有关对象重新实例化的说明。
对象重新实例化
对象重新实例化在使用实时编码或热重载重建C++代码后重新生成对象实例。它会影响与以下任何UE类型关联的对象:
- UCLASS
- UENUM
- USTRUCT
- UDELEGATE
- UFUNCTION
这包括:Actor和UObject实例本身、从相关变量派生的蓝图节点实例,以及虚幻反射系统使用这些宏时创建的其他对象。
热重载和实时编码默认使用对象重新实例化。你可以通过切换 启用重新实例化(Enable Reinstancing) 选项来禁用实时编码,该选项位于 编辑器偏好设置(Editor Preferences) > 通用(General) > 实时编码(Live Coding)。

启用此功能可大大提高实时编码在处理大规模代码更改时的稳定性和一致性。但是,如果你的代码含有指向可重新实例化对象的指针,则需要使用ReloadReinstancingCompleteDelegate和ReloadCompleteDelegate来更新这些指针,或者使缓存无效,以便之后可以重新填充缓存。在重新实例化的对象出现解引用问题时,热重载容错性更好一些;而对于实时编码而言,由于这会与重新实例化对象的析构函数冲突,在编辑器关闭时会导致崩溃。
Clang检测工具支持
在虚幻引擎5.0中,虚幻编译工具(Unreal Build Tool)支持Clang针对Linux和Android平台的 检测工具(Sanitizer)。这些检测工具可以对C++源代码执行快速分析,以查找通常必须在运行时发现的特定类型的错误,例如尝试访问未初始化的内存、竞争条件和内存泄漏。你可以通过一系列新的UBT参数使用以下检测工具:
检测工具 | UBT命令 | 描述 |
---|---|---|
地址检测工具(ASan) | -EnableASan | 检测各种内存访问问题,包括越界访问错误和内存泄漏。 |
HWASan(仅限Android) | -EnableHWASan | 适用于Android的硬件加速版ASan。应减少20-30%的内存使用量。 |
线程检测工具(TSan)(不适用于Android) | -EnableTSan | 检测线程问题,例如竞争条件和ADA问题。 |
不明行为检测工具(UBSan) | -EnableUBSan | 检测被C++识别为不明行为的任何问题,例如越界错误、整数溢出或未初始化内存。 |
MinUBSan(仅限Android) | -EnableMinUBSan | 适用于Android的简约版UBSan。 |
内存检测工具(MSan)(仅限Linux) | -EnableMSan | 检测尝试读取未初始化内存的情况。 |
要使用这些检测工具,请使用UBT命令为所需的检测工具运行虚幻编译工具,然后检测工具将链接到最终可执行文件中。例如,以下命令会将ASan链接到你的项目中:
Build\BatchFiles\Build.bat MyGame Android Development -WaitMutex -FromMsBuild -EnableASan
然后,在运行应用程序时,你将在日志中看到检测工具的错误检测输出。要在Visual Studio中使用它们,请打开项目的 属性(Properties),然后将相应参数添加到 NMake > 生成命令行(Build Command Line)。请注意,所有这些检测工具通常都会将它们所检测的程序减慢到原来的1/2-1/3。
有关Clang检测工具的更多信息,请参阅Clang的文档,其中包含关于这些工具的详尽信息。
RAD Game Tools
Bink Audio
RAD Game Tools开发的Bink Audio编码解码器现已内置于虚幻引擎5!Bink Audio是一种多平台、高度优化且内存高效的通用音频编码。只需选中"格式(Format)"标题下的复选框即可在你的SoundWave资产上启用。
Turnkey平台自动化系统
Turnkey 是 虚幻自动化工具(Unreal Automation Tool,UAT) 中的一个新系统,可简化平台支持,其中包括SDK安装和将构建部署到设备。Turnkey的目标是为组织内的大多数用户提供一个流程,将此类常见操作合并为一个简单的"一键式"流程。
Turnkey的大部分选项都可以在 虚幻编辑器 的 平台(Platforms) 菜单中找到。

从此处可以检查已安装的SDK,并可以安装新的SDK或更新现有的SDK。今后,此菜单将取代 文件(File) > 打包项目(Package Project) 选项和 项目启动程序(Project Launcher),将虚幻编辑器中的所有构建管理选项集中到一处。设备管理器仍用于发现和确认设备,而使用 快速启动(Quick Launch) 选项快速将你的构建部署到指定设备。
通过运行RunUAT.bat Turnkey,你还可以从命令行界面访问Turnkey。这会显示一个命令行菜单,不过,Turnkey中的任何选项都可以在初始调用.bat文件时作为参数指定。例如,RunUAT Turnkey -command=ExecuteBuild -platform=Win64
将为Windows构建你的项目。"平台(Platforms)"菜单中的选项只是针对不同平台和配置的预编写脚本命令。

虽然Turnkey可用于管理构建和设备,但其最强大的功能是自动化SDK安装。许多平台经常更新其SDK,但任何给定版本的虚幻引擎仅与发布时的特定SDK版本兼容。这会使开发者难以确定他们应该使用哪些SDK,尤其是在使用不同版本的虚幻引擎制作多个项目时更是如此。而且,也很难确保组织内的每个成员在升级时始终保持最新状态。Turnkey通过自动获取和安装适用于你当前版本的虚幻引擎的最佳可用SDK来简化此过程。
要将此功能用于桌面和主机,你的组织需要将SDK文件托管在可访问的位置。Turnkey支持Perforce、Google Drive或本地文件路径来托管这些SDK文件,并且你可以设置规则来指定查找位置,以及你的组织中有哪些平台可以使用SDK。
Turnkey支持桌面平台和主机以及Android。有关更多信息,请参阅移动平台的Turnkey支持。有关设置和使用Turnkey的完整文档,请参阅移动平台的Turnkey支持。
移动平台
开发要求和兼容硬件
以下是虚幻引擎5.0支持的移动设备所支持的操作系统版本和最低硬件要求。有关所需SDK和IDE的更多信息,请参阅平台SDK升级部分。
iOS、iPad OS和tvOS
UE 5.0支持iOS、iPadOS和tvOS设备,其各自的SDK支持版本14或更高版本,并使用Apple A8处理器或更高版本。以下是最低兼容设备型号:
- iOS 14
- iPhone 6S或更新机型
- iPod Touch第7代
- iPadOS 14
- iPad 5代或更新机型
- iPad Air 2或更新机型
- iPad Mini 4或更新机型
- iPad Pro(所有型号)
- tvOS 14
- Apple TV HD
- Apple TV 4K(第一代)
- Apple TV 4K(第二代)
Android
UE 5.0支持符合以下规格Android设备:
- Android 8或更高版本
- 基于64位ARM的CPU
- 兼容的GPU
- Mali T8xx、G71、G72、G76、G77、G78和G710系列
- Adreno 5xx、6xx或7xx系列
- PowerVR GM9xxx
- Xclipse 920
- 兼容的图形API
- OpenGL ES 3.2
- Android 10或更高版本的设备(具有兼容驱动程序)支持的Vulkan
移动平台的Turnkey支持
当你使用Turnkey设置 Android SDK 时,Turnkey将自动执行大部分设置步骤,包括下载所需版本的Android Studio并运行其他设置步骤和脚本。虽然你仍然需要手动运行安装向导,但这减少了许多出错的可能性。手动SDK设置仍然可用,但建议使用此流程。
Turnkey目前在适用于Android的macOSX上不可用,但将在以后的版本中提供这一支持。
由于iOS、tvOS和iPadOS的配置有严格的控制,Turnkey尚不支持iOS的任何自动设置。但是,它支持Xcode设置和SDK检查。
Android文件服务器插件
UE 5.0引入了 Android文件服务器(Android File Server,AFS) 插件,它可以在编译时将文件服务器嵌入到项目中。默认情况下,在发布版本中会禁用嵌入操作。你可与设备的AFS实例进行通信来进行以下操作:
- 通过WiFi、USB或同时使用这两者来推送文件,进而提高安装速度
- 直接更改命令行文本文件,无需推送完整的构建版本
- 显示设备上任何文本文件的内容
- 执行ADB中可用的许多其他操作
AFS提供了一种无需外部存储权限或作用域存储(Scoped Storage)即可处理文件操作的方法。默认会启用AFS,但如果你想改用ADB,则可以在 项目设置(Project Settings) > 插件(Plugins) > AndroidFileServer 中禁用AFS。

启用该插件后,开发和调试版本将使用AFS将文件推送到Android设备。你可以使用USB连接或通过WiFi将文件推送到已连接局域网的设备。为了加快部署,也可以使用 USB和网络组合(USB and Network Combined) 同时通过这两种连接方式推送文件。每当一条连接正在传输一个文件或一批文件时,另一条连接将接替这条连接。此功能会融入部署过程。
AFS也有自己的命令行工具,你可以在引擎的安装目录中的Engine/Binaries/DotNET/Android/UnrealAndroidFileTool下找到它。此目录包含适用于Linux、MacOS和Windows的可执行文件版本。

通过命令行运行这个可执行文件时,将显示一个包含所有可用函数的菜单。

如果将help命令与一些带参数的命令添加到一起,它将输出有关该命令的更多信息。
最后,可以使用蓝图库从虚幻应用程序内部启动和停止AFS。

虽然AFS可以使用为项目生成的唯一安全令牌来实现基本安全性(请参阅"项目设置"菜单中的"安全令牌(Security Token)"参数),但相较于使用默认广播接收器,使用这种方式可以更安全地启动和停止AFS。
请注意,Android文件服务器需要Android SDK 26或更高版本。
Android二进制文件大小的改进
在UE 5.0中,我们引入了许多优化,显著降低了Android应用程序的二进制大小。这些优化包括用于启用无用代码消除、相同代码折叠和代码膨胀清理的编译器和连接器标记。这些优化将Fortnite的二进制文件大小减小了大约50%。此外,这些优化还可以略微提高代码效率。
还有一组必须手动激活的高级二进制文件优化,它们仅适用于最低Android SDK版本23或更高版本。
你可以在*Engine.ini文件中更改最低SDK版本:
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
MinSDKVersion=23
要启用高级优化,请添加以下设置:
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
bEnableAdvancedBinaryCompression = true
使用SDK 23或更高版本的项目将使用新的GNU哈希ELF部分而不是旧格式,从而提供更好的性能。除此之外,你的项目还将利用 APS重定位表压缩(APS relocation table compression),这是一种Android特有的压缩格式。例如,在我们的测试中,大小为62 MB的重定位表可减少到约8MB。
对于使用不低于SDK 28版本的项目,可利用 RELR重定位表压缩,它甚至比APS更高效。这会使二进制大小减少约两个数量级。例如,我们的62 MB表减少到大约600KB。
将MinSDKVersion升级到23或更高版本还有另一个好处:Android操作系统现在能够直接从应用程序的APK加载.so二进制文件,无需解压后再安装到设备上。
通过Google Play商店发布的项目将从中受益,因为商店可以在用户下载你的应用程序时提供更好的动态APK压缩。但是,不保证在其他应用商店中也是如此。虚幻引擎默认强制执行APK压缩。如果要禁用,可以使用以下配置变量执行此操作:
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
bExtractNativeLibs = false
DXC成为虚幻引擎5.0 Vulkan和GLES 3.2的默认选择
在UE5中,我们将Vulkan和OpenGL ES3.2的着色器编译器工具链从HLSLcc改为Microsoft的 DirectX Shader Compiler (DXC)。该编译器直接生成SPIR-V,无需生成GLSL高级源来提高性能,它使用SPIRV-Tools优化通道来生成高效的SPIR-V代码。DXC还提供了对最新HLSL语言功能的访问,你可以通过庞大的在线社区获得支持,其中包括来自Microsoft、Google和AMD的开发者。
对于Vulkan,DXC是UE 5.0中唯一可用的着色器编译器。HLSLcc编译器已从Vulkan后端完全删除,不再可用。
对于OpenGL ES3.2,HLSLcc仍可作为备用方案,它在禁用模拟统一缓冲区时提供了唯一支持OpenGL ES的方法。
移动渲染的改进
UE 5.0的移动渲染管线中提供以下渲染功能:
预集成次表面散射着色模型(测试版)

从左到右:无SSS,在PC上启用了SSS,在移动平台上启用了SSS。
Mobile Forward渲染器现在支持 次表面轮廓(Subsurface Profile) 着色模型,使移动应用程序能够以更详细的细节和光照精度来表示皮肤、蜡和塑料等材质。为提高效率,漫反射配置文件已预集成为查找表,你可以在运行时对其进行调整。移动平台的次表面模型需要曲率贴图,但除此之外,与桌面平台和游戏主机上用于次表面轮廓的所有相同参数均兼容。
距离场阴影支持(试验性)

在UE 5.0中,移动渲染器支持 距离场阴影。在具有动态光照的移动项目中,启用此功能可提供距离场阴影以及级联阴影贴图。级联阴影贴图为靠近相机的对象提供阴影,而距离场阴影将填充距离相机较远的阴影。对于需要动态光照且渲染阴影的距离超出了级联阴影贴图允许范围的游戏,这非常有用。
距离场阴影在大多数移动硬件上都是试验性的。要使用距离场阴影,请在Engine/Config/Android或Engine/Config/IOS下找到DataDrivenPlatform.ini。然后,在相应的[ShaderPlatform ...]部分中,将bSupportsMobileDistanceField、bSupportsDistanceFields和bSupportsByteBufferComputeShaders设置为true,并将r.DistanceFieldShadowing设置为1。之后,只需在关卡中的光源上启用距离场阴影即可。
请注意,距离场阴影需要深度预通道,这将使你的绘制调用数量大致翻倍。这会对移动游戏的性能产生严重影响,因此你应该在目标硬件上进行性能测试,然后再确定是否在你的游戏中使用。
移动平台性能改进
在UE 5.0中,移动渲染管线具有多项优化,旨在减少渲染通道中的绘制调用和计算量。
级联阴影贴图缓存(试验性)
对于严重依赖动态光照的大型世界,由于要在较长的绘制距离上生成多达数百个静态网格体物体的动态阴影,其渲染性能可能开销很大。这在移动设备上尤其难以承担。虚幻引擎5.0提供了一个用于缓存静态网格体物体的级联阴影贴图(Cascaded Shadow Maps,CSM) 的系统,可节省绘制调用并潜在提高这些环境中的性能。要使用此功能,请通过"项目设置(Project Settings)"菜单启用 启用CSM缓存(Enable CSM Caching) 设置并重新启动虚幻编辑器。
此功能是试验性的,并不保证性能会得到改善。虽然CSM缓存确实节省了绘制调用,但也添加了一个阴影贴图复制通道,从而增加了带宽成本。你应始终对目标硬件进行比较,以确定CSM缓存是否有助于你的项目。
SkinCache
移动项目现在支持 SkinCache,它会在帧开始时预计算一次骨骼网格体蒙皮,然后将该计算重用于同一帧内的不同渲染通道。对于使用大量骨骼网格体的移动项目,可以显著提高性能。
默认情况下,所有平台上都禁用SkinCache。若要启用,请打开"项目设置(Project Settings)"并启用 支持计算蒙皮缓存(Support Compute Skin Cache)。
GPU场景实例化和剔除的改进
在UE 5.0中,我们改进了移动设备上的动态实例化和GPU实例剔除。GPU场景实例化和剔除可以显著减少项目的绘制调用,从而提高渲染性能。效率方面收效将取决于你的项目内容。使用大量具有相同材质的网格体的项目,将最大程度受益于此功能的启用。
默认情况下,移动平台上禁用GPU场景实例化和剔除。若要启用,请打开DefaultEngine.ini,找到或添加 [/Script/Engine.RendererSettings] 类目,然后添加r.Mobile.SupportGPUScene=1。
XR
Vulkan支持可变速率着色
可变速率着色(VRS) 是较新的GPU才支持的功能,它提供各种方法来调整渲染目标中像素的着色速率。
当前,虚幻引擎中对VRS的支持包括:
- 支持DirectX 12和VRS Tier 2的Windows设备
- 支持Vulkan和VK_KHR_fragment_shading_rate扩展的Windows设备
- 支持Vulkan和VK_EXT_fragment_density_map扩展的Oculus Quest
VR模板更新
在此版本中,我们使用以下功能改进了VR模板:
- VR Pawn具有头戴式显示(Head-Mounted Display)模型。
- 抓取系统(Grab System)支持组件抓取和放置。
- VRSpectator可以使用游戏手柄进行控制。
Datasmith
编辑器中的Direct Link
虚幻引擎5在虚幻编辑器中添加了对Datasmith Direct Link的支持。使用Direct Link可以在虚幻编辑器中实时可视化对外部设计应用程序(Revit、Rhino、Archicad以及任何其他支持Datasmith与Direct Link的设计应用程序)中场景所做的更改。
此功能可以简化你的工作流程,无需再进行耗时的导出和重新导入操作,因此你可以集中精力创建令人惊叹的建筑可视化项目。
Direct Link的行为与Datasmith文件导入/重新导入工作流程相同:
- 创建与*.udatasmith文件中的资产相同的资产类型(材质、静态网格体、光源、摄像机等)
- 如果未使用的资产从设计应用程序中消失,不会清除这些资产
- 支持元数据
- 支持对Actor和资产的Datasmith覆盖
数据格式
我们继续改进对于将glTF文件导入虚幻引擎的支持。在此版本中,我们为glTF导入器(glTF Importer)插件添加了对以下PBR模式的支持:
- 透明涂层(Clearcoat)
- IOR
- 光泽(Sheen)
- 高光度(Specular)
Datasmith CAD导入器已进行重大更新。虽然用户界面和工作流程相似,但导入结果与以前版本的虚幻引擎相比会有所不同。
现在可以在JT文件内指定是否导入参数数据或网格体。这样就可以更好地控制将哪些数据导入虚幻引擎,并拥有更大的灵活性。
此选项通过ds.CADTranslator.PreferJtFileEmbeddedTessellation控制台变量公开。
你可以使用ds.CADTranslator.SitchingTolerance控制台变量调整Heal和Sew拼接技术的拼接容差。该值采用虚幻单位。
Solidworks
我们扩展了可以使用Datasmith从Solidworks导出到虚幻引擎的功能范围。这样可以在将Solidworks项目导出到*.udatasmith文件时获得更高的保真度。
在虚幻引擎5中,我们添加了对导出以下Solidworks功能的支持:
- 在SolidWorks中创作的动画现在可以作为关卡序列(Level Sequences)导入
- 现在可以将配置作为关卡变体集(Level Variant Sets)导入
Revit
在此版本中,我们提升了用户的控制力,让用户可以更准确地控制从Revit导出到*.udatasmith文件的数据或通过Direct Link导出的数据。这样可以减少执行手动调整的必要,并尽可能避免在导入或重新导入Revit场景后从虚幻项目中修剪不需要的数据和资产。
现在可以配置下列附加选项:
- 元数据过滤(Metadata Filtering):指定要导出的元数据。
- 曲面细分级别(Level of Tessellation):指定Revit创建网格体时使用的曲面细分级别,由Revit API定义。
神经网络推理
神经网络推理(Neural Network Inference,NNI)插件是一个用于在虚幻引擎中实时评估神经网络的新插件。此插件提供了基于机器学习的机器学习变形器(ML Deformer)系统等功能。这个系统允许通过ML网络压缩分辨率非常高的顶点偏移数据并进行实时回放。许多用于攻克开发难题(包括动画、基于ML的AI、摄像机跟踪等等)的基于ML的方法均以此系统为基础。
NNI支持行业标准ONNX模型格式,可以运行从标准ML训练框架(PyTorch、TensorFlow、MXNet等)以ONNX格式导出的任何模型。因此,用户能够获取任何来源的ML模型,然后直接在引擎中运行它们。该团队与Microsoft密切合作,使用他们的ONNX Runtime项目作为NNI插件的推理系统的核心。
此插件的初始版本在PC(Windows/Linux/Mac)和游戏主机(PS5/Xbox Series X)上支持CPU推理。目前,只有Windows DirectX 12支持GPU评估。
平台SDK升级
在每个版本中,我们都会更新引擎以支持来自平台合作伙伴的最新SDK版本。

- Windows
- Visual Studio 2019 v16.11.5
- Windows SDK 10.0.18362
- .NET 4.6.2目标包
- .NET Core 3.1运行时
- Build farm编译针对的IDE版本
- Visual Studio - Visual Studio 2019 v16.11.5工具链(14.16.27023)和Windows 10 SDK(10.0.18362.0)
- Xcode - Xcode 12.4
- GDK
- Windows SDK:10.0.19041.0
- GDK:2021年10月更新1
- 固件版本:Recovery November 2021 QFE1 10.0.22000.3055
- 支持的IDE:Visual Studio 2019
- Android
- Android Studio 4.0
- Android NDK r21e
- 最低Android SDK版本23
- Android SDK 26(Android 8.0)(如果使用Android文件服务器)
- ARCore
- 1.22
- ARKit
- 4.0
- Linux "SDK"(跨工具链)
- 基于v19 clang-11.0.1(CentOS 7)
- Oculus
- 27.0
- OpenXR
- 1.0.22
- Google Stadia
- 1.71.0.24334
- Steam
- 1.47
- SteamVR
- 1.5.17
- Switch
- SDK 13.3.0 + 可选NEX 4.6.6
- 最低固件版本:13.2.1
- Nintendo Dev Interface 2.5.4
- 支持的IDE:Visual Studio 2019
- PS4
- Orbis SDK 9.008.001
- 系统软件:
- 9.030.001
- 9.040.001
- 支持的IDE:Visual Studio 2019
- PS5
- Prospero SDK 4.00.00.31
- 系统软件:
- 4.50.00.05
- 4.51.00.01
- 支持的IDE:Visual Studio 2019
- macOS
- 推荐
- macOS最新的Monterey,最新的Xcode 12
- 支持
- macOS Big Sur 11.6.4
- 最低
- macOS Catalina 10.15.7、Xcode 12.4
- 机器架构注释
- 为macOS目标添加了对原生Apple Silicon的初步支持*****
- 某些SDK尚不包含ARM64 slice(例如Steam、Vivox)。
- 推荐
- iOS / tvOS / iPadOS
- 推荐
- 最新的Xcode 13
- 最低
- Xcode 12.4。请注意,为了使用iOS 15设备进行本地测试,需要Xcode 13。
- 支持的目标SDK版本:iOS 14或更高
- 推荐
升级说明
Physics
- 在UE5中,不支持将PhysX作为后端物理解算方案。UE5提供了全新的车辆和破坏系统,并且无法向上兼容UE4的PhysXVehicles和ApexDestruction。
XR
- 虚幻引擎5中不包含Magic Leap插件。如果虚幻项目的目标设备是Magic Leap设备,应继续使用虚幻引擎4.27。
- HoloLens插件及其所有功能已完全集成到虚幻引擎5.0中。因此,不再需要HoloLens插件,你无法将其添加到项目中。如果你现有的项目使用了HoloLens插件,在升级到UE5后首次打开项目时,虚幻引擎5.0会提示你删除插件的配置数据。
版本说明
AI
Improvement:
-
Added the option to ignore actors that do not implement the IGameplayTagAssetInterface when performing an EQS query with EnvQueryTest_GameplayTags. These ignored actors will not be included in the filter or score operations.
-
Added an option to EnvQueryGenerator_PerceivedActors to control whether all actors known to the AIPerceptionComponent will be gathered or only the ones actively being perceived.
Bug Fix:
-
Fixed an issue where an EQS query instance was using an incorrect EQS query asset that had the same name as the intended asset. This resulted in the query using an asset with an incorrect location.
-
Added an additional check to the Environment Query Manager to check for a valid Blackboard component if the dynamic parameter is configured to read from a blackboard.
-
Fixed an issue where running an EQS query that resulted in all items being filtered out was sometimes flagged as successful.
-
Fixed an issue where EQS contexts created in Blueprints could sometimes retrieve null actors or invalid locations via the ProvideContext call.
Behavior Tree
New:
-
When using the Behavior Tree interface to create a new Task / Behavior / Service asset, the user can now choose the location and filename of the new asset, instead of having to rename the auto-generated one after creation.
-
Added a new parameter to the Run EQS Query task called "Update BB on Fail."
-
If enabled, this parameter will clear out the indicated blackboard entry if the EQS query fails.
-
This setting is enabled by default and can be changed via Project Settings > AI System > Clear BBEntry On BTEQSFail.
-
Debugging Tools
New:
-
Added filter volume support to the Visual Logger.
-
Added a log category that shows when a dirty area is affecting one or more Navmesh tiles. This shows you how many tiles on a navigation mesh are being dirtied and who are the biggest offenders.
-
Added a way to change the font size used by the Gameplay Debugger via the console variable, gdt.fontsize. The value specified will get stored in the user's .ini files.
Navigation
New:
-
Added an optional feature to the Navmesh Data called "Use Virtual Geometry Filtering And Dirtying."
-
This feature uses virtual methods to check if an actor needs to be added to the navmesh (providing the ability to create custom logic on extended navmesh classes)
-
This change also prevents dirtying navigation areas that have been requested by an actor that is not on the navigation mesh.
-
-
FRecastTileGenerator::ApplyVoxelFilter is now a virtual function.
-
Switched NavMesh to use Oodle compression (bias for size in editor, bias for speed in standalone).
Improvement:
-
Reduced the memory footprint of the Navigation Mesh by using smaller data types when possible, fixing struct alignment to reduce padding, and factoring out settings that were unnecessarily included in each dtMeshHeader.
-
Added support for Large World Coordinates (LWC) to Navigation Modifiers.
-
Added support for Large World Coordinates (LWC) to Recast and Detour Crowd Manager.
-
Added support for Large World Coordinates (LWC) to navigation mesh serialization as either floats or doubles. This is achieved by serializing as doubles in either case.
Bug Fix:
-
Fixed an issue where the navigation mesh was not generating correctly when the NavMeshBoundsVolume was placed perfectly flat on the floor surface.
-
Added a safety check when loading a navigation mesh to check if code referencing an older version of the navigation mesh attempts to load a newer version of the navigation mesh.
-
Fixed an issue where the navigation mesh was being unnecessarily rebuilt based on the number of bits required to store maxTiles.
-
Fixed an issue where the Navigation System would rebuild the navigation mesh during OnWorldInitDone for DynamicModifiersOnly navigation if the AutoGenerateNavigationData was disabled.
-
Fixed incorrect uncompressed buffer size passed by DetourTileCacheBuilder to calculate maximum compressed size.
Animation
New:
-
Added UAnimDistanceMatchingLibrary, which exposes Anim Node functions for driving animations based on distance.
-
Added UAnimCharacterMovementLibrary, which exposes functions for predicting where a character will stop or pivot. This is used as input to the distance matching functions.
-
Added UDistanceCurveModifier, which is an Animation Modifier that generates curves used for distance matching library functions. The modifier generates the distance curve based on root motion information from the animation.
-
Added SyncMarkerAnimModifier, which is a Blueprint Animation Modifier included with the Animation Locomotion Library. It provides an example of how to generate Animation Sync Markers automatically.
-
Added a Python Command Log tool in Control Rig for printing of equivalent Python commands when performing actions in the Control Rig Editor.
-
Added Control Rig Spline plugin, which enables the creation of Spline-based controls in Control Rig.
-
Added example Control Rig Context Menu commands written in Python: Add Null Above Selected, Add Controls For Selected, and Alignment tool.
-
Added Copy Python Script button in Control Rig Class Settings which copies the entire Control Rig to Python in order to replicate a Control Rig.
-
Using the Shift + Delete shortcut retains node connectivity in Control Rig to be consistent with the Blueprint functionality.
-
You can now toggle the effector transform on the FABRIK node in Control Rig. This addition aligns with how the FABRIK AnimGraph node works.
-
Motion Warping is a new experimental plugin which allows you to dynamically adjust root motion to align to targets.
-
SkeletalMerging is a new plugin which exposes Skeletal Mesh merging to Blueprints, and adds SkeletonMerging functionality which allows for merging of Skeletons.
-
Added support for importing Animation Transform Attributes from FBX by name(-matching) nodes within the FBX scene.
-
Project specific scriptability UFunctions were ported to the Engine.
-
SetPreviewSkeletalMesh was exposed to Blueprint and Python for Animation Blueprints and AnimationAsset derived classes.
-
Added (script exposed) functionality to retrieve UAnimationGraphs and UAnimationGraphNodes of a specific class from UAnimBlueprint and UAnimationGraph respectively.
-
Added (script exposed) functionality for populating and updating a PoseDrive node and PoseAsset.
-
-
Added a normalization trait/concept for animation attributes, allowing for user-defined normalization functionality after accumulation/blending operations. Normalization for the Transform animation attribute was implemented.
-
Added non-blendable versions of TransformAnimationAttribute, FloatAnimationAttribute, and IntegerAnimationAttribute.
-
Added a Get with validity checking for Animation Curves.
-
An asset registry tag "SkinWeightProfiles" was added to the SkeletalMesh asset to make it discoverable and searchable in the Editor.
-
Multiple UV channels are now supported when CPU skinning a Skeletal Mesh.
-
Added project settings that allow for defining a default set of AnimModifiers to be added to any imported AnimSequence. A new flag was added to state whether or not modifiers should be automatically applied during (re)import.
-
Added GUID to PoseAsset to track it against the Source Animation, and prompt the user if it has become out-of-date, which happens when the Animation Sequence is changed or reimported. The UX was improved for PoseAsset in the details panel.
-
Added USkinnedMeshComponent::GetRefPoseTransform.
-
GetBlendProfile is now exposed to Blueprints. This can be accessed with MontagePlay/Stop_WithBlendSettings.
-
Control Rig was promoted from beta and is now production ready.
Improvement:
-
You can now copy and paste Control Rig shape properties.
-
Moved animation asset browser context menu to UToolsMenu API.
-
Replaced Animation Recording sampling rate with FFrameRate to improve UX and integrate better with AnimDataModel.
-
Various improvements were made to Animation Attribute bone index mapping.
-
Introduced FMeshAttributeContainer which stores the attributes according to FMeshPoseIndex.
-
Added FinalizeAttributeEvaluationResults to SkeletalMeshComponent. This remaps the evaluated compact-pose indexed attributes to mesh-indices.
-
Added CopyFrom template to AttributeContainer for different bone index types.
-
Ensured that attributes are only inserted during evaluation if its bone index is present in the required bones
-
Added engine-level testing for remapping between LODs with removed bones, and remapping between Skeletal meshes with different skeleton hierarchies.
-
Crash Fix:
-
Fixed a crash that occurred when opening Mirror Data Tables.
-
Fixed a crash that occurred while applying multiple Anim Modifiers.
-
Fixed a crash that occurred when selecting 'Frame from this animation' as the Base Pose Type for an animation sequence containing animation attributes.
Bug Fix:
-
Fixed interp alpha value calculation in AnimationBudgetAllocator so it is 1 instead of 0.5 when the tick rate is 1.
-
Fixed bug that caused sync markers generated by UAnimationBlueprintLibrary::AddAnimationSyncMarker to have an invalid GUID, which would cause all sync markers to be deleted when one was deleted.
-
Expanded the list of regular expressions used to match mirrored bones to ensure the UE5 Mannequin mirrors correctly.
-
Fixed an issue with sync mirroring on blend spaces.
-
Skeletal Mesh errors now print out the path name of the component rather than just the name. This fix means you can see what Actor instance, and class, owns the component rather than the generic name StaticMesh0.
-
Fixed an issue with the mirror node that could result in incorrect behavior when the node was evaluated with identical bone counts but different bone indices.
-
Undoing a remove row operation in the Mirror Data Table now restores the location of the row.
-
You can now use WasAnimNotify functions with Linked Anim Layers.
-
Added a cache of active skeletal mesh thumbnails scenes (similar to class/blueprint thumbnail rendering) to prevent out-of-memory crashes.
-
Removed GetResourceSizeEx from UMorphTarget and FMorphTargetLODModel, as this functionality has been superseded by counting memory through UMorphTarget::Serialize.
-
Fixed a typo in SkeletalMeshComponent.h.
-
Fixed incorrect results generated when evaluating compressed Animation Curves containing user-weighted tangent data.
-
Implemented changes to ensure that the CPU access flag is correctly inherited when generating a SkinWeight buffer for alternative skin weight profile(s).
-
Fixed a bug in which CTRL+Z and CTRL+Y would not undo/redo modifications to Additional Meshes.
-
Fixed an issue with the behavior of the DoesBoneName function from AnimationBlueprintLibrary.
-
Anim runtime methods were re-exposed to the Engine API.
-
Made changes to ensure that users cannot generate Blend Profile names with invalid characters, as this name is used to generate a UObject.
-
Switched FAnimNode_TransitionPoseEvaluator to use heap-based Animation Attribute container rather than stack-based.
-
Fixed a bug where deleting one generated sync marker would cause all of the sync markers to be deleted.
Deprecated:
-
Deprecated the Verlet Control Rig node in favor of the Spring Interpolate node.
-
Removed the Copy to SoundWave menu option.
Removed:
- Removed the recording state from the Play button in transport controls for the Animation Editor(s). This fixed an issue with the play button being shown as a pause button while recording animation in Control Rig.
Animation Assets
New:
-
Added virtual bone support to blend profiles and blend masks.
-
Added alpha lerping to the Modify Curve Animation Blueprint node when setting Apply Mode to a non-blend value.
-
Added Maximum Duration Seconds and Sample Frame Rate options when recording animations in the Animation Sequence Editor.
-
Multiple montages can now be synchronized in Animation Blueprints using the Montage SyncFollow and Montage Sync Stop Following nodes.
-
Added 'Selected and Children' and 'Selected and Parents and Children' Bone drawing modes in the Animation Editor viewport menu.
-
Added a Blend Profile mode selection to the Blend profile picker.
-
Added an option to the Blend profile picker for blend mask creation.
-
Added a blend mask mode to the layered blend per bone node. Blend masks can be used to specify per-bone weights in a skeleton hierarchy.
Improvement:
-
Pose Search Databases now support root motion extrapolation so animation sequences can be used from start to finish without the need to add lead-in or follow-up sequences. The system will extrapolate the root motion velocity to generate an estimate of the root motion beyond the limits of the main sequence.
-
Added Extrapolation parameters to PoseSearchDatabase.
-
Changed the sorting in the skeleton tree so that it is alphabetical, while still maintaining the hierarchy.
-
Optimized USkeletalMeshComponent::ComputeRequiredBones().
-
Selecting Meshes and Bones is now better handled in the Animation Editor Viewport. Now when selecting, it will take into account bone visibility and cursor position to properly select either bones or meshes.
-
Section Selection toolbar button is now removed as it is now no longer needed due to selection improvements.
Crash Fix:
- Fixed a crash when a Skeletal Mesh was referencing a deleted skeleton.
Bug Fix:
-
Fixed Show All Sections not correctly restoring all sections after filtering cloth views in the Animation Editor viewport
-
Fixed virtual bone skeleton tree item not also selecting when a virtual bone is selected in the viewport.
-
Fixed font not found warning spam when a virtual bone skeleton tree item is selected.
-
Fixed virtual bone name not showing when selected in viewport.
-
Fixed parity of virtual bone name text shadows.
-
Fixed skeleton tree undo and redo and sync when editing sockets.
-
Creating an Anim Curve on an animation sequence timeline that shares the same name as an already created curve will now reference that same curve, instead of doing nothing.
-
'Reset Columns' now correctly works in the Animation Editor asset browser.
-
Fix for animation recorder manager not correctly stopping when reaching the Maximum Duration limit.
-
You can now drag and drop multiple Sequences onto a Montage timeline.
-
Fixed an issue with the Blend profile picker sometimes showing in a non-standalone mode outside of the skeleton editor.
-
Fixed a bug with reset to default with blend profiles.
Animation Blueprints
New:
-
Generated node array properties are now marked as Blueprint visible so they can be exposed through generic FOptionalPinManager-driven nodes. Now arrays are not needlessly exposed and can be handled with struct member get-by-ref calls rather than struct member sets.
-
Added State Machine common helper Functions for use in the AnimGraph: Convert to Animation State and Is State Blending In / Out.
-
Added the Pose Watch Manager to track active pose watches in Animation Blueprints
-
Debug visualization can now be displayed simultaneously for all selected nodes in the Animation Graph Editor viewport.
-
Added the ability to tag and reference by tag any anim graph node using the new Tag property.
-
Anim graph nodes will now display their tags in the bottom-right corner.
-
UAnimGraphNode_BlendListBase is now exposed to exported API.
-
New functions have been added for evaluating timecode attributes on the root bone in an anim sequence.
-
"TCHour", "TCMinute", "TCSecond", "TCFrame", "TCSubframe", and "TCRate" can now be used as bone attributes on the root bone to pass timecode information through an animation sequence.
-
Added the EvaluateRootBoneTimecodeAttributesAtTime() function, which can be used to evaluate root bone timecode attributes at a particular time.
-
Added support for parsing the timecode rate as a string into the FFrameRate it represents, and accounts for the use of drop frame timecode rates (with either "29.97df" for NTSC_30 or "59.94df" for NTSC_60 frame rates).
-
Added function library support for member reference customizations and anim node functions
-
Exposed CreateNodeFunctionsWidget on anim graph node widget so that non-derived types can use it.
-
Added node function specific library for skeletal controls.
-
Added pure conversion functions for Animation Blueprint node references.
-
Added an indicator of whether node properties are dynamic in the property access binding menu.
-
You can now use the transform manipulator in the Animation Blueprint Viewport when manipulating skeletal control nodes values
-
The Animation Blueprint now shows an empty mirror node on the right-click menu when a compatible Mirror Data Table does not exist.
-
Anim Composites now appear in the Anim Blueprint context menu.
-
Added Anim Node library functions for sequence players and evaluators.
-
You can enable Anim Blueprints to show pin inspection tooltips.
Improvement:
-
Doubling clicking a pose watch in the pose watch manager will now frame the node in Animation Blueprints.
-
The Gravity Override parameter in the Anim Dynamics node can now be defined in world space.
-
Conduits in State Machines can now be used as entry states.
-
The compiler will now produce a warning when using experimental AnimGraph nodes.
-
Animation Blueprints now support debugging of post-process blueprints.
-
State machines now have updated iconography.
-
Child anim blueprints can now be used as the default instance class in Linked Anim Layers.
-
Improved appearance of node-specific visuals for certain anim graph nodes.
-
Improved debugging and error reporting of node-specific visuals for certain anim graph nodes.
-
Improved pin sorting for Anim Nodes.
-
Improved the Linked Anim Graph with node customizations such as node color, tooltip, and title, and allowing property access bindings.
-
There's now a warning when an incompatible Post Process Anim Blueprint is applied to a Skeletal Mesh.
-
Improved performance of Animation Blueprints when displaying large graphs.
-
Optimized building reference and identity poses by avoiding excessive inner branching when setting a compact pose to a reference pose, and avoiding setting scale twice when resetting a transform to additive identity.
-
Optimized property access runtime by caching the return value property, and no longer using a mem stack allocator but instead an inline-allocated array of bytes and manually aligning the base pointer.
-
Previously a large shared pointer destruction chain occurred when resetting tick records each frame. To reduce tick record context data overheads, individual shared pointers to context data were switched to unique pointers, while allowing shared ownership and holding a shared pointer to the entire array.
Crash Fix:
-
Fixed crash when editing Call Sites on Property Access nodes used in the Animation Blueprint Event Graph.
-
Fixed crash when compiling an Animation Blueprint with all bones hidden.
-
Fixed crash with out of bounds skeleton bone indices.
-
Fixed crash when dragging a sequence player into a Template Animation Blueprint.
-
Fixed crash when compiling on load anim graphs that contained null nodes.
-
Fixed SVisibilityWidget crashing on Linux when opening the Pose Watch Manager.
-
Fixed crash when using details panel to edit multiple blend weights on a single node.
-
Fixed crash when copy, pasting, and compiling various animation nodes.
-
Fixed crash when cooking child Animation Blueprints.
-
Fixed crash when right-clicking a child asset of a template animation blueprint that has no skeleton.
-
Previously older Anim Blueprint generated classes, on first load, could contain out-of-date node type layout tables, and were unusable unless they were patched up with compile-on-load. Now non-compile-on-load paths successfully load these Anim Blueprints, although they cannot be used.
-
Fixed the crash that occurs when compiling an Anim Blueprint with an empty state machine.
-
Fixed the post-compilation crash that occurs when using the Call Function Anim Nodes.
-
Fixed an occasional crash that occurs when performing an undo while the Slot Names Editor is open.
-
Child Anim Blueprints that use Blendspace Graphs no longer reference null blendspaces.
-
Fixed a crash that occurs when selecting a Linked Anim Layer class.
-
Fixed a crash that occurs while compiling child Anim Blueprints that weren't properly initialized.
-
Fixed a crash that occurs when selecting property access chains involving structs with native break functions.
-
Opening a collapsed area in the Create Animation Blueprint dialog no longer causes a crash.
-
Calling Anim Node functions when running standalone nodes no longer crashes.
-
Fixed a crash that occurred when selecting a slot node in a template Animation Blueprint.
Bug Fix:
-
Pose watching now correctly works for Blend Space and State Machine nodes.
-
Copy and paste now works for Blend Space AnimGraph samples.
-
Fixed being unable to make permanent pose watches created when enabling 'Automatically create pose watch on selection'.
-
Added 'Initial Update' animation node function callback.
-
Pose watches now correctly delete when deleting a graph that contains them.
-
Fixed error when using a non-thread-safe function on an anim node.
-
Fixed metadata preventing new node bindings from being created.
-
Fixed a load ordering dependency with parent and child Animation Blueprints when child classes were PostLoaded() after their parents.
-
Fixed window focus loss when searching for parent blueprint classes while creating Animation Blueprints.
-
The schema type will now be checked before creating animation-specific graph pin widgets in order to resolve issues with execution pin connections.
-
Fixed animation node functions not being called correctly.
-
Fixed function library support for member reference customization and animation node functions.
-
Fixed non-deterministic cooking issue with child Animation Blueprints.
-
Single frame blendspaces now correctly sample root motion.
-
Property access generated properties are flagged as compiler-generated now, so CopyPropertiesForUnrelatedObjects will skip them.
-
Fixed issue where undo and redo weren't working correctly on property access nodes.
-
You can now spawn variable setters in Anim Graphs.
-
Modify bone and other edit modes now propagate to debugged objects during PIE and in Editor worlds.
-
The default values for Anim Node's bool pin no longer show up when pins are connected.
-
The Property Access node now has a move cursor when you hover over the node.
-
Previously, pose handlers were incorrectly calling a CacheBones pass on the graph during initialization. In the base class this was not a problem, but in derived classes, such as those with input poses, this could cause CacheBones to be called before Initialize.
-
Improved error handling for Anim Node references, especially when tagged nodes are disconnected.
-
Fix crash redo-ing and compiling an initial update anim node function binding
-
For child Anim Blueprint overrides, the Anim Node data is now linked to the class that matches the CDO being patched.
-
Sequence evaluators now show they can output a root motion delta.
-
ExtensionContent now works for a FDetailWidgetRow created from IDetailPropertyRow::CustomWidget().
-
Cooked Anim Blueprint Assets now animate when placed.
-
Optimized linking of Anim Layers with reduced calls to FindFProperty by caching generated parameter properties in FAnimBlueprintFunction and only iterating on them when linking.
-
Fixed Linked Anim Layer Node pins not being properly regenerated.
-
Fixed Linked Anim Layer pins not being available for bindings when using a self layer.
-
Corrects some mirror node bone index usage, and skips unnecessary intermediate array allocation.
-
Deprecated direct access to internal mapping arrays in FBoneContainer.
-
Fixed some bone index types, including type conversion occuring when using IInterpolationIndexProvider.
-
Fixed issue where keyboard input closed the color picker for Anim Notifies.
-
Template Anim Blueprints can no longer be retargeted.
-
We now correctly override the thread safety of return-value properties for property access when a function is marked thread-safe.
-
You can now disable notify instances and native notify types from being called in Animation Editors.
-
Undo and redo actions now work on property access call sites.
-
When starting in a different tick group for Skeletal Mesh Components allow a parallel animation eval.
-
Fixed edge case where graphs Linked Anim Layer Nodes were initialized without an interface.
-
Property access now works correctly with Blueprint refactoring tools, such as find references, renaming, and deleting.
-
Linked Anim Layers no longer show up multiple times in the context menu.
-
Fixed the issue where array child properties of an Anim Graph Node were still being shown when arrays were bound to pins.
-
Anim getters now use Linked Anim Layers.
-
Alpha blending options no longer keep bindings hidden when the alpha method is switched.
-
Linked Anim instances that have a mix of interface and non-interface layers now only unlink interface layers when unlinking.
-
There are now Anim Node data flags to reduce the overhead introduced by Anim Node functions. The data no longer has to be fetched out of folded constants to determine that it is invalid.
-
The node lookup in the Anim Blueprint compiler is used now instead of relying on the reverse DebugObjectToPropertyMap. This fixes debug weights occasionally breaking in Anim Graphs.
-
Anim Blueprints are no longer part of unneeded dependency compilations.
-
Fixed the issue in Animation Blueprints where exposed pins that were not exposed by default were not updating their values.
-
There is now a looping tooltip for transport controls.
-
Blend lists now only reinitialize children when their weight is zero.
-
There are now error reports for dynamic values that are not exposed on pins.
-
Custom pins are now created on Anim Graph Node creation and not just on reconstruction.
-
You can now debug post-process Blueprints in the Animation Blueprints Editor.
-
Fixed assert occurring when compiling an Animation Blueprint with an Anim Node function node in the Anim Graph.
-
Sparse class data is no longer derived from an incorrect base when used with a native base class.
-
You can now create a child Anim Blueprint with another compatible skeleton.
-
You can now place cooked Anim Blueprints in Level Viewports.
-
Fixed "Unable to push default value for pin" warning when linked anim graph node pins are connected.
-
You can now override Aim Offset Assets.
-
Property access thread safe logic now correctly enforces function metadata overrides.
-
Fix asserts with child Animation Blueprints by ensuring that cleaned-up sparse class data structs are moved out of the package they are in.
-
You can now open newly-spawned empty Blend Space Graphs.
-
Nested property validity filters, such as checking to see if an entry in the menu has compatible submenus, are now performed for functions.
-
You can no longer bind UObject types to unrelated types in the menu.
-
The display name now appears for script properties and functions, and ScriptName for native ones if available.
-
You can now double-click an aim offset with exposed pins.
-
GetLinkedAnimLayerInstanceByGroup now works correctly in packaged builds.
-
Property access nodes can now be correctly searched for in the AnimGraph context menu.
-
Fixed an ensure when opening some linked Animation Blueprints. Linked Animation Blueprints can be debugged, but previously the logic to set up a debugged object based on a Skeletal Mesh made the assumption that only the main animation instance would be the class being set. The check was expanded for that fallback logic application to cast a wider net than just the preview instance.
-
Extra Anim Node child properties no longer appear incorrectly on unbound structs, and bindings no longer appear on un-bindable properties.
-
Skeleton Assets now generate a thumbnail in the Create Animation Blueprint dialog.
-
Fixed an issue where a single step in the Animation Blueprint had no effect. It now steps at a fixed framerate.
-
Property Access nodes are easier to move around now.
-
Fixed an issue where nested structs that were bound to Anim Node pins were not showing their child values.
-
Fixed spurious compiler thread-safety errors when batch compiling.
-
Fixed issues with child Animation Blueprint compilation ordering. Also improved cleaned-up sparse class data structs.
-
Fixed issues with Sequence Player node Blueprint exposure.
-
Fixed a crash when opening a child Anim Blueprint of a template Anim Blueprint.
-
Fixed warnings caused by tagged-property-serialization with generated sparse class data structures in Animation Blueprints.
-
Rewrote the tooltip for sequence player's SetStartPosition to better explain its functionality.
Deprecated:
- Deprecated UAnimClassData, as it is no longer required by the Blueprint nativization feature, which has also been fully deprecated.
Removed:
- Removed duplicates of the Component and Actor transforms in FAnimInstanceProxy.
Animation Tools
New:
-
Added "Spherical Pose Reader" Control Rig node, which provides easier setup of secondary deformations by defining custom regions of influence around bone rotations.
-
Added suite of new Python functions for getting and setting Control Rig Values and Keyframes in Sequencer.
-
Added options for previewing root motion in the animation editor viewport.
-
The "Duplicate and Retarget" batch process for Animation Blueprints now uses the new IK Retargeter asset.
-
Added Control Rig editor profiling for heat-map style runtime cost profiling.
-
Added support for map controls as inputs on the Control Rig Animation Blueprint node.
-
Added nodes in Control Rig to interact with Arrays such as Add, Num, GetAt, and SetAt.
-
Added the option to automatically link new mutable nodes in the Control Rig Settings.
-
Control Rig: Functionality for the ControlRigComponent to perform lazy evaluation.
-
Added the following nodes to Control Rig: New Item Equals, Item Not Equals, Item Type Equals, and Item Type Not Equals.
-
There is now a new user workflow to promote pins to a variable in Control Rig.
-
There are new nodes to allow Nulls and Control to reparent and space switch in Control Rig.
-
Skeleton Editor has a new transform widget for editing and viewing bone transforms.
-
You can now inspect live values running through a Control Rig in the Details panel's Live Values section.
-
You can now frame the selection and the complete graph in Control Rig using the F hotkey.
-
There are new Control Rig nodes so you can interact with arrays of transforms to perform accumulation, project from local to global space, and draw arrays of transforms directly.
-
There's a new option in Control Rig to show the Controls' colors on the icon in the Rig Hierarchy widget.
-
Fixed an issue where the Viewport appeared blank for additive animation. We now always retrieve a valid skeletal mesh for previewing.
-
The Viewport has been updated to use AdvancedPreviewScene similar to the Animation Editor viewport(s).
-
Added the ability to update a PoseAsset pose-entry with the current in-viewport pose.
-
Added the option Show Mesh Edges in the Animation Viewport Show Options menu.
-
Exposed TargetSkeleton and PreviewSkeletalMesh for BlendSpace factory as BlueprintReadWrite. You can use this to create blendspaces from Blueprints and Python.
-
Added the option to only apply out-of-date animation modifiers to an animation sequence. This option appears in the contextual menu of an Asset, and through the Details view of AnimationModifier classes.
-
Added option to visualize Animation Transform Attributes in the Animation Editor. You can access this option from the Show Flag menu.
-
Added a new option to DebugSkelMesh to track the LOD of an attached instance in the Level Viewport.
-
Added new default gizmo libraries with shapes that have uniform scale to Control Rig. Assets from previous versions will maintain their original gizmo library.
Improvement:
-
Enabled full support for user defined struct usage in Control Rig.
-
The Control Rig runtime VM has been upgraded to a more compact and flexible memory backend.
-
Reduced the memory footprint and runtime of Control Rig by using inline allocators to avoid allocations for minimum size cases, and batch allocating elements.
Bug Fix:
-
Control tracks in Sequencer now correctly update their name when a Control is renamed in the Control Rig editor.
-
Fixed Bone selection behavior in Control Rig viewport.
-
Fixed an issue where any pending Apply Preview Mesh pop-up toasts were not faded out when consecutively changing the Preview Mesh.
-
Reduced the number of editor transactions created when dragging BlendSpace sample points. We now create a single transaction for interactive changes.
-
Fixed a scaling issue with the scrollbar in the Animation Editor Timeline.
-
Fixed an issue with Additional Meshes where their post-process Animation Blueprints were not being evaluated correctly in Animation Editor(s).
-
Fixed not being able to select a PreviewMesh using the arrow keys.
-
Fixed an issue with Animation Recorder generating gaps or missing curve-key values by ensuring that WriteIndex is used to populate curve-key data.
Deprecated:
- Deprecated the Transform Constraint Control Rig node. It is replaced with new Parent/Position/Rotation/Scale Constraint nodes.
Import/Export
New:
-
Added support for importing enum FBX properties as string-typed custom attributes. Enum-typed properties in the FBX are converted to string-typed custom attributes using the string value that corresponds to the enum index.
-
Added dedicated settings for timecode custom attribute names, which can be customized for a pipeline using BoneTimecodeCustomAttributeNameSettings.
-
Sequencer will now check for timecode properties to use as TimecodeSource when importing FBX to Control Rig.
-
Skeletal Meshes imported from FBX now stores mesh names, number of vertices, and the start vertex offset.
-
You can choose to store the vertex numbers from your DCC for a Geometry Cache imported from Alembic files, by enabling Import Vertex Numbers.
-
The Alembic Importer and Geometry Cache plugins are now no longer experimental, and are instead production ready.
Bug Fix:
-
Fixed precision issues that could result in Anim Sequences from FBX importing at the wrong frame rate, and improved animation sampling precision on animations with larger durations.
-
Streaming a geometry cache from Alembic with constant topologies now supports frame interpolation, This is needed for subframe sampling and motion blur.
-
Alembic import settings created from a script can now be used and displayed in the Import dialog.
Deprecated:
- Removed support for HDF5-format Alembic. Instead, use or convert your Alembics to Ogawa format before importing in Unreal Engine.
Skeletal Mesh
New:
- Moved Bake Out Materials to the Skeletal Mesh Editor toolbar.
Crash Fix:
- Fixed crash when calling Set Skeletal Mesh function in Blueprints.
Bug Fix:
-
Fixed editable skeleton transactions sometimes not being saved.
-
Fixed a crash when serializing morph targets on an editor platform that didn't support morph targets.
Deprecated:
- Removed skinning pre- and post-offset. This was added temporarily in 4.26, specifically for the MLDeformer prototype. The public functions were always marked as deprecated.
Audio
New:
-
Added Bandsplitter MetaSound nodes that split audio into discrete frequency bands, with the option to phase correct so that they can sum back together with minimal artifacts.
-
Added a Dynamic Filter node to MetaSounds. This node is a filter with bell and shelf modes that filters based on the strength of the signal at the affected frequency range. This node can be sidechained with a secondary audio source.
-
Added a new UInterface that allows Actors to automatically fill out and pass an array of AudioParameters to any owned sounds from said Actor.
-
Added a Diffuser node to MetaSounds. This node diffuses incoming audio like a reverb, but without adding a long tail.
-
Added the ability for an Audio Component to be associated with multiple active sounds.
-
Added variables to the MetaSound graphs.
-
Parameter setter calls on an AudioComponent are now cached in separate "InstanceParameters" arrays and supersede changes to the "DefaultParameters" array (redirected from the original InstanceParameters array).
-
Parameters now have a fallback structure set by Blueprints / runtime "InstanceParameters", instead of those provided by ActorParamInterface. These parameters are set as defaults on the AudioComponent.
-
Added Unreal Insights markup to the Quartz Audio system. Various Quartz mechanisms and performance considerations can now be visualized in the Unreal Insights tool.
-
Enabled Google Resonance Audio as a default engine plugin.
-
Added audio slider and knob widgets. These widgets can be used as standalone widgets and within the MetaSound editor.
-
Added Editor Preferences options for various MetaSound and Sound asset types for easy access when creating new assets.
-
Added an Editor Preferences option to automatically solo audio for the first PIE client.
-
Added an Additive Synth MetaSound node.
-
Added support for Metasounds in Sequencer via the transmission interface.
-
Added the ability to modulate Output Volume, Wet Level, and Dry Level on submixes with the Audio Modulation plugin. This replaces the old properties, which are now deprecated. The old volume properties will transfer to the base values of the new Modulation Destinations automatically, and will work the same even if the Audio Modulation plugin is disabled.
Improvement:
-
Added more trace events to the audio device and to Metasound rendering to get more useful performance information when viewing Unreal Insights sessions.
-
The dynamics process and MetaSound Compressor node can now apply upwards compression in addition to downwards compression. Upwards compression can apply up to a maximum of 36 dB of gain to a signal below its threshold.
-
Improved the MetaSound OnPlay CPU performance.
-
Improved the clarity of the default values in Audio Platform Settings UX.
-
Changed the log verbosity in the Steam Audio spatialization plugin to reduce the number of messages.
-
Added the ability to compile out huge symbols out of libSamplerate to save on memory.
-
Optimized MetaSound node searching.
-
Improved the tool tips for Audio Stream Caching statics.
-
Cleaned up XAudio2Windows and separated it into smaller, more manageable pieces.
-
Enabled the MetaSound AutoConverter nodes between enums and int32, and updated the conversion nodes style.
-
Updated Wavewriter to support multiple channels.
-
Added optimizations to Recycle threads for Null Renderer devices.
-
Added optimizations to the DeviceInfo Cache.
-
Added optimizations for Windows to the Threaded device swap.
-
Did an incremental refactor to XAudio2 and moved the stringify error codes into StringHelper.
-
Changed the Mute / Solo option for Sound Classes to only apply while in PIE.
-
Reduced the number of log messages produced when using procedural SoundWaves on Sequencer's audio track.
Bug Fix:
-
Fixed an issue where the MetaSound block-rate AD Envelope node was not allowing attack rates smaller than one block size (eg 0). If set to under a block length, it will now skip its attack phase.
-
Fixed the MetaSound Compressor node failing to update some of its inputs while running.
-
Fixed Metasound type conversion nodes outputting default values on the first render block.
-
Fixed an issue where ActiveSounds and AudioComponents spawned via GameplayStatics functions wouldn't have an Owner actor assigned to them.
-
Fixed an issue with Focus Interpolation where it would always interpolate up from 0, instead of initializing to the current Focus value.
-
Fixed an issue where it was possible to divide by zero on the MetaSound AD Envelope.
-
Fixed a bug where the initial value of the Metasound math operator nodes was not being set.
-
Fixed an issue that would result in the lack of clamping when recording output.
-
Fixed an issue where binaural audio was not working correctly on some plugins.
-
Fixed an issue where the audio settings were not being saved to .ini files on some platforms.
-
Fixed an issue where the MetaSound InterpTo nodes and Conversion nodes were not propagating their initial output values at the point of construction.
-
Fixed an issue where sending a normal submix to a soundfield submix could result in an incorrect init order or a crash.
-
Fixed an issue where Soundfield Submixes would not properly re-initialize when the encoding format changed in the editor.
-
Fixed an issue where the Audio Capture Component would crash if OpenCaptureStream() hadn't been called.
-
Fixed an issue where sounds were cutting off if they started playing within the binaural radius, and the listener left that radius.
-
Added protection against a potential null pointer deref in SubmixUtils::AreSubmixFormatsCompatible().
-
Fixed an ensure when binaural sound was sent directly to a soundfield submix.
-
Fixed an issue where the Modulation EnvelopeFollower was not reinitializing when the AudioBus was initially unset.
-
Added a Multithreaded Patching (MTP) Remainder check in the calculation to now ignore (and properly clean-up) inactive outputs.
-
Fixed an issue where FQuantizedPlayCommand::CancelCustom() was letting pending play commands play un-quantized instead of stopping the sound.
-
Fixed an issue where audio buses were mixing in incorrect data when the sound started playing in a "paused" state.
-
Added a fix to prevent an Audio Component from accessing an uninitialized Quartz Clock.
-
Fixed an issue where the Audio Streaming Cache would crash if the configuration caused the cache to have zero elements.
-
Fixed an issue where swapping an in-flight threaded audio device would cause a shutdown crash.
-
Fixed an issue where the AudioMixer XAudio2 would not recover after failing to initialize. This allows for device swapping after an open failure.
-
Removed the DLL fallback code that was causing issues with initialization recovery.
-
Fixed several issues with the audio channel that would result from device swaps.
-
Removed the PhysicalSpeaker property from being monitored for swapping and improved logging around channels changing.
-
Fixed an issue that would result in memory corruption in USoundNode.
-
Fixed an issue where the MMNotification client would experience a deadlock.
-
Fixed an issue that would cause incorrect fading of a SubmixEffect.
-
Fixed an issue with a race condition in the Windows Session Notification client Unregister / Register.
-
Fixed an issue where the MetaSoundSource of a Metasound asset would get corrupted when setting the Playback position to be non-zero.
-
Fixed an issue where the Bhaskara and Pure Math variations of the Sine MetaSound Generator Node were not correctly handling negative frequencies.
-
Fixed an issue where copy / paste was not working correctly in the Audio Mixer thread priority.
-
Fixed an issue where adjusting nullptr check in the AudioDevice would result in a crash.
-
Fixed an issue where stereo sounds with binaural spatialization were not panning correctly.
-
Fixed an issue where switching back from a NULL renderer device would result in the user's PC hanging.
-
Fixed an issue in AudioMixer that would result in a nullptr on partial initialization teardown.
-
Fixed an issue in the Audio Streaming Cache that would result in a crash.
-
Fixed an issue where the WaveWriter node was creating files even when it was not connected in the MetaSounds graph.
-
Fixed several issues with the Metasound Oscillator Generator node, including DC offset for square wave, triangle wave phase offset, and fade in for unipolar generators
Deprecated:
-
Deprecated the MetaSound Send and Receive nodes.
-
Removed the Sound Visualization plugin in favor of the more comprehensive functionality in the Audio Synesthesia plugin and other parts of the audio engine.
-
Removed the stat audio console commands in favor of the au.Debug family of console commands.
-
Deprecated the SpokenText field in SoundWave.
-
Removed the au.debug.ListSounds command.
Console
All Xbox
New:
-
Always include the "requires xbox live" flag in the manifest, as per the guidance from Microsoft, even if it is false.
-
Adding support for Simplified User Model.
-
Added support for detecting and reducing register spillage in the Xbox shader compiler. It will do multiple iterations with decreasing target occupancy to prevent it.
- The maximum retry count is specified with UE_XBOX_SHADER_COMPILER_AVOID_SCRATCH_USAGE_MAX_RETRIES, and this defaults to 3. The final target occupancy will always be 1, and this reduces in powers of two with each iteration.
-
Gauntlet now removes previous staged build before deploying new build.
Bug Fix:
-
Fix for PIX profiling settings to retain control of instrumented D3D12 on Xbox over ProfileGPU.
-
Lazy initialization of audio resources in FMediaFoundationMovieStreamer and proper handling of PLM suspend/resume events.
Playstation 4
New:
- Enable OnlineSubsystemPS4 plugin by default
Bug Fix:
-
Replace pthread functions with SCEpthread functions for Sony events. The SCE version uses relative time for timeouts which handles potential errors when changing the system time.
-
Fixed copies of cubemap texture mips.
-
Fixed net address failures when the port is negative.
Playstation 5
New:
-
Implement package discovery, installation and deployment for Playstation 5 automation.
-
Integrated MemPro for Playstation 5.
-
Added support for PS5 shader compiler stats to be available in the editor.
Bug Fix:
-
Fixed the creation of update packages based on a previous release. The build system no longer considers MasterVersion to determine if a package is a previous release, but the highest MasterVersion is preferred when selecting from the available base packages.
-
Fixed issue where GPU readbacks would sometimes return stale data.
Quail
Bug Fix:
-
Fix Stadia's keyboard handling under AZERTY and other country-specific layouts.
-
Fix stadia failing to package in installed builds.
Switch
New:
-
Add setting for enableSingleMode option in Switch Controller Support Applet. If enabled, it specifies whether to start controller support in single-player mode. Players are prompted to prepare controllers, including attached controllers, for one person. See nn::hid::ControllerSupportArg::enableSingleMode in the Switch documentation for more info.
-
Added two new features for SwitchInputSender:
-
Added a checkbox to reset the required version automatically when launching the requested app. This removes the need to reset the required version manually with DevMenu.
-
Added the --no-wait command when launching an application to allow the call to RunOnTarget.exe to return immediately instead of waiting until the title exits. This frees SwitchInputSender to do other tasks while the title is running.
-
-
The Switch RHI will remove unnecessary geometry shader management functionality at compile time if tesselation and geometry shaders are not used. This results in a small performance improvement.
-
Added a return code to the program RegTarget to indicate whether the requested operation was successful or not.
-
Allowing static shader platforms on Switch. This reduces runtime memory usage by around 9MB. To take advantage of these savings, choose a shader platform for the project. Then add defines for "USE_STATIC_SHADER_PLATFORM_ENUMS=1" and either "UE_STATIC_SHADER_PLATFORM_GLSL_SWITCH_MOBILE" or "UE_STATIC_SHADER_PLATFORM_GLSL_SWITCH" in the project's _Target.cs file.
-
Optimized compiler and linker flags to reduce memory footprint and binary size.
-
Optimized NVN CPU allocator by reconfiguring CPU memory growable allocators to reduce waste.
-
Optimize the chunk search in GrowableAllocator, so it's no longer O(n^2) in most cases. The chunk search time is now 20x faster, and overall allocator overhead is reduced by 40%.
Crash Fix:
-
Previously, when taking a Low-Level Memory tracker (LLM) capture, the application would crash on exit. This crash has been resolved.
-
Previously, if the Switch's profiler system was active, the app would crash on exit after tearing down the profiler system. The crash has been resolved by waiting on the render threads to drain before tearing down the profiler system.
-
Previously, SwitchInputSender would crash on exit if it was closed while still running tasks when it was closed. It will now exit normally.
Bug Fix:
-
Previously, if FSwitchPlatformFile::OpenWrite() was called, and bAppend was true, it would overwrite the existing data with any new data. Now FSwitchPlatformFile::OpenWrite() will seek to the end of the file, and it will write new data at the end of the file.
-
Previously, custom stencil lookups would not return the correct result due to the lookup referencing the incorrect texture channel. The lookups will now return the correct data.
-
Previously, if too many file handles were opened, FSwitchFileHandleBase::Read() would assert before attempting to reopen the file. Now the assert will only fire if the reopen attempt fails.
-
Previously, an assert would be triggered in the SwitchMediaDecoder during Cook On The Fly (COTF) when it attempted to read a file from staged data. This was resolved by changing the check() into an error message as staged data is unavailable during COTF.
-
Previously, the Boost setting would not be set correctly when SwitchInputSender requested a change. The setting will now be set as requested.
-
Previously, an error would occur if the user lifted a finger from the Switch touchscreen and a new finger started touching the screen in the same frame. This error has been resolved by sending all TouchEnd events first, preventing a new TouchStart event from occurring before the corresponding TouchEnd has been sent.
-
Previously, SwitchInputSender would fail to update a kit's firmware if the Switch console had a custom name. Now SwitchInputSender can correctly update the firmware of a Switch console which has a custom name.
-
Previously, the error "Issue 11-801 - Uses development APIs appears" would appear when packaging an application in the Shipping configuration. The functions causing this are now no longer referenced in the Shipping configuration, and the error no longer occurs during packaging.
-
Updated the SwitchInputSender export process to include missing assets when exporting and updated the ExportSwitchInputSender.bat file. Previously the exported version of SwitchInputSender would fail because of missing assets. Now those assets are included.
-
Previously, SwitchInputSender would terminate the running application when connecting to a Switch console. Now SwitchInputSender will connect without the need to terminate the running application.
-
Previously, when setting a new memory value for the Switch console, SwitchInputSender would not reboot the console, and the setting would not take effect until the console was manually rebooted. SwitchInputSender will now reboot the console when necessary, aligning with the other options that also require a reboot.
-
Set NumBuffers=1 when ResourceArray is provided.
Deprecated:
- Sparse Texture support (bUseSparseTextures) has been deprecated due to the lack of performance when enabled and the code complexity incurred to support them. Disable Sparse Texture support for improved performance.
XBox One GDK
Bug Fix:
- Fixed a virtual address leak when an ESRAM allocation fails.
Core
New:
-
Added an active timer count threshold at which we assume something is wrong and dump all timers to the log. The intention is to provide information in cases where projects have thousands of active timers at once, which can degrade performance.
-
Added an exec command called "DisplayCVarList" that supports a comma-separated list of CVar names to draw to the screen. This command also supports name completion; for example, you could enter "r.nanite" to see all CVars related to Nanite.
-
Added FMemoryWriter64 for serializing to a TArray64.
-
Added IntCastChecked and IntFitsIn utility functions.
-
Added UTF8CHAR string overloads for FCrc::Strihash_DEPRECATED.
-
Added TSharedFromThis::AsWeak() to complement TSharedFromThis::AsShared().
-
Added an FUtf8StringView overload for FSoftObjectPtr::SetPath().
-
Added UTF8 constructors to FBlake3Hash and FIoHash.
-
Extended FResourceSizeEx to keep track of name for each memory size added. This allows for verbose reporting of resource sizes. This results in output which will dump each tracked named size.
-
Added additional `AddSharedSystemMemoryBytes function which accepts a named tag.
-
Modified the FStaticMeshLODResources class method GetResourceSizeEx to use the new interface.
-
Modified FSkeletalMeshLODRenderData::GetResourceSizeEx() to use the new interface.
-
Added optional alignment awareness to the allocator model, and added support for that to TArray and FScriptArray.
-
Added: FArchive::SerializeCompressedNew can use arbitrary compressors, not hard-coded to ZLib like FArchive::SerializeCompressed.
-
Added the ability to use TArrayView with Append in TSet.
-
The Chunk Downloader now has a GetNumDownloadRequests() function.
-
CurveTable now has RemoveRow functionality to match DataTable.
-
The editor now has a new user interface for the CSVToSVG command line tool.
-
The editor can now create data tables from a raw data array.
-
Added a new WIDETEXT macro for WIDECHAR literals.
-
Users can now disable all or specific notifications from the DDC system.
-
TMemoryImagePtr, FWeakObjectPtr, TOptional, TInlineValue and FObjectPtr debugger visualization now support visualization of dereferencing expressions.
-
Added missing constexpr and UE_NODISCARD to eligible functions in UnrealMathUtility.
-
Created FTSTicker, a thread-safe version of FTicker. FTSTicker can add and remove tick delegates concurrently. Removing a delegate can block until its execution is finishing in parallel.
-
Added a new constexpr FPlatformString::IsCharEncodingSimplyConvertibleTo() function which tests if one encoding can be assignment-per-character converted to another.
-
Added a placeholder for HashCombineFast(), which is intended to serve as a placeholder for an in-memory fast hash combining algorithm, unlike HashCombine() where the results may be persisted.
-
HAL/HideTCHAR.h and HAL/AllowTCHAR.h for including around third-party headers in UTF-8 mode which use their own implementation of TCHAR (for example, Windows headers).
-
FSpinLock and generic TScopeLock. These are classic spin-locking behaviors, so use them with caution.
-
TIsCharType now has specializations for UTF32CHAR and wchar_t when PLATFORM_TCHAR_IS_CHAR16 is set. Added a new PLATFORM_UCS2CHAR_IS_UTF16CHAR macro.
-
Created the Game Thread CPU Timing platform API for more accurate CPU Percentage and CPU saturation detection. Also added a platform API for free (on Unix) process performance stats (Page Faults, IO, and Context Switches). Game Thread CPU Timing is guarded with the CVar: Platform.TrackGameThreadCPUUsage
-
TInlineValue has a new EInPlace constructor.
-
Enabled DisplayAll commands in TEST config builds.
-
Added TEXTVIEW, ANSITEXTVIEW, WIDETEXTVIEW and UTF8TEXTVIEW macros for creating string views to replace the TEXT macro with "_SV" added to the end of the quoted string literal.
-
Remove unused names from package headers, reducing the amount of data and number of names that have to be serialized. We now:
-
Strip names that are not used when cooking for UnversionedPropertySerialization.
-
Strip names that are not used by the loader when staging for IoStore.
-
-
The third-party Imath library (version 3.1.3) is now included for use in the engine.
-
FString::AppendChars, CompactBinary, and FName construction now support UTF-8. FUtf8StringView is now constructible from both ANSICHAR and UTF8CHAR strings.
-
Removed the unused InstallVisualizers.bat file because Visual Studio versions above 2015 do not use it. Added a .natstepfilter for common Unreal parameter constructor functions to avoid stepping into the parameter construction when trying to step into a function that takes the parameter.
-
Added a Custom Config directory feature that can be used to support multiple packaging targets per platform.
-
Setting CustomConfig=Directory in a Target.cs file will cause it to overlay config files from Project/Config/Custom/Directory on top of the other config files, enabling easy override of things like OSS settings to support multiple stores.
-
In development, -CustomConfig=Directory can be specified in both C++ and C# to enable the same functionality, which can be used to select between different stage/deploy configurations in a build script.
-
-
Added PackageName.DumpMointPoints, PackageName.RegisterMountPoint and PackageName.UnregisterMountPoint console commands to manage UnrealFileSystemMountPoints in non-shipping builds.
-
Added GetValid(Object) global function. GetValid can be used in places where pointer validation with IsValid(Object) triggers static analysis warnings.
-
Added the ability to specify referencer name provider type for TStrongObjectPtr.
-
Made the verbosity of the uninitialized reflected property check configurable through either project or engine modules. Projects use DefaultEngine.ini, while engine defaults are in BaseEngine.ini. Issues with UObject* properties are upgraded from Warning to Error. Other types remain the same for both engine and project modules (Display), but engine will soon change to Error as well. For example:
[CoreUObject.UninitializedScriptStructMembersCheck] EngineModuleReflectedUninitializedPropertyVerbosity=Error ProjectModuleReflectedUninitializedPropertyVerbosity=Warning
-
Added OodleDataCompression.h interface for direct access to Oodle compression. Oodle compression is now built into Unreal Engine Core and is available on all platforms for general purpose compression needs. This is separate from the configurable pak/iostore compressor.
-
Optimized IsValid(Object) performance: 19.8ms -> 9.2ms (based on internal GarbageCollector tests)
-
Add UE_CALL_ONCE to help call void functions once
-
In OutputDeviceFile, the async writer can now set its thread name to either the file name or a sequential number. Define OUTPUTDEVICE_DEFAULT_ASYNC_WRITER_THREAD_NAME to change the default behavior, which is to use the file name.
-
Added support for disabling Pending Kill functionality in the engine. Pending Kill will be disabled by default for any new projects created with the next Engine release.
-
FGCObjects without GetReferencerName overrides will now be reported during Garbage Collection verification tests.
-
Changed the CsvProfiler worker thread to be created on demand, rather than unconditionally. The CSV_PROFILER macro is now defined in Shipping on the Dedicated Server only if checks are defined as well.
-
Added support for disabling CsvProfiler categories through configuration by using the CsvProfiler/DisabledCategories array.
-
The UCLASS specifier now takes a Hidden flag. This maps directly to the ClassFlags Enum CLASS_Hidden flag. Adding this flag will hide the given class from any class browser in the editor.
-
Introduced Garbage Collector History. Garbage Collector can now store information about its previous runs which can then be used to track down UObject memory leaks.
-
The ReferenceChainSearch class will no longer store raw pointers to UObjects when constructing reference chains and instead will only preserve basic information about UObjects separate from UObjects themselves.
-
Downgraded level leak asserts to errors when PendingKill is disabled.
-
Updated to Oodle 2.9.5 SDK. Oodle 2.9.5 provides significantly faster rate-distortion optimized texture encoding.
-
Added a UnrealTraceServer.exe to the binary build. UnrealTraceServer is the tool that records traces for profiling purposes.
-
Added functionality to Allow Cast to gracefully handle an interface instance that's not a UObject.
-
ISPC support has been added for double versions of core types.
-
Traced a timing event for each task's start-end interval.
-
Added a template VariantStructure as an alternative to the template BaseStructure that provides access to script structs for f and d LWC variant types.
-
In the PathPermissionList class a const FName reference is now used instead of FName in iterators whenever it is possible.
-
Added support for values larger than 2 GB in the Derived Data Cache.
-
Added compression to the Derived Data Cache, reducing its size by 65-75%.
-
Added the ability to configure Task priorities from config files.
-
Made the scrollableFormatting and reverseSortRows properties of the SummaryTable able to be set in XML.
-
Added listSummaryTables option to list the available summary tables in the current ReportXML, then Output the report XML filename and report graphs filename to the log.
-
TPromise can now use non default constructible types.
-
Added support for more than two sticky columns in collated summary tables. New format info for columns have been created to replace the "lowIsBad" list. This provides specifying auto colorization rules and numerical formatting.
-
Added support for multiple section boundaries, and minor (dashed line) section boundaries Section boundaries no longer require startToken or endToken. Section boundaries now can be specific to collated or full tables
-
Added a minFrameCount param which filters out rows from the summary table based on frame count. This allows us to filter out bad CSVs. This works after the cache reads, so bad PRCs will also be filtered out.
-
Added maxFileAgeDays
argument. CSV or PRC files older than the specified parameter will be ignored. This is faster than querying timestamp metadata, especially when reading from network drives. -
Added input format detection for csvConvert. If not specified, input format and compression will be used for output.
-
Added setMetadata key/value argument for overwriting metadata, and ensured the command line metadata is written at the end when writing in .csv format.
-
PerfReportTool - hitchSummary - add summary table metrics for hitches of thresholds up to 1000ms at 100ms intervals. The new metrics are named Hitches>Xms.
Improvement:
-
Improved debugger visualization of TStaticArray.
-
Moved the FResourceSizeEx into its own cpp file so modifying the header isn't a full recompile.
-
Upgraded the engine's version of the third-party OpenEXR libraries to 3.1.1.
-
Moved GChaosMode state onto the heap to save on the static memory footprint.
-
Made FrameRate, Timecode, and TimeManagement work better with NTSC and/or drop frame timecode and frame rates.
-
Added quotation marks around strings from failed comparisons during automation tests to aid readability.
-
Added more heterogeneous string encoding overloads of FGenericPlatformStricmp::Strnicmp.
-
Reimplemented TSharedPtr reference counting using std::atomic and more optimal memory ordering in ESPMode::ThreadSafe mode.
-
Standardized the null smart pointer .natvis to say "nullptr" instead of "Null".
-
Improved performance, reduced code bloat, and simplified searching for non-constexpr constants by adding appropriate use of constexpr through core engine code.
-
Implemented scratch buffers for encoder scratch as well as decoder to improve OodleDataCompression performance.
-
Marked all FPlatformProcess::SleepInfinite implementations as [[noreturn]]
-
We now support passing a default value to FVector::GetSafeNormal. This value will be returned if the original vector is zero.
-
Loading of plugin-specific config files has been modified to be more consistent and reliable. BasePluginName.ini should always be used for engine plugins and DefaultPluginName.ini for game plugins.
-
FArchiveReplaceObjectRef (and subclasses) now pass parameters through flag enums rather than long lists of bools. FArchiveReplaceObjectRefBase no longer tracks replaced references by default.
-
Unified and improved output when reporting Garbage Collection World leaks and in 'obj refs' command output.
-
Added OodleTextureSdkVersion field to Texture assets so that textures remember the version of Oodle they were encoded with. Legacy assets load with this field blank. Different versions of Oodle Texture can be used based on this field to prevent unnecessary patch generation.
-
Disabled CsvProfiler RenderTargetPool category on the server side by default.
-
Prevented useless FString allocations in FindOrCreateStatSeries when checks are compiled. Enabled TLS memory caches for the CSV processing thread
-
PerfReportTool: Split classes into separate files.
-
PerfReportTool: Made Summary types self-register so they're self-contained and more easily extendable.
-
PerfReportTool: Removed redundant XmlHelper class, by converting existing usage of this to use the GetSafeAttribute method.
-
improved summary table formatting by adding support for 3 levels of section barrier in summary tables.
Crash Fix:
-
Fixed a crash when calling TPolygon2<>::Contains on an empty polygon.
-
Fixed a crash due to a missing type in the FAutomationTestAttemptToFindUninitializedScriptStructMembers test when running the automation tests from within Unreal HeaderTool.
-
Fixed a Linux crash when connecting to an incorrect trace host address.
-
A crash has been fixed that occured when running a reference gathering while incremental garbage collection running.
Bug Fix:
-
Fixed FastDecimalFormat not handling inf.
-
Fixed compile error in TRobinHoodHashMap::Remove() and data loss warning in TRobinHoodHashMap::Num().
-
Fixed FStringView::Mid to work the same as FString::Mid. Added Left, Right, and other slicing functions to TArrayView to match the behavior of FString.
-
Tidied up TSharedPtr's FReferenceControllerOps using if constexpr.
-
Fixed TTuple's per-element constructor to be conditionally explicit, allowing tuples to be initialized with a braced list of initializers.
-
Fixed some usages of FBox::ExpandBy, and clarified FBox comments.
-
Made TVariant::IsType
issue a compile error when T isn't in the variant. -
Fixed Expose_TFormatSpecifier in UTF-8 mode.
-
Fixed a dereferencing null pointer static analysis warning in AppendCharacters in String.cpp.
-
Caused a compile error when a class hierarchy inherits multiple instances of TSharedFromThis or when using TSharedFromThis
when T doesn't inherit TSharedFromThis . -
Supported the # alternative representation modifier in FGenericWidePlatformString::GetVarArgs.
-
Improved DisplayString visualization for TMemoryImagePtr.
-
Fixed the "% 123d" explicit space-padding formatting syntax in FGenericWidePlatformString::GetVarArgs.
-
Fixed FMath::Wrap for zero-sized ranges.
-
Fixed a compile error in TArray::operator<< when an element type is bulk serializable but not regularly serializable.
-
Made TUniquePtr's debugger visualizer's expanded view more consistent with other smart pointers.
-
Fixed the optimized map and set property serialization path when there are no defaults and the container is non-empty.
-
Fixed FGenericWidePlatformString to be usable under Windows by setting PLATFORM_USE_GENERIC_STRING_IMPLEMENTATION.
-
Removed UTF8CHAR as an alias for char8_t in C++20, as it causes ABI conflicts when linking modules built with a mix of C++17 and C++20.
-
Fixed a crash when trying to convert an array of a serialized struct type to an array of a non-struct type.
-
The W component is now properly preserved in vectorized TTransform
::TransformFVector4 and TTransform ::TransformFVector4NoScale. -
Fixed up FCString in UTF-8 mode.
-
Loaded packages are no longer incorrectly marked as missing, which prevents incorrect skipping of imports after requesting load of an invalid export in a valid package.
-
Added support for padded widths in FImageWrapper classes, which fixes a bug where a Remote Session's image buffer could include garbage pixels on the right side due to the underlying GPU's pixel alignment requirements.
-
Added Define log categories for NO_LOGGING configurations.
-
The entire hash map will now lock instead of individual hash buckets when iterating UObject maps to prevent memory stomps when creating, renaming, or destroying objects mid-iteration.
-
Duplicating components now correctly duplicate instanced subobjects owned by that component.
-
Fixed redirected or unqualified enum values.
-
Fixed the GetMinimalName method from the MappedName class to be aware of case sensitive FNames.
-
Fixed the MemoryWriter from failing to write an index size greater than 2GB.
-
Slightly reduced framepro send buffer size so it fits under the small alloc max size amount of some allocators.
-
Fixed potential memory stomps during localization data gathering.
-
The method FStructUtils::TheSameLayout no longer returns false when passing in null structs to compare.
-
Prevented the Plugin Utillity method AddToPluginSearchPathIfNeeded from adding mod or enterprise plugin directories to the plugin search path.
-
UMG list view will now track its Actor references and remove them when they're about to be destroyed to ensure they don't prevent levels from being Garbage Collected.
-
InputComponent will now clear its reference to the PlayerInput to ensure it doesn't prevent levels from being Garbage Collected.
-
Cleared a reference to PathFollowingComponent on the MovementComponent when the PathFollowingComponent changes its MovementComponent to make sure it does not prevent levels from being Garbage Collected.
-
FPlatformMemory::OnOutOfMemory: Fixed thread-safety issue when concurrent calls return from the function.
-
Released references to other objects when the PlayerCameraManager gets destroyed to make sure they don't prevent levels from being Garbage Collected.
-
CheatManager will now empty its extensions list when its outer PlayerController is about to be destroyed to prevent issues with Garbage Collecting leaking references.
-
Fixed use iostore and make binary config settings from not being saved to the launcher profile.
-
Cleared the thread buffer for CPU tracing to avoid scopes ending up after thread end and cleared the thread buffer pointer.
-
Fixed a mismatching Malloc / delete in the DistanceFieldStreaming implementation .
-
Fixed a few issues where adding or changing a default subobject class in a class constructor would overwrite the previously set values in Blueprints and other instances of that class.
-
The CameraModifier's CameraOwner reference will now be nulled when it gets destroyed to ensure it does not prevent levels from being Garbage Collected.
-
PlayerState's Pawn reference will now be tracked and released when no longer required to make sure it doesn't prevent levels from being Garbage Collected
-
The AbilitySystemComponent's references to other Actors will now be released when the Actors are about to be destroyed to make sure they don't prevent levels from being Garbage Collected.
-
The AudioComponent will now clear references to other objects when its EndPlay is called to ensure it does not prevent levels from being Garbage Collected.
-
Fixed trace timestamps for Unix to match the double type.
-
Fixed usage of StringCast API in various source files.
-
Fixed usage of TCHAR_TO_ANSI and TCHAR_TO_UTF8 macros in various source files.
-
Fixed invalid arguments from being passed to CSV_EVENT and TRACE_BOOKMARK.
-
Fixed several Printf string calls that contained incorrect var arguments.
-
Fixed single-property config updates from failing to remove entries that were no longer needed as they matched the CDO.
-
Fixed Stats macros from causing extra evaluations of their Value expressions.
-
Fixed CrashReportClient from writing a buggy compressed header at the start of the compressed report and the valid one at the end of the report.
-
Fixed the FArchiveFileReaderGeneric to respect the FILEREAD_Silent flag.
-
Fixed a pointer to an unexpected type being passed to the CaptureStackBackTrace method.
-
Fixed a race condition causing log lines to merge together when writing to stdout.
-
Fixed many math types like FVector, and FIntPoint from violating strict aliasing rules.
-
Fixed Pakfile creation when the uncompressed buffer size exceeds the int32 capacity and introduced the TInlineAllocator64.
-
Added an ensure to avoid a synchronization bug involving DDC memory backend and value-locking that can occur when disabling the memory backend.
-
Fixed a bug where the filter order is ignored for columns in the rowSort list in collated summary tables. Columns you are collating by will still appear first, but their relative order is preserved.
-
Fixed peak summary from not emitting SummaryTableData when detailed reports are disabled.
-
Fixed an issue where Async Loading Handles could stall on Switch.
-
Fix to Async Loading Handles to stall on Switch, which was caused by an issue with the initial pak list.
-
Prevented the EditorPackageLoader method NotifyConstructedDuringAsyncLoading from asserting if an object is created during async loading.
Deprecated:
-
Deprecated the FPlatformString::TIsFixedWidthEncoding trait and replaced it with a constexpr FPlatformString::IsFixedWidthEncoding function.
-
Added a deprecation warning to typed allocators which fires when the allocator won't return appropriately-aligned memory - explicitly aligned versions of the allocators or alignment-aware allocators should be used instead.
-
Changed FPlatformString::CanConvertChar to FPlatformString::CanConvertCodepoint, with improved checks and documented assumptions.
-
The macros WANTS_COMMANDLINE_WHITELIST and OVERRIDE_COMMANDLINE_WHITELIST have been renamed to UE_COMMAND_LINE_USES_ALLOW_LIST and UE_OVERRIDE_COMMAND_LINE_ALLOW_LIST.
-
Deprecated the IsInitialized function and variable from ThreadingManager. The variable's access was causing TSan warnings.
-
Deprecated most public properties of UPackage and created accessors for them to be used instead.
-
Deprecated StringBuilder::Append(Char) in favor of StringBuilder::AppendChar(Char).
-
Deprecated StringBuilder's class AppendAnsi method in favor of the Append method.
-
Deprecated the TStringView SizeType method in favor of int32.
Removed:
-
the "Shared" version of the memory tracking functions. These are not used at all across the engine. This simplifies the code and makes the output of the obj list more readable.
-
Removed FPlatformMisc::SetEpicAccountAPI.
-
Removed the unused and inconsistently-applied BogusChar option from FPlatformString string conversion functions.
-
Removed deprecated FPlatformMisc::GetEnvironmentVariable overload.
-
Removed THasGetTypeHash.
Cooker
New:
-
Added Virtual Assets Dialogue to Derived Data Widget.
-
Added Analytics Support for Virtual Assets / Virtualization Module.
-
API support added to DerivedDataBackendInterface to help filter and tidy-up the Cooker's user interface:
-
IsRemote: Is this back end local or remote?
-
IsWrapper: Is this back end a wrapper?
-
GetTypeName: Returns a relatable back end type, such as Memory, S3, Http, Zen, or Fixed.
-
-
Reformatted the Cache Statistics user interface to show meaning full type name and display details.
-
Reformatted the user interface to add bold type for Titles and Totals
-
Disabled the InEditorCooking by default for all projects. Cooks launched from the editor by QuickLaunch will instead launch the cook commandlet in a separate process. Future cook architecture will move away from InEditorCooking, and the current default map type - WorldPartition - does not yet support it. A project should enable InEditorCooking only if necessary for backwards compatibility and only if it does not use WorldPartition.
-
Added ICookInfo and FInstigator to the cook to provide the AssetManager with the reason why a package was requested by the cook. This information is used automatically by the AssetManager, but can also be used to diagnose errors during cooking.
-
Added the commands -dpccvars=cook.displaymode=4: is used when packages are cooked, they will display the instigator that caused them to be cooked.
-
CookShowInstigator=
: is used when the given package is cooked, it will display a message about the chain of instigators that caused it to be cooked.
Bug Fix:
-
Fixed ZenCache Statistics appearing when Zen is not the DDC backend.
-
Fixed pulsing of the cooker's Upload/Download arrows.
-
Fixed an AssetRegistry bug that caused the importer's new asset to never be found again until the editor is restarted.
-
Fixed the RemovePath method from the AssetRegistryImpl class to return true if the path already does not exist.
-
Changed the SetDefaultsForCookedEditor to always define the ASSETREGISTRY_ENABLE_PREMADE_REGISTRY_IN_EDITOR macro.
-
Made changes to the PackageNameCache definitions. The DoesPackageExist method will now use the TryConvertLongPackageNameToFilename method instead of the LongPackageNameToFilename method, so that it doesn't assert if the package name can't be resolved to filename.
-
The CookOnTheFlyServer class method GetAllPackageFilenamesFromAssetRegistry will now skip package names that don't have a valid mount point, such as packages in plugins that haven't been mounted yet.
Deprecated:
- LegacyBulkDataOffsets is no longer supported in UE5.
Memory Profiler
Bug Fix:
- Fixed the maxcount calculation to no longer integer overflow before capacity integer overflows. This expands the number of allocations we can fit into 32-bit LLM tracking, which is needed for some large projects that still want to use 32-bit LLM tracking.
Network Profiler
Crash Fix:
- Fixed a crash that occurred when the nettrace is enabled and NetDriver is removed mid-frame.
UnrealFrontend
Bug Fix:
- Fixed Exclusive time computation for old Profiler.
UnrealPak
New:
- Implemented support for commands -Info, -List, -Diff and -Extract for IoStore containers.
Bug Fix:
- Added a warning that will be printed when a pak file is loaded with a mount point that is not mounted to any root directory.
Datasmith
New:
-
DatasmithContent - Improved water shader (caustics, reflections, depth).
-
glTF Importer: Added support for PBR-Next Materials.
-
Navisworks: Added a warning dialog when trying to export an empty (initial) state.
-
Revit: You can now specify which metadata is exported with the Datasmith file.
-
Datasmith glTF: Added support for transmission extension.
-
DatasmithContent - Added water material and 2 instances for pools.
-
Changed the default, fallback Refraction value for Materials generated from USD Stages from 1.5 to 1.0.
-
It is now possible to set a threshold number of triangles, after which static meshes generated when opening or importing USD stages would get Nanite enabled. Additionally, it is now possible to add the "unrealNanite" token attribute to a Mesh prim, and use the "enable" or "disable" values to override the Nanite threshold and always enable or disable Nanite for static meshes generated from that prim.
-
Added a new export option when exporting levels to USD that allows controlling whether foliage is exported to the foliage Actor's layer or the place Component's layer. This is especially useful when the Place in Current Level option is enabled on the foliage tool.
-
You can now pick which AUsdStageActor is bound to the USD Stage editor via the combo box at the top-right of the window.
-
Prim attributes on the USD Stage editor are now sorted alphabetically by their attribute names.
-
You can now control the exported LOD range when exporting Static and Skeletal Meshes to USD.
-
Implemented custom 'unreal' USD render context for Unreal Materials. Now, existing, persistent Unreal Material Assets will only be used when opening a stage when the 'unreal' render context is selected. Additionally, in most scenarios, exporting Materials and Components that use Materials (with Material baking disabled) will generate USD Material prims with custom Unreal Shader prims, analogous to how MDL Materials are handled in USD.
-
There is now a new button (Reset State) on the File menu of the USD Stage editor. Use this button to reset the state / session of the opened stage without reloading it from disk.
-
Animated light and camera attributes, as well as skeletal animation, will now be read from USD and automatically added to the generated LevelSequence as regular tracks. Manipulation of these tracks will write the data back out to USD.
-
When writing out animation tracks to the stage while a USD Stage is opened, the exporter will now only bake every frame of the animation if absolutely necessary.
-
You can now control the location of the Asset folder when exporting Assets and Levels to USD.
-
You can now track the assignment of Material overrides on geometry cache Components generated when parsing the USD Stage. These assignments are now serialized to USD.
-
When exporting a Level to USD, if a USkyLightComponent is encountered that uses a TextureCube Asset with no existing HDR file on disk, the export process will now generate a brand new .hdr file from the source Asset and reference it in the exported USD scene.
-
Datasmith Solidworks: You can now export animations from Solidworks.
Bug Fix:
- DatasmithContent - Fixed default rotation value for triplanar projection.
DevTools
Automation
New:
-
Improved the test exclusion list mechanic. This consists of the following changes:
-
Renamed blacklist to excludelist.
-
Support section exclusion rule can now exclude entire sections of tests.
-
Mark excluded tests as skipped in the report instead of entirely removed for the test list. This checks for exclusion just before running the test.
-
Removed NotEnoughParticipant state in favor of Skipped.
-
Add support for exclusion management from the Test Automation window.
-
Exposed device information to UE test report.
-
For platforms, the mechanic to edit their exclusion config file must be done manually through the target platform config file. This will be improved in a future release.
-
-
Added support for on-demand virtual devices in Gauntlet.
-
When test passes stop because of critical failures, AutomationTool now resumes UE test passes using a JSON report as tracking support.
-
Add support for comparing images other than PNGs.
-
Exposed arbitrary image comparison with test reference to python and blueprint.
-
Implemented OnTestStart and OnTestEnd events for the AutomationTestFramework. Included TestSamples plugin as an example.
Bug Fix:
- Properly initiate FImageComparisonResult::CreationTime member.
AutomationTool
Bug Fix:
-
Fixed the initial map setting of the project launcher being ignored when also specifying maps to cook.
-
Fixed the -SeparateDebugInfo command for BuildCookRun failing to place debug files in a separate directory with the manifests.
-
AutomationTool will guard against the target platform's cooked data folder not existing during staging. This can happen when making builds that re-use previously generated pak files.
-
Pass -unattended to unrealpak from the staging code so that it doesn't pop up interactive dialogs.
BuildGraph
New:
- Added support for nested expansion of Build Graph Properties. For example: $(Outer$(Inner)).
UnrealBuildTool
New:
-
Added support for Visual Studio 2022 as a source code accessor and compiler.
-
Added experimental support for Intel OneAPI compiler.
-
Added Linux and Mac support to GenerateClangDatabase in UBT.
-
UBT can create an "Internal" include directory. This directory is only added to a module if the referenced module has the same scope.
-
Uses /sourceDependencies to generate dependency list instead of cl-filter if the msvc compiler version is at least 14.27
-
Replaced uses of whitelist and blacklist with AllowList and DenyList in .uplugin and .uproject module descriptors. For example, WhitelistPlatforms is now called PlatformAllowList. If the new names are not found, the parser will fall back to the old names for one or two releases, but support will be removed entirely in a future version.
-
Added a -Rebuild command line option that will clean a target before attempting to build it.
-
Added support for passing /experimental:deterministic to the MSVC compiler (WindowsPlatform.bDeterministic). This is disabled by default.
-
Added support for log file rotation to UnrealBuildTool.
-
Added a TraceConsole function to EpicGames.Core.Log.
-
Added support for Clang's static analyzer to the Unreal Build Tool. You can enable this by adding -StaticAnalyzer=Clang to the invocation line. By default, Clang will print out the output from the analyzer to stdout. However, if you add -StaticAnalyzerOutputType=Html, a directory will be written in the same location that object files are produced, with a navigable HTML file containing the result of the static analysis.
Crash Fix:
- Fixed a crash in UnrealBuildTool when a platform SDK is only partially installed.
Bug Fix:
-
Added sourceFileMap to the generated VSCode launch.json file for installed builds, so the debugger can load source files correctly when debugging the editor.
-
Fixed not being able to generate VS2022 project.
-
Updated compiler version to 143 in VS Project Generator.
-
UnrealBuildTool will provide a warning if a module is referenced with an incorrect text case.
Deprecated:
-
Removed support for deprecated Intel compiler.
-
Removed support for Visual Studio 2017.
-
Set minimum Visual Studio version to 2019 v16.11.5, toolchain 14.29.31033 Set minimum Windows Clang version to 10.0.0
UnrealHeaderTool
New:
-
UnrealHeaderTool can parse UFUNCTION defaults from default constructed structs.
- Example:
void MyFunc(FMyType MyArg = FMyType());
Editor
New:
-
Texture encoding now supports two encoding settings, so that you can enable slower, high quality encoding features for cooked builds while retaining fast encoding in editor. These settings are in Project Settings -> Texture Encoding. There is also a user override in Editor Preferences -> Texture Encoding.
-
Migrated the Alembic third party AlembicLib module to Engine/Source/ThirdParty.
-
Upgraded engine version of the third-party Alembic libraries to version 1.8.2.
-
Added Default World Partition Settings. These can be found in AWorldSettings, can be saved from the WorldSettings panel in the World - Advanced section. These set a default loading state for a World Partition map, including loaded cells and data layers, to avoid an empty world when loading a map for the first time.
-
Added support for property categories to be prioritized via a new 'PrioritizeCategories' metadata.
-
Added support in the Content Browser for Delete/Copy/Rename operations on World Partition worlds.
-
Upgraded the engine version of the third-party USD libraries to version v21.08.
-
Added a project setting to the World Partition settings for the Foliage Grid Size. This setting gets assigned to the WorldSettings actor when the WorldPartition gets created.
-
Property tooltips now also contain the raw name of the property, so you can identify the property if the name is too long to be displayed in full.
-
Feature packs can now have multiple categories specified for them in the "Category" field of the manifest.json file
-
Added the ability to break the Details view into sections, such as "Rendering" or "Physics". Sections can be defined anywhere with access to FPropertyEditorModule, using the FindOrCreateSection function. See FDetailCustomizationsModule::RegisterSectionMappings for an example of current section mappings.
-
Refactored the existing Derived Data Cache (DDC) Toolbar Widget:
-
Moved all the code to a plugin module.
-
Removed superfluous icons from the toolbar.
-
Added combo-box dropdown menu options.
-
Added dockable window support.
-
Added icons to the UE5 style.
-
Numerous adjustments made to UI layout.
-
-
Upgraded the engine version of the third-party OpenSubdiv libraries to version 3.4.4.
-
We now use per-platform Python site-packages directories for USD Python modules. This leverages recent changes to the PythonScriptPlugin that recognize per-platform site-packages directories. Arranging the modules this way allows the Python modules generated by building USD to be dropped directly into the appropriate platform directory and avoids the need to patch the init.py files to look for Mac .so files in a different location.
-
Advanced dropdowns in Details views are now styled like a normal group rather than as an expander.
-
Made adjustments to the Spline component, so that Alt-Drag and Add Key To Segment now copy the spline point type (curve/linear/constant) of the adjacent spline point.
-
Added detail customization for vector curves, so that you can create curve editors for vectors that are similar to the editor available for float curves.
-
Spline components are now colored with a gradient effect to more easily tell when they are selected, and they have more distinct colors.
-
Added support for cm/s as a speed unit for ForceUnits/Units property metadata.
-
Updated spline box and frustum selection to always add rather than toggle points in the selection area, or append to selection when shift is pressed.
-
P4 Client SDK has been updated to 2021.2 for the Mac target platform.
-
AssetRegistry now adds writable files to the Reconcile cache in the Source Control window.
-
There is now an UncontrolledChangelistValidator, which reconciles writable assets and warns the user if new uncontrolled changes are found during changelist validation
-
Added a Validate Changelist contextual action to the Source Control Changelists window.
-
Added Usecases to Editor Validators, so validators can specify which Usecase should be executed by overrides.
-
There is now a FValidateAssetsResult struct which holds detailed information about validated assets and results.
-
You can now open Unreal Insights from the Editor menu.
-
Added virtual shadow map debugging and profiling visualizations to the Editor Viewport dropdown.
-
You can no longer undo the deletion of sublevels.
-
Added new settings to the Geometry Cache plugin settings to control the memory usage of streaming geometry caches from Alembic and USD.
-
Streaming geometry caches stats are available through the console command stat GeometryCache.
-
Uncontrolled Changelists now support files marked for delete in Source Control.
-
You can now disable hardware occlusion queries on a per-scene basis in the Editor.
-
The Texture Editor now has a new tab that shows various properties about the encoded texture, including whether the texture was encoded with Fast or Final quality. This tab lets you experiment with various Oodle properties like encode quality settings on the texture, and also can show you the deployed size benefits of RDO encoding.
-
The P4 Client SDK has been updated to 2021.2 for the Win64 target platform.
-
When you launch Unreal Insights from the Editor, if Unreal Insights is not found it will now be built.
-
When importing a static mesh from an Alembic file, you can now enable Propagate Matrix Transformations without enabling Merge Meshes.
-
There is now a DirtyFilesChangelistValidator to verify there are no unsaved modifications when submitting a changelist in Source Control.
-
The FPropertyAndParent struct now contains the array indices of the changed property and all its parents, so you can determine which property value changed.
-
Added the option Delete New Files on Revert to the Source Control window.
-
Removed Python 2.7 support from the Engine.
-
Added a delegate for mode toolkits to do any UI shutdown that depends on the mode UI layer.
-
Exposed a Python setting to let users select if the embedded Python interpreter should run in isolation mode or not. By default, the engine interpreter runs in isolation mode to minimize risk of having incompatible Python software crashing the engine.
-
Reskinned the Message Log.
-
Added a shaded preview for Volumes.
-
Changed the column names in the Outliner to support localized strings.
-
Added the UFUNCTION UBlueprintEditorLibrary::GeneratedClass(UBlueprint*) as a script method for Python users. For example, bp = unreal.EditorAssetLibrary.load_asset("/Game/Blueprints/BP_AdjustButSpawn") print(bp.generated_class())
-
Reskinned the Restore Packages panel.
-
Added Bridge menu item back to the workspace menu, as well as updated the icon.
-
Added a 'Preview Profiles' combo box to asset editor viewport toolbars to quickly change preview profiles. The profile combo is only visible when the user has more than one profile. This was added to the Material Editor, the Static Mesh Editor, and the Niagara Editor.
-
FAssetEditorModeUILayer now serves as a layer between a given asset editor and the mode toolkits, so that the mode toolkits can request UI panels and the asset editor determines where they are located in the asset editor layout. The first implementation is in the Level Editor, and all default mode UI has been moved to FModeToolkit.
-
Added the ability to show or hide individual columns in the Outliner by right-clicking on the header.
-
Separated out the FActorInfoColumn that showed modes such as Type / Level / Layer into separate columns that can be hidden or shown.
-
Added support to recursively search Editor menus.
-
Added the combo chevron to the Status Bar button.
-
Reskinned the Create Blueprint From Selection Panel button.
-
Added colors to all major editor tab icons. Renamed the World Outliner to Outliner.
-
Reskinned the Plugin Manager.
-
Reskinned the Project Launcher window.
-
Added support for multiple modes in mode UI layers. There is now a paired AssetEditorUISubsystem that does the tab registration so the modes don't have to be registered before the asset editor opens.
-
Viewports can now focus on anything implementing a typed element world interface, not just Actors and Components.
-
Reduced the default length of Spline Component tangents to make them more manageable.
-
Reskinned the Level Editor Toolbar.
-
Moved the Editor Modes into a single dropdown.
-
Combined the Content and Create Menus into one menu.
-
-
Updated the placement and style of Play and Debug buttons in toolbars.
-
All menus, those created by menu builders and UToolMenu, now have a default height of 1000.
-
Add and Filter menus in the Content Browser are now searchable.
-
UToolMenus are searchable by default.
-
Added a warning icon in the Auto Save Restore UI beside a package to restore, if the auto-saved package modification time is older than the file it is supposed to restore.
-
Hiding a Level deselects everything in it now, not just Actors and Components.
-
The Open Asset Dialog (Ctrl + P) now opens as a Tab instead of a floating window.
-
Updated the embedded Python interpreter from 3.7.7 to 3.9.7.
-
Added the ability to copy property display names using the right-click context menu.
-
The visibility of columns in the Outliner is now saved across editor sessions.
-
In the USD Stage Editor, dirty layers will now show a star (*) after their names.
-
Removed the Alt+P shortcut for opening the Place Actors Panel.
-
Added support to USD for the IOR attribute on UsdPreviewSurface materials.
-
Added the SSimpleButton widget to the ToolWidgets API. This can be used to create buttons in the UE5 Style.
-
Added SSimpleTimeSlider to the ToolWidgets API. This can be used to create a Time Slider in the UE5 Style.
-
Add the SSearchableComboBox widget to the ToolWidgets API. This can be used to create a searchable combo box in the UE5 Style.
-
Added SCheckBoxList to the ToolWidgets API. This can be used inside a Custom Dialog to display a list of checkboxes.
-
Added support to USD for virtual textures on the UsdPreviewSurface master materials.
-
Added SWarningOrErrorBox to the ToolWidgets API. This can be used to display a warning or error in the UE5 Style.
-
Added SSimpleComboButton to the ToolWidgets API. This can be used to create a combo button in the UE5 Style.
-
Added SPositiveActionButton to the ToolWidgets API. This uses the UE5 Style and can be used for actions such as "Add".
-
Added SNegativeActionButton to the ToolWidgets API. This uses the UE5 Style and can be used for actions such as "Delete".
-
Added a script to build the USD SDK for UE on Windows.
-
Imported jpeg textures will now be stored in their original jpeg format in the package file, and will only be converted to compressed PNG format when the texture pixel data is modified inside the Editor.
-
Reskinned and Updated Interfaces:
-
World Details
-
Levels Browser
-
HighResScreenshotTool
-
Path Picker
-
Asset Picker
-
Find In Blueprints
-
Message Dialogs
-
Scene Outliner
-
Icons
-
-
Created Styling option for Parent Rows in Tree Views.
Improvement:
-
Added a Source Control Asset Data cache to prevent Source Control Changelist Window from rebuilding the Asset Data from scratch when the UI refreshes.
-
Modified the Source Control beautification to be an async process, preventing crowded changelists from blocking the workflow. The filenames are now beautified when available.
-
Parallelized Asset Data information retrieval from Source Control.
Crash Fix:
-
Fixed a crash when an invalid TitleProperty was used for a Details property.
-
You can no longer dock tabs into docking areas that are contained inside the tab itself, because this would cause an infinite loop and eventually crash.
Bug Fix:
-
The MakeTransform function now takes a default value for Scale from the FTransform struct. This fixed Python to initialize the unreal.Transform method with the expected default values.
-
Fixed mouse wrapping prematurely over RDP when clicking 10% away from screen edge.
-
Fixed an issue where Advanced Copy was not copying packages that weren't loaded into memory.
-
Fixed an issue where the camera would snap back after using SetLevelViewportCameraInfo and orbiting.
-
Opening the Save Layouts dialog no longer immediately renames the current layout to "Copy of
", leading to an ever-increasingly long name suggestion in the Save Layout dialog. -
Fixed a crash due to unhandled cases in SGameFeatureStateWidget::GetDisplayNameOfState(...).
-
Fixed a crash when pasting an empty string, or a string with only newline separators, into a bulk property editor cell.
-
Booleans in EditCondition are now case insensitive.
-
Fixed improper filtering of object path names in AssetUtil::ExtractAssetDataFromDrag.
-
Fixed a bug that prevented the use of the Gamemode Override when calling GEditor > RequestPlaySession. The URL needs to contain the Unreal path for the game mode to be found.
-
Fixed a typo that prevented the bShowHiddenPropertiesWhilePlaying from being changed in the UI.
-
Fixed spline component to correctly compute zero bounds when the spline contains no points.
-
Selecting a spline point in one viewport now updates the other viewports in a multi-viewport layout.
-
Fixed an issue where a mouse click on "Pin Actor" in Scene Outliner entered FSlateThrottleManager's Responsive mode without ever leaving it. This is similar to SSceneOutlinerTreeRow::OnMouseButtonDown.
-
Addressed an issue where the camera velocity was reset when focusing on the camera editor. This fix prevents rubber banding.
-
Custom copy/paste actions now pulse the details row to indicate they were run.
-
Fixed an issue where StaticMesh Foliage would not appear in the Foliage Palette in a World Partition level.
-
Fixed an issue where StaticMesh Foliage Actors would not persist between saves on a World Partition level.
-
StaticMesh Foliage Type is now required to be an asset when working in a World Partition Level.
-
Fixed an issue where launching the Editor with -game would lead to a crash on levels using One File Per Actor.
-
Addressed an issue where Mesh Paint was not allowing vertex painting across all segments of a spline mesh component.
-
Fixed spline Alt-Drag to work correctly with large snapping values.
-
Fixed an issue with FBX Static Mesh reimport, so it now correctly recomputes the spline mesh component collision.
-
Added information to what failed when an edit condition cannot be parsed, indicating whether it was an issue with the type or the value.
-
Fixed an issue with spline Snap to Nearest to snap to the current spline as well as nearby splines and to only snap to valid and visible nearby splines.
-
Fixed vertex painting on Blueprint spline mesh component instances so the vertex data is no longer lost when the construction script is rerun.
-
Fixed an issue where an Ensure message could display in studio analytics during long slow task dialogs.
-
Added a LinearDeltaSensitivity metadata property tag to make it possible for Detail panel sliders without upper and lower bounds to not scrub exponentially.
-
The source control item in the Edit menu now dynamically changes between Connect to Source Control and Change Source Control Settings, depending on the current state of the connection to source control.
-
Fixed the regression where PIE sessions would have Lumen Visualization enabled by default.
-
When converting to FName in Python, there's a guard to verify the name will fit within NAME_SIZE.
-
Fixed the issue where the HighResShot console command would overwrite the file specified in the filename argument from a previous call because it didn't reset the reference when no parameter was given on a subsequent call.
-
Subcategory nodes now hide themselves if no children are visible.
-
Added a new function AddPendingLateJoinClient to fix an assert, if the experimental Late Join feature was bound to a key and the key pressed while in PIE.
-
Alembic import now stores all the import settings used at import so it can use them again on reimport.
-
Fixed the issue where shelved files from another branch were preventing FPerforceGetPendingChangelistsWorker from completing, causing the Changelist Window to refresh.
-
When you search in the Details panel, the Advanced subcategory will now be filtered out if there are no children to display.
-
Basic Python wrapped types now have the representation function repr, which was missing before.
-
Clicking a suggestion in the Engine Console auto-complete list now moves the caret to the end of the selected text, matching the behavior of pressing Tab to select the value.
-
RemoveLevelsFromWorld now checks if the GEditor->Trans pointer is valid before accessing.
-
Fixed the issue where the file history was truncated for moved files in Source Control.
-
Fixed an issue where SRichTextHyperlink was not triggering or navigating when clicked.
-
Fixed an issue where SRichTextHyperlink was not displaying correctly when clicking on the link, moving the mouse away from the link, and releasing the mouse. The link now appears underlined.
-
Fixed the Python plugin to allow resolving USTRUCT Make and Break functions specified with 'HasNativeMake' and 'HasNativeBreak' later. This supports cases where the Make or Break functions are implemented in a C++ module that is loaded after the module declaring the USTRUCT. The implementation postpones resolving missing functions until FCoreDelegates::OnPostEngineInit is invoked. If one or more functions are still missing, the corresponding error(s) are logged.
-
Fixed an issue where the current LOD would not display on static meshes in the Static Mesh Editor.
-
Fixed a crash in EditConditionParser when using an invalid enum or value.
-
Changed how lambda captures the Asset Editor toolkit name for conditional additions to the Asset menu.
-
We now refresh cached menus when the editor selection changes.
-
Fixed an issue where main frame notifications couldn't be dismissed if they were also set to time out, because the pointer would reset.
-
Removed code from the Python build scripts trying to detect if a user-specified SDK is 32-bit or 64-bit. Parsing the Python interpreter output could make the build fail.
-
Fixed source code navigation on Windows not working if "On Demand Symbols Loading" is enabled.
-
Fixed the Editor Python Executor to parse and escape quotes for -ExecutePythonScript command line parameters to allow quoting python arguments containing spaces.
-
Fixed an issue that prevented some options from functioning in an Asset Picker when it is embedded in a menu.
-
Prevented adding non-existing directories to Python 'sys.path'.
-
Fixed an issue causing duplicate buttons to show up for some properties in the Details Panel, such as the Row Struct property in the Data Table Details.
-
Fixed the Editor toolbar dropdown not closing when the user clicked in a non-client area, such as the one between the Help menu and the label showing the project and branch.
-
Fixed a memory leak each time we drag something in the Editor Viewport.
-
Fixed an issue where Preview Rendering Level change was not being applied to either editor-viewport or separate-window in-process PIE.
-
Added FSourceControlFilesDeletedDelegate. We now broadcast that revert or markfordelete operations could require cleanups, for example when packages, assets, or refs are deleted.
-
Fixed an issue where reverting Mark For Add on an asset was preventing you from recreating an asset with the same name in the same editor session. The asset was still present in AssetRegistry.
-
Fixed an issue with preview rendering levels where you couldn't change to a platform that had the same Feature Level as the running Editor.
-
Moved FocusAllViewportsToSelection to FEditorViewportCommands so that it doesn't trigger during PIE sessions.
-
Fixed a potential crash when AddObjectPropertyData was called during a customization.
-
Deprecated functions in the EditorScriptingUtilities plugin now correctly show the deprecation message in the Editor, which contains the location of the replacement functions.
-
Fixed a crash in the updated CurveTableEditor when adding curves.
-
Fixed an issue where Actors spawned with bHideFromSceneOutliner were still visible in the Scene Outliner.
-
Fixed the hit proxy gathering on asset editors that have no world.
-
Fixed saving high resolution Editor screenshots so they are saved as .png.
Content Browser
New:
-
Added support to the Content Browser for migrating selected assets and their dependencies that are inter-referential across content roots. Assets spread across content roots are migrated into the corresponding content root in the destination, if it exists. If any don't exist, we migrate the selection and dependencies to temporary packages into a folder that is migrated to the destination.
-
Updated class folders to use names friendly to plugins.
-
The Content Browser can now sync to levels and maps, making working with these assets a bit easier.
-
Float, Vector, and LinearColor Curve assets can now be imported from and exported to JSON. They also support the following hotfix syntax to hotfix the entire asset:
+CurveFloat=<curve float path>;CurveUpdate;"<json data>"
+CurveVector=<curve vector path>;CurveUpdate;"<json data>"
+CurveLinearColor=<curve linear color path>;CurveUpdate;"<json data>"
-
Asset names are now sorted in a way that handles all trailing numbers, including fully numeric names.
-
Made a slight increase to the Sources panel splitter size and Hit Detection handle in the Content Browser.
Material Editor
Bug Fix:
- Fixed a typo in the RemapValueRange node for the Material Editor.
Media Framework
Bug Fix:
-
Fixed an issue when ExrImgMediaReaderGpu (ImageMedia) was falling back to default reader when the frame read was canceled, but still successful.
-
Fixed an issue with MediaTexture. There was no interpolation between mip levels for textures with mips generated externally to Media Framework, which created a hard aliased edge. Now there is filtering between mip levels when mip levels are provided from outside.
Scripting
New:
-
Added Get/SetNaniteSettings functions to StaticMeshEditorSubsystem.
-
Adding Get/SetLODGroup functions to StaticMeshEditorSubsystem.
-
Changed FMeshNaniteSettings to BlueprintType, and its members are now BlueprintReadWrite.
-
Plugins can now add third-party Python scripts within their Content/Python/Lib/site-packages and Content/Python/Lib/{Platform}/site-packages folders, and these will be automatically available for import within Unreal.
-
PythonScriptCommandlet now returns a non-zero value when the script execution fails.
-
Added the Python Foundation Packages Experimental Plugin. Python packages such as NumPy 1.20.3 and PyTorch 1.9.0 will be available in the Python environment when the plugin is enabled.
Static Mesh Editor
New:
-
Improvements were made to the Static Mesh Editor. The quality of 16 bit UV quantization is now rounded instead of truncated when converted from F32. In rare cases, this causes problems with old content, particularly when previous UVs were exported for baking textures. To allow toggling back to the old UV quantization, a new option was added in FMeshBuildSettings called bUseBackwardsCompatibleF16TruncUVs. In the Editor, this option is called "Lower-Quality UVs (UE4 Compatibility Mode)". This is set automatically from the mesh version, so seldom needs to be set manually.
-
The Static Mesh Editor now has the default ModeUILayer tab appear along with the existing docked extension tabs.
Bug Fix:
- Fixed a crash in the Static Mesh Editor when setting a custom complex collision mesh and trying to select it.
Gameplay Framework
New:
-
Overhauled the Blueprint Debugger by adding rich tooltips to pins when stopping at a breakpoint, and expanded functionality in the Blueprint Debugger tab.
-
Exposed a method to set the Character's CrouchedHalfHeight variable to Blueprints.
-
Added a new Blueprint editor workflow setting to provide the user the choice on how to restore breakpoints when the Blueprint asset is reloaded.
-
Changed the default behavior of the CheatManager so it is completely disabled in Shipping builds. Test builds will now work like the Development build where it can be enabled in multiplayer with the EnableCheats command.
-
Added a PinSelectorFilter to provide users the capability to customize Blueprint pin filtering.
-
Added support for input bindings in components. You can now place Input Action and Input Axis mapping event nodes in components.
-
Implemented a Key parameter for PrintString and PrintText nodes.
-
Added new delegates to the GameViewportClient that allow overriding key and axis input before it is routed to the player controller. This can be used for things like console "Press Start" screens.
-
Increased the default value for the NetPackedMovementMaxBits variable from 2048 to 4096.
-
Implemented Kismet Library utilities for reading an entire Render Target at once.
-
Blueprints can now be associated with a namespace identifier(MyProject.MySubArea). When set, this will exclude it from being loaded in the next editor session by another Blueprint editor context that does not share or otherwise _import _the same namespace. This feature is experimental.
-
Added a note to Enhanced Input event nodes when an exec pin is connected to an action that will not fire. InputTriggers can override this method to provide their own bitmask of supported types.
-
Support for doubles and int64 types in the Format Text node have been added.
-
Exposed the AffectedByTimeDilation boolean in the InputTriggerTimedBase class to the Input Action editor.
-
Added a ToString method for Input Action Values.
-
Full Parent Names will now display in the Class Settings panel in the Blueprint Editor.
-
Exposed the bForceRebuildImmediately variable to both the AddMappingContext and RemoveMappingContext. This provides users a method to force a rebuild of the control mappings within the same frame of changing their context.
-
Improved the tooltip on the Execution pins of the Enhanced Input action event nodes to give more detail about when to use which pin.
-
Game feature plugins can now modify the gameplay cue paths on the GameplayCueManager.
-
All subobject editor icons are now white. The previous icon colors of green and blue have been removed.
-
Added FindRelativeLookAtRotation function to Kismet Math Library.
-
Added setters for default classes in the InputSettings.
-
Implemented the ability to double click an input action node and have it open the corresponding input action asset.
-
Support to replicate loose gameplay tags and an ability's Activation Owned Tags has been added in the Gameplay Ability System.
-
Games can now specify which Blueprint classes can be edited while playing in the editor. BaseClassesToAllowRecompilingDuringPlayInEditor is an option in both the Blueprint Project Settings for project wide allowances, and Blueprint Editor Preferences for local changes.
-
Blueprint interfaces now use Blueprintable/NotBlueprintable to determine if they can be implemented in Blueprints to match how classes work. CannotImplementInterfaceInBlueprint will still work and is treated like NotBlueprintable.
-
Gameplay Abilities: Exposed a helper method GetGameplayEffectUIData to get the UIData from a gameplay effect class.
-
Exposed GetBuildVersion and GetBuildConfiguration to Blueprints.
-
Added an explicit context to game feature activate/deactivate that allows restricting to a specific world instance. This means that game feature actions can be used correctly by game-specific systems while in Play in Editor.
-
Fixed data loss with Data Registry Ids that point to invalid registries. They will now keep their data but display a warning in the editor.
-
Added support for Niagara camera lens effects to gameplay cue notifies.
-
Re-ordered the message log tokens in Blueprint runtime errors so the most relevant token(node) is displayed first instead of last.
-
Changed the Async Load Primary Asset Blueprint nodes to return all requested and loaded assets instead of only newly loaded ones.
-
Added a PreCreatePIEInstances as a PIE lifecycle event on the editor engine.
-
Added the End Ability Locally function to gameplay ability, this is needed for predicted abilities with animations where you don't want the server ability to end early and miss a callback.
-
Added a display of expected units (cm/s or cm) to various properties in the CharacterMovementComponent class,
-
Added a new version of the PreLoadMap delegate called PreLoadMapWithContext that provides the associated world context for the load map request. This allows registrants to disambiguate which game instance is involved in multiplayer Play In Editor.
-
The target Actor for Add Component game feature actions can now be an abstract class.
-
Added a game feature plugin template that contains a runtime C++ module.
-
The controls for switching Game Feature states now have tooltips about the nature of each state.
-
Changed the LastMovementServerBase pointer on the Character Movement Component to a weak object pointer in case the component gets deleted.
-
Return value pins on async task nodes now attempt to pull tooltips from the underlying delegate declaration providing better user-facing information to be surfaced.
-
Get Subsystem nodes now pull the tooltip from the class declaration of the underlying subsystem.
-
Changed Blueprint functions to behave like the GetPlayerController function, to use a stable index where 0 is always the first local player controller. This stays consistent during map transfers.
-
Most core types (FVector/FMatrix/FQuat, and so on) now support both float and double variants, but will default to double. This enables enhanced precision for Actor placement/orientation, as well as increased world sizes.
-
Added an OnPawnChanged event to PlayerState class.
-
Added an OpenCV helper Blueprint Function Library which adds convenience nodes for ArUco marker tracking and camera calibration chessboard detection.
-
Added the following macros PRAGMA_FORCE_UNSAFE_TYPECAST_WARNINGS, PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNING, PRAGMA_RESTORE_UNSAFE_TYPECAST_WARNINGS to permit control of truncation and narrowing warning state within code blocks that assist with identifying potential Large World precision issues.
-
Made Conversion casts between float and double core type variants explicit.
-
Input Delegate Support inside of Widget Blueprints. This provides users capability to place the normal "Input Action" and "Input Axis" event nodes in a widget and they will behave as they would in an Actor as long as there is an owning Player controller.
-
Improved the state tracking of which keys are Triggered in enhanced input.
-
Added an EnableLargeWorlds boolean variable to the World Settings class for wrapping disabling bounds checks, octree visibility, and octree shadow culling. This can be used for preliminary Large Worlds testing.
Improvement:
-
Reflected references are automatically updated when instances are replaced. UMG widgets with existing instances do not work by default, however games can hook a delegate to recreate their user interface in order to enable support.
-
Improved the error message about duplicate world settings by printing the full path of the Actor and persistent level that has the issue.
-
Better support has been added for different world modes in the Add Components action for creating both client and server components in standalone.
Crash Fix:
-
Fixed a reference replacement oversight during object consolidation to a duplicated Blueprint asset that could lead to an editor crash in some situations.
-
Fixed a crash after choosing to find and replace all node references to a member variable in the Blueprint editor.
-
Fixed a crash when adding an input context that contained a null action mapping.
-
Fixed a crash when pasting a local variable get node in the event graph of a child blueprint.
-
Fixed a crash when pasting a local variable get node from the parent Blueprint into the child Blueprint's event graph.
-
Fixed a crash when activating a non-instanced ability that attempts to call instanced-only functions.
-
Guarded a potential crash in the GetAbilityLevel method from the Gameplay Ability class if the Ability System Component pointed to an Actor whose info has been destroyed.
-
Prevented a crash on shutdown that occurred if the UObject system had already been removed by the time the game features editor shut down.
Bug Fix:
-
Added the AbilitySystemGameFeatureActions plugin, and moved the GameFeatureAction_AddAttributeDefaults class into it from the GameFeatures plugin.
-
Added a space between arguments when parsing multi-axis console commands to correctly parse when initializing from a string in the EnhancedInput class.
-
Fixed propagation to instances when modifying the query in a parent object of a GameplayTagQuery.
-
Fixed the GetClassDefaults Node discarding ShowPins settings during compilation if connected to a reroute node.
-
Added a fix to account for indirect dependencies from a macro graph expansion which could otherwise lead to a script VM crash during PIE.
-
Refreshed user-defined structure editor data on save/compile to ensure default object reference values stay in sync with default structure instance data.
-
Fixed issue where looping gameplay cue notifies were incorrectly flagged as having active effects.
-
Fixed a few destructor typos that attempted to unregister handlers from the wrong delegate interface on editor shutdown.
-
Fixed a regression that incorrectly restricted the Outer input pin on ConstructObjectFromClass nodes to self class subtypes.
-
Fixed an issue resulting in an invalid graph when Promoting a Collapsed Node to Function/Macro is undone.
-
The const Blueprint function attribute is now kept in sync on function overrides when inherited from a parent class.
-
Fixed an uninitialized variable leading to a broken toggle UI on Mac/Linux editor targets.
-
Marked macros being pasted into Macro Libraries as public.
-
Fixed a bug where Blueprint nodes with gameplay attribute pins would not respect redirectors.
-
Fixed an invalid Blueprint compiler warning for generated Blueprint assets that were not otherwise loaded.
-
Marked the enhanced input console commands as ECVF_Cheat to prevent them from being added to any shipping builds.
-
Improved Blueprint thread safety checks.
-
Variable categories in the My Blueprint tab are now properly sorted.
-
Added function metadata that provides users capability to exclude functions from type promotion.
-
Fixed a minor bit packing issue in the generated Blueprint class structure.
-
The real time delta seconds of the world will now be tracked to use as a backup if Time Dilation on the player controller is set to 0. This ensures that timed triggers are still calculated correctly even with time dilation at 0.
-
Fixed an issue where repeated ability-driven montages could fail to be fully replicated on simulated proxies.
-
Prevented memory corruption when appending an array.
-
Added a flag to ignore EnhancedActionKeyMapping's if the Key was down during a rebuild of the Player Control Mappings.
-
Added Check if an ActorComponent is replicated to show an icon in Blueprint.
-
Check if AttachParent is valid when receiving AttachSocketName before updating the attachment.
-
Fixed several issues with Play In Editor with multiplayer games, it now correctly handles URL options like a listen server does across map transitions and the world net mode will be accurate to the current condition instead of the initially launched mode.
-
Fixed several issues with using interface types in blueprints for casting or constructing objects.
-
Prevented a spurious log error when editing CanReferenceTheseDomains in Asset Referencing Policy settings.
-
Fixed the GetDebugDisplayName method from the World class to work properly outside of the scope of 'play in editor' ticking.
-
Improved logging quality in the RawInput class and fixed expected behaviors such as disconnected devices or query results to be logs instead of warnings
-
Changed the user facing display name for GameFeaturesManagerClassName to "Game Feature Project Policy Class".
-
Fixed an issue that prevented certain state transitions in the Game Features editor from working.
-
GetAssetUserDataArray is now implemented for the WorldSettings class.
-
The PlayerController class will now never return a null view target.
-
Editor Only child Actors are no longer implicitly transient.
-
Added an assert to make errors when replicating an attribute set on an improperly set up ability system component more explicit instead of causing an access violation.
-
Prevented self-assignment of Child Actor Components in Blueprint classes.
-
Added detection and repair process for maps that became corrupted with multiple Level Script Actors.
-
Fixed an incorrect doc-comment for the AddFunctionGraph function.
-
Fixed an issue where the Blueprint class default values were not initially propagating to the child classes if created by promotion to a variable.
-
Fixed a bug where additive root motion's influence would be cut in half if applied while falling.
-
Fixed a mouse wheel scroll up and down by manually setting the value of boolean keys that are pressed and released within the same frame.
-
Blueprint-added component archetypes will no longer fail to load when the underlying class type has a non-default ClassWithin value.
-
Fixed an editor access violation crash caused by a reference to a stale property wrapper object.
-
Fixed a failure to regenerate function signatures referenced by call sites after renaming input/output pins on function graph entry/result nodes.
-
Fixed missing import warning on next editor load after renaming a macro in a Blueprint macro library.
-
Ensure that Blueprint graph nodes are always fixed on load as part of the precompile phase, including for fast paths (data-only Blueprints).
-
Blueprints can no longer bind to gesture keys if it is not enabled in the settings. To change this enable the gesture setting in the project settings or delete the problematic node.
Deprecated:
-
Deprecated old input scales on the player controller (InputYawScale, InputPitchScale, and InputRollScale).
-
Deprecated the UDynamicClass API and removed all special-case code paths for dynamic types.
-
Deprecated the Always host global Blueprint searches originating from the Blueprint editor's "Find Results" tab in a global tab window.
-
UHT no longer generates the PPO_ accessors that previously used to allow nativized Blueprints to bypass C++ protection levels as Blueprints have different semantics for private and protected.
-
KismetMathLibrary Deprecated MinimumAreaRectangle function, which effectively returns the average of all input points as the rectangle center, and introduced MinAreaRectangle function that returns the proper minimum area rectangle around the input points.
Removed:
-
Removed the creation of transient TRASHSTRUCT objects as they are no longer required by user-defined struct precompilation in the editor context.
-
Removed underlying framework and support for the Blueprint nativization feature and all related code modules from the engine.
Geometry
New:
-
Updated the Path Extrude tool to let users choose how to set poly groups on the offset top mesh.
-
The Path Extrude tool can now enable Ramp extrude modes for closed paths.
-
Users of the Path Extrude tool can now enable snap to grid (distance) during width specification.
-
Updated the Path Extrude tool to enable optional rounded corners. This replaces polygon corners with circular arcs. Users can set the desired uniform arc radius.
-
Added a Convex Hull mesh generator option to the AutoLOD tool.
-
Added the ability to add an overlay widget to the viewport.
-
Added a ModeUILayer member to handle mode toolkit hosting StaticMeshEditorModeling.
-
Created a mode and toolkit with AutoLOD and LODManager tools.
-
Added a button to the StaticMeshEditor's toolbar to toggle UMeshLODPluginEditMode.
-
Updated tools to use UnsetTriangle instead of SetTriangle if we know an overlay triangle is invalid. Avoids a checkSlow in SetTriangle.
-
Added the ability to draw unset UV triangles in the Mesh Inspector tool.
-
The Lattice tool no longer allows constrained lattice vertices to be moved, even when not in Soft Deformation mode.
-
When adding a new attribute, or undoing the deletion of an attribute, sets the selected attribute in the UI to the name of the new attribute in the Attribute Editor tool.
-
Added support for open curves in PolygonEdgeMeshGenerator to the Path Extrude tool.
-
Added temporary AActor members to contain UDynamicMeshComponents used as preview meshes in some tools.
-
Updated the Path Revolve tool so when the next click would finish the path, highlights the path in yellow to let the user know.
-
Added output type properties to Boundary Revolve tool.
-
Users can now optionally create new polygroups for refined output faces in the Subdivide tool.
-
Modeling Tools no longer snap the transform gizmo on mouse-down. Now waits for the drag event.
-
Added support for Custom Primitive Data to ProceduralMeshComponents.
-
Added support for Custom Primitive Data to DynamicMeshComponents
-
Updated the Subdivide tool to interpolate Material IDs from input mesh to subdivided mesh.
-
Added Mesh Inspector tool to Static Mesh Editor's modeling tools.
-
Warns the user that new assets might be created when AutoLOD is launched from the Static Mesh Editor.
Improvement:
-
Added AutoLOD tools to the Static Mesh Editor.
-
Shared ownership of StaticMeshViewportClient's ModeTools via the EditorModeManager member.
-
Set up the EditorModeManager's preview scene and selected components when it's copied.
-
Add a set of FStaticMeshEditorToolbarExtender delegates to the module (similar to FSkeletalMeshEditorToolbarExtender).
-
Refactored the Path Extrude tool. Moved FPolygonEdgeMeshGenerator to its own file with other mesh generators.
-
Refactored the Path Extrude tool and replaced planar UVs in the Polygon Edge Mesh generator with a UV strip that follows the input polygon edges.
-
Refactored the Path Extrude tool and removed hacky UV generation for closed-loop ramp case.
-
Refactored the Path Extrude tool and merged two extrude functions into one.
-
Refactored the Path Extrude tool and removed a function of all dead code.
Bug Fix:
-
Fixed a crash when adding a new key/value pair and were using sparse map type in FOptionallySparseIndexMap.
-
Fixed gizmo not appearing in the Lattice tool after lattice vertices are selected.
-
Fixed an ensure when a polygon self-intersection passes exactly through a vertex with the PolyExtrude tool.
-
Fixed the width mode always snapping to world grid, even when grid snapping is turned off in the PolyExtrude tool.
-
When using the Mirror tool, closing a dialog that asks the user if they want to delete a mesh component does the same thing as hitting No.
-
enabled SubdividePoly to handle input mesh with no UV attribute in MeshModeling.
-
Fixed a crash when undoing and then redoing the creation of multiple Brush actors.
-
Enabled snapping to world grid when laying out the path in Path Extrude.
-
When using the Lattice tool, clear any existing deformer constraints when the lattice resolution changes.
-
Allowed for an overlay element to not be incident on any overlay triangles but still have a reference count of one.
-
Maintain UV islands when subdividing with the Subdivision tool.
-
Update the visible attribute lists when undoing/redoing adding and deleting attributes with the Mesh Attribute Editor.
-
If a ToolTarget's MeshComponent has no MeshDescription, return an empty but valid one. Harden various tools to not crash on empty meshes.
-
The Path Extrude Tool now supports a single-segment path.
-
Fixed calling OnRemoveTriangle when it should have been OnRemoveVertex.
-
If a UDynamicMeshComponent's Mesh has no attributes, have GetAutoCalculatedTangents just return nullptr. Otherwise it will return whatever stale data is in AutoCalculatedTangents.
-
Prevents a dragged gizmo from detaching from lattice points when snapping is enabled in the Lattice tool. Control points were not being transformed if the gizmo returned to its exact (pre-drag) starting position. This became apparent with snapping when the gizmo did not smoothly return to its starting position.
-
When trying to modify a built-in editor asset, pop up a notification window rather than display in the viewport
-
Fixed gizmos not being selectable after placing a new mesh in the level.
-
Fixed an ensure in the Dynamic Sculpt tool by allowing the initialize remesher async tasks to finish at the end of each tick.
-
Fixed Volumes not updating player collision model when brush shape is modified or when undoing/redoing brush shape modifications.
-
Set a max lattice resolution for each dimension in the Lattice Deformer.
-
Fixed issue with Enter key not closing the polygon in the BSP Pen Tool.
-
Fixed FPoly::OptimizeIntoConvexPolys creating polygons that fail coplanar check in FPoly::IsCoplanar
Learning Resources
Content Examples
Bug Fix:
- Fixed a bug in the POM (Parallax Occlusion Mapping) content examples where the POM material function was not casting self shadows.
Documentation
New:
- Updated documentation links/parsing to include versioning.
Localization
New:
-
Added support for custom FText::AsDateTime formatting patterns
-
FText shared display strings are no longer required to be unique. Deprecated their public access.
-
Added FTextInspector::GetSharedDataId for when you want an opaque key for a unique text instance.
-
Deprecated FTextInspector::GetSharedDisplayString and changed it to return FTextDisplayStringPtr.
-
Deprecated the FStringTableRegistry::FindTableIdAndKey overload that takes an FText, in favor of using FTextInspector::GetTableIdAndKey.
-
Removed the FStringTableRegistry::FindTableIdAndKey overload that took a FTextDisplayStringRef.
-
Removed the DisplayStringsToKeys LUT from FStringTable. The FStringTable::FindKey overload that takes an FStringTableEntryConstRef is now non-accelerated, but also not called from anywhere.
-
Removed the FStringTable::FindKey overload that took a FTextDisplayStringRef.
-
Renamed GetLocalRevisionForDisplayString and DirtyLocalRevisionForDisplayString to GetLocalRevisionForTextId and DirtyLocalRevisionForTextId in FTextLocalizationManager, and updated LocalTextRevisions to key against FTextId rather than FTextDisplayStringRef.
-
Fixed some const-correctness in FTextLocalizationManager.
-
-
FText is no longer required to have (or be able to have) a shared display string.
-
Removed FTextHistory::SerializeForDisplayString. This data is now handled directly by FTextHistory::Serialize, with FTextHistory::UpdateDisplayString resolving the display string when needed.
-
Added FTextHistory_Generated to provide the common functionality for generated text histories that need to re-build a local display string.
-
Added FTextSnapshot::LocalizedStringPtr to detect if the localized string changed within a history.
-
Updated FStringTable to use FTextKey rather than FString for text namespace and keys.
-
-
FTextLocalizationManager::FindDisplayString and FTextLocalizationManager::GetDisplayString now return immutable shared display strings.
-
FTextLocalizationManager can now preserve the de-duplicated display string data loaded from a LocRes.
-
Made FDisplayStringEntry::DisplayString const, as shared display strings cannot be mutated.
-
Updated FTextLocalizationResource to preserve its de-duplicated display string data, to be applied within FTextLocalizationManager.
-
Leetification (for debug) now makes unique display string instances (as it cannot modify the shared display string).
-
Removed FDisplayStringEntry::bIsLocalized as it was inconsistently set, and ultimately not significantly used.
-
Bug Fix:
-
Text localization manager no longer returns explicitly excluded cultures from list of available cultures.
-
Consider all properties within an editor-only class to be editor-only when gathering localization
Mobile
New:
- Mobile builds now exclude engine post-process calibration materials and textures.
Bug Fix:
-
Group read/write on created files on Android are now allowed.
-
Fixed handling comments after the section name in .ini files for UnrealPluginLanguage.
Removed:
- Removed scene software occlusion. UE5's minimum specs require a device with hardware occlusion queries, which are more efficient than software occlusion.
Android
New:
-
Added the FGenericPlatformMisc::ShowConsoleWindow function as a way to toggle the console on the Android mobile platform.
-
Enabled cached OS page allocator on Android when using MallocBinned2. This reduces the overall amount of Virtual Memory Areas used by the process as they are limited to 65536, and games that use a lot of memory can go over that limit.
-
Added experimental support for NDK 22+.
-
Option to select build-tools version in Android project settings.
Improvement:
- Increased stability of stack walking code during crashes on Android.
Bug Fix:
-
Android EGL now binds newly created shared surface on game thread after resume.
-
Added protection against null on failure response from Google Play IAP.
-
Fixed OptimizeForSize compile environment option for Android targets. Previously it was always overridden with -O3.
-
Fixed DeviceProfile fragment cvar lookups.
-
Removed patching of cpu-features.c now that ARMv7 is no longer supported.
-
Properly filter out all 32-bit Android includes and libraries.
-
Fixed a check for fallback location SetupAndroid.bat.
-
Fixed issue which caused resizableActivity not to appear in manifest.
-
Changed display of OpenGL 3.1 support to 3.2 for Android project settings.
-
Fixed hlslcc depth fetch support on Android devices not supporting GL_ARM_shader_framebuffer_fetch_depth_stencil.
-
Added a fix for uploading Android 12 shipping builds.
-
Fixed Android x86_64 linking for BinkAudioDecoder.
-
Fixed issues preventing Android ASan builds from working correctly.
-
Does not select unsupported build-tools versions installed. Now checks against min and max version numbers.
-
Fixed incorrect Adreno version checks in Android media players and camera plugin.
-
Added fallbacks for missing commands on older Android, did timing adjustments for StartServer.
-
Added missing OpenXR xml file to binary builds.
-
Fall back to netstat if ss utility is present but not showing connections during StartServer for Android File Server.
-
Added server failure reasons to logging and increased the number of retries on StartServer for AndroidFileServer.
-
Fixed issue with losing Android force feedback due to OpenXR and OculusVR plugins.
-
Fixed handling of AndroidFileServer startup checks where the receiver may not be ready immediately after install.
iOS
New:
-
Refactored iOS Icons to create the asset catalog according to the present file.
-
Set a new default shader for Apple platforms and IOS 15 support.
-
Added ios 15 / tvos 15 target and Metal 2.4 flag.
-
iOS icons will auto-generate from the Marketing Icon.
-
tvOS asset catalog support has been added in Unreal Editor.
-
Display the trust popup on iOS and tvOS when using an untrusted device.
-
Added support for the Device Output Window log and console command sending on iOS using libimobiledevice.
-
Made the iOS dSYM generation checkbox descriptions clearer
-
Added four iPhone 13 models and twelve iPad models to device profiles.
-
Fixed deprecation warning in iOS location services.
-
Updated IOS and tvOS assets to UE5 logo and font.
-
Removed perspective-correct shadow depth shader permutation when it is not required on mobile platforms.
CL: 17921199
- Remove NoLightMap shader permutation for materials that are not using it on mobile platforms.
CL: 17591802
- Added a project option to disable support for per-pixel material shading models on mobile platforms (r.Mobile.AllowPerPixelShadingModels=0).
CL: 17403931
- Set FXAA quality to 0 on mobile platforms by default.
CL: 17348846
- Reflection capture now accounts for reflection capture influence radius when finding closest capture for an object. Fallback to skylight reflection when there are no influencing reflection captures on mobile platforms.
CL: 17093848
- Added an efficient mobile-specific implementation for auto-instancing and GPU instance culling. Supported on iOS and Android devices. To enable add r.Mobile.SupportGPUScene=1 into DefaultEngine.ini.
CL: 16921709
Improvement:
-
Both OpenGL ES and Vulkan are now enabled by default when packaging Android, and Vulkan will be used on the following devices:
-
Adreno 6xx and 7xx-based devices running Android 9 or later
-
Mali-G72 devices running Android 10 or later, or any Mali-G76, G77, G78 or G710-based device.
-
PowerVR GM9xx-based devices
-
Xclipse 920-based devices
-
CL: 19089743
Crash Fix:
-
Fixed a crash when disconnecting / reconnecting a bluetooth controller outside of the app.
-
Fixed crash on mobile while rendering custom depth primitives that require scene texture access.
Platforms - iOS
CL: 18581533
Bug Fix:
-
Fixed idevicefs pull call in iPhone Packager.
-
Release the viewcontroller holding the splashcreen storyboard when it's no longer displayed.
-
Removed default brightness and reset brightness on iOS.
-
Fixed iOS Location Usage Description.
-
Fixed enum warning in ios settings.
-
Fixed linker error for IOS Shipping builds when there are spaces in the project path
-
The Windows remote iOS toolchain now removes the old SSH key directory before generating a new SSH key, to fix up any incorrect directory permissions
-
Fixed r.MobileContentScaleFactor being ignored and always defaulting to 1 on iOS.
-
When packaging an iOS app on BigSur/Catalina, it is unable to be installed on an iOS15 device. This fix now sets the "--generate-entitlement-der" flag for 'codesign'.
-
Removed iOS 13 from plist to enforce minimum supported version of iOS 14.
Rendering - Mobile Rendering
CL: 19110691
- Fixed rendering artifacts on some Qualcomm devices with Android 12.
CL: 18689185
- PerlinNoise3D texture now correctly initializes on mobile platforms.
CL: 18104390
- Fixed issues with texture mip generation at runtime on Android devices running Vulkan
CL: 17961893
- Added access to CustomDepth and CustomStencil textures in a decal materials for mobile platforms.
CL: 17113348
- Previously, FPlatformMemoryStats.AvailableVirtual was always zero on iOS. This has been resolved by setting it to the same value as AvailablePhysical.
Platform - Mobile - iOS
CL: 19153534
- Fixed iPhone device names with apostrophes appearing as ???? in Unreal Editor on the Mac.
CL: 19092069
- Fixed issue where fatal iOS errors were not being written to the log file.
CL: 19237934
- Fixed problems with iPhonePackager downloading log files from devices with Unicode-character device names.
Platform - Mobile - tvOS
CL: 19284387
- On tvOS log files are created in /Library/Caches, as /Documents is not avaialble on this platform.
Rendering - Mobile Rendering
CL: 19243809
- Previously, CSM shadows were broken when Support Static Lighting is enabled but a level's World Settings have Force No Precomputed Lighting checked. This issue has been resolved, and CSM shadows will function normally with these settings.
Deprecated:
- Removed instruments when launching iPhone apps. Instead, the launcher will use idevicedebug.
Removed:
- Deleted iOS devices that don't support iOS 14+ from iOS device profiles.
Networking
New:
-
Added an option to let connections force all properties to be dirty on initial replication.
-
Added notification paths to other active net drivers of important Actor replication changes.
-
Added Actor flags to make PreReplication and PreReplicationForReplay functions optional.
-
Removed net.UseAdaptiveNetUpdateFrequency=0 from ConsoleVariables.ini file.
-
Added a compare/assign and mark dirty macro (COMPARE_ASSIGN_AND_MARK_PROPERTY_DIRTY) to the push model. This is defined in the #else so it will compile on the client.
-
Support for NetSerialization of a FInterfaceProperty.
-
Added additional CSV file stats/scopes for replication.
-
Added the number of active game driver clients to the engine crash context data.
-
Changed the SetReplicates method in the Actor class to avoid redundant work.
-
Added push model support to the base conversation component.
-
Increased the IPv4 private address space to include 172.16.x.x - 172.31.x.x.
-
Added support for push model dirty tracking to fast arrays.
-
Renamed command line options -DisableHttpWhitelist and -EnableHttpWhitelist to -DisableHttpDomainRestrictions and -EnableHttpDomainRestrictions.
-
Added a Switch Has Authority macro node for Blueprints derived from Actor component.
-
Renamed APlayerState::Ping and associated functions to CompressedPing, and introduced a new getter GetPingInMilliseconds that returns the accurate ping if it is available, or the decompressed replicated ping if not.
-
Added Net Fault Recovery to NetConnection to recover from non-fatal connection faults, and provide detailed analytics/logging for serverside and clientside connection errors.
Crash Fix:
-
Fixed a shutdown crash in the default voice engine implementation.
-
Fixed a crash when forcing a network update during shutdown.
-
Fixed a crash by resetting the NetPushId of an object when the object has no net driver state.
-
Fixed possible crashes from message construction using operator new by using FMessageEndpoint::MakeMessage() instead
-
Fixed a crash initializing object replicator state when the archetype is missing.
-
Fixed misleading unhandled socket error and subsequent crash by calling GetLastError before calling any other function that can clobber the error code that GetLastError returns.
Bug Fix:
-
Added net.ResetAckStatePostSeamlessTravel CVar to reset the package map's AckState on the server after seamless travel. Enabling this may prevent problems with Actors not replicating after travel due to clients missing entries in the NetGUID cache.
-
Fixed instances of missing push model dirty calls in scene components.
-
Moved the call to FlushNetDormancy earlier when removing active gameplay effects. This prevents issues where changes to ActiveGameplayEffects aren't tracked properly on dormant actors.
-
Fixed Fast Array bug where changing values after they are replicated in a single frame can cause them never to send.
-
Fixed an issue where replicated objects with only fastarrays or custom delta replicated properties would be tagged as having no replicated members and thus never replicate
Deprecated:
-
Deprecated InstancePreReplication on Blueprint-generated classes since it was not being used.
-
Deprecated FRepChangedParent in favor of a smaller bit array.
Replays
New:
-
Changed tracking of deleted startup Actors to avoid unnecessary uniqueness checks.
-
Added a new engine net version to support old replays. Fixed for net serialization compatibility issue.
-
Added the ability to set per object external data through the replay subsystem.
-
Allow replays to record unicast RPCs on Actors with the appropriate net driver name.
-
Added Blueprint accessibility to several replay subsystem functions.
-
Added a delegate for overriding the replay compatibility version check..
-
Added support for checkpoint-deleted Actor serialization to be split over multiple frames.
-
Added a way to request a checkpoint to be recorded immediately.
Bug Fix:
-
Fixed multiple compatibility issues that prevented Actor channels from being cleaned up during playback.
-
Fixed a crash that could occur when remapping playback channels.
-
Fixed a replay playback compatibility issue when an actor component class is missing.
-
Fixed a case where duplicate child actors would be spawned on replay scrub.
-
Fixed a rare scrubbing crash with delta checkpoints enabled.
-
Fixed non-replicated child actors not being cleaned up by their parents.
-
Fixed an issue with respawned startup actors having the wrong role during BeginPlay.
-
Fixed a case where dynamic actors flagged as replay rewindable might not be cleaned up properly after scrubbing.
Replication Graph
New:
- Added CVar Net.RepGraph.GridSpatialization2DDestroyDormantDynamicActorsDefault to allow Grid2D Replication Graph nodes to specify the default value of the DestroyDormantDynamicActor boolean.
Bug Fix:
-
Fixed dynamically spawned, initially dormant actors not replicating after the first dormancy flush.
-
Added a check to prevent connections from other drivers from being added to the graph.
-
Fixed a case where the graph could open duplicate channels for actors that persisted through a seamless travel.
-
Fixed multiple issues with dormant destruction info processing.
-
Added ensures in ReplicationGraph to detect when a PlayerController will open a channel to a non-owner connection.
-
Fixed GridSpatialization2D nodes in ReplicationGraph not clearing pending actors list on graph reset/level load.
Deprecated:
- Deprecated the PrevDormantActorList as it doesn't support multiple grids, The logic no longer processes dormant Actors for one grid on another grid when you have multiple grids for a connection. To upgrade you'll need to call ConnectionManager::GetPrevDormantActorListForNode to get your PrevDormantActorList and then modify the reference.
Socket Subsystem
New:
- Replace/remove uses of whitelist/blacklist in WebSockets.
Niagara
New:
-
Added a new experimental renderer type called Geometry Cache Renderer.
-
Added a new static switch constant for interpolated spawning.
-
Added a new data interface plugin called Example Custom DataInterface. This data interface contains C++ example content that shows how to write your own custom data interface for Niagara. This plugin can be found in Engine/Plugins/FX/ExampleCustomDataInterface
-
There is now a default mode for all new parameters, which is set to "Fail if Unset".
- See related CL: 17637669: Severity of messages for parameters with default mode "Fail if Unset" can be set via new CVar "Fx.Niagara.FailIfNotSetSeverity".
-
Added a cvar fx.Niagara.DeletePythonFilesOnError to prevent intermediate python scripts from being deleted in case of a version upgrade error.
-
Cascade was updated to support Large World Coordinates. CPU simulations are run with full double precision vectors. GPU simulations use a tile offset to translate world space emitter positions to float precision vectors.
-
Added function scripts to convert between RGB and HSV colors.
-
Added support for dynamic inputs to auto-convert types when dragging parameters in the stack.
-
Added a flag to the audio data interface to turn off audio when not in PIE.
-
Prevent Niagara compilations from accumulating, so there can be at most one pending compile request.
-
Changed derived data requests for compilation to be asynchronous. Also fixed a bug where FNiagaraEditorModule::OnPreExit would crash when trying to complete the compilation.
-
Added support for systems with a fixed tick delta.
-
Added HLSL syntax highlighting for custom HLSL nodes and the generated code view. Also added tab support to custom HLSL nodes.
-
Removed the Highlights feature from the System Overview. It was adding visual noise without having the intended benefit.
-
Groups can now be collapsed in the System Overview.
-
Scratch Pad modules now have a scratch pad icon in the System Overview.
-
The expansion state of the stack in the System Overview is now persistent.
-
Selected parameters can now be configured to show up in module rows in the System Overview. Parameters will show up either as a text-based button or an image-based button. This is configured in scripts via property metadata. Clicking one of the inline parameters will immediately highlight the represented parameter in the stack.
-
Added Category functionality to Niagara systems, to be able to filter the parameters in emitters.
-
Added copy paste for parameter metadata in Niagara scripts. A notification widget will inform the user if there is a duplicate parameter in the destination graph, and will skip copying the metadata. If the source and the destination graph are the same, the metadata paste will be skipped completely.
-
Removed CPU access warning for camera data interfaces as they are no longer valid.
-
Niagara viewport settings are now persistent. "Particles count" is now turned off by default.
-
Niagara's Mesh Renderer now adds its mesh batches to GPU Scene. These instances can be frustum and occlusion culled by the GPU Scene instance culling system. GPU Scene can also use this data to render the meshes in Virtual Shadow Map passes.
-
All GPU stages are now simulation stages. The intrinsic particle stage is now just another simulation stage that can be enabled or not. Iteration count is now dynamic and can be bound to a user variable. Simulation stages can be enabled or disabled dynamically by a user variable.
- A random seed parameter has been added to system instances. This creates the potential for randomness in System scripts.
-
Created a new data interface for reading properties from UObjects. This allows parameters to be automatically pulled from objects, instead of using Blueprints to pull data manually per frame. A source actor, or an explicit object user parameter binding can be read into the data interface. If the object is an actor, the data interface will look at the root component, or for an component of type 'source actor component class' to bind properties to.
- Added the ability to iterate over a subset of particles in a simulation stage.
-
Added a setting to allow sprites to maintain a one pixel coverage while applying a coverage 'fade'. The renderer can opt into this automatically, or manually. Currently, the setting only covers translucent and additive when set to automatic. The project can also set whether to opt in or out of this feature when in automatic mode.
-
Changed the system determinism default to false, which matches the default for emitters. Fixed CalculateRandomRange not using system seed information.
-
Added SceneCapture as an option to pull data from the baker. Set the default to use a scene capture in HDR mode, since this will be the most common path. Added a checkerboard display toggle, and an alpha blend toggle. Fixed an issue where StartSeconds was used from generated data to preview, rather than settings to generate data from. Inverted the alpha channel when capturing from HDR + A, so it can be used directly. Allowed alpha to be visualized in the baker.
-
Optimized the Ribbon Renderer FNiagaraRendererRibbons::AppendToIndexBuffer, resulting in 2 - 12x increase in performance.
-
Added an instance and particle transform space. You can use this space to transform in or out of mesh particle and instanced static meshes. Particle mesh space is now hidden, and will be removed later, since this new space covers that functionality.
-
Added support for setting system or emitter fixed bounds per instance.
-
GPU profiler is now hidden, and only required information is exposed outside the plugin. Extended the GPU profiler to capture the stage execution cost. It now passes the data to the particle performance statistics in the debug HUD.
-
Added a new data interface called ActorComponent, to access actors or actor component transforms. This can be set via the ActorSource parameter on the data interface, or via a user parameter.
-
Disabled the creation of render targets if the data interface is not used with an active GPU emitter.
-
We now allow data interfaces to opt out of running beyond PostActorTick. This is important for the collision data interface, since it relies on the async traces being issued this frame.
-
Split indirect argument generation into pre-opaque and post-opaque. This allows Mesh Renderers, sorting, and culling to all fully function on the low latency translucent path.
-
Added an option to sample RVT base color.
-
Added a menu option to show all data interface functions, and allow the HLSL code to be copied to the clipboard.
-
Added support for shared static float buffers that data interfaces can push data into.
-
Added support for getting the parent index of a bone. Added a warning if filtered bones are not required by all LODs, since this could mean that the effect may not play correctly if a lower LOD is used.
-
Added support for the MacroUV node in the Sprite Renderer.
-
Added support for pulling vertex or triangle data from a bind pose.
-
Improved debug element count forcing. Added an optional warning when we allocate GPU buffers beyond a certain threshold.
-
Added options for Niagara auto mip generation
-
We now allow arrays to be an iteration source. Updated the GPU copy when we dirty the data on the CPU, so that we can skip SetElement.
-
We now allow data interfaces to specify how they wish to dispatch, 1d, 2d, or 3d. Cleaned up the shader code generation between particle and iteration interfaces to improve performance.
-
Fixed force solo to not kill the component. When setting custom time dilation, Niagara will change into solo mode, and back out when it is set to 1.0.
-
Cleaned up multi-GPU Niagara code. Added cross-GPU transfer support to Niagara and Cascade. Added a method to Compute Dispatch Interface to allow data interfaces to send resources for transfer. Fixed missing persistent ID buffer transfers with alternate frame rendering (AFR). Fixed PostRenderOpaque transfer location to ensure we capture count updates.
-
Added per mesh rotation to the Mesh Renderer.
-
Add NiagaraID array data interface.
-
We now allow allocations from the count manager outside of the general compute dispatch.
-
Moved Simple Counter to Private, and extended functionality to support more operations and GPU.
-
When adding a module script, we now automatically choose a location in the stack that satisfies all dependencies.
-
Fixed "Set Parameter" menus not having transient parameters.
-
Added support to Cascade To Niagara Converter API to specify a script version when creating Niagara Scripts. UNiagaraEmitterConversionContext::FindOrAddModuleScript(), UNiagaraEmitterConversionContext::FindOrAddModuleEventScript(), and UFXConverterUtilitiesLibrary::CreateScriptContext() now take FCreateScriptContextArgs as an argument; existing python scripts using these methods will need to be refactored to pass their arguments in this format.
-
Added CVar Fx.NiagaraFailIfNotSetSeverity which makes it possible to select the severity of errors emitted when parameters are uninitialized.
Improvement:
-
Improved the colors of Niagara pin types.
-
Improved resolution numeric inputs and outputs. Made type checking stricter for Op nodes.
- Dynamically enabled bindings for renderers.
-
Improved Dynamic Material parameter name resolution in the Niagara stack.
-
Improved detection for uninitialized parameters may raise compilation errors for existing content.
Bug Fix:
-
Prevent active Niagara compilations from starving all other background tasks. Prevent transient systems from starting compilations.
-
Fix for "ParameterOffsets.Num() should be 0 is 1" warning during cook.
-
Implemented refresh helpers for Convert nodes. Convert nodes will now fix up the paths in their connections to reflect changes made to Blueprint structs. Also fixing an issue when swizzle inputs didn't have a typedef, so the wiring was not shown on the nodes. Niagara bools and ints are now assignable.
-
Fixed a bug where large emitter nodes in the System Overview would vanish randomly.
-
Fixed a bug where UNiagaraFunctionLibrary::SpawnSystemAttached() did not handle EAttachLocation::SnapToTarget correctly.
-
Fixed a bug where changing to a system mid-compile could lead to a crash.
-
Added a module in Cascade to Niagara Converter Plugin to better replicate Cascade's light behavior.
-
Fixed a bug where the "fail if not previously set" default mode would not correctly pick up previous writes.
-
Fixed a bug where the Niagara translator could compile unused parts of the graph, resulting in errors when unset variables were being read.
-
Prevented users from entering a dot (.) character in the name for a static switch parameter.
-
Fixed a bug where inputs with a changed type didn't refresh after versioning up.
- Ensured we tick instance parameters before building data interfaces, otherwise the GPU tick would have a reference to the wrong data interface.
-
Fixed a few bugs with the search bar in the Generated Code view.
-
Fixed a bug where setting an engine parameter in the stack that had a default binding in a parameter definition caused a compile error.
-
Resolved an issue that prevented playing audio from Niagara in cooked builds.
-
Fixed a bug where several threads would race and cause a crash in NiagaraComponentRendererProperties::UpdateSetterFunctions.
-
The Cascade to Niagara Converter now adds a Solve Forces and Velocity module when converting acceleration modules.
-
Fix memory stomp when loading UNiagaraGraph.
-
Fixed cases in which a Niagara User Parameter binding would either: not work when selected, or entries wouldn't show up at all.
-
"Make" actions are now supported when dragging off an output pin in a Niagara script.
-
The Cascade to Niagara Converter relied on hardcoded type names for converting types. This led to issues when type names changed. The converter now assigns type names directly from their Niagara Type Definition.
-
Updated preview widgets of Niagara Mesh Renderer properties to display meshes instead of their materials.
-
Closing and reopening the stack will no longer cause previous search results to be applied.
-
The Select node can no longer use parameter maps as a type.
-
Niagara Script parameter metadata now gets correctly hidden and shown based on the type of the parameter.
-
Fixed a bug where Mesh Renderers wouldn't show up for mesh renderer bindings.
-
Updated the Niagara Stack Style to correctly show selection.
-
Prevented the type registry from being modified while we are iterating over the array.
-
Fixed a bug in Dynamic Material Parameters, when enabling dynamic parameter 1 also stomped over dynamic parameter 0.
-
Fixed Niagara Depth Sample for Mobile. It now correctly samples SceneDepthAux or SceneDepthTexture.
-
Fixed the count buffer growth while the editor is out of focus.
-
Removed hard-coded ribbon tessellation disable from code. Replaced this with a console variable that can be data-driven.
-
Fixed issue when the socket attachments component is already registered.
-
Ensured we don't use aligned loads on some compilers for VectorLoad with VectorRegister4Float and VectorRegister4Double.
-
Fixed incorrect mip calculation. This also fixed a crash when enabling Generate Mips on a 1x1 render target.
-
We now include layout and uniform buffer changes as part of hash generation.
-
Forced DXC for NiagaraDataInterface shaders for platforms that support DXC.
-
Fixed GPU export count not being correct when going over the limit.
-
Added a missing swizzle on Color Sample.
-
Fixed incorrect bindings for Spline Rotation. Also fixed rotation extraction for Spline Rotation.
-
Fixed various issues with dependency checking for uninitialized parameters when compiling Niagara Systems.
Online
New:
- Added rules-based ordering of QOS subregions into subspaces, biasing datacenter selection away from subspaces whose performance is not a sufficient improvement over their related subregion. The tolerances to control this can be set in the [Qos.QosRegionManager] section in the engine config on a per RegionDefinition basis, and also enabled/disabled per region. The rules-based comparison may be enabled or disabled overall in the engine config, or overridden with the -qossubspacebias=true|false command-line argument.
Crash Fix:
- Fixed a hotfix crash when patching a soft object pointer.
Bug Fix:
- Patchcheck INI configs now refresh with every patch check attempt, instead of only at object construction.
HTTP
New:
- There is a new configuration option to limit the amount of concurrent threaded HTTP requests being processed. It can be defined as follows:
[HTTP.HttpThread]
RunningThreadedRequestLimit=11
-
New configuration options have been added to HTTP to increase control of Flush time limits. They work within the following categories:
-
Default = when Flush is called with no overriding context
-
Background = when Flush is called because the app is backgrounding. This may not be called on backgrounding on all platforms.
-
Shutdown = when Flush is called because the app is being shut down. Some use cases may want an infinite wait. This may not be called on shutdown on all platforms.
-
FullFlush = explicit request to wait infinitely for all HTTP requests to complete. Some use cases may want to disable infinite waits. Typically not used in game code but may be used by applications or commandlets.
-
Each one of these categories has soft and hard limits to be defined as follows:
-
- Soft Limit = how long to wait in seconds before cancelling active requests. -1 = never cancel. 0 = cancel immediately. Must be < Hard Limit to work. Typically after calling Cancel the HTTP request needs a tick to process the cancel, so it should not be == Hard Limit.
- Hard Limit = how long to wait in seconds before stopping waiting altogether.
When used in a configuration file, it would look like this:
[HTTP]
FlushSoftTimeLimitDefault=2.0
FlushHardTimeLimitDefault=4.0
FlushSoftTimeLimitBackground=2.0
FlushHardTimeLimitBackground=4.0
FlushSoftTimeLimitShutdown=2.0
FlushHardTimeLimitShutdown=4.0
FlushSoftTimeLimitFullFlush=-1.0
FlushHardTimeLimitFullFlush=-1.0
Online Subsystem
New:
-
The SetSubsystemId function now logs an error when a proper SubsystemId isn't generated.
-
Added an analytics context helper to SocialUser Interaction menus, which are driven from static classes and built with macros. This addition makes it possible to attribute interactions to their respective places in the user interface.
-
Added config options to OnlineIdentityNull which enable emulating different types of platform setups. Changed default behavior to enable logins with no credentials, to match most other platforms.
-
Cached auth codes in online identity interface automatically expire after a set time interval on platforms that implement auth code caching (currently, Playstation 4 and Playstation 5). The default is ten minutes, and may be adjusted in the engine ini file using the AuthCodeTimeToLiveSecs config field.
-
Added IOnlineIdentity::ClearCachedAuthTokenAPI for clearing cached auth tokens in online identity interface, where applicable (currently, Playstation 4 and Playstation 5). On the command line, you can use -CachePsnAuthCode=true or -CachePsnAuthCode=true to override the value in the engine's .ini file.
-
OnlineSubsytemEOS now supports GetLinkedAccountAuthToken.
-
Starting the app from a platform invite or join is now supported when using EOSPlus.
-
Some of the options in the EOS Plus editor settings have been relocated or renamed:
-
"CrossPlay Settings" to "EOSPlus Login Settings"
-
"Use Epic Account Services" to "Use Epic Account for EOS login (requires account linking)"
-
"Use Crossplatform User IDs" to "Use Crossplatform User IDs for EOS Login (doesn't use Epic Account)"
-
-
-
Online Subsystem GDK will now use SETTING_SESSION_TEMPLATE_NAME when searching sessions by search handle. It will need to be set in both session creation and session search settings. If none is defined, "GameSession" will be used as a default.
-
The Gamertag Component type in the Online Subsystem GDK implementation used to be set to Modern and could not be changed. A new configuration option has been added to do so, with the following format:
[OnlineSubsystemGDK] GamertagComponentOverride=Classic
Overrides can be: Classic, Modern, ModernSuffix, or UniqueModern. If no override is specified, the system will use Modern.
- Online Subsystem EOS Plus has a new implementation for the Title File Interface, transmitting all method calls to the base platform interface without EOS mirroring.
Improvement:
- Moved Online session FNames to a new module called OnlineBase to be shared between OnlineSubsystem and OnlineServices.
Bug Fix:
-
Users are no longer shown as Muted when isListening is set to false in a second channel.
-
Fixed the Epic Online Services Online Subsystem encountering an SDK error when querying the presence of a player's friends.
-
Several fixes to Epic Online Services Online Subsystem (EOS OSS):
-
EOS OSS now batches a player's friends' net ids when querying their external account mappings to improve performance.
-
EOS OSS no longer modifies the net ID of a player's friend after executing the OnFriendsChange delegate with that friend's incomplete net ID.
-
Fixed the EOS OSS always firing the FOnQueryExternalIdMappingsComplete delegate with bWasSuccessful as false even when the operation succeeded.
-
-
Fixed the Epic Online Services Online Subsystem not registering players that were present in a session at the time the local player joined the session.
-
Moved Hotfix module's dependency on OnlineSubsystem from private to public.
-
Duplicate PIE login credentials are now accepted if the credential's type is Developer.
-
Fixed a connection issue when using Epic Online Services peer to peer with more than 3 peers.
-
An EOS lobby search with no results in the Online Subsystem EOS Session Interface will no longer return as a failure state. Instead, it will return as a success with 0 results.
-
Hosting and joining sessions is now functional for Play-In-Editor game instances when using EOS.
-
EOS Connect Login is now functional for platforms that require the UserLoginInfo field.
Deprecated:
- Functions that used FUniqueNetId or shared pointers directly have been deprecated. We have added function overloads to UOnlineEngineInterface to take FUniqueNetIdWrapper.
Pixel Streaming
New:
-
Updated PixelStreamingAudioComponent in UE5 to support sending audio data from the browser to the engine. This is currently experimental, as audio data arrives after a significant delay; we plan to improve this in future releases.
-
Added experimental support for VP8 and VP9 software encoding. You can select an encoder codec with "-PixelStreamingEncoderCodec". Supported values are "H264", "VP8", and "VP9". The default encoder remains hardware accelerated H264. This is experimental as these software VPX encoders are much slower than the hardware accelerated H264. Specifically, VP8 encodes at roughly 30 frames per second, and VP9 encodes at roughly 15 frames per second.
-
A whole new set of internal WebRTC stats are now exposed to Pixel Streaming for programmatic use and visual inspection through the built-in optional stats HUD. The stats HUD can be viewed by passing "-PixelStreamingHudStats". The stats can also be queried programmatically using the appropriate stat changed delegate in UPixelStreamingDelegates.
Additionally, a number of the settings available in the player.html and app.js have been removed and trimmed down to a subset of settings we believe are genuinely helpful to configure through the web frontend - the rest are now only settable as console variables and launch arguments to your Pixel Streaming application. Following this decision, we have also changed the "Test Latency" button to be a "Get Report" button that reports a subset of stats using the newly exposed WebRTC stats in Pixel Streaming.
-
Added a "Kick Player" Blueprint node that takes a Player ID as input. This replaces the functionality of the "Kick All" button from the Pixel Streaming front end, which has been removed.
-
Introduced a new design within Pixel Streaming to specify video sources, which take texture sources. For example, we now have a FVideoSourceP2P which takes a FTextureSourceBackBuffer. With this new design, users can add more types of texture sources in the future, such as render targets or scene capture textures. This change is transparent to most current users, but should increase flexibility for users who extend Pixel Streaming in C++.
-
Added default simulcast settings to Pixel Streaming to control the resolution and bitrate of simulcast streams. You can pass your own simulcast stream settings on the command line using -SimulcastParameters. The format of simulcast parameters is comma separated triples of: stream scale denominator, minimum bitrate, maximum bitrate. For example, the default is one full resolution video stream and one half resolution video stream, which would be specified as: -SimulcastParameters="1.0,5000000,20000000,2.0,1000000,5000000"
-
Added Pixel Streaming support for Vulkan on Windows.
-
Start-up scripts have been added for Linux. These enable running of SFU server locally, and SFU and CoTURN in docker containers. The containers can be built on demand. Start and stop controls are provided for convenience on top of the docker command line layer.
-
Extended Pixel Streaming and the JavaScript front end to support either the browser being the WebRTC offerer or the Pixel Streaming instance being the WebRTC offerer. By default the Pixel Streaming instance is now the WebRTC offerer, which is the reverse of the case in previous versions. However, Pixel Streaming still remains compatible with the browser being the offeror as it was in previous versions.
-
Updated the GamePlayMediaEncoder.
-
Added Vulkan and Linux support to GameplayMediaEncoder.
-
Support for a Selective Forwarding Unit (SFU) has been added to Pixel Streaming which allows multiple clients to connect with different bitrate requirements.
-
Renamed PixelStreamerInputComponent to PixelStreamingInput to align with our new naming conventions in UE5.
Improvement:
-
Pixel Streaming has been refactored to be more modular and configurable.
-
NVENC encoder plugin has been made more stable.
\
Crash Fix:
-
Fixed a crash in CUDA module when NVIDIA drivers are present but RHI is running on a non-NVIDIA GPU.
-
Fixed Pixel Streaming bug causing crash for some hardware when using Vulkan.
-
Fixed a crash in Pixel Streaming related to malformed peerConnectionOptions.
-
WebRTC binaries have been rebuilt. Protobuf symbols have been stripped to avoid collisions with other Plugins when building monolithic binaries (ie with UEGame target). This fixes a crash when using WebRTC statistics while building any Debug config.
-
Fixes to GameplayMediaEncoder crash when no encoders are registered to AVEncoder.
Bug Fix:
-
Fix for keyframes being lower quality than the rest of the stream. This was particularly problematic as keyframes are now sent a regular interval by default thus causing the stream to become momentarily pixelated every keyframe.
-
Firefox and TURN on AWS was broken due to the WebRTC cross browser shim, adapter-latest.js being unable to detect Firefox correctly. This was fixed by patching this script in player.html.
-
Tidied and formatted console logging for the Pixel Streaming JavaScript to make it more readable and less redundant, particularly in the case of ICE candidates.
-
Added url parameter ?ForceTURN that discards any ICE candidates that aren't using relay. This is particularly helpful when testing TURN servers with Chromium based browsers.
-
Fixed an issue where the WebRTC data channel would abruptly close when attempting to send large amounts of data over the channel.
-
CUDA failure to initialize will now result in an error message rather than a fatal error. Note that having RenderDocsPlugin enabled when trying to use CUDA will result in CUDA failing to initialize, so that Pixel Streaming will not function correctly while the plugin is enabled.
-
Fixed an issue with incorrect hardware encoders loading when the target GPU is not present.
-
Vulkan/AMF encoding is currently unsupported and has been disabled.
-
Removed a fatal error when trying to use AMF with Vulkan.
-
-
Fixed installation scripts for Windows and Linux to ensure they occur before starting CoTURN.
Removed:
-
Removed the following unused console variables from Pixel Streaming:
-
PixelStreamingUseBackBufferCaptureSize
-
PixelStreamingCaptureSize
-
PixelStreamingWebRTCDisableResolutionChange
-
PixelStreamingMaxNumBackBuffers
-
-
AMF support with DX11 has been disabled. AMF with DX12 is unaffected.
WebSockets
New:
- Websockets protocols are now configurable in BaseEngine.ini.
Physics
New:
-
Added scaling functionality to the buoyancy data so we can scale the pontoon element over time.
-
The following Buoyancy Types were added:
-
FSphericalPontoon::ScaleTimeFrequency (float): Defines how frequently the pontoon scale radius ticks.
-
FSphericalPontoon::ScaleRadiusPerTick (float): Defines how fast the pontoon radius reduces per tick.
-
FSphericalPontoon::MinRadiusToSink (float): Defines the radius required to sink the vehicle.
-
FSphericalPontoon::ScaledTime (float): Defines the tracked scale time as we're scaling.
-
FSphericalPontoon::BaseRadiusBeforeScale (float): Defines the base radius before scaling.
-
-
Added functionality to Chaos Debugging to draw collision for a single actor instead of all the actors in the scene.
-
The following CVars were added to the ChaosDebugDrawComponent:
-
p.Chaos.DebugDraw.SingleActor - If set to true, draws collision for the actor the camera is facing.
-
p.Chaos.DebugDraw.SingleActorTraceLength - Sets the trace length from the camera that selects the single actor that will be used to draw collision.
-
p.Chaos.DebugDraw.SingleActorMaxRadius - Set the max radius to draw around the single actor.
-
-
Added the ability to query the attached body names from a physics constraint in Blueprints.
Bug Fix:
- The GetAngularDriveParams function for Physics Constraints now correctly returns the parameters by reference.
Deprecated:
-
The GeometryCollection debug draw classes have been deprecated. The Chaos debug draw console commands should be used going forward.
-
The asset factory for UChaosPhysicalMaterial has been removed.
Clothing
New:
-
Added the console command p.ChaosClothEditor.DebugDraw to enable / disable the cloth editor visualization mode.
-
Added multiple LOD deformer mapping data to Chaos Cloth. This allows the engine to use raytracing on cloth at a different LOD level than the LOD level used for rendering and simulation.
- Added the ClothLODBiasMode property to the Skeletal Mesh to define the storage strategy depending on whether multiple LODs deformer mapping data are required or not.
-
Added a new SetBackstop Blueprint function to the Chaos Clothing Interactor to enable / disable the Backstop collisions at runtime.
-
Enabled convex collision for Chaos Cloth on mobile platforms.
-
Ran the Long Range Attachment tether constraints as a pre-iteration step instead as a per iteration step to improve simulation performance.
-
Added global point damping to offer a faster alternative to the current local damping formulation.
Improvement:
-
Improved the way the Cloth wrap deformer deforms the high quality render mesh based on the simulation mesh. It now uses each face connected to a vertex to compute the average normal at that vertex. This average is then used to deform the render mesh, making the deformation more consistent.
-
Improved the binding accuracy between the simulation mesh and the render mesh, which results in higher-quality render mesh deformation.
-
Significantly reduced the initialization time of Chaos Cloth at runtime. This change prevents the initialization hitch by caching the Long Range Attachment tether calculations inside the cloth asset at authoring time.
Bug Fix:
-
Fixed an issue with Chaos Cloth where the MaxDistance and Backstop constraints were not scaling correctly when the skeletal mesh component scale was changed.
-
Fixed an issue where changing LODs while cloth simulation was suspended would result in the cloth and render LODs to become out of sync and cause a crash.
-
Fixed an issue where the cloth simulation data and bounds output was incorrect if the simulation was suspended while the component was moving.
-
Fixed an issue where rendering with an invalid simulation LOD would cause a crash.
-
Fixed an issue with Chaos Cloth visualization where multiple cloth bounds were using incorrect transforms.
-
Fixed an issue where the cloth wrap deformer vertex contributions (which triangles are rendered kinematic or dynamic) were incorrectly updated when using multiple influences and editing the MaxDistance mask.
-
Fixed an issue where the simulation data transform was incorrect when rendering the cloth mesh started after the component's transform had been updated.
-
Fixed an issue where migrating an asset from Nvcloth to Chaos Cloth would result in a stiffness multiplier being included.
-
Fixed an issue where Chaos Cloth would experience hitches in game caused by a smoothing of the time step that was incorrectly applied to the kinematic particles' velocity calculations.
-
Fixed an issue where importing a clothing asset without a matching LOD section would cause a crash.
-
Fixed the suspended simulation positions and bounds by reverting part of changes made in CL18170330 and fixing the local space bounds calculation.
-
Fixed an ensure that would always fire in ClothingAsset.
Physics Asset Editor
New:
-
Added a way to edit the mouse interaction distance inside the Physics Asset Editor. The default distance value has been increased.
-
Added the ability to copy and paste bodies and constraints to the clipboard in a text-based format. This provides a way to copy bodies and constraints between different physics assets.
Bug Fix:
-
Fixed an issue where the preview animation of an asset would be lost after simulating in Physics Asset Editor.
-
Fixed an issue in Physics Asset Editor where the Detail panel would remain empty when selecting all the bodies in the skeleton tree.
-
Fixed an issue where copying a body setup to another one with a different primitive would cause a crash if the user used the Details view.
-
Fixed an issue where the selection was not being properly refreshed after the copy operation.
-
-
Fixed an issue where the preview animation of an asset would stop when simulation started or stopped.
Rigid Bodies
New:
- Added the p.RigidBodyNode.UseDeferredTask CVar. Set this to 1 to defer the simulation results of RigidBody AnimNodes by one frame, improving performance by enabling the simulation more time to complete in the background.
Bug Fix:
- Fixed an issue in RBAN where mesh component initialization may pass through a zero delta time when the node is set to inherit bone velocities. This resulted in an incorrect value being used in the velocity calculation.
Platforms
New:
-
The device profile editor can now properly add or check out platform-specific .ini files. It will also only save changed values for inherited device profiles. The device profile editor can now create production-ready .ini files that do not need manual fixes.
-
Made it possible to distinguish between controller types when using WinDualshock.
-
Added RunUAT CreatePlatformExtension command to auto-generate plugin and module platform extension files.
- Examples for using CreatePlatformExtension:
RunUAT CreatePlatformExtension -P4 -platform=MyPlatform -source=MyProject/Source/MyProject.target.cs -project=MyProject/MyProject.uproject RunUAT CreatePlatformExtension -P4 -platform=MyPlatform -source=Engine/Plugins/Path/To/MyPlugin.uplugin RunUAT CreatePlatformExtension -P4 -platform=MyPlatform -source=Engine/Source/Path/To/MyModule.build.cs RunUAT CreatePlatformExtension -P4 -platform=MyPlatform -source=Engine/Path/To/Whatever/
\
- Implement waitfordebugger / waitforattach for console platforms. These command line options allow a game to pause until a debugger is attached.
All GDK
New:
-
Added ability to query the Parter Center to automatically populate the title settings using the in-editor Project Settings dialog.
-
Added support for custom/modified GDK editions in AutoSDK, signified with an additional suffix. For example: "210603-01" vs "210603"
-
Adding support for launching a title by URI, for example: ms-xbl-[TitleId]://
. See the GDK documentation for details. The URI is available via FPlatformMisc. -
Added support for -package -deploy to install GDK packages with UAT automatically.
-
The 480x480 packaging image is no longer considered optional. Previously the dashboard would silently scale up the 150x150 image as a fall-back.
Linux
New:
-
Increased Unix Cycles64 resolution to 100ns
-
Fixed Unix crash messages printing a truncated memory address.
-
Added support for asynchronous logging on forked instances
-
SkeletalMeshComponents will now run multithreadable tasks on the taskgraph on forked multithreaded servers
-
Moved FForkProcessHelper code in Fork.cpp.
-
Added FForkProcessHelper::IsForkRequested function. This returns true when the process is set to fork child processes or simulate forking by itself.
-
Implemented FUnixPlatformMisc::GetCPUVendor and GetCPUBrand() for non x64 Linux platforms to read and parse the /proc/cpuinfo file. Added tables for 64-bit arm cpu implementers and part numbers. This table may have further updates in the future.
-
FUnixPlatformProcess::CreateProc no longer requires you to pass an absolute path to an executable. If passed an argument containing a program name but no path separators, it now searches directories specified in the $PATH environment variable in the same manner as the shell would. The underlying API has changed from posix_spawn to posix_spawnp, and failures are no longer treated as fatal.
-
Add Linux -crashhandlerstacksize command line option to set crash handler stack size.
-
Moved stack to mapped memory instead of allocating in the heap. This can set and reduce the size of the 200k stack significantly through the command line.
-
Add DumpGPU viewer script for Linux and Mac. To use this, run the DumpGPU command in the console. This will open a folder to the DumpGPU HTML files and data, plus OpenGPUDumpViewer.sh. If you open OpenGPUDumpViewer.sh, the GPU Viewer will open in your web browser.
-
Updated Linux SDL to 2.0.20.
Bug Fix:
-
Unix's GetCPUTime refreshes the total cpu usage of the process every 250ms (same as other platforms) instead of the incorrect 25ms.
-
Replaced the single ensure crash reporting process handle with a pool of process handles.
-
Made UnixCrashContext for ensures thread-safe.
-
Stopped adding/removing FTicker delegates outside the game-thread.
-
Made the concurrently uploading processes thread-safe using atomic state machine.
-
Added option to limit the number of processes on dedicated game servers .
-
Fixed ensures not getting sent on dedicated game servers.
-
-
Use reliable messages for local swarm Mac/Linux messages Udp window size is ~64, so when sending large batches of "task completed" messages quickly, several would get silently dropped.
-
Change default optimization level for Shipping from O2 to O3.
Mac
New:
-
Added an Import Xcode GPU Debugger Plugin for Mac. This plugin works similarly to the RenderDoc plugin for Windows. Enable the plugin in your project settings, then press Shift+E to trigger a GPU frame capture of the primary viewport. It will automatically open in Xcode once the capture is complete, at which point you can replay the capture, step through it, and perform other operations.
-
Removed MetalShaderCompiler depenencies on DerivedDataCache.
Bug Fix:
-
Fixed incorrect format string in MacToolChain.
-
Fixed XCode GPU programmatic captures missing a file name.
VR
New:
- Renamed EColorSpace to EOculusColorSpace to prevent confusion with the new engine definitions.
Bug Fix:
-
Fixed an issue where the editor would throttle whenever a VR headset was attached.
-
Fixed UE5 binary failing to package BP projects for HoloLens due to Missing Game Binary. UBT is required to run for all HoloLens packaging because this step generates the final target file used to generate the package.
- This means you need to have Visual Studio set up to package for HoloLens even for a Blueprint-only project.
-
Fixed a bug which caused the Editor to throttle whenever a VR headset was attached.
-
Fixed an issue where the editor viewport would slow down when a Virtual Reality headset was being used.
Windows
New:
- Display progress of splash screen on the Windows taskbar icon
Crash Fix:
- Prevent a crash if the web browser component fails to load.
Bug Fix:
- Force the webbrowser plugin to load when creating the bridge plugin.
WinGDK
New:
-
Added support for emulating "Default User Required" on Windows when the Simplified User Model is enabled, as it is not currently implemented in the GDK. When opting-in to emulating Simplified User Model & Default User Required, the game will block and display a user login prompt on startup. If the user cancels sign-in, the game will terminate. If the user signs out, the game will terminate.
-
Package install batch files are created alongside WinGDK packages.
XR
Bug Fix:
- Correctly handle MultiView and Variable Rate Shading attachments in the PSO caching system.
Rendering
New:
-
Added a new Nanite Tools editor plugin, which includes an audit flow to find Nanite meshes with errors, and non-Nanite meshes that could be converted safely to Nanite. The tool performs a Material check to properly categorize error and optimization suggestions. This is the initial implementation and will be improved upon in future releases.
-
Implemented Nanite support for view visibility flags DrawInGame, DrawInEditor, VisibleInReflectionCaptures, VisibleInSceneCaptureOnly, HiddenInSceneCapture, ForceHidden, and others. Also partially implemented a GPUScene version of FPrimitiveProxy::IsShown().
-
Added an initial implementation of per-view primitive filtering in Nanite (such as GPUScene version of IsPrimitiveHidden from the SceneVisibility.cpp). This enables Nanite to support Show Only or Hidden Primitives lists for Scene Captures and other workflows.
-
Added a new debug mode to render only non-Nanite fallback meshes that incorrectly reference coarse static mesh assets. This mode is off by default, and enabled in non-shipping builds with r.Nanite.IsolateInvalidCoarseMesh 1.
-
Lights can now enable ray-traced shadows independently of the standalone Ray Tracing Shadows project setting. There are three options to select from: Disabled, Use Project Settings, or Enabled. For older scenes, lights that had Cast Ray Tracing Shadows enabled are mapped to the new Use Project Settings value.
-
Added a new define ("DXR_ALLOW_EMULATED_RAYTRACING") that automatically compiles out the r.D3D12.DXR.AllowEmulatedRayTracing by default.
-
Enabled Vulkan Wave Operations and use Vulkan 1.1 environment for shader compilation on desktop platforms.
-
Added wireframe viewmode support for Nanite using postfx barycentric coordinates.
-
To improve color management, there is a new Color Space property in the Texture Editor to specify the color space of the source textures.
-
Added compliant 64-bit image atomics in Vulkan, which fixes all validation issues with 64-bit atomics and allows the use of RADV driver (AMD + Linux) for Nanite and Lumen.
-
This change will use STORAGE_IMAGE to read from R64 formats when sampling isn't supported.
-
It leaves high level code and HLSL untouched. Render Dependency Graph will continue to consider them read-only access.
-
Creates a code path for HZB that uses UlongType.
-
Updates shader GUID for Vulkan to force a rebuild.
-
-
Added scoped CPU markers for CPU profiling for the most expensive parts of "GlobalBeginCompileShader" and "FShaderCompilingManager::SubmitJobs", which includes "FShaderType::AddReferenceUniformBufferIncludes" and "GetInputHash."
-
In the Environmental Light Mixer, Volumetric Fog toggle has been added to the minimal view for Exponential Height Fog.
-
Added a way to handle CopySrc/Dest transitions for depth-stencil targets in Vulkan, which allows the use of AddCopyTexturePass on depth-stencils of the same format.
-
Added Large World Coordinates support for cloth simulation in GPUSkinnedVertexFactory and SkinCache shaders.
-
Added descriptions for the various "stat *" EngineStat commands. Using "stat help" will list all available commands.
-
Added support for Morph Targets to the Motion Blur visualization when Skin Cache is disabled.
-
Modified DumpMaterialShaderTypes commandlet to add FMaterialShader types to the final shader type histogram.
-
Added additional options for linearizing (advanced) source encodings on texture import.
-
Enabled EmitDrawEvents by default when ProfileGPU is enabled, otherwise provide options to enable except in a shipping build to avoid oversights with release builds. Also removed EmitDrawEventsOnlyOnCommandList as it is unused.
-
Enabled cloth rendering on mobile and Windows ES3.1 platforms by default with per-project control. Use the console variable r.Mobile.EnableCloth to set it.
-
Added the ability to set shader defines for global shaders from configuration (*.ini) files.
-
Added new features and improvements to GPU Scene dynamic primitives:
-
Updates to GPU Scene and the GPUSceneCollector to support handling the upload of multiple instances and instance payload data for dynamic primitives.
-
Updates to Virtual Shadow Map caching to support the invalidation of cache pages upon removal of dynamic primitives.
-
Added the ability to provide a delegate to support initializing or modifying dynamic primitives' instance scene data and instance payload data from the GPU.
-
-
Added uniform buffer names to D3D12 shaders and added validation logging to uniform buffer binding.
-
Implemented Intel extensions for 64-bit atomics.
-
Fixed shader cooker stats showing the wrong shader format names.
-
Added GRHISupportsMapWriteNoOverwrite to check at runtime if RLM_WriteOnly_NoOverwrite is supported.
-
Allowed D3D12 global constant buffer updates to be more dynamic, which removes the shadow data overhead from stages that aren't used in a context. It also allows for global constant buffers larger than 4 kilo-bytes in size.
-
Refactored Vulkan renderpass initialization to allow for either vkRenderPassCreateInfo or vkRenderPassCreateInfo2 paths depending on platform support for the extension.
-
Added an optional MaxLODSize_VT option to Texture LOD Group to clamp cooked Virtual Texture sizes per group.
-
Added support for attaching to PIX on startup. You can either pass "-attachPIX" on the command line or set r.D3D12.AutoAttachPIX=1 in ConsoleVariables.ini. You will still need to manually hit "attach" inside PIX.
-
Added support for vkCreateRenderPass2 and vkCmdBeginRenderPass2 to Vulkan RHI.
-
Added an on-screen notification when Runtime Virtual Texture streaming mips are invalid and therefore likely to be causing a performance regression.
-
Added console variable r.VT.RenderCaptureNextPagesDraws to trigger render captures when Runtime Virtual Textures renders new pages.
-
The Virtual Texture System only updates during Draw Tile Mesh when the Material being rendered actually samples from a virtual texture. Previously, this was introducing lags in processing VT feedback, particularly evident when rendering the water brush which uses lots of Draw Tile Mesh internally.
-
Added single-callback version of CreateStructuredBuffer to automatically infer element size, total size, element count and data pointer (for example, CreateStructuredBuffer(GraphBuilder, TEXT("MyBuffer"), & -> auto& { return BufferSource; });, where BufferSource is a TArray)
-
Added support for uint2 shader parameters.
-
Added ForceTracking flag to ERDGBufferFlags/ERDGTextureFlags : force the RDG to track a resource even if it can be considered as read-only (no UAV, no RTV, etc.) This allows the graph to copy from and to external textures, and handling of the corresponding transitions, for example.
-
Added default pixel format capabilities for platforms that might not be able to poll for support at runtime.
-
Added RHIIsTypedUAVStoreSupported for texture format changes for D3D format queries that need to use the different UAV/Resource formats that are implemented on D3D11 and D3D12. Also, added checks for TypedUAVLoad support on D3D12.
-
Made changes to Landscape Grass type for "ShouldCacheLandscapeGrassShaders" to use "EShaderPermutationFlags::HasEditorOnlyData".
-
Vulkan 1.2 API now supports ray tracing when enabled (on by default) and adds support for ray query extension. Vulkan ray tracing can be set by the console variable r.Vulkan.ExperimentalRayTracing.
-
Added RHIUniformBufferLayoutInitializer and now RHIUniformBufferLayout is a proper FRHIResource. This brings proper RHI lifetime support to RHIUniformBufferLayout so we don't delete the layouts while RHI commands that use them are still in flight. This should fully address UniformBufferLayout and UniformBuffer crashes that randomly happen during shader compilation in the Editor.
-
Added separate RHI capability properties for full ray tracing shaders and inline ray tracing. While most RHIs may support both features, some may only support one.
-
Enable inline ray tracing support for Vulkan on PC via DDPI. Feature remains disabled by default using the console variable r.Vulkan.RayTracing. The minimal set of required ray tracing utility shaders is now always cooked for Windows Vulkan targets, and the "-noraytracing" command line argument can be used to disable ray tracing, which is useful when testing a game that was packaged with "r.Vulkan.RayTracing=1".
-
Added Dynamic Resource heap flags to Root Signatures, and moved static Root Signature text generation to a public file.
-
Added support for GPU asserts in ray generation shaders.
-
Extended Agility SDK support to all Windows family platforms.
-
Added an "Auto" setting to GenerateMips that detects format support before blindly using the compute version. A helper was also added to GenerateMips to tell if you need to add UAV support to a texture based on its texture format.
-
Added ray tracing feature support property to platform settings editor UI.
-
Added an option to disable high-end ray tracing reflection support per-platform. This avoids expensive, time consuming shader compilation for effects that will never be needed in practice.
-
Adding missing RHIValidation overloads for RHIBackBufferWaitTrackingBeginFrame and RHIFlushTextureCacheBOP.
-
Implemented Vulkan top level acceleration structure SRV management and binding. This allows acceleration structures to be used in shaders that perform inline ray tracing on Vulkan platforms.
-
Reduced ray tracing sampler heap allocation's high water mark through better sampler descriptor table duplication. Samplers were previously duplicated using per-thread hash tables, which results in some cross-thread duplicates. This change adds an exhaustive brute force search through the entire global sampler table if per-thread cache did not find a match.
-
This change was tested running a replay which previously reached 1400+ samplers (out of hard limit of 2048). With this change, the maximum sampler allocations are reduced to 400. The performance impact is minimal.
-
Control the duplication scheme with r.D3D12.RayTracing.DuplicateSamplers. By default it's enabled, but can store old behavior by setting it to 0.
-
-
Added support for compressed textures larger than 2 GiB.
-
Brought DXProgrammableCapture.h into ThirdParty and modified it to not require a NTDDI_VERSION. Cleaned up PixWinPlugin to use the correct header guards, correct types, and correct windows version check.
-
Implemented RHIGetNativeCommandBuffer in D3D11RHI, which returns the immediate context.
-
Updated WinPixEventRuntime to version 1.0.210818001.
-
Added quicker utility for getting a shader type's name. ValidateBoundShader and ValidateBoundUniformBuffer were rewritten to be templates instead of defines to make them easier to investigate.
-
Updated the Agility SDK to version 1.600.10.
-
Removed excessive calls to IsRHIDeviceIntel() to prepare for Gen12+ platforms.
-
The console variable r.Shaders.Optimize can now be set on a per-platform basis.
-
Extended GPU page fault information is now logged in Aftermath crash handler.
-
Resource dimensions and type are now reported when logging live and recently released resources after a GPU crash. This makes it easier to correlate resources reported by Aftermath with the live and recently released allocations in the engine.
-
Added an explicit SPIR-V target environment option to CrossCompiler::FShaderConductorOptions and use Vulkan 1.2 environment when compiling ray tracing shaders and shaders with CFLAG_InlineRayTracing.
-
Added support for accessing triangle indices and vertex positions in Vulkan inline ray tracing shaders. Use FRHIRayTracingScene::GetMetadataBufferSRV to access RHI-specific data associated with the ray tracing scene. This can be used to access vertex and index buffer binding information for inline ray tracing shaders.
-
Added ERayTracingPipelineCompatibilityFlags used by ShouldRenderRayTracingEffect to check if a particular effect can run on the current machine. Some effects may support inline or full pipeline ray tracing and some RHIs may support one or both features.
-
Making more RHISupports functions use FStaticShaderPlatform to take advantage of optimizations on certain platforms.
-
When Forward Shading is enabled, the Shadow Map Method is now grayed out to indicate it has no effect.
-
Implemented multi-platform DumpGPU command line tool for debugging common rendering artifacts. See the DumpGPU Tool documentation for more usage details.
-
Exposed per-project platform setting to control offline BVHs build mode (disabled, Maximize Performance, and Minimize Memory) since offline BVHs generally result in better performance and/or reduce memory usage. In its current state, Maximize Performance versus Minimize Memory controls whether triangle splits are used or not.
-
Added estimated compressed size metrics for Static Meshes in the Static Mesh Editor UI and in Asset Audit.
-
Added support getting transforms from GPUScene when building RayTracing Instance Buffer.
-
Improved the screen space subsurface scattering performance when it only occupies a small region.
-
Added functionality to wrap 1D dispatches into 2D or 3D to avoid API limits, and shader function to get the linear index.
Improvement:
-
Refactored Nanite hardware rasterizer to run as Material shaders, allowing for future Material graph evaluation of features like world position offset, pixel depth offset, and masked Materials.
-
Refactored Nanite Material audit checks into modular utilities, and added auditing support to Nanite Audit Tool.
-
Renamed FNaniteShader to FNaniteGlobalShader to make the base class more obvious.
-
Modified "DumpMaterialShaderTypes" commandlet to support listing Material Shader types, not just Mesh Material Types / Vertex Factories with a layout. Since this currently contributes a lot of unnecessary shader types / permutations, this change also temporarily disables Nanite raster shaders, except for the default Material.
-
Optimized the Nanite Material classify pass, using MaterialResolve to obtain MaterialSlotID directly, instead of obtaining SlotID through VisBuffer and ClusterPageData, and so on, to reduce bandwidth overhead and improve performance. Since MaterialResolve is 16-bit wide and VisBuffer is 64-bit, it can save at least 3/4 of bandwidth. After testing, the performance is improved by 40% on RTX 2070s. This optimization is enabled by default, and toggled with r.Nanite.ClassifyWithResolve.
-
Improved Instance Static Mesh and World Position Offset rendering by adding the console variable r.RayTracing.Geometry.InstancedStaticMeshes.SimullationClusterRadius to buck and sort ISM and WPO simulated instances based on distance to view. Also refactored the console variable code to fix/enable r.RayTracing.Geometry.StaticMeshes.WPO = 2, and fixed issues with current ISM and WPO if the local transform uses a non-identity matrix or if the simulated instance transform is non-identity.
-
Cleaned up shadow passes in order to remove unnecessary command list and feature level arguments.
-
Moved more hardcoded shader platform checks to DataDrivenShaderPlatformInfo.
-
While troubleshooting long compile times, enabled sorting by worker compile time to show the bigger offenders first. Removed instruction count from this display, as it is not a relevant stat in this context.
Crash Fix:
-
Fixed a crash in Procedural Mesh component with ray tracing enabled.
-
Fixed a crash when isolating Material Slots in editor.
-
Fixed a crash in Nanite mesh when reloading the global shader map.
-
Fixed a crash in GPU lightmass when baking an empty level.
-
Fixed a crash in ray tracing with invalid Static Mesh Proxies.
-
Fixed a crash that would usually happen when a Dynamic Material Instance created in a construction script could be unloaded with its owner, even when still referenced by primitives in the world.
-
Fixed a crash when clicking the RenderDoc viewport button, and implemented additional RenderDoc editor improvements.
-
Fixed a crash when using Try Get Shaders on a Material where there's no shader map available. For example, an invalid Material.
-
Fixed a crash that occurred when GPU ightmass was run with "Allow Static Lighting" disabled in the project settings. Now GPU Lightmass only runs when that option is enabled.
-
Fixed a GPU crash that could happen with Ray Tracing Global Illumination's final gather reprojection pixel index calculation and added an explicit bounds clamp.
-
Fixed a crash with landscapes when using the command line argument -rhivalidation that ensures the RHIBuffer is held for the life of the frame because not all RHI backends will have the SRV maintain a hard reference to the source buffer.
Bug Fix:
-
Fixed an issue that caused motion blur to become increasingly blurry when single stepping in PIE.
-
Fixed an issue with Nanite hit proxy selection for Instanced Static meshes that do not have "Has Per Instance Hit Proxies" enabled. Such as, Blueprint Construction Scripts spawning the ISMs rather than a content creator explicitly mutating the instances array.
-
Fixed an issue where ray tracing is not enabled by default in cooked games with r.raytracing set to 1.
-
Fixed an issue that would cause flickering in the Cable Component due to a race condition.
-
Fixed Per-Instance Custom Data and random ID for Nanite Materials and meshes.
-
Fixed an issue in Vulkan RHI when using Hair Strands debug mode 6 in Editor.
-
Fixed an issue when Realtime is turned off in the editor to make sure the RHI resources are flushed even when nothing is rendered to prevent leak in RHI (D3D12/Vulkan).
-
Applied fixes for broken and shuffled Nanite Materials when commands like "FUpdateStaticMeshesForMaterials" call "FPrimitiveSceneInfo::UpdateStaticMeshes", which will re-cache Nanite mesh draw commands (and deriving new Material table indices), but no other change will cause GPU Scene to perform a per-primitive upload, which would also update the global Material tables. This change modifies "FPrimitiveSceneInfo::UpdateStaticMeshes" to trigger a GPU Scene update so the MDCs and the global Material table stay synchronized. Normally, adding a primitive to the scene will mark GPU Scene dirty, but some cases of construction scripts adding to the scene, flushing the upload, but then changing just the Static Meshes or Material assignments wouldn't flush an update before.
-
Fixed an issue in Vulkan RHI to handle mixed sub-resource layouts when moving surfaces (defrag).
-
Resolved an issue where Raytracing Scene captures were using the Reflection Capture's visibility flag instead of the Scene Capture's visibility flag.
-
Fixed an issue with broken Morph Targets CPU update path.
-
Fixed an issue in Vulkan RHI for RHIReachSurfaceData. The bls8bpp use was inverted, Rect param was only partially taken into account, and added more supported formats.
-
In Vulkan RHI, added a barrier in Buffer Unlock to meet the expectation of higher level code that data is ready to read.
-
In Vulkan RHI, fixed FVulkanUnorderedAccessView for FVulkanTextureCube giving the validation error "requires an image view of type VK_IMAGE_VIEW_TYPE_2D_ARRAY but got VK_IMAGE_VIEW_TYPE_CUBE".
-
Vulkan RHI was missing CS lock in Vulkan Memory for when Render Thread (texture creation) overlaps with RHIThread (RHIEndFrame) and both can access the ActivePages.
-
In Vulkan RHI, fixed the Shader Complexity viewmode by adding approximate SPIRV instruction counts during shader compilation.
-
Fixed various issues in the Vulkan RHI with Async Compute. Added a new function to query stage bits supported by a queue that filters stages for barriers sent to async queue. And, avoid unnecessary semaphores when DstPipelines is ERHIPipeline::All.
-
Fixed accidental usage of the Stencil StoreOp for Depth in Vulkan RHI.
-
Fixed an issue in Vulkan RHI where transition batches containing only a single execution barrier were not submitted.
-
In Vulkan RHI, added RenderArea as a criteria for Framebuffer matching when reusing, which fixes some passes that were reusing the same set of targets but different areas.
-
In Vulkan RHI, fixed an issue with hashing in FDeviceMemoryBlockKey.
-
Protect extra GPU Scene instance data arrays from out of bounds access if data flags are incorrectly set.
-
Fixed an issue found in D3D12 sampler BorderColor copy.
-
Fixed issue where child Skeletal Mesh component LOD can be detached from its parent Skeletal Mesh component.
-
Fixed an issue when "LOD to Frame Skip Map" is set to a positive number of frames on Skeletal Mesh that would cause animation to become fuzzy from motion blur.
-
Fixed an issue with hair rendering with AddHairVisiblityCommonPass function using the wrong ViewRect for AddSimpleMeshPass function. This caused hair to not render at all in the right eye in XR and potentially in other situations that use multiple views.
-
Fixed Instanced Static Mesh (ISM) per-instance selection rendering where it used to draw every instance as selected, rather than only the instances that were selected.
-
Fixed CPU morphing broken on cooked mobile builds because its morph data was being stripped during the cook.
-
Restored the old FLightPrimitiveInteraction code. The new code can leak memory and it is no longer needed due to the removal of async LPI creation
-
Fixed hash generation for PC DirectX Shader Compiler (DXC) shaders to use the hash provided by DXC.
-
Fixed an issue where Adaptive Virtual Texture did not process the first allocation request each frame.
-
Fixed a dangling reference in Render Dependency Graph (RDG) blackboard implementation when blackboard struct is not first created.
-
Replaced overzealous check by ensuring when Hierarchical Instance Static Mesh (HISM) component transform or view projection matrix is invalid.
-
Fixed an issue where pooled buffers were not being renamed on reuse in external profilers.
-
Removed validation skipping from the SM6.6 code path as it's a fully supported feature in our version of DirectX Compiler (DXC).
-
Fixed an issue where bUseDiagnosticBuffer would be overwritten by the last used stage.
-
Fixed an issue with query waiting stats which prevented job thread wait times from being added to GRenderThreadIdle.
-
Fixed a bug that caused skeletal mesh rendering to break in forward shading mode when switching from another anti-aliasing mode to Multi-Sample AA (MSAA).
-
Fixed a race condition where multiple threads access a shared FD3D12RayTracingShaderTable::TransientCBVs array. This was solved by giving each worker thread its own version of this array, similar to TransitionSRVs and other such members of the FD3D12RayTracingShaderTable.
-
Fixed an issue where Adaptive Virtual Textures weren't correctly invalidated for regions marked as dirty.
-
Reserve worker threads are taken into account when creating contexts for Windows D3D12 to prevent running out of contexts during heavy loads.
-
Fixed a bug that caused the skeletal mesh LOD to change unexpectedly in the Editor viewport with Realtime viewport update turned on. This bug occurred when 1) hovering the mouse over the level thumbnail in the Content Browser (with bAllowWorldThumbnails enabled in DefaultEditor.ini) and 2) when dragging a rotation axis in the Details panel.
-
Fixed asserts on D3D12 platforms that don't support mesh shaders by excluding mesh/amplification from EShaderVisibility on those platforms.
-
Changed creation of FSceneViewState to require the correct current ERHIFeatureLevel.
-
Added SM6 into RHI LexToString, and fixed a typo in SceneView's LexToString.
-
Resolved an issue where elements of the geometry cache index buffer in FGeomCacheIndexBuffer::Update were not always initialized. This prevents out-of-bounds access of Geometry Cache index and vertex buffers on GPU during ray tracing acceleration structure build (which causes a GPU crash). This change also clamps FRayTracingGeometrySegment.NumPrimitives to ensure that the index buffer itself is not accessed out of bounds. Note that this change does not address the deeper underlying problem that causes a mismatch between FGeometryCacheMeshBatchInfo.NumTriangles and index buffer contents, it only treats the down-stream errors.
-
RDGBuffer objects need to be destroyed with their TFunction members, which fixes a slow leak when using Buffer creation callbacks.
-
Fixed an issue with bilinear sampling of light shaft texture in exponential fog draw step sampling outside the valid region due to dynamic resolution.
-
Fixed velocities on static objects being moved by editor widgets, which in turn fixes Lumen Global Illumination and Temporal Anti-Aliasing.
-
UDIM blocks are sorted by X/Y location This is important when using composite textures, as they require the composite texture's UDIM layout to match the source layout. Previously, block order was partially non-deterministic/related to how the texture was imported, so composite textures didn't always work with UDIMs.
-
Planar reflection now has smooth specular transition. It will start to fade off at roughness= 0.2, and finish at roughness = 0.3 as expected.
-
Fixed incorrect height field data in Global Distance Field. Now, the height field is only included once the texture is done streaming/compiling.
-
Lumen reflection is now working on Mac.
-
Fixed Distance Field Ambient Occlusion ghosting happening in the mesh preview window.
-
Don't include objects with "Cast Shadow" disabled in Distance Field Shadows.
-
Fixed issues related to when "r.AOGlobalDistanceFieldCacheMostlyStaticSeparately" is disabled.
-
Fixed non-Nanite Static Meshes not rendering in ray tracing in some situations (for example, when FarField ReferencePos is changed).
-
Fixed Global Distance Field corruption when the scene only contains height fields.
-
Fixed incorrect Distance Field Shadows caused by invalid Signed Distance Field bricks.
-
Fixed broken HZB culling result readback.
-
Fixed incorrect indexing when building mesh Signed Distance Field culled tile data, which caused flickering and incorrect results in Distance Field Ambient Occlusion.
-
Fixed Nanite meshes not respecting "Cast Shadow" toggle when using ray-traced shadows.
Deprecated:
-
Deprecate project settings for Virtual Texture Compression. All virtual texture compression is now handled by Oodle. Only one remaining use case for crunch compression in Runtime Virtual Textures exists, but will be migrated to use Oodle RDO in the future to remove any old compression code.
-
Deprecated RHIGetResourceInfo in favor of FRHIResource::GetResourceInfo.
Removed:
-
Removed r.SkinCache.ForceRecomputeTangents. It can be achieved equivalently with r.SkinCache.CompileShaders=1 & r.SkinCache.Mode=1 & r.SkinCache.RecomputeTangents=1.
-
Removed r.SkinCache.Mode=2.
-
Permanently enabled r.DoInitViewsLightingAfterPrepass and removed its console variable.
-
Removed usage of "DataDrivenShaderPlatformInfo" from "ValidateShaderParameterTypes".
-
Removed deprecated Distance Field Global Illumination and Heightfield Global Illumination features.
-
Removed editor toggle to manually control Ray Tracing Far Field assignment. HLODBuilder internally sets the flag when necessary.
FX
New:
-
Wrapped FVectorVMContext in Niagara Data Interface Function Context for external functions to facilitate running an experimental VM in parallel. External functions should no longer access FVectorVMContext directly, and instead use the helper member functions in the Niagara Data Interface Function Context class. This should have zero effect without NIAGARA_EXP_VM defined. If it is defined, then it'll use the experimental VM functions.
-
Shader symbol generation and "debug info" generation was split into two different console variables. This allows shader symbol generation post-packaging without generating different shader variants. As a result, you can always generate symbols and still have the final unduplicated shader sizes.
-
NotifyShaderCooked was replaced with NotifyShaderCompiled to prep for upcoming non-cook symbol writing.
-
PC DXC shader compiles only generate debug info when requested, not all the time. PC FXC shader compiles only generate debug info when requested, not just when the console variable r.Shaders.Optimize is 0.
-
Added support for filtering categories by section in modules in the selection stack view.
-
Made some minor improvements to Niagara Debug Hud: system colors are now customizable and applied a fix for colored background tile width.
-
Niagara Components can now have their scalability disabled by Sequencer, which should allow for better reuse of game FX in events/cinematics without having sequencer and scalability fight each other.
-
Niagara components can now optionally check for some relationship with a local player pawn to disable scalability culling. This can help prevent overzealous scalability culling for important player FX.
-
Refactored Debug Hud to allow easier extension. Adding a mode setting for the overview. Now includes the following modes:
-
Overview for existing overview data.
-
Scalability for detailed scalability culling info.
-
Performance for global and per-system performance info. This info can optionally be viewed in table or graph form.
-
Crash Fix:
-
The editor no longer crashes when you undo changes to a Niagara System after closing the Niagara Editor.
-
Fixed a crash occurring in the Niagara Camera Data Interface when transitioning between levels on a listen server.
-
Fixed for crash when priming Niagara Pools for Systems that needed to be recompiled.
-
Fixed several crashes with undo/redo of edits that cause the system to recompile.
-
Fixed an issue where making a user parameter from a Data Interface input would sometimes cause a crash.
Bug Fix:
-
Fixed an issue where Simulation Stage data interfaces wouldn't update the simulation until a full recompile.
-
Fixed an issue where renamed Static Switches on NiagaraScripts would not preserve the value correctly in existing content.
-
Fixed an issue where an emitter would incorrectly fail to compile if it had the same name as one of the modules it contained.
-
Niagara emitter parent to child merging will now display any issues encountered during the merge in a message on the emitter. Also, it more correctly handles Static Switch inputs.
-
Fixed an issue in Sequencer when using the Niagara System Lifecycle Track where the system would sometimes be missing from the first frame of the Sequence.
-
Applied a fixed for the forward renderer incorrectly premultiplying transparent surfaces by alpha.
-
Fixed an issue with emitter parent to child merging where a renderer would show that it had local changes in the child even though no changes were made.
-
Added a bias to SubUV calculations to avoid errors when 1/ImageCount loses numerical precision (most significantly when it's half precision on mobile platforms).
-
Fixed issue where spawning empty Niagara Systems would cause a memory leak.
-
Fixed an issue where the color picker would immediately close when making an edit to a Color Override parameter on a Niagara Component.
-
Fixed an issue where new user parameters wouldn't be visible in Niagara Components in the world in cases where the system was able to get the compilation data from the DDC.
-
Fixed issue with Niagara Debugger Loop Mode that prevented it working with burst systems correctly.
-
Fixed an issue where initial expanded state set in Details Customizations was ignored when an object was displayed in the Niagara selection stack. Also updated the initial collapsed state to more closely match the Details panel behavior.
-
Event writes from event handler scripts now throws a compile error instead of crashing. Also removing Niagara's own Event Generator modules from the menus for event handlers.
Lighting
New:
-
Implemented Absorption support for refractive Translucent Materials in the Path Tracer. The absorption color for solid glass Materials can now be configured with a "Absorption Medium Material Output" node in the Material graph. It defines the color change after traveling through 100 units (1 meter) of the Material.
-
Added a "Path Tracing Quality Switch" node that allows customizing a shader's behavior for path tracing without compromising or needing to set up separate Materials for the standard raster path and path tracing.
-
Fixed unnecessary invalidation of Virtual Shadow Maps for dynamic primitives that are culled in the shadow pass. Most relevant case is in editor with the "arrow" gizmos causing invalidations even though they do not cast shadows.
-
Adding Landscape support for Lumen Software Tracing and Voxel Tracing. The console variable r.LumenScene.Heightfield.Tracing (default=1) enables software heightfield tracing for Lumen detail traces.
-
Enabled Distance Field Ambient Occlusion on the Medium scalability level as a fallback from Lumen Global Illumination for games using fully dynamic lighting.
-
Lumen now supports Material Ambient Occlusion. When the variable r.GBufferDiffuseSampleOcclusion is disabled (default), Material Ambient Occlusion is passed through GBuffer.GBufferAO directly and applied to Lumen Global Illumination. When the project has r.GBufferDiffuseSampleOcclusion enabled, ambient occlusion is encoded into the DiffuseIndirectSampleOcclusion, which is the only path that supports Material Bent Normal.
-
Reflection captures are now supported in projects that have Allow Static Lighting disabled for the project. This allows them to be used on Medium scalability when Lumen Global Illumination is disabled. ReflectionEnvironmentAndSky is now run on Reflection Captures to apply Movable Skylight. Movable meshes and lights are now rendered into Reflection Captures.
-
Controllable Lumen settings have been added to the following:
-
Project Settings:
- Ray Lighting Mode to set project-wide control for ray lighting quality.
-
Post Process Volume:
-
Lumen Scene Lighting to drive Radiosity gather quality.
-
Lumen Scene Detail that drives Lumen culling aggressiveness.
-
Lumen Scene View Distance to control the distance from the camera that Lumen Scene will be maintained.
-
Lumen Scene Lighting Update Speed that drives Radiosity gather convergence speed.
-
Final Gather Lighting Update Speed that drives Final Gather temporal accumulation speed.
-
Max Trace Distance that sets the distance that Lumen features will trace through the scene.
-
Ray Lighting Mode for local control for ray lighting quality.
-
-
Primitive Component
- Emissive Light Source to provide a hint to Lumen that the mesh has an important lighting contribution and should not be culled.
-
-
Added Lumen scalability options to the existing Global Illumination and Reflections engine scalability options. Lumen GI and Reflections works on Epic and High settings only.
-
Lumen foliage over-occlusion was reduced by adding a Coverage channel to the Global Distance Field.
-
Lumen now supports the Two Sided Foliage shading model. Two Sided Foliage is treated like Subsurface, meaning there is no separate lighting gather on backfaces, and Subsurface Color is added to Diffuse Color. The Editor viewport shows a Scalability warning for anything other than Epic, whereas previously it was shown only for levels lower than Epic since Cinematic runs at a lower framerate.
Improvement:
-
Improved performance of the Path Tracer by implementing path compaction to keep GPU lanes more fully occupied as rays bounce around the scene. The idea here is to break up the bounce loop in the path tracer into independent launches so that active paths can be grouped together. This is done with wave ops plus atomics. This implementation renders scene with the path tracer up to two times faster in most scenes.
-
Improved shadow terminator of bump/normal mapped surfaces in the Path Tracer.
-
Improved path tracing denoising results behind sharp reflections and refractions.
-
Improved several self-intersection behaviors in the Path Tracer.
-
Reduced the likelihood of timeout detection and recovery (TDR) occurrences for the Path Tracer on Windows.
-
Raised the quality of Lumen Final Gather when in the Cinematic scalability level.
-
Improved Lumen Radiosity gather with spatial and temporal reuse.
Bug Fix:
-
Fix incorrect geometric normals on path-traced geometry with World Position Offset (WPO) Materials.
-
Fixed an issue where Material Instance changes were not causing path tracer to restart accumulation.
-
Fixed Foliage instances appearing single sided in ray tracing even when the Material is two sided.
-
IES Profiles light complexity now works correctly for lights.
-
Fixed Virtual Shadow Map invalidation issue with boxes parallel to light's near plane. This is most often encountered with Point Lights and axis-aligned boxes in the scene.
-
Fixed a bug to avoid constant path tracer invalidations when PostProcess or UI Materials are being changed as they cannot have an impact on the lighting calculations.
-
Fixed a bug that made the path tracer unable to be toggled through the show command in game viewports.
-
Fixed several virtual shadow map issues when using Large World Coordinates and scenes far from the origin.
-
Fixed a bug where light components fail to propagate certain property changes from Sequencer.
-
Path tracer updates now work over nDisplay and in the editor's picture-in-picture camera previews.
-
Using two sided subsurface Materials with opacity equal to 1 has a somewhat ambiguous physical meaning, so this ensures this is desired versus a lower opacity value. We normal opacity by clamping between classic and virtual shadow map paths. Opacity is clamped to a value slightly less than 1 which causes back faces of two side geometry to not be shadowed now consistently between the two paths.
-
Fixed issues relating to Volumetric Fog results in Reflection Captures not appearing correctly. Added a new console variable 'r.ReflectionCapture.EnableLightFunctions' that enables/disables light functions from appearing in reflection/sky light captures. Disabled by default.
-
Fixed missing light attenuation decoding on forward/mobile code paths, which resulted in incorrect shadows.
Removed:
-
Changed the name of the Lumen Max Trace Distance console variable from r.Lumen.MaxTraceDistance to r.Lumen.MaxTraceDistanceScale.
-
Removed tiled deferred rendering path as it was superseded by the more general clustered deferred path. This change is prompted because features are increasingly being added to the clustered shading path, such as support for single pass evaluation of multiple lights with Virtual Shadow Maps. In the future the clustered shading path may be enabled by default (r.UseClusteredDeferredShading 1).
-
Removed Geometry Shader path for Point Light shadow rendering that disables Point Light shadows if Vertex Shader Layer is not supported (at runtime).
Materials
New:
-
Implemented BxDF energy conservation for the Path Tracer.
-
Added UI for Custom Primitive Data on primitive components that shows each CPD's parameter name as defined in the Material, a color picker (if a vector parameter), warnings for mismatched parameter names, soft warning for undeclared parameters, and a hyperlink that takes user to the owning node in the Material Editor when the parameter name is clicked.
-
Added Blueprint methods for setting scalar and vector values by parameter name on Custom Primitive Data (CPD) and "get index for scalar/vector parameter name" methods. Will prioritize CPD index based on first parameter name found on assigned Material. This makes it conceptually easier for developers to assign CPD values to components like they would a normal Material parameter, but with all of the benefits of CPDs.
-
When the On-Demand Shader Compilation (ODSC) system is processing shader compile results on target, the render state for primitives needs to be recreated to ensure it updates draw commands, which are caching uniform buffers. It also needs to ensure systems which cache data regenerate their results (for example, Lumen). This negatively impacts performance when processing results, but it is necessary work.
-
Added Blueprint-callable functions to Material Parameter Collections to get Scalar and Vector parameter names, get and set default values, and convenience methods to Material Parameter Collection to get parameter indexes by Name.
-
The console variable r.vt.FeedbackFactor that is used to control the size of the VT feedback buffer can now be changed at runtime, no longer requiring restart or shader recompile to happen.
-
Text Render Components now allow use of Decal Materials.
-
Added a Runtime Virtual Texture Sample mip mode that ignores the World Position input in a Material. It calculates the mip based on derivatives of actual world position instead, and gives the same result as 'Default' when no World Position input is used. The use case for this mip mode is when a constant value is being piped into WorldPostion, that happens for things like picking a constant color from an RVT for grass. Without the new mip mode, the engine always computes a mip value of 0 which can be very heavy on the physical texture pool.
-
Added support for setting Runtime Virtual Texture parameters from Blueprint for both Dynamic Material Instances at runtime and Material Instances in editor Blueprint.
-
Static terrain layer weights are no longer treated as Material parameters. They are automatically assigned from The Landscape Component's "Get Combination Material" function, but after that there's no reason for any kind of Material parameter tracking/processing on them. This removes a bunch of code and simplifies/speeds up some logic.
-
The way Material Layer parameters are processed was updated:
-
Previously, parent Material Instances would attempt to remap layer indices, and cache the updated parameters in the derived-material instance's cached data. This worked to some degree but did not cover all cases. Now Material instance overrides are never cached and instead each instance maintains a table to remap layer indices for its parent. This remapping occurs on parameter lookup.
-
Previously, enabling Material Layers sent runtime parameter queries down a slow path, since the default parameter values stored on the shader map were not reliable. This issue has been resolved. When compiling a Material, the default value from the Material Expression is not automatically used any longer. Instead, the current Material Function (which may be a Blend Instance, Layer Instance, or regular Function Instance) is given the chance to override the parameter value. This way, the "correct" default value is now baked into the compiled output. Special code for checking default parameters is no longer required at runtime, which should remove the previous performance tax from using Material Layers.
-
-
Extended Material Parameter Metadata with Group, SortPriority, and Description. Cache this data inside FMaterialCachedData. UMaterialInterface methods to query this data become non-virtual, instead it's just returned along with other Metadata when accessing the parameter value. The parameter group caching mechanism inside PreviewMaterial.cpp has been removed, it is no longer needed since group lookup now comes "for free" along with other relevant parameter data.
-
Material layer "stacks" (FMaterialLayersFunctions) are no longer considered static Material parameters. APIs/data is changed to reflect the fact that a given UMaterial(Instance) can only have a single layer stack (or no layer stack). This removes some usage of slow/legacy APIs, which should help speed up editor/cooker performance (some additional changes/refactors are likely needed to fully take advantage of this). Lastly, layer stacks as parameters is legacy technical debt from an early iteration of the Material Layer system that did support multiple stacks.
-
Refactored and cleaned up Material Parameters with the primary goal being to reduce the amount of code duplicated across different parameter types, and reduce the amount of boilerplate required to add new parameters. There are new types FMaterialParameterValue, and FMaterialParameterMetadata (both in MaterialTypes.h).
-
FMaterialParameterValue contains a value, along with various editor-only fields that describe how that value is being used. Using this new type, many places that previously included separate APIs for each parameter type collapse to a single API that operates on FMaterialParamterValue/FMaterialParameterMetadata.
-
Code that previously had a black copy/pasted for each parameter type can be replaced with a loop that iterates over all parameter types.
-
This change also includes some API cleanup that should improve editor performance. Previously, the APIs had GetAllScalarParameters, GetALLVectorParameters, and similar others which would return a list of FMaterialParameterInfos for each one of the given type. Code would often query all parameters, then loop over the results and look up each parameter value. Now, with the new API, GetAllParametersOfType returns a list of all FMaterialParameterMetadata of a given type and collects the values at the time the list of parameters is being built. This saves the work of looking up each value individually.
-
Improvement:
- Move Material Layer names to FMaterialExpressionCacheData which optimizes accessing layer names (remove previous ad hoc caching scheme), and should allow layer names to be properly stored for Material Layers as well.
Bug Fix:
-
Fixed an issue where landscape and water meshes would not update after forcing an update to them. With on demand shader compilation enabled, there are some scenarios where you do not want to rely on rendering to inform you of what shaders need to be compiled. Specifically scenarios where Materials are used to generate content, such as landscape brushes, thumbnails, scene captures and so on. In these situations, the engine should explicitly compile all shaders and call SubmitCompileJobs which is a straightforward way of compiling missing shaders from a map. Note that FMaterial::CacheShaders does not support this behavior and is too risky to change. Also, SubmiteCompileJobs supports being called multiple times and will not re-compile more shaders.
-
MipLevel sample mode now works when sampling an Adaptive Virtual Texture.
-
Fixed Virtual Height Field Mesh disappearing when used with a Material using Translucent or SingleLayerWater.
-
Fixed interaction between Material Layers and Material Quality Level Switches.
-
Material Instances with layers don't generate their own shaders, unless their layers are different from the parent Material.
-
Resolved an issue where Material Dot expressions allow mixing inputs with different numbers of components.
-
Resolved an issue preventing Material Function Instances from correctly handling parameter overrides when the Material Function INstance has another function instance for a parent.
-
Material autogen derivative code matches coercion logic of legacy code for min/max operations.
-
Fixed "Get All Parameters of Type" so that less-derived instances don't override parameter values in more-derived instances.
-
Ensure Material curve parameters caches the correct value (index of the curve in the atlas), which may not be correctly reflected in the expression's Default Value.
-
Removed a check function for input type to Material CrossProduct (Cross), allowing casting any input type to float3, so that it matches legacy behavior.
-
Resolved an issue where Material Instance parameter overrides are supposed to be ignored for nullptr textures.
-
Material Power expressions result type is driven by left-hand-side input only.
-
The Material transform expression is supposed to accept a scalar input value when input is tangent space. This was changed to accept both MCT_Float and MCT_Float1, rather than just MCT_Float1. Most places that generate scalar values use the MCT_Float type.
Removed:
- Removed the dipole parameterization for Separable SSS in Subsurface Profile. All separable SSS parameters are automatically upgraded to Burley. Add Tint to Burley's profile (the same to the original Subsurface Color). It introduces the capability to add non-physically-based rendering into an SSS profile. You can stay within the bounds of physically based rendering by using the default value (white).
Mobile Rendering
New:
-
The mobile deferred and forward lighting calculations are now unified.
-
Added an option to use high quality BRDF on mobile, same as with PC.
-
If a light shading model is not supported on mobile, it will now fall back to the default light shading model.
-
Use EnvBrdf for mobile deferring lighting pass.
-
Mobile now supports the Subsurface and PreIntegrated Skin shading models. Subsurface Profile shading on mobile uses preintegral burley diffusion on ring, just like the PreIntegrated Skin but could be generated at runtime based on Burley inputs.
-
Vulkan now uses G8 format for mobile Ground Truth Ambient Occlusion (GTAO). Enabled mobile AO and PPR on high-end mobile devices.
-
Added support for Mobile Deferred Rendering mode on Android OpenGL ES.
-
Integrated Signed Distance Fields to Mobile Deferred Renderer.
-
Added GL_MAX_TEXTURE_BUFFER_SIZE to OpenGLES.h to not depend on the extension GL_MAX_TEXTURE_BUFFER_SIZE_EXT.
-
The variable r.MobileNumDynamicPointLights is now read from the platform .ini file instead of from the project console variable. The console variable r.MobileNumDynamicPointLights was added to the shader keystring.
-
Disabled Parallel RDG for Mobile Platforms from the RenderGraph.
-
Hair Materials now directly use the Hair Shading Model instead of doing so with a FeatureLevelSwitchExpression, improving hair Shading Model support on mobile.
-
Added support for a Skin Cache on mobile platforms.
-
Set Fast Approximate Anti-Aliasing (FXAA) quality to 0 on mobile platforms by default.
-
Added an option for projects to disable support for per-pixel Material shading models on mobile platforms. Use the console variable r.Mobile.AllowPerPixelShadingModels=0.
-
Account for Reflection Capture influence radius when finding closest capture for an object. Fallback to skylight reflection when there are no influencing Reflection Captures on mobile platforms.
-
Removed perspective correct shadow depth shader permutation when its not required on mobile platforms
Improvement:
- Removed NoLightMap shader permutation for Materials that are not using it on mobile platforms.
Crash Fix:
- Fixed a crash on mobile while rendering custom depth primitives that require scene texture access.
Bug Fix:
-
Fixed an issue where the brightness of the Reflection Captures couldn't be changed at runtime on mobile.
-
Fixed the specular artifacts that would occur on Snapdragon 845 devices.
-
Disabled mobile MSAA if DepthFullPrepass is enabled.
-
Fixed an issue where depth was not stored with fullprepass enabled.
-
Fixed an issue with incorrect depth stencil access flag in mobile multi-view rendering.
-
Integrated mobile Static Lighting when Distance Fields are enabled.
-
Enqueue FrameSyncEvent ReleaseResource on the Render Thread when in the RHI thread in OpenGLViewport.
-
Resolved a Depth issue with Editor Primitives in Mobile Preview.
-
Implemented a Binary Cache fix for the Compute shader and fixed calculation of ShaderLib Processing time.
-
Fixed a bug that caused Editor to stall in the Material Editor while in Mobile Preview.
-
Fixed Custom Stencil and Depth on mobile by making them not always memoryless. This changes the logic back to the way it was implemented in SceneRenderTargets.
-
Resolve issues with texture mip generation at runtime on Android devices running Vulkan.
-
Resolved an issue preventing PerlinNoise3D texture from correctly initializing on mobile platforms.
-
Allow access to CustomDepth and CustomStencil textures in Decal Materials for mobile platforms.
Removed:
-
Removed IsMobileDistanceFieldShadowingEnabled.
-
Removed the shader define MOBILE_PROPAGATE_ALPHA, and temporarily removed premultiply alpha. FXAA luminance calculation was moved from the tonemapper to FXAA when MobilePropagateAlpha is enabled.
-
Removed the OpacitySceneCapturePass from MobileSceneCapture since Depth is now stored in a different Render target. Moved everything to the shared SceneCaptureRendering file and removed MobileSceneCapture.usf.
Nanite
New:
-
Moved all Nanite defines shared between C++ and shaders into a common header file, removing all the "keep this define in sync with this file" cases all over the code. This makes the code a lot more maintainable. Common definitions now have a NANITE_ prefix to disambiguate global symbols.
-
Changed the name of the Nanite Proxy mesh to Nanite Fallback mesh. Fallback settings are now largely error based with a new property FallbackRelativeError. Nanite builder now provides the LOD fallbacks for all auto-generated LOD levels, which is far faster than generating them from scratch.
-
Added KeepTrianglePercent and TrimRelativeError properties to the Nanite static mesh settings. These properties trim detail from the Nanite data that is stored to disk, and can be used to optimize disk size after import. This is useful toward the end of production.
Improvement:
-
Optimized Nanite by streaming directly from DDC when running in editor, which eliminates the need for memory copy.
-
Optimized Nanite with several minor changes that result in 10-20% faster Nanite rasterization and culling.
Crash Fix:
-
Fixed a crash when importing a Nanite mesh with texture coordinates that are unreasonably large or contain floating point specials.
-
Fixed a crash that would happen when importing flat Nanite meshes.
Bug Fix:
-
Fixed an issue where Materials with pixel depth offset would cause severe visual artifacts when applied to Nanite meshes.
-
Fixed a bug where Nanite streaming would sometimes fail to settle on nDisplay setups.
-
Fixed edge artifacts when using lightmaps, shadow mask, or ambient occlusion with Nanite meshes.
Optimizations
New:
-
BlueNoise texture is loaded on demand, which saves around 2.6MB when not running with Lumen Reflection or Lumen GI.
-
Moved InstanceUpdateCmdBuffer from UPrimitiveComponent to UInstancedStaticMeshComponent. It is only used by the derived class so this code is safe. It saves 48-bytes (40-bytes from the removed member and 8-bytes of padding).
-
On Demand Shader Compilation (ODSC) - Only compile shaders that are used to draw instead of compiling every shader in each Material's shader map on PostLoad. This is an experimental feature that is still being developed. This change ensures the editor only compiles shaders it needs to render, resulting in approximately 60% less shaders being compiled and faster start-up times for the editor when opening maps.
- This feature is disabled by default. Enable it with r.ShaderCompiler/JobCacheDDC 1.
-
Added a new transient allocator implementation supporting PC and consoles with Render Dependency Graph (RDG) integration.
-
Added parallel recording of Render Dependency Graph (RDG) pass execution onto command lists.
-
Enabled Vulkan fragment shading rate functionality when supported.
-
Added an option to render Distance Field Shadows using async compute. This also fixes an issue where a ray traced distance field Projected Shadow Info is rendered for all views instead of just its dependent view.
-
Added a NoRef Streaming LOD Bias setting for Static and Skeletal Meshes, which is a LOD bias that is only applied when a mesh doesn't have any component reference. The default value is -1, which means it uses the value of "r.Streaming.DefaultNoRefLODBias." When the console variable is greater than or equal to 0, then the specified value is used. The setting is implemented as a per-quality level variable so that users can specify different values for different quality levels. Quality levels can be selected by using the console variable "r.Streaming.NoRefLODBiasQualityLevel" under the ViewSitanceQuality sections in platform scalability configuration (*.ini) files.
-
Added attachment variable rate shading (VRS) for Vulkan. It goes through all required stage flags, access masks, layouts, renderpass attachments, and so on for the VK_KHR_fragment_shading_rate extension. The logic used to gather VRS properties (tile size, data type/format) have been fixed up. Also, a templated version of VkFragmentShadingRateAttachmentInfo is attached to renderpasses where supported and when attachment is provided.
-
Added the ability for UAVs to be mergeable between AsyncCompute and Graphics pipelines to allow compute shader overlap between them.
Improvement:
-
All DebugViewMode shaders have moved into a single shader, DebugViewModePixelShader.usf, and are dynamically picked based on a uniform. If you've added your own debug shaders or have modified one of the existing debug viewmode shaders, you will need to make similar changes to the DebugViewModePixelShader.usf file.
-
Removes FComplexityAccumulatePS, FLODColorationPS, FRequiredTextureResolutionPS, FMeshTexCoordSizeAccuracyPS, FPrimitiveDistanceAccuracyPS, FMaterialTexCoordScalePS
-
All shader code is now contained in DebugViewmodePixelShader.usf. Individual visualizations are contained within separate functions.
-
All the C++ interface code has now been folded into a single implementation.
-
Previously each implementation kept track of its name, and whether it needed local VF, if it needed Material properties and needed instruction count. Since every implementation is in the same shader we need all those features. To simplify the code all this has been removed.
-
We only keep track of a single FDebugViewModeInterface singleton to use for all debug modes.
-
-
Implemented D3D12 Shader improvements.
-
Duplicate D3D12 shader data and runtime code was consolidated to help with maintenance.
-
Platform specific code and data was reorganized to reduce overhead on platforms that didn't need it.
-
Moved FShaderCodeFeatures booleans into the bit flags EShaderCodeFeatures and added more D3D12 feature flags.
-
Bug Fix:
-
Fixed D3D11 hitches caused by unpaged memory returned from the Map. This was solved by having UnifiedBuffer create brand new resources instead of updating existing ones.
-
Fixed longstanding excessive stalls on RenderThread where the RHI thread would not yield fast enough on Windows.
Deprecated:
- Added a new console variable r.VelocityOutputPass to replace r.BasePassOutputsVelocity. If you were using r.BasePassOutputsVelocity=0, the equivalent setting is r.VelocityOutputPass=1. In both cases, it is recommended to use a r.VelocityOutputPass=0 and only revert to the old behavior if you encounter issues.
Removed:
- Removed deprecated "Set Shading Rate Image" functions that were marked as deprecated in Unreal Engine 4.27.
Postprocessing
New:
- Improvements to eye adaptation (auto exposure) readback that cause it to always readback the most recent available exposure value and use a variable number of readback resources to prevent overwriting inflight requests.
Bug Fix:
-
Fixed an issue with the post processing sequence of the after-pass system to allow chaining multiple passes in the same location.
-
HighlightsMin values greater than 1.0 are now allowed by the Editor. A new parameter was added called HighlightsMax, which helps define the transition region from Midtones to Highlights in a way that allows high brightness pixels (>1) to be considered Highlights.
-
Fixed an issue causing the Auto Exposure toggle in Project Settings not to work.
UnrealLightmass
Crash Fix:
- GPU Lightmass no longer crashes when debug mode is enabled.
Sequencer
New:
-
Added different clock sources when recording with Take Recorder, including specifying the default Recording Clock Source in the Project Settings.
-
Added command to snap sections within the Sequencer timeline according to their TimecodeSource property.
-
TimecodeSource will now be set when creating new skeletal animation sections in Sequencer with custom timecode bone attributes.
-
Clicking or dragging MMB in the Sequencer timeline will move the Playhead to that time but not evaluate Sequencer, allowing you to key the current state at that new time.
-
Added command when right-clicking on Control Rig sections for collapsing/baking all sections to a base section.
-
Added command when right-clicking on on additive Control Rig sections where you can set Zero or One keys or weights.
-
Subsequences and skeletal animation tracks now use the desired frame display format and zero padding from the sequencer settings.
-
Basic setting classes can now be created in Blueprints by inheriting from MoviePipelineSetting_BlueprintBase. This allows for creating custom properties that will be visible in the job configuration and can be fetched in a custom burn in.
-
UMovieSceneSequencePlayer::PlayTo API now supports inclusive or exclusive time to be specified.
-
MoviePipeline: Added DWAA and DWAB compression methods for multi-layer-enabled EXR's.
-
Added Remove Root Option to Take Recorder settings so that you can specify whether to include root motion in the sequence when recording.
-
Added support for {project_dir} as a Movie Render Queue format string so that export paths can be made relative to the project instead of the engine.
-
Added an experimental panoramic capture Render Pass to Movie Render Queue which should support temporal sub-sampling. This is enabled from the Movie Render Queue Additional Passes plugin.
Improvement:
-
TimecodeSource in Take Recorder is now better handled to prevent inconsistent Timecode values when recording and processing different Takes.
-
Moved TimecodeSource property from UMovieScene to now be stored on UMovieSceneSections.
-
The FMovieSceneTimecodeSource struct is now defined in MovieSceneSection.h instead of MovieScene.h.
-
Movie Render Queue now produces a warning when the Override Frames setting is used to create a zero length range, such as [0, 0].
-
Matinee actors upgraded to Level Sequences will have their sections set to 'Keep State' to more closely match original Matinee playback.
Bug Fix:
-
Fixed an issue with Sync Sections using Source Timecode so that trimming and other edits are now accounted for.
-
Restore State now correctly works for Control Rig sections and tracks.
-
Fixed a scenario where Movie Render Queue would fail to detect shots when a Subsequence had a start offset that pushed the evaluation range completely outside of the original playback bounds.
-
Fixed an issue in UMovieSceneSequencePlayer::PlayTo which caused events and other setup from frames after the current time to be triggered during low framerate situations.
-
Fixed Movie Render Queue's png output from having a speckled alpha channel caused by image quantization.
-
Updated Movie Render Queue example python scripts to use UMoviePipelineQueueSubsystem so that Sequencer's 'Auto-bind to PIE' setting does not cause duplicate objects while rendering.
-
Fixed several instances where auto tangents were not being set correctly in the Curve Editor.
-
Fixed FIntermediateColor not converting correctly from FColor.
-
Movie Render Queue's Job Author field can now be left blank and it will default at runtime to the local user name. This fixes an issue where loading a queue saved by another user would use the previous user name as author, and not the user who was actually running the job.
-
Fixed {shot_name} or {camera_name} format strings resolving into an incorrect folder name when clicking the hyperlink in the Output column.
Removed:
- The Motion Trail plugin has been replaced by the new Motion Trail Control Rig plugin.
Tools
New:
-
Added support for UObject scopes to be reported to Unreal Insights when namedevents are enabled.
-
Added a CsvCategory command in the engine that provides the capability to change the active CSV categories. The syntax to use it is
CsvCategory <CategoryName> [Enable/Disable]
(toggles if the second argument is omitted). -
Created new WorldPartitionRenameDuplicateBuilder class that provides capability to Rename or Duplicate a WorldPartition map without loading it all at once.
-
Created a new WorldPartition: Foliage builder class that provides the capability to change grid size.
-
Replace References can now consolidate different subclasses of a UPhysicalMaterial together.
-
Added a "minimum" formula to summary stats, to use for shared memory.
-
Introduced Screen Reader and Slate Screen Reader plugins to Win64, Mac, Linux, IOS, Android, PS4, PS5, XboxOne, XboxSeriesX, WinGDK and Switch platforms.
-
These plugins provide developers with C++ and Blueprint tools to provide blind end-users an accessible means of navigating around UI elements. These plugins can be used to comply with CVAA requirements. This feature is still experimental.
-
Added DeveloperSettingsBackedByCVars as a base class for developer settings which contain one or more variables with ConsoleVariable metadata.
-
Output log category improvements. You can now choose to color-code entire log lines by category, or just by the category itself (located in the CategoryColorizationMode in the editor appearance settings). You can choose to highlight all messages for a particular category by right-clicking on a line.
Improvement:
- Updated the Server CSV ReportTypes with improved categories and colorization.
UnrealVS
New:
-
Updated VSIX for 1.62.
-
Implemented a RunningDocumentTable and created an onSave callback to cover all edit/save operations.
-
Updated new version 1.62 of assembly info.
-
Added a new annotate command.
-
Enabled warnings as errors.
-
Added further hooks for operations that require a checkout before being saved.
-
Added a UBT menu add CompileSingleFile and PreprocessSingleFile.
-
Converted the ReconcileExtensions function to use local paths.
-
Added option to allow async checkout.
-
Added UpdateInstructions command for future engineers.
-
Added library to respond to C# feedback.
-
Added functionality to the PreprocessOnly to publish the output file path to the log used by unrealVS.
Improvement:
- Improved coding guidelines and fixed Diff titles.
Optimization:
- Moved CompileSingleFile back into the stub menu allowing UnrealVS.CompileSingleFile. Added all other commands into the same stub which provides a simple commandline/binding mechanism.
Bug Fix:
-
Resolved a bug that occurred when running many commands at once.
-
Resolved issue where Checkout on Edit was not honoring the user option.
UI
New:
-
SlateInsights now shows SWidget::Paint events.
-
Added the LayerId to the WidgetReflector.
-
Added a context menu in Slate Insights to search for the selected widget. This provides information about the lifetime of the widget.
-
Added a menu in the WidgetReflector to display the different runtime validation test.
-
Added a menu with timing for each SWidget update to SlateInsights.
Bug Fix:
-
Added null check for Game Viewport in FCommonAnalogCursor::HideCursor.
-
Removed an ensure in MarkPartyMemberAsDirty as it is valid to have a nullptr SocialUser in the event that the local user is logged out. When logging out of an account, the SocialToolkit clears the 'UsersBySubsystemIds' map which is used to find users with FUniqueNetIdRepl.
-
Fixed the settings of SColorPicker.
Slate
New:
-
Add test to see if widgets have a valid LayerId. You can enable this with Slate.VerifyWidgetLayerId.
-
Added a W component to SVectorInputBox.
-
Upgraded some SWidgets to use TSlateAttribute (SExpanderArrow).
-
Upgraded some SWidgets to use TSlateAttribute (SExpandableButton, SFxWidget, SRadialBox, SSafeZone, SSplitter, SUniformGridPanel, SUniformWrapPanel).
-
Added the 'Source' name to the tooltip in the Widget Inspector, as the tooltip often covers up the source name.
Crash Fix:
- Fixed a crash related to text glyphs accessing invalid memory.
Bug Fix:
-
Fixed unused SLATE_ATTRIBUTE arguments:
-
STextEntryPopup
-
SSuggestionTextBox
-
-
Previously, right-clicking outside of the current selection in editable text boxes would fail to update visuals, so menu options would appear broken or disabled. This issue is resolved by deselecting the text box and moving the cursor to the right-click location. This matches the behavior of text boxes in other environments.
-
Fixed a division by 0 error in UniformWrapPanel layout code.
-
Previously log colors such as Log Highlight, Log Text, and Log Command would not be available to programs other than the Editor. These are now available.
-
Fixed the Overlay ZOrder and ConstraintCanvas ZOrder in invalidation. The child widgets' order needs to match the order they are painted in for the Global Invalidation to work.
-
Fixed SWidgets that were not incrementing their LayerId correctly.
-
Fixed all mouse inputs being offset when fullscreen at resolutions that were not the same ratio as the native screen resolution.
-
Removed unnecessary error warning firing when dragging in widget archetypes derived from C++ UserWidgets. Warning no longer relevant with changes to widget template generation.
-
Fixed issues with scrollbox padding not applying if padding was less than width of scrollbox.
-
Added additional glyph logging. Speculative fix skip glyph if invalid or not visible.
-
Fixed 5.0 regression where transparent buttons got UI borders where they were not present before.
-
Fixed SSugestionBox failing to update with newly entered text properly.
-
Fix SSuggestionTextBox not closing the suggestion list when the user clicks outside it.
-
Fixed an issue where tall menus would jitter at certain applications' scales.
-
Fixed an issue where menus would flash white briefly at certain resolutions / applications scales.
UMG
New:
-
Added a function to change keyboard type: UEditableText::SetKeyboardType.
-
Added bCurrentlySwitching variable and const getter to UCommonAnimatedSwitcher.
-
Added DisableNativeTick metadata to UCommonActivatableWidget.
-
Exposed the Slate overflow policy to UMG RichTextBlock
-
Enabled Widget Library by default. Fix widget library locking up when scrolling edge is just before a new asset view.
-
Added CommonUI functionality to better support blueprint-only workflows.
-
Added functions to bind visibility to widget activation. This exposes GetFocusTarget on activatable widgets to Blueprint.
-
Added priority and duplication removal to nav-bar. \
-
*Bug Fix:** Fixed warning when using default back actions. Since we no longer use CommonActivatablePanel.
-
Added Animation drawer to UMG editor. This can be opened from the hotkey Ctrl+Shift+SpaceBar.
-
Implemented GetOptions restrictions for gamepads.
-
Added ability to select CommonUI gamepads via dropdown.
-
Added limited support for gamepad type autodetection based on any active FInputDeviceScope
-
Allow Selection of base class for Widget Blueprint.
-
Fixed Common button group disabling buttons unnecessarily.
-
Removed CommonUI widget samples in favor of content examples.
-
Added GetChecked and HasVisibilityTag helpers to UCommonUIVisibilitySubsystem.
UMG
-
Added URichTextBlock::RefreshTextLayout method to support refreshing text layout on demand.
-
When creating a new WidgetBlueprint, it will no longer add a Canvas Widget at the root of the Hierarchy and let the user choose to add one instead.
Common UI
- Added limited support for gamepad type auto-detection based on any active FInputDeviceScope. You can define the detection criteria in gamepad assets. This is limited because XInput can't distinguish between different controller types (other plugin sources will still work), so to preserve the ability to set a preference in Project Settings, the logic prefers to stick with an existing match rather than switching to something else. Otherwise it will prefer the first match found in the controller asset list.
UMG
-
Added a Wrap Widget operation in the Hierarchy to support wrapping multiple widgets at the same time. When selecting widgets that are not all in the same branch of the tree, each group of widgets in a specific branch will be wrapped in a different wrapper Widget.
-
You can now use keyboard arrow keys to move Widgets that are in a Widget Panel, such as Horizontal Boxes, Vertical Boxes, and Grids. For example a user can select an element in a Grid and move it to another cell in the specified direction in the Grid.
Common UI
-
Reworked and re-named hardware features into platform traits. This consists of the following changes:
-
Changed various references from Hardware Featureto Platform Traits. This includes the tag namespace, which is now "Platform.Trait."
-
Added the ability for games to enable or suppress tags debug globally using SetDebugVisibilityConditions.
-
The PlatformHardwareFeatures setting is now called PlatformTraits. It is an array of tags instead of a tag container to allow for .ini inheritance to work, which doesn't work correctly in the current config hierarchy editor. This will be improved in a future release.
-
UMG
- Added UAssetActionUtility to Picker Common Classes.
Crash Fix:
-
Fixed 5.0 regression where drag drops in the UMG hierarchy would result in a crash.
-
Fixed a crash that can happen when an Editor Utility Widget asset is deleted while it is in use.
Bug Fix:
-
Implemented a fail-safe check in DynamicEntryBoxBas::AddEntryChild.
-
Fixed missing add keyframe button that was missing in the UMG editor.
-
Fixed widget spinboxes font foreground color.
Common UI
-
When you re-name a widget in UMG Designer, you can now change from a generated name back to its original name.
-
Previously, UMG could make all widgets in a Widget blueprint invalid when using undo on a Replace Child operation. This issue has been fixed.
-
You can now select Abstract Classes as a base for a UserWidget.
-
Fixed an issue in EditorUtilityWidgetBlueprint that prevented the World from being marked dirty when opening or changing a property on the EditorUtilityWidget object.
-
Fixed crash when calling Add Item on a List View in PreConstruct of an Editor Utility Widget. UListView doesn't support duplicate or null items, and adding either causes a crash. We now report a warning and stop the erroneous input from crashing.
-
Fixed regression that caused animations to be re-evaluated for widgets that were not ticked.
-
Fixed issue where editor utility widget style changes would not save correctly.
Virtual Production
New:
-
Added a Tools menu to Switchboard which has shortcuts to launch Unreal Insights and a local Switchboard Listener.
-
Created the CVAR nDisplay.render.show.visualizationcomponents for toggling the visibility of visualization components in nDisplay renders.
-
Provided a CVAR Preset for CVARs used commonly on Virtual Production stages by stage operators.
-
OpenColorIO in Unreal Engine now has in-editor support for Mac and Linux.
-
When capturing traces, Switchboard automatically enables vblank monitoring, which adds vblank bookmarks to traces for nDisplay. You can also enable this functionality for traces with bookmarks captured outside of Switchboard with the CVAR nDisplay.sync.diag.VBlankMonitoring.
-
Updated the OpenColorIO library to version 2.1.
-
Added an option in Switchboard to disable handling ensures in nDisplay. Ensures are non-fatal but when they happen it can cause hitches and issues during a shoot. We are now disabling them by default, but you can choose to enable them for debugging purposes.
-
You can override the render sync policy of an nDisplay cluster in Switchboard now. There is also an option to use the sync policy specified in the nDisplay config file, so you can use custom sync policies.
-
Added option to rebind all properties exposed to Remote Control Preset for an Actor.
-
Added option to rebind a property exposed to Remote Control Preset on a different Component.
-
Stage Monitor now has an activity filter for max age.
-
Stage Monitor settings, such as filters, are now saved.
-
Made Text3D more accessible to Blueprints by allowing access to underlying kerning and mesh components and removing the final keyword from public headers.
-
Moved OpenCV library and helper module into its own plugin.
-
Added Provider Role filtering to Stage Monitor activities.
-
Updated OpenCV library to version 4.5.5.
-
Added option to export a ULensFile Asset to a .ulens file so you can use your created ULensFiles in other projects.
-
The OpenCV library now supports Linux.
-
Added Live Link transaction filter for improved Multi-User setup workflow.
-
You can now optionally set the image dimensions for a LensData Asset. Note that these are not essential for current virtual production workflows.
-
Live Link VCAM iOS app now supports multitouch. Users can operate multiple elements on the Remote Session at the same time.
-
The Level Snapshots plugin content now includes default Level Snapshot Blueprint Filters.
-
UDP and TCP messaging now support hostnames in addition to IP addresses.
-
Main Switchboard UI now has start and stop controls for the Multi-User Server.
-
You can now transact the metadata for Takes over Multi-User.
-
Added a quick access setting to Switchboard so you can configure Unreal Insights and enable captures.
-
You can now quickly increment the Multi-User Session Name from the Switchboard UI.
-
Level Snapshots now support subobjects.
-
Switchboard Listener now has Unreal Insights tracing.
-
You can now override the Switchboard Listener inactive timeout value, which defaults to five seconds.
-
Added hitch detection and logging to both Switchboard and Switchboard Listener.
-
Switchboard Listener now integrates with Unreal's standard crash logging and reporting facilities.
-
Incremented Switchboard Listener version to 2.0.0 for Unreal Engine 5.
-
Switchboard now includes a cross-platform setup script, sb_setup.py. This unifies the Switchboard installation process for different host operating systems, and includes functionality for detecting and repairing a corrupt Switchboard Python virtual environment.
-
Switchboard now works on Linux.
-
Switchboard now uses a higher port number that does not require root privileges for its internal rsync server by default.
-
Rebroadcast Subject is set to true by default for Live Link XR Subjects.
-
The Subject Representation for LiveLinkComponentController now has a Blueprint getter and setter.
-
The Subject Representation for LiveLinkComponentController now emits a Blueprint event when the component's controller map changes.
-
You can now sort by the provider column in Stage Monitor.
-
Added vertical bars to the buffer visualization in Timed Data Monitor to show the location of each frame in a subject's frame buffer.
-
Removed the Save Lens Information button from the Lens Info step of the Lens File Editor. Any changes to Lens Info are saved automatically now.
-
Updated MessageBus protocol and CBor serialization backend to support communication between Large World Coordinates (LWC) and non-LWC endpoints. Previous protocol versions in Unreal Engine 4 are assumed to be non-LWC.
-
Created the CVAR LiveLink.Component.EnableLiveLinkEvaluation to specify whether all Live Link Components should evaluate their Subject.
Improvement:
-
Remote Control Presets detect changes to exposed properties modified by Blueprint calls, and can now include changes to the root component.
-
Asset searches from the Remote Control Web API now use Blueprint native class filters.
-
Machine names are now used for sorting after the source names are sorted to create a stable Live Link source list.
-
Exposing something to the Remote Control Preset is now logged.
-
You can now control Reflect Editor Level Visibility in Game from Switchboard and the Unreal Editor.
-
Improved first-time setup of the Switchboard dependencies, as well as creation of desktop and start menu shortcuts for both Switchboard and Switchboard Listener.
-
Improved smooth evaluation with Engine Time for Live Link Sources by adding a timing offset to avoid jitter-related buffer overflows.
-
Fixed the squishing of UI elements in the LensFile Editor by adding scroll boxes to multiple panels.
Crash Fix:
-
The Editor no longer crashes when you change the map while the Remote Control Web Application is connected.
-
Fixed a crash that occurs while resolving binding when a world can't be found.
-
Fixed a crash that occurs when changing editor layout while a Remote Control Preset is open.
-
VPFullScreenWidget in the VirtualProductionUtilities plugin no longer crashes when loading a new level.
-
Fixed a crash that could occur if garbage collection started while recording a Cine Camera with a Live Link Camera Controller in TakeRecorder.
Bug Fix:
-
Fixed stale OpenColorIO color space and preset selection after the underlying configuration changes.
-
The Stage Monitor role constraint is now only verified for auto starting the monitor. If your Unreal Editor doesn't have an allowed role, you can still start monitoring manually from the UI.
-
Assets no longer have to be loaded in the Unreal Editor before you can use them in the Remote Control Web Application.
-
Previously, timecode and timespan conversions were rounding the framerate in a non-drop timecode format. There's no need to make a distinction so the framerate is now used as is.
-
The selected group in the Remote Control Preset is now correctly highlighted.
-
Fixed reset to default not working on properties that didn't exist on a Class Default Object.
-
Remote Control works on Mac now because the WebSocket receive buffer size is reduced if the platform is not Windows.
-
Disabled Live Link Component from ticking in Editor Previews, such as in the Blueprint Editor, by default to avoid breaking the root component.
-
The Live Link Remove All Subjects option is now added back to the Virtual Subject context menu.
-
The default Live Link Preset will now be applied on launch.
-
Fixed inconsistencies with Remote Control rebinding where the incorrect Actor was associated with the properties being rebound.
-
Fixed Remote Control bindings getting invalidated when changing sublevels.
-
Live Link rebroadcaster is now removed when there are no more Live Link Subjects.
-
Fixed unresponsive touch controls for the Animation Preview in the VCam UI.
-
You can now filter assets by the Img Media Source type in the Content Browser.
-
Transactions over Multi-User are now delayed until after you finish editing a text field.
-
When creating sublevels for a persistent level during a Multi-User Session, the sublevels are now correctly named and referenced in the Levels window. This fixes the cases where the levels wouldn't save their content properly.
-
Fixed a logic error in Switchboard's ListenerClient class that would lead to keepalives being sent at more than 10 Hz rather than the intended 1 Hz.
-
Switchboard Listener handles non null-terminated buffers better while attempting UTF8_TO_TCHAR conversion and logging them.
-
The Recipient field for Switchboard Listener's PresentMon process is now initialized, which prevents log warnings of the form "Trying to send message to disconnected client 205.205.205.205:52685" (endpoint = 0xCDCDCDCD)".
-
Fixed a race condition related to launching short-lived processes through Switchboard Listener.
-
In Switchboard, fixed outdated references to the UE4Editor.
-
Updated the path to UnrealBuildTool in Switchboard.
-
When running the Unreal Editor with Vulkan, nodal offset calibration no longer produces NANs for the camera pose.
-
Switchboard now queries device host platform when initiating build actions, rather than assuming all devices are Win64.
-
Switchboard now uses the correct path to the engine's Python executable on non-Windows platforms.
Deprecated:
-
The Lens Distortion plugin is now deprecated. Update your project to use the features of the Camera Calibration plugin instead.
-
The Timecode Synchronizer plugin is now deprecated. Update your project to use the features of the Timed Data Monitor plugin instead.
Removed:
- The nDisplay for Level Snapshots plugin functionality was added to the Level Snapshots plugin, so the nDisplay for Level Snapshots plugin was removed from the ICVFX plugin.
Worldbuilding
New:
-
Avoided resetting loaders while renaming duplicated actors for a runtime level cell as it flushes async loading.
-
When converting a World Composition map to World Partition, all Actors now go in a single runtime grid. Removed the creation of 1 spatial hash runtime grid per world composition layer.
-
Prevent rotation of water bodies in X,Y and scale on Z as they are not supported transformations for water bodies.
-
Added support for iOS and Android platforms to GeoReferencing plugin.
-
Added support for Level Instances to have a folder hierarchy in the World Outliner. Actor Folders can now have a root object which serves as a context for folder hierarchy.
-
Exposed SingleLayerWaterRefractionFullPrecision show flag to scene captures.
-
Exposed GetCollisionComponents on the WaterBodyComponent.
-
Add support for runtime/in-editor visibility flags for water bodies.
-
Added a collision height offset property to water bodies to allow extending the height of the collision box above the surface of the water.
-
High precision Cartesian Coordinates are now based on the new engine Large World Coordinates Vectors.
-
Added Methods to convert from Engine to Geographic Coordinates.
-
Added a Round-Planet Pawn to allow for Ellipsoidal movement around the Planet, avoiding Roll.
-
Added a sample for a Latitude/Longitude/Altitude placed Actor.
Bug Fix:
-
Fixed ActorPlacementUtils::IsLevelValidForActorPlacement to always return true for a partitioned world as checks don't apply. (bPromptWhenAddingToLevelBeforeCheckout / bPromptWhenAddingToLevelOutsideBounds).
-
Fixed broken Undo/Redo of create/delete Layer in ULayersSubsystem.
-
Fixed WaterMesh override boolean not being exposed to the UI.
-
Fixed mesh override on river water bodies.
-
Fixed custom water body materials that could be transparent.
-
Fixed r.water.WaterMesh.EnableRendering to allow/disallow all water meshes to be displayed, in-game or not.
-
Fixed memory corruption induced by invalid water materials.
-
Fixed undo behavior for water component.
-
Fixed Waves not appearing in the Wave category and some missing Wave parameters.
-
Fixed Word Partitioned Actors not being properly registered to the water brush.
-
Fixed custom water bodies being invisible when dynamically spawned.
Deprecated:
-
Changed GetWaterBodyType to no longer be virtual. Instead, users should prefer setting the value of the WaterBodyType property in water body constructors.
-
All Water body functions and data have migrated from the actor itself to a dedicated component. Any place where a function was called or data was modified on a Water Body Actor now needs to first access the respective component.
-
The Water Mesh Actor class has been renamed to Water Zone.
Data Layers
New:
-
Added Data Layer Hierarchy support.
-
Removed per-view editor Data Layer visibility show flags.
-
Added functionality to Data Layer Outliner (now very similar to world outliner).
-
Added show filters (hide Editor/Runtime Data Layers, hide actors/unloaded actors).
-
Added mechanism to lock editing of Runtime Data Layers.
-
Added Data Layer picker that reuses FDataLayerMode (shows hierarchy).
-
Added wp.Runtime.SetDataLayerRuntimeState to set any of the 3 Data Layer runtime states.
-
Modified wp.DumpDataLayers to also dump the whole Data Layer hierarchy with initial/target/effective state.
-
Added option to choose representing world in Data Layer Outliner.
-
Moved the "Allow Runtime Data Layer Editing" flag from the EditorPerProjectUserSettings to the AWorrldDataLayers actor so that the state persists for all users.
-
Added buttons to quickly add/remove selected actors to/from Data Layers.
-
Added the option to allow setting Data Layer runtime state recursively from parent to children.
-
Split contextual menu option "Create New Data Layer" into 2 options to allow creating Data Layers under a selected Data Layer or directly at root.
-
Fixed Data Layer details view not refreshing properly when toggling its "Is Runtime" flag.
-
Added column Initial Runtime State in Data Layer Outliner.
-
Fixed World Partition CheckForErrors not properly resolving invalid Data Layers.
-
Data Layer is considered not visible when it's marked as unloaded in the editor.
-
Fixed missing case in FDataLayerHierarchy::CreateParentItem.
-
Added Data Layer highlighting based on editor selection.
-
Added Data Layer / Actor filtering based on editor selection.
-
Fixed bug in Data Layer outliner where newly created actors, once saved, were showing a second unloaded version of the same actor.
-
Replaced old Data Layer placeholder icons with official ones.
-
Removed Editor Data Layers at cook and for game worlds.
-
Added ID Name column in Data Layer Outliner.
-
Fixed bad lambda captures in Data Layer Outliner context menu.
-
Reset Data Layer User Settings are now in the Advanced menu and always apply to all Data Layers.
-
Prevent pasting/importing/moving AWorldDataLayers actor.
-
Fixed detection of dirty actors newly assigned to a Data Layer that is about to be unloaded in the editor.
Bug Fix:
-
Fixed undo of Data Layer transactions when user cancels saving of dirty actors before unloading editor cells.
-
Fixed Data Layer Label tooltip.
Landscape
New:
-
Added debug name to Landscape component Edit Layers data, so that we can display a more readable name when a component is referencing an invalid edit layer.
-
Changed Landscape map check warnings to info messages, since the system is able to automatically cope with the problem.
-
Added Landscape Material to Edit asset context menus.
-
Changed grass height/weight data storage. Now uses a single continuous array to minimize slack waste.
-
Put the thumbnails on the left side of the paint layer names to prevent misalignment when importing a Landscape.
-
Added button to Landscape Details panel to create RVT volumes for all set RVT assets.
-
The context menu when right-clicking on the Heightmap layer in the Landscape Sculpt mode now points to the Manage -> Import tool instead for Landscape Heightmap import and export.
Bug Fix:
-
Clear selected Landscape components in the Details panel when clearing the selection.
-
Prevent Landscape Material Instances validation/recompilation if not in the editor or a commandlet (we cannot re-build material instance constants otherwise).
-
Fixed incorrect landscape normals computation.
-
Fixed crash in landscape resampling method. Regions in ResampleData are specified in quads, not vertices.
-
Fixed missing ShowForTools in Landscape Import/Export tool.
-
Refresh layer list from target when in Landscape Import tool
-
Fixed padding on property detail in Landscape Import/Export tool.
-
Added detection of discrepancies between the Landscape Material Instance's TerrainLayerWeightParameters and the Landscape component's weightmap allocations.
-
Renamed visibility layer name to "LANDSCAPE_VISIBILITY" to centralize/simplify the handling of that special layer's name.
-
Added resource streaming tracking system to Landscape in order to ensure RVT pages affected by a given heightmap/weightmap get invalidated each time it gets fully streamed in in the editor.
-
Fixed crash when going in Landscape mode after it was marked for pending deletion.
-
Fixed various copy/paste issues with Landscape and Textures.
-
Fixed grass maps not being able to detect that the grass map Material is finished compiling.
-
Fixed missing row of vertices when using the rendered WPO code path for landscape static lighting.
-
Fixed Landscape Edit Layers preventing Landscape to properly be carried over when converting a map to World Partition.
-
Fixed black landscape material thumbnails.
-
Fixed crash when converting old Landscape to Edit Layers or when deleting invalid paint layers in the Landscape panel and re-abilitating them after.
-
Fixed crash when creating new Landscape with no Material.
-
Added all of the current Ray Tracing Shader variations to the list of excluded Shader types for Landscape thumbnails.
-
Made TUniformGrid::Cell safe from internal precision errors. TUniformGrid::CellUnsafe was added and matches the old behavior of TUniformGrid::Cell.
-
Fixed Landscape waiting indefinitely on Landscape Brush Shaders on recompile.
-
Fixed assert that occurred randomly when undoing Landscape operations.
-
Added check to make sure Weight Blend Layers are never normalized.
-
Fixed race condition in FLandscapeEditLayerReadback when the GPU fence of 2 of its internal readback tasks get written in between their respective Tick.
-
Fixed warning "Leaking Landscape Edit Layer read back tasks." Won't process readback tasks when the Landscape is prevented from updating.
-
Fixed grass map being re-read over and over again.
-
Fixed bug where Runtime Virtual Texture settings made on a Landscape Actor did not propagate to the proxies.
-
Retopologize Tool was breaking navmesh generation.
-
Prevented continuous nav mesh updates when moving the mouse if the Flatten tool is active.
-
LandscapeGizmoActor is not shown anymore in the Scene Outline.
-
Fix VT update to happen with rest of Landscape painting tools (Smooth, Flatten, Noise).
-
Fix Landscape GetXYOffsetData to take mip level into account.
-
Get static parameter values prior to updating static permutation for Material Instance in Landscape components.
-
Fixed assert when updating heightmaps of different sizes when merging Landscape Edit Layers.
-
Fixed crash when deleting Landscape components.
-
Properly delete Landscape Edit Layers heightmaps and weightmaps when deleting Landscape components.
-
Fixed assert when cooking Landscape components on mobile and creating Materials.
One File Per Actor
New:
- Call IsPackageExternal instead of manually testing for RF_HasExternalPackage.
Bug Fix:
- Deleted empty/invalid external actor packages on OpenWorld template map.
World Partition
New:
-
Disabled building of static lighting in World Partition maps, It will be properly supported in a future release.
-
Fixed invalid bounds computed for ActorClusterInstance when cluster mode is set to Embedded.
-
Resaved OpenWorld with reduced actor packaging scheme and enabled actor folder objects.
-
Actor Folders Objects. When enabled, folders are actual objects and modifying a folder won't affect Actors (more compliant with OFPA).
-
Actor Folders Objects enabled by default for World Partition and Level Instances.
-
Can be enabled on regular levels through the experimental feature 'Use Actor Folder Objects'.
-
If Level uses OFPA, Actor Folders Objects are saved in their own package (but will use ExternalObjects root folder).
-
Generalized saving object in an external package (different from its outer package).
-
World outliner support for old folders and Actor Folder Objects.
-
Levels using the Actor Folder Objects will show a root Level node (like Level Instances).
-
WorldPartition now sorts level streaming using Level Streaming's priority so that UWorld::UpdateLevelStreaming processes making visible levels and call AddToWorld in the right order. This results in a more efficient usage of the AddToWorld time limit.
-
Moved World Partition Editor and Data Layer Outliner under same Level Editor Category.
-
WorldPartition now has its own max world size (value is currently equal to UE_OLD_WORLD_MAX).
-
Actor Folder Objects feature is no longer active while cooking or while running with -game.
-
For PIE partitioned worlds, propagate PersistentLevel's used Actor Folder Objects in each generated runtime level. This allows it to remove fallback to persistent level in ULevel::GetActorFolder.
-
Modified actors in partitioned worlds are now in the correct folders in PIE.
Bug Fix:
-
Removed next preferred level to process in AddToWorld and replaced by filter function that will skip non critical streaming levels when streaming performance is poor.
-
Fixes UWorld::BlockTillLevelStreamingCompleted not always waiting for all streaming levels that were making visible to become visible.
-
Fixed optimization using s.LevelStreamingAddPrimitiveGranularity : Support cases where AActor::PostRegisterAllComponents triggers code that either unregisters or re-registers components pushed in FRegisterComponentContext.
-
Fixed UWorld::BlockTillLevelStreamingCompleted to make it call Begin/End StreamingPauseDelegate only once .
-
Fixed bad management of unsaved level instances in world partition PIE. This was causing Level instance content to be added twice in the PIE world and caused a crash when exiting PIE.
XR
New:
-
Created the OpenXR function GetControllerTransformForTime to query velocity and acceleration of the controller at a specified time.
-
Added a mechanism to use OpenXR chain structs in OpenXR extension plugins.
-
You can now define a swapchain and renderbridge in an OpenXR extension plugin.
-
Added infrastructure to OpenXR for playing haptics on a VR HMD.
-
XR HMD plugins can now override Android device profile names.
Bug Fix:
-
Fixed issues related to OpenXR runtimes not supplying tracking data of various types. If data isn't being provided, it should not be copied out because it might be incorrect, and it is better to preserve the last cached position than overwrite with zero or identity values.
-
Runtime data is now per controller and the constant bulk data is shared by all controllers in the OpenXR APIs. This fixes the issue where you couldn't apply the same haptic effect on two devices simultaneously and have them behave correctly.
-
Fixed an issue where the VR Console Command window aligned off the player's view on several VR platforms. Now the debug canvas is drawn to an internal texture, and so no longer applies DPIScale from the viewport.
-
ShadowProjection passes no longer check for reused LoadBalancers if Instanced Stereo Rendering is enabled.
-
Changed the filename of the retrieved Android manifests by adding the prefix "Retrieved_" so they don't override the already generated manifests.
-
ETextureCreateFlags for resolve and target are now unified in OpenXR because only one texture is ever allocated. There is still the issue of IStereoRenderTargetManager exposing both sets of texture flags, and the concrete classes that utilize RHICreateTargetableShaderResource* still require the flags separated.
-
Deferred culling contexts are no longer used when Instanced Stereo Rendering views come in.
-
OpenXR HMDs now use custom OpenXR XrReferenceSpaceType from OpenXR extension plugins.
-
Fixed startup error in the Unreal Editor if the Windows Mixed Reality plugin is enabled and the Windows build is later than 2004. This is an interim fix, since the WMR plugin is tagged as deprecated in 5.0 and will be removed in a future version.
Deprecated:
- The Windows Mixed Reality plugin is deprecated in Unreal Engine 5. Update your projects targeting Windows Mixed Reality and HoloLens devices to use OpenXR.
AR
Bug Fix:
-
The Windows Mixed Reality RHI now uses a non-null display adapter when creating D3D11 devices.
-
Set the macro PLATFORM_USE_GENERIC_STRING_IMPLEMENTATION to 0 on HoloLens to prevent failures.
VR
New:
- The Oculus VR plugin was updated to v33.
Bug Fix:
- Fixed the issue where SceneCapture was enabling stereo when it shouldn't because it doesn't own a viewport. Since SceneCapture shouldn't be enabling stereo, CreateSceneRendererForSceneCapture explicitly disables stereo.
Upgrade Notes
AI
Navigation
Upgrade Notes:
- Code that accesses recast / detour code directly or through deprecated functions. In the latter case, compiling code may create double to float conversion or deprecation warnings. Unless you are making use of large world coordinates (LWC) directly, the warnings can be ignored. To be fully compliant with LWC, conversion to FReal for UE / Game code, or dtReal / rcReal / duReal for recast library code, will be required.
Animation
Animation Tools
Upgrade Notes:
- In Control Rig, Gizmo was renamed to Shape. All API calls which previously included the term "gizmo" have been renamed to "shape". Python scripts can be upgraded by using a simple text search and replace.
Audio
Upgrade Notes:
- Refactored Audio::TScopedComPtr to TComPtr.
Core
Upgrade Notes:
- Moved the FResourceSizeEx into its own cpp file so modifying the header isn't a full recompile. Wherever possible convert the usage of FResourceSizeEx to use the tracking functions which accept a named tag such as:
AddDedicatedSystemMemoryBytes(const FName& Tag, const SIZE_T InMemoryBytes);
AddDedicatedVideoMemoryBytes(const FName& Tag, const SIZE_T InMemoryBytes);
AddUnknownMemoryBytes(const FName& Tag, const SIZE_T InMemoryBytes);
The "Shared" version of these functions have been removed and should be replaced with one of the options listed above.
- Projects which have engine modifications using raw pointers will need to update those modifications to use TObjectPtr
instead of T*. Note that this only applies to engine changes; plugins and projects are not affected.
Cooker
Upgrade Notes:
- AlphaCoverage scaling was on by default for all textures, but now it defaults to off. It should only be used for punch-through transparency. Texture has a new bool, bDoScaleMipsForAlphaCoverage, to control this. The new config option "EnableLegacyAlphaCoverageThresholdScaling" can be set to true to keep the legacy behavior. Textures with AlphaCoverageThresholds at the default value of (0,0,0,1) now have AlphaCoverage scaling off by default.
Datasmith
Upgrade Notes:
- The deprecated USDImporter module is now fully deleted from the USDImporter plugin, along with old, unsupported Python scripts. Users should update their code to use the USDStageImporter module instead.
Editor
API Change:
- IContentSource::GetCategory() has been renamed to GetCategories() and returns an array of category names instead of only one.
Upgrade Notes:
-
Upgraded engine version of the third-party Alembic libraries to version 1.8.2, we are dropping support for HDF5.
-
The bForceRDOOff setting in the [TextureFormatOodle] Engine.ini section has been deprecated. Projects with RDO enabled (i.e. bForceRDOOff=false) will need to enable RDO in Project Settings -> Texture Encoding.
-
Users may need to resave Blueprint assets using MakeTransform with the default values. The default values saved as string with the asset changed from "1,1,1" to "1.000000,1.000000,1.000000", and this generates a Blueprint Compiler warning.
New:
- The CVAR r.Editor.OpaqueGizmo has been replaced by ShowFlag.OpaqueCompositeEditorPrimitives to be scene-specific. This means the Editor Gizmo dithering can be controlled per-scene now.
Mobile
Android
Upgrade Notes:
- FAndroidPermissionDelegate is now a multi-cast delegate, to allow multiple callbacks to be bound. Any callbacks bound to FAndroidPermissionDelegate with a Bind function will error; replace these with calls to Add functions instead.
Networking
Upgrade Notes:
- The various Vector_NetQuantize types no longer clamp the scaled vector components to a specific number of bits. The only values that are considered invalid are non-finite ones which are still replaced with a zero vector during serialization. Precision has also been improved by not scaling values unless it's certain that the precision can be improved by doing so. If clamping of values in Vector_NetQuantize types is desired, make sure to clamp them before replicating. This also makes sure the server and clients have the same perception of what the values actually are.
Online
API Change:
- A ChannelName parameter has been added to the IVoiceChat's FOnVoiceChatBeforeRecvAudioRenderedDelegate callback to disambiguate which voice channel the audio is from. Existing callbacks bound to FOnVoiceChatBeforeRecvAudioRenderedDelegate will break due to the signature change. To resolve this, you will need to add the new parameter to the signature of your callback functions.
Online Subsystem
API Change:
-
MAX_LOCAL_PLAYERS has moved from the OnlineSubsystem plugin to CoreOnline.
-
Removed the duplicate ToString function for ESocialRelationship type. If code fails to find ToString, use LexToString instead.
-
Removed ESocialFriendRequestMethod because it's the same as SubsystemType RequestMethod.
Upgrade Notes:
- EOS Stat name inconsistencies are now fixed by converting to upper case before calling API methods. As a result, stat names that you define in the EOS Dev Portal should be all upper case.
Pixel Streaming
API Change:
- Class names in private sections of the Pixel Streaming plugin have been moved into a "PixelStreaming" namespace.
Upgrade Notes:
-
Renamed a number of classes to use the phrase "PixelStreaming" instead of "PixelStreamer", specifically, PixelStreamerInputComponent to PixelStreamingInputComponent. Any projects directly accessing Pixel Streaming C++ will need to be updated to use the new naming conventions.
-
The HardwareEncoders Plugin needs to be enabled whenever using AVEncoder (GameplayMediaEncoder) otherwise there will be no encoders registered to AVEncoder.
-
Renamed PixelStreamerInputComponent to PixelStreamingInput to align with our new naming conventions in UE5. This change may break blueprints using the old PixelStreamerInputComponent. While we have put in active redirectors into the Pixel Streaming plugin in some cases these Blueprints will not upgrade, in such cases the old PixelStreamerInputComponent will have to be deleted and the new PixelStreamingInput component can replace it.
Platforms
Upgrade Notes:
- Platform input customization cvars have been unified to use an "Input." prefix. For example: "Input.EnableMouse" instead of "[PlatformName].EnableMouse". Check your project's .ini files and migrate these as necessary.
VR
Upgrade Notes:
- HoloLens packaging support modules have been moved from the "HoloLens"/"HoloLensAR" plugin into the engine to align with other platform implementations. The now empty "HoloLens"/"HoloLensAR" plugin was deleted. Existing projects that enabled the plugin will trigger a "HoloLensAR plugin missing. Continue/Cancel" dialog. Select continue and the deleted plugin reference will be removed from the uproject file. Any references to the deleted plugin should be removed, but most code references modules rather than plugins and should continue to work as expected.
Rendering
Upgrade Notes:
- Cleaned up render target pool system by deprecating legacy MSAA split-texture creation and removing the old event viewer. Projects should use RDG when allocating MSAA render targets which require resolves.
Lighting
Upgrade Notes:
- RayTracingAO is now disabled by default, affecting existing projects. Projects that actually intended to use RayTracingAO will need to re-enable it in the Post Process Volume settings.
Virtual Production
Upgrade Notes:
-
Moved common parameters from FOpenCVLensDistortionParameters from the Lens Distortion plugin to the OpenCV plugin so other plugins can easily use them.
-
Live Link's animation-related classes were moved to their own runtime module to better isolate from the Unreal Editor.
-
Live Link functions GetSubjectRole and DoesSubjectSupportRole have been deprecated and replaced by new thread-safe Live Link functions GetSubjectRole_AnyThread and DoesSubjectSupportRole_AnyThread.
-
Moved generic OpenCV convenience functions into OpenCVHelper so they're not scattered across multiple Virtual Production classes.
Worldbuilding
Upgrade Notes:
- The double precision structure Cartesian Coordinates is now deprecated and has to be replaced by Engine Vectors
XR
Upgrade Notes:
-
The OpenXR HMD functions DrawHiddenAreaMesh_RenderThread and DrawVisibleAreaMesh_RenderThread no longer check the render thread and have been renamed to DrawHiddenAreaMesh and DrawVisibleAreaMesh. The relevant platform runtime functions were also updated with this change.
-
MRMesh (Mixed Reality Mesh) now uses Chaos physics for runtime async collision cooking. This is used by AR devices to represent the real world geometry scanning features in Unreal.
-
World meshing from the HoloLens using the Windows Mixed Reality plugin now writes floats instead of doubles to work with the new Large World Coordinates feature.
-
Moved the functionality for Oculus plugin-specific haptic data resampling into the Oculus plugin.
VR
Upgrade Notes:
- Common stereo-enabled logic was moved to FSceneViewExtensionContext.
已知的问题
有关影响虚幻引擎5.0的已知问题完整列表,请参阅虚幻引擎已知问题跟踪站。