新機能
Unreal Engine 5.2 では、さらに多くの新しいツールをユーザーに提供するため、引き続き 5.0 および 5.1 のフレームワークと機能に基づいて構築を続けています。5.2 のリリースでは、次世代のリアルタイム 3D コンテンツやエクスペリエンスの制作を容易にするさらなる更新や改善を実現します。さまざまなセクターのニーズを念頭に置きながら、機能セットを堅牢にし、ワークフローに即した汎用性のあるものにすることを目指しています。
プロシージャル コンテンツ生成
プロシージャル コンテンツ生成フレームワーク (PCG) により、独自のプロシージャル コンテンツを作成する手段が提供されます。PCG では、アーティストやデザイナー向けに、建造物やバイオームの生成といった迅速で反復的なツールをワールド全体に至るまでビルドする機能が提供されます。
Substrate
Substrate とは、オブジェクトのルック アンド フィールをより細かく制御できるマテリアルを作成する新たな手法です。これを有効にすると、シェーディング モデルの固定スイートがより表現力に優れたモジュール式マルチローブのフレームワークに置き換わります。このフレームワークではより広範なサーフェス アピアランスが提供され、パラメータの作業スペースもより広く確保されます。
バーチャル プロダクションの改善
SMPTE 2110 の統合
nDisplay のクラスタ化済みセットアップでは、Rivermax SMPTE 2110 を使用して次のことができるようになりました。
4K 映像の複数ストリーミング。
専用マシンへのカメラのインナー錐台のレンダリング。
iOS ステージング アプリ オンステージで iOS ネイティブ演算子アプリが使用できるようになり、次の制御が簡素化されました。
ライト カード
フラグ
色補正ウィンドウ
バーチャル カメラの改善点 バーチャル カメラを使用して、次のことができるようになりました。
単一のエディタ セッションにおける複数のカメラのストリーミング。
リグレールの使用。 また、バーチャル カメラ ブループリントも簡素化しました。
DMX の改善点 DMX では、物理的な器具と仮想的な器具の両方の迅速なデバッグと制御や、いくつかの UI の改善のため、コントロール コンソールが簡素化されました。
ML デフォーマーのサンプル
新しい 機械学習 (ML) デフォーマのサンプル プロジェクト をダウンロードして、ML デフォーマ システムを使用したキャラクターのフルボディのメッシュ変形を確認できます。
ランチャー ビルドで macOS 用のユニバーサル バイナリを使用するようになりました。
Epic Games Launcher を介して配信される Unreal Engine のビルドに、macOS 用のユニバーサル バイナリが含まれるようになり、Apple Silicon (ARM64) と Intel ベース (x86-64) の両方の mac にネイティブ サポートが提供されます。UE 5.2 をダウンロードして macOS マシンにインストールすると、Unreal Editor では自動的にアーキテクチャに適したバイナリ スライスが選択されます。Apple Silicon をお使いのユーザーは、パフォーマンスの改善を実感するはずです。さらに、特に Apple Silicon デバイス向けに、macOS のユーザー エクスペリエンスをいくつか改善しました。
ウィンドウのフォーカスの処理を修正しました。
現行世代の Mac 画面の上部にある「ノッチ」をサポートしました。
詳細については、「Unreal Editor での Apple Silicon のネイティブ サポート」を参照してください。 さらに、このアップデートでは、macOS のユーザーも 5.2 用の Unreal Engine マーケットプレイス コンテンツが利用可能になりました!
これらのツールについての詳細情報、および Unreal Engine 5.2 のすべての改善点の一覧をご覧ください。
今回のリリースには、GitHub の Unreal Engine デベロッパー コミュニティから寄せられた改善点が含まれています。Unreal Engine 5.2 に貢献いただいた以下の皆様に謝意を表します (以下、敬称略)。
909185693, aaronmjacobs, ActiveXSturcture, AfterThunk, aidinabedi, alexirae, ameaninglessname, ameyghan, amuTBKT, anon-oss, APandaWithAGun, aquanox, bestofact, bretternst, brian2524, brumenn, brunnio, chris03, dapetcu21, davidyrgilbert, dbsigurd, DecoyRS, disseminate, dman82499, dorgonman, DreikaEru, Duroxxigar, EchoRed-3D, Edstub207, ennorehling, Erlite, foobit, forsakenyang, gaborpapp, galeone, gameknife, geordiemhall, gtreshchev, hach-que, huklen, HunterVacui, Ident, imatakeharuhiko, iniside, jlnordin, jlsalmon, jm00517, joeycarr, jszakmeister, kedamazigoku, KeithRare, kentzhang-geek, l2oe, LairdWT, leith-bartrich, LiamGiiV, lineageiori, LizardThief, LouRohanNV, marcussvensson92, Mattiwatti, Megafunk, MichaelBell, MilkyEngineer, MothDoctor, Murazaki, nklose, nutti, oxxxydimon, PapeCoding, pear-studio, Pico-XR, RadAlex, RandomInEqualities, real-mikhail, Ryan-DowlingSoka, satoshi-iwaki, Scaless, SeamusBao666, SlashParadox, slonopotamus, Sn-a-ke, SRombauts, stlnkm, sunduk, SungJJinKang, Sythenz, Temaran, TheJamsh, thomasvanta, timrademaker, TroutZhang, Tryum, tustanivsky, tuxerr, UntamedLoli, VesCodes, Victov, vorixo, whatthesamuel, x157, zorbathut
レンダリング
Nanite
Nanite の機能およびパフォーマンスの更新は次のとおりです。
カスタム深度とステンシル、ライト チャンネル、グローバル クリップ平面の追加機能サポート。
可変精度法線 (車の高品質な反射用など)。
ワールド位置オフセットを Nanite で使用するオブジェクトに共通するアーティファクトを削減するための新しい「Max World Position Offset Displacement (ワールド位置オフセットの最大ディスプレイスメント)」設定。
ビューポートのビューモードで [Visualize (視覚化)] > [Out of Bounds Pixels (範囲外のピクセル)] を選択して、最大オフセットで WPO がクランプされている場所を確認します。
パフォーマンス、安定性、統計の改善のために、ディスクからジオメトリ データのクラスタをストリーミングする Nanite Streamer を更新しました。
静的テクスチャ マップ (ベータ版) を使用した事前計算済みの Nanite ディスプレイスメント (変位) マッピング。
詳細は、「Nanite」を参照してください。
Lumen
Lumen に対する品質/パフォーマンスの更新には以下が含まれます。
キャラクターの薄いジオメトリ (シャツの折り目、鼻や耳のしわなど) に対する GI とオクルージョンが向上し、ヘア グルームとの統合も改善しました。
透過性における高品質な反射は、鏡のみに制限されず、マテリアルのラフネスにも対応するようになりました。
サーフェス キャッシュは、ソフトウェア レイ トレーシング (SWRT) された反射のフィードバックによって制御されるようになり、より高い解像度での反射とシーンの変化へのより素早い反応が実現します。
SWRT モードでは、コンソール上でデフォルトで非同期計算を使用します。
反射に含まれるセカンダリ バウンスの近似値が ハードウェア レイ トレーシング (HWRT) ヒット ライティングによって向上しました。
HWRT ヒット ライティングに両面フォリッジのサポートが加えられました。
詳細については、「Lumen のグローバル イルミネーションおよび反射」、「Lumen の技術的詳細」、および「Lumen パフォーマンス ガイド」を参照してください。
Substrate (実験的機能)
Substrate (以前は「Strata」もしくは「ストラータ」と呼ばれていました) については、Default Lit や Clear Coat などのシェーディング モデルの固定スイートを、より広範なサーフェス外観やより幅広いパラメータ空間を提供する、より表現力に優れたモジュール式のフレームワークに置き換えます。パフォーマンスは複雑さと望ましい割り当てに応じて変動し、従来のマテリアルの負荷はこれまでと同様です。
Substrate は、早期テスト用として UE 5.1 でリリースされ、5.2 でもまだ実験段階の機能です。プロダクション シーンには使用できませんが、この開発段階中にぜひテスティングを行い、フィードバックをお寄せください。
Unreal Engine 5.2 には、機能、安定性、パフォーマンスにおいて多くの改善が含まれています。変更には次のものが含まれます。
Metallic のパラメータ表現を除去して、Slab ノードのロジックを簡素化しました。Substrate Metalness-To-DiffuseAlbedo-F0 ヘルパー ノードを使用して、Metallic 形式のパラメータに変換できます。
Vertical Layering ノードで Slab の厚さを指定することにより、独立したレイヤー コントロールを提供しつつ、Slab を含むマテリアル関数を簡単に再使用できるようになりました。
Substrate ノードを従来のマテリアル ノードと同じようにプレビューできるようになりました。
クロス マテリアルのレイヤリング/エネルギー保存が向上し、独立したラフネス値が追加されました。
ディファード モバイルを除くモバイル プラットフォームに対する初期サポートが追加されました。
Nintendo Switch に対する初期サポートが追加されました。
従来のマテリアルから Substrate に変換する際のノードの配置が向上し、読みやすくなりました。
シーンの GBuffer データを読み込むポスト プロセスに関する問題を修正しました。
マテリアル エディタでのノードのプレビューが向上しました。
デフォルトで F0 で屈折率 (IOR) を制御できるように屈折のコントロールを向上しましたが、これはオーバーライドできます。
Substrate のブレンド モードを更新し、マテリアル インスタンスで使用可能になりました。
マテリアル エディタの [Substrate] タブから、マテリアル全体の簡素化をプレビューできるようになりました。
複数のクラッシュを解決し、検出されたバグの修正を行いました。
実験段階にある Substrate の詳細については、Epic Developer Community のフォーラム を参照してください。
DX12 PSO 事前キャッシュ
DX12 タイトルでの PSO ヒッチングを向上するために、実験的機能として新しい PSO 事前キャッシュ メカニズムが 5.1 に導入されました。5.2 では、このシステムに以下の改善点が加えられました。
システムのパフォーマンスと安定性が向上しました。対処しておく必要がある厄介なケースがいくつもありました。
PSO の準備がまだできていない場合は、オブジェクトの描画をスキップするようになりました。このシステムでは描画までに PSO の準備を整えるようにしますが、必ずしもそれを保証することはできません。準備が遅れた場合は、コンパイルの完了 (およびヒッチング) を待つのではなく、そのオブジェクトの描画をスキップできるようになりました。
使用されないものを除外するというロジックが向上したことにより、事前キャッシュする PSO の数が減りました。
旧版 (手動) の PSO キャッシュ システムが向上し、事前キャッシュとともに使用できるようになりました。
パス トレーサー
5.2 のパス トレーサーは、ラスタライザとの機能パリティにおけるいくつかのギャップを埋めて、オフライン レンダリング パイプラインで使用可能なものと同じ新機能をいくつか提供します。
パス トレーサーでのサブサーフェス シェーディングでは、散乱異方性のサポートと、Mean Free Path パラメータを使用するマップ駆動のサブサーフェス カラーのサポートがオプションで提供されるようになりました。
メッシュ デカールのサポートが追加され、デカールの全体的なパフォーマンスが向上しました。
スプライン メッシュのサポートが追加されました。
ライトでスペキュラ スケール値がサポートされるようになりました。
オプションで、ガラスを通る光線の屈折方法を制御する屈折率から、ガラスの反射率 (フレネル エフェクト) を、切り離せるようになりました。
カメラ光線でオブジェクトが非表示になる機能を追加しましたが、グローバル イルミネーションやシャドウは含まれません。
マテリアルを変更せずに、オブジェクトをホールドアウトとしてレンダリングする機能を追加しました。
マテリアル グラフでパス トレーサーの光線タイプでフィルタするための Path Tracing Ray Type Switch ノードを追加しました。
ディフューズ、スペキュラ (鏡面反射色)、間接などの基本的なライティング パス (「AOV」とも呼ばれます) を個別にレンダリングできるようになりました。これらのパスは、各レンダリングで負荷がないわけではなく、個別にレンダリングする必要があります。
Cast Shadow (シャドウをキャスト)、Hidden Shadow (シャドウを非表示)、Affect Dynamic Indirect Lighting (動的な間接ライティングに影響)、Affect Indirect Lighting While Hidden (非表示の場合に間接ライティングに影響) を受け入れるプライマリ光線可視性トグルを、Visibility (可視性)、Enable Hidden Shadow (シャドウの非表示を有効化)、Affect Indirect Light While Hidden (非表示の場合に間接ライティングに影響) を無効にするプライマリ可視性トグルとともに追加しました。
新しい Enable Path Tracing Blueprint ノードを使用して、ランタイム時にパス トレーシングを切り替えることができます。
詳細については、「パス トレーサー」を参照してください。
バーチャル テクスチャ
バーチャル テクスチャには次の改善点と機能が加えられました。
Runtime Virtual Texture Sample ノードに、可視のバーチャル テクスチャ ページでのストリーミングのリクエストを無効にするフィードバック オプションが追加されました。
この使用例としては、草のマテリアルでランドスケープ ランタイム仮想テクスチャをサンプリングする場合が挙げられます。通常、ランドスケープは仮想テクスチャを駆動しており、草のマテリアルではランドスケープで使用されている同じミップをサンプリングします。このオプションを使用すると、草のマテリアルによって必要以上に高いミップがリクエストされなくなります。
右クリックすると表示される [Asset Actions (アセットアクション)] オプションを使ってすべての UDIM をエクスポートする機能が追加されました。これらは個別の UDIM テクスチャ ブロックとしてエクスポートされます。
詳細については、「バーチャル テクスチャリング」を参照してください。
強化されたシャドウ レンダリング
レイトレースされたシャドウの改善点は、次のとおりです。
矩形ライトおよびソース サイズのライトに対するレイトレースされたシャドウがより正確になり、パス トレーサーの結果により近くなりました。
(左から右に向かって) 以前の矩形ライトのシャドウ、新しい矩形ライトのシャドウ、パストレースされた矩形ライトのシャドウ。
詳細については、「ハードウェア レイ トレーシング」を参照してください。
仮想シャドウ マップの改善点は、次のとおりです。
遠方ライトの実装により、多数のローカル ライトを含むシーンのシャドウ レンダリング負荷が大幅に低下しました。
単一パスの仮想シャドウ マップのシャドウ投影でもシャドウ サンプリング ステージで同じ結果を達成できますが、現時点では最新の GPU を十分に活用できていません。パフォーマンス向上のために、すべてのローカル ライトの仮想シャドウ マップが単一パスで投影されます。
詳細については、「仮想シャドウ マップ」を参照してください。
マテリアルの改善点
マテリアル エディタには以下の追加機能と改善点が加えられました。
異なるテクスチャ タイプの切り替えが容易になる Switch ノードが追加されました。このノードではあらゆる入力を受け取り、複数のノードでテクスチャ サンプリングの各タイプを反映する際のオーバーヘッドを軽減します。
ワールド位置オフセットが原因のカリングと自己オクルージョンの問題を解決するマテリアルに、[Max World Position Offset Displacement] 設定が追加されました。これによって許容されるオフセットの量も制限でき、Nanite メッシュに割り当てられた WPO マテリアルで役立つことがあります。
マテリアル グラフ内でエラーに移動する機能が追加されました。
マテリアル エディタのコメント ブロックに、以下のブループリント要素に対する機能パリティが加えられました。
コメント バブルをズームアウト中にも表示できるようになりました。
コメント バブルを色付きまたは色なしで描画できるようになりました。
コメント ブロックで式をグループ化できるようになりました。スタンドアローンで使用することも可能です。
テンポラル スーパー解像度の改善点と最適化
テンポラル スーパー解像度には以下の変更が加えられました。
アンチエイリアス のエンジン スケーラビリティを Epic に設定した際に、そのスクリーン比率が「200」に設定されるようになりました。
これは「
Scalability.ini
」コンフィギュレーション ファイルのr.TSR.History.ScreenPercentage=200
で定義されます。
TSR で、ピクセルよりも薄い静的な (非描画ベロシティ) ジオメトリック ディテールが再投影されるようになりました。これは
r.TSR.Subpixel.Method 2
によってデフォルトで有効になります。
詳細は、「テンポラル スーパー解像度」を参照してください。EDC のフォーラムにある TSR のフィードバック スレッド で、開発チームへのフィードバックを送ることもできます。
露出の改善点
露出には以下の改善点が加えられました。
ローカル露出の強調表示とシャドウのコントラスト スケール用に個別のコントロールが追加されました。
明暗順応バッファを優先し、明暗順応テクスチャは非推奨にしています (Unreal Engine 5.3 で削除される予定です)。
照度に基づいて露出を計算するための実験的なサポートが追加されました。
詳細については、「自動露出」を参照してください。
強化されたハードウェア レイ トレーシング ツール
ランタイム時のレイ トレーシングのオン/オフを切り替える初期サポートが追加されました。これは実験段階の機能であり、すべてのジオメトリ タイプをサポートするものではありません。
新しいデバッグ ビジュアライゼーション モードでは、オーバーラップするレイ トレーシング インスタンスを表示できます ([Lit (ライティング有り)] > [Ray Tracing Debug (レイ トレーシング デバッグ)] > [Instance Overlap (インスタンス オーバーラップ)])。これは、レイ トレーシング シーンの診断と最適化に役立ちます。GPUScene から読み込まれたバウンディング ボックスが表示されますが、動的インスタンスは除外されます。このモードはすべてのプラットフォームで機能し、アーティストはエディタで使用することができます。
インライン レイ トレーシング パスの非同期計算がサポートされるようになりました。
詳細については、「ハードウェア レイ トレーシング」を参照してください。
マルチビューの最適化
CPU レンダリング スレッド時間 (場合によっては GPU 時間) によってパフォーマンスが制限される可能性があるバーチャル プロダクションでは、プロセス全体を通じて、ステージのマルチビューとマルチ GPU レンダリングのパフォーマンスを維持することが非常に重要です。
今回のリリースでは、以下の領域に対して最適化と改善点が加えられました。
マルチビュー レイ トレーシング
最適化としての送信スレッド
クロス GPU 遅延 (Niagara Work)
エンジンの開発ビルドの CPU およびデバッグ コード オーバーヘッドを削減
サブサーフェス スキャタリングの改善点
サブサーフェス スキャタリングには以下の改善点が加えられました。
人間のスキン向けの粗いサーフェスのレンダリングが向上しました。
マテリアル エディタに、Subsurface Medium 出力ノードを使ったパストレーシング済みの異方性サブサーフェス スキャタリングが加えられました。
レンダリング リソース ビューア ツール
レンダリング リソース ビューア は、頂点バッファやインデックス バッファなど、すべての GPU メモリの割り当て先およびリソースのレンダリング先、さらにはスタティックメッシュやスケルタルメッシュといった割り当て元のアセットに対する完全な可視性を提供するツールです。これにより、GPU メモリを最適化して、プロジェクトをレンダリング バジェット内に収めるうえで必要な情報がアーティストやデベロッパーに提供されます。
レンダリング リソース ビューアには以下が含まれます。
それぞれのレンダリング リソース割り当てをその名前、サイズ、タイプ、フラグ、オーナーとともに表示する、エディタ内のインタラクティブ UI。
ソートとフィルタを行うことができる割り当てのテーブル。
どのアセットが割り当てを行っているかを特定して把握するための情報の明確なビュー。
シェーダー コンパイルの改善点
シェーダー コンパイルは、エディタのロード時やマップを開く際、PIE の起動時に頻繁に発生する処理で、デベロッパーやアーティストによるイテレーション作業に大きく影響します。また、プロジェクトのクックにも大きな影響を及ぼします。これは、継続的な開発と改善が行われている領域の 1 つです。
今回のリリースには以下の改善点が加えられました。
シェーダー プリプロセシングを 2 倍の速度で実行する新しいシェーダー プリプロセッサが実装されました。これはデフォルトで有効になっています。
シェーダーを DDC でキャッシングすることで、非決定論的問題を含む冗長なコンパイルを削減しました。
エンジンとともにシッピングされるプロジェクトでシェーダーの DDC キャッシングを修正したため、Epic Games が配布するサンプル プロジェクトやテンプレートを起動する際に、シェーダーのコンパイルを待つ必要がなくなりました。
シェーダー コンパイラ ワーカー プロセスの Unreal Insights トレースを行う機能が追加されました。
これにより、シェーダー コンパイラ ワーカーで例外が検出されてメインのクック プロセスに報告されるため、クラッシュの診断が容易になります。
ティア 2 可変レート シェーディング (実験的機能)
可変レート シェーディングは、以前までは XR デバイスでのみ使用できましたが、UE 5.2 ではデスクトップに拡張しました。コントラスト適応シェーディングがサポートされるようになりました。これは、最終的なイメージで目立つ変更を生成することなく、どの領域をより粗いシェーディング レートでレンダリングできるかを判断するために直前のフレームを解析する新しいアプローチです。Desktop VRS はバージョン 5.2 の実験的機能です。今後のリリースで、さらに更新および改善される予定です。
コントラスト適応シェーディング + デバッグ ビジュアライザ
コントラスト適応シェーディングのサポートが追加されました。これは、コンソール コマンド
r.VRS.ContrastAdaptiveShading 1
で有効にできます。使用可能なパラメータの完全なリストについては、「ContrastAdaptiveImageGenerator.cpp
」ファイルを確認してください。Nanite、Light 関数、ディファード デカール、およびスクリーン空間の反射は、可変レート シェーディングの影響を受けるようになりました。これらの機能は、VRS が有効な場合に負荷が小さくなる可能性があります。
新しいデバッグ ビジュアライザが VRS マネージャに追加されました。デベロッパーは、コンソール コマンド
r.VRS.Preview
で切り替えることができ、シーンにどのような影響を与えるかをリアルタイムに確認できます。XR デバイスでは、新しいコントラスト適応シェーディングと既存の XR 専用の中心窩シェーディング ジェネレータの両方を同時に有効にして、一緒に使用できます。
オーディオ
オーディオ パラメータ モジュレーションの改善点
当社では、ワークフロー向上のためにオーディオ パラメータ モジュレーションにいくつかの改善点を加えました。
モジュレーション パイプライン全体をブループリントで設定できるようになりました。
ブループリントで LFO ジェネレータとエンベロープ フォロワーを作成できます。
それらのブループリント ノードも更新されており、グラフ内でより明確にわかりやすく表示されます。
再起動の必要なく、アクティブなサウンド ルーティングへの変更が即座に反映されるため、イテレーションをより迅速に行えるようになりました。
オーディオ パラメータ モジュレーションの詳細については、「オーディオ パラメータ モジュレーション」のドキュメントを参照してください。
MetaSound の新規ノード
当社が誇るグラフベースの高パフォーマンス オーディオ システム「MetaSound」のノード ライブラリを拡張しました。
Perlin Noise (パーリン ノイズ)
Low Frequency Noise (低周波ノイズ)
Super Oscillator (スーパー オシレーター)
Evaluate WaveTable (WaveTable を評価)
MetaSounds とその新規ノードの詳細については、「MetaSound」のドキュメントを参照してください。
エディタ — UI
ローカライゼーション キー デバッグの改善点
UE 5.2 のローカライゼーション ツールに、UI にローカライゼーション キーを表示するためのデバッグ カルチャが加えられました。プロジェクトをこのカルチャに設定するには、コンソールまたはコマンドラインで -culture=keys
コマンドを使用します。これにより、通常のテキストではなく、ローカライズ可能なあらゆるテキストのローカライゼーション キーが表示されます。これによってローカライゼーション QA を通じて誤った書式や誤訳のテキストを検出しやすくなり、デバッグ時に未ローカライズのテキストが表示されます。
さらに、オンスクリーン テキストのデバッグには Slate.LogPaintedText
と呼ばれる CVar があります。Slate.LogPaintedText
を true
に設定すると、現在画面に出力されているあらゆるテキストがログに含まれます。これを上記のキー カルチャと組み合わせて使用することで、UI クリッピングの問題なしに、すべてのローカライゼーション キーをログに表示することができます。
CommonUI 向けの拡張入力サポート (実験的機能)
UE 5.2 では、拡張入力システム (Enhanced Input System) との互換性について、CommonUI に制限が設けられています。このサポートは実験段階の機能であり、当社では、さらなるテストと改善が行われるまで、実際の制作での使用は避けることを推奨しています。
CommonUI で拡張入力サポートを有効にするには、プロジェクトで両方のプラグインが有効であることを確認し、[Project Settings (プロジェクト設定)] を開いて [Game (ゲーム)] > [Common Input Settings (共通入力設定)] > [Enable Enhanced Input (拡張入力を有効)] に移動して、[Enable Enhanced Input Support (拡張入力サポートを有効)] を切り替えます。
次に、拡張入力アクションを CommonUI の UI アクションにマッピングします。詳細については、「CommonUI で拡張入力を使用する」を参照してください。
CommonUI ドキュメントの増補
また、CommonUI のドキュメント に入力管理に関する詳細が追加されました。入力ルーティングの機能やプロジェクトの CommonUI を微調整するのに役立つツールについて理解を深めるため、それらを読むことをお勧めします。
スクリプト可能ツールのフレームワーク (実験的機能)
インタラクティブ ツール フレームワーク を ブループリント (BP) に公開するための新しい実験的プラグインのセットが追加されました。スクリプト可能なインタラクティブ ツール の基本クラスの BP サブクラスを作成することで、ユーザー定義のカスタム仕様のツールを スクリプト可能ツール のエディタ モードに追加することができます。これらのツールは、次のような点で モデリング モード でのツールと同様に動作します。
マウス入力のキャプチャリングにアクセス可能なモーダル ツールです。
ギズモを作成できます。
承認したり、キャンセルしたりすることができます。
さらに、モデリング モードでのツール プロパティのように、標準の詳細ビューからツール プロパティを追加および視覚化できます。デリゲートを使用したプロパティの変更への対応もサポートされています。
ジオメトリ スクリプト処理 と組み合わせることにより、スクリプト可能ツールでは複雑なモデリング ワークフローやアセット編集ワークフローを実装できます。ただし、スクリプト可能ツールでは、モデリング モードやジオメトリ スクリプト処理に関連していない、よりシンプルな機能を使用することもできます。
これらの機能にアクセスするには、[Edit (編集)] > [Plugins (プラグイン)] の下にある [Scriptable Tools Framework (スクリプト可能ツールのフレームワーク)] を有効にします。
[Scriptable Tools (スクリプト可能ツール)] 編集モードが、[Selection Mode (選択モード)] の下に表示されます。
モデリング
モデリング ワークフローの改善点 (ベータ機能)
モデリング ワークフローは、さざまなインタラクションがかかわる多数のステップで構成される場合があります。UE 5.2 には、アーティストにとって効率的なワークフローを作成するプロセスに関していくつかの改善点が導入されています。
トランスフォーム パネル
精度の高いトランスフォーメーション コントロールを実現するため、トランスフォーム パネル ウィジェットを新しく実装しました。モデリング ギズモと組み合わせることにより、アーティストはワールド空間値およびローカル デルタ値を数値で制御できます。このウィジェットはビューポートに直接表示され、さまざまなモデリングおよび UV ツールでも使用可能です。
これにより、アーティストはスケール参照アセットに縛られることなく、それぞれのモデルを正確にビルドまたはスケールできるようになります。
ギズモの改善点
モデリング ギズモには、トランスフォーム パネルの追加だけでなく、以下のような改善点が継続して加えられています。
エディタの標準的な平行移動、回転、スケールと似た形で、個別のギズモの有効/無効を切り替えるエディタ設定が加わりました。
平行移動と回転のスナッピングがローカル座標システムでサポートされるようになりました。
これらのギズモ オプションは、[Modeling Mode Quick Settings (モデリング モードのクイック設定)] にある歯車アイコンをクリックすると表示される新しいドロップダウン メニューからアクセスできます。
ギズモ機能の拡張により、アーティストは モデリング モード 中にジオメトリの変換を細かく制御することができます。
モデリング モードとモデリング ギズモの詳細については、「モデリング モードの概要」を参照してください。
PolyEdit ツール
PolyEdit での エッジの挿入 操作に、エッジを連続して挿入するオプションが加わり、トポロジ編集がより迅速で正確に行えるようになりました。
PolyEdit ツールの詳細については、「PolyModel カテゴリ)」を参照してください。
シーム ツール
UV の作成はモデリング中やモデリング後における重要なステップであり、このプロセスの合理化について継続的に取り組んでいます。5.2 では、UV エディタのシーム ツールに、継ぎ目を除去するオプションと追加するオプションが加わりました。このプロセスにより、アーティストは 3D プレビュー ペインで素早く直接シームの編集操作を行えるため、UV ワークフローの作業がスムーズになります。
シーム ツールや他の UV ツールの詳細については、「UV エディタ」のドキュメントを参照してください。
パターン ツール (ベータ機能)
ジッター
新しくジッター プロパティを追加して パターン ツールを拡張しました。この設定を使用すると、アーティストはより自然な繰り返しとシーンを作成できるようになります。また、ジッター設定を使用すると、他のモデリング ツールと組み合わせてレベルを迅速にブロック アウトすることもできます。
パターン投影
さらに、パターン ツールで生成したパターンをワールドに投影できるようになりました。この生成機能を使用して、パターン要素をランドスケープだけでなく、他のメッシュにも適用することができます。この実装により、メッシュ、特に大きなメッシュに対して効率的に詳細を加えるためのワークフローが作成されます。
また、Packed モードも更新しました。これにより開始スケールと開始回転が考慮されるようになり、バウンド内でのパッキングが向上しました。
レンダリング キャプチャ ベイク ツール (ベータ機能)
5.1 では、レンダリング キャプチャ ベイク ツールを「BakeRC」という名前で モデリング モード の [Baking (ベイク)] カテゴリに加えました。BakeRC では、バーチャル フォトやレンダリング キャプチャを介して、複数のソース メッシュからターゲット メッシュのテクスチャをベイクします。
5.2 では、次をサポートするためのツールを更新しました。
サブサーフェス カラー チャンネル
オパシティ チャンネル
高品質テクスチャ マルチサンプリング
さらに、このツールには、不適切なオクルージョン テストが原因で生じたベイク アーティファクトの除去をサポートする Cleanup Threshold (クリーンアップしきい値) オプションが新たに追加されました。これらの新機能により、パフォーマンスとユーザーのイテレーション時間が向上します。
ジオメトリ スクリプト処理 (実験的機能)
ジオメトリ スクリプト処理 により、テクニカル アーティストはカスタム仕様のモデリング ツールとワークフローを作成するためのツールキットを利用できます。機能は、次の追加機能と改善点によって継続的に拡張しています。
ユーザーのリクエストにより、Translate Pivot To Location (ピボットを位置に変換) を追加して、ローカルのピボット位置を基準にした空間内へのメッシュの配置を簡略化しました。
Copy Mesh From Component ノードで、Spline Mesh Components、Posed Skinned Mesh Components、および Skeletal Mesh Components からの (現在の変形ステートの) 動的メッシュのコピーがサポートされるようになりました。
トランスフォームの作成およびクエリ用に、いくつかのユーティリティおよび便利な関数を実装しました。
メッシュ頂点に格納されているプロパティの重心トライアングル補間のための一連の関数と、メッシュ トライアングルの点の重心座標を計算する関数を追加しました。これらの関数を使用して、他の用途のためにメッシュ プロパティを簡単にサンプリングできます。
Ray 関数
Ray ユーティリティ関数は、FRay
型をブループリントに公開し、光線を作成およびクエリするための関数のライブラリを追加します。これらは、インタラクティブなユーザーインターフェース (UI) をブループリントでビルドする場合に非常に役立ち、特に Scriptable Tools プラグインをサポートするように設計されています。
Box 関数
FBox
オブジェクトを操作するユーティリティ Box 関数のライブラリを新たに追加しました。これにより、既存の C++ API と同様のブループリント API が提供されます。複数の基本的な演算ノードを使用して一般的な演算操作を再実装する必要がある場合、このような基本的な演算関数とノードを使用することで作業時間を大幅に節約できます。
ボーン ウェイト
スキン ウェイトを操作する関数の小さなライブラリを追加しました。UDynamicMesh
オブジェクトは、既存の Copy Mesh From Skeletal Mesh 関数を介してスケルタルメッシュ アセットからコピーすることによって初期化されると、スキン ウェイトをサポートします。頂点のスキン ウェイトをクエリして変更し、それをスケルタルメッシュに書き戻すことができます。これにより、最小かつ機能的でプロシージャルなスキン ウェイト作成メカニズムが提供されます。
メッシュ サーフェスのサンプリング
任意の 3D メッシュ上でうまく分布されるサンプル ポイントを生成するための新しい技法を実装しました。この技法はポアソンのダーツ投げに基づいており、球体がそれぞれのサンプル ポイントと半径のペアに配置されている場合は、どの球体も交差しないことが保証されます。均等な空間と不均等な空間の両方がサポートされています。
次のノードは、新しい技法を使用するために追加されました。
Compute Point Sampling
Compute Non Uniform Point Sampling
Compute Vertex Weighted Point Sampling
これらの関数は、GeometryCore
ライブラリの新しい FMeshSurfacePointSampling
クラスに基づいています。
ジオメトリ スクリプト処理の詳細やノードの完全なリストについては、「ジオメトリ スクリプトのユーザー ガイド」および「ジオメトリ スクリプトのリファレンス」ドキュメントを参照してください。
アニメーション
Sequencer (シーケンサー)
ムービー レンダー キュー (ベータ機能) のコンソール変数プリセット
ムービー レンダー キュー (MRQ) でプリセットされている コンソール変数 (CVar) アセットを使用できるようになりました。CVar プリセットをコンソール変数エディタで作成したら、それを MRQ で指定できるようになります。MRQ では、レンダリング時間の前に CVar プリセットを (プリセットを設定した順序で) 適用します。さらに、MRQ のプリセットを使用して CVars をオーバーライドできます。
サブシーケンス トラックの改善点
レベル シーケンス内でサブシーケンスを動的にブレンドできるようになり、ブロードキャストおよびゲームプレイ中のランタイム再生に対する制御が強化されました。
また、トランスフォームされたブレンドの実行時にポーズ間の最短ルートを取るために、シーケンス ブレンドで クォータニオン補間 を使用するように設定できます。
アニメーション トラック ルートモーションの改善点
[Blend First Child of Root (ルートの最初の子をブレンド)] プロパティを使ったルート モーション アニメーション シーケンスのブレンドで、ルート モーションがルート ボーンの最初の子ボーンにないポーズをブレンドできるようになりました。さらに、ルート モーション オフセットを適用した場合は、一致する空間内でマニピュレータが常に機能するようになります。
セクションの色
シーケンサーの ショット と セクション を色分けして整理できるようになりました。
ショットとセクションの色分けを、ブレンドされたショットで作業する際のデバッグ ツールとして使用できるようになりました。ショット内のセクションに色を割り当てると、キャラクターのスケルトンのデバッグ レンダリングを実行する際に、セクションの色を基準としてボーンを色分けできるようになります。
フレーム マーカーの改善点
タイムライン内でシーケンスを編集する際に、シーケンスを表示、選択、編集しやすくなるようフレーム マーカーを改善しました。フレーム マーカーを右クリックすると、マーカーの色の調整、コメントの追加、マーカーを 決定論的フェンス にするかどうかの設定など、さまざまなプロパティと設定を含むコンテキスト メニューが表示されます。
さらに、他のシーケンサー要素に加えてフレーム マーカーも複数選択できるようになり、一括編集できるようになりました。
リターゲティング
Python リターゲティングのサポート
カスタム仕様の Python スクリプトを実装して、IK リグを使ったリターゲティング プロセスを自動化および高速化できるようになりました。
リターゲティング チェーンのための新しいマッピング ツール
IK リグを使ってリターゲティング チェーンを作成する際のユーザーインターフェース (UI) を合理化しました。ポップアップ ダイアログの数を減らし、作業中のソース/ターゲット キャラクターに応じたコンテキスト ボタンを増やしました。
また、ソース キャラクターとターゲット キャラクター間におけるリターゲティングされたチェーンのマッピングを、チェーンの名前を使って実行できるようになりました。
コントロール リグ
コントロール リグのクローズド スプライン
コントロール リグでスプラインを作成する際に、Spline from Points ノードの Closed ピンを有効にすることで クローズド スプライン を作成できるようになりました。
コントロール リグ グラフの改善点
ItemNameSearch ノードでワイルドカードの参照がサポートされるようになりました。
コントロール リグを使ってアニメートする際に、コントロールの新しい [Restrict Switching] プロパティを使用して制御操作エラーを回避できるようになりました。
コンストラクション グラフ を使ってプロシージャル コントロールをスポーンする際は、新しい Get Shape Settings ノードと Set Shape Settings ノードを使用して、コントロール形状に対してクエリを実行して設定することができます。
コントロール リグを使ってアニメートする際に、フィルタリング チャンネル でチャンネルごとの可視性とコントロールのキー入力がサポートされるようになりました。
実行スタック で特定の命令に移動できるようになりました。
アニメーション ブループリント
ステート マシンの再リンク付け
ステート マシン内で遷移を再リンク付けできるようになりました。新しいステートに遷移矢印をドラッグすると、すべての遷移とロジックが新しいリンクに引き継がれます。また別の方法として、複数の遷移を選択してその遷移矢印を新しいステートにドラッグすることで、選択したトランジション ロジックのみを継承して、その他の遷移を前のアニメーション ステートにリンクされた状態で残すことができます。
RigidBody ノードの警告
チェーンにボーンが欠落している場合に、RigidBody アニメーション ブループリント ノードに視覚的な警告が表示されるようになりました。
ランタイム
スケルトンの互換性に関する改善点
Unreal Engine 内で、同じようなスケルトン構造体を共有するスケルトン アセット間でのスケルトンの互換性が自動的に認識されるようになりました。該当する場合は、同じようなスケルタル構造を持つスケルトン アセットでアニメーションなどのアセットを共有できるようになり、アセット選択のプロパティ内でそれらのスケルトン アセットを選択できるようになります。
デフォルトで、互換性のないスケルトンはアセット選択のプロパティには表示されません。表示されるようにするには、[Editor Settings (エディタ設定)] またはアセット選択の [Settings (設定)] メニューにある [Allow Incompatible Skeleton Selection (互換性のないスケルトンの選択を許可)] プロパティを切り替えます。
また、スケルトンの互換性の手動設定が双方向になりました。スケルトンで別のスケルトンとの互換性を設定すると、いずれのスケルトンからもアニメーションを共有できるようになります。
Rewind Debugger の改善点
Rewind Debugger でレコーディング セッションごとに単一の トレース ファイル を出力できるようになり、デバッグ データを整理してファイル サイズを削減しやすくなりました。
さらに、Rewind Debugger では以下が可能になりました。
新しいプロパティ ウォッチ (Property Watch) トラックを使って、アニメーション システム内の各値を分離して、Rewind Debugger タイムライン上で独自のトラックとして観察する。
Rewind Debugger の使用中にキャラクターのスケルトンのポーズ ウォッチ (Pose Watch) デバッグ レンダリングを切り替える。
アニメーションの合成
ML デフォーマのサンプル プロジェクト
新しい 機械学習 (ML) デフォーマのサンプル プロジェクト をダウンロードして、ML デフォーマ システムを使用したキャラクターのフルボディのメッシュ変形を確認できるようになりました。このサンプル プロジェクトには、コントロール リグによって制御されるアニメートされたキャラクターのインタラクティブなシネマティックが含まれているため、リニア スキン メッシュを再生し、ML デフォーマによって生成された変形と比較できます。さらに、代替アニメーション、コントロール リグの編集を使用してキャラクターを操作したり、服装やスキンの可視性を切り替えてメッシュのリアルタイムな変化を観察したりして、ML デフォーマ システムと機能について深く理解することができます。
ML Deformer サンプル プロジェクト は、Unreal Engine マーケットプレイス の [UE Online Learning (UE オンライン ラーニング)] タブからダウンロードできます。
ML デフォーマの改善点
機械学習 (ML) デフォーマ システムは大幅に改善されました。より高速で効率的なワークフローによって、さらに詳細で正確な結果を得ることができます。注目すべき改善点は次のとおりです。
ニューラル モーフ モデルの推論のパフォーマンスが大幅に向上しました。場合によっては CPU で最大 20 倍の速度になり、全般的には更新ごとに数ミリ秒しかかからなくなりました。
ローカル モードのニューラル モーフ モデルでカーブがサポートされるようになりました。
ニューラル モーフ モデルのローカル モードにおけるボーンとカーブのグループに対するサポートが追加されました。これにより、変形が複数のボーンやカーブに依存する場合に、より高質な変形を得ることができます。
ニューラル モーフ モデルの複数の品質レベルにより、アクティブ モーフ ターゲットの最大数を LOD の形で設定することができます。ただし、現時点では LOD 0 のみで機能します。
プラットフォーム
macOS の開発要件
Unreal Engine 5.2 を macOS で実行する場合は、以下の開発要件を満たす必要があります。
最小 macOS バージョン: 12.5 Monterey 以降。
推奨 macOS バージョン: 最新版の macOS Ventura。
最小 Xcode バージョン: 14.1
これらは App Store のための新規の、または今後予定されている最小要件 を反映したものです。将来的には、当社の Apple プラットフォームに対するサポートを統一するために、macOS の要件は iOS、tvOS、iPadOS の要件を反映するものになる予定です。
Unreal Editor での Apple Silicon のネイティブ サポート
UE 5.2 からは、Epic Games Launcher で Unreal Editor のビルドをユニバーサル バイナリとともに macOS 向けに配信します。これらのバイナリには x86-64 と arm64 の両方のアーキテクチャに向けたスライスが含まれており、Intel ベースの前世代 Mac と現世代 Apple Silicon Mac の両方に対するネイティブ サポートが提供されます。どちらを使用している場合でも、エディタがハードウェア アーキテクチャに適切なスライスを使って自動的に実行されます。エディタでは命令の翻訳にあたって Rosetta2 に依存する必要がなくなるため、Apple Silicon をお使いのユーザーは処理オーバーヘッドの低下を感じるはずです。
ソースから Unreal Engine をビルドする Mac デベロッパーは、ユニバーサル バイナリを使ってエディタをビルドするために、ターゲット アーキテクチャを x64+arm64
に明示的に設定する必要があります。これは、Xcode ではユーザーのネイティブ アーキテクチャに向けたビルドがデフォルトであるためです。
UE マーケットプレイスでの Apple Silicon のサポート
5.2 以降は、UE マーケットプレイスでコード プラグインをリリースする際に、macOS との互換性を表記するには、プラグインをユニバーサル バイナリでビルドする必要があります。これにより、最小限のバージョン管理で、コード プラグインを確実にすべての Mac ユーザーに配信することができます。
UE 5.2 における macOS の制限事項
Apple Silicon のネイティブ サポートによって処理オーバーヘッドは低下するものの、全体的には macOS に対するサポートはまだ開発中の段階です。以下は、現時点で macOS で限定的にサポートされている機能、またはまったくサポートされていない機能です。
Nanite は画像アトミックとフォワード プログレスに依然するため、Apple ハードウェアではサポートされないことがほぼ確実となっています。当社では将来的にこの機能を有効にしたいと考えていますが、現時点で macOS ではサポートされません。
Nanite を使用するように設定されている Quixel アセットは、その非 Nanite バージョンにフォールバックします。それ以外は意図どおりに機能します。
ヘア (毛髪)/毛皮/グルームの各ストランドは macOS ではサポートされませんが、ヘア カードとメッシュはサポートされています。
Lumen のハードウェア レイ トレーシング サポートは macOS ではサポートされないため、Lumen はソフトウェアのみのレイトレーサーを使用するようフォールバックします。これはつまり、Lumen では、ハードウェア レイ トレーシングをサポートするデバイスと比較すると、Apple Silicon の場合は低品質の結果が生成されることを意味します (たとえば、反射は詳細に欠け、動的メッシュが表示されません)。
XR
OpenXR 面固定ステレオ レイヤーのエミュレーションのサポート
面固定ステレオ レイヤー エミュレーションを追加しました。これにより、OpenXR (16) によって提供される最小数のレイヤーがサポートされないプラットフォームで面固定ステレオ レイヤーが使用可能になります。
この設定は、xr.OpenXRForceStereoLayerEmulation
CVar を true に変更すると有効になります。
XR デバイスのビジュアライゼーション コンポーネント
XR デバイスのビジュアライゼーション コンポーネントを新しく導入し、モーション コントローラー コンポーネントのビジュアライゼーションをそのトラッキング部分から切り離しました。これにより、プロジェクト内でモーション コントローラーのビジュアライゼーションを直接変更できるようになります。
この機能を有効にするには、[Details (詳細)] パネルの [Is Visualization Active (ビジュアライゼーションのアクティブ化)] チェックボックスをオンにするか、ブループリントで Visualization Active ブループリント ノードを使用します
XR Creative Framework プラグインの実験的サポート
XR Creative Framework は OpenXR 向けにビルドされ、これを使用して XR デバイス用にエディタ ツールをビルドできます。これはステレオ レンダリング、ヘッド マウント ディスポレイのポーズ、モーション コントローラーのポーズ、入力をサポートします。また、エンジン コードやプラグインの変更を必要とせずに、ブループリントで拡張できるように設計されています。このようなツールのサンプルには、レベル デザイン、モデリング、アニメーションなどがあります。
VR 通知コンポーネントのデリゲートと OpenXR ランタイムの連動
VR 通知コンポーネントのデリゲートが OpenXR ランタイムと連動するようになりました。
インスタンス化されたステレオ レンダリングとモバイル マルチビューの最適化
インスタンス化されたステレオ レンダリングとモバイル マルチビューを最適化し、Meta Quest 2 で ~5% の GPU パフォーマンス向上が見込まれるようになりました。
Meta Quest デバイスの WebBrowser ウィジェットのサポート
Meta Quest デバイスの WebBrowser ウィジェットのサポートを追加しました。これには WidgetInteractionComponent を介した入力のサポートも含まれます。
Vive トラッカーの実験的サポート
OpenXRViveTracker プラグインを使って、Vive トラッカーのサポートを XR プロジェクトに追加できるようになりました。Vive トラッカーの設定と OpenXRViveTracker プラグインの詳細については、こちらの Developer Community チュートリアル を参照してください。
Palm Pose 拡張機能
OpenXR Palm Pose が MotionController モーション ソースとして使用できるようになりました。
モバイル
モバイル向け開発の要件と互換性のあるハードウェア
Unreal Engine 5.2 でサポートされる OS のバージョンと、モバイル デバイスのハードウェア最小要件は次のとおりです。必要な SDK と IDE の詳細については、「プラットフォーム SDK のアップグレード」セクションを参照してください。
iOS、iPadOS、および tvOS
UE 5.2 では、ターゲット SDK バージョン 15 以降をサポートし、Apple A8 プロセッサ以降を使用する iOS デバイス、iPadOS デバイス、tvOS デバイスをサポートしています。
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 世代)
*Apple A8/A8X ベースのデバイス (iPad Air 2、iPad Mini 4、Apple TV HD) では、このサポートを有効にするためのプロジェクト設定が必要になります。
5.2 は、A8/A8X デバイスをサポートする最後のリリースになる可能性があります。
必要とされる SDK および MacOS のバージョンについては、後述の「プラットフォームの SDK アップグレード」を参照してください。
Android
UE 5.2 では、次の仕様に適合する Android デバイスがサポートされています。
Android 8 以降
64 ビット ARM ベースの CPU
互換性のある GPU
Mali T8xx、G7x、G71x シリーズ
Adreno 5xx、6xx、7xx シリーズ
PowerVR GM9xxx
Xclipse 920
互換性のあるグラフィック API
OpenGL ES 3.2
Vulkan は、互換性のあるドライバを含む Android 10 以降のデバイスでサポートされています。
必要とされる SDK のバージョンについては、後述の「プラットフォームの SDK アップグレード」を参照してください。
Android Game Development Extension に JDK 17 が必要になりました
Visual Studio の Android Game Development Extension (AGDE) プラグインに JDK 17 が必要になりました。使用するために、以下の操作を必ず行ってください。
Microsoft OpenJDK 17 をパソコンにダウンロードしインストールする。
システムに JDK_AGDE_HOME という環境変数を追加する。
JDK 17 のインストール パスに JDK_AGDE_HOME のパスを設定する。
詳細については、「Unreal Engine で AGDE を使用する」を参照してください。
iOS、tvOS、iPadOS のデバッグの準備 (ベータ機能)
UE 5.2 には、iOS、tvOS、iPadOS に向けた新しい Prepare for Debugging コマンドが加えられました。以前は、プロジェクトのパッケージ化に進めるにはコードをビルドしてコンテンツをクックする必要がありましたが、Prepare for Debugging により、以前クックされたデータをビルドに挿入してクック処理のステップを省略することで、このプロセスがより柔軟になりました。これは特にプログラマーにとって便利な機能で、エディター ビルドを作成せずに、UAT から Prepare for Debugging を使って、ローカルに生成された実行ファイルとともにビルドファームで生成されたビルドからデバイス コンテンツにデプロイすることができます。
UAT を使って Prepare to Debug にアクセスするには、Turnkey -command=WrangleContentForDebugging -project=[.uproject ファイル名]
コマンドを使用します。または、Unreal Editor の [Platforms (プラットフォーム)] ドロップダウンをクリックして [iOS] または [tvOS] を選択し、[Prepare for Debugging (デバッグの準備)] をクリックすることもできます。
iOS 向けの Prepare for Debugging はベータ機能です。Xcode を備えた macOS マシンで Prepare for Debugging を使用して、クックされたデータを .ipa
から Xcode ビルドに挿入することはできますが、現時点では Windows からのリモート ビルドはサポートされていません。
モバイル プレビューの改善点
UE 5.2 では、Unreal Editor のモバイル プレビュー モードに安定性と精度の改善をいくつか行いました。これは、[Settings (設定)] メニューから [Preview Rendering Level (プレビュー レンダリング レベル)] のデバイスを選択することで使用可能です。
プレビュー デバイスを変更する際の安定性を改善しました。
エディタで [Engine Scalability Settings (エンジンの拡張機能設定)] ウィンドウを使用すると、プレビュー プラットフォームのスケーラビリティ設定が適用され、プラットフォームでオーバーライドされたスケーラビリティ変数がエディタ ビューポートに適用されるようになりました。たとえば、プラットフォームのスケーラビリティ ini ファイルのオーバーライドに依存するメッシュ LOD トランジション距離のような設定が正確にプレビューされます。
ターゲットのプレビュー プラットフォームのデバイス プロファイルによって設定されるコンソール変数がすべて適用されるようになるため、エディタ ビューポートでは、デバイス上で実行されると有効になる一連のレンダリング機能が正確にプレビューされます。
iOS、tvOS、iPadOS の改善点
UE 5.2 には、iOS、tvOS、iPadOS の次の機能に対するサポートが加えられました。
iOS および iPadOS のバックグラウンド オーディオのサポート
UE 5.2 では iOS および iPadOS プロジェクトの バックグラウンド オーディオ がサポートされるようになりました。これにより、別のアプリに切り替えた場合にも、元のアプリケーションのオーディオを引き続きバックグラウンドで再生することができます。これを切り替えるには、[Project Settings (プロジェクト設定)] > [Platforms (プラットフォーム)] > [iOS] > [Audio (オーディオ)] に行き、「whether audio from this plays in the background (このオーディオをバックグラウンドで再生するかどうか)」というラベルが付いた設定を使用します。
ゲームパッドと入力の改善点
iOS デバイス、tvOS デバイス、iPadOS デバイスに対するゲームパッド サポートに以下の改善点を加えました。
ゲームパッドでスレート UI とやり取りできるようになりました。この動作は、コンソールでのゲームパッド UI サポートに似ています。
Nintendo コントローラーが iOS デバイス、tvOS デバイス、iPadOS デバイスで機能するようになりました。これには Pro Controller と Joy-Con Controller の両方が含まれます。
マウスが入力デバイスとしてサポートされるようになりました。ただし、ハードウェア マウス カーソルはなく、アプリでレンダリングする必要があります。
ゲームプレイ
Gameplay Targeting System プラグイン
ゲームプレイ ターゲット システム はデータ駆動型のターゲット リクエストを作成する一つの方法です。
エディタからターゲット システムを有効にするには、[Edit (編集)] > [Plugins (プラグイン)] > [Gameplay (ゲームプレイ)] > [Gameplay Abilities (ゲームプレイ アビリティ)] > [Targeting System (ターゲット システム)] に移動します。
ターゲット システムでは ターゲット プリセット を使用します。ターゲット プリセットは、実行されるターゲット リクエストに対して上から下に実行される一連の ターゲット タスク を定義するデータ アセットです。
ターゲット プリセットの機能は、それぞれのタスクでプロパティのインライン編集をサポートすることです。これは、それぞれのタスクの UAsset を定義せずに、タスクの動作を設定する再利用可能なターゲット タスクとプリセットを定義できることを意味します。
この機能の完全なドキュメントについては、「ゲームプレイ ターゲット システム」を参照してください。
フォース フィードバック アセット
Unreal でフォース フィードバック アセットを使用する際は、それぞれのプラットフォームによって、バイブレーション モーターやフィードバック システムを機能させるための実装が異なることに注意する必要があります。フォース フィードバック アセットでは、値のデバイスごとのオーバーライドがサポートされるようになりました。
これは、それぞれのプラットフォームに向けて異なるフィードバック設定を行うためのメソッドをユーザーに提供する抽象レイヤーです。たとえば、Xbox コントローラーには強力なバイブレーションを適用して、PlayStation コントローラーにはよりきめ細やかで微妙なバイブレーションを適用することなどができます。
これらの設定は、フォース フィードバック エフェクトのデバイス プロパティの [Per Device Overrides (デバイスごとのオーバーライド)] セクションにあります。
詳細については、「フォース フィードバック」ドキュメントを参照してください。
デバイス プロパティ
デバイス プロパティ は、ライト カラーの表示やハプティック トリガーの抵抗など、入力デバイスのさまざまな物理プロパティを表します。デバイス プロパティは、バースト した Gameplay Cue Notify (ゲームプレイ キュー通知) ブループリント または 入力デバイス サブシステム から、[Device Properties (デバイス プロパティ)] カテゴリにある既存の フォース フィードバック アセット に加えることで有効にできます。
デバイス プロパティには、カスタマイズ可能な、バーチャル関数を使って公開されるシンプルな存続期間が含まれます。それぞれのデバイス プロパティには、フォース フィードバック エフェクトの持続期間属性と同様に 期間 が設定されます。プロパティは 有効 になって 評価 され、適用 されると、その期間が完了した際に リセット されます。
使用する武器のタイプに応じてトリガーにさらなる抵抗を加えたり、特殊なエフェクトを出すために時間の経過とともにライト カラーを変化させたりと、さまざまなゲームプレイを演出できます。
デバイスのリストはコンフィグ ファイルによってエントリされるため、サードパーティ ベンダーはそれぞれ独自のデバイスを任意のオプションとして追加できます。当社ではデフォルトですべてのコンソールをサポートしています。これらのコンフィグ設定をエディタで確認するには、[Project Settings (プロジェクト設定)] > [Input (入力)] > [Platform Settings (プラットフォーム設定)] > (対象のプラットフォーム) > [Hardware (ハードウェア)] に移動します。
例として、PS5 では DualSense または DualShock4 を任意のオプションとして設定できます。
詳細については、「Device Properties (デバイス プロパティ)」ドキュメントを参照してください。
Diff ツール
UE Diff ツール を使用して、Unreal Engine でアセットを比較できます。このツールでは、アセットと (ソース コントロールからの) その以前のバージョンとの比較と、2 つの異なるアセットの比較がサポートされます。現時点のサポートは、ブループリントとブループリントに近い型に向けたものです。
2 つのアセットの差異を diff するには、コンテンツ ブラウザに移動して対象となる 2 つのアセットを選択し、それらを右クリックすると表示されるコンテキスト メニューで [Diff Selected (選択項目をディフ)] を選択します。
Diff ツールには、ローカル アセットを特定のソース コントロール修正版と比較して差異を得るオプションが含まれています。この機能の完全なドキュメントについては、「UE Diff Tool (UE Diff ツール)」のページを参照してください。
レビュー ツール
UE レビュー ツール を使用すると、棚上げまたは送信したチェンジリストに含まれるすべてのアセットをリスト表示できます。UE Diff ツールを使用する際は、レビュー ツールを使ってアセットを確認できます。現時点では、レビュー ツールは Perforce のみに対してサポートされています。
人工知能 (AI)
ステート ツリー
UE 5.2 では、ステート ツリーに関するいくつかの改善点が加えられました。
ステート ツリーに グローバル タスク が加えられ、これによって、Tree Start イベントと Tree Stop イベントとの間で有効なステート ツリー タスクを実行できるようになりました。
グローバル タスクは、ステート選択に使用できる永続的データが必要な場合に利用できます。たとえば、時刻システムで、現在の時刻を定義するグローバル タスクを作成したりできます。グローバル タスクはツリー内のルート ステートよりも前に開始されるため、この情報はツリーが開始してから最初のステート選択時に使用可能になります。
スマート オブジェクト
UE 5.2 では、スマート オブジェクトに関するいくつかの更新が加えられました。
スマート オブジェクト コレクションは自動的には作成されなくなりました。代わりに、ユーザーはそれぞれのニーズに合わせてレベルごとにコレクション (複数可) を作成できます。
さらにスマート オブジェクトでは、パーシスタント レベルとのシームレスな連動が可能な一方で、World Partition とデータ レイヤーに対するサポートが強化されました。
[新機能] ニューラル ネットワーク エンジン (NNE)
Neural Network Engine プラグインを使用することで、ゲーム内でニューラル ネットワークを実行できるようになりました。
ユーザーは、ONNX ファイルをプロジェクトにインポートしてこのプラグインにパスし、実行可能なモデルを作成できます。このモデルは CPU 上で実行するか、レンダリング グラフ ビルダーにキューすることで、GPU 上で実行することができます。これは、デスクトップ プラットフォームと現世代コンソールの一部の両方に適用されます。
このプラグインは現時点で実験的機能であり、今後のエンジン バージョンで随時改善される予定です。これらの更新はパフォーマンスの向上と、サポートするプラットフォームの拡大を目的としたものです。
詳細については、Epic Developer Community にある NNE のコース を参照してください。
物理
機械学習クロス シミュレーション
Unreal Engine 5.2 では、機械学習クロス システムが大幅に向上しました。
次の機能が実装されました。
ポーズの自動選択:最近傍のデータセットのポーズを自動的に選択する新しいツールを導入し、簡単に機械学習モデルを微調整できるようになりました。
ネットワーク推論の高速化:ネットワーク推論のパフォーマンスが向上し、以前のリリースより 4 倍速くなりました。
メッシュ変形の改善:メッシュ変形を計算する新しいメソッドを導入し、モデルの精度が大幅に向上しました。
バグ修正および UI の改善:いくつかのバグ修正と UI の強化を行い、クロス シミュレーションの作成プロセスを向上しました。
[新規] Chaos Flesh シミュレーション
Unreal Engine 5.2 には新たに Chaos Flesh (筋肉) システムが導入されました。このシステムにより、Unreal Engine で変形可能 (ソフト) なボディの高品質のリアルタイム シミュレーションが可能になります。剛体シミュレーションとは異なり、ソフト ボディの形状はそのプロパティに応じてシミュレーション中に変化します。
Chaos Flesh システムでは、多様なパラメータを使うスタティックメッシュとスケルタルメッシュのシミュレーションをサポートしているため、最終結果を今まで以上に制御することが可能になります。このシステムの主な目的は、骨格アニメーション中にキャラクターの筋肉の変形をシミュレートすることにあります。
Chaos Flesh システムでは、高解像度シネマティック品質のジオメトリのオフライン シミュレーションからキャッシュされた結果とともに、低解像度のジオメトリをランタイム時にシミュレートすることで、高いパフォーマンスを実現します。
アセット モデリング
ソフトなボディをシミュレートする最初のステップとして、オブジェクトのサーフェス表現を同じオブジェクトのボリュメトリック表現に変換する必要があります。Chaos Flesh システムでは、シミュレーションで使用するために、スタティックメッシュまたはスケルタルメッシュが同等の四面体ジオメトリ表現に変換されます。
システムでは、次のものがサポートされます。
スタティックメッシュまたはスケルタルメッシュのサーフェス内に格納されているクローズド ジオメトリの等値面スタッフィングによる四面体化。
閉じたサーフェスの自動四面体化用の Tetrahedral Meshing in the Wild (Tet Wild:野生における四面体メッシュ) アルゴリズム。
カスタム仕様の生成アルゴリズムによる四面体化。
四面体シミュレーション
Chaos Flesh システムでは、生成された四面体ジオメトリを使用して、物理ベースのシミュレーションをリアルタイムで実行します。
シミュレーションでは、次のものがサポートされます。
四面体構造体の物理ベースのリアルタイムおよびオフラインのシミュレーション。
シミュレーション メッシュの制約付きのアニメートされた頂点のキネマティクス。
切り離されたシミュレーション ジオメトリをバインドする弱いコンストレイント。
パーティクルごとのシミュレーション プロパティを設定する機能。
パーティクルごとにプロパティを初期化するための フィールド システム との統合。
プロシージャルなノード グラフ インターフェースを通じたアセット オーサリング。
ワールド ソルバのインタラクション
Chaos Flesh シミュレーションには、リアルタイムに環境とインタラクトする機能が備わっています。
これらの外部インタラクションには次のものが含まれます。
ワールド ソルバ オブジェクトとの一方向のコリジョン インタラクション。
凸型および解析的ジオメトリに対するコリジョンのサポート。
制約付きの四面体頂点を制御する骨格アニメーションの使用。
ワールド ソルバに相対するユーザーが設定可能なティックの順序。
静的なワールド ジオメトリに対するサーフェス レイキャスト。
調整可能なコリジョン パフォーマンス。
シミュレーションをレンダリングする
四面体メッシュはシミュレーションに適しているボリュメトリック構造体ですが、通常は、レンダリングにとって理想的なサーフェスではありません。最も考慮すべきことはレンダリング サーフェスの見栄えを整えることであるため、システムでは、シミュレーション結果をレンダリング用に最適化されたサーフェスに転送します。
現在、システムでは次のものがサポートされます。
シミュレーション結果をスケルタルメッシュに転送するデフォーマ。
スタティックメッシュ ジオメトリのディスプレイスメントのワールド位置オフセット。
シミュレーション メッシュの四面体デバッグ描画。
シミュレーションをキャッシュする
筋肉シミュレーションは、リアルタイムで実行すると演算処理の負荷が非常に大きくなる可能性があります。このことから、Chaos Flesh システムには、よりスムーズなランタイム再生を行うためにシミュレーション結果をキャッシュする機能が備わっています。
システムでは、次の機能がサポートされます。
シミュレーション結果を再生用のキャッシング アセットにキャプチャする機能。
既定の変形として結果をゲームで再生する機能。
キャッシュ結果をシーケンサー内でスクラブ再生して、シネマティック イベントに対する時間を計測する機能。
Get Take とムービー レンダー キュー (MRQ) を使用してレンダリングおよびシミュレーションを行う機能。
Chaos Flesh システムの詳細については、「Chaos Flesh の概要」ドキュメントを参照してください。
Niagara 流体シミュレーション
5.2 では、Niagara の流体シミュレーションに大幅な改善点が加えられました。
より優れたパフォーマンス
UE 5.2 では、過去のリリースと比べて 2D ガスと液体のシミュレーションが 200% 速くなり、3D ガスと液体のシミュレーションは最大 60% 速くなりました。
加えて、Grid2DCollection および Grid3DCollection を使用するすべてのケースで以前よりもスピードが大幅に速くなりました。3D グリッドについては、より優れたメモリ管理のおかげで、単一の属性 (浮動小数やベクターなど) を含むコレクションが大幅に速くなったことに留意してください。
ユーザビリティの向上
3D ガス エミッタを更新してさらに強化し、より多くの機能を含むテンプレート システムとなりました。
また、サマリ ビュー (Summary View) とユーザー パラメータを簡易化し、使いやすさも向上しました。
シーケンサー キャッシング
シーケンサー と新たな Niagara シミュレーション キャッシュ ワークフローを使用することで、すべての流体シミュレーションをキャッシュできるようになりました。これにより、シミュレーションをベイク (キャッシュ) してシーケンサーで結果をスクラブ再生し、ムービー レンダー キューでそれをレンダリングするか、ゲーム内で再生できるようになります。
レンダリングの改善点
異種ボリューム レンダリング フレームワークにより、3D ガス シミュレーションが独占的にレンダリングされるようになりました。これにより、任意の数のライトとジオメトリ シャドウイング ボリュームを使用できるようになります
さらに、今回の更新では、カスタム仕様のコードを必要とせずに、マテリアルを堅牢かつ容易に作成する方法も提供されます。
全般的な改善事項
また、流体シミュレーションに対して、次のような改善点も加えました。
より優れたコリジョン:Rigid Mesh Collision DI により、サブフレームの精度が高いコリジョンを利用できるようになりました。これは 2D および 3D の流体シミュレーションに統合されています。
浅水:メッシュ SDF コリジョンのサポート、よりスムーズな結果、パフォーマンスの向上に伴い、浅瀬 (浅水) のシミュレーションに対するサポートが強化されました。
3D 液体に対する SDF スムージングのスピードが大幅に向上しました。
Niagara
デカール レンダラ
UE 5.2 には、「デカール レンダラ」と呼ばれる新しいレンダラが追加されました。デカール アクタと同様に、デカール レンダラを使って Niagara システム全体でデカールを生成して適用できます。デカール レンダラは、CPU でのみ使用可能です。
デカール レンダラで生成されたデカールは、それが交差するジオメトリ上に投影されます。サーフェスにスプラッティングされるペイントなどで非常に便利です。
デカールは Niagara エディタのプレビュー ウィンドウには表示されないため、そのエフェクトを確認するには、レベル エディタ内でそれをサーフェスに適用する必要があります。また、DecalColor
および DecalLifetimeOpacity
という 2 つの新しいプロパティが追加されました。これらは Niagara システム内でデカールの色を変更する場合に使用できます。これらを ParticleColor
属性にリンク付けして、まとめて更新するようにもできます。
すべてのレンダラ バインディングは予期どおりに機能するはずです。動的パラメータはサポートされていません。
デカール アクタを使用する個別のデカールのレンダリングにかかる負荷は、Niagara を介したデカールのレンダリングとほぼ同じです。しかし、一度に多くのデカールをレンダリングする場合は、Niagara を介したほうが負荷は小さくなります。
詳細については、「Render モジュール」を参照してください。
Niagara シミュレーション キャッシング (実験的機能)
「NiagaraSimCaching」と呼ばれる実験段階の新しいプラグインが追加されました。これは、Niagara シミュレーション の結果を後で再利用するためにキャプチャして格納するための方法を提供するものです。シミュレーション キャッシュでは、位置やレンダリングの情報などのシステム属性、エミッタ属性、およびパーティクル属性のためのデータを保存します。フル キャッシュにはすべての属性が格納されますが、レンダリング キャッシュにはそのキャッシュに関連する属性のみが格納されます。また、レンダー ターゲット ボリュームなどの一部のデータ インターフェースをキャッシュに保存することもできます。
Niagara シミュレーションの実行時にはわずかな変化が生じます。シミュレーション キャッシュをベイクすることで、データが静的に、つまり予測可能になります。ムービー レンダー キューに信頼性の高い結果を必要とするシネマティック ワークフローではこれが役立ちます。このシミュレーションの結果をキャッシュすると、それをシーケンサーに取り込んだり、そのデータをさまざまな目的でブループリントにロードしたりできます。その他の用途としては、パフォーマンス用にランタイム時に一般的なエフェクトのために最適化されたスタンドインを作成したり、既存のパーティクルで開始できるようにライブ シミュレーション用の準備をしたり、予測どおりに動作しないゲームでシステム シミュレーションをデバッグしたりすることが含まれます。
シミュレーション キャッシュの保存方法はいくつかあります。
ベイカーを使用する
シーケンサーを使用する
レベル エディタ内
ベイカーを使用する
フリップブック ベイカーを使用して Simulation Cache Output (実験的機能) のオプションを選択してシミュレーションをキャッシュします。詳細は、「フリップブック ベイカー」を参照してください。
この方法のメリットは、シーケンサーでの作業に不慣れなアーティストでも Niagara から直接キャッシュ ファイルを保存できることです。シミュレーション キャッシュはスタンドアローン アセットとして保存されます。これは、大きなキャッシュ ファイルで作業する場合にバージョン管理を活用できることを意味します。シミュレーション キャッシュを保存したら、それをシーケンサーに適用したり、データをブループリントで使用したりできます。
シーケンサーを使用する
シミュレーション キャッシュを直接シーケンサーにレコーディングすることもできます。その方法は次のとおりです。
(推奨) Niagara コンポーネントにキャッシュ トラックを挿入し、そこからレコーディングを開始します。
Take Recorder を使ってレコーディングを行います。
シーケンサーにシミュレーション キャッシュを保存すると、個別のスタンドアローン アセットとしてではなく、自動的にシーケンスに保存されます。このメソッドは、迅速なイテレーションとキャプチャを行う場合に最適です。
Take Recorder にシミュレーション キャッシュをレコーディングすると、Niagara アクタが Possessable (所有可能) ではなく、Spawnables (スポーン可能なもの) として追加されます。このアプローチのメリットは、複数のソースとキャッシュを同時にレコーディングできることです。
レベル エディタ内
シミュレーション キャッシュをレベル エディタでレコーディングできます。Niagara アクタを選択して [Details (詳細)] パネルを開くと、[Niagara Utilities (Niagara ユーティリティ)] セクションに [Capture (キャプチャ)] ボタンが表示されます。[Project Settings (プロジェクト設定)] で [Niagara] > [Simulation Caching (シミュレーション キャッシュ)] > [Quick Sim Cache Capture Frame Count (シミュレーション キャッシュ キャプチャ フレームのクイック カウント)] に移動すると、このキャプチャの長さを設定できます。このキャプチャは、デフォルトで 5 フレームのクイック シミュレーション キャッシュを行います。
シミュレーション キャッシュの詳細については、「Niagara Simulation Caching in Sequencer (シーケンサーでの Niagara シミュレーション キャッシュ)」を参照してください。
ダイナミック メッシュ データ インターフェース
ダイナミック メッシュ データ インターフェースを使うと、CPU または GPU シミュレーション内でジオメトリをビルドできます。ビルドしたジオメトリは、すべてのフレームでのリビルドや一度限りのビルド、そのトライアングルや頂点のサブセットの変更を通じて自由に変更できます。
ダイナミック メッシュ データ インターフェースを使用すると、各フレームのジオメトリをコピーできます。その後、別のエミッタでそれをパーティクルごとにインスタンス化できます。たとえば、キャラクター アニメーションのコピーを多数使用する「ドッペルゲンガー」エフェクトを作成できます。現在、スケルタルメッシュごとに 1 つのマテリアルのみをサポートしています。
次は、Niagara 内を行進するキューブの例です。1 つのエミッタでパーティクル球体を制御し、次に別のエミッタでパーティクルを読み取ってメッシュを生成します。
ダイナミック メッシュ データ インターフェースを使用するには、カスタム仕様の独自のモジュールとシミュレーション ステージを作成する必要があります。
ロード時間とコンパイル時間の改善
UE 5.2 では、Niagara システムをロードする時間と、以前にコンパイルした DDC の結果を読み込む時間という 2 つの主領域において、Niagara のパフォーマンスを大幅に改善しました。
Niagara システムの読み込みは次のタイミングで行われます。
初めて Niagara エディタでアセットを開くとき。
Niagara アセットを含むマップを読み込むとき。
Niagara システムをコンパイルするとき。
このような操作では、演算処理の一部である PostLoad
を最大で 5 倍高速化しました。
読み込みの改善に加えて、Niagara システムのコンパイルに次のような改善点を加えました。初めてシステムをコンパイルするときに、さまざまな操作の結果がローカル派生データ キャッシュ (DDC) に保存されます。それにより、エディタを閉じてから開き直し、また同じ操作を行う場合、UE では Niagara システムを再コンパイルする必要がありません。
以前のバージョンでは、DDC からデータをプルするための負荷はかなり大きいものでした。UE 5.2 では、DDC からのプルが最大 4 倍高速になります。Niagara アセットが数多く含まれている大規模なプロジェクトのファイルでは、特にその違いが顕著になるでしょう。
Niagara Fluids
Niagara Fluids の改善点については、「物理」セクション を参照してください。
Unreal Insights
Insights Editor
エディタ画面の右下隅にある Insights / Trace ステータスバー ウィジェットを使い、Unreal Insights を起動して管理できるようになりました。
この新しいウィジェットはトレースの制御機能をすべてまとめて提供するもので、ユーザーは新しいユーザー インターフェース (UI) を介して、トレースするチャンネルの管理、トレース スクリーンショットのキャプチャ、トレース ブックマークの挿入、トレースの開始/終了などの操作が可能です。
これらのメニュー機能の詳しい概要については、「Unreal Insights」ドキュメント ページを参照してください。
トレース
Unreal 5.2 では Trace Insights にいくつかの改善点を加えました。
デフォルトのチャンネル プリセットにスクリーンショット チャンネルを追加しました。
新しいコンソール コマンド「Trace.SnapshotSend [
] [ ]」が導入されました。このコマンドは、ホストおよびポート用に提供された引数を使用して、現在のインメモリ トレース バッファのスナップショットをトレース ストアに送信します。 トレース解析中のメモリ管理を向上し、トレースを最適化しました。
特定の範囲のイベントに対する遅延接続の機能修正など、いくつかのバグ修正をコミットしました。
トレースにより、トレース解析からのエラー フィードバックがアプリケーションに提供されるようになりました。これらには、サポートされていないバージョンのトレースに関するエラーも含まれています。
Timing Insights
カウンタ
カウンタ データ用に新しいエクスポート機能を追加しました。これらの新しいオプションは [Counters (カウンタ)] パネルのコンテキスト メニューに含まれています。
メニュー オプション |
説明 |
---|---|
Export... (エクスポート...) |
選択項目 (カウンタやその集約統計情報) をテキスト ファイル (タブ区切り値/コンマ区切り値) にエクスポートします。 |
Export Values... (値をエクスポート...) |
選択カウンタの値をテキスト ファイル (タブ区切り値/コンマ区切り値) にエクスポートします。選択時間範囲がある場合はそこに含まれる値のみ、あるいは時間範囲が選択されていない場合はセッション全体の値をエクスポートします。 |
Export Operations... (オペレーションをエクスポート...) |
選択カウンタのインクリメンタル オペレーション/値をテキスト ファイル (タブ区切り値/コンマ区切り値) にエクスポートします。選択時間範囲がある場合はそこに含まれるオペレーション/値のみ、あるいは時間範囲が選択されていない場合はセッション全体に対してエクスポートします。 |
Export Counters... (カウンタをエクスポート...) |
カウンタのリストをテキスト ファイル (タブ区切り値/コンマ区切り値) にエクスポートします。 |
実行コマンド
TimingInsights.ExportTimerStatistics 実行コマンドで領域を指定する際に、不明なワイルドカード型に対するサポートを追加しました。
タイミング ビュー
タイミング イベントのハイライト (強調表示) をリセットできるようになりました。リセットするには対象のイベントをダブルクリックします。空白の領域をダブルクリックすることでもハイライトがリセットされます。
ランタイム
メタデータを含む CPU タイミング イベントで、「遅延接続」セッションのタイムスタンプが正しくない問題を修正しました。
「LoadModule」の詳細な CPU パフォーマンス スコープを追加しました。
Memory Insights
メモリ割り当てテーブル
コンテキスト メニューに [Export Snapshot (スナップショットをエクスポート)] が追加されました。このオプションにより、メモリ割り当てがテーブル ディフ モードでインポート可能な
.csv
/.tsv
ファイルとしてエクスポートされます。
テーブル ディフ モードは実験的な機能です。
ランタイム
D3D11 および D3D12 リソースのメモリ割り当てトレーシングを追加しました。
Free トレース イベントおよび Heap トレース イベントにコールスタックを追加しました。
Asset Loading Insights
Asset Loading Insights Editor に対するサポートを追加しました。
ツリー/テーブル表示
カラム ヘッダのコンテキスト メニューに [Hide All Columns (すべての列を非表示)] オプションを追加しました。
2 つのメモリ割り当てスナップショットに対するセッション ブラウザ/テーブル ディフを追加しました。
セッション ブラウザのドロップダウン メニューに [Diff Tables (テーブルの差分)] と [Import Tables (テーブルをインポート)] を追加しました。
メモリ プロファイラ
UE 5.0 の時点で、UnrealFrontend の旧版のプロファイラとそのランタイムが非推奨になっています。
UE 5.0 の時点で、MemoryProfiler2 ツールと MallocProfiler ランタイムが非推奨になっています。
Datasmith
Datasmith Solidworks Exporter プラグイン
Solidworks コンフィギュレーションのサポート
Solidworks では、コンフィギュレーションを使って、単一のドキュメントでモデルの複数のバリエーションを作成できます。複数の Solidworks コンフィギュレーションをレベル バリアント セットのバリアントとしてエクスポートできるようになりました。
Datasmith Solidworks エクスポータでは、エクスポートするそれぞれのコンフィギュレーションの個々のスタティックメッシュをエクスポートします。コンフィギュレーションに非表示のパーツがある場合、エクスポータでは可視性のトグルを使ってそれらを非表示にします。
Datasmith glTF Importer プラグイン
Interchange glTF プラグインへの移行を最終化する中で、[Plugins (プラグイン)] ウィンドウ内で Datasmith glTF プラグインを非推奨としました。
Interchange glTF プラグイン
エクスポータでアクタ ラベルを使用
glTF エクスポータでは、アクタ名ではなくアクタ ラベルをエクスポートするようになりました。アクタ ラベルは、エクスポートされた階層においてより有意義な情報を提供するものです。
カスタム仕様のエクステンションを削除
glTF エクスポータからカスタム仕様の Epic glTF エクステンションをすべて削除しました。それらに関連するエクスポート オプションは [Export Options (エクスポート オプション)] ダイアログ には表示されません。
削除されたエクステンション |
削除されたエクスポート オプション |
---|---|
EPIC_blend_modes |
[Material Options (マテリアルのオプション)] > [Export Extra Blend Modes (余分なブレンド モードをエクスポート)] |
EPIC_animation_playback |
[Animation options (アニメーションのオプション)] > [Export Playback Settings (再生設定をエクスポート)] |
EPIC_lightmap_textures |
[Texture Options (テクスチャのオプション)] > [Export Lightmaps (ライトマップをエクスポート)] |
EPIC_texture_hdr_encoding |
[Texture Options (テクスチャのオプション)] > [No Lossy Image Format For (非可逆画像形式なし)] [Texture Options (テクスチャのオプション)] > [Texture HDR encoding (テクスチャの HDR エンコーディング)] |
EPIC_hdri_backdrops |
[Scene Options (シーンのオプション)] > [Export HDRI Backdrops (HDRI Backdrop をエクスポート)] |
EPIC_sky_spheres |
[Scene Options (シーンのオプション)] > [Export Sky Spheres (天球をエクスポート)] |
EPIC_level_variant_set |
[Scene Options (シーンのオプション)] > [Variant Sets Mode (バリアント セットのモード)] [Variant Set Options (バリアント セットのオプション)] > [Export Mesh Variants (メッシュ バリアントをエクスポート)] [Variant Set Options (バリアント セットのオプション)] > [Export Visibility Variants (可視バリアントをエクスポート)] |
CAD インポート
CADKernel テッセレーション エンジンを実際の制作に使用できる機能に昇格しました。ただし、デフォルトで有効にはなっていません。
今回のリリースには、CADKernel に以下を含む安定性に関する改善点を加えました。
重複するサーフェスの削除。
ISO カーブに沿ったメッシュ化に対する改善。
非常に大きい平らなサーフェスで最大辺長をバイパスする機能。
また、Datasmith CAD トランスレータに新しいコンソール変数、ds.CADTranslator.RemoveDuplicatedTriangle を追加しました。これにより、メッシュ内のトライアングルの重複 (同じ頂点のトリプレットを持つ 2 つのトライアングル) が回避されます。トライアングルの重複は、サーフェス パッチの複製時に発生することがあります。2 つのパッチに同じメッシュが含まれる場合に、グローバル メッシュ内でトライアングルが重複します。
USD のサポート
アセット キャッシュ
USD ステージを開いた際に Unreal Engine によって生成および再利用されるアセットのキャッシュを作成できるようになりました。アセット キャッシュを使用すると、異なるステージで同じアセットを使用して作業する場合に、Unreal Engine はキャッシュされたアセットを再処理する必要がないため、取り込み時間を改善することができます。
ユーザーはプロジェクトのデフォルト アセット キャッシュを指定するか、アセット キャッシュを必要とするすべてのステージ アクタに向けて、Unreal Engine に新しいアセット キャッシュを作成させることができます。プロジェクトにデフォルトのアセット キャッシュを設定すると、ステージは開くものの、アセット キャッシュが割り当てられていないあらゆるステージ アクタで、自動的にデフォルトのアセット キャッシュが使用されるようになります。
USD ステージ アクタをプロジェクトで初めて開いた際には、Unreal Engine によってデフォルトのアセット キャッシュを作成または指定するよう促されます。アセット キャッシュはコンテンツ ブラウザの [Add (追加)] メニューで作成でき ([Add (追加)] > [Miscellaneous (その他)] > [USD Asset Cache (USD アセット キャッシュ)])、[Project Settings (プロジェクト設定)] でデフォルトに設定できます。デフォルト アセット キャッシュ の設定は、[Project Settings (プロジェクト設定)] ウィンドウの [Engine (エンジン)] > [USDImporter] セクションにあります。
アセット キャッシュの編集時には、当該のキャッシュに含まれるすべてのアセットが表示され、常にディスクに保存される永続的なアセットや、現在のセッション向けにロードされた未参照のアセット (使用されない場合でも) に対してメモリ制限を設定することができます。
デベロッパー ツール
デフォルトの Visual Studio バージョン
Unreal Engine のコンパイルにおいて、Visual Studio 2022 がデフォルトの Visual Studio バージョンとなりました。推奨される Visual Studio 2022 (VS2022) と Microsoft Visual C++ (MSVC) のバージョンは次のとおりです。
VS2022:17.4.x 以降
MSVC:14.34.31933
Unreal ヘッダ ツール
UE 5.1 で非推奨になった C++ Unreal ヘッダ ツール (UHT) が削除されました。Unreal Engine では、UE 5.1 で導入された新しい C# Unreal ヘッダ ツールを使用します。
Include-What-You-Use ツール
Include-What-You-Use ツール が Unreal Engine の Unreal Build Tool に組み込まれました。Include-What-You-Use (IWYU) は、クランをベースに作成されたコマンドライン ツールです。IWYU ではクランと同様にファイルをコンパイルしますが、オブジェクト ファイルは出力されません。代わりに、IWYU では、与えられたソース ファイルのコンパイルに必要な #include
ディレクティブのリストを出力します。
IWYU を使用するには、ターゲットを Linux でビルドして、次の構文を使用します。
RunUBT.bat <TARGET> Linux Development -IWYU
ファンデーション — コア
仮想アセットの改善点
UE 5.2 には、ユーザー エクスペリエンスに関連して、仮想アセット システムに対していくつかの改善点が加えられました。
仮想アセット オフライン サポート (実験的機能)
オフラインでより長い期間作業しなければならないユーザーへのサポートを強化するために、仮想アセット システムのオフライン モードを加えました。オフライン モードを使用するには、まず、仮想化されたあらゆるデータをストレージ場所からローカル マシンにダウンロードするプレキャッシュのパスを実行し、次に (オンライン ストレージに接続するのではなく) ローカル キャッシュを使用するバックエンド グラフに切り替える必要があります。この機能は、この機能をサポートするバックグラウンド グラフを作成するために手動での設定が必要となるため、現時点では実験段階の機能と位置付けられています。
非仮想化チェックインの自動修正
よくある問題の一つとして、仮想化すべきアセットを、ユーザーが誤って非仮想化してしまう場合があります。こういった問題を検出するために、プロジェクト単位でファイルを再保存して再仮想化できるスクリプトを UAT に加えました。これにより、建築会社などの組織のワークフローを、すべてのアセットを一貫して確実に仮想化するように設定することができます。この操作を実行するには -run=VirtualizationEditor.VirtualizeProject
コマンドを使用します。これによってパッケージは再保存されず、これはその仮想化設定に応じて更新されるプロジェクト コンテンツに依存することに注意してください。
クラン静的解析を実際の制作に使用できる機能に昇格
UE 5.2 では、バージョン 5.1 からのクラン静的アナライザに関連する有効な警告をすべて解決しました。それに伴い、クラン静的解析を実験段階の機能から、実際の制作に使用できる機能に昇格しました。
Pixel Streaming
Epicでは、GoogleがWebRTCのバージョンにおける脆弱性を公開 (詳細はこちら)したことを認識しており、EOS SDKに対する影響および次のステップを調査しています。
VR Pixel Streaming (実験的機能)
Pixel Streaming で VR がサポートされるようになりました。これまでと変わらず Web ブラウザにストリーミングできるほか、XR デバイスをプラグインしている場合は、VR に切り替えるボタンをクリックするだけで、HMD で映像をストリーム再生できるようになりました。さらに、このシステムでは HMD と XR コントローラーのトランスフォームをキャプチャして Unreal Engine に転送するため、ユーザーは Pixel Streaming と XR デバイスのみを使って、VR が有効になった Unreal Engine アプリケーションとやり取りすることができます。これによってインストールが必要ない XR エクスペリエンスを構築できるようになり、XR ストリーミングのユース ケースに向けて Unreal Engine の可能性を広げることができます。
この機能は Unreal Engine 5.2 では実験段階にあり、以下の既知の制限事項があります。
Quest 2 と HTC Vive ではテスト済みですが、すべての XR デバイスをサポートしているわけではありません。
レイテンシーを予測または緩和する技術は実装されていないため、ヘッドセットでネットワーク レイテンシーが発生します。このため、現時点では VR Pixel Streaming はローカル セットアップでの使用に適しています。
インスタンス化されたステレオスコピック レンダリングを有効にするには、
-PixelStreamingEnableHMD
を使ってアプリケーションを起動する必要があります。PixelStreaming HMD を使用するには、OpenXR プラグインを無効にしておく必要があります。
Meta Quest Browser といったヘッドセット内ブラウザで使用するには、HTTPS 経由でコンテンツを処理できるようにシグナリング サーバーを設定する必要があります。
マルチストリーマーのサポート
Pixel Streaming では、同じシグナリング サーバーに接続されている複数のストリーマーをサポートするようになりました。また、ブラウザ側でやり取りするストリーマーを選択する機能も備わっています。これにより、視点の切り替えやローカル マルチプレイヤー エクスペリエンスのストリーミング、複数の Pixel Streaming VCam の同時運用が可能になります。
消費者向けの NVIDIA GPU でストリーミングする場合は、3 件のビデオ エンコーディング セッションに制限されます。すべてのセッションを使い果たした場合に向けて、ソフトウェア エンコーディングへの正常なフォールバックが実装されています。ただし、これによって CPU 処理能力が急速に消費されることに注意してください。当社で 1080p ストリームでテストした際は、最新のシステムでは 3 件の GPU エンコーディング ストリームと、1 件のソフトウェア エンコーディング ストリームが達成可能であると結論付けられました。
Pixel Streaming フロントエンド ライブラリ
UE 5.2 では、最新の Web 開発プラクティスを取り入れるべく Pixel Streaming フロントエンド (.html、.js、.css) を全体的に見直して、フロントエンドをより作業およびデバッグしやすく、何らかの上へのビルドも行いやすいように改善しました。既存のモノリシックな JavaScript ファイルを一連の TypeScript クラスに変換し、NPM パッケージを作成して、SemVer をフォローするパブリック API を取り入れました。また、UI コードからコア機能を切り離したため、UE 5.2 からはフロントエンド向けに次の 2 つの NPM パッケージがシッピングされます。
lib-pixelstreamingfrontend
:WebRTC 向けのコア Pixel Streaming フロントエンド、設定、入力と全般的な機能。lib-pixelstreamingfrontend-ui
:ユーザーがコア ライブラリの上に任意で変更または適用できる参照 Pixel Streaming UI。
ユーザーは、コア ライブラリの上に独自の UI をビルドするか、この参照 UI を今後のカスタマイズの開始点として使用することができます。これらのライブラリまたは Pixel Streaming フロントエンドの消費に関する全般的な詳細については、公式の Pixel Streaming 基礎構造である Github リポジトリ を参照してください。
更新された Pixel Streaming デモ
Pixel Streaming デモ ショーケース プロジェクトを一新し、新たな Pixel Streaming フロントエンド ライブラリの上にビルドされた新しいフロントエンド ライブラリを含めました。また、説明文付きの特定の機能ショーケースも含めました。これにより、Pixel Streaming の新機能を学びたいユーザーや、Pixel Streaming を初めて学ぶユーザーに向けて、Pixel Streaming の各機能を教育的な方法で紹介することができます。今後は、このショーケース プロジェクトのアップグレードを通じて、リリースされる新たな機能を順次紹介していく予定です。
プロシージャル コンテンツ生成フレームワーク (実験的機能)
プロシージャル コンテンツ生成フレームワーク (PCG:Procedural Content Generation Framework) は、Unreal Engine 内で独自のプロシージャル コンテンツを作成するための早期開発段階のツールセットです。PCG では、アーティストやデザイナー向けに、迅速で反復的なツールと、建造物やバイオームの生成といったアセット ユーティリティから、ワールド全体に至るまでのあらゆる複雑度のコンテンツをビルドする機能が提供されます。
拡張性とインタラクティブティを高めるために PCG フレームワークを構築することで、既存のワールド構築パイプラインとの統合が容易になり、プロシージャル ワークフローと従来のワークフローとの境界がより取り払われます。
PCG には、コンテンツを生成してワールド内のデータとやり取りするための新しいノード グラフ、演算子のライブラリ、コンポーネントが含まれています。ノード グラフ エディタは完全にインタラクティブであり、ライブ ワークフローをサポートするために変更がリアルタイムで更新されます。
プロシージャル生成フレームワークの詳細については、「プロシージャル生成フレームワーク」のドキュメントを参照してください。
バーチャル プロダクション
nDisplay
SMPTE 2110 のサポート
nDisplay システムを更新し、Nvidia Mellanox - Rivermax SDK を介して SMPTE 2110 規格の使用がサポートされるようになりました。これは、映像 I/O の複数のストリーミングが可能になり、各インナー錐台を専用のマシンでレンダリングする nDisplay システム用のハードウェア構成を使用できるようになることを意味します。これにより、コンテンツのパフォーマンスが向上します。
マルチプロセスとオフスクリーン レンダリング
nDisplay レンダリング ノードにおけるリソース使用の並列化を向上する新たなクラスタ コンフィギュレーション手法で、多くの場合、複数の GPU を備えたシステムでのパフォーマンスが向上します。
これは、複数の GPU を備えた PC で、PC のレンダリングを複数の GPU 間で共有するヘッドレス レンダリング ノードを実行して、同じマシン上で実行されている当該のノードを表示できることを意味します。
JITMR (Just In Time Media Rendering:ジャストインタイム メディア レンダリング) はメディア I/O フレームワークの新機能です。一部のプレイヤーは、エンジンに到達するフレームを必要なとき (nDisplay フレーム合成の場合はレンダリング パイプラインの最後) にできるだけ早く消費するためにこれを活用できます。
クラスタ PIE プレビュー
nDisplay Root アクタを PIE (プレイ イン エディタ) モードでプレビューできるようになったため、クラスタ化した設定をプレビス (プレビジュアリゼーション) できるようになりました。
ICVFX
iOS ステージング アプリ
iOS リモート制御アプリが導入されました。このアプリにより、多くの一般的なインカメラ VFX 機能を簡単に制御できます。このアプリからは、LED ボリューム上の nDisplay レンダリングのインタラクティブなライブ ビジュアル プレビューにライト カードやフラグ、色補正の各ウィンドウ、クロマキー カードを配置したり、カラー グレーディングを行ったり、頻繁に変わる ICVFX プロパティを変更したりできます。
クロマキー カード
nDisplay のクロマキー設定の特性を自動的に考慮し、ボリューム内にグリーン (またはブルー) スクリーンを配置して、ICVFX Editor のライト カードのように簡単に位置を調整することができます。
マルチユーザー受信のみモード
マルチユーザー セッションで、マルチユーザー セッションからの更新のみを受け取るように、ローカル インスタンスを切り替えられるようになりました。この受信のみモードでは更新を受け取りますが、シーンに加えた変更はサーバーに送信されません。これを使用して、デフォルトまたは送信のみのモードに切り替える前にローカルに変更を加え、その変更をマルチユーザー セッションにエントリすることができます。
バーチャル カメラ
単独のエディタ マルチカメラ
WebRTC Pixel Streaming のサポートを拡張し、Pixel Streaming Output Provider からアクセス可能な単一サーバーから同時に実行される複数の名前付きストリーミングに対応するようになりました。また、バーチャル カメラの拡張入力サポートを増やし、バーチャル カメラごとに受け入れる入力デバイスが選択できるようになりました。これらの変更により、同時に複数のバーチャル カメラを単一のエディタ インスタンスで操作する手段が提供されます。
Live Link VCam アプリ
iPadOS および iOS 用の Live Link VCam では、マルチストリーミング サーバーを対象とする場合のターゲット ストリーミングの選択をサポートするようになりました。また、エディタからストリーミングされるテキスト ボックスを操作するための仮想キーボードの使用についてもサポートを追加しました。
バーチャル カメラからのレール構築
VCamActor では、事前に計画されているカメラの複雑な動きを実行するため、レールの構築、編集、およびライドを VCam インターフェースから直接行う機能が提供されるようになりました。
ターゲット デバイスへのアスペクト比の適応
バーチャル カメラでは、Pixel Streaming を使用して接続されている場合、ターゲット デバイスの適切なアスペクト比にビューポートの解像度を適用できるようになりました。ビューポートのサイズ変更や、手動でオーバーライド解像度を入力する必要がなくなりました。
Broadcast
レンダリング グリッド
新しい Render Grid プラグインにより、MRQ Job レンダリングのバージョン付けを簡単に行えるようになります。新しいプレイリスト アセットを作成し、[Movie Render Queue (ムービー レンダー キュー)] パネルと似たワークフローでジョブを作成できます。保存されたプロパティ値を含むジョブをリモート コントロール プリセットに割り当てられるため、ジョブをすばやく複製して、さまざまなジョブで同じレベル シーケンス アニメーションを使用することができます。
DMX
DMX コントロール コンソール
DMX コントロール コンソールが簡素化されて、デバッグをより迅速に行い、物理的および仮想的な器具の両方をすばやく制御できるようになりました。出力コンソール UI 内で DMX ライブラリとパスを選択し、自動的にスライダに設定できるようになったため、DMX の生成にすぐにそれらを使用できるようになりました。
グローバル検索で公開済みの制御スライダを使ってすばやくフィルタリングできるため、変更したいプロパティに簡単に移動できます。
DMX UI の改善点
DMX UI には、ライブ ショー デザイナ、バーチャル プロダクション オペレーター、リアルタイム プレビューのために DMX を使ってインエディタ要素を操作したいと考えるあらゆるユーザーに向けて、以下の改善点が加えられました。
器具パッチの一括追加
更新された命名規則 (OX と X)
ユニバースの選択
器具の配列のコピー & 貼り付け
器具パッチの複数選択と移動
MVR インポート オプション
メディア IO
メディア IO サムネイル & プレビュー
メディア IO サムネイル
ビデオ ファイル (複数可) をドラッグアンドドロップすることで、画像とメディア ソース アセットのサムネイルを生成できるようになりました。サムネイルにするビデオ フレームは選択可能です。
ビデオ プレビュー
ファイル メディア ソース、プレイリスト、またはイメージ メディア ソース アセットをダブルクリックしてビデオをプレビューできるようになりました。
クロスフェード
Media Plate アクタでメディア間のクロスフェードが作成できるようになりました。複数のメディア プレーヤーを組み合わせて使用することで、最大 2 (2x) トラックのクロスフェードが可能です。
カラー パイプライン
作業色空間
作業色空間 (Working Color Space) は、テクスチャ入力およびディスプレイ出力と、対象の作業色空間との間で適切な変換 (双方向) を行うための情報をエンジンに提供できるプロジェクト設定です。
OCIOv2 の改善点
OpenColorIO プラグイン ライブラリをバージョン 2.2 に更新しました。これによって、ビルトイン コンフィグや .ocioz
圧縮のコンフィグ アーカイブのサポートを含む新しい機能が追加されました。
ICVFX ライト カードの OCIO サポート
ライトカード レンダリングに OCIO を適用できるようになったことで、それらのレンダリングで、強度と色の面でウォールを正しく表現できるようになりました。また、任意でそれらをカメラのための修正から切り離すこともできます。
色補正範囲を使ったアクタごとのカラー グレーディングに対する Nanite サポート
範囲/ボリュームに加えて、特定の Nanite アクタに対してカラー グレーディングを使用できるようになりました。これにより、従来のコンテンツに対して行うように、対象の Nanite コンテンツでエフェクトを切り離すことができます。
プラットフォームの SDK アップグレード
Windows
IDE: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:October 2022 Update 1
ファームウェア バージョン:Recovery November 2022 10.0.22621.2864
サポートされている IDE:Visual Studio 2022
Linux
ネイティブの Linux での開発
推奨 OS:Ubuntu 22.04 または CentOS 7
Compiler: clang 15.0.1
クロスプラットフォーム開発
クロスコンパイル ツールチェーン: v21 clang-15.0.1 ベース (CentOS 7)
macOS
推奨要件
Latest macOS 13 Ventura
Latest Xcode 14.1 以降
最小要件
macOS 12.5 Monterey
Xcode 14.1
iOS / tvOS / iPadOS
推奨要件
Latest macOS 13 Ventura
Latest Xcode 14.2 以降
Minimum
macOS 12.5 Monterey
Xcode 14.1
サポート対象のターゲット SDK バージョン:iOS 15 以降
グラフィック API:Metal 2.4 および Metal 3.0
Android
Android Studio 4.0
Android NDK r25b
Android SDK
推奨要件:SDK 32
UE コンパイルのための最小要件:SDK 30
デバイス上で実行する最小ターゲット:SDK 26
AGDE デバッグ には、AGDE v23.1.82+ が必要
AGDE は JDK 17 が必要です。OpenJDK 17 の使用をお勧めします。
ARCore
1.22
ARKit
4.0
Oculus
33.0
OpenXR
1.0.22
Steam
1.47
SteamVR
1.5.17
Switch
SDK 14.3.0 または 15.3.0 + オプションの NEX 4.6.7
最小ファームウェア バージョン:14.3.0-1.0
Nintendo Dev Interface 2.5.5
サポートされている IDE:Visual Studio 2022 (SDK バージョン 15.3.0)、Visual Studio 2019 (SDK バージョン 14.3.0)
PS4
Orbis SDK 10.008.011
System software 9.030.001
サポートされている IDE:Visual Studio 2022
PS5
Prospero SDK 7.00.00.38
System Software 7.01.00.00
サポートされている IDE:Visual Studio 2022
Release Notes
Animation
New:
You can now relinking State Machine transitions in the AnimGraph. Additionally, you can make selective relinks by multi-selecting a subset of the transition nodes.
You can now use per-bone blend profiles as overrides in Blend Spaces.
Added a new visual Blend Curve widget to replace the previous text-based solution. The new widget shows the selected blend curve and displays animate information while hovering over it with the mouse.
Shared AnimGraph State Machines transitions can now be used and referenced across hierarchy levels by their parent and child state machines.
Exposed more animation blueprint features to the animation blueprint templates to support the new expanded skeleton compatibility.
Unreal Engine will now prefer to use the physics asset of the currently displayed mesh instead of the one who's preview mesh matches the current mesh.
You can now add Animation Composite Assets to Motion Matching Database assets in order to select poses from them at runtime.
You can now set a limit to define the number of bone influences, per-vertex, below what the project supports.
You can use the
BoneInfluencesLimit
property to set a limit on each LOD of an asset.You can also use the
DefaultBoneInfluencesLimit
property as a per-platform global default, that can be set from the Project Settings.For example, you can enable Unlimited Bone Influences on a project while ensuring that meshes don't use more than
8
influences by default, even if they've been imported with more.
You can now toggle the Unlimited Bone Influences property as a per platform default, rather than having one global setting for all platforms.
Skeletal Mesh Assets now display their Max Bone Influences in the metadata tooltip that you can access by hovering over an asset in the Content Browser.
Additionally, you can now filter assets by Max Bone Influences.
Improvement:
Improved the accuracy of some comments about how the Support Ray Tracing setting on Skeletal Meshes affects their usage of the skin cache.
Deprecated properties have been wrapped with
WITH_EDITORONLY_DATA
in order to avoid runtime waste.
Crash Fix:
Fixed an issue that could cause a crash when duplicate blend profile indices are introduced, due to a virtual bone rename operation.
Bug Fix:
Fixed a bug that would display incorrect values for some Watched pin values in Animation Blueprints.
Fixed a bug that could cause LOD bones to not display correctly in the Animation Editor Viewport.
Prevented redundant node spawner actions from being registered for every loaded Animation Blueprint asset context in the editor.
Fixed a bug that could cause blend profile bone indices to go out of sync when virtual bones were deleted.
Gameplay
New:
Exposed
Montage_GetEffectivePlayRate
, which accounts forPlayRate
*
RateScale
. You can use the newMontage_GetEffectivePlayRate
to get more accurate Montage playrate as the currentMontage_GetPlayRate
returns onlyPlayRate
, so it doesn't provide an accurate final play rate if the Montage asset has aRateScale
that isn't1
.You can now use new Property Tracks in the Rewind Debugger to isolate, watch and debug any recorded property in its own dedicated track in the Rewind Debugger timeline.
Added support for overlay icons to be displayed on the Rewind Debugger's Tracks.
You can now undo and redo changes made in the Pose Search Database editor.
You can now set the blend behavior of the Motion Matching node, such as blend Time, Mode and set driving Blend Profiles.
Added a new filter to the pose search Rewind Debugger track that you can use to hide invalid poses.
You can now preview Blend Spaces in the Pose Search Database editor.
You can now set a dynamic Play Rate Minimum and Maximum to control the playback of Motion Matching nodes.
You can now view a Pose Search Database's statistics, using the Database Statistics Tab in the Pose Search Database editor.
In the Rewinder Debugger, you can now open the currently selected object's blueprint editor by double-clicking its track in the object outliner.
When opening an asset or database from the Rewind Debugger's Pose Search track, the asset is paused and will match the time in the recorded gameplay segment, making it easier to inspect and debug assets.
Added new icons adjacent to assets listed in the Pose Search Database editor's Asset Tree panel to quickly show a database entry's state and properties.
Improvement:
The motion matching Pose Search Database editor's stability has been improved.
Performance improvements have been made to the Pose Search Database indexing.
Crash Fix:
Fixed an issue that could cause a crash when the Motion Matching Trace State search throttling was enabled.
Bug Fix:
Fixed a bug that could cause parallel indexing of Pose Search Database assets to not perform correctly.
Fixed a deserialization issue that could occur with a Pose Search Database index kdtree.
Fixed issue that could cause a bug while packaging Pose Search Database assets.
Fixed an issue that could occur when concurrently indexing a DCC Pose Search Database.
Fixed an issue that could cause a root motion enabled animation preview character to not start at the origin point when switching to a new root motion mode while the animation is paused.
Deprecated:
Removed the pose search
EPoseSearchFeatureDomain
.Removed
UPoseSearchSequenceMetaData
.Removed support for the Pose Search Database sequence lead in and follow up asset definitions.
You can now use Animation Composite assets with Motion Matching to set sequences of animations that must play in order.
Removed support for
UPoseSearchFeatureChannel_Pose::SampleTimes
.
Rigging
New:
You can now reorder elements of the rig in the Hierarchy view using drag and drop.
Added a new node to create an array of items out of a fixed item list.
When dragging and dropping elements in the Control Rig's Hierarchy view, the list wil auto-scroll when moving the cursor to the boundary of the view.
Added new graph nodes that you can use to get and set the rig's control settings during the construction event.
Added a new set of Control Rig Make nodes in order to use other variable values such as Vectors, Transforms, and more.
You can use the new hotkey command, Ctrl-G to Go To a specific instruction in the execute stack view.
Once a pin of a Control Rig template node is resolved, it will add a preferred type. This change is also reflected in the API, as once a template pin is resolved, it will not unresolved unless manually unresolving the node.
You can now use Anim Controls to drive other Control Rig Controls.
You can now select any Mesh that uses a compatible Skeleton asset, as a Preview Mesh.
Using the Skeletal Mesh Modeling Tools plugin, you can now use a utility function in the Content Browser to convert a Static Mesh to a Skeletal Mesh using a reference Skeletal Mesh asset and its associated Skeleton asset.
Several Improvements have been added to
AnimToTexture
:Improved
UpdateMaterialInstanceFromDataAsset
by settingUVIndex
, Animate, andNumBoneInfluences
.Renamed several Material parameters.
Fixed Static Mesh bounds.
Setting Static Mesh
FullPrecisionUVs
only to a given LOD.Forcing
PowerOfTwo
for 16bit precision.Added 16bit precision for Vertex Mode.
When creating Splines in Control Rig, you can now create Closed Splines by enabling the Spline from Points node's Closed pin.
Added the Deformer Graph source library
DSL_Matrix
which contains useful shared matrix functions.Added the new experimental plugin, PoseCorrectives, that you can use to set up corrective pose behaviors. The new plugin contains similar functionality to the Pose Driver node but features a more interactive workflow.
Added the console command
r.MeshDeformerMaxLOD
that you can use to disable mesh deformers below a fixed LOD.Added new Inline function bytecode to the Control Rig. Functions are now only compiled once and their bytecodes are inlined when function references are found.
You can now promote Control Rig node Pins to Interface Pins when inside a function or collapsed node.
Added a new half edge connectivity data structure that you can use in the Deformer Graph.
Improvement:
Control Rig Controls are now always selectable even if they uses a translucent material.
Buffer creation is now done per-instance at runtime.
Control Rig Components now tick the Post-Process AnimBP with the correct delta time instead of a zero delta time. Previously a tick with a zero delta time could cause any present Rigid body anim node in a PPABP to stop working.
Crash Fix:
Fixed a crash that could occur when loading a Control Rig with an invalid parent class.
Fixed a crash that could occur when exiting PIE when the Control Rig editor is attached to a Control Rig instance in PIE when debugging.
Bug Fix:
Fixed issue where
AnimNode_LayeredBoneBlend
was not updating the blend weights correctly when using a LOD Threshold.The Deformer Graph Shader Text Editor now updates tab names according to the name of corresponding custom kernel nodes.
Custom Deformer Graph Kernel nodes now show the user-defined names in the graph.
Fixed the Curve Expression plugin's verify button in the Remap Curves from Mesh panel.
You can now copy/paste Custom Compute Kernel node's parameter bindings in the Deformer Graph.
Fixed a bug that could cause the Apply To Asset button to not save the preview mesh setting with Deformer Graph assets.
Fixed a bug that could occur when copying and pasting Deformer Graph nodes.
Runtime
New:
Exposed access to Curves, TickRecords and Graph Data from UAnimInstanceProxy.
Improved Animation Modifier Error Handling with Dll Export.
You can now batch apply modifiers by script to the FApplyModifiersScope object using Python or Blueprint Scripted Actions.
Added a new tree view for Animation Curves.
You can now use
UseTreeViewForAnimationCurves
andAnimationCurveGroupingDelimiters
to enable tree view for curves in an Animation Sequence Editor Checklist.
Added additional settings in the Animation Editor and Timeline:
Unreal now supports multiple delimiters, which default to "._/|\".
Unreal now supports path compression, "A.B.C" and can be presented as one node instead of three if B is the only child of A.
Unreal now supports reused names for both curve & path. For example, curve "A.B" and "A.B.C" can exist at the same time.
Unreal now supports name collision with different delimiters. For example, "A.B", "A/B" and "A_B" can exist at the same time.
Additionally you can now access the Remove Curves & Edit Curves Context menu actions.
Added the ability to edit multiple curves simultaneously inside of the Animation Editor by adding/removing curves of interest
Added a new custom Animation Blueprint option for additional meshes in animation preview.
Added a setting for Animation Modifiers you can use to reapply the modifier post owner change.
Exposed the add_socket method to the SkeletalMesh class in Python API.
Added a new validation and visual warning to Animation RigidBody Nodes that will display a warning on the node in the AnimGraph if the referenced bones are missing.
You can now play Animation Composite assets in the Random Sequence Player node.
Exposed functionality on Blend Spaces to force snap to a passed input.
Added Blend Space player library to support editing blendspace players.
Manually set Skeleton asset compatibility is now bi-directional. Specifying a compatible skeleton A -> B, now implies B -> A.
Skeleton compatibility is now an editor-only concern. The runtime will attempt to match skeleton assets via name -> name mappings. Only the editor will prevent assigning incompatible skeletons, for example, in asset selection properties.
Skeleton compatibility checks in editor can now be disabled in the Editor Preferences, and each asset picker now has a filter toggle in its View Settings that allows you to see non-compatible skeleton assets.
You can now copy and paste data in the Animation Curve Viewer.
You can now use the Montage tracks in Rewind Debugger to observe montage data. Montage assets can also be opened by double clicking the asset in the track.
Improvement:
Improved Custom Attributes project setting naming.
MLDeformerComponent::FindSkeletalMeshComponent
now returns nullptr instead of the first available SkelMesh in the event that no matching SkelMesh is found.Skeleton Compatible is now determined using a more optimized
IsCompatibleSkeletonByAssetString
method that doesn't rely on the asset manager.Several improvements have been made for
LookAt AimOffset
: You can now useShowDebug Animation
.Input filtering is now accessible.
Allows the source or pivot to be a bone or socket.
Added an option to display filter categories as sections rather than submenus to
SBasicFilterBar
.When browsing to assets by clicking hyperlinks in the Rewind Debugger Details panel, the tool will now navigate to the appropriate frame in a referenced AnimSequence, Blendspace or Montage (pausing playback on that frame), and will also set the BlendSpace X/Y Parameters in the editor preview after opening a blend space.
Blend curve rendering has been improved in the Rewind Debugger to both improve performance, and display overlapping curves more accurately.
Blend weights curves are now rendered as a bar graph, rather than a smooth curve, where the width of each bar is the duration of the frame.
If the same AnimSequence is playing in two different places in the graph with different blend weights, it will now display as alpha blended overlapping bars on the same frame; previously this behavior was rendered as a jagged curve.
The Rewind Debugger's eyedropper tool for actor selection, is now disabled when player control has not been ejected. Additionally, a tooltip has been added to explain that you must eject player control first, before using the eyedropper tool.
The Reset to Default operation in Blend Space axis Min and Max properties has been explicitly disabled because it causes various issues.
Crash Fix:
Fixed a crash that could occur when using the Pose Handler AnimBP node, where it was using the bone container without first checking if it was valid.
Fixed crash that could occur when a USkeletalMeshComponent is created as a DefaultSubObject of another component.
Fixed a crash that could occur when deleting a Skeleton used by a Skeletal Mesh Component instance, which also uses a post-processing animation instance.
Fixed an issue that could cause a crash when cleaning up invalid Blend Profile entries leading to OOB access when more than one entry is removed at once.
Fixed an issue that could cause a crash when splitting a post process settings pin on a Property Access node.
Fixed an issue that could cause a crash when selecting a curve after removing transform curves in an animation sequence.
Fixed an issue that could cause a crash by right-clicking a modify curve node in a template animation blueprint.
Fixed an issue that could cause the Animation Asset editor to crash when a preview skeletal mesh executes a raw delegate on an already destroyed preview mesh.
Fix a crash that could occur with the
AnimationViewportClient
, when the preview mesh has been destroyed before the client destructor has been called.Fixed an issue that could cause a crash when accessing out of bounds notify index after deleting an Anim Notify in a montage.
Fixed an issue that could cause a crash when deleting an Animation Blueprint asset.
Fixed an issue that could cause a crash when deleting a curve then validating its asset post-save.
Fixed an issue that could cause a crash when using a Skeletal Mesh Component, when the Leader Pose Component is a Poseable Mesh Component.
Fixed an issue that could cause a crash when using the Skinned Mesh Component when overriding vertex colors or skin weights and then performing any change that rebuilds LOD information, such as changing the displayed mesh.
Fixed an issue that could cause a reinstancing crash when using a custom anim instance proxy as a linked anim graph.
Bug Fix:
API can occasionally suppress warning or error dialogs when applying modifiers from script. 'YesToAll' and 'NoToAll' will now not be respected when both error and warning are thrown from the same modifier class.
A bug was fixed that could cause an error when transferring Aniamtions Modifiers to a new Skeleton when the ownership of 'PreviouslyAppliedModifier' was from an animation modifier instance of the animation sequence being applied. Stateful animation modifier can now be reverted correctly (Applied modifier instance is no longer reverted after OnApply call)
Previously when transferring an Animation Modifier to a new Skeleton, the USkeleton would be dirtied everytime the modifier is applied to an animation sequence.
The
CanRevert
andOutOfDate
status for the Animation Modifier on the Skeleton did not reflect the true status of all animation sequences referencing that skeleton.CurrentAnimSequence/CurrentSkeleton was not set on OnRevert().
IAnimationDataController::FScopedBracket
was not open on OnRevert() before re-apply modifier
Unreal will now consider Unreal Engine's Skeletal Mesh bone naming system when importing non-base-LOD Skeletal Mesh assets.
Fixed a bug that could cause Additive Transform tracks on an Animation Sequence to not be enabled/disabled.
Fixed a bug that could cause an error when using a BlendMask on a Layered Bone Blend node playing back on a compatible skeleton.
Fixed a bug that could cause the "Allow incompatible skeletons" property's state was not saved to config files.
Fixed a bug that could occur when mirroring Animation Attributes, that caused assigned bone indices to not be remapped correctly.
Fixed a bug that could cause CTRL+Z/CTRL+Y to not undo/redo changes to some Preview Scene settings.
Fixed a bug that could cause Animation Curve LOD settings to be lost when merging two (or more) Skeletons together.
Fixed a bug that could cause PoseAssets to not correctly be evaluated for compatible Skeletons due to bone index mismatches.
Empty tracks are now removed to ensure track key count is consistent with the data model.
Fixed a bug that could occur by protecting against a null source object when handling re-instancing in custom property nodes.
Fixed a bug that could cause Animation Notify States to be ended when CustomTimeDilation is set to zero.
Fixed a bug that could cause 'reachable garbage object' errors in anim BP thumbnail preview scenes.
Fixed a bug that could cause distorted meshes when assigning assets that rely on skeleton compatibility.
Fixed a bug that could cause index mismatch/out-of-bounds access when drawing bones using Pose Watch that doesn't use the full set of bones.
Fixed several truncation errors in the
AnimationCore
,SkeletonEditor
AnimationBlueprintEditor
,AnimationGraph
, and AnimationGraphRuntime modulesSwapped ordering of 'Use Selected' and 'Browse to Asset' Skeletal Mesh asset context menu options to match the rest of the editor.
Fixed a bug that could cause Anim Notifies in a sequence to not be triggered when played on a slot node inside a linked animation blueprint.
Fixed a bug that could cause a Mirror Data Table asset to not automatically add sync markers during creation.
Fixed a regression that caused Anim Notifies from all the animations within a montage to be queued as standard notifies and skip the slot relevancy check before triggering the animation events.
Fixed a bug by adding a test of bone index validity in animation Pose Assets to avoid runtime failure in rare conditions.
AimOffsetLookAt and RotationOffset blendspaces now correctly validate for dynamic properties.
Fixed a bug that could cause irregular performance, by skipping updating compatible assets in the asset family shortcut bar, if the asset registry is still loading assets.
Fixed a bug that could cause Anim Sequence Curve colors to be reset to white.
Fixed a bug that could cause the Anim Timeline Trimming tools to create invalid key data.
Fixed a bug that could cause incorrect out-of-bounds access when using retargeting.
Fixed a bug that could cause OrientAndScale retargeting to not function properly in the presence of skeleton remapping.
Fixed a bug that could cause check() to not operate correctly when deleting certain configurations of Anim Notifies or Notify States.
Fixed a bug that could cause an error in the level of detail bone reduction calculation, as it was showing incorrect counts when performed from the Skeleton Tree.
Fixed a bug that could cause the BoneContainer's
SetDisableRetargeting
property to be ignored for packaged projects.SetDisableRetargeting
now works in both editor and packaged projects.Fixed a crash that could occur when generating thumbnails for cooked additive animations.
Fixed a bug that could cause a
AnimNodeReference
check assertion to not function properly.Fixed a bug that could cause Animation Sequences to not trigger Notifies if the sequence preview is dragged all the way to the left of the sequence.
Fixed a bug that could cause out of range errors when using the Random Player AnimNode, due to precision rounding errors.
Fixed an issue that could cause a crash when using the AnimInstance display debug, when a montage ends while blending physical animation.
Fixed a bug that could cause Animation Attribute data to not update when reimporting data from the source FBX file.
Fixed a bug that could prevent the creation of a child animation blueprint via the content browser.
Fixed a bug that could occur when the leader-pose component was used in construction scripts, which could cause distorted meshes.
Fixed a bug that could cause attached actors such as weapons to not display properly while scrubbing in Rewind Debugger
Fixed a bug that could cause debug data to disappear in the Rewind Debugger when Animation Blueprints are updated and compiled during a single PIE session. Now, debug data will still display correctly, but data will be listed as a new AnimInstance track, with new sub-tracks for Blend Weights, each time you recompile.
Fixed a bug that could cause a sync group's start position to be ignored.
Fixed a bug that could cause copy and paste functionality in Blend Space axis Min and Max properties to not operate correctly.
Fixed a bug that could occur in the Rewind Debugger that caused the debug components and tracks for the selected Actor to be filtered out based on incorrect lifetime information.
Removed:
Disabled 'resync to sync group' functionality for sequence and blend space evaluators, as they generally should be driven with explicit time.
Dragging functions into the Animation Blueprint from My Blueprint is now disabled, as the functions are not usable in the Animation Graph.
Sequencer
New:
Added sub-components support when constraining an actor with Skeletal Meshes to be consistent with the attach track workflow.
Added an option to the ObjectID pass to decide whether or not to include transparent objects. If included, they will write to the ObjectID pass as opaque pixels.
Camera Cut Track section now has more information when a camera cut is not found.
Instead of just showing no label it will instead specify if there is no binding specified, or if there is a binding specified it will say that the binding/object cannot be found.
Added a simple auto-completion widget to the Config Editor UI that will helpfully suggest possible format tokens when you type a "{" in the File Name Format field. This doesn't change which tokens are supported and this does not work in the Output Directory path (as it already has a customization). This also enables support for double-click selection in the footer text and allowing copy/paste from the footer as another way to get the format tokens.
Media tracks can cross fade in Sequencer.
Added axis filters for translation, rotation, scale, and parent constraints to specify what axis it operates along.
Added native accessors for common float/color light properties to improve performance when setting them after sequencer evaluation.
Holdout and visibility flags can be controlled by sequencer/blueprints.
You can now toggle an autocomplete property for console variable entries in the Console Variables setting.
Added new Console Variables Editor presets to the "Console Variables" setting. You can use any number of presets with your project.
Added a new filter button to the Sequencer Content Browsers.
CameraRig_Rail
private methods and properties have been made protected so that the child class has access.Take Recorder now records using auto keys.
NLA now exposes the Start Offset for Translation and Rotation, and also exposes the Skeleton to Blueprints and Python.
You can now use new Sequencer commands for key context menu items, such as Set Key Time, Rekey, Snap To Frame, and Delete.
You can now assign a color tint to Sections in Sequencer, which will be blended with the track color.
Added a menu to set a Section's color tint from a list of user-defined color tints to the Project Settings.
Skeletal Track Editor's skeleton color for the animation clips are now based on the section color if defined. Otherwise, it defaults to the original hardcoded colors.
You can now view a Seqence's Frame Count and Duration using a new display.
The MRQ UI now allows CVars to be toggled. By hovering over a CVar property a tooltip will be visible that describes the CVar's functionality, as well as a value resolution tooltip to indicate where the CVar value originated such as the startup value, the preset value, and the value set in MRQ.
When using CVars with MRQ, the Console Variables settings will now display a UI warning if the sequence having its settings modified has at least one CVar track in the Sequence. Sub-sequences will also be searched for CVar tracks. For the warning to display, the CVar track must not be muted, and contain an active section that contains set CVars.
You can now register additional film overlays for Level Sequence assets.
You can now Group Sequencer properties using the property in (+) Track menu by their defined Category, if it exists.
The Window > Cinematics > Sequencer menu item is now always clickable. If there is an existing Sequencer window, the Editor will focus your view to it when the menu item is clicked.
The Console Variables setting now displays a read-only view of the CVars within each CVar preset that has been selected.
Sections will now be cleared when a control is deselected, otherwise they may not be deselected in the non Sections To Key.
You can now use the new CVar,
ControlRig.Sequencer.SelectedSectionSetsSectionToKey
in order to set the section to key based upon the current selected key area.The CVar is set to false by default.
Added the new SetSpawnableBindingID() which allows you to possess a spawnable binding from python/blueprints.
Added the new GetSortingOrder() and SetSortingOrder() to get and set sorting order for bindings through python/blueprints.
Pasted object bindings now operate more dynamically based on user input.
If there is no existing binding in the sequence being pasted into, the pasted binding will be bound to the original object. If there is an existing binding in the sequence being pasted into, a menu will prompt the user to select one of the following options:
Duplicate: Which will duplicate the bound object, resulting in a duplicated copy of the object with its associated bindings and tracks.
To Not Duplicate: Which will unbind the object, indicated with a red color in the UI. You can then rebind the object to a new parent object.
Added a new option to Reset Playhead When Navigating which resets the playhead to the start of the playback range when navigating in and out of subsequences.
Added a new AudioAssetName property to the Take Recorder's settings, that you can use to format the name of the audio asset file that is recorded. The default naming convention will use the following format:
Audio_{slate}_{take}
.Added generic support for hierarchical easing on sub-sequences, and dynamic weighting on level sequence players
This new feature allows seamless blending between sub-sequences using the familiar overlapping ease ranges. Blendable tracks contained within each will naturally blend together in the transition range.
A new API exists for specifying the global weight of a sequence, allowing completely different Sequences to be blended together using gameplay code.
Added Curve caching to the Curve Editor so curves are only recreated when something changes for massive speed ups.
You can now set the Additive From Base blend type to byte, integer, and perlin noise channels.
Added a new Quaternion (Slerp) blending algorithm for blending transform tracks using a 'shortest path' rotation.
Tracks that support multiple blending methods will now have a Blending Algorithm sub-menu within their context menu, which is used for choosing which blending method to use between assets.
Added the ability to assign console variable collections to console variable tracks.
Added the ability to set FK Control Rigs as Additive in both Python and Blueprints.
Add a new tooltip for track outliner items that shows property binding information.
Added new APIs to allow top-level channels to do extra drawing.
Improved the Seqeuncer's skeletal mesh animation track to run with the new ECS-based evaluation.
Added function to the Constraint Python and Blueprint APIs for adding, keying, and compensation.
Improvement:
MRQ has been updated with an overall streamlining of queue save and load workflows, similar to what was done for configuration presets.
You can now assign multiple characters for the generated Shot or Take naming property. For example, you can now define a take separator as
_v
so that the shot name can be generated as,MyShot_v001
.Numeric sliders in Sequencer now correspond with property metadata so that the behavior in the key editors is identical to the Details Panel.
Improved the context menu operations, Pre and Post infinity Extrapolation, Interpolation and Reduce Keys. These properties now affect only the selected channels, when channels are selected, rather than all channels of the section.
MRQ preset workflows configuration has been streamlined. The editing dialog now indicates the name of the preset being updated, and provides "Save" in addition to "Save As" options.
Renamed
CinePrestreaming
toCinematicPrestreaming
to match the Cinematic Prestreaming plugin's convention.The mutual component inclusivity API has been improved to provide a robust framework for defining mutually inclusive component types.
Fade tracks are now converted to ECS evaluation.
Template sequence menus are now only displayed on Actor bindings, and not on component bindings.
Marked frames in sequencer have been improved with a revamped look, improved UX, the ability to add a marked frame to the selection, and can be commented on using the Comment field.
ECS evaluations have been improved by performing a series of basic checks before dispatching tasks to determine if there are any irrelevant operations.
Fixed a bug that could cause issues when working with rigs that have the root animation at some bone beyond a direct child. The operation now searches the rig for the first bone with animation on it which enables the use of non-zero roots.
Now, when manipulating a root bone offset in the edit mode, edits must be made in the space of the start of the section, since that's the space that the edit is being performed.
The color of perlin noise curves has been changed, since the background color of sequencer sections has changed.
The ECS evaluation of perlin noise channels now uses the new EvalSeconds component.
A key's default Interpolation type will now be based upon the previous key set, rather than the default setting. The default setting is only used when setting the first key.
Tangents will now be modified to follow the curve when user or broken keys are set in Sequencer.
The Time Undo operation is now controlled by Sequencer using the TimeUndo Console Variable.
Channel evaluations have been optimized using a cached interpolation component.
During stress tests this improvement saves roughly 60% of evaluation time by removing indirection and increasing cache utilization.
This can be disabled or enabled with the
Sequencer.EnableCachedChannelEvaluation
console variable, which by default is enabled.
Added several new functions and improvement to Constraint Scripting:
Added a new function to remove Constraint in the Constraint Manager.
Exposed the CreateTransformableHandle to Control Rig.
Added the new TimeUnit to MoveConstraintKey, Compensate, and SetConstraintActiveKey so you can use display time.
Added the new GetConstraintKeys that will return an array of times and bools.
Set disabled styles for transport control buttons.
Crash Fix:
Fixed an issue that could cause a crash when removing keys on mouse up in the Curve Editor. Now insurance is made that the key handles are unique to prevent this issue. Additionally, a check is made to ensure the last dragged keys are up to date on mouse up.
Fixed an issue that could cause a crash when the Deferred Rendering setting has the Add Default Layer property enabled, but no stencil layers are supplied. This condition now generates an error.
Fixed an issue that could cause a crash when exporting an FBX and its
RootSequence
is null.Fixed an issue that could cause a crash when null animations are used in an animation section.
Fix an issue that could cause a crash when undoing the creation of a subsequence.
Fixed an issue that could cause a crash when using Match with Previous/Next with animation sections trim.
Bug Fix:
Fixed a bug that could cause undulating jitter in the cloth simulation when Temporal Samples are enabled. This was caused by the cloth simulation time step smoothing being enabled during renders.
Fixed a bug that could cause the UWorldSettings::MinUndilatedFrameTime/UWorldSettings::MaxUndilatedFrameTime to be modified and not restored after a render.
Fixed a bug that could cause the example Runtime Executor to always make a call to https://google.com when the editor launched. This issue was fixed by commenting out the code, but leaving it as an example for anyone building their own Executor class.
Fixed a bug that could cause the cache in media tracks to only be drawn for the first loop.
Added a workaround for the UI Renderer setting that could cause some Layout Widgets not liking the 720p PIE preview window (vs say a 4k render).
To activate this workaround, navigate in the Project Settings, to Movie Pipeline In Editor, and enable
bResizePIEWindowToOutputResolution
.Your PIE window is still limited by your monitor resolution so you will need to launch the editor with
-ForceRes
if you wish to render your project at a resolution higher than your monitor resolution.
Fixed a bug that could cause sequence tick managers, with budgeted frame evaluation, to reuse linkers with stale evaluation data, if the linker group was torn down in the middle of a multi-frame evaluation.
Fixed a bug that could cause the details panel "Add Key" buttons to only display for read only sequencers.
Fixed a bug that could cause the
-MoviePipelineConfig
argument to not be used with assets that existed outside of the "/Game/" directory, such as project plugins.Fix a bug that could cause added event functions to not reference parameters since the payload cannot be by reference.
Fixed a bug that prevented a hidden Sequencer tab to be brought to the front when the Windows > Cinematic > Sequencer menu option was used.
Fixed a bug that prevented stepping through frames from working correctly. Now auto-scrolling will only function if the setting is enabled.
Fixed a bug that could cause a Level Sequence blueprint from having invalid characters in its name.
Removed an auto-scrubbing behavior which animates the current time to the desired current time. This can be re-enabled through the CVar:
Sequencer.AutoScrub
.Fixed a bug that could cause an issue when calling
AddChildFolder()
from python/blueprints which would result in a folder being in two folders.Fixed a bug that could cause shot parsing so that if the current prefix is found at the beginning of the shot name, it will be stripped and the parsing of the shot number and take number will continue from there. This fixes a situation where shot prefixes can collide with parsing shot and take numbers because they are looking for the same separators. For example if the shot name is: sq050_shot0010_01, that should be parsed as shot 10 and take number 1. If the user specifies that the shot prefix is sq050, that portion can be stripped so it doesn't erroneously parse as shot 50.
Fixed a tooltip for channel colors so that it refers to key bars instead of track area.
Fixed an issue that could cause a crash by checking read-onlyness of level sequence assets before saving in the Take Recorder.
Fixed a bug that could cause copy/paste binding's descendant bindings to be pasted multiple times.
Fixed a bug that could cause Batch Edit Sections to not work for selected sections and not just the clicked on section.
Fixed a bug that could cause Control Rig additive sections for Rotation Controls to not function correctly.
Fixed a bug that could cause recorded multi-channel audio to not be separated out to different track rows.
Fixed a bug that could cause an FBX export to not be evaluated the start time in display rate, instead it was evaluated in tick resolution.
Fixed a bug that could cause the Animation Mode to discard the Advanced Tab if all of its properties were located in other sections.
Fixed a bug, to prevent infinite sections from being pasted on top of each other.
Fixed a bug that could prevent camera names from being sorted in the Camera Cut Section menu.
Fixed a bug to prevent infinite sections from being selectable and movable when hovering over keys.
Fixed a bug that could cause quat interpolation for consecutive keyframes in sequencer to not operate correctly at low tick resolutions.
Fixed a bug that could cause folders to be renamed when reordering them.
Fixed a bug that could start playback twice when using the spacebar and then down arrow. This issue could result in the latter view state being cached incorrectly, already hidden. From there on, the state is reversed, when the sequence is stopped, the viewport UI is hidden, when the sequence is playing, the viewport UI is shown.
Fixed a bug that could cause a crash when a null pointer check is activated on a missing or deleted Level Sequence asset. This can happen if you create a new take shot and undo it, or if the asset just goes missing, or is removed.
Fixed a bug that could occur when recording with the Timecode clock source, when the user has toggled off Start at Current Timecode, by automatically overriding it. Otherwise, the sequence would end up starting at 0, but the recording is actually at the current timecode.
Fixed a bug that could cause the cinematic viewport's transport range to go missing when switching sequences.
Fixed a bug that could cause rotation keys to spin irregularly when adding a key through the key editor buttons.
Fixed a bug that could prevent the use of a console variable's current priority level when setting a console variable from the Console Variables settings. This will ensure the value always gets set.
Fixed a bug that could prevent clamp scrubbing in the Cinematic Viewport from adhering to the playback range, when clamping is enabled.
Fixed a bug that could cause keys in collapsed tracks to be erroneously selected.
Fixed a bug that could cause a render to fail due to stencil layer names being incorrectly duplicated. Stencil Names are now de-duplicated, for both actor and data layers, before a render begins.
Fixed an issue that could occur with the MRQ, that caused an empty
v000
directory to be created when clicking on the output directory in the queue.Fixed an issue that could cause a crash when using the Sequencer Event Customization when the blueprint graph is deleted.
Fixed a bug that prevented adding a "Deferred Rendering" setting if one of the related settings, such as Deferred Rendering property being set to Lighting Only, is already added.
Fixed a bug that could cause asserts to fire during motion vector evaluation.
Fix a bug that could cause some UI elements to not correctly display for read-only sequences.
Fixed a bug that could cause the Pivot tool's click and shift options from working properly.
Fixed a bug that could cause copy and paste functions to not function properly with Procedural Control Rigs, by ensuring the initialize callback setup is not created until initialization happens with a bound skel mesh.
Fixed a bug that could occur when adding a constraint channel by ensuring curve and resync selections are recreated.
Fixed a bug that could cause scaling options to not operate properly when compensating parent constraints are present on components.
Fixed a bug that could occur when keying weighted control rig additive sections.
Fixed a bug that could cause a RPC stop event to wait from the server when a replicated sequence is played only on the client.
Fixed a bug that could cause overlays to be removed when not checked by all the viewports.
Fixed a bug that could display an incorrect index used for matching value composites.
Fixed a bug that could cause the First Frame Loop offset to cause animation to go out of range, which could cause errors in Montage playback.
Fixed a bug that could cause errors with array property handling in editor by adding property tracks for array elements and autokey.
Fixed a bug that could cause the initial value system to not work properly in interrogation linkers.
Fixed a bug that could cause a delayed drag on the initial position of the marquee drag to be incorrect by storing the value and ending the operation before the end drag happens. This also fixes an issue that could cause an error with test tangent lines when marquee dragging.
Fixed a bug that could cause material parameters to not retain blend channels.
Fixed a bug that could cause reversed dissected evaluation ranges when playing sequences backwards.
Fixed a bug that could cause value decomposition, which can occur when keying or auto-keying values, to add lots of comments, and add unit tests.
Fixed a bug that could occur when baking animations by turning off all constraint keys, removing all -1 keys, and all undoable keys.
Fixed a bug by changing the Sequencer's ability to change the Skeletal Mesh asset from a Skeletal Mesh Component in cooked builds.
Fixed a bug with the Curve Editor's Shift Drag mechanics so it locks immediately and reliably by using the last position instead of current position when it starts.
Fixed a bug that could cause a loophole where non-renameable tracks could be renamed by simply clicking on their label in the sequencer outliner view.
Fixed a bug that could cause a channel to be deleted while adding it by not removing a constraint when compensating.
Fixed a bug that could cause runtime issues when overriding a single float track channel with a perlin noise channel.
Fixed a bug that could cause an incorrect mirrored perlin noise curve preview.
Disabled the Add Section, Blending Algorithm, Edit/Batch Edit Sections right click menus if the sequence is read only.
Fixed an issue that could cause a crash when opening a new map and there is a Blueprint with an active actor sequence by clearing all references to a sequencer widget when closing.
Editing of channel overrides is now properly undoable, and works on multiple channel groups.
Fixed a bug that could cause occasional firing of asserts that indicate that an ECS evaluation system will miss a frame
Moving a Control without a key will now correctly set the value in Control Rig.
Fixed a bug that could cause blending values to be lost when pasting copied tracks and sectors with blending data.
Fixed a bug that could cause a sequence to be erroneously marked as dirty by marking the spawn register as being cleaned up.
Fixed a bug that could prevent linked Anim Sequence with nested sequences from saving.
Fixed a bug that could cause errors by clearing the
RF_Transient
flag on channel overrides and constraints after a copy and paste operation.Fixed a bug that could cause an infinite loop while trying to add a possessable to a template sequence.
Fixed a bug that could occur when recreating shapes by ensuring the shapes need to be recreated, in order to avoid performance issues with dynamically created controls.
Fixed a bug that could cause Control Rig shapes to be selectable by tweaking
IsSelectable
on ControlRigShape components so that it specifiesIsSeletactable
in the Viewport and the outlines. Controls are also hidden if the hosting component's actor is not visible.Fixed a bug by ignoring any attempt to restore a pre-animated state on objects that have gone away.
Fixed a bug with the hierarchical bias of sequences that could cause different active playing sequences to be considered together.
Fixed a bug that could cause the duplication of constraints by recreating proper constraint duplicates with the new duplicated objects and adding preanimated state for component constraints.
Fixed a bug that could cause errors when using the Match with Previous operation. This includes a root motion performance fix, because transformers are no longer cached and blended on demand instead, this greatly increases performance.
Deprecated:
Access and the ability to update
UMoviePipelineConsoleVariableSetting::ConsoleVariables
directly has been deprecated. You can now use the getter/setter methods instead, such asGetConsoleVariables()
, orAddOrUpdateConsoleVariable()
.
Removed:
CameraRig_Rail
's Mounted Mesh Orientation has been removed as it is unnecessary.
Synthesis
New:
Add a new option to include normals in the ML Defomer's generated morph targets.
Added support for masking the ML Deformer using color channels.
Added support for joint and curve groups in the ML Deformer's local model.
The ML Defomer's Play button in training mode now plays things, but doesn't calculate deltas, in order to make workflows more efficient and less time consuming.
The ML Deformer now extracts information about the importance level of each morph target, only in Neural Morph Model.
You can now set deformer quality levels when using the ML Deformer, which allows models to opt into. Morph models will disable morph targets based on this quality level.
The ML Deformer now dynamically updates and recompress morph targets without having to retrain.
The ML Deformer now stores raw deltas in the UAsset, and removes them on cook. This allows recompression even without training first. Also allows visualizing morph targets at any time.
Added documentation to the ML Deformer's python code.
The ML Deformer now skips saving some properties, like the deformer weight and ground truth lerp, to prevent saving a state where you wouldn't see the deformer being active anymore in your next session.
Added new ML Deformer statistics to show performance and memory usage.
Improvement:
Moved the Include Normals property in the morph target category out of the compression group.
Moved some of the
GetModuleChecked
functionality to run inLoadModuleChecked
.API refactors now require less code to create new models by introducing some new base classes you can inherit from.
ML Deformer's tooltips have been updated.
The ML Defomer's API has received more documentation.
Added a
SetWeight
andGetWeight
blueprint functions to control the weight of the deformer through blueprint.The ML Deformer's python script now shows more digits while logging the learning rate for increased accuracy.
The ML Deformer's python code has been refactored, placing shared code into the ML Deformer framework, which plugins can then import and use.
Renamed and grouped some ML Deformer properties to make things more intuitive.
The ML Deformer plugin is now in Beta.
The ML Deformer's API has been improved, making properties protected.
The ML Deformer now sets the correct section indices inside the morph targets, rather than just including all sections.
The ML Deformer now sorts the morph target deltas by vertex number. Perhaps this could help with some GPU caching.
The ML Deformer now detects changes in vertex count, and shows a warning in the morph target section, when dynamic morph updates aren't possible until after retraining.
Added progress bars to the ML Deformer when creating and compressing morph targets.
Crash Fix:
Fix an issue that could cause a crash related to opening an MLD asset, closing the asset editor, and modifying or reimporting the mesh.
Fixed an issue that could cause the ML Deformer asset to be in a bad state, resulting in crashes and weird behavior. This could likely happen when aborting during training, or changing assets after training, and saving.
Fixed a bug that could cause a crash by preventing dynamic morph updates when it is not possible.
Fixed an issue that could cause a crash when creating a new actor blueprint, with a skeletal mesh and ml deformer component, using the neural morph model set as ML Deformer asset, with the vertex delta model selected as the skeletal mesh component's mesh deformer.
Bug Fix:
Fixed a bug that could cause duplicated log messages.
Fixed a bug that could cause the UI to close unexpectedly when deleting or editing curves or bones in the include list.
Fixed some bugs that could prevent the sampling cache from being invalidated when changing certain properties.
Fixed an issue that could cause a crash when the local bone transforms on the skeletal mesh component were empty when using the ML Deformer.
Fixed a bug by changing the deformer graph for the morph model to the updated deformer graph path.
Fixed a bug that could cause caching issues with the deformer graph.
Fixed a bug in the reset to default button of the deformer graph.
Fixed an issue that could cause a crash when saving an ML Deformer asset where the source geometry cache asset it uses doesn't exist anymore.
Core
Cooker
New:
Implemented Soft Garbage Collection for the cooker. The command - trigger is a partial garbage collect when available physical memory reaches various thresholds. This significantly reduces the peak memory load of the cook commandlet for large projects, while adding only a small cost due to reloaded packages.
UnrealBuildTool
New:
Restored the ability to use XGE executor on non-Windows platforms.
Added support for early init scripts.
An option to allow using clang linker when using clang compiler has been added.
Added a GetPlugin method for ModuleRules.
Added better Plugin Project Support in generated projects.
Added Support msvc analyzer extensions to Unreal Build Tool Enable by setting ModuleRules.bStaticAnalyzerExtensions to true. It is recommended to use ModuleRules.StaticAnalyzerRulesets to filter the warnings that are reported as this will enable a large number of additional warnings. Please see the following links for more details: https://learn.microsoft.com/en-us/cpp/code-quality/using-the-cpp-core-guidelines-checkers https://learn.microsoft.com/en-us/cpp/code-quality/using-rule-sets-to-specify-the-cpp-rules-to-run
Unreal Build Tool now features a Cross Platform QMake Generator.
Bug Fix:
Fixed the action graph copy action on non-Windows platforms.
Added the -Project param to command line build params in generated projects.
Added additional debug output for makefile argument changes.
Fixes for generating the Rider project model.
Fixed an issue for writing make files with UTF8-BOM encoding.
Added support for coroutines, these are enabled by the bool variable bEnableCppCoroutinesForEvaluation in the Rider.
Moved tool projects into the proper subfolders for generated projects.
Made VSCode .ignore entries absolute.
Added fixes for metadata of UnrealBuildTool gexf export.
Added fixes for when Regex failed to parse AndroidClangBuild.
Editor
New:
Exposed the source path of DNA Assets to AssetUserData in the Skeletal Mesh Details Panel.
Browsing to Assets where the current settings would cause the Asset to be hidden now updates the settings of the active Content Browser to show the Assets. A toast notification displays which settings were updated.
OpenEXR: Added support for arm64 architecture on Linux.
FileName description field added to DNA Import Window.
Added arm64 architecture support for lmath, OpenEXR, OpenVDB and Boost on Linux.
Implemented context menu DNA Actions for Skeletal Meshes.
When enabling Defer Compression, the Texture Viewer now displays the uncompressed texture right away.
Defer Compression is not enabled by default on texture reimport.
Added a new TypedElements.EnableViewportSMInstanceSelection CVar, which can be used to enable or disable Instance Selection for Instanced Static Mesh Components in the Level Editor Viewport.
The File > Recent Levels submenu now contains a Clear Recent Levels command.
The Scalability Menu in the editor now works per Preview Shader Platform.
There is now an additional compatibility check between groom cache and groom asset done at import.
You can now choose how floating point textures are compressed by default. The legacy default behavior is to always use HDR F16. Two new good options to use are BC6H (for games) or F32 formats when the source is 32-bit (for VFX).
When one or more "undone" transactions are removed from the undo stack because a new transaction started, the editor now restores the removed transactions when the newly inserted transaction is removed because it's considered "transient" (it contains no record), similar to what happens in the event of a canceled transaction.
The tab manager now saves its layout as soon as you dock or undock a tab.
You can now exclude new CVars you define in code from being previewable so they don't change depending on the shader platform you preview in-Editor and remain set to the value set by the Editor shader platform.
Texture mip generation filter now clamps (instead of wrapping) at texture edges if the UV address modes are both set to clamp (for new textures with bUseNewMipFilter only). Has no effect on existing textures or simple average 2x2 mip filter.
Updated glTF transmission and MX transmission shading for Interchange.
Added a new Editor Preferences setting to set the maximum number of auto saves.
BMP image import now supports 16 and 32 bit bitmaps and most advanced formats.
Detected and deprecated the construction of a subsystem from Python with a message telling the user how to get the already existing subsystem singleton.
Textures now provide Blueprint functions to help detect nearly-empty textures: ComputeTextureSourceChannelMinMax and Blueprint_GetTextureSourceDiskAndMemorySize.
Disable Preview button is now named after the Editor Shader Platform.
Fixed reverting non-packages files from the changelist window that would never revert because they were not packages.
Made several optimizations to improve editor start up time.
Newly imported Textures now get configurable default properties from the Texture Import Settings in Project Settings.
Reimported textures now get their OodleTextureSdkVersion bumped up to latest.
Preview Shader Platform using different ShaderMaps and the DDPI/Cvar values of the Previewable Actual Platform NumPlatforms limit changed from 64 to 65536, limited by NumBits
The undo buffer will now output its size to the log file so that it is easier to confirm that it has been set to the correct size.
Removed check for UField for determining if a UObject is a valid asset for Editor scripting utilities.
Updated the Plastic SCM plugin to version 1.8.0 (from 1.6.2).
Added optional parameter bApplyComponentTransform to some MeshMergeHelpers::RetrieveMesh variants.
The Level Editor now has a new Show Subcomponents option that implements the ability to draw only the root components of the selection set. This option can help reduce visual noise when an Actor has multiple components with complex visualizers.
Added an option to the Size Map tool to include or exclude Editor-only dependencies.
Improvement:
Optimized in-Editor Geometry Collection component registration. This improves performance of operations like duplication of geometry collection-based objects or in-Blueprint property changes
Improved PNG import with simple transparency. The editor now uses better filters to propagate RGB color into transparent regions. Color propagation is only done on PNGs with simple binary transparency, not true alpha channels.
Virtual textures, when building, will now reuse the results from another platform as they never tile and can freely share results. This dramatically saves texture build time for multi platform projects.
EXR texture import now sanitizes floats to remove inf & nan.
Added support for importing Alembic with guides-only groom cache.
Optimized the source control changelist widget to handle a reasonably large number of files smoothly (5000-20000).
Added shared Linear Encoding. This is disabled by default and can be enabled with the r.SharedLinearTextureEncoding CVar. It allows texture builds for platforms that tile textures to reuse the base encoding if it's already been done by another platform, greatly speeding up texture builds for multi platform projects.
Optimized the process of checking if Asset thumbnails need to be dirtied when an object property changes to speed up entering PIE in some projects.
OFPA levels are no longer dirtied when copying and pasting Actors that aren't static brushes.
Revision Control History now displays file size with the best unit.
Crash Fix:
Fixed a crash associated with creating texture arrays in the Editor.
Fixed a race condition causing a crash in XBoxCommonDeviceDiscovery on Editor shutdown.
Fixed a potential crash when importing Alembic files as skeletal mesh that are too big to be imported.
Fixed a crash that happened when deleting more than one folder at a time from the scene outliner.
Fixed a potential crash when importing Alembic with completely invisible meshes as geometry cache.
Fixed a crash when exiting Paint Mode after deleting a Material that was being painted.
Fixed a crash in the ContentBrowser when the -nothreading option was enabled.
The import of Assets via the Asset Tools API now validates that the destination path is mounted and avoids crashing if this is not the case.
Bug Fix:
Fixed the Perforce source control API returning invalid file paths when the user's client spec root ends with a /or .
Fixed Niagara Assets destroying thumbnail data when loaded from a cooked package.
You can now import a DNA file with the same name as a Skeletal Mesh.
Fixed a bug in the Static Mesh Editor that caused toggling the Show > Vert Colors option to re-enable the environment map background even if Show Background was disabled in the Preview Scene Settings
Software cursor now takes into account screen DPI settings and shows the correct size on screen.
The 'Preview Rendering Level editor setting now correctly applies the values defined in platform device profiles to the p.RigidBodyNode and p.ClothPhysics CVars.
Fix a casting bug that was causing larger values of the config file setting [Undo]UndoBufferSize to be truncated.
Fixed an issue where the color curve editor wouldn't update when gradient stops were moved.
Fixed a Mesh Merge Utility bug where collisions of ISM components were not merged correctly. The editor now merges the collisions of all the instances in the ISM component, instead of a single collision instance using just the component transform.
Texture Viewer mouse wheel zoom is now a multiplicative factor instead of an additive factor. This fixes zoom getting very slow as it gets larger.
A Toggle Editable event type is now sent instead of Value Set when the edit condition state of a property changes (when. the inline checkbox is toggled), so that the editor can listen to properties becoming (un)editable
Thumbnails can no longer be saved as JPEG files with an incorrect .png extension.
Fixed Content Browser class permission list filtering always being recursive
Fixed an issue where the preview in the Paper2D Sprite Editor wouldn't update when adjusting the UV Coordinates.
Fixed cooked textures returning a size of 0,0 when queried by an editor.
Fixed large nonpow2 textures failing to build..
The editor now waits until the number of clients set for Play In Editor is committed by the user before saving the config file to improve performance of the Project Settings menu.
Fixed property display for ReadOnlyKeys.
Fixed the UnsavedAssetsTracker being invoked on a background thread and firing delegates to code that assumes everything happens on the game thread.
Copy operations no longer modify world transforms.
Fixed a bug where turning off StreamableRenderAsset FResourceSizeNeedsUpdating was causing multi-second hitches in the editor when the camera moved.
Fixed possible out-of-memory issue with the FSourceControlFileStatusMonitor reserving -1 items in an array.
Removed an ensure that could fail while reading from a valid texture that had no source art.
Fixed 6-image array DDS files being imported as cube maps.
Fixed Advanced Copy not fixing up external actors reference to packages that were part of the copy.
Fixed an issue where diffing files could fail when using Git LFS.
Fixed GetDefaultTextureFormatName logic so that a CompressionSettings TC choice of an uncompressed format is preserved and constraints that force use of uncompressed don't cause unnecessary format changes.
Undo history now properly cleans up the transaction details view when clearing the undo stack.
Fixed a bug that caused changing the filter on a texture not updating materials in the editor.
Fixed dragging a texture on a cube when a material already exists, and added some protection against redirects in similar cases.
A PreviewPlatformName with NAME_None in MaterialShaderQualitySettings is now correctly considered valid.
Fixed packages not being marked as dirty when undoing post-save.
The undo buffer is no longer cleared when saving newly added or deleted One File Per Actor (OFPA) actors.
Auto-save now includes newly created packages.
Geometry collections are now properly rendered in their Blueprint owner thumbnail.
Fixed Geometry Collection Asset thumbnails not being properly centered.
Fixed an issue that prevented undoing changes after exiting PIE.
Fixed an issue in the history window where strings that began with whitespace could show as empty in the description column.
Standardized changelist description single line to a helper function to ensure the changelist window and history window have consistency.
The number of embedded geometry elements in the Fracture Editor now displays properly when no geometry collection is selected.
Fixed an issue with Mode Manager where ActorsDuplicatedNotify was not called in some cases.
Fixed cases where bCooked could get mistakenly unset when serializing a Class during reference collection in cooked versions of the Editor.
Fixed an error that caused unexpected behavior in the color picker.
Fixed the import of UDIMs being broken when using JPEG files and Interchange.
Fixed the text alignment in the Automation window so that it doesn't overlap under certain conditions.
Fixed a bug where unsaved Assets could fail to open in their associated Editors in certain situations.
Fixed Actor meshes vanishing from Editor viewports after building lighting, geometry, or navigation.
Fixed an issue where components had inconsistent behavior between their gizmos and the Details panel when the component had absolute location turned on.
Fixed a hang that could occur in the Editor when waking the PC from sleep after about an hour.
Restored the Make Writable button in PromptToCheckoutPackages when the source control provider didn't use readonly flags.
Fixed crash when reloading .umap assets that have a level blueprint using macro graphs or event dispatchers.
Fixed an issue where pitch would never lock in the level editor when rotating the perspective camera.
Disabled the menu option for viewing the changelists window if changelists are not supported by the current revision control provider.
LOD previews now get the correct per-platform screen size.
Fixed CanvasText offset causing text to be blurry.
Deprecated:
Deleted Crunch source code. Crunch is no longer used by Unreal Engine.
Datasmith
New:
Boost: upgraded the engine version of the third-party Boost libraries to version 1.80.0.
MaterialX: upgraded the engine version of the third-party MaterialX libraries to version 1.38.5.
USD: upgraded the engine version of the third-party USD libraries to version v22.08.
Solidworks: Optimized export speed.
Solidworks: Components suppressed in every configuration are not exported anymore.
Solidworks: suppression state of components is not changed during export.
[glTF] If dual clear coat normals are disabled in render settings, they are ignored and Unreal Engine issues a warning when clear coat materials are exported to glTF.
[glTF] Replaced UGLTFExportOptions::ExportLights (int32) with UGLTFExportOptions::bExportLights (bool)
Made the following improvements to the USD Stage Actor C++ interface: C++ code can now set the USD Stage directly, it is now possible to get and set the currently isolated layer, and derived C++ classes can now access and override more functionality.
Improved the mechanisms for automatically attaching USD Stage Actors to the USD Stage Editor. For example, the corresponding play-in-editor (PIE) version of the USD Stage Actor is now automatically attached when going into PIE, and the USD Stage Editor now automatically attaches to the correct USD Stage Actor whenever a child actor is selected on the World Outliner and the Selection Sync USD Stage Editor option is enabled.
[glTF] The glTF exporter now uses Unreal engine's material analysis.
[glTF] Improved reuse of texture samplers in exported glTF files.
[glTF] Improved material baking of the following expressions when exporting to glTF: TransformPosition / TransformVector, ObjectScale, and LocalPosition.
[Solidworks] Assembly exports variants for Parts with different visual appearance in different configurations.
Added the console variable "USD.DiscardUndoBufferOnStageOpenClose". The console variable makes it possible to discard the transaction buffer, and prevent Assets and Actors generated from USD from being recorded into it when opening a USD Stage. This can help when trying to open large scenes with a restricted memory budget.
[Solidworks] Display states for configurations are now exported as variants.
[glTF] The glTF exporter now uses Unreal engine's material baking.
USD Stage Actors now reference an instance of an experimental new Asset type called "USD Asset Cache", which owns all the Assets generated when opening USD Stages. It allows all USD Stage Actors to share the same Assets, and retain those assets (up to configurable limits) even when no USD Stage Actor is currently using them. The USD Asset Cache can be constructed from the Content Browser, like any other Asset.
The Details Panel of USD Stage Actors now contains an "Open in USD Stage Editor" button that opens or reveals the USD Stage Actor and automatically attaches to it.
When exporting Unreal Engine materials to USD, baked textures with the same color value for all pixels write that color value directly on the exported USD material. There is a new option on the export dialog, called "Constant Color as Single Value", that toggles this behavior. When the option is disabled, the exporter emits the full resolution texture.
A new library called "UsdStageEditorLibrary" can now be used from Python or Editor Utility Blueprints in order to interact and interoperate with the currently opened USD Stage Editor.
Added support for running export tasks in runtime for formats that allow it. For example, glTF.
The USD import options dialog now contains an option to "Import at Specific Time Code". If that is option enabled, you can specify a Time Code at which to sample the stage when importing Assets and Actors. If that option is disabled, the stage is imported at the default (not animated) time code.
[3ds Max Exporter] Changes to custom object properties now sync with DirectLink.
The USD Importer plugin now parses only materials and textures that are actually used by prims, and the current material purpose, when you open USD Stages. When importing, the advanced option "Import Only Used Materials" toggles this behavior.
The "USD.CollapseTopLevelPointInstancers" console variable now controls whether to collapse top-level USD point instancer prims. Previously, this feature was controlled by an import option and USD Stage Actor property.
It is now possible to specify custom reference materials to use when spawning material instances while opening or importing an USD Stage. You can configure custom reference materials from the Project Settings, in the "Engine - USD Importer" (search for "USD" to find that section quickly).
When editing an USD Stage with multiple sublayers and animations,you no longer have to set the correct layer edit target to unlock the corresponding Level Sequence. Changes to a particular LevelSequence always affect the corresponding layer automatically.
It is now possible to set the stage options on the USD Stage Editor window without having any USD Stage Actor attached.
It is now possible to collapse Xform hierarchies with a single Mesh prim when opening or importing USD Stages. Previously, at least 2 Mesh prims were required.
The USD Stage Actor picker on the top-right of the USD Stage Editor window (Windows > Virtual Production > USD Stage) now displays the USD Stage opened for each Actor, if any.
The USD import and export options dialogs now remember the last set sizes.
[3ds Max Exporter] Fixed texture sync when multiple texmaps can use the same image file.
[3ds Max Exporter] Added more output statistics for baked textures.
[3ds Max Exporter] CoronaLegacyMtl opacity is now supported.
The USD Importer now generates Two-Sided versions of materials if they are assigned to meshes that are marked as "doubleSided" in USD.
The USD Importer plugin now properly assigns material overrides to Components spawned by a USD Stage Actor, and writes those assignments to the USD Stage, even if the Components represent collapsed meshes.
Increased the maximum number of skeletal mesh vertex influences that can be parsed from USD Stages from 4 to 8. Unlimited influences can also now be used if that option is enabled in the Unreal project.
[glTF] Added a default value of (empty set) to the "SelectedActors" parameter in the "ExportToGLTF" Blueprint function.
Bug Fix:
Fixed regression from UE 5.0. Direct Link now reconnects to source for previously imported Asset.
[Solidworks] Fixed an issue where a MeshActor loses its mesh on Sync when a Part changes.
[3ds Max Exporter] Fixed mesh quality for Body Cutter.
Fixed an issue where the collapsing mechanism used to parse USD Stages could consume Light and Camera prims and never generate anything in the Unreal level.
Solidworks: Made fixes to MotionStudy animation export.
[glTF] Fixed an issue where material baking incorrectly skipped some properties, based on the material's blend mode, when exporting to glTF.
[3ds Max Exporter] Fixed DirectLink sync for modifiers that do not send a CHANGE event. For example, Body Cutter.
DatasmithDirectLink: Fixed a crash that could occur when receiving a DirectLink message while Unreal Engine is shutting down.
Solidworks: Fixed export of animated rotation.
[glTF] Fixed a crash that occurred when trying to export Rect Lights to glTF.
Fixed an issue where some Level Sequence transform tracks were ignored when exporting Level Sequences to USD.
[3ds Max Exporter] Removed the file extension from the scene / DirectLink name.
The Unreal Editor now shows an error message when the export of a Level or Asset to USD fails because the target output layer already exists in USD's internal registry of layers.
Fixed an issue where some USD Stage import options were not pre-filled in the import options dialog when using the "Actions > Import" command in the USD Stage Editor.
[Solidworks] Fixed an issue where the exporter would not install if only the 2023 version of Solidworks was available.
[Datasmith Revit Exporter] Fixed Duplicated IDs for Level elements.
Fixed an import bug that generated artifacts in texture display.
[glTF] Fixed conversion of light intensity from non-candela units when exporting to glTF.
[Solidworks] Fixed the export of Part materials in multiple configurations.
[Solidworks] Fixed infinite reimport that occurred after deleting a component when auto sync is enabled.
[Solidworks] Fixed an issue where material modifications were not detected.
[Solidworks] Fixed various plugin stability issues that occurred when disabling / re-enabling the Solidworks plugin, including an issue where the DirectLink source disappeared.
Fix an issue where static meshes generated when opening or importing USD Stages did not receive material assignments if the corresponding prims only had material bindings with specific material purposes.
[SketchUp] Fixed an issue where textures are not exported when the destination folder doesn't exist.
[glTF] Fixed URIs not being percent-encoded and sanitized in glTF exports.
[3ds Max Exporter] The Datasmith ribbon toolbar is now available on localized versions of 3ds Max.
[glTF] Fixed an issue where incorrect alpha factor was exported to glTF for certain materials.
[Solidworks] Removed negative scaling of exported light transformations.
[glTF] Fixed detection of all TransformVector and TransformPosition material expressions to determine the necessary baking mode when exporting to glTF.
[glTF] Fixed conversion of binormal vector sign in the vertex tangent data exported to glTF.
Fixed an issue where editing USD skeletal animations with Control Rigs wouldn't work for rigs that modified their own topology on the "Construct Blueprint" event.
Fixed an issue where payloads or references to prims on the USD Stage Editor were not added in some scenarios.
Deprecated:
[glTF] Removed support for all custom Epic extensions from the glTF exporter (in anticipation of upcoming support for official Khronos extensions).
[glTF] Removed UGLTFExportOptions::NoLossyImageFormatFor
[glTF] Removed UGLTFExportOptions::bStrictCompliance. It is always enabled now.
The actors spawned by an USD Stage Actor no longer have the SequencerActor tag, because the World Outliner can now display transient actors by default.
[glTF] Removed UGLTFExportOptions::bIncludeGeneratorVersion. It is always enabled now.
[glTF] Removed UGLTFExportOptions::NoLossyImageFormatFor
Deprecated the option to "remove Unreal materials" when exporting assets and levels to USD, because it is not for the new method of exporting Unreal material assignments that use dedicated Material prims.
Framework
New:
The Interactive Tools Framework class
UInputRouter
now supports updating modifier key states on the active mouse capture when the modifier keys change but the mouse hasn't moved.Synchronized the scrolling between left and right details panels in UE Asset Diffs.
UCombinedTransformGizmo
now supports both Relative and Absolute (world-space) position and rotation snapping. Previously, it only supported Absolute World-Space grid snapping. Relative is now the default, similar to the standard UE Gizmo.Added an option in
FUnrealEdMisc::RestartEditor()
that can specify additional commandline arguments when restarting the editor.Extended
SGraphActionMenu
so that owners can directly provide the action menu source list at refresh time.Added a hook for external sources to override the editor's main window on startup, emulating how the project browser works.
Upgraded revision control menu to be more responsive, consistent, and available under the Asset menu in editor windows.
Changed behavior of "Checkout" to "Sync and Checkout."
Added "Make Writeable" and "Revert Writeable" actions.
Only show actions that the current revision control provider can support.
Crash Fix:
Fixed a crash that occurred when attempting to duplicate a level blueprint.
Bug Fix:
Added
__class_getitem__
toPyWrapperArray
,PyWrapperFixedArray
,PyWrapperSet
, andPyWrapperMap
. This supports Python type hinting when usingunreal.Array
,unreal.FixedArray
,unreal.Set
orunreal.Map
to hint a method's input parameters, its return value, or when they are declared globally.Fixed Python GIL deadlocking with reinstancing objects.
Fixed python type hinting for
unreal.get_editor_subsystem()
andunreal.get_engine_subsystem()
to hint the correct types.Project Launcher now supports multiple
.target.cs
Build Target files.Find the best available D3D device for standalone Slate applications. This uses similar options as RHI D3D11.
Fixed bad memory access in AssetThumbnail that occurrs when ThumbnailMap is destroyed due to going out of scope.
Landscape
New:
Added a setting to enable distance field lighting for LandscapeGrassTypes.
Added a single method in ULandscapeSubsystem to force regenerate the grass at runtime. This can flush all grass on landscape components and update them all (synchronously, optionally), using an optional list of camera locations in case one wants to regenerate grass around another location than the streaming manager's viewpoint location.
Implemented a fallback for water surface depth sampling in underwater post process on mobile. It now intersects the camera to pixel ray with a horizontal water surface located at the water Z at the view position.
Optimized mip upload by unlocking all mips at once, to avoid recomputing FTextureSource's hash for each mip that is written to (on a landscape with ~256 components : 170ms -> 50ms for reading back heightmaps/weightmaps)
Added ability for users to select which Landscape is the target of Landscape Spline Actors.
Added the bEnableCullDistanceScale property to Foliage that can be used to scale cull distance per platform.
Improvement:
Added cosmetic improvements to water-related Details panels.
Landscape Layer Weight/Sample/Switch's title can now be edited directly in the graph, similar to Texture sample material expressions.
Bug Fix:
Fixed a crash when using alpha brush/pattern landscape tool and improved support for various cases with the alpha brush texture.
Fixed a crash when listing textures (listtextures cmd) after having deleted a landscape actor.
Fixed a crash when force deleting a material which has (Landscape) material instances. The UMaterialInstanceConstant's Parent field is force-serialized to null.
Fixed important slowdown when using a landscape brush with a large radius
Workaround for the D3D12-only bug that randomly generates invalid landscape tiles on global merge.
Changed the outer of the Nanite static mesh. Using the package as the outer allows to avoid duplicating the mesh when entering PIE.
Made the NaniteComponent TextExportTransient so that copy/pasting doesn't lead to the mesh being shared between actors.
Made the NaniteComponent DuplicateTransient so that saving as a map doesn't lead to the mesh being shared between packages.
Fixed WaterMesh not being added automatically when adding a water body that doesn't affect landscape into the map.
Fixed Undo with Nanite Landscape.
Unified all invalidation/update code paths so that we respect landscape.LiveRebuildNaniteOnModification in all modification cases.
Made the NaniteComponent non-transactional and made it invalidate the Nanite mesh upon Undo.
BuildNanite is now able to build either all proxies or only proxies from a list (including streaming proxies, in the case of a ALandscape).
BuildNanite data can now be done per Landscape Proxy Actors, allowing the user to update only a list of select Actors (supports multi-selection).
Added Rebuild Data button to Landscape Proxy Actors to force building the Nanite data even if the content has not been detected as having been changed.
Landscape Proxy Actor Details now supports multi-selection and can display Landscape details only if all selected proxies are share the same parent ALandscape
Fixed Nanite Landscape which would fail to build at 64 components.
Fixed NaniteLODIndex, which would show in the Details panel even when Nanite Landscape is not enabled.
Added progress bar when building Nanite from the Details panel buttons.
Disabled navigation data on Nanite Landscape Static Mesh
Fixed various WaterZone actor property changes that would not trigger a proper water info/mesh rebuild.
Fixed warning about Landscape thumbnail Material Instance shader caching not being issued when in SM6.0.
Prevented UBodySetup's cooked collision data from being generated for Landscape visual-only elements.
Removed code that was preventing the SplineEditorMesh to be loaded in commandlets.
Fixed crash when using alpha brush/pattern Landscape tool and better support various cases with the alpha brush texture.
Landscape tool brushes become red and non-interactive when the alpha brush is invalid.
Setting an invalid alpha brush (e.g. a cooked texture in a cooked editor or a virtualized texture with invalid virtualization settings such that the texture source cannot be retrieved) does not crash the UI anymore and now shows as empty in the UI This generates a log error.
Alpha brushes now support the same failure conditions as the normal brush (unloaded components, etc.).
Alpha brush textures now support all texture formats and are linearized if necessary when reading the texture data.
The alpha brush texture channel is auto-corrected if one uses an invalid channel (e.g. Green on a G8 texture).
Fixed Landscape Actors becoming dirty on load when using Nanite Landscape.
Changed the outer of the Nanite static mesh. Using the package as the outer avoids duplicating the mesh when entering PIE, which saves a lot of time to go into PIE (~40s for a 2k x 2k landscape).
Fixed the NaniteComponent TextExportTransient so that copy/pasting doesn't lead to the mesh being shared between Actors.
Made the NaniteComponent DuplicateTransient so that saving as a map doesn't lead to the mesh being shared between packages.
Fixed r.water.visualizeunderwaterpostprocess, which was showing a misleading material name (the topmost parent).
Fixed editor transactions being incorrectly started when using the mouse shortcut (ctrl+shift+right click-drag) to adjust the brush radius/falloff in Landscape mode.
Added support for landscape material instances (per-component MICs) for Nanite Landscape.
Fixed a rare crash when quickly applying undo and/or redo operations to Landscape sculpting or painting.
Fixed issues where Landscape on mobile devices would not have some layer info weightmap textures available when reroute nodes or material functions are used in the Landscape Material.
Deprecated:
Removed CollisionThickness from Landscape.
Media Framework
New:
Added a "just-in-time" option to MediaTexture in the Media Framework. This makes it possible to run a just-in-time render of the media when the MediaTexture creator knows how late in the rendering pipeline it is needed, which can reduce latency for streamed media.
Scripting
New:
Exposed multiple viewport-related editor behaviors to editor utility widgets.
Added extended error information for a SyntaxError in Python. This now reports the error line and the offset within it that the error occurred on, which makes it consistent with the error reporting from
PyErr_Print()
.Added Python glue support for structs with an internally mutable state. You can mark a ScriptMethod function taking a struct with
ScriptMethodMutable
to denote it as needing to copy the input struct back out despite it being marked asconst
. This supports the function changing internally mutable state within the struct, and is equivalent to passing the struct asUPARAM(ref)
, but preserves the internal mutability of the struct by the function signature.Added a new experimental system for creating Interactive Tools in the UE Editor using Blueprints, called the Scriptable Tools Framework. You can create subclasses from
UEditorScriptableInteractiveTool
, as well as subclassesUEditorScriptableSingleClickTool
andUEditorScriptableClickDragTool
, to create Tools that support functionality such as:Capturing mouse input
Creating and listening to 3D Gizmos
Per-frame Tick
3D and 2D/HUD debug rendering
Custom Property Sets with "watchers" that allow responding to property changes via Delegates/Events.
A new
ScriptableToolsEditorMode
plugin adds a new Editor Mode which automatically displays allUScriptableInteractiveTool
types available in the current project in a sidebar Tool Palette, with Tool interaction similar to Modeling Mode.
Exposed
GetInterpreterExecutablePath
throughIPythonScriptPlugin
.Added a
TabDisplayName
property toEditorUtilityWidgets
. If set, this is used as the tab name instead of the Blueprint asset name.Added an
UnregisterTabByID
method to theEditorUtilitySubsystem
, making it possible to unregister tabs previously registered through the subsystem.
Bug Fix:
Updated
RandomStream
to work in Python.Replaced deprecated functions in
FPythonScriptPlugin::EvalString
.
UI
New:
Added thumbnails for media sources.
Dialogs that display a paths tree now also have a collapsible Favorites area.
You can now add external objects and hide the object root by specifying an
FAddPropertyParams
struct.Added right-side extension panel (
LevelViewportToolBar.RightExtension
) toSLevelViewportToolbar
.The tooltips for
UFUNCTION(CallInEditor)
buttons no longer start with the boilerplate text ("Call an event on the selected object(s)") before custom tooltip text. That default text now only appears if there is no custom tooltip text available.Added button to run / stop Edotpr Utility Widgets when editing them.
Added the ability to filter
FPrimaryAssetId
by class.The actual current camera speed is now displayed in the viewport toolbar.
Added support for multiple thumbnail render frequencies. Previously, thumbnails could only be rendered every frame or on property change.
Groups added in details customizations can now be formatted as though they are subcategories.
Added an option to ignore editor gamepad navigation actions in slate.
Content browser settings have been moved to the editor config system. This makes them more persistent across branches, and less likely to be lost on editor shutdown.
You can now specify global, static, and object-local bool UFunctions in edit conditions.
Add customizability of BeforeButton alignment for the
SCustomDialog
widget.Updated Revision Control icon placement on Content Browser tiles to move them to the bottom right of the tile.
Added support for multiple columns to the list view.
Added a column to show the revision control status to the list and column view.
Added an ellipsis at the end of the description when the changelist description is too long to be displayed correctly.
Crash Fix:
Fixed an issue in the Content Browser that caused the editor to crash when the user tries to delete a custom filter that is active in multiple Content Browsers.
Bug Fix:
Mouse grab cursors in Linux now appear correctly.
When removing a tab in
UCommonTabListWidgetBase
, subsequent tabs' indexes are now decremented.Tooltips are now available for items in StructViewer.
Arrays of
FTimecode
now display the additional property buttons (such as Delete) next to the rows.If a subobject in the details view was marked pending kill, the details view would keep rebuilding itself every frame until the object was GC'd. We now make sure that the object is valid before running the check.
Previously, the Profile Editor would allow users to turn on packaging while deploy to device was also turned on. Now, the logic in
LauncherWorker.cpp
'sCreateUATCommand()
method ignores the packaging setting if deployment to device is requested. With this change, the Profile Editor's UI will not allow both packaging and deploying to device in the same profile.IPropertyHandle::GetMetaData
and related functions now always check the instance metadata as well. This was expected behavior when callingSetInstanceMetaData
, but it was only being applied selectively by certain widgets until this change.Ranges now use
IPropertyHandle::GetMetaData()
instead ofFProperty::GetMetaData()
, allowing them to function correctly when placed in collections.Updated calculation for determining when
SClippingHorizontalBox
should add a wrap button. This improves how toolbar overflow options are shown at certain resolutions.Identical warning notification popups are automatically dismissed.
The Show Hidden Properties While Playing setting is now respected in the Details view.
SPropertyEditorNumeric
's ForceUnits metadata now can also be set per property instance.DataTables that used EditConditions with the EditConditionHides metadata no longer trigger a
check()
after the table is cleared.Fixed all
-Winconsistent-missing-override
warnings.Fixed an issue where all expanded elements in the details panel would collapse when certain types of properties such as array properties were edited.
Fixed an audio memory stomp in the Flite text to speech plugin.
UX
New:
Menu items that use custom widgets can now have tooltip overrides.
Added right-click menu options to copy the file path and the package path to the clipboard inside the package dialog window.
Added 0.1 as a scale grid snap option.
Clicking Delete in the Favorites view now removes the favorite instead of deleting the folder.
Added tooltips to the button used to find a selected material's textures in the Content Browser.
Disabled this button when the material referenced no textures.
Added a filter and column in the Outliner to show unsaved Actors.
Added a filter and modified the Source Control column in the Outliner to show uncontrolled actors.
Removed the Actor type text that shows in the Item Label column while searching in the Outliner.
Added alternating colors for rows in the Outliner and Content Browser tile and column view.
The Outliner now queries the Level Editor to pick the correct world based on context, preferring PIE over Editor worlds.
Improvement:
Generalized property editor metadata so that other systems can use it in the same way and have the same behavior as in the Details Panel. For example, scrubbing Translation values now increments by 1 everywhere, scrubbing Scale values increments by 0.0025 everywhere, and scrubbing Rotation values is clamped between 0 and 359.999 everywhere.
Crash Fix:
Fixed a rare crash in the Actor hierarchy when the representing world was invalid.
Bug Fix:
Set the color to full brightness/opacity when picking from the color wheel/spectrum if it was previously almost black or transparent.
Fixed an issue where you couldn't delete a custom filter that was active in multiple Outliners.
Fixed an issue that caused there to be two Virtual Production categories in the filter bar menu.
Fixed an issue causing duplicate filters in the Outliner when a layout was loaded.
Resolved an issue where light function materials assigned to a light would be removed when switching between static and non-static light mobilities.
Fixed a bug where table headers were not rendered directly above their column's row items in tables with many columns, like data tables and Procedural Content Generation (PCG) point data tables.
Fixed a bug that prevented copy-pasting materials on mesh components.
Fixes selected component being lost when compiling a Blueprint.
Fixed height preview mode activation/deactivation and preview mesh cycling.
Deprecated:
Removed the Starship Gallery test suite from the editor. It was not designed to run inside the editor and could therefore cause crashes.
Foundation
New:
Added various cost amortization optimizations for the ReplicationGraph's dormant Actor cleanup feature.
Implemented FAutomationTestBase::IsLatentCommandQueueEmpty() function that returns whether there is no latent command in the queue.
Prevented approved reference images from being copied to the html test report for a successful test.
Enabled Lumen ray tracing when enabling raytracing.
When building you can now specify a "-staged" param which will append a Loose BuildFlag requirement if valid.
Replaced an extraneous plugin-load-error popup with a log.
A new Console Variable has been added to relax asset compatibility checks:
s.SkipChangelistCompatibilityVersionCheck
. This variable bypasses P4 changelist comparison checks on asset load.Fixed an issue where the
/Config/
directory root paths were not resolving correctly using theFPackageName
utility functions.Structured Logging is now used in Gauntlet.
Optimization:
UE5.2 CPU minspec is now updated to SSE 4.2.
Bug Fix:
FApp::GetInstanceID will now Include instance ID in the automation InstanceName. This adds the value to the instance field in the index.json file as (hostname)-(session ID)-(instance ID).
Fixed screenshot path names in test reports for standalone/no editor mode.
Fixed inconsistencies in AITests FTestHelpers return functions.
Fixed an issue where 'ExplicitlyLoaded' plugins that were enabled-by-default were thought to already be mounted.
Fixed the supported version for TCPMessaging.
Fixed an issue in scope where a Gauntlet Test was unable to find an explicitly requested part of the preferred namespace.
Build
New:
Unreal Build Tool now sets up dependencies between compiled build module dlls so build modules can now use public properties and functions from other modules.
Added a Unreal Build Tool mode that profiles different unity sizes and returns the best size for each module.
Made several optimizations to how and when unity files are used when building.
Added the ability to Unreal Header Tool to throw errors or warnings if the generated header is not properly included or if a regular or namespaced enum does not have an underlying type specified.
Added support to Unreal Header Tool to set the underlying type for regular and namespaced enums.
TestTarget Resource folders can now exist in any of the module's locations (for example, a platform extension directory)
Added support for DefaultGameTarget and DefaultClientTarget in Engine.ini.
Added logging to GenerateProjectFiles when writing multiple project formats to indicate what is happening
For example, why ""Generating data for project indexing"" is printed twice.
Added VSMac as a default project format for Mac so it's easier to manage C# code.
Added MultiShelve UAT script that can shelve multiple changelists into a single shelf.
Added a Reopen command to P4Utils.cs
Added UAT parameters to pass architecture by target type: -editorarchitecture, -clientarchitecture, -serverarchitecture, and -programarchitecture. Keeping -specifiedarchitecture for compat, which sets the other 4 if they are not specified.
Improvement:
Overhauled Android architecture management:
Changed AndroidToolchain to properly subclass from ClangToolchain.
Removed the multi-architecture code in AndroidToolchain to instead use the high-level UnrealArch/UnrealArchitectures system.
Refactored Edit and Reopen (that take file list) into a BatchCommand function to split up huge file lists across multiple commands to respect a max command-line length.
Increased the max command-line length from 1024 to the ProcessStartInfo max of 32699.
Made Architecture a first class concept in UBT with UnrealArch type and some supporting classes. Now, an architecture is always known and supplied in UBT, and architecture is no longer an unverified string, it is an enum-like class (UnrealArch).
Similarly, multi-architecture support is now codified in the UnrealArchitectures collection. Some helper Architecture properties are available for the common case when only one architecture could ever be used (on the platforms that do not support multi).
Bug Fix:
Fixed location for UHT generated headers to not have architecture in the path, because they are per architecture.
Removed path length check for files in the Intermediate directory as these files are not portable.
Core
New:
Changed ObjectHandleTracking to use Functions instead of delegates.
Added support to low-level tests. These tests validate that
ensure
andcheck
are executed. The following macros are supported in low-level tests REQUIRE_ENSURE CHECK_ENSURE REQUIRE_CHECK.Added a tls for an ensure handler callback to let the reporting log of ensures become overridden.
Added a command line switch '-SkipVirtualized' to the ResavePackages commandlet, which will cause packages that already contain virtualized data to be skipped.
Code cleanup of ObjectHandle, changed ObjectPathId to private.
Added UE_CALL_ONCE var args support.
Added Unreal.TestAdapter to run low-level tests in the text explorer. Added atomfeed.xml to allow for auto updates.
Added an option to specify the map name to load on the command line as a named parameter -map=.
Added FTopLevelAssetPathFastLess and FTopLevelAssetPathLexicalLess function objects for performing comparisons on the FTopLevelAssetPath class.
Added additional FPackageName::ObjectPathToX functions.
Added UniqueBy function to remove duplicates from a range from a projection to apply to elements similar to std::ranges::unique.
Changed SavePackage to store the extended AssetRegistryTags for the saved AssetData into the global AssetRegistry, instead of the non-extended.
Changed updating AssetData when packages are loaded to not remove no-longer-existing tags, since these tags might be present in the extended tags. This change means that AssetRegistryTags will remain on a package until it is resaved, even if the class that added the tags is changed to no longer write the tags.
Fixed JSON Reader UTF8 encoding parsing.
Added the ability to use JSON Reader with a string view.
Updated GetWrappedObjectPropertyValue_InContainer function to allow access to any element of an entire UObject* wrapper array in one call.
Improved comments for unusual backwards-searching behavior in FString::Find.
Deprecate ISavePackageValidator and replace the feature with list of validation functions for import and exports Add a default save setting object to which validation function can be added.
Limited TVariant to 256 types in order to reduce its size.
Added the FPackageName::GetContentPathForPackageRoot function to get the filesystem path (D:/Project/Engine/Content) of a given package root (/Engine/).
Added GetAllocatedSize functions to delegate classes to aid with memory tracking.
Made various changes to TSet to make it faster to compile and simpler to follow.
Added TSharedRef::ToWeakPtr, TSharedPtr::ToWeakPtr, and TSharedRef::ToSharedPtr functions.
Activated truncation warnings as errors for the following modules: CookOnTheFly, CookOnTheFlyNetServer, PakFile, PakFileUtilities
Added more functionality to FScriptArray from TArray and fixed some incorrect usage of const correctness.
Made truncation warning fixes for multiple core modules that include: Analytics, AnalyticsET, Cbor, Serialization, XMLParser, DerivedDataEditor, DirectoryWatcher, LogVisualizer, OutputLog, and InputCore.
Changed TArray::GetTypeSize and TIndirectArray::GetTypeSize to constexpr and static types.
Added prefetch support for mobile platforms and fused all platforms into a single implementation.
Added GetAllocatedSize functions to TDeque and TPagedArray to aid with memory tracking.
Set Mac ARM cache line size to 128 in order to cater to Apple M1/M2.
Added TIsTOptional_V, TIsTUniquePtr_V, TIsTUniqueObj_V, TIsTSharedRef_V, TIsTSharedPtr_V, and TIsTWeakPtr_V traits for determining if a type is a TOptional, TUniquePtr, TUniqueObj, TSharedRef, TSharedPtr, and TWeakPtr respectively.
Split TSubclassOf
into its own TSubclassOfField, so they can both use forward-declared types. Modified the AES num bytes type to prevent truncation fixes and warnings when it is used.
Implemented priority support for the Zen Loader's loader event queue instead of just relying on io request priorities.
Added error message when FMessageDialog::Open or FPlatformMisc::MessageBoxExt function fails to create the dialog(such as when missing windows resources).
Used bit 55 to distinguish fixes from loosely allocated asset tag values in the AssetDataTagMap .
Added truncation warning fixes for multiple core modules: CookOnTheFly, CookOnTheFlyNetServer, PakFileUtilities, PakFile.
Made PropertyPathHelpers call setters and getters.
Added support for generic structs to be passed to PropertyPathHelpers.
Added TIsTEnumAsByte type trait.
ZenLoader: Matched the suspend and resume behavior of the legacy loader by using an int32 counter instead of a boolean variable.
Inherited Context grouped inherited LLM tag, mem tag and trace metadata into FInheritedContext to simplify their usage.
Added FInheritedContext to higher level tasks instead of the low-level tasks to allow batch task launch to capture the inherited context once per batch.
Added EnumerateRange(Range) function which allows ranged-for loops over a range while maintaining the index of the current element.
Simplified TTuple to aid with compile times.
Activated truncation warnings for Analytics, AnalyticsET, Cbor, Serialization, XMLParser, DerivedDataEditor, DirectoryWatcher, LogVisualizer, and InputCore.
Simplified the implementation of Cast<>, using std:: traits.
Updated SetWrappedObjectPropertyValue_InContainer to allow setting any part of an entire UObject* wrapper array in one call.
Changed MiMalloc to call configurable function pointers for the allocation functions so they can be overridden by the library using it to report how much memory it is using.
Added an option to return the mount point with its slash key in the FPathViews::GetMountPointNameFromPath Add unit test for that function
Changed to Mimalloc support LLM.
Defined MI_USE_EXTERNAL_ALLOCATORS macros.
Overrided mimalloc's call to VirtualAlloc/VirtualFree in order to record the amount committed and decommitted to Low-Level Memory(LLM).
Added multi-threaded access detector to delegates in order to detect concurrent access.
Implemented thread-safe multicast delegates. These delegates support Broadcast, and Add/Remove functions on different threads concurrently.
Added a ConsumeAllQueue which is based on a Stack because the Queues have livelock issues and the Stack provides a robust alternative.
Added a class to read zip archives and ZipArchiveWriter using libzip in the ZipArchiveReader.
Changed the behavior of FGenericPlatformMemoryStats::GetMemoryPressureStatus on Windows. It now uses the QueryMemoryResourceNotification instead of the generic implementation.
AssetManager GetPackageCookRule: Change NeverCook behavior and added new values to the EPrimaryAssetCookRule enum. NeverCook, DevelopmentCook, and DevelopmentAlwaysCook now specify exclusion from the cook only for the assets that are directly referenced from the PrimaryAsset.
EPrimaryAssetCookRule::DevelopmentAlwaysProductionUnknownCook represents the new possibility that an asset is always cooked in development because it is referenced from a DevelopmentAlwaysCook PrimaryAsset, but it may still be cooked in production because it is an indirectly referenced asset from that DevelopmentAlwaysCook PrimaryAsset.
renamed TDepletableMpscQueue to TDepletableMpmcQueue as it supports multiple concurrent consumers.
Updated existing use cases to use the new name or to switch to
TConsumeAllMpmcQueue
if the order of consumption doesn't matter. Added IsEmpty function to TConsumeAllMpmcQueue class. This concurrent queue will be deprecated in UE 5.3, please use the TConsumeAllMpmcQueue instead.System semaphore is added to all supported platforms and can be used for multithreading synchronization. The main benefit comparing to other synchronization primitives is that on some platforms semaphores can wake up multiple threads faster than using individual system events.
Config-related delegates were made thread-safe as they are accessed concurrently during async config loading.
Changed FString::Contains, FString::Find, and TCString::Stristr to return success when the Find argument is an EmptyString when called with ESearchCase::IgnoreCase. This change makes the IgnoreCase behavior match the CaseSensitive behavior, and match the behavior of standard library strstr. But this will break call sites that were expecting Contains("") to return false, and those call sites will need to be changed as they are discovered.
Made FProperty::ShouldSerializeValue easier to debug.
Added -JsonStdOut param to write structured log output to stdout when used with the -StdOut param.
Added serialization of Compact Binary to WIDECHAR JSON.
Added serialization of Compact Binary fields and arrays to JSON.
Added LaunchTaskInThreadPool to the DDC as a replacement for the two existing thread pool task requests.
Added FSkinWeightLookupVertexBuffer::GetLookupData function to access raw lookup data.
Both OAuthProvider and OAuthProviderIdentifier can now be used in the same configuration for the HttpCacheStore.
Added a -DDC-VerifyFix command to overwrite existing records and values that differ from newly generated records and values.
Added support for logging structured debug output as a JSON file when the named mutex UE_LOG_JSON exists on Windows, or when -JsonDebugOutput is present on the command line.
Added support for Base64URL encoding.
Added DerivedDataTool as a new program to work with DDC, initially loading and saving cache replays.
Added an API to request compressed data from derived data references.
Added a DDC delete-only mode to the file system cache to allow unused caches to be cleaned up over time.
Exec APIs have been added to implement exec command handling for development and editor builds only.
Improvement:
Improved comments and special member functions in TSubclassOf.
Minor improvement to handling first in and first out (FIFO) order of task subsequents.
Optimization:
the StreamableManager class OnPreGarbageCollection function has been optimized.
Optimized processing of canceled background tasks by skipping the thread priority change.
Optimized UE_LOG based on UE_LOGFMT.
Crash Fix:
UEngine::CorrectNegativeTimeDelta will no longer crash on negative delta-time.
Fixed crash in IoDispatcher when requesting reads of 0 bytes.
Fixed a crash when duplicating a component for a copy to the clipboard by not forcing a specific name.
Fixed a crash on exit when initialization fails before the command line is set.
Bug Fix:
Removed artificial 64B max alignment limit from TAlignedBytes and TTypeCompatibleBytes.
Fixed MB3 Realloc from reading out of bounds.
Fixed an issue where weak object pointers are invalidated when re-creating a UObject with the same name.
Fixed an issue where a UObject intended to replace another UObject in the object array could get a new internal index if other threads were creating objects simultaneously.
Fixed LLM method FindTagDisplayName to lookup for the platform and project-specific tag names.
Fixed the generation of duplicate bulk data identifiers when creating new levels from templates containing bulk data payloads.
Fixed the OriginalObjectPathName variable from not being set if a LabelOverride was provided in the constructor of the FUObjectToken class.
Fixed the Editor on Windows to prevent loading all debug symbols and consuming a large amount of memory when resolving a first callstack before a load/unload module.
Updated FPaths::Combine function to work with the FStringView type.
Fixed StaticFindObject and ResolveName bug when searching for a sub-object in a specified object, and the subobject has the same name as a short script package name.
Added flexibility when specifying the project name on the command line. Previously, it was expected to be the first argument, which was difficult to ensure in all launch scenarios.
Fixed PropertyPath Not working with TEnumAsByte types.
Fixed memory leak located in the DepletableQueue as the last node was never deleted and made an accidental concurrent call to Deplete not catastrophic.
Enabled SplineComponent to have accurate bounds calculations on the server in exchange for a minor performance penalty when the bounds are first checked.
Replaced complex metaprogramming in FName with TStringView overloads.
Fixed TJsonPrintPolicy::WriteString from doing UTF-8-incompatible conversions.
Fixed double destruction in Tasks System that was causing repeating "task destroyed" traces in Task Insights.
Fixed CPF_HasGetValueTypeHash from not being set on a FBoolProperty.
Set a limit on the number of reference gathering when printing invalid references during save to avoid pathologically expensive cases.
Fixed CopyTemp from returning a reference instead of a copy when passed an rvalue reference (which can cause dangling references).
Fixed piping order to be First-in, first-out(FIFO) in an edge case where multiple piped inline tasks depend on the same prerequisite, so when the prereq is completed they all get piped.
Fixed differing behavior between ScriptInterface and when ScriptInterface is not a nullptr in some cases.
Fixed %hh* formats in FGenericWidePlatform::GetVarArgs. Added defensive checks against snprintf from returning a failure code.
Fixed TIsTSubclassOf
for cv-qualified types. Fixed Low-Level Memory(LLM) race condition in MB3 FreeExternal.
Improved comments on SerializeBin and SerializeBinEx to clarify that binary serialization of deprecated properties can cause problems.
Fixed a deadlock caused by double busy waiting, one in audio pipe suspension and another in the scheduler.
Fixed TTuple natvis visualization.
Made FBoxes' IsValid flags editable, otherwise editor modifications will not be saved.
Ensure that a page in the TPagedArray never shrinks below PageTraits::Capacity in TPagedArray::SetNum.
Fixed SelectRandomWeighted algorithms from not working with floating point value weights by initializing the accumulation with the appropriate zero types.
Forwarded payload parameters through the delegate API rather than copying to allow non-copyable types like TUniquePtr to be captured.
Fixed Clang static analysis false positives in our operator delete overrides.
Added a static_assert to stop data loss when constructing a TBox
from TVector extents. UClass::TryFindTypeSlow will now properly handle "None" names (NAME_None converted to string.)
Added checks to ensure that TArray's bulk-serialized data sizes match expected sizes.
Removed TNonNullSubclassOf
's dependency on TSubclassOf ::TClassType to avoid needing the full type definition for T. Fixed a rounding issue with FDateTime::ParseIso8601.
Fixed TStringConversion's broken move constructor by making the class non-movable and non-copyable.
Changed OodleDataCompression scratch buffer count and size to match usage by the engine.
Added a Target.bAllowExecCommandsInShipping UBT flag to disable execute commands in shipping builds. It currently defaults to false.
Fixed DDC untagged allocations by capturing tags in tasks.
Fixed AsFieldView() function in CompactBinary to exclude names as expected.
Disabled prescanning of ini files for plugins on desktop platforms as it may end up slowly Saved and Cooked.
Fixed the DDC file system cache EditorOverrideSetting not handling paths with the ‘\' character in them.
Fixed thread safety of Engine.SuppressWarningsInOnScreenDisplay.
Fixed a race condition in the DDC cache hierarchy that caused failed assertions.
CompactBinary: Fixed LoadCompactBinary to gracefully handle read failures and sizes larger than the archive.
Fixed unsafe type cast warnings when moving from an array with a larger size type.
Fixed an issue where garbage references from the function UE::GC::RegisterSlowImplementation would report a random UObject as the referencer, rather than the owner of the AddReferencedObject function.
Deprecated:
Deprecated
PRAGMA_DISABLE_OPTIMIZATION
andPRAGMA_ENABLE_OPTIMIZATION
macros and replaced them withUE_DISABLE_OPTIMIZATION
for temporary development andUE_ENABLE_OPTIMIZATION_SHIP
.Deprecated all global variables of thread-safe delegates from FCoreDelegates and replaced them by functions returning local static singleton. Thread-safe delegates are not zero-initializable and can't be used as global variables because they are vulnerable to a static initialization order.
Deprecated the older TDepletableMpscQueue name.
Deprecated TIsSame.
Deprecated TIsVoidType.
Deprecated TAreTypesEqual and ARE_TYPES_EQUAL.
Deprecated some stat methods that take a TArray argument and provided a version with TArray64 to handle big stat files.
Removed:
Removed obsolete warning message about old hardware.
Dynamic LocalQueue Management.
Removed the use of some deprecated intrinsic type traits.
Removed TContainerTraits.
Removed deprecated alignment-unaware functions from FScriptArray.
TAllocatorTraits::SupportsMove function because it is always assumed to be true.
Dev Tools
New:
Added the ability to define USE_COMPILED_IN_NATIVES outside of the HACK_HEADER_GENERATOR macro.
Added a check in the C# UHT code generator to verify the end of the macro text is as expected.
Added support for regression and other column filters in PerfReportTool.
Additional column filters can now be created by implementing ISummaryTableColumnFilter and adding it to the list in Program.MakeAdditionalColumnFilters.
Moved stat threshold checks into an additional filter.
Added a column filter to hide metadata columns.
Added a column filter to only show columns where the most recent build has regressed by more than a given threshold.
You can now use
debugShowFilteredColumns
to have columns be grayed out instead of removed. Hovering over them will show the reason they were filtered out (which filter and the reason). This is for debugging purposes and sanity checks to make sure you're not missing important information, especially when iterating on new filters. Some additional settings were added to SummaryTableColumn to support this.Filters can also mark individual cells as 'invalid' to indicate they are not taken into consideration for that filter. These are grayed out with a tooltip when debugShowFilteredColumns is enabled. Currently this does not work in collated views.
Added the ability to set tooltips for column headers.
Added the ability to add a color modifier for the entire column or individual cells.
Added level editor extensibility hooks to Turnkey.
Changed eligible platforms to use ANSI for profiler strings to reduce the required amount of additional memory. Profiler strings previously used wide strings because ANSI strings incurred a conversion to a wide-char in order to use the wide API, but the API has since been fixed.
Added a new UAT script: SyncPerforceServers. This script helps you to safely mirror a stream on one perforce server with another. See SyncPerforceServers.cs for more information.
Added support for packaging of programs with BuildCookRun by way of adding a .uproject file.
See SlateUGS.uproject for the format and location for making your own.
Use -skipcook when running BuildCookRun to package a project:
BuildCookRun ... -build -skipcook -stage [-pak] -package
To use .pak files with Programs, you need to add "PakFile" to the program's .Build.cs file dependencies.
Added CreateObjectList to StringUtils. This is helpful for refactoring in other code, but it can also be a useful utility function for printing lists of objects.
Added FComparableImage::LoadFile and FComparableImage::LoadCompressedData to help compare images that are only in-memory.
Improvement:
Improved Live Coding startup time to make starting the console an asynchronous task.
Improved detection and logging for circular includes in C# UHT.
Updated budget color scheme to match auto for PerfReportTool.
Bug Fix:
Fixed an issue in C# UHT where, if a structure referenced itself, it would end up in an infinite loop.
Fixed an issue where C# UHT was not generating errors with unsupported blueprint member types.
Fixed an issue to enable settings objects to be properly handled by LiveCoding and HotReload.
Fixed an issue in C# UHT where circular base class/structs would hang UHT. UHT now generates an error showing the circular bases.
Fixed an issue where, if a console variable changes a compilation module during live coding, then the engine will no longer assert.
Fixed an issue where UBT failed to detect C# UBT plugins in the game folder.
Fixed an issue where the console key would not work on some international keyboard layouts when the Game Features plugin was used.
Fixed an issue in C# UHT where it would fail to generate an error when preprocessor lines appeared in an inheritance list.
Fixed an issue where the Live Coding Console would fail to properly enable when it is started on demand.
Fixed an issue where UHT didn't properly detect circular structure definitions via TArray.
Fixed C# UHT issue where a class scoped delegate reference from another class would fail.
Fixed Live Coding issue where, if a typo was made in the preloaded module list, the game would hit a breakpoint.
Fixed an out-of-bounds exception with the
changes
command in the UnrealGameSync CLI tool.Fixed performance issue with shadow detection and symbol lookup.
Fixed C# UHT to generate errors when UPROPERTIES are located in native interfaces.
Fixed C# UHT to properly detect an overridden function when they differ only by case.
Fixed issue where a class might not be marked as containing instanced items.
Fixed an issue where C# UHT failed to generate an error when a property in a structure referenced a deprecated class and the property had not been marked as deprecated.
Stopped creating the accounting job object with JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE. The main job object is already managing those processes and it caused mspdbsrv to be terminated while in use by CL as it is a shared process.
Removed:
Removed HACK_HEADER_GENERATOR #define since C++ UHT has been deprecated and no longer uses engine classes.
Insights
New:
Added support for load time tracing in the editor.
Unreal Insights now implements a diff mode for csv tables.
Added raw snapshot export for the MemoryAllocTable.
Added ImportTable/DiffTables to the StoreWindow.
Added UntypedDiffTable Widget.
Added MergeService to merge two tables together.
Added support for Unknown-type wildcard name patterns for regions specified to ExportTimerStatisticsAsText API.
It is now possible to specify the following export command: TimingInsights.ExportTimerStatistics C:\Out\Region*.CSV -region="SameRegion,Game*,OtherRegion" and it is expected to produce the following files: C:\Out\Region_SameRegion.CSV C:\Out\Region_Game_[...]
Added the ability to send a trace snapshot to a server using console command Trace.SnapshotSend. A snapshot is the content of any events in the tail buffer along with the important events needed to analyze them.
Improved the CPU timing scopes for module loading. It now uses CPU timing events with name of module as metadata.
Created the Insights Status Bar Widget. This widget is displayed in the bottom right corner of the Unreal Editor and provides the user the controls of the trace system. The widget is implemented as a plugin that is enabled by default.
API improvements
The Trace.Screenshot command can now be called using only the ShowUI parameter.
Added CallstackId for all free events including HeapMarkAlloc and HeapUnmarkAlloc events.
Increased Memory Trace trace version to 2.
Surface error messages from analysis engine to the user. Previously, we relied on the regular log to indicate problems in analysis. We now use MessageLog functionality which is routed to a visual log representation inside the application.
Added fake allocations for free events without a matching allocation event in Memory Insights. These allocations will have zero size and the same callstack as the free event.
Added support to reset highlights for timing events by double clicking on a highlighted event. Double clicking on an empty space resets the highlight.
Implemented analysis for "MetadataStack.ClearScope", MetadataStack.SaveStack" and "MetadataStack.RestoreStack" trace events.
Added analysis support for the new trace protocol 7 that provides scoped events with absolute timestamp values.
Runtime: Tagged the large memory allocations from FReserveScheduler::StartWorkers with the "EngineMisc" LLM tag. Previously it was tagged randomly by the first system that triggers the initialization.
Fixed a trace rename message from displaying the updated name twice in the Session Browser.
Changed the scoped trace events with time to use absolute timestamp values.
Increased trace protocol to version 7.
Implement diff mode for csv tables.
Added raw snapshot export for MemoryAllocTable.
Added ImportTable/DiffTables to StoreWindow.
Added UntypedDiffTable widget.
Added MergeService to merge two tables together.
Improvement:
Improved note about initial channels in the Connection tab of the Session Browser.
Improved performance of OutputBeginDynamicEvent by using a better hash function for dynamic scope named hash maps.
Changed the read buffers to increase their size by a power of two steps to Improve trace analysis performance.
Optimization:
Refactored UntypedTable to support importing tables without having a tracing session opened.
Refactored UntypedTable to support opening without opened session.
Bug Fix:
Fixed metadata for a pinned stack of multiple entries (like being added in reverse order).
Fixed log spam when filtering the LogView in Animation Insights.
Added a workaround for large utrace streams with corrupted serial sync events (detects when too much data is buffered on one thread and stops analysis automatically).
Fixed "SameValue" aggregation for string columns.
Fixed sorting for string columns to be case insensitive and to sort undefined values first.
Fixed sorting by Module Name column and by Symbols column to be case insensitive.
Added detection for CPU timing events with metadata with timestamp older than regular cpu timing events. Time needs to increase monotonically for cpu timing events.
Cleared metadata stack for ProgramSize allocs in Memory Insights.
Removed:
Removed Insights menu items from the Tools menu as the functionality has been moved to the Insights Status Bar Widget.
Framework
New:
Media sources can now be previewed in the editor.
Added replication support for FInstancedStruct.
Added HDR playback capabilities to MediaFrameWork and Electra.
Bug Fix:
CommonUI buttons now hide their default input prompt when becoming disabled. This fixes an issue where multiple prompts could appear after buttons are disabled and re-enabled.
Fixed Image Sequence frames from being cancelled when they should not be.
ProcessEXR now preserves data and display windows.
Fixed garbage collection on FInstancedStruct that contains a struct that requires call to the AddStructObjectRefences struct.
Fixed an Asset Registry to skip devonly tags. FString::Split retuns false if no delim substring found.
Deprecated:
Removed deprecated per-chunk SetChunkInstallDelgate and RemoveChunkInstallDelgate functions from the chunk installers.
Removed:
Removed const type from FInstancedStruct mutable getters to prevent mutating const instanced structs.
AI
Bug Fix:
Fixed an issue where a null PathFollowingComponent was being created by default for an AI Controller.
Fixed an issue where a Behavior Tree decorator with a lower priority abortion type on a subtree was not being reactivated upon exiting the subtree.
Fixed an issue with Blueprint base decorators where they would trigger an execution request during a transition. This would return an incorrect answer. Decorators are now using new API methods to request either a RequestBranchActivation or a RequestBranchDeactivation.
Deprecated:
PawnActions have been deprecated. Users should use GameplayTasks or AITasks starting this release.
AI Behavior Trees
New:
Blackboard-based decorators can now use none values, instead of the first key when the referred key no longer exists. To use this behavior by default, add the following line in the configuration file:
[/Script/AIModule.AISystem]
bBlackboardKeyDecoratorAllowsNoneAsValue=true.
Disconnecting the root node of a Behavior Tree will now disable the tree.
Modified BTTask_FindAndUseGameplayBehaviorSmartObject to support finding a target Smart Object with an EQS query.
Improvement:
Blackboards now support more than 255 entries.
Bug Fix:
Fixed an issue where the Behavior Tree component was not redirecting its Visual Logger to the owning AI Controller if the component was dynamically added as part of AAIController::RunBehaviorTree.
Fixed an issue where the Blackboard editor was not clearing out the display of all persistent keys when it was parented with an asset that had the same named keys.
AI Debugging
Bug Fix:
Fixed an issue where the expanded subcategories in the Visual Logger were not being preserved while scrubbing the timeline.
Fixed an issue with Visual Logger not recording world-less UObjects.
Fixed an issue where GameplayDebuggerCategory was not replicating correctly for standalone clients.
AI EQS
New:
Added a Smart Object EQS generator and a dedicated EQS item type.
Bug Fix:
Fixed an issue where UEnvQueryTest_Project's navigation projection was not applying the ProjectionData.PostProjectionVerticalOffset.
AI Navigation
New:
Added a warning message when exporting a geometry component with too many vertices. A customizable warning threshold can be specified through the GeometryExportVertexCountWarningThreshold property.
UNavigationSystemV1::PerformNavigationBoundsUpdate is now a virtual function.
Changed "Navigation data generation finished" log to verbose to avoid repeated log messages when moving a Static Mesh in the automatic navigation update mode.
Added a display option to display navmesh tile resolution.
The World Partitioned Navigation Mesh now uses the required overlap from the Navigation System instead of using a constant value.
The Navigation Mesh now uses the same Oodle compression settings in the Editor to match its usage during gameplay.
Reduced the include dependencies for NavigationTypes.h
Added Navigation Mesh and Navigation System information to the screen when the Navigation Display is enabled. The following information was added:
Added the bDrawTileBuildTimes property to display the last tile build time
Added the bDrawTileBuildTimesHeatMap property to display the Navigation Mesh as a colored heat map of tile build time
Added draw distance clipping for Navigation Mesh label rendering
Added profile tags in the NavMeshRendering Component
Allowed DebugLabels to be displayed in 2D on screen
Added tile building statistics to the Navigation Display
Added partitioning type to the Navigation Display
Added Navigation Data count and triangle count to the Navigation Display
Added Profile Tags in the tile generation to the Navigation Display
Deprecated unused FRecastNavMeshGenerationProperties.
Added initial support for a mix of low, default and high resolution tiles on the Navigation Mesh.This update includes the following changes:
CellSize is now deprecated in favor of CellSizes, which store the various tile resolutions in the NavMeshResolutionParams array of ARecastNavMesh.
Added the NavMeshResolution property to ANavModifierVolume.
Removed duplicate data in dtNavMesh.
Added a resolution index to dtMeshHeader.
Increased the Navigation Mesh version to reflect the updates.
Made it possible to configure a project to not instantiate AvoidanceManager at all.
Improvement:
Removed unnecessary extra Agent radius tile expansion when computing tile bounds. This avoids unnecessary collision gathering, as well as prevents unnecessary tile dirtiness.
FPImplRecastNavMesh::GetNavMeshTilesIn now uses FRcTileBox to find the minimum and maximum tile coordinates.
Changed the navigation geometry export warning to be based on triangle count. This avoids repeating the warning multiple times.
Bug Fix:
Fixed an issue where the Navigation Mesh was generating incorrectly around Hierarchical Instanced Static Meshes.
Fixed an issue where UNavMeshRenderingComponent was not clearing labels when they were turned off.
Fixed an issue where a NavModifierVolume would incorrectly dirty a tile below itself if it was within an Agent's radius. Added the console command n.UseTightBoundExpansion to revert to the previous behavior as a fallback.
Fixed an issue where navigation bounds were not being updated on load when "Update Navigation Automatically" was disabled. This fixed World Partitioned Navigation Mesh data chunks not being generated for areas covered by NavMeshBoundsVolume that were placed inside Data Layers.
Fixed an issue where MassAvoidanceProcessors was producing a static analysis warning.
Fixed an issue where FPImplRecastNavMesh::TestPath would crash Lyra if the TileWidth of the loading Navigation Mesh was a mismatch.
Fixed an issue where the navigation octree would not fit the navigable world bounds.
Fixed an issue where the Navigation Mesh generation was not working for ULandscapeHeightfieldCollisionComponent in Lazy gathering mode. The sample cache was not reset in RecreateCollision.
Fixed an issue where the NavigationRelevantData array was being modified during garbage collection leading to a crash.
Fixed an issue where a partitioned Navigation Mesh was being created for non-world partitioned worlds.
AI Perception
New:
Added the OnTargetPerceptionForgotten delegate to UAIPerceptionComponent.
AI Smart Objects
New:
Made the following changes to Smart Objects:
Removed the synchronization logic between the ability system component and Smart Object instance tags.
The SmartObject subsystem has been added to the SmartObjectWorldConditionSchema.
Added support for world conditions to the main Smart Object instance (in addition to those in each slot). Note that slots could be disabled by their parent conditions.
Removed the object tags filter from the definition and replaced it by the newly added condition (FWorldCondition_SmartObjectActorTagQuery)
Updated the SmartObject blueprint library with the following:
Renamed 'K2_SetSmartObjectEnabled' to 'AddOrRemoveSmartObject' since 'Enabled= false' is a concept used when the object is no longer available for queries, but active interactions can finish.
Added functions to add and remove Smart Objects from the simulation for one or multiple Actors.
Added functions to enable and disable Smart Objects for one or multiple actors.
Added the ability to transform Smart Object annotations in the Smart Object editor viewport.
Added the custom show flag "SmartObjects" and bound it to the SmartObjectSubsystem rendering (disabled by default).
The SmartObjectDefinition validation now reports errors when saving the asset.
Made the following changes to Smart Objects:
Added per slot Runtime Tags.
Added common event handling for Smart Object and slot changes and events.
Added slot annotations, which are slot definition data that can have visualization.
Changed Smart Object Disable to send an event, instead of calling Unclaim and stopping the behavior.
Added more visualization support for the Smart Object editor (canvas, visualize annotations).
Changed the Smart Object editor to use the common transform widget for slots.
Completed Smart Object Collection rework which includes the following:
Introduced a new FSmartObjectContainer type that encapsulates SmartObjectComponent registration and storage.
The SmartObjectSubsystem now stores a Container that aggregates all other containers supplied by loaded / streamed in SmartObjectPersistentCollection instances.
The SmartObjectCollection got deprecated and there's an auto-update path triggered in SmartObjectCollection::PostLoad.
The SmartObjectComponent component can opt out of being part of a collection with bCanBePartOfCollection.
SmartObjects can only be registered with a single Collection. This might change in the future if required.
SmartObjects keep track of whether they are registered as a part of a collection or as a dynamic Smart Object.
Updated the SmartObjectComponent's SOHandle setting and resetting - there's a separate function for invalidating the handle.
Added handling for the destruction of a SmartObjectComponent (as opposed to unregistration due to being streamed out, potentially temporarily).
The SmartObjectSubsystem no longer instantiates on clients.
Added the asset name to the error logging reported by USmartObjectDefinition::Validate.
Made SmartObjectDefinition verification execute every time there is a change to the definition and on SmartObjectDefinition load.
Extended AITask_UseGameplayBehaviorSmartObject with OnSucceded, OnFailed and OnMoveToFailed delegates. These delegates allow users to better react to movement failures.
Deprecated ESmartObjectUnregistrationMode and its use in SmartObjectComponent registration and deregistration. Introduced two explicit paths for Smart Object removal:
Unregister - Keeps or deletes the runtime Smart Object information based on SmartObjectComponent.RegistrationType.
Remove - Called on the Smart Object's EndPlay. Removes runtime data regardless of the registration type.
Improvement:
Made changes to simplify the process of Registering, Unregistering, and Binding of a SmartObjectComponent to a RuntimeInstance.
Bug Fix:
Fixed an issue where a misconfigured Smart Object would partially register if it had a SmartObjectDefinition asset set, but the asset was not valid itself. This resulted in an ensure failure while cleaning up the system on world end.
Fixed an issue in USmartObjectSubsystem::CleanupRuntime where removing a Smart Object was causing an error.
AI State Tree
New:
Made the following improvements to StateTree event handling:
Added the option for Tasks to disable ticking, or to be ticked only when there are events.
Added new options for Task handles when properties are copied.
Added TStateTreeInstanceDataStructRef which can be used to access struct-based instance data in delegates.
Added the callback FStateTreeNodeBase::Compile, which is called during compilation when a node and instance data can be checked and adjusted by the node, e.g. to validate data.
Added a getter and a delegate to the State Tree Component GetStateTreeRunStatus method.
StateTree now uses a hierarchical GameplayTag match when matching event transition tags.
When a StateTree subtree returns succeed or failed, it handles it as if the linked state was completed.
Added save options to the State Tree editor compile button.
Added a setter method for the auto start property in the State Tree component.
Improved State Tree transition handling with the following changes:
Delayed transitions now trigger N seconds after the first time the conditions pass (old behavior required the conditions to pass for the duration of the delay).
Added a random variation setting for the transition delay.
Tick and Event transitions have precedence over completion transitions (that is, they are handled before completion transitions).
Removed the delay and blocking from completion transitions.
Added the ability to request State Tree state transitions via code.
Exposed the State Link which allows a user to specify a target state as a property.
Completion transitions now trigger at the state where the task that completed is located. E.g. If execution is currently at Root/Guard/Leaf and the task at Guard state completes, transitions on Guard and Root state are handled (skipping Leaf).
Bug Fix:
Fixed an issue where calling Start on an already executing State Tree would cause a crash.
Fixed issue that limited the number of State Tree tasks to 254.
Fixed an issue where BeginPlay in the State Tree Component would cause a crash if it had an empty asset.
Added several fixes to the property binding for enum conditions.
Fixed an issue where UObject-based State Tree nodes were not copied and pasted correctly.
Fixed an issue with StateTreeNodeBlueprintBase::GetWorld to add support for Blueprint nodes that rely on retrieving world from the WorldContextObject.
Fixed an issue with the State Tree editor where expanded states were not being preserved when new states were added.
API
New:
Exposed the World Partition grid helper and StreamingGrids member variables from the WorldPartitionRuntimeSpatialHash. This allows classes to derive and create dynamic grids at runtime.
Audio
New:
Added the Get Modulator Value Blueprint function, which enables you to take values from any modulation source or control bus and use them to drive other game parameters.
Added two new Blueprint functions (Get Modulators From Destination and Audio::SetModulationRouting) to improve the UX of changing the Modulation Routing on an Audio Component:
Added Listener Orientation and Source Orientation audio parameter interfaces for audio sources.
Added the Create Envelope Follower Generator and Create LFO Generator Blueprint functions.
[Source Data Override Plugin] Added OnAllSourcesProcessed to enable functions to execute after all of the sources have been processed.
Added a MetaSounds unit test helper which builds a graph and operator from node names.
Added a debugging MetaSound node that triggers when a NaN is detected, Trigger On Nan.
Added a new MetaSounds node, Switch and Ramp, for smoothing out popping audio.
Added hard reset capability to the MetaSounds AD and ADSR Envelope nodes.
Improvement:
Changes to Modulation Routing now apply immediately to currently playing sounds.
Moved all Audio Modulation Blueprint functions to the Audio > Modulation category in the Blueprint Action Menu.
Widgets can now be registered at module startup so that specific transformation UIs are instantiated in the Waveform Editor.
Transformation widgets in the Waveform Editor now support property handles.
Exposed Audio Motor Sim Component data as editor-only blueprint readable data so the state can be queried by Editor widgets.
The Audio Component Group parameter subscriptions can now be added from Blueprint.
Changed the Audio Modulation Debug console variable prefix from "SoundModulators" to "Modulation" (ex. au.debug.modulation.filter.buses).
Added Trigger type to the Audio Parameter type enum so they can be differentiated from Boolean parameters.
The FAudioParameter class now has a new constructor that takes an EAudioParameterType enum, which can be used to create Trigger parameters explicitly.
Reduced editor load time by lowering the refresh rate of AudioCookOverrides.
Crash Fix:
Fixed a crash that could occur when a SoundWave with a Force Inline loading behavior had its SoundCompressionSettings altered during playback.
Fixed a crash caused by a missing parameter on FWindowsMMDeviceCache::OnDeviceRemoved.
Fixed a crash caused by audio capture components during level transitions.
Bug Fix:
Parameter subscriptions fire reliably regardless of the method of setting the parameter.
Fixed a bug where importing an Impulse Response asset incorrectly threw an error in the Output Log.
Fixed bug causing some MetaSound properties to be unintentionally reset when changing data type or constructor pin state
SoundWaves no longer synchronously load during USoundWave::PostLoad on packaged builds.
Fixed a playback bug that occurred when bypassing a Source Effect Chain entry in the same game frame the sound is played.
Fixed a bug where MetaSounds reroute nodes could have incorrect values when chained and created from node inputs.
Fixed a bug where fixed MetaSound ADSR audio multiply nodes could produce NaN values.
FindAllMIDIDeviceInfo now behaves as expected.
Fixed a bug that caused audio file cooking to produce slightly different data than prior versions.
Fixed a bug in MetaSound where Audio Bus Reader nodes might behave unexpectedly when the AudioCallbackBufferFrameSize is set to a value other than the default.
Fixed unintended behavior when creating MetaSound variables on a graph that has been converted from a preset.
Deprecated:
Deprecated CreateCompressedInfo path and GetRuntimeFormat in favor of IAudioInfoFactoryRegistry.
Removed:
AudioThread and StatsThread have been removed after being deprecated in 5.0.
Blueprint
New:
Exposed ToHex to Blueprints for LinearColors.
Added console variable bp.BlamePrintString to help track down which Blueprint Asset and function is printing messages to the screen.
Made latent Blueprint nodes more descriptive in Tooltips.
Added Latent Blueprint info to Aync task nodes.
Added Implemented Interfaces to asset diffs.
Added proper support for null dynamic Blueprint delegates to struct pins and struct default values. This makes it easier to use non-multicast dynamic delegates in blueprint logic for optional bindings
Implemented a UPluginBlueprintLibrary for querying info about plugins from Blueprint and Python.
The core Unreal math type TRay and FRay is now exposed to Blueprints for use as a UProperty.
Improvement:
improved overall stability of the Asset Diff tool.
Bug Fix:
Fixed bug where Adding and Renaming collapsed graphs in functions breaks references to local variables.
Fixed inefficient memory usage in Blueprint Debugger tooltips.
Fixed issue where re-instantiated classes are available in the class reference drop-down.
Fixed a bug that occurred in the Blueprint Diff toool when re-linking diffrent pins to the same nodes.
Blueprint Compiler
New:
Added a UPARAM(Required) markup for marking function parameters as required This must be linked to another node in a Blueprint.
Crash Fix:
Fixed a crash in UKismetSystemLibrary::execSetStructurePropertyByName.
Bug Fix:
Fixed promotion operator pins from not being able to find the appropriate promotion.
Fixed a Blueprint Compiler Error when compiling ExposeOnSpawn variables with a BlueprintSetter function.
Fixes for Vector wildcard that does not cast from integer to float (double-precision) when the vector pin is split or utilized by Promotable operator nodes that permit pin links of mismatched types such as int to float.
Subobjects are now uniquely instanced when importing default value terms to non-native class variable properties on the new CDO during a Blueprint compile.
Fixed a bug that could cause reinstanced classes to leak onto object literal pins.
Deprecated:
Deprecated float and double cast nodes in Blueprint.Several single-precision float conversion functions were deprecated in favor of their double counterparts, which we can safely redirect.
Deprecated FBlueprintEditorUtils::RegenerateBlueprintClass function, a long unused entrypoint for Blueprint on load compilation.
Blueprint Editor
New:
Added Browse to Type to the context menu of a variable in the Blueprint Editor details menu. This is available when the type of a variable is a Blueprint class.
Blueprint editor feature (experimental): Non-blocking Blueprint graph context menu invocation:
When enabled, invoking the context menu in a Blueprint graph will not block the UI for long periods waiting for its menu content building to be completed.
This can improve editor UX for content creators in large projects with significant Blueprint class assets.
Disabled by default. To enable, navigate to Editor Preferences->Blueprint Editor Settings->Experimental and set "Enable Non-Blocking Context Menu" to true.
In the Blueprint editor pins now consistently sort pin connections where the gateway node is being called when performing "collapse to graph", "collapse to function", or "collapse to macro" operations
Fixed a bug where clicking "Find References" on the Custom Event sidebar would search for "None"
Blueprint functions can now be marked as Unsafe During Actor Construction. This prevents their use during Actor construction scripts.
Improvement:
Improved Blueprint editor startup time by deferring palette/favorites list construction to when the Palette tab is first spawned.
Minor improvements have been made to Blueprint graph context menu performance.
Improved tooltip on function call nodes when a function cannot be resolved
Crash Fix:
Fixed an editor crash caused by reinstancing a transacted Animation Blueprint outered to a reinstanced Actor-based Blueprint with a Skeletal Mesh component.
Bug Fix:
Fixed the component hierarchy display in the Actor instance details tab to remain static and deterministic in terms of tree node order after its underlying Blueprint class is compiled and/or Actor reconstruction occurs.
We now avoid doing a full Blueprint action database refresh on the next UI tick after incurring one or more dynamic module loads in the editor.
Fixed a regression in which duplicate Add Component actions were being shown in the Blueprint graph right-click context menu when Context Sensitive was enabled.
Added custom setters to mark an arrow component's render state as dirty when writing to attributes cached by its scene proxy from a Blueprint function.
Blocked non-array container pin types from being connected to self pins on node types that support a foreach-style call site expansion. This avoids a runtime editor crash that may otherwise result due to a lack of compile-time expansion support for non-array container types.
Updated the Kismet Execution function to skip over pending garbage and unreachable objects.
Blueprint Runtime
New:
Added IsPluginMounted function to the PluginBlueprintLibrary.
Bug Fix:
Fixed a source of runtime stack corruption while executing a compiled Blueprint graph with one or more direct interface self pin connections on call site nodes for implemented interface functions.
FixedInconsistent behavior in root component transform scale values for dynamically-spawned Blueprint Actor instances.
Fixed a bug with script Let commands when a custom setter is used on a property. When SetValue_InContainer is called, we need to ensure that we use the property container associated with the l-value in the assignment.
Gameplay
New:
Added GameplayTargetingSystem Plugin.
Added custom serialization support for GameplayTag Queries.
Added support for replicating derived FGameplayEffectContext types.
Added an experimental Gameplay Graph plugin. It currently supports creating an undirected graph and running a few fundamental graph algorithms.
Added character movement UseBaseRelativeAcceleration option to use base-relative moves when walking on dynamic bases. This greatly reducing corrections while on the base, with higher risk of a correction when jumping on and off.
Changed the access level of UConversationInstance::GetCurrentChoiceReference from private to public. This allows conversation task nodes to easily access choice memory. This empowers the user to create one conversation task node that can generate multiple choices with unique data so that each dynamic choice can be processed accordingly.
Added overridable tick function to allow server-side functionality on remote autonomous proxy characters.
Added UGameplayStatics::IsAnyLocalPlayerCameraWithinRange function to allow Blueprints to prune behavior that is out of range of any local player.
Added success / fail return value to Actor's class AttachToComponent and AttachToActor functions.
Gameplay Attributes in assets are now registered as searchable names on save, allowing for references to attributes to be seen in the reference viewer.
Added a class picker for Input Action and Input Mapping Context factories.
Allow changing the evaluation channel of a Gameplay Effect Modifier from code.
Added some basic unit tests for the AbilitySystemComponent.
Added a slate notification when a gamepad's state changes in the editor. This displays the Platform User, Device ID, and connection state.
Users can now specify what Input Trigger events progress/cancel a Combo Trigger.
Clamped Input Modifier dead zone values between 0 and 1.
Users can now Drag and Drop Input Actions from the Content Browser into the Blueprint Graph to make an Enhanced Input Action in the graph.
Added units in milliseconds to the description of the ExactPing variable.
Created Default Input Mapping Contexts to the developer setting. This will let users specify a default set of Input mapping contexts without the trouble of getting the Player Controller in Blueprints or C++
Added Refresh Blueprint editor functions to the BlueprintEditorLibrary. This will allow you to refresh any open Blueprint editors or only ones for a specific Blueprint asset when making changes to their properties from Editor utility widgets.
Created the input device engine subsystem. This subsystem will allow you to set device properties on specific platform users without needing to use any force feedback effects.
Created an Enhanced Input World subsystem that allows you to bind input delegates to Actors without an owning Player Controller.
Fixed a bug that caused assets that were diffed against depot to revert to their depot state.
Exposed Input Device properties as UInputDeviceProperty. This utilizes the existing IInputInterface API to set device specific properties like Light Color, trigger effects, and advanced rumble.
Created a new Enhanced Input Combo Key to avoid Combo Triggers being overridden by mappings with the none key.
Input Mapping Contexts now display Triggers and Modifiers present on the Input Action for that mapping.
Removed an ensure relating to Combo Triggers when the Combo Actions array is empty.
Keep track of the most recent hardware Input Device for each platform user. This lets you find out what input device players are using, and get delegates when that changes.
Added a data validation error to avoid mixing Combo Triggers with other Input Triggers.
Added per-platform input settings that let you specify Hardware Input devices that are available on each platform.
This allows you to detect any custom hardware that you may be using for your game by adding it to a config file. Then when you send controller events you can give a matching FInputDeviceScope so that the engine can detect the device.
Added KISMET_API to several diff related classes so users can create custom diff tools.
Added a templated version of GetComponentByClass.
Improvement:
Force Feedback mapping clarity and consistency improvements.
Crash Fix:
Fixed a crash in the UAbilitySystemBlueprintLibrary::MakeSpecHandle function.
Fixed a crash when calling GetBoundActionValue with a null actor. This can happen if you place the node in an Animation Blueprint graph and compile it
Blocked dedicated servers from trying to create local players, this would crash later on in startup.
Added null check to fix crash in UGameFrameworkComponentManager::CallDelegateForMatchingActors.
Bug Fix:
Made the world partition object transactional when the Modify() function is called on it so that the changes are properly added to the Undo/Redo buffer.
Fixed bug that occurred during character movement corrections which caused rotations to diverge between the client and server.
Fixed a bug where Character movement could desync when using multiple Root Motion Sources with different accumulate modes.
Fixed an issue in Network Prediction Examples causing pawns to result in slow movement during low framerate situations.
Removed erroneous ensure in UGameFrameworkComponentManager::RemoveComponentRequest function, which would trigger if more than one Actor class was mapped to a single component class.
Fixed Level asset from duplicating incorrectly when an Event Dispatcher is in the Level Blueprint.
Fixed a bug where Root Motion Source's "move to dynamic" force would not be updated to match a server correction and degrading movement quality.
Fixed logic in the Gameplay Ability System where a non-Controlled Pawn would be considered remote, even if it was spawned locally on the server (e.g. Vehicles).
Correctly set activation info on predicted instanced abilities that were rejected by the server.
Fixed a bug that would cause GameplayCues to get stuck on remote instances.
Enabled logging for Shipping/Test in KismetSystemLibrary.cpp when USE_LOGGING_IN_SHIPPING is defined to 1.
Added fixes for UInputAction child classes.
Fixed changing Action Value Type affected Blueprints toast from incorrectly showing up when modifying an Input Action that no Blueprints were using.
Fixed unnecessary copies returned from FGameplayDebuggerAddonManager::GetSlotNames.
Fixed a memory stomp when chaining calls to WaitGameplayEvent.
Fixed FGameplayTag::ImportTextItem so that Buffer is updated when we read tokens from it.
Provided a default console key section for the slovak keyboard layout.
Added the bool option bShouldOnlyTriggerLastActionInChord to Enhanced Input. This will track input actions that have Chorded Triggers on them, and allow the filtering of triggered delegates that are fired based on which chorded actions are being triggered this tick.
Fixed DPI scaling issues in FGameplayDebuggerCanvasContext::MeasureString.
Smart Object Behaviors now Support calling world-dependent nodes (i.e. Async Load Asset).
Fixed GameplayDebugger header so it incorporates DPI correctly for displaying time and VLog info at the intended locations.
the camera shake previewer will no longer leak the engine callback when closed.
Fixed invalid camera animation handle, due to a typo between int16 and uint16.
Calling the CreateCombinedHandle() from the FStreamableManager class will no longer trigger an ensure for null handles when SkipNull is passed in.
Gameplay Ability System Attributes now respect Core Redirects. This means you can now rename Attribute Sets and their Attributes in code and have them load properly in assets saved with the old names by adding redirect entries to DefaultEngine.ini.
Fixed an issue where enhanced input bindings for Actor Components would not register at the correct time causing them to be unbound.
Calling the AbilitySystemComponent GetOwnedGameplayTags() function in Blueprint no longer retains the previous call's return values when the same node is executed multiple times.
Deprecated:
Removed previously unused variable FGameplayModifierInfo::Magnitude from the Gameplay Abilities Plugin.
Removed:
Removed miscellaneous unneeded or deprecated matinee-related code.
Mass
New:
Simplified the Mass spawning and entity template APIs by removing unused parameters and functionality.
Refactored UMassEntityTemplateRegistry into a regular struct, FMassEntityTemplateRegistry.
Made the MassDebugger UI tool react to the entity selection via the Mass GameplayDebugger category. The archetype containing the given entity gets selected.
Extracted the core of UMassActorSubsystem into a new FMassActorManager struct to support the logic's reuse in other circumstances (like a dedicated editor subsystem).
Separated the Add and Set operations in FMassCommandBuffer::Flush for a clearer distinction between the two operations.
Added Mass traits tag requirement to help configure some of the MassEntityConfig.
Most of the MassEntity unit tests are now decoupled from UWorld.
Added two editor-time Mass subsystems:
MassEntityEditorSubsystem: Instantiates MassEntityManager and supplies world-independent ticking.
MassActorEditorSubsystem: Wraps FMassActorManager for world-less purposes.
UMassEntityTemplateRegistry::InitializeEntityTemplate now allows empty-composition entity templates. An empty Archetype is created in this case.
Added a multicast delegate to FMassEntityManager that gets triggered upon new Archetype creation.
Added a convenience UMassSimulationSubsystem.IsDuringMassProcessing passing the call over to the hosted FMassEntityManager.
Added FMassProcessingPhaseManager::TriggerPhase which lets users manually trigger a given phase. This change was needed to support processing phases ticking outside of the world tick.
Added a destroy entity debug command.
Improvement:
Updated FMassProcessorDependencySolver::CreateNodes to now support having multiple instances of a single processor class. It can now handle dynamic processor instances with each having a different configuration.
We made the following improvements to the Mass processor dependency solver:
Before solving the dependency, the processor collection is sorted in such a way that it first processes the elements that are blocking the largest number of other nodes.
When storing and comparing information regarding used resources, we also compare sets of matching archetypes to fine-tune resource access. Depending on the parameters, the archetypes can be created especially for the purpose of dependency solving (called "virtual archetypes" in code) or queried from the given EntityManager instance.
These changes result in the shortest "longest sequence," which in turn, significantly improves processor distribution across threads when running Mass in multithreaded mode.
The new approach is utilized by the PhaseManager to rebuild Phases' processing graph whenever a new archetype is created. This resulted in the removal of UMassCompositeProcessor::CopyAndSort and the updating of MassEntitySettings code.
Made the following changes to Mass's support for USubsystems:
Added new struct type FMassSubsystemAccess which stores bitsets indicating which subsystems are to be accessed and in which mode (RO/WR). It also caches system instances (populated either via the CacheSubsystemRequirements call or iteratively as the subsystems get requested).
The new FMassSubsystemAccess is instantiated by FMassExecutionContext. This removes the need for supplying a UWorld instance when fetching subsystems - the value is now fetched from the MassEntityManager being used, and cached.
Made FMassRuntimePipeline::Processors private and updated the call sites to use getters and setters.
Modified the FMassCommandBuffer.DestroyEntities signature to use an array view, which makes it backwards compatible and more flexible.
Turned UMassProcessingPhaseManager into a struct, FMassProcessingPhaseManager.
Simplified the phase manager's initialization by using a single function. The caller is now responsible for passing the phase configuration.
Moved the code responsible for the MassEntitySettings changes from FMassProcessingPhaseManager over to UMassSimulationSubsystem.
Updated the MassDebugger processing graph display to work with single-threaded phases as well.
MassAgentComponent now supports an empty MassEntityConfig, this is useful when the actor is a puppet.
Bug Fix:
Fixed an issue where the State Tree asset filtering for a State Tree trait was incorrect.
Fixed an issue where FMassArchetypeData::BatchMoveEntitiesToAnotherArchetype was modifying the order of entities being added. This was causing the associated payload to get out of sync with the entities being moved around
Fixed an issue where FMassArchetypeData::ExecutionFunctionForChunk was failing shared fragment binding.
Fixed an issue where the MassEntityConfig validation was always showing an error-style notification after a single failed notification, regardless of the following results.
Fixed an issue with UMassCompositeProcessor::Populate where it would side-step the EProcessorExecutionFlags settings of the processors being added.
Fixed a bug in the actor pooling logic when entities were destroyed. The code was calling the wrong method to unregister the entity fragments.
Fixed an issue with FMassCommandBuffer::Flush where it was not maintaining the order of operations of the same type (i.e. the sorting was not stable, now it is).
Fixed a loophole that made it possible to run a MassEntityQuery while its cached data was outdated.
Deprecated:
Left FMassProcessingPhase.bIsDuringMassProcessing for debugging purposes.
Networking
New:
Implemented delta compression for PolymorphicStructNetSerializer in Iris.
Improved Seamless Travel:
The network object info of actors that are seamless traveling is now kept so it can be restored after the full list is reset.
Fixed subobject refcounting ensures triggered during Seamless Travel.
Added support for overriding net cull distances in Iris.
The experimental Iris replication system is now compiled with the engine by default, but will only be used at runtime if it's explicitly enabled.
The Destroy and TearOff subobject functions now work in Iris replication.
Added console variable to detect subobjects that are not registered using the registered subobjects list.
Added the net.SubObjects.DetectDeprecatedReplicatedSubObjects console variable.
When enabled, it will ensure if it detects that ReplicateSubObjects() is implemented in a class that switched over to the new registration method
This console variable is only available in development builds.
Added APIs that allow the authority to tear off or delete a replicated subobject on remote connections.
Call DestroyReplicatedSubObjectOnRemotePeers or TearOffReplicatedSubObjectOnRemotePeers via the Actor or ActorComponent.
Added a list of subobjects replicated to individual channels and the number of channels they are replicated to in the NetDriver's network object info.
Added support for SeamlessTravel and NoSeamlessTravel URL options on game mode to override the default on game mode. If seamless travel is disabled in PIE, it will now fall back to a hard travel instead of failing completely.
Added an assert to tell if the netdriver is missing the required DataStreamChannel definition in its config in Iris.
Added sample code for network packet encryption to Lyra.
Added the possibility to store registered subobjects via a WeakObjectPtr or a regular pointer.
Toggled by setting UE_NET_SUBOBJECTLIST_WEAKPTR.
Default is to use weak pointers.
WeakObjects are useful in a context where some subobjects may get destroyed before getting unregistered which generally occurs on clients and PIE.
Regular pointers are useful when you want to speed up the replication code and you know all your subobjects will be unregistered before getting destroyed. This is generally the case on dedicated servers.
Changed the engine, game, and replay network versioning to use the custom version system.
Refactored dependent actor lists so the child actors are stored by streaming levels in Replication Graph.
Now dependent actors are not replicated if the connection does not have the streaming level loaded.
Added FLevelBasedActorList struct to RepGraph plugin. Holds actors based on their level (permanent or streaming)
Added support for overriding net cull distances without modifying the Actor's NetCullDistanceSquared property in Iris.
ReplicationSystemTest unit tests now support NetTrace.
Added a new command line option to run a subset of tests by using -TestFilter [filter] to only run tests where the name contains the provided string.
Replaced the DormantReplicatorMap with the private DormantReplicatorSet in NetConnection.
The new struct holds dormant object replicators grouped by their owning actor.
Current public usage of the dormant map has been replaced with equivalent functions in UNetConnection.
Updated the Network Prediction plugin readme with architecture and operational flow, technical details, and known issues.
Added ability for URLs launched via the Launch URL Blueprint node or the new function FPlatformProcess::LaunchURLFiltered to be filtered by an allowlist that's custom-built by code or defined in config files. The allowlist for the Blueprint node uses the [SystemLibrary.LaunchURLFilter] section in the Engine config file.
Added send destruction info for dormant actors from cells that are no longer observed by the network client.
TimeToLife for cell to send destruction is configurable and overridable by the game per GridSpatialization2DNode.
Exposed ReplicatedDormantDestructionInfosPerFrame CVar to have control over optimization levers.
Added Profiler markers to measure impact of enabling dormant actor cleanup.
Network Insights now supports capture of demo recordings.
[Iris] Implemented support to allow descriptors built for structs derived from FastArraySerializer. Contains additional properties to be handled by using an explicit ReplicationFragment.
Added new parameter OldArraySize to FastArraySerializer::FPostReplicatedReceiveParameters containing the size of the fastarray prior to the last receive operation.
[Iris] Implemented delta compressed variants of WriteSparseBitArrayDelta and ReadSparseBitArrayDelta.
[Iris] Added new trait UseSerializerIsEqual to NetSerializer to indicate whether it should use the serializer's IsEqual method instead of using property comparison. An example of where this is used is GameplayAbilityRepAnimMontageNetSerializer.
Improvement:
Improved support for debugging controlled reconciliation and rollbacks in the Network Prediction plugin via command console variables.
Improved replicated subobjects:
Refactored subobject refcounting so its lifetime is independent of the NetworkObjectInfo.
Fixed incorrect refcounts when ActorChannels are still not cleaned up while the NetworkObjectInfo of an actor was destroyed.
Crash Fix:
Fixed a crash in ReplicationStateDescriptorBuilder in Iris when building descriptor structs with CustomNetSerializer if compiling with clang.
Bug Fix:
Fixed ensures in dormant refcount code that were caused when an invalid replicator in a channel's ReplicationMap was removed.
This was caused by a safeguard that tried to remove any dormant replicator of the pointer reused from a now invalid subobject.
This safeguard was removed for two reasons:
Dormant replicators are always validated before being returned, so there is no need to manually discard them.
A dormant replicator cannot be stored in both the ReplicationMap and the connection's dormant list.
Fixed a bug in the Network Prediction plugin where a temporary client hitch could result in significant and permanent lag in server-side input consumption.
Fixed a bug in Iris where class default objects and archetypes could be destroyed on the client when the server stopped replicating them.
Fixed a bug where Network Prediction simulated actors could be invisible on other clients when sim proxy interpolation mode was used.
Fixed a case where replays could discard external data saved in the first few frames of recording.
Fixed actor tear off behavior to respect the actor channel close reason, even if the final property bunch is dropped.
Added ensures in NetGuidCache::Supports and ObjectRefereceCache to prevent replication of references to objects pointers that belong to another PIE instance. Added guards in GameplayDebuggerLocalController to not forward calls to RPCs via delegates from other PIE instances.
Fixed a potential freed memory access in partial bunch handling.
Iris - Fixed issue where custom property overrides was not properly initialized for iris if set before BeginPlay/BeginReplication
Fixed potential buffer overflow in DTLS packet handler.
Fixed ensures in dormant refcount code caused when an invalid replicator in a channel's ReplicationMap gets removed. This was caused by a safeguard where the code tried to remove any dormant replicator of the pointer reused from a now invalid sub object.
Fixed the network driver IsInTick call for derived classes.
Fixed several issues with restoring the state of placed actors during replay scrubs.
Fixed an issue with torn off actors in replays where not all modified properties would be recorded.
Fixed socket GetLocalHostAddrViaConnect returning the wrong address type on some platforms.
Fixed push model fast array tracking to not skip updates if there are unacknowledged property retirements.
Fixed several issues with the seamless travel networking code when pending kill is disabled.
Fixed race condition where clients would sometimes be sent new actors before seamless travel finished, which broke their replication.
Fixed return of temporary string address in network property registration.
Fixed bIsQuantizedState flag not being property set in a bunch of NetSerializers in Iris.
Fixed issue where AActor::SetReplicates(false) would not stop replication for Iris.
Fixed issue with AActor::EndReplication not being forwarded if bReplicates is set to false prior to call even if the object was replicating.
Fixed AActor::GetNetMode when called early in PIE/network startup to ask the world if there is no net driver yet, this allows better detection of dedicated servers at the actor level.
Changed several debug commands in the save game replay streamer to be asynchronous file operations to avoid large game thread stalls.
Replaced several replication graph strong references with weak pointers to prevent garbage collection issues.
Changed the Basic Replication Graph's GridSpatialization2D node to use UE_OLD_WORLD_MAX.
[Iris] Fixed registering RPC-functions for subobjects with COND_Never so that they can be called even if the subobject does not replicate.
[Iris] FastArraySerializer PostReplicatedReceive is now properly called for all relevant paths through FastArrayDeltaSerialize on the receiving side.
[Iris] Fixed a few bugs related to tearing off SubObjects:
Tearing off objects with no replicated state data.
Subobject owner was not marked dirty when we dropped creation info for the subobject which then would not replicate until the next time the owner was marked dirty.
Client could get a bitstream error if we got a replicated destroy for a yet to be created subobject.
NetTrace not working properly with ReplicationSystemTest.
Fixed an issue where handles were sent instead of names for dynamic array properties if the name serialize property type option was enabled.
Fixed an issue with GameplayEffectContext replicating a reference to a dynamic object that would never be replicated.
This prevented GameplayEffect from calling Owner->HandleDeferredGameplayCues(this) as bHasMoreUnmappedReferences would always be true.
Fixed an issue when an attached actor is created, the absolute scaling was sent to the client instead of the relative scale to its parent.
This caused issues because the scale would then get treated as the relative scale, causing the scaling to be applied twice.
Deprecated:
Deprecated the DormantReplicatorMap.
Removed:
Removed hardcoded Iris prioritizer for PlayerState as it is configurable in .ini files.
Removed deprecated Replication Graph code.
Level Design and Art Tools
Geometry Core
New:
Added a FindAnyInRadius query, which can stop searching as soon as any point within the search distance has been found.
The C++ Mesh AABB Tree class now has an IsWithinDistanceSquared method, which can early-out faster than the standard FindNearestTriangle.
The C++ TConstrainedDelaunay2 Add function now has an AddWithIntersectionResolution version, which attempts to resolve self-intersections in the input before triangulating.
Added GetVerticesBounds function, which computes the bounds of subsets of a mesh's vertices, to the TMeshQueries class.
Added GetTrianglesBounds function, which computes the bounds of subsets of a mesh's triangles, to the TMeshQueries class.
RecomputeOverlayTriNormals function has been added to the FMeshNormals class, which recomputes normals on a subset of the Normals Attribute Overlay.
RecomputeOverlayElementNormals has been added to the FMeshNormals class, which recompute normals on a subset of the Normals Attribute Overlay.
Added a FMeshTriOrderedEdgeID type, which represents an integer edge ID of a mesh as a (triangle, triangle-edge-index) pair, where the triangle edge index is the 0/1/2 index into the edges of the triangle. This represents a mesh edge in a way that is stable across mesh edits which may affect edge IDs.
ConvertLoopToTriOrderedEdgeLoop utility function has been added.
Added a ConvertTriOrderedEdgeLoopToLoop utility function.
Added a wrapped version of the fTetWild third party library to the GeometryProcessing Plugin; providing users a way to reliably construct a reasonably good-quality tetrahedral mesh from any triangle mesh input.
GrowToConnectedVertices function has been added to the FMeshConnectedComponents class, which behave similar to the existing triangle variant.
GrowToConnectedEdges has been added to the FMeshConnectedComponents class, which behave similar to the existing triangle variant.
Added a Tetrahedron3 type in TriangleTypes.h, and a new TetUtil.h header with common tet operations.
Replaced the deprecated template VectorType versions of the GeometryCore Exact Predicate functions with non-templated inline functions that handle the standard vector types–since we cannot deprecate the fully generic template version. If you need to call these functions with a custom vector type, please use the deprecated versions as reference to convert your call to any of the very similar non-deprecated function calls.
Improvement:
The mesh Fast Winding code has been optimized to better re-use cached values and avoid some unneeded square root function calls.
FSparseDynamicPointOctree has been significantly optimized and now supports parallel construction from dense point sets, via ParallelInsertDensePointSet.
The C++ TPointHashGrid class has been optimized to reduce memory allocations during queries and to early-out faster in common usage patterns by testing the closest grid cell first.
Updated the FindPointsInBall method to return the number of points found, not the number of points in the append array on return.
Updated the GeometryCore sparse dynamic octree class to now use range iteration to find relevant root cells for point containment and range queries, when there are enough root cells that this is likely to be faster than testing all root cells.
Bug Fix:
FDynamicMesh3::EnableMatchingAttributes can now support more granular control over whether existing attributes are cleared or discarded. Various higher-level code that uses this function now have improved behavior around meshes with mismatched attributes.
Fixed the UDynamicMeshComponent::SetDynamicMesh function to now change the Outer of the incoming mesh to be the UDynamicMeshComponent. This is necessary to avoid serialization issues easily created in Blueprints which would result in the UDynamicMesh not being saved with the Component after it has been Set.
Fixed the BrushToDynamicMesh conversion class to now compact the final FDynamicMesh3 after welding vertices.
Deprecated:
The GeometryCore Exact Predicate functions are now const-correct, and we have deprecated the template VectorType versions of these functions.
Geometry Script
New:
Added Sample Texture Render Target 2D At UV Positions node, which returns a list of colors obtained by sampling a texture render target at a list of UV positions. This node is the render target analog of the existing Sample Texture 2D At UV Positions Geometry Script node.
Updated the Geometry Scripting plugin modules that can be used at Runtime, to now load PreDefault to ensure they are loaded before any user plugins that might reference Geometry Scripting.
Added a GetMeshHasTangents function.
Added a DiscardTangents function.
A GetMeshPerVertexTangents function has been added.
Added a SetMeshPerVertexTangents function.
A SetMeshPerVertexNormals function has been added.
Added a UpdateVertexNormal have been added
A new function TranslatePivotToLocation has been added to simplify setting the "Pivot Point" / Origin of a UDynamicMesh
A new function SetAllMeshVertexPositions has been added to update all the vertex positions of a UDynamicMesh from a list of computed positions
A set of utility functions for creating and manipulating Transforms has been added, including MakeTransformFromZAxis, MakeTransformFromAxes, GetTransformAxisVector, GetTransformAxisRay, and GetTransformAxisPlane
GetInterpolatedTrianglePosition function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.
GetInterpolatedTriangleUV function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.
GetInterpolatedTriangleNormal function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.
GetInterpolatedTriangleNormalTangents function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.
GetInterpolatedTriangleVertexColor function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.
Added a GetHasTriangleNormals function to provide more granular access to mesh normals and vertex colors.
GetTriangleNormals function has been added to provide more granular access to mesh normals and vertex colors.
Added a GetTriangleNormalTangents function to provide more granular access to mesh normals and vertex colors.
GetHasVertexColors function has been added to provide more granular access to mesh normals and vertex colors.
GetTriangleVertexColors function has been added to provide more granular access to mesh normals and vertex colors.
Added asset creation and binding functionality for skeletal meshes.
Bug Fix:
Added a Delete Isolated Triangles input pin to the Fill Options struct of the Fill All Mesh Holes node.
Corrected the incorrect handling of textures with source format BGRE8. This correction affected the Sample Texture 2D At UV Positions geometry script node.
Modeling Tools
New:
Moved UV Editor 2D viewport behavior targets to EditorInteractiveToolsFramework for reuse in other editors.
Merged the codebases of shared tool operations between the UV Editor and Modeling Mode for consistency and improved development.
Improved the documentation of options in the SubDiv tool.
Updated the PolyCut tool to avoid trying to fix holes by default and provide a warning.
Made various settings accessible via the cog icon in Modeling Mode Quick Settings.
The TriSel tool now has a By Material (All) selection option, to select triangles by matching material ID across an entire mesh without considering connectivity. The previous By Material option is now named By Material (Connected).
Fixed readability issue in mesh statistics display.
Created a new MeshTopologySelector base class.
Added a new BoundarySelector class which inherits from the MeshTopologySelector base class. The new Boundary classes use FMeshBoundary loops to define selectable loops rather than FGroupTopology.
Added new helper methods to determine the count of Actor Components that match Target Requirements and an additional test predicate for specialized scenarios.
A couple of helper methods were added to test for Volume components and component classes that support UVs. This is to support and fix the issues surrounding the UV modeling tools that shouldn't be viable for Volume type targets.
Fixed incorrect handling of texture source format BGRE8 in UE::AssetUtils::ReadTexture function.
Improvement:
Fixed a minor readability issue of the UV field in the Mesh Statistics section of the Simplify tool.
Improved the display of options in the SubDiv tool, including updates to tooltips.
UpdatedUV Projection Tool to allow the user to change the Initialization mode and have it affect the current instance of the tool, as long as they do it before modifying the transform.
The MshMrg tool has been renamed to Merge.
The MshDup tool has been renamed Dupe.
The Merge tool has been renamed to Union.
Updated existing GroupTopologySelector to inherit from the MeshTopologySelector base class.
Changed the Hole Fill tool to use BoundarySelectionMechanic instead of GroupTopologySelector.
Updated FMeshBoundaryLoops to fail untangling a loop with bowties but still continue processing other loops.
The Group Paint tool can now draw numeric IDs of visible PolyGroups, as well as draw the ID of the PolyGroup under the cursor.
The Inspector Tool can now draw numeric triangle, edge, vertex, and PolyGroup IDs, and supports picking from the set of available PolyGroups.
Expanded the set of override render materials.
Added a PolyGroup Layer picker.
Updated materials used by the Modeling Mode tools and the UV Editor to make use of the new Switch material node. The update removes any custom nodes currently in use, and generally fixes issues related to material compilation under Restricted mode.
Added undo and redo support for actions while in corner mode of the Cube Grid tool.
Updated the Cube Grid tool to refresh the Modeling panel when initializing from Actor.
Bug Fix:
Fixed the toggle gizmo action in some tools by unbinding it from a default hotkey to prevent users from accidentally pressing it and thinking the tools are broken. Users can still set their own hotkey if their workflow benefits from it.
Fixed a crash in the Merge tool when a mesh uses a material ID that is not in its material list.
Updated the Subdivide tool by preventing it from running with level 0 specified. For example, if the input mesh is very high resolution and the subd level is automatically capped.
Fixed undo and redo when Ctrl + Middle-Clicking in the Cube Grid tool.
Fixed old selection being visible when clicking away from everything while using the Cube Grid tool.
Fixed a bug where the Trim tool starts a potentially expensive boolean calculation when only the opacity color alpha changes.
Updated the MshToVol tool to always attempt to simplify volumes it creates, if those volumes would have more than 200 faces. This helps avoid the creation of volumes that are too large for the BSP processing code to handle, which could otherwise cause the editor to hang.
Updated the Subdivide tool to not ensure the subdivision level is zero, since it might have been restored to zero from the previous tool use.
Fixed the Pivot tool not working on things with static and stationary mobility.
Updated the MatEd tool to prevent the creation of meshes with more materials than material slots.
Fixed a bug where the Smooth Borders action in TriSel tool could not be undone.
Fixed Triangle Edit tool's Flip Edge operation selecting wrong edges afterward.
Resolved Static Mesh's sockets from getting lost when merging Static Meshes by adding a Merge Mesh Sockets option to the Merge tool's settings.
Updated packing UVs to avoid relying on the UV area to scale triangles in the UV map, instead, it uses the edges length (perimeter).
Fixed invalid array access in FDynamicMeshUVEditor::SetTriangleUVsFromConformal.
UV Editor
New:
Adjusted the behavior of the Transform quick rotation buttons to rotate clockwise for positive rotation values and counterclockwise for negative values.
Changed axis colors in UV Editor to align with the Level Editor.
Bug Fix:
Cleaned up tool tip text in the Transform tool to be more consistent between different buttons.
Added support to correctly handle the initiation and termination of Play In Editor (PIE) mode in the UV Editor. This properly restarts the selection tool upon finishing PIE and adds new warning messages indicating that PIE is currently running.
Fixed issue where selections for unwrapped meshes were being used for focusing the viewport to the selection in the 3d viewport.
Fixed UV Editor to avoid loading content browser items when trying to figure out whether UV editor can be started on them.
World Building
New:
Added wp.Runtime.UpdateStreamingOptim.Enable to enable it. This is off by default.
Added advanced options to control how aggressive the optimization is when using wp.Runtime.UpdateStreamingOptim.LocationQuantization and wp.Runtime.UpdateStreamingOptim.RotationQuantization.
Added support for masked materials with Merge Actors flatten material.
Added showing child actors of child Level Instances even when editing a Level Instance.
Added World Outliner filter "Only in current Data Layers" similar to "Only in Current Level".
Exposed DataLayerLoadingPolicy for licensees to be able to override the default OR behavior of Editor Is Loaded flag.
Renamed "Build Minimap" to "Build World Partition Editor Minimap" to remove confusion with in-game or HUD minimap.
Removed support on single actor packaging mode for One File Per Actor and Folder Objects.
Added events for HLOD registration/unregistration in the world for World Partition - HLODs
Added the ability to preview the pivot location when changing it from the Details panel when using the Level Instance Pivot Picker.
Pivot Actor Picker is no longer restricted to Level Instance actors.
Added editing of the HLOD Layer property for Actors inside Level Instances in World Partition
In editor World Partition builds that launch external commandlets are now cancellable.
Added scope transactions around WorldPartition EnableStreaming and CanBeUsedByLevelInstance properties so they can be captured as transactions.
In WorldPartition: IStreamingSourceProvider can return more than one StreamingSource.
Added TargetBehavior so a StreamingSource can be applied on its Targets or on all Targets excluding its targets.
Added Destructible HLOD support using HLOD modifiers for World Partition - HLODs
Added BugIt menu (prints BugItGo command in console and to clipboard) to WorldPartition Editor
Added the -DiffDirtyActorDescs option to World Partition - ResaveActorsBuilder commandlet to compare the old & new Actor descriptors.
Added the "-ActorClassesFromFile=
" option to the World Partition - ResaveActorsBuilder commandlet to read a list of classes to filter on from a file (one class per line). Added support for runtime HLOD modification to World Partition - HLODs.
An HLOD modifier class can be assigned to an HLOD Layer in World Partition - HLODs.
HLOD Modifier classes can inject new components during an HLOD build in World Partition - HLODs.
Improvement:
Optimized World Partition update streaming state by avoiding computing streaming source spherical sector intersection information when the source is a sphere and avoiding validating cell coordinate when already done. Also optimized FSquare2DGridHelper::ForEachIntersectingCells.
Added "Browse to asset" on Data Layer items in Data Layer Outliner.
WorldPartitionStreamingPolicy::UpdateStreamingState can now detect if there is nothing relevant to World Partition streaming changed and early-out.
Removed Data Layer AccentBlue color for Data Layers used by actor selection so that current editing Data Layers always keep their green color.
Double clicking on Data Layers in the Data Layer outliner now adds or removes the Data Layer to/from the editing context.
Bug Fix:
Fixed condition for bRenderOpacityMask to be correctly based on the OpacityMask property instead of Opacity property.
Fixed loading editor only material in FWorldPartitionRuntimeSpatialHashGridPreviewer when cooking.
Fixed when showing Actors and Level Instance content in the Data Layer outliner, not interacting with level instance part of a Data Layer.
Removed "Rename Data Layer" menu entry in Data Layer Outliner for maps using Data Layer Assets.
UWorld::AddToWorld now only calls FAssetCompilingManager::Get().ProcessAsyncTasks() on a MakingVisible streaming level if its time limit hasn't been reached.
Fixed crash when exiting PIE where World Level Instance subsystem is accessed by uninitializing instanced World Partition after world subsystems are deinitialized.
Foliage Actor type was not available in the Foliage palette even for non-partitioned worlds.
Fixed bad World Partition cell bounds when containing level instance actors.
Fixed crash in PIE/Cook in World Partition maps using old/unsupported Foliage Type Actor.
Fixed crash when loading Actors with child actor components when AActor::RegisterAllComponents/RerunConstructionScripts would recreate child actors and loading code would process old/destroyed child actors.
Fixed an issue with UWorldPartitionRuntimeVirtualTextureBuilder when rebuilding scene primitives after shader compilation completes at start of RVT builder commandlet.
Fixed Data Layers Loaded In Editor and Not Loaded in Editor flags not properly read from the EditorPerUserSettings config file.
Fixed check when using "Make Current Data Layer" after deleting a Data Layer in the outliner.
Fixed crash when stopping PIE and loading instanced partitioned worlds.
Fixed unloading of an instanced partitioned level with streaming enabled.
Fixed Foliage Replace With option where target foliage type is already used.
Fixed crash when opening Data Layer menu after closing/reopening the Data Layer Outliner.
Fixed crash when running with -server in map containing Actor Folders and fixup of a folder is necessary.
Fixed FWorldPartitionStreamingSource default ctor.
Fixed HLOD runtime Data Layers that were not properly assigned on HLOD actors generated for HLODLayers above first level.
When looking for the cell that contains a subobject in the World Partition level streaming policy, use the runtime hash in the World Partition as the outer instead of the World Partition itself.
Added a check to make sure that HLOD runtime grids that contain net relevant actors are flagged as not bClientOnlyVisible. Multiple HLOD layers can point to the same runtime grid. The runtime grid must be available on the server if any of the layers requires it.
The PackedLevelActor Blueprint now recompiles the skeleton class after clearing SimpleConstructionScript to avoid component name clashes when adding the new components.
Provides the full set of command line arguments as provided for the editor launch when invoking external commandlets (for HLODs/Minimap) with World Partition.
Fixed issue with HLODs being built before construction scripts were fully executed on their source Actors.
Reload current map when Build Minimap or Build HLODs commandlet fails
Replicate World Partition - HLOD Actors if any of their components needs to be replicated.
World Partition - HLOD Actors don't need to be loaded on the server if they have nothing to replicate.
Ensure Actors references are loaded when building HLODs. Specifically, parent actors could be missing, causing the HLOD source actors transform to be wrong.
Deprecated:
Deprecate TargetGrid/TargetHLODLayer in favor of TargetGrids/TargetHLODLayers.
Localization
New:
Implemented async loading of localization data, and extended dynamic loading to handle explicitly loaded plugins.
This change takes the existing 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 (for example, after a loading screen) by calling FTextLocalizationManager::WaitForAsyncTasks.
Introduced the keys debug culture.
When users switch to this culture, all the localization text that is displayed will instead display the localization key of the UI test.
This allows users to easily see the key of the localization text that is localized incorrectly or not localized at all, allowing them to track down the issue faster.
Users can change the culture using the command line argument -culture=keys.
They can also do the same in the in-game console.
If the key is too long, users can use a console variable Slate.LogPaintedText to log all keys painted on screen to match the full key in the output log.
Updated Smartling to download translations for files that are both in progress and published. This allows partial translations to still be exported to translated .po files.
Updated Smartling localization to use Smartling namespaces to reduce duplicated strings and leverage the string sharing feature for Smartling.
Improvement:
UX improvements for the in-editor culture picker.
Bug Fix:
Fixed the localization gather failing to gather text from external actor packages.
Fixed a localization warning for tvOS.
Online
New:
Separated Online Services Session information into constant FSessionInfo and mutable FSessionSettings.
Added IsPresenceSession method to Sessions interface.
Refactored UpdateSession method into UpdateSessionSettings and UpdateSessionMember.
Added auxiliary methods and operators to simplify update data operations.
Added ability for types of social users to override which interactions are available for a given user via overriding
GetAllAvailableInteractions
andHasAnyInteractionsAvailable
.Added OnNetworkConnectionStatusChanged event to FCoreDelegates.
Added GetNetworkConnectionStatus function to FGenericPlatformMisc.
Fixed social toolkit broadcast delegate unbinding.
Improvement:
Refactored USocialUser OnNewSocialUserInitialized to not use a global map.
Bug Fix:
Fixed order of arguments passed to UE_LOG_ONLINE to match the format types.
FWebSocketModule::Get now loads the WebSockets module if it is not loaded.
Added ensure and warning log when a local social user is not properly initialized.
Fixed bug to let initialization of Cloudkit finish before trying to read anything from it.
Fixed a patch check from running and ignoring the result when configured to skip.
Hotfix System
New:
Added support for hot-fixing application variants of dedicated server files.
HTTP
New:
Added the
FHttpManagerRequestCompletedDelegate
delegate to the HTTP manager that is fired when an HTTP request completes. This will allow for games to add analytics around HTTP request completion.Added HttpFwd.h for HTTP and HTTP Retry System forward declares.
Bug Fix:
Fixed issues with URL parsing.
Added missing bounds check and adjusted existing bounds checks to avoid potentially overflowing an int32
Fixed LastReportedBytesSent/Read not being reset on a new request.
Online Subsystem
New:
Added GetVoiceChatRoomName method to sessions interface with EOS and EOSPlus implementations.
Updated AppleHTTP implementation to use NSURLSession by default instead of deprecated NSURLConnection.
Implemented AddRecentPlayers in friends GDK interface when using MPA.
Updated Facebook SDK on Android to 15.0.1 in OnlineSubsystemfacebook.
Added IUniqueNetIdEOS class to get Epic Account Id and Product User Id from OnlineSubsystemEOS net ids.
Upgraded EOS SDK to EOS-SDK-24099393-v1.15.5
Use console variable to "choose default gamertag" component for GDK username displaying, so developers can choose different gamertag modes to try out at runtime.
Engine plugins have migrated to setting specific API versions in EOS options structs, rather than API latest. Please see the OSS EOS "Upgrading the EOS SDK" documentation for more details.
EOS Engine plugins have migrated away from static asserts to catch updates to EOS SDK options structs, towards a deprecation like warning mechanism, which can be silenced by setting "[EOSShared] bEnableApiVersionWarnings=false" in the Engine ini hierarchy.
Online-related configuration has moved from Default to Base
.ini
config files to avoid overriding project settings.Added OnlineExternalUINull OSS interface to allow emulating console/mobile platforms on PC.
Moved existing testing config variables to OnlineSubsystemNull.cpp and exposed them as proper console variables so they can be changed at runtime.
Added SupportExternalUI, RequireShowLoginUI, and ForceShowLoginUIUserChange options to emulate a platform user change during login.
Fixed some deprecations and issues found in OnlineSubsystemFacebook RESTful implementation.
Added MPA support for OnlineSessionInterface on GDK.
Can be switched on when a game does not rely on hopper matchmaking or playfab netdriver.
EOS AuthScopeFlags are now configurable.
Output console exe result in console window for Online Services.
Extended the OnlineGameActivity interface to allow for querying player's game activities.
Improvement:
Improved logging for USocialParty UpdatePartyConfig Completion.
Refactored OnlineSubsystemGooglePlay to update Google Billing Library to v5.0.0 and fixed several issues.
Updated FacebookSDK for iOS in OnlineSubsystemFacebook to v15.0.0 and removed unsupported functionality.
Refactored and cleaned up in app purchases implementation in OnlineSubsystemIOS.
Crash Fix:
Fixed crash in OnlineSubsystemGooglePlay for Android in 32 bit architectures when logging purchases information.
Fixed a crash when rematch after canceling matchmaking in joining game session state when using MPSD of OnlineSessionInterface by making it not able to cancel in joining session state.
Bug Fix:
Fixed OSS EOS CopyLobbyAttributes not updating existing keys.
Fixed an issue on GDK that some player names are truncated without reaching the length limit.
Steam GetLinkedAccountAuthToken now takes a TokenType parameter so you can ask for a specific token type.
For Steam, App and Session are valid options.
Passing an empty type defaults to App, but what is the default is also configurable.
In 5.0 GetLinkedAccountAuthToken returned APP tokens, and in 5.1 we made the breaking change to return SESSION tokens instead. This change has now been reverted back to APP tokens by default.
FUniqueNetIdRepl::ExportTextItem now wraps some net id values in quotes, to ensure they will import correctly with ImportTextItem. Net id types that import correctly without quotes will continue to export without quotes.
Fixed bHasVoiceEnabled being loaded from OSSPS5 config, not OSS config.
The -EpicSandboxId argument passed by EGS is now handled correctly, and selects the config artifact with the matching EpicApp and SandboxId pair.
Fixed iOS GameCenter login flow on OnlineSubsystemIOS that was assuming native login UI can be shown more than once and not triggering OnLoginComplete and OnLoginStatusChanged in cases the user rejected the login or log out/in from the GameCenter device Settings after moving to background
Resolved OSS EOS FUniqueNetIdEOS hashes not being stable when the net id mutated (for example, adding or removing PUID or EASID on account link or unlink), leading to broken sets/maps using the net id as a key.
OSS EOS and EOS Plus: Resolved OSS EOS and OSS EOS Plus net ids being incompatible, leading to crashes when playing together. OSSEOS will drop the platform id from OSSEOSPlus net ids, but this is recoverable with QueryExternalAccountIdMapping.
OSS: CreateUniquePlayerIdWrapper prefers to load a net id with the mapped OSS, if one is configured for the input net id type.
Fixed possible loss of precision in OnlineSubsystemGooglePlay when passing currency prices through JNI from GooglePlay Billing Library data.
Ensure recreation of XblContextHandle after reconnecting to network to avoid MPSD creating/updating issues on GDK.
Fixed online beacon authentication hang which occurs when multiple beacon connections from the same player are handshaking at the same time.
Fixed an issue causing non-deterministic OSSv2 SchemaCompatibilityIds.
Fixed an issue to set local name in the EOS lobby on create and join.
Refactored FOnlineAccountIdRegistryNull to be stable across service restarts.
Deprecated:
Deprecated of the OnlineSubsystemOculus plugin.
Meta is now responsible for building and releasing the OSS Oculus plugin via their OculusPlatform which is available on the UE Marketplace.
Removed:
Owning User Id attribute removed from EOS Sessions and Lobbies logic to prevent misuse.
Owning User Id retrieval in EOS Lobbies refactored to use the related EOS SDK logic.
The removed functionality in Sessions will be re-added when this same information is made available via EOS SDK.
Pixel Streaming
New:
Multiple pixel streaming streamers can now connect to the same signaling server. This requires streamers to have unique IDs and players must now subscribe to an active streamer. Most of this is handled with changes in the Pixel Streaming Infrastructure git. Old behavior with single streamers connected shouldn't be affected and should still behave in the same way.
Added a new, experimental, unified framework for video encoding and decoding in Unreal Engine - AVCodecs.
Current support is for hardware accelerated H.264/H.265 on NVIDIA and AMD cards.
Further documentation and API stability will come in subsequent versions of Unreal Engine.
In 5.2 Pixel Streaming now uses AVCodecs for its hardware accelerated video encoding.
Added experimental VR Pixel Streaming support.
This requires the latest frontend infrastructure from the PixelStreamingInfrastructure repository found on Epic Games Github page.
This requires you to disable the OpenXR plugin if your VR headset is connected to the same machine as your Pixel Streaming application.
Added new console variables:
PixelStreaming.WebRTC.NegotiateCodecs
: enables Pixel Streaming and whether Pixel Streaming should send all its codecs during handshake so peers can negotiate or just send a single selected codec.PixelStreaming.ExperimentalAudioInput
: enables experimental mixing of arbitrary audio inputs which can be fed in using the Pixel Streaming C++ API.PixelStreaming.CaptureUseFence
: enables whether the texture copy we do during image capture should use a fence or not (non-fenced is faster but unsafer).PixelStreaming.DecoupleFramerate
: enables whether we should only stream as fast as we render or at some fixed interval (potentially sending duplicate frames or skipping frames). Coupled means only stream what we render.
Added the ability to use multiple different video codecs at once.
Added debug information to onscreen stats about which codec is selected for encoding.
Added module startup logic to PSPlayer to always negotiate codecs. This is a temporary fix until we move to NegotiateCodecs being the new default globally.
Input handling moved out of Pixel Streaming into the new PixelStreamingInput module.
Added instrumentation to Pixel Streaming so it shows up in Unreal Insights.
Added the new IPixelStreamingSignallingConnectionInterface. This allows users to implement their own FPixelStreamingSignallingConnection that can use other protocols e.g. NATS.
Added the ability to stream render targets using Pixel Streaming blueprints.
Added support for DX11 with AMF.
Added support for
get_ps_servers.bat
andget_ps_servers.sh
to pull down a release from Github.Downloaded Pixel Streaming infrastructure now creates a DOWNLOAD_VERSION file that tracks the downloaded version and if the latest release version is mismatched the frontend is redownloaded.
Added binary websockets message support to Pixel Streaming streamer.
Added support to set custom "command" handlers for datachannel messages that are of type "Command". This is useful if your project needs to run an Unreal Engine command that is not supported out of the box by Pixel Streaming. Or alternatively, if you wish to override existing commands and change what they do.
The IPixelStreamingStreamer interface now supports passing arbitrary configuration strings to the streaming client upon establishing a connection. This is now used to inform the Frontend to default to Hovering mouse mode if streaming from the editor.
A
TextboxEntry
command was added to allow support for sending entire strings as opposed to character by character updates.Add support for PixelStreaming VCam to resize UE viewport to match remote device resolution. This is useful when using the LiveLink iOS app with Pixel Streaming VCam as the streamed resolution will now match the iOS device.
Extended JSON handling in Pixel Streaming to handle nested JSON objects.
Crash Fix:
Editor streaming crash where window hashing function wasn't unique. Hash function has been made unique by incorporating the window title.
Pixel Streaming delegates causing a crash when using Linux dedicated server target.
Fixed Pixel Streaming AudioInputMixer crashing on shutdown when using -PixelStreamingExperimentalAudioInput.
Fixed deadlock issue that would cause Pixel Streaming streams to freeze and crash intermittently.
Bug Fix:
Shell version of
get_ps_servers
script was not copying files/folders beginning with ".".Fixed
stat PixelStreaming
not working when streaming in editor.Cursor now shows up by default when editor streaming and browser no longer needs url parameters
/?hoveringMouse=true
.Memory leak in editor streaming that would occur when popups were open.
The built-in Signaling Server for Pixel Streaming directly from the editor now defaults to port 8080 when used on Linux. This now allows use of Editor Streaming on Linux without having to launch the editor with elevated permissions.
Fixed an issue where the streamer did not provide a port in its PixelStreamingURL.
Fixed a deadlock that could happen when using dx11 on AWS instances.
Fixed a crash when using -onethread and VPX encoding.
Fixed a Pixel Streamed application being unable to scale mouse input due to target window being nullptr at load.
Fixed Editor streaming where assumed editor window was always located at (0,0). This resulted in incorrect input when a window was placed to the left of the main editor window or when the editor wasn't maximized.
Removed:
Version M84 of WebRTC.
Websockets
Bug Fix:
Fixed WebSockets to follow Epic's Coding Standard for Inclusive Word Choice.
Platform
New:
Deprecate half-implemented and unused FPlatformMisc::GetCacheLineSize to get runtime cache line size We currently have no use case for a runtime-queried cache line size and the function only existed on a subset of our supported platforms
Added
IMediaCaptureSupport
for macOS and iOS. This makes it possible to capture audio and video through the media framework.Added a simple replay-based PGO Gauntlet task.
Added a TargetRule to remove FixedTimeStep/Deterministic mode from a project.
You can now run AutoSDK installation with Turnkey from any copy provider.
Added a new callback to staging that allows for finalization of staged files.
Added a default implementation of GetCookPlatform, which makes it possible for BuildCookRun to run without needing any platform-specific automation DLLs. Previously, cook and staging could run, but running and packaging till needed the platform automation DLLs.
Bug Fix:
CookOnTheFly now correctly applies PluginExtensions.
Plugins are now filtered using
FPluginReference
instead ofFPlugin
to make PluginExtensions discoverable.Previously, PluginExtension
.uplugin
files were not added to the file list for NetworkFileServer due to the Plugin Manager searching only for the basedir of each plugin. Now, when the Plugin Manager tries to find plugins, it now caches the basedir of each child plugin belonging to anFPlugin
, then merges the children into it. After that, NetworkFileServer can then find these directories, exclude them if they are not for the targeted platform, and make them available to the client. MSP 2/15/2023
Previously, installed builds generated without Sony platform support would fail to detect SDKs for other platforms. Now, non-Sony installed builds exclude incorrectly included Sony.Automation.json files.
Fixed PerPlatform property customization to list all platforms in editor properties, not just the ones that TargetPlatforms created.
Removed the PerObjectConfig flag from TextureLODSettings, because it was causing the class defaults to not be read in from
BaseDeviceProfiles.ini
. DeviceProfile needs to be PerObjectConfig, but TextureLODSettings does not, as it keeps its defaults in a normal class.ini
section.Moved per-user-facing settings from ProjectPackagingSettings into a new class,
UPlaformsMenuSettings
. This prevents projects from inconsistently writing settings for the same class to bothDefaultGame.ini
andSaved/Game.ini
, which can cause issues where the editor has one value that doesn't match a target platform.StagingDirectory, which is the user's location to store archived builds, is no longer exposed in settings.
Targets with names like "Foo_Mac" are no longer treated as platform extensions if they aren't under a "Mac" directory. Platform extensions will always include the Platform's name as part of their name.
Desktop
New:
Added Gauntlet PGO Profiling support on Windows platforms. Include
-PGOFastGen
to enable/FASTGENPROFILE
for a better framerate during PGO Profiling. The profiling system now favors the PGC file that matches the executable when building PGO Optimize builds rather than failing.
Crash Fix:
Fixed a crash with Electra player when running DX11 on PC.
Linux
New:
Moved to the new 15.0.1 LLVM Linux Toolchain
Bug Fix:
Fixed a packaging failure on Linux when the project path contains a space character.
Fixed Linux touch ID handling.
Fixed a bug that would cause UMG Overlay mouse/touch input to fail after launching fullscreen Wayland application.
Fixed an issue wherein installed builds on Linux didn't have a stable UUID from machine to machine. This solves problems trying to share projects in a collaborative environment.
Mac
New:
Input chords on Mac now show Option key instead of Alt.
The Mac ARM cache line size is now 128 to improve support for Apple M1/M2.
Added handling for safeAreaInsets for monitors with notched screens in fullscreen mode.
Remove some unused and unexecutable code around getting the monitor name.
Updated minimum macOS requirements to Xcode14.1 & macOS12.5
The Mac editor window will no longer move to the front and cover other floating panels. Now it will work similarly to other platforms.
Undefine
PF_MAX
so it can be defined by UE for pixelformat instead ofsocket.h
. This avoids an unnecessary include chain when includingCocoa.h
.Re-enabled DatasmithC4DImporter plugin now that it has support for Arm64 Macs.
Moved boilerplate program startup code into a shared Obj-C class, MacProgramDelegate, to make GUI programs simpler to create and maintain on Mac.
If CommandLineTools is detected as the build tools location (xcode-select -p), throw an exception with instructions on how to fix it, as the full Xcode solution is required for building from the commandline.
Stop logging the Xcode-select output every run.
Remove Catalina and Metal 2.2 support from Mac.
Improved the project generator solution for Xcode 14 requiring plist file for Mac local signing.
Removed the "Mac short circuit" blocks of code in the project generator, as it was skipping the code that sets up
PLIST
andBUNDLE_IDENT
settings, which Xcode14 needs.The project generator now directs Xcode towards the temporary plist files that it creates.
The project generator now copies the final plist on top of the temp plist file so that Xcode will pull the final plist into the .app at the end.
Updated Mac app and .uproject file icons for new Unreal Engine logo.
Mac builds now default to compiling for Host architecture, not Intel.
Mac now compiles universal binaries by compiling each architecture separately, then using lipo to merge them together.
Codesigning frameworks is now allowed under programs without a .uproject.
Added OneWorkspacePerPlatform and OneRunTargetPerPlatform modes for modern Xcode projects. These modes are disabled by default, as they are not production-ready.
Crash Fix:
Fixed a rare FrontendSession crash on Mac when viewing tooltips.
Fixed crash on Mac in Chromium Embedded Framework when pressing keys in Web Views (like Quixel Bridge) that are bound to the main menu.
Fixed a crash on shutdown in Mac programs. This was caused by TaskGraph shutting down earlier than some Stats code that uses it.
Bug Fix:
Fixed an issue with hostname-to-IP resolution with COTF/Sockets on MacOS.
Fixed an issue where Hot Reload would fail on Apple Silicon Macs, as Unreal Build Tool compiles the changed module as x86_64 by default. Now it checks the system architecture to determine what to compile for.
Fixed various threading and menu initialization issues with Programs on Mac.
Added a warning dialog on macOS (13.0 - 13.3) to ask users to update to avoid dlopen crash.
Fixed the Mac linking of all dependent .dylibs when .cpp changes are made that don't require relinking.
Fixed the path to engine directory for projects that are under a differently named directory on Mac.
Fixed MacPlatformProcess child write pips to block so it doesn't blow the buffer for spammy commands
Fixed Mac Perforce exe location discovery code for cases where it finds multiple P4 locations.
Rolled back removal of MacOSXVersionCompare, which caused a cook error on Mac.
Fixed an issue with Xcode having stale bundle identifiers when codesigning Blueprint projects. Xcode's build cache was caching old data. This change will force the bundle ID to be there so the cache won't cause problems.
Fixed symbolication in CrashReportClient on Mac with universal applications.
Always codesign Mac builds for new Xcode requirements, so Blueprint projects from InstalledBuilds will be signed correctly.
Fixed warning about always running a script phase in Legacy XcodeProjects.
Removed FixDylibDependencies on Mac by making "stub .dylibs" to mimic what Windows does with import libs, to solve circular dependencies
Fixed executable path for programs under Restricted.
Fixed paths when there's an ExeSubDir in the Target.
Mobile
New:
By default, runtime Virtual Textures on iOS and Android use 2 tiles as a maximum number produced per-frame.
XR
New:
Hololens: Usernames are no longer logged to align with other platforms on privacy.
Added new "Set Environment Blend Mode" node to set the OpenXR Environment Blend Mode. This node is currently experimental.
Swapchain format list is now passed to FOpenXRHMD::CreateSwapchain only when a non-sRGB format is requested.
Inserted XR Device Visualization Component in VRTemplate. The component is currently disabled but can be activated from its details panel using the Is Visualization Active checkbox. This can also be toggled from blueprints with the new Set Is Visualization Active Blueprint node available on the components.
HoloLens: Implemented ComputerName() and GetCurrentProcessId() functions.
Added the OpenXR Vive Tracker extension plugin to support Vive Trackers in-game and through LiveLinkXR.
Pico-VR version 3 controller model support has been added.
Added OpenXR headset connection while the editor is running.
Added Instanced Stereo Rendering & Multiview logging at XR runtime initialization.
Reintroduced mobile preview support in VR PIE (using mobile multiview fallback).
Improvement:
Added implementation of GetReferencerName() as required by FGCObject refactor.
OpenXR input is now additionally routed to the Enhanced Input editor subsystem.
OpenXR: Refined CopyTexture operations for layer and spectator screen usage.
Sped up instanced stereo rendering by avoiding branching in shaders. The view buffer duplicates per-view properties and uses the view id to index into them.
Crash Fix:
Hololens SkyAtmosphereComponentCrash fixed.
Bug Fix:
Fixed a bug that caused the SetShowDeviceModel function of Motion Controller Component not to refresh the visualization.
OpenXR: Fixed an off-by-one error which resulted in a trailing '\0' character embedded in FNames returned by FOpenXRHMDModule::ResolvePathToName.
OpenXR: Emulated layers swapchain will not use the prescribed layer format.
Removing ARPins now correctly releases corresponding ARKit Anchors.
Fixed a bug where an empty project name resulted in the project version being used as the application name for SteamVR.
Fixed issues with forward local lighting in mobile multi-view, so spotlights and other similar lights will now show up properly in secondary views (like the right eye).
Fixed foveated Variable Rate Shading behavior when not using instanced stereo. Now correctly uses two foveated patterns (one per eye), rather than a single pattern for both eyes.
Fixed raytracing shaders being affected by vr.InstancedStereo setting.
Fixed Lidar point cloud shader compilation issues in ISR.
Deprecated:
Deprecated GetViewConfigurations and GetViewLocations in IOpenXRExtensionPlugin.
Removed:
Pico-VR version 2 controller model support has been removed.
Removed clip distance method of ISR to reduce code paths (now platforms have to support multi-viewport rendering to support instanced stereo rendering).
XSX
Improvement:
Enabled PLATFORM_SUPPORTS_SM6_0_WAVE_OPERATIONS on XSX shaders.
Bug Fix:
Fixed GPU hangs encountered when utilizing derived PSOs on Lockhart.
Platform Mobile
New:
Translucency lighting type is now supported on mobile.
The reflection capture's encoded HDR data has been changed to RG11B10 format. It skips reflections for simple translucent materials on both mobile forward and deferred. Translucent materials fall back to single reflection or sky capture on mobile deferred if clustered reflection is disabled.
Added TAA pixel shader to use the hardware frame buffer compression on mobile devices.
Stationary/movable RectLights now render approximately as SpotLights on mobile. MSP 2/15/2023
Added support for GBuffer access in translucent materials with Mobile deferred shading enabled. Not yet supported with OpenGL ES.
Addressed lighting scenarios for Reflection Captures for mobile.
Added
bSupportsClipDistance
to DDSPI for mobile shader platforms that supportSV_ClipDistance
.Improved quality and speed of runtime ETC compression for Virtual Textures on mobile platforms.
Improved quality of a certain compressed runtime Virtual Textures on mobile platforms by using sRGB color space where appropriate. OpenGL ES, which does not support texture views, will allocate separate physical spaces for sRGB and Linear data when needed.
Added mobile renderer support for thin translucent materials using dual src blending with DXC if there is hardware support. Not all Android devices support dual src blending, and it's disabled on IOS because it doesn't work with MRT.
Added a new occlusion culling method based on GPU feedback from occlusion geometry. This method reduces the number of drawcalls compared to traditional occlusion queries. It can be activated with
r.OcclusionFeedback.Enable=1
. Works only with mobile rendering at the moment.ShadowQuality is now set to 2 for High-quality device profile buckets on Android/iOS to match quality between Forward and Deferred shading.
Added Variable Rate Shading support for mobile devices where the
VR_KFR_fragment_shading_rate
extension supports per-draw VRS, but not image attachment-based VRS (for example, QCOM 6x devices).Mobile deferred shading will use a view combined ShadingModel mask as an optimization for lighting passes.
Crash Fix:
Fixed a crash on mobile OpenGL when MSAA is enabled without the GL_EXT_multisampled_render_to_texture2 extension.
Fixed a crash that occurred in FShaderCode::GetWriteAccess when r.Shaders.ExtraData=1 on Mac.
Fixed a crash on Android 9 Adreno 630 devices that occurred when rendering an image to a render target, sampling that image in a shader at the same time, but using different mips for each application.
Bug Fix:
Fixed a bug preventing modulated shadows from appearing in shadow preview mode.
Fixed an issue causing GPUScene to incorrectly change velocity on mobile.
Added LinearFilter texture capability flag to fix an issue preventing R16G16_UNORM from working with linear filter on some Mali devices.
Mobile TAA now processes before BloomSetup to fix bloom flickers.
Vertex color support was missing from InstancedStaticMesh on mobile. This issue has been corrected.
Fixed a crash on mobile OpenGL when using Retainer Boxes in UMG.
Fixed rendering issues with deferred decals on OpenGL.
Fixed a bug that caused CustomDepth to fail on mobile OpenGL when not writing to CustomStencil.
CSM caching now invalidates if FOV has changed.
Translucency for Mobile will now render when Debug View is enabled.
Fixed missing Local Lights if overlapping lights are more than 4.
Fixed missing per-instance CustomData in material pixel shaders.
Fixed issues with reflection environment rendering in projects that use Mobile deferred shading.
Fixed an issue where instance-bound extents weren't updating properly when using the mobile renderer.
Updated the mobile renderer to render the geometry when using "Sort Triangles".
Fixed issues with ASTC HDR texture compression.
Addressed overly intense specular lighting with mobile rendering.
Fixed Virtual Texture shimmering on mobile platforms. This adds manual Virtual Texture filtering on platforms that do not use TAA by default.
ScreenSize updates occur in MobilePreview when you select an LOD.
Fixed cases where the World Position Offset material attribute was ignored on Mobile platforms if project uses GPUScene option.
Niagara particle lights now work properly with Mobile deferred shading.
Fixed a normal map compression mismatch between runtime and streaming Virtual Textures on mobile platforms.
Fixed issues with YCoCg compression variants for runtime Virtual Textures on mobile platforms
Fixed a typo for "SecondaryUpscale" in a mobile post-processing.
Fixed a crash when creating the Vulkan render pass.
Mobile Depth of Field now works correctly on D3D11 and Desktop Metal shader platforms.
Fixed an issue preventing Android safezones from updating when orientation changed from landscape to reverse landscape.
Deprecated:
Removed
SupportsCopyImage
as GL ES 3.2 standard hasglcopyImageSubData
.
Android
New:
Optimized DXC for OpenGL to reduce driver impact when uploading Uniform Buffers.
Set Java 1.8 in
sourceCompatibility
andtargetCompatibility
on the engine'sbuild.gradle
.Added Swappy support for Vulkan RHI.
Added AdMob app id and targeted tag/ratings selections to Android project settings.
Update Swappy to the latest version from Google AGDK. This implementation is modified to always use the Java DisplayManager and refresh rate selection.
Enabled Swappy on Android by default.
Added device profile for newly-released Mali-G7xx devices such as the Mali-G715 Immortalis.
Crash Fix:
Fixed a crash when playing a mp4 from UMG.
Bug Fix:
Fixed a copy-paste issue in Android MediaPlayer14, WebView and CameraPlayer14.
Fixed memory leaks on exit in Android applications.
Fixed issues throwing truncation warnings for Android modules.
Added support to receive multicast packets through the Wi-Fi interface. This is needed for LAN sessions to work on Android. You can enable this by marking a new checkbox in Android project settings under Advanced APK Settings to add the
CHANGE_WIFI_MULTICAST_STATE
permission and enable support.Made the center of default Android icons opaque to fix issues with black backgrounds.
Fixed XBox and Razer wired controllers on Android 12+.
Android WebBrowser is now able to handle mouse input. This input is forwarded to webview as touch events.
Use an alternative bitmap rendering mode to support the WebBrowser 3D widget on Quest devices.
AndroidToolChain now uses the common ClangToolChain, and it will properly escape preprocessor definitions.
Allow UPL to use tools schema.
Allow "build" as part of project names.
Fixed a missing flag on PendingIntent calls (now required for Target SDK 31+).
Added key support for Android WebBrowser 3D widget.
Added additional Android controller ids for XBox wired controllers and Razer Kishi.
Fixed installation of Android NDK through the SetupAndroid.command script on macOS.
Fixed AAB archiving issue that occurred by incorrectly adding '-' when architecture was not specified.
Fixed a bug that occurred when rendering custom depth on OpenGL.
Fixed an issue causing Slate elements to not render correctly on some Android devices with Adreno GPUs.
G16 Grayscale textures will fall back to a R16F format, as R16 Unorm format is not universally supported on all Android devices.
Updated Google Play Services versions to remove CVE-2022-2390 issue.
Added an alternative Android File Server startup method. This solves launch failure and bind listener issues.
Fixed an issue with compiling of AFSProject on Mac.
Fixed issues causing Linux to fail to start Gradle.
WebGL and video playback is now permitted in 3D WebBrowser on Android.
Fixed issues with Oculus hardware acceleration.
Set buildToolsVersion in subprojects to match the main project for Android packaging.
Ignore focus events on Android to fix black screen on start problem with splitscreen mode.
Use commandline tools 8.0 instead of Latest for SetupAndroid scripts.
Fixed a missing WindowHandle in Swappy Vulkan initialization.
Disable Vulkan selection on Adreno 660 devices with driver 0525 or older due to flicker bug.
Removed:
Removed old GoogleGameSDK files that are no longer needed.
Removed Java version of MemAdvisor.
iOS, tvOS, and iPadOS
New:
Added module to link against Swift libraries. Some external SDKs may need to link against Swift standard library. You can achieve this by adding the following to the module ModuleRules subclass:
PrivateDependencyModuleNames.Add("Swift");
Add support for XCFrameworks. XCFrameworks can be directly consumed by a module. They can be added like a regular Framework to the module ModuleRules subclass:
PublicAdditionalFrameworks.Add(new Framework("FrameworkName","Path/To/Framework/FrameworkName.xcframework"));
arm64 is now set as the default architecture for iOS when no explicit argument is passed to UBT.
Added tvOS as a compilable target for the Bink Decoder library.
Added support to enable Objective-C ARC (Automatic Reference Counting) for individual modules. ARC support is set to off by default to keep previous behavior. You can enable it for an individual module by setting
bEnableObjCAutomaticReferenceCounting = true;
in its ModuleRules subclass. If ARC support is enabled the module should not consume shared PCHs. The engine won't use ARC extensively in the short term, and using shared PCHs will result in a compile error because shared PCHs were compiled with different flags than expected to be consumed. Avoid exposing public Objective-C interfaces on the module boundaries.Enabled tvOS support for Electra.
Added a popup window warning on Metal platforms when no cooked content is found at startup.
Rebuilt soundtouch with Xcode 13.2.1 to match bitcode on iOS.
Fixed warnings in build health related to iOS 15.
Cleaned up Clang check for older Xcode versions.
Added bluetooth keyboard support on tvOS.
Bug Fix:
Fixed an iOS compile failure when ISPC is enabled.
Fixed missing quotes when Gauntlet runs on iOS with automation test command.
Fixed iphone packager .sln file.
Make sure the certificate chain used to evaluate trust is checked for nil when copied.
Fixed an issue with
FIOSPlatformApplicationMisc::RequiresVirtualKeyboard
that prevented iOS builds.Add a default TVOS DeviceProfile to allow Niagara to correctly cook required content. This allows Niagara CPU Particles to appear on tvOS devices. Niagara GPU Particles are not supported on Apple A8 devices (such as AppleTV HD) due to missing support for IndirectDraw in Metal.
Deprecated:
Disable bitcode by default due to Apple's removal of bitcode support for Shipping builds being uploaded to the AppStore. Refer to Apple's Xcode14 release notes for more information.
Disabled unsupported PixelFormats BC4, BC6H & BC7 for iOS/tvOS and enabled D24.
Rendering
New:
Implemented support for the PixelDepth shading node for Ray Tracing and Path Tracing shaders.
Added support to write screenshots in EXR format when HDR is enabled, on platforms not supporting OpenEXR. The color space used is scRGB.
ISPCTexcomp fix for inconsistent behavior normalizing normals unlike all other TextureFormats. Maintain legacy behavior for existing textures; new textures with bUseNewFilters do not get normalized by ISPCTexcomp.
Added a soft-version of the ISM descriptor that can be used to store templates without loading the resources.
Added working color space support when rendering volumetric clouds with conversions from the sRGB gamut.
Reconnected the r.LUT.Size console variable for controlling LUT resolution in post-processing.
Enabled Virtual Shadow Maps 'Distant Lights' feature by default, significantly reducing the cost of non-moving local lights. Moving lights are automatically exempt from force caching.
Changed how the hair binding skeletal mesh scene proxy lookup is done. This fixes cases where the wrong skeletal mesh proxy is used when the skeletal mesh recreates its proxy while being used by the groom instance.
Prevented unnecessary ray-traced shadow tracing for hair strands, which saves 25% of the shadow cost in test cases with many lights.
Improved per-CV groom color precision from 8/8/8 bits to 11/11/10 bits.
Ray tracing instance counter stats now report active instances and total instances separately. Previously only active instances were reported, which is sometimes misleading. The total number of instances affects the TLAS memory allocation, the instance buffer building compute shader, and TLAS build itself.
Added "Max World Position Offset Displacement" to materials. It is used to clamp World Position Offset to a fixed distance, and to automatically extend the culling bounds of meshes, including the cluster culling bounds of Nanite clusters. Also added the ability to visualize clamped pixels in the "Out of Bounds Pixels" visualizer.
Added the "r.SceneDepthHZBAsyncCompute" console variable to run HZB generation on async compute. This prevents GPU under-utilization in scenes where a very large number of individual occlusion queries are issued. The "r.SceneDepthHZBAsyncCompute" console variable has the following possible values:
0: Don't use async compute (default)
1: Use async compute, start as soon as possible
2: Use async compute, start after ComputeLightGrid.CompactLinks pass
Added PrintBool to ShaderPrint.
Added support for using a stride to skip marking virtual shadow maps every pixel to improve page marking performance (r.Shadow.Virtual.PageMarkingPixelStrideX|Y).
Updated "HairDescriptionBulkData" to use "FEditorBulkData". This prevents loading descriptor data when loading groom assets. It also allows groom assets to be virtualized.
Added MeshDeformer support for Groom. This experimental initial iteration allows you to assign a mesh deformer to a groom instance. The mesh deformer has access to most hair control point attributes. It can write out modified positions (moved/trimmed/...).
Decreased the number of unique materials for hair in favor of supporting larger/hero groom. This is a short term fix. Primitive IDs should instead reference their material through cluster information.
Added diagnostic logging / screen message for showing non-nanite objects overlapping many virtual shadow map pages (r.Shadow.Virtual.NonNanite.NumPageAreaDiagSlots).
When a groom component is attached to a skinned mesh, the skinned mesh is now forced to update its dynamic data immediately, instead of (optionally) deferring them. This makes GDME optimization compatible with groom simulation.
Added "ClumpID" and "Per-Vertex bake AO" attribute support for groom geometry.
Added ShaderPrint zoom.
Unify all hair environment lighting integration. Evaluation is now in a common place and is consistent across calling sites. This changes Lumen hair integration which now simplifies evaluation (integration cost is now smaller). This also ensure dual scattering is properly evaluated for the hair pixel requesting it (such as having "use complex transmittance" bit enabled).
Enabled curve reordering by default, and fix invalid strand radius computation that occurred during groom building, when curve reordering or curve decimation was enabled.
Fixed "FScene::IncrementFrameNumber" to be thread safe (as it is called from the game thread).
Static mesh offline ray tracing data is now released immediately if ray tracing is known to be disabled at run-time due to user settings.
Added shader print assert.
Fixed an issue where RT geometry of hair strands was not visible in the RT debug view mode.
Add a groom view mode menu to the level editor. Unified most groom debug rendering to go through the view rather than console variables.
Mark a primitive scene proxy as excluded from ray tracing if it has no static meshes. Previously it was only excluded if it has no ray tracing geometries, however it is possible for a primitive to have a RT representation but no static meshes. For example, this may happen in the editor when trying to isolate a mesh section with no triangles.
Fixed issue in Global SDF that occurred when multiple objects with Mesh SDF that extended outside the bounding box overlapped.
Screen Space Reflections, Light Functions, Post Process Deferred Decals, and Nanite rendering passes are now affected by Variable Rate Shading.
Changed attribute storage for hair strands. All attributes are now stored in a single ByteAddress buffer, which simplifies adding new or optional attributes. All attributes can now be optional, which saves memory. Attributes which are at per-curve frequency are now stored once per curve instead of once per vertex. This saves memory with an indirection cost. Move vertex to curve mapping into the groom resource rather than the groom resources. GroomAsset size shrink by 5/6% and binding asset size shrink by 45% in simple case.
Compute and sample Global SDF in Translated World Space.
Updated the Variable Rate Shading manager to support using shading rate images from multiple sources. The currently available methods are "Foveated Shading (XR only)" and "Contrast Adaptive Shading". If more than one shading rate source is active, the manager uses the roughest provided shading rate for each pixel.
Improvement:
Improved the quality of mips for normal maps with the new bNormalizeNormals option, which is on by default for new textures.
Normal Maps were not renormalizing normal vectors after generating mips, which caused reduced length normals in the mips, which then bends them when we drop components for compression in BC5 or ASTC.
This will not change existing content, but will only normalize when the new option bNormalizeNormals is enabled.
Volumetric Fog is now a lot more stable under Dynamic Resolution.
Implemented changes to avoid calling GetPrimitiveData() redundantly. This function is large and contributes significantly to the shader compilation cost.
Improved memory management of Nanite Ray Tracing, which prevents out-of-memory (OOM) crashes in large projects.
Crash Fix:
Fixed crashes when importing groom only guide cache or having zero size radius.
Fixed several crashes in the Editor by removing "FLandscapeComponentSceneProxy"'s direct usage of a "UMaterialInterface" on the render thread.
Fixed invalid assert in groom component causing crash when deleting a groom LOD while ray tracing is enabled.
Fixed issues in HeightField object management which caused crashes and issues with height fields missing from the Global Distance Field.
Bug Fix:
Fixed a Materials issue where the InstanceToWorld node was not working correctly in some cases due to incorrect values in the transform matrix.
Implemented a fix to allow the UCableComponent to render to the CustomDepth buffer.
Fixed an incorrect Large World Coordinates error tolerance assert in TLargeWorldRenderScalar.
Fixed a use-after-free bug on Cascaded Shadow Maps (CSM) render target DebugName. Render target names are not copied, and so must be statically allocated to survive the function scope.
Corrected color display of grayscale compression with virtual textures when previewing textures.
Fixed a bug that caused the Virtual Shadow Map (VSM) cache to be invalidated, by adding a separate VSM cache for the views of each Scene Capture component. The memory management of the various page tables will be improved in future versions.
Fixed a bug where the custom culling query was being provided with the wrong VisibilityId value.
Fixed the offset of labels in the Nanite and Lumen overview visualization modes.
Fixed an inaccuracy in comparison of Instanced Static Mesh (ISM) descriptors if either did not have its hash computed.
Ensured that Sky Atmosphere coefficients are properly converted to the working color space.
Fixed an incorrect instance local to world matrix in Materials due to NEEDS_INSTANCE_LOCAL_TO_WORLD_PS being overwritten by a vertex property after a pixel property enabled it.
Fixed an ensure failure in the Dynamic Resolution code where a console variable was being read using the wrong accessor function.
Fixed a use-after-free bug on the Cascaded Shadow Maps RenderTarget debug name.
Fixed an overflow issue in morph target blending that could cause visible cracks in the geometry when blending many large morphs.
Fixed ‘ambiguous type for bit shift' shader compiler spam from "OcclusionMask |= bIsBentNormalOccluded ? (1 << TracingRayIndex) : 0;"
Fixed the LightingOnly view mode so that it works correctly on Static Meshes when Nanite is disabled.
Fixed astcenc swapping RB in TextureFormatASTC. astcenc is off by default.
Fixed a bug so that Mip Gen filters on cube map faces clamp instead of wrap. This could have caused visible seams at cubemap face edges in mip-maps. This has no effect on 2x2 or angular mip filters.
Implemented changes to ensure that the light component color temperature is based on the working color space instead of sRGB.
Implemented changes so that opaque extension rendering occurs after FX rendering. Previously, opaque extension point rendering occurred after hair. This previous order was problematic when opaque geometry was rendered behind hair, as it caused a haloing effect around the hair.
Fixed missing interpolation pass of cards/meshes instance being outside of view. This was causing invalid shadow when the groom was visible in shadow, but in primary view.
Fixed non-determinism in Groom builder.
Run UpdateDeferredCachedUniformExpressions() before BuildRayTracingMeshCommands() Uniform expression cache explicit update may not run for objects that are off-screen, but it must be done before objects are added to the ray tracing scene. Normally this work is done through FMaterialRenderProxy::UpdateUniformExpressionCacheIfNeeded, however ray tracing material processing (FMaterialShader::GetShaderBindings, which accesses UniformExpressionCache) is done on task threads, therefore all work must be done here up-front as UpdateUniformExpressionCacheIfNeeded is not free-threaded.
Fixed an issue where Variable Rate Shading caused artifacts on materials with Opacity Mask blend mode when Multi-Sample Anti-Aliasing (MSAA) was enabled.
Fix loading all binding assets when opening a groom asset.
Add explicit unsigned uint8 storage annotation for EMeshPass::Type enum. Fixes FCachedMeshDrawCommandInfo::MeshPass bitfield when EMeshPass::Num is exactly 1 << EMeshPass::NumBits and current compiler uses signed default enum storage. Improved error message in FPrimitiveSceneInfo::CacheMeshDrawCommands that checks FCachedMeshDrawCommandInfo::MeshPass field.
Fixed an issue where groom binding failed to project hair on coarser skeletal meshes.
Fixed an issue where hair scene scattering did not run when the scene did not have a sky component.
Fixed crash in groom builder that occurred when using the hair rigging feature.
Enabled GPU scene view for hair strands vertex factory. This fixes missing lighting channel support for hair strands geometry with path tracing.
Fixed hair strands rendering with stereo rendering. Hair tile rendering not taking into account View.MinRect and hair voxelization had incorrect traversing for the second view. This was due to voxelization being expressed relative to the view origin (for precision purpose), and the offset correct was incorrect for the secondary view.
Fixed a crash that occurred when running hair in the Forward Renderer with anti-aliasing set to Multi-Sample Anti-Aliasing (MSAA).
Fixed invalid indirect arg reading and writing in groom systems on platforms that require 16 bytes alignment.
Fixed an 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 (for example, in cooked builds).
Fixed a hair crash with nDisplay.
Fixed an invalid binding warning that occurred when a skeletal mesh did not have skin cache or mesh deformer enabled, while groom required skinning binding.
Fixed a bug where static mesh dynamic ray tracing instances were using cached Materials with the incorrect LOD.
Deprecated:
Deprecated RHISupportsComputeShaders(). The minimum supported feature level (ERHIFeatureLevel) supports compute shaders.
Support for Multi-GPU Alternate Frame Rendering (AFR) was removed. Many features added in UE5 cannot be made to function with AFR, and no known projects are using it. AFR command line options have no effect, and related interfaces have been marked deprecated.
The bForceAllBC23ToBC7 option was removed from TextureFormatOodle.
Known Issue:
The Light Mixer may not initially display the intended property columns and/or any properties at all. You can restore the column defaults by right-clicking on the column header and selecting "Attenuation", "Intensity", "Light Color", and "Light Channels" from the list. You should only need to do this once for it to work across all instances of the engine.
Architecture
New:
Non-blocking Ray Tracing Pipeline State Object (RTPSO) creation is now enabled by default.
For Ray Tracing, the maximum payload size is now computed from the shader's payload type.
Added a new method to register payload types so that plugins can more easily describe custom payloads they may be using.
For multi-GPU, it is no longer necessary to set the r.AllowMultiGPUInEditor console variable. The command line option -MaxGPUCount=N is now the only requirement. In the editor, multi-GPU is supported by GPU Lightmass and the Path Tracer (the latter also requires the console variable r.PathTracing.MultiGPU=1).
Defer SkinnedMeshComponent Force/ClearMotionVector updates until the end-of-frame to be processed together with regular dynamic data update. This reduces the number of times the bone buffer, morph buffer, and cloth sim buffer are written into, to just once per frame.
Implemented an optional UAV access to render targets created by the Kismet Rendering Library for compute shader access.
Added logging if tpause support is enabled.
Make RenderDocPlugin always load. Now we need to use "-AttachRenderDoc" on the command line to use the plugin. This unifies behavior with the PIX plugin. Also added a plugin setting to the Project Settings to auto attach without the command line for people who want to have RenderDoc always on. See the Unreal Engine RenderDoc plugin documentation for more details.
Added a force dynamic data update flag to the SkinnedMeshComponent. When set to true, it is the equivalent of r.DeferSkeletalDynamicDataUpdateUntilGDME=0 and r.RHICmdDeferSkeletalLockAndFillToRHIThread=0. This allows skeletal mesh component to bypass "r.DeferSkeletalDynamicDataUpdateUntilGDME=1" and update during the end-of-frame skin cache batch update.
Added video memory tracking in Unreal Insights for the Direct3D 12 buffer.
Fixed Tpause feature on certain mainboards where WaitPKG is returning true even though some virtualization settings in the Bios can disable Tpause.
Moved FRayTracingInstance from Engine module to the Renderer module.
Enabled ComputeFramework on Vulkan for PC.
Added a Render Resource Viewer under the Tools menu in the Editor. This viewer lists tracked RHI resources, with filtering ability by resource flags and search by keyword.
Improvement:
SendAllEndOfFrameUpdates is called less aggressively by Reflections.
Crash Fix:
Fixed an Editor crash that occurred when a Blueprint is open, and the user right-clicked on the Content folder and selected Sync.
Bug Fix:
Conditionally generate Material platform stats for GPUSkinVertexFactory only when the UsedWithSkeletalMesh, UsedWithMorphTarget, UsedWithCloth boxes are enabled. This fixes an issue with GPUSkinVertexFactory throwing shader errors when the Material is not used with a Skeletal Mesh.
Fixed a bug during shutdown where some static render resources were cleaned up late, and in unpredictable order. This caused them to get stuck in the queue, which prevented the concurrent linear allocator from being properly cleaned up.
Fixed skeletal mesh LOD flickering when opening multiple Editor viewports.
Fixed an issue where the bone transform revision number did not update when a lead pose component could not render, and therefore did not have a valid mesh object.
Lighting
New:
Added SetAffectDistanceFieldLighting as a Blueprint callable function to UPrimitiveComponent.
Implemented subsurface shadowing with Virtual Shadow Map one pass projection for local lights. A dither noise is used to approximate the subsurface shadow falloff in the bits provided by the one pass projection shadow mask. This can produce some minor banding in motion. If necessary, disabling one pass projection will work around this limitation.
Added the ability to adjust the adaptive ray count heuristic to be less aggressive by setting the console variable "r.Shadow.Virtual.SMRT.AdaptiveRayCount" to larger numbers.
Added the console variable "r.ReflectionCapture.EnableDeferredReflectionsAndSkyLighting" to disable reflections and sky contribution in reflection captures.
Moved Distance Field Ambient Occlusion (DFAO) out of ShadowQuality and into the GlobalIlluminationQuality scalability group, so that Medium GI gives DFAO.
Moved Screen Space Reflections out of EffectsQuality and into the ReflectionsQuality scalability group, so that Medium Reflections gives SSR.
Added an Illuminance meter on the skylight for debugging.
Added the console variable "r.Shadow.Virtual.Clipmap.MinCameraViewportWidth" to enable clamping of the camera viewport size when computing Virtual Shadow Maps clipmap resolution. This can be important for avoiding artifacts due to excessively low shadow resolutions if the dynamic resolution falls too low.
Added support for floating-point (FP32) sky lights when the specified cubemap is High Dynamic Range.
Added "Rough Diffuse Material" support in the subsurface profile shading model. When "Rough Diffuse Material" is enabled in the project setting, Chan's diffuse model will be used by the Subsurface Profile Shading Model. This will correct the shading at the edge of human skin, better matching the ground truth than Burley's diffuse model.
Added IES atlas texture manager. This persistent atlas holds IES texture in a unique texture array which is used by all systems (raster/RT/PT/Lumen), and unify IES profile rendering.
Add Virtual Shadow Map high quality shadow filtering for translucent surface for Substrate and legacy path. This is a global opt-in feature.
Added optional rect light support for translucent lit surface.This is enabled with the console variable "r.rectlightatlas.translucent". There is currently a limitation on DX11 due to the limited number of texture samplers (max 16).
Improvement:
Improved ray-traced RectLight shadow. Now we sample from a spherical rect instead of the RectLight plane. This matches closer to path tracing.
Optimization:
Blue noise is now used for Virtual Shadow Maps (VSM) local light projection to improve performance.
Crash Fix:
Fixed a crash in the Editor when baking new reflection captures.
Bug Fix:
Fixed an issue with Virtual Shadow Map one pass projection attempting to clear a null screen shadow mask.
Fixed a bug that occurred when rebuilding many reflection captures.
Fixed a general Ray Tracing dark shadow issue caused by an unmatched square for the encoding of the shadow. It affects several mismatches between ray-traced shadows and path tracing.
Fixed an artifact when Virtual Shadow Map (VSM) Shadow Map Ray Tracing (SMRT) crosses a clipmap boundary and the new sample depth is outside the Z range of the original clipmap. This occurred most commonly when sampling against the clear value with a shadow being cast on a non-shadow-casting receiver.
Fixed a bug where Subsurface Scattering caused an orange rim when using ray-traced lighting at certain angles. The issue was caused by not enough penalty to the depth in the bilateral filtering.
In volumetric clouds, fixed ground contribution to work all around the globe.
Fixed incorrect ambient occlusion when using screen space global illumination.
Fixed incorrect artifacts in distance field ambient occlusion..
Fixed a NaN with cloth shading and rect lighting.
Fixed an issue in ground truth ambient occlusion (GTAO) when there's a camera cut.
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 light gets toggled on and off. The incorrect packing was causing rect light textures to become blurrier as the light got toggled on/off.
Lumen
New:
Lumen Software Ray Tracing now uses feedback to request higher resolution surface cache pages and update visible pages faster.
Lumen async compute for software tracing, which greatly improves performance on consoles.
Lumen Hit Lighting improvements with approximate secondary specular bounds based on surface cache, added support for two-sided foliage mode, and fixed surface cache artifacts when using hit lighting.
Added "r.Lumen.Reflections.MaxRoughnessToTraceForFoliage" which allows to control the dedicated reflection ray roughness cutoff point only for foliage. Dedicated reflection rays are now also disabled by default on High scalability settings.
Lumen character lighting improvements
Fixed ScreenProbeGather Screen Traces missing nearby features, which was happening due to the bias needed for downsampled HZB tracing. ScreenProbeGather Screen Traces now use full res HZB tracing.
Hair Voxel Occlusion is now traced for the full resolution Bent Normal, Lumen Reflection HWRT, and Lumen Visualize HWRT.
Added a HWRT version of ScreenSpaceBentNormal, which is too slow to use (.12ms ScreenSpace vs 1.75ms HWRT) but still useful as a reference.
Renamed ScreenSpaceBentNormal feature to ShortRangeAO, now that it's no longer just screen traces (r.Lumen.ScreenProbeGather.ShortRangeAO) .
Enabled ShortRangeAO on GI High settings by default (60fps mode)
Clamp albedo used for the AO Multibounce approximation (DistantIlluminationRescale) to increase the amount of occlusion when a very light surface is next to a very dark surface (r.Lumen.ScreenProbeGather.ShortRangeAO.MaxMultibounceAlbedo).
Disabled HairScreenTrace on both ScreenProbeGather and ShortRangeAO as it causes over-occlusion and costs too much.
Lumen Reflections now samples SceneColor on hit, to cover over the regions where Screen Traces gave up where they went behind an object. Reduces vertical streaking under foreground objects where Screen Traces were interrupted.
Mesh distance fields are now always generated from highest poly mesh data in order to match Nanite.
Increased surface cache bias on all foliage. This improves surface cache projection on trees, which have a pretty inaccurate SDF and BVH representation.
Lumen visualization overview mode now specifies currently used tracing method
When SSR is the reflection method, Lumen rough reflections are now calculated for the whole roughness range to provide a fallback when SSR fails to find a hit.
Periodically refresh surface cache on all scalability levels.
Lumen reflection on translucent surfaces now account for roughness and go through the process of denoising.
Split reflection outputs into separate render targets in order to speed up denoising passes.
Reduced the strength of Lumen AO on foliage by default to .7, to emulate subsurface scattering. Controlled by "r.Lumen.ScreenProbeGather.ScreenSpaceBentNormal.FoliageOcclusionStrength".
Removed shadow map reuse from HWRT surface cache lighting path, as it was causing too many view dependent artifacts and anyway isn't compatible with the future looking async compute path. Balanced out performance regression by decreasing direct lighting update rate (r.LumenScene.DirectLighting.UpdateFactor 32).
Only run FSpanAllocator::Consolidate when no free space is immediately available It is possible for there to be freed spans that are pending consolidation, however no consolidation can actually occur. In this case every Allocate() will still pay the cost of looking for blocks to consolidate, making it much more expensive. Simple solution is to only run consolidation if there is no available space otherwise. The downside is that this can theoretically result in worse fragmentation over time. Significantly improves FLumenSceneData::ProcessLumenSurfaceCacheRequests performance in some situations.
Added bAllowFrontLayerTranslucency to material, which allows to control whether given material should write Front Layer Translucency. This is useful to disable small particles or solve sorting issues.
Lumen can now sample height fog contribution on meshes in reflections, not only through the sky light capture.
Enabled Hardware Ray Tracing culling by default in order to simplify initial Lumen setup. Also disabled culling when using path tracer, as it doesn't make much sense there.
Improvement:
Improved indirect specular approximation when using hit lighting. Metallic surfaces were too dark, as they were completely ignoring specular color in reflections. Now every surface is approximated as if it would be fully rough in order to conserve energy.
Optimized water reflection performance by building spatially coherent water reflection tile list.
Improved Lumen Scene filtering. Now Lumen only tracks primitives if they can be traced by a currently selected tracing method in order to minimize CPU and surface cache overhead.
Disabled surface cache on objects without a valid distance field, as those can't ever be hit by a ray.
Crash Fix:
Fixed a crash when changing preview levels in the editor.
Bug Fix:
Disable bright green visual assert when radiance cache overflows.
Added Lumen mesh card shader filtering in order to skip unused permutations like Skeletal Meshes, which removes up to 10% of shader permutations.
Reuse alpha from the other side of the height field so that Landscape masked opacity works correctly when viewed from the other side.
Replaced cone skylight evaluation with a ray sample in SWRT radiosity pass in order to prevent leaking.
Disabled automatic instance merging. It's no longer required for performance, but can cause unexpected surface cache behavior.
Don't capture Static Meshes into surface cache if they are still streaming.
Fixed light functions which use CameraPosition nodes.
Fixed random radiosity texels exploding due to an un-normalized normal used to construct radiosity probes.
Fixed GI and reflections not working far away from the camera. Now skylight will be always applied even if rays don't hit anything far in the distance.
Fixed incorrect interpolation of secondary bounces in surface cache.
Found an issue with potential GPU hang from Lumen direct lighting when no lights are gathered on a frame due to InitializeLightTileIndirectArgs failing to write to the indirect arg buffer and leaving uninitialized memory for the indirect args of the following dispatch. Fixed this by forcing a minimum group size of one for the InitializeLightTileIndirectArgs pass which ensures we properly write the indirect args for the following dispatch.
Fixed HWRT reflection compaction causing random reflection corruption.
Fixed screen space reflections and foliage hit skipping when Substrate is enabled.
Added MinTraceDistanceToSampleSurface to ScreenProbeGather. It's used to skip surface cache sampling if ray hits too close to the origin in order to prevent leaking or GI feedback loop when reading radiance from source surface cache texel.
Fixed conditions for when to use wave ops in shaders. They were incorrect for GPUs supporting only Wave64 causing crashes or rendering artifacts.
Materials and Shaders
New:
Added support for Per Instance Random Material Expression in ray tracing shaders and in the Path Tracer.
Added the ability to do Unreal Insights traces of the Shader Compiler Worker process. This can be enabled by modifying
UnrealEngine\Engine\Saved\UnrealBuildTool\BuildConfiguration.xml
like so:true Added a build configuration xml value,
bShaderCompilerWorkerTrace
.Turning this on will set USE_SHADER_COMPILER_WORKER_TRACE=1
Moved the parameter -nothreading to be set when we launch the process instead of internally as an extra cmd line arg.
Unreal Insights uses a separate thread to send events so threading support is needed for the program. When USE_SHADER_COMPILER_WORKER_TRACE is enabled we need to turn off
-nothreading
.When USE_SHADER_COMPILER_WORKER_TRACE is enabled we pass in
-trace=default
to get CPU event markers.The SCW program needs to turn on the following defines to be able to perform CPU and memory traces:
ENABLE_LOW_LEVEL_MEM_TRACKER=1
UE_MEMORY_TAGS_TRACE_ENABLED=1
UE_TRACE_ENABLED=1
Instrument Shader Compiler Worker with TRACE_CPUPROFILER_EVENT_SCOPE. These are no-ops when this is turned off.
Added a CompileShadersTest build script.
Right now it is hardcoded to run CitySample and cook just the shaders in the Audit_InCook collection.
In the future this build script can be made general to run any commandlet since there is a lot of copy/paste to what is in ShadeTypeRegressionTest.xml.
Build machines will now output shader debug info for failed shaders as a build artifact.
Due to size limits, this output is limited to ten items. The number of debug info outputs is tracked and incremented when we dump a debug info (which happens on a worker thread), and is read on the main thread so the value is atomic.
Removed old code for dumping the debug info to the log.
A warning message will be logged if the GUID of a Material Function is regenerated, indicating that the function should be resaved.
Regenerating the GUID causes any Material using that Material Function to have a dirty DDC key which changes each time the Material is loaded.
This in turn will always cause the Material to recompile shaders on load until the Material Function is resaved.
A new debug dump option for shader compilation was added — (r.ShaderCompiler.DebugDumpWorkerInputs)
When enabled, it will output a DebugSCW.in file for each executed pipeline job, along with an associated DebugCompileArgs.txt file.
The .txt file gives arguments that can be passed to ShaderCompileWorker in order to manually re-run and debug the full compilation (including pre-processing) of a single shader compile job.
These files are written within the existing debug dump folders (i.e. where preprocessed .usf files are exported when r.DumpShaderDebugInfo is enabled).
Log the total time spent compiling each shader job in seconds. This represents roughly how long it would take If we compiled all shaders serially on a single thread.
Added a small helper function to improve readability when formatting numbers.
Added support to log an error message (along with the associated callstack) when an exception is encountered in one of the compilation functions within a shader format DLL. This is a step toward unification of error handling in the various shader compilation backends.
Added r.MaterialLogErrorOnFailure, which will emit an
Error
when a Material fails to compile instead of a warning. This defaults tofalse
, which was the original behavior. It can be enabled from the command line with -dpcvars="r.MaterialLogErrorOnFailure=1".Implemented a Static Switch Commandlet that runs fast and can give a detailed HTML report on what shaders with permutations are being used.
Implemented a double-click on Material Editor errors to jump to the Material Expression (if any) that caused the error.
The aging MCPP preprocessor for shader code was replaced with a newer, faster, multi-threadable preprocessing library.
Performance testing results on various projects show that the new library is approximately 2.5x faster, which results in a non-trivial savings in overall shader compilation time.
In addition this gives us the option to run multi-threaded pre-processing in the editor/cooker process, which itself unlocks future more significant options for reducing shader compilation times.
A console variable has been provided as a fallback option. In the event bugs are encountered you can set "r.Shaders.UseLegacyPreprocessor=true" to revert to the old library. Note however that this option will be removed for UE 5.3 so please report any bugs found in the new library to us as soon as possible.
Updated DirectX Shader Compiler (DXC) to release-1.7.2212 (January 2023).
Updated SPIRV-Headers to rev. c16439f (Jan 3, 2023)
Updated SPIRV-Tools to rev. d87f616 (Dev 22, 2022)
Updated SPIRV-Cross to rev. a89dea3 (Dec 13, 2022)
Updated DirectXShaderCompiler to rev. 83f8c6c; release-1.7.2212 (Jan 6, 2023)
Added DirectX-Headers rev. 980971e (Jan 31, 2022)
Added outputs to the WorldPosition material expression to directly access XY and Z components. These are commonly used output combinations, so it can save time and simplify Material Graph logic to extract them.
Fixed the DeriveNormalZ Material Expression that saturates the input to the square root to avoid negative values. This could be caused by extreme normals combined with texture compression.
Added a flag for enabling feedback for a Runtime Virtual Texture sample. This setting is enabled by default. Most of the time this should remain true, but it might be useful to disable this flag for landscape grass, which can rely on the underlying landscape providing the feedback. In that case disabling feedback and requesting mip level 0 will return the mip to match landscape color, and it will reduce cost of mip calculation and feedback writing from the grass base pass shader.
The Runtime Virtual Texture (RVT) page rendering is now compressed directly to the virtual texture's physical texture when unordered access view (UAV) aliasing is supported. This saves GPU time in transition and copy when rendering an RVT page.
The Distortion Material Expression has a new mode to explicitly use a specified 2d offset.
Added per pixel tracing support for volumetric clouds in the translucent Blend Mode. The console variable r.VolumetricRenderTarget.Mode 3 is the new high quality cinematic mode: tracing is done at full resolution in a volume render target.
Added Material Functions to wrap float 2, 3, or 4 values in a [0, WrapValue[interval]. This is similar to the FMod Material expression but with support for negative floats, meaning it returns a value between 0 and WrapValue in all cases.
Added support for height and volumetric fog onto Ray Tracing Translucency.
Updated the volumetric cloud render target target mode 1 to not do any temporal reconstruction. It now traces at half resolution and then upsamples at full resolution, leveraging checkerboarded MinMax depth.
Added support for the new Switch Material Expression. This node implements the functionality of a switch, or discrete selector/multiplexer, for the Material graph. This allows more compact graphs where multiple paths or inputs need to be decided on either through constant or uniform parameters. It also provides a potential replacement for custom nodes, unusable in Restricted mode, or complex If/Else graphs.
Added a button in the Material properties list in the Details Panel to browse to the Nanite override Material. This only shows if a Nanite override Material is set. It uses a duplicate of the existing Material content browser icon until a new icon is created.
For the ShaderPlatformInfo Material Expression, limited the scope to just 3 properties (isMobile, isConsole, isPc), and created a compile-time link between the properties and the Material in case they are removed or renamed.
Added an option to sample landscape height per pixel when rendering to Runtime Virtual Texture. When we do this we only need a single quad to render each landscape component subsection. This reduces the vertex shader cost, which can sometimes dominate Runtime Virtual Texture rendering.
Refactored the DeriveNormalZ_Function to use the DeriveNormalZ built-in function instead of duplicating its logic.
Implemented dynamic bool parameters to enable dynamic branching in static switches. This can cut shader permutation counts at the cost of larger more generalized shaders. This might or might not have a performance penalty based on the use case.
Added a Virtual Heightfield Mesh (VHM) Component flag to locally set whether World Position Offset (WPO) Materials should trigger velocity rendering. This behavior is off by default, since the anticipated usage of any WPO on a VHM is for displacement, rather than an animated surface. This then avoids the unnecessary cost of velocity calculation on the VHM.
ScalabilityCVarsSinkCallback now leverages On Demand Shader Compilation (ODSC) and only compiles visible shaders instead of all remaining shaders.
If the Material quality level changes new Material resources may still need to be created for that quality level.
When
AllMaterialsCacheResourceShadersForRendering
is called, compile jobs should not be submitted. This way render resources are only created if they haven't been made yet.ODSC handles compiling for any missing shaders.
The FMaterialShaderMap::GetShaderSource function (used by Material stats in the editor) was not accounting for permutation IDs, and didn't correctly handle the case of a null vertex factory. As such, the returned source wasn't always exactly what was requested. Permutation ID is now a required parameter for function to account for this; the previous API was deprecated.
Some additions and changes were made to Material shader map logging aimed at improving debugging when encountering issues serializing shader maps to the Derived Data Cache (DDC):
Modified the log outputs when Material shader maps are saved to the DDC to print the actual DDC key hash (rather than an unrelated FSHA1 hash); this is now the same key hash that is printed by DDC log messages (for example, in the case of encountering non-deterministic DDC contents).
Enabled "VeryVerbose" logging for the LogMaterial channel, and added new log outputs to this channel for the full string DDC key (prior to hashing) for Materials/Material instances (this is the source string which is hashed to generate the key used to query shader map contents from the DDC).
A new debug utility was added, which is controlled by the "r.Material.ShaderMapDump" console variable. This utility generates a textual representation of the shader map for a specified Material or Material instance, identified by the full path to the corresponding asset. For example: "r.Material.ShaderMapDump="Engine/EngineMaterials/WorldGridMaterial.WorldGridMaterial". This utility is helpful for examining the contents of a shader map in a more user-friendly format.
Volumetric Cloud Material shaders are now compiled optionally for Materials belonging to the Volumetric Domain. This is now opt-in using bUseWithVolumetricCloud.
Added a Material stats permutation for Runtime Virtual Texture output. This is useful for understanding basic performance stats of any Materials that write to Runtime Virtual Textures.
Added ‘UMaterialInterface::AnalyzeMaterialPropertyEx' and ‘UMaterialInterface::AnalyzeMaterialCustomOutput'for extended Material analysis. These are useful for analyzing which texture coordinates are being used, lightmap UVs, custom outputs, and which Shading Models are possible.
To reduce lock contention, the GShaderHashCache is now protected using a RW lock instead of a critical section. In case of a cache miss, a critical section is still utilized to prevent redundant calculations, while the cache remains accessible for readers.
Added the function FMaterialBakingModule::IsLinearBake which determines whether a Material property is/will be baked in linear or sRGB.
A high-level wrapper called UE::ShaderCompilerCommon::RemoveDeadCode() was added for the shader minifier, to be used consistently across all shader compiler back-ends.
To reduce lock contention, a read-write lock is now used to protect GShaderFileCache instead of a critical section.
Added Material baking support for the custom output Transmittance Color.
Added in-engine support for converting shader hashes back to their human-readable names (non-Shipping builds only).
Queries on Materials to retrieve the set of expressions for a given property now have the option to recurse into Material Functions and return expressions located inside.
To ensure that assert reporting works correctly on both AMD and NVIDIA GPUs, UEReportAssertWithPayload now uses an infinite loop to trigger a timeout instead of attempting to trigger a page fault through out-of-band (OOB) buffer access.
Added Material baking support for the Refraction Material property.
Support for controlling Blend Mode and Background Color when baking materials was added through FMaterialData and FMaterialDataEx.
Shader creation can now happen in parallel on multiple threads.
Material baking support for the Shading Model property was added.
Added a built-in Material Expression ObjectLocalBounds, which is meant to replace the Material Function with the same name.
Added Material baking support for expressions that rely on primitive data.
Replaced OpCompositeConstruct with OpAccessChain for OpenGL for array creation.
Improvement:
Adjusted logic to make Thin Translucent Materials more consistent when using the Path Tracer.
Previously the specular color was only using Spec and not Metallic. This limited the effective IOR range of Thin Translucent Materials to 1.8 at most. Now metallic is no longer scaled by opacity, which allows the user to create surfaces made of higher IORs, like diamond for example.
Ray Traced Translucency was updated to match the Path Tracer behavior better, and now implements all blend modes.
Made improvements to Material Graph comments to reach feature parity with Blueprints.
Ability to hide comment bubbles.
Improved selection tools and node group movements.
Ability to create colored comment bubbles.
Improved formatting of large numbers and memory when printing shader statistics for readability purposes.
Cleaned up memory formatting code and let
FText
handle that.
In volumetric clouds, improved mode 0 with sharper edges and reconstruction.
A source of non-determinism in shader map DDC contents has been resolved. The optional array of shader sources was previously sorted by a hash created from the vertex factory type and shader type, but this hash did not account for permutation IDs. As a result, shader sources with multiple permutations could be serialized in an unstable order. The hash now includes this data to ensure stable serialization.
Volumetric cloud rendering now accounts for camera cut transitions.
Optimization:
Removed a redundant allocation and copy of DDC data which occurred when the DDC shader job cache was enabled and results for a single job were found in, and pulled from, the DDC. This results in a minor performance improvement.
Crash Fix:
Added a check to make sure GraphNode is not null in UMaterialExpression::PostEditChangeProperty(). This prevents a rare crash from occurring.
Fixed a crash that could occur when a user force deletes an asset (for example, a Material) used by a mesh with an instance in the active level.
Fixed an intermittent crash when building streaming virtual texture mips. This crash occurred when null request handles from a Runtime Virtual Texture were being sent to the FUploadingVirtualTexture, where they hit an assertion.
Fixed a crash which occurred in UEFN when the user created a MaterialLayer or a MaterialFunction and opened it in the Material Editor.
Fixed a crash which occurred when the user created a Constant4Vector in a MaterialFunction and hit undo.
Added a check that reports errors if a parameter is added in a Material bound to different values. This should not be allowed. This was causing a crash when two Material functions containing the same parameter bound to different values (for example, different textures) are used in the same Material. The code now checks for these occurrences and reports an error message instead of silently trying to compile the Material anyway. This check is disabled by default but can be enabled with the console variable "r.Material.PedanticErrorChecksEnabled".
Removed a duplicate PropertyRow call to make a custom reset to default option for labeled Texture Parameters. This fixes a potential crash due to competing behaviors.
Added an input type check to LinearInterpolation that fixes a crash in the Material Editor when the input vector dimensions differ.
Fixed a crash caused when renaming a Material graph node with a name 1024 characters or longer.
Fixed a crash which occurred when the user selected multiple Material Parameter Collection nodes belonging to different collections.
Fixed mesh/amp shader support in the manual Pipeline State Object cache.
Bug Fix:
Fixed a bug which could cause creation of duplicate shader maps when multiple Materials/Material instances sharing a shader map are encountered in a single tick. This was causing both redundant shader job creation and spurious DDC non-determinism warnings when the redundant shader maps were completed and uploaded to the DDC.
Implemented fixes to the code that handles closing and reopening open Editor windows when any of their assets is force-reloaded. This fixes potential crashes due to editors not being correctly detected and closed when dependent assets are reloaded.
ShaderMap now serializes the ShaderPlatform name instead of ShaderPlatform enum.
Fixed a bug causing Derived Data Cache (DDC) keys for pre-compiled shaders included in DDC pak files to not match those generated by an engine build containing signed DLLs. This resulted in long shader compile times when first launching a build/project on a signed engine build. The shader compiler version hash now excludes certificate/signature information from the shader compiler DLLs so the same version hash will be reported before and after DLL signing.
Fixed UMaterial to properly populate the ShaderId with StaticParameters to allow merging them with Instances that use the default Parameter Set.
Fixed bug in SMaterialParametersOverviewTree, which caused the Material Editor to crash when the user created a Parameter node and viewed the UI panel containing the Material parameters.
Fixed an issue causing shader maps containing shaders which encountered compiler warnings to emit spurious warnings due to Derived Data Cache contents not being deterministic. This was caused by the fact that all warnings for shaders in the map were flattened into a single array. They are now instead stored individually for each shader entry in a struct (alongside the platform debug info for that shader).
Implemented changes so Runtime Virtual Texture (RVT) resources are not created for the Class Default Object (CDO) or on server platform.
Fixed an issue where a Virtual Heightfield Mesh with a World Position Offset Material would fail to render correctly when velocity was being written in the depth pass.
Fixed a bug with RecursiveGetExpressionChain for Make and Set Material Attributes, which occurred when looking for the MP_MaterialAttributes property. This property needs to be followed up since it's a group of several properties.
Fixed potential issues with mobile Material expressions not being properly filtered.
Implemented a fix in LandscapeRender to read whether WorldPositionOffset is enabled in the Material from the correct source (shader map) instead of the old, approximate source (asking the Material if the property is connected).
Implemented a fix for height fog on volumetric clouds not working when start distance is greater than or equal to 1.
The Vulkan RHI now correctly applies per-Material Variable Rate Shading (VRS).
Fixed a long-standing bug in the Material debug dumps folder for the console variable r.DumpShaderDebugInfo.
Materials or Material Instances with varying static parameter values (or other data that can vary across instances of the same Material) would end up colliding and writing to the same folder, causing a race condition where different runs would potentially output a different set of debug information.
To fix this, a new "GetUniqueAssetName" function was added to the FMaterial class, which appends a hash of all the information that can potentially differ across instances and result in different shaders being generated. This function is used to construct the debug info path for Materials. As a result a full cook of a project with r.DumpShaderDebugInfo set to 1 will now output a full and stable set of debug info for all shaders in that project.
Fixed SceneTextures (CustomStencil) node not taking into account UV offset.
Implemented code to get Derived Data Cache Request Name from ShaderPlatformName instead of ShaderFormatName.
Made changes so that ProceduralComponent honors the bReceivesDecals setting.
Fixed a bug so that the bReceivesDecal flag is honored when doing manual DBuffer samples in a Material.
Fixed an internal compilation error in GLSL based shader compiler toolchains due to a bitwise operator being used for a bool expression.
Implemented support for virtual texture feedback for pixels behind a single layer water Material so that content beneath the surface is not overwritten.
Fixed incorrect results when Material baking some material properties in a translucent Material.
Fixed a missing switch case for Runtime Virtual Texture blend state.
Fixed lack of ShaderDebugInfo when retrying after an SCW crash.
Fixed shadermap resources not being deleted when the shader library is closed at run-time. For example, after unloading a plugin.
Fixed deadlock which can happen when one plugin is closing the shader library (on unload) while another is being loaded.
Fixed pacing of Pipeline State Object (PSO) precompilation from the manual cache to avoid it causing hitching during the background compilation.
Fixed a bug with PSO cache expansion filtering out valid Pipeline State Objects.
Fixed Pipeline State Objects (PSO) with ‘FDeferredLightVS' being filtered out from PSO cache.
Nanite
New:
Implemented Nanite support for per mesh/material section rasterizer visibility. This includes support for the "Isolate" feature in the Static Mesh Editor, and future improvements to graceful material error handling, mixing Nanite and non-Nanite together, and so on.
Added new "Normal Precision" setting to Nanite mesh importing that lets you override the default trade-off between storage space and quality for mesh normals.
Implemented "stat renderscaling" to show current status of the dynamic resolution heuristics
Optimized Nanite visibility buffer clear. This is more efficient compared to the built in RHI clear, only clears the active portion of the screen according to dynamic resolution scaling, and batches up the debug view clears when view modes are active (2x faster for the retail game case, much more for the view mode case). Also fixed the "Nanite VisBuffer" stat gpu timer to exclude emit depth targets, and the unrelated HZB build.
Added support for the Global Clipping Plane to Nanite, and enabled Nanite rendering in planar reflection captures.
Added support for Nanite meshes in the Custom Depth Stencil pass.
Add explicit WANT_PIXEL_DEPTH_OFFSET || MATERIALBLENDING_MASKED preprocessor condition to more accurately remove unused code.
Support Nanite material visibility culling for virtual shadow maps. Controlled with "r.Shadow.Virtual.Nanite.MaterialVisibility". This is off by default.
Added "SetForceDisableNanite" on Static Mesh Component to force disable Nanite (and render its fallback mesh instead) on an object at run-time.
Added logging and on-screen message to show potentially expensive Nanite materials in use (r.Nanite.EmitMaterialPerformanceWarnings).
Always use NANITE_MULTI_VIEW=1 in FMicropolyRasterizeCS, FHWRasterizeVS, FHWRasterizeMS and FHWRasterizePS, removing the permutation dimension.
Improvement:
Removed previous transform hack (decreasing compressed per instance data from 5 -> 3 floats4s, and uncompressed per instance data from 7 -> 4 float4s. Also saves a lot of ALU).
Improved the Virtual Shadow Map HZB culling efficiency by allowing the cluster culling stage to test the whole page-space footprint.
Bug Fix:
Fixed a rendering issue with masked materials on Nanite meshes with reversed winding order.
Cleaned up DX12 empty dispatch spam with Nanite initializing material CS when the material count is 0.
Fixed console variable NaniteAllowWPODistanceDisable declaration. Previously this was referencing GNaniteMaterialSortMode instead of GNaniteAllowWPODistanceDisable.
Fixed issues where a Nanite object's custom primitive data would not update on the GPU if it was not visible in the main view, but was visible in shadow.
Fixed an issue where the WorldPosition material node in Nanite materials could not exclude material offsets.
Fixed an issue where reading custom data in a Nanite material to calculate World Position Offset would always result in using the default value.
Fixed an issue where "World Position Offset Disable Distance" wouldn't cause WPO to be disabled in shadow, and would cause VSM pages to always be invalidated.
Niagara
New:
NiagaraParameterMap pins are now editable upon creation.
Niagara simulation caches are now integrated into Take Recorder.
Niagara renderers can now be moved via context action.
Added helper functions to the camera data interface to use the translated view matrices with large world coordinate positions.
Added a collapse option for custom HLSL nodes.
Exposed warmup time settings on the Niagara component.
Added data interface auto-completion to custom HLSL nodes.
We now display the version number on inherited modules.
Improved the geometry cache default asset.
When pasting an emitter from one system to another, it will add referenced User Parameters automatically, or reference existing ones if they already exist.
TickInfo
that is exposed in aNiagaraSystemSimulation
now contains information about sub-frame ticking. This is typically derived from fixed delta time. ExposesEngine.WorldDeltaTime
,System.NumTimeSteps
,System.CurrentTimeStep
, andSystem.TimeFraction
to emitters.Exposes warmup time settings on the Niagara component.
New function AddParticle has been added to the Neighborgrid module.
Extended the python API for module versioning.
Added a preview viewport to the Niagara Sim Cache Editor.
We now compute attribute indices during HLSL generation for 2d grids.
Added context menu capabilities to the Hierarchy Editor. There is now a section named Base for renaming and deleting, and a section called Dynamic to add custom actions.
There is a new flag
ClearBeforeNonIterationStage
on all grid data interfaces. Grid2D will not allocate a second buffer when we have write only grids.Added the ability to capture a temporary Niagara Sim cache for debugging from the Niagara component's Details panel.
Added new Niagara System and Emitter asset icons. Changed the System asset color from red to blue for consistency.
We now pack grid 3d collections into rgba textures, instead of tiled attributes, in a single channel float texture. This is much faster for retrieving vector attributes from a grid (ie: velocity, color, etc). There is also far less overhead for common cases where grids have 1 attribute. Usage is controlled via the cvar
fx.Niagara.Grid3D.UseRGBAGrid
. Set to 1 to enable. Only used for grids that have 1 attribute with 1 to 4 channels.Added overview tab for Niagara Sim Cache editor, to improve filtering and buffer selection UX.
Added user parameter setting option for attenuation and sound concurrency to the audio player data interface.
Niagara Data Channels are an experimental new system for communication between Niagara Systems and with game code or Blueprints. This system is currently very experimental and subject to large changes.
DataChannel - Data Definition for a named channel of data. New types can be added to deal with the channel differently.
DataChannelHander - Runtime counterpart for DataChannels. Each Channel Type will have a handler that uses the data definition to manage the channel data accordingly.
DataChannelDefinitions - Asset class containing one or more Data Channel.
DataChannelManager - Manger class containing and providing access to all currently loaded Data Channels and their Handlers.
DataChannelAccessor - Temporary initial Blueprint API allowing Blueprints to read and write to Data Channels.
Data Channel Global - Initial simple Data Channel Type. Stores all data globally.
Data Interface Data Channel Read - New data interface that allows Niagara Systems to read data from a Data Channel.
Data Interface Data Channel Write - New data interface that allows Niagara Systems to write data to a Data Channel.
Data Interface Data Channel Spawn - Specialization of the Read data interface which allows for easy spawning based on the contents of a Data Channel.
Data Channels can be enabled or disabled via FX.Niagara.DataChannels.Enabled = 0. Initially this defaults to off.
Created new data interface node action providers to enable actions on the Data Channel data interface nodes.
Customized the reference class for data channels to avoid any typing the available channel names.
Data interfaces now have a post-compile step that can be used to cache certain data at compile time.
NiagaraDataInterfaceUtilities now has an optional SearchOptions parameter that allows us to include internal data interfaces. This is required to support the above PostCompile step.
Niagara Type Definitions now optionally allow large world coordinate types. Previously, any large world coordinate types would be auto-converted to standard world coordinates on load.
The Asset Registry now tracks standard world coordinate simulation types. This prevents duplicated entires in several places of the UI due to confusion between large world coordinate and standard world coordinate types.
Heterogeneous volumes are enabled by default for Niagara Fluids.
Optimization to Legacy VM for reducing work for shuffled outputs.
You can now select the Static Mesh Data Interface LOD on a user parameter.
Refactored the stack function input cache. It now stores the inputs as variables, rather than storing pointers to the pins themselves, since their lifetime can be unpredictable.
Updated the CitySampleSensorGrid to use both Render Graph-based shader parameter bindings, and also Render Graph (RDG) for its internal shader passes.
Added entries in Visual Studio natvis to the NiagaraEditor module to provide Niagara types when debugging.
Tweaked the Outliner so that it clears any stored sim caches when the outliner changes or is updated.
Added Static Mesh Data Interface LOD support.
Added LODIndex to the Static Mesh Data Interface. -ve values indicate we index backwards from NumLODs. If the desired LOD is unavailable, we fall back to the next available LOD.
Added an optional override allowing Data Interfaces to choose whether they can sample from streaming LODs.
Bug Fix:
Fixed a bug when saving an emitter over an existing asset.
Fixed a crash when using large world coordinate structs.
Fixed a bug where closing a newly created Niagara system could lead to a crash.
Fixed a bug where the component renderer could no longer bind to float properties created in Blueprints.
Fixed a bug where newly created Component Renderers used the wrong type for the position attributes.
Fixed a bug where disabled modules could generate compile warnings.
Fixed a crash when changing the name of the sampled region in the Skeletal Mesh Editor.
Fixed Niagara performance widget layout. Improved the display of large numbers.
Fixed a crash when trying to set
uobject-attributes
in the stack.Fixed an issue in the system parameter panel where it was selecting parameters in the scratch pad via name instead of via guid. This caused wrong variables to be displayed.
You can now only add Object type parameters in User Parameters as they don't work in any other context currently.
Fixed a crash when dragging an array data interface element below the lowest index.
Fixed a bug where Component Renderers were still visible when another emitter was running isolated.
Niagara Stack Search now only lists one result per row maximum. The selected search result now also stays intact when changing a property.
We now properly search for a parameter collection override on Niagara systems.
Fixed an issue where emitters were opening up the parameter panel to Active Module instead of Active Overview.
Fixed
parameter for
node UI, and generated code bugs.Fixed an error where HLSL compile errors were not correctly shown in the stack.
Fixed output and transient parameters appearing outside their own stage when attempting to link values on inputs via a menu.
Fixed the Niagara system node being deselected after changing a value in the System Properties.
Parameter Map and Get nodes now factor in existing parameters when renaming a parameter pin.
When copy-pasting modules, nested static switch values now copy over properly.
Fixed not being able to copy-paste Data Interfaces in the new User Parameters panel. This works also from the stack to User Parameters and vice versa.
Fixed enums appearing as ints in the Niagara User Parameters tab and Component Details tab.
Fixed scrubbing in the Sim Cache Editor's timeline near frame boundaries.
Modules that are currently used and selected in an emitter or system will no longer get deselected when hitting Apply.
Fixed the check around GetNumMipLevel for Texture Sample Data Interface.
Fixed low latency translucency (LLT) being used when underwater (using single layer water). If used, it resulted in translucency being rendered before the opaque, preventing LLT from working properly.
Fixed NiagaraScript's data derived cache (DDC) content to be non-deterministic.
Cleaned up some of the data written into the payload, removing compile times and writing out zeroes for unneeded non-deterministic pointers.
Incorporated the AssetPath of the script to the DDC key to prevent identical scripts from sharing the same DDC, as we still have some data in the DDC value (node GUIs & emitter names, etc).
Fixed a stalled cook when multiple shader formats were being generated at a time, and a portion of them were not supported (because ShouldCompile() returns false).
Fixed issues when cooking Niagara systems with bad data resulted in a crash (in this case variables with invalid types because dependent enums are missing).
Fixed a bug when deleting a system or emitter parameter that's not referenced anywhere wouldn't create an Undo/Redo transaction.
Fixed an issue with changing fx.Niagara.QualityLevel at runtime.
Fix for motion blur on Niagara ribbons caused by not using the right PreViewTranslation when constructing the world position.
If you set a script asset from Value mode to Custom on an input parameter pin that isn't connected to a parameter set, it will now correctly show the custom pin. Additionally, when you select an input parameter in a script asset and drag it onto a parameter get node, the default value will become editable right away with no need for you to reselect the parameter to edit its default value.
Made sure the RendererEnabled binding gets updated with changes to the emitter, for example when renaming.
Variety of fixes for RigidBody Data Interface.
Pushed the instance tick to be post simulate so that we are sure to have results from FindActor in time for the GPU simulation.
Deprecated the global search path and provides feedback warnings if it's in use (along with if the FindActors is missing).
Removed the optimization of disabling the actor search if there weren't any GPU functions being called, because of the difficulty in finding bound functions for non-user parameter Data Interfaces
Fixed the selection changing in the Parameters panel whenever you would trigger a Parameter panel refresh while searching. For example, if you search for MyFloat, and you have MyFloat and MyFloat2, and you edit the MyFloat2 default value, it would cause a refresh that would then cause MyFloat to be selected.
We now handle renaming cached default data interfaces when we rename an emitter. This avoids having to recompile a shader to get all the data up to date.
Fixed a bug in Niagara's custom frustum culling.
Fixed an issue with the Landscape Data Interface when huge system bounds exceeding limits of int32 for number of potential landscape components.
Removed incorrect default pins on Parameter Map get nodes that would show up as 'None'.
We now guard against integer overflow with integer divide within VectorVM.
We now prevent re-entrant shader compiling by making sure that we don't try to fully load a system just because it shows up in a TObjectIterator resulting from an UpdateContext.
Couple of fixes/improvements for the rigid body Data Interface.
Made the actor name text more legible.
We now use the actor label if one exists.
Fixed a crash when an acquired actor goes away (is deleted in the editor).
We now invalidate script data for a simulation stage when it is disabled in the UI (this prevents previous error messages from being reported).
Fixed emitter assets not dirtying when disabling a simulation stage.
Drag operations that aren't compatible with the Hierarchy Editor will no longer crash the engine when hovering over it.
Updated the graph cache to incorporate the top level change IDs to know if the cache is valid. Ensures that emitters (post merge) will not try to use an out of date set of cached static variables. Also includes two optimizations to try to offset the cost of having to collect static variables more often, especially for merging:
Map builder can now be in 'static variable only' mode where we skip recursion into functions if the function graph doesn't have any static variables.
We now defer updating the override pins during merging until after all the modules have been merged.
Fixed a crash when adding a new user parameter while a custom section is selected in the User Parameters panel. We now select the All section when a new user parameter is added.
Fixed renaming static switch variable names, when renaming resulted in overlapping VariableGuids in the graph's NiagaraScriptVariables.
Fixed NiagaraVariable serialization in object replacement archives.
Resolved issues when loading the UNiagaraEmitter or UNiagaraScript by ensuring that the UNiagaraEmitter is fully loaded during PostLoad() through a call to Preload.
Fixed a crash when systems with warmups could be reset and activated when they need to be recompiled first.
Fixed attribute trimming with Niagara particle scripts:
Fixed when Particles.Module.AttributeName attributes were getting incorrectly culled.
Fixed dependency search to start with the most recent write rather than the first read.
Fixed an issue with some stats listeners exiting early. Some are meant to allow fire and forget behavior, but a recent change meant that orphaned listeners would be cleaned up immediately. Also fixed an issue with stats listeners when they were running without a rendering thread.
Fixed an issue with non-determinism in version guids of NiagaraScript and NiagaraEmitter assets.
Renderer bindings now no longer show emitter attributes of other emitters in the UI.
Path Tracer
New:
Added a ray-type switch Material Expression, which allows creative control over the indirect lighting response in Materials. Note that this is not intended for optimization purposes as the current implementation will evaluate all branches of the switch before picking one.
Refactored Material evaluation/sample API to provide independent control over diffuse vs. specular scattering, and implemented a "Specular Scale" control on lights.
Implemented a holdout flag on primitives so that users can mark certain objects as being holdouts without having to touch the Material.
When a holdout primitive is shaded by a camera ray, the regular shading is ignored and the object becomes unlit/holdout instead.
All other ray types see the object as normal. The logic takes into account the blend mode, so partially transparent objects will become partial holdouts and any masking is maintained.
Exposed a Blueprint command to toggle the Path Tracer show flag on or off. This gives end users a way to enable the Path Tracer without requiring the console, including in shipping builds.
Implemented diffuse/specular color overrides in the Path Tracer, which are useful for evaluating lighting similarly to the detail lighting mode. The colors are only overridden on camera rays, allowing indirect lighting to remain the same. The following ShowFlag commands are now supported in the Path Tracer:
OverrideDiffuseAndSpecular
LightingOnlyOverride
ReflectionOverride
Added support for Eye Adaptation nodes in the Path Tracing Materials.
Added Primary/Indirect ray visibility, and Hidden Shadow toggle for path tracing. Now ray tracing and path tracing use different instance masks.
Added anisotropic subsurface scattering for path tracing.
Add a new node "Subsurface Medium" with two inputs: MeanFreePath and ScatteringDistribution. If MeanFreePath is not connected, fallback to the old behavior (for example, use the derived MFP for subsurface profile shading model), If Scattering Distribution is not connected, fallback to zero for isotropic scattering. It can be used by Subsurface, eye and subsurface Profile / Preintegrated shading models.
Improvement:
Lowered the ray bias value for shadows in the Path Tracer. This results in more accurate contact shadows, and can prevent artifacts in digital humans, specifically around the lips. Very low polygon meshes may show more faceting artifacts around the shadow terminator as a result.
Crash Fix:
Fixed a crash in Path Tracer state invalidation when building Nanite.
Fixed a crash when using Per Instance Custom Data in deferred decals.
Bug Fix:
Fixed an issue with emissive Materials not respecting the two-sided flag when using the Path Tracer.
Improved the accuracy of surface normal encoding in the Path Tracer to prevent quantization artifacts on smooth surfaces.
Fixed the interpretation of the Clear Coat parameter in the Path Tracer, so that the coating will correctly fade out when the Clear Coat parameter is set to 0.
Fixed an issue with incorrect geometric normals on Nanite instances with negative scale.
Reduced the possibility of random Path Tracer image invalidations, which were possible due to the use of a timer to detect changes. This was problematic in longer lookdev sessions.
Fixed potential NaN results when rendering solid glass with the Path Tracer.
Fixed the behavior of the ThinTranslucent shading model in the Path Tracer where Opacity=1.The expected behavior was for shading to behave as Default Lit, where Opacity=1, but it was reverting to Diffuse shading due to a missing case statement in eval/sample.
Corrected a bug that could potentially produce artifacts in transparent shadows.
Implemented a fix for dark reflections with SingleLayerWater Materials in the Path Tracer.
Fixed a bug in the Path Tracer for Materials using the AlphaHoldout Blend Mode.
Fixed an issue in the Path Tracer with the rendering of transparent surfaces when viewed over a visible skylight.
Postprocessing
New:
Extended Luminance Range is now enabled in new projects by default. Templates were also updated to use this setting.
Improvement:
Improved the EyeAdaptationInverse node to support any float numeric parameter type.
Bug Fix:
Misplaced elements in VisualizeHDR were fixed. DPIScale is now applied when using ‘Canvas.DrawShadowedString'. Additionally, ResolutionFractionAndInv is applied when rendering illuminance meter square.
Fixed a bug with incorrect sampling of the Local Exposure bilateral grid which caused artifacts in Bloom. The bilateral grid must be sampled using viewport UVs.
Implemented fixes for Temporal Super Resolution (TSR) ghosting in the alpha channel.
Removed:
Removed the pixel shader version of BasicEyeAdaptation as the compute shader is used by default.
RHI
New:
Validate ThreadGroupCountX/Y/Z in RHIDispatchComputeShader and RHIDispatchMeshShader.
Fix security vulnerabilities in FBatchedElements::DrawPointElements, FBatchedElements::Draw, and DynamicRHIResourceArray::GetResourceDataSize() by disallowing integer overflow when calculating how much memory to allocate for a vertex buffer.
Added manual LLM tracking to D3D12TextureStats and the backing heap of the D3D12TransientAllocator so that stat LLMPlatform shows memory usage for the Graphics tag comparable to that of D3D11.
Validate size of indirect buffer args in RHIDispatchIndirectComputeShader, RHIDrawPrimitiveIndirect, RHIDrawIndexedIndirect, RHIDrawIndexedPrimitiveIndirect, RHIDispatchIndirectMeshShader, and RHIRayTraceDispatchIndirect.
With VulkanRHI, use VkImageViewUsageCreateInfo on some views created for framebuffer to specify they will only be used with COLOR_ATTACHMENT_BIT.
With VulkanRHI, the SDK has been upgraded from 1.3.204.0 to 1.3.236.0. This adds mesh_shader, descriptor_buffer, device_fault, ray_tracing_maintenance1, and so on.
With VulkanRHI, added VK_EXT_descriptor_buffer extension. It adds all necessary functions to the loader and wrap layers. Note that Vulkan Bindless work is in-progress.
With VulkanRHI, added support for VK_KHR_synchronization2 and VK_KHR_separate_depth_stencil_layouts. This reduces reliance on image layout tracking, and moves layout tracking to CmdBuf and added layout tracking to Queue and submitted CmdBuf transfers their layout to the queue. Changed layout tracking to track depth and stencil separately and to use new VK_KHR_synchronization2 structs and layouts for all of tracking (like VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL/VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL). If Sync2 is not supported, they are converted back before being submitted. Added 'r.Vulkan.AllowSynchronization2' to disable Sync2 on systems that support it. Fixed barrier errors on RHIRead*SurfaceFloatData functions when reading a mip or layer index different than 0.
With VulkanRHI, added support for WAVESIZE.
Fixed issues with Shader Generation with ShaderModelID being incorrectly determined because of rounding rules in EncodeGBufferToMRT.
Enabled linking against debug binaries with Intel Metrics Discovery.
With AMD AGS, added debug CRT lib variant Also, deleted the 32-bit lib since Win32 support has been removed. This was sourced from https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK/releases/tag/v6.0.1.
Reset size of scene textures after drawing a material to a render target from Blueprint. This prevents a user from keeping too much memory allocated for a large, one-off render target and this BP function shouldn't be altering this state anyway.
Enabled the D3D12 submission thread when not running with multi-GPU. This thread offloads the calls to execute GPU command lists from the RHI thread. Also added a console variable to control this at boot time: "rhi.UseSubmissionThread"
Unified code that binds shader resources from uniform buffers across platform RHIs.
Add the console variable "r.RayTracing.RequireSM6" (default=0) to explicitly control when ray tracing shaders/features should be available, instead of relying on project target platform shader model settings. This is required because target platform settings are not available when running a packaged game. The engine uses GRayTracingPlaformMask to compute ShouldCompilePermutation() for shaders. This is filled based on platform settings and capabilities when running the editor. When running a standalone game, the mask is filled purely based on whether ray tracing is enabled for the project (r.RayTracing) and the current runtime environment supports it (GRHISupportsRayTracing). The new variable is meant to be consistent between the cook time and run time. This is achieved by setting GRHISupportsRayTracing=false when running on SM5 if r.RayTracing.RequireSM6 is 1.
Improvement:
Improved performance of RHI GPU draw call / num primitive stats. The old code relied on atomic increments in the RHI_DRAW_CALL_INC / RHI_DRAW_CALL_STATS macros, which is expensive, particularly on platforms with poor atomic performance. The new system replaces the atomic writes with a context-specific stats structure, which is accumulated by the RHI thread into the global structure. Also, moved Begin/EndFrame, Begin/EndScene, Begin/EndDrawingViewport into the immediate RHICmdList. They were already immediate-only functions due to a check() they contain.
Crash Fix:
Fixed initialization order crash with csv profiler and draw call category stats.
Applied a fix for the editor crashing after executing the command r.DisplayInternals 1 or r.DisplayInternals = 1. Also added an RDGEventName to UpdateAllPrimitiveSceneInfos pass.
Fixed a possible crash at boot when running a packaged version with the Small Font of the engine configured to use an offline font.
Fix crash when running D3D12 with "-nothreading" by skipping the creation of the interrupt thread and falling back to polling mode.
Bug Fix:
LLM was tracking all buffer types as "Meshes" in D3D11. Removed that tracking so the "Meshes" tag shows a comparable amount of memory usage as it does in D3D12.
Fixed FRHIGPUTextureReadback returning incorrect results when reading back a subrect of the source texture.
Fixed output of the High Res Screenshot and LDR buffer visualizations.
With VulkanRHI, Vulkan RHICopyTexture was not using SourcePosition, causing an engine test failure on 3D texture copies when Z offsets were used.
With VulkanRHI, we don't assume SRGB formats are supported and create a forwarding table and fill it by checking VkFormatProperties. Fixed up PrintVulkanPixelFormatMappings to also print the SRGB mapping when there is one (and use VK_TYPE_TO_STRING on formats for readable output).
With VulkanRHI, FVulkanGPUTiming: Non-blocking queries were reset right after copying the result, without knowing the availability of the results. Added a retry (and eventually a discard) for non-blocking queries. This makes it less likely to hit the code path that flushes everything. Cache the MappedPointer for Query result buffers to avoid the return trip (and lock) in VulkanMemory since they never change. Fix the return value of GetTiming that would return a sum if multiple results are available instead of only the latest one (as per function description). Add support for VK_EXT_calibrated_timestamps to fix assert with RADV on startup by reading the calibration value instead of a query result (that might not be available). NOTE: will add matching CPU timestamp from VK_EXT_calibrated_timestamps in a follow up changelist.
With VulkanRHI, fixed a hole in the locking of the FVulkanShaderFactory. This reduces lock contention by having one lock per map.
Pass nullptr instead of a name to CreateEvent because it isn't clear if adding the "Local" prefix makes it process-local, or just session-local. Passing nullptr will create an anonymous object that no other process can manipulate.
Fixed an issue with so that Vulkan RHI now properly invalidates cached memory before buffer readback
Applied a fix for standalone PIE when "Use Less CPU when in Background" (bThrottleCPUWhenNotForeground) is enabled that would cause some slow downs. Also reenabled RHIInterrupt thread since CreateEvent was being passed the same name for both the parent (editor) and child (game) processes when creating the interrupt and submission threads. Also that name was in the Global kernel object namespace, both the editor and LyraGame.exe were sharing the same Event. adding the "Local\" prefix to the Event name, each process gets its own event, so the editor can no longer throttle the game's interrupt and submission threads.
Applied a proper fix for the livelock. The old fix used a queue which was leaking and still had the livelock problem. Now uses a stack-base queue which should resolve the remaining issues.
Only compare the relevant bits of render target flags when comparing FGraphicsPipelineStateInitializer-s. This fixes PSO cache lookup when the only difference is some miscellaneous flag, such as TexCreate_FastVRAM, TexCreate_Transient, etc, and fixes pipeline sort key calculation in BuildNaniteMaterialPassCommands().
Fixed calculation of temporary texture upload resource in D3D12 RHI RowSizesInBytes was used to compute sizes of the first mip and the tail and to allocate upload resource memory. This can result in under-estimation, as the row size in bytes (i.e. valid data range) may be smaller than the row pitch (i.e. number of bytes between rows). The pitch is what's used inside MemcpySubresource (called from D3DX12 UpdateSubresources) to compute the destination address. Since the smaller memory footprint was previously computed, smaller buffer range is sub-allocated from FD3D12FastAllocator and adjacent sub-allocations could be corrupted by MemcpySubresource. The solution is to just use the total size of the resource (including all mips) returned by GetCopyableFootprints() and the offset of mip1 to compute the size of mip0 and the total size of the tail.
Fixed texture array resolve in D3D11.
Fixed mip tail buffer size validation condition in FD3D12DynamicRHI::RHIAsyncCreateTexture2D Mip copy footprint size was computed incorrectly in the check(), assuming that RowPitch worth of data will be accessed for every row. This is wrong for the last row, where only RowSize bytes will be accessed.
Suppress some verbose logging related to RTPSO creation when non-blocking mode is used. Long PSO creation time typically does not cause a frame time spike when background compilation is used. Log events are still emitted if a PSO is created in a blocking mode (this can happen if non-blocking mode is enabled in some cases, such as when adding a new ray generation shader).
Fixed calculation of temporary texture upload resource in D3D12 RHI RowSizesInBytes was used to compute sizes of the first mip and the tail and to allocate upload resource memory. This can result in under-estimation, as the row size in bytes (such as valid data range) may be smaller than the row pitch (such as number of bytes between rows). The pitch is what's used inside MemcpySubresource (called from D3DX12 UpdateSubresources) to compute the destination address. Since the smaller memory footprint was previously computed, smaller buffer range is sub-allocated from FD3D12FastAllocator and adjacent sub-allocations could be corrupted by MemcpySubresource. The solution is to just use the total size of the resource (including all mips) returned by GetCopyableFootprints() and the offset of mip1 to compute the size of mip0 and the total size of the tail.
Deprecated:
Removed RHICopySharedMips function and replaced it with a common UE::RHICore::CopySharedMips function that relies on RHICopyTexture. Global scope and command list versions of RHICopySharedMips are deprecated, and forward to the new implementation. Please update code to use UE::RHICore::CopySharedMips instead.
Removed:
Removed use of GetContextSyncPoint in FD3D12OnlineDescriptorManager, and replaced with pipelined cleanup of used descriptor blocks. Context sync points cause command lists to split and extra ExecuteCommandList plus Signal calls on the submission thread, which results in lower GPU utilization.
Removed use of FRHIBoundShaderState resources in D3D12RHI. These were no longer necessary since they were only used to find or create root signatures, which can be implemented directly in the adapter class.
Remove deprecated RHIRayTraceOcclusion and RHIRayTraceIntersection methods. They are replaced with equivalent new high-level functions in RayTracingBasicShaders.cpp.
Strata
New:
Rough refraction now accounts for transmittance in Substrate.
Added high quality normal in Substrate, according to GBuffer format.
Fixed forward shading ambient lighting so that it works with Lumen Global Illumination in Substrate.
It is now possible to have an acyclic graph instead of a tree, meaning a node can be linked to multiple pins in the Material Graph.
Added support for Substrate as a pin type when adding inputs to Material Functions.
Added better positioning of Material nodes when converting to Substrate from legacy Materials.
Separated Sky Mie and Rayleigh atmosphere LUTs for better control over the look of the cloud including start distance and fade region.
Rough refraction now accounts for depth in Substrate.
Added a Temporal Anti-Aliasing (TAA) pass to stabilize rough refractions.
In Substrate Rough Refraction, added a max pre-exposed illuminance console variable to reduce flickering.
Improved the Console Variable documentation in Substrate's debug view mode.
Mean Free Path (MFP) is no longer clamped for forward materials, resulting in transmittance closer to 1.
Substrate now properly accounts for the Allow Negative Color setting.
Bug Fix:
Fixed Oct encoding in Substrate, which was causing visual issues with normals.
Fixed a shader compilation failure in Substrate when the output 0 of a Material Function is not 0.
Fixed a bug with previewing the regular Material root node while Substrate is enabled.
Implemented a fix for top layer roughness affecting the bottom layer roughness when it should not. This occurred when coverage is 0, or when coverage is 1 but transmittance is 0.
Fixed a bug with Simple Clear Coat throughput being applied twice on the specular of the bottom layer.
Implemented a fix for slabs to work with the legacy Additive Blend Mode.
Fixed a bug that produced artifacts with Rect lights when Forward Rendering is in use.
Made changes so that the ‘IsThin' property is only editable when Substrate is enabled.
Deferred shading now handles light SpecularScale correctly in Substrate.
Fixed opacity clipping in Substrate for translucent writing in VelocityShader.
Fixed a bug to prevent blur in refraction when roughness equals 0.
Implemented fixes so that emissive Materials in Substrate are consistent with legacy Materials.
Fixed an issue with opacity clipping not happening on Lumen front translucency.
Simulation
New:
Added an option to use dual quaternion delta in MLDeformer from the Nearest Neighbor Model. This option improves network prediction accuracy.
Added an automatic tool to generate a nearest neighbor dataset in ML Deformer from the Nearest Neighbor Model editor.
Optimized the network for the Nearest Neighbor Model using ISPC for improved performance.
Physics
New:
Significantly reduced the amount of work done on the CPU for geometry collections that have not yet been broken.
Added additional ways to tune the collision behavior of geometry collection components as they crumble using the new Collision Profile Per Level and Abandoned Collision Profile Name properties.
Introducing a new physics object API that allows you to interact with both rigid bodies and geometry collections using a single interface.
Joint constraints can now attach to geometry collections.
Added missing functions relating to AutoDisable and Collision to Physics Control Component.
The Fracture Mode now can optionally show precise, live previews of the cutting shapes that will be used in Voronoi-based fractures. This is especially useful for tuning the noise settings on a fracture.
Default proximity generation settings for Geometry Collections are now exposed in the Fracture Mode project settings. These settings will be applied to any newly-created Geometry Collection in the project.
Added a new Proximity tool in Fracture Mode, which allows users to visualize and change generation settings for the Geometry Collection bone proximity graph. This proximity graph is used for clustering, neighbor selection, and some collision generation features.
Added aConvex Hull distance method to the Proximity tool for computing the proximity, allowing for a more approximate notion of proximity where bones are connected as long as their convex hulls are within a user-specified distance.
Added the option to the Proximity too to use the proximity graph as a connectivity support graph for simulation, giving more control over how a Geometry Collection breaks apart.
Added the option to enable or disable collision between the controlled objects when creating controls using the Physics Control Component.
Removed contention on lock in TRwFifoLock when there are significantly more readers than writers.
Fixed crash occurring when enabling simulate physics on a Geometry Collection with no rest collection assigned.
Added an option to enable disable playback on individual components in a Chaos cache manager.
Added an island computation node and point triangle position target node.
Add missing guards to Physics Control Component to avoid crashes when using a Skeletal Mesh Component.
Exposed Poisson ratio and J term coefficient for XPBD corotated constraints.
Added variable damping and mass support for materials.
Fixed potential crash when adding a Geometry Collection to a sequencer and adding components as the track followed by adding a Geometry Collection track to it.
Added XPBD position targets and related nodes
Grouped the various geometry collection notification settings into a separate Events category in the editor.
Added an option to use level sets when running Generate All Bodies for the Skeletal Mesh Editor.
Implemented CopyWithScale for instanced implicit objects and scaled implicit objects which allows support for non-identity scalings on geometry collections using those objects as collision shapes.
Geometry collections can now be used in the ComponentSweepMulti and ComponentOverlapMulti functions.
The Fracture Mode plane cut tool can now show a live preview of the shape of the cutting surface with noise applied, giving a better pre-visualization of exactly what the cut will look like.
Improved runtime performance of render state creation.
Added a new base 3d gas shader.
The cluster's Level Up button in Fracture Mode can now operate on clusters.
Removed data flow data from cooked Geometry Collection Assets.
Added VDB sim cache support with optional CVARs.
Added an Enable Damage from Collision flag that, when turned off, prevents physics collisions from breaking the geometry collection. This gives gameplay more control over the geometry collection's destruction.
Added an option to strip geometry data on cook even when nanite is disabled.
Added an extents property for breaking events in geometry collections.
Added the ability to know if the geometry collections' breaking event originates from a crumble event.
Added a GetLocalBounds Blueprint function.
Added a GetDebugInfo Blueprint function.
SetAnchoredByIndex and SetAnchoredBybox have now a new bAnchored option.
Improved debug draw of geometry collection connection graphs by showing the nodes and their physics states using colors ( blue: kinematic/anchored, yellow: dynamic, red static).
Optimized several runtime code paths for geometry collections.
Improvement:
Added a flag to geometry collections to prevent them from crumbling when applying forces to them to allow gameplay to dictate their destruction.
Removed IsBetaVersion from the Chaos Cloth plugin, and updated version name to 1.0.
Updated geometry collection to make sure to only recreate convex hulls if necessary when resetting a collection from another.
Updated the output grid resolution to better match the specified input resolution for PhysicsAsset/SkeletalMesh level set collision objects.
Updated PhysicsAsset/SkeletalMesh level set collision objects to avoid rendering the grid if resolution is too high (debug rendering can really start to slow things down).
Updated the box projection in Fracture Mode's AutoUV tool to have more options to control how it is laid out in texture space, and it now defaults the box projection UV origin to (.5, .5) so the layout fits in a standard 0-1 range.
Made bImportCollisionFromSource writeable for blueprints.
Updated Fracture Mode's cluster Merge tool to work on leaf nodes, so users can easily merge a leaf node into a cluster.
Updated the Radial Fracture tool in Fracture Mode to have more options for controlling the layout of the radial Voronoi sites, including separate controls over angle vs radial noise, and control of the radial spacing.
UpdatedGeometry Collection to not create render state when ISMPool is in use and not in Editor.
Updated the Fracture Mode's Proximity tool to allow the user to specify a Contact Threshold to filter out proximity connections that have insufficient contact. Currently, we define contact as the maximum overlap of the 2D bounds as projected to each major axis, so this primarily helps filter out corner and edge connections between bricks.
Updated break events to filter out in the clustering code if the proxy does not opt for it.
Bug Fix:
Fixed the USkeletalMeshComponent::GetTeleportRotationThreshold method that was returning the distance instead of the rotation threshold.
Fixed a potential crash when loading into a level with geometry collections in a Play In Editor (PIE) session.
Fixed backstop when the Chaos Cloth component is scaled.
Fixed tether scale clamp that should happen before the mesh scale was applied that was deforming cloths using higher than 10 times scales.
Fixed the cloth collision thickness when the component is scaled.
Fixed fictitious forces to use the cloth reference bone as rotation center instead of the simulation space location.
Fixed a bug generating a mesh for solid rendering of the level set cells.
Fixed an issue where the geometry collection would move to an incorrect location if its world transform is changed prior to initialization on the physics thread.
Fixed a geometry collection crash that could happen if replicated data is processed on the client before it is initialized.
Corrected SkinnedBoneTriangleCache error of getting the wrong bone-vertex influence. Weights are now using uint16 but one variable was still uint8.
Fixed rare compilation error related to variable shadowing in Chaos.
Fixed solver velocity scale when a reset is needed, which was causing the garment to flip over a character on the first few frames.
Chaos MassProperties.cpp's CalculateVolumeAndCenterOfMassImpl and CalculateInertiaAndRotationOfMassImpl are now consistent. Both now compute their result in double precision, and handle surfaces with more than three vertices by implicitly fan-triangulating them
Protected a call to IsStatic in the physics interface matching previous behavior (protects against crashes when setting up body instance parameters in component constructors).
Fixed potential crash when a Geometry Collection is deleted at runtime while removal events are still being processed.
Updated the geometry collection statistic window to display information properly when selecting a geometry collection embedded in a Blueprint.
Updated the C++ TransformNormalUnsafe function in Chaos/Transform.h to apply scale and rotation in the correct order, there is a new safe TransformNormal method in the same file.
Fixed a physics constraint component crash when it unregisters after the components it is attached to.
Fixed MTD computation in Overlap_GeomInternal to take the maximum distance instead of accepting the first overlap as the correct MTD.
Fixed an issue on large maps where geometry collections would not add or remove themselves from the gameplay acceleration structure in a timely fashion causing player movement to collide against them longer than they should.
Fixed potential crash in FClothVisualization when the debug materials are loaded.
Updated the GeometryCore TConvexHull3 class with a GetFace method to directly extract polygonal faces. The Chaos convex hull builder now uses this method instead of a triangle-based method, which avoids some robustness issues.
Fixed error where removing a geometry collection anchor would cause disabled particles to start simulating.
Fixed an issue where geometry collection crumble events would get spammed even after everything has finished crumbling.
Updated Geometry Collection creation from Static Meshes to respect Static Mesh build settings when computing normals and tangents, either computing them with the same settings or not re-computing them if the build settings do not request it.
Fixed crash when undoing a mask target change in Chaos Cloth.
Fixed issues with kinematically driven Geometry collection not updating properly in the following situations:
When internal clusters are becoming kinematically driven roots.
When all pieces are broken and sleeping , preventing the rendering from properly updating the rendering matrices.
Deprecated:
Removed support for the legacy Apex collisions.
Deprecated an unused bLocalSpaceSimulation property on the SkeletalMeshComponent.
The UV channels in Geometry Collections are now structured so that each active UV channel is under a separate attribute, and is handled as a TManagedArray of FVector2f. This is more efficient to work with than the previous array-of-arrays structure, and also makes it impossible to accidentally create a Geometry Collection where some vertices have more UV channels than others. This means that UVs cannot be accessed via a UVs attribute on the Geometry Collection, and must instead be accessed via the GetUV, ModifyUV, and FindUVLayer methods, or the many new helper methods provided in the new FCollectionUVFacade class.
Tools
AutomationTool
Bug Fix:
Added ensure to use the specified unreal executable instead of a hard coded development one when launching the cook on the fly server.
UnrealBuildTool
New:
When running the QueryTargets commandlet, Unreal Build Tool will only write out the default targets, if one is specified for a given target type.
UI
New:
Improved game console keyboard shortcuts. Using left, right, backspace, or delete with the CTRL key now behaves similarly to common text editors.
Windows dialog boxes now have the following improvements:
Dialog boxes are now resizable and can auto-fit to screen.
The scrollbar has been implemented.
Text is now selectable.
Dialog boxes now use proper layout with DPI scale.
Bug Fix:
Fixed Common UI Actions not being visible on the navigation bar inside paused menus in cooked games.
Fixed an issue where UI input configs could unintentionally apply multiple input locks.
Slate
New:
Added a plugin to refresh the main frame and Slate widgets when Live Coding is completed. This makes it possible to conveniently iterate on Slate UI using Live Coding.
Added new bool attribute to
SDropTarget
to stopAllowDrop
function call from executing every frame for overlay visibility. This will make the drop target highlight only appear when hovering above it.Added support for configurable minimum and maximum fractional digit to display in the spin box for
SNumericEntryBox
.SPropertyEditorNumeric
now supportsMaxFractionalDigits
metadata, which makes it possible for properties to specify that they don't need 6 digits of fractional precision. This can be useful for properties with large ranges.Optimized the tooltip system to avoid frame rate drop when moving the mouse over Widgets displaying different tooltip.
Improved the
SScrollbox
slot to support the same settings as the Vertical/Horizontal/Stack box, such as fill size and auto size. Those new settings are now also available in the slot from the Scrollbox widget in UMG.Added cache functionality to
SDropTarget
for expensiveAllowDrop
operations. This is turned off by default. Normally,OnAllowDrop
is called every frame, which is user bound. SettingbUseAllowDropCache
to true will cache off AllowDrop the first time it is called. The cache is cleared whenever a drag & drop operation starts.Added a Cvar to adjust the software cursor's scale:
Slate.SoftwareCursorScale
This can be used with 4k device profiles to make the cursor more visible. Requires a cursor widget that is scale-aware.Deprecated protected access to
SListView::ItemsSource
. This will allow us to use other container types.Added the ObservableArray container to Slate.
Added support for specifying which file type is initially selected when creating a Slate file dialog window.
Bug Fix:
Fixed an issue that caused Slate trace selection to fail to update under Timing Insights. This required clicking on Asset Loading Insights to update.
Previously,
SlateRect
calculated its area withSizeSquared
instead ofGetArea
. This has been corrected, andGetArea
will return the correct value.Fixed Slate clipping against incorrect Windows rects.
Fixed error handling when creating a Slate vertex shader (
FSlateD3DVS::Create
).Fixed an issue where gamepad focus would not set correctly due to default synthetic cursor position generating widgets under the mouse when fullscreen.
Deprecated:
Slate's core use of
FVector2D
has been deprecated in favor ofFVector2f
.Nearly all of the public surface area of SlateCore has been modified to use deprecation tooling that transitions towards
FVector2f
. Virtual functions and some members remain usingFVector2D
due to the difficulty in gracefully deprecating such APIs.FDeprecateSlateVector2D
,FDeprecateSlateVector2DParameter
andFDeprecateSlateVector2DResult
are now used extensively and support a range of conversion operators for interoperability with both single and double precision types while the transition is in progress.Some legacy
FGeometry::ToPaintGeometry
andMakeChild
overloads have been explicitly deprecated since they cause ambiguous overloads withFSlateLayoutTransform
if it were to support implicit construction.Deprecation is reported for any consuming module that enables
UE_REPORT_SLATE_VECTOR_DEPRECATION
as part of itsbuild.cs
file. By default this is not enabled, but the default will change in due course as deprecation progresses.Make sure to add
PrivateDefinitions.Add("UE_REPORT_SLATE_VECTOR_DEPRECATION=1");
to your.Build.cs
definitions for any module that consumes slate APIs in correct any deprecation warnings as soon as possible. This will become mandatory in the near future.A small number of very rarely used APIs that returned double precision types by
const T&
have been changed to return their single precision counterpart by-value. This has the potential to cause a build error in your project in some circumstances (for instance, where that return value is also returned by-reference or pointer).
UMG
New:
Added a CVar to enable the platform cursor when using gamepad.
Added mobile-specific properties to
WBP_UIKit_CTAButton_Base
.Added capability for ActionRouter child classes to have control of Mouse Position in CommonUI.
Created an option in UE TextLayout for text flow to be set by culture. This makes it possible to predictably handle text that might include names from other cultures but should still be read the same as the set culture.
Auto-cast the result of User Widget Extension utilities in Blueprints.
Added a new CVar called
CommonUI.bDumpInputTypeChangeCallstack
to log when the input type changes to CommonUI.Added a BlueprintAssignable delegate called
BP_OnListViewScrolled
toUListView
. This is broadcast fromUListView::OnListViewScrolledInternal
.Added a Getter and Setter for
MobileFontSizeMultiplier
inUCommonTextBLock
.When creating a new Widget, the Is Variable property of the Widget is now set according to the Authorize Automatic Widget Variable Creation project setting, which you can find in the User Interface category. If automatic widget variable creation is disabled, the Is Variable property will be set to false. If automatic widget variable creation is enabled, it will use the internal setting of the widget. The setting is set to true for existing projects in order to keep the current behavior, and it will be set to false for new projects. It can be changed any time, and will only affect new widgets, not previously-created widgets.
Updated the CircularThrobber with getter functions for Period, Radius, and Number of Pieces, as well as a Getter and Setter function for the throbber Image.
Added a debugging interface for Viewmodels.
Added an interface (
IBlueprintWidgetCustomizationExtender
) to customize widgets in UMG designer.When a UserWidget uses a Viewmodel, it now adds the Viewmodel's information to the widget's asset metadata.
Added OnWidgetAdded and OnWidgetRemoved events to GameViewportSubsystem when a widget is added and removed.
Crash Fix:
Fixed a potential crash in
UCommonUIVisibilitySubsystem
when GameInstance isn't initialized.
Bug Fix:
Fixed a bug where a 1-frame flickering occurred when using rich text to create a new text sub-element within another rich text. This was due to scale not being taken into account at creation time.
Fixed a bug that prevented changing the style of an editable text from a Blueprint graph.
WidgetSwitcher now properly sets the Slate ActiveWidget Index even if it did not change.
Fixed analog navigation input not working properly in the CommonUI AnalogSlider widget.
Fixed the flow direction that was not handled properly by InvalidationRoot (typically used in RetainerBox) when configured to Inherit. This was overwriting the RightToLeft setting from parent with LeftToRight.
Fixed all EditableTexts in order to prevent ModelViewViewModel notifications from being called too often, and to ensure MVVM notifications are called when the text is edited from the
SWidget
.Fixed the MultiLineEditableTextBox to enable MVVM notification on Text property change, to be on par with other members of the MultiLine EditableText Box family.
Fixed an issue in
UEditableText
andUEditableTextBox
where the IsReadOnly and IsPassword parameters weren't being set when MyEditableText is created.The UMG Blueprint widget editor now initializes according to the same non-defaults-only workflow as a non-UMG Blueprint.
Fixed an issue where UMG widgets wouldn't check if
SWidget
exists before attempting to synchronize.Middle mouse inputs now work with CommonUI.
CommonUI now checks for an empty gamepad widget rect using GetArea instead of SizeSquared.
UPanelWidget::ReplaceChildAt
is now editor-only. This function won't work at runtime without rebuilding the widget. This can cause errors due to the fact that it uses virtual functions to add and remove children. Changing it to an editor-only function was deemed the safest way to address this issue.EditorUtilityWidget is now only enabled when Unreal Editor is not in Play-In-Editor mode or Blueprint debugging mode.
Ingame widgets are not painted/ticked when their Blueprints are in Debugging mode.
Fixed an issue in drag-and-drop operations that kept extraneous resources alive.
Changed GameViewportSubsystem from a GameInstance subysstem to an Engine subsystem. This fixes an issue where widgets created in the loading screen are removed when the game instance changes.
Offscreen widgets with animations are no longer tracked by the tick manager.
Virtual Production
New:
Added the experimental XRCreativeFramework plugin. XR Creative Framework provides a foundation for users to build tools for Unreal Editor which utilize head mounted display rendering and motion controller poses via OpenXR.
Switchboard: Added option to not retrieve logs. Useful for faster iteration when log and trace transfers are not desired.
Switchboard: Added LiveLink dropdown for Unreal and nDisplay devices. Now users will be able to select the LiveLink preset for Unreal and nDisplay devices directly from Switchboard.
Created CineSplineComponent to store camera data and custom parameterization. Created CineCameraRigRail actor to drive attachment with custom parameterization
Added additional attachment control on CineCameraRigRail, including camera parameters Added SplineMeshMaterial and SplineMeshTexture parameters to visualize spline parameters Added POC widget as an example showcase of new spline/CineCameraRigRail functionalities
Switchboard: Added option to disable slate throttling (defaults to no throttling). This is typically desired on Virtual Production stages since the Editor is used by the operators that prefer to see real time updates on the viewports as they change object properties, such as color grading on LED walls.
Switchboard: Users can now select the media profile in Switchboard for Unreal and nDisplay devices.
Bug Fix:
Fixed WebMMedia runtime crashing when trying to play media, and cleaned up WebMMedia.build.cs.
IO
New:
Support for GPUDirect for both input and output Added support for low latency input using just-in-time render. Added support for a frame creation output mode to reduce latency between rendered frame and frame sent out. Rivermax clock now supports system time. Rivermax SDK updated to 1.20.
Added a Display Unit setting when adding focal length and image center data to a Lens File asset, allowing users to specify the units of their input data (millimeters, pixels, or normalized).
Added support for an anamorphic distortion model (based on 3D Equalizer's Standard Degree 4 model) that can be used to apply an anamorphic post-process look to a cinematic camera.
Added a Camera Feed Info property to the Lens Information tab of the Lens File Asset Editor. This allows you to specify the rectangular region within the selected Media Source that represents the actual camera feed, so you can compensate for arbitrary cropping and masks.
nDisplay[SharedMemoryMedia]: Added media source modes of operation for non-nDisplay usage.
Framelocked: Matches source and local frame numbers. Always use this mode in nDisplay.
Genlocked: It doesn't match frame numbers, but it also doesn't skip frames, so will hold back the sender (up to a timeout) if it is faster than the receiver.
Freerun: It always grabs the latest frame. It may skip frames if they arrive too fast.
Remote Control: Added a setting to enforce remote clients to provide a passphrase. If a remote request (not made by the local user) does not contain a passphrase, a prompt will appear in the editor to decide how to handle the request:
Deny request
Create a passphrase
Put the client in an allow list.
Remote Control: Added a setting to control allowed origin (used to block potential scripting attacks). Added setting to validate the IP of the incoming requests. These settings can be modified in the Remote Control project settings under the Security category.
Highlight property in detail panels when clicking it in a Remote Control panel.
In Remote Control Preset:
Added owner actor name column.
Simplified exposed property label.
Display last valid bindings in the details section if its invalid.
Crash Fix:
Fixed crash when running in multi user with Remote Control in -game
Fixed crash when using Remote Control in a packaged project with NDisplay
Bug Fix:
The Lens Component now properly displays the names of the distortion model parameters in its details panel.
Fixed the Lens Component track in recorded Level Sequences to properly display its channels for distortion parameters and camera intrinsics.
The Simulcam Viewport in the Lens File Asset Editor now automatically adjusts its output resolution to match the resolution of the Media Source selected by the user.
Fixed distortion ST maps whose pixel origin was in the bottom left of the image to be correctly flipped vertically.
Improved time for opening Remote Control preset in huge maps or when it has a lot of exposed properties. Reduce OnObjectPropertyChanged callback time. Fixed hang when recompiling materials with remote control preset open.
Fixed functions without parameters not working when running in a display cluster. When running in a display cluster context, remote control requests get intercepted by the Display Cluster interceptor to improve performance, but requests going through that system are sent in a "fire and forget" fashion, therefore we cannot fetch the returned values from the intercepted payloads. This fix works around this by disabling interception when dealing with functions that return data.
Fixed some property change notifications not being sent by Remote Control when running in a packaged or standalone project
Reduced audio delay and improved audio quality when doing media capture with AJA.
nDisplay
New:
Light Cards can now stay flush with the stage actor when you change their positional properties in the details panel.
nDisplay now supports Color Correction Windows in the Light Card editor.
Switchboard: Updated to PresentMon 1.8.0, which adds support for Win11.
nDisplay: Added shared cross-GPU media IO. This allows for sharing viewports between render nodes with zero or 1 frame latency, cross GPU. This is an alternative to mGPU that in some cases can be more efficient. It should be used without SLI enabled. Two nDisplay nodes would run on the same PC, one with r.GraphicsAdapter 0 and the other with r.GraphicsAdapter 1, which can be set in the nDisplay config, and overridden from a newly added option in Switchboard.
nDisplay: Preview now supported in PIE and SIE.
The PostEditChange message is now prevented when interacting with a subobject of the CurrentConfigData. This helps improve performance of the ICFVX panel when manipulating color settings.
nDisplay: Renamed operator panel name to 'In-Camera VFX' and added icon.
nDisplay: UV and 3D Lightcards now support OCIO.
This makes it so even with PQ enabled, exposure stops use the correct units. By default it will inherit the OCIO of the relevant nDisplay viewport.
nDisplay: Added an option to set the Graphics Adapter used to launch a given nDisplay node. This is particularly useful when in non-sli multi-gpu system.
DMX - Implemented DMX controls for Light Cards.
Added the ability to rename and delete color grading groups from the ICVFX panel color grading drawer through a right-click context menu. Unnamed color grading groups now show up as "Unnamed" in the drawer, and hovering over the group name now shows a text edit beam cursor.
Bug Fix:
Fixed an issue where opening multiple nDisplay config editors would generate duplicates. Added buttons for each of them in the component panel.
nDisplay config actors in the level no longer display a preview when the ICVFX panel is open if Enable Preview is disabled.
Fixed issues with Light Cards that prevented them from staying flush on screen components. Also added a higher vertex screen mesh, which gives light cards more accurate results when rendered in the Dome projection of the ICVX panel.
Light Cards now stay in place when the viewpoint component they orbit around is moved.
nDisplay: Fix MediaInput for the sRGB input case. When playing back recorded image sequences, they appeared darker than the original, and it was because the saved images are sRGB encoded and the reader was not converting it back to linear.
Fixed issue where attempting to change the ICVFX camera component's chromakey color using the color picker window would cause the details panel to immediately become empty, as well as causing the color picker in the ICVFX panel's color grading drawer to stop working.
Fixed issue in the ICVFX panel color grading drawer where the details panel for the last per-viewport and per-node color grading group was displaying the entire cluster properties instead.
Rendering
New:
Updated the OpenColorIO library to v2.2 with a minor patch to disallow texture 1D resources.
Added optional support for inverted display-view transforms in the OpenColorIO plugin settings.
Added additional color space metadata to written EXRs such as chromaticity coordinates, and/or transforms source, or destination names.
Merged OpenColorIO render pass into a single accessible/public-facing function.
Added ANSI E1.54 PLASA color space definition to the engine for DMX users.
Correctly exposed OpenColorIO color space properties to Blueprint since their absence hindered python script users.
Added OpenColorIO support for built-in config via URI such as ocio://default.
Added an invalid fallback render pass to OpenColorIO as a graceful failure mode for invalid color transforms.
Tools
New:
Virtual Scouting now has the Add Walk mode.
Changed the default for transact sources.
Sequencer Playlists: Additional playback options.
Invoking play again before previous section(s) have completed now enqueues additional sections on the same row (instead of playing concurrently).
Replaced "hold" with "pause."
Added "play backwards."
Added ISO, Exposure Bias, and Near Clip Plane to values transferred over Multi-User stream.
Moved VPSettings and VPRoles into their own modules / plugins.
Switchboard: sbl_helper.py now supports the UnrealGameSync "AdditionalPathsToSync" directive, which can be configured to sync additional depot paths to the same changelist as the project.
Switchboard: generalized mechanism for exposing plugin contents for use in UI This enables specifying plugins that Switchboard should search for content not just by plugin name but also by relative or absolute file path to the plugin directory.
Added support for environment variables for Virtual Production in film pipelines.
Switchboard: Added the ability to redeploy remote Listeners on demand via the Tools > Listener Redeployer menu item. The redeploy flow now also allows users to include or exclude individual devices via a checkbox.
Bug Fix:
Bumped the version for TcpMessaging. It was not bumped for 5.1 but should have been.
Virtual Scouting: Fixed interactor laser spline meshes recomputing physics-derived data every frame, as well as an analogous issue in the multi-user VR presence.
Virtual Scouting: Added a toast/notification if Virtual Scouting is unable to launch because the
r.PostProcessing.PropagateAlpha
cvar was set to an unsupported value.Switchboard: sbl_helper.py now correctly handles
p4 print
returning multipletext
records for a single file.Added an overflow buffer for reliably sent messages so that fully sent segments waiting for ack do not block new messages from being sent.
Fixed a bug in Switchboard Listener that would cause child processes to have an invalid handle passed for stdin.
VR Editor Mode: Screen Percentage support
If VREM is enabled, Preview Screen Percentage no longer automatically disables.
Switchboard: Fixed an intermittent crash on multi-user launch/shutdown. Also, the running server is now correctly validated in more scenarios, such as if the server name contains hyphens, or uses a hostname instead of an IP address.
Virtual Scouting: Fixed a bug where attempting to enter Virtual Scouting with a Cinematic viewport active would lead to the view rendering as completely black. Entering Virtual Scouting now changes the active viewport back to Default.
Switchboard: Fixed an issue where focusing then unfocusing a class setting could reset all device overrides of that setting.
Sequencer Playlists: Initiating playback of an item while the Sequencer tab is closed no longer causes an existing pending take to get replaced (and configured Take Recorder sources to be lost).
Virtual Scouting: Users will no longer be unable to deselect actors if both hands are holding an interact tool. Second tool now falls back to navigation tool if context menu is activated.
UdpMessaging: Fixed a potential crash if the multicast socket wasn't created successfully.
Virtual Scouting: Fixed an issue where the VR transform gizmo was not centered on grouped objects.
Virtual Scouting: corrected naming on listed cameras in main menu UI and appearance of camera mark icons
Upgrade Notes
Editor
API Change:
Added ECVF_Scalability flag to p.RigidBodyNode and p.ClothPhysics CVars so that the scalability system is aware of them.
USplineMeshComponent::GetAxisValue() was renamed to USplineMeshComponent::GetAxisValueRef() to better reflect that a reference to the value is returned instead of a copy of the value. USplineMeshComponent::GetAxisValue() has been deprecated, and it will be removed in a future version. Please update any code to use USplineMeshComponent::GetAxisValueRef() instead.
Landscape
API Change:
Changed the landscape.OutputDiffBitmap and turns it into landscape.DumpHeightmapDiff and landscape.DumpWeightmapDiff (0 = no dump, 1 = mip 0 diff, 2 = all mips diff). Both of these output to the Saved/LandscapeLayers folder, with a sub-folder named after the current frame's date/time, under a sub-folder named after the landscape actor being updated.
Foundation
Core
API Change:
Object handle API changed from using delegates to TFunction for performance. This upgrade replaces
FObjectHandleReadDelegate::CreateStatic
by passing in the function directly.added the following macros to REQUIRE_ENSURE CHECK_ENSURE REQUIRE_CHECK for use in unit tests.
ObjectPathId was moved to private to hide implementation details.
FPackageName::ObjectPathToObjectName will now always return the leaf-most object name within the path (e.g., "/Game/MyAsset.MyAsset:SubObject.AnotherObject" -> "AnotherObject"). Any code that relied on the old behavior should use FPackageName::ObjectPathToSubObjectPath instead.
A
FSavePackageContext::ExternalImportValidationFunc
function needs to be added to theFSavePackageContext
instead of specifying a validator.Use of the UE_LOG macro requires format strings that are constant at compile time. This requirement was only partially enforced in past releases, and code that compiled before may now produce errors.
Upgrade Notes:
Added support for structured and localized logging via UE_LOGFMT, UE_LOGFMT_LOC, and UE_LOGFMT_NS_LOC. The new FOutputDevice:SerializeRecord receives structured log records. Update any implementations of FOutputDevice that would benefit from structured logging.
Insights
API Change:
Added GetName() to ITimingViewSession public interface. The Timing View widgets from TimingInsights, MemoryInsights and AssetLoadingInsights will have this name initialized with the corresponding FInsightsManagerTabs::*ProfilerTabId.
Framework
AI Behavior Trees
API Change:
Fixed an issue where BlackboardComponent::IsValidKey was returning false negatives when called from a child Blackboard.
Made the OnTreeFinished function virtual.
AI EQS
API Change:
Added the following functions to FEnvQueryResult:
GetItemRawMemory: Returns the item's raw (byte) memory pointer.
GetItemAsTypeChecked: Converts query results to the type used by the query's generator to extract type-specific data from an item.
Audio
Upgrade Notes:
Soundscape Palettes without playback conditions will now automatically activate upon load and deactivate upon unload.
Blueprint Compiler
API Change:
For Blueprint content, we already redirect the functions to the double variants. However, C++ code that calls any of these deprecated functions will result in a warning that indicates the replacement function to use.
Blueprint Editor
API Change:
Added FReplaceInstancesOfClassParameters::bReplaceReferencesToOldCDOs and deprecated FBatchReplaceInstancesOfClassParameters. The FReplaceInstancesOfClassParameters::bClassObjectReplaced flag is legacy and not currently in use outside of the old hot reload path; it remains in place for backwards-compatibility, but an ensure() has now been added to guard against it being used incorrectly outside of that context.
Gameplay
API Change:
You can call GetInputDeviceHardwareIdentifier and GetMostRecentlyUsedHardwareDevice on the UInputDeviceSubsystem to get the most recently used hardware device for a given user.
Mass
API Change:
Removed FMassProcessingPhase.IsDuringMassProcessing and FMassProcessingPhaseManager.IsDuringMassProcessing in favor of FMassEntityManager.IsProcessing.
Use FMassRuntimePipeline::GetProcessors and FMassRuntimePipeline::GetMutableProcessors to access FMassRuntimePipeline::Processors
Modified Mass Dependency Solver to remove some of the fine-tuning tests when MASS_DO_PARALLEL == 0. No parallel execution of processors will take place.
Networking
API Change:
Overriding an Actor's NetCullDistanceSquared property:
Previously the NetObjectGridFilter would detect changes to an Actor's NetCullDistanceSquared property and act on that.
It is now also possible to override this property using new methods in the FReplicationSystemUtil API, these methods are:
SetCullDistanceSqrOverride
ClearCullDistanceSqrOverride
If you are using Iris and have a NetObjectPrioritizerDefinition for a prioritizer named PlayerState, make sure to add the following to your project's DefaultEngine.ini file:
[/Script/IrisCore.ObjectReplicationBridgeConfig] +PrioritizerConfigs=(ClassName=/Script/Engine.PlayerState, PrioritizerName=PlayerState)
Previously the NetObjectGridFilter would detect changes to the Actor's NetCullDistanceSquared property and act on that. Now you can override the value of that property via FReplicationSystemUtil::SetCullDistanceSqrOverride/ClearCullDistanceSqrOverride. This will affect the calculations in NetObjectGridFilter.
Level Design and Art Tools
Geometry Core
API Change:
The updated UDynamicMeshComponent::SetDynamicMesh function prevents sharing a UDynamicMesh between multiple UDynamicMeshComponents via the SetDynamicMesh function.
Geometry Script
API Change:
A UPROPERTY macro was added on to the FGeometryScriptFillHolesOptions::bDeleteIsolatedTriangles member.
UV Editor
API Change:
Dynamic Mesh Overlay now supports merging elements, providing a method to merge one element to another, if they share the same parent, collapsing any references from the first element into references to the second.
Dynamic Mesh UV Editor now supports removing seams from edges, providing a method to remove (via the new Dynamic Mesh Overlay functionality) seams from an edge collection by iteratively merging elements together.
Refactored selection in UV Editor.
Localization
API Change:
Split the FText comparison API out of FText so that it can be used for FString.
FTextComparison now exists to provide static access to the collated comparison functions of FText, without needing to actually create an FText to do the comparison.
Implemented async loading of localization data.
BeginInitGameTextLocalization and EndInitGameTextLocalization have been removed as part of this change.
Now use InitGameTextLocalization (which is async) followed by FTextLocalizationManager::WaitForAsyncTasks.
Online
API Change:
The OnNetworkConnectionStatusChanged event was added to EOSSDKManager. Bindings for it have been added to the Switch, GDK, and Sony platform implementations.
Upgrade Notes:
Added the ability to set SocketSubsystemEOS Relay mode via config. Users can now configure which EOS P2P Socket relay mode they want to use by adding the following to a .ini configuration file: [SocketSubsystemEOS] RelayControl=NoRelays / AllowRelays / ForceRelays
Added forwarding capability for EOSSDK Network and application status events.
HTTP
Upgrade Notes:
Changed the default HTTP Manager type in GDK to WinHttp. XCurl can still be used by adding the -UseCurlGDK command line parameter.
Online Subsystem
API Change:
Previous implementation based in NSURLConnection can be still selected passing the command line flag UseNSUrlConnection.
Fixed redirection parsing to properly handle errors.
Removed deprecated permissions.
Config settings:
[OnlineSubsystemFacebook] Updated APIVer to 15.0.
[OnlineSubsystemFacebook.OnlineIdentityFacebook] Changed default value for bUsePopup to true since otherwise was very easy to break the login flow.
Only receipts for non-completed transactions are kept and duplicates are discarded.
Once a purchase is consumed the receipt will be removed so if you need some data from the receipt you should cache it before consuming the purchase Added support for "Pending Purchases".
Their receipts won't contain validation information until they get completed (it is not possible to validate them nor consume them before completed).
Made threaded calls consistent and kept only receipts for transactions still in progress. Discarded all previously kept duplicates stored after requesting transactions
GetLinkedAccountAuthToken changed from returning APP to SESSION tokens in 5.1. This change has been reverted and it returns APP tokens again. SESSION tokens can be asked for explicitly by passing "Session" in the TokenType parameter.
This is the stub in the public interface only. Actual implementation would be per platform.
Deprecated the OnSessionParticipantsChanged and OnSessionParticipantRemoved events and added new events OnSessionParticipantJoined and OnSessionParticipantLeft. It is advised to reference the new events to avoid breaking changes in future releases.
Upgrade Notes:
Removed Product Name from EOS BucketId and added logic to enforce the 60 character limit. The default BucketId for EOS Sessions will change in a future update, which will cause incompatibilities when performing EOS session searches with builds using previous versions.
Renamed EncryptionKey config key to ClientEncryptionKey due to an issue with reserved keywords. Existing configs using EncryptionKey will continue to load correctly in unpackages builds but users should migrate to fix packaged builds. It is not recommended to remove EncryptionKey from IniKeyDenyList or you will leak keys from other config sections in packaged builds.
WriteAchievements now supports calling UnlockAchievements to directly unlock achievements by name, matching the behavior of other OSS implementations. The old behavior is still present, but will be removed in 5.3. You can select the new behavior with the following config entry in Engine.ini hierarchy: [OnlineSubsystemEOS] bUseUnlockAchievements=true
Moved IpNetDriver dependency from OnlineSubsystemGDK into its own plugin. To reduce executable size on GDK platforms, use GDKNetDriver instead.
Pixel Streaming
API Change:
With the upgrade to AVCodecs, PixelStreaming Player functionality has regressed, and playback isn't functional. This will be resolved in UE 5.3.
Exposed Pixel Streaming JSON parsing API.
A temporary d3d device is created before calling AMD AGS as it will not check the DriverStore without an initialized device when agsDriverExtensionsDX11_CreateDevice is called. The temporary device is then destroyed. According to AMD this requirement is currently by design.
For users wishing to have custom handlers for responding to Pixel Streaming "command" messages, this is now possible through the IPixelStreamingInputHandler::SetCommandHandler method.
ConfigOptions consist of a pair of strings, they can be set using IPixelStreamingStreamer::SetConfigOption. Upon having a client connect, all ConfigOptions are converted to JSON and passed to the client in the "ConfigOptions" field of the "InitialSettings" message. Setting a ConfigOption to an empty string will clear it and cause it to not be sent. At present this is used to pass the "DefaultToHover" message as "true" if streaming from the Editor.
Main fix is to the VideoInputBackBufferComposited where we now have a target input rectangle instead of a point. This allows for a minimum point that's not (0,0).
Upgrade Notes:
Improved E2E latency on VCam + PixelStreaming. Added FPixelCaptureRHINoCopy when the provided texture is copy-safe.
Platform
XR
Upgrade Notes:
Implemented additional VRNotificationsComponent callbacks in the OpenXR plugin. Applications can now be notified when the interaction profile changes which will signal when the controllers become available, when the user has switched to different controllers, or when they've been disconnected.
Platform Mobile
Upgrade Notes:
Fixed a crash when using the VK_EXT_fragment_density_map Vulkan extension.
Rendering
API Change:
SSAO support has also been added, but currently causes artifacts and is disabled by default. Fixes are planned for future releases.
Fixed a bug where GetCachedLODBias could be stale. The cached variable is now computed as needed so it's always correct. Remove calls to UpdateCachedLODBias as it is deprecated and now does nothing. Remove direct use of the CachedCombinedLODBias variable and call GetCachedLODBias instead.
Upgrade Notes:
Added ray and path tracing support for SplineMesh components. The new console variable r.RayTracing.Geometry.SplineMeshes can be used to quickly enable or disable support.
Added the r.DumpGPU.FrameCount console variable to specify a number of frames to dump when using the DumpGPU command.
Added the r.Translucency.AutoBeforeDOF console variable to automatically render PostDOF translucency before DOF when their component location is behind DOF's focus distance.
Added the r.DumpGPU.Delay console variable to allow for specifying a wait time between the DumpGPU command and the frame dump.
Architecture
API Change:
Removed the need to call BuildInstanceMaskAndFlags and BuildRayTracingInstanceMaskAndFlags functions manually in GetXXRayTracingInstance. They will be called in the renderer module. All functions manually called have been removed. Removed the RENDER_API public API for those functions in RayTracingInstance.h.
Lighting
Upgrade Notes:
Enabled virtual shadow map one pass projection by default. This can be a significant performance improvement for scenes with many shadowed local lights. Subsurface materials may need some tweaks to opacity or similar with these changes.
Materials and Shaders
API Change:
FMaterialShaderMap::GetShaderSource now accepts a permutation ID parameter; this can be 0 if the requested shader/vertex factory has no permutations.
This change necessitated removing the exposed AddShaderEntry and AddPlatformDebugData functions from the FShaderMapResourceCode class; with the change all of the shader code, debug data, and any warnings encountered for the shader are automatically appended to the shader map data via the AddShaderCompilerOutput function.
Upgrade Notes:
Reworked distortion to use material F0=>IOR by default. Use the root note refraction pin input to override IOR for art direction. Refraction is now disabled using the None mode. This data is converted automatically.
Path Tracer
Upgrade Notes:
A new set of controls has been added to the post-process volume to allow selective inclusion of direct vs. indirect lighting on diffuse, specular, and volume paths. This provides greater control over how the image is decomposed and enables rendering of specular only or volume only passes for greater control in external compositing applications. The Diffuse and Specular ShowFlags as well as the DirectLighting and GlobalIllumination ShowFlags are also now mapped to the same mechanism.
The old "Enable Emissive" checkbox has been removed as the new "Indirect Emissive" checkbox has the same behavior.
Decoupled IOR from specularity for solid and thin glass models.In the solid case, IOR now only affects ray bending, while SpecularColor controls the fresnel effect. Refraction must be enabled in the material to get a refractive event. Disabling refraction means the surface is simply transparent. When refraction is enabled but nothing is connected to the Refraction port in the material, the IOR is inferred from the material's specularity. In the thin case, IORnow affects the transmitted roughness, so that rough refraction is progressively disabled as Ior is reduced toward 1.0 as would happen in a real slab. When not using refraction, ThinTranslucent materials are rendered using transparency, while with refraction they are rendered with an actual bounce (to allow for roughness, and for consistency with the solid case). SpecularColor controls the fresnel effect.
Rendering performance with decals has been improved by only evaluating them when the path roughness is sufficiently low (for camera rays and sharp reflections/refractions). This behavior can be fine tuned with the following console variables:r.PathTracing.DecalRoughnessCutoff and r.PathTracing.MeshDecalRoughnessCutoff
Postprocessing
API Change:
Moved GPixelRenderCounters to RenderCounters.h.
Upgrade Notes:
Updated Epic TSR scalability settings with higher resolution history to better maintain image sharpness and stability under motion by default.
Moved optional TSR statistics from
stat unit
tostat tsr
.Fixed a bug in TSR cinematic scalability settings where the output image could diverge from the desired result.
Strata
Upgrade Notes:
[Substrate] Removed legacy metalness workflow without data conversion. This will invalidate a few Substrate materials.
Simulation
Physics
Upgrade Notes:
Added a Physics Control Actor and additional functions to manage Physics Control Components. This includes adding support for named sets of controls and body modifiers. Renamed functions in Physics Control Component for clarity. These renames should be mostly handled by a redirect. However, blueprints/code using the control multiplier functions may need to be fixed manually due to the nature of the renames.
Tools
UnrealBuildTool
Upgrade Notes:
Visual Studio 2022 is now the default generated solution and compiler if all available platforms are supported.This may require updating to the latest Microsoft Visual C++ Redistributable.
UI
Slate
Upgrade Notes:
Added ApplyDisabledEffectOnWidgets console variable to control widgets' disabled visual. If enabled, the alpha of the widget will be set to 0.75 when disabled. The console variable is set to 1 by default and can be initialized in the DefaultEngine.ini project file.
Virtual Production
IO
Upgrade Notes:
Disabled python function calls when using Remote Control by default. Accessing Remote Control Settings remotely is also disabled. This behavior can be changed in the Remote Control Project Settings under "Allow remote python execution."
Tools
Upgrade Notes:
Added logic to Virtual Scouting to prevent the zoom lens from being selected in VR Viewfinder. Only the prime lens will be selectable.
Added validation to check if lens options are changed during editor sessions by editing Project Preference > Cinematic Camera.