新機能
Unreal Engine 5.3 には、コアの UE5 ツールセットに改善が加えられています。今回のリリースでは、レンダリング、ワールド構築、プロシージャル コンテンツ生成 (PCG)、アニメーション ツールとモデリング ツール、バーチャル プロダクション、シミュレーションなど、さまざまな領域に改善を実現しています。
今回のリリースには、GitHub の Unreal Engine デベロッパー コミュニティから寄せられた改善点が含まれています。Unreal Engine 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 では、データ形式とランタイムで明示的接線をサポートするようになりました。現在まで、Nanite は、スクリーン空間の位置と UV グラデーションに基づいて、マテリアルに暗黙的に派生する接線空間に依存していました。これは計算において便利で、メモリおよびディスク使用量の観点で接線が自由になり、さまざまなタイプのメッシュ、特にテッセレーションされたメッシュの場合、うまく機能します。ただし、特にローポリ モデルでは、暗黙的な接線が精密ではなく、頂点ごとのカスタムの接線が目標の品質に達することが必要になる場合が常にあります。これらのケースをサポートするために、アセット ベースで元のモデル接線を格納して使用することを選択できるようになりました。これを有効にすると、アセットのメモリとディスク使用量においてコストがわずか 10% までの増加で抑えられます。
Nanite スプライン メッシュ (実験的機能)
Nanite メッシュにスプライン メッシュ コンポーネントの初期実装を導入しました。この機能は、.ini
設定ファイルで r.Nanite.AllowSplineMeshes=1 を設定することで、有効にすることができます。警告:現在、この機能を有効にすると、パフォーマンス コストがかかり、すべての Nanite のカリング パフォーマンスに影響します。現在、極端な変形においてカリングが正しくないという既知の問題があります。
マスクされたマテリアルおよびピクセル深度オフセット (PDO) のパフォーマンスの改善点
プログラム可能なラスタの新しいスライディング ウィンドウの頂点のキャッシュが、マスクされたマテリアルと PDO で迅速に行われます。最初のテストでは、マスクされたフォリッジのラスタライズで 20% の速度の改善が示されています。
Nanite の輪郭の選択
Nanite オブジェクトの選択で、TSR/TAA を有効にしてもちらつきがなくなり、他のオブジェクトに遮られなくなりました。また、最終的な解像度でレンダリングされるようになりました。
Nanite のインスタンス化されたスタティックメッシュ / フォリッジ インスタンスの選択
Nanite を有効にしているインスタンス化されたスタティックメッシュまたはフォリッジ アクタのインスタンスの選択、変更、削除に関連するエディタでいくつかの問題を修正しました。
フォールバック ターゲット設定
フォールバック ターゲット設定を Nanite スタティックメッシュに追加しました。これはメニュー オプションで、フォールバック メッシュ (相対誤差またはトライアングルの割合) の場合に削減するターゲットに対する明示的な制御を提供します。
Lumen

-
ハードウェア レイ トレーシング (HWRT) がヒット ライティングとともに有効になっていて、ポスト プロセス ボリュームの最大反射バウンス設定が 2 以上に設定されている場合に、Lumen の反射では複数のバウンスをサポートしています。パフォーマンス バジェットが十分にある場合、これにより反射に領域が黒くなるのを防ぐことができます。
-
静的ライティングを使用しているが、反射キャプチャよりも反射の品質をスケール アップするゲームやアプリケーション用に、Lumen GI がなくても Lumen の反射を使用できるようになりました。スタンドアロン Lumen の反射は、HWRT が有効になっている場合にのみ機能します。Lumen GI が無効になっていると、Lumen のサーフェス キャッシュの最適化が使用できないので、ヒット ライティングが自動的に有効になります。
-
コンソールでのデフォルトの HWRT の非同期計算の有効化など、Lumen HWRT の重要な最適化を行いました。
-
Lumen の概要のビジュアライゼーション モードに Lumen シーンのジオメトリの法線のビューが含まれるようになり、グローバル距離フィールド (ソフトウェア レイ トレーシングの場合) または Nanite フォールバック メッシュ (HWRT の場合) の問題が見つけやすくなりました。
-
反射レイの視覚化およびデバッグのために、r.Lumen.Reflections.VisualizeTraces を追加しました。
-
マテリアル AO を修正しました。これは、以前、エミッシブ ライティングと直接ライティングに適用されていました。
正投影レンダリングの修正 (実験的機能)

正投影レンダリングは建築や製造のプロジェクトの視覚化の一般的な方法で、独特なスタイルのカメラの選択肢としても使用されます。長い間、UE でカメラ オプションとして使用されていましたが、多くのレンダリング機能はサポートされておらず、実用的でありませんでした。
5.3 以降、正投影レンダリングが実験的機能としてサポートされるようになりました。エンジンの複数の領域を修正して、透視投影と正投影間の同等性を実現しました。Lumen、Nanite、シャドウなど、UE5 の最新機能のほとんどが機能するようになりました。これは進行中の作業であるため、プロジェクトでのこの機能の使用に関するフィードバックをお聞かせください。
スパース ボリューム テクスチャ (実験的機能)

UE 5.3 では、スパース ボリューム テクスチャ (SVT) という新しいアセット タイプを導入しています。SVT には、煙、炎、水など、ボリュメトリック メディアを表すベイクされたシミュレーション データが格納されています。SVT は、他の 3D アプリケーションで作成された OpenVDB (.vdb
) ファイルをインポートすることで作成でき、単一ファイルやアニメートされたシーケンスがサポートされています。さらに、Niagara Fluids は、SVT に対して内部でキャッシュされるようになり、パフォーマンスとメモリが大幅に改善されました。
SVT は、テクセル (ボクセル) を 3D データ構造体に格納し、3D UV 座標でインデックス化できるという点において、3D テクスチャ / ボリューム テクスチャと同様です。通常の (密度の高い) ボリューム テクスチャと異なり、SVT は「重要な」データを含むボリュームの領域でメモリを費やすだけで済みます。密度の高いボリューム テクスチャ、すなわち同じ範囲で少ないメモリを使用するボリュームと比較すると、より大きなボリュームが可能になります。
異種ボリューム、ボリュメトリック クラウド、ボリュメトリック フォグなどのディファード レンダリング技術は、スパース ボリューム テクスチャ マテリアル ノードをボリュームドメインのマテリアルに取り入れることで、SVT を利用できます。異種ボリュームでレンダリングされるアセットは、新しい異種ボリューム コンポーネントを使用する必要があります。ディファード レンダリング機能は、リアルタイム ボリュームの既存の機能に制限されています。レンダリング ボリュームのより完全なサポートは、パス トレーサーで実験的機能として使用でき、散乱、シャドウ、GI を正確にシミュレーションできます。非常にシンプルなスパース ボリューム テクスチャ ビューア コンポーネントもあり、これは主にデバッグ用に使用され、ディファード レンダラで機能します。
パス トレーサー

-
(実験的機能) パス トレーサーには、煙、炎、雲などの異種ボリュームのトレース用に初期サポートがあります。異種ボリュームを作成するには、Niagara Fluids プラグインを使用するか、異種ボリューム アクタをインスタンス化するか、スパース ボリューム テクスチャによって駆動されるデータを使用します。VDB ファイルをスパース ボリューム テクスチャとしてインポートできるので、パス トレーサーでレンダリングできます。注:このシステムは現在、スカイ環境のクラウドと互換性がありません。
-
(実験的機能) Substrate マテリアルはパス トレーサーでサポートされるようになりました。
-
サブサーフェス スキャタリング サンプリングの効率性が改善され、同じ数のレイ サンプルのサブサーフェス マテリアルでノイズが少なくなりました。
-
パス トレーサーでは、現在、ラスタライザーで生成されたパスを使用するのではなく、独自の深度パスをレンダリングするようになりました。これにより、深度と RGB の結果がより正確に一致するようになり、被写界深度など、深度に依存するポストプロセス パスが改善されました (この変更は「被写界深度の参照」に影響しません)。
-
マテリアル グラフの DBuffer デカール シェーディング ノードがサポートされるようになりました。これらのノードは 5.0 以降で使用可能になっており、マテリアルのデカールの機能が大幅に拡張されています (DBuffer デカール シェーディング ノードに関するドキュメントは、UE 5.3 のリリース時に入手できるようになります)。
-
ポストプロセス マテリアル バッファに、パス トレーサー専用の追加の出力が含まれています。これらのバッファには、「パス トレーシング バッファ テクスチャ」というマテリアル グラフ内で新しいノードを介してアクセスでき、さらにこれらは放射輝度、ノイズが除去された放射輝度、アルベド、法線、分散のデータを提供しています。
Substrate (実験的機能)

Substrate は、5.2 で実験的機能としてリリースされ、Default Lit や Clearcoat などのシェーディング モデルの固定スイートを、より広範なサーフェス外観やより幅広いパラメータ空間を提供する、より表現力に優れたモジュール式のフレームワークに置き換えます。パフォーマンスは複雑さと望ましいバジェットに応じて変動し、従来のマテリアルの負荷はこれまでと同様です。
Substrate は、5.3 で実験的機能です。プロダクション シーンには使用できませんが、この開発段階中にぜひテスティングを行い、フィードバックをお寄せください。
UE 5.3 には、Substrate の機能、安定性、パフォーマンスにおいて多くの改善が含まれています。変更には以下などが挙げられます。
-
自動車用アプリケーションに主に使用される新しいグリント機能とスペキュラ プロファイル機能
-
DBuffer シェーディング ノードのサポートの向上
-
ハイスペックのプラットフォーム用の新しいファズ モデル
-
マテリアル エディタの [Substrate Material Information (Substrate マテリアル情報)] タブを更新して、マテリアル パフォーマンスとトポロジ情報の表示を改善しました。
-
バグ修正とパフォーマンスに関する改善を多数追加しました。
仮想シャドウ マップ

-
UE 5.3 で仮想シャドウ マップのベータ指定を削除し、プロダクション対応としています。VSM の前に長い開発パスがありますが、この指定には、現在技能している機能セットの安定性と実現可能性が反映されています。
-
VSM は、シャドウ キャッシュが有効になっている場合でも、Nanite のカリング距離を考慮するようになりました。以前、プライマリ レンダリングとシャドウ マップ間で不整合が発生する可能性があったため、カリング距離はキャッシュが有効になっている場合、シャドウで無視されていました。ただし、重いカリング用にコンテンツが調整されていた場合、パフォーマンスに大きな影響を及ぼす可能性があります。カリングに依存するシーンはシャドウがより早くなりますが、カリング距離がプライマリ レンダリングでポッピングを表示するのに十分に短い場合に、シャドウ アーティファクトを表示する可能性があります。
-
シャドウ無効化動作をユーザーが制御できるようにするプリミティブごとのフラグを追加しました。これにより、ユーザーは、プリミティブが [Evaluate World Position Offset (ワールド位置オフセットを評価)] 設定を使用することがわかっている場合など、無効化を防止できるようになります。システムでは、現在、これを自動的に推測できません。デフォルト設定は [Auto (自動)] で、明示的に変更されない限り、現在の動作を維持します。
-
バグ修正とパフォーマンスに関する改善を追加しました。
ヘア

グルーム アセットとグルーム バインディング アセットに対してグルーム ストリーミング サポートを追加しました。これにより、必要なものだけをロードすることによってエディタとゲーム内のロード時間が短くなり、グルーム アセットの CPU と GPU のメモリ プレッシャーが低下します。
画面の小さな部分に多数のグルームが覆っている場合、パフォーマンスを拡張 / 改善するために、連続 LOD を追加しました。この設定はデフォルトでオフになっていて、r.HairStrands.ContinuousLOD
で有効にすることができます。
カスタム属性の書き込みのサポートなど、デフォーマー グラフのヘア (髪) の束に対する実験的なサポートを追加しました。まだ開発プロセスの初期段階ですが、デフォーマー グラフでランタイム時にグルームの変更を行うことができるようになります。
グルーム属性が柔軟になるように調整して、新しいオプションの属性を追加しやすくしました。2 つの新しいオプションの属性 (clumpID / AO) を追加しました。グルーム属性の数値を簡単に確認できるように、グルーム エディタで視覚化できるようになりました。
アセットのインポート時に、点 / カーブの制限がユーザーにレポートされるようになり、それに従ってデータをトリミングします。さらに、インポートされた属性はインポート時にクリアに表示され、グルーム エディタにも表示され、特定のグルーム アセットに使用可能なものが視覚化されます。
バグ修正とパフォーマンスに関する改善を多数追加しました。
テンポラル スーパー解像度 (TSR)

動的解像度が無効になっている場合 (主に PC プラットフォームで)、ゲーム内のスクリーン比率をより自動的に制御するための新しい機能を導入しました。デフォルトのヒューリスティックでは、表示されるピクセル数に最適な TSR 収束率に基づいてスクリーン比率を設定します。これにより、エンドユーザーはデバイスに最適な設定を見つけやすくなります。
エディタには、エディタおよび PIE ビューポートのスクリーン比率の動作を把握および制御する際に役立つ新しい UX 機能がいくつかあります。
Radeon RX 5000 シリーズ (RDNA) 以降のカードなど、ハードウェア サポートがあるデスクトップ GPU で 16 ビットの操作の初期サポートを追加しました。
エミッシブ サーフェスの Lumen スクリーン空間トレースに関して、TAA と TSR 間の不整合を修正しました。
最適化とバグ修正を多数行いました。
レンダリング リソース ビューア

レンダリング リソース ビューアは UE 5.2 で導入され、頂点バッファやインデックス バッファなど、GPU メモリの割り当ておよびレンダリング リソース、さらにはスタティックメッシュやスケルタルメッシュといった割り当て元のアセットに対する完全な可視性を提供するツールです。これにより、GPU メモリを最適化して、プロジェクトをレンダリング バジェット内に収めるうえで必要な情報がアーティストやデベロッパーに提供されます。
UE 5.3 の新機能
-
コンテンツ ブラウザでレンダリング バッファ / テクスチャを選択し、ソース アセットに移動できるようになりました。
-
インサイト メモリ トレースは DX12 リソースをトラッキングし、インサイト メタデータ トレースはレンダリング リソース ビューアなどのリソースのオーナー パスをトラッキングするようになりました。これらの機能は、レンダリング リソース ビューアを補完し、エディタでのみ機能します。これによって、アセット パスの所有、レンダリング リソースのデバッグ名、パッケージ化されたビルドのオーナーのレンダリング クラス名のトラッキングが可能になります。
ライティング

-
レイトレーシングされたシャドウのあるライティングにおいて、オプションでボリュメトリック フォグにシャドウを付けることができるようになりました。コンソール変数 r.VolumetricFog.InjectRaytracedLights で有効にすることができます。これは、パフォーマンス上のコストのために、デフォルトでオフになっています。
-
スポット ライト、ポイント ライト、および矩形ライトでは、強度の単位を「EV」 (露出値) に設定できます。これは、強度を相対的な「絞り値」 (2 の累乗の増分) で設定できるということです。
ワールド構築
レベル インスタンス アクタ フィルタ

アクタ フィルタを使用すると、World Partition レベル内でレベル インスタンスごとのバリアントが可能になります。これらはデータ レイヤー インスタンスまたはローカル データ レイヤー (あるいはその両方) から構成され、ユーザー定義のデフォルト フィルタを含むアクタ フィルタをサポートするように設定されています。これらの設定済みフィルタに関連付けられたすべてのアクタは、各レベル インスタンス内のフィルタのデフォルト ステート、オーバーライド ステート、アクティベーション ステートに応じて、ストリーミングの生成時に含まれたり、除外されたりします。フィルタで除外されたデータは、ゲーム内から完全に削除されます。
Level Streaming Persistence (実験的機能)
Level Streaming Persistence は、ストリーミングされたレベル内に含まれているオブジェクトで特定のマークされたプロパティの保存と復元を管理するプラグインです。これらのプロパティは、エンジンのコンフィギュレーション (.ini
) ファイル内で定義されます。
これによって、提供された API を介して実装されていれば、ゲームプレイ時にメモリ内のスナップショットおよびセッションからプロパティの永続性が提供されます。
Nanite ランドスケープ

Nanite は、通常のランドスケープ レンダリングと同様にランドスケープ アクタで有効にできるようになりました。Nanite ランドスケープ メッシュは、エディタ内のユーザーのワークフローを妨げないように、バックグラウンドで再ビルドされます。Nanite ランドスケープはランドスケープの解像度を改善していませんが、ユーザーは GPU カリング、自動ジオメトリ ストリーミング、LOD などの Nanite ランタイム機能を利用できます。これにより、特に VSM などの機能が必要な場合に、ランタイム パフォーマンスが向上します。
大きなランドスケープのインポート / エクスポート
World Partition を利用してインポート操作をいくつかの連続したバッチに分割することで、非常に大きなランドスケープ / 解像度をサポートするように、ランドスケープのインポート / エクスポートを更新しました。
ランドスケープ物理マテリアルの表示
新しい CVar landscape.CollisionMesh.ShowPhysicalMaterial
を使用してコリジョンを表示するときに、ランドスケープ物理マテリアルを表示できるようになりました。有効にした場合、特に Landscape Physical Material Output ノードの使用時に、ユーザーは物理マテリアルのエクスポート方法をデバッグできます。
ランドスケープ LOD グループ
同じグループで複数のランドスケープ アクタ間でシームレスな LOD 遷移を可能にするために、LOD グループを追加しました。
プロシージャル コンテンツ生成 (PCG)
階層生成

階層生成では、同じ PCG グラフ内でのさまざまなグリッド サイズの実行が可能になります。
PCG グラフ設定でデフォルトのグリッド サイズを追加すると、ユーザーは Grid Size ノードの追加を開始して、ダウンストリーム要素が実行される場所での粒度を定義できます。大きいグリッド サイズで処理されたデータは、より小さなレベルで使用できます。
この階層的なロジックを使用すると、特にランタイム時に大規模なワールドで、ユーザーはより最適なプロシージャル生成を実現できます。
外部データからのルールの処理

外部データからのルールの処理、City サンプル プロジェクトの Rule Processor プラグインと同等の機能の提供をサポートして、外部データを管理し、これを処理し、ターゲット アクタでアーティファクトを生成します。
これには次が含まれます。
-
Alembic 点群とデータ テーブル用の外部データのサポート
-
Alembic ファイルを PCG 設定アセットに変換するためのユーティリティ
サブグラフの調査

親グラフ内の属性リスト ビューで PCG サブグラフをデバッグおよび調査するためのサポートを追加しました。
グラフ インスタンスのパラメータ

PCG グラフ ユーザー パラメータを取得および設定するために、ブループリント API を導入しています。その他の追加として、UX の改善およびサポートされているタイプのフィルタがあります。
カスタム PCG 要素

作成ワークフローとカスタム PCG 要素の可読性を改善するために、PCG 固有のブループリントのループ関数の名前を変更しました。また、PCG データ コレクションを順番に設定および出力するために、新しい関数を追加しました。
デベロッパーのイテレーション
マルチプロセス クック (ベータ)
マルチプロセス クック を使用すると、使用可能な CPU コアおよびメモリのリソースを利用することで、ビルド ファーム サーバーまたはローカル ワークステーションからクックされた出力を取得するのにかかる合計時間を大幅に短縮できます。
マルチプロセス クックは、UE 5.3 のベータ機能です。パフォーマンスの向上は、プロジェクトの規模やデータの分割方法によって異なります。最良の結果を得るために、プロジェクトおよび使用可能なハードウェア仕様に応じた CookProcessCount 値をテストすることをお勧めします。
仮想アセット
仮想アセットは UE 5.3 でプロダクション対応になったので、Perforce バージョン管理を使用しているチームや、最高のパフォーマンスを得るために共有 Unreal DDC (派生データ キャッシュ) を使用しているチームにお勧めします。
まとめると、仮想アセットは、ローカルのプロジェクト データのサイズを大幅に削減し、コア アセット メタデータのみを同期して、必要に応じてオンデマンドでバルク データを小さくすることで、同期をより迅速に行います。
仮想アセットは、テクスチャ、オーディオ データ、およびスタティックメッシュ (Nanite を含む) 用にサポートされています。バルク データは、データ サイズを小さくするために Oodle を使用して圧縮されます。
オフラインで行う必要がある場合、マシンに仮想データをローカルにキャッシュするプロジェクトを起動すると、事前キャッシュ コマンドレットを実行できます。Unreal Automation Tool (UAT) で使用可能な自動修正 / アセットの再仮想化チェックイン スクリプトもあり、これを使用すると、誤って仮想化がなされていないアセットがプロジェクト全体でキャッチされます。
C++20 デフォルト バージョン
UE 5.3 は最新の C++20 規格でコンパイルされ、このバージョンは開発環境でサポートされています。
C++20 のサポートを Unreal Build Tool (UBT) に追加しました。これはターゲット設定またはモジュール設定で制御可能です。C++14 は非推奨とマーク付けされ、サポートされなくなりました。
すべてのエンジン モジュールは、ターゲットの C++ 規格に関係なく、デフォルトで C++20 でコンパイルされています。他のモジュールでは C++17 をサポートしていますが、必要に応じて C++20 を使用できます。
C++ Unreal Header Tool
Unreal Engine から、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 の単一パスのステレオ レンダリング
[Instanced Stereo Rendering (インスタンス化されたステレオによるレンダリング)] が有効になっている場合に、Nanite では単一パスで両方のステレオ ビューをレンダリングできるようになりました。
-
Nanite レンダリングは複数ステップのプロセスで、片目ごとにこのステップを実行することは最適ではありません。ISR が有効になっているプロジェクトでは、Nanite パイプラインの各ステップで両目を一度に処理できるようになり、全体のレンダリング時間が削減されます。
-
問題を引き起こす可能性がある場合、r.Nanite.MultipleSceneViewsInOnePass=0 を使用すると、この技術を無効にできます。
Lumen グローバル イルミネーションのステレオの改善点
Lumen GI にはビューごとのキャッシュが多数あります。位置と方向に関してステレオ ビューが相互に近いので、ビュー間のキャッシュの一部を再利用できます。
- r.Lumen.StereoOptimizations=0 を使用すると、問題が発生した場合にこれを無効にすることができます。
ハンドヘルド AR の改善点
-
ARCore SDK が 1.37 に更新されました。
-
ARCore プラグインのクリーンアップ内容は次のとおりです。
-
非推奨のカメラ メタデータ API の使用を削除しました。
-
新しいクラウド アンカー非同期 API に更新しました。
-
新しい前方 / 後方の camera コンフィギュレーション API に更新しました。
-
非推奨の ARCore 固有のブループリント関数 (クロスプラットフォームの同等の関数あり) を削除しました。
-
ワールド トランスフォームまたはワールド スケールの変更の追跡時の ARCore および ARKit ARPin を修正しました。
-
XRScribe プラグイン (実験的機能)
この新しい実験的なプラグインを使用すると、OpenXR デバイスがなくても OpenXR プラグインと関連コードを使用できます。このプラグインは Unreal Engine とランタイム間の OpenXR API インタラクションをキャプチャし、このキャプチャを使用してデバイスをエミュレートできます。
-
制限された OpenXR 拡張機能セットは、現在 XRScribe OpenXR サーフェスでサポートされています。ハンド トラッキング、視線トラッキング、深度レイヤー、および Vive トラッカーはまだサポートされていません。
-
現在、Win64 でのみ使用できますが、他のプラットフォームは将来的にサポートされます。
-
エミュレーションは、現在 HMD ポーズとデバイス ポーズの再生を処理しますが、入力は処理しません。
-
プラグインの組み込みキャプチャを使用すると CLI (-xremu=mq1 または -xremu=vi) を使用したエミュレーションをすばやく実行できます。
XRBase のリファクタリング
多数の XR 関連のインターフェースの実装をコア エンジンから XRBase プラグインにリファクタリングして、実行可能なサイズと XR 以外のプロジェクトのメモリ オーバーヘッドを削減しました。結果として、一部の XR 関連プラグインでは XRBase を依存関係として追加することが必要になる場合があります。
XR_FB_Foveation のサポート (実験的機能)
Meta Quest デバイスのダイナミック固定中心窩を [Project Settings (プロジェクト設定)]->[OpenXR Settings (OpenXR)] で有効にできるようになりました。次の CVar を使用して設定できます。
-
xr.OpenXRFBFoveationLevel (デフォルト = 0)
- 0 = なし、1 = 低、2 = 中、3 = 高
-
xr.OpenXRFBFoveationDynamic (デフォルト = False)
- True/False
-
xr.OpenXRFBFoveationVerticalOffset (デフォルト = 0)
その他の改善点
-
Vulkan RHI の モバイル プレビュー は、現在、モバイル マルチビュー エミュレーションの代わりにマルチビュー拡張機能を使用しています。
-
すべての メタ デバイスのパッケージ化は、プロジェクト設定の Meta Quest デバイスのパッケージのチェックボックスを有効にすることで、実現できます。
-
OpenXR プラグインに対する 拡張プラグイン では、レイヤー リスト にアクセスできるようになりました。
モバイル開発の要件と互換性のあるハードウェア
Unreal Engine 5.3 でサポートされている OS バージョンおよびモバイル デバイスのハードウェア最小要件は、以下のとおりです。必要な SDK と IDE の詳細については、「プラットフォーム SDK のアップグレード」セクションを参照してください。
iOS/tvOS/iPadOS
UE 5.3 では、ターゲット SDK バージョン 15 以降をサポートする OS として、iOS、iPad OS、tvOS のデバイスがサポートされています。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 (第 1 世代)
-
Apple TV 4K (第 2 世代)
-
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 Studio Flamingo 2022.2.1 に移行して OpenJDK 17.0.6 を JDK バージョンとして使用することで、Android SDK の要件を簡素化しました。UE と AGDE の両方のベースライン Android サポートは同じ JDK バージョンを対象にしていて、ユーザーは JAVA_HOME
環境変数と AGDE_JAVA_HOME
環境変数を分けて別々の JDK インストールを指定する必要がありません。この更新では、UE は JDK に対して jre
ディレクトリではなく、jbr
ディレクトリを対象としています。
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 で プラットフォームごとに 1 つの 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 プラットフォームのための開発ワークフローに対する改善点がいくつか導入されています。
-
アプリ ID に拡張仮想アドレス指定の利用資格が含まれている場合、MallocBinned2 のメモリ アロケータを使用できます。
-
最新 XCode プロジェクト統合 のためにパッケージ化とアプリケーションの署名が改善されました (上記の「最新 Xcodeプロジェクト」を参照)。
-
[Prepare for Debugging (デバッグの準備)] コマンドはデバッグ パイプラインを効率化し、Windows リモート (実験的機能) ワークフローとセカンダリ Mac ワークフローを提供するようになりました。詳細については、Xcode でのデバッグ と リモート Mac の使用 に関するドキュメントを参照してください。
-
iOS シミュレーター が Apple Silicon Mac でサポートされるようになり、デバイスなしで迅速な開発のイテレーション (実験的機能) が可能になりました。
Android でのモバイル レイ トレーシングのサポート (実験的機能)
UE 5.3 では、モバイル デスクトップ レンダラ を実行するハイエンド Android デバイスに レイ トレーシング をサポートしています。サポートされるモバイル GPU には次が含まれます。
-
Adreno 740
-
Immortalis-G715
-
Samsung XClipse Series
モバイル レイ トレーシングを有効にするには、次を実行します。
-
プロジェクトのデスクトップ レンダラを有効にします。
-
レイ トレーシングを有効にします。
-
次をデバイス プロファイルに追加します。
[Android_Vulkan_SM5 DeviceProfile]
+CVars=r.Android.DisableVulkanSM5Support=0
この更新には、レイ トレーシングされたシャドウに対してモバイル インライン シャドウのサポートも含まれており、遅延シェーディングとのみ連携します。
このサポートは 実験的 であり、この時点ではプロダクション目的で使用しないでください。ただし、これに関するフィードバックがありましたら、お知らせください。
モバイル レンダラ

モバイル レンダラには、パフォーマンスとビジュアル品質の改善点がいくつか含まれています。注目すべき点は次のとおりです。
-
計算ベースのランドスケープの頂点カリング
-
フォグ ボリュームのサポート
-
モバイル フォワードでのグローバル距離フィールドの生成
-
インスタンスのレンダリングの改善 (GPU シーン)
-
バーチャル テクスチャリングのサポート
Apple M2 デバイスでの Nanite のサポート (ベータ)

Unreal Engine 5.3 では、macOS を実行する Apple Silicon M2 デバイス で Nanite レンダリング技術のベータ版サポートを導入しています。このサポートは、デフォルトで、Epic Games Launcher からダウンロード可能な UE macOS バイナリのシェーダー モデル SM6 で有効になっていますが、5.2 の実験的機能のサポートは GitHub ソースからビルド時にのみ使用可能になりました。
キャラクターとアニメーション
ランタイムおよびノンリニア シネマティックスのダイナミック ワークフロー

このリリースでは、ランタイム ワークフローとノンリニアの編成に重点を置いています。
ユーザー定義の動的バインディング
Level Sequence Director ブループリントを使用して、ランタイム時に動的に所有されるように、またはシーケンサーでスポーンされるように、プレイヤー ポーンなどのさまざまなオブジェクトを定義します。
マテリアル セクションのブレンド
トラック タイプと同様に、マテリアルをサポートするトラックにマテリアル タイプのセクションを追加できます。これには、マテリアル パラメータ コレクションと UMG の UI アニメーションが含まれています。
サブシーケンスのテイク
ショット トラックと同様に、サブシーケンスのテイクを作成して、シーケンサー内に設定できます。
テイクのコメント
シーケンサー内のショット / サブシーケンス テイクに対してコメントを追加 / 編集 / 表示します。
テキスト トラック
テキスト プロパティはシーケンサーでトラックを設定できるようになりました。ここで、ユーザーはテキスト フィールドの値を変更してキーを設定できます。
アニメーションのリターゲティング

今回のリリースでは、主にリターゲティングの品質に関する改善に焦点を当てました。
-
リターゲティング エディタのツールバー - リターゲティング フェーズとともにグローバル設定とルート設定に簡単にアクセスできます。リターゲティングの実行、リターゲティング ポーズの編集、リターゲティング ポーズ オプションの表示間を切り替えるモードが使用可能になります。
-
リターゲティング ポーズ - これらは、ボーンのローカル空間を編集して、ボーンの回転をゼロにリセットします。
-
右マウスのコンテキスト メニューで選択したスケルタルメッシュ / IK リグから IK リグ / IK リターゲッタ アセットを作成します。
-
IK リグと IK リターゲッタ アセットのサムネイル
アニメーション オーサリング

今回のリリースで加えられたアニメーション オーサリングの改善点は、次のとおりです。
スマート ベイク
-
キーフレームのベイクのみをターゲットにすることができます。
-
コンストレイントのベイク
-
空間の切り替えのベイク
-
スナッパー
-
セクションの折りたたみ
-
ベイク トランスフォーム
スマート自動接線
- カーブ形状の維持が容易になる新しい自動接線
カーブ エディタの改善
-
正規化された表示の改善
-
多数のキーを使用したパフォーマンスの向上
-
ハンドルの選択の向上
-
マーキー選択の正確性の向上
-
自動フレームがオフの場合のズーム レベルの修正
モーション ブレンディングの改善
-
ルート ボーンの交換が AnimBP を使用したルート モーション プレビューでアニメーション上で機能します。
-
スケルタル アニメーション セクションを後方に拡張できます。
エクスポートの改善
- コントロール リグ アニメーションを FBX ファイルとしてエクスポートします。
スケルタル エディタ (実験的機能)

スケルタル エディタ を使用すると、Unreal Editor でスケルトンの作成やメッシュ スキン ウェイトの編集を直接行うことができます。このツールでは、アセットへのボーンの追加、スタティックメッシュの変形、およびスケルタルメッシュへの変換によってより迅速にイテレーションを行うことができます。すべてが 1 か所にあり、スケルトン データをインポートする必要がありません。
-
スタティックメッシュのスケルタルメッシュへの変換
-
スケルトンの作成と編集
-
ボーンの追加
-
ボーンの削除
-
ボーンの方向の変更とボーンの編集
-
ボーンのミラーリング
-
-
スキン ウェイトの作成
-
ペイント ウェイト ブラシ ツール
-
頂点選択でのウェイトの編集
-
フラッド / 緩和 / プルーン / 平均 / 正規化操作
-
ミラー ウェイト
-
-
マップのペイント
-
ボーンとウェイトに対する Python API のサポート
機械学習 (ML) デフォーマー

ML デフォーマーを使用すると、UE でリアルタイムで実行する機械学習モデルをトレーニングすることで、複雑なリグ、ノンリニア デフォーマー、または任意の変形の近似を行うことができます。
UE 5.3 では、次の改善を行っています。
-
ローカルのニューラル モーフ モデルのマスキング システムの追加。これにより、構造化データを操作するユーザー機能が改善されています。
-
最近接モデル UI とワークフローの改善
-
NNI フレームワークの依存の削除
-
トレーニング マスクを作成し、ボーンごとのマスク / ボーン グループ / ビューポートのカーブを視覚化する機能
-
最近似モデルとニューラル モーフ モデルが Windows 上で正しくトレーニングするための手動ステップ (Python パッケージのインストールなど) の実行が不要になりました。
-
Linux および macOS 上でトレーニング済みニューラル モーフ モデルと最近似モデルを実行する機能 (ただし、トレーニング エラーが発生する可能性があります)。
データからのコントロール リグのビルド
コントロール リグ グラフの外部でデータを使用してプロシージャルにリグを作成および変更する手段を提供することで、コントロール リグの プロシージャルな ツールセットを拡張しました。これには次が含まれます。
-
トランスフォーム、浮動小数点、スケルトンなどのデータをクエリおよび使用してコントロール リグをプロシージャルにビルドする機能
-
入力データをクエリする新しい GetUserData ノード
-
現在参照されている形状ライブラリを交換する新しい Set Shape Library from User Data ノード
バーチャル プロダクション
SMPTE 2110 対応の ICVFX

Unreal Engine 5.3 リリースでは、nDisplay でエンドツーエンドの SMPTE 2110 ベースの IP ビデオ信号の伝達を使用して、次世代 ICVFX ステージ デプロイメントの実装を完了しました。SMPTE 2110 のサポートにより、ステージで使用可能なハードウェア リソースをプロダクションで最大限に高めることができます。これにより効率性が向上し、高解像度のインナー フラスタムと低レイテンシーの可能性を高めます。
SMPTE 2110 ベースのコンフィギュレーションで、プロダクションでは次のことが可能になります。
-
インナー フラスタムを一度レンダリングし、それをクラスタ内の他のレンダリング ノードと共有して、決定方法のためにインナー フラスタムを再レンダリングする各ノードの重複を回避します。
-
レンダリング ノード全体のリソースをインナー フラスタム専用にし、使用可能なすべてのリソースを利用して、カメラで表示されるピクセルで最高級の品質を表示します。
-
レンダリング ノードをネイティブ SMPTE 2110 同期ポリシーでフレームロックし、Unreal Engine の出力をカメラと同調したままにします。
-
SMPTE 2110 を使用して、結果のレンダリングを LED プロセッサに出力します。ディスプレイ ポートまたは HDMI コンバーター (あるいはその両方) は必要ありません。
バーチャル カメラ

Takes Browser
バーチャル カメラからレベル シーケンスをブラウズし、レビュー用または次回のレコーディングのベースのために、リストをフィルタするための星、フラグ、NG シーケンスに対して、これらをロードする機能を追加しました。
単一の VCam からの複数の HUD
複数の出力プロバイダを単一の VCamComponent にそれぞれ独自の HUD とストリームで追加できるようになりました。オペレーターのビュー、シンプルなバーンイン、クリーンなプレートを 1 つの VCam から同時にストリーミングできます。
タイムスケーリングされた再生およびレコーディング
1:1 以外の速度で再生およびレコーディングできるようになりました。カスタム レートでレコーディングすると、最高速で再生時に移動の速度が上がったり下がったりします。
macOS の初期サポート (実験的機能)
VCamActor では、従来のリモート セッションを介して macOS からストリーミングをサポートするようになりました。macOS バージョンの UE5 でカスタム VCam を作成するために、バーチャル カメラ コア、VCamComponent、VCamModifier、および VCamOutputProvider が使用可能です。ピクセル ストリーミングと macOS に対する VCam の完全なサポートの導入のために、引き続き開発が行われています。
CineCamera Rig Rail (ベータ)

高度なシネマティック ワークフローとバーチャル カメラ ワークフロー用に調整した新しいリグ レール アクタを追加しました。
コンポジションを計画する
カメラ フォーカス、絞り、ズームをレール ポイントで格納すると、レールが複雑なコンポジションを制御できるようになります。
レールを制御する
次のさまざまなドライブ モードを使用して移動を自動化します。
-
Manual (手動): シーケンサーまたは外部入力からレールの位置を制御します。
-
Duration (持続時間): レールの位置を制御して、一定の時間に移動を完了します。
-
Speed (速度): 設定した速度でレールの位置を制御します。
シーケンサーで作業する
ポイントが絶対値で格納され、シーケンサーで安全にキー設定できます。その結果、特定のポイントの位置の値は、直接ポイントを変更しない限り、変更できません。特定のフレーミングで発生する特定の位置をキーフレーム化する場合、前後に追加された新しいポイント数に関係なく、位置は変更されません。
速度を視覚化する
レール メッシュに適用されたヒート マップでレールの任意のポイントに沿って速度を表示し、レイヤー化された移動のレコーディング時に予期しないことを回避します。
軸の継承を選択する
リグ レールからのみ軸のサブセットを継承することを選択します。回転の調整時にレールから位置を制御するか、安定性のために Z 軸を削除することを選択します。
CineCamera シーン キャプチャ コンポーネント (ベータ)

CineCamera 用にシーン キャプチャ コンポーネントを追加しました。マテリアルや UMG などで使用するレンダリング ターゲットに対して CineCamera コンポーネントを正確にキャプチャできます。この機能は、レンズの歪み、CineCamera 固有のプロパティとポストプロセスをサポートしています。
アナモフィック レンズのキャリブレーション ソルバ (実験的機能)

アナモフィック レンズ モデルおよびソルバをレンズ アセットで使用するレンズ ツールに追加し、アナモフィックのレンズ歪みを解決できるようになりました。レンズ コンポーネントを使用すると、アナモフィック レンズ モデルの歪みを CineCamera アクタに追加して、エンジン内で歪みの効果をレンダリングすることもできます。これにより、プロファイリングされたアナモフィック レンズを使用してショットを視覚化できるようになります。アナモフィック レンズ モデルの手動パラメータを調整して、アナモフィックの歪みを伴う外観を作成することもできます。
テクスチャ変換用の OCIO

作業色空間の導入により、テクスチャ用の入力色空間の設定など重要な操作のために Unreal Engine で優れた色管理用の基盤が設定されました。これにより、作成された場所に関係なく、アセットに適切な外観を実現できます。Unreal Engine 5.3 では、これらのテクスチャの変換のために OpenColorIO を利用する機能でこのサポートを拡張しています。これを使用して、Unreal Engine では業界標準のフレームワークを採用し、テクスチャのカラー パイプラインの一貫性を最大限に高めます。
nDisplay のマルチプレイヤー アクタのレプリケーション

マルチプレイヤー ゲーム コンテキストでアクタのレプリケーションをサポートするように、nDisplay の低レベルのネットワーク アーキテクチャを変更しました。
-
エンドユーザーに対して透明性が向上します。
-
この機能は、[Cluster Replication Enabled (クラスタ レプリケーションを有効化)] オプションを使用して、[nDisplay Project Settings (nDisplay プロジェクト設定)] でアクティブにすることができます。
-
Switchboard にマルチプレイヤー サーバー オプションを追加しました。
-
-
マルチプレイヤー セッションまたはゲームに参加したときに、各 nDisplay ノードがネットワーク クライアントになります。
将来的に、個々のノードではなくマルチプレイヤー セッションに nDisplay クラスタが参加できるようにする予定です。
派生データ キャッシュを埋める nDisplay

事前に派生データ キャッシュを埋めることで、最初に使用する前に nDisplay システム (スタンドアロン シェーダ) を「準備」する機能を追加しました。ビルド メニューを使用するか、すべてのクラスタ ノードで Switchboard を使用して、この機能をローカルにトリガーできます。
nDisplay クラスタは、シェーダーをコンパイルしなくても開始する準備ができています。コマンド ラインの引数を使用して Unreal Engine に公開されているので、この操作を便利な時間にオフラインでスケジュールできます。また、外部からトリガーできます。
DMX コントロール コンソール UX

次の追加機能によって新しいコントロール コンソール UI と UX を改善しています。
-
2 つのメイン レイアウト モード:
-
デフォルト:選択したパッチのみを表示できます。
-
手動:フェーダ グループの位置を定義できます。
-
-
迅速な DMX フェーダ アクセスのために変更した検索メカニズム
-
相対的または絶対的なコントロールを使用したフェーダ値を変更する機能
-
DMX データをアクティブに送信するパッチを選択する機能
DMX ピクセル マッピング UX

DMX ピクセル マッピング ツールが大幅に修正され、改善された UI と UX を提供するようになりました。修正点は次のとおりです。
-
新しい入力フィルタ セクションを使用すると、スケールダウン、ぼかし、受信ピクセルでのマテリアルベースのロジックを実行できるようになります。
-
DMX ライブラリの操作は、コントロール コンソールで提供される新しい UX と一貫性があります。これは階層ビューと連携しているため、追加されたパッチと残っているパッチを確認できます。
メディア IO のメディア プレート マテリアル システム

現在のメディア プレートのメディア アクタ マテリアル システムを改善し、次の機能を追加しました。
-
自動的に生成されるドロップダウンを使用して、Media Plate プラグイン コンテンツ ディレクトリから直接マテリアルを選択する。
-
Media Plate プラグイン コンテンツ ディレクトリをブラウズしてすばやくアクセスする。
また、Media Plate アクタに相対的なカメラの動きがある場合、TSR/TAA 画像の安定性の向上のためにデフォルトのメディア プレート マテリアルで [Output Depth and Velocity (深度と速度の出力)] フラグを有効にしました。
シミュレーション
Chaos Cloth Editor のファンデーション (実験的機能)

UE 5.3 の Chaos Cloth には、実験的な クロス エディタ が追加されています。
新しいクロス エディタを使用すると、将来的にキャラクターごとに複数の衣服を設定することや複数のキャラクターに同じ衣服を設定することが可能になります。パネルベースのワークフローも提供し、これを使用すると、衣装を設定および変更しやすくなります。これには、次の機能が含まれています。
-
キャラクター物理 (クロス / 身体) の新しい基本クラス エディタ
-
データフロー グラフを含む最初のフェーズのパネルベースのエディタ
-
非破壊的ワークフロー
-
クロスは別のコンポーネントとしてスケルタルメッシュから抽出されます。
-
コリジョンの追加サポート
-
新しいスキン ウェイト転送ツール
-
マスクは再利用可能なウェイト マップに置き換えられます。
-
複数のマテリアルは、単一のシミュレーション メッシュのサポートで制御できます。
この機能の詳細については、「Panel Cloth Editor の概要」を参照してください。
Chaos ML Cloth (実験的機能)

使用回数が多いクロス シミュレーションは、負荷が大きくなる可能性があります。アーティスト、エンジニア、およびゲーム デザイナーは、タイトフィットの衣服のためにクロス シミュレーションを模倣する際にランタイム ソリューションの負荷を小さくする必要があります。現在、これには、シミュレーションのために DCC 間を移動したり、エンジンに結果をインポートしたりするという大変なプロセスが必要です。
UE 5.3 では、実験的な Chaos クロス ジェネレータ プラグインを使用して、アーティストが エンジンで クロスをシミュレーションおよびトレーニングできるようになりました。
この機能の詳細については、「機械学習クロス シミュレーションの概要」を参照してください。
Chaos 剛体とシーン クエリ
アーティスト、デベロッパー、およびプログラマーがよりよいシミュレーション結果 (特に剛体シミュレーションとシーン クエリで) を得られるように、Chaos Physics (ケイオス物理) に更新と最適化をいくつか行いました。
剛体に継続的に注目していたのは、SIMD、キャッシュ コヒーレンシー、機能の削除、データ コピーでの削減など、低レベルの最適化です。
シーン クエリは更新とクエリを迅速に行うダイナミック アクセラレーション構造を実装しています。
Chaos Destruction
フラクチャ エディタの更新
ジオメトリ コレクション用にマテリアルを管理および割り当てる際に細かく制御できるように、新しいマテリアルが追加されました。

近接ツールは、ビジュアライゼーションのより適切な制御と接続グラフを生成するための新しいコンタクト メソッドによって改善されました。

レベル統計は集約凸型情報を示し、ジオメトリ コレクションのコリジョンの最適化時に役立ちます。

ランタイムの最適化
-
ジオメトリ コレクション コンポーネントはデフォルトでティックしなくなり、ジオメトリ コレクションがダメージを受けた後でのみティックするようになります。ティック関数のランタイム コストも削減されました。
-
ソルバおよび属性レベルでデータ型の最適化が行われ、ディスク上のジオメトリ コレクション アセットのコストとインスタンスのランタイム メモリ コストを削減しました。
-
多数の最適化が行われ、ジオメトリ コレクション インスタンスの CPU 全体のコストも削減され、大規模な破壊の使用が可能になりました。
マテリアル トポロジと内部トポロジおよびジオメトリ コレクションの接続の物理プロパティを利用して、新しい実験的なダメージ モデルが導入されました。
Niagara Fluids

-
Niagara 流体シミュレーションのキャッシュ後にこれをトランスフォームする機能を追加しました。これによって、キャッシュを複数回複製し、キャッシュされた単一のシミュレーションからさらに複雑な効果を得る時間 / 空間で複製をオフセットできるようになります。
-
データ チャンネルのサポートを 3D ガス シミュレーションに追加しました。これは 実験的な 機能で、レベルで任意の CPU システムから流体をソースとする方法を提供します。マスター エミッタでは、パーティクル ソースにエミッタとデータ チャンネルの 2 つのモードがあります。エミッタ モードは、同じシステムのエミッタからデータを読み取ります。データ チャンネル モードは、定義した Niagara データ チャンネルからデータを読み取ります。データ チャンネルは、既存の流体ソースの設定属性モジュールから書き込むことができます。
-
パス トレーサーは異種ボリュームをサポートしており、そこで流体を直接レンダリングできるということです。
-
実験的な サポートを SVT (スパース ボリューム テクスチャ) 用に追加し、飛躍的に速く流体のキャッシュが直接 SVT に書き込まれるようになりました。
Niagara サマリ ビュー エディタ

サマリ ビュー エディタでは、ユーザーに Niagaraエミッタのカスタム ビューを作成する方法を提供しています。これを使用すると、最も重要な設定とエミッタ用の入力のみをエンドユーザーに表示できます。これがよく使用されるのは Niagara 流体エミッタで、適切に構成された設定のみを確認することで調整しやすくなり、必要な効果を実現することができます。ユーザーは、カテゴリ、セクション、個々のモジュール入力、モジュール全体、およびスプライト レンダラのスプライト マテリアルなどの特定のプロパティを再調整および設定できます。
この機能の詳細については、「サマリ ビュー クイック スタート」を参照してください。
オーディオ
MetaSound ビルダー API
MetaSound ビルダー API を使用すると、ゲームをリアルタイムで実行しているときに、C++ またはブループリント API を介して MetaSound グラフを作成および変更できます。これによって、MetaSound ノードの追加 / 削除とゲームプレイ時の接続の変更の可能性が広がります。
オーディオ バスの書き込み
1 つの MetaSound からデータを取得して別の MetaSound に送信することも、新しい MetaSound ノードを介して別のソース バスに送信することもできるようになりました。
MetaSound 出力のウォッチ (実験的機能)

MetaSound 出力のウォッチを使用すると、ブループリントまたは C++ で MetaSound グラフの変更をウォッチできます。つまり、ユーザーはゲームプレイおよびビジュアルを MetaSound で発生するイベントと照合できます。たとえば、オーディオの音楽のビートまたは変更に従って、ゲームプレイ要素とビジュアルに影響を与えることができます。
これは次の機能をサポートしています。
-
float、int32、ブール、fstring 型の指定した MetaSound 出力に値の変更があると、イベントを開始する。
-
オーディオ出力でエンベロープ フォロワーが変更されたとき、イベントを開始する。
UI システム
共通 UI (ベータ)

共通 UI は、リッチなマルチレイヤー インターフェースをクロスプラットフォーム サポートで作成するためのツールボックスを提供しています。これには次が含まれます。
-
UI に固有の入力アクション システム
-
キャプチャしている入力からメニューを選択的に除外しやすくする入力ルーティング システム
-
共通して使用されるテキスト / フォント、枠線、ボタン用のスタイル アセットを提供するスタイリング システム
-
共通に使用される他のウィジェットのライブラリ
今回のリリースには次の改善点が含まれます。
-
拡張入力との統合
-
入力のデバッグ
-
ドキュメントとコンテンツ サンプル
UMG でのフォント DPI のマッチング

UI モックアップを UMG 画面に変換する場合、DPI の不一致を気にすることなく、デザイナーはフォント サイズをシームレスに照合できるようになりました。
-
新しく作成されたプロジェクトには、72 DPI にデフォルト設定された DPI 設定があります。
-
既存のプロジェクトは 96 DPI のままになります。
-
異なる DPI 設定間で切り替えを繰り返しても、フォントのレンダリングには影響しません。
詳細については、フォント DPI スケーリングのドキュメント を参照してください。
ブループリントのビューモデル

以前のバージョンの Unreal では、デザイナーが C++ でビューモデルを作成する必要がありましたが、UE 5.3 ではブループリントでビューモデルを作成できるようになりました。この更新で、ビューモデルの作成およびバインドのプロセスがさまざまな方法で効率化されています。
-
新しいビューモデル ブループリントを作成するように MVVMViewmodelBase クラスを拡張します。
-
ブループリントで必要な変数を作成してから、名前の横のベル型アイコンをクリックすることで FieldNotify 変数として指定します。
-
FieldNotify 関数を作成して、専用の変数が不要な操作を処理し、FieldNotify 変数を使用してこれらをトリガーします。
-
ビューモデル パネルを使用して、ビューモデルをウィジェット クラスに追加します。
-
新しいクリック & ドラッグ機能によって、ビューモデルが UI フィールドにより迅速かつ簡単にバインドされます。
プロジェクトのブループリントベースのビューモデルの使用法の詳細については、ビューモデルのドキュメント を参照してください。
モデリング
モデリング ワークフロー (ベータ)

アーティストが開発しているアセットには、効率的なモデリング、スカルプティング、UV 編集、およびテクスチャリング ワークフローが必要です。これらのワークフローには、さまざまなツールがあり、ある特定の順序でクリックされます。すべてのタイプのイテレーションを検討し、マウス クリックの回数を減らし、カーソルの動きを最小限にし、アーティストに適切なフィードバックを提供する必要があります。
この目的を念頭に置いて、UE 5.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 エディタに重要な 2 つの新機能を追加しました。
UV エディタの歪みの表示
UV エディタには、歪みのためのオプションの表示モードがあります。これを使用すると、テクセルの伸縮または密度のレベルをインタラクティブに表現できます。
UV の自動レイアウト
このツールは、テクセルの密度の正規化をサポートしています。このオプションでは、レイアウト全体の一定の平均濃度を維持するために個々の島のサイズを変更します。
UV ツールの詳細については、「UV エディタ」を参照してください。
ジオメトリ スクリプト処理 (ベータ)
ジオメトリ スクリプト処理により、テクニカル アーティストはカスタム仕様のモデリング ツールとワークフローを作成するためのツールキットを利用できます。5.3 では、ジオメトリ スクリプト処理は現在ベータ版で、次の追加と改善を通じて継続的に拡張されています。
拡張されたスケルタルメッシュの相互運用性が、いくつかの新しいノードで提供されています。
-
CopyBonesFromMesh
-
TransferBoneWeightsFromMesh
-
GetRootBoneName
-
GetBoneChildren
-
GetAllBonesInfo
-
GetBonesInfo
-
DiscardBonesFromMesh
2D ポリゴンとパスの管理のための新機能に、次の計算オフセットとブール値があります。
-
ポリゴンの差異
-
ポリゴンの結合
-
ポリゴンの交差点
-
さらに、多数の関数があります。
ポイントを補間するメッシュを作成するためのドロネー三角形分割
- ドロネー三角形分割 2D の追加
メッシュ サーフェス上の測地
-
GetShortestSurfacePath
-
GetShortestVertexPath
ジオメトリ スクリプト処理の詳細や使用可能な関数については、「ジオメトリ スクリプトのユーザー ガイド」および「ジオメトリ スクリプト処理のリファレンス」を参照してください。
コンテンツ パイプライン
Interchange のインポート / 再インポート

今回のリリースでは、Interchange フレームワークに次の改善を行いました。
-
シーン全体を再インポートする方法を提供するために、新しいカスタム アセット タイプを追加しました。
-
Interchange UI は、トランスレータごとにパイプライン スタックのオーバーライドをサポートするようになりました。これにより、設定機能が拡張され、デフォルト設定で使用されます。たとえば、glTF アセット パイプライン スタックはデフォルトのアセット パイプライン スタック (FBX と OBJ に使用) をオーバーライドします。
-
glTF インポートの場合、エディタでマテリアルを生成するか、事前定義されたマテリアル インスタンスを使用するかを選択できるようになりました。ユーザーは glTF レンダリングが制御しやすくなるように、これらのインスタンスをオーバーライドすることもできます。
USD MaterialX (実験的機能)

Unreal Engine 5.3 では、USD を MaterialX とともに使用して、ワークフローの効率化と DCC と Unreal Engine 間のコンテンツ作成を行う機能を提供しています。USD ファイルを MaterialX シェーディング ネットワークでエンジンに直接インポートできるようになりました。
さらに、USD ファイルのコンテンツを直接操作しながら、MaterialX シェーディング ネットワークを使用して USD Stage Editor で USD ファイルを開くことができるようになりました。
Unreal Engine の MaterialX サポートが 5.1 で導入されましたが、実験的な機能です。
USD マテリアルとテクスチャ

Unreal Engine 5.3 で、テクスチャとマテリアルを処理して USD アセットの表示を改善する方法にいくつかの変更を行いました。
-
同じマテリアルで複数の UV セットのサポートを追加しました。
-
プレビュー サーフェス マテリアルでシンプルな UV トランスフォームのサポートを追加しました。テクスチャをトランスフォームするために、演算ノードを使用してプレビュー サーフェスをロードしている場合、正しく表示されます。
-
USD Stage Editor の [Details (詳細)] パネルで USD マテリアルをインタラクティブに変更し、ビューポートで結果をライブで表示する機能を追加しました。以前は、USD ファイルを保存し、再度開いて変更を表示する必要がありました。
USD アニメーション

ジオメトリ キャッシュの直接インポート
キャッシュされたジオメトリを USD ファイルから UE に直接インポートする機能を追加しました。以前は、ステージで USD ファイルのみをロードして、そこからジオメトリ キャッシュ アニメーションを再生していました。
シーケンサーの一時的アクタのサポート
シーケンサーの一時的アクタのサポートを追加しました。これにより、USD ステージ アクタからシーケンサーへの要素の追加、USD ファイルのリロードや Unreal Engine のクローズと再オープンを行うことができます。シーケンサーは USD ステージ アクタからアニメートされている要素に接続されたままになります。つまり、アニメートされる USD ステージ アクタから要素を駆動するスパース キー アニメーション カーブを維持でき、ベークされたアニメーションを新しい USD ファイルにエクスポートできるということです。USD ステージ アクタもエクスポートできるので、参照したステージのオーバーライドとして要素のアニメーションをエクスポートできるようになりました。
フレームワーク
スマート オブジェクト - World Partition のサポート

スマート オブジェクトが、World Partition、データ レイヤー、およびパーシスタント レベルとシームレスに連動するようになりました。また、スマート オブジェクトを改善して navmesh と物理の使用をサポートし、スロットを使用しやすくしました。
ブループリント タイプの自動キャスティングの変更

コードベースのブループリントで表示されていたプロパティの非推奨化とプロパティのタイプの変更には、古いピンの再接続時の失敗などの問題が含まれていることがあります。これにより、ピンが孤立し、コンパイル エラーが発生します。
UE 5.3 では、両方のタイプに使用可能な auto-cast 関数がある場合、キャスト ノードが自動的に作成され、グラフに追加されます。さらに、新しいキャスト ノードが追加されたときは常にノートが作成され、ユーザーが API を更新して新しいタイプの変更を使用したいという通知として機能します。
データ アセットのマージ

Diff ツールの提供内容を超える機能の追加の最初のステップとして、データ マージ ソリューションの調査を開始しました。この最初のバージョンでは、競合を自動で解決できない場合にデータ アセットの手動マージのサポートを提供します。
現在は、データ アセット のみ をサポートしていますが、将来的にさらにサポートするデータの型を増やすことを予定しています。
レビュー ツールの Swarm によるコメント

5.2 で導入されたレビュー ツールでは、ソース コントロールとして P4 の使用時に直接 Swarm が統合されるため、そこから実行する差分がエディタで直接コメントを表示します。変更するたびにコメントを表示できますが、グローバルなレビュー ノートも残すこともできます。Swarm でシンプルなメタデータのタグ付けを使用して、コメントを差分の適切なセクションにリンクしています。
エンジン コンテンツおよびテンプレート
拡張入力を使用した「Collaborative Viewer」テンプレート

「Collab Viewer」テンプレートを使用すると、同一の 3D コンテンツの共有環境に複数のユーザーが参加できます。「Collab Viewer」テンプレートの目的は、チームがより簡単かつ迅速にデザインをリアルタイムにレビューおよびやり取りできるようにすることで、問題を特定し、コンテンツの繰り返し作業の効率化を図ることです。
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:March 2023 Update 5 GDK
- ファームウェア バージョン:Recovery June 2023 (10.0.22621.4819) *サポートされている IDE:Visual Studio 2022
- Linux
- ネイティブの Linux での開発
- 推奨 OS: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.15 ヘッダのある 1.16 バイナリ
- 1.15 機能セットを提供
- 最新のプラットフォーム SDK サポート用の 1.16 バイナリおよび WebRTC 修正
- 1.15 ヘッダのある 1.16 バイナリ
- 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
- System software 10.508.011
- サポートされている IDE:Visual Studio 2022
- PS5
- Prospero SDK 7.00.00.38
- UE5Main には 7.00.00.45 へのパッチ更新があります。これは、シェーダー コンパイラの修正に推奨されています。
- System Software 7.40.00.06
- サポートされている IDE:Visual Studio 2022
- Prospero SDK 7.00.00.38
- 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.
- This can be specified by the Enum Value Display Name Overrides meta-data, and is a semi-colon separated list of
-
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 CopyScriptVM property functions by having an implementation per property type instead of a top level override, also removing the need for the FSoftObjectPtrProperty::CopyScriptVM 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.
- Added ability to specify buffer size with
-
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.
- Added
- [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.
- Added
- [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.
- Added
- [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.
- Added cvar
-
[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
.
- This behavior can be disabled by setting the console variable as:
-
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
- 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 the Clear Vertex Color Remapping function.
-
Added the Has 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 parameters -
Added 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 Selection to 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 Mesh and Fetch Debug Mesh have 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 Normals function 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
-
The Bake 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 in Append 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. -
Updated the 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.
-
Updated the 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".
- This can be disabled via the
-
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.
- This fixes race conditions when multiple threads are accessing
-
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
and -
Deprecated 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").
- You can disable local acknowledge-and-consume by setting
-
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.
- Adds a cmd line option,
-
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
widget -
Added 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.