新内容
虚幻引擎5.3对UE5的核心工具集作了进一步优化,涉及渲染、世界构建、程序化内容生成(PCG)、动画和建模工具、虚拟制片、模拟等多方面。
此版本还囊括了虚幻引擎社区开发者在GitHub上提交的诸多改进。感谢所有为虚幻引擎5.3做出贡献的开发者:
909185693, 34Pibo, aaronmjacobs, Acren, aijkoopmans, AishaBrown-SMG, aknarts, alexey-pelykh, alwintom, AndreaCatania, AndTikhomirov, ArcEcho, astutejoe, avudnez, baronpumpky, BenVlodgi, BinaerBoy, Bioliquid, BlenderSleuth, bretternst, brycehutchings, c4augustus, CaptainHoke, chalonverse, chrismcr, Cleroth, cneumann, crobertson-d3t, crssnky, David-Vodhanel, dbsigurd, Deathrey, DecoyRS, djethernet1, DomCurry, dorgonman, Drakynfly, DreikaEru, drichardson, dulanw, Dumbeldor, dyanikoglu, Edstub207, erebel55, error454, fieldsJacksonG, FineRedMist, flibitijibibo, foobit, freezernick, gbxAlx, gonfva, hellokenlee, hkzhugc, HSeo, Ilddor, ilkeraktug, ImaginaryBlend, iniside, jackatamazon, JakobLarsson-Embark, jammm, janurbanech13, jcb936, JDCruise, jfgoulet-gearbox, jimsimonz, Johnsel, JonasKjellstrom, jorgenpt, KacperKenjiLesniak, KaosSpectrum, KasumiL5x, KeithRare, kimixuchen, kissSimple, kniteli, KristofMorva, ldisthebest, LennardF1989, Levil0229, lflecunneen, lightbringer, lijenicol, lijie, liuhao0620, loening, LtRandolph, lucyainsworth, MalikuMane, mamoniem, manugulus, marcussvensson92, mariuz, mattiascibien, MaximeDup, microsoftman, MikBou123, mkotlikov, muit, OskarHolmkratz, pepsiandmilk, PhilBax, Phyronnaz, pirskij, praisesolek, projectgheist, QRare, qwe321, RandomInEqualities, Rareden, robert-wallis, RobertVater, roidanton, ryanjon2040, samhocevar, satoshi-iwaki, scorpio20t, Skylonxe, slackba, slonopotamus, Sn-a-ke, SRombauts, steelixb, stlnkm, teessider, tehpola, TheJamsh, TheoHay, Thomasleeee, tianyu2202, tommybear, tonetechnician, ToniSeifert, tuxerr, ukustra, Ultrahead, ungalyant, user37337, Vaei, velvet22, vorixo, Voulz, vsrc, WarmWar, WillmsBenjamin, WinsonSS, xiexbmu, yaakuro, yatagarasu25, yehaike, ZioYuri78, zompi2
渲染
Nanite
显式切线
Nanite现在支持在数据格式和运行时中使用显式切线(Explicit Tangent)。此前,Nanite依赖的切线空间是在材质中隐式派生的,并且需要依赖屏幕空间位置和UV梯度。这种方法在计算上很方便,使切线不占用内存和磁盘空间,并且在实际使用中,非常适合各种类型的网格体,尤其是高度曲面细分的网格体。但是,在某些情况下,特别是涉及低面模型时,隐式切线会很不精确,往往需要按顶点自定义切线才能获得需要的品质。为了解决该问题,用户现在可以选择是否在资产上保存和使用原始模型切线。启用此选项后,将产生某些负面影响,即资产的内存和磁盘占用量大约会提高10%。
Nanite样条线网格体(试验性)
我们对基于Nanite网格体的样条网格体组件进行了初步实现。在设置 .ini
文件中设置 r.Nanite.AllowSplineMeshes=1 即可启用此功能。警告:目前,启用此功能会导致性能降低,并影响Nanite的整体剔除表,在某些极端变形情况下,还存在错误剔除的问题。
遮罩材质和像素深度偏移(PDO)的性能优化
针对可编程光栅,引入了新的滑动窗口顶点缓存,带来更快速的遮罩材质和PDO。初步测试表明,带遮罩的植被的光栅化速度提高了20%。
Nanite对象的选中效果
启用TSR/TAA后,选中Nanite对象后不再会出现轮廓闪烁,也不会被其他对象剔除/遮挡,并且会按最终分辨率渲染。
Nanite实例化静态网格体(ISM)/植被实例的选中效果
我们修复了编辑器中的几个问题,这些问题与选择、修改或删除启用了Nanite的实例化静态网格体或植被Actor实例有关。
回退目标设置
我们为Nanite静态网格体添加了回退目标(Fallback Target)设置。通过此菜单,你可以更明确地控制回退效果以及回退方法:相对误差法(Relative Error)还是百分比三角法(Percent Triangle)。
Lumen
如果启用了基于硬件光线追踪(HWRT)的命中光照,并且在后期处理体积中将"最大反射弹射次数(Max Reflection Bounces)"设置设为 2 或更高,Lumen将支持多次反射弹射。如果有足够的性能预算,这种方法还能防止反射中出现黑色区域。
Lumen反射现在可以在没有Lumen GI的情况下使用。这点适合那些只想用静态光照,但不仅仅想依赖反射捕获/探头来提升反射质量的游戏或应用。这类Lumen反射仅在启用HWRT时起作用,它将自动启用命中光照,因为当禁用Lumen GI时,Lumen的表面缓存优化不可用。
我们对Lumen HWRT进行了重大优化,包括在主机上默认为HWRT启用异步计算。
Lumen Overview可视化模式现在包括Lumen Scene的几何体法线视图,这样有助于发现全局距离场(在软件光线追踪的情况下)或Nanite回退网格体(在HWRT的情况下)的问题。
我们添加了r.Lumen.Reflections.VisualizeTraces,用于可视化和调试反射光线。
我们修复了材质AO,它之前在自发光和直接光照上应用。
正交渲染(试验性)
正交渲染在建筑可视化和制造业项目中很常见,在游戏中也常用于一些风格化摄像机镜头。长期以来,它一直在UE中作为摄像机的一项功能,但由于很多渲染功能都不支持,因此实际使用较少。
从5.3开始,正交渲染作为一项试验性功能受到支持。我们修复了引擎的多个方面,以便透视投影和正交投影在功能上实现对等。UE5的大部分当下功能都可以正常运行,包括Lumen、Nanite、阴影。该功能还在持续开发之中,我们非常乐意倾听你的反馈,了解你是如何在项目中使用它。
稀疏体积纹理(试验性)
在UE 5.3中,我们引入了全新的资产类型:稀疏体积纹理(Sparse Volume Texture,SVT)。SVT能够保存烘焙后的模拟数据,这些数据可用于表示各类体积化媒介,例如烟雾、火焰和水。要创建SVT,可以导入在其他3D应用程序中创建的OpenVDB( .vdb
)文件;支持单个文件和动画序列。此外,Niagara流体现在会在内部缓存为SVT,以便大幅优化性能和内存。
SVT与3D纹理/体积纹理类似之处在于,它将纹素(体素)保存在3D数据结构中,并可以使用三维UV坐标建立索引。不同于常规(密集)体积纹理,SVT只需要在包含"有趣"的数据的体积区域上耗费内存,相较于密集体积纹理,能够允许大得多的体积,或者对相同规模的体积使用更少的内存。
某些基于延迟渲染的效果,例如异类体积、体积云和体积雾等,可以通过在其体积域材质中包含一套稀疏体积纹理材质节点,来充分利用SVT。使用异类体积渲染的资产必须利用新的异类体积组件。延迟渲染功能仍然限于现有的实时体积功能集。我们提供了对渲染体积的更完整支持,但只作为试验性功能在路径追踪器中提供,可以精确模拟散射、阴影和GI。还有一个非常简单的稀疏体积纹理查看器组件,主要用于调试,并适用于延迟渲染器。
路径追踪器
(试验性)路径追踪器现在初步支持追踪异类体积,例如烟雾、火焰和云。异类体积可以采用Niagara流体插件创建,或通过使用稀疏体积纹理驱动的数据实例化异类体积Actor来创建。VDB文件可以导入为稀疏体积纹理,因而可以在路径追踪器中渲染。注意:此系统尚不兼容天空大气云。
(试验性)现在路径追踪器中支持Substrate材质。
次表面散射取样效率得到提升,对于相同数量的光线取样,在次表面材质中造成的噪点更少。
路径追踪器现在渲染其自己的深度通道,而不是使用光栅化程序生成的通道。这样一来,深度和RGB结果之间可更精确地匹配,优化依赖于景深等深度的后期处理通道。(此更改不影响"参照景深"。)
现在支持材质图表中的DBuffer贴花着色节点。这些节点自5.0以来就可用,极大地扩展了材质中贴花的功能。(有关DBuffer贴花着色节点的文档将在发布UE 5.3时提供。)
后期处理材质缓冲区现在有专门用于路径追踪器的更多输出。这些缓冲区可通过材质图表中称为"Path Tracing Buffer Texture"的新节点访问,并提供辐射、降噪辐射、反射率、法线和方差的数据。
Substrate(试验性)
Substrate在5.2中作为试验性的功能发布,会将着色模型的固定套件(例如默认光照和透明涂层)替换为表现力更强、更为模块化的框架,以提供更大范围的表面外观和更宽泛的参数空间。性能将根据复杂性和期望的预算而调整,旧版材质的开销与以前相似。
Substrate在5.3中仍为试验性。它不应该用于制片场景,但我们鼓励你测试它,希望你能在此开发阶段为我们提供意见反馈。
UE 5.3包含Substrate的功能、稳定性和性能方面的许多优化。一些更改包括:
新的闪光和高光度轮廓功能,主要用于汽车应用。
改进了DBuffer着色节点支持。
用于高规格平台的新绒毛模型。
我们更新了材质编辑器中的"Substrate材质信息(Substrate Material Information)"选项卡,更好地显示材质性能和拓扑信息。
我们添加了许多漏洞修复和性能优化。
虚拟阴影贴图
我们不再将UE 5.3中的虚拟阴影贴图视为测试版,现在将其视为可投入使用。虚拟阴影贴图(VSM)仍有很多开发工作要做,但这一转变反映了当前暂定功能集的稳定性和可行性。
现在,即使启用阴影缓存时,VSM也会遵守Nanite剔除距离。之前,启用了缓存时,阴影中会忽略剔除距离,因为它可能在主渲染和阴影贴图之间造成不一致。但是,如果针对频繁的剔除调整了内容,这可能对性能造成很大影响。依赖剔除的场景现在有更快速的阴影,但如果剔除距离足够短,能够在主渲染中看到停顿,就可能出现阴影瑕疵。
我们添加了逐个为图元添加标记的功能,允许用户控制阴影失效行为。这样用户就有办法在一些情况下防止失效,例如,图元已知会静态使用WPO设置的情况下,目前我们的系统不能自动对此进行推断。默认设置是"自动(Auto)",除非显式更改,否则会保留当前行为。
我们做了更多漏洞修复和性能优化。
毛发
我们为Groom和Groom绑定资产添加了Groom流送支持。这样就能在编辑器和游戏中更快地加载内容,因为只需加载所需部分即可;Groom资产的CPU和GPU内存压力也得到缓解。
我们添加了连续LOD,当屏幕存在大量Groom但只占据屏幕较小部分时,这有助于缩放/提升性能。此设置默认关闭,你可以使用 r.HairStrands.ContinuousLOD
来启用。
我们为变形器图中的毛发发束添加了试验性的支持,包括支持编写自定义属性。这仍处于开发早期,但可在运行时在变形器图表中做出Groom更改。
我们修改了Groom属性,现在更加灵活,更容易添加新的可选属性。我们添加了两个新的可选属性(clumpID / AO)。Groom属性的数字值现在可在Groom编辑器中看到,以便更轻松地检查。
在资产导入期间,点/曲线限制现在会报告给用户,并相应修剪数据。此外,现在导入的属性在导入时以及在Groom编辑器中会清晰显示,以便直观地看到特定Groom资产的可用内容。
我们做了许多额外的漏洞修复和性能优化。
时序超分辨率(TSR)
我们引入了新功能,在禁用动态分辨率时(主要是在PC平台上)更好地自动控制游戏中的屏幕百分比。默认启发法基于所显示像素数量的最优TSR收敛速率来设置屏幕百分比。这样一来,最终用户应该更容易摸索找到其设备的最佳设置。
编辑器有多项新的UX功能,可辅助理解和控制编辑器和PIE视口中屏幕百分比的行为。
我们添加了对桌面GPU上16位运算的初步支持,前提是硬件支持,包括Radeon RX 5000系列(RDNA)显卡和更高版本。
我们修复了TAA和TSR之间关于自发光表面的Lumen屏幕空间追踪的不一致情况。
我们做了许多优化和漏洞修复。
渲染资源查看器
渲染资源查看器是UE 5.2中引入的工具,可用于完全了解GPU内存分配情况和渲染资源,例如顶点缓冲区和索引缓冲区,以及它们来自哪些资产,例如静态和骨骼网格体。这为美术师和开发人员带来了优化GPU内存并使其项目保持在渲染预算之内所需的信息。
UE 5.3中的新增功能:
你现在可以选择渲染缓冲区/纹理并跳至内容浏览器中的源资产。
Insight Memory Trace现在会追踪DX12资源,而Insight Metadata Trace会像渲染资源查看器那样追踪资源所有者路径。这些功能可补充渲染资源查看器,后者仅在编辑器中起作用,并允许追踪所属资产路径、渲染资源的调试名称,及其在打包版本中的所有者渲染类名。
光照
带有光线追踪的阴影的光源现在可以选择对体积雾投射阴影。你可以使用控制台变量r.VolumetricFog.InjectRaytracedLights启用此选项,由于存在性能开销,它在默认情况下关闭。
现在,聚光灯、点光源和矩形灯可以将其强度单位设置为 'EV'(曝光值),这意味着您可以以相对的 "档位" 或2的幂次增量设置强度。
世界构建
关卡实例Actor筛选器
Actor筛选器在世界分区关卡内允许每个关卡实例采用变体。它们包含数据层实例和/或本地数据层,设置为支持通过纳入用户定义的默认筛选器来筛选Actor。根据每个关卡实例中设置的筛选器默认值、覆盖和激活状态,将在流送生成时纳入或排除与这些预配置的筛选器关联的所有Actor。筛选掉的数据将完全从游戏中删除。
关卡流送持久性(试验性)
关卡流送持久性是一种插件,用于管理流出/流入关卡中包含的对象上特定标记属性的保存和恢复。这些属性在引擎配置( .ini
)文件中定义。
这可在Gameplay期间通过内存中快照提供持久存储的属性,还可以在会话之间持久存储,前提是通过提供的API实现了这一功能。
Nanite地形
Nanite现在可以在地形Actor中启用,与正常地形渲染相同。Nanite地形网格体在后台重新构建,以免在编辑器中时干扰用户工作流程。Nanite地形不会优化地形分辨率,但允许用户利用Nanite运行时功能,例如GPU剔除、自动几何体流送和LOD,它通常会提升运行时性能,尤其是对于VSM等很耗资源的功能。
大型地形导入/导出
我们更新了地形导入/导出,利用世界分区,将导入操作分拆为多个连续批次,从而支持非常大的地形/分辨率。
地形物理材质显示
地形物理材质现在可以在显示碰撞时使用新的控制台变量 landscape.CollisionMesh.ShowPhysicalMaterial
来显示。启用后,它可帮助用户调试物理材质的导出情况,尤其是在使用Landscape Physical Material Output节点时。
地形LOD组
我们添加了LOD组,以便在相同组中的多个地形Actor之间无缝进行LOD过渡。
程序化内容生成(PCG)
层级化生成
利用层级化生成,你可以在相同PCG图表中执行不同的网格大小。
在PCG图表设置中设置默认网格大小轴后,用户可以开始添加Grid Size节点,定义应该执行下游元素的粒度。以更高网格大小处理的数据可以在所有更小的级别使用。
利用此分层逻辑,用户可以实现更加优化的程序化生成,尤其是在运行时的大型世界上。
来自外部数据的规则处理
我们现在支持来自外部数据的规则处理,提供了与《城市示例》项目的规则处理器插件等同的功能来管理外部数据,处理这些数据,并在目标Actor上生成构件。
其中包括:
对Alembic点云和数据表的外部数据支持
用于将Alembic文件转换为PCG设置资产的工具
子图表检查
我们添加了对通过父图表中的属性列表视图来调试和检查PCG子图表的支持。
图表实例参数
我们引入了蓝图API来获取和设置PCG图表用户参数。其他新增内容包括UX优化以及筛选支持的类型。
自定义PCG元素
为了改进自定义PCG元素的创建工作流程和可读性,我们重命名了特定于PCG的蓝图循环函数。我们还添加了新函数来按顺序设置和输出PCG数据集合。
开发人员迭代
多进程烘焙(测试版)
多进程烘焙(Multi-Process Cook) 利用可用的CPU核心和内存资源,帮助缩短从构建场服务器或在本地工作站上获取烘焙的输出所需的总时间。
多进程烘焙是UE 5.3的测试版功能。根据项目大小和数据的分离情况,性能增益可能有所不同。为实现最佳效果,我们推荐你根据项目和可用硬件规格测试不同的CookProcessCount值。
虚拟资产
虚拟资产现在可在UE 5.3中投入使用,推荐用于使用Perforce版本控制和共享虚幻DDC(派生数据缓存)的团队,以实现最佳性能。
总的来说,虚拟资产可显著减小本地项目数据的大小,只需同步核心资产元数据,然后根据需要下拉批量数据,因此同步速度更快。
虚拟资产支持用于纹理、音频数据和静态网格体(包括Nanite)。批量数据使用Oodle压缩,以进一步节省数据大小。
如果你需要离线,可以在启动项目时预先缓存命令,以便将虚拟化数据缓存在你的计算机本地。虚幻自动化工具(UAT)中还提供了"自动修复/重新虚拟化资产"检入脚本,用于捕捉项目范围内错误地取消虚拟化的所有资产。
C++20默认版本
UE 5.3现在使用最新C++20标准编译,该版本在你的开发环境中受支持。
我们向虚幻编译工具(UBT)添加了C++20支持,可使用目标或模块设置进行控制;C++14已标记为弃用,不再受支持。
无论目标C++标准是什么,所有引擎模块默认使用C++20编译。其他模块仍支持C++17,但可以根据需要选择加入C++20。
C++ Unreal Header Tool
我们从虚幻引擎删除了 C++ Unreal Header Tool。请使用C# Unreal Header Tool。
平台
XR
注视追踪的注视点可变速率着色(试验性)
在开发XR应用程序时,性能至关重要。利用此试验性的功能,注视追踪的注视点图像生成可以用于OpenXR,减少了绘制的像素总数。
确保启用了OpenXR和OpenXR EyeTracking插件,并设置:
xr.VRS.FoveationLevel 1-3以启用注视点
xr.VRS.GazeTrackedFoveation 1以启用注视追踪的注视点
xr.VRS.FoveationPreview 1以启用注视点遮罩的预览
Nanite的单通道立体渲染
启用实例化立体渲染时,Nanite现在可以在单个通道中渲染两个立体视图。
Nanite渲染过程包括多个步骤,为每只眼睛分别执行这些步骤不是最优操作。启用了ISR的项目现在可以让Nanite管线的每个步骤同时处理两只眼睛,减少了总体渲染时间。
如果你怀疑此技术会造成问题,可以使用r.Nanite.MultipleSceneViewsInOnePass=0将其禁用。
Lumen全局光照的立体优化
Lumen GI有许多按视图区分的缓存。由于立体视图在位置和方向上彼此靠得非常近,我们可以在各个视图之间复用部分缓存。
如果遇到问题,你可以使用r.Lumen.StereoOptimizations=0将其禁用。
手持AR优化
ARCore SDK已更新到1.37
ARCore插件清理:
删除了弃用的摄像机元数据API用法。
已更新为新的云锚异步API。
已更新为新的前置/后置摄像机配置API。
删除了有跨平台等效函数的特定于ARCore的已弃用蓝图函数。
在世界变换或世界比例的追踪发生更改时,修复了ARCore和ARKit ARPin。
XRScribe插件(试验性)
利用这个新的试验性插件,可使用OpenXR插件和相关代码,而无需OpenXR设备。该插件可捕获虚幻引擎和运行时之间的OpenXR API交互,并可以使用该捕获来模拟设备。
XRScribe OpenXR表面目前支持的一组有限的OpenXR扩展。尚不支持手动追踪、注视追踪、深度层和Vive追踪器。
目前仅可用于Win64,但将来会支持其他平台。
模拟当前会处理HMD和设备姿势的重播,但还不能处理输入。
插件内置捕获可用于使用CLI(-xremu=mq1或-xremu=vi)进行快速模拟。
XRBase重构
我们将核心引擎中的许多与XR相关的接口的实现重构为XRBase插件,减小非XR项目中的可执行文件大小和内存开销。因此,一些与XR相关的插件可能需要将XRBase添加为依赖项。
XR_FB_Foveation支持(试验性)
现在可以在"项目设置(Project Settings)->OpenXR设置(OpenXR Settings)"中启用Meta Quest设备的固定和动态注视点。你可以使用以下控制台变量来进行配置:
xr.OpenXRFBFoveationLevel(默认值=0)
0=无,1=低,2=中,3=高
xr.OpenXRFBFoveationDynamic(默认值=False)
True/False
xr.OpenXRFBFoveationVerticalOffset(默认值=0)
其他优化
Vulkan RHI上的 移动预览(Mobile Preview) 现在以原生方式使用多视图扩展,而不是移动多视图模拟。
所有 Meta 设备的打包可以通过在项目设置中启用 Meta Quest的数据包(Package for Meta Quest) 设备复选框来实现。
OpenXR 插件的 扩展插件 现在可以访问 层列表(Layer List) 。
移动开发要求和兼容硬件
下面列出了虚幻引擎5.3支持的移动设备所支持的操作系统版本和最低硬件。有关必需SDK和IDE的更多信息,请参阅"平台SDK升级"小节。
iOS/tvOS/iPadOS
UE 5.3支持iOS、iPadOS和tvOS设备,前提是这些设备的操作系统支持版本目标SDK 15或更高版本。UE 5.3支持:
A8 AppleTV设备
A8X iPad
A9设备或更高版本
下面是适用于UE 5.2的最低兼容设备型号:
iOS 15
iPhone 6S或更高版本
iPod Touch第7代
iPadOS 15
iPad第5代或更高版本
iPad Air 2* 或更高版本
iPad Mini 4* 或更高版本
iPad Pro(所有型号)
tvOS 15
Apple TV HD*
Apple TV 4K(第一代)
Apple TV 4K(第二代)
Android
UE 5.3支持满足以下规格的Android设备:
Android 8或更高
64位基于ARM的CPU
兼容的GPU:
Mali T8xx、G71、G72、G76、G77、G78和G71x系列
Adreno 5xx、6xx或7xx系列
PowerVR GM9xxx系列
Xclipse 920
兼容的图形API:
OpenGL ES 3.2
带有兼容驱动程序的Android 10或更高版本设备上的Vulkan 1.1
Android SDK和JDK更新
我们简化了Android SDK要求,迁移到 Android Studio Flamingo 2022.2.1 并使用 OpenJDK 17.0.6 作为JDK版本。UE和AGDE的基线Android支持现在以相同JDK版本为目标,用户不需要单独的 JAVA_HOME
和 AGDE_JAVA_HOME
环境变量指向单独的JDK安装。请注意,此更新后,UE现在以JDK的 jbr
目录而不是 jre
为目标。
如果你需要支持比5.3更早的UE版本,但也需要为Android设置UE 5.3,我们推荐以下操作:
卸载之前版本的Android Studio之前,将
jre
目录的内容复制到Android Studio安装之外的某个地方,避免被覆盖。确保Android环境变量不以之前版本的UE使用的SDK为目标。
对于较旧版本的UE,使用
BaseEngine.ini
或你的项目设置手动设定目标SDK。尤其是,将JDK目标设置为复制的jre
目录。
请参阅有关为UE 5.3设置Android Studio的文档,了解更多详情和说明。
现代化Xcode项目
我们更新了UE处理Xcode项目和工作空间的方式,使其更符合现代Xcode工作流程规范。这包括以下更改:
改进了Xcode项目组织结构
UE现在 对每个平台使用一个Xcode工作空间 。
例如:UnrealGame(Mac)和UnrealGame(IOS)。
UE现在 对其工作空间中的每个编译目标类型使用单独的项目 。
例如:UnrealGame(Mac)、UnrealGameEditor(Mac)和UnrealGame Server(Mac)各自是Mac工作空间下的单独项目。
每个项目仅允许它支持的编译配置。例如,编辑器项目不显示测试或发布配置。
框架现在使用标准Xcode方法进行处理 。
虽然之前的版本需要开发人员手动复制并协同设计框架,编译系统现在会自动发现并协同设计框架。
改进了打包和分发过程
运行所需的所有数据都捆绑在每个Apple平台的 独立
.app
文件中。这包括macOS,它在之前版本的UE中不使用此范式。
自动协同设计 现在是在macOS和iOS/iPadOS/tvOS的开发/调试版本中处理协同设计的首选方法。
你可以使用Xcode 通过Xcode存档管理和分发应用 ,这现在是创建发布版本的首选方式。
因此发布版本会创建
.xarchive
文件和.dSYM
文件。
改进了权利和
.plist
文件的管理。开发人员现在可以将模板或自定义文件用于这两种资产。
如需详细了解这些优化,请参阅我们有关现代化Xcode工作流程的文档。
iOS工作流程
UE 5.3为iOS平台的开发工作流程带来了多项优化:
如果你的App ID包含扩展虚拟寻址权利,可以使用 MallocBinned2 内存分配器。
凭借 现代化Xcode项目集成 (请参阅上面的"现代化Xcode项目(Modernized Xcode Projects)"),改进了打包和应用签名。
准备调试(Prepare for Debugging) 命令可简化调试管线,现在提供了Windows远程(试验性)和备用Mac工作流程。请参阅有关在Xcode中调试和使用远程Mac的文档,了解更多详情。
Apple Silicon Mac上现在支持 iOS模拟器 ,可在不使用设备的情况下更快速地进行开发迭代(试验性)。
Android上的移动光线追踪支持(试验性)
UE 5.3支持 光线追踪 用于运行 移动桌面渲染器 的高端Android设备。支持的移动GPU包括:
Adreno 740
Immortalis-G715
三星 Xclipse 系列
要启用移动光线追踪,请执行以下操作:
为你的项目启用桌面渲染器。
启用光线追踪。
将以下内容添加到你的设备描述:
[Android_Vulkan_SM5 DeviceProfile]
+CVars=r.Android.DisableVulkanSM5Support=0
此更新还包括对光线追踪的阴影的移动内联阴影支持,这仅适用于延迟着色。
此支持为 试验性 ,目前不应该用于制片目的。但是,我们欢迎用户提供试用后的反馈!
移动渲染器
移动渲染器现在包括多项性能和视觉质量优化,尤其是:
基于计算的地形顶点剔除。
雾体积支持。
移动正向的全局距离场生成。
实例渲染优化(GPU场景)。
虚拟纹理支持。
对Apple M2设备上的Nanite的支持(测试版)
对于运行macOS的 Apple Silicon M2设备 ,虚幻引擎5.3引入了 Nanite 渲染技术测试版支持。配合着色器模型SM6,该支持在可从Epic Games启动程序下载的UE macOS二进制文件中默认启用,而试验性5.2支持仅在从GitHub源文件编译时可用。
角色和动画
运行时和非线性过场动画的动态工作流程
此版本着重优化了运行时工作流程和非线性组织。
用户定义的动态绑定
使用关卡序列导演蓝图来定义不同的对象,例如玩家Pawn,以由Sequencer在运行时期间动态拥有或生成。
材质分段混合
和其他轨道类型类似,材质类型的分段可以添加到支持材质的轨道。这包括UMG中的材质参数集合与UI动画。
子序列的镜头试拍
和镜头轨道类似,子序列的镜头试拍可以在Sequencer中创建和设置。
镜头试拍注释
在Sequencer中添加/编辑/查看镜头/子序列的注释。
文本轨道
文本属性现在可以在Sequencer中有轨道,其中用户可以随时间推移更改文本字段的值并为其设置关键帧。
动画重定向
此版本着重优化了重定向的一些编辑流程。
重定向编辑器中的工具栏 - 这可用于轻松访问全局和根骨骼设置,以及重定向阶段。允许在运行重定向、编辑重定向姿势和查看重定向姿势选项之间切换模式。
重定向姿势 - 编辑骨骼的本地空间,将骨骼旋转归零。
在右键鼠标上下文菜单中,从所选骨骼网格体/IK Rig创建IK Rig/IK重定向器资产。
IK Rig和IK重定向器资产的缩略图。
动画编辑
此版本中的其他动画编辑相关的优化包括:
智能烘焙
现在允许你仅以烘焙关键帧为目标。
约束烘焙
空间切换烘焙
吸附工具
折叠分段
烘焙变换
智能自动切线
新的自动切线可更好地维持曲线形状。
曲线编辑器优化
优化了规格化视图
优化了大量按键的性能
更好的控点选择
更精确的选框
修复了关闭自动取景时的缩放级别
动作混合优化
交换根骨骼适用于使用AnimBP进行根骨骼运动预览的动画。
骨骼动画分段可以向后延伸。
导出优化
将Control Rig动画导出为FBX文件。
骨骼编辑器(试验性)
利用 骨骼编辑器(Skeletal Editor) ,用户可以直接在虚幻编辑器中创建骨架并编辑网格体皮肤权重。使用此工具,可在资产中添加骨骼、变换静态网格体并将其转换为骨骼网格体,以便更快速地迭代,这些操作全都在一个地方进行,无需导入骨架数据。
将静态网格体转换为骨骼网格体
创建和编辑骨架
添加骨骼
删除骨骼
确定骨骼方向和编辑骨骼
镜像骨骼
创建皮肤权重
绘制权重笔刷工具
编辑选择顶点时的权重
Flood / Relax / Prune / Average / Normalize操作
镜像权重
绘制地图
骨骼和权重的Python API支持
机器学习(ML)变形器
利用ML变形器,用户可以训练在UE中实时运行的机器学习模型,近似表示复杂的Rig、非线性变形器或任意变形。
UE 5.3中的优化包括:
增加了用于本地神经变形模型的遮罩系统,使用户能够更好地处理结构化数据。
优化了最接近相邻值模型UI和工作流程。
去除了对NNI框架的依赖性。
能够在视口中创建训练遮罩,并按骨骼/骨骼组/曲线可视化遮罩。
不再需要执行手动步骤(例如安装Python程序包),即可在Windows上正确训练最接近相邻值和神经变形模型。
能够在Linux和macOS上运行已训练的神经变形和最接近相邻值模型(不过可能会遇到训练错误)。
基于数据构建Control Rig
我们进一步扩展了Control Rig的 程序化 工具集,以便你可以使用Control Rig图表外部的数据,以程序化方式创建和修改Rig。其中包括:
能够查询和使用外部数据,例如变换、浮点和骨架等,以程序化方式构建Control Rig。
新增"GetUserData"节点,用于查询传入的数据。
新增"Set Shape Library from User Data"节点,用于交换当前所引用的形状库。
虚拟制片
适用于ICVFX的SMPTE 2110
虚幻引擎5.3版本将基于SMPTE 2110的端到端IP视频信号流与nDisplay一起使用,完成了次世代ICVFX舞台部署的事项。通过SMPTE 2110支持,制片可以充分利用舞台上的可用硬件资源,提高效率,实现更高分辨率的内视锥和更低延迟的潜力。
利用基于SMPTE 2110的配置,制片能够:
渲染内视锥一次,然后将其与群集中的其他渲染节点共享,避免每个节点出于确定性而冗余地重新渲染内视锥。
将整个渲染节点的资源专用于内视锥,利用所有可用资源,在摄像机中看到的像素上显示可能的最高质量。
使用SMPTE 2110原生同步策略对每个渲染节点进行帧锁定,确保虚幻引擎输出与摄像机保持同相。
使用SMPTE 2110将产生的渲染内容输出到LED处理器,不必使用显示器端口和/或HDMI转换器。
虚拟摄像机
镜头试拍浏览器
我们添加了一个功能,可从虚拟摄像机浏览关卡序列,并加载它们进行查看或作为下一个录制文件的基础,以及为序列添加星标、标记或将其设为NG以筛选列表。
来自单个VCam的多个HUD
你现在可以将多个输出提供程序添加到单个VCamComponent,每个提供程序都有自己的HUD和流。你可以从一个VCam同时流送操作员视图、简单的烧入和清洁板。
带时间刻度的播放和录制
你现在可以按非1:1速度播放和录制。按自定义速率录制,你的动作在全速播放时会加快或变慢。
初始macOS支持(试验性)
VCamActor现在支持通过旧版远程会话从macOS进行流送。虚拟摄像机核心、VCamComponent、VCamModifier和VCamOutputProvider可用于在macOS版本的UE5上创建自定义VCam。我们仍在进行开发,为macOS引入像素流送和完全VCam支持。
CineCamera绑定轨道(测试版)
我们添加了针对高级过场动画和虚拟摄像机工作流程定制的新绑定轨道Actor。
计划你的构图
将摄像机聚焦、光圈和变焦存储在轨道点中,允许轨道驱动更复杂的构图。
驱动轨道
使用多种驱动模式自动进行移动:
手动(Manual) :从Sequencer或外部输入驱动你的轨道位置。
时长(Duration) :驱动轨道位置,以在设定时间内完成你的移动。
速度(Speed) :按设定速度驱动你的轨道位置。
使用Sequencer
点将按绝对值存储,可以在Sequencer中安全地设为关键帧。因此,给定点的位置值只能通过直接修改点的方式更改。如果你将特定位置设为关键帧以在给定取景处发生,无论之前或之后添加了多少个新点,它都不会更改。
可视化你的速度
通过应用于轨道网格体的热图沿轨道任意点查看你的速度,避免在录制分层移动时出现意外情况。
选择你的轴继承
选择仅从绑定轨道继承一部分轴。从轨道驱动位置,同时优化旋转,或选择删除Z轴,更平稳地运行。
CineCamera场景捕获组件(测试版)
我们为CineCamera添加了场景捕获组件。你可以精确地将CineCamera组件捕获到渲染目标,以用于材质、UMG等。该功能与CineCamera特有的属性和后期处理一起支持镜头失真。
变形镜头校准解算器(试验性)
我们向镜头工具添加了变形镜头(Anamorphic Len)模型和解算器,用于镜头资产,以便可以解算变形镜头失真。使用镜头组件,你还能够将变形镜头模型失真添加到CineCamera Actor,在引擎中渲染失真效果,这样就可以使用带有轮廓的变形镜头直观地查看镜头。还可以调整变形镜头模型的手动参数,带来变形失真外观。
用于纹理转换的OCIO
引入的工作颜色空间成为虚幻引擎中强大的颜色管理的基础,可用于一些重要操作,例如配置纹理的输入颜色空间,帮助确保资产外观准确,无论它们在何处创建。虚幻引擎5.3对此支持进行了扩展,可利用OpenColorIO执行这些纹理转换。凭借这一点,虚幻引擎采用业界标准框架,在不同纹理的颜色管线中尽量保持一致。
nDisplay多玩家Actor复制
我们修订了nDisplay低级别网络架构,以便可以支持多玩家游戏情境中的Actor复制。
对最终用户透明:
可以在nDisplay项目设置中使用 群集复制已启用(Cluster Replication Enabled) 选项激活该功能。
我们向Switchboard添加了多玩家服务器选项。
每个nDisplay节点在加入多玩家会话或游戏时会变成网络客户端。
未来我们希望支持nDisplay群集而不是单独的节点加入多玩家会话。
nDisplay填充派生数据缓存
我们添加了一个功能,在首次使用之前提前填充派生数据缓存,使nDisplay系统(独立着色器)做好准备。此功能可使用编译菜单在本地触发,或使用Switchboard在所有群集节点上触发。
然后即可启动nDisplay群集,而无需进一步的着色器编译。你可以将此操作安排在你方便的时间离线执行,因为它使用命令行参数公开给虚幻引擎,可以在外部触发。
DMX控制控制台UX
我们改进了新的控制控制台UI和UX,添加了以下内容:
两种主布局模式:
默认,其中仅所选补丁可见
手动,其中你可以定义调节器组位置
修订了搜索机制,以更快速地访问DMX调节器
能够使用相对或绝对功能按钮更改调节器值
能够选择哪些补丁在积极发送DMX数据
DMX像素映射UX
DMX像素映射工具进行了大幅改造,现在提供了优化的UI和UX,以及其他修复:
新的输入筛选器分段允许你对传入像素缩小规模、进行模糊处理和执行基于材质的逻辑。
DMX库操控与控制控制台提供的新UX一致。这可以与层级视图协同使用,以便你可以看到哪些补丁是新增的,哪些是保留的。
媒体IO媒体板材质系统
我们优化了当前媒体板Actor材质系统,让你能够:
使用新的自动填充下拉菜单直接从媒体板插件内容目录选择材质。
浏览到媒体板插件内容目录进行快速访问。
此外,我们在默认媒体板材质中启用了 输出深度和速度(Output Depth and Velocity) 标志,在有相对于媒体板Actor的摄像机移动时提高TSR/TAA图像稳定性。
模拟
Chaos布料编辑器基础(试验性)
UE 5.3的Chaos布料增加了 试验性 布料编辑器。
在新的布料编辑器中,将来每个角色可以有多件衣服,多个角色也可以穿同一件衣服。它还提供了基于面板的工作流程,可更轻松地设置和修改服装设置。它包括以下功能:
角色物理的新基类编辑器(布料/flesh)。
基于面板的编辑器的第一个阶段,带有数据流图表。
非破坏性工作流程
布料作为单独的组件从骨骼网格体提取。
额外的碰撞支持
新皮肤权重传输工具
遮罩现在替换为可复用的权重贴图。
多个材质可以由单个模拟网格体支持驱动。
请参阅面板布料编辑器概述,详细了解此功能。
Chaos ML布料(试验性)
对于许多用例来说,布料模拟可能太昂贵。美术师、工程师和游戏设计师需要成本更低的替代运行时解决法案来模仿布料模拟,尤其是对于更贴身的服装。当前,这需要在要模拟的DCC与将结果导入回引擎之间频繁来回切换,整个过程很繁琐。
对于UE 5.3,美术师现在可以使用 试验性 的Chaos布料生成器插件 在引擎中 模拟和训练布料。
请参阅机器学习布料模拟概述,详细了解此功能。
Chaos刚体和场景查询
我们对Chaos物理系统做出了多项更新和优化,为美术师、开发人员和程序员带来更好的模拟结果,尤其是刚体模拟和场景查询。
我们一直在关注刚体的低级别优化,包括SIMD、缓存一致性、功能删除、减少数据复制,等等。
场景查询实现了动态加速结构,现在更新和查询更快。
Chaos破坏
破裂编辑器更新
添加了新的材质,用于在管理和分配几何体集合的材质时帮助进行精细控制。
距离工具已经优化,可进行更好的可视化控制,并有新的接触方法来生成连接图表
关卡统计数据现在显示聚合凸包信息,这在优化几何体集合碰撞时很有用
运行时优化
几何体集合组件默认情况下不再更新,仅在几何体集合受伤害后更新。更新函数的运行时开销也已降低
进行了解算器和属性层面的数据类型优化,降低了磁盘上几何体集合资产的开销,及其实例的运行时内存开销
还进行了许多优化,以降低几何体集合实例的总体CPU开销,以便在更大规模使用破坏
引入了新的试验性伤害模型,利用材质的物理属性以及几何体集合的内部拓扑和连接
Niagara流体
我们添加了在Niagara流体模拟缓存后对其进行变换的功能。 这样就可以多次复制缓存,并在时间/空间上偏移副本,利用单个缓存的模拟获得更复杂的效果。
我们添加了对3D气体模拟的数据通道支持。它是 试验性 的功能,可用于从关卡中的任意CPU系统获得流体。在主发射器上,粒子源现在有两种模式:发射器和数据通道。发射器模式从相同系统中的发射器读取数据。数据通道模式从预定义的Niagara数据通道读取数据。可以从现有"设置流体源属性(Set Fluid Source Attributes)"模块写入该数据通道。
路径追踪器现在支持异类体积,这意味着流体可以直接在其中渲染。
我们添加了对SVT(稀疏体积纹理)的 试验性 支持;缓存流体现在会直接写入SVT,速度快一个数量级。
Niagara摘要视图编辑器
利用摘要视图编辑器,用户可以创建Niagara发射器的自定义视图。这样就可以仅将发射器的最重要设置和输入公开给最终用户。一种很常见的用例是Niagara流体发射器,它们可更轻松地做出调整,只需查看一部分组织有序的设置,就能实现预期效果。用户可以重新排列并设置类别、分段、单独的模块输入或整个模块,以及特定属性,例如Sprite渲染器的Sprite材质。
请参阅摘要视图快速入门,详细了解此功能。
音频
MetaSound构建器API
利用MetaSound构建器API,你可以在游戏实时运行的同时,通过C++或蓝图API创建和更改MetaSound图表。这样就可以在Gameplay期间添加/删除MetaSound节点并修改连接。
音频总线写入
现在你可以从一个MetaSound获取数据,并将其发送到另一个MetaSound,或通过新的MetaSound节点发送到另一个源总线。
MetaSound输出监测(试验性)
利用Metasound输出监测,你可以使用蓝图或C++来检测Metasound图表中的变化。这意味着,用户可以将Gameplay和视觉效果匹配到Metasound中发生的事件。例如,你可以根据音乐拍子或音频变化来调整Gameplay元素和视觉效果。
这样就可以:
在提供的float、int32、Bool和fstring类型的Metasound输出发生值变化时触发事件。
在音频输出上的包络跟踪器更改时触发事件。
UI系统
Common UI(测试版)
Common UI提供了工具箱,用于创建支持跨平台的多层丰富用户界面。它包括:
一个特定于UI的输入操作系统。
一个输入路由系统,可更轻松地选择性排除菜单而不捕获输入。
一个样式系统,为常用文本/字体、边界和按钮提供样式资产。
其他常用控件的库。
此版本的优化包括:
集成了增强的输入
输入调试
文档和内容示例
UMG中的字体DPI匹配
设计师现在可以在将UI模型转换为UMG屏幕时无缝匹配其字体大小,而不用担心DPI不匹配。
新创建的项目的DPI设置将默认为72 DPI。
现有项目将保持为96 DPI。
在不同的DPI设置之间来回切换不会影响字体的渲染方式。
请参阅有关字体DPI缩放的文档,了解更多详情。
蓝图中的Viewmodel
虽然旧版虚幻引擎需要设计师在C++中创建Viewmodel,但在UE 5.3中,现在可以在蓝图中创建Viewmodel。此更新在各个方面简化了Viewmodel的创建和绑定过程。
扩展MVVMViewmodelBase类以创建新的Viewmodel蓝图。
在蓝图中正常创建变量,然后点击其名称旁边的钟形图标,将其指定为FieldNotify变量。
创建FieldNotify函数来处理不需要专用变量的运算,然后使用FieldNotify变量触发它们。
使用Viewmodel面板将你的Viewmodel添加到控件类。
使用新的点击拖放功能,可更快速、轻松地将Viewmodel绑定到UI字段。
请参阅Viewmodel文档,了解有关如何在项目中使用基于蓝图的Viewmodel的完整说明。
建模
建模工作流程(测试版)
开发资产的美术师需要高效的建模、塑造、UV编辑和纹理工作流程。这些工作流程不仅仅是按特定顺序点击几个不同的工具。每种交互都需要考虑到,以便减少鼠标点击次数,尽量减少光标移动,并为美术师提供精确的反馈。
围绕这一目的在UE5.3中进行的优化包括:
新UI
建模模式的主菜单、工具控制板和属性面板已重新设计。新UI更紧凑,可实现更高效、一致的工作流程。新菜单还包含新的收藏夹选项,提供了可按用户定义的顶层自定义菜单。
工具预设
创建者和开发人员现在可以为建模工具创建自定义预设。利用自定义预设,美术师可以存储工具的多个选项,并从工具图标快速访问。
元素选择
利用直接网格体元素选择,可实现更一致、优化的工作流程。现有选择方法需要美术师在调用操作之前,首先选择网格体,然后选择特定工具,最后选择元素。利用新元素选择工作流程,美术师可以选择网格体,选择元素,然后调用操作,而无需使用PolyEdit或TriEdit之类的中间工具。
建模工具(测试版)
建模模式的工具集会继续演化。对于UE 5.3,我们为工具集添加了一些请求的增强功能,以及使用样条线的新工具。新元素选择模式也支持一组专用工具。
样条线工具
我们为"创建(Create)"菜单添加了新工具,创建者可用于绘制新样条线,并将其用于旋转和扁平网格体操作。
元素选择工具
元素选择工作流程利用了新的工具菜单,这些工具可直接作用于选择的内容。控制板包括常用工具,例如 挤压(Extrude) 、 斜边(Bevel) 、 偏移(Offset) 、 插入(Inset) 和 插入循环(Insert Loops) 。还可快速访问 PolyGroup 和 三角形编辑(Triangle Edit) 。
LOD支持
烘焙变换和编辑枢轴点工具现在可选择使用新变换或枢轴点更新所有LOD。
顶点颜色绘制
我们添加了用于绘制顶点颜色的新工具。利用新工具,用户可以绘制、填充和混合颜色到多个或特定通道。
其他优化
我们对 编辑法线(Edit Normals) 、 焊接(Weld) 、 烘焙纹理(Bake Texture) 和 生成多边形组(Generate PolyGroups) 工具做了额外的优化 。
如需详细了解可用工具,请参阅建模工具。
UV工具(测试版)
UV是处理网格体时的重要组件,不仅可用于最终渲染,还可以作为关卡设计的关键部分。对于UE 5.3,我们向UV编辑器添加了两个重要的新功能:
UV编辑器失真显示
UV编辑器现在有可选的失真显示模式。这样可交互式表示纹素拉伸级别或密度。
UV自动布局
该工具现在支持纹素密度规格化。此选项会尝试调整单独岛状区的大小,在整个布局中维持固定的平均密度。
如需详细了解UV工具,请参阅UV编辑器。
几何体脚本(测试版)
几何体脚本为技术美术师提供了用于创建自定义建模工具和工作流程的工具包。在5.3中,几何体脚本现在为测试版,并且在不断扩展之中,增加和优化的内容如下:
增强了多个新节点提供的骨骼网格体互操作性:
CopyBonesFromMesh
TransferBoneWeightsFromMesh
GetRootBoneName
GetBoneChildren
GetAllBonesInfo
GetBonesInfo
DiscardBonesFromMesh
用于管理2D多边形和路径的新函数,包括计算偏移及其布尔值:
多边形差集
多边形并集
多边形交集
还有许多其他函数,构成一个大型函数库。
德洛内三角剖分,用于创建内插点的网格体:
附加德洛内三角剖分2D
网格体表面上的测地线:
GetShortestSurfacePath
GetShortestVertexPath
内容管线
交换导入/重新导入
在此版本中,交换框架包括以下优化:
我们增加了新的自定义资产类型,可用于重新导入完整场景。
交换UI现在支持根据平移工具(Translator)来覆盖管线堆栈。这提供了额外的一层可配置性,并用于默认设置:例如,glTF资产管线堆栈将覆盖默认资产管线堆栈(用于FBX和OBJ)。
对于glTF导入,你现在可以选择让编辑器生成材质或使用预定义材质实例。你还可以覆盖这些实例,获得对glTF渲染的更多用户控制。
USD MaterialX(试验性)
虚幻引擎5.3提供了将USD用于MaterialX的功能,以便简化DCC和虚幻引擎之间的工作流程和内容创建。现在可以直接在引擎中使用MaterialX着色网络导入USD文件。
此外,你现在可以在USD舞台编辑器中打开带有MaterialX着色网络的USD文件,同时直接与USD文件的内容交互。
虚幻引擎中的MaterialX支持此前已在5.1中引入,现在仍为试验性的功能。
USD材质和纹理
在虚幻引擎5.3中,更改了纹理和材质的处理方式,优化了USD资产的显示:
我们添加了在相同材质上支持多个UV集的功能。
我们添加了对预览表面材质上的简单UV变换的支持。如果你要加载预览表面并使用数学节点来变换纹理,现在可以正确显示。
我们添加了在USD舞台编辑器细节面板中交互式更改USD材质的功能,可在视口中实时查看结果。之前,用户需要保存USD文件并重新打开,才能看到更改。
USD动画
直接导入几何体缓存
我们添加了直接从USD文件将缓存几何体导入UE中的功能。在此之前,你只能在舞台上加载USD文件,并从中播放几何体缓存动画。
支持Sequencer中的临时Actor
我们添加了对Sequencer中临时Actor的支持。这样你可以将USD舞台Actor中的元素添加到Sequencer,重新加载USD文件或关闭后重新打开虚幻引擎,Sequencer将保持连接到USD舞台Actor中正在制作动画的元素。这也意味着,你现在可以维持稀疏的关键帧动画曲线,以驱动USD舞台Actor中正在制作动画的元素,并且烘焙的动画可以导出到新的USD文件。USD舞台Actor现在也可以导出,因此其元素的动画可以在引用的舞台上导出为覆盖。
框架
智能对象 - 世界分区支持
智能对象(Smart Object)现在可无缝用于世界分区、数据层和持久关卡。我们还优化了智能对象,支持将寻路网格体和物理系统用于插槽可用性。
蓝图类型转换自动转型
弃用基于代码的蓝图可见属性并转换属性类型,可能带来一些困难,例如在重新给旧引脚连线时发生故障。这会造成孤立的引脚和编译错误。
在UE 5.3中,如果两种类型都提供了自动转型函数,将自动创建转型节点并添加到图表中。此外,每当添加新的转型节点时,都会创建备注,说明用户可能想更新其API以使用新的类型转换。
数据资产合并
为添加对比工具所提供功能之外的更多功能,我们首先研究了一种数据合并解决方案。这第一个版本支持在无法自动解决冲突时手动合并数据资产。
目前 仅 支持数据资产,但我们希望在将来支持更多数据类型。
检查工具Swarm注释
现在,5.2中引入的检查工具在将P4用作源码控制时直接与Swarm集成,因此你在其中执行的对比将直接在编辑器中显示注释。你不仅可以获得对每次更改的注释,还可以留下全局检查备注。我们在Swarm中使用简单的元数据标记,将注释链接到对比的右侧分段。
引擎内容和模板
使用增强输入的协作查看器模板
利用协作查看器模板,多个用户可共同使用同一个3D内容。此举是为了让你的团队更轻松、快速地实时检查设计并进行交流,以便更高效地找出问题并对内容迭代。
在UE 5.1中,我们发布了对增强输入的OpenXR支持,并将其设为XR应用程序的推荐输入系统。在UE 5.3中,我们更新了模板,以便利用增强输入所支持的抽象和灵活性。
平台SDK更新
Windows
Visual Studio 2022 v17.4或更高版本
Windows SDK 10.0.18362或更高版本
LLVM clang 14.0.1
.NET 4.6.2 Targeting Pack
.NET 6.0
构建场编译时面向的IDE版本
Visual Studio:Visual Studio 2022 17.4 14.34.31933工具链和Windows 10 SDK (10.0.18362.0)
Xcode: Xcode 14.2
GDK
Windows SDK最低版本:10.0.19041.0
GDK: 2023年3月更新5 GDK
固件版本:恢复时间为2023年6月 (10.0.22621.4819)
支持的IDE:Visual Studio 2022
Linux
原生Linux开发
推荐操作系统:Ubuntu 22.04或CentOS 7
编译器:clang 16.0.6
跨平台开发
交叉编译工具链:v22基于clang-6.0.6 (CentOS 7)
macOS
推荐
最新macOS 13 Ventura
最新Xcode 14.1或更高版本
最低
macOS 12.5 Monterey
Xcode 14.1
EOSSDK
1.16二进制文件,带1.15头文件
提供1.15功能集。
1.16二进制文件,用于最近的平台SDK支持和WebRTC修复。
Steam
1.53
iOS / tvOS / iPadOS
推荐
最新macOS 13 Ventura
最新Xcode 14.2或更高版本
最低
macOS 12.5 Monterey
Xcode 14.1
支持的目标SDK版本:iOS 15或更高版本
图形API:Metal 2.4和Metal 3.0
Android
Android Studio Flamingo 2022.2.1 Patch 2 May 24, 2023
Android NDK r25b
Android SDK
推荐:SDK 33
用于编译UE的最低版本:SDK 30
在设备上运行的最低目标SDK:SDK 26
如果你使用AGDE调试,则需要AGDE v22.2.69+。
构建工具:33.0.1
Java运行时: OpenJDK 17.0.6 2023-01-17
Switch
SDK 16.2.0
最低固件版本:16.0.3
Nintendo Dev Interface 2.5.5
支持的IDE:Visual Studio 2022(SDK 16.2.0版本)
PS4
Orbis SDK 10.508.001
系统软件10.508.011
支持的IDE:Visual Studio 2022
PS5
Prospero SDK 7.00.00.38
UE5Main有一个补丁更新到7.00.00.45。着色器编译器修复推荐使用该补丁。
系统软件7.40.00.06
支持的IDE:Visual Studio 2022
ARCore
1.37
ARKit
4.0
OpenXR
1.0.22
版本说明
Animation
API Change:
Added the first version of Mutable extension API.
New:
Added a new LOD threshold property to rig logic anim graph nodes in order to compute facial animation earlier than other skeletal post-processing, which might be part of the same post-processing AnimBP.
Added the ability to disable or skip post-process AnimBPs at lower LOD levels. You can set the post-processing AnimBP LOD threshold similarly to how you can set LOD thresholds for some anim graph nodes. Additionally you can skip the post processing anim BP graph during set points entirely, to improve performance. The speed improvements scale with the complexity of the post-processing AnimBP and as well as the amount of nodes that do not support LOD thresholds or have setup node-based LOD thresholds.
Added the option to filter by Sync Marker to the Animation Sequence Browser.
Add new output warnings when the LegIK node is missing definitions or contains references to invalid bones.
IK Rig and IK Retargeter now available in UEFN.
IK Retarget poses can now be zeroed in local space to instantly straighten limbs for more accurate retargeting.
Added 0.75 and custom speed to Animation Viewport ToolBar, for Animation Speed and TurnTable speed.
Bug Fix:
Fixed an issue that could prevent the MeshBoneReduction module from loading as soon as the MeshUtilities module starts up, as it could be needed at any time from a background thread
Fixed an issue by adding a guard against the use of an invalid actor pointer in the Skeletal Mesh editors.
Fixed incorrect localized text in the LegIK Animation Blueprint node.
Fixed an issue occurring when creating animation assets overriding existing assets, by enabling replacing existing animation in the options to create new assets.
Fixed an issue occurring when pasting anim notifies from multiple tracks to a location that did not contain the same tracks.
Removed:
Removed null links from Mutable graphs on load. This prevents incorrect behavior and editor instability when a node saved into a graph can't be loaded.
Animating in Engine
API Change:
Fix inverted tangents on Y axis for 2D controls.
New:
Added a new
ControlRig.Sequencer.AutoGenerateTrack
console variable to toggle whether control rig tracks should automatically be created for new components.Control Rig FBX animations can now be exported and exported between Unreal
Improvement:
Curve Editor filters have been improved and can now be set using ranges rather than individual selections, so you can now bake a range of frames or times.
Curve proximities can now be updated when there is a drag operation so that the curve tooltips show the proper time and value.
Curve Editor selections are now synchronized whenever new items are added to the editor.
Bug Fix:
Fixed an issue that could occur by delaying a level sequence asset's creation until the tick proceeding the tick the control rig actor is dropped into the viewport. This prevents the level sequence asset creation to be in the same transaction as the create actors transaction. Previously, the movie scene could be collected as garbage when undoing the action, because its creation took place during another transaction.
Fixed an issue that could cause a memory leak with the backbuffer Render Target not being released at the end of a render.
Constraints: propagate offset change so that local transform animations are synchronized.
Gameplay
New:
You can now use the new experimental Dead Blending AnimGraph node. This node is designed as a drop-in replacement to the Inertialization node but uses the new robust "Dead Blending" algorithm which is more equipped to handle multiple simultaneous Inertilization requests or when the Inertialization transition is between two very different poses.
Exposed a new method to blueprints that you can use to get the weight of a montage playing on a specified animation slot.
Added the following AnimNode functions:
On State Exit
,On State Entry
,On State Fully Blended In
, andOn State Fully Blended Out
. These are located in any Animation State Graph's Result Node.Added support for AnimNodes to show any bound functions and not have them hardcoded.
Added a way for users to specify the string for the default binding name of a function member reference in a blueprint by using the "DefaultBindingName" metadata tag.
Added support for animation sync groups when using initialization for a state machine transition.
Added support for explicitly specifying the transitions trigger time when using state machine automatic transition rules.
Added a context menu option to Animation Blueprints to create an Animation Template from the blueprint that can be used to override animations using Child Blueprints.
Improvement:
The
PlayMontageCallbackProxy
can now be derived from, in order to support plugins that want to provide customized versions.
Bug Fix:
Fixed an issue that could cause a crash when using the Inertialization AnimGraph node when re-parenting the Animation Blueprint.
Fixed standard blending not working as expected with sync groups.
Improved stuck detection in Distance Matching
Disabled option to duplicate a state from the animation blueprint editor's tree view.
Movie Render Queue
New:
Fixed issue where default settings would get added to a job that already exists when clicking on the Render Movie button from Sequencer.
Exposed UMoviePipelineImageSequenceOutput_EXR so C++ plugins can reference it.
When using the Render all Cameras feature, Spawnable cameras are now skipped if their default spawn track value is false.
Added support for camera rotation to be preserved during a Panoramic Render.
Updated the Console Variables setting to display the cvars contained within each cvar preset.
Improvement:
Added a workaround for the UI Renderer setting having issues with some Layout Widgets not liking the 720p PIE preview window.
Optimization:
Optimized the multi-sample accumulator for RGBA images on machines with many cores.
Bug Fix:
Fixed issue where canceling a job reporting as a successful job for some callbacks.
Fixed issue where UWorldSettings::Min/MaxUndilatedFrameTime were being modified and not restored after a render.
Fixed UI warning about losing unsaved changes to Queues when there weren't actually any changes.
Fixed issue where
{camera_name}
resolved intomain_camera
when not using the Render All Cameras feature is animating onto this.Fixed data type issue when exporting ProRes with OpenColorIO enabled.
Rigging
API Change:
Creation of buffers is all done within the data interface at runtime.
New:
Added output bone transfer list for anim node. You can now limit the bones being driven by a Control Rig AnimNode in the Animation Blueprint Graph.
Added half edge connectivity data interface.
Added unit node to check if a shape is available in the shape libraries.
Added support for uint32 types.
Added Int32 to Name node (
IntToName
)Added feature to update the Reference pose of a bone directly in the Control Rig Editor.
Added LocalChainDynamics function which creates simple chain dynamics for the given chain.
New skin weight editing tool enabled editing weights by painting or directly on selected vertices.
IK Rig/Retarget assets can now be created directly from Skeletal Meshes in the right-click menu.
Performance improvement to retrieve a template from its arguments.
IK Retargeter toolbar redesigned for instant access to common retarget settings.
Improved physics constraint editing in the Physics Asset Editor viewport.
Extracted all instance data from Control Rig virtual machine and moved it to the context data struct, as a step for stateless virtual machine.
FBIK solver now supports animated translation at runtime. Squashing and stretching limbs can use FBIK.
RigVM context now has to be passed as a parameter to the virtual machine functions, rather than being located in the virtual machine itself (a step towards stateless virtual machine).
Improvement:
Skin weights on skeletal meshes can now be edited through a new API in BP or Python.
Bug Fix:
Fixed issue when adding curves to the output skeleton from
USkeletalMergingLibrary::MergeSkeletons
.Fixed Control Rig Blueprint compilation error related to missing function definition after a Control Rig Blueprint containing function references is duplicated or renamed.
Fixed issue caused by Control Rig Editor Details panel when exiting PIE while debugging a Control Rig instance.
Fixed an issue where sometimes the constraint viewport widget would be drawn relative to the wrong body.
Fixed an issue where pressing the keyboard modifier for editing the constraint's child frame (Alt + Shift) also activated the keyboard modifier for the Lock camera to widget feature (Shift) which caused the translation widget to move erratically when editing the child frame.
Fix for Control Rig Editor issue when adding comments and using undo / redo.
Fixed Control Rig compiler issue occurring when a specific function parameter usage is found on a rig, due to invalid remapping of inline function parameters.
Fixed an issue in the RigVM compiler when a rig function has more than 255 operands.
Fix IK Retarget automatic chain mapping mode "exact all"; now it does not reset non-exact matches to none.
FBIK solver will now dynamically reinitialize if the number of input bones changes dynamically at runtime.
Cleaned up Control Rig Python files to remove mixed tab/space error in runtime.
RigVMController: Added an array upgrade to reroute nodes with no source or target links where the value is an array, so it can load some deprecated rigs.
FBIK solver now works correctly with only one effector (regression from 5.2).
Fix for issue when adding a pin on Sequence Node in Control Rig graph.
Fixed memory leak in FBIK solver (regression from 5.2).
Spherical Pose Reader node in Control Rig fixed so it no longer flips when the activation region fills the whole sphere.
RigVM plugin now has a custom serialization object version.
Fix for Control Rig Gizmos not working properly; after a changing the asset references to Soft Object Pointers.
Deprecated:
Deprecated all Execution data interfaces. To set the execution domain of a custom compute kernel, use the Execution Domain field in the details panels of the kernel node. Valid domains should appear in the dropdown menu after connecting either a data interface to the kernel's primary group or a component binding node directly to the primary group pin.
Runtime
API Change:
Extended the ImmediatePhysics_Chaos API so that you can now create Immediate Physics Constraints without copying values from Constraint Instances using a new CreateJoint function that accepts a JointSettings object instead of a FConstraintInstance.
New:
Added a new dedicated track for Inertializations to the Rewind Debugger.
You can now click on Animation node tracks in the Rewind Debugger and the node will be highlighted in the corresponding Animation Blueprint to improve debugging workflows.
Added missing tooltips for animation state machine schemas.
Animation Blueprint runtime errors are now logged in the PIE log, if they were found during a game session.
Anim blueprint logging can now use tokenized messages to hyperlink an error to the node it came from.
UAnimInstance::IsSlotActive() is now thread safe.
Player nodes in blendspace graphs are now added to GraphAssetPlayerInformation.
Reinstated some anim blueprint library methods which now use the Anim Pose API.
New colors to distinguish state aliases and conduits.
Some LOD bone generation functions from the SkeletalMeshComponent have been extracted so they can be used from plugins.
Updated the ComputeRequiredBones function to use the extracted functions.
Added a delegate to the SkeletalMeshComponent, so external systems can be notified when the RequiredBones get recalculated for a LOD.
Moved the SkeletionRemapping.h and SkeletonRemappingRegistry from private to public, to allow including these files in plugins
AnimBoneCompressionCodec now has a new DecompressPose function taking a FAnimBoneDecompressionData parameter, with the decompression data in the following separate array formats: translations, rotations, scales3D.
Added the ability to DoubleClick AnimSegmentsPanel, in order to jump to the target asset. You can also shift + DoubleClick to open it a in new window.
Added a new compiler note and visual warnings to state machine transitions if the transition rule has logic but the flag for automatic rule based condition is set
Improvement:
Added a new helper function to find all external saveable packages.
Added current time accessors and library functions to Anim Notify events to allow for easy access to relative times and ratios.
Sync markers can now be managed in the same way as notifies.
Neural network mask curves are forwarded to RigLogic from both the Animation Blueprint node and Control Rig implementations.
Crash Fix:
Fixed an issue that could cause a crash when reloading a Control Rig Animation Blueprint.
Fixed an issue that could cause a crash when undoing or redoing an Animation Sequence edit while an async task is in flight.
Fixed an issue that could cause a reinstancing crash when using a custom Anim Instance proxy as a linked AnimGraph.
Fixed an issue that could cause a crash when calling
UAnimInstance::GetAllCurveNames
from worker threads.Fixed an issue that could cause a crash when compiling an Animation Blueprint during automated tests.
Fixed an issue that could cause a crash when right-clicking a modified curve node in a template Animation Blueprint.
Fixed an issue that could cause a crash when unloading animation assets in a game feature plugin that are referenced by editor thumbnails.
Fixed an issue that could cause a speculative crash during automated tests.
Bug Fix:
Fixed an issue that could cause a regression with curve inertial blending due to the curve refactor.
Fixed an issue that could cause the start position to be ignored when using sync groups.
Fixed an issue that could cause an ASan issue when unregistering property type customizations on shutdown.
Fixed an issue that could prevent the creation of a child Animation Blueprint in the Content Browser.
Fixed an issue that could cause a crash when opening a template Animation Blueprint with the Curves tab open.
Fixed an issue that could cause meshes to be distorted when the Leader Pose nod.
Fixed an issue that could cause blending to incorrectly skip blending in and out when using inertial blending curve filtering.
Fixed an issue that could cause Anim Node Functions to not be called in versioned builds when multiple are bound to the same Animation Blueprint node.
Fixed an issue that could cause cached poses to be invalid on subsequent evaluations of an AnimGraph.
Fixed an issue that could cause stack corruption caused by calling an Anim Node Function with an altered signature.
Fixed an issue that could cause out-of-bounds access in Control Rig curve I/O.
Fixed an issue that could cause distorted meshes when assigning assets using skeleton compatibility.
Fixed an issue that could cause curves to be missed intermittently in cooked content.
Fixed an issue that could cause bone LOD filtering to display incorrect results during automated tests.
Fixed an issue that could cause the Layered Blend per bone node to not work correctly with per-bone curve filtering.
Fixed an issue that could cause out-of-bounds access in PoseAssets that have additional poses with their respective curves.
Fixed an issue that could cause fired notifies to not be reached when looping by clamping remaining time.
Fixed an issue that could cause the virtual bone menus to not appear when adding additional virtual bones.
Fixed an issue with the Control Rig Anim Node that could cause the Rigid Body Anim Node in a post process AnimBP to stop working.
Fixed an issue that could cause OOM issue on consoles by reducing default alignment requirement of memory allocations in RigLogic.
Fixed an issue that could cause performance problems when multiple faces (DNAs) are loaded during gameplay.
Fixed issue when attempting to collect sync markers in a montage with an invalid slot track index.
Fixed
bCanUseMarkerSync
to default to true even when the animation asset did not have any sync markers.Fixed
bCanUseMarkerSync
being true for followers when all valid markers were filtered out.Fixed issue when linking/unlinking anim layers from UGameplayAbility::EndAbility.
Animation editor now correctly applies preview mesh from a compatible skeleton.
Fixed issue when filtering preview mesh on template anim BPs.
Fixed Anim BP asset definition correctly displays option to create child Anim BP.
Fixed issue when adding curves to anim sequences and immediately getting the bone pose.
Fixed issue in UBlendSpace::TickFollowerSamples due to hard coded bLooping flag.
Fixed NaN crash in FAnimNode_LinkedInputPose::Evaluate_AnyThread.
Ensure a clamped normalized time stays within the 0-1 range in the Blend Space Evaluator.
Fixed "Start" animation notify event for state machine transitions not being fired when bSkipFirstUpdateTransitions flag is set to false.
Fixed an issue that could cause a reinstancing crash in linked anim layers or graphs.
Fixed an issue that could cause use-after free when duplicating animation attributes.
Fixed an issue that could cause a crash when deleting a sync marker at the SyncMarkers Window, when finding an AnimMontage during the process.
Fixed a but that would only look at player controllers, and not something like AI controllers, when considering viewpoints for auto significance calculation.
Fixed an issue that could cause the GetLinkedAnimLayerInstanceByGroup tp not work for non-implemented layers with no instance assigned.
Fixed an issue that could cause the Details panel to disappear when making curve metadata edits.
Fixed an issue that could cause the preview instance from not being re-selecteable after selecting an external anim instance to debug.
Added some missing definitions for the UAnimInstance's function GetRelevantAssetPlayerInterfaceFromState.
Fixed an issue that could cause a crash in FMirrorSyncScope.
Fixed an issue that could cause blendspace sample entries from expanding when a sample animation is changed.
Fixed an issue that could cause a crash on loading an anim BP with pose hander nodes that require skeleton updates to their animations.
Added a missing ENGINE_API tag to SkeletetonRemappingRegistry, as it is required to use it from outside of the engine
Fixed an issue that could cause a crash when using an incorrect bone index type usage in UAnimationSequencerDataModel::GeneratePoseData.
Fixed an issue that could occur by ensure when transforming bone indices during animation compression.
Fixed an issue that could cause an issue with the SkeletalMeshComponent ComponentIsTouchingSelectionFrustum, as it was returning false positives due to missing check.
Fixed an issue that could cause issues with the FBX Import due to a name restriction not allowing bone names to start with a number at RigVM hierarchies.
Fixed an issue that could prevent the Animation Sequencer from triggering notifies repeatedly when using an animation mode track set to Use Anim Blueprint in a Level Sequence, by adding a parameter to the SkeletalMeshComponent SetAnimationMode function that allows not re-initializing the AnimationScriptInstance.
Fixed an issue that could cause a crash when using the PoseableMeshComponent, when the component is being incrementally unregistered and the unregistering process takes longer than the time limit set in the component.
Fixed an issue that could cause a crash when using one of the Animation editors when closing one viewport while additional viewports are open.
Fixed an issue that could prevent the BlueprintEditor from being refreshed after adding an animation layer node into an animation graph.
Fixed an issue that could cause an issue during an AnimComposite animation notify extraction when playing in reverse order.
Deprecated:
Added a deprecation warning for
AnimNode_StateResult.h
located inAnimGraphRuntime
module since the file got moved toEngine/Animation
.Removed the deprecated mirroring functionality from SkeletalMesh.
Sequencer
New:
Added the ability to create Takes for Subsequences.
You can now add comments for shots and Sequencer sections.
Added support for tags when bindings are copied and pasted in Sequencer.
Added the option to select the material parameter collection asset from the track in Sequencer.
Reassigned the
LevelSequenceEditorSettings.h
to public.Added command bindings for composition overlays to the Cinematic Viewport.
Exposed the ability to access setters and getters for audio section looping, suppress subtitles, and attenuation functions.
The Sequencer's Key editor now edits selected keys if they are selected. Otherwise, it edits at the current time as usual.
Bound recording commands in the Take Recorder now play in world space so that they work in Editor and in PIE.
The Clock Source menu is now always visible even in SubSequences, but is only editable when the Sequence Editor is focused on the root sequence.
Several improvements have been made to the Sequencer's Import EDL:
Added the support of KEY CLIP NAME
Sequencer now parses the timecodes from the end of the line.
If the EDL contains a shot multiple times, subsequent shots will be created in Sequencer when importing, corresponding to the EDL shots.
You can now change the Sequencer folder color of multiple folders by multi-selecting.
Sequencer Track filters are now saved in preferences.
Added a new transaction for toggling Show Marked Frames Globally.
Added support for a start offset to camera animations.
Upgrade audio track to use the new ECS evaluation.
Moved level-sequencer-specific editor code to the LevelSequenceEditor plugin.
Moved sequencer customizations to the editor view-model.
Add the following improved edge interaction for sections:
You can now use draw easing handles as rounded triangles sized to match the grip size, instead of the previous bitmap.
Easing handles are bigger, with bigger hit-testing area to make selection easier.
Exposed key size through the section interface in addition to grip size.
Added support for blend types and multiple rows for material parameter tracks (widget and MPC).
Exposed camera animation parameter to detail views.
String properties and String tracks now use the new ECS evaluation.
Add ability to lock marked frames on the time slider.
Register/unregister the camera animation stand-in object from its own module.
Added new user-defined bindings to Sequencer. This change adds the ability to define custom logic, using the directory blueprint, for object bindings. Instead of binding to the usual possessable or spawnable, this will optionally run arbitrary BP logic defined by the user to resolve the bound object. This makes it possible, for instance, to bind to the player pawn, or any other actor that might not exist at edit time. The UI is similar to that of the event track, and therefore reuses the director blueprint endpoint picker. There is however a new blueprint extension to compile these functions into the spawnables and possessables, and of course a spot to call these functions when appropriate.
Added a new key that you can use to allow the player to be closed.
You can now expand skeletal animation sections back to the left.
Added new feature: Smart Auto Key.
Smart Baking for Constraint Baking, Space Baking, Snapper, Control Rig collapsing and Baking Transforms.
Swap Root Bone on Track.
Animation Mode: Disable selection when clicking on an axis, avoids losing selection when manipulating.
Curve Editor: Make normalized mode scrollable and panable. This makes sure that if you frame to the normalized mode now it doesn't use the max/min values but defaults.
Control Rig: Shift now moves camera to stay with Control Rig when moving.
Curve Editor: Keep Output bounds the same even if curves are destroyed so you can select/deselect and keep their curve bounds.
Take Recorder now supports up to eight audio input sources for multi-track audio recording.
Added time scrubbing to Sequencer and Curve Editor to match Viewport behavior.
Added native accessors for common float/color light properties to improve performance when setting properties following sequencer evaluation.
Curve Editor: Added option to show constraint/space bars.
Linked Anim Sequences are now editor only.
Improvement:
Take Recorder Timecode setting names now default to the same as Anim Sequence so that aligning works.
Removed the Sequencer's Add (+) button text rollover visibility. Now the text is a tooltip so that there's no overlap with key editor buttons.
Added the Sequencer's Browse to Actor property back to the actor's right-click context menu.
Control Rig Controls filter is no longer enabled by default in Sequencer. You can optionally enable it, and your preference will be saved between sessions.
Trim and Preserve now calculate the correct transform when the attached component isn't the root component.
Crash Fix:
Fixed an issue that could cause a crash when sorting sections on load.
Bug Fix:
Fixed an issue that could prevented the ability to toggle on or off tags inside of shots and subsequences.
Fixed an issue that could cause new keys to be added when attempting to update an existing key.
Fixed an issue that could cause the group manager to not refresh when performing an undo or redo command.
Fixed an issue that could prevent the group manager selection to not function properly with folder paths.
Fixed an issue with path track evaluations that could cause component velocity to not be set properly when an object is moved by the path track.
Fixed an issue that could cause regenerating waveforms during playback to not function correctly by adding a slight delay to eliminate hitches.
Fixed an issue that could cause duplicate entries in the property menu.
Fixed an issue that could cause Show Marked Frames Globally to not be marked as a UPROPERTY so that it gets serialized.
Take Recorder: Fixed range for camera cut section so that it works for subsequences when recording cameras.
Remove unnecessary creation of camera cut track and section because they're already created when a camera is added.
Fixed an issue that could cause animation sequence to be marked dirty, due to the spawnable being modified, if the sequence is evaluating.
Fixed mute/solo nodes when hierarchy changes by tracking old and new nodes paths.
Fixed issue when the widget is replaced and no longer valid.
Fixed issue where duplicating keys is not undoable and doesn't update the UI properly.
Fixed an issue by keying the material parameter collection instance's current value if it exists, rather than always just the default value.
Fixed an issue by compensating for transform origin when adding an object's transform to Sequencer.
Fixed track row names when row indices have been remapped or a new row has been added.
Fixed an issue that could occur when pasting a possessable, by only parenting it to the pasted target if the possessable's class is not an actor, such as a component. This fixes an issue where an actor could be pasted into another actor.
Fixed an issue by ensuring the CineCamera actor's name is unique when creating as possessable. Normally this is done in the actor factory but here we spawn the actor directly.
Check for valid animation on skeletal animation FBX export.
Fixed issue where calling scripting functions (AddKeyInChannel, RemoveKeyFromChannel, SetDefaultInChannel, ReoveDefaultFromChannel, SetTimeInChannel, SetValueInChannel) is not undoable and doesn't update the UI properly.
Fixed an issue by initializing layers for spawned actors. This fixes issues where if you add a spawnable to a layer, hide the layer, and then reopen the sequence in a new level, the spawnable won't be visible and won't respond to layers in the new level.
Fixed an issue that could prevent Snap Sections in the Timeline by using the Source Timecode so that it takes tick resolution into account
Fixed an issue by preventing all camera actors from being selected in the camera cuts menu even if it is hidden.
Fixed an issue that could cause small sections to result in negative time-to-pixel conversion.
Fixed an issue by carrying over the previous view target from a previously playing level sequence, if any, so that the last sequence played restores the actual original view target, and not the previous sequence's camera. This fixes issues with stuck cameras when some sequences are played on top of each other.
Fixed an issue that could cause a crash when using the context menu in the Camera Cuts track to try and select an unspawned spawnable.
Fixed an issue by preventing global custom accessors from being unregistered on shutdown.
Fixed an issue that could cause recycling of view-models when track layouts are rebuilt. This fixes some UI issues with keys and sections being moved between track rows.
Fixed an issue that could cause a crash when shakes are previewed in Sequencer or in the Camera Shake Previewer tool.
Fixed an issue that prevented initial material parameter values to be cached correctly.
Fixed an issue that could cause a crash when recompiling a user widget while Sequencer is open.
Fixed an issue that could cause the Snap to Interval tool to not function when Snap to Keys and Sections was not selected.
Fixed an issue by restoring aspect ratio axis constraint directly on the player if the level has changed during sequence playback.
Fixed an issue by correctly restoring the Sequencer editor playback speed on stop and pause operations.
Fixed an issue that could cause the key editor widget to not be cleaned up correctly when a track goes from 1 to 2 or more rows.
Fixed an issue that could cause a crash when dragging an item from the Place Actor menu over a sub-scene section.
Fixed a UI issue where the preview for the section length shown was only as long as the first sub-sequence asset, not the longest asset in your drag or drop selection.
Fixed an issue that could cause Sequencer runners to detach and attach to linkers in interwoven ways.
Fixed an issue that could cause the Additive From Base blend type to be missing an icon in the UE5 style.
Fixed an issue by taking play-rate into account for blend times between blending camera cuts.
Fixed an issue that could cause a Control Rig Component to be constantly reinitialized when used in Sequencer.
Fixed an issue that could cause incorrect blending out of sequencer camera shake patterns.
Fixed an issue by not calling the NotifyMovieSceneDataChanged() function when pasting tracks. This fixes an issue with Niagara not setting up its data correctly after pasting a track.
Fixed an issue that could cause interactions to be incorrectly handled between the normal track area and the pinned track area.
Fixed an NVVM refresh issue that could cause view-models who already have a recycle list would not recycle their children. This meant that a re-used track-row view-model would not get its children cleared out before it is rebuilt with new underlying data.
Fixed an issue with the Channel Curve Models in Sequencer Curve Editor that could cause the tracking interpolation type of neighboring keys to not operate properly when a new key was added.
Fixed an issue that could cause the MovieSceneSequenceExtensions::GetBindingId to not be properly exposed to python scripting.
Fixed an issue that could cause ease-in curves to not show properly when a section starts at time 0 that also does not have an ease-out.
Fixed an issue by not caching pre-animated state on entities that are being torn down.
Fixed an issue that could cause BOOL and INT curves to not be drawn past left or right-most key value in Curve Editor.
Fixed an issue that could cause a null check in Movie Scene playback.
Fixed an issue that could cause autosizing of subsections, audio sections, and skeletal animation sections, to not function properly, as they were all missing taking into account start or end offsets.
Fixed an issue that could cause a spawnable binding to be overridden during the sequencer, the spawned actor will get left behind, creating duplicate characters. Now, when a binding is invalidated, and we detect an overridden binding, Sequencer checks if a spawnable is registered, and if so, destroys that spawnable.
Fixed an issue by setting a zero value on an additive Control Rig section, so it doesn't always add and uses default interpolation.
Fixed an issue by adding the sequencer ability to change the SkeletalMesh asset from a Skeletal Mesh Component in cooked builds.
Snapper: Use default key type when setting keys.
When changing time via translate hotkeys get all changes first, then apply them to avoid double transforms with space/constraint keys.
Control Rig: When looking for a binding that constrains a Control Rig, it takes into account the Control Rig so it picks the correct Actor or its component. For certain setups the face and body rig both bind to the same component on the Control Rig, but bind differently on the Sequencer side.
Fix for missing or incorrect timecode values being stored in audio assets when recording with Take Recorder.
Constraints baking: changed the tangent type to the default for the keys at compensation to avoid inserting keys that may have flat tangents.
Control Rig: Fix keying weighted additive sections.
Fix copying actors in Sequencer that live in sublevels, you can end up selecting the wrong Actor.
Only sync curve selection when updating the tree if we have no curves, otherwise this will blow away what the animator is working on.
Fixed silent failure case in Sequencer when scrubbing audio at low frame rates.
Fixed an issue that occurred when applying an FFT filter with insufficient number of keyframes selected in Curve Editor.
Calling PasteBindings() from Blueprints or Python correctly returns the newly created bindings.
Linked Anim Sequences work with nested sequences.
Curve Editor: Don't show the space or constraint key bar spaces unless there is a space.
Snapper: Do not include controls without shapes when snapping to avoid issues.
Animation Mode: Restore Gizmo Scale when leaving/entering Animation Mode.
Linked Anim Sequence: Only dirty if the data is changed, not if refreshing or changing sequences.
Control Rig: Make sure it is on game thread when handling initialize events, fix possible issues with procedural rigs.
Fixed Sequencer player playback replication synchronization to only happen once per tick.
Deprecated:
Deprecated the GetBoundObjects as it is incompatible with Spawnables. It is recommended to use ULevelSequenceEditorBlueprintLibrary::GetBoundObjects because it operates on the currently opened sequence in Editor and can return valid spawnable objects.
Remove Matinee's PostInterpChange, as it is not often used or compatible with projects.
Synthesis
New:
Added progress bars when creating and compressing Morph Targets.
Added support for using Physics Blend Weight alongside Physics Control Component.
Added a new
UpdateKinematicFromSimulation
flag to BodyInstances. This allows kinematics to be treated the same as dynamic objects when simulating with async physics. The flag defaults tofalse
, so there is no change in the default behavior, unless using the Physics Control Component, which sets the flag by default.You can now get the current or target transforms with Physics Control Component.
You can now set the Physics Control Component to use manual updates.
The Physics Control Component damping ratio in the PhysicsControlMultiplier struct has now been exposed.
You can now bulk edit Physics Control Component settings, such as the target positions and orientations.
You can now reset the physics transforms to the cached targets when using a Physics Control Component.
Added the ability to use profiling mark up when using a Physics Control Component.
Removed the NNI from ML Deformer VertexDeltaModel and NearestNeighborModel.
Fixed an issue that could cause a crash when initializing the ML Deformer on Linux operating systems.
Improvement:
Improved ML Deformer reconstruction quality:
The ML Deformer reconstruction method now uses a smoothed L1 loss function, adding a new beta Smoothing Loss property to the training settings.
The reconstruction method also now uses cosine annealing learning rate scheduler, which removes the Learning Rate Decay setting.
The ML Deformer now displays a warning when using the Vertex Delta Model, that it should not be used in production.
The ML Deformer now uses extra Get functions to get private members.
Verbose logging has been added where non-verbose logging wasn't needed.
Added additional null safety checks to the ML Deformer.
The ML Deformer now prevents sampler reinit when not needed.
ML Deformer models can now specify the number of floats per bone.
The ML Deformer now detects changes in vertex count, and shows a warning in the morph target section, when dynamic Morph Target updates aren't possible until after retraining.
Improvement the cleanup of the external Morph Targets, which also clears out the weight data.
Improved the component reinits by reducing the number of units.
Improved the rendering of bones inside the ML Deformer asset editor.
The Initialise Physics Control Component control strengths are now set to
0
by default, instead of1
.
Crash Fix:
Fixed an issue that could cause a crash by preventing the ML Deformer from updating dynamic Morph Targets when it is not possible
Fixed an issue that could cause a crash when the local bone transforms on the skeletal mesh component were empty.
Fixed an issue that could cause a crash when creating a new actor blueprint, adding the blueprint to a skeletal mesh and ml deformer component, then setting a neural morph model as ML Deformer asset, and selecting the vertex delta model mesh deformer in the skeletal mesh component.
Bug Fix:
Fixed an issue that could cause the ML Deformer asset to behave incorrectly. This could likely happen when aborting during training, or changing assets after training, and saving. Now, the editor correctly sets section indices inside the Morph Targets, rather than just including all sections and sorts the Morph Target deltas by vertex number.
Fixed an issue that could cause unexpected behavior when using curves in the Local Model.
Fixed an issue that could cause the ML Deformer editor to enter a state where the timeline does not function properly after changing the input of an asset, such as a property on a skeletal mesh.
Fixed an issue that could cause compatibility checks to fail after training.
Fixed an issue that could cause a check to fail in debug mode.
Fixed an issue by setting the Physics Blend Weight property to 1 by default when using a Physics Control Component to simulate physics. This ensures that using a mixture of kinematic and dynamic bodies works with skeletal meshes.
Fixed an issue that could occur where the ML Deformer time sampling was incorrect.
Fixed an issue that could occur when render graph errors in ML Deformer Vertex Delta Model.
Fixed some issues that could occur with ML Deformer Vertex Delta Model inferences.
Fixed an issue that could occur with the VertexDeltaModel which caused animation to appear frozen.
Fixed an issue that could cause a module in ML Deformer to be missing.
Fixed an issue that could cause an incorrect mismatched vertex error in MLDeformer.
Removed:
Removed a substring redirect from the ML Deformer, which wasn't needed anymore and triggered a warning in the log.
Editor
API Change:
There is no support for OpenGL on Linux, so the imaging and usdImaging USD libraries that depend on OpenGL are excluded on that platform.
New:
Added editor performance setting to control
r.VSyncEditor
.Added support for overriding enum value display names on a per-property basis.
This can be specified by the Enum Value Display Name Overrides meta-data, and is a semi-colon separated list of
Name=DisplayName
pairs where the Display Name can be a raw string or a NS/LOCTEXT style localized value.
Added Source Code Access plugin for the 10X editor.
Added a Copy References and Copy Paths button to the editor asset menu.
Disabled real-time viewports when the editor process is in the background and
bThrottleCPUWhenNotForeground
.Optimized advanced copy by running its consolidate step less frequently.
Added new option for PNG import to fill RGB into transparent neighbors always, even on complex alpha channels. Previously was only doing RGB fill on simple binary transparency. This is configurable in Texture Import Settings.
Added a Fixup Group Actors function.
Added support for Windows ARM64, Linux, and Mac.
Changed floating point textures to default to BC6H compressed texture format on import, rather than RGBA16F. Existing textures are not changed. The format chosen by default can be set in the Texture Import Settings config; for VFX users may set it to default to 32 bit texture formats.
Added support for automatically wiring inputs when creating a node from a specific output.
Enabled easy command line override of shared linear encoding (
-ForceSharedLinearTextureEncoding=True/False
).Fixed 32-bit size limits and bugs that prevented use of very large images (such as file sizes over 2 GB). Unreal should now be able to import very large images, only limited by memory use and the target platform or VT size limits, which is currently 16k x 16k for non-VT and 4 GB built size for VT.
Added button to Media Plate to browse to the material asset.
Updated the Fracture editor with a display of imported collision shapes in the convex tool if they are available and enabled. The display supports convex, box, sphere and capsule imported shapes.
Sound Cue Nodes now obey Class Viewer Filters.
Updated the Plastic SCM plugin to version 1.8.0.
Modified advanced color space transformations and source encoding overrides on textures to utilize the OpenColorIO library.
Added basic SCC support to Content Browser file data sources. This is enough to support the basic operations (on add, delete, move, rename), as well as the revision control file menu (to allow sync, revert, check-in, history, and diffing).
Added a context menu entry to perform asset validation on specific actors.
Upgraded OpenEXR version to 3.1.6.
Included the imaging and usdImaging libraries in the engine's build of USD.
Exposed
SetIgnoreBoundsForEditorFocus
as Blueprint callable and addedGetIgnoreBoundsForEditorFocus
.Exposed single click action within SGraphPanel to allow hooking custom logic.
Adding a new Cook Metadata file that gets generated adjacent to the development asset registry. This will be the home for metadata about the cook that is unrelated to assets moving forward. Currently this contains dependency information regarding the enabled plugins at cook time, as well as plugin size information that gets written to the cook metadata file during staging, if enabled.
Upgraded USD version to v23.02.
Properties Menus drawn from the Sequencer now obey the Property Editor Permissions List.
Updated icons for Check-in Changes and Sync Latest status bar buttons.
Added ability to revert conflicted files in the Submit Files window.
Added the
-AssetRegistryCacheRootFolder= commandline
option to allow you to choose where to write the asset registry cache files.Added number of convex to the statistics widget in the Fracture editor.
Made the histogram Set Inspected Attribute method in the Fracture editor to be more resilient to ill formed geometry collections.
Triggered an autosave if there are any unsaved changes when a user clicks check-in changes.
Updated the debug focus plane bounds to not be taken into account anymore when focusing on a cine camera in the editor, making the viewport focus on the actual camera itself.
Improved editor startup performance related to populating
FAutocastFunctionMap
entries.Improved editor asset scan performance.
Updated the Variant manager properties list to include static mesh and overlay material properties.
Updated
SyncBrowserToObjects
use const arrays and addSyncBrowserToObject
.Added Blueprint Display Name to Blueprint Generated Class editor tags to permit aliased class names in cooked editor.
Added a tooltip to the toggle visibility button in the scene outliner and the Pin button in the scene outliner.
Renamed Mobile Preview ES3.1 (PIE) to Standalone Game Mobile.
Renamed Vulkan Mobile Preview (PIE) to Standalone Game Vulkan Mobile.
Renamed Mobile Preview (PIE) to Standalone Game Target Device Mobile.
Renamed Preview Rendering Level to Preview Platform.
Rename DebugText in EditorViewport from Feature level: to Preview Platform:.
Added a callback to get notified when the
UObject
garbage collection finishes purging objects.Loaded components ( including the one in blueprints ) are now properly updated when using Dataflow to generate a Geometry Collection asset.
Added parameter to enforce the cluster number when using the connectivity data in the Fracture editor.
Prevented non-server standalone instances from using Server Map Name Override.
Added the ability for objects to have alternate selection outline colors picked from a palette.
Added support for statically and dynamically registering documentation redirects to allow licensees to override engine level documentation links without duplication / adding boilerplate menu overrides. Documentation redirects can be registered statically through INI editor config files or dynamically in code through the IDocumentation interface.
Improvement:
Updated the asset registry exporter to output to CSV to facilitate import into common database frontends. Additionally, support outputting dependency information based on a set of primary asset type roots for help in analyzing the source of build size.
Updated the function `UContentBrowserAssetDataSource::CreateAssetFilter`to improve performance. For a large project with a lot of paths using a recursive search on all the folders, the change reduced the time it took to create the filter by about 86%.
Improved the backend filter compilations of the asset views by adding a system to cache some part of the filter compilation.
Improved connectivity tool visualization in the Fracture editor:
Centers are now displayed.
Added controls for line thickness, point size, and colors.
Bug Fix:
Fixed a crash accessing null pointer on shutdown of editor.
Corrected Clear Thumbnail not working if asset is not already loaded into memory.
Fixed it so Additional Server Game Options in the Play in Editor options applies to externally launched dedicated servers as well as listen servers.
Corrected the clear on pie checkbox to work by putting in the correct path.
Fixed editor ensure startup when stats is not defined.
Fixed crash on exit in stall detector thread when editor closed by call to
RequestEngineExit()
.Updated Ability System Component function to check the Spec's ability pointer before use.
Fixed crash on shutdown if a web browser window was open.
Fixed nested virtual roots (from aliases) failing to resolve correctly in the Content Browser.
Fixed regressions when undoing a deleted one-file-per-actor post-save.
Fixed the details panel failing to restore expansion state when running deferred actions.
Fixed an issue with the content browser not always showing the path filters. The
SLATE_ARGUMENT
to determine if it should be shown was not initialized.Fixed a crash bug with Advanced Copy, where two asset dependencies with the same name would flatten down to overwrite each other.
Fixed crash when creating a parameter from a datatable asset or any asset.
Fixed a couple of issues where packages were aggressively dirtied:
Call cancel on the transaction if it is actually a camera movement input.
Reset package dirty state when a widget drag is canceled (for example with escape key).
Made
FBoxes
IsValid
flags editable, otherwise editor-modified boxes will compare equal to the CDO and so not be saved.Usee
FLinearColor
for screen fades so that extreme values behave consistently between the editor and the runtime.Fixed Variant Manager opening an extra empty window.
Fixed Unreal Editor's crash when using Unreal Remote.
Fixed a crash where a Thumbnail Pool could be deleted while it is ticking because the asset view that owned it was destroyed while generating a thumbnail.
Fixed a crash on editor shutdown where the transactors for ISM typed element handles were cleaned up too aggressively.
Reworked component visualizer visibility to key off draw debug variable. When this is disabled, the component visualizer will still draw if the component is directly selected, and will allow editing this way. Supports helper splines for PCG workflows that are intended to be hidden by default to the user.
Fixed a memory leak caused by a circular dependency from the delete asset window. This also fixed a general performance degradation of the editor when deleting assets because of the leaking assets pickers widget.
Fixed an issue where the gizmo would rotate on an axis from keybinds, even if the user had selected a valid axis on the gizmo.
Fixed a crash when prtining typed element debug ID.
Speculative fix for seen once crashes in typed element debug ID printing.
Fixed duplicates being wrongly reported when adding elements to map or set properties in the editor, where the key type is a
UClass*
key and the class name is a subset of a name which already exists as a key.Fixed an issue where the hovered/active gizmo hit proxy is incorrect when mouse tracking restarts This was causing the indirect manipulation axis to persist as new buttons were pressed, which would result in the wrong axis getting manipulated.
Updated the level editor place actors menu to respect Class DisplayName overrides.
Fixed an issue where an invalid
FName
could cause category path look up to assert.Fixed the Convert to Static Mesh actor's tool to now handle Instanced Static Mesh Components (and HISM components) properly.
Fixed the inability to revert level file deletion in Check-in Window.
Fixed an issue that prevented the use of the property matrix on textures.
In the Subversion settings, only the path of the Executable Location setting will be used and any executable name after the path will be ignored.
Fixed a bug where the asset registry cache would not be written in certain situations related to synchronous scanning.
Implemented auto-save on check-in.
Fixed issue that prevented deleted objects from being restored on Revert All.
Fixed issue that caused not saving deleted files during Delete workflow to result in errors after sync.
Fixed issue that caused added and saved files to disappear after Sync Latest.
Fixed a bug where the class redirector of a renamed Blueprint asset would not be applied until the asset was loaded, causing the new class type to be missing from UI selection.
Modified
CleanupAfterSuccessfulDelete()
to check if deleting a package is supported by source control first, and only if that is not the case, mark it for local deletion. This fixes an issue where deleting a file checked out by someone else (when working offline) and choosing only to save locally resulted in the file not being deleted on the local file system.The packages Core Redirect are no longer case sensitive (regression introduced in a previous version). Since package names are stored in case insensitive
FNames
, the redirectors should be case insensitive as well.Fixed a memory corruption issue related to
UK2Node_EvaluateProxy
.Fixed an issue where when moving multiple directories at the same time in the content browser, the asset references weren't always being updated correctly, leaving some assets pointing to invalid asset paths.
Fixed a crash that could occur during the static mesh build step.
Fixed an issue where the asset registry state of an cooked plugin would remove some of the needed development tags from an asset that already exist in the Editor Client Asset Registry.
Fixed a crash for the Cloth editor that occurred during shutdown due to SharedPtr cycle.
Updated Approximate Actors method of Merge Actors to properly detect and return an error if the occlusion method removes all triangles in the approximation mesh.
Deprecated:
Deleted DDS Loader and HDR Loader functions which were previously deprecated.
Content Pipeline
New:
Fixed many image importers to gracefully handle malformed files instead of crashing.
OBJ translator distinguishes multiple polygon groups with different materials within a group.
Virtual textures no longer allow the NoMips MipGenSetting, as VTs require mips in all cases. LeaveExistingMips is only allowed if the entire mip chain is provided. This generates a texture build warning, and the texture is forced to generate mips.
PSD loader support has been made more robust, and support for RLE compressed 16 bit PSDs has been added.
Optimized I/O usage when utilizing the reference chunk database for packaging.
When CADKernel mesher is the default mesher, if a failure occurs, the process of the file is relaunched with TechSoft mesher.
A post process of the static mesh during the import has been disabled. It can be reactivated by setting the CVar
ds.CADTranslator.SewMeshIfNeeded = true
Added CVar ds.CADTranslator.EnableUnsupportedCADFormats to enable all unsupported CAD formats.
Improved quality of OBJ format material translator. Most of the basic and extended sets of parameters(and corresponding maps) are now supported. Illumination modes are extrapolated.
Added a CVar USD.SkipMeshTangentComputation to skip computation of tangents for static meshes. This can help import performance when the tangents are not needed.
USD: Baked mesh deformations can now be imported as GeometryCache assets.
Files with geometry caches loaded on the stage will now have associated tracks in the USD level sequence.
GeometryCache track section parameters in level sequence are now exposed to Blueprint.
AUsdStageActor can now be derived in C++ from other plugins than USDImporter.
Alembic: Face set names, when available, are now used as material slot names on geometry cache (and static and skeletal mesh) and can be used with SetMaterialByName in Blueprint.
Added support for extracting RootUV values from the Alembic UVsParam instead of the groom_root_uv attribute.
Bug Fix:
The import of assets via the asset tools now validates that the destination path is mounted and avoids crashing if this is not the case.
Fixed issue caused by updating a texture via a render target while it is being built/compiled.
Removed redundant data from telemetry of USD/AxF/MDL/Datasmith importers, Dataprep.
Fixed issue importing obj/gltf/datasmith/mtlx when a texture is missing.
Fixed matrix issue for Autodesk Alias format (.wire).
Fixed issue for longlat textures with LeaveExistingMips set.
Importing partial mip chains generates output to a full mip chain.
Made the paper2D on object reimported safe to use in a cooked editor and made the existing code more robust by not having issues if you are missing the SourceTexture metadata.
Made the Blueprint node for the function MigratePackages of the AssetTools non pure. This adds the missing execution pin this node should have.
Fixed possible issue when streaming multiple instances of the same GroomCache at the same time.
Alembic: Fixed possible computation error when composing hierarchy of transforms.
Fixed GeometryCache ignoring "Receive Decals" setting with Deferred Decal materials.
Alembic: Fixed import generating no animation when importing GeometryCache with "Flatten Tracks" and skipping the import of the first track.
Alembic: Fixed frame time computation error at import that could cause timing issue.
Datasmith
New:
Added a USD Stage import option to enable/disable the import of Groom and Groom Binding assets.
[USD Importer] Added UnrealUSDWrapper functions for registering USD plugins by path.
[USD Importer] Added UE wrapping for
UsdPayloads
,UsdReferences
, andUsdVariantSets
from USD API.Added resource size tracking for Geometry Cache assets stored in the USD Asset Cache.
Added support for using Interchange's MaterialX translator when opening or importing USD Stages with references to MaterialX files.
[USD Importer] Added config setting and API for setting the default search path for USD's default resolver.
[USD Importer] Added a file format arguments parameter to find/create/export functions of SdfLayer wrapper.
Added support for exporting LevelSequences with animation constraints to USD.
Added support for UV transform shader nodes connected to primvar readers, when opening or importing USD Stages.
[USD Importer] Added wrapping for token-based API schema functions (
CanApplyAPI()
,ApplyAPI()
, andRemoveAPI()
) onUsdPrim
from the USD API.Added support for geolocation to Datasmith API.
Added new C++ events to the Usd Stage Actor:
OnStageLoaded
andOnStageUnloaded
.Implemented automatic regeneration of UAssets whenever the source USD prims were updated on the opened USD Stage.
[USD Importer] Added optional
EUsdLoadPolicy
parameter toFUsdPrim::Load()
to mirror the USD API, allowing the underlying prim to optionally be loaded without loading any of its descendants.Added support for parsing USD Materials that use multiple UV sets (primvars).
Improvement:
The USD Stage Editor's right panel can now display prim relationships, metadata, and attribute metadata (once an attribute is selected).
[USD Importer] Exposed
UsdStage::CreateClassPrim()
on theUE FUsdStage
wrapper.[Solidworks] Components made from identical parts now reuse exported meshes.
When opening USD Stages, only materials bound by at least one prim will be parsed by default.
[3ds Max Exporter] Shared exported meshes for RailClone or ForestPack entities now use the same mesh.
You can now cancel loading the USD Stage by clicking the "X" on the dialog to pick the default USD Asset Cache for the project.
StaticMesh, SkeletalMesh and GeometryCache assets generated from USD Stages will now have the default material instead as a fallback, instead of fully unassigned material slots.
You can now create LevelSequence bindings to transient actors and generated components when opening USD Stages, from any LevelSequence. Those bindings will use the new Sequencer Dynamic Bindings feature to automatically repair themselves whenever they are broken due to the stage being closed or reloaded.
Importing skin weight profiles is now significantly faster.
[Solidworks] Exploded Views now export for each of configurations as additional variants
Changed the translucency lighting mode used by the USD preview surface reference materials to "Surface ForwardShading", to improve behavior in scenes with multiple translucent objects.
[Sketchup] Geolocation information is now exported.
Expanded the USD Asset Cache to support persisting Materials, Skeletal Meshes and Static Meshes to disk.
[Solidworks] Greatly improved AutoSync reaction time to material changes for bigger models.
[Solidworks] Model Tab is now toggled after exporting animation.
[Solidworks] Added plugin prerequisites to the installer to support installation on clean machines.
The USD Stage Editor now shows internal prim references when selecting a prim.
When baking materials to USD, diffuseColor will now bake as black as a fallback to retain the same visual appearance as in UE.
Crash Fix:
[Solidworks] Fixed crashes caused by enabling AutoSync.
Fixed a crash that would occur when changing collapsing rules on the USD Stage Editor in some scenarios.
[Solidworks] Fixed a bug that could cause an infinite reimport after deleting a component.
Fixed a crash that could occur when importing materials from USD which overrode previously imported materials.
[Solidworks] Fixed a crash that could occur when re-enabling DirectLink source.
Fixed an crash that could occur when trying to open or import USD Stages with skeleton prims that have more than one root bone.
Fix crashes related to Skeletal Mesh Components when importing USD Stages over previously imported actors and assets.
Fixed a crash that could occur when exiting the engine during the process of saving USD Stage changes.
Fixed a crash that occurred when undoing the addition of transform track keys in some scenarios, such as when manipulating the LevelSequence generated by opening an USD Stage.
Fixed a crash that occurred when importing USD files via automated tasks (like Python scripts) with no specified import options.
[Rhino] Fixed an export crash that occurred when exporting meshes with multiple UV sets.
Fixed a crash that occurred when translating USD point instancer prims with unexpected prims inside their prototypes, when opening or importing USD Stages.
Bug Fix:
[Solidworks] Actor visibility is now set appropriately in the Datasmith scene tree on export if it's suppressed in the selected config.
[Solidworks] Unused materials are now handled correctly in exported scenes.
Fixed USD Stage import options that weren't being autofilled from the currently opened stage actor when using the Actions → Import option on the USD Stage Editor.
HierarchicalInstancedStaticMeshComponents spawned when translating USD Point Instancer prims will no longer be missing their StaticMesh assets, if the source prototypes were being shared via the USD Asset Cache.
USD prim kinds will no longer be ignored when deciding if a prim subtree collapses or not.
[Solidworks] Exporter will now install as expected if only version 2023 is available.
Fixed an issue that would cause missing Static Mesh Components when importing some types of USD Stages generated by exporting Unreal levels with StaticMesh assets with multiple LODS.
Fixed visibility handling issues that occurred when traversing Mesh prims in order to generate Geometry Cache assets when opening or importing USD stages.
Switching render context (or other similar options) on the USD Stage Editor options will now update the Static Mesh Components on the level with new material assignments as expected.
Exporting levels to USD without any levels selected will no longer generate files.
AnimSequence assets generated from USD will no longer fail to drive morph target (blend shape) animations.
Setting material overrides on spawned components will no longer write to unexpected USD prims if the Static/SkeletalMesh/GeometryCache asset is shared via an USD Asset Cache.
[Revit] Fixed duplicated IDs for Level elements.
USD Stage Control Rig integration will no longer fail when using Control Rigs that modify their own topology in their construction scripts.
Fixed an issue related to material overrides on components that spawned when opening USD Stages with collapsible subtrees.
The mesh vertex count and Nanite material collapsing limits are now checked when collapsing large meshes from USD.
Direct link now works when offline.
The USD Stage Editor will no longer generate invalid reference or payload paths when adding references or payloads if the target file is near the engine binary.
[DatasmithImporter] Fixed a bug that would occur when reimporting DirectLink static mesh with changed material ordering.
Fixed an issue related to how material names were being used for texture assets when fully importing stages from USD.
[Sketchup] Available SketchUp versions will no longer be disabled in the installer.
[Solidworks] Fixed an issue which prevented proper shutdown of Solidworks.
Chosen material purpose will now be used when parsing material assignments directly for the generated mesh assets when opening an USD Stage.
Fixed a slowdown which occurred when trying to display array attributes with many entries in the USD Stage Editor.
[Solidworks] Removed the -1 on spot light scale.
UDIM textures will now be parsed from USD Stages as expected.
[Solidworks] Fixed a sync/export bug that occurred when the plugin was enabled manually (not on startup).
Fixed a bug that could cause the material overrides layer to be empty in some scenarios when exporting levels to USD.
Adding and removing USD layers will now automatically reload animations on the generated LevelSequence as expected.
Fixed issues related to handling the export of levels to USD with Static or SkeletalMesh assets with multiple LODs, leading to broken references or missing material assignments in some cases.
The "Save USD Layers" dialog will no longer be shown when switching Stage options on the USD Stage Editor.
Mesh prims without the SkelBindingAPI will no longer be incorporated into the generated SkeletalMesh assets when opening or importing USD Stages.
Groom and Groom Binding assets now import from USD Stages as expected.
Using the Actions → Import option to import an opened USD Stage will no longer lead to unexpected results if the chosen import options differ from the options used by the currently attached USD Stage Actor.
[Navisworks] Tooltips now appear as expected when docking/undocking plugin UI.
Fixed an issue that occurred when exporting Unreal levels to USD. The exporter will no longer fail to retrieve actors when exporting "only selected", if those actors belong to a sublevel.
[Solidworks] Deleted sub-assemblies are now removed from the Datasmith scene on sync.
Fixed an issue which could corrupt imported textures settings.
GroomBinding assets will now be set on the Groom components when opening USD Stages with Grooms as expected.
Animations on the generated LevelSequence will now be refreshed when adding or removing USD sublayers from an opened USD Stage.
The landscape material baking process will now generate consistent textures when exporting levels to USD.
[Solidworks] Fixed an issue involving Part materials exporting inconsistently in multiple configurations.
[Revit] Fixed a Direct Link error associated with the Datasmith Exporter for Revit 2018.3.
[Solidworks] Fixed an issue involving the deleting a sub-component of a sub-assembly.
USD Stages with animated meshes (that led to Geometry Cache assets being generated) will no longer be left permanently opened in some scenarios.
[Solidworks] Fixed a miscalculation involving child components variant transforms.
Fixed broken baked material references when exporting USD stages on Linux.
The USD Stage Actor will no longer write to the USD Stage when updating component properties on the level even if those properties are bound as tracks on the currently opened Sequencer.
Fixed an issue which could cause missing StaticMeshes on HISM components generated when opening or importing USD Stages with point instancer prims with LOD prototypes.
Fixed an issue which could cause missing static mesh components when opening or importing USD Stages with Light prims that have child Mesh prims.
UsdTransform2d
UV transform shader nodes when opening or importing USD stages on Linux will now parse as expected.Actors spawned when importing USD stages via the Actions → Import button on the USD Stage Editor will no longer be marked as transient and disappear when loading into PIE or reloading the level.
The USD Stage Editor and UsdStageActor will no longer use an old generated UAsset when a stage option is changed.
Deprecated:
The FUsdPrim::HasPayload() function was deprecated in favor of HasAuthoredPayloads() to mirror the USD API.
[USD Importer] Deprecated the
HasAPI()
function that takes an optional instance name parameter and replaces it with one- and two-FName parameter overloads that match the one- and two-token counterparts on UsdPrim from the USD API.
Framework
New:
Limited the number of paths reported in changelist descriptions generated by editor collection checkins to 1000. You can control this by setting the Cvar
Collections.MaxCLDescriptionPathCount
.Added ability to change the importing behavior for assets so that if you import on top of a redirector, you'll instead import on top of the asset that redirector points to. Set the CVar AssetTools.FollowRedirectorsWhenImporting to 1 for this behavior.
Added an optional integration with Helix Swarm that provides a way for users to view/post comments from the UE changelist review tool.
Crash Fix:
Fixed a crash that occurred when copying actors in an editor from before 5.1 and then pasting the actors in a editor newer then 5.1.
Fixed crash when duplicating levels that contain a Level Blueprint.
Fixed intermittent editor crash when loading certain changes in the changelist review tool.
Bug Fix:
Fixed missing '#changelist validated' tag when submitting without editing the changelist text.
Added
bIgnoreEditorOnlyReferences
toAssetReferencingPolicySettings
in the Asset Reference Restrictions editor plugin. When true (which is the new default), the reference checker will ignore editor-only references to things like editor utility components.Input axis events now forward to the Editor World extension collection and give extensions an opportunity to consume input.
Landscape
API Change:
FMaterialCachedHLSLTree was not updated but already doesn't support the same features as the legacy HLSL material translator (e.g. AllowMultipleCustomOutputs).
Code accessing the Landscape GUID identifiers on instanced Landscapes now needs to take into account that instanced Landscapes modify their Landscape GUIDs. If you need the original value from the landscape asset, access it via
GetOriginalLandscapeGuid()
.
New:
Added command to dump a report of all landscape grass data currently used on landscape components: grass.DumpGrassData [optional: -csv -fullnames -showempty -detailed -byproxy -bycomponent -bygrasstype -full]
Added possibility for UMaterialExpressionCustomOutput to limit the max number of outputs. Displays an error when the material is using more than the max allowed number.
Added threshold to dirty landscape textures detection (CVars "landscape.DirtyHeightmapThreshold" / "landscape.DirtyWeightmapThreshold")
Added CVar landscape.DumpDiffDetails (to be used in conjunction with landscape.DumpHeightmapDiff and landscape.DumpWeightmapDiff) to dump additional details about the diff introduced on a given heightmap/weightmap.
Added Include Border to the landscape tool's component brush. Since the border is shared with neighbors, oftentimes the user wants to paint within the bounds of the component but not on the border.
Added blueprint getter and setter to WaterMeshOverride.
Added a new collision heightfield visualization mode to visualize the chaos material per-vertex.
Added the ability to synchronize LOD levels and eliminate geometry seams across adjacent Landscapes, by setting their LOD Group Keys to matching non-zero values.
Reworked landscape property sharing and override.
Added LandscapeInherited and LandscapeOverridable meta tag to mark shared properties.
Enforced synchronicity between shared properties when editing and loading ALandscape and LandscapeStreamingProxy.
Created textures with no mipchhain if used in as a layer height or weight.
Prevented computing the landscape texture hash twice when it has changed.
Multithreaded building of nanite meshes from Landscape geometry
Added the ability to store landscape heightmaps in a compressed representation to save disk space, at the expense of slower loading. Enable using landscape.ShowCompressHeightMapsOption to show this option.
Build Physical Materials command rebuilds all physical materials
Added new CVar to control heightmap detailed change tracking. Split
landscape.DirtyHeightmapThreshold
intolandscape.DirtyHeightmapHeightThreshold
andlandscape.DirtyHeightmapNormalThreshold
.Added a gamma function to the paint tools strength to make more of the slider range useful for painting.
Adds Landscape BP Brush visibility layer editing.
Added FLandscapeBrushParameters struct that should be used to pass arguments when rendering a layer.
Added BP Brush visibility layer toggle in Landscape Editor.
Added visibility layer editing for LandscapeCircleHeightPatches and LandscapeTexturePatches.
Added helper method to determine if a layer info object name is a visibility layer.
Added ability to create multiple nanite components per Landscape Proxy if it has more than 64 components.
Added the ability to create multiple copies of a Landscape via Level Instancing.
Updated M_ProcGrid material to have nanite enabled.
Improvement:
Increased the maximum landscape grass type outputs from 18 to 32.
Save Modified Landscapes now acts as a way to fix every landscape actor that needs to be updated because of discrepancies.
Added viewport message for when Nanite meshes need to be regenerated. The message now indicates the number of landscape proxy actors needing updating.
Landscape heightfield now uses unlit vertex color material to better visualize physical materials.
Prevented updating water info until after a landscape painting operation is finished.
Modified ALandscapeProxy detail panel to reflect how the properties are shared.
Modified ELandscapeToolTargetType to be an enum class, usable by blueprints.
Bug Fix:
Fixed Open World map landscape normals.
Prevented all Runtime Virtual Textures from being invalidated when entering landscape mode just because we build a thumbnail material.
Disabled Save Modified Landscapes hyperlink in the map check after the action has been executed by the user.
Fixed Nanite landscape mesh object names, which were not guaranteed to be unique anymore.
Removed RF_Transactional flag from the static mesh since this data is not meant to be transactional.
Fixed bad tangent space computations for various landscape utilities.
Factorized redundant code in landscape for accessing weightmap/heightmap data.
Added CPU traces to LandscapeTrace.
Fixed important slowdown when using a landscape brush with a large radius.
Fixed Inactive world types interacting with Runtime Virtual Texture that caused changelist validation to create a new virtual texture producer.
Fixed visibility weightmaps being generated when using landscape patches. They are now only generated when a patch actually writes visibility.
Fixed missing landscape actor in landscape tools for debug visual log.
Fixed undo of Nanite-enabled landscape proxy deletion that didn't properly invalidate the Nanite component on redo.
Made bEnableNanite and NaniteLODIndex shared properties for landscape proxies so at cook time there is no ambiguity over whether Nanite is enabled or not on a given proxy.
Added map checks for when shared properties on proxies are not up-to-date.
Fixed ModifiedPackages system in ULandscapeInfo.
Changed outer of the Nanite static mesh.
Made the NaniteComponent TextExportTransient. Copy and pasting no longer leads to the mesh being shared between actors.
Made the NaniteComponent DuplicateTransient. Saving as a map no longer leads to the mesh being shared between packages.
Fixed crash when listing textures using the listtextures console command after having deleted a landscape actor.
Fixed Landscape Nanite Content Id taking into account the landscape material's StateId, leading to landscape actors being invalidated on 2 branches where the landscape material were not at the same version.
Fixed Landscape Nanite static meshes having a non-hash based Guid, leading to new DDC keys being generated when the meshes are invalidated.
Fixed navigation data being generated for nothing and being invalidated right after generation when building landscape Nanite meshes.
Corrected nanite mesh build not being cancellable when started from Build All Landscape.
Fixed rare case of desynchronization between CachedLocalBox and heightmap data.
Removed incorrect ULandscapeNaniteComponent from ALandscapeProxy's OwnedComponents upon copy/pasting.
Fixed performance issues related to landscape heightfield in show collision mode by using static draw commands.
Prevented landscape heightfield collision components being invalidated because of editor throttling.
Fixed a crash when copying a water body component in isolation. Spline component was not valid and crashed in PostDuplicate.
Fixed landscape component count display in editor when selecting streaming proxies.
Corrected water bodies which do not affect the landscape to still search for a landscape.
Corrected an issue where newly streamed in water bodies would not render into water info texture. Newly streamed in actors are forcibly hidden until all streaming is complete.
Fixed a crash in landscape when it contains null entries in LandscapeComponents.
Fixed landscape getting dirty even when the detected difference is lesser than the detection threshold.
Fixed landscape heights being incorrect after Sculpt Undo operation.
Override PostActorCreated to build WaterInfoMesh properly when spawning an actor using the UWorld::SpawnActor method.
Fixed an issue where Landscape Resize was not preserving all relevant landscape settings.
Fixed a rare crash when using the Landscape Editing modes.
Fixed a crash when alt-dragging or duplicating the landscape gizmo actor.
Fixed a crash when updating property permissions outside landscape mode
Fixed a crash when adding spline control points to a hidden landscape.
Fixed an issue with landscape LOD calculation that sometimes caused Landscape edges to have a higher-than-expected LOD.
Fixed a potential overflow security issue importing landscape PNG files.
Landscape Streaming Proxies were not being unloaded correctly if painted or sculpted in landscape mode.
Fixed a crash when creating multiple landscapes with regions
Fixed crashes and other unexpected behavior on Undo after adding a new LayerInfo to a Landscape Layer.
Fixed incorrect water velocities with some scalability settings.
Fixed an issue with large Instanced Foliage paint brushes taking a very long time when the Radius option is used.
Fixed an issue with normal calculations along the edges of landscapes.
Fixed a rare crash when double clicking a landscape spline control point tangent box.
Fixed a crash when undoing the creation of a landscape.
Fixed texture corruption when undoing mask painting back to the first mask paint operation.
Deprecated:
Removed the baked landscape GI texture system.
Removed Render method for BP Brushes, RenderLayer should now be used.
Scripting
New:
Added blueprint functions to convert from classes and soft class references to the TopLevelAssetPath struct used by asset utility functions.
Exposed
GetClassPathName
,GetStructPathName
, andGetEnumPathName
to Editor Scripting, which return a TopLevelAssetPath containing the type info. For example:unreal.MyClass.static_class().get_class_path_name()
unreal.MyStruct.static_struct().get_struct_path_name()
unreal.MyEnum.static_enum().get_enum_path_name()
Exposed
FPlatformTime::Seconds()
to scripts in Unreal Editor.Added a function to convert a normal widget blueprint to an editor utility widget.
Custom icons can now be configured for Scriptable Tool Blueprints in the Class Settings.
The
UScriptableInteractiveTool
class now exposes a Blueprint-overrideableOnGizmoTransformStateChange
event, which is called when a user starts and ends a Gizmo transform interaction, or on undo/redo of such an interaction.
Crash Fix:
Fixed a crash that would occur when using an Editor Blueprint as the root of another Editor Widget Blueprint.
Bug Fix:
UE now only generates Python stub code when running full editor.
Changed Python remote execution to bind to localhost as the default multicast adapter.
UI
New:
In the Place Actor Window, Volume objects and recently-placed elements are now properly localized.
Implemented deep copy for sets in
CopySinglePropertyRecursive
.Added an Icon extension point to the content browser path view that allows icons to be placed to the right of the item text.
The asset auditor now shows the staged sizes of assets if they are present in the asset registry, and also makes sure that tags show the data from the selected asset registry rather than the one in memory. Previously, the size displayed in the asset auditor would be uncompressed data estimated by looking at how much data the cooker output to disk. With the introduction of asset registry writeback (in the project packaging settings), the compressed sizes can be written back to the development asset registry. When viewing such development asset registries, those sizes are now displayed.
Added a Browse button to the Level Editor Toolbar.
Improved UX around unsupported assets in the Content Browser by removing unnecessary menu options and adding an indicator to the tooltip.
SBlueprintActionMenu
checkbox text is no longer cut off.Changed the sorting of names in the scene outliner and changelist window to be in natural order, similar to OS file menus.
The Content Browser immediately flushes the config on adding/removing a folder from favorites to make sure the action is saved if the editor crashes.
In the DataflowGraphEditor, you can press the F key to zoom to fit either the selected nodes or the entire graph.
Bug Fix:
Opening a texture in the texture viewer now always shows Final encoding.
Fixed an issue where the color curve editor wouldn't update when gradient stops were moved.
Fixed the gradient preview in the Color Curve Editor.
Fixed an issue in the Reference Viewer preventing users from typing the address of non-package paths into the address bar.
In the Actor details view, archetype edits that occur while archetype instances are actively selected will now correctly sync the "reset to default" state.
Fixed a typo in FMessageDialog remark.
Folder names in the Content Browser now wrap properly with ellipses similar to asset names.
Fixed an issue where it was not possible to drag-and-drop below rows that have expanded items.
Fixed a drag-and-drop issue for Input Mapping Context that was not moving the element at the desired position.
Fixed tooltips that could appear on top of foreground programs.
UX
API Change:
Changed message log action token so it doesn't disappear when the action has been executed, it becomes disabled instead. Visibility is only tied to the action's Execute callback validity now. This affects all actions where
CanExecuteAction
can return false.
New:
Added the ability for different verbosities in the Output Log to ignore category filter and always display.
Added option to auto select items in revision control revert window to reduce redundant actions for users.
Set the asset filter in
UAssetToolsImpl::CreateAssetWithDialog.
This uses the Factory supported class as a filter for assets in the Save Asset As dialog.Migrated most main menu entries under Edit, Window, and Tools to the newer ToolMenus system.
Fixed a typo in the tool for importing glTF files.
Removed the Starship Gallery test suite from the editor. It was not designed to run inside the editor and can therefore cause crashes.
Sorted the viewport's Perspective > Placed Cameras menu by name to make it easier to use.
Improved overflow behavior of text on Notifications by adding ellipses and showing the full text on hover.
Reskined the Property Matrix to bring it up to standards with the UE5 style.
UX Improvements for the Restore Open Asset Tabs notification that shows up when you launch the editor. These include the notification staying active until you make a choice and the ability to remember your selection in the future.
Added a Recent Assets menu to the level editor and all asset editors for quick access to any assets you recently opened.
Added an option to the Outliner context menu to bulk edit components in the Property Matrix.
Modeling Mode favorites are now saved across editor sessions.
Added the ability for modes to add a secondary toolbar below the level editor toolbar to house mode specific tools.
Removed user-visible ES31 editor references and replace it with Mobile.
Improvement:
Closed the suggestion box when using the keyboard shortcut (tilde key, usually) to switch between status bar console input to Output Log console input.
Auto-adjusted the editable text box size so the content for long console command is more visible.
Optimized a variety of hotspots during the texture build path not associated with encoding the actual image, including decoding of source image and metadata generation.
Updated text overflow behavior of the Window > Save Layout > Save Layout As panel.
Bug Fix:
Adjusted the color to full brightness or opacity when picking from the color wheel/spectrum if it was previously almost black or transparent.
Fixed a bug in some tables where header text could drift horizontally relative to row text of the same column.
The viewport toolbar now correctly collapses its buttons as needed even on displays that use DPI scaling.
Fixed an issue where tab headers would appear to be wiggling when a tab was being closed.
Updated tabs in windows separate from the main editor from no longer getting lost when Dock in sidebar is clicked.
Fixed a crash on shutdown in the Outliner when an item tried to unregister from the Uncontrolled Changelists module in its destructor after the module was unloaded.
Foundation
New:
Allowed UBT to build individual plugins as though they were local.
Introduced Network component to CQ Test.
Prevented approved reference images to be copied to html test report for successful test.
Introducing Code Quality Test plugin. Extension of the Unreal Engine FAutomationTestBase to provide test fixtures and common automation testing commands.
Avoided displaying missing reference when image comparison was successful.
Allowed levels to turn off garbage collection clustering so that actors can be deleted.
Improvement:
UAT addcmdline (RunCommandline) is now passed during launching of application on all platforms, where previously it could be embedded in UECommandLine.txt. It improves iteration times on some platforms as final bundle doesn't need to be rebuilt every time.
Crash Fix:
Fixed crash when using Automation Wait node in BP when AutomationController is not loaded.
Bug Fix:
Avoided a crash with Screenshot Functional Tests in PIE client net mode.
Build
New:
Added "UnrealInsightsBuildConfiguration" option to the BuildAndTestProject build graph so the CompileTools step can build Shipping, Debug, or Development configurations of Unreal Insights.
Added the option to throw exception when plugin in DisablePlugins list is enabled by another plugin's dependency.
Added EngineIncludeOrderVersion for UE5.3
Made the AutomationTool emit an error code when it terminates on an exception. This will result in failing the operation instead of reporting a false success.
BuildUAT.bat\BuildUBT.bat will suppress all messages from file compare.
Added support for Clang PCH chaining: https://clang.llvm.org/docs/PCHInternals.html#chained-precompiled-headers.
Added support to compile separate files in VisualStudio using the "Compile" menu item when you right click on the files.
Added flags to CSV metadata for LTO and PG_Instrumentation. LTO will be true if Link Time Optimisation is enabled. PG_Instrumentation will be true if Profile Guided Optimisation is currently in Instrumentation mode for gathering PGO profiling data. This change can be used to show if a particular build was running under these parameters when looking at CSV performance reports.
Broke several hidden circular dependencies between engine modules.
Improvement:
Tweaked the engine PCHs to improve compile times.
Improved overall Visual Studio project generation time by updating the UBT code to be thread safe and run in parallel.
Bug Fix:
Previously the "-ini:" command line argument may have been ignored when sent to UBT. These will now be applied.
Previously when multiple "Target" command line arguments were passed to UBT, ConfigCache::ReadHierarchy could read arguments from other Target arguments. It will now only read from the intended "Target" command line argument.
Fixed an issue where the public dependencies weren't being added to the include path list.
Fixed some random intellisense compile issues.
Deprecated:
Deprecated TragetInfo::bUseMallocProfiler toggle. It is no longer used as MallocProfiler2 and FMallocProfiler runtime is removed in favor of UnrealInsights.
Core
API Change:
This breaks backward compatibility where WriteToString is used as a type or in a context where it would be copied.
Deprecated the FMessageDialog overloads that take the title by-pointer; use the overloads that pass it by-value instead.
Rename FInterpCurve
::InaccurateFindNearest into FInterpCurve ::FindNearest.
New:
Added additional FPackageName::ObjectPathToX functions:
ObjectPathToPathWithinPackage, eg) "/Game/MyAsset.MyAsset:SubObject.AnotherObject" -> "MyAsset:SubObject.AnotherObject"
ObjectPathToOuterPath, eg) "/Game/MyAsset.MyAsset:SubObject.AnotherObject" -> "/Game/MyAsset.MyAsset:SubObject"
ObjectPathToSubObjectPath, eg) "/Game/MyAsset.MyAsset:SubObject.AnotherObject" -> "SubObject.AnotherObject"
The behavior of ObjectPathToObjectName has been fixed to always return the leaf-most object name within the path (eg, "/Game/MyAsset.MyAsset:SubObject.AnotherObject" -> "AnotherObject"). Any code that relied on the old behavior should use ObjectPathToSubObjectPath instead.
Added FParkingLot, a framework for building locks and other synchronization primitives, based on WTF::ParkingLot from WebKit Added FMutex, a 1-byte mutex that is neither fair nor recursive, based on WTF::Lock from WebKit Added TUniqueLock and TDynamicUniqueLock, based on std::unique_lock.
Added UE_LIFETIMEBOUND macro to TStringBuilder to catch some cases where pointers are kept into temporary string builders.
Added -DDC-VerifyFix command to overwrite existing records and values that differ from newly generated records and values when using -DDC-Verify.
Added AppendV to TStringBuilder.
Converted WriteToString for TStringBuilder from a type to a function.
Added FMonotonicTimePoint and FMonotonicTimeSpan as an API for the monotonic clock exposed by FPlatformTime::Cycles64.
The PackageStore backend is now used to resolve dependencies for MemQuery requests.
ReplicationGraph amortize the cost of dormant Actor cleanup by allowing gathering Actor lists for one connection at a time.
Added FManualResetEvent, a 1-byte manual-reset event that is more efficient than FEvent.
Added FRecursiveMutex, an 8-byte unfair recursive mutex built on top of ParkingLot, as a drop-in replacement for FCriticalSection.
Added MemoryTrace implementation for Linux platform.
Added EnvOAuthSecretOverride parameter to Unreal Cloud DDC to allow providing an auth secret in the environment.
Refactored ListTexture command to output more data about UTexture derived classes.
When AGGRESSIVE_MEMORY_SAVING define is enabled, array slack growth factor will be set to 1.25x factor instead of an old ~1.375x This helps to save memory on platforms with no memory commit on a page fault for large arrays that are allocated directly by a page allocator and it saves memory on all platforms for smaller arrays (typically up to 64KB in size) that are allocated by a higher level allocator like MallocBinned.
Added TInstancedStruct to provide a type-safe wrapper for using FInstancedStruct in C++.
Added parallel decoding of FCompressedBuffer for targets with editor-only data.
Added FEventCount, an event type that provides a mechanism for avoiding a race between waiting and signaling through the use of a signal count token, and that is more efficient than FEvent.
Added -ExportBuildOutput command to include outputs in exported derived data builds.
Added partial implementation of GetResourceSizeEx for NiagaraComponent and NiagaraSystem.
Added a public API for structured log formatting in Logging/StructuredLogFormat.h
Added a way to upgrade existing sparse class data. Objects using sparse data can now override the ConformSparseClassDataStruct function to perform a custom upgrade step when loading a BPGC using a sparse data struct that no longer matches its archetype.
Added a new setting to CppStandardEngine so this can be controlled separately from the engine module.
Made AssetManager require engine use. The engine startup will give a fatal error if the AssetManager is not present.
Added ReverseIterate range adapter for reverse-iteration over ranges.
Adding ISaveGameSystemModule module, comparable to the platform chunk install module. Example usage added to Windows platform, allowing projects and Windows platform extensions to override the default save system.
[PlatformFeatures] SaveGameSystemModule=MySaveModule
Replaced enable-if/disable-if overloads with if constexpr blocks.
Allow any engine module to access Internal include paths from other modules.
Added a CBaseStructureProvider concept for detecting if a type is supported by TBaseStructure. Deleted the concept-checking second template parameter from TStructOnScope, which doesn't work so well with forward-declared types.
Added TCallTraits::ConstPointerType overrides for common smart pointer types so that they you can look up a TSmartPtr
in a map or set with a TSmartPtr key. Fixed some const incorrectness caused as a fallout. Cooker and SavePackage: Move calls to BeginCacheForCookedPlatformData and ClearCachedCookedPlatformData from SavePackage into the cooker to satisfy the contract that objects do not have Clear called until the Save is completed.
Added lifetime-bound annotation to TOptional::Get parameter to catch dangling references when an rvalue argument is bound to an lvalue reference.
Upgraded to PROJ 9.1.1 and VS 2022
Added SupportedTargetTypes attribute, allowing for ModuleRules to be marked as supported for only specific TargetTypes (Editor, Game, Client, Server).
Added SupportedPlatformGroup attribute, which will resolve to a SupportedPlatform attribute that contains all the platforms in that group.
Allow SupportedConfigurations attribute on ModuleRules.
Enabled tvOS support for Electra Media Player.
Added Engine.ini:[AssetRegistry]:CommandletsUsingAR to identify commandlets that should load the AssetRegistry at startup.
Removed legacy hash table locks when collecting garbage as they are no longer used.
Added range support for Algo::Partition.
Updated MFW's PlayerFacade with reworked handling for playback control and timing for "v2 timing" players like Electra.
Added a UE_REQUIRES macro which replaces the UE_CONSTRAINT* macros and is concept-compatible.
Support for project-specific BuildConfiguration.xml and Programs during project file generation.
Allow overriding bWarningsAsErrors on a per module basis for Unreal Build Tool.
Option to write MSVC SARIF files for any errors and warnings when compiling or analyzing for Unreal Build Tool.
Added Fwd.h headers for WeakObjectPtrs.
Limited Fastbuild process count.
Added support for intrusive TOptional null states. Added intrusive TOptional null states to TFunctionRef and TSharedRef as examples.
Moved untracked memory coming from the third party Eigen library into the UE allocators, making it trackable.
FInterpCurve
::InaccurateFindNearest has been improved. According to the accuracy of the new algorithm result, it has been rename into FInterpCurve ::FindNearest. Added Max display to containers in .natvis.
Improved comments for UE_DEPRECATED examples, adding examples for class templates and function templates.
Added the ability to implement a function override that can decide to force garbage collection if the engine is close to reaching UObject count limit.
Allow overriding windows application icon with TargetRules.WindowsPlatform.ApplicationIcon for Unreal Build Tool.
UE_FNAME_OUTLINE_NUMBER memory optimization.
Added TargetRules.bWarnAboutMonolithicHeadersIncluded to control UE_IS_?.
Changed [Get|Set]WrappedUObjectPtrValues to take a flag which says whether the pointer is 'in container' or not.
Allow usage of incredibuild on macOS.
Allowed TFunction's debugger visualiser to be set at a global level via UE_ENABLE_TFUNCTIONREF_VISUALIZATION.
Added FMRSWRecursiveAccessDetector that is zero-initializable, supports upgrading a reader access to a writer access recursively, and destruction from inside an access
Added override to the temp directory to a subfolder, and allow specifying a directory to use instead of the default %TMP% in BuildConfiguration.xml for UnrealBuildTool.
Added WindowsTargetRules setting to control Inline Function Expansion Level for UnrealBuildTool.
Updated support for minimum cpu arch for x64 platforms. Replaces ModuleRules.bUseAVX. MinimumCpuArchitectureX64, valid values are None, AVX, AVX2, & AVX512.
Allowed OpenVDB to be enabled via a macro in the .Build.cs rather than hardcoded at a platform level.
Shared common THIRD_PARTY_INCLUDES* macro definitions between compilers rather than between platforms.
Upgraded msvc preferred version to 17.6-14.36.
Allow multiple DPCVars processed in a loop to allow for multiple entries form the command line.
Added the option to dump per class UObject counts to log when the maximum number of UObjects limit is reached.
Implemented -CookIncludeClass=Class1+Class2+. This allows cooking only packages containing an instance of the given class or classes. This relies on assetregistry dependencies to find all packages that would ordinarily be cooked. Packages found through dependencies that are discovered only during load of their referencer are not guaranteed to be cooked.
Used a release channel enum instead of a boolean to check if a toolchain is preview or not, so we can support additional release channels for Unreal Build Tool.
Added debugger member expansion to FString, TStringView and FName to allow individual character indexing, and allows the raw char buffer to be accessed from a Referenced String or Name array.
Enable deterministic msvc compiles by default for shipping configuration for UnrealBuildTool.
Added move semantics and removed other unnecessary TSharedPtr reference count churn to TSlotBase::operator[] declarative syntax.
Added ExecuteOnGameThread as a wrapper for FTSTicker::GetCoreTicker.
Added UE::Tasks::MakeCompletedTask method that produces an already completed task with given result value.
Updated RiderSourceCodeAccess.
Added operator to TMap's key iterators.
Added key iterator tests.
Added UE_LIFETIMEBOUND to bit iterators and bit references to warn when lifetime issues occur (like holding onto an iterator to a temporary bitarray).
Added UniqueBy to remove duplicates from a range from a projection to apply to the elements, similar to std::ranges::unique.
Added FStringFormatArg to natvis.
Added FindFrom function to TBitArray to allow a user to provide a start index when searching for a value.
Allow cheat extensions to add bugit logging.
Added FTopLevelAssetPathFastLess and FTopLevelAssetPathLexicalLess function objects for performing comparisons on FTopLevelAssetPath.
Added serializers for TPagedArray.
Added Algo::Includes, based on std::includes.
Allow MallocStomp2 allocator to be used in the windows editor.
Oodle is now updated to version 2.9.10b
Added a checkbox option for PriamryAssetLabels to not include/follow redirectors.
Added FCoreDelegates::OnCommandletPreMain and FCoreDelegates::OnCommandletPostMain This allows things to hook in to provide additional initialization or shutdown logic for any commandlet that may be run.
Added a way for objects to specify property overrides local to the save context of a package.
Added two new commands to UAT:
VirtualizeProject - Used to run the virtualization process on an entire project.
RehydrateProject - Used to reverse the process on an entire project.
Replaced FInstancedStruct versioning implementation to use archive custom versioning.
Make serialization symmetrical so struct serialized in cooked builds can be loaded in Editor builds.
Added a new Settings parameter to a new FPlatformProcess::GetApplicationSettingsDir function for getting
%appdata%
in Windows, and$HOME
in macOS and Linux.Moved #includes around in the shared Engine PCHs so the PCHs are hierarchal. This fixes issues where removing or adding a private module dependency would drastically change compile times because the includes in the PCHs were different.
StaticMesh Asset Validation now verifies that an uncooked StaticMesh Asset has valid a LOD0 SourceModel.
The virtualize and rehydrate project commandlets now accept the command line parameter '-PackageDir=' limiting the operation to the given directory.
FEditorBulkData is now thread safe.
Added a new commandline parameter '-LocalOnly' to the 'GeneratePayloadManifest ' commandlet. This new parameter should be used to generate a manifest containing only payloads that are stored locally on disk.
Added FindComponentByTag method to Actor class, which returns the first component in an Actor with a given type and tag name.
Added support to give actions in UBT "weight". "Weight" is an average measurement of how many cores and memory an action uses. Using one core with a normal amount of memory for an action would be a value of 1.
Added a simple S3 HTTP client.
A new error flow has been introduced. If a payload fails to pull we now block the editor and show the user a dialog allowing them to retry the operation or quit the editor. We no longer allow the editor to continue with missing data due to the danger of corrupting existing packages on disk.
A warning is now logged when attempting to virtualize a package with a package version older thanUE 5.0, as the package would need to be re-saved in order for virtualization to work with it.
Enabled virtualization on static meshes and audio assets by default rather than being opt in.
The commandlet 'ValidateVirtualizedContent' now validates that all virtualized payloads in a project can be found in persistent storage. The previous functionality has been moved to a new commandlet 'CheckForVirtualizedContent'.
Updated the logic that determines which dependencies a shared PCH has. This new logic goes through all the includes of the pch header and finds the actual headers and modules used. This creates a smaller list of dependencies than before, which is later used to determine whether it is safe or not for the PCH to be used by other modules.
Enabled profile guided optimization support when using Intel ICX compiler 2023.1.
Enabled msvc strict conformance mode by default for projects set to BuildSettingsVersion.V4.
Added GetPropertyInstanceWithin to CPPStructOps so that classes like FInstancedStruct can have their internal properties reflected by property paths.
Improvement:
Improved multi-edit behavior of instanced struct instances
Editing multiple instanced struct instances will now edit the properties of the common struct of all instances (like object editing), rather than only editing instanced struct instances using the same struct type as the first instance being edited.
Always compile engine modules with C++20, unless the platform doesn't support it. Any module that sets bTreatAsEngineModule will be upgraded to c++20 unless it has already overridden it to c++17
Optimized StreamableManager::OnPreGarbageCollection.
Optimized TFunctionRef calling, as it can never be null. .
Removed FullLoadAndSave; it has been replaced in efficiency by MPCook, and further optimizations (concurrent save, async load) will also exceed it even without MPCook or Incremental Cook.
Improved deprecation comments surrounding the use of string conversion types and macros.
Improved comments on TBox and TIntRect to indicate how their Intersect, Contains, and IsInside Of functions handle overlaps on their borders. Fixed FVector parameter in TBox::IsInsideOrOnXY.
Optimized TChunkedArray::Add for speed.
Improved Clamp codegen.
Improved Swap codegen.
Optimized FScriptMapHelper::FindInternalIndex
FScriptSetHelper::FindInternalIndex now returns INDEX_NONE when the user provided index is out of bounds.
Crash Fix:
Fixed crashes and errors when using OIDC functionality from DesktopPlatform.
Fixed a crash after a failed request lookup in the CotF server.
Fixed a crash when shutting down the media player.
Fixed a crash when duplicating object with a within class in component instance data cache.
Fixed crash when doing recursive async loading in the legacy loader.
Bug Fix:
Updated FPaths::Combine method to work with FStringView.
Sparse data properties will be favored if they match the name of a deprecated object property. This allows Blueprints to function when object data is moved to sparse data, and the original object property deprecated.
Added a few missing definitions that were preventing "Debug Editor" builds of projects that disable GC from linking.
Fixed structured logging to work with Live Coding.
Added ElementType to TSubclassOf.
Fixed alignment and thread safety issues in FMallocStomp and TConcurrentLinearAllocator.
Fixed error reporting during execution of static destructors to avoid crashing on a destroyed lock.
Fixed merging and filtering of partial records in the derived data cache hierarchy.
Fixed vtable constructor to UAssetRegistryImpl to invoke the proper base class constructor. Code would asset during a Live Coding session. However, the asset registry does not support live coding.
Fixed using the TMap element after removal.
Fixed mismatch string formatting argument in SavePackage2.
Fixed assert firing in Debug mode when calling FScriptArrayHelper::MoveAssign.
Fixed FName == C string bug and added string view comparisons.
Fixed FStringView's operator!= which could result in circular overload resolution.
Added perfect forwarding of delegate Execute arguments.
Added a static assert when casting a non-UObject to an IInterface.
Set the chunks of the generated package equal to the chunks of its generator.
Fixed a mismatched user-defined copy constructor/assignment operators and their associated bugs.
Fixed a potential invalid quote count in CSV parser and added overloaded constructors for move semantics.
Fixed TSortedMap's key iterators which didn't compile.
Fixed issue where Electra Media Player would return incorrect HDR information after seeks.
Made FPlatformProcess::WritePipe use proper UTF-8 conversion rather than truncation.
When collecting objects referenced by properties, the property owner object will no longer be excluded and instead the owner of the reference list will be excluded to make sure all references are property exposed to the Garbage Collector.
Changed a texture on a material instance will now add the new texture to the material's Garbage Collector cluster.
Fixed JsonSerializer output where data loss occured when NumberStrings were being written as numbers, instead of strings.
Made ensure conditions likely when !DO_ENSURE.
Fixed inverted logic in FBindingObject::IsA<>.
Updated GenerateTLH to build and touch the output file with one command, to prevent cases where the .tlh doesn't exist and isn't created. Allow typelib headers to be generated when using the clang compiler, by using the toolchain's compiler to generate them instead.
Fixed TBitArray being implicitly constructible from a TBitArray of another allocator to stop accidental dangling references when constructing a const bit iterator with the wrong allocator type.
Fixed implicit conversions when comparing or doing bitwise operations between bit arrays with different allocators.
Removed 1 extra virtual function call (or more if ArrayDim > 1) from object-based Copy*ScriptVM property functions by having an implementation per property type instead of a top level override, also removing the need for the FSoftObjectPtrProperty::Copy*ScriptVM overloads.
Fixed invalid string length handling in FCborReader::ReadNext.
Allow AdditionalPlugins for use in multiple projects.
Fixed inverted assert conditions in Algo::Heap method.
Fixed FThreadSafeCounter64's copy constructor taking FThreadSafeCounter.
Automation Tool will now respect specified error level for commandlets.
Added a check for invalid counts in FScriptArrayHelper::Resize.
Fixed THIRD_PARTY_INCLUDES_END for Clang on Windows.
UnrealBuildTool will not pass /Zm unless specifically overridden.
Added a check for invalid reserves in TSet.
Fixed TMap::FilterByPredicate discarding template arguments in return type.
Fixed Clang static analysis false positives in our operator delete overrides by disabling them.
Removed redundant Unbind call from TDelegate's destructor.
Added guards to stop property size calculation overflowing.
Fixed Unreal.natvis to allow container indexing in the debugger.
Made FHeightField::FData::Serialize avoid using TArray
>, as FBoxFloat3 is immovable and shouldn't be used by movable allocators. Object Handles will be initialized with the actual global UObject array capacity instead of the max UObject count value from ini since the actual array capacity may be larger.
Fixed broken bAddDefaultIncludePaths UBT setting.
Fixed a GeoReferencing issue where the data files were not found in a sandboxed environment.
Fixed incorrect size being reported by TArray's overflow checker. Fixed negative int32 sizes being reported as large uint64 sizes..
Fixed EnumAddFlags and EnumRemoveFlags to not require operators on the enum.
Made TIsCharType work with cv-qualified types.
Made sure running out of available UObject slots crashes regardless of checks being enabled or not otherwise it will silently result in stomps or out of memory crashes.
Added weak pointer to archetype cache to prevent returning stale pointers.
FProperty references resolved in PostLoad will now properly add their referenced objects to the bytecode owner UStruct's reference list.
Fixed rsca for toolbox 2 0 in rider.
Non-nullable object properties should now have a default object value assigned to them in case of serialization errors.
Fixed mismatch string formatting argument in core test.
Replaced some TArray operator new usage.
Fixed a bug that truncated the lost of valid paths when emitting an error about an invalid package name.
FMicrosoftPlatformString::Strupr is now consistent with other platform implementation and works with non-null-terminated strings.
FScriptMapHelper::Iterator and FScriptSetHelper::Iterator post-increment operators were pre-incrementing.
Made BuildU[A|B]T.bat explicitly call the Windows find.exe utility.
Fixed DrawDebugCircle to draw correct number of segments.
Fixed LLM not setting the program size.
Fixed UEngine::DrawOnscreenDebugMessages function which was returning the wrong value.
Deprecated:
Deprecated the FMessageDialog overloads that take the title by-pointer; use the overloads that pass it by-value instead.
Deprecated Engine::FindAndPrintStaleReferencesToObject as it was moved to FReferenceChainSearch.
Deprecated Engine::FindAndPrintStaleReferencesToObject and moved PrintStaleReferencesOption to its own file for better compile iterations. Moved FindAndPrintStaleReferencesToObject to ReferenceChainSearch.
Deprecated four FBulkData flags that no longer serve any useful purposes: BULKDATA_Unused, BULKDATA_ForceStreamPayload, BULKDATA_SerializeCompressedBitWindow and BULKDATA_BadDataVersion
Starting to remove support for delegate policies as they are incompatible with threadsafe delegates.
Removed usage of TRemoveConst and deprecated it.
Removed the deprecated rebasing Actor and the dependency to the rebasing offset.
Deprecated hashing arrays and TCHAR* with GetTypeHash.
Deprecated TScriptDelegate
. Replaced TModels traits class with TModels_V.
Deprecated UE_GC_TRACK_OBJ_AVAILABLE macro and simplified available UObject count tracking.
Moved FScriptSetHelper::HasElement and FScriptMapHelper::HasKey to the editor.
Removed DISABLE_DEPRECATION macro.
Removed UUnsizedIntProperty and UUnsizedUIntProperty which have been broken since the move to FProperties.
Removed UE::Core::Private::FWrappedObjectPtr, since it's unnecessary now that we have FObjectPtr.
Deprecated TRemoveCV.
Replaced TIsTArray trait class with TIsTArray_V.
Made ApplicationWillTerminateDelegate thread-safe: deprecated FCoreDelegates::ApplicationWillTerminateDelegate (because thread-safe delegates can't be statically initialised) and added FCoreDelegates::GetApplicationWillTerminateDelegate accessor for a thread-safe delegate.
Deprecated global Sort and StableSort functions. They only support an index type of int32 and can produce unexpected/undesirable behavior due to their use of TDereferenceWrapper. Uses of these functions have been replaced with the versions in the Algo namespace.
It is no longer possible to virtualize engine content and so the following config file options have been deprecated:
Engine:[Core.VirtualizationModule]:FilterEngineContent
Engine:[Core.VirtualizationModule]:FilterEnginePluginContent
Removed:
Removed GIsUCCMakeStandaloneHeaderGenerator since C++ UHT no longer uses engine types.
Removed core delegates deprecated in 5.2.
Removed the old FTicker that was deprecated in 5.0
Removed EGCOptions::WithClusters to reduce the number of template instance permutations in Garbage Collector code and improve compile times.
Dev Tools
New:
Removed C++ Unreal Header Tool (UHT).
Ported C# Unreal Header Tool
UhtBuffer
to new objects that use ArrayPool.Add non-persistent metadata to the
CsvProfiler
.By default csv metadata persists between captures which may be problematic if capturing different modes that have specific metadata since prior captures can pollute future ones.
This change adds a
CSV_NON_PERSISTENT_METADATA
macro which sets metadata that is cleared once the current capture ends.
[UnrealVS]
Added "Generate Assembly" menu option that asks UBT to compile a single file and generate an assembly file.
Upgraded
UnrealVS.vsix
to version 1.84.3
Added the ability to define new documentation policies and specify a default policy.
Added ability in UHT for arrays to be sized using
static_cast
.Added the
Build
directory as a location UBT scans for UBT plugins.[PerfReportTool] Added support for date formats and disabling column word wrap.
Added the ability to compute a hash from a slice of an array.
Modified UHT to not emit unused
#define
directives.Updated UBT project code analysis to 4.2 and text encoding to 6.0.
Added the ability to set the
IoHash
directly in the file hasher[UnrealBuildTool]
Added option to generate assembly files while compiling C++ files.
Supported only on MSVC compiler for now.
Generated files have the
.asm
extension and are located in the same Intermediate folder as the corresponding.obj
.
Added generic double buffer async file reader with the ability to specify buffer sizes.
[Horde] Optimizations to Horde storage when dealing with larger data:
Added ability to specify buffer size with
FileNodeWriter
methodsCreateAsync
andAppendAsync
.Added ability to copy a
FileNode
tree directly into a stream without creating the nodes themselves.When reading data, avoid creating
byte[]
for the cache if the cache is not enabled.Reduced default read size from 15MB to 1MB when caching isn't enabled.
New
ReadNodeAsync
method that invokes a callback with the data instead of creating the node instance.TreeWriter
uses the current packet's full memory buffer size to detect the need to resize indead of the max packet size.New bundle test for the streaming of
FileNode
directly to a stream.
Removed comment and tooltip metadata from shipping builds.
Added Apple Silicon native binaries for
GitDependencies
.Added
ErrorIfNotFound
option toMoveTask
to allow throwing an error if the specified file is not found. This option is disabled by default.Optimized Visual Studio created projects and they are now much smaller.
Added validation logic to Unreal Build Tool (UBT) to ensure that plugins do not have dependencies on any plugin that is sealed.
[UGS] Error dialogs shown at the end of syncing (unresolved files, files needing deletion etc) are now focused when the UGS window is selected. In addition the UGS taskbar entry flashes before showing these modal dialogs and at the end of the sync to try and get the users attention.
Added a new
bEnableLibFuzzer
option for desktop platforms.
Improvement:
Improved C# UHT file reads by limiting the buffer size to reduce garbage collection stress.
Modified the
ComputeAsync
hash method to provide a file size hint so it can default to a larger buffer size to improve performance.Modified the
ComputeAsync
hash method to use the double buffer reader above.Enhanced UHT to be able to parse more C++ attributes.
Improved checks for keywords placed in invalid conditional blocks.
Crash Fix:
Fixed Hot Reload and Live Coding to not bother serializing delegates and bulk data. Delegate serialization was causing asserts with new concurrency checks and could have resulted in crashes in the past.
Fixed live coding shutdown to eliminate a crash on exit.
[UGS] Disabled "Open Project..." when right clicking in the main window unless the context menu was opened over a valid tab. This prevents a crash when attempting to open an invalid project.
Bug Fix:
Fixed Unreal Build Tool (UBT) log event level check that resulted in spam to the logger.
Fixed issue where modules that were not currently loaded could prevent live coding from patching modules that were.
Fixed issue where using live coding with the Clang compiler would generate "unresolved external" errors.
Live Coding no longer generates errors about object files being missing after a source file is removed from a unity file by live coding.
Removed unnecessary iteration in
GetMaxEnumValue
in UHT.Fixed issue with UBT where the
UE_TARGET_NAME
isn't the actual target name. This resulted in Hot Reload and Live Coding to no longer work when used with a non-unity build.Fixed C# UHT to allow functions with parameters in
WITH_EDITORONLY_DATA
blocks.Fixed issue where the check for first header include was not being reported as an actual warning/error.
Fixed issue where Live Coding would fail with "unresolved external symbols" when used with Clang.
Fixed Live Coding Console to handle the patching of coroutines.
Fixed C# UHT strict documentation tests for function.
Fixed an issue with Live Coding where large projects might not have enough memory reserved around libraries preventing patching.
Fixed an issue where C# UHT metadata did not issue value change errors in metadata.
Fixed an issue in Live Coding preload module support where, if a module name is known but not currently loaded, then the engine would generate a check.
Fixed an issue where C# UHT failed to generate an error when an interface function was marked as
BlueprintPure
.Fixed an issue where UBT failed to detect C# UBT plugins in the game folder.
Fixed an issue in C# UHT where, if a structure referenced itself, then it would end up in an infinite loop.
Fixed a rare threading crash when starting
UnrealPak
.Fixed an issue where, if Unreal Header Tool (UHT) export code threw an exception, the build did not display the error message or fail the build.
Fixed UHT issue where invalid code would be generated if all
FieldNotify
properties in a class were marked as editor-only data.
Deprecated:
[UnrealFrontend] Disabled old Profiler (
UnrealFrontend/SessionFrontend/Profiler
).Old Profiler was deprecated in UE 5.0.
Use
Trace/UnrealInsights
instead.Added
UE_DEPRECATED_PROFILER_ENABLED
global define toggle. This is off by default. This allows you to temporarily re-enable Profiler if needed; seeUnrealFrontend.Target.cs
.Profiler module/code will be removed in a future UE version.
Removed:
[UnrealFrontend] Removed the deprecated
MEMORYDUMP
run command.
Insights
New:
Added FInstallBundleSuppressAnalytics class to help suppress install bundle analytics that avoid spamming during a specific bulk operator.
Enabled Unreal Trace Server for all platforms.
Unreal Trace Server now supports all desktop platforms (Win64, Mac, Linux).
Precompiled binaries are now included for Linux and Mac. This removes the need to run Unreal Insights program when tracing on those platforms.
Added user interface for displaying connection status to trace store.
Added logic to re-connect when the connection to the store server is lost.
Added user facing message events in TraceLog. Previously, errors in TraceLog would silently stop traces without any information to the user. This adds a way to receive those messages and log them using regular engine logging.
The new session id is now used when requesting a process current trace session. This resolves the issue with getting the current session, when the machine has many live sessions running at the same time.
Added persistent settings for Unreal Trace Server which allows setting changes to be retained after restart. Settings can be changed without restarting the server.
Added UE_TRACE_METADATA_RESTORE_SCOPE(MetadataId) macro.
Added alloc event callstack id and free event callstack id in tooltip of the Callstack column for Memory Insights.
Added a package field to the asset metadata scope, in addition to the existing asset name and object class fields.
Added the "screenshot" trace channel to the "default" channel preset.
Symbol resolving now automatically tries to remap known packaged renamed binaries to their original filename.
xmake is now used for building Unreal Trace Server on all platforms.
Added LLM tracking for TraceLog memory usage.
Made TimingView.AutoScroll option persistent in ini file for Timing Insights.
In Timing View, when Ctrl is pressed while clicking an event to be selected, the time interval that includes both the old selected event (if any) and the new selected event will be also selected.
Added "Project Name", "Other Metadata" info, if available and added "TraceId" as an optional metadata.
Added FD3D12Adapter::TraceMemoryAllocation and D3D12PoolAllocator to resolved symbols filter in Memory Insights.
Added support for unlimited number of heap specs in Memory Insights. Previously, it was limited to 256 heap specs.
All trace files now contain a metadata field with a session id and a globally unique trace id. Session id can be set from the command line to group session from many machines together. If no session id is specified a random one is generated.
Memory Insights / Mem Allocs table: - Improved the status bar text display of query info, query status, number of allocs and added number of filtered allocs.
Added status bar text info for selected items (including the total alloc count and total mem size of selected items).
Added tracing for the existing "Stats_GPU_*" float counters when "stats" trace channel is enabled.
Added project field in session info event, separate from the app name. Previously we used project name rather than app name if it was available.
Added Get*ProviderName public API for all providers. Refactored the IModule derived classes to ensure consistent implementation.
Tree Table View improvements:
Increased font size and updated text colors (ex.: when tree node is hovered/selected/filtered).
Added default icons and colors for tree nodes.
Added custom color for group nodes created by Callstack and Tags groupings.
Clip tracing of asset loading debug name to 1024 characters.
Updated Unreal Insights version to 1.04.
Memory Insights: Added option to include heap allocs in mem queries.
Memory Insights: Added analysis support for NeverFrees heaps.
Added limit for the number of log warnings generated.
Added EnterScope_TB / LeaveScope_TB (timestamps relative to BaseTimestamp) events ans to EnterScope_TA / LeaveScope_TA (absolute timestamps).
Network insights - Modified filtering to include sub-events when filtering packet content events.
Added delta time display of selected range of packets. Filtering now supports using filter by NetId and EventType in combination, which is useful to highlight specific events for a specific instance.
Improvement:
Users can now change store settings in Unreal Insights. Currently the user can change:
Store directory: The directory where new traces are stored.
Watch directories: A set of directories monitored for trace files. For example users can add their download folder and automatically see downloaded traces in the session browser.
Optimization:
Refactored the IProvider / IEditableProvider interface for Trace Services to avoid diamond problem.
Crash Fix:
Fixed crash in Frames track when there are no frame series created yet.
Bug Fix:
Fixed a deadlock that occured when stopping a trace with the "Open Trace in Insights" option enabled.
Avoid locking TraceAuxilliary destination and connection type while issuing delegates.
Restored Uri functionality for traces (backward compatibility with current/older UTS).
Disabled a trace session after it was renamed, until the trace id is properly updated the trace name changes color to grey.
Fixed focus for the trace sessions list (initial focus and after renaming a trace).
Improved Session Browser UI responsiveness when using a remote/slow trace store connection.
Fixed opening a trace from a remote trace store. The new UnrealInsights process is launched by specifying the store address in addition to store port. The trace id can now be specified as hex number (prefixed by 0x).
Return allocator result in the case of zero sized allocations. Remove checks for zero sized allocations in Trace's allocation wrappers leaving it to the allocator implementation to decide. Analysis already supports zero sized allocations (as long as they have unique addresses).
Fixed late connect for the Counters trace channel.
Changed TraceAuxilliary internal management of tracing status and trace destination.
Tree Views for Allocs Table, Tasks, Packages now have Separated tree view node filtering by hierarchy filtering. The order of async operations was changed. Node filtering (i.e. advanced filtering using the Filter Configurator) is applied first. Then grouping + aggregation is applied. Then sorting is applied. Finally, the hierarchy filtering (i.e. text search) is applied.
This enables text search (hierarchy filtering) and advanced filtering (node filtering) to be used in the same time. Also, the aggregation is now applied only once. These changes enables significant performance improvements for the tree operations, especially when node filtering is applied.
Disabled Rename/Delete trace files when using a remote trace server.
Fixed updating the list of traces. If list is scrolled on bottom it will remain scrolled on bottom also when new traces are added.
Fixed initial channels example (including a typo) and usage of "default" preset to include "region" and "screenshot" channels (Connection tab).
Fixed trace recorder IP address to be prefilled with correct IP or host name of (remote) trace server (Connection tab).
Trace store uses entire path for id. Only using the stem hides files with the same name present in multiple mounts.
Fixed a missing check to make sure the entire packet was sent. This guards against any low level transmission errors.
Updated Unreal Trace Servers readme to reflect dynamic ports used.
Fixed missing channel check for metadata restore scopes.
Fixed Trace.Screenshot not working when not running PIE or simulation.
Fixed realloc scopes for the video memory allocations. Previously only realloc scopes for system memory were supported.
Fixed late connect support for the "stats" trace channel. Changed the batch trace event to always start with an absolute timestamp value (instead of being relative to previous event).
Reduced the overhead of stats tracing when the "stats" channel is not enabled.
Fixed memory tracing for block allocators used by TConcurrentLinearAllocator ,FOsAllocator, FAlignedAllocatorInternal, and FOutputDeviceLinearAllocator's block allocator.
Fix to try to update symbol search path until module provider is created. Previously the symbol search path string was updated only whenever the panel was reset, which doesn't always correspond to when the module provider was created, leaving the string blank until the panel was recreated.
Counters: Fixed "Export Values/Operations" incorrectly saving all values/ops for selected counter even if a timing selection is made in the Timing View.
Counters: Added name of the selected counter in the default filename when exporting values/ops.
Changed zoom in and out with mouse wheel to auto-pin the hovered track in the Timing View.
When opening the profiling directory from the Insights Status Bar Widget, the folder will be created if it does not exist.
Fixed trace analysis for scoped trace events.
Added explicit support for counters with dynamic name.
Added support for hierarchical Clear and Restore scopes. The Clear/Restore scopes replaces the current metadata stack with an empty/saved metadata stack and restores the previous metadata stack at the end of scope.
Fixed scope of metadata and mem tag for mem allocations made by the trace system (extends scope over the original allocator calls). So, heap allocations will inherit same "trace" tag.
Fixes for traced metadata scopes applied in tasks.
Fixed log messages in memory analysis regarding TagTracker errors when memalloc channel is not enabled.
Fixed time for scoped events to be relative to base timestamp at runtime. This allows packing on 8 bytes (as in trace protocol 5).
Level streaming profiling is now disabled on the server by default.
Deprecated:
Removed RenderCore's FTracingProfiler which is deprecated since UE 4.26. Please use Trace system and Unreal Insights instead.
Added UE_STATS_MEMORY_PROFILER_ENABLED to toggle on/off code related to MemoryProfiler in STATS system. It still requires STATS to be enabled and "-MemoryProfiler" to be specified in cmd line.
This is off by default as MemoryProfiler in STATS system functionality is deprecated in UE 5.3. For memory profiling, use instead Trace/MemoryInsights and/or LLM.
Removed the deprecated MemoryProfiler runtime:
Removed the deprecated MemoryProfiler2 tool. Use Unreal Insights (Memory Insights; -trace=memory) instead.
Removed:
Removed usage of MessageLog on analysis thread. With this change direct usage of MessageLog in the analysis engine is replaced with a callback system which allows the user of TraceAnalysis to implement display of the messages themselves.
Framework
New:
Moved all FInstancedStruct code that depends on the Engine module into a new StructUtilsEngine module. This allows modules that can't depend on the Engine to use FInstancedStruct.
Added nested containers support to PropertyBag (TArray
>) with a max depth of two. Added a DisallowedPlugins list that restricts which plugins can be used.
Added an experimental Plugin Reference Viewer tool that displays a plugins dependency graph. The experimental tool is disabled by default. You can enable the PluginReferenceViewer Access tool from the plugin browser window.
Added a new 'Sealed' plugin concept that will prevent other plugins from depending on a plugin.
Fixed an issue that would result in broken package references when creating new plugins using a plugin template that contains assets.
Added a NoCode plugin descriptor property that prevents a plugin from containing any code or modules.
Added a plugin template
subfolder
property to define the sub folder a new plugin will be created within.Fixed an issue where creating a new plugin that could sometimes fail if the asset register scan is still pending during the plugin creation.
AI
New:
Added the experimental plugin Learning Agents. Learning Agents allows you to train AI characters using machine learning. This enables you to augment or replace traditional game AI, such as those written with behavior trees or state machines. In particular, the plugin allows you to use reinforcement and imitation learning approaches. In the long term, Learning Agents aims to be useful in a range of applications, including physics-based animations, game-playing NPCs, and automated QA testing.
Converted AI-related Asset Actions to Asset Definitions. This applies to State Trees, Behavior Tree, Blackboards, and Environment Queries.
Bug Fix:
Fixed an issue where ZoneGraph would automatically build when the Build Zone Graph While Editing flag was enabled in Project Settings.
Deprecated:
Deprecated UAvoidanceManager::bAutoPurceOutdatedObjects. Please use bAutoPurgeOutdatedObjects instead.
AI Behavior Trees
New:
Add a Default Blackboard config option for Behavior Trees.
Exposed Behavior Tree Editor functionality to be inheritable and accessible from other modules. Also introduced some smaller Behavior Tree Editor UX improvements.
Added a tooltip to the Behavior Tree context menu node descriptions.
Crash Fix:
Fixed an issue where setting the KeyType to None in the base class of UBlackboardKeyType_Object would cause a crash.
Bug Fix:
Fixed an issue where the BehaviorTreeEditorModule custom Toolbar Extenders were not being applied correctly.
AI Debugging
New:
A newly created row in VisualLogger will now be hidden if all added items are filtered out by category verbosity.
Improvement:
DebugDrawService now uses synchronization objects for delegate unregistration to prevent RecreateRenderState_Concurrent from registering and unregistering delegates from multiple threads.
Bug Fix:
Fixed the position of the debug text for UE_VLOG_OBOX.
AI Navigation
API Change:
FZoneGraphPathFilter now has an optional fourth FZoneGraphTagFilter parameter in its constructor.
New:
Added FZoneGraphTagFilter to FZoneGraphPathFilter so that FZoneGraphAStarNode can perform pathing requests using a given tag filter. Fixed UZoneGraphTestingComponent to properly use QueryFilter when performing a pathing request.
The oversized dirty area warnings now work with active tile generation (including Navigation Invokers). This fixes multiple unnecessary warnings when dirty areas are not touching the active tiles.
Added AgentMaxStepHeight to FNavMeshResolutionParam.
Added a display message when the Navigation Mesh version is compatible, but not the latest.
Added Navigation Invoker priorities (ENavigationInvokerPriority).
Fixed an issue where using LazyModifiersGathering by reading the resolution after GatherNavigationDataGeometry resulted in an Navigation Mesh resolution issue.
Added a task count and task wait time per layer to the CSV Profiler.
Added a log category and logs detailing invoker registration to LogNavInvokers.
Added a NavInvokers CSV category and track invokers count in CSV to the CSV Profiler.
Added tile generation history and stats when LogNavigationHistory is set to Log.
Increased the height where the Navigation Mesh can generate (now using 29 bits instead of 15, allowing 26000 km of altitude when using 5 cm CellHeight).
Changed rcCompactSpan to use rcSpanUInt for y.
Bumped the priority of dirty tiles near Navigation Invokers when sorting by invokers priority.
Added support for Geometry Collections in UNavModifierComponent. Before this change, a UNavModifierComponent on a Geometry Collection would not find the physics for the proxy mesh and fallback on an arbitrary FailsafeExtent.
Added support for Navigation Mesh resolution when doing async navdata gathering.
Added a console variable to toggle Navigation Mesh resolution.
Added NavMeshResolution to UNavModifierComponent.
Renamed the navigation console commands prefix from n. to ai.nav.
Improvement:
Added Navigation Mesh generation optimization when using it with Hierarchical Instanced Static Meshes. This avoids gathering unnecessary geometry when building tiles.
Added optimizations to UHierarchicalInstancedStaticMeshComponent::GetOverlappingBoxTransforms.
Crash Fix:
Fixed an issue where modifying the NavigationRelevantData array during garbage collection (when FRecastTileGenerator::AddReferencedObjects is called) would result in a crash. The change moves emptying NavigationRelevantData to the main thread so that it does not occur at any moment.
Bug Fix:
Fixed a memory leak in FNavigationOctreeElement operator and added move operators.
Fixed an issue that would result in a crash if there was no Navigation System.
Fixed an issue in UGeometryCollectionComponent where the bIsDynamicObstacle flag from UNavCollisionBase was not taken into account when exporting UGeometryCollectionComponent.
Made UWaterMeshComponent not navigation relevant. This fixed an issue with hundreds of Navigation Mesh tiles being dirtied when adding a UWaterMeshComponent.
Fixed an issue where building navigation when there was nowhere to build caused reduced editor performance.
Fixed an issue when using the async flag where saving files using source control in WorldPartitionNavigationDataBuilder would cause an error. This fixes the "MarkForAdd, Error: Failed mark the file" issue that could occur during build.
Fixed Navigation Mesh holes on steep slopes caused by a rasterization issue (this also fixes Navigation Mesh issues in stairs). Also added the ai.nav.EnableSpanHeightRasterizationFix console command to disable the fix if needed.
Fixed an issue that would result in memory corruption from FRecastTileGenerator::MarkDynamicAreas.
Fixed an issue where using SAVE_Async would not wait for async file writes before adding packages to source control.
AI Smart Objects
New:
Moved registration to BeginPlay and unregistration to EndPlay for components used in a Game world. This will allow conditions to rely on a fully initialized Actor in case they need to access other components. It will also make it easier to spawn an Actor with a SmartObject component and set up its definition before finishing the spawning.
Added new methods to the API to filter a list of request results or slot handles by evaluating the selection preconditions.
Filter methods can accept external data as a struct with properties whose name and type match the WolrdConditionContext.
FSmartObjectUserContext has been introduced to cover the common case of passing in a user Actor to the context.
UserDescriptor is now stored as an instanced struct in the runtime slot.
Claim methods now receive a user descriptor.
Removed slot event delegate and reused the runtime instance one instead.
Listeners can now filter for a given slot using Event.SlotHandle.
Removed User Tags from the SmartObjectWorldConditionSchema. The User Tags are part of the query filter. Conditions requiring User Tags could fetch them from the Actors passed in the context.
Public methods relying on EvaluateConditionsForFiltering now validate that the Slot Handle is set and not stale. In such a case, a log message will be emitted that suggests to the user to call IsSmartObjectSlotValid to handle that scenario on the call site and avoid the log.
Added IsBoundToSimulation to the SmartObjectComponent to differentiate a registered component (valid Handle) from a registered component bound to the simulation (linked to its runtime instance).
Added unit tests for IsBoundToSimulation, RemoveComponentFromSimulation, and UnregisterSmartObject sequence to simulate the EndPlay issue.
Removed dependency on MassEntity to store slots.
A new icon is now used for SmartObjectPersistentCollection, SmartObjectComponent and SmartObjectDefinition.
Improvement:
Improved Blueprint integration with the Smart Objects subsystem.
Deprecated the pure version of FindSmartObjects and added a new non-pure Blueprint wrapper that allows proper iteration of the returned objects.
Changed the subclass parameters to use values instead of const references to allow direct selection on class pins.
Bug Fix:
Fixed an issue with container removal where removing multiple sequential entries in a batch would result in improper recomputed bounds.
RemoveComponentFromSimulation is now properly unbinding the component.
Unbinding a component from the simulation won't invalidate the registered handle anymore; this is handled by the FSmartObjectContainer.
Removed obsolete RuntimeCreatedEntries which was replaced by the registration type.
DebugUnregisterAllSmartObjects will no longer cause an ensure when calling EndPlay with the previous fixes.
AI State Tree
New:
Added the ability to disable States and Tasks. In addition, it is now possible to force a condition result to true / false.
Improvement:
Improved the way that property names are reconciled when they change.
Added PropertyGuid to FStateTreePropertyPathSegment to allow reconciliation.
Changed Blueprint class and User Defined Struct property names.
Changed FStateTreePropertyPath to optionally handle property redirects and BP/UDS name changes.
Renamed UpdateInstanceStructsFromValue to UpdateSegmentsFromValue to better reflect its use.
Improved State Tree editor bindings to update when BP/UDS properties are changed.
Bug Fix:
Fixed an issue that would result in ID clashes when duplicating transactions. In addition, added several editor fixes.
API
New:
The plugin manager can now find plugins using a plugin descriptor.
Instance static mesh components API improvements.
Added array view version of batching transform updates.
Added option for passing sorted array to removal function.
Audio
New:
Added a function to override the runtime format in FSoundWaveData.
[Audio Modulation] Added AD Envelope Generator. This is useful for temporarily modifying the volume of a control bus.
[MetaSound] Added support for integral underlying types to TEnum.
Added Deactivate All Bus Mixes BP function. This is useful to clear out all active mixes when changing game state.
[MetaSound] Added the ListenerOrientation and SourceOrientation parameter interfaces.
The WaveTable plugin now supports fidelity and performance tuning and a more intuitive data usage mode for sampling and granulating.
Added Runtime MetaSound Builder to support building MetaSounds via code or Blueprint and auditioning in the MetaSound DSP graph in real-time.
Added functions to SynthComponent for setting pre-sends and post-sends for AudioBuses and SourceBuses.
Improvement:
The IsSeekable method in USoundWave is now virtual.
You can now get the values of non-audio outputs of playing MetaSound Sources. See UMetaSoundOutputSubsystem for more information.
Added Modulation Destinations to the Synth Component.
[MetaSound] TVertexAnalyzerForwardValue now remembers LastValue to prevent unnecessary data pushes.
[MetaSound] Added support for passing parameters.
Changed the address of audio parameter transmitters from using AudioComponentID to a hash derived from NodeWaveInstanceHash, PlayOrder, and the Component ID.
WaveTableBanks now support serialization as 16-bit assets and perform runtime bit-depth conversions where necessary.
Abstracted the Waveform Editor toolset into a utility collection to be used as generic sample sequence display tools.
Refactored Waveform Editor Widgets to remove the use of RenderData.
You can now re-import assets within the Waveform Editor.
Audio inputs now use WASAPI for device management on Windows operating systems.
[Sound Cues] When Override Attenuation is selected, Attenuation Settings will now gray out to better communicate the override.
Added a NumRepeats field to the TriggerRepeat MetaSound node.
Crash Fix:
Fixed a crash that would occur when reimporting an audio file over a Sound Wave marked as Ambisonic.
Fixed a crash that would occur when importing audio files.
Bug Fix:
[MetaSound] TVertexAnalyzerForwardValue now initializes LastValue on first execution as expected.
Fixed a bug where logging the default audio settings displayed 0 for max channels.
[Audio Modulation] Added a missing tooltip on the Control Bus Mix Stage Value parameter.
[Audio Modulation] Fixed a bug where Audio Component Modulation ignored inheritance from SoundWave.
[MetaSound] TVertexInterfaceGroup's variadic constructor arguments are ensured to be move-constructible to the group's base type.
Fixed a bug where a member could share a name with an existing namespace member already on the parent MetaSound Source.
[MetaSound] The WavePlayer node will now immediately fire OnFinished if no WaveAsset is passed in.
Wave file metadata chunks will now be preserved in USoundWave assets when converting bit depth of the source file.
Fixed an issue with bus and submix sends on muted Sound Waves.
Fixed a miscalculation related to a WaveTableBank's entry tail percent.
[Sound Cues] Fixed a divide by zero bug in the Enveloper node.
Fixed a bug that would cause audio to not play in sequences when cooked audio is referenced in the current level.
Deprecated:
Deprecated the Steam Audio Plugin.
Deprecated the Modulator parameter on the Modulation Destination Settings.
Blueprint
New:
Added facility to make explicit and validate UBlueprint and UBlueprintGeneratedClass subclasses. Subclasses can publish their mappings from the methods: IKismetCompilerInterface::OverrideBPTypeForClass, IKismetCompilerInterface::OverrideBPTypeForClassInEditor, and IKismetCompilerInterface::OverrideBPGCTypeForBPType.
Blueprint functions that take parameters by reference no longer require Blueprints that call the function to connect the pin corresponding to the parameter(s) that are passed by reference. This makes it easier to toggle a Blueprint parameter to be passed by reference.
Linear Color ToHex is now exposed to Blueprint.
Added a Blueprint callable function to shuffle an array using a 'random stream' for the source of randomness.
Added gather search data for BlueprintExtensions. This is used by the FindInBlueprint system.
Crash Fix:
Fixed potential crash when
bFavorPureCastNodes
is enabled.
Bug Fix:
Fixed a typo in the FGraphNodeCreator class description.
Fixed the asset loader to preserve component transform in the editor after a Blueprint has been reparented.
Fixed a bug that could cause sparse class data to be lost on load after reparenting a Blueprint.
Fixed a bug that prevented you from moving a Blueprint to a location that has a redirector that points to a Blueprint. This can often happen if you move a Blueprint then attempt to move it back.
Both Find-in-Blueprint and Blueprint namespace asset discovery are now deferred until after the initial asset registry file scan is complete.
Soft class objects are now included in a cooked set When using CookSettings.SkipOnlyEditorOnly assets referenced by Blueprint bytecode.
Blueprint Compiler
Improvement:
Improved redirect support for Blueprints. A reflected Blueprint type can now be changed without breaking existing content, so long as an autocast function exists for the two types.
Crash Fix:
Fixed a rare crash during Blueprint compilation after removing a variable from a component and compiling. The compiler was delta serializing against an archetype of a different type.
Fixed a crash when a skeleton class's CDO is accessed when the native class its based on is using sparse class data.
Bug Fix:
Improved handling for variables that were moved out of a class and into the corresponding sparse class data.
Stale DelegateSignatureGraphs are now removed before compiling, child Blueprints no longer improperly mutate their parent's delegate properties.
ExpandEnumAsExecs now always uses first Exec if an argument name matches Enum value (resubmit) ExpandEnumAsExecs was using an ambiguous pin lookup.
Fixed erroneous deprecation of BreakVector3f for float-based math functions.
Fixed a bug in Blueprint compilation that occurred when a Blueprint was recompiled when it had garbage subclasses.
Fixed references to trashed function objects after generating delegate properties during a batched Blueprint asset compile with inter-batch dependencies.
Avoid potential collisions with existing non-transient objects when creating transient event stub graph artifacts during Blueprint ubergraph compilation.
Removed:
Removed HasNativeBreak from FVector3f.
Blueprint Editor
New:
Added the ability to mark custom events as private. Added default FunctionFlags values that custom events would need for specifiers. Modified the UI to show the access specifier drop down for both function entry nodes and custom events.
By default, the editor will no longer mark outer level/OFPA assets as dirty when propagating default value changes to instances that already match the archetype's value. Instances will still be marked dirty if the default value change results in the instance value becoming realigned with the archetype.
Added new Blueprint editor settings to control how assets selected in the Content Browser will generate pre-bound actions when invoking the Blueprint graph context menu. The default settings now disable this feature in order to improve menu responsiveness.
By default, the editor will no longer mark an outer level/OFPA asset as dirty after manually compiling its underlying Blueprint type.
Non-blocking context menu UI mode is now enabled by default in the Blueprint graph editor.
Improvement:
Optimized async Blueprint context menu building by avoiding resorting and inserting nodes in the desired order.
Improved performance of Blueprint debugger by only populating the children of visible properties and not recursing further.
Crash Fix:
Fixed crash in SGraphPin::GetPinLabel after removing pins from a node.
Fixed crash when compiling a Blueprint after invoking Undo in the editor.
Fixed an editor crash when editing sparse class data fields in Blueprint class defaults.
Bug Fix:
Reduced the amount of graph refreshes performed in the Blueprint editor, reducing hitching and flickering when making changes in the Blueprint graph editor.
Fixed Private and Protected functions from not displaying in the context menu in child Blueprints.
Fixed bug that would cause properties in an object's sparse class data to not display as altered in the diff panel, even if they had been altered.
Fixed malformed asset resulting from duplicating a Blueprint with sparse class data.
Fixed variables that are dragged and dropped to the node with split struct pins from not being added.
Fixed issue where disconnecting an orphan pin would cause ensure to trigger due to an invalidated graph pin.
Fixed the potential for data loss when loading hierarchical Blueprint class assets with circular dependencies asynchronously in the editor.
Fixed the Blueprint Namespace entry widget's tree view from not working properly when only one root item matches the search box filter text.
Dragging new connections from interface(output)->object(input) will now include an explicit autocast node. Additionally, it is no longer possible to connect an array of interfaces output pin to a function call node's Target input pin. These changes apply to new connections only; existing connections will continue to work as before.
Fixed a bug that prevented copy pasted Actor Components from being removed.
Deferred validation of user-defined struct types in the pin type selector list until selection time for the member variable type widget in the user-defined struct asset editor. Invocation of the pin type selector menu for member variables is now a bit faster as a result.
The editor will no longer orphan pins during Blueprint graph node fixup if they are linked to an autocast or other implicit conversion node that supercedes the original link.
Avoided unnecessary serialization of editor-only references at cook time when analyzing Blueprint assets for external imports.
Relocated where we purge stale references from the Blueprint editor's MRU document list in order to avoid attempts to resolve those paths during asynchronous asset loads.
Blueprint Runtime
Improvement:
Optimized UUserDefinedStruct::InitializeStruct by avoiding redundant operations for STRUCT_IsPlainOldData macro instances.
Bug Fix:
Fixed a memory scribble when constructing struct literals with bitfields.
Added runtime capacity checks to Blueprint-facing script container library API to mitigate crashes due to integer type overflow.
Fixed a bug that caused circular component attachments when changing the constructor of native classes.
Gameplay
API Change:
It is now safe to call Super::ActivateAbility in a child class. Previously, it would call CommitAbility.
This will make it a little easier to write triggers/modifiers in Enhanced Input that want to access the Local Player if they want access to the User Settings object to check aim sensitivity or other things.
This is useful piece of state for games to use during pawn initialization.
Commands are prefixed with AbilitySystem.
GameplayTagQueries that are empty are ambiguous and should be handled on a case-by-case basis by the caller.
We can go back to the old way of loading the source texture if this breaks something with the "Paper2d.DisableSyncLoadInEditor" CVar flag.
passing nullptr into SDetailsViewBase::HighlightProperty no longer does nothing and will instead un-highlight all properties
This is a critical fix if you are attempting to use the input device subsystem.
New:
Added an option to a Targeting System's AOE Targeting Task to offset based on relative space rather than world space.
Moved TargetingSubsystem functions into the same metadata category.
Added ULocalPlayerSaveGame base class to the engine that provides utility functions for saving and loading a save game object for a specific Local Player. This wraps the existing save/load logic on GameplayStatics and provides functionality needed to properly support save/load on non-PC platforms.
OnAvatarSet is now called on the primary instance instead of the CDO for instanced per Actor Gameplay Abilities.
Added the source location of the AOE task trace as the TraceStart of any FHitResult returned by that task so users have that information available after targeting.
Input slots now support enum ranges.
Updated enhanced input settings to allow deferral of settings updates.
MatchAnyTags, MatchAllTags, and MatchNoTags tag queries now have exposed make nodes in Blueprint.
Marked UTargetingTask as Abstract so it can't be chosen for EditInlineNew properties.
Added Data Store for Collision parameters used by the AOE targeting Task.
Added hook to override collision data from the data store in the AOE Targeting Task.
Exposed Async Task in the Perform Targeting node so we can get the Targeting Handle before get targeting results.
Added GetPlatformUserIndex function to LocalPlayer and fixed comments to explain the different indices.
Expanded AInfo's constructor to support a default ObjectInitializer parameter, covering cases where derived classes could override the default constructor and miss AInfo-specific initialization.
Allow both Activate Ability and Activate Ability From Event in the same Gameplay Ability Graph.
AnimTask_PlayMontageAndWait now has a toggle to allow Completed and Interrupted after a BlendOut event.
Post-process settings from camera shakes and camera animations are now handled as overrides, rather than base world values.
Added aspect ratio axis constraint override on camera components.
Added a GetOwningLocalPlayer function to the UPlayerInput class.
GAS: Added a GameplayTagQuery field to FGameplayTagRequirements to enable more complex requirements to be specified.
Added a ReceivedPlayerController function to UPlayer, called from it's owning Player Controller when the owning APlayerController pointer is now valid on that player. Alongside this, add a "OnPlayerControllerChanged" delegate to ULocalPlayer and Local Player Subsystems for an easy hook in.
Introduced FGameplayEffectQuery::SourceAggregateTagQuery to augment SourceTagQuery.
GAS: ModMagnitudeCalc wrapper functions have been declared const.
Marked all exec pins as advanced view on Input Action event nodes except for "Triggered".
Added continuous Input Injection to Enhanced Input.
Added support for setting AllowedTypes on FPrimaryAssetId function parameters. To use this, add UPARAM(meta = (AllowedTypes = "SomeAssetType")) to a parameter.
Added EKeys::AnyKey support to Enhanced Input.
GAS: Extended the functonality to execute and cancel Gameplay Abilities & Gameplay Effects from a console command.
Added the ability to perform an "Audit" on Gameplay Ability Blueprints that will show information on how they're developed and intended to be used.
FGameplayTagQuery::Matches now returns false for empty queries.
Exposed FDateTime's To/From Unix Timestamp functions to Blueprints.
Added support for properly replicating different types of FGameplayEffectContext.
Updated FGameplayAttribute::PostSerialize to mark the contained attribute as a searchable name.
FGameplayEffectContextHandle will now check if data is valid before retrieving "Actors".
Retain rotation for Gameplay Ability System Target Data LocationInfo.
Gameplay Ability System now stops searching for PC only if a valid PC is found.
Updated GetAbilitySystemComponent to default parameter to Self.
When diffing assets, their detail panels now have colored highlights signifying the changed properties.
Updated the comments on the Enhanced Action Key Mapping and the Input Action asset to be explict about the order of which modifiers are applied. Modifiers defined in individual key mappings will be applied before those defined in the Input Action asset. Modifiers will not override any that are defined on the Input Action asset, they will be combined together during evaluation.
Added callback options with metadata on FInstancedPropertyBag
Added a TypeFilter callback to filter out some types when changing the type of a property
Added a RemoveCheck callback to cancel the removal of a property
Added a generic way to invoke
You can now merge DataAssets that are conflicted in revision control by right clicking on them in the content browser and selecting "Revision Control/Merge".
Implemented support for changing default type in PropertyBag detail view Also move Metadata names to a seperate header to reference all available metadata values for StructUtils
Added a Debug Display Name string to Player Controller input modes. This is useful for doing a quick debug session of why input may not be getting to the player because it could be consumed by the UI.
Added clarification to the TouchInterface directions.
Marked functions as virtual in AbilityTask_WaitTargetData.
Added an advanced setting on the Input Action for the input accumulation behavior. This setting would allow you to change an input action to cumulatively combine input from different Action Key Mappings instead of always accepting the mapping with the highest key value. A practical example of when to use this would be for something like WASD movement, if you want pressing W and S to cancel each other out.
Added filtering on containers you can use with Properties for StructUtils.
Added SSourceControlReview::OpenChangelist method to allow external code to open the changelist review dialog.
Diff tool overhaul that allows asynchronous diffing and improves diff accuracy for details panels.
Added a EHardwareDeviceSupportedFeatures and EHardwareDevicePrimaryType enums to hardware device identifiers. These allow hardware device identifiers to set flags for themselves to identify some common traits that they have and check what kind of support they have. These are config flags that provide your game a method to change what they support for a given input device and add custom hardware types if desired.
Added support for instanced struct object references in DataTable and DataRegistry.
Allow for input injection based on a player key mapping name as well as a UInputAction pointer. We can do this by keeping track of the UInputAction* associated with each player mapping. Keep track of the owning Platform User ID of each player mappable key profile so that you can access the Local Player without needing to get the outer of the profile, which will be useful for custom profile subclasses.
Improvement:
Refactored camera shakes' time management.
Improved post-process settings blending between view targets.
Added option for ProjectileMovementComponent to avoid interpolation transform updates on some frames when an object isn't as relevant. Default version is based on not recently rendered but can be extended.
Added FScopedMovementUpdate around movement of interpolated component in ProjectileMovementComponent. This avoids moving its child components more than once if it then again simulates during the tick.
Crash Fix:
Fixed a crash when trying to apply gameplay cues after a seamless travel.
Fixed a crash caused by GlobalAbilityTaskCount when using Live Coding.
Fixed UAbilityTask::OnDestroy to not crash if called recursively for cases like UAbilityTask_StartAbilityState.
Fixed a crash caused by having entries added to the AsyncTargetingRequests while they were being processed (When an async targeting request node is chained with another one). Now we queue those and process them at the end of the tick.
Fixed AddTimedDisplay crash when changing a level.
Prevented a crash when attempting to add an invalid subobject class type with the Subobject Data Subsystem.
Fixed a crash caused by AGeometryCollectionISMPoolActor holding a garbage pointer.
Fixed a crash when diffing an Animation Blueprint.
Fixed a crash when diffing asset additions and removals in the review tool.
Bug Fix:
Use existing GameplayCueParameters if it exists instead of default parameters object in RemoveGameplayCue_Internal.
Changed Play in Editor initialization to create game instance subsystems before it creates and initializes world subsystems to match how it works in packaged games and map transfers.
Fixed GetInputAnalogStickState double-to-float wrapper from calling the wrong function.
GameplayAbilityWorldReticle now faces towards the source Actor instead of the TargetingActor.
Cache trigger event data if it was passed in with GiveAbilityAndActivateOnce and the ability list was locked.
Fixed RawScores from getting populated incorrectly in Targeting System Tasks.
Fixed an issue with Blueprint Debugging 'StepOver' command stopping in incorrect Blueprints.
TargetingSelectionTask_AOE now respects source actor rotation instead of being axis-aligned.
Skip processing TargetingTaskSet elements that are null.
Fixed SCS_Node Actor scenecomponents from not getting re-registered correctly after Build events.
Fixed some issues with blending out some infinite camera shakes.
Fixed composite camera shake pattern duration info as shown in sequencer.
Support has been added for the FInheritedGameplayTags to update its CombinedTags immediately rather than waiting until a Save.
Fixed Actor loading in the editor to correctly set the transform when a native root component changes class during reparenting.
Fixed issue affecting the timing of server-forced pawn position updates when time dilation was involved.
Limited the length of a player mappable name to the max length of FName's to properly check for the max length. This fixes a possible ensure that you could get if you used a name that's too long.
Fixed regression that would cause erroneous "AttachChildren count increased while detaching" error when a USceneComponent was garbage collected
Prevented AActor::RerunConstructionScripts from calling a redundant SetWorldTransform inside ExecuteConstruction when the transform hasn't changed. This was causing error accumulation in the relative and world transforms of a component that has an attach parent.
Fixed character movement issue that could prevent client moves from being submitted at the intended rate when time was dilated.
Fixed issue where a Character could intend to stay vertical (aligned with gravity) but unable to change pitch or roll to get there.
Moved ShouldAbilityRespondToEvent from client-only code path to both server and client.
Fixed an issue where subobjects that are stored in container properties (TArray, TSet, and TMap) would not show up in the details panel if they were created dynamically at runtime.
Newly created Blueprint Child Classes are now marked as Transactional and therefore allow undo immediately upon creation, rather than after first save.
Fixed pathing warnings when working with certain types of data assets and data tables.
Only attempt to auto upgrade to Enhanced Input if the project has a name. This solves an issue where you would get toasts about EI from the project launcher.
Check for null world pointer before starting/stopping shakes.
Added some data validation for Combo Step Completion and Cancellation States to make sure at least one state is set.
Do not attempt to synchronously load the source texture of a Paper2D sprite if we are already in the ASYNC loading thread. This can occur in the editor if cooked content is enabled, on post load of the sprite asset.
Fixed FAttributeSetInitterDiscreteLevels from not working in Cooked Builds due to Curve Simplification.
Set CurrentEventData in GameplayAbility.
Ensure MinimalReplicationTags are set up correctly before potentially executing callbacks.
Made Blueprint functions on the camera animation subsystem gracefully handle null pointers.
Fixed comment for UPawnMovementComponent::AddInputVector.
Fixed ShouldAbilityRespondToEvent from not getting called on the instanced GameplayAbility.
Gameplay Cue Notify Actors executing on Child Actors no longer leak memory when gc.PendingKill is disabled.
Made AActor::SetActorTickEnabled virtual.
Fixed an issue in GameplayCueManager where GameplayCueNotify_Actors could be 'lost' due to hash collisions.
WaitGameplayTagQuery will now respect its Query even if we have no Gameplay Tags on the Actor.
PostAttributeChange and AttributeValueChangeDelegates will now have the correct OldValue.
The minimal view info has been correctly reset to prevent parameters from "leaking" from one view target to the next.
Applied current scale and easing value to post-process settings weight
Fixed FGameplayTagQuery from not showing a proper Query Description if the struct was created by native code.
When bIgnoreAllPressedKeysUntilRelease is true, don't only ignore key presses for keys that were in the previous key mappings, but for every key.
Fixed not being able to Copy & Paste the Mappings list in an Input Mapping Context.
Only modify config files if the project has a name, which avoids modifying default engine ini files from the project launcher.
Fixed package load warning when loading changelists in the review tool that contain non-asset files.
Resetting the value of the action value bindings when the action is not present in the current mappings.
Added a "Force Reset" flag to device properties that gets set when PIE ends. This fixes an small bug where the light color or trigger effect could persist between PIE sessions.
Updated text exporting of objects (used for copy/paste) to sanitize property names containing special characters that would otherwise break the parser on import
Marked the FKey::KeyName as EditAnywhere so that its value is correctly propagated if it is changed on a subobject. Without this, the KeyName property will be filtered out when determining if a property has changed on a subobject, leading to an unusable UPROPERTY. This has no effect visually in the editor since the FKey has a custom details row.
Fixed non-deterministic behavior during cook time with regard to the Scale Method pin in on SpawnActorFromClass nodes
Fixed a regression that caused SDetailsViewBase::HighlightProperty to not support nullptr and thus removing any way to unhighlight a property
Fixed an issue where some key mappings would incorrectly be displayed as overriden in the "showdebug EnhancedInput" command. This was happening because the AddUnique call to the array would always add a new mapping, since it was comparing the instanced arrays of modifiers and triggers.
Removed an invalid "break" in a loop that created an order dependant check for chorded actions being blocked.
Fixed the Input Device Subsystem not finding a valid Game World in a packaged windows project.The subsystem was searching for a PIE only play world, not a cooked game world as well.
Fixed an issue when comparing enhanced action mappings during RebuildControlMappings because of a deep copy of the modifiers and triggers arrays, so any time we compare a new instance to old instance it would return false no matter what.
Fixed a bug that caused OneFilePerActor Actors to always diff the local asset against itself instead of against a previous version.
Ensure that the UAbilitySystemGlobals::InitGlobalData is called if the Ability System is in use. Previously if the user did not call it, the Gameplay Ability System did not function correctly.
Fixed route gamepad to second window. When this setting is enabled, if you have a gamepad connected to the editor, all gamepad inputs will be routed to the next PIE window.
Reduced false positives in text-based asset diffs by excluding export paths from the diff.
Fixed a bug that caused RefreshPropertyObjects in SKismetInspector to not get garbage collected.
Deprecated:
Removed unused function FGameplayAbilityTargetData::AddTargetDataToGameplayCueParameters.
Removed vestigial GameplayAbility::SetMovementSyncPoint
Deprecated UPlayerMappableInputConfig in favor of the new UEnhancedInputUserSettings with 5.3.
Deprecated the FPlayerMappableKeySlot and all its related functions for 5.3, along with all the old player mapped key functions in favor of UEnhancedInputUserSettings.
Removed:
Removed unused replication flag from Gameplay tasks & Ability system components
Removed ensure when no combo actions are present. Logs a warning instead.
Mass
New:
Simplified UMassActorSpawnerSubsystem subclassing by moving post actor spawn steps from SpawnActor into SpawnOrRetrieveFromPool. SpawnActor now calls World->SpawnActor.
Added the bRandomize property to FMassTransformsSpawnData to control whether UMassSpawnLocationProcessor assigns transforms randomly (defaults to true to maintain current behavior) or if false, assigns transforms in order.
Bug Fix:
Fixed a bug in FMassEntityManager::BatchDestroyEntities where the ObserverManager wasn't being informed of the entity deletions, causing fragment destructors not to run.
Fixed processor execution flag for world for PIE.
Fixed multithreading access detector in FMassBatchedEntiityCommand's Add methods.
Networking
New:
[NetBitArray]
Added
IsBitSet
.Added
CombineMultiple
to run bit operations on two const bit arrays in 1 loop.Added
ToString
that prints how many set bits the array currently has. Slightly expensive do not abuse with active logs.Added
FNetBitArrayPrinter
utility functions.
[Network]
Added
FNetContext
for user code to tell if inside a real network RPC or not.Added support to
FNetContext::IsInsideNetRPC
in both Iris and legacy.
[NetBitArray]
Added
InitAndCopy
functions onFNetBitArray
. Used to quickly construct a bit array from an existing source, either bitarray or bitarrayview.Added
Set
functions used to overwrite the bitarray with the word operations of two other arrays.
[SubObject Replication]
Added cvar
net.SubObjects.DetectDeprecatedReplicatedSubObjects
.When enabled, it will ensure that it detects that
ReplicateSubObjects
is implemented in a class that switched over to the new registration method. This is only available in development builds.
[NetDriver] Added
FWorldDelegate::OnNetDriverCreated
delegate called after anyNetDriver
was created.[Iris] A struct derived from a struct with a custom Net Serializer somewhere in the hierarchy is no longer required to implement a Net Serializer itself. The custom Net Serializer is automatically used appropriately and additional replicated properties will be replicated as expected.
Clients now disconnect on a bunch error when Iris is enabled. This prevents trying to deserialize packets indefinitely. When an error is set, it's unrecoverable.
FNetBitArray
can now be used in range-based for loops. This loops over set bits and gives you the index of the set bit.Added documentation to Network Prediction plugin
README
file.Added
ELifetimeCondition
COND_Dynamic
support.COND_Dynamic
allows for a property to decide its actual replication condition after instantiation of the actor/component rather than being the same for all instances.The condition can be changed using the macros:
DOREPDYNAMICCONDITION_INITCONDITION_FAST
: when used in the object'sGetReplicatedCustomConditionState
implementationDOREPDYNAMICCONDITION_SETCONDITION_FAST
: in any other place where it's appropriate to change the condition.If the condition is never modified, thus remaining
COND_Dynamic
, the property will always replicate when changed. It's possible to use theDOREPCUSTOMCONDITION_
macros on properties with this condition.
[Iris]
NetObjectConnectionFilter
is now available for Iris replication. This can be used to dynamically filter objects to only replicate to certain connections.The main use case is when objects added to this filter may also be dependent objects as dependent objects override dynamic filtering, but not any type of static filtering.
Added additional Insights CPU scopes in Network Prediction plugin code.
Added a unit test program for the Network Prediction plugin that covers basic simulation ticking in forward prediction and interpolation modes.
ReplicatedPredictionKeys
now explicitly copiesReplicatonID
andReplicationKeys
to properly support being initialized with preservedReplicationID
.Net Driver updates:
Collect the amount of packets sent and received by each connection, each frame.
Output the average and max per-connection packets received and sent every frame in CSV Profiler.
Added
net.ForceOnePacketPerBunch
console variable to force every packet to contain a single bunch. This can be used to debug rare ordering issues when two actors are dependent, but should not.
Added
net.AlwaysUpdateGuidReferenceMapForNetSerializeObjectStruct
console variable to always updateGuidReferenceMap
entries forNetSerialize
structs with object properties, in order to prevent issues with old property values being applied when the struct's object reference is remapped.CVarNetEnableDetailedScopeCounters
is now cached in a global variable in order to prevent unnecessary work getting the console variable value every conditional scope cycle counter.ReplicateCustomDeltaPropTime
is now only recorded if the object has any custom delta properties.
Crash Fix:
Fixed the seamless travel handler to handle PIE renaming for the transition map the same way it does the destination map. This fixes a crash with multiplayer PIE where it tries to reuse the same map package
Bug Fix:
Fixed
GetNetMode
to work properly in Play in Editor for functions likeInitGame
called halfway through world startup, and fixed related issues withEnableListenServer
and dedicated server PIE worlds.[ReplicationGraph] Added fix to prevent sending multicast RPCs on a channel that is closing but not yet cleaned up.
[ReplicatedSubObject] Fixed refcount breaking due to accessing invalid memory from a
TSet
iterator after having removed the iterator.[RepGraph]
Fixed log spam caused by actors going outside the legal world bounds and staying OOB.
Only log a warning once when the actor goes OOB.
net.ReplicationGraph.PrintGraph
now prints the list ofDynamicSpatializedActors
monitored by the Grid2D node.
Fixed an issue where actor channels were closed due to level being unloaded/streamed-out destroying NetStartupActors unless the channel had been explicitly broken.
This behavior can be disabled by setting the console variable as:
net.SkipDestroyNetStartupActorsOnChannelCloseDueToLevelUnloaded 0
.
Fixed behavior of simulated proxies controlled by the Network Prediction plugin when there's no autonomous proxy, such as when a client un-possesses a pawn and doesn't immediately possess another one. Interpolation of simulated proxies now continues while there's no local autonomous proxy.
FastArraySerializer
is no longer allowed to modify state of Archetype or CDO when initializing base state as this lead to inconsistencies with assignment ofReplicationID
Fixed issue with missing detection of items being marked dirty.
Fixed issue with
NetTraceReporter
crashing when processing certain trace files.Fixed an issue where
FNetBitArray::FindLastZero
returned index out of bounds for array sizes not aligned with the size of the storage.
Deprecated:
[NetDriver]
Deprecated
NetServerMaxTickRate
variable and replaced them withGet
/Set
functions.Added
FOnNetServerMaxTickRateChanged
delegate. Register to receive callbacks when the server tick rate changes.
Deprecated obsolete packet handler components.
Removed:
Removed calls to
SetNetVersionsOnArchive
andSetNetVersionsFromArchive
and redirectFInBunch::GameNetVer
andFInBunch::EngineNetVer
to use the internal connection pointer.Removed
FloatCastChecked
inPreFrameReceive
to fix an assert with a largeDeltaTime
that could occur in certain circumstances.
Level Design and Art Tools
Geometry Core
New:
Added the ability to store and fetch temporary debug named-FDynamicMesh instances via global C++ functions
UE::Geometry::Debug::StashDebugMesh()
andFetchDebugMesh()
. A new cvargeometry.DynamicMesh.EnableDebugMeshes
must be set to 1 to enable this functionality. A console commandgeometry.DynamicMesh.ClearDebugMeshes
can be used to clear the debug mesh set.The
FConvexDecomposition3
class now has a merge-only API, which can be used to approximate an input set of convex hulls with a smaller number of convex hulls.Added Transform and Inverse Transform functions to Geometry Core's TPlane3.
Added Transform Normal and Inverse Transform Normal functions to Geometry Core's VectorUtil.
Added a
FSphereCover
concept as a new, optional representation of negative space forFConvexDecomposition3
. This can be used to guide the merge phase of convex decomposition, more accurately keeping the convex hulls away from the object's negative space. Multiple methods are provided to generate a sphere covering that efficiently covers the negative space, with settings to allow some leeway to ignore negative space in small gaps or near the object surface.The Clipper2 wrapper in the Geometry Algorithms module now supports taking the intersection, union, difference, and exclusive-or of arrays of polygons.
Added FindAllHitTriangles function to get all the triangles intersected by a ray (not just the closest one).
Dynamic Mesh Component now provides the option to control which color-space conversion is applied to Vertex Colors when creating the Render Buffers from the
UDynamicMesh
vertex color attribute (SRGB to Linear, Linear to SRGB, or No Conversion). This option is exposed as the Color Space Mode property on the class, as well as via new Blueprint functions Set Vertex Color Space Transform Mode and Get Vertex Color Space Transform Mode. The default is to not apply any conversion or transform.DynamicMeshComponent now supports specifying custom vertex color remappings in C++, by passing a lambda to the new API function
SetVertexColorRemappingFunction
. ClearVertexColorRemappingFunction and HasVertexColorRemappingFunction have also been added.Added theClear Vertex Color Remapping function.
Added theHas Vertex Color Remapping function.
Added a Split Attribute Welder function.
FSplitAttributeWelder
can be used to weld split-attributes that share the same vertex in the parent mesh.
Bug Fix:
Fixed exact predicate float control settings for clang, making exact predicates work correctly on platforms where clang was configured to use fast math.
Made the Geometry Core AABB types respect the
IsValid
flag on conversion to or from the Core FBox type.Dynamic Mesh Component can now render a wireframe overlay in shipping builds, if an Engine wireframe material is available.
Prevented an issue where the editor might crash when determining the number of UV channels during mesh conversion.
Fixed issue in
TMeshSimplification
where explicitly-constrained vertices could result in collapses that ignore geometric constraints.
Geometry Script
New:
Added two functions that compute the shortest distance between mesh points: Get Shortest Vertex Path (using Dijkstra ) and Get Shortest Surface Path (using intrinsic mesh edge flips.)
Added the ability to trace a straight line on a mesh surface through geodesic functions.
Added new mesh bone weight functions for getting information about individual bones of the skeleton stored in the dynamic mesh:
Get Root Bone Name
Get Bone Children
Get All Bones Info
Get Bone Info
Added the function Blur Mesh Vertex Colors for blurring mesh vertex colors.
Added the function Transfer Bone Weights From Mesh for transferring bone weights from one mesh to another.
Created new functions Discard Bones From Mesh and Copy Bones From Mesh.
Dynamic meshes now inherit the skeleton information when converting from skeletal meshes.
Create New Skeletal Mesh Asset From Mesh (LODs) can now use the proportions of bones stored in the input dynamic meshes. This is enabled through the Use Mesh Bone Proportions flag in the Geometry Script Create New Skeletal Mesh Asset Options.
Added Create New Static Mesh Asset From Mesh LODsand Create New Skeletal Mesh Asset From Mesh LODs functions for creating static and skeletal meshes from an array of LODs instead of just a single mesh.
Added the Append Bounding Box function,which takes an
FBox
instead of separate box parametersAdded the Mark For Mesh Rebuild Blueprint function to Generated Dynamic Mesh Actor, which allows other Blueprints to explicitly queue up a Mesh Rebuild event without re-running the Actor Construction Script.
Added Get Vertex Connected Triangles, Get Vertex Connected Vertices, and Get All Split UVs At Vertex functions, which can be used to query the one-ring triangles or vertices of a vertex, as well as the set of split UVs at a vertex in a given UV channel
Added the ability to run Delaunay Triangulation on an input set of points, and optionally a Constrained Delaunay Triangulation that preserves specified edges as well.
Updated the dynamic mesh component to expose new Blueprint functions Notify Mesh Updated and Notify Vertex Attributes Updated. These functions can be used to force either a full or partial update of the rendering buffers for the Component after the
UDynamicMesh
has been modified with deferred notifications.Added the function Recompute Normals For Mesh Selectionto allow normals recomputation to be limited to a mesh selection.
Added the Compute Mesh Local UV Param function, which can compute an Discrete Exponential/Log Map (ExpMap) UV parameterization on a bounded-geodesic-radius area of a mesh. The subset of computed vertex/UV pairs is returned as output, rather than set on a mesh UV channel.
Added a Channel Pack node which has up to four input textures and creates an output texture where the RGBA channels are sourced from the inputs.
Added a new function, Select Mesh Elements In Box With BVH allowing efficient range queries on large meshes using a bounding box and an AABBTree.
Added the Get Mesh Volume Area Center function to compute the center of mass for a mesh, as well as volume and surface area.
The dynamic mesh component's Externally Provided tangent type setting has been renamed From Dynamic Mesh.
Added new polygon and path offset functions.
Added new functions and data types for managing simple polygons (polygons without holes) and lists of general polygons (polygons with support for optional holes) in 2D.
Editor-only functions Stash Debug Meshand Fetch Debug Meshhave been added, which can be used to save temporary copies of
UDynamicMesh
objects associated with string names. The cvargeometry.DynamicMesh.EnableDebugMeshes
must be set, otherwise these functions are ignored.
Improvement:
Updated the polygon triangulation functions to have better error handling and a more robust winding-number-based fallback mode to generate better results in cases where input polygon edges overlap.
Recompute Normalsfunction now has a
bDeferChangeNotifications
option.Updated the Copy Mesh From Component function to support Instanced Static Mesh Components; each instance of the static mesh is appended to the output mesh
TheBake Texture function was updated to expose an option to control the type of texture filtering applied.
Updated dynamic mesh components to use the tangents provided on their dynamic mesh by default, and the setting controlling this tangent source is now also exposed in the UI under the Dynamic Mesh Component properties.
Bug Fix:
Removed incorrect clamping of the Radial Samples parameter inAppend Disc.
Fixed an issue where passing an invalid path to Geometry Script's new asset utility functions could cause a crash. Package names are now automatically sanitized before use by these functions.
Fixed issue where Create Skeletal Mesh Asset From Mesh was not assigning materials correctly.
Fixed a crash when splines with duplicate constant points are converted to polylines.
Updated modules in the GeometryScripting plugin that are Runtime-capable to load in the PreDefault loading phase, before user construction scripts that may depend on Geometry Script.
Modeling Tools
New:
Added a Mesh Topology Selection Mechanic which enables or disables different selection modes in the details customization.
Added a Generate Lightmap UVs option under the New Mesh Objects settings in the Modeling Tools Project Settings panel. If enabled, this will enable light map UVs on any new static mesh created within Modeling Mode.
Moved the Bake RC tool from Mesh Modeling Tools Exp to Mesh Modeling Tools Editor Only Exp module.
Adding a two-sided vertex color material. Same as Mesh Vertex Color Material but with Two Sided checked. Useed the new two-sided material in the cloth weight map paint tool so that we can paint on the back side of the 2D panels.
The Bake Transform and Edit Pivot tools now update all LODs by default, not just the active LOD, and exposed an 'Apply to All LODs option to control this behavior.
Updated Simplify To Minimal Planar to work on the boundary of meshes.
Added the Copy From Inputs option in Mesh to Collision tool to transfer existing simple geometry over to the target.
Added helper methods to count the number of Actor Components which match Target Requirements to assist with special tool needs.
Added helper methods to test for existence of volume components and components that support UVs in Tool Targets.
Updated the box finding code in
MeshSimpleShapeApproximation
to prefer to orient the boxes such that they align with the world frame better.Harden and improved various conversions between dynamic meshes and volumes, to make modeling tools work more reliably on volumes.
Added a Gradient Interaction type to the Cloth Paint tool. The user selects high and low vertices and a gradient is automatically computed between them.
Added the Mesh Vertex Paint Tool has been added to Modeling Mode. This Tool can be used to directly paint asset vertex colors (but not per-instance override vertex colors).
Created the Draw Spline tool for drawing splines and spline-based blueprints.
Added a Revolve Spline tool.
Moved various settings from the secondary toolbar to the cog icon in quick settings, since the secondary toolbar is not enabled by default in some builds.
Added a PolyGroupID option to the Bake Textures and Bake Vertex Colors tools.
Exposed mesh simplification options in the Mirror and Plane Cut tools, to reduce excess triangulation along the cut and mirror plane.
Added a reusable geometry selection visualization system intended to be used in modeling tools with minimal boilerplate.
Unbinded the toggle gizmo action in some tools from a default hotkey to prevent users from accidentally pressing it and thinking that the tools are broken. Users can still set their own hotkey if their workflow benefits from it.
Adjusted how the Combined Transform Gizmo displays scale axis handles when only two axes are needed. The old approach had the handles react to the camera direction at all times, causing issues in the UV Editor and inconsistent orientations of the handles relative to the plane in the case of only two axes. The new approach only is reactive to the camera in cases of one or three axes and locks the handles into a single plane if exactly two axes are configured in the gizmo.
Added a Simple Collison Editor tool to assist with editing of simple collision primitive shapes directly within Modeling Mode for static and dynamic meshes.
Added Subdivide tool improvements dealing with meshes with open boundaries:
Factor out extra corner finding code from PolyEd and add support for it in the subdivide tool.
Added support for rounded corners for mesh boundaries.
Override subdivision scheme during tool usage rather than just at tool start, to allow extra corners to fix some issues.
Added some clarifying comments about schemes.
Changed the Mac bindings for grid size changes in Cube Grid tool to Option + A/D because Option + E is consumed by Mac.
Added geometry selection support to the Normals tool.
Added an edge simplification operation to the PolyEdit tool.
Added a Mesh Splines tool, which creates meshes from a selection of spline components. The tool enables triangulation and extrusion of the splines, as well as Boolean combinations of the spline shapes.
Improvement:
Updated the Weld Mesh Edges tool to optionally merge attributes.
Improved the documentation of options in the SubDiv tool.
The BakeRC tool now outputs a material which is configured to use any generated textures.
UModelingObjectsCreationAPI
was extended to support materials by duplicating a given material.Updatedthe Pattern tool to have an option to place a random selected object at each pattern position, rather than always placing all selected objects at each position.
Updated the Mesh To Collision, Convert, and Transfer tools to properly handle simple collision on Dynamic Mesh Components.
Updated the Displace Mesh Tool to show feedback about the vertex and triangle counts of the output mesh.
Moved the preview settings to above the list of generated textures in the BakeRC tool
Updated Volume to Mesh tool's tooltips to better reflect the tool's behavior.
Bug Fix:
Fixed a bug where the Trim tool starts a potentially expensive boolean calculation when only the opacity color alpha changes.
Updated the New Mesh Objects options under Modeling Tools Project Settings to be used more consistently by all Modeling Mode tools that create new mesh objects.
Prevented several UV modeling tools from launching on volume targets, which are not applicable target types.
Fixed an issue where the viewport level collision rendering would not correctly show the updated collision geometry after accepting the results of the Mesh to Collision tool.
Fixed the static mesh to dynamic mesh conversion not recomputing tangents with the recompute tangents option set, in some cases.
Improved checks for launching tools against assets that might be cooked in the editor.
Updated the Pattern Tool to emit contextually correct static mesh actors.
Fixed
GetElapsedComputeTime
so that the preview material kicks in after the proper delay.Updated the Convert Tool to no longer copy incorrect Material IDs to the output mesh if the the Transfer Materials option is disabled.
Prevented several tools from running on volume targets since the operations didn't apply to that target type.
Dynamic mesh components now show vertex colors when the setting to show vertex colors is enabled in the viewport.
Fixed an issue where the Extrude Path tool generated a result with incorrect extrusion in some cases.
Hit-testing for the rectangular scaling and plane-translation handles in the Modeling Mode gizmo has been improved.
Fixed per-channel baking of curvature and ambient occlusion for the Bake Vertex tool.
The Subdivide tool now works on Mac and Unix targets.
Fixed previous collision geometry incorrectly remaining visible when Collision Type was changed in the AutoLOD tool. Now only the collision geometry for the active Collision Type is shown.
Fixed various tooltips, edit conditions and reset buttons in the AutoLOD tool
Fixed an issue where the PolyCut tool would generate a bad result if the cutting polygon was self-intersecting.
Updated the Bend operation in the Warp tool to support negative bend angles.
Fixed a crash in the Edit Pivot tool when multiple tool targets are backed by the same asset.
Fixed static mesh components created by modeling tools to set to static mobility by default, instead of movable.
Improved Project and Remesh tool's Target Edge Length tooltip, explaining why it's not starting at the default value hardcoded into the property.
Replaced the wireframe visuals in UV Layout Preview to use Mesh Elements Visualizer, to address Z-fighting visual artifacts in wireframe displays.
Fixed an issue in the Pivot Actor tool where changing the transform using the gizmo did not cause the reset to default arrow to appear in the details panel.
Fixed a crash in the Subdivide tool when adding Extra Corner Vertices was enabled for some meshes. Extra Corner Vertices can now only be added along open boundaries.
Adjusted the Project tool's settings to properly disable the smooth filling options when smooth filling is disabled.
Fixed a crash in the Bake Transform tool when some selected meshes have the same source asset.
Fixed issue with the Recompute UVs Op where an ensure would fire when no components contained at least one full triangle.
Updated the Simplify tool to conditionally disable the Prevent Normal Flips and Prevent Tiny Triangles, depending on the simplify algorithm used. This also enables support for the Prevent Tiny Triangles and Prevent Normal Flips under certain tool settings.
Updated The Voxel Blend and Voxel Offset tools to warn about possible artifacts when processing meshes with open boundaries when the Vox Wrap Preprocess option is not enabled.
Fixed computation of edge collapse lerp parameter which reduces artifacts in UV layers when remeshing.
Fixed readability issue in mesh statistics display.
Adjusted the behavior of the Mesh Visualizer settings to properly disable when the Visible property is checked off.
Prevented a crash when asset editors are closed with local changes during an asset reload, due to the static mesh tool target checking for transaction success incorrectly.
Fixed speckles in border regions when creating textures using the BakeTX tool.
The Mesh to Volume tool automatically simplifies models with too many faces for the BSP processing code to handle, preventing the editor from hanging when large meshes are converted to volumes with this tool.
Fixed a crash in the Paint Maps tool that occurred on painting on a mesh with no attributes then attempting to undo.
Disabled the rendering of the indicator circle in the Seam Sculpt tool, since it was not needed for the tool's functioning and caused visual confusion.
Fixed incorrect handling of texture source format BGRE8 in
UE::AssetUtils::ReadTexture
.Updated the Mesh Tangents tool to warn users when attempting to copy tangents from a mesh that does not have tangents.
Changed the smoothing weight scheme to IDT Cotangent in the Hole Fill tool.
Updatedthe Hole Fil tool to re-check for mesh seams to constrain between iterations of remeshing.
Removed the stylus plugin from Modeling Mode, because of a performance issue that occurs when the stylus plugin is enabled.
Updated USkinnedAsset to allow a potentially running AsyncTask to finish before deleting it.
Updated the mesh visualization component used by many modeling tools, including Simplify and Remesh, to correctly distinguishes between normal and tangent seams, rather than treating both seam types as normal seams.
Updated the Editor 2D Mouse Wheel Zoom Behavior Target in the Interactive Tools Framework to make the clip plane math work out if the camera has negative z coordinates.
Procedural
New:
Created convenience functions in PCG data collections and PCG blueprint to remove some boilerplate.
Added substring/matches search which support wildcards in the PointFilter node for string types.
Provided a method to convert points along Landscape Spline into points on a Spline Component. Works best with single path or circular Landscape Splines.
Added missing steepness controls to the Volume, Spline, and Mesh Sampler nodes.
Added support for soft object reference user parameters & soft object pointers internally. Behaves like generic soft object paths but with the appropriate type narrowing.
Added support for overridable texture in the Get Texture Data node.
Added Loop node that behaves like a subgraph but will pass on a single data from the designated loop pins (first pin only by default).
Renamed Attribute Operation node to Copy Attribute.
Copy Attribute now uses the Attribute from another Attribute Set source (with an extra pin). New pin is marked (and shown) un-used if the pin is not used.
$Index
is now a valid accessor to access the index of a point.Improved behavior of Get Actor Data node for PCG partition actors in the case of Single Point.
Added an option to merge all points when querying multiple actor data with single point .
Added an option to ignore self in the Get Actor Data node.
Added SoftPath getter and setter support in PropertyBag to interact with properties that are SoftObjectPtr or SoftObjectClass.
PCG Tracking system is now centralized, improving performances.
The PCG Static Mesh Spawner now respects the ISM component type selected in the component descriptor, with the exception of changing to an ISM if the selection is HISM and the mesh is using Nanite.
Added a OneMinus node.
Added a Make Rotator attribute.
Some native nodes now have a Preconfigured Settings entry in the context menu, to quickly add a node with the wanted settings.
Preconfigured settings are available for Custom BPs, in the class settings.
Changed DensityNoise into AttributeNoise node, to support noise on all attributes.
Added aliases support on overridable PCG parameters in Settings, to facilitate deprecation.
Added ability to spawn Actor by attribute in the Spawn Actor node.
Added inspection support for subgraphs in the PCG editor.
Improved attribute operations by propagating the first non-param pin.
Input to propagate can now be overridden in the settings.
Added default value concept for all Make operations.
Changes that trigger PCG re-generation now cancel ongoing generation more efficiently. This should have a positive impact on landscape editing with PCG content and ensure that no stale data is present.
Added @Last and @Source as new Attribute Selectors.
@Last
gets the latest modified attribute. @Source gets the attribute specified by the input.None becomes a valid attribute name.
Added a new Point Filter Range node, to filter on a range.
Read-only accessors are now throwing an error if it is used as an output accessor.
Added Is Cacheable Override for more fine-grained control when needed.
Improvement:
Improved naming for nodes with custom names and blueprint nodes in the node palette.
Improved support for name clashes, especially in BP exposed variables.
Properties need to be exposed to be added to the Attribute Set using the Get Actor Property node.
Seed for new nodes is not constant, but dependent on the node name. Seeds are kept as-is for existing nodes, to not break existing graphs.
Replaced Creates Artifacts with Is Cacheable in PCG blueprints to be clearer. Previously cached blueprints which did not have Creates Artifacts checked should be manually updated to set the 'Is Cacheable' flag to true.
Added getters for input/output pin properties by label in settings. Renamed getters on data collection to clarify it is done by label.
Added Get Target Actor, to be used instead of accessing the Target Actor variable directly. Refrain from getting the Target Actor variable on PCG Spatial data directly. Instead use the Get Target Actor method on the context.
Bug Fix:
Fixed some instances where PCG would access pending kill landscapes in some instances when getting landscape proxies.
Forced usage of the landscape original GUID for the landscape cache in cases where landscapes are instanced.
Fixed an issue where the world ray/volumetric query parameters would not be properly overridable.
Fixed outstanding bug in the metadata partition where the partition would not behave correctly for non-string values
Fixed the Landscape Blend Layer not sampling correctly when using 2x2 Subsections.
Fixed distance checks between the same source and target would lead to checking points against themselves.
Fixed issue with PCG partition actors not reacting to landscape changes before a full graph refresh.
Fixed issue where numerical values were not accepted for MakeTransform and MakeVector.
Improved logging for Metadata operation, making it easier to know why an operation is failing.
Fixed issue where the Create Spline node was ignoring custom tangents.
Deprecated:
Support
@SourceName
(previous behavior of None = Create attribute with the same name as input). Not exposed. Used for deprecation.Support
@LastCreated
(previous behavior of None = Get the latest created attribute in input). Not exposed. Used for deprecation.
UV Editor
New:
The UV Editor now supports a UV distortion visualization feature. When enabled, it computes a per triangle distortion value of the triangle's UVs vs its world space positions. This is then displayed as a color blind friendly color overlay on the 2D UV mesh. The feature supports several metrics for distortion and one metric for relative texel density over the mesh.
Moved UV Editor plugin from Experimental plugin directory to the Editor plugin directory.
Refactored unwrapped to applied selection conversion slightly to make it more convenient for areas of the code outside of the selection mechanic to perform conversions.
Bug Fix:
Changed the Quick Translate options in the Transform tool to produce a single undo entry for the corner transforms.
Corrected issue where focusing on selections in the 3D viewport was using selections on the unwrapped 2D mesh instead.
Corrected issue where the background grid was being incorrectly drawn due to mishandling of minimum and maximum Y-axis bounds.
Adjusted the language in the Transform tool's tooltips to be more consistent between different direction buttons.
World Building
API Change:
In PIE, UWorldPartitionLevelStreamingDynamic::RequestLevel now behaves like what ULevelStreaming::RequestLevel.
ULevelStreaming sets ULevel::StreamedLevelsOwningWorld so that ULevel::PostLoad can now set the level OwningWorld. Since UWorldPartitionLevelStreamingDynamic creates a memory level, it sets the OwningWorld right before loading OFPA actors.
New:
Added a delay to AddToWorld of a partitioned world if this same partitioned world hasn't finished removing it's sub-levels triggered by a prior RemoveFromWorld.
Added a LevelStreamingPersistence experimental plugin. LevelStreamingPersistenceManager handles persistence of tagged object properties when streaming-out/in levels. Persistent object properties that are tagged as public can be accessed and modified even when the level is not loaded.
Added UDataLayerManager which is local to each WorldPartition. Instanced world partition maps can now maintain their own Data Layer runtime states.
Added helpers UWorld::GetDataLayerManager and UWorldPartitionBlueprintLibrary::GetDataLayerManager which will automatically find the associated DataLayerManager.
Added World Partition Runtime Grid origin in grid settings to help properly align game content on runtime grid cells (for example landscape proxy actors)
Added a Preview Grid Level option to preview other levels of the grids
Added the ability to edit data layers of a level instance when editing the level instance.
Added editing data layer of level instance when editing the level instance even when the main world is not partitioned.
Added support for Make Current on Level instance DataLayerInstances when editing a level instance.
Unreal Engine now Includes time spent in FLevelStreamingDelegates OnLevelBeginMakingVisible/OnLevelBeginMakingInvisible and ULevelStreaming::BroadcastLevelVisibleStatus in their respective time budget.
The WorldPartitionSubsystem is now responsible for sorting cells and executing cell loading and activation for all registered world partitions.
Add Project Setting for default value to assign to new Level Instances
Packed Level Actors now avoid updating blueprints if packing result is unchanged.
DirtyFilesChangelistValidator now outputs the assets that need to be saved during changelist validation.
New IsMainWorldOnly actor property for filtering actors when they are being used in a Level Instance.
Improvement:
Optimized UpdateStreamingState for Server streaming, It now computes ClientsVisibleLevelNames once for all registered world partitions.
Added the wp.Runtime.UpdateStreamingStateTimeLimit command for incremental updates of registered world partitions (disabled by default). This is only useful when there's a lot of registered partitioned worlds.
Lowered the Net Update Frequency for HLOD actors (AWorldPartitionHLOD) in case they're ever set to replicated.
Any actor inheriting from AWorldPartitionHLOD with replication turned on will be affected, since there is now a NetUpdateFrequency of 1 by default as opposed to the default 100.
Changed default value of wp.Runtime.UpdateStreaming.EnableOptimization to true.
Set UDataLayerManager::SetDataLayerInstanceRuntimeState to BlueprintAuthorityOnly.
Replaced import data layer menu option with drag and dropping level instance data layers into main world AWorldDataLayers.
Disabled changing visibility and editor loading of DataLayerInstances of editing level instance.
Changed font from bold to bold+italic on DataLayerInstances containing actors that are part of editor selection.
Colorized and appended (Current) to the WorldDataLayer of the editing Level Instance in the DataLayer Outliner.
Optimized World Partition UpdateStreamingSources. Saves 1ms on project using >300 instances of partitioned worlds.
Moved initialization of game instanced world partition to happen when the level starts to be added to the world instead of when it is loaded.
Moved the uninitialization of game instanced world partition to happen when the level starts to be removed from the world instead of when it is done being removed from the level.
Centralized the initialization/uninitialization logic in WorldPartitionSubsystem
Instanced world partition IsServerStreamingEnabled/IsServerStreamingOutEnabled now forwards the logic to their parent world partition (if any) when using project default modes.
Disabled replication of WorldSettings on levels created for world partition streaming cells.
Added other missing deprecated UDataLayerSubsystem methods.
World Partition now relies on World's NumStreamingLevelsBeingLoaded instead of computing its own number of loading cells.
Fixed Data Layer asset paths when loading WorldPartitionActorDescs.
Level Instances with bEnableStreaming=true will now act as regular World Partitions when loaded on their own. Big Level Instances can now be partially loaded outside of their owning world.
Bug Fix:
Fixed UDataLayerManager::SetDataLayerRuntimeState helper to avoid having to resolve a DataLayerInstance for a Data Layer asset.
Fixed the case where an instanced world partition was added to the world, then removed from the world, then re-added to the world without being unloaded first.
Fixed deprecated UDataLayerSubsystem::GetDataLayerInstances to properly map to UDataLayerManager::GetDataLayerInstances.
Fixed pending cells to be loaded and to be added to the world not updating their cell sorting info.
Fixed UWorld::CanAddLoadedLevelToWorld to work with multiple world partitions.
Properly hooked Data Layers menu extenders and pass selection to delegate.
Fixed broken foliage instance selection after deleting an instance
Corrected missing initializations in FInstanceUpdateCmdBuffer ctor
Uninitializing a partitioned world should always trigger unloading of all cells regardless if server streaming and/or server streaming out are enabled/disabled.
Fixed replay playback not resetting runtime data layer states to their initial state.
In PIE, UWorldPartitionLevelStreamingDynamic::RequestLevel now behaves like what ULevelStreaming::RequestLevel does. ULevelStreaming sets ULevel::StreamedLevelsOwningWorld so that ULevel::PostLoad can set the level OwningWorld. Since UWorldPartitionLevelStreamingDynamic creates a memory level, it sets the OwningWorld right before loading OFPA actors.
Added server's client visible level names in update streaming state hash.
Fixed rare case where a WP streaming cell would contain an actor and this actor is also an editor-only reference of another actor of this cell. In this case, the editor-only reference must not be part of the WP streaming cell.
WorldPartitionSubsystem no longer updates streaming sources on the server when none of its registered world partition has server streaming enabled.
When sorting world partition cells, world partition doesn't rely on cell grid level, but instead uses grid cell extent to sort cells between multiple grids.
Fixed how MaxCellsToLoad is computed by World Partition to limit the total number of loading and pending load streaming cells.
Fixed infinite loop in Level streaming caused by UWorld::RemoveFromWorld completing in non incremental removal move after first starting in incremental mode and not resetting CurrentLevelPendingInvisibility.
Prevented async loading flush when world partition cell is activated.
Fixed bug where garbage marked levels were not given unique names, causing them to be reloaded.
Attached Actor Pre/PostSaveRoot transform fix.
Fixed cooked FunctionalTest not getting discovered for WorldPartition maps
Recompile skeleton class after clearing SimpleConstructionScript to avoid component name clashes when adding the new components to Packed Level Actor blueprints.
Deprecated:
Removed DataLayerSubsystem since DataLayerManager supersedes its functionality.
UWorldPartitionRuntimeCell::IsLoading, UWorldPartition::UpdateStreamingState and UWorldPartition::CanAddLoadedLevelToWorld have been deprecated.
Removed CanBeUsedByLevelInstance. Level Instances that are World Partition-enabled still get embedded in their parent world grid independent of the value of bEnableStreaming.
Removed:
Removed menu option Create Data Layer under
DataLayer as it will never be allowed for DataLayerInstanceWithAsset since it is created without any valid DataLayerAsset. Removed suffix - WorldDataLayers on parent node of DataLayerInstances in the DataLayer Outliner
Localization
API Change:
Implemented async loading of localization data, and extended dynamic loading to handle explicitly loaded plugins.
BeginInitGameTextLocalization
andEndInitGameTextLocalization
have been removed as part of this change.You would now just use
InitGameTextLocalization
(which is async) followed byFTextLocalizationManager::WaitForAsyncTasks
.
New:
Implemented
MinimumGroupingDigits
forFastDecimalFormat
.Enabled "min two" grouping for Spanish by default.
This can be disabled via the
Localization.SpanishUsesMinTwoGrouping
console variable.When enabled, "1234" formats as "1234" rather than "1 234", but "12345" still formats as "12 345".
Added an overload of
FTextProperty::Identical_Implementation
that lets you control the fallback lexical compare mode.Implemented async loading of localization data, and extended dynamic loading to handle explicitly loaded plugins.
This change takes the existing support for async loading that was added for game localization data and expands it to cover all localization data.
Async localization tasks are chained together as dependencies to preserve the existing order of operations, and can be waited on at any point (eg, after a loading screen) by calling
FTextLocalizationManager::WaitForAsyncTasks
(though the engine init flow takes care of waiting for you unless you're loading additional plugin/chunked localization data).This change takes the existing support for dynamically loading chunked localization data on PAK chunk load, and extends it to support dynamically loading any additional localization data.
This is used by the engine to support dynamically loading the localization targets associated with explicitly loaded plugins. These loads are all async, so must be waited on if you need them to block.
Added the
Localization.DumpLiveTable
command to dump the current live table state to the log. This can be optionally filtered using any of the following wildcard arguments:Namespace
: The namespace to filter against.Key
: The key to filter against.DisplayString
: The display string to filter against.
The validator to make sure localized assets do not contain dangling redirectors now properly considers the case where the localized and non-localized assets are both redirectors that point to the same respective path.
Bug Fix:
Always use a space and a comma as the group and decimal separator when using RAE-style Spanish numbers.
Fixed an assert when gathering localization data from a World Partition world that had already been loaded as the editor world.
Fixed text created from
FText::FindText
with a null source string failing to resolve correctly if the language changes.
Online
New:
Add Join in Progress to list of social debug commands.
MPA activity now set/unset in sync with joinability privacy. If undesired, set
setMpaActivityInPrivateSession
totrue
.Added replacements for deprecated IAP blueprint nodes:
Make an In-App Purchase v2 has been replaced by the new "Start an In-App Purchase" node.
Process any New Unprocessed Purchases v2 has been replaced by the new "Get known In-App Receipts" node.
Query for Owned Purchases has been replaced by the new "Query for Owned In-App Products" node.
Restore In-App Purchases v2 has been replaced by the new "Restore Owned In-App Products" node.
New nodes allow validation/granting logic to be reused because they share common types for the receipts on their outputs.
Also added "Finalize In-App Purchase Transaction" so licensees can finalize the transactions using the receipts after processing.
All transactions should be finalized. Any non finalized transaction locally or server side will be refunded by GooglePlay and not finalizing locally the transactions on iOS may lead to bad performance
The recommended flows in a game should be:
On startup/after login "Query for Owned In-App Products", then validate/grant the missing products and finalize those receipts.
When the user initiates a purchase using "Start an In-App Purchase" validate/grant the products and finalize the receipt.
Any time the game may need to check for updates on products it can "Query for Owned Purchases" if they need a full update or "Get known In-App Receipts" if it is not interested in updating data from store servers.
After that products can be validated/granted and receipts should be finalized.
"Restore Owned In-App Products" does the same as "Query for Owned Purchases" on Android.
On iOS it calls restoreCompletedTransactions on the payment queue thus making available all already processed receipts for non consumable transactions.
Added a conditional in the
BuildPatchServices
system to ascertain if the destination file system is currently throttled, and, if so, stall file writing.Convert online subsystem defines to be global FNames to avoid a lookup every time we use one.
Improvement:
Improved POSIX ICMP code and added a console command to test ICMP directly.
Moved
USocialDebugTools::PrintExecCommands
to protected so it can be overridden by subclasses.
Deprecated:
Marked deprecated IAP blueprint nodes and created replacements:
Make an In-App Purchase v2 has been replaced by the new "Start an In-App Purchase" node.
Process any New Unprocessed Purchases v2 has been replaced by the new "Get known In-App Receipts" node.
Query for Owned Purchases has been replaced by the new "Query for Owned In-App Products" node.
Restore In-App Purchases v2 has been replaced by the new "Restore Owned In-App Products" node.
HTTP
New:
Added non-game thread support for http request.
Added http streaming download interface.
Added new test project WebTests with corresponding web server to test HTTP.
Added 64 bits length of file download support in http request.
Added LLM tags to
CurlHttp
allocation hooks.
Bug Fix:
Enabled
WinHttp
websockets to be created with an empty protocol list, which results in the corresponding header not being added.
Online Subsystem
New:
Added a LobbyId override option to the
CreateLobby
method in the OnlineServices Lobbies interface. Added logic toLobbiesEOSGS
to use the new option.Added
UE_ONLINE_ERROR_EXTERNAL
macro to enable online errors to be defined outside of theUE::Online::Errors
namespace.Added presence tracking for OSSv2 Lobbies.
Added logic to trigger
OnQueryUserInfoComplete
delegates on OSS EOS.Added support for
BuildIdOverride
on the command line to be surrounded by quotes.Added
GetInterface
accessor toIOnlineServices
to allow for additional/implementation specific interfaces to be accessed via the baseIOnlineServices
.
Improvement:
Modified
OnlineBeaconClient
login parameters to allow for more parameters than just the auth ticket.
Bug Fix:
Changed the default cache directory for Switch used by OSS EOS.
Delayed callback execution to match alternate flow paths in OSS EOS Session search code.
Refactored OSS EOS Friend status update handler method to trigger the appropriate corresponding UE delegates and keep a coherent state.
Refactored EOS Lobby Creation logic to destroy the lobby if the update step fails.
Added critical section around
FOnlineSubsystemModule::OnlineSubsystems
.This fixes race conditions when multiple threads are accessing
FOnlineSubsystemModule::GetOnlineSubsystem
, observed to happen as part of multi-threadedFUniqueNetIdRepl
deserialization.
Refactored session update code in OSS EOS Sessions interface to ensure non-owner lobby members can update their own lobby member settings, to match API functionality.
[Online Services] Added support to handle more operation cache settings, duration based and provide a setting to cache error results.
Limit concurrent operations in flight.
Fixed some operations not being removed/destroyed when we are done with them.
Removed:
Removed unsupported members of
LobbyMember
type:PlatformAccountId
andPlatformDisplayName
.Removed early exit in OSS EOS'
FriendStatusChanged
method in order to handle accepted friend invites via the EOS overlay.
Pixel Streaming
New:
Added the ability for the bundled get_ps_servers script to pull down a release from Github.
Added a new framework to allow passing arbitrary configuration settings to the streaming infrastructure.
Improvement:
The default viewer port for PixelStreaming on Linux is now 8080. Port 80 requires root privileges on Linux, so this avoids elevation.
Crash Fix:
Fixed a crash caused by using UPixelStreamingSignallingComponent Blueprint types.
Fixed a crash that occurred when using OfferToReceive on Firefox.
Fixed a crash that occurred on shutdown.
Fixed a deadlock that occurred when using DX11 on AWS instances.
Fixed a crash that occurred when running with -onethread and encoding VPX.
Fixed a crash that occurred when a port was not provided for -PixelStreamingURL.
Bug Fix:
Fixed a bug where the embedded signaling server would not serve the images directory as expected.
Fixed a bug where showcase.html would not display images when using an embedded signaling server.
Fixed a bug where the embedded signaling server could not connect to the frontend.
Server targets can now build with PixelStreaming Blueprints enabled.
Fixed a race condition that could occur during stats collection.
Fixed a bug where the minimum bitrate could be set higher than the maximum bitrate.
Platform
Bug Fix:
Added a check to prevent memory mapping compressed or encrypted memory made with IoStore.
Fixed address sanitizer compile error on current versions of MSVC.
Desktop
Crash Fix:
Fixed a crash that occurred when playing 2 startup movies using WindowsMoviePlayer.
Linux
New:
Added sigaction failure check.
Provided an option to disable
dump_syms
where iteration speed is desirable. (-NoDumpSyms
or setbDisableDumpSyms
).
Bug Fix:
Stopped tooltips from popping up during window drags.
Replaced use of
sa_handler
withsa_sigaction
. IfSA_SIGINFO
is specified insa_flags
, thensa_sigaction
specifies the signal-handling function instead ofsa_handler
.Started accounting for Linux dock dimensions when computing positions.
Fixed `TWeakObjectPtr`s not being indexed properly in LLDB.
Fixed launching on a remote Linux box from a Windows editor.
Fixrf DPI scale in Linux being incorrect on Odyssey G9 5120x1440 displays. These displays report invalid display information to the window system, resulting in very high scale values.
Fixed crash reporter not always showing up on Linux due to config variables being unexpectedly overridden.
Fixed some instances where modal window behavior on Linux didn't match other platforms.
Corrected some incorrect event resetting code in FramePro.
Mac
New:
Moved some MacMenu calls to MainThread to avoid creating errors in the Main Thread Checker, which will be fatal in future MacOS versions.
Added encoder fault tracking to help diagnose GPU crashes.
Crash Fix:
Fixed crash with Dump GPU on Macs due to missing viewport.
Fixed a freeze that could occur on Mac when some pop ups were displayed.
Bug Fix:
Fixed incorrect timestamp queries calculation on Apple Silicon.
On Mac, UE will no longer rebuild cached menus on every key press. This prevents an FPS drop in editor/preview when the user is pressing keys on the keyboard.
MacSystemIncludes
now undefinesPF_MAX
so it can be defined by UE for pixelformat instead ofsocket.h
. This is the result of a long include chain whereinCocoa.h
pulls in networking code fromPrintCore.h
, which in turn leads tosocket.h
definingPF_MAX
instead of UE.Added some checks on CRC to make sure it actually exists and is executable.
XR
New:
Added an interface within IOpenXRExtensionPlugin.h to access StereoLayers.
Added support for XR_FB_composition_layer_alpha_blend extension.
Added support for cylinder and equirect layers in OpenXR plugin.
Added support for XR_FB_foveation OpenXR extension.
Added setting to enable/disable OpenXR foveation.
[ARSessionConfig] Added candidate image removal methods.
[OpenXR] You can now disable the depth layer via cvar.
[PSVR2] Adjustable max eye texture size now allows for PixelDensity > 1.0 with a setting to control the limit.
Improvement:
Hololens device detection will now occur after editor startup by default to reduce startup time.This setting can be changed in the Hololens Project Settings.
ARCore SDK for Android was updated to 1.37.
[OpenXR] Android apps on non-Oculus Android platforms can now startup OpenXR if they are not configured for Oculus Mobile Devices by changing
vr.DisableOpenXROnAndroidWithoutOculus
to false.Reduced XR EControllerHand use.
Reduced total memory use overhead of HeadMountedDisplay modules by moving them to the XRBase plugin.
[OpenXRHandTracking] Improved support for using hand tracking along with controllers.
Packaging settings for Meta Quest devices has been changed from a list of devices to a single checkbox that enabled packaging for all Meta Quest devices.
OpenXR headers have been updated to OpenXR SDK 1.0.27 (2023-03-21).
Added a tooltip to MotionControllerComponent's MotionSource.
[PSVR2] Removed reliance on pre-registered buffers for reprojection.
[OpenXR] Runtime-supported extensions will now be logged.
[OpenXR] Refined CopyTexture operations for layer and spectator screen usage.
Crash Fix:
Fixed a crash related to planar reflection on SteamVR.
Fixed a crash that occurred when accessing vr.SpectatorScreenMode CVar without a controller connected.
Bug Fix:
[AR Pins] Fixed a bug where
TrackingToWorldTransform
andWorldScale
were updating incorrectly.[ARKit] ARKit anchors are now released when the ARPin is removed.
StereoLayerManager no longer uses invalidated FLayerData.
The
xr.OpenXRForceStereoLayerEmulation
console variable now picks up runtime changes only at the next VRPIE restart.Stereo layers are now correctly removed when their actor is destroyed.
Fixed a bug related to the alpha of emulated stereo layers on the HMD and spectator screen.
Fixed a bug where XRDeviceVisualizationComponent would not correctly start the visualization of the device model.
Fixed Mobile Preview VRPIE being darker than what was shown in the HMD.
Fixed sorting function that made world locked layers render on top of face locked layers.
Fixed a bug related to
FOpenXRHMD::UpdateLayer
thread safety.Fixed an Unknown ARCore Trackable Type assert which occurred during ARLineTrace.
[ARCore Trackables] Fixed a case where an ArTrackable handle was not released.
[OpenXR] Emulated layers swapchain will now use the prescribed layer format.
Fixed a bug involving a platform RHI disable check.
[OpenXR] Fixed a bug which occurred when stereo was disabled and re-enabled.
[VulkanRHI] LLM tags are now initialized earlier.
[ARKit] Invalid camera images will no longer be processed after pause and resume.
[ARKit] Camera texture resources will no longer be accessed on the delegate thread.
[OpenXR] Quad layers now respect component scale as expected.
Fixed several issues related to MotionControllerComponent Velocity.
[XRScribe] Pose replay will now match the original timescale instead of playing poses back as fast as possible.
Fixed an issue where OpenXRHMD SystemProperties was uninitialized until OnStereoStartup.
Deprecated:
EnableAutoLoadingSplashScreen functionality has been deprecated.
[ARCore] Deprecated
UGoogleARCoreFrameFunctionLibrary::GetCameraMetadata
andDeprecated ARCore AR Trackable Render Components.
Removed:
Removed the deprecated camera metadata API.
Removed deprecated ARCore features.
Removed HoloLens "Multi" packaging.
[ARBlueprintLibrary] Deleted functions deprecated in 4.22 and 4.26.
Removed
GetMobileVariableRateShadingImage
to make Variable Rate Shading behavior consistent across mobile and desktop.
Platform Mobile
New:
Optimized directional light uniform buffer update on mobile.
Added support for pixel shader version of TAA upsampling on mobile.
Added support for instance custom data in pixel shader while mobile GpuScene is enabled.
Changed Light Grid Data buffers to be StructuredBuffers.
Added support for ISM with mesh paint vertex color on mobile.
Detect hardware Cyclic Redundancy Check (CRC) instruction support on ARM platforms. Depending on the compilation environment, this can be a runtime or compile time detection. CRC is used in hash computations everywhere in the engine and this change will provide ~7x performance improvement on supported devices.
Replaced RHICommandListImmediate with RHICommandList to enable RDG pass parallelism on mobile platforms.
On Android and iOS, UE will now only update the list of receipts received from
IOnlinePurchase::GetReceipts
by user request. Receipts retrieved usingIOnlinePurchase::GetReceipts
are updated as a result of calls toIOnlinePurchase::QueryReceipts
. After a successful call toIOnlinePurchase::Checkout
, the receipt for the successful purchase is added to that list. Asynchronous transaction updates received only trigger theIOnlinePurchase::UnexpectedPurchaseReceipt
delegate. Restored transactions on iOS are automatically finished so the end user does not need to do it.Added support to handle subscriptions on OnlinePurchaseGooglePlay and OnlineSubsystemIOS. Subscription product types are now also queried to the stores. Whether a subscription is valid or not can only be handled by server-to-server calls to the store.
You can disable local acknowledge-and-consume by setting
bDisableLocalAcknowledgeAndConsume_`_ in the
[OnlineSubsystemGooglePlay.Store]` section from your.ini
files. This supports the server-to-server validation recommended by Google.Product IDs consumed by the engine for subscription products should be composed by be the actual product ID defined in the store, prefixed by "s-".
Several product entries will be received for a subscription product when the application invokes `IOnlinePurchase::QueryOffersById_`_ using a subscription product ID. The product ID on the received products will contain:
++ The prefixed product ID
++ The base plan
++ The offer in the base plan
++ The different price points.
As an example, this could be the list of ids created by `_IOnlinePurchase::QueryOffersById`_ requesting information for "s-test_subscription_1" (which in the store would be identified as just "test_subscription_1").
r.Mobile.EarlyZPassOnlyMaterialMasking
is now handled per shader platform.Increased ShaderComplexity cost of Masked Materials on Mobile ShaderPlatforms that do not use
MaskedInEarlyZ
.r.Forward.LightLinkedListCulling
is now set to 0 for platforms that do not benefit from it. This saves about 0.1ms on the GPU.Added support for Inline RT Shadows on Vulkan.
Tonemapping LUT pass now runs only when needed.
Added support for CollisionMode
PCM_DistanceField
on mobile platforms that support Distance Field.Removed
SupportsCopyImage
, as GL ES 3.2 standard hasglCopyImageSubData
.Volumetric Support For Mobile is disabled by default in Device Platforms. Removed bSupportsVolumetricFog from DataDrivenPlatformInfo.
Added a new mode for rendering local lights in the Mobile forward renderer. You can enable this mode by setting
r.Mobile.Forward.EnableLocalLights
to 2 andr.Mobile.EarlyZPass
to 1.Mobile Light Prepass is now disabled by default.
Removed
bSupportsMobileDistanceField
from DDSPI in Global Distance Field For Mobile.
Crash Fix:
Fixed a crash that occurs when enabling transmission on directional light with spot light shadow on mobile.
Bug Fix:
Mobile rendering now samples SceneDepth instead of fetching SceneDepthAux when full depth prepass is enabled.
Fixed a bug where decals are missing skylight when using the mobile deferred renderer with static lighting disabled.
Directional lights with a light channel of none (0) can now cast shadows on mobile deferred.
Fixed a bug where simple light was missing on mobile deferred.
Fixed a bug where static meshes are missing local light when they are dragged in editor.
Fixed issue where distortion pass was not using the same pixel format as a base pass.
Previously, objects with masks would still do mask clipping in the pixel shader even with full depth pre-pass enabled. This issue has been resolved.
Fix a bug where the depthRT is empty during passes when DepthStencilState is enabled while doing DrawMaterialToRenderTarget on the mobile deferred renderer.
Fixed a bug where a black color would render on thin translucent material on mobile.
Fixed IBL reflections for Surface LightingVolume.
Fixed a GPU crash caused by Niagara Mesh Renderer shader which occurred on IOS 13 as well as some PowerVR android devices.
Fixed GPUScene uploader size limit check.
Indirect lighting scale is now correctly applied on mobile.
Moved Temporal Anti-Aliasing back to the end of the post-processing chain to save bandwidth. It now filters the bloom input to get rid of the flickering white spots.
Fixed a modulated shadow rendering issue on mobile.
Fixed a bug in GenerateGlslShader that occurs when a string is a substring of another in the ReflectData.
Fixed handling of Target Device in Mobile Preview.
Quad Complexity now works correctly for mobile preview.
Android
New:
Added a way to provide command line to Android apps using adb shell. You can now launch Android apps from adb shell and provide a command line arguments using the parameter
-cmdline "arguments"
.Purchasing multiple products in one transaction is now allowed in OnlineSubsystemGooglePlay.
Set Java 1.8 for sourceCompatibility and targetCompatibility.
Capped Low-Level Memory Tracker (LLM)'s Total stat to be no less than Total Tracked on Android, since on some devices UE can't read the GPU part of the total memory allocated by the process. However, LLM does its own counting on Unreal Engine's side for GPU-related allocations.
Advanced binary compression is now enabled by default on Android.
Upgraded Android Studio (Flamingo 2202.2.1) and Gradle (7.5 and use OpenJDK 17 from 2202.2.1).
Added support for Lumen Diffuse Indirect without requirement for Dual Source Blending in the desktop renderer.
Updated force feedback support on Android:
Use VibrationEffect for intensity control.
Forward feedback to controller(s) if
Android.UseControllerFeedback
has a value other than zero (defaults to 1).Does not continue feedback when application is in the background.
Added Overflow 3 and 4 for Android OBB files. Use OverflowOBBFileLimit project setting to set number allowed. The default value for OverflowOBBFileLimit is 2, but you can set it up to a maximum of 4.
Updated Google-Services plugin for Firebase.
Updated Swappy to the latest from Android GoogleSource. Modified to always use the Java DisplayManager and refresh rate selection as it is more reliable on some devices.
Added additional Razer Kishi gamepad recognition.
Added the WebViewTextureSize CVar to control Android WebBrowser texture size in
DefaultEngine.ini
.
Crash Fix:
Fixed a crash when playing a
.mp4
from UMG.
Bug Fix:
Fix a bug that prevented rendering custom depth on OpenGL.
Fixed bug where CommitComputeResourceTables were missing for dispatching indirect compute shader on OpenGL.
Fixed a bug where media couldn't resume after entering the background on Android devices.
Changed the location of the
.apk
generated by Gradle to avoid usingoutputFileName
to redirect the.apk
location.Fixed a race condition when generating
.apk
in newer Gradle versions by usingcleanPackageDebug
/cleanPackageRelease
instead of manual.apk
removal.Forward key pressed to UI even if virtual keyboard is shown on the screen. This enables hardware keyboard usage with EditText fields.
Removing emoji filtering on Android. Now it's possible to type emoji's from Android on-screen keyboard.
Fixed IME with hardware keyboard.
Fixed an issue causing fingerprint scanners being falsely detected as controllers.
Only archive AAB if App Bundles are enabled for Android.
Corrected performance issues by performing updates to device vibrator intensity less frequently.
Fixed Xbox and Razer wired controllers on Android 12+.
Use /sdcard/Android/obb for OBBs for all build types. /sdcard/obb is no longer used due to storage access restrictions.
Clear
ANDROID_SDK_HOME
environment variable in the SetupAndroid script. This should NOT be set with new tools.Slight improvement to GetEntryLength in Android filesystem.
If the Android background downloader plugin is disconnected, it will now monitor network status and resume background downloads if reconnected.
Fixed OnLocationChanged broadcast for Android location services to use the game thread properly.
Deprecated:
libc++_shared.so
is no longer included in.apk
packages on Android by default, as Unreal Engine no longer supports any dynamic libs built againstlibc++_shared.so
.
iOS, tvOS, and iPadOS
Crash Fix:
Refactored resource transitions on Metal. Removed PrologueEncoder since it's not synchronized properly. This fixed a flickering and crash issue on iPhone14 with mobile GPUScene enabled.
Bug Fix:
Fixed a bug that occurrs when sampling SceneDepthAux in SunMask on IOS mobile deferred.
Deprecated:
IHttpRequest implementation based on NSUrlConnection is marked deprecated. This functionality will be removed in 5.4.
Quixel
New:
Quixel Bridge 2023.0.3 improves version handling for MetaHuman exports.
Rendering
API Change:
If your shader references GPUScene or another field in the scene uniform buffer, the RHI validation expects a valid reference for the scene UB. If this is not set, you may see an error like this: Shader expected a uniform buffer at slot 5 but got null instead (Shader='
' UB='Scene'). Rendering code needs to set a valid uniform buffer for this slot. This can be resolved by adding a SHADER_PARAMETER_RDG_UNIFORM_BUFFER(FSceneUniformParameters, Scene) field to the shader parameter struct and setting its value using the helper method in FSceneView. If you're having trouble identifying which shader is missing the reference, you can run with "-rdgimmediate -rdgdebug -onethread" and find the shader in the callstack.
New:
Added a Volumetric Clouds console variable "r.VolumetricRenderTarget.MinimumDistanceKmToEnableReprojection" to help hide reprojection issues to due to imperfect approximation of cloud depth as a single front surface. This is especially visible when flying through the cloud layer. This doesn't hide all issues but will help in a lot of cases. The problem when using this method is that clouds will look noisier when closer to that distance.
Optimized Volumetric Cloud shadows by using CloudSampleNormAltitudeInLayer correctly. This can result in performance wins between 5 to 10 percent.
Added support for Groom streaming. This allows you to load and unload content based on usage. This is experimental and disabled by default. You can use the console variable "r.HairStrands.Streaming" to enable it.
Added AutoLOD setting to Grooms. This allows it to dynamically adapt the number of active curves based on screen coverage. This avoids having to set this with manually discrete LODs, and adapt curve count at a more finer grain. Combined with streaming, it lowers GPU timing/memory usage. This is experimental and can be opt-in per asset. AutoLOD can be forced on all grooms with "r.HairStrands.AutoLOD.Force".
"WPO Disable Distance" material expression now works for non-Nanite Static Meshes.
Avoid unnecessary ray tracing shadow tracing for hair strands which saves 25% of shadow cost in test cases with many lights.
Added hair attribute value picking when attribute view mode is active.
Made sure GPU-scene instance count is clamped to the maximum GPU-representable index (16M), preventing overflow crashes.
Added ShaderPrint GPU string, which allow to upload strings to GPU(for example, asset name)
Added Blueprint exposed setter function for "NumCustomDataFloats" on Instance Static Mesh Component.
Added LOD curve/point count into the hair LOD panel.
Changed Groom RootUV to be optional. If an imported groom does not have RootUV imported, we no longer generate spherical mapping.
Make FAtlasTextureInvalidationScope public so that external code (plugins) can invalidate a particular texture (For example, for CPU data upload).
Added coverage threshold for hit proxy, in order to control at which coverage hair can be selected.
Added guide type to ease understanding/manipulation of the different types of guides. This allows editing rigging directly from the Groom Editor.
Added an option on the physics settings to force the Niagara component to be visible. This allows users to leverage Niagara rendering when using a custom solver.
Improved Distance Field Scene Management to support more than 4M instances.
Add Groom Memory Stats.
Added necessary conversions from / to the working color space in Volumetric Cloud rendering.
Changed how simulation cache is handled on groom to fix dynamic assignment. A groom asset now needs to opt-in to support groom cache. This opt-in ensures that interpolation data are property built for the groom asset. This option is automatically enabled when assigning a groom cache in the property grid. A groom asset with simulation cache support enabled, can now get a groom cache assigned through Blueprint at runtime. This avoids spawning actual simulation when running with a simulation cache.
Groom deformer (experimental) can now write out attributes (CV color, radius, etc) in addition to position. Attributes are also readable, as well as guide data.
Add visualization of imported attributes in Groom Asset Editor.
Added second Virtual Shadow Map resolution bias for moving lights along with tracking of what lights are moving. When a light stops is does a gradual transition to the original bias. Added Scalability console variables r.Shadow.Virtual.ResolutionLodBiasLocal, r.Shadow.Virtual.ResolutionLodBiasDirectional, and r.Shadow.Virtual.ResolutionLodBiasDirectionalMoving to configure the LOD bias for a light that is currently moving.
Attached VRAM info to AppendStaticClientPerformanceAttributes.
Added per-primitive enum (ShadowCacheInvalidationBehavior) to enable users to override default engine behavior for shadow invalidations. This is useful to prevent invalidations from for example static WPO.
Changed GPU-Scene data to shrink as well as grow. The console variable "r.GPUScene.UseGrowOnlyAllocationPolicy" can be used to disable the new behavior.
Prevented instance over-allocation from crashing the editor / engine, clamping gpu-scene size to MAX_INSTANCE_ID, 16M. Added logging + on-screen message to surface the issue.
Added the console variable "r.CaptureNextDeferredShadingRendererFrame" to trigger capture a following deferred scene render. For example, RenderDoc or PIX.
Added the ability to trigger Virtual Shadow Map invalidation on Nanite LOD streaming changes. This is experimental and is controlled using "r.Nanite.VSMInvalidateOnLODDelta" (default: off).
Added a new global uniform buffer scoped for the scene rather than the view, and moved GPUScene from the view to this buffer. The scene UB uses RDG (unlike View), and is modular.
Improvement:
Reduced groom cluster resources size (~ -15%).
Improved groom per-CV color precision from 8/8/8bits to 11/11/10bits.
Improved the consistency of scene view extension calls in the game viewport and scene captures.
Changed cluster culling to be done in a single pass. This saves about 20% cost of the interpolation work. Clusters are not computed based on the first curve to avoid expensive cluster bound computation.
GPU Skin Cache update render thread optimizations. Rendering multiple Skin Cache enabled skeletal meshes should now process faster due to batching of work.
Improved how Groom Cache updates its data. Interpolation now runs on the GPU, and GPU resources are now cached to avoid constant reupload of the data every frame.
Improved the Pixel Inspector naming, fixed transparency, allowed negative values and ensured that luminance also respects the working color space.
Crash Fix:
Fixed crashes when importing groom-only guide cache. Also fixed a crash when importing guide with zero size radius.
Fixed a crash with hair with nDisplay.
Bug Fix:
Fixed tracing cut for Volumetric Clouds that could happen when traveling in and out of the cloud layer.
We now make sure we flush occlusion queries out of memory if we've turned them off.
Cloud shadow evaluation now works on the SkyAtmosphere when LUT are generated using async compute.
Fixed "GeForceNOWWrapper::GetClientCountryCode()" not writing the output parameter with the country code. (2 char country code).
Fixed Volumetric Cloud flickering happening after some time. The extra camera cut logic was unsafe and unstable.
Applied a fix for height fog on Volumetric Cloud not working when start distance is greater than or equal to 1.
Fixed Sky Atmosphere SkyLightLUT not accounting for overridden light direction.
Fixed flickering SkyViewLUT texture when viewed from afar in space.
Applied a fix for Static Meshes being marked dirty on load when built asynchronously.
Fixed hair bound with scaled transform and take into account hair width, so that large width increases correctly the bound size.
Fixed incorrect scratch buffer address when using more than two RayTracingScene layers causing crash or GPU hang.
Fixed Groom Cache (guide/strands) rendering and guide cache debug visualization
Fixed groom details refreshing in Blueprint.
Fixed how CPU bounds are computed for groom when attached to Skeletal Mesh.
Fixed slow opening of Groom Binding tab in Groom Asset Editor by avoiding loading assets.
Fixed missing groom shadow when "Hidden in Game" and "Hidden Shadow" settings are enabled at the same time with Movie Render Queue using the Path Tracer.
Fixed Rect Light support with MediaTexture. These textures, when assigned to a rect light, were missing invalidation to refresh their atlas content.
Fixed incorrect group names when the groom does not have group ID mapping.
Fixed hair strands rendering with stereo rendering.
Fixed hair scene scattering not running when the scene does not have a sky component.
Fixed hair physics settings working correctly with custom reset.
Fixed issue where the shadow mask texture was incorrectly marked as used due to the preview shadows indicator when the preview indicator was not actually rendered because of a missing Material (in cooked builds, for example).
Fixed a bug with Nanite Custom Depth rendering on some console platforms.
Fixed incorrect alpha channel output for the canvas "Translucent" blend option. It now uses "AlphaBlend" internally.
Fixed Directional Light preshadows in Cascaded Shadow Maps, which were broken after a recent change to WORLD_MAX for Large World Coordinates.
Fixed an issue where the "Draw Debug Capsule" option on Blueprint capsule components would render with incorrect scale.
Validate we have vertex data for the current MinLOD for InstancedStaticMeshes before creating SceneProxy, preventing a crash in some situations.
Deprecated:
Deprecated direct access to groom and groom binding members.
Deprecated Ray Traced Skylight and removed it from Project Settings.
Architecture
New:
Moved all immutable geometry collection rendering data into the Geometry Collection asset. This is built as part of Geometry Collection DDC contents. The scene proxy has been reworked to use this data.
Added optional use of "Remove At Swap" when removing instances from Instanced Static Mesh Component. Also added a console variable to force the behavior with "r.InstancedStaticMeshes.ForceRemoveAtSwap". RemoveAtSwap should be faster than the previous behavior, but may break any code that depends on the current behavior.
Hide MarkedForDelete resources from RenderResourceViewer
Added Insight asset metadata tracking on DX12 buffers
Added the DECLARE_UNIFORM_BUFFER_STRUCT API macro to allow decoupling of uniform buffer parameter struct declaration and definition. Uniform buffer parameter structs can be forward declared, and so can be used by third parties without making the full definition public.
If the morph vertex buffer hasn't updated this frame or for some frames, use the last updated morph buffer for the previous morph data, so it cancels out the motion vector. This fixes a jittery issue in the Morph Target Preview tab in editor previewing using morph sliders.
Added Insight memory trace DirectX12 memory allocator tracking.
Changed the behavior of flag checkbox based on user feedback for the Render Resource Viewer. When unticked the resources with the flag set are now hidden from display. Also remove None flag checkbox and hide Transient resources by default.
Added "r.SceneCapture.DepthPrepassOptimization" to speed up pre-pass depth rendering for Scene Capture. This is a short-term optimization to support certain features requiring a depth pre-pass and can only utilize SceneCapture to achieve it currently. Note turning it on means rendering after depth pre-pass (e.g. SingleLayerWater) is ignored, hence the result is different from when the console variable is off.
Added output owner name to rhi.DumpResourceMemory command.
Added Insight asset metadata tracking on DX12 textures
Exposed CreateSinglePrimitiveSceneUniformBuffer in the IRendererModule to make it possible to create a Scene UniformBuffer using public interface.
Added a context menu on selected resource, and context command to find assets in the Content Browser (shortcut CTRL+B) to the Render Resource Viewer.
Crash Fix:
Fixed an Editor-only GPU crash on unaligned texture copy when loading a streaming virtual texture with border less than 2.
Fixed a crash when trying to render with empty Geometry Collection mesh data.
Fixed "r.SkinCache.RecomputeTangents=0" causing crashes when rendering Skeletal Mesh with the skin cache.
Bug Fix:
Fixed a GPU hang that could occur when changing material type on an Runtime Virtual Texture asset.
Fixed GPUScene per instance HZB instance culling on mobile where previously the HZB was not being bound.
Fixed bad motion vectors being generated for some instanced objects.
Fixed bad hash calculation of virtual texture pool settings. This could lead to an issue where we did not correctly detect when the pool size settings are changing.
Removed render thread access of parent UTexture from FVirtualTexture2DResource. This fixes race condition check firing when the Virtual Texture sRGB flag is flipped.
Fixed off by one logic in check() for Static Mesh LOD count. This would trigger a check() if we used 1 less LOD than the maximum.
Fixed Skeletal Mesh post load being called on game thread from Niagara when actual loading is still happening from the loading thread.
Fixed an issue when multiple viewports are open, only the viewport in focus has valid velocity on skeletal meshes. This is fixed by switching to use GFrameCounter which is incremented once per engine tick, so multi views of the same frame share the same value.
Fixed the Skin Cache Editor debug visualization modes looking different from their console variable equivalent. Fixed the shading difference and the debug texts not showing up correctly.
Fixed Instanced Static Mesh loose params warnings in debug build. Create a loose parameter uniform buffer to capture those parameters.
Lighting
New:
Volumetric Fog buffer allocations are now independent from dynamic resolution scaling.
Sky Light created from Environment Light Mixer uses real time capture by default.
Added support for Rect Light Volumetric Fog light functions.
Fixed wrong color of translucent shadow volume when light is an atmospheric light.
Added Exposure as new light unit.
Improved order independent transparency triangle sorting precision.
Added Virtual Shadow Map high quality shadow filtering for translucent surface for Substrate and legacy path. This is a global opt-in feature (r.Shadow.Virtual.TranslucentQuality).
Bug Fix:
Fixed Subsurface Profile causes an orange rim using Ray Traced lighting at certain angles. The issue is caused by not enough penalty to the depth in the screen-space bilateral filtering.
Fixed missing Volumetric Fog light function from atlas for Spot Light.
Fixed incorrect atlas packing when textures are streamed in / out and require a full atlas refit. Also fixed a crash when Rect Light atlas force update is enabled and lights get toggled on and off.
Fixed a potential Ray Tracing performance issue with invalid shadow rays being traced.
Fix incorrect ref counting decrements when texture is removed from Rect Light texture manager.
Fixed unclamp radius / length for Point / Spot Lights causing visual artifacts.
Fixed overflow when computing Rect Light texture MIP causing incorrect atlas packing.
Lumen
New:
Height fog in Lumen Reflections is now partially supported (only Height Fog, not Volumetric Fog).
Lumen reflection on translucent now accounts for roughness and goes through the denoising process.
Lumen reflections with hit lighting now support multi-bounce reflections, controlled by "Max Reflection Bounces" setting in Post Process Volume.
Lumen Hardware Ray Tracing path is now fully compatible with async compute and it's enabled by default on supported platforms for improved performance.
Added boolean "Allow Front Layer Translucency" to material, which allows to control whether given material should write Front Layer Translucency. This is useful to disable small particles from using Front Layer Transparency or solve sorting issues.
Improved Lumen Scene tracking of primitives. Primitives are now included in the Lumen Scene only if they can be traced by a currently active tracing method.
Added support for Nanite Ray Tracing in Lumen HWRT and Ray Tracing Debug Visualizations
Increased "r.Lumen.Reflections.MaxBounces" limit to 64. It controls the max number of bounces when multi-bounce Lumen reflections are enabled.
Added "r.Lumen.Reflections.VisualizeTraces" debug utility. It visualizes a dedicated reflection ray traced from the current cursor position.
Replaced Lumen Scene visualization with Geometry Normals visualization in Lit->Lumen->Overview visualization mode. Geometry Normals view is useful to spot any issues with distance fields or ray tracing setup.
Added support for two sided and thin foliage shading models in Lumen hit-lighting path.
Enabled ray tracing culling by default in order to simplify initial setup.
Improved global distance field ray hit evaluation, decreasing possibility of sampling surface of an occluded object which is near to the hit point.
Made significant Lumen HWRT optimizations which hit-lighting optimizations targeting PC.
Crash Fix:
Fixed a crash when setting world space radiance cache probe resolution below supported values.
Bug Fix:
Fixed opacity clipping not happening on Lumen front translucency.
Fixed geometry normals on meshes with negative scale (flipped culling) when using hit lighting reflections.
Fixed Lumen not working with ISM / HISM due to automatic primitive merging in surface cache.
Fixed an issue with "r.Lumen.ScreenProbeGather.ScreenTraces.HZBTraversal.SkipFoliageHits" when Substrate is enabled.
Fixed mesh card generation hangs on specific meshes due to an EmbreeRay issue where EmbreeRay.ray.tnear could end up being further than EmbreeRay.ray.tfar causing an infinite loop.
Fixed Material Ambient Occlusion which was incorrectly applied on top of emissive when not using async Lumen, and on top of emissive and direct lighting when using async Lumen.
Fixed Time material node being always set to 0 when capturing Nanite meshes into surface cache.
Fixed artifacts when running on GPUs supporting only 64 thread wide waveops.
Fixed missing reflections far away in the distance due to a hardcoded 1000000.0 cutoff in the bilateral filter.
Fixed surface cache corruption after surface cache atlas resize or compression settings change.
Fixed SWRT reflection traces feedback for mesh SDF and heightfields
Fixed radiance cache lag in scenes with lots of geometry detail (foliage, trees). Such scenes were requesting too many new probes per frame, preventing cached probes from getting any updates.
Materials and Shaders
API Change:
Please use the more efficient UMaterialExpression::GetInputsView() instead.
Any code explicitly using FShaderCompilerInput::bGenerateDirectCompileFile should be replaced with EnumHasAnyFlags(Input.DebugInfoFlags, EShaderDebugInfoFlags::DirectCompileCommandLine) instead.
FShaderCompilerEnvironment::GetDefinitions is now deprecated; only internal shader preprocessing code can now access values of preprocessor definitions. Any code which was previously retrieving definitions by value should set such values via FShaderCompilerEnvironment::SetCompileArgument (or via the helper SetDefineAndCompileArgument which can be used for values which are consumed by both the preprocessor and compilation code) and retrieve these values via FShaderCompilerEnvironment::GetCompileArgument.
Remove any usage of the FShaderPipelineCompileJob::bFailedRemovingUnused; it's no longer needed or used anywhere in engine code.
In the unlikely case there is code referencing FShaderCompilerEnvironment::RemoteServerData it should be removed if possible. If there are use cases of this for which other mechanisms (such as the new compile argument functionality) are not sufficient, please contact the UE dev team.
New:
Optimized material expressions concerning loop detection. This removed individual calls to UMaterialExpression::ContainsInputLoop() and instead moved graph loop search in HLSLTranslator::Translate(). Since this can be done once for all inputs, the visited node set can be shared, making the loop search algorithm O(n), which visits each node exactly once rather than O(n^2) that performs the loop check for each node independently. This optimization, combined with other optimizations, makes translating an expensive material from 5.6 seconds to 0.9 s (a material from Fortnite was used in this test).
Added code in Material Interface serialization function that validates the associated EditorOnlyData name to be "canonical" (name of the material followed by "EditorOnlyData"). If the name isn't canonical it may cause problems with the editor running on cooked content. The validation code will try to rename the EditorOnlyData to the correct name.
Added support for virtual texture feedback behind a Single Layer Water Material. We stochastically drop some writes to the feedback buffer so that we don't overwrite all of the content from the surface beneath.
The legacy MCPP preprocessor was removed and all shader preprocessing is now done with the new "stb_preprocess" library.
Made a change that modifies and future-proofs the mechanism which determines which debug outputs should be dumped for a particular shader compile input. Rather than an ad-hoc collection of boolean flags, a bitfield enum class is now used instead.
Added a new "compile argument" functionality on the FShaderCompilerEnvironment class. This is intended to be used for any generic arguments required by the IShaderFormat implementations as input to the actual compilation process; previously the preprocessor definitions were being abused for such arguments. This is a requirement for forthcoming work which improves the job caching and deduplication mechanisms.
Added functionality to validate the consistency of the shader job cache. If enabled, compilation will be run for all shader jobs, even those that would have been cache hits, and then the resulting output will be compared with the existing cached value. Output for any mismatches will be dumped to Saved/ShaderDebugInfo/CacheMismatches, with files named according to the input hash whose outputs do not match, along with log warnings indicating the mismatch and the associated filenames. Since this effectively disables the job caching mechanism by always compiling jobs, this should only be enabled locally in the case where a cache collision is suspected (which could potentially be the case when DDC is reporting non-determinism in shader maps).
Implemented "GetShadowReplaceState" for ray traced shadows.
Implemented support for explicit #error directives in the shader source in the new preprocessor library.
Fixed a mismatched string formatting argument in the shader compiler (for hlslccflags).
Dragging a cubemap texture onto a mesh in the Editor now generates a compiling Material.
Added camera relative origin options for object, actor, and particle Material expressions. Performing calculations in camera space is more precise and is usually faster by avoiding double precision math in Materials.
ODSC + Staged builds — The ability to launch a staged build and only use the COTF server to process
recompileshaders
commands.Adds a cmd line option,
-odschost=127.0.0.1
which allows the game to connect directly to the COTF server, but only to send ODSC recompileshaders commands.If we don't have a default COTF connection (for cooking assets), we create our own connection to the COTF server.
Refactor code to send a command to the COTF server into a function. That way if we don't have a "special" ODSC only connection we can use the command that way.
Fixed an issue with the "RecompileShaders material" command. It would only search and find a single material and recompile it. This ignored any material instances. Now the code takes into account finding all dependent instances and issuing a recompile command for them.
Added cook stats to track critical path, game thread time to submit Material compile jobs. On Lyra this accounts for ~10.4% of a full cook with
-noshaderddc
and a warm cache for everything else. On CitySample this accounts for ~8.9% of a full cook with-noshaderddc
and a warm cache for everything else.Added EffectiveParallelization to the cook analytics for shader compilation. This statistic shows up as "Shaders_EffectiveParallelization".
NewGatherAnalytics should be grabbing the CompileStatsLock since it is reading the stats -
The console variable r.SSProfiles.Transmission.UseLegacy was added to use the legacy transmission profile. This is enabled by default. When legacy transmission is disabled, the transmission profile is more physically accurate. When enabled, more artistic license is possible by adjusting the ExtinctionScale.
ComputeAllStateCRC()was added. This provides a way to more quickly detect changes to a Material, including changes to any Material Functions or Material Instance parameters.
The Material option "Always Evaluate World Position Offset" was added. When enabled, World Position Offset is always evaluated for a Material, and cannot be disabled by "Evaluate World Position Offset" or "World Position Offset Disable Distance" on the component. This override is intended for Materials that should not disable World Position Offset, even for performance purposes.
Added Shader Compilation stats to cook analytics. This adds GatherAnalytics to the various shader compilation classes allowing each of them to pass their own stats back to the cook. These stats have the base name "Shaders_" as a prefix. The goal is to capture high level stats which are good indicators of performance and are useful for catching regressions. Also added:
Shader Job Cache stats to track Queries Hits, NumInputs, NumOutputs, and MemUsed.
MemBudget Stats that include ShadersCompiled, TotalThreadTimeForAllShaders, and TotalThreadPreprocessForAllShaders.
The compiler options flags CFLAG_CullBeforeFetch and CFLAG_WarpCulling were added to control warp culling and Cull Before Fetch hardware optimizations.
Added the console variable r.MaterialLogErrorOnFailure which emits an error when a Material fails to compile (instead of a warning). This variable defaults to false, but you can enable it from the command line with the following: -dpcvars="r.MaterialLogErrorOnFailure=1"
Added a cook stat to provide path time metrics on UMaterialInstance::PostLoad. This accounts for 7% of critical path time when cooking certain projects.
Improvement:
Optimizations in Material translation code amounting to 50% speed up. Optimized function UMaterialExpression::GetInputs() with highest exclusive run-time during material translation from 19.79% to 1.79% exclusive run time. This change caches the inputs upon expression creation by default and returns a TArrayView instead of always creating a new transient dynamic array. The optimization also simplifies code for some Expression types. Also optimized ContainsInputLoopInternal() to use a linked list of stack allocated nodes instead of Pushing/Popping from a dynamic array.
Don't set EarlyZ if we are sampling virtual textures but not doing any virtual texture feedback. This is a small optimization for the case of rendering with runtime virtual texture and not using feedback. Typically that can happen with landscape grass.
Implemented changes to hash and calculate Material Debug Name once per-Material instead of once per-shader job. FStrings are passed by reference in PrepareMaterialShaderCompileJob instead of copying them.
Crash Fix:
Added a check that reports errors if a parameter in a Material is bound to different values, instead of silently trying to compile the Material anyway. This was causing a crash when two Material functions containing a shared parameter bound to different values (for example, different textures) were used in the same Material.
Fixed access in "ItemPropertyNode.cpp" to a shared ptr constructed from a weak ptr. Code was not testing that object still exists, causing a crash when resetting Linked Material Blend Layer to Default.
Fixed a bug in MaterialX Luminance, which caused the Editor to crash after dragging an additional Luminance variable from the same connected node.
Fixed a crash caused by errors in the code for Material duplication.
Implemented changes to prevent the Editor from crashing when the user selects a Material whose ShaderMap contains null shaders. This change only makes the Editor more robust and prevents the crash; shaders in the ShaderMap may be null after loading due to external issues.
Fixed an Editor crash when Material Parameter nodes were renamed to an empty string. Empty strings are now ignored when renaming a Material Editor node.
Bug Fix:
Fixed too intense transmission in the Subsurface Profile shading model by extending ExtinctionScale from 1 to 100. This reduces the transmission distance when the scale is larger than 1.
Resolved several issues with CompileFXC.bat which prevented it from working correctly.
Addressed issues with the FRHIDispatchIndirectParameters size which could unnecessarily cause a full shader recompile on some platforms.
Fixed an issue with decals being rendered a second time in the translucent pass. This could happen for some depth of field setups, including the cine camera view.
Fixed an issue which caused oversaturated emissive GBuffer decals caused by shader code typo using DECAL_RENDERTARGET instead of DECAL_RENDERTARGETMODE.
Fixed an issue with wireframe colors on shipping builds.
Fixed a bug where MaterialInstanceDynamics created in the Blueprint Editor were not marked as public. This prevented the level from being saved.
Fixed a subsurface transmission bug where the transmission lookup table (LUT) is incorrectly built based on unit scale for the subsurface profile.
Fix a bug preventing some Materials from being moved to a different folder in the Content Browser. The issue was caused by an invalid state of the Material EditorOnlyData.
Disabled ability to override parameters that cause Material Instances to create a new shader permutation when parenting a restricted (non-base game cooked) parent. In restrictive mode, material instances could not inherit from a cooked material not in base modules. Now material instances can inherit from such restricted materials as long as they do not introduce a new static parameters permutation and thus a new shader. To prevent this, the user interface disables the checkboxes that would trigger a new shader to be created, with full validation is still performed at cook time, so even if a user manages to create a material instance with a static permutation, this would be rejected by the content worker.
Fixed a memory leak which occurred when Planar Reflections outside the camera view were culled without releasing the memory.
Solved an issue with incorrect Material EditorOnlyData name messaging being generated during cooking.
Fixed artifacts in the Clear Coat shading model which occurred when one of the components of the base color is exactly 0.0.
Fixed a bug with DistanceFieldApproxAO returning an incorrect result when the Material specifies an input Normal.
Fixed a bug whereby Material Instances with different sets of static parameter values and other flags would race to print out debug information, resulting in different sets of debug info from one run to the next.
Solved a regression in the job cache hit rate, which occurred because the debug info path was always included as part of the computation of the job input hash. This information is now excluded from the hash, restoring and potentially improving the hit rate.
Fixed a minor bug in the shader parameter parser functionality which was assuming only a single space between #line and the line number in line directives.
Fixed a crash in the Material Analyzer which occurred when a StaticComponentMaskParameter was present.
Fixed an enum mistake in UMaterialInterface::GetFontParameterValue.
Deprecated:
Reintroduced (and deprecated) the older version of ContainsInnerLoopInternal() in UMaterialExpression.
The FShaderPipelineCompileJob::bFailedRemovingUnused field was deprecated. The only purpose of this field was to append some information to a log message which was determined to be unnecessary.
The FShaderCompilerEnvironment::RemoteServerData field was deprecated. Since some IShaderFormat-specific remote compile functionality was removed, this is only used for adding unnecessary ifdef'd out debug info to associated shaders.
Removed:
Removed
const
from GatherAnalytics since it now needs to grab the lock and call GetTimeShaderCompilationWasActive.
Nanite
New:
Add an option on Static Mesh for WPO not to write velocity. We default to writing velocity, but the option can be useful if we know that we have "static" WPO for things like camera-facing impostors where we don't want that to generate motion vectors.
Added support for Spline Mesh Component with Nanite. This is experimental.
Improved visual quality of selection outlines of Nanite in the editor. There are no more jittering, or occlusion issues.
Implemented instance culling hierarchy and support for Nanite instance culling based on this. The feature is disabled by default (r.SceneCulling), and may be considered Beta for this release.
Added a new show flag to enable/disable the visualization of Nanite streaming data (Show -> Nanite -> Streaming Geometry). When disabled Nanite meshes will only be rendered at the quality level that is always resident in memory.
Added new Explicit Tangents option to Nanite mesh settings. When enabled, the tangents are stored explicitly on disk instead of being derived implicitly at runtime. While this comes at a small additional storage cost, it can be preferable in cases where the implicit tangents are not precise enough.
Optimized CPU overhead of Nanite streamer
Improvement:
Implemented performance improvements to NaniteStreamOut.
New sliding window vertex cache for pixel programmable. 20% faster masked foliage rasterization in forest scene.
Crash Fix:
Fixed a crash that would happen in building Nanite if the mesh had no triangles.
Fixed a crash in the Nanite streamer that could occur on shutdown.
Fixed a crash in the Nanite streamer that could occur on IO errors.
Bug Fix:
Fixed a bug in the editor where selecting an ISM / HISM actor or component would not render selection outlines for Nanite instances.
Fixed the "Shadow Pass Switch" Material node for World Position Offset, Pixel Depth Offset, and Opacity Mask on Nanite materials.
Applied a fix for the Camera Position Material Expression node returning the wrong position for shadow views with Nanite programmable rasterization.
Fixed issues with selection and deletion of Nanite Foliage Instances in the editor.
Fixed an issue where some Nanite visible clusters' flags could get cleared, causing WPO to be disabled for them.
Fixed issues with Custom Depth rendering of Nanite on consoles.
Fixed an issue where reading custom data as a vector in a Nanite Material to calculate World Position Offset would always result in using the default value.
Fixed issues with rendering Nanite custom depth with multiple views (for example, split-screen and VR)
Added a check when the build process goes out of memory and prints better log info (error code and Graph->Num when PartGraphRecursive fails).
Fixed Client issue that does not respect Allow Masked Material set in the editor
Fixed an ensure that could trigger when Nanite meshes were loaded, but there were no Nanite meshes in the scene.
Neural Network Engine (NNE)
New:
NNEModelInstance has been introduced to prepare weight sharing optimizations. A runtime now creates a model, and one or multiple inferable model instances are created from a model.
NNE runtimes have been moved to own plugins which need to be enabled in addition to NNE to become available.
Improvement:
The NNERuntimeORTCpu has been updated to use the ORT 1.14.1 library.
UNNEModelData assets have an allow list to exclude certain runtimes from cooking it. It can be accessed by double clicking the asset. The feature defaults to an empty list which will cook for any runtime matching the previous behavior.
UNNEModelData assets can be reimported and opened in editor (using netron).
Deprecated:
The old NeuralNetworkInference (NNI) has been removed, please use NeuralNetworkEngine (NNE) instead.
Niagara
New:
Niagara opaque particles can now collide with depth buffer without colliding with themselves. It can be achieved using the new PartialDepthBufferCollisionQuery node. This is Experimental.
Implemented Summary View 2.0 which allows the user to create custom views for an emitter. The primary use case is exposing specific inputs for complicated emitters, such as fluids. However, this is a useful feature to put emphasis on specific parts of an emitter.
Now we allow Python conversion scripts to reset values to their default and set hidden inputs on the new module.
Exposed Timed Niagara Effect Properties to Blueprint.
Added drag/drop support for emitter assets in the system editor.
Made visuals for convert nodes more compact.
Added support for curve assets to the curve data interfaces.
Added Collapse Categories support for the stack. If a Data Interface (any object, but primary consumers are Data Interfaces) has that flag, root level categories are skipped and instead their children are used.
Revamped the Stack type UI (more compact, more color, better visuals).
Added a setting to make numeric inputs feel snappier by updating the sim after every input change.
Improved metadata for module inputs.
Added True argument to allow the deletion of a static switch variable when no static switch is referencing it anymore.
Added Inline enum support for static switches to Niagara.
To use it, set a static switch node to Integer mode. The case labels are now editable. If edited, the display of the integers will show up like an enum in the Niagara stack when editing module inputs.
To change this, access the Widget Customization entry in a variable's settings. Default is the default integer view, and Enum Style is the enum-like view.
This is useful for one-off static switches that are kept in a single module and don't need an entire enum asset to be created and maintained.
Added widget support for stack inputs (sliders, min/max, volume).
Niagara renderers can now be moved via context action.
When pasting an entire emitter from one system to another, user parameters are now copied with them and added to the new system, if they don't exist yet.
Added age update mode dropdown to life cycle track.
Added a component and life cycle track by default when adding a Niagara Actor to sequencer.
Added a warning if life cycle track is not set up correctly for sim caching.
Added Python script support for deprecated module changes.
Changed the Reset Simulation command (hitting Space) to also resume playback if currently paused.
Reordered system properties.
User Parameters now support widget customization via the User Parameters Hierarchy Editor. This includes setting Min and Max, displaying floats or integers as sliders, and more.
Added a default UI state option for emitters that determine if they will be shown in Summary View or default view when added to a system or creating a new emitter.
Changed the Behavior Examples label to Learning Examples.
Added logic to ensure the emitter editor data exists when an emitter is post loaded or initialized.
Simplified emitter properties:
Removed Combine Event Spawn option.
Removed Script Category property for emitters in systems.
Removed Asset options properties for emitters in systems.
Moved Attributes To Preserve to the advanced view.
Hide Pre Allocation Count is now hidden if the mode is automatic estimate.
Moved Max Delta Time Per Tick to the plugin settings.
Added a decal icon for the decal renderer.
Changed the tab names Selection and Selected Emitters in the Niagara System editor to Details, including the icon, to be more consistent with the engine.
Fixed pin coloring for constant value make nodes.
Added thumbnails for curve assets.
Added a context menu option to record multiple cache tracks at once.
Added a new scratchpad action and set parameters to suggested in menu.
When renaming User Parameters in the User Parameters tab, name verification is now implemented.
Added duplicate script variable validation and fix logic. Validation and Fix can be run via command line in editor. The commandlet can be run via the project startup command line and will print out all scripts with their given guid conflicts.
Added a custom search box that adds filtering for parameters in the NPC editor.
More view settings are now saved per-asset (view location, view rotation and orbit mode) or in a config file to maintain Niagara viewport settings across sessions.
Improvement:
Improved the UX to expose options of function script input nodes.
Crash Fix:
Added reallocate pins when a static switch node references a different, pre-existing script variable via renaming. This fixes a crash where the visuals expect the pins to be created under the new static switch variable.
Fixed a crash when trying to set uobject-attributes in the stack.
Refactored a temporary array of transient stack entries that could get garbage collected anytime and cause various crashes. These stack entries managed stack entries for comment nodes, so now we have a proper comment collection stack entry.
Bug Fix:
Added various small fixes to static switch nodes.
Fixed an ensure being triggered when editing any FText field in Niagara script details.
Fixed a bug where sim caching can lead to minute-long hitches with large numbers of particles.
Fixed a bug where disabled modules could generate compile warnings.
When applying modules that are in use in an emitter/system, the module no longer gets deselected, and the UI gets refreshed so we get live changes.
Fixed a bug where component renderers were still visible when another emitter was running isolated.
Fixed a compilation bug with disabled nodes and data interfaces.
Removed the search box in the Details panel of the NPC editor.
Fixed the scroll bar not appearing in the Niagara Parameter Collections.
Fixed copy paste of modules not properly pasting values for static switches in static switch chains.
Fixed issue when finalizing empty sim caches.
Removed of incorrect default pins that would show up as 'None'.
Fixed scratch pad parameter panel bug where if a used function had the same parameter as the script asset that owned it, it would override the asset's own parameter. UI wise it would look fine due to the same name + type, but selecting it wouldn't work as the guid wouldn't match. - Removed sub graphs adding their script variables to be used for the script parameter panel - Refactored into using the graph's script variables directly instead of using the reference map. Reference map is now only used for reference count, not for item creation.
Fixed copy paste of modules not properly pasting values for static switches in static switch chains.
Fixed system parameter panel selecting parameters in scratch pad via name instead of via guid.
Fixed dragdrop ops of different types than FNiagaraHierarchyDragDropOps from being used in the hierarchy editor.
Fixed issue when adding a new user parameter while a custom section is selected.
Fixed issue where the length of the life cycle track was not evaluated correctly when caching a Niagara simulation.
Fixed LWC issue in camera DI.
Fixed emitters opening up the parameter panel to "Active Module" instead of "Active Overview".
Fixed editor only parameters not being marked as RF_Transactional. This fixes issues with transactions not properly being recorded in Niagara.
Fixed issue where replacing a module with another module using the same name caused it to lose static switch inputs.
Fixed issue where HLSL compile errors were not correctly shown in the stack.
Fixed a crash when using LWC structs.
Fixed issue where SWC structs would appear in the UI.
Fixed issue where using LWC structs as module inputs would not use the correct struct converter.
Fixed the script variable customization to also account for parameter pins that are disconnected from an output node. This fixes an issue in which a disconnected parameter pin wouldn't show its custom pin if the value mode was set to 'custom'. Also, you no longer need to reselect a parameter after adding it to a parameter map get node to make it show the default value
Added additional call to replace user param references on emitters and fixed renderer attribute binding references not being fixed when renaming a user parameter.
Fixed issue where the wrong asset was used to initialize sequencer recording.
Fixed emitter assets not dirtying when disabling a sim stage.
Fixed loss of parameter references when updating an input parameter's name in a module. The 'BoundPinNames' array was getting updated with an incorrect parameter handle, which made the lookup for subsequent renames break
Fixed issue where changing versioned properties would not dirty a script/emitter.
Fixed issue with async raytrace data interface not issuing traces.
Stopped considering input pins for get nodes as parameter reference This fixes an issue where a pin that was only referenced in a get node would count 2 references, which would stop it from being renamed properly from pin as it would duplicate a new parameter
Fixed transform function descriptions in camera DI.
Fix for the Apply button in Niagara scripts only checking for the exposed version guid instead of the currently edited version.
Fixed missing stack refresh when changing a user parameter name.
Fixed issue where the Details view would not properly show rows with changed visibility after a tree refresh.
Fixed issue when undoing an emitter add transaction.
Fixed an unnecessary refresh in the parameter panel causing loss of selection after modifying a value of a variable.
Added metadata to allow multiline text entry for python script.
Fixed sequencer caching bugs.
Fixed Blueprint API of "spawn system with parameter" functions.
Fixed output & transient parameters appearing outside their own stage when opening a parameter menu.
Fixed Custom HLSL pins not being modifiable. Also added visibility delegates for action "Reset to Default" and "Promote to Parameter". Also changed the Pin Section name used in Niagara to use the parent section name so we no longer have 2 sections called "Pin Actions" at times
Cleanup of old rapid iteration parameters used name only, not type. This resulted in cases where old parameters that used the same name as a new parameter of different type would not get cleaned up.
Fixed multiple lookups in the merge manager that looked up by name only instead of name + type. This in conjunction with the fix above results in more stable diff process. All of this fixes an issue where some fluid emitters were showing or not showing the 'reset to parent emitter' arrow wrongly
'Ghost entries' no longer appear and a stack search result gets maintained even after changing a value in the stack.
Focusing the scratch pad manager tab when creating a new scratch pad so you can immediately rename it Made the toolkitmodebase public so that other parts in the plugin can access the tab names properly
Fixed "parameter for" node.
Fix highlighting of multiline HLSL comments.
Fixed issue where the simulation was always reset after a change, even when paused.
Heterogeneous Volumes: Introduce per-volume step size based on local-space step factors. Step size is now calculated in local space as a function of voxel width, projected along the ray direction. Toggle global step-size values to -1 (disabled). Change default MaxStepCount to 512 steps.
Fix for alpha-compositing issues with Heterogeneous Volumes when using the Niagara baker.
Sort heterogeneous volumes by camera-depth and adjust compositing to match.
Path Tracer
New:
Added depth pass for path tracing that matches the behavior of the rasterizer path. The output is in DepthZ so post process depth of field works now as a bonus. You can use the same depth post process material to output in Movie Render Queue. If you'd like to disable the path traced depth buffer and use the depth from the rasterizer instead, you can use "r.PathTracing.Override.Depth 0". Also, the "Output Depth" has been renamed to "Output Depth and Velocity" in Materials.
Added Post Process Material and Movie Render Queue support for path tracing buffers. This means that Post Process can access path tracing buffers (raw/denoised radiance, albedo, normal, variance) with unique materials using the "Path Tracing Buffer Texture" Material Expression. And, access means that output in Movie Render Queue is supported.
Added basic support for Substrate has been implemented. The path tracer can now handle Substrate Materials, including multi-layered ones. Substrate's MFP is mapped to random walk subsurface scattering for opaque materials and to absorption in translucent cases. We expect to see fairly close agreement in many cases, though this support should still be regarded as experimental. Support for translucency and thin shading models are expected to improve in future releases.
Sky meshes should be included for raytracing when using the path tracer The console variable "r.RayTracing.ExcludeSky" is now ignored when the path tracer is active.
Implemented support for DBuffer Material Expression functionality in Path Tracer
Added a Blueprint call to invalidate path tracing output. The intent of this call is to give control over cases that cannot be handled by automatic invalidations.
The path traced image now invalidates itself when a Skeletal Mesh morph target changes.
Changed refraction rays to behave more like camera rays with respect to the "Affect Indirect" primitive setting. This makes refraction and transparency behave more consistently with one another.
Added support for path tracing heterogeneous volumes. This uses the Voxel Grid Pipeline to create global acceleration structures to represent heterogeneous volumes in the path tracer. Creation of global acceleration structures is memory intensive. Refer to the corresponding Voxel Grid Pipeline CL 25170595 for instructions on parameter tuning to control memory and quality. r.PathTracing.HeterogeneousVolumes (default = 0) Enables heterogeneous volume rendering in the path tracer r.PathTracing.HeterogeneousVolumes.RebuildEveryFrame (default = 1) Rebuilds the acceleration structures every frame.
Adding volume emission to the path tracer.
Improvement:
Improved SSS random walk sampling.
Improved volume light sampling for local lights.
OpenImageDenoise transfers have been sped up. Some optimizations were made to the pixel readback which saves some denoising time.
Bug Fix:
Fixed darkening in subsurface scattering when the scattering radius is small. The code now more seamlessly blends towards the diffuse behavior instead.
Fixed issue where materials using non-tangent space normals could have flipped normals in some cases.
Fixed fireflies that can occur from the rough diffuse shading model at grazing angles.
Fixed the "Path Tracing Quality Switch" node in materials not working in decal materials.
Removed:
The Path Tracing Post Processing Volume setting for Filter Width for anti-aliasing has been removed. We found the default value (3.0) is effectively the optimal one and that there wasn't much reason to change it. If you still need this property, you can use the console variable "r.PathTracing.FilterWidth" to adjust it.
Postprocessing
New:
Added a Post Process Setting to Image Effects with Sharpen. This controls the strength of image sharpening applied during tonemapping.
RHI
New:
Vulkan Bindless: Push a draft implementation of the FVulkanBindlessDescriptorManager that uses VK_EXT_descriptor_buffer. Uses one descriptor set for each type of resource, each backed by a descriptor buffer. Everything is bound and visible to every shader, except uniform buffers which are bound per draw/dispatch. Uses a single pipeline layout for everything. Initial buffer sizes for each descriptor type can be configured through CVars (they do not automatically grow yet). Still very experimental, and requires multiple other features to be disabled.
VulkanRHI: Use array for dynamic buffer allocations and removed the hardcoded "NUM_BUFFERS=3" value. Use a fence to manage buffer availability. Do not rotate dynamic buffer usage when a staging buffer is used for the copy.
VulkanRHI: Vulkan SDK upgrade to 1.3.239
Removing full-type RHI_API uses and adding them to members that need it. This reduces export counts and is part of upcoming coding standard changes.
Moving D3D12 Extension includes into their own headers.
Updating to Agility SDK 1.610.2
Moving a couple DDSPI fields to Editor-only code blocks, and moving Editor-only DDSPI types into the cpp files to keep Editor includes out of the global scope.
VulkanRHI: Moved Engine minimum core version to Vulkan 1.1.
VulkanRHI: Added VULKAN_SM6. Moved features and requirements around to match what was done on D3D12 SM6.
Making FRayTracingGeometryInitializer not a memory layout type since nothing needs it like that anymore.
VulkanRHI: Use Vulkan profiles to validate support for a feature level on startup before call to CreateRHI().
VulkanRHI: Added Vulkan_1_3 support for shader compilation, which is used for VULKAN_SM6.
Improved DX12 GPU breadcrumbs that track all active, finished and not started scopes on the GPU. The new implementation logs all scopes currently scheduled or active on the GPU.
RHI: Avoid re-allocating the OutData array in RHIRead*SurfaceData when possible.
Enabled async compute by default in D3D12 on NVIDIA Ampere and newer cards.
The command line argument "-vulkandebug" allows usage of our distributed vulkan validation layers for both Windows and Linux.
Bug Fix:
Bumped nVidia minimum version to 527.27. A random issue with landscape tools has been known to be problematic for drivers less than version 526.67. The exact cause is unknown but a resolution appears to have been made in one of the 527 releases. The first version to not exhibit the problem is 527.27.
Fixed FRHIGPUTextureReadback to work with subrects, as well as volumes and texture arrays.
Fixed structure init in Vulkan RHI.
Removed:
Removing RHI code deprecated in 5.0.
Removing deprecated RHI symbols.
Removed CoreMinimal includes from public RHI headers.
Removed the deprecated RHISetComputeShader.
Substrate
New:
Brought back proper premultiplied alpha that can be toggled on Materials and Material Instances. Coverage over the background can be overridden from the root node when Alpha Composite Blend Mode is selected. If not plugged in, coverage of over background is off and regular blending is used.
Added support for decals with Substrate Materials.
GPU Lightmass now supports Substrate Materials.
Added support for glint BSDF to Substrate.
Ray tracing material shaders use fully simplified material for smaller payload.
Optimized Substrate shader compilation time.
Added in Material Editor complexity on Slab node.
Substrate now uses progressive material simplification to fit in memory. Simplifying Slabs at the bottom of the material topology first.
Made multiple improvements to the Material Editor Substrate tab.
Added support for Planar Reflections to Substrate.
Lumen card capture now uses fully simplified material with Substrate.
Added distortion coverage mode to be compatible with legacy distortion in Substrate Materials.
Fixed some editor pop up message due to bad bitfield macro when using Substrate Materials.
MFP is no longer clamped to fp111110 when in forward to be able to get to an transmittance closer to identity=1 (invisible surface).
Allocation of tile tile list buffers is now independent from the dynamic resolution when using Substrate.
When a new material is created using Substrate, a simple UE4-like lit shading model material function is used instead of a Slab. This shows that Substrate works with material function and makes material authoring simpler by default.
Added Substrate node for converting Index of Refraction to F0 and rotating anisotropy tangent.
Added Substrate Standard Surface nodes.
Add Specular Profile to Substrate. This allows the artist to provide a custom LUT describing specular behavior for view and light angles. The LUT can be procedurally generated or provided from a texture.
Added material buffer allocation policy. This allows control of how the material buffer is allocated. This is controlled with "r.Substrate.BytesPerPixel.Mode". When set to 0, allocate material buffer based on view requirement. When set to 1, allocate material buffer based on view requirement, but can only grow over frame to minimize buffer reallocation and hitches. When set to 2, allocate material buffer based on platform settings.
Added Byte Per Pixel view mode for Substrate.
Change Substrate Cloth / Sheen model to From Charlie to Disney LTC.
Added normal curvature-based roughness support.
Added Substrate Topology previsualization on the Substrate node within Material Editor.
Improvement:
Improved Substrate diffuse color sRGB encoding.
Crash Fix:
Fixed a crash when assigning a Material Function onto new material that is reopened later.
Fixed a crash when a Substrate Material has more shared tangent basis than allowed.
Bug Fix:
Fixed Substrate Material Preview on nodes to account for the Substrate tree from the previewed node only. This fixed material function input / output, reroute nodes and everything in between that is not directly connected to FrontMaterial.
Applied a fix for Virtual Shadow Maps and Subsurface Scattering using Substrate Materials.
Fixed opacity clipping for translucent writing velocity.
DXC and SPIRV-Cross fixes to enable Substrate in D3D11.
Fixed Volumetric Cloud Extinction being grayscale.
The Unlit Shading Mode now also works with refraction.
Fixed emissive exhibiting different behavior when enabling Substrate.
Decals now do not impact the look of other substrate material when in range of effect.
Fixed a wrong opacity with Substrate for depth and velocity.
Fixed "UseDiffusion" affecting the look of simple Volume Slabs.
Slab now respects Additive Blend Mode.
Fixed bad transmittance when doing masking through a vertical layer operator and more than 2 layers.
Applied a fix for Substrate interacting with responsive anti-aliasing.
Fixed microoclusion/F0/F90 usage.
Brought back support for "Custom UV" on root node.
Substrate now properly accounts for "Allow Negative Color."
Fixed Lumen ScreenProbeGather ReferenceMode when Substrate is enabled.
Fixed Lumen ScreenProbeGather and Lumen Reflection temporal filtering with multi-BSDFs.
Fixed Lumen history being reset on LumenScreenProbeGather & LumenReflections when Substrate 'max BSDF count' change.
Fixed legacy Eye Material conversion with Substrate.
Avoid non-necessary initialization causing massive shader stall. Reduce base pass cost of complex material by ~50%.
Fixed ray traced shadows with Substrate
Fixed Lumen specular interreflection with Substrate.
Fixed Lumen ScreenProbe / Reflection history reprojection with dynamic resolution scaling when enabled. Also fix Lumen ScreenProbe normal disocclusion.
Fixed Lumen.Visualize.IndirectDiffuse with Substrate enabled.
Added support for short range Ambient Occlusion with Lumen HWRT path.
Fixed "IsThin" support with SSS diffusion and SSS profile diffusion (now it works as expected, and diffusion is no longer scaled incorrectly) Also fixed "IsThin" to support surface for translucent case.
Fixed Substrate legacy material conversion with Virtual Texture input.
Fixed Substrate missing tangent frame when using parameter blending.
Fixed increase of energy when light transmission is enabled due to incorrectly normalize phase function
Fixed incorrect VSM backface culling with Substrate for pixel having subsurface.
Fixed missing Emissive input on Hair materials with Substrate.
Simulation
Physics
API Change:
GlobalMatrices has been deprecated and ComponentSpaceTransforms should be used instead. If there's a need to get FMatrix type, Unreal Engine provides simple ways to convert from the FTransfom type to FMatrix type.
New:
Added the ability to add collision profile overrides per particle, per level, and for abandoned particles on Geometry Collections.
Added cluster unions which are functionally equivalent to welding, but for Geometry Collections. This will eventually be expanded to support Static Meshes.
Introduced new external context-safe payload that can be used for Chaos acceleration structures.
Revamped scene query interfaces with templates to be able to accept additional types of scene query overrides.
Exposed a ComponentOverlapComponent function on the primitive component that also returns the overlap result.
Geometry Collections will not try to replicate empty internal clusters.
Added support for implicit object unions in OverlapQuery and SweepQuery.
Added an option (p.Chaos.DebugDraw.ConnectionGraphLevelOffset) to change what level of connection graph is being drawn in Chaos Debug Draw.
Disabled cluster particles when they no longer have children.
Geometry Collection particles now have a debug name set.
Added functions to the physics object interface to make line trace, overlap, and sweep on the UPrimitiveComponent generalizable beyond Static Meshes.
Modified the K2 overlap functions to return a hit result as well
Introduced a new FPhysicsObjectId alias to add some type clarity to the various functions on the IPhysicsComponent that deal with this ID.
Moved ChaosSQTypes from PhysicsCore to Chaos.
Exposed getters for the XR and Velocities property on geometry particles.
The FaceNormal is utilized in the sweep even when we hit implicit objects without a face index.
Added accessor functions to the FReadPhysicsObjectInterface to convert the physics object handle to the raw particle appropriate for the context.
The physics object interface and the Scene Query types should now be able to statically select the shape instance to operate on.
Added additional trace scopes for the various paths in OnSyncBodies.
Added functions to the physics object interface to query the hierarchy level of a particle and generate connectivity edges between particles.
Modified the various connectivity graph function APIs to be more flexible and to support filtering based on a "from" and "to" set of particles.
The physics object interface now uses const handles when possible.
Added a function to get the body ID from the component, given a raw game-thread particle.
Added support for merging collisions for contact pairs that appear with matching solver time. This removes cases where multiple hits for a contact pair would be received in a single frame with identical velocity data (since delta-V is updated per-frame). Includes information on multiple contact pairs that hit in the same solver frame to allow users to still use the same data.
Added torque units Nm and kg cm^2 / s^2, and force unit kg cm / s^2.
Added conversion utilities.
Optimized FPhysInterface_Chaos::SetMaterial by reusing a formerly temporary allocation.
Added render interpolation of the resulting offset from a physics resimulation via linear offset decay.
Added functionality to cache physics state of objects that are based on FPhysicsObject. The cached state is used by state replication and unlocks state/movement replication for objects like Cluster Unions which are based on FPhysicsObject.
Added the option to override an Actor's physics replication mode via physics object presets.
Added a Geometry Collection Dataflow node to simplify existing convex hulls on a Collection, with options to use either mesh-based simplification or a new dihedral angle threshold method.
Changed the cache collection object to be usable in Blueprints.
Geometry Collections now expose the IsRootBroken function to Blueprints.
Made the following changes to Dataflow:
Added new math library nodes.
Moved make nodes to a separate file.
Moved conversion nodes to a separate file.
Made sure the Geometry Collection custom renderer system is properly handling the bHiddenInGame flag.
Exposed Gravity settings on the immediate physics Actor.
Added the concept of internal call stack to the context to allow detection of loops in Dataflow.
ISM Pool optimization: made sure instantiated Static Meshed from the ISM Pool do not create their physics state.
Added override nodes to Dataflow.
Added Override properties to the Geometry Collection asset.
Added support for AssetUserData API to Geometry Collection assets.
Chaos: Optimized SpatialAccelerationCollection RemoveFrom by avoiding array allocation.
Added ability to set the gravity group index for a Geometry Collection.
Updated Geometry Collections to report sockets in their root proxy Static Meshes if they are available.
Added a Dataflow node to read specific float values from a float array.
Optimized data marshalling of Geometry Collections' physics results between the physics thread and game thread.
Removed global transforms from the payloads.
Only send data for the transform indices that have been changed (reduced copies and memory allocations).
Optimized the processing of Geometry Collection physics results by using ref counting pointers instead of making copies of the entire data.
Added a setter on EnableNanite UProperty to Geometry Collections.
Added the Chaos debug command p.Chaos.DebugDraw.ColorShapesByInternalCluster to display which physics particle is an internal cluster.
Added support to LevelSet for the connection graph generation.
Added new options to the Auto Cluster tool in Fracture Mode for grid-based clustering and a minimum cluster volume option.
The Tiny Geo tool in Fracture Mode now has a Tiny Cluster mode, which merges tiny clusters. This includes options to control whether the clusters considered should be restricted to the current Fracture Level, or to sibling clusters in the current hierarchy, or to clusters connected via the current proximity graph.
Added new Fracture plugin project settings to control the default location for new Geometry Collection assets created in Fracture Mode.
Added a Quick Settings section to the Fracture Editor UI, to allow users to easily control the default folder for new assets and to jump to fracture project and editor settings.
Added a way to control at which level Geometry Collection position and velocity are replicated for clusters.
Added support for custom primitive data in Geometry Collection Assets.
The Fracture Mode now shows the Rest Collection of the first-selected Geometry Collection in the level, providing easier access to the asset.
Added a Get Root Index node to Dataflow for managed array collections.
Added Geometry Collection Dataflow nodes: Cluster Selected, Merge Clusters, and Select Target Level.
The Split Components setting for Geometry Collections has been renamed Split Meshes, to reduce confusion with the unrelated UE Component concept.
Added physics material options on to the Geometry Collection asset.
Added the ability to use density from the assigned material ( or the overridden ones on the component).
Added the ability to Apply Default from Asset on the component as a button in the editor properties.
Added a BranchCollection Dataflow node.
The Fracture Mode Materials Tool now shows and updates the materials of the Geometry Collection asset (the Rest Collection), rather than the override materials on the Geometry Collection Component.
The Fracture Mode Set Removal, State, and Convex tools now automatically change the Fracture Mode's Outliner Column Mode to Removal, State, and Collision, respectively on switching to the tool.
Chaos cloth XPBDSpringConstraints have been internally rescaled to be resolution independent. Existing constraints have their behavior changed depending on their current resolution (spring length). These constraints were not exposed through any existing cloth plugins, so minimal impact is expected.
The Fracture Mode Proximity Tool can now set up Geometry Collection proximity based on a measure of the contact area of the convex hulls of the bones. This allows for better filtering of connections where the bones were barely touching, or only touching along a sharp corner.
Added a float comparison Dataflow node. Int and Float comparison nodes are now in the Math > Compare category.
Added a new material-based Damage Model for Geometry Collections. It is using material tensile strength and surface area of contacts between pieces to compute damage thresholds.
Added a node to get the sum of convex hull volumes for a given Geometry Collection bone selection.
The Create Leaf Convex Hulls Dataflow node now exposes the option to run a convex decomposition on leaf nodes of a Geometry Collection, enabling more accurate convex collision.
Add an Uncluster Geometry Collection Dataflow node.
Added the ability to control server and/or client Chaos debug draw via the following console variables: p.Chaos.Solver.DebugDraw.ShowServer and p.Chaos.Solver.DebugDraw.ShowClient. Also added the p.chaos.debugdraw.seethrough console variable to control whether or not the lines are drawn over objects.
Cloth to Dynamic Mesh: set default material ID to zero on all sim triangles.
Cloth Editor: if any triangle in the render mesh has an invalid material ID, apply the default WoldGridMaterial to it.
Added new Dataflow nodes to support exporting of Geometry Collection surfaces, convex hulls, and sphere coverings as OBJ mesh files, and to write Strings to files for debugging purposes.
The Fracture Mode Convex Tool now only shows collision shapes for the current Fracture Level.
Added delegate InjectInputsExternal to FNetworkPhysicsCallback. This will be broadcast during InjectInputs_External.
Chaos Caching: Blueprints are now allowed to access the observed component's EnablePlayback and CacheCollection properties.
Added a GetBoxLengths Dataflow node that can get the bounding box lengths for each transform in a Geometry Collection, where length can be measured along a chosen axis, the min or max axis, or the diagonal.
Added a SelectFloatArrayIndicesInRange Dataflow node that can select indices in an array of floats where the floats match a specified value range.
Added a CollectionTransformSelectionFromIndexArray Dataflow node that can select Geometry Collection transforms with indices matching the values in an array of integers.
Made server authoritative Geometry Collection particles unbreakable on the client -
Added unbreakable flag to Chaos clustered particles SOA.
Added a new Merge Convex Hulls Dataflow node which can reduce the convex hulls used to represent collision on geometry collection bones.
Added GetAccumulatedTime function for obtaining the physics solver's AccumulatedTime in fixed step mode.
Added a new experimental Skinned Level Set primitive type for Physics Assets. This primitive embeds a Level Set into a lattice which is skinned by transferring the skinning weights from the associated mesh vertices to the lattice. This primitive can only be used by cloth simulations and is experimental. It has not been optimized.
Added material strength information to the Chaos physics material.
Improvement:
Modified primitive component wake/sleep events so that they don't depend on the existence of a BodyInstance, which makes them more generalizable.
Geometry Collections no longer construct FName types at runtime for the removal feature related facade classes.
Optimized Geometry Collections by removing feature runtime execution. Also reduced its memory footprint per Geometry Collection instance.
Moved rendering and navigation updates from the Geometry Collection Component TickComponent method to PostPhysicsUpdate one. Also cached RootIndex in the Geometry collection asset to avoid scanning through all the transforms each time to find it
Geometry Collections's bool-typed managed arrays now use BitArray instead of TArray in order to save memory
Geometry Collection Optimization: Only enable the primary Geometry Collection Component tick function when removal features are needed (after the root breaks).
Optimized the memory storage of Geometry Collection clustered particle flags.
Chaos now uses a smaller data type to store clustered particle properties when possible and better manage memory allocation when populating the connection graph.
Geometry Collection ISM Pool rendering optimization: Now uses new API to pass transform more efficiently by reducing array allocation.
Improved the convex collision generation of Geometry Collection by doing the following:
Added Dataflow node to generate Geometry collection cluster convex collision from leaf nodes.
Improved Fracture Editor convex visualization (display of convex union when parent convex is missing).
Added a column to the Fracture Editor Outliner showing the number of convex and when a parent is using a union.
Geometry Collection optimization: Changed GlobalMatrices array of FMatrix to ComponentSpaceTransforms array of FTransform. This reduces the number of back and forth conversion between FTransform and FMatrix.
Crash Fix:
Fixed a crash issue where clearing a Chaos property flag would cause it to try to remove a dirty proxy when that proxy still had dirty shapes.
Fixed an issue with cloth simulation where setting a new Skeletal Mesh asset would sometimes cause a crash.
Fixed Chaos unit test crash when using LevelSets in cluster union.
Fixed a potential crash in Geometry Collections when a physics state is created while the Rest Collection is not set. This may happen when adding a Geometry Collection component to a Blueprint while having it open for editing in the editor.
Fixed a crash when evaluating Dataflow terminal node from Blueprint with a name that does not exist in the graph.
Fixed a Chaos Cloth crash in FClothVisualization when the debug materials are loaded.
Fixed a crash in the Skeletal Mesh cloth painting tool caused by bone mapping indices left invalid after adding existing cloth data to a Skeletal Mesh asset using a different skeleton.
Fixed several bugs that could cause crashes when using Take Recorder while PIE was running with cloth simulations.
Fixed an issue where a Landscape would potentially dispatch a newly created physics Actor and then subsequently destroy the geometry it uses before the next physics update, leading to a crash due to use-after-free.
Bug Fix:
Fixed an issue where disabling a Geometry Collection particle could leave the particle in acceleration structures.
FReadPhysicsObjectInterface
::AreAllShapesQueryEnabled now works on both external and internal contexts. Chaos event dispatching no longer iterates through all the listeners even when there are no events to dispatch, resulting in a slight performance improvement.
Collision conversion now checks against the inner shape type to handle the case of a transformed union.
Applying external strain to a Geometry Collection particle should now apply even if that particle doesn't have children.
The Blueprint library function for finding the closest physics object will now filter based on whether the particle is enabled or not.
Fixed an issue where Chaos Fields would make all particles it made dynamic also enabled, which would cause Geometry Collection particles to collide against their root particle.
Removed ensure when drawing unions which have a single shape.
Fixed an issue where OnComponentPhysicsStateChanged was not getting called properly for Geometry Collections.
Fixed an issue where Geometry Collection events would not be registered properly after the Construction Script re-registers the component.
Fixed an issue where internal clusters were not being cleaned up property when children were removed from them, regardless of which path that removal came from.
Fixed an issue where Geometry Collection replication was relying on bFirstUpdate to determine whether or not to replicate a cluster. The particle level is used instead.
Fixed an issue where Geometry Collections would not properly pull the state from PrevData/NextData for some of its particles with non-interpolatable properties.
Fixed an issue where Geometry Collection particles were not being added to the external Scene Query queue. This ensures that they are always in the external Scene Query, even after it gets swapped.
Fixed an issue where Geometry Collection cluster particles had a cluster group index set on them when they were the root particle (does not have another parent).
Fixed an issue where the RewindData and MarshallingManager would have different sizes of their data history.
Fixed a crash happening when simulating physics with a Geometry Collection that has no rest collection assigned.
Fixed an issue where populating the physics replication cache consumed a lot of CPU time in levels with many Actors.
Fixed an ensure triggering from duplicate Geometry Collection particles caching in rewind data.
Fixed an issue that made all islands resimulate when one triggered a re-simulation.
Fixed an issue where the Geometry Collection RestTransform was not in sync with the RestCollection transforms, causing incorrect asset thumbnails.
Replaced an ensure by a non-breaking verbose log when not finding a supported collision type during cloth collision with the environment.
Fixed an issue in the Chaos Cloth editor where the transform gizmo and numeric input in the Preview Scene were out of sync.
Fixed an issue in Geometry Collections where the Mass attribute was being accessed as a Double, instead of a Float causing potential out of bounds access.
Fixed a Dataflow stack overflow in invalidation code when connecting nodes in a loop.
Made serialization of Dataflow node more robust to input and outputs changes.
Fixed the cloth painting material offset z-fighting with the source render section by adding a small normal offset.
Fixed a compilation error related to duplicated Solver symbols in TUserDataManagerPT::SetData_GT.
Fixed a Chaos Cloth crash when undoing mask targets in the Clothing window of the Skeletal Mesh editor.
New Geometry Collections now convert vertex colors from Linear to sRGB space for rendering by default, to match the behavior of Static Mesh rendering. Old assets keep the previous behavior for compatibility by default. Use the new ConvertVertexColorsToSRGB checkbox on a Geometry Collection asset to toggle this behavior.
Fixed an issue where in some cases Geometry Collection data would not be consistently updated, which caused an ensure on pressing 'Reset' in Fracture Mode.
Removed unnecessary tick function from event dispatcher base class which could lead to accumulating no-op ticks from Geometry Collection components in Post Physics tick groups.
Removed allocation of multi-find array in GetPendingCollisionForContactPair.
Fixed an issue where heightfield overlaps where not taking into account entire materials.
Reduced the stack reserved hit buffer sizes down to 16K from 64K in scene queries, still reserving 128 hits for queries prior to heap allocating.
Fixed the physics thread Geometry Collection Active attribute not being properly initialized (and taking one update cycle to do so).
Fixed a Fracture Mode issue where the alpha channel on Geometry Collection vertex colors would be reset to 1 when a Geometry Collection was fractured.
Fixed breaking model considering a parent multiple times when classifying required breaking particles.
Fixed children with strains not being processed when their parent cluster breaks.
Fixed an issue where IsHole for heightfields was returning True when no materials were present in the heightfield.
Disabled sleeping event handling in Geometry Collection event handler. This avoids multiple dispatches of identical sleeping events as they are handled by the scene.
Fixed an issue where changes to a Geometry Collection asset in Fracture Mode would not propagate to other Geometry Collection components using the same asset.
Updated Chaos Cache Managers to now work correctly when they're spawnable if they're observing components that belong to the cache manager itself. In particular, they will now work if they were created by adding a destruction Cache Collection to the scene. Cache Managers observing other components (e.g., cloth) continue to not be able to be spawnable.
Fixed an issue where FRewindData::RewindToFrame would keep dirtying particles/joints every rewind. If the game was constantly rewinding, this would cause the size of the FRewindData::DirtyParticles array to get too big.
Fixed an issue where Geometry Collection rendering would not match the Static Mesh rendering because the Static Mesh recomputed tangents and the Geometry Collection did not.
Fixed an issue where the GeometryCollectionComponent implicit generation was calculating incorrect sizes for box clusters.
Updated Chaos Cloth caching to store the necessary transforms to playback with the correct transforms. Existing caches will continue to work as before (e.g., if they did not require the additional transform information, they will continue to work).
Fixed an issue where undoing the creation of a new Geometry Collection would leave a broken asset, which could crash the editor if used. We no longer transact the creation of the Geometry Collection asset, so the asset will persist in a valid state.
Fixed an issue where a tiny triangle could make cloth simulation with self collisions very slow.
Fixed repeated calls to update Geometry Collection particle views during Geometry Collection proxy initialization.
Fixed an issue where the altered rigid clustering advance was considering all top level particles for breaks, instead of only considering the particles that were strained. This greatly reduces the steady state cost of the breaking model.
Fixed an issue in Geometry Collections where removal of random generated timer values were not consistent between client and server.
Fixed an issue with Geometry Collection caching where caching was not properly recording and replaying if the break event notification was not set on the Geometry Collection.
Fixed a Chaos Cloth bug where the shared config ownership was preventing a Skeletal Mesh asset from being saved after adding their clothing data to another Skeletal Mesh.
Fixed an issue where the Explode Amount slider was not working when the selected Geometry Collection was inside a Blueprint.
Fixed the Chaos Cloth Deformer when using a mirrored transform.
UI
New:
UE attempts to select the best solution when opening files using Visual Studio source code accessors.
Bug Fix:
Fixed clamping issue in
SAnalogSlider
where the MinValue and MaxValue were ignored when navigating with a controller. This behavior is now consistent when using a mouse or a controller.Fixed a bug where navigating past the min or max value of
SSlider
would invalidate the widget and call a value change delegate despite not changing the value.In
USlider
, fixed a MVVM notification and delegate that were not called when the value was changed from code.
Slate
New:
Moved
STextScroller
implementation from CommonUI to Slate.Added cache functionality to
SDropTarget
for expensive AllowDrop operations. This is turned off by default. By default, OnAllowDrop is called every frame, which is user bound. SettingbUseAllowDropCache
totrue
will cache AllowDrop the first time it is called. The cache is cleared whenever a drag & drop operation starts.Added
OpenComboBox
function toSObjectPropertyEntryBox
widgetAdded ObservableArray pattern to ListView, TitleView and TreeView in Slate. The TreeView implementation only supports the new pattern for the root items, as that is where performance improves the most when it is changed. The observable array automatically notifies the view when an item is added/removed from the array.
Slate batching improvements for large element sets:
Group similar elements at compile time using tuples.
Merge similar renderbatches in same-typed element buckets (currently for box and lines only).
Reserve verticies / elements in a batch before using them.
Slate element creation is now batched per element type to improve instruction coherency.
It is now possible in
SHeaderRow
to specify the text overflow mode by providing a value of typeETextOverflowPolicy
to the new argumentOverflowPolicy
.UE now resaves Slate PNG files with incorrect sRGB profile, logging PNG filename during libpng warnings and errors.
Added widget state, which is intended to be used by external systems to generically respond to widget changes regardless of type.
To avoid temporary array allocations per draw, Slate now uses static indexes for both text and shaped text where possible.
Retained widgets now group by element type.
You can now add a widget inside the global window overlay.
Bug Fix:
When UE creates a Modal window using
FSlateApplication::AddModalWindow
, if it can't find the Slate Virtual Window, it falls back to a non-modal window.Slate only allows explicit navigation if the target widget is enabled.
SlateFontInfo now limits Outline to 1024.
Fixed an issue where a widget in scroll box could get stuck in its hover state.
Fixed issue where mouse position would not be calculated correctly when dragging a scroll area.
Added Variation Selector characters to the list of characters that require full text shaping.
Fixed scroll box scroll lag that occurred when scrolling by holding the scroll bar with the mouse.
Fixed an issue causing ellipsis to appear on multiple lines on multline text, and for each text block in each line for combination of multiline + rich text or multiline + bidirectionnal text, instead of having a single ellipsis as expected.
Fixed an issue causing ellipsis to not show or be misplaced on text with multiple runs, such as rich text or bidirectionnal text. This bug was more likely to happen on left to right text.
Fixed ellipsis not showing or showing the wrong side for multiline right-justified text, or right-to-left text that was left-justified.
Fixed a bug that prevented selecting an item in the list view when the list view was empty.
Combo boxes no longer always trigger a value change event when opened.
Added support for the
-nullrhi
command option to all standalone Slate applications.Fixed an issue where tooltips could be spawned while not using a mouse.
The PropertyViewer's container now rebuilds when a Blueprint is recompiled. Depending on whether UE performed full rebuilds or skeletal rebuilds of Blueprints, they were not always marked as "newer class exists."
Fixed SlateTextureAtlas creating free nodes in empty slot lists that have dimensions smaller than what can be used by glyphs. The code previously created two nodes as long as one of them exceeds the minimum dimension. In practice, this results in iterating over 94+ unused elements each time a glyph is added. With this update, it should only create the smaller node if it exceeds the minimum.
Deprecated:
Removed & deprecated
FSlateDataPayload
used by Slate elements. Relevant data is instead built into subclasses to avoid indirection. For example, instead of usingFSlateBoxPayload
, useFSlateBoxElement
.
UMG
New:
Adding Desired Focus widget to UserWidget. This new property makes it possible for the user widget to forward the focus to one of its children when it receives focus. It can be set at runtime and in UMG Designer as a default value.
URichTextBlock::ClearAllDefaultStyleOverrides
is now BlueprintCallable.Added
OnIsItemSelectableOrNavigable
delegate to list views.UListViewBase
: Added pure virtualOnIsItemSelectableOrNavigable
function.OnIsSelectableOrNavigableInternal
checks ifOnIsItemSelectableOrNavigable
is bound, and if it is, it returns its value.IMPLEMENT_TYPED_UMG_LIST
: AddedOnIsItemSelectableOrNavigableDelegate
. This oiverridesOnIsItemSelectableOrNavigable
and returnsOnIsItemSelectableOrNavigableDelegate
.Added support for specifying Input Configs from BP for activatable widgets.
Added several debug CVars to CommonUI:
CommonUI.Debug.WarnDesiredFocusNotImplemented
– Provides a warning when activating widget without GetDesiredFocusTarget implemented.Added CVars to track Input Config changes:
CommonUI.Debug.TraceConfigChanges
CommonUI.Debug.TraceConfigOnScreen
CommonUI.Debug.TraceInputConfigNum
CommonUI.Debug.CheckGameViewportClientValid
– Provides a warning when using CommonUI without CommonGameViewportClient.CommonUI.Debug.WarnAllWidgetsDeactivated
– Provides a warning when deactivating all widgets.Slate.Debug.TraceNavigationConfig
– Logs when navigation config changes in Slate.
Moved UMG/FieldNotification files for Viewmodels to the FieldNotification module.
Added support for Viewmodel FieldNotify broadcast on Blueprint-defined variables.
Added Editor Utility version of UMG widget components to prevent serialization conflicts.
Added a delayed to when Viewmodel bindings are ticked by a world. If the widget changed worlds, the binding might not be ticked anymore.
Filter Viewmodel context creation type per class. Use
MVVMAllowedContextCreationType
orMVVMDisallowedContextCreationType
to allow or disallow types.Added
COMMONUI_API
toFUIInputAction
and some related functions inUCommonUIInputSettings
.The View Binding picker now filters conversion functions by display name and by keyword.
In the View Binding panel, the Add button now adds the widget the user has selected in the UMG designer. You can change this behavior, and it is saved in a setting (Add Binding Mode).
Added support for ascent and descent override for FontFaces, which you can edit in the Font Face editor.
Added the ability to scale font size in the font editor's preview.
Views are no longer added to the WidgetBlueprintGeneratedClass if there are no bindings.
Added a Blueprint view to the AssetSearch. The module is not added by default because it depends on the AssetSearch plugin.
Added a menu extension to Viewmodel editor. The Bindings panel is now "MVVM.ViewBindings.Toolbar" and the viewmodel panel is "MVVM.Viewmodels.Toolbar"
Return the World of a widget when it's valid. Added a message when the widget cannot be added to the World.
Added the Viewmodel tag data to the UserWidget generated class. It was present on the blueprint asset but that data is not present in cooked build.
Added a callback to add tag data to a widget's generated class asset.
Added the Auto execution mode for Viewmodels. Auto will decide at compile time if it should run the binding immediately or on a delay. A binding will be run in delay mode if the binding can be triggered from more than one field.
Added extension to insert a Customization for the Designer DetailView from a Blueprint extension.
Removed the need to have a SourcePath for ComplexConversionFunction in Viewmodels. The source data is inside the function itself and the fieldnotify name is already saved in the class binding.
Updated GetBindingInfoFromFieldPath to support nesting a Viewmodel inside another Viewmodel.
Added a unit test for the GetBindingInfoFromFieldPath function.
Added DoesInitializeAtConstruction on the View class to support manual initialization. When the flag is false, the user is responsible for initializing the view.
Added ReevaluateSourceCreator for Viewmodels. A source discovered at compile time and added to the list of SourceCreator may need to be evaluated if the path contains a notify. This function is similar to SetViewModel but finds the new value from the SourceCreator.
Exposed Viewmodel properties to the Details panel. You can now inspect Viewmodels with the Object Inspector. You can then see which Viewmodel is attached/bonded to the View.
Added support for nesting Viewmodels inside Viewmodels.
Added support for Viewmodel sources that are not UserWidget properties. The compiler generates the missing path.
Viewmodels now use
FText::Identical
to compareFText
.Added Viewmodel performance stats to the runtime View.
Added an option to log all Viewmodel bindings after compilation. Enable the CVar
MVVM.LogViewCompliedResult
to log this information.Added a virtual method so that CommonInputProcessor can be overriddenoverriden.
You can select an abstract class as a Viewmodel class, but you can't create an instance from an abstract Viewmodel class.
Added Resolver, a new way to select a Viewmodel. You can extend the Resolver and can implement your own logic on own to find/create the Viewmodel.
Updated style defaults on UMG widgets to use default style cache.
Added option to hide the BindingWidget, NavigationSimulation, Pallets, and Hierarchy windows from the UMG Designer.
Renamed CommonUI
FUICameraConfig
toFActivationMetadata
.Added a message at compile time notifying when 2 Views will be used at runtime.
Added unit test for FieldNotificationDelegate for Viewmodels.
Added support for custom pins for complex conversion functions.
Crash Fix:
Fixed a crash in the loading screen when clicking the X window button before the end of the Loading Screen.
Bug Fix:
Fixed an issue where multiple default action prompts could appear on CommonUI buttons when disabled and re-enabled.
Correction to Favorite features in UMG Designer to allow more than one Widget to be favorited when the Library Window is shown.
The Design View Widget sets the desired size of the selection border to 0 to prevent the UMG Design View from representing the layout of 0-sized widgets incorrectly.
Fixed an issue that prevented CommonUI actions from updating when the activated root doesn't support activation focus.
Applied fixes to Analog Cursor functionality to support gamepad-driven cursor movement.
Viewmodels are no longer overridden when set before widget initialization.
Fixed an issue preventing Blutility classes from being included in other modules.
The Viewmodel system now tests if the Binding library is loaded before accessing it.
Fixed an issue preventing users from renaming Viewmodels from the details panel.
Moved the Global Viewmodel Collection to GameInstance subsystem to allow PIE and splitscreen.
Fixed retainer widgets not rendering in editor. These are now configurable via 'Slate.EnableDesignerRetainedRendering'.
Fixed a bug where removing a View Binding didn't return the correct state of the bindings.
Fixed the order of delegates in Viewmodels when adding and removing delegates while a delegate is executing.
Before deleting a Viewmodel, UMG will now check if the Viewmodel is in use by looiking through its bindings and conversion functions.
Updated the compiler error message for Viewmodels when a field is not found, most likely due to a missing FieldNotify.
Fixed accessing private UFunctions in Viewmodels with AllowPrivateAccess.
Fixed the ViewModel IsBindingValid error message, which did not include the full property type.
Fixed Viewmodel field pickers that do not show function when there is no filter.
Added support for arrays of object bindings in Viewmodels (the same way BP does).
UMG now detects circular reference in the widget tree at compilation.
Fixed an issue preventing widgets from registering multiple enhanced input actions.
Fixed an issue which caused cached slots in the viewport subsystem to fail to update when modified in a Blueprint's construction script.
Fixed CommonUI Action Domains not resetting config on editor reload.
Changed the displayname of some Viewmodel properties.
Changed the error message for when a Viewmodel field does not exist to include a possible solution to the problem. This tests if the field exists on the downcast struct instead of the previous property owner struct.
Deprecated:
Removed the specialized Viewmodel editor in favor of using the Blueprint base editor instead.
Virtual Production
IO
New:
Added a tool for making fine adjustments to the nodal offset by hand.
Added an anamorphic distortion model and support for calibrating an anamorphic lens to the Camera Calibration plugin.
[Remote Control] Exposed websocket server bind address in project settings.
[Aja] Add options for HDR support.
[Rivermax] Additions to Rivermax:
Added more logs in the output stream for missing chunks.
Changed rivermax output scheduling when stalls are detected.
Added a Rivermax TRO override console variable.
Added HDR support for blackmagic media output.
Added additional deinterlacing methods and the ability to provide your own deinterlacer for video input.
[Remote Control] Added a setting to control allowed origins.
Added new frame locking mode to Rivermax capture.
[Remote Control] Enforce passphrase usage for clients outside localhost by default.
Added OCIO support for Aja and Blackmagic media sources. You can now select an OCIO configuration to be applied to your SDI feed before it's displayed in the engine.
Added media capture markup to track frames.
Enabled new style output by default on any newly created media texture.
Improvement:
Changed Rivermax RTP timestamp to reduce media latency seen by analyzers.
Moved media capture sync point to its own thread for frame locking work.
Crash Fix:
Added protection against crash during Rivermax initialization when prerequisites are not met.
Fixed a Remote Control crash that occurs when invoking a setter method on a property in
CreateRCCall
.
Bug Fix:
Fixed Media Plate tiles and mips support in scene captures.
Fixed an issue where pre-cached EXR tiles missed updates with the Media Plate.
[Remote Control] Fixed Websocket server from keeping port open after changing it.
[Remote Control] Fixed remote control presets sometimes not finding objects in Play-In-Editor (PIE).
Fixed a race condition preventing Rivermax input stream to play.
Fixed remote control crashes:
GEditor was accessed without testing for nullptr.
PropertyWatchers
are now only used in-game
except for transform properties.In
PropertyWatcher->CheckForChange
,IsIdentical
was called onLastFrameValue.GetData
without first checking if the last frame value had any data in it.LastFrameValue
should now be correctly initialized if it couldn't be done at the creation of the property watcher.
Fixed Media Capture pooled render targets becoming invalid in the rendering thread during garbage collection.
Deprecated:
Deprecated the
UImgMediaPlaybackComponent
and its functionality has been entirely superseded by the Media Plate.[Media Capture] Deprecated
FMediaCaptureOptions
ResizeSource
in favor ofResizeMethod
.
nDisplay
New:
Added a new tab to the ICVFX panel to display the stage actor's details panel and components list. This allows users to edit any property on the stage actor without needing to go to the level editor window.
Added ability to alphabetically sort nDisplay cluster nodes and viewports in the tree view in the nDisplay editor.
Added global chroma key settings to nDisplay stage actor that can be used by any ICVFX camera, as well as for any overlapping chromakey when enabled.
Bug Fix:
Ensured the media plate material instance constant is properly transacted.
Fixed OpenColorIO display-view transforms not working on nDisplay nodes.
Fixed an issue where the buttons on the left panel of the color grading drawer overlap with other UI elements if the splitter was dragged too far to the left.
Fixed
UDisplayClusterGameEngine::Init
potentially corrupting command-line arguments during parsing. If a quoted argument contained a space (such as a path), other common sequences such as\n
and\t
, or octal escapes, were mishandled.
Deprecated:
Deprecated the Custom Chroma key Enable flag, which has been replaced by a combo box in the parent chroma key settings that determines what kind of chroma key is used for the ICVFX camera.
Rendering
API Change:
Assets must be re-saved to gain efficiency improvement. The asset must also be resaved if the configuration changes or when the library version is updated.
New:
Exposed OpenColorIO CPU color transforms on textures to editor blueprints.
Exposed OpenColorIO active viewport configuration control to editor blueprints.
Improved OpenColorIO asset load times by caching generated resources into the UAsset.
Added premultiplication and alpha inversion controls to the OpenColorIO public rendering interface.
Added OpenColorIO support for automatic conversions to and from the engine working color space when configs have a defined interchange color space.
Improvement:
Updated default media plate material in Composure to new style output (regular color texture sampler).
Bug Fix:
Fixed in-game OpenColorIO to ensure it remains active when a high resolution screenshot is taken.
Patched the OpenColorIO library to disallow 1D texture resources.
Added the option to select
.ocioz
files in OpenColorIO configs.Fixed texture Derived Data Cache (DDC) invalidation for advanced source color and encoding settings.
Tools
New:
CineCameraRigRail
updates:Added checkbox option to set all inheritance options at once.
Added option to visualize and manipulate point rotation in the context menu.
Implemented Drive Mode in the rig rail.
Implemented speed visualization in the rig rail.
Disabled speed heatmap when
CineCameraRigRail
is driven by Sequencer.Added a mechanism to multi-user which enables clients to request preloading of level sequence assets.
Integrated the new multi-user level sequence preloading functionality into Sequencer Playlists.
Reintroduced the
bCheckReferencesOnDelete
editor setting. This is used by stage operators to prevent long running operations in fast paced environments.Render Grid plugin:
Made the render grid blueprint graph be an editor-time blueprint graph, to support editor-only blueprints.
Made non-transient variables in render grid assets work again.
Improvement:
Fixed jumping current position when switching drive mode.
Fixed several bugs and issues in Render Grid plugin:
Added multiple new blueprints.
Added additional python example scripts
Cleaned up the render grid UI.
Bug Fix:
[Virtual Scouting] Fixed user getting stuck and unable to deselect actors if both hands are holding an interact tool. Second tool now falls back to the navigation tool if the context menu is activated.
[Virtual Scouting] Prevent users from selecting zoom lens in VR Viewfinder. If lens options are changed during editor session by editing Project Preference > Cinematic Camera, VR Viewfinder will respect newly added lenses.
[Virtual Scouting] Disabled collision on camera mesh in Viewfinder tool.
The UDP message processor does not start processing messages until the PostDefault phase of engine startup. Users should not rely on the UDP message processor at startup.
Fixed missing key frames when importing 30 FPS ARKit takes recorded by the Live Link Face iOS app, using the Live Link Face Importer plugin.
升级说明
Animation
Runtime
Upgrade Notes:
Added the Animation Compression Library (ACL) Plugin as an Engine plugin and set the ACL Plugin as the default animation compression codec. Licensees already using the ACL Plugin from the Unreal Marketplace with binary builds of the engine will automatically upgrade to the new version. Those using a source version of the ACL Plugin will have to remove their old version and bring any code changes manually over. New animations will use the ACL Plugin while old animations will continue to use their current codec.
Sequencer
Upgrade Notes:
[Sequencer] Duplicating a shot or creating a new take now retains the shot's color tint.
Editor
API Change:
Added API to
NodeTestGraphBuilder
to explicitly define custom names when connecting input/output nodes to the test graph.
Foundation
Core
Upgrade Notes:
Deprecated
TDepletableMpmcQueue
as it uses spin-waiting that can cause priority inversion and subsequently deadlock on some platforms. UseTConsumeAllMpmcQueue
instead ofTDepletableMpmcQueue
.
Dev Tools
Upgrade Notes:
LazyObjectPtr and ObjectPtr are no longer allowed as TMap keys in blueprint-enabled function arguments.Functions utilizing TMaps with an ObjectPtr as a key must be changed to use the raw pointer.
Framework
Blueprint Editor
Upgrade Notes:
Input Event nodes are no longer allowed in animation blueprint event graphs. Instead, set a property value on the animation blueprint and set it in an input-enabled actor.
Gameplay
Upgrade Notes:
[Modular Gameplay Effects - Gameplay Ability System (GAS)] Moved some gameplay effect functionality into optional components. All existing content will automatically update to use components during PostCDOCompiled, if necessary.
Changed the default aspect ratio constraint to maintain Y FOV since camera FOV is now always handled as horizontal FOV. If preserving the exact framing for a given window size is important, you can specify the old setting value (maintain X FOV) in DefaultEngine.ini.
Added Enhanced Input User Settings, which stores player mappable keys and other input settings in a save game object. This feature is off by default and can be enabled in the Enhanced Input developer settings or in a config file.
Made the behavior of Enhanced Input when flushing the pressed keys consistent with the legacy system. This behavior is Default ON, but can be toggled off in the Project Settings > Enhanced Input.
Level Design and Art Tools
Geometry Core
API Change:
Added a new
FLocalPlanarSimplify
class to provide an algorithm to locally simplify triangles connected to a specified set of edges, which is useful to improve mesh quality after operations that tend to add extra vertices only in known regions of a mesh – such as plane cuts and polygroup edge insertions. It is now used by the FMeshPlaneCut algorithm to improve the resulting mesh quality.
Modeling Tools
Upgrade Notes:
The MatEd tool now warns the user if they have removed materials that are used by the mesh. If the user accepts the result with this warning active, the faces that used the removed material will be re-assigned a valid material, so the MatEd tool now cannot create meshes with invalid material assignments.
Procedural
Upgrade Notes:
The Spline Sampler now has a toggle to choose between bounded and unbounded sampling. To preserve behavior, previous Spline Samplers will remain unbounded. Newly created samplers will be bounded by default.
The Difference Node now better adheres to a common standard. Source Inputs are iterated on and Difference Inputs are combined into a union before the operation takes place. Previous nodes will receive an injected Union node along their input edge to preserve older behavior.
Refactored usage of TargetActor so it is used to do artifact targeting. In PCG blueprints, instead of using the TargetActor variable on PCGSpatialData, please use the GetTargetActor call on the PCGContext, passing it the previously used PCGSpatialData. When retrieving the target actor, use Context->GetTargetActor(SpatialData) instead of SpatialData->TargetActor.
Online
Online Subsystem
Upgrade Notes:
Refactored OSS EOS logic surrounding setting the BucketId for Sessions and Lobbies on creation and searches. Any BucketId can be set now from the game side by adding a setting with the following key FOnlineSessionSettings::Settings:
OSSEOS_BUCKET_ID_ATTRIBUTE_KEY
Added config toggle for OSS EOS to use EOS_Achievements_UnlockAchievements instead of unlocking achievements through stats. Added deprecation marker for stat implementation, to be removed in 5.4. To be added to a relevant engine config file:
[OnlineSubsystemEOS] bUseUnlockAchievements=True
Added bUsesPresence as an attribute in OSS EOS Sessions and Lobbies to retrieve it reliably instead of inferring it from other data. Wrapped new logic in config option bUseSessionPresenceAttribute. To be added to a relevant engine config file:
[OnlineSubsystemEOS] bUseSessionPresenceAttribute=True
Pixel Streaming
Upgrade Notes:
Multiple Pixel Streaming streamers supported on one signaling server. This requires streamer id to be uniquely set and the updated Pixel Streaming infrastructure from Github.
Rendering
Lighting
Bug Fix:
Fixed a bug related to light bounds for volumetric fog rendering.
Simulation
Physics
Upgrade Notes:
Added Predictive Interpolation, a new type of physics replication. Predictive Interpolation is a replication method that replicates behind the last received state from the server (interpolates), while still allowing for local physics manipulation (predictive). This replication is experimental and still a work in progress. The replication can be accessed by switching on Physics Prediction in Project Settings and then setting the Physics Replication Mode to Predictive Interpolation on the actor. Ensure the actor is set to replicate, replicate movement and the root component to simulate physics.
[Geometry Collection] The 'Bone Selected Material' has been removed from the user-facing materials list on Geometry Collection Components, simplifying the user experience, and removing the ability for the user to break Fracture Mode selection visualizations by changing this material.
UI
Slate
Upgrade Notes:
Exposed the console variable
Slate.EnableInvalidationPanels
to shipping builds. Ensure the console variable is not in your .ini file to keep the previous behavior.
UMG
Upgrade Notes:
Added viewmodel capability on all blueprints that implement the notification interface and removed the hidden viewmodel editor from the build. If you used the old editor, the regular blueprint editor should take over but you'll need to mark your properties as FieldNotify manually.
Virtual Production
Tools
Upgrade Notes:
Enabled multi-user support for Procedural Content Generation (PCG) actors.
GPU Memory and CPU Memory stats have been added to the Stage Monitor Tool.
Landscape Actor support has been enabled for multi-user.
Multi-user session information has been exposed in editor-only blueprints.
Improved the display of Live Link Face App in Switchboard tool.
Added multi-user custom event sequencing.
The
UE_ADDITIONAL_PLUGIN_PATHS
environment variable is now only supported in editor builds.