Unreal Engine 5.0 リリース ノート

Unreal Engine 5.0 の新機能および更新機能の概要

新機能

Unreal Engine 5.0 を使用すると、あらゆる業界のゲーム デベロッパーやクリエイターが、次世代のリアルタイムの 3D コンテンツや体験を、これまで以上に自由に、高い忠実度で、柔軟に制作することができます。

Epic では、次の機能を提供することで、チームの規模を問わず、視覚的にもインタラクティブ性の面でも可能性の限界に挑戦していただくことを目指しています。

  • 革新的な忠実度を活用:ビジュアル忠実度を飛躍的に向上し、完全に動的なワールドを可能にする Nanite や Lumen などの画期的な新機能により、圧倒的な没入感とリアルなインタラクティブ エクスペリエンスが実現します。

  • より広大なワールドをビルド:あなたの壮大な構想を実現しましょう。Unreal Engine 5.0 には、スケーラブルなコンテンツを使用することで、プレーヤーが探索可能な真に広大な世界を作り上げるためのツールとアセットが用意されています。

  • コンテキスト内でのアニメートとモデリング:アーティスト フレンドリーなアニメーション作成、リターゲティング、ランタイム ツールと、大幅に拡張されたモデリング ツールセットにより、イテレーションを削減して往復作業を取り除き、クリエイティブな作業をスピードアップできます。

  • 使いやすさがさらに向上:最新のデザインに沿った柔軟性の高い UI により、ユーザー エクスペリエンスだけでなく効率も向上します。優れた起点として使用可能な業界別テンプレートの更新や、以前のバージョンからスムーズに移行するための移行ガイドなど、Unreal Engine 5.0 は今まで以上に使いやすく、学びやすくなっています。

今回のリリースに含まれる改善点は、GitHub の Unreal Engine のデベロッパーのコミュニティから寄せられたものです。Unreal Engine 5.0 に貢献いただいた以下の皆様に謝意を表します (以下、敬称略)。

AlexThiv, alwintom, aidinabedi, aknarts, anon-oss, , congyue1977, Deathrey, Dyanikoglu, dorgonman, error454, erebel55, foobit, fieldsJacksonG (Microsoft), ggsharkmob, hach-que, iniside, ImaginaryBlend, IgnacioFDM, (Intel), jorgenpt, kasp1, Kirchesch, liuhao0620, matthewjnv (Nvidia), Mastercoms, Muchcharles, , projectgheist, , , RandomInEqualities, , Stanley1108, scorpio20t, , tuxerr, (Oculus), TheoHay, velvet22,

レンダリング

Lumen のグローバル イルミネーションおよび反射

Lumen は完全に動的なグローバル イルミネーションおよび反射のためのソリューションで、シーンとライティングの変更に迅速に反応します。アーティストやデザイナーは今まで以上に動的でリアルなシーンを作成できるようになります。太陽の角度の変更や、懐中電灯の点灯、屋外のドアの開閉、さらには壁の破壊では、間接光と反射に対して変更が生じます。

このシステムでは、無限のバウンスと間接スペキュラ反射を利用したディフューズ相互反射をレンダリングし、きわめて大規模かつ複雑な環境でも非常にきめ細かなディテールを表現できます。

Lumen のグローバル イルミネーションおよび反射:有効

Lumen のグローバル イルミネーションおよび反射:無効

アーティストやデザイナーは、Lumen を使用することで、事前に計算されたライティングがテクスチャにベイクされたスタティック シーンに縛られることがなくなります。つまり、アーティストが何度もライティングをビルドしたり、個々のスタティック メッシュにライトマップ UV を設定したりする必要なく、ライトを移動させるだけで結果をエディタで確認できるため、大幅な時間短縮につながります。

Lumen によって効率的なソフトウェア レイトレーシングが可能になり、ハイエンド ビジュアルのハードウェア レイトレーシングをサポートしながら、グローバル イルミネーションと反射をさまざまなビデオ カードで実行できるようになります。

Unreal Engine 5 早期アクセス版のリリース以降、Lumen については次の改善が行われました。

  • Lumen GI と反射向けの完全なハードウェア レイトレーシング パイプライン

  • 次世代コンソール向け「The Matrix Awakens」のシッピング

  • Far Field ハードウェア レイトレーシングによる幅広い視野をサポート

  • フィードバック主導型のサーフェス キャッシュによる反射の品質改善

  • コンテンツのトラブルシューティングに利用できる Lumen ビジュアライゼーション表示モード

  • ファイナル ギャザーの品質改善 (特にフォリッジで顕著に向上)

  • 特に光沢の反射と移動オブジェクトの背後における反射ノイズ除去の改善

  • 透過処理ファイナル ギャザーによる、透過処理とボリュメトリック フォグにおけるグローバル イルミネーションの品質改善

  • ランドスケープのサポート

  • ラジオシティ ファイル ギャザーによるマルチバウンスのグローバル イルミネーションと反射における GI の品質改善

  • 品質とパフォーマンスのトレードオフのために、ユーザー インターフェースに公開された Lumen 設定

  • サブサーフェス / 両面フォリッジのシェーディング モデルのサポート

詳細については「仮想シャドウ マップ」ドキュメントを参照してください。

Nanite 仮想化ジオメトリ

Nanite の仮想化マイクロポリゴン ジオメトリ システムにより、デベロッパーは膨大なジオメトリック ディテールを含むゲームを作成できるようになります。ZBrush のスカルプトからフォトグラメトリ スキャンまで、映画品質の数百万ポリゴンのソース アートを直接インポートし、インポートしたアセットを数百万個配置しても、見た目の忠実度を損なわずにリアルタイムのフレームレートを維持します。

Nanite では、知覚可能なディテールのみをインテリジェントに処理してストリーミングし、ポリゴンの数やドローコール数の制限を大幅に取り除きます。ディテールの法線マップへのベイクや LOD の手動作成といった時間のかかる作業が削減されることで、クリエイティブな作業に集中できるようになります。

image_3.png

Unreal Engine 5 早期アクセス版のリリース以降、Nanite については次の改善が行われました。

  • ディスク上の Nanite メッシュのサイズを削減するための各最適化コントロール。

    • これにより、最も関連性の少ないデータを最初に取り除いて非可逆圧縮に近づけることで、開発時にメッシュを最適化できます。たとえば、「Lumen in the Land of Nanite」テクニカル デモでは、彫像の一つの胸の部分のポリゴン (およびそのディスク サイズ) を 88% 削減しながらも、目立った違いなしに忠実に表現できました。

  • 圧縮の改善により、品質を落とさずに Nanite メッシュのディスク使用量を最大 20% 削減。

  • UE4 から UE5 に移行するプロジェクトについては Nanite Auditing ツール を使用することで、Nanite を使用できるように膨大な数の既存コンテンツを移行したり、サポートされない機能が有効化されるなど、開発時における Nanite コンテンツの破損を診断したりする作業が容易になります。

    image_4.png

    • このツールによるスタティック メッシュの監査では、次の 2 つのカテゴリが使用されます。

      • [Errors (エラー)] には、アルファ テスト、ワールド位置オフセット、ピクセル深度などとマテリアルとの非互換性など、Nanite が有効なメッシュにおける問題が表示されます。

      • [Optimize (最適化)] には、Nanite が有効でないメッシュで Nanite を有効にできるケースが表示されます。ただし、非互換性が検出されないことを想定しています。

    • このツールは、メイン メニューの [Tools (ツール)] > [Nanite Tools] からアクセス可能

  • Nanite メッシュでは、ワイヤーフレームやシェーダー複雑度の最適化などの一般的な表示モードがサポートされるようになりました。

    • Shader Complexity (シェーダー複雑度) 表示モードでは、レンダリングされたすべてのオブジェクトに対して、ピクセルごとのシェーダー命令数のヒートマップが表示されます。Nanite の既存の Material Complexity (マテリアル複雑度) 表示モードでは、8x8 タイルごとのみに、Nanite ジオメトリにある固有のマテリアルの数のヒートマップが表示されます。これは、Nanite パスでマテリアルの一貫性を判断するためのメトリックとして有用です。

  • UV シームのアーティファクトなしでライトマップをサポートするよう、Nanite メッシュが向上。

  • Nanite では Windows で DX12 が必須になりました。DX11 はサポートされなくなりました。

詳細については「Nanite 仮想化ジオメトリ」ドキュメントを参照してください。

仮想シャドウ マップ (ベータ)

仮想シャドウ マップでは、Nanite およびワールド パーティションに関する Unreal Engine 5 の機能を活用することで、次世代のリアルタイム動的シャドウイングを実現します。これらは、映画品質のアセットや大規模なオープン ワールドに必要な高品質のシャドウを一貫して提供します。

従来の動的シャドウイング技法は中小規模のワールドのみに限定されることが多かったため、デザイナーやアーティストはパフォーマンスのために品質を犠牲にすることを余儀なくされることがありました。それとは対照的に、仮想シャドウ マップでは、必要な品質を自動的に適用する、統合された単一のシャドウイング方法が提供されます。つまり、これま以上に長い距離で、小さなオブジェクトと大きなオブジェクトの両方に対して、現実味のあるソフトな半影と強調されたコンタクト ハードニング シャドウにより、シャドウイングの品質を均一に保てるようになります。

PCF:均一にぼやかして|重要な詳細を排除

SMRT:コンタクト ハードニングによるリアルな|ソフトシャドウを生成

Unreal Engine 5 早期アクセス版のリリース以降、仮想シャドウ マップ システムについては次の改善が行われました。

  • レベル エディタに装備された新ビジュアライゼーション モード

    image_7.png

  • 遠距離場レンダリングに向けた仮想シャドウ マップと距離フィールド シャドウとの統合による、フォリッジを含むシーンの改善

  • より多くのジオメトリ タイプに向けたサポートの追加

  • (シンプルな) サブサーフェスとフォリッジ マテリアルのサポートを追加

    • サブサーフェイス プロファイルとトランスミッションはまだサポートされていません

  • 堅牢性、パフォーマンス、キャッシング品質における改善点

  • ラージ ワールド座標 (LWC) に対するサポート

  • (実験的機能) 個別のスタティック キャッシング (Separate Static Caching) に対するサポート

  • 仮想シャドウ マップでは Windows で DX12 が必須になりました。DX11 はサポートされなくなりました。

詳細については「仮想シャドウ マップ」ドキュメントを参照してください。

テンポラル スーパー解像度

Nanite マイクロポリゴン ジオメトリと次世代ゲームの忠実度に対するニーズにより、画面に表示される可能性のあるディテールの量がかつてないほど増加しています。このようなニーズを満たすために、Unreal Engine 4 のテンポラル アンチエイリアシング (TAA) を置き換えるものとして、ハイエンド プラットフォーム向けにテンポラル スーパー解像度のアルゴリズムを 0 から開発しました。

テンポラル スーパー解像度は幅広いハードウェアをサポートしており、Unreal Engine でのネイティブな高品質アップサンプリングを実現します。テンポラル スーパー解像度はデフォルトのアンチエイリアス方法であり、すべてのプロジェクトで有効になります。

テンポラル スーパー解像度には次のような特性が含まれます。

  • 1080p という低い入力解像度でネイティブ 4k レンダリングの品質に近い出力を行うことで、フレームレートとレンダリング忠実度の両方を改善することができます。

  • 高周波の背景に対するゴーストが、UE4 のテンポラル アンチエイリアシングで表示されていたよりも少なくなります。

  • 複雑度の高いジオメトリでのちらつきが減少しました。

  • 各コンソールでの動的解像度スケーリングがサポートされます。

  • D3D11、D3D12、Vulkan、Metal、PlayStation 5、Xbox Series S|X をサポートするあらゆるハードウェアで実行できます。

  • DirectX 12 シェーダー モデル 6 をサポートします。

  • シェーダーは、特に PlayStation 5 と Xbox Series S|X の GPU アーキテクチャに向けて最適化されています。

次の比較画像は、ネイティブ 4K でレンダリングされたフレームと、アップスケールされた 1080p の解像度を使って 4K でレンダリングされたフレームをキャプチャして、品質とパフォーナンスの違いを示したものです。テンポラル スーパー解像度を使用することで、GPU フレーム時間をおよそ 50% 削減しながら、ネイティブ 4K 解像度に近い品質の映像を得ることができます。

4K フレームをNative 4K 解像度|FT:57.50 msでレンダリング

4Kフレームを1080p解像度(r.ScreenPercentage=50)|FT:33.37 msでレンダリング

この比較画像では 4K 画像がページ幅に制限されています。圧縮されていないフル解像度で表示するには、いずれかの画像を右クリックして [新しいタブで画像を開く] または [名前を付けて画像を保存] をクリックします。

パス トレーサーの改善点 (ベータ)

パス トレーサーについては、その物理的な精度と妥協のない結果において、Unreal Engine 5.0 でも引き続き改善が行われています。パス トレーサーは、グラウンド トゥルースの比較やスタンドアローンのフレーム レンダリングに使用できるだけでなく、シーケンサーのムービー レンダリング キューとともに使用して、高品質のシネマティック向けにフレームをレンダリングできます。

今回のリリースには次の改善点が含まれています。

  • マテリアル サポート:

    • Eye (眼)

    • Hair (ヘア - 実験的機能)

    • Alpha Channel (アルファ チャンネル)

  • ネイティブにレイトレーシングされた被写界深度 (DOF)

  • ソリッド ガラスで色吸収がサポートされるようになったことで (ベールの法則を使用)、屈折したガラスで現実味を帯びた色付けが可能になりました。

    image_10.png image_11.png image_12.png image_13.png

  • PathTracingQualitySwitch 表現式により、アーティストは、リアルタイムのラスタ パスの外観とパフォーマンスについて妥協することなく、パス トレーサー向けにマテリアルの動作を開発できるようになりました

  • サンプリングとパフォーマンスの改善点

追加の詳細については、「パス トレーサー」ドキュメントを参照してください。

ローカル露出ポストプロセス

「ローカル露出」とは、アーティストが制御可能なパラメータの範囲内で、ローカルな調整を露出に自動的に適用する新たな技法です。これにより、既存のグローバル露出システムに加えて、ハイライトとシャドウの両方のディテールが維持されます。

これは、特に動的ライティングを使ったハイダイナミックな範囲のシーンを含むプロジェクトで有用です。このようなプロジェクトでは、単一のグローバル露出調整は、ハイライトの白飛びと完全に暗いシャドウを回避するのに十分ではありません。

例えば、一日の時間を動的に反映するシステムを含むゲームでは、ドアや窓を通じて非常に明るい屋外が見える屋内のシーンなど、最終的な映像における露出が少なすぎる、または多すぎる領域にプレイヤーが遭遇することがよくありますが、ゲームプレイの点では問題が生じる場合があります。ローカル露出を使用することで、シーンごとのライティング作成が不可能な場合に、最終的な映像をより一貫したものにすることができます。

ローカル露出:有効

ローカル露出:無効

ローカル露出の各プロパティには、[Post Process Volume (ポストプロセス ボリューム)] 設定の [Lens (レンズ)] > [Local Exposure (ローカル露出)] カテゴリからアクセスできます。

image_16.png

ローカル露出によってシーンに適用される効果を確認するには、レベル ビューポートの [Show (表示)] > [Visualization (ビジュアライゼーション)] メニューにあるビジュアライゼーション オプションを使用します。

image_17.png

ローカル露出の詳細については、「自動露出」を参照してください。

ポスト モーション ブラーの透過処理

ワールド内の UI 要素などの特定のエフェクトは、現在の透過処理パスでレンダリングされる際に、モーション ブラーやテンポラル アンチエイリアシングなどのポストプロセス エフェクトが原因で、品質の劣化やアーティファクトによるネガティブな影響を受けます。

Unreal Engine 5.0 に新しく導入されたポスト モーション ブラーの透過処理により、アーティストはモーション ブラーやテンポラル アンチエイリアシングの影響を受けない透過マテリアルを作成できます。

透過マテリアルは、そのマテリアルの [Details (詳細)] パネルにあるプロパティでポスト モーション ブラー パスに割り当てることができます。[Translucency (透過処理)] > [Advanced (詳細設定)] セクションで、[Translucency Pass (透過処理パス)] ドロップダウン メニューから [After Motion Blur (モーション ブラーの後)] を選択します。

モーションブラーのあるパーティクルシステム

モーションブラーの透過処理をしたパーティクルシステム

現在、深度テストはこのパスではサポートされていません。これは、[After Motion Blur] でレンダリングされたオブジェクトは、カメラに近接している場合であっても、シーン内の他のオブジェクトでオクルードできないことを意味します。

マテリアル エディタの折りたたみ可能なノード

[Collapse Nodes (ノードを折りたたむ)] はマテリアル エディタに装備された新しい機能で、マテリアル グラフ内で選択した一連のマテリアル表現式または関数を単一のノードに折りたたむことができます。これにより複雑なマテリアル ネットワークの表示が簡略化されて、読みやすさと使いやすさが向上します。折りたたんだノードはいつでも元の状態に戻すことができます。折りたたんだノードを右クリックして、コンテキスト メニューの [Expand Node (ノードを展開)] を選択します。

image_20.gif

DirectX 12

Unreal Engine 5 の機能を使用するにあたり、Microsoft の DirectX 12 (DX12) が Windows PC で推奨される RHI となりました。エンジン内での DX12 サポートの向上に伴い、メモリ管理、機能の完全性、そして安定性が最重要事項となっています。Unreal Engine 5 で新たに作成するプロジェクトについては、デフォルトで DX12 が使用されます。

Vulkan

Vulkan RHI については Unreal Engine 5 で安定性と機能に関する数多くの更新が行われて、デスクトップとモバイルの両方での使用性が向上しました。これには、Linux での Nanite や Lumen (ソフトウェア レイトレーシングの使用時のみ) などの Unreal Engine 5 機能に対するサポートが含まれます。

要件については、「ハードウェアおよびソフトウェアの仕様」ドキュメントを参照してください。

広大なオープン環境向けのワールド パーティション

World Partition (ワールド パーティション) は、エディタとランタイム時の両方で使用される自動データ管理およびストリーミングのためのシステムです。これにより、ストリーミングを管理してデータ競合を減らすために、ワールドを無数のサブレベルに手動で分割する必要性が完全に省かれます。

ワールド パーティションを使用すると、ワールドは単一のパーシスタント レベルとして存在するようになります。エディタでは、2D グリッドを使用してワールドが分割されます。データは対象領域に基づいて、ワールド パーティション エディタのウィンドウを介して部分的にロードされます。これにより、従来はメモリに収まらなかった、またはロードに非常に時間がかかっていた広大なワールドを処理できるようになりました。クック時または PIE の起動時に、ワールドはランタイム ストリーミング用に最適化されたグリッド セルに分割され、それぞれが個々のストリーミング レベルとなります。

image_21.jpg

ワールド パーティションには、Unreal Engine 5.0 早期アクセス版のリリース後にも次のような改善が加えられています。

  • New Open World および Open World Empty デフォルト マップ タイプ

  • ストリーミング ソースでカスタム形状をサポートするようになりました

  • ランドスケープ ブラシのサポート

  • バッチ処理を自動化して、ワールド パーティション レベルでデータを生成または変更するための新しいビルダー コマンドレット

ワールド パーティションは、ゲーム向けにデザインされた多くの新規プロジェクト テンプレート、または Open World および Open World Empty マップ タイプを使用する際にデフォルトで有効になります。

ワールド パーティションの詳細については、ワールド パーティション に関するドキュメントを参照してください。

ワールド パーティションのデータ レイヤー

ワールド パーティション用のデータ レイヤーは、エディタ内またはランタイム時にレイヤーを有効/無効にすることで、ワールド データを条件付きでロードするように設計されたシステムです。データ レイヤーは、エディタ内でワールドを整理するための非常に優れた方法です。また、データ レイヤーを使ってゲーム内のさまざまなシナリオを処理し、同じワールドの異なるバリエーションを作成することもできます。昼間と夜間での設定の違いや、クエスト達成後のワールドの変化などに適しています。

データ レイヤーは、エディタの [Data Layers] タブまたはアクタの [Details] パネルから制御できます。

image_22.jpg

詳細については「World Partition - データ レイヤー」ドキュメントを参照してください。

One File Per Actor (アクタあたり 1 つのファイル)

新しい One File Per Actor (OFPA) システムがワールド パーティションで機能するようになり、大規模ワールドでの共同編集がより簡単になりました。レベル エディタは個々のすべてのアクタをモノリシックなレベルのファイルにグループ化するのではなく、個々のアクタを個別のファイルに保存します。このため、ユーザーはレベル全体ではなく、必要なアクタだけをソース コントロールからチェックアウトすることができるようになります。

この機能は、ワールド パーティションの使用時にデフォルトで有効なります。

詳細については「One File Per Actor」ドキュメントを参照してください。

グリッドベースの自動 HLOD

ワールド パーティションを使用する際は、グリッドベースの自動 HLOD (階層的詳細度) システムにより、ロードされた領域外に表示される膨大な数のスタティック メッシュ アクタを最適化するために、データ駆動型のカスタム HLOD レイヤーが作成されます。この機能により、未ロードのワールド パーティション グリッド セル上のインスタンス化スタティック メッシュ (ISM) または可視のプロキシ メッシュを使って最小限の一連の HLOD が提供され、ドローコール数が削減されてパフォーマンスが向上します。

image_23.jpg

これらのプロキシ メッシュは元のアクタ ジオメトリを使って生成され、メモリの使用量を削減するために簡素化されます。

詳細については「World Partition - データ レイヤー」ドキュメントを参照してください。

Large World Coordinates (LWC)

Large World Coordinates (LWC) の導入により、浮動小数値の精度を向上するために、広範囲に及ぶ変更をすべてのエンジン システムで実装する Unreal Engine 5 で、倍精度のデータ バリアント タイプがサポートされるようになりました。これらのエンジン システムには、建築ビジュアライゼーション、シミュレーション、レンダリング(Niagara と HLSL コード)、そして広大なワールド スケールのプロジェクトが含まれます。Large World Coordinates のパフォーマンスを確保し、UE5 のあらゆるシステムで使用できるようにすべく多大な労力を費やしてきましたが、リリース前に対応できなかった精度の問題により、一部のシステムでは、原点から離れた位置に対して、いまだいくつかの制限事項が存在します。

ライセンシーの方はコードをすぐにも新しいデータ タイプに移行できますが、ラージ ワールドの作成とデータ入力に対する完全なサポートが実装されるのは、当社でエンジン内のすべてのシステムで、大規模なスケールで同じように効果的に機能することを検証した後のバージョン 5.1 からとなる予定です。その後、ワールドの最大サイズのデフォルト変数を絶対的に広大なスケールに設定する予定です。

Unreal Engine 4 では、32 ビットの浮動小数精度タイプによってワールドのサイズが制限されていました。LWC では、主要なデータ タイプに 64 ビットの倍精度を提供することで、プロジェクトのサイズを大幅に向上します。これらの新しい変更により、ユーザーは広大な規模のワールドをビルドできるようになり、アクタの配置に関する正確性と方向の精度が大幅に改善されます。ラージ ワールド座標では倍精度タイプを使用するため、UE5 は PhysX物理システムには対応していません。

ラージ ワールドの試用については、「Large World Coordinates」ドキュメントを参照してください。

アニメーション

コントロールリグの改善点

コントロール リグが正式な機能としてリリースされ、デフォルトで有効になりました。これには、Unreal Engine 5.0 でキャラクターをリギングおよびアニメートする際に役立つ新たなツール、機能、モードが含まれています。

アニメーション モード

アニメーション モード が改善されて、よりアニメーション フレンドリなインターフェースになりました。

[Anim Outliner (アニメーション アウトライナ)][Anim Details (アニメーション詳細)] の両パネルには、フィルタリングされた一連のコントロールとプロパティが含まれており、選択内容やキーフレーム属性を容易に管理できます。

image_24.png

また、アニメーション ワークフローを支援する いくつかのツール も提供されます。これには、コントロールのポーズ データを保存して再利用するための ポーズ ツール や、キーフレームの動きをビューポート内で可視化できる モーション トレイル ツール などがあります。

image_25.png

アニメーション モードの詳細については、「アニメーション モード」ページを参照してください。

空間の切り替え

空間の切り替え 機能を使うことで、コントロールを迅速かつ容易に再ペアレント化できます。この機能を使用すると新しい空間がリアルタイムで作成されて、シーケンサー内でキーフレーム化されるか、コントロールリグ アセット内で事前ビルドされます。その結果、複雑なコンストレイント切り替えロジックを作成することなく、コントロールの空間の親を動的に変更できるようになります。

SpaceSwitch.gif

アニメート時における空間の切り替え方法については、「空間の切り替え」ページを参照してください。

グラフに関する改善点

ブループリントのワークフローに近づけるために、コントロールリグの作成時に向けたいくつかのグラフ動作を改善して追加しました。

コントロールリグ内で 関数 を作成できるようになりました。関数を使用すると、大規模なグラフを適切に整理でき、ロジックを繰り返すことができ、複数のコントロールリグで機能を簡単に共有できます。

image_27.png

配列 も作成して格納できるため、一連のアイテムの管理が容易になります。この新しい配列タイプはコレクション タイプを置き換えるもので、配列アイテムを追加、削除、使用するための一連の新たなノードも用意されています。

image_28.png

Python スクリプティング

Python スクリプティング がコントロールリグ内でも使用できるようになったため、コントロールリグ内でワークフローを自動化して、リギング プロセスのためのツールを作成できます。また、コントロールリグの Python ログ を使用してコマンドをリバースエンジニアリングし、スクリプトをコピーして他のプロジェクトと共有することもできます。

image_29.png

詳細については、「コントロール リグ Python スクリプティング」ページを参照してください。

IK リグと IK リターゲター

新しい IK リグ システムにより、IK ソルバ (新しいフルボディ IK を含む) をインタラクティブに作成して、そのターゲット目標を定義できるようになりました。作成される IK リグ アセットは、目標をランタイム時に制御可能なアニメーション ブループリントに埋め込むことができます。Unreal Engine 4 のリターゲティング マネージャーは非推奨となり、この新しいリターゲティングの方法に置き換えられます。

image_30.png

また、IK リグは、IK リターゲター を利用することで、異なるスケルタル メッシュ間における改善されたアニメーションのリターゲティングの作成にも使用できます。この新しいリターゲティング システムにより、ランタイム時に、またはオフライン エクスポートを使ってアニメーション ブループリントとシーケンスの複製を生成することで、あらゆる 2 つのスケルトン間でアニメーションを正確に転送できます。

Retarget.gif

IK リグと IK リグ リターゲティングの詳細については、「IK リグ」ページを参照してください。

ブレンド スペースの改善点

ブレンド スペースは Unreal Engine 5.0 で改善されて、さまざまな新しい機能と動作が加わりました。

スムージング

スムージング が徹底的に見直されて、異なるスムージング タイプと時間を容易に設定できるようになりました。補間については、Linear (リニア)Ease In/Out (イーズイン/アウト)Spring Damper (スプリング ダンパー) など、いくつかのタイプを選択できます。

各スムージング プロパティの詳細については、「ブレンド スペース アセットの詳細」セクションを参照してください。

Smoothing.gif

ブレンド スペース グラフ

ブレンド スペース グラフ を作成することで、ブレンド スペースをアニメーション ブループリント内で直接作成できるようになりました。これらのグラフを使用すると、アニメーション ブループリント用のカスタムメイドのブレンド スペースを作成したり、他のアセットから分化したり、サンプルのロジックを編集したりできます。

ブレンド スペース グラフの詳細については、「アニメーション ブループリントでのブレンド スペース」ページを参照してください。

image_33.png

ブレンド スペース分析

ブレンド スペース分析 により、ブレンド スペースのサンプル配置と管理を自動化できるようになりました。ロコモーションや照準など、一般的なほとんどのブレンド スペース設定に対応するいくつかの分析機能が加わりました。

ブレンド スペース分析の詳細については、「ブレンド スペース分析」ページを参照してください。

BSAnalysis.gif

巻き戻しデバッガ

Rewind Debugger (巻き戻しデバッガ) 機能の導入により、アニメーションのデバッグが改善されました。このツールでは、アクタのキャプチャされたゲームプレイ タイムラインとアニメーション イベントが提供されます。これらを一時停止したりステップインしたり、さらには特定の時点に巻き戻したりできます。また、デバッグのためにシーン内のアクタとオブジェクトを簡単に選択できます。巻き戻しデバッガを使用することで、ライブ再生時にゲームプレイ アニメーションがどのように機能するかをより詳しく把握できるようになります。

スケルトンの改善点

アニメーション ミラーリング

ミラー データ テーブルミラー ノード を使用することで、アニメーション ブループリントでキャラクター アニメーションを簡単にミラーリングできるようになりました。ミラー データ テーブルを使用することで、アニメーション シーケンスだけではなく、カーブ、同期マーカー、通知もミラーリングできます。

この機能の詳細については、「アニメーションのミラーリング」ページを参照してください。

Mirroring.gif

スケルトンの互換性

新しい Skeleton Compatibility プロパティにより、時間のかかるリターゲティングまたは再インポートのワークフローを開始することなく、異なるスケルトン間でデータを共有できるようになりました。この機能を利用することで、同じようなスケルトン間でアニメーション シーケンスやアニメーション ブループリント、ブレンド スペースなどのアニメーション データを簡単に共有することができます。互換性を持たせるには、ボーンの名前をそれらのスケルトン間で一致させる必要があります。

CompatibleSkeletons.gif

ロコモーションの改善点

Unreal Engine 5.0 には、アニメーションをさまざまなゲームプレイ シナリオに適応させるための機能がいくつか追加されました

距離マッチング

新しい 距離マッチング 機能をアニメーション ブループリント内で使用して、ゲームプレイ アニメーションのスピードと再生をプロシージャルに管理できます。距離マッチングでは、アニメーション カーブ データを使ってアニメーションの再生をキャラクターの動きに同期します。これを ストライド ワープ と組み合わせることで、フットスライディング (足滑り) に関連する一般的な問題を解決できます。

DistanceMatchingOff.gif

DistanceMatchingOn.gif

距離マッチングなし

距離マッチングを使用

ポーズ ワープ

ポーズ ワープ 機能を使用して、キャラクターのストライド (歩幅) 方向、歩行速度、足の配置をプロシージャルに変更できるようになりました。ポーズ ワープは新しい一連のアニメーション ブループリント ノードで、アニメーション ポーズのコンポーネントを動的にワープさせることができます。これらのノードを使用することで、キャラクターの複雑なアニメーションを開発するための手間を省くことができます。

これらの新しいノードとその機能の詳細については、「ポーズ ワープ」ページを参照してください。

OrientationOFF.gif

OrientationON.gif

オリエンテーション ワープなし

オリエンテーション ワープを使用

モーション ワープ

新しい モーション ワープ 機能を使用して、キャラクターのルート モーションを動的にワープさせることができます。モーション ワープを使用すると [Animation Notifies (アニメーション通知)] ウィンドウを使って「Warping (ワープ) ウィンドウ」を定義することができ、任意のターゲットにワープするよう、これらのウィンドウをブループリントで設定できます。

詳細については、「モーション ワープ」ページを参照してください。

MotionWarpingResult.gif

機械学習デフォーマ

新しい機械学習 (ML) デフォーマを使用して、リアルタイムのメッシュ変形を作成できるようになりました。ML デフォーマの目的は、オフラインで処理される映画品質の変形をリアルタイムで実現することにあります。このために、リニアなスキンが付いたスケルタル メッシュに補正変形を適用します。このような補正を適用することで、オフラインでシミュレートされた変形に外観を近づけます。補正の内容は機械学習アルゴリズムによって学習されます。

ML デフォーマをトレーニングするには、数千もしくは数万にも及ぶポーズ サンプルが必要になります。これらのサンプルは、複雑な変形を使って変形されたポーズと、リニア スキニングを使って変形されたポーズの両方です。デフォーマではこれらの違いを学習し、ランタイム時にそれらを適用します。当社では、トレーニング データ生成を支援するための Maya プラグインも作成しました (使用は必須ではありません)。

現時点で、これはまだ実験段階の機能です。メモリ要件が非常に高く、パフォーマンスはまだ最適化されていません。

ML デフォーマの使用方法に関する詳細については、「機械学習デフォーマを使用する」ページを参照してください。

pants.gif

オーディオ

MetaSound

MetaSound は、マテリアル エディタなどの完全にプログラム可能なマテリアルとレンダリング パイプラインに類似しており、オーディオ レンダリングのあらゆる側面を管理して、次世代のプロシージャル オーディオ体験を制御することができる新しいシステムです。

MetaSound は、ゲーム データやブループリントのオーディオ パラメータやオーディオ イベントを使用して、サンプル アキュレートなコントロールとサウンドのモジュレーションを実現します。また、MetaSound 内に別の MetaSound を作成したり、パラメータ インターフェースの定義や実装を行ったり、ユーザー ワークフローをストリームライン化するプリセット システムを使用したりすることもできます。

さらに、MetaSound では、サウンド キューに比べて大幅にパフォーマンスが向上しており、サードパーティのプラグインで使用できる完全に拡張可能な API を提供します。

image_43.png

Project Acoustics

image_44.png

Epic では、Microsoft の Project Acoustics チームとのコラボレーションを通じて、UE5 向け Project Acoustics プラグインの高度な統合を開発しています。Project Acoustics とは、オーディオの伝播やリバーブなど、高度な音響プロセスのシミュレーションを可能にする次世代のベイク済み音響システムです。パフォーマンスとスケーラビリティに重点を置いた Project Acoustics はすでに多くの AAA ゲーム作品中で利用されており、Unreal マーケットプレイスのすべてのライセンシー向けにも近日公開される予定です。

Project Acoustics の詳細については、Microsoft のドキュメント『(https://docs.microsoft.com/en-us/gaming/acoustics/what-is-acoustics)』を参照してください。

ジオメトリ ツール

ジオメトリ ツールは、あらゆる分野の Unreal アーティスト向けに、すべての解像度におけるメッシュの作成と編集のためのさまざまなツールを提供します。UE 5.0 には、モデリング、ベイク処理、UV 編集のための新しいツールや改善されたツールが備わっています。これらの改善点はアーキテクチャの進歩によって支えられており、将来に向けてのフレームワークを構築するものです。

image_45.png

モデリング ツール

トランスフォーム ツール
  • モデリング モードの トランスフォーム ツールのスナップおよびアライメント機能が拡張されて、複数のメッシュを使った作業のスピードを大幅に改善できるようになりました。

スナップ
  • PolyEdit スナップ - polyEdit ツールに追加のスナップおよびアライメント機能が加わりました。

  • ボリュームと動的メッシュ向けの頂点/エッジ スナップ - ボリュームと DynamicMeshComponent における頂点とエッジのスナップが可能になりました。

プリミティブ ツール
  • Add Primitive (プリミティブ追加) Tool Stair Generator で、浮き階段、湾曲した階段、スパイラル階段がサポートされるようになりました。

  • 動的メッシュ アクタ/コンポーネント - ボリュームに加え、新しい動的メッシュ アクタとコンポーネントのタイプがモデリング ツール内に追加されました。DynamicMeshActors は [Project Settings (プロジェクト設定)] で有効に設定できます。 これらの dynamicMeshActor はシリアル化や複製が可能で、エディタ間での切り取りと貼り付けにも対応しています。また、PIE モードおよびビルド済みのゲーム内でも機能します。現時点でこれがサポートするのは複雑なコリジョンのみですが、将来的には単純なコリジョンに対するサポートも追加される予定です。

PolyEdit ツール
  • PolyEdit ツールには、機能性と効率を高めるためのさまざまな改善がなされました。

    • エッジ ループを挿入 - エッジ ループの挿入機能で、ループを停止する、問題のありそうな (非クワッド的) グループがハイライト表示されるようになりました。これにより、挿入に関する制限事項を把握しやすくなり、ツールでの処理を容易にするためのグループ トポロジ調整方法がヒントとしてユーザーに表示されます。

    • グループ エッジを挿入 - グループ エッジを挿入するツールは、ワークフローを向上してツール間の移動を最小限に抑えるために、PolyEdit ツールに移動しました。

    • 面を切り取る - 選択した面をユーザー定義の方向に切り取るツールが追加されました。

    • 再三角化 - 再三角化機能により、選択したポリグループの三角ポリゴンが再計算されます。

    • マーキー選択 - すべてのコンポーネント タイプ向けに polyEdit でマーキー選択が可能になりました。

    • 押し出し - 押し出し機能に方向、メジャー方向、ポリグループ作成のための新しいオプションが追加されました。

    • グループによる単純化 - モデリング操作を繰り返すと、トポロジが不十分になることがあります。ポリグループによる単純化 (Simplify by Polygroup) は、ユーザー定義の領域に基づいてメッシュを再調整するための強力な機能です。

    • プッシュ/プル - プッシュ/プル ツールは「ブール押し出し」として機能します。トポロジ編集の代わりに、押し出されたメッシュはソリッドとして機能し、加算または減算されます。これにより、メッシュに穴を押し込む操作などが可能になります。

    • ベベル - 新しいベベル ツールが polyEdit に追加されました。

CubeGrid ツール
  • CubeGrid ツールは、アセットやレベルの迅速な開発を可能にする高速化ツールです。このツールには次のためのオプションが備わっています。

    • グリッド単位の選択/選択解除

    • 選択項目のプッシュ/プル

    • グリッド サイズの調整

    • 非直交角度へのグリッドの方向変更/スナップ

LOD マネージャー
  • LOD マネージャー により、ビューポート内で LOD を直接参照して管理することができます。

    • 高解像度のソース モデルから LOD0 を復元

    • ビューポートを使って個々の LOD をコンテキスト内でプレビュー

    • SourceModel と RenderData LOD 間を比較

Pivot Actor ツール
  • PivotActor ツールを使うと、選択したアクタに対する空白のアクタ親を新たに作成できます。この機能は、既存の DCC における「ロケーター」に似たものです。pivotActor を使うと、トランスフォームの制御と管理が容易になります。

細分化ツール
  • Subdivide (細分化) ツールを使用すると、モデラーやスカルプターは、さまざまな細分化技法を通じてメッシュをより高い解像度に追加/平滑化することで、適切な解像度を作成することができます。このツールでは現在以下をサポートしています。

    • バイリニア細分化 - バイリニア細分化では PolyGroups を単に細分化しますが、平滑なサーフェイスは生成しません。

    • ループ細分化 - ループ細分化では三角ポリゴン メッシュを直接処理します。これは、あらゆる PolyGroup トポロジを含むメッシュ、またはPolyGroup をまったく含まないメッシュに適用できることを意味しています。これにより、同じように平滑なサーフェスが作成されます。

    • openSubdiv/Catmull-Clark - Catmull-Clark はクワッド メッシュで使用するよう設計されており、比較的シンプルでしっかりした構造の PolyGroup トポロジに依存しています。

    • 新しい PolyGroup - 細分化の各レベルで新しいポリグループを生成するためのオプションが追加されました。これにより、PolyEdit などのツールを使って繰り返し調整/モデリングを行うことができます。

PolyCut ツール
  • PolyCut ツールは、メッシュ ブーリアン ベースの演算を使用できるように改善されました。この新しいモードにより、複数のレイヤーを通るカットや、サブジェクト メッシュのエッジを超えてカット カーブが拡張される際のカットが可能になります。

Boolean
  • メッシュ ブーリアン と Self Union (自己結合) が大幅に改善されました。これらのツールにより、下位レベルのメッシュ演算で生じるスプリアス エッジを取り除くことができます。これらのエッジは多くの演算処理を経て積み上がり、精度に関するエラーの原因となりえます。この新しい実装はより強力で効率的なものです。

トリム ツール
  • トリム 機能はメッシュ ブーリアン ツールから分離されて、独立したツールとなりました。また、トリムするジオメトリの側面を選択するためのオプションが増えました。

ラティス デフォーマ
  • Lattice Deformer (ラティス デフォーマ) ツールは次の機能で改善されました。

    • ソフト変形モード オプション

    • ラティス ポイント コンストレイント

ワープ デフォーマ
  • フレア ツールには、よりシンプルなインタラクションのための更新済みギズモがとともに、プロファイル タイプに関する追加のオプションが加わりました

  • 新しい [Show Original Mesh (元のメッシュを表示)] オプション

  • ギズモをスナップする機能で、ワールド内のオブジェクトにスナップできるようになりました

  • ギズモを中央に移動する新しいオプション

  • ベンド ツールに、その能力と有用性を向上する機能が新たに追加されました。

    • 変形時に一つの面を固定できるようになりました。

    • ビジュアライゼーションで、メッシュの曲がりに伴って、下から上に向かう線がギズモの中心を介してバインドされる様子が表示されるようになりました。

    • 上限/下限には、曲がる部分で、予期されるエフェクトがより多く適用されるようになりました。

スカルプティング
  • Vertex Sculpting (頂点スカルプティング) パネルのデザインが一新されました。この新しい UX には次の改善が含まれます。

    • フライアウト パネルのブラシ タイプとフォールオフの各ドロップダウン リストが大きなアイコンに置き換わり、より認識しやすく効率的になりました

    • タイルビューの新しいカスタム アセット ピッカーがブラシのアルファ マスクで使用されるようになりました。

    • このアルファ マスク ピッカーでは、ローカル ユーザー設定のコレクションに基づいたフィルタがサポートされます。これにより、ユーザーは、新しい「最近使用したもの」リストを含めて、お気に入りのアルファ マスク セットにすばやくアクセスできます。

  • 有効なブラシ スタンプとアルファ マスクを、ブラシ インジケーターの一部としてビューポート内に表示できるようになりました。

メッシュ簡素化ツール
  • メッシュ 簡素化 ツールには、既存のメッシュを最適化するための新しいオプションが追加されました。

    • 新しい削減手段である Existing Positions (既存の位置) では、元のメッシュの既存の頂点位置の一部を維持しながら、簡素化されたメッシュを作成できます。

    • Simplify by Polygroup (ポリグループによる単純化) では、簡素化処理においてポリグループのみをコンストレイントとして使用します。この機能は polyEdit ツールからも使用できます。

    • 幾何許容コンストレイント。

メッシュ投影ツール
  • メッシュ 投影 ツールには追加のパラメータが加わり、パフォーマンスが向上しました。

再メッシュ ツール
  • 再メッシュ ツールに、再メッシュ前の細分化のためのオプションが追加されました。これは、ローポリ メッシュの再メッシュ時におけるループまたは catmull-clark を使った細分化に役立つもので、元のポリゴン構造のファセットを継承しないメッシュが出力されます

メッシュ変位ツール
  • 変位 ツールはいくつかの追加機能によって改善されました。

    • PN 三角ポリゴン細分化 - PN 細分化はメッシュのよりスムーズなバージョンを定義し、平らな三角ポリゴンをそれぞれカーブ メッシュに置き換えます。

    • 新しいテッセレーション アルゴリズム - ユニフォーム テッセレーションと PN 三角ポリゴン テッセレーションの両方のスピードときめ細かさを向上する新しいメッシュ テッセレーション メソッドが実装されました。テッセレーション シェーダーに非常に近い結果を得ることができます。

    • テクスチャ マップを置き換える際のチャンネル選択。

    • 2D テクスチャのスケーリングとタイリング。

    • コントラスト カーブを使った強度調整。

ボリュームの作成と編集
  • いくつかの重要な追加機能によってボリュームの作成と編集が改善されました。

    • プリミティブ ツール、PolyExtrude、PolyRevolve などの作成ツールで、スタティック メッシュではなくボリューム (選択可能なボリューム タイプも含む) を発行できるようになりました。

    • Boolean や Plane Cut など、新しい派生オブジェクトを発行する編集ツールで、入力と出力の両方でボリュームを使用できるようになりました。

ボクセル ブレンドと減算
  • ボクセル ブレンド ツールで、カスタマイズ可能なスムーズ フォールオフを使って CSG 減算を実行できるようになりました。

ジャケット ツール
  • 見えないジオメトリの削除によく使用される ジャケット (Jacketing) ツールが向上しました。

    • オクルードされた三角ポリゴンから新しいグループを作成する機能がオプションとして追加されました。これにより、削除前によりきめ細やかな手動制御が可能になります。

    • 削除前に、オクルードされた三角ポリゴンの選択を除去します。これによって、三角ポリゴンの削除が抑えられます。

スタティック メッシュ エディタのモデリング ツール
  • StaticMeshEditorModeling プラグインを介して、スタティック メッシュ エディタでメッシュ編集ツールを使用できるようになりました。現在は、AutoLOD マネージャー、LOD Manager、そして Inspector ツールのみがスタティック メッシュ エディタに公開されています。Inspector ツールは、スタティック メッシュ エディタ内で表示しにくいさまざまなメッシュ情報の可視化に使用できます。これには、UV シームやメッシュ境界、ワイヤーフレーム オン シェード、UV チェッカーボード (Nanite 有効なメッシュのものも含む) などのハイライト表示があります。

ベイクとメッシュ属性 (ベータ)

Unreal Engine 5 では、一連のテクスチャリング ツールとマテリアル ベイク ツールが引き続き拡張されて更新されています。テクスチャとマテリアルのベイクは、アセットの開発において重要な部分を占めています。ベイク ツールは LOD 生成で重要な役割を果たすだけでなく、エディタ内での高度なマテリアル作成ワークフローを作成します。

image_46.jpg

テクスチャのベイク

Unreal Engine 5.0 早期アクセス版のリリース以降も、これらのツールにはさまざまな改善が行われました。

  • Input Normal と Baked Normal との結合

  • マルチサンプリング

  • 追加のジオメトリ ベイク タイプ

  • アンビエント オクルージョンのパフォーマンス向上

  • 頂点への属性のベイク

  • テクスチャから頂点へのベイク

  • テクスチャ フィルタリング

  • UV レイヤーのサポート

  • テクスチャ マップをエフェクトまたはテクスチャとしてプレビューする機能

Bake All ツール

モデリング モードで新しい BakeAll ツールを使用できるようになりました。BakeTexture ツールは、単一のメッシュのディテールをターゲット メッシュにベイクするためのソリューションを提供する一方で、BakeAll では、複数のソース メッシュのディテールを低ポリゴンの単一のターゲット メッシュにベイクするためのサポートが提供されます。

UV 編集機能 (ベータ)

Unreal Engine 5.0 では UV 編集ツールが大幅に更新されて拡大され、エディタ内で直接 UV を作成して編集する機能が著しく拡張されました。

新しい UV エディタのパネル

image_47.jpg

UV レイアウトを編集する際は、主に新しい UV エディタのパネルを通じて作業を行います。レイアウト パッキングと UV の方向を評価する際は、[2D UV] パネルを主に使用します。このパネルでは次をサポートします。

  • 2D セレクションとトランスフォーム

  • UV チャンネルの可視性

  • UV チャンネルのコピー、追加、削除

  • 自動アンラップとアイランドごとのアンラップ

  • 切り取りと縫合 (ソー) の操作

  • 3D プレビュー

  • テクスチャ ディスプレイ

Project UV ツール
  • Project UV ツールは大幅に見直されて、ユーザーによってリクエストされた多くの機能をサポートするようになりました。

    • 相対境界の代わりにワールド空間のディメンションが使用されるようになり、固定サイズのタイリング UV を作成するツールで作業する際に、常に一定のままで維持されるようになりました。

    • 選択した面を PolyEdit および TriEdit ツールから転送するための予備サポートが含まれます。

    • 複数の UV チャンネルがサポートされるようになりました。

    • ExpMap UV アルゴリズム:ExpMap UV ExpMap UV メソッドは平面投影に似ており、カーブしたサーフェスに従います。サーフェスが投影面から外れるにつれて生じる可能性のある過度なテクスチャの伸縮が回避され、限定的に投影されたデカールではその形状がより正確に維持されます。

Auto UV ツール
  • Auto UV ツールは更新されて、高ポリゴン メッシュ上での UV 構築のための新しいプロセスが追加されました。この新しいオプションでは、複数のステップが単一の操作 (小さなパッチ生成、パッチ結合、最終的な UV 生成、UV パッキング) にまとめられます。個別のパラメータの調整と繰り返しが容易になり、高品質の UV を作成することができます。

Unreal Editor のインターフェース

更新されたユーザー インターフェース

Unreal Engine 5 ではユーザー インターフェース (UI) が一新されて、一貫性と合理性が高まりました。デフォルトの色は、より暗めのデフォルト テーマに合わせて調整されました。また、ユーザーは [Editor Preferences (エディタの環境設定)] で独自の テーマ を設定でき、エディタを自分のスタイル合わせてカスタマイズすることができます。各アイコンがより小さくなり、一貫した見かけとなるよう更新されました。

コンテンツ ドロワー やサイドバー タブ作成メニュー などの新機能により、必要なツールにアクセスしやすくなるだけでなく、ビューポートのスペースを最大限に確保できます。

image_48.png

コンテンツ ドロワー

コンテンツ ドロワー は、コンテンツ ブラウザ オーバーレイを呼び出すことができる新しい機能です。これにより、ドッキング パネル用のスペースを取ることなく、アセットにすばやくアクセスできます。コンテンツ ドロワーは Ctrl + スペースバー でも開くことができます。また、[Content Drawer] タブの名前をクリックしてドロワーを展開することもできます。コンテンツ ドロワーはエディタ レイアウト内にドッキングしたり、従来のコンテンツ ブラウザと併用したりできます。

サイドバー タブ

エディタのいずれかの側で、パネルをサイドバー タブにドッキングできるようになりました。タブをドッキングすることで、画面上のスペースを取ることなく、よく使用するパネルに簡単にアクセスできます。早期アクセス版以降もタブ機能が更新されたため、タブを開いたままピン止めできるようになりました。

ロードとバックグラウンド処理の進捗インジケーター

プロジェクトを開く際に、進捗状況に加えて追加の詳細がスプラッシュ画面に表示されるようになり、ロード プロセスの可視性が高まって、より多くのコンテキストが表示されるようになりました。

image_51.gif

エディタの右下のステータス バーに、バックグラウンド処理の進捗インジケーターが加わりました。この進捗バーには、すべてのバックグラウンド タスクをまとめた進捗が表示されます。さらに、それを展開して、含まれるタスクの進捗インジケーターを個別に表示することもできます。

詳細パネル

[Details] パネル上部の新しいセクション バーはスクロール操作を減らすためのデザインで、これによってプロパティの関連カテゴリにすばやくアクセスできます。さらに、頻繁に使用するプロパティをお気に入りとして保存して、指定したアクタ タイプの [Details] パネル上部に表示できます。

作成メニュー

レベル エディタ のメイン ツールバーに [Create (作成)] ボタンが追加されました。これにより、配置可能なアクタと、Quixel BridgeUnreal マーケットプレイス などのコンテンツ ソースにすばやくアクセスできます。アクタは、このドロップダウン メニューからビューポートに直接ドラッグするか、クリックしてカメラ前にすばやく配置することができます。こうすることで、[Place Actors (アクタを配置)] をレベル エディタ画面にドッキングさせておかなくても、アクタを配置できるようになります。

image_53.png

Quixel Bridge の統合

Quixel Bridge が Unreal Editor に直接統合されました。Quixel Bridge をエディタ画面にドッキングし、アセットをレベル内に直接ドラッグできるようになりました。[Quixel Bridge] パネルには、レベル エディタのメイン ツールバーにある新しい [Create (作成)] メニューから、または [Window (ウィンドウ)] > [Quixel Bridge] からアクセスできます。

image_54.png

Unreal Engine 5.0 プレビュー版をすでにインストールしている場合は、使用する前に Quixel Bridge を最新版に更新する必要があります。このプラグインは Epic Games Launcher で更新できます。

Unreal Engine での Quixel Bridge の使用については、こちらのドキュメントを参照してください

マルチタブ モード

一部のモードは複雑で、追加の UI 要素を表示する必要があるため、それらは、デフォルトのツールバーとモード設定よりも多くの数のタブをサポートするシステムに再編されました。再編されたのはフラクチャ モードとアニメーション モードです。閉じたタブは、[Window (ウィンドウ)] > [Editor Modes (エディタ モード)] でそのタブを選択することで再び開くことができます。

image_55.png

検索可能なメニュー

ネスト化されたサブメニューを含むメニュー内での検索が可能になりました。入力した検索条件に一致する、あらゆるサブメニュー内のアクションが表示され、そこからアクセスできます。

image_56.png

メニューとウィジェットの再編

明確さと利便性を高めるために一部のメニューが再編されました。

  • アクタのコンテキスト メニューがリファクタリングされました。このメニューの各要素は、[Select (選択)] メニュー、[Actor (アクタ)] メニュー、または [Component (コンポーネント)] メニューのメイン メニュー バーに含まれています。

  • インエディタ ツールを作成するデベロッパー向けに、多数のウィジェットがEditor/EditorWidgets から Developer/ToolWidgets に移動しました。

Lyra Starter Game

image_57.gif

Unreal Engine 5 のリリースに伴って「Lyra」も公表されました。Lyra は、新しいゲームを作成する際の起点として使用することを目的としたサンプル ゲームプレイ プロジェクトで、Unreal Engine 5.0 フレームワークについての理解を深めるための学習リソースとしても活用できます。

image_58.png

Lyra のアーキテクチャは、Unreal Engine 5.0 の開発に伴って定期的に更新されるコア システムとプラグインも含めて、モジュール式となるように設計されています。次の主な機能が含まれています。

  • クロスプラットフォームの互換性とスケーラビリティ

  • Epic Online Services と Console Online Subsystems に向けたオンライン マルチプレイヤーとクロスプレイのサポート

  • 次の 2 つのゲームプレイ モードから選択可能:Elimination (チーム デスマッチ) と Convolution (制御点)

  • カスタマイズ可能なゲームプレイ アビリティ システム

  • Niagara FX

  • メニュー設定、コントローラー キー スティック、およびヘルス、マナ、弾薬の表示を含む、プロジェクトのゲームプレイ コンセプトのための Unreal Motion Graphics (UMG) ウィジェット クラスと UI アイコン。これらの UI 機能はモジュール性を取り入れた設計となっているため、Lyra とは別に、これらのシステムを独自のゲームで利用することができます。

  • ロコモーション アニメーション アセット、サウンド、あらゆるポーンに対応した武器システムを含む、最適化された手作りのコンテンツ。

  • 新しい UE5 マネキン「Manny と Quinn」は、MetaHumans と同じコア スケルトン階層を使用するプレイ可能なキャラクターで、アニメーション システムに対応しています。

image_59.gif

City Sample プロジェクト

image_60.png

City Sample プロジェクトは、デザイナーやデベロッパーなどが、新しいシステムや更新/改善されたシステムを自由に試せるプレイグラウンドです。これらを組み合わせることで、拡張可能でエンゲージメントの高い環境が実現します。このサンプルは、PlayStation 5 と Xbox Series S|X ハードウェア向けにリリースされたテクニカル デモ「The Matrix Awakens:An Unreal Engine 5 Experience」で使用されているアセットとデザイン技法を使ってビルドされています。

Unreal Engine 5 の新しい機能と改善された機能により、デザイン、データ入力、動的なライティングが可能な高精細なラージ ワールドをビルドして、優れたビジュアルをより現実味を帯びたものにできます。City Sample はルール プロセッサを使ったプロシージャル生成を通じて設計およびビルドされており、現実感を出すために次の機能が使用されています。

  • ワールド パーティションと One File Per Actor を組み合わせることで、レベル ストリーミングとエディタ ワークフローの効率が改善されています。

  • Nanite により、忠実度の高い仮想化マイクロポリゴン ジオメトリを使用できます。

  • Lumen により、ハードウェア レイトレーシングを使って動的グローバル イルミネーションと反射が生成されます。

  • 仮想シャドウ マップにより、街に一貫した高解像度のシャドウイングが提供されます。

  • Mass AI により、交通と群衆の動作とビジュアライゼーションが MetaHuman ライブラリに基づいて管理されます。

  • 車両システムと破壊システムは Chaos Physics で駆動します。

  • 街の音は MetaSounds によって追加されます。

  • パーティクル システムには Nanite が使用されています。

  • その他

人口知能 (AI)

image_61.png

Unreal Engine 5.0 には、今まで以上に現実味のある AI エージェントを作成するための新機能が搭載されています。MassEntity は、シーン内での数万もの AI エージェントのシミュレーションなど、パフォーマンスがカギとなるユース ケースにおいて役立つデータ指向の計算のフレームワークを提供するものです。

また、Unreal Engine 5.0 には、AI エージェントとプレイヤーがやり取り可能なレベル内に配置されるオブジェクトのコレクションである スマート オブジェクト も装備されています。このシステムは設定しやすく、今までにないレベルのインタラクティブ性をシーンに追加できます。

Unreal Engine 5.0 では、AI エージェントのナビゲーションについても、Mass Avoidance (密集回避)Zone Graph (ゾーン グラフ) などの機能に大幅な改善がなされています。Unreal Engine 5.0 では、AI エージェントのナビゲーションについても、Mass Avoidance (密集回避)Zone Graph (ゾーン グラフ) などの機能に大幅な改善がなされています。

密集回避では、MassEntity システムを使ったエンティティ向けの高性能な回避が提供され、ゾーン グラフでは、特定のナビゲーション フローを介した効率的な長距離ナビゲーションが提供されます。ユーザーは、StateTree を使用することで、柔軟性を備えた高性能のロジックを作成し、整理された状態で維持することができます。

質量エンティティ (実験的機能)

MassEntity (質量エンティティ) は、プレイヤーが数万にも及ぶシミュレートされたエンティティと高パフォーマンスでやり取りできるようにするデータ指向の計算のためのフレームワークです。

image_62.gif

MassEntity の主なデータ構造は、計算で使用するデータ のアトミック部分を表す フラグメント です。MassEntity の主なデータ構造は、計算で使用するデータのアトミック部分を表す フラグメント です。フラグメントはコレクションにグループ化でき、このようなコレクションのインスタンスは ID と関連付けることができます。このコレクション インスタンスは エンティティ と呼ばれます。

エンティティの作成は、オブジェクト指向プログラミングのクラスのインスタンス化に類似しています。しかし、クラスとその機能を厳密に示す代わりに、エンティティはフラグメント構成によって構築されます。これらの構成は実行時に変更することができます。たとえば、エンティティの構成にはトランスフォームと速度などの 2 つのフラグメントを含めることができます。

スマート オブジェクト (実験的機能)

スマート オブジェクト は、AI エージェントやプレイヤーがインタラクトできる、レベル内に配置されたオブジェクトです。これらのオブジェクトには、インタラクトに必要なすべての情報が含まれています。

image_63.png

スマート オブジェクトはグローバル データベースの一部であり、空間パーティショニング構造を使用します。したがって、ランタイム時に、位置、エージェントの近接度、タグなどのフィルタを使用してスマート オブジェクトをクエリできます。

大まかに言うと、スマート オブジェクトは、予約システムを通じて使用できる、レベル内の一連のアクティビティです。

密集回避 (実験的機能)

Mass Avoidance (密集回避) は、MassEntity と統合されているフォースベースの回避システムです。このシステムは、MassEntity システムを使用しているエンティティに対して高性能な回避を提供します。

image_64.gif

ゾーン グラフ (実験的機能)

ZoneGraph (ゾーン グラフ) は軽量のナビゲーション システムで、Navmesh とは異なり、ワールドの物理的表現に重点を置いて、メタデータを使って特定のナビゲーション フロー (車線や歩道、林道など) を表します。このメタデータは、セグメントによって接続されたポイントツーポイントの廊下構造によって表されます。

image_65.png

image_65b.png

このシステムは、AI エージェントの効率的な長距離ナビゲーションに使用できます。また、レベル内でのエージェント ナビゲーションに対する高度な制御を可能にするために、特定のナビゲーション フローをレベル内で直接定義することもできます。

ステート ツリー (実験的機能)

StateTree (ステート ツリー) は Unreal Engine のスケーラブルで汎用的な階層ステート マシンであり、ビヘイビア ツリーからの セレクター と、ステート マシンからの ステート および 遷移 とを組み合わせます。ユーザーは柔軟性を備えた高性能のロジックを作成し、整理された状態で維持することができます。

image_66.png

StateTree にはツリー構造に整理されている各ステートが含まれます。ステートの選択はツリーのどの場所でもトリガーできますが、最初はルートから始めます。選択時には各ステートの 入力条件 が評価され、合格すると選択はそのステートの子ステートに進みます。

ステートの選択により、リーフ ステートからルート ステートまでのすべてのステートがアクティブ化されます。各ステートは エバリュエータータスク、および 遷移 で構成されます。

物理

デフォルトで有効になった Chaos Physics

Chaos Physics (ケイオス物理) は、Unreal Engine 5 に導入されたカスタマイズ可能な軽量の物理シミュレーション ソリューションで、次世代ゲームのニーズに対応できるよう新たに構築されました。

image_67.png

システムの主な機能は、以下のとおりです。

  • Rigid Body Dynamics (剛体力学) および Ragdolls (ラグドール)

  • Rigid Body Animation Nodes と Cloth Physics (クロス物理)

  • Destruction (破壊)

  • Vehicles (ビークル)

  • Physics Fields (物理フィールド)

  • Fluid Simulation (流体シミュレーション)

  • Hair Simulation (ヘア シミュレーション)

Chaos Physics システムは既存のシステムを置き換えるもので、主な新機能として、非同期物理シミュレーションや堅牢な破壊システム、物理フィールド、流体シミュレーションなどが搭載されています。倍精度のワールドに対する完全なサポートも提供されます。

Chaos Destruction

image_68.gif

Chaos Destruction (ケイオス破壊) システムはツールのコレクションであり、これを使用するとシネマティック品質のレベルで破壊をリアルタイムで実現できます。優れたビジュアルに加えて、このシステムはパフォーマンスに対して最適化されており、アーティストやデザイナーは、直感的なノンリニア ワークフローや、ジオメトリ コレクションと呼ばれる新しいアセット タイプを使用することで、コンテンツ作成および破砕プロセスをより細かく制御できます。

ユーザーは、事前に破砕されたジオメトリを使ってシミュレーション アセットを構築し、動的に生成された剛体コンストレイントを活用して、シミュレーション時に構造接続をモデル化します。結果となるシミュレーション内のオブジェクトは、物理フィールドやコリジョンなどの環境要素を含むインタラクションに基づいて、接続された構造体から分離することができます。

また、Chaos Destruction には新しいキャッシュ システムも搭載されています。このシステムにより、パフォーマンスへの影響を最小限に抑えながら、ランタイム時に複雑な破壊をスムーズに再生することができます。

Chaos Destruction は Niagara や Audio Mixer などの他の Unreal Engine システムと簡単に統合でき、シミュレーション中にパーティクルをスポーンしたり、特定のサウンドを再生したりできます。

Chaos Vehicles

image_69.gif

Chaos Vehicles (ケイオス ビークル) は、Unreal Engine 5 に搭載された新しい車両物理システムの一部です。

Chaos Vehicles では、2 輪のオートバイから 6 輪、8 輪、さらにそれ以上の車両まで、あらゆる数の車輪をサポートしていますさらに、任意の数の前方および後方のギア構成もサポートしています。

Chaos Vehicles は、シャーシの特定の位置にダウンフォースやアップリフトを与える空中翼サーフェスをいくらでも設定することができます。これらのサーフェスは、自動車のスポイラーや、航空機の翼をシミュレートします。

アーケードスタイルの力をいくつか追加して、車両のシャーシをより直接的に制御できます。例えば、モーターサイクルを直立させるために直接トルクを印加したり、ヘリコプターのピッチやロールを直接制御することができます。

ビークル変形

image_70.gif

The Matrix Awakens:An Unreal Engine Experience」のリリースを通じて、Chaos Vehicles とともに使用される強固な変形システムによって、車両がダメージを受けた際に現実味のある変形を作成できることが証明されました。

この新しい変形システムでは、ControlRig を Chaos Vehicles システムに加えられた改善点を組み合わせることで、それぞれの車両に固有の変形を適用します。車両のドライビング ダイナミクスを活用して車両の重心を変更することで、それぞれの動的なクラッシュが作成されます。

このシステムでは、車両周辺に配置されたいくつかの物理ボディを使ってコリジョンを検知します。UE5 に導入された「コンストレイント可塑性」機能により、指定したしきい値を超えた後に、物理コンストレイントを永続的に変形できるようになりました。

Unreal Engine 5 には、ブループリントを介してコンストレイント属性に対してクエリを実行し、それらを変更する機能があるため、変形をより細かく操作することができます。また、デザイナーはゲームプレイ時に動的物理ボディの階層を有効/無効にすることができます。この階層を使って、物理シミュレーションを部分的に有効/無効にしてパフォーマンスを向上できます。

このシステムのテストや詳細については、マーケットプレイスから無料のデモをダウンロードしてください。

Chaos Cloth シミュレーション

image_71.gif

Chaos Cloth (ケイオス クロス) システムにはまったく新しいさまざまなパラメータとユーザー コントロールが装備されており、ユーザーはそれぞれのクロス シミュレーションのニーズに基づいて、広範な外観を簡単に作成して管理することができます。

増加されたクロスあたりのコリジョン サポート (>32)、デバッグ描画 CVAR、追加のマスク コントロールを備えた Chaos Cloth は、忠実度の高いクロスを今まで以上に簡単に作成できるよう設計されています。さらに、ユーザーはより直感的な各コントロールを通じて、コリジョン バックストップ、より有用なアニメーション ドライブ、さらに向上された風を視覚化できます。

また、Unreal Engine クロスには、ブループリントのインタラクター ノードを使ってランタイム時にクロスをより細かく制御できるようにする機能が新たに加わりました。クロスのエフェクトを限定的にする際に使用できるフィールドや、ワールド コリジョンを簡単に作成するための機能に対するサポートも追加されています。

Physics Field

image_72.gif

Physics Field System (物理フィールド システム) を使用すると、ユーザーが指定された空間の領域上の Chaos Physics (ケイオス物理) シミュレーションにランタイム時に直接作用することができます。これらのフィールドは、剛体やクロスに力を加えたり、ジオメトリ コレクション クラスタを破壊したり、破砕された剛体を固定したり無効にしたり、剛体アニメーション ノードやクロスとやり取りしたりするなど、さまざまな方法で物理シミュレーションを制御するように設定できます。

さらに Physics Field システムは Niagara や Material などの他のエンジン システムとの通信が可能です。これらのシステムは、特定の場所でフィールドの評価を可能にするビルトイン関数を使用することで、物理フィールドをサンプリングすることができます。

Niagara 流体シミュレーション

Unreal Engine 5.0 には、さまざまな GPU ベースのシミュレーターや再利用可能なモジュール、すべて Niagara エディタ内で使用できる堅牢なデータ構造体を含む、流体エフェクトをリアルタイムでシミュレートするためのアーティストフレンドリな一連のツールが用意されています。上級ユーザーであれば、幅広いさまざまな公開パラメータを活用して、ニーズに合わせてシミュレーションを修正できます。

image_73.gif

流体シミュレーション システムは、ゲームやシネマティクスで使用可能なリアルタイム環境のための複雑な流体エフェクトを生成するようデザインされています。システムは、さまざまなユース ケースを対象として、フリップブック テクスチャに複雑なシミュレーションをベイクするためにも使用できます。

流体シミュレーションの詳細については、マーケットプレイスから 機能別サンプル プロジェクトをダウンロードして、「流体シミュレーション」ドキュメントを参照してください。

非同期物理シミュレーション

Unreal Engine 5 では、物理シミュレーションをゲーム スレッド上ではなく、独立した独自の物理スレッドで実行することができます。

物理シミュレーションを独自のスレッドで実行することの主なメリットは、シミュレーションが固定のティック間隔で実行されるため、予測可能な結果が増える点です。

ユーザーはこの機能を利用して、シミュレーションが常に予測可能な方法で動作するように微調整することができます。また、この動作はネットワーク物理の基盤としての役割を果たし、サーバーとクライアントが同じ速度で物理をティックし、結果を簡単に同期させることができます。

Niagara

ラージ ワールド座標 (LWC) のサポート

Unreal Engine 5.0 には Large World Coordinate (ラージ ワールド座標) で作業する機能が加わったため、ユーザーは一つのレベル内で広大な規模のワールドをビルドできるようになりました。メイン エンジンでの実装では、ラージ ワールド座標 のリリース ノートに記載されているとおり、主要なデータ タイプに対して浮動小数タイプの代わりに倍精度タイプを使用します。これによって 32 ビットの精度から 64 ビットになります。

ただし Niagara では、CPU と GPU の両方でのレンダリングをできるだけ効率的に保つために、より経済的なアプローチが必要であったため、倍精度タイプを実装するのではなく、ワールド向けのグリッド システムを実装しました。一つの浮動小数値にはそのグリッドにおける Niagara システムの位置が保存され、もう一方にはワールドにおけるそのグリッドの位置が保存されます。

image_74.png

そのため、Niagara でラージ ワールド座標を扱う際には特別な設定が必要になります。そのため、Niagara でラージ ワールド座標を扱う際には特別な設定が必要になります。詳細については、「Niagara のラージ ワールド座標」ページを参照してください。

シミュレーション ステージ

Unreal Engine の以前のバージョンでは、シミュレーション ステージ は実験段階の機能として扱われていました。UE5 ではシミュレーション ステージがプロダクション対応の機能となり、Niagara エディタ内で直接使用できるようになりました。

Niagara スタックでは、Emitter Update (エミッタの更新) や Particle Update (パーティクルの更新) などのグループ自体がシミュレーション ステージとなります。ただし、シミュレーション ステージは、目的のエフェクトのニーズに応じていくつでも追加できます。シミュレーション ステージは、Niagara エディタでいくつかの計算とイテレーションを実行させるために設定するステージです。これは、配列、2D グリッド、3D グリッド、レンダリング ターゲット、または一連のパーティクル上でイテレーションを行うかどうかを定義できる For Loop に似たものと考えることができます。

image_75.png

また、Content Examples サンプル プロジェクトに含まれている Niagara_Fluids フロアでは、シミュレーション ステージが多用されているケースを確認できます。一部の流体エミッタには、10 個以上のシミュレーション ステージが使用されているものもあります。

image_76.png

GPU レイトレーシング コリジョン (実験的機能)

Unreal Engine では、Collision モジュールを使って、パーティクル システムをレベル内のオブジェクトと衝突させるように設定できます。Unreal Engine の以前のバージョンでは、このモジュールに GPU エミッタを使用する際のオプションがいくつか用意されていました。一般的に最も使用されるのは Depth Buffer のオプションで、これによって環境のシミュレーションが生成されます。低コストですが、精度も低いソリューションです。それらの形状は正確には描写されず、パーティクルが画面外に出るとすぐに非表示になります。

UE5 では、GPU 上でレイトレーシングを使用するオプションをコリジョン モジュールに追加しました。エミッタとそのパーティクルが画面内または画面外のいずれにあるか、またはオブジェクトの背後に隠れているかどうかにかかわらず、コリジョンでは正確な結果を計算するためにレイトレーシングを使用します。

計算は非同期であるため、Niagara コリジョンは 1 フレーム遅れることに注意してください。この機能にはハードウェア レイトレーシングも必要です。

この実験的機能を有効にする方法については、「GPU レイトレーシング コリジョン」ドキュメントを参照してください。

パフォーマンスの割り当て

ゲームをビルドする際は、シーンの構成によっては FX ワークロードに大きなばらつきが出ることがあります。場合によっては、特定の範囲外にあるインスタンスや割り当てられたメモリ使用量を超えたインスタンスのカリングなど、パフォーマンス管理のために何らかのアクションが必要になることがあります。

パフォーマンスの割り当てはエフェクト タイプの一部として設定されます。エフェクト タイプ アセットを使うと、さまざまな設定を一度だけ行い、それを一連の Niagara エフェクトに適用できます。これらのオプションはすべて [Budget Scaling (バジェット スケーリング)] セクションに含まれています。詳細については、「パフォーマンスの割り当て」を参照してください。

image_78.png

Cascade の変換

Cascade から Niagara へのコンバーターは、Cascade のアセットを Niagara に移行します。Cascade アセットを右クリックして [Convert to Niagara System] を選択することでアクセスできます。

変換処理に次のような改善が内部で行われました。

  • Niagara スクリプトが依存関係の順で自動的に整理されるようになりました。このため、ユーザーは手作業でモジュールの順序を修正する必要がなくなります。

  • ライト レンダラの変換が向上しました。

  • Cascade Shape モジュールが新しい Niagara Shape Location モジュールに変換されるようになりました。

    モジュールの変更

Unreal Engine の本バージョンでは、いくつかのモジュールが変更されて新しい機能が追加されました。

Shape Location

Box、Sphere、Cylinder、Torus Location モジュールは非推奨になりました。これらは、包括的な一つの Shape Location モジュールに置き換えられました。このモジュールで好きな形状を選択すると、それに応じて設定が調整されます。また、Ring / DiscCone という 2 つの形状が追加されました。

image_80.png

Add Velocity (速度の追加)

Add Velocity in PointAdd Linear VelocityAdd Velocity in Cone モジュールは非推奨になりました。これらは、包括的な一つの Add Velocity モジュールに置き換えられました。このモジュールでは、速度を追加するモードを選択すると、それに応じて設定が調整されます。

image_81.png

Update Mesh Orientation (メッシュの向きを更新する)

Orient Mesh to VectorFlight OrientationPure Roll Orientation モジュールは非推奨になりました。これらは Update Mesh Orientation モジュールに組み込まれました。このモジュールでメッシュの向きを選択すると、それに応じて設定が調整されます。このモジュールでメッシュの向きを選択すると、それに応じて設定が調整されます。

image_82.png

Update Mesh Orientation モジュールは、以前の Update Mesh Orientation モジュールと同様に、デフォルトで [Rotation Rate (回転率)] に設定されます。

Initialize Particle (パーティクルの初期化)

以前のバージョンには、Initialize ParticleInitialize Ribbon という 2 つのモジュールがありました。リボンの機能は Initialize Particle に統合されました。

image_83.png

スタティック変数

独自のカスタム モジュールを作成するユーザー向けに、「スタティック変数」と呼ばれる新しい機能が Niagara スクリプト エディタに追加されました。スタティック変数は、コンパイル後も変わらない情報を含む変数です。これらは、数学演算の対象となる情報や、スタック内の複数のモジュールに反映させたい情報を保存する場合に使用できます。

スタティック変数を新たに作成するには、[Parameters (パラメータ)] ウィンドウ内でプラス記号 (+) のアイコンをクリックします。[Parameters] ウィンドウでは、「Static Bool」と「Static int32」という 2 つのタイプのスタティック変数を作成できます。次の図で示されているように、スタティック変数には赤色の S が付きます。

image_84.png

スタティック変数を使用することで、エミッタで一度設定したオプションが別のシミュレーション ステージでも使用できるようになります。

image_85.png

スタティック変数の別の活用例としては、モジュール内でのスタティック スイッチの駆動があります。これは、設定が必要な多くのハイレベルなオプションを含む複雑なエミッタを扱う際に特に有用です。通常、これらのオプションは、モジュール スクリプト内でスタティック スイッチを使用することで作成されます。これにより、選択したオプションに応じてユーザー インターフェース上で各要素が表示/非表示になります。

Static Switch ノードには [Expose As Pin (ピンとして公開)] オプションが含まれています。これを有効にすると、スタティック変数に接続できるようになります。接続できるスタティック変数のタイプは、スタティック スイッチのタイプによって異なります。接続できるのは Static Bool、Static int32、または Static Enum です。

image_86.png

次にそのスタティック変数を [Selection (選択)] パネルで有効にすると、スタティック スイッチによってそのオプションがユーザー インターフェースで有効になります。

image_87.png

エミッタの概要

Niagara システムの複雑さが増すにつれて、シミュレーション ステージの数も増え、頻繁に調整する必要のある設定を見つける手間もかかるようになります。そのため、[Emitter Summary (エミッタの概要)] という要素を各エミッタの上部に加えました。頻繁に使用する設定をこの領域に表示するよう設定できます。

image_88.png

[Emitter Summary] にパラメータを追加するには、モジュール内で目的のパラメータを右クリックして [Show in Emitter Summary (エミッタ サマリで表示)] を選択します。

image_89.png

GPU スプライン

以前のバージョンでは、スプライン コンポーネント データ インターフェースは CPU シミュレーションのみで機能しましたが、最新のバージョンでは GPU でも機能するようになりました。

データ レジストリ

Unreal Engine 5.0 はデータ レジストリをサポートしています。データ レジストリは、USTRUCT マクロでタグ付けされたデータ構造体用の効率的なグローバル ストレージ スペースです。データ レジストリでは、ユーザー定義のキャッシング動作を含む、同期および非同期の両方のデータ アクセスがサポートされます。データ レジストリは、一般的な読み取り専用データを使用するよう設計されています。

  • タスク システム

新しい Tasks System (タスク システム) ジョブ マネージャーは、依存タスクの有向非巡回グラフ (DAG) をビルドして実行することで、ユーザー コードを非同期で実行するためのフレームワークを提供します。これには、マルチスレッドの環境でタスクをスケジュールするための、デベロッパー向けの新しい汎用 API とシステムが含まれています。このシステムによって、小さなタスクが最適な数のスレッドに効率よく振り分けられます。この新しい API はマルチスレッド デザインの表現を大幅に簡素化し、高コア数と低コア数の両方で効率よくターゲット上で実行されます。新しい Tasks Insights (タスク インサイト) ビューにより、デバッグと最適化のプロセスも向上します。

これは、Unreal Engine のジョブ マネージャーである TaskGraph の改善版です。Tasks System と TaskGraph は同じバックエンド (スケジューラーとワーカー スレッド) を使用します。

Unreal Insights

Unreal Insights では、プロジェクトにおいて最適化が必要な領域を特定します。このツールは、Unreal Engine によって発行されたデータの収集、解析、可視化を行うスタンドアローンのプロファイリング システムとして機能します。Unreal Insights では独自のプロファイリング データを追加するプロセスを簡素化し、データをリモートで記録することができ、実行時のプロジェクトに対するアプリケーションの影響を最小限にとどめます。

Timing Insights ウィンドウ

[Timing Insights (タイミング インサイト)] ウィンドウには、さまざまな CPU および GPU トラックとともに、フレームのパフォーマンス データが表示されます。タイミング ビューに新しいツールバーが追加されて、[Tracks (トラック)] ドロップダウン メニューが複数のメニューに分割されました。

image_90.png

クイック検索

Quick Find (クイック検索) ウィジェットは、タイミング ビュー に表示されているイベントの検索とフィルタリングに使用します。

このウィジェットは、タイミング ビューのコンテキスト メニューから、またはタイミング ビューにフォーカスがある際に Ctrl + F ショートカット キーを押すことで起動できます。

image_91.png

Quick Find ウィジェットの検索ロジックは、グループとフィルタを使って定義します。Group ノードには子 Filter ノードが含まれており、子の結果に適用するロジックを定義します。

Memory Insights

Memory Insights は、プロジェクトでのメモリ使用量の調査とコール スタックのトレースを可能にする新しいコンポーネントです。このランタイム コンポーネントでは、ランタイム時に発生するすべての割り当て、再割り当て、または解放イベントのイベントをトレースし、解析時にそのメモリ使用パターンを再構築します。Memory Insights タイムラインでは、ブックマークやアセット ローディング、CPU/GPU タイマーなどの追加トラックのオーバーレイがサポートされます。

image_92.png

デベロッパーは Memory Insights を使用することで、任意の時点でメモリの各ブロックに関連付けられた LLM タグやコールスタックなど、メモリの割り当てと解放に関する情報をさらに詳細に確認できるようになりました。

image_93.png

Investigation パネルでは、割り当てに関するさまざまなクエリを実行できます。LLM Tags では、さまざまな LLM タグの可視性を制御します。

個別のサーバー トレース プロセス

Unreal Trace サーバー は単一のサーバー インスタンスとしてバックグラウンドで実行され、複数のプロジェクト インスタンス間で共有することができます。これはユーザー インターフェースを持たない軽量のプログラムであり、パフォーマンスへの影響は最小限に抑えられます。

遅延接続の改善点

以前のバージョンの Unreal Insights では、Insights プログラムへの接続が遅延した場合に、接続を確立する前に一度限りのイベント (Important イベント) が見過ごされてしまうことがありました。現行のバージョンでは Important イベントが Unreal Engine のクライアント側にキャッシュされるため、接続の際にこれらが遅延接続のマシンに送られるようになりました。

Task Graph Insights

Task Graph Insights では、タスク グラフ システムのプロファイリングを行います。これには、後続およびネスト化されたタスクとタイミング イベントとの関係を示すタスク依存関係に加えて、各タスクに関連するタイミング イベントを表示する機能が含まれます。

image_94.png

コンテキスト スイッチ

コンテキスト スイッチは、CPU コア トラックに関する情報を表示する新しいトレース チャンネルです。各 CPU コアには、各 CPU スレッドから実行されるイベントをそれぞれ示すタイミング イベントなど、記録したトレースの詳細を表示するトラックがあります。

image_95.png

ランタイム アセット ロード用の Zen Loader

Zen Loader は Unreal Engine 5.0 のデフォルトのローダーで、コンテナ ファイルからアセットをロードします。Zen Loader は、ステージング フェーズにオフラインで計算される最適化パッケージとオブジェクト依存関係グラフを使用することで、CPU オーバーヘッドを減らします。コンテナ ファイルを使用するとファイル システムの抽象化が回避され、I/O ディスパッチャーという新しい I/O 抽象化レイヤーを使用して、CPU のオーバーヘッドを最小限に抑えて、データ チャンクを見つけられるローダーを利用できます。I/O ディスパッチャーでは、プラットフォーム固有のバックエンドを使用してハードウェア機能と API からメリットを引き出します。

Zen Loader は Event Driven Loader (EDL) をベースにしており、名前テーブル、インポート / エクスポート マップ、プリロード依存関係など、クッカーと同じ出力タイプが必要になります。レガシー EDL ランタイム ロジックはオフラインになり、ステージング フェーズで生成されます。pak コマンドを使ったステージングの際は、EDL ではなく Zen Loader が使用されます。

さらに次の変更があります。

  • パッケージのサマリ、BLOB、バルクデータおよびシェーダーのエクスポートはコンテナ ファイルに配置されます。

  • 最も重要なパッケージのメタデータとすべてのパッケージの依存関係は、パッケージ ID のインデックスが付いたパッケージ ストアに集められます。

  • .uasset パッケージ ヘッダは、最適化パッケージ サマリに変換されます。

  • 他のチェーンがあるインポート マップは除外され、エクスポート オブジェクト ハッシュにより直接参照と置き換えられます。

  • 名前テーブルには新しい最適化バッチ形式があります。

  • プリロード依存関係はパッケージごとのエクスポート バンドル ノードに平坦化されます。それぞれでは、CreateExport および SerializeExport コールのシーケンスと他のエクスポート バンドル ノードへの依存関係を指定します。

CommonUI プラグイン (ベータ)

Unreal Engine 5.0 には CommonUI プラグインが導入されました。このプラグインは、複数のレイヤーやポップアップ、またはサブメニューなどで使用される、複雑なナビゲーションを含むクロスプラットフォームのユーザー インターフェースの開発をサポートするものです。

このプラグインを使用するには、[Plugins (プラグイン)] メニューから CommonUI プライグインを有効にします。UE 5.0 の時点でこのプラグインはベータ版ですが、テストはすでに完了しており、「フォートナイト」などの Epic Games 製品で広く使用されています。次は CommonUI のツールの概要です。これらの詳細な使用方法については、「CommonUI に関するドキュメント」を参照してください。

Activatable Widgets (アクティブ化可能なウィジェット)

Common Activatable Widget クラスは、ウィジェットに使用できる新しいベース C++ クラスです。Activatable Widgets では、アクティブと非アクティブの状態を切り替えることができます。Inactive (非アクティブ) の場合も画面にレンダリングされますが、やり取りすることはできません。これは、グレーアウトされたメニュー オプションなど、メニューのナビゲーションにおいて無効にしたり省略したりできる要素に最適です。Activatable Widgets は、デフォルトで非アクティブの状態に設定されることに注意してください。

入力ルーティング

ユーザーがフォーカスのないメニューと誤ってやり取りしないようにする必要があるため、複数のレイヤーを持つウィンドウやプロンプトで構成される複雑なメニューの作成は容易ではありません。Input routing (入力ルーティング) では、ゲームのビューポート クラスの入力をキャプチャし、ビューポート内で一番上に描画されているアクティブなウィジェットとその子に入力を転送することで、このプロセスを自動的に処理します。

image_96.gif

例えば、2 つのメニューが重なっている場合、入力ルーティング システムは上にあるほうのメニューに入力を転送します。その後、このメニューがその子に入力をルーティングします。下のレイヤーにあるメニューは入力をまったく受け取らないため、ユーザーは上のメニューが閉じられるか、下のメニューが上に移動するまで、その子であるボタンとはやり取りできません。非アクティブの状態にある Activatable Widgets も無視されます。これにより、ゲームパッドでのナビゲーションを円滑に進めやすくなります。この機能はタッチ入力やマウスおよびキーボードに対しても有効です。

入力マッピングとプラットフォーム サポート

image_97.gif

入力でバスのボタンをタップすると、Common Action Widget で表示するアイコンが自動的に切り替わります。

Common UI では、さまざまなプラットフォームに UI 入力をマッピングするための、次を含む高品質なツールが提供されます。

  • UI Input Action Mapping (UI 入力アクション マッピング) – 特定のボタンに抽象的 UI アクションをマッピングするための入力アクション データ テーブルを作成します。

  • Per-Platform Action Overrides (プラットフォームごとのアクション オーバーライド) – 特定のプラットフォーム上で確定ボタンや戻るボタンを差し替える場合など、特定の UI アクションのオーバーライドを作成します。

  • Controller Icon Management (コントローラー アイコン管理) – 特定のコントローラーに向けた一連のアイコンを使って Controller Data アセット を作成し、それらを UI 入力アクションに関連付けます。Common Action ウィジェットには、選択したアクションと、ユーザーがアプリケーションの制御に使用しているデバイスに適切なアイコンが表示されます。

入力アクション データ テーブルに表示されるアクションは Common UI ユーザー インターフェース専用のもので、レガシー入力システムまたは高度な入力システムのいずれかのインゲーム アクションに使用されるものとは関連がないことに注意してください。

Common UI ウィジェットと UI スタイリング

image_98.gif

Common UI により、新しいウィジェット ライブラリが追加されました。これは UMG パレットの Common UI プラグイン に表示されます。これらの多くは、さまざまなゲームやアプリケーションでよく使用されている UI 機能です。次が含まれます。これらには、下記が含まれています。

  • date/time (日付/時刻) および numeric (数値) 値用の特殊なテキスト ブロック。

  • カルーセルアニメートされたスイッチャー など、ナビゲーションと表示の支援機能。

  • ロード ガードハードウェア可視性境界 などのプラットフォーム支援機能。

  • ボタンやテキストなどの基本的な機能を提供しながらも、スタイリングにはスタイル データ アセットを使用するウィジェット。

Common UI 向けのスタイル データ アセットは、マテリアル、テクスチャ、フォントなど、標準的な UMG ウィジェットで通常使用されるスタイル要素を含むブループリント クラスです。Common UI ウィジェットはスタイル データを自身で維持するのではなく、これらのアセットを参照します。これにより、UI デザイナーはさまざまなメニューと HUD で一貫したスタイルを確立して維持しやすくなります。

さらに、Common UI ウィジェットの新しいインスタンスに適用されるグローバル デフォルト スタイルを提供することも可能です。これらのオプションは、[Project Settings] > [Plugins] > [Common UI Editor] メニューにある [Template Text (テンプレート テキスト)]、[Template Button (テンプレート ボタン)]、[Template Border (テンプレート境界)] にあります。これらのいずれかにスタイルを提供する場合は、異なるスタイル セットを持たないすべての Common UI ウィジェットにその変更が反映されます。

[Project Settings] > [Plugins] > [CommonUI Framework] でも、ロード ガード用の デフォルト スロバー マテリアル や、ロードされなかった UI 要素のプレースホルダー画像として機能する デフォルト画像リソース など、より特殊な要素向けのアセットを選択できます。

スレートと UMG のパフォーマンス

Unreal Engine 5.0 では、スレートと UMG のパフォーマンスが改善されました。主要な改善点は「グローバル無効化」と「スレート属性」の採用で、これによってフレームごとに TAttributes を複数回更新する必要性が削減されます。スレート属性の詳細については、「Engine\Source\Runtime\SlateCore\Public\Types\SlateAttribute.h」を参照してください。グローバル無効化 (4.24 で導入) では、無効なウィジェットの更新/ペイントのみが行われます。

グローバル無効化が有効になった場合にスレート属性が適切に更新されるようになったため、プロジェクトをグローバル無効化に切り替えやすくなりました。パフォーマンス上の理由で、ゲーム ウィジェットには SlateAttribute/Attribute を使用しないことをお勧めします。デフォルトでグローバル無効化は有効ではなく、一部のマイナーな SWidget については新しいシステムに変換する必要があります。

SWidget 階層の整合性をテストするために、複数の検証機能が追加されました。これらは [Widget Reflector (ウィジェットリフレクタ)] から有効にできます。

バーチャル プロダクション

image_99.png

THE EYE:CALANTHEK」。Aaron Sims Creative 提供の画像。

Unreal Engine 5.0 はバーチャル プロダクション ワークフローを一新する機能を備えています。UE 4.27 の優れた安定性と成熟度はすべて UE 5.0 に継承されています。インカメラ VFX ツールは 4.27 のすべての主要なワークフローをサポートするだけでなく、UE 5.0 に追加された新機能を通じて、ステージ操作やコンテンツ制作をよりサポートするようになりました。

Nanite は、バーチャル プロダクションのユース ケースにおけるムービー レンダリング キューと nDisplay レンダリング パイプラインの両方で、ベータ機能としてサポートされています。GPULM またはパス トレーサーと併用した場合は、完全な詳細度のサーフェスではなく、Nanite フォールバック メッシュが使用されます。USD サポートの対象がレベルからシーケンサーに拡大されて、レイアウトなどのプロダクション ワークフローにおいて、USD パイプラインで Unreal Engine を活用できるようになりました。

Lumen は、MRQ レンダリング パイプライン向けのベータ機能として備わっています。その制限事項は文書化されています。Lumen は nDisplay でも機能するように見えることがありますが、インカメラ VFX プロダクションや、VR および nDisplay レンダリング パイプラインを使用する似たようなワークフローで利用できる段階ではないため、使用した際はアーティファクトが生じたり、パフォーマンスの問題が発生したりすることがあります。Lumen の開発は今後も継続され、将来的に nDisplay と VR ワークフローに対するサポートの実現を予定しています。

インカメラ VFX 向けの Nanite + GPULM + パス トレーサー

映画制作者は、インカメラ VFX プロダクションにおいて Unreal Engine 5.0 の新しいレンダリング機能を活用することで、さらなる品質を追求しながら、今まで以上に創造性を発揮できます。Nanite を使用すると、従来はポストプロダクションのみで利用可能であった VFX スタイルのアセットをリアルタイムで使用できるようになり、GPU ライトマスでライティングすることも可能になります。パス トレースに対する nDisplay のサポートによってライティング ワークフローが起動して、ステージで加えられた変更の正確なライブ プレビューが可能になります。また、今回のリリースにはバーチャル テクスチャに対する nDisplay のフル サポートも追加されており、これによってバーチャル プロダクション コンテンツ制作で使用可能なツールセットがさらに強化されます。

nDisplay の改善

Unreal Engine 5.0 でも引き続き nDisplay ツールの改善が行われています。インナー フラスタムに対するオーバースキャン サポート、フェイルオーバーのサポート、nDisplay コンフィグ エディタでのビューポートの回転が追加されました。さらに次の変更も加えられています。

  • 投影ポリシーとオーバーレイする、ビューポートごとの統計に対するサポート

  • 向上したブループリント API

  • フラスタムのビジュアライゼーションとインナー フラスタム境界のビジュアライゼーション

  • プロシージャル メッシュのサポート

インナー フラスタムに対する nDisplay 指向性オーバースキャン

インナー フラスタムのオーバースキャンを方向 (上下左右) ごとに指定できるようになりました。インカメラ VFX のシナリオでは、動くカメラのレイテンシーに対応するためにインナー フラスタムを特定の方向に伸ばす場合や、舞台セットで部分的に隠れるフラスタムのレンダリング サイズを下げる場合に、この機能が役に立ちます。オプションとして、ビジュアル品質を維持するために、その解像度を自動的に適応させることも可能です。

image_100.gif

境界のビジュアライゼーションとインナー フラスタムでのオーバースキャン機能を示すインカメラ VFX 設定。最初はインナー フラスタムにはオーバースキャンは適用されず、次にインナー フラスタムの右側を伸ばすように 50% 適用され、最後に 1.25 の乗数がインナー フラスタム全体に適用されます。

出力マッピングにおけるビューポートの回転

以前のバージョンでは、トランスフォーム操作を nDisplay ビューポートに適用するには、スタティック メッシュか、カスタム UV マッピングを含む外部の .obj ファイルが必要でした。最新のバージョンでは、回転やスケールなどのトランスフォーム操作を、nDisplay コンフィグ エディタ の [Output Mapping (出力マッピング)] パネルでビューポートに直接適用できるようになりました。

image_101.gif

フェイルオーバーのサポート

nDisplay クラスタのフェイルオーバー ポリシーを有効にできるようになりました。現時点では Drop S-node on fail というフェイルオーバー ポリシーが使用可能です。このポリシーでは、セカンダリ ノードの接続解除時、またはセカンダリ ノードがネットワークのタイムアウト設定を超えた場合に、そのセカンダリ ノードがクラスタからドロップされます。ドロップ後は、フェイルしたノードなしにクラスタが続行されます。プライマリ ノードがドロップされた場合はクラスタが終了します。

新しい Console Variables Editor プラグイン (ベータ)

Console Variables Editor (コンソール変数エディタ) は、プロジェクトで設定されたすべてのコンソール変数とコマンドに関する情報を表示する単一のパネルで、ここからすべての変数を一元的に表示/編集することができます。プリセットを作成することで、複数のプロジェクトで同じコンソール変数と値を使用することができます。また、コンソール変数エディタでは、マルチユーザー セッションにおける複数のコンピュータに対するコンソール変数とコマンドの制御もサポートしています。

image_102.gif

新しい OpenCV プラグイン (ベータ)

以前のリリースでは、OpenCV はバーチャル プロダクション ツールセットに含まれていましたが、今回のリリースではスタンドアローンのプラグインになりました。このプラグインでは OpenCV バージョン 4.5.5 が使用され、ArUco マーカーやチェスボードの追跡などの新しいブループリント ノードが追加されます。

リモート コントロールの改善点

新しいシーンでのリモート コントロール プリセットと Web アプリケーションの設定にかかる時間を短縮する方法をいくつか追加しました。

  • 再バインディング: 以前に作成したリモート コントロール プリセットを開き、新しいシーン内のアクタにこれを再バインドして、コントロールを再リンクできるようになりました。

  • テンプレート: シンプルなコントロールを含むアクタの複数のインスタンスが必要な場合に、アクタのテンプレートとして、一連のコントロールをリモート コントロール Web アプリケーションに設定できるようになりました。Web アプリケーション内でアクタのインスタンスを切り替えると、そのインスタンスのコントロールを使用できるようになります。

カメラ レンズのキャリブレーションの改善点

今回のリリースでは、レンズの歪みと節点オフセットのキャリブレーションのための 2 つの新しいアルゴリズムが試験的に加えられたほか、レンズ キャリブレーション プロセスが改善されました。改善点には次が含まれます。

  • レンズのキャリブレーション後に画像の中心位置を手動で調整する

  • 照準線などのオーバーレイを Lens File アセット エディタのビューポートに追加する

  • レンズのオプティカル軸と入射瞳位置を検出する新しいアルゴリズムを使って、節点オフセットのキャリブレーションを行う

  • 一連の 3D-2D ポイント対応を手動でキャプチャできる新しいアルゴリズムを使って、レンズの歪みのキャリブレーションを行う

  • レンズ情報がレンズ ファイルに自動的に保存される

  • JSON 形式の ulens ファイルからのインポートとエクスポート

DMX の改善

DMX ツールセットの改善も引き続き行われています。改善点には次が含まれます。

  • Take Recorder を使った DMX トラックの保存速度が大幅に向上されました

  • 出力ポートが遅延可能になりました

  • 出力ポートで多数のユニキャスト アドレスをサポートするようになりました

  • 出力ポートから未変更のデータが毎秒ごとに再送信されます

  • 器具タイプでマトリックスを割り当てることができるようになりました

  • GDTF スタンダートに対するサポートがさらに加わりました

image_103.gif

レベル スナップショットの改善点

次の機能に対するサポートを Level Snapshots プラグインに追加しました。

  • Level Snapshots for nDisplay プラグインを削除して、Level Snapshots プラグインに nDisplay サポートを追加しました。

  • フォリッジのサポートが追加されました

  • 親/子の関係性とコンポーネントをレベル スナップショットから復元できるようになりました

  • レベル スナップショットの保存とロードのパフォーマンスが向上しました

スイッチボードの改善点

今回のリリースでは、スイッチボードのユーザー エクスペリエンス向上に重点的に取り組みました。改善点には次が含まれます。

  • スイッチボードのメイン ウィンドウと設定ウィンドウの両方の UX が向上しました

  • スイッチボードのメイン ウィンドウ下部からマルチユーザー サーバーにアクセスできるようになり、マルチユーザー セッションを制御するためのアクションが追加されました

  • ノードの起動時に Unreal Insight コレクションを有効にできるようになりました

  • スイッチボードから各ログを zip ファイルにまとめて取得できるようになりました

シーケンサー プレイリスト

新しい Sequencer Playlist (シーケンサー プレイリスト) 機能により、レベル シーケンスの準備、キュー、トリガーをオンザフライで行えるようになりました。プレイリストにより、バーチャル プロダクション、ブロードキャスト、ライブ イベント ステージのアニメートされたコンテンツとのインタラクションにおいて柔軟性と俊敏性が向上し、エディ内での再生のために、すべてのサブシーケンスのタイミングを事前に設定する必要がなくなりました。

シーケンサー プレイリストには次の機能が含まれます。

  • 個別のレベル シーケンス、またはすべてのレベル シーケンスを同時に再生および停止する

  • 再生時にシーケンスのトリム、ループ、タイムスケーリングを行う

  • 必要に応じてレベル シーケンスをミュートして、指定したクリップで再生をスキップする

  • リハーサルとアライメントのために、シーケンスの最初のフレームを無限に保持する

  • プレイリストでトリガーされたアニメーションを Take Recorder を使って記録し、投稿用のライブ再生をキャプチャす

image_104.png

ユニバーサル シーン デスクリプション (USD) の改善

Epic Games では、ユニバーサル シーン デスクリプション (USD) のサポートを継続的に拡張しています。Unreal Engine 5 では、インポート/エクスポート プロセスと、Nanite やシーケンサーなどの機能に対する USD サポートの拡張に焦点を当てたいくつかの改善が USD に追加されました。

USD ステージによる Nanite のサポート

Unreal Engine 5 の新しい Nanite 仮想化マイクロポリゴン ジオメトリ システムでは USD ステージ アクタを使用できます。これにより、数百万にも及ぶポリゴンで構成された映画品質のソース アートのインポートが可能になり、3D アーティストによるアセットの高解像度および低解像度バージョンの作成時の制限事項が取り払われます。

USD アセット向けに Nanite を有効にするには、USD ファイル内でアセットに Nanite タグを追加します。また、USD ステージの設定でしきい値を指定することでも有効にできます。

その他の USD の改善

USD のインポートとエクスポートのパイプラインは継続的に改善されており、今回のリリースにも次のような改善点が加えられました。

  • Unreal Engine は USD SDK バージョン 21.08 を使用するようになりました

  • シーケンサーでアニメーション シーケンスを USD ファイル形式でエクスポートできるようになりました

  • コンテンツ ドロワーからスタティック メッシュ アセットを USD にエクスポートできるようになりました

  • Unreal Engine のレベルに複数の USD ステージ アセットを含めることができるようになりました

デベロッパー ツール

ライブ コーディング

Unreal Engine では、 Live++ を統合した ライブ コーディング をサポートしています。これは UE 4.22 に実験的機能として導入された機能で、5.0 ではすべてのプロジェクトでデフォルトで有効になります。

ライブ コーディングでは、エンジンの実行時に、PIE (プレイ イン エディタ) モードを使用している場合であっても、C++ コードを再コンパイルしてプロジェクトのバイナリに適用できます。以前のリリースで採用されていたホット リロード システムと比べると、ライブ コーディングではイテレーション時間が大幅に向上し、柔軟性も高くなるため、ライブ コーディングがデフォルトで有効になっています。ただし、ライブ コーディングを無効にして、ホット リロードを使用することもできます。

IDE で C++ コードを編集する際は、ライブ コーディング コンソール が自動的に開きます。

image_105.png

ライブ コーディング コンソールでは、コンパイル ステータスのアウトプット ログが提供されます。これは標準的なアウトプット ログとは異なるもので、ライブ コーディングのビルド情報のみが表示されます。

IDE または Unreal Editor を使用しているときに Ctrl + Alt + F11 キーを押すことで、コードを再ビルドしてゲームのバイナリに適用できます。ビルドのステータスを示す通知が画面右下に表示されます。ビルドが実行されている間も、エディタでの作業やプロジェクトのテストを中断することなく続行できます。ビルドが実行されている間は、エディタでの作業やプロジェクトのテストを中断することなく続行できます。

image_106.png

ビルドが成功すると、コードに応じた変更が直ちに表示されます。ライブ コーディングは、Unreal Editor が開いているとき、PIE を使用しているとき、ネイティブのデスクトップ環境でパッケージ化されたビルドにアタッチされているときに機能します。コンソールやモバイル デバイスで起動した場合には機能しません。

変数のデフォルト値を変更する場合、.cpp ファイルに実装されたコンストラクタで設定した値は、オブジェクトの既存のインスタンスでは更新されないことに注意してください。ただし、これらを .h ファイル内で変更した場合は、その変更が反映されます。

ライブ コーディング自体は、値の変更や関数の調整など、比較的小さなコードの変更を簡単に処理するものです。しかし、[Object Reinstancing (オブジェクトの再インスタンス化)] が無効のまま、構造に関するより大きな規模の変更にライブ コーディングを使用すると、予期しない動作となってクラッシュする場合があります。詳細については、後述の「オブジェクトの再インスタンス化」を参照してください。

オブジェクトの再インスタンス化

オブジェクトの再インスタンス化により、ライブ コーディングまたはホット リロードによる C++ コードの再ビルド後に、オブジェクト インスタンスが再生成されます。これにより、次の UE タイプのいずれかと関連付けられているオブジェクトが影響を受けます。

  • UCLASS

  • UENUM

  • USTRUCT

  • UDELEGATE

  • UFUNCTION

これには、アクタと UObject インスタンス自体、関連する変数から派生したブループリント ノードのインスタンス、これらのマクロを使って Unreal の反射システムによって作成された他のオブジェクトが含まれます。

ホット リロードとライブ コーディングでは、オブジェクトの再インスタンス化がデフォルトで使用されます。ライブ コーディングのためにこれを無効にするには、[Editor Preferences (エディタの環境設定)] > [General (一般)] > [Live Coding (ライブ コーディング)] にある [Enable Reinstancing (再インスタンス化を有効化)] オプションをオフに切り替えます。

image_107.png

これを有効にすると、大規模なコードの変更を処理する際のライブ コーディングの安定性と一貫性が大幅に高まります。ただし、コードに再インスタンス化可能なオブジェクトへのポインタが含まれる場合、それらのポインタを更新するか、キャッシュを無効化して後に再び設定できるようにするためには、ReloadReinstancingCompleteDelegate と ReloadCompleteDelegate を使用する必要があります。ホット リロードでは、多くの場合、再インスタンス化されたオブジェクトの不適切な逆参照が許容されますが、ライブ コーディングでは、再インスタンス化されたオブジェクトのデストラクタとの競合が原因でエディタがシャットダウンされるときに、クラッシュが発生します。

Clang Sanitizer のサポート

Unreal Engine 5.0 の Unreal Build Tool では、Linux と Android 向けに Clang の サニタイザー がサポートされます。これらのサニタイザーは、C++ ソース コードをすばやく分析して、通常はランタイム時のみに検出可能な特定のタイプのエラーを見つけます。このようなエラーには、未初期化メモリへのアクセス試行や競合状態、メモリ リークが含まれます。一連の新しい UBT 引数を通じて次のサニタイザーを使用できます。

サニタイザー

UBT コマンド

説明

Address Sanitizer (ASan:アドレス サニタイザー)

-EnableASan

範囲外アクセスやメモリ リークなど、メモリ アクセスに関するさまざまな問題を検出します。

HWASan (Android のみ)

-EnableHWASan

Android 向けの ASan のハードウェア アクセラレーション バージョンです。使用メモリが 20 ~ 30% 削減されます。

Thread Sanitizer (TSan:スレッド サニタイザー) (Android には未対応)

-EnableTSan

競合状態や ADA 問題など、スレッドに関する問題を検出します。

Undefined Behavior Sanitizer (UBSan:未定義動作サニタイザー)

-EnableUBSan

範囲外エラーや整数オーバーフロー、または未初期化メモリなど、C++ で未定義の動作として認識されるものを検出します。

MinUBSan (Android のみ)

-EnableMinUBSan

Android 向けの UBSan の最小バージョンです。

Memory Sanitizer (MSan:メモリ サニタイザー) (Linux のみ)

-EnableMSan

未初期化メモリを読み取ろうとする試みを検出します。

これらを使用するには、目的のサニタイザーの UBT コマンドを使って Unreal Build Tool を実行します。これにより、最終的な実行可能ファイルで目的のサニタイザーがリンクされます。例えば、次のコマンドでは ASan がプロジェクトにリンクされます。

Build\BatchFiles\Build.bat MyGame Android Development -WaitMutex -FromMsBuild -EnableASan

その後でアプリケーションを実行すると、サニタイザーによるエラー検出出力がログに記録されます。これを Visual Studio で使用するには、プロジェクトの プロパティ を開き、[NMake] > [Build Command Line (ビルド コマンド ライン:)] に目的の引数を入力します。これにより、通常は計装されたプログラムが 2 ~ 3 倍遅くなることに注意してください。

Clang のサニタイザーの詳細については、このツールの全容について説明する「Clang のドキュメント」を参照してください。

RAD Game Tools

Bink Audio

Unreal Engine 5 に RAD Game Tools 社開発の Bink Audio コーデックが組み込まれました。Bink Audio はマルチプラットフォーム向けの、高度に最適化された、メモリ効率の高い汎用的なオーディオ エンコーディングです。Format ヘッダの下にあるシンプルなチェックボックスをオンにすることで、これを SoundWave アセットで有効にできます。

Turnkey プラットフォーム自動化システム

TurnkeyUnreal Automation Tool (UAT) に加えられた新しいシステムで、SDK のインストールやデバイスへのビルドのデプロイを含むプラットフォーム サポートを簡素化します。Turnkey は、組織内のほとんどのユーザーがワンクリックで処理できるような一般的操作のパイプラインを提供することを目的としています。

Turnkey オプションのほとんどは、Unreal Editor[Platforms] メニューに含まれています。

image_108.png

このメニューから、インストールされている SDK バージョンを確認したり、新しい SDK のインストールまたは既存の SDK の更新を行ったりできます。今後は、このメニューによって [File (ファイル)] > [Package Project (プロジェクトをパッケージ化)] オプションと [Project Launcher (プロジェクト ランチャー)] の両方が置き換えられて、Unreal Editor のすべてのビルド管理オプションが一か所にまとめられます。デバイスの発見とクレームには今までどおりデバイス マネージャーが使用されますが、[Quick Launch (クイック起動)] の各オプションによって、ビルドを特定のデバイスに迅速にデプロイできます。

Turnkey には、コマンドラインから「RunUAT.bat Turnkey」を実行することでもアクセスできます。これによってコマンドライン メニューが表示され、Turnkey のあらゆるオプションを、.bat ファイルへの初期呼び出しのパラメータとして指定できます。例えば、「RunUAT Turnkey -command=ExecuteBuild -platform=Win64」と入力すると、プロジェクトが Windows 向けにビルドされます。[Platforms] メニューの各オプションは、単に、さまざまなプラットフォームとコンフィギュレーション向けに事前にスクリプトされたコマンドです。

image_109.png

Turnkey はビルドとデバイスの管理に使用できますが、Turnkey の最も強力な機能は SDK インストールの自動化です。多くのプラットフォームでそれぞれの SDK が頻繁に更新されますが、Unreal Engine のすべてのバージョンは、リリース日に基づいた特定の SDK バージョンのみと互換性があります。デベロッパーにとっては使用すべき SDK の判断が難しくなり、特に異なる バージョンの Unreal Engine を使って複数のプロジェクトを扱っている場合はなおさらです。さらに、アップグレードについて、組織内のすべてのユーザーが常に最新の状態を維持しているかどうかも問題なります。Turnkey により、ユーザーが使用している Unreal Engine のバージョンに応じて、利用可能な SDK から最適なものを自動的にフェッチしてインストールすることで、このプロセスが簡素化されます。

この機能をデスクトップとコンソールで使用するには、組織が SDK ファイルをアクセス可能な場所でホストする必要があります。Turnkey では、これらの SDK ファイルをホストする場所として Perforce、Google Drive、またはローカル ファイル パスをサポートするため、Turnkey が参照すべき場所や、組織内で利用可能な SDK の対応プラットフォームについてのルールを設定できます。

Turnkey の設定と使用に関する詳細については、「Turnkey のドキュメント」を参照してください。モバイル プラットフォーム向けの Turnkey の機能については、後述の「モバイル向けの Turnkey サポート」を参照してください。

モバイル

開発の要件と互換性のあるハードウェア

Unreal Engine 5.0 でサポートされる OS バージョンと、モバイル デバイスのハードウェア最小要件は次のとおりです。必要な SDK と IDE の詳細については、後述の「プラットフォーム SDK アップグレード」セクションを参照してください。

iOS、iPad OS、tvOS

UE 5.0 では、SDK バージョン 14 以降をサポートし、Apple A8 プロセッサ以降を使用する iOS デバイス、iPadOS デバイス、tvOS デバイスをサポートしています。最小要件を満たす対応デバイス モデルは次のとおりです。

  • iOS 14

    • iPhone 6S 以降

    • iPod Touch 第 7 世代

  • iPadOS 14

    • iPad 第 5 世代以降

    • iPad Air 2 以降

    • iPad Mini 4 以降

    • iPad Pro (全モデル)

  • tvOS 14

    • Apple TV HD

    • Apple TV 4K (第 1 世代)

    • Apple TV 4K (第 2 世代)

Android

UE 5.0 では、次の仕様に適合した Android デバイスをサポートしています。

  • Android 8 以降

  • 64 ビット ARM ベースの CPU

  • 互換性のある GPU

    • Mali T8xx、G71、G72、G76、G77、G78、および G710 シリーズ

    • Adreno 5xx、6xx、または 7xx シリーズ

    • PowerVR GM9xxx

    • Xclipse 920

  • 互換性のあるグラフィック API

    • OpenGL ES 3.2

    • 互換性のあるドライバを含む Android 10 以降のデバイスでサポートされる Vulkan

モバイル向けの Turnkey サポート

Android SDK の設定に Turnkey を使用すると、必要なバージョンの Android Studio のダウンロードや、追加の設定ステップおよびスクリプトの実行など、ほとんどの設定ステップが Turnkey によって自動化されます。それでもインストール ウィザードを手動で実行する必要はあるものの、これによってエラーのリスクが大幅に軽減されます。SDK を手動で設定することも可能ですが、このプロセスが推奨されます。

現時点で Turnkey は Android 向けの macOSX では利用できませんが、今後のリリースでサポートされる予定です。

iOS、tvOS、iPadOS のプロビジョニングは厳格に制御されているため、Turnkey では現時点で iOS の自動プロビジョニング設定はサポートしていません。ただし、Xcode セットアップと SDK チェックはサポートされます。

Android File Server プラグイン

ビルド作成時にファイル サーバーをプロジェクトに埋め込む Android File Server (AFS) プラグインが UE 5.0 に導入されました。シッピング ビルドではこの埋め込みがデフォルトで無効になっています。デバイスの AFS インスタンスを操作することで、次のことを実行できます。

  • ファイルを WiFi または USB 経由でプッシュするか、同時に両方を使用してインストールを高速化する

  • 完全なビルドをプッシュすることなく、コマンドライン テキスト ファイルを変更する

  • デバイス上のあらゆるテキスト ファイルのコンテンツを表示する

  • ADB で可能なその他のさまざまな操作を実行する

AFS により、外部ストレージの許可や制限のあるストレージを必要とせずに、ファイルに対する操作を実行できます。AFS はデフォルトで有効に設定されていますが、代わりに ADB を使用したい場合などは、[Project Settings] > [Plugins] > [AndroidFileServer] から AFS を無効にできます。

image_110.png

このプラグインが有効な場合、開発およびデバッグの各ビルドでは、AFS を使ってファイルを Android デバイスにプッシュします。USB 接続を使用するか、WiFi 経由でローカル エリア ネットワークに接続されたデバイスにプッシュできます。デプロイメントをより迅速に行うには、[USB and Network Combined (USB とネットワークの併用)]を使ってファイルを両方の方法で同時にプッシュできます。ファイルの転送でいずれかの接続が占有された状態になると、もう一方の接続で処理が継続されます。これはデプロイメント プロセスの一部として統合されています。

また、AFS には独自のコマンドライン ツールが含まれています。これは、エンジンのインストール ディレクトリ内の「Engine/Binaries/DotNET/Android/UnrealAndroidFileTool」にあります。このディレクトリには、Linux、MacOS、そして Windows 用のさまざまなバージョンの実行可能ファイルが含まれています。

image_111.png

コマンドラインを介してこの実行可能ファイルを実行する際は、利用可能なすべての機能がメニューに表示されます。

image_112.png

パラメータを持ついくつかのコマンドとともにヘルプ コマンドを入力すると、そのコマンドに関するより多くの情報が出力されます。

ライブラリを使用すると、Unreal アプリケーション内から AFS を開始および停止できます。

image_113.png

AFS には、プロジェクト用に生成された固有のセキュリティ トークン ([Project Settings] > [Security Token (セキュリティ トークン)]) を使った基本的なセキュリティが装備されていますが、このように制御することで、デフォルトのブロードキャスト レシーバーを使った場合と比べて、AFS の開始と停止に関するセキュリティを強化することができます。

Android File Server には Android SDK 26 以降が必要なことに注意してください。

Android バイナリ サイズの改善点

UE 5.0 には、Android アプリケーションのバイナリ サイズを大幅に削減する数多くの最適化が導入されました。これには、デッド コード削除、同一コードの折りたたみ、コード膨張のクリーンアップを有効にするコンパイラとリンカのフラグが含まれます。これらの最適化機能により、「Fortnite」ではバイナリ サイズをおよそ 50% 削減できました。さらに、これらのによってコードを多少ですがより効率的なものにできます。

また、一連の高度なバイナリ最適化機能もありますが、これらは手動で有効にする必要があり、少なくとも Android SDK バージョン 23 以降のみで有効です。

最小 SDK バージョンは「*Engine.ini」ファイルで変更できます。

    [/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
    MinSDKVersion=23

高度な最適化機能を有効にするには、次の設定を追加します。

    [/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
    bEnableAdvancedBinaryCompression = true

少なくとも SDK バージョン 23 以降を使用するプロジェクトでは、以前の形式の代わりに、パフォーマンスを向上して起動時間を短縮する新しい GNU Hash ELF セクションを使用します。それに加えて、プロジェクトで Android 特有の圧縮形式である APS リロケーション テーブル圧縮のメリットを得ることもできます。たとえば、当社のテストでは、サイズが 62 MB のリロケーション テーブルが約 8 MB に削減されました。

少なくとも SDK バージョン 28 以降を使用するプロジェクトでは、APS よりもさらに効率的な RELR リロケーション テーブル圧縮 のメリットを活用できます。例えば、62 MB のテーブルはおよそ 600 KB になり、2 桁分削減されます。

MinSDKVersion を 23 以降にアップグレードすることで、別のメリットを得ることもできます。Andoroid OS でアプリケーションの APK から .so バイナリを直接ロードできるようになり、これらをデバイスごとにアンパックしてインストールする手間が省けます。

Google Play ストアでシッピングされるプロジェクトでも、ユーザーがアプリをダウンロードする際に、より優れた APK 圧縮をオンザフライで利用できるというメリットを得ることができます。ただし、他のアプリ ストアではこのメリットは保証されません。Unreal Engine ではデフォルトで APK 圧縮を実行します。これを無効にするには、次のコンフィグ変数を使用します。

    [/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
    bExtractNativeLibs = false

Vulkan および GLES 3.2 のデフォルト シェーダー コンパイラとして DXC を採用

UE5 では、Vulkan および OpenGL ES3.2 のシェーダ コンパイラ ツールチェインが HLSLcc から Microsoft の DirectX Shader Compiler (DXC) に変更されました。このコンパイラでは SPIR-V を直接生成し、パフォーマンスを向上するための GLSL ハイレベル ソースを生成する必要はありません。また、SPIRV-Tools 最適化パスを使って効率的な SPIR-V コードを作成します。また、DXC では最新の HLSL 言語機能へのアクセスも提供されるため、Microsoft、Google、AMD などのデベロッパーも含め、膨大なオンライン コミュニティからのサポートを活用することができます。

Vulkan については、UE 5.0 で使用できるシェーダー コンパイラは DXC のみです。HLSLcc コンパイラは Vulkan バックエンドから完全に取り除かれて、使用できなくなりました。

OpenGL ES3.2 については、HLSLcc をフォールバックとして使用できます。エミュレートしたユニフォーム バッファが無効になった場合には、これが OpenGL ES をサポートする唯一の手段となります。

モバイルでのレンダリングの改善

UE 5.0 のモバイル レンダリング パイプラインで、次のレンダリング機能が使用可能になりました。

事前統合されたサブサーフェス スキャタリング シェーディング モデル (ベータ)

image_114.png

左から右:SSS なし、PC で SSS が有効、モバイルで SSS が有効

モバイル フォワード レンダラで サブサーフェス プロファイル シェーディング モデルをサポートするようになりました。これにより、モバイル アプリケーションでスキンやワックス、プラスチックなどのマテリアルをより詳細に、精度の高いライティングで表現できるようになります。ディフュージョン プロファイルは、効率を高めるためにルックアップ テーブルに事前統合されました。これはランタイム時に調整可能です。モバイル サブサーフェス モデルには曲率マップが必要ですが、それを除けば、デスクトップおよびコンソールのサブサーフェス プロファイルで使用されるすべてのパラメータと互換性があります。

ディスタンス フィールド シャドウのサポート (実験的機能)

image_115.png

UE 5.0 のモバイル レンダラには ディスタンス フィールド シャドウ に対するサポートが含まれています。動的ライティングを使用するモバイル プロジェクトでこの機能を有効にすると、Cascade シャドウ マップにディスタンス フィールド シャドウが適用されます。Cascade シャドウ マップはカメラに近接したオブジェクトにシャドウを提供し、ディスタンス フィールド シャドウではカメラから離れた距離のシャドウを提供するため、動的ライティングを使用し、Cascade シャドウ マップで対応可能な距離よりも離れた場所でシャドウをレンダリングする必要のあるゲームに有用です。

ディスタンス フィールド シャドウは、ほとんどのモバイル ハードウェアで実験段階にある機能です。これを使用するには、まず Engine/Config/Android または Engine/Config/IOS にある「DataDrivenPlatform.ini」ファイルを見つけます。次に、ターゲット プラットフォームに適切な「ShaderPlatform ...」セクションで bSupportsMobileDistanceField、bSupportsDistanceFields、bSupportsByteBufferComputeShaders を「True」に設定し、r.DistanceFieldShadowing を「1」に設定します。その後、レベル内の光源でディスタンス フィールド シャドウを有効にします。

ディスタンス フィールド シャドウには深度プリパスが必要ですが、これによってドローコールの数がおよそ 2 倍になることに注意してください。これによってモバイル ゲームのパフォーマンスに深刻な影響を及ぼす可能性があるため、これをゲームで使用することを決定する前に、必ずターゲット ハードウェアでパフォーマンス テストを行ってください。

モバイルのパフォーマンスの改善点

UE 5.0 では、レンダリング パス中のドローコール数と計算を削減することに焦点を置いてモバイル レンダリング パイプラインが改善されました。

Cascade シャドウ マップのキャッシュ (実験的機能)

動的ライティングに大きく依存するラージ ワールドでは、離れた描画距離にある、潜在的に数百にも及ぶスタティック メッシュに対して動的シャドウが必要になるため、レンダリング パフォーマンスの負荷が非常に高くなる場合があります。特にモバイル デバイスでは、このような状況を避けなければなりません。Unreal Engine 5.0 には Cascade シャドウ マップ (CSM) のキャッシングのためのシステムが備わっており、これによってドローコールの数が削減されて、このような環境におけるパフォーマンスが潜在的に向上します。この機能を使用するには、[Project Settings] メニューから [Enable CSM Caching (CSM キャッシュの有効化)] の設定を有効にして、Unreal Editor を再起動します。

これは実験段階の機能であり、パフォーマンスの向上を保証するものではありません。CSM キャッシュではドローコールの数が削減されますが、帯域幅コストを高めるシャドウ マップ コピー パスも追加されます。デベロッパーはターゲット ハードウェア上で比較を行い、CSM キャッシュがプロジェクトに有益かどうかを判断する必要があります。

SkinCache

モバイル プロジェクトで SkinCache がサポートされるようになりました。これは、スケルタル メッシュのスキニングをフレームの開始時に一度だけ事前計算し、その計算を同じフレーム内の別のレンダリング パスに再度使用するものです。これにより、多数のスケルタル メッシュを使用するモバイル プロジェクトのパフォーマンスが顕著に向上する可能性があります。

SkinCache は、すべてのプラットフォームでデフォルトで無効になっています。これを有効にするには、[Project Settings] の [Support Compute Skin Cache (スキン キャッシュの計算をサポート)] を有効にします。

GPU シーン インスタンス化とカリング

UE 5.0 では、モバイル上での動的インスタンス化と GPU インスタンス カリングが改善されました。GPU シーン インスタンス化とカリングによってプロジェクトのドローコール数を大幅に削減できるため、レンダリング パフォーマンスの向上につながります。効率上のメリットは、プロジェクトのコンテンツによって異なります。この機能を有効にすることで最もメリットを得られるのは、同じマテリアルのメッシュを多数使用するプロジェクトです。

GPU シーン インスタンス化とカリングを有効にするには、「DefaultEngine.ini」ファイルを開いて「/Script/Engine.RendererSettings」カテゴリを見つけるか追加して、「r.Mobile.SupportGPUScene=1」を追加します。

XR

可変レート シェーディングのための Vulkan サポート

可変レート シェーディング (VRS) とは、レンダリング ターゲットにおけるピクセルのシェーディング レートを調整するためのさまざまな方法を提供する新型 GPU でサポートされる機能です。

Unreal Engine には、VRS に対する次のサポートが含まれています。

  • DirectX 12 と VRS Tier 2 サポートを搭載した Windows デバイス

  • Vulkan および VK_KHR_fragment_shading_rate 拡張サポートを搭載した Windoes デバイス

  • Vulkan および VK_EXT_fragment_density_map 拡張サポートを備えた Oculus Quest

VR テンプレートのアップデート

今回のリリースでは、VR テンプレートを次の機能で改善しました。

  • VR ポーンにヘッドマウント ディスプレイ モデルが加わりました。

  • Grab システムで Component Grab と Drop がサポートされるようになりました。

  • ゲームパッドを使って VRSpectator を制御できるようになりました。

Datasmith

Unreal Engine 5 の Unreal Editor に Datasmith Direct Link のサポートが追加されました。これにより、Direct Link を使用して、外部のデザイン アプリケーション (Revit、Rhino、Archicad、または Direct Link によって Datasmith をサポートするその他のデザイン アプリケーション) でシーンに加えられた変更を Unreal Editor でリアルタイムで可視化できます。

この機能によりワークフローが合理化されて、時間のかかるエクスポートや再インポートが必要なくなるため、その分の時間を優れたアーキテクチャ ビジュアライゼーションの制作に費やすことができます。

Direct Link の動作は、次の点で Datasmith ファイルのインポート/再インポートのワークフローに似ています。

  • *.udatasmith ファイルにあるものと同じアセット タイプ (マテリアル、スタティック メッシュ、ライト、カメラなど) を作成する

  • 未使用のアセットがデザイン アプリケーションから削除された場合でも、そのアセットをパージしない

  • メタデータをサポートする

  • アクタおよびアセットでの Datasmith オーバーライドをサポートする

データ形式

glTF ファイルの Unreal Engine へのインポートに対するサポートが引き続き改善されています。今回のリリースでは、次の PBR スキーマ向けのサポートを glTF Importer プラグインに加えました。

  • Clearcoat

  • IOR

  • Sheen

  • Specular

Datasmith CAD インポートが大幅に更新されました。Unreal Engine の以前のバージョンと比べると、ユーザー インターフェースとワークフローはほぼ同じですが、インポートの結果は異なります。

JT ファイル内で、パラメトリック データまたはメッシュをインポートするかどうかを指定できるようになりました。これにより、柔軟性が大幅に高まり、Unreal Engine にインポートするデータをより細かく制御できるようになります。

このオプションは、ds.CADTranslator.PreferJtFileEmbeddedTessellation コンソール変数を介して公開されます。

ヒールとソーのステッチング技法のスティッチ許容範囲を変更するには、ds.CADTranslator.SitchingTolerance コンソール変数を使用します。この値は Unreal 単位です。

Solidworks

Datasmith を使って SolidWorks から Unreal Engine にエクスポートできる機能の範囲を拡大しました。これにより、SolidWorks プロジェクトを *.udatasmith ファイルにエクスポートする際の忠実度が向上します。

Unreal Engine 5 には、次の SolidWorks 機能をエクスポートするためのサポートが追加されました。

  • SolidWorks で作成したアニメーションをレベル シーケンスとしてインポートできるようになりました

  • コンフィギュレーションをレベル バリアント セットとしてインポートできるようになりました

Revit

今回のリリースでは、Revit から *.udatasmith ファイルに、または Direct Link を介してエクスポートするデータに対するユーザー制御が改善されました。これにより、Revit シーンのインポート/再インポート後に、手動で調整を行って不要なデータとアセットを Unreal プロジェクトから取り除く必要がなくなります。

また、次の追加オプションを設定できるようになりました。

  • Metadata Filtering (メタデータ フィルタリング):エクスポートするメタデータを指定します。

  • Level of Tessellation (テッセレーションのレベル)Revit API の定義に従って、Revit によるメッシュの作成時に使用するテッセレーションのレベルを指定します。

ニューラル ネットワーク推論

Neural Network Inference (NNI) プラグインは、Unreal Engine 内でニューラル ネットワークをリアルタイムで評価する際に使用する新しいプラグインです。このプラグインでは、非常に高解像度の頂点オフセット データを ML ネットワークを介して圧縮し、リアルタイムで再生することを可能にする、機械学習ベースの ML デフォーマ システムなどの機能が提供されます。このシステムは、アニメーション、ML ベースの AI、カメラ トラッキングなど、開発課題の解決に向けた多くの ML ベースのアプローチの基礎となるものです。

NNI は業界標準の ONNX モデル形式をサポートし、標準的な ML トレーニング フレームワーク (PyTorch、TensorFlow、MXNet など) から ONNX としてエクスポートされるあらゆるモデルを実行できます。これにより、ユーザーは ML モデルをあらゆる場所から取り入れて、エンジンで直接実行することができます。当社のチームは Microsoft との緊密なコラボレーションを通じて、Microsoft の ONNX Runtime プロジェクトを NNI プラグインの推論システムの中核として使用しました。

このプラグインの初期バージョンでは、CPU 推論を PC (Windows/Linux/Mac) とコンソール (PS5/Xbox Series X) でサポートしています。現時点で、GPU 評価は DirectX 12 を搭載した Windows のみでサポートされています。

プラットフォーム SDK のアップグレード

Unreal Engine のリリースでは毎回、プラットフォーム パートナーからリリースされた最新の SDK をサポートするように Unreal Engine を更新しています。

image_116.png

  • Windows

    • Visual Studio 2019 v16.11.5

    • Windows SDK 10.0.18362

    • .NET 4.6.2 Targeting Pack

    • .NET Core 3.1 Runtime

  • IDE バージョン ビルド ファームのコンパイル対象

    • Visual Studio - Visual Studio 2019 v16.11.5 ツールチェーン (14.16.27023) と Windows 10 SDK (10.0.18362.0)

    • Xcode - Xcode 12.4

  • GDK

    • Windows SDK:10.0.19041.0

    • GDK:October 2021 Update 1

    • ファームウェア バージョン:Recovery November 2021 10.0.22000.3055

    • サポートされている IDE:Visual Studio 2019

  • Android

    • Android Studio 4.0

    • Android NDK r21e

    • Minimum Android SDK 23

    • Android SDK 26 (Android 8.0) - Android File Server を使用する場合

  • ARCore

    • 1.22

  • ARKit

    • 4.0

  • Linux "SDK" (クロスツールチェーン)

    • v19 clang-11.0.1-based (CentOS 7)

  • Oculus

    • 33.0

  • OpenXR

    • 1.0.22

  • Google Stadia

    • 1.71.0.24334

  • Steam

    • 1.47

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 13.3.0 + (任意) NEX 4.6.6

    • 最小ファームウェア バージョン:13.2.1

    • Nintendo Dev Interface 2.5.4

    • サポートされている IDE:Visual Studio 2019

  • PS4

    • Orbis SDK 9.008.001

    • システム ソフトウェア:

      • 9.030.001

      • 9.040.001

    • サポートされている IDE:Visual Studio 2019

  • PS5

    • Prospero SDK 4.00.00.31

    • システム ソフトウェア:

      • 4.50.00.05

      • 4.51.00.01

    • サポートされている IDE:Visual Studio 2019

  • macOS

    • 推奨要件

      • 最新版の macOS Monterey、最新版の Xcode 13

    • サポート対象

      • macOS Big Sur 11.6.4

    • 最小要件

      • macOS Catalina 10.15.7, Xcode 12.4

    • マシン アーキテクチャ ノート

      • macOS ターゲット用のネイティブ Apple Silicon の予備サポートが追加されました

      • 一部の SDK にはまだ ARM64 スライスが含まれていません (例:Steam、Vivox)

  • iOS / tvOS / iPadOS

    • 推奨要件

      • 最新版の Xcode 13

    • 最小要件

      • Xcode 12.4.iOS 15 デバイスでローカルにテストするには Xcode 13 が必要であることに注意してください。

    • サポートされるターゲット SDK バージョン:iOS 14 以降

アップグレード ノート

物理

  • PhysX は UE5 ではサポート対象の物理バックエンドではなくなりました。さらに UE5 では、UE4 PhysXVehicles と ApexDestruction との後方互換性がサポートのない新しい車両システムと破壊システムが提供されます。

XR

  • Magic Leap プラグインは Unreal Engine 5 には含まれていません。Unreal プロジェクトで Magic Leap デバイスをターゲットにしている場合は、引き続き Unreal Engine 4.27 をご利用になることをお勧めします。

  • HoloLens プラグインとそのすべての機能は Unreal Engine 5 に完全に統合されました。このため、HoloLens プラグインは不要になり、これをプロジェクトに追加することもできなくなりました。HoloLens プラグインを使用する既存のプロジェクトがある場合は、UE5 へのアップグレード後に初めてそのプロジェクトを開いた際に、このプラグインのコンフィグ データを削除するよう Unreal Engine 5.0 に促されます。

リリース ノート

AI

Improvement:

  • Added the option to ignore actors that do not implement the IGameplayTagAssetInterface when performing an EQS query with EnvQueryTest_GameplayTags. These ignored actors will not be included in the filter or score operations.

  • Added an option to EnvQueryGenerator_PerceivedActors to control whether all actors known to the AIPerceptionComponent will be gathered or only the ones actively being perceived.

Bug Fix:

  • Fixed an issue where an EQS query instance was using an incorrect EQS query asset that had the same name as the intended asset. This resulted in the query using an asset with an incorrect location.

  • Added an additional check to the Environment Query Manager to check for a valid Blackboard component if the dynamic parameter is configured to read from a blackboard.

  • Fixed an issue where running an EQS query that resulted in all items being filtered out was sometimes flagged as successful.

  • Fixed an issue where EQS contexts created in Blueprints could sometimes retrieve null actors or invalid locations via the ProvideContext call.

Behavior Tree

New:

  • When using the Behavior Tree interface to create a new Task / Behavior / Service asset, the user can now choose the location and filename of the new asset, instead of having to rename the auto-generated one after creation.

  • Added a new parameter to the Run EQS Query task called "Update BB on Fail."

    • If enabled, this parameter will clear out the indicated blackboard entry if the EQS query fails.

    • This setting is enabled by default and can be changed via Project Settings > AI System > Clear BBEntry On BTEQSFail.

Debugging Tools

New:

  • Added filter volume support to the Visual Logger.

  • Added a log category that shows when a dirty area is affecting one or more Navmesh tiles. This shows you how many tiles on a navigation mesh are being dirtied and who are the biggest offenders.

  • Added a way to change the font size used by the Gameplay Debugger via the console variable, gdt.fontsize. The value specified will get stored in the user's .ini files.

New:

  • Added an optional feature to the Navmesh Data called "Use Virtual Geometry Filtering And Dirtying."

    • This feature uses virtual methods to check if an actor needs to be added to the navmesh (providing the ability to create custom logic on extended navmesh classes)

    • This change also prevents dirtying navigation areas that have been requested by an actor that is not on the navigation mesh.

  • FRecastTileGenerator::ApplyVoxelFilter is now a virtual function.

  • Switched NavMesh to use Oodle compression (bias for size in editor, bias for speed in standalone).

Improvement:

  • Reduced the memory footprint of the Navigation Mesh by using smaller data types when possible, fixing struct alignment to reduce padding, and factoring out settings that were unnecessarily included in each dtMeshHeader.

  • Added support for Large World Coordinates (LWC) to Navigation Modifiers.

  • Added support for Large World Coordinates (LWC) to Recast and Detour Crowd Manager.

  • Added support for Large World Coordinates (LWC) to navigation mesh serialization as either floats or doubles. This is achieved by serializing as doubles in either case.

Bug Fix:

  • Fixed an issue where the navigation mesh was not generating correctly when the NavMeshBoundsVolume was placed perfectly flat on the floor surface.

  • Added a safety check when loading a navigation mesh to check if code referencing an older version of the navigation mesh attempts to load a newer version of the navigation mesh.

  • Fixed an issue where the navigation mesh was being unnecessarily rebuilt based on the number of bits required to store maxTiles.

  • Fixed an issue where the Navigation System would rebuild the navigation mesh during OnWorldInitDone for DynamicModifiersOnly navigation if the AutoGenerateNavigationData was disabled.

  • Fixed incorrect uncompressed buffer size passed by DetourTileCacheBuilder to calculate maximum compressed size.

Animation

New:

  • Added UAnimDistanceMatchingLibrary, which exposes Anim Node functions for driving animations based on distance.

  • Added UAnimCharacterMovementLibrary, which exposes functions for predicting where a character will stop or pivot. This is used as input to the distance matching functions.

  • Added UDistanceCurveModifier, which is an Animation Modifier that generates curves used for distance matching library functions. The modifier generates the distance curve based on root motion information from the animation.

  • Added SyncMarkerAnimModifier, which is a Blueprint Animation Modifier included with the Animation Locomotion Library. It provides an example of how to generate Animation Sync Markers automatically.

  • Added a Python Command Log tool in Control Rig for printing of equivalent Python commands when performing actions in the Control Rig Editor.

  • Added Control Rig Spline plugin, which enables the creation of Spline-based controls in Control Rig.

  • Added example Control Rig Context Menu commands written in Python: Add Null Above Selected, Add Controls For Selected, and Alignment tool.

  • Added Copy Python Script button in Control Rig Class Settings which copies the entire Control Rig to Python in order to replicate a Control Rig.

  • Using the Shift + Delete shortcut retains node connectivity in Control Rig to be consistent with the Blueprint functionality.

  • You can now toggle the effector transform on the FABRIK node in Control Rig. This addition aligns with how the FABRIK AnimGraph node works.

  • Motion Warping is a new experimental plugin which allows you to dynamically adjust root motion to align to targets.

  • SkeletalMerging is a new plugin which exposes Skeletal Mesh merging to Blueprints, and adds SkeletonMerging functionality which allows for merging of Skeletons.

  • Added support for importing Animation Transform Attributes from FBX by name(-matching) nodes within the FBX scene.

  • Project specific scriptability UFunctions were ported to the Engine.

    • SetPreviewSkeletalMesh was exposed to Blueprint and Python for Animation Blueprints and AnimationAsset derived classes.

    • Added (script exposed) functionality to retrieve UAnimationGraphs and UAnimationGraphNodes of a specific class from UAnimBlueprint and UAnimationGraph respectively.

    • Added (script exposed) functionality for populating and updating a PoseDrive node and PoseAsset.

  • Added a normalization trait/concept for animation attributes, allowing for user-defined normalization functionality after accumulation/blending operations. Normalization for the Transform animation attribute was implemented.

  • Added non-blendable versions of TransformAnimationAttribute, FloatAnimationAttribute, and IntegerAnimationAttribute.

  • Added a Get with validity checking for Animation Curves.

  • An asset registry tag "SkinWeightProfiles" was added to the SkeletalMesh asset to make it discoverable and searchable in the Editor.

  • Multiple UV channels are now supported when CPU skinning a Skeletal Mesh.

  • Added project settings that allow for defining a default set of AnimModifiers to be added to any imported AnimSequence. A new flag was added to state whether or not modifiers should be automatically applied during (re)import.

  • Added GUID to PoseAsset to track it against the Source Animation, and prompt the user if it has become out-of-date, which happens when the Animation Sequence is changed or reimported. The UX was improved for PoseAsset in the details panel.

  • Added USkinnedMeshComponent::GetRefPoseTransform.

  • GetBlendProfile is now exposed to Blueprints. This can be accessed with MontagePlay/Stop_WithBlendSettings.

  • Control Rig was promoted from beta and is now production ready.

Improvement:

  • You can now copy and paste Control Rig shape properties.

  • Moved animation asset browser context menu to UToolsMenu API.

  • Replaced Animation Recording sampling rate with FFrameRate to improve UX and integrate better with AnimDataModel.

  • Various improvements were made to Animation Attribute bone index mapping.

    • Introduced FMeshAttributeContainer which stores the attributes according to FMeshPoseIndex.

    • Added FinalizeAttributeEvaluationResults to SkeletalMeshComponent. This remaps the evaluated compact-pose indexed attributes to mesh-indices.

    • Added CopyFrom template to AttributeContainer for different bone index types.

    • Ensured that attributes are only inserted during evaluation if its bone index is present in the required bones

    • Added engine-level testing for remapping between LODs with removed bones, and remapping between Skeletal meshes with different skeleton hierarchies.

Crash Fix:

  • Fixed a crash that occurred when opening Mirror Data Tables.

  • Fixed a crash that occurred while applying multiple Anim Modifiers.

  • Fixed a crash that occurred when selecting 'Frame from this animation' as the Base Pose Type for an animation sequence containing animation attributes.

Bug Fix:

  • Fixed interp alpha value calculation in AnimationBudgetAllocator so it is 1 instead of 0.5 when the tick rate is 1.

  • Fixed bug that caused sync markers generated by UAnimationBlueprintLibrary::AddAnimationSyncMarker to have an invalid GUID, which would cause all sync markers to be deleted when one was deleted.

  • Expanded the list of regular expressions used to match mirrored bones to ensure the UE5 Mannequin mirrors correctly.

  • Fixed an issue with sync mirroring on blend spaces.

  • Skeletal Mesh errors now print out the path name of the component rather than just the name. This fix means you can see what Actor instance, and class, owns the component rather than the generic name StaticMesh0.

  • Fixed an issue with the mirror node that could result in incorrect behavior when the node was evaluated with identical bone counts but different bone indices.

  • Undoing a remove row operation in the Mirror Data Table now restores the location of the row.

  • You can now use WasAnimNotify functions with Linked Anim Layers.

  • Added a cache of active skeletal mesh thumbnails scenes (similar to class/blueprint thumbnail rendering) to prevent out-of-memory crashes.

  • Removed GetResourceSizeEx from UMorphTarget and FMorphTargetLODModel, as this functionality has been superseded by counting memory through UMorphTarget::Serialize.

  • Fixed a typo in SkeletalMeshComponent.h.

  • Fixed incorrect results generated when evaluating compressed Animation Curves containing user-weighted tangent data.

  • Implemented changes to ensure that the CPU access flag is correctly inherited when generating a SkinWeight buffer for alternative skin weight profile(s).

  • Fixed a bug in which CTRL+Z and CTRL+Y would not undo/redo modifications to Additional Meshes.

  • Fixed an issue with the behavior of the DoesBoneName function from AnimationBlueprintLibrary.

  • Anim runtime methods were re-exposed to the Engine API.

  • Made changes to ensure that users cannot generate Blend Profile names with invalid characters, as this name is used to generate a UObject.

  • Switched FAnimNode_TransitionPoseEvaluator to use heap-based Animation Attribute container rather than stack-based.

  • Fixed a bug where deleting one generated sync marker would cause all of the sync markers to be deleted.

Deprecated:

  • Deprecated the Verlet Control Rig node in favor of the Spring Interpolate node.

  • Removed the Copy to SoundWave menu option.

Removed:

  • Removed the recording state from the Play button in transport controls for the Animation Editor(s). This fixed an issue with the play button being shown as a pause button while recording animation in Control Rig.

Animation Assets

New:

  • Added virtual bone support to blend profiles and blend masks.

  • Added alpha lerping to the Modify Curve Animation Blueprint node when setting Apply Mode to a non-blend value.

  • Added Maximum Duration Seconds and Sample Frame Rate options when recording animations in the Animation Sequence Editor.

  • Multiple montages can now be synchronized in Animation Blueprints using the Montage SyncFollow and Montage Sync Stop Following nodes.

  • Added 'Selected and Children' and 'Selected and Parents and Children' Bone drawing modes in the Animation Editor viewport menu.

  • Added a Blend Profile mode selection to the Blend profile picker.

  • Added an option to the Blend profile picker for blend mask creation.

  • Added a blend mask mode to the layered blend per bone node. Blend masks can be used to specify per-bone weights in a skeleton hierarchy.

Improvement:

  • Pose Search Databases now support root motion extrapolation so animation sequences can be used from start to finish without the need to add lead-in or follow-up sequences. The system will extrapolate the root motion velocity to generate an estimate of the root motion beyond the limits of the main sequence.

  • Added Extrapolation parameters to PoseSearchDatabase.

  • Changed the sorting in the skeleton tree so that it is alphabetical, while still maintaining the hierarchy.

  • Optimized USkeletalMeshComponent::ComputeRequiredBones().

  • Selecting Meshes and Bones is now better handled in the Animation Editor Viewport. Now when selecting, it will take into account bone visibility and cursor position to properly select either bones or meshes.

  • Section Selection toolbar button is now removed as it is now no longer needed due to selection improvements.

Crash Fix:

  • Fixed a crash when a Skeletal Mesh was referencing a deleted skeleton.

Bug Fix:

  • Fixed Show All Sections not correctly restoring all sections after filtering cloth views in the Animation Editor viewport

  • Fixed virtual bone skeleton tree item not also selecting when a virtual bone is selected in the viewport.

  • Fixed font not found warning spam when a virtual bone skeleton tree item is selected.

  • Fixed virtual bone name not showing when selected in viewport.

  • Fixed parity of virtual bone name text shadows.

  • Fixed skeleton tree undo and redo and sync when editing sockets.

  • Creating an Anim Curve on an animation sequence timeline that shares the same name as an already created curve will now reference that same curve, instead of doing nothing.

  • 'Reset Columns' now correctly works in the Animation Editor asset browser.

  • Fix for animation recorder manager not correctly stopping when reaching the Maximum Duration limit.

  • You can now drag and drop multiple Sequences onto a Montage timeline.

  • Fixed an issue with the Blend profile picker sometimes showing in a non-standalone mode outside of the skeleton editor.

  • Fixed a bug with reset to default with blend profiles.

Animation Blueprints

New:

  • Generated node array properties are now marked as Blueprint visible so they can be exposed through generic FOptionalPinManager-driven nodes. Now arrays are not needlessly exposed and can be handled with struct member get-by-ref calls rather than struct member sets.

  • Added State Machine common helper Functions for use in the AnimGraph: Convert to Animation State and Is State Blending In / Out.

  • Added the Pose Watch Manager to track active pose watches in Animation Blueprints

  • Debug visualization can now be displayed simultaneously for all selected nodes in the Animation Graph Editor viewport.

  • Added the ability to tag and reference by tag any anim graph node using the new Tag property.

  • Anim graph nodes will now display their tags in the bottom-right corner.

  • UAnimGraphNode_BlendListBase is now exposed to exported API.

  • New functions have been added for evaluating timecode attributes on the root bone in an anim sequence.

  • "TCHour", "TCMinute", "TCSecond", "TCFrame", "TCSubframe", and "TCRate" can now be used as bone attributes on the root bone to pass timecode information through an animation sequence.

  • Added the EvaluateRootBoneTimecodeAttributesAtTime() function, which can be used to evaluate root bone timecode attributes at a particular time.

  • Added support for parsing the timecode rate as a string into the FFrameRate it represents, and accounts for the use of drop frame timecode rates (with either "29.97df" for NTSC_30 or "59.94df" for NTSC_60 frame rates).

  • Added function library support for member reference customizations and anim node functions

  • Exposed CreateNodeFunctionsWidget on anim graph node widget so that non-derived types can use it.

  • Added node function specific library for skeletal controls.

  • Added pure conversion functions for Animation Blueprint node references.

  • Added an indicator of whether node properties are dynamic in the property access binding menu.

  • You can now use the transform manipulator in the Animation Blueprint Viewport when manipulating skeletal control nodes values

  • The Animation Blueprint now shows an empty mirror node on the right-click menu when a compatible Mirror Data Table does not exist.

  • Anim Composites now appear in the Anim Blueprint context menu.

  • Added Anim Node library functions for sequence players and evaluators.

  • You can enable Anim Blueprints to show pin inspection tooltips.

Improvement:

  • Doubling clicking a pose watch in the pose watch manager will now frame the node in Animation Blueprints.

  • The Gravity Override parameter in the Anim Dynamics node can now be defined in world space.

  • Conduits in State Machines can now be used as entry states.

  • The compiler will now produce a warning when using experimental AnimGraph nodes.

  • Animation Blueprints now support debugging of post-process blueprints.

  • State machines now have updated iconography.

  • Child anim blueprints can now be used as the default instance class in Linked Anim Layers.

  • Improved appearance of node-specific visuals for certain anim graph nodes.

  • Improved debugging and error reporting of node-specific visuals for certain anim graph nodes.

  • Improved pin sorting for Anim Nodes.

  • Improved the Linked Anim Graph with node customizations such as node color, tooltip, and title, and allowing property access bindings.

  • There's now a warning when an incompatible Post Process Anim Blueprint is applied to a Skeletal Mesh.

  • Improved performance of Animation Blueprints when displaying large graphs.

  • Optimized building reference and identity poses by avoiding excessive inner branching when setting a compact pose to a reference pose, and avoiding setting scale twice when resetting a transform to additive identity.

  • Optimized property access runtime by caching the return value property, and no longer using a mem stack allocator but instead an inline-allocated array of bytes and manually aligning the base pointer.

  • Previously a large shared pointer destruction chain occurred when resetting tick records each frame. To reduce tick record context data overheads, individual shared pointers to context data were switched to unique pointers, while allowing shared ownership and holding a shared pointer to the entire array.

Crash Fix:

  • Fixed crash when editing Call Sites on Property Access nodes used in the Animation Blueprint Event Graph.

  • Fixed crash when compiling an Animation Blueprint with all bones hidden.

  • Fixed crash with out of bounds skeleton bone indices.

  • Fixed crash when dragging a sequence player into a Template Animation Blueprint.

  • Fixed crash when compiling on load anim graphs that contained null nodes.

  • Fixed SVisibilityWidget crashing on Linux when opening the Pose Watch Manager.

  • Fixed crash when using details panel to edit multiple blend weights on a single node.

  • Fixed crash when copy, pasting, and compiling various animation nodes.

  • Fixed crash when cooking child Animation Blueprints.

  • Fixed crash when right-clicking a child asset of a template animation blueprint that has no skeleton.

  • Previously older Anim Blueprint generated classes, on first load, could contain out-of-date node type layout tables, and were unusable unless they were patched up with compile-on-load. Now non-compile-on-load paths successfully load these Anim Blueprints, although they cannot be used.

  • Fixed the crash that occurs when compiling an Anim Blueprint with an empty state machine.

  • Fixed the post-compilation crash that occurs when using the Call Function Anim Nodes.

  • Fixed an occasional crash that occurs when performing an undo while the Slot Names Editor is open.

  • Child Anim Blueprints that use Blendspace Graphs no longer reference null blendspaces.

  • Fixed a crash that occurs when selecting a Linked Anim Layer class.

  • Fixed a crash that occurs while compiling child Anim Blueprints that weren't properly initialized.

  • Fixed a crash that occurs when selecting property access chains involving structs with native break functions.

  • Opening a collapsed area in the Create Animation Blueprint dialog no longer causes a crash.

  • Calling Anim Node functions when running standalone nodes no longer crashes.

  • Fixed a crash that occurred when selecting a slot node in a template Animation Blueprint.

Bug Fix:

  • Pose watching now correctly works for Blend Space and State Machine nodes.

  • Copy and paste now works for Blend Space AnimGraph samples.

  • Fixed being unable to make permanent pose watches created when enabling ‘Automatically create pose watch on selection'.

  • Added 'Initial Update' animation node function callback.

  • Pose watches now correctly delete when deleting a graph that contains them.

  • Fixed error when using a non-thread-safe function on an anim node.

  • Fixed metadata preventing new node bindings from being created.

  • Fixed a load ordering dependency with parent and child Animation Blueprints when child classes were PostLoaded() after their parents.

  • Fixed window focus loss when searching for parent blueprint classes while creating Animation Blueprints.

  • The schema type will now be checked before creating animation-specific graph pin widgets in order to resolve issues with execution pin connections.

  • Fixed animation node functions not being called correctly.

  • Fixed function library support for member reference customization and animation node functions.

  • Fixed non-deterministic cooking issue with child Animation Blueprints.

  • Single frame blendspaces now correctly sample root motion.

  • Property access generated properties are flagged as compiler-generated now, so CopyPropertiesForUnrelatedObjects will skip them.

  • Fixed issue where undo and redo weren't working correctly on property access nodes.

  • You can now spawn variable setters in Anim Graphs.

  • Modify bone and other edit modes now propagate to debugged objects during PIE and in Editor worlds.

  • The default values for Anim Node's bool pin no longer show up when pins are connected.

  • The Property Access node now has a move cursor when you hover over the node.

  • Previously, pose handlers were incorrectly calling a CacheBones pass on the graph during initialization. In the base class this was not a problem, but in derived classes, such as those with input poses, this could cause CacheBones to be called before Initialize.

  • Improved error handling for Anim Node references, especially when tagged nodes are disconnected.

  • Fix crash redo-ing and compiling an initial update anim node function binding

  • For child Anim Blueprint overrides, the Anim Node data is now linked to the class that matches the CDO being patched.

  • Sequence evaluators now show they can output a root motion delta.

  • ExtensionContent now works for a FDetailWidgetRow created from IDetailPropertyRow::CustomWidget().

  • Cooked Anim Blueprint Assets now animate when placed.

  • Optimized linking of Anim Layers with reduced calls to FindFProperty by caching generated parameter properties in FAnimBlueprintFunction and only iterating on them when linking.

  • Fixed Linked Anim Layer Node pins not being properly regenerated.

  • Fixed Linked Anim Layer pins not being available for bindings when using a self layer.

  • Corrects some mirror node bone index usage, and skips unnecessary intermediate array allocation.

  • Deprecated direct access to internal mapping arrays in FBoneContainer.

  • Fixed some bone index types, including type conversion occuring when using IInterpolationIndexProvider.

  • Fixed issue where keyboard input closed the color picker for Anim Notifies.

  • Template Anim Blueprints can no longer be retargeted.

  • We now correctly override the thread safety of return-value properties for property access when a function is marked thread-safe.

  • You can now disable notify instances and native notify types from being called in Animation Editors.

  • Undo and redo actions now work on property access call sites.

  • When starting in a different tick group for Skeletal Mesh Components allow a parallel animation eval.

  • Fixed edge case where graphs Linked Anim Layer Nodes were initialized without an interface.

  • Property access now works correctly with Blueprint refactoring tools, such as find references, renaming, and deleting.

  • Linked Anim Layers no longer show up multiple times in the context menu.

  • Fixed the issue where array child properties of an Anim Graph Node were still being shown when arrays were bound to pins.

  • Anim getters now use Linked Anim Layers.

  • Alpha blending options no longer keep bindings hidden when the alpha method is switched.

  • Linked Anim instances that have a mix of interface and non-interface layers now only unlink interface layers when unlinking.

  • There are now Anim Node data flags to reduce the overhead introduced by Anim Node functions. The data no longer has to be fetched out of folded constants to determine that it is invalid.

  • The node lookup in the Anim Blueprint compiler is used now instead of relying on the reverse DebugObjectToPropertyMap. This fixes debug weights occasionally breaking in Anim Graphs.

  • Anim Blueprints are no longer part of unneeded dependency compilations.

  • Fixed the issue in Animation Blueprints where exposed pins that were not exposed by default were not updating their values.

  • There is now a looping tooltip for transport controls.

  • Blend lists now only reinitialize children when their weight is zero.

  • There are now error reports for dynamic values that are not exposed on pins.

  • Custom pins are now created on Anim Graph Node creation and not just on reconstruction.

  • You can now debug post-process Blueprints in the Animation Blueprints Editor.

  • Fixed assert occurring when compiling an Animation Blueprint with an Anim Node function node in the Anim Graph.

  • Sparse class data is no longer derived from an incorrect base when used with a native base class.

  • You can now create a child Anim Blueprint with another compatible skeleton.

  • You can now place cooked Anim Blueprints in Level Viewports.

  • Fixed "Unable to push default value for pin" warning when linked anim graph node pins are connected.

  • You can now override Aim Offset Assets.

  • Property access thread safe logic now correctly enforces function metadata overrides.

  • Fix asserts with child Animation Blueprints by ensuring that cleaned-up sparse class data structs are moved out of the package they are in.

  • You can now open newly-spawned empty Blend Space Graphs.

  • Nested property validity filters, such as checking to see if an entry in the menu has compatible submenus, are now performed for functions.

  • You can no longer bind UObject types to unrelated types in the menu.

  • The display name now appears for script properties and functions, and ScriptName for native ones if available.

  • You can now double-click an aim offset with exposed pins.

  • GetLinkedAnimLayerInstanceByGroup now works correctly in packaged builds.

  • Property access nodes can now be correctly searched for in the AnimGraph context menu.

  • Fixed an ensure when opening some linked Animation Blueprints. Linked Animation Blueprints can be debugged, but previously the logic to set up a debugged object based on a Skeletal Mesh made the assumption that only the main animation instance would be the class being set. The check was expanded for that fallback logic application to cast a wider net than just the preview instance.

  • Extra Anim Node child properties no longer appear incorrectly on unbound structs, and bindings no longer appear on un-bindable properties.

  • Skeleton Assets now generate a thumbnail in the Create Animation Blueprint dialog.

  • Fixed an issue where a single step in the Animation Blueprint had no effect. It now steps at a fixed framerate.

  • Property Access nodes are easier to move around now.

  • Fixed an issue where nested structs that were bound to Anim Node pins were not showing their child values.

  • Fixed spurious compiler thread-safety errors when batch compiling.

  • Fixed issues with child Animation Blueprint compilation ordering. Also improved cleaned-up sparse class data structs.

  • Fixed issues with Sequence Player node Blueprint exposure.

  • Fixed a crash when opening a child Anim Blueprint of a template Anim Blueprint.

  • Fixed warnings caused by tagged-property-serialization with generated sparse class data structures in Animation Blueprints.

  • Rewrote the tooltip for sequence player's SetStartPosition to better explain its functionality.

Deprecated:

  • Deprecated UAnimClassData, as it is no longer required by the Blueprint nativization feature, which has also been fully deprecated.

Removed:

  • Removed duplicates of the Component and Actor transforms in FAnimInstanceProxy.

Animation Tools

New:

  • Added "Spherical Pose Reader" Control Rig node, which provides easier setup of secondary deformations by defining custom regions of influence around bone rotations.

  • Added suite of new Python functions for getting and setting Control Rig Values and Keyframes in Sequencer.

  • Added options for previewing root motion in the animation editor viewport.

  • The "Duplicate and Retarget" batch process for Animation Blueprints now uses the new IK Retargeter asset.

  • Added Control Rig editor profiling for heat-map style runtime cost profiling.

  • Added support for map controls as inputs on the Control Rig Animation Blueprint node.

  • Added nodes in Control Rig to interact with Arrays such as Add, Num, GetAt, and SetAt.

  • Added the option to automatically link new mutable nodes in the Control Rig Settings.

  • Control Rig: Functionality for the ControlRigComponent to perform lazy evaluation.

  • Added the following nodes to Control Rig: New Item Equals, Item Not Equals, Item Type Equals, and Item Type Not Equals.

  • There is now a new user workflow to promote pins to a variable in Control Rig.

  • There are new nodes to allow Nulls and Control to reparent and space switch in Control Rig.

  • Skeleton Editor has a new transform widget for editing and viewing bone transforms.

  • You can now inspect live values running through a Control Rig in the Details panel's Live Values section.

  • You can now frame the selection and the complete graph in Control Rig using the F hotkey.

  • There are new Control Rig nodes so you can interact with arrays of transforms to perform accumulation, project from local to global space, and draw arrays of transforms directly.

  • There's a new option in Control Rig to show the Controls' colors on the icon in the Rig Hierarchy widget.

  • Fixed an issue where the Viewport appeared blank for additive animation. We now always retrieve a valid skeletal mesh for previewing.

  • The Viewport has been updated to use AdvancedPreviewScene similar to the Animation Editor viewport(s).

  • Added the ability to update a PoseAsset pose-entry with the current in-viewport pose.

  • Added the option Show Mesh Edges in the Animation Viewport Show Options menu.

  • Exposed TargetSkeleton and PreviewSkeletalMesh for BlendSpace factory as BlueprintReadWrite. You can use this to create blendspaces from Blueprints and Python.

  • Added the option to only apply out-of-date animation modifiers to an animation sequence. This option appears in the contextual menu of an Asset, and through the Details view of AnimationModifier classes.

  • Added option to visualize Animation Transform Attributes in the Animation Editor. You can access this option from the Show Flag menu.

  • Added a new option to DebugSkelMesh to track the LOD of an attached instance in the Level Viewport.

  • Added new default gizmo libraries with shapes that have uniform scale to Control Rig. Assets from previous versions will maintain their original gizmo library.

Improvement:

  • Enabled full support for user defined struct usage in Control Rig.

  • The Control Rig runtime VM has been upgraded to a more compact and flexible memory backend.

  • Reduced the memory footprint and runtime of Control Rig by using inline allocators to avoid allocations for minimum size cases, and batch allocating elements.

Bug Fix:

  • Control tracks in Sequencer now correctly update their name when a Control is renamed in the Control Rig editor.

  • Fixed Bone selection behavior in Control Rig viewport.

  • Fixed an issue where any pending Apply Preview Mesh pop-up toasts were not faded out when consecutively changing the Preview Mesh.

  • Reduced the number of editor transactions created when dragging BlendSpace sample points. We now create a single transaction for interactive changes.

  • Fixed a scaling issue with the scrollbar in the Animation Editor Timeline.

  • Fixed an issue with Additional Meshes where their post-process Animation Blueprints were not being evaluated correctly in Animation Editor(s).

  • Fixed not being able to select a PreviewMesh using the arrow keys.

  • Fixed an issue with Animation Recorder generating gaps or missing curve-key values by ensuring that WriteIndex is used to populate curve-key data.

Deprecated:

  • Deprecated the Transform Constraint Control Rig node. It is replaced with new Parent/Position/Rotation/Scale Constraint nodes.

Import/Export

New:

  • Added support for importing enum FBX properties as string-typed custom attributes. Enum-typed properties in the FBX are converted to string-typed custom attributes using the string value that corresponds to the enum index.

  • Added dedicated settings for timecode custom attribute names, which can be customized for a pipeline using BoneTimecodeCustomAttributeNameSettings.

  • Sequencer will now check for timecode properties to use as TimecodeSource when importing FBX to Control Rig.

  • Skeletal Meshes imported from FBX now stores mesh names, number of vertices, and the start vertex offset.

  • You can choose to store the vertex numbers from your DCC for a Geometry Cache imported from Alembic files, by enabling Import Vertex Numbers.

  • The Alembic Importer and Geometry Cache plugins are now no longer experimental, and are instead production ready.

Bug Fix:

  • Fixed precision issues that could result in Anim Sequences from FBX importing at the wrong frame rate, and improved animation sampling precision on animations with larger durations.

  • Streaming a geometry cache from Alembic with constant topologies now supports frame interpolation, This is needed for subframe sampling and motion blur.

  • Alembic import settings created from a script can now be used and displayed in the Import dialog.

Deprecated:

  • Removed support for HDF5-format Alembic. Instead, use or convert your Alembics to Ogawa format before importing in Unreal Engine.

Skeletal Mesh

New:

  • Moved Bake Out Materials to the Skeletal Mesh Editor toolbar.

Crash Fix:

  • Fixed crash when calling Set Skeletal Mesh function in Blueprints.

Bug Fix:

  • Fixed editable skeleton transactions sometimes not being saved.

  • Fixed a crash when serializing morph targets on an editor platform that didn't support morph targets.

Deprecated:

  • Removed skinning pre- and post-offset. This was added temporarily in 4.26, specifically for the MLDeformer prototype. The public functions were always marked as deprecated.

Audio

New:

  • Added Bandsplitter MetaSound nodes that split audio into discrete frequency bands, with the option to phase correct so that they can sum back together with minimal artifacts.

  • Added a Dynamic Filter node to MetaSounds. This node is a filter with bell and shelf modes that filters based on the strength of the signal at the affected frequency range. This node can be sidechained with a secondary audio source.

  • Added a new UInterface that allows Actors to automatically fill out and pass an array of AudioParameters to any owned sounds from said Actor.

  • Added a Diffuser node to MetaSounds. This node diffuses incoming audio like a reverb, but without adding a long tail.

  • Added the ability for an Audio Component to be associated with multiple active sounds.

  • Added variables to the MetaSound graphs.

  • Parameter setter calls on an AudioComponent are now cached in separate "InstanceParameters" arrays and supersede changes to the "DefaultParameters" array (redirected from the original InstanceParameters array).

  • Parameters now have a fallback structure set by Blueprints / runtime "InstanceParameters", instead of those provided by ActorParamInterface. These parameters are set as defaults on the AudioComponent.

  • Added Unreal Insights markup to the Quartz Audio system. Various Quartz mechanisms and performance considerations can now be visualized in the Unreal Insights tool.

  • Enabled Google Resonance Audio as a default engine plugin.

  • Added audio slider and knob widgets. These widgets can be used as standalone widgets and within the MetaSound editor.

  • Added Editor Preferences options for various MetaSound and Sound asset types for easy access when creating new assets.

  • Added an Editor Preferences option to automatically solo audio for the first PIE client.

  • Added an Additive Synth MetaSound node.

  • Added support for Metasounds in Sequencer via the transmission interface.

  • Added the ability to modulate Output Volume, Wet Level, and Dry Level on submixes with the Audio Modulation plugin. This replaces the old properties, which are now deprecated. The old volume properties will transfer to the base values of the new Modulation Destinations automatically, and will work the same even if the Audio Modulation plugin is disabled.

Improvement:

  • Added more trace events to the audio device and to Metasound rendering to get more useful performance information when viewing Unreal Insights sessions.

  • The dynamics process and MetaSound Compressor node can now apply upwards compression in addition to downwards compression. Upwards compression can apply up to a maximum of 36 dB of gain to a signal below its threshold.

  • Improved the MetaSound OnPlay CPU performance.

  • Improved the clarity of the default values in Audio Platform Settings UX.

  • Changed the log verbosity in the Steam Audio spatialization plugin to reduce the number of messages.

  • Added the ability to compile out huge symbols out of libSamplerate to save on memory.

  • Optimized MetaSound node searching.

  • Improved the tool tips for Audio Stream Caching statics.

  • Cleaned up XAudio2Windows and separated it into smaller, more manageable pieces.

  • Enabled the MetaSound AutoConverter nodes between enums and int32, and updated the conversion nodes style.

  • Updated Wavewriter to support multiple channels.

  • Added optimizations to Recycle threads for Null Renderer devices.

  • Added optimizations to the DeviceInfo Cache.

  • Added optimizations for Windows to the Threaded device swap.

  • Did an incremental refactor to XAudio2 and moved the stringify error codes into StringHelper.

  • Changed the Mute / Solo option for Sound Classes to only apply while in PIE.

  • Reduced the number of log messages produced when using procedural SoundWaves on Sequencer's audio track.

Bug Fix:

  • Fixed an issue where the MetaSound block-rate AD Envelope node was not allowing attack rates smaller than one block size (eg 0). If set to under a block length, it will now skip its attack phase.

  • Fixed the MetaSound Compressor node failing to update some of its inputs while running.

  • Fixed Metasound type conversion nodes outputting default values on the first render block.

  • Fixed an issue where ActiveSounds and AudioComponents spawned via GameplayStatics functions wouldn't have an Owner actor assigned to them.

  • Fixed an issue with Focus Interpolation where it would always interpolate up from 0, instead of initializing to the current Focus value.

  • Fixed an issue where it was possible to divide by zero on the MetaSound AD Envelope.

  • Fixed a bug where the initial value of the Metasound math operator nodes was not being set.

  • Fixed an issue that would result in the lack of clamping when recording output.

  • Fixed an issue where binaural audio was not working correctly on some plugins.

  • Fixed an issue where the audio settings were not being saved to .ini files on some platforms.

  • Fixed an issue where the MetaSound InterpTo nodes and Conversion nodes were not propagating their initial output values at the point of construction.

  • Fixed an issue where sending a normal submix to a soundfield submix could result in an incorrect init order or a crash.

  • Fixed an issue where Soundfield Submixes would not properly re-initialize when the encoding format changed in the editor.

  • Fixed an issue where the Audio Capture Component would crash if OpenCaptureStream() hadn't been called.

  • Fixed an issue where sounds were cutting off if they started playing within the binaural radius, and the listener left that radius.

  • Added protection against a potential null pointer deref in SubmixUtils::AreSubmixFormatsCompatible().

  • Fixed an ensure when binaural sound was sent directly to a soundfield submix.

  • Fixed an issue where the Modulation EnvelopeFollower was not reinitializing when the AudioBus was initially unset.

  • Added a Multithreaded Patching (MTP) Remainder check in the calculation to now ignore (and properly clean-up) inactive outputs.

  • Fixed an issue where FQuantizedPlayCommand::CancelCustom() was letting pending play commands play un-quantized instead of stopping the sound.

  • Fixed an issue where audio buses were mixing in incorrect data when the sound started playing in a "paused" state.

  • Added a fix to prevent an Audio Component from accessing an uninitialized Quartz Clock.

  • Fixed an issue where the Audio Streaming Cache would crash if the configuration caused the cache to have zero elements.

  • Fixed an issue where swapping an in-flight threaded audio device would cause a shutdown crash.

  • Fixed an issue where the AudioMixer XAudio2 would not recover after failing to initialize. This allows for device swapping after an open failure.

  • Removed the DLL fallback code that was causing issues with initialization recovery.

  • Fixed several issues with the audio channel that would result from device swaps.

  • Removed the PhysicalSpeaker property from being monitored for swapping and improved logging around channels changing.

  • Fixed an issue that would result in memory corruption in USoundNode.

  • Fixed an issue where the MMNotification client would experience a deadlock.

  • Fixed an issue that would cause incorrect fading of a SubmixEffect.

  • Fixed an issue with a race condition in the Windows Session Notification client Unregister / Register.

  • Fixed an issue where the MetaSoundSource of a Metasound asset would get corrupted when setting the Playback position to be non-zero.

  • Fixed an issue where the Bhaskara and Pure Math variations of the Sine MetaSound Generator Node were not correctly handling negative frequencies.

  • Fixed an issue where copy / paste was not working correctly in the Audio Mixer thread priority.

  • Fixed an issue where adjusting nullptr check in the AudioDevice would result in a crash.

  • Fixed an issue where stereo sounds with binaural spatialization were not panning correctly.

  • Fixed an issue where switching back from a NULL renderer device would result in the user's PC hanging.

  • Fixed an issue in AudioMixer that would result in a nullptr on partial initialization teardown.

  • Fixed an issue in the Audio Streaming Cache that would result in a crash.

  • Fixed an issue where the WaveWriter node was creating files even when it was not connected in the MetaSounds graph.

  • Fixed several issues with the Metasound Oscillator Generator node, including DC offset for square wave, triangle wave phase offset, and fade in for unipolar generators

Deprecated:

  • Deprecated the MetaSound Send and Receive nodes.

  • Removed the Sound Visualization plugin in favor of the more comprehensive functionality in the Audio Synesthesia plugin and other parts of the audio engine.

  • Removed the stat audio console commands in favor of the au.Debug family of console commands.

  • Deprecated the SpokenText field in SoundWave.

  • Removed the au.debug.ListSounds command.

Console

All Xbox

New:

  • Always include the "requires xbox live" flag in the manifest, as per the guidance from Microsoft, even if it is false.

  • Adding support for Simplified User Model.

  • Added support for detecting and reducing register spillage in the Xbox shader compiler. It will do multiple iterations with decreasing target occupancy to prevent it.

    • The maximum retry count is specified with UE_XBOX_SHADER_COMPILER_AVOID_SCRATCH_USAGE_MAX_RETRIES, and this defaults to 3. The final target occupancy will always be 1, and this reduces in powers of two with each iteration.

  • Gauntlet now removes previous staged build before deploying new build.

Bug Fix:

  • Fix for PIX profiling settings to retain control of instrumented D3D12 on Xbox over ProfileGPU.

  • Lazy initialization of audio resources in FMediaFoundationMovieStreamer and proper handling of PLM suspend/resume events.

Playstation 4

New:

  • Enable OnlineSubsystemPS4 plugin by default

Bug Fix:

  • Replace pthread functions with SCEpthread functions for Sony events. The SCE version uses relative time for timeouts which handles potential errors when changing the system time.

  • Fixed copies of cubemap texture mips.

  • Fixed net address failures when the port is negative.

Playstation 5

New:

  • Implement package discovery, installation and deployment for Playstation 5 automation.

  • Integrated MemPro for Playstation 5.

  • Added support for PS5 shader compiler stats to be available in the editor.

Bug Fix:

  • Fixed the creation of update packages based on a previous release. The build system no longer considers MasterVersion to determine if a package is a previous release, but the highest MasterVersion is preferred when selecting from the available base packages.

  • Fixed issue where GPU readbacks would sometimes return stale data.

Quail

Bug Fix:

  • Fix Stadia's keyboard handling under AZERTY and other country-specific layouts.

  • Fix stadia failing to package in installed builds.

Switch

New:

  • Add setting for enableSingleMode option in Switch Controller Support Applet. If enabled, it specifies whether to start controller support in single-player mode. Players are prompted to prepare controllers, including attached controllers, for one person. See nn::hid::ControllerSupportArg::enableSingleMode in the Switch documentation for more info.

  • Added two new features for SwitchInputSender:

    • Added a checkbox to reset the required version automatically when launching the requested app. This removes the need to reset the required version manually with DevMenu.

    • Added the --no-wait command when launching an application to allow the call to RunOnTarget.exe to return immediately instead of waiting until the title exits. This frees SwitchInputSender to do other tasks while the title is running.

  • The Switch RHI will remove unnecessary geometry shader management functionality at compile time if tesselation and geometry shaders are not used. This results in a small performance improvement.

  • Added a return code to the program RegTarget to indicate whether the requested operation was successful or not.

  • Allowing static shader platforms on Switch. This reduces runtime memory usage by around 9MB. To take advantage of these savings, choose a shader platform for the project. Then add defines for "USE_STATIC_SHADER_PLATFORM_ENUMS=1" and either "UE_STATIC_SHADER_PLATFORM_GLSL_SWITCH_MOBILE" or "UE_STATIC_SHADER_PLATFORM_GLSL_SWITCH" in the project's _Target.cs file.

  • Optimized compiler and linker flags to reduce memory footprint and binary size.

  • Optimized NVN CPU allocator by reconfiguring CPU memory growable allocators to reduce waste.

  • Optimize the chunk search in GrowableAllocator, so it's no longer O(n^2) in most cases. The chunk search time is now 20x faster, and overall allocator overhead is reduced by 40%.

Crash Fix:

  • Previously, when taking a Low-Level Memory tracker (LLM) capture, the application would crash on exit. This crash has been resolved.

  • Previously, if the Switch's profiler system was active, the app would crash on exit after tearing down the profiler system. The crash has been resolved by waiting on the render threads to drain before tearing down the profiler system.

  • Previously, SwitchInputSender would crash on exit if it was closed while still running tasks when it was closed. It will now exit normally.

Bug Fix:

  • Previously, if FSwitchPlatformFile::OpenWrite() was called, and bAppend was true, it would overwrite the existing data with any new data. Now FSwitchPlatformFile::OpenWrite() will seek to the end of the file, and it will write new data at the end of the file.

  • Previously, custom stencil lookups would not return the correct result due to the lookup referencing the incorrect texture channel. The lookups will now return the correct data.

  • Previously, if too many file handles were opened, FSwitchFileHandleBase::Read() would assert before attempting to reopen the file. Now the assert will only fire if the reopen attempt fails.

  • Previously, an assert would be triggered in the SwitchMediaDecoder during Cook On The Fly (COTF) when it attempted to read a file from staged data. This was resolved by changing the check() into an error message as staged data is unavailable during COTF.

  • Previously, the Boost setting would not be set correctly when SwitchInputSender requested a change. The setting will now be set as requested.

  • Previously, an error would occur if the user lifted a finger from the Switch touchscreen and a new finger started touching the screen in the same frame. This error has been resolved by sending all TouchEnd events first, preventing a new TouchStart event from occurring before the corresponding TouchEnd has been sent.

  • Previously, SwitchInputSender would fail to update a kit's firmware if the Switch console had a custom name. Now SwitchInputSender can correctly update the firmware of a Switch console which has a custom name.

  • Previously, the error "Issue 11-801 - Uses development APIs appears" would appear when packaging an application in the Shipping configuration. The functions causing this are now no longer referenced in the Shipping configuration, and the error no longer occurs during packaging.

  • Updated the SwitchInputSender export process to include missing assets when exporting and updated the ExportSwitchInputSender.bat file. Previously the exported version of SwitchInputSender would fail because of missing assets. Now those assets are included.

  • Previously, SwitchInputSender would terminate the running application when connecting to a Switch console. Now SwitchInputSender will connect without the need to terminate the running application.

  • Previously, when setting a new memory value for the Switch console, SwitchInputSender would not reboot the console, and the setting would not take effect until the console was manually rebooted. SwitchInputSender will now reboot the console when necessary, aligning with the other options that also require a reboot.

  • Set NumBuffers=1 when ResourceArray is provided.

Deprecated:

  • Sparse Texture support (bUseSparseTextures) has been deprecated due to the lack of performance when enabled and the code complexity incurred to support them. Disable Sparse Texture support for improved performance.

XBox One GDK

Bug Fix:

  • Fixed a virtual address leak when an ESRAM allocation fails.

Core

New:

  • Added an active timer count threshold at which we assume something is wrong and dump all timers to the log. The intention is to provide information in cases where projects have thousands of active timers at once, which can degrade performance.

  • Added an exec command called "DisplayCVarList" that supports a comma-separated list of CVar names to draw to the screen. This command also supports name completion; for example, you could enter "r.nanite" to see all CVars related to Nanite.

  • Added FMemoryWriter64 for serializing to a TArray64.

  • Added IntCastChecked and IntFitsIn utility functions.

  • Added UTF8CHAR string overloads for FCrc::Strihash_DEPRECATED.

  • Added TSharedFromThis::AsWeak() to complement TSharedFromThis::AsShared().

  • Added an FUtf8StringView overload for FSoftObjectPtr::SetPath().

  • Added UTF8 constructors to FBlake3Hash and FIoHash.

  • Extended FResourceSizeEx to keep track of name for each memory size added. This allows for verbose reporting of resource sizes. This results in output which will dump each tracked named size.

  • Added additional `AddSharedSystemMemoryBytes function which accepts a named tag.

  • Modified the FStaticMeshLODResources class method GetResourceSizeEx to use the new interface.

  • Modified FSkeletalMeshLODRenderData::GetResourceSizeEx() to use the new interface.

  • Added optional alignment awareness to the allocator model, and added support for that to TArray and FScriptArray.

  • Added: FArchive::SerializeCompressedNew can use arbitrary compressors, not hard-coded to ZLib like FArchive::SerializeCompressed.

  • Added the ability to use TArrayView with Append in TSet.

  • The Chunk Downloader now has a GetNumDownloadRequests() function.

  • CurveTable now has RemoveRow functionality to match DataTable.

  • The editor now has a new user interface for the CSVToSVG command line tool.

  • The editor can now create data tables from a raw data array.

  • Added a new WIDETEXT macro for WIDECHAR literals.

  • Users can now disable all or specific notifications from the DDC system.

  • TMemoryImagePtr, FWeakObjectPtr, TOptional, TInlineValue and FObjectPtr debugger visualization now support visualization of dereferencing expressions.

  • Added missing constexpr and UE_NODISCARD to eligible functions in UnrealMathUtility.

  • Created FTSTicker, a thread-safe version of FTicker. FTSTicker can add and remove tick delegates concurrently. Removing a delegate can block until its execution is finishing in parallel.

  • Added a new constexpr FPlatformString::IsCharEncodingSimplyConvertibleTo() function which tests if one encoding can be assignment-per-character converted to another.

  • Added a placeholder for HashCombineFast(), which is intended to serve as a placeholder for an in-memory fast hash combining algorithm, unlike HashCombine() where the results may be persisted.

  • HAL/HideTCHAR.h and HAL/AllowTCHAR.h for including around third-party headers in UTF-8 mode which use their own implementation of TCHAR (for example, Windows headers).

  • FSpinLock and generic TScopeLock. These are classic spin-locking behaviors, so use them with caution.

  • TIsCharType now has specializations for UTF32CHAR and wchar_t when PLATFORM_TCHAR_IS_CHAR16 is set. Added a new PLATFORM_UCS2CHAR_IS_UTF16CHAR macro.

  • Created the Game Thread CPU Timing platform API for more accurate CPU Percentage and CPU saturation detection. Also added a platform API for free (on Unix) process performance stats (Page Faults, IO, and Context Switches). Game Thread CPU Timing is guarded with the CVar: Platform.TrackGameThreadCPUUsage

  • TInlineValue has a new EInPlace constructor.

  • Enabled DisplayAll commands in TEST config builds.

  • Added TEXTVIEW, ANSITEXTVIEW, WIDETEXTVIEW and UTF8TEXTVIEW macros for creating string views to replace the TEXT macro with "_SV" added to the end of the quoted string literal.

  • Remove unused names from package headers, reducing the amount of data and number of names that have to be serialized. We now:

    • Strip names that are not used when cooking for UnversionedPropertySerialization.

    • Strip names that are not used by the loader when staging for IoStore.

  • The third-party Imath library (version 3.1.3) is now included for use in the engine.

  • FString::AppendChars, CompactBinary, and FName construction now support UTF-8. FUtf8StringView is now constructible from both ANSICHAR and UTF8CHAR strings.

  • Removed the unused InstallVisualizers.bat file because Visual Studio versions above 2015 do not use it. Added a .natstepfilter for common Unreal parameter constructor functions to avoid stepping into the parameter construction when trying to step into a function that takes the parameter.

  • Added a Custom Config directory feature that can be used to support multiple packaging targets per platform.

    • Setting CustomConfig=Directory in a Target.cs file will cause it to overlay config files from Project/Config/Custom/Directory on top of the other config files, enabling easy override of things like OSS settings to support multiple stores.

    • In development, -CustomConfig=Directory can be specified in both C++ and C# to enable the same functionality, which can be used to select between different stage/deploy configurations in a build script.

  • Added PackageName.DumpMointPoints, PackageName.RegisterMountPoint and PackageName.UnregisterMountPoint console commands to manage UnrealFileSystemMountPoints in non-shipping builds.

  • Added GetValid(Object) global function. GetValid can be used in places where pointer validation with IsValid(Object) triggers static analysis warnings.

  • Added the ability to specify referencer name provider type for TStrongObjectPtr.

  • Made the verbosity of the uninitialized reflected property check configurable through either project or engine modules. Projects use DefaultEngine.ini, while engine defaults are in BaseEngine.ini. Issues with UObject* properties are upgraded from Warning to Error. Other types remain the same for both engine and project modules (Display), but engine will soon change to Error as well. For example:

    • [CoreUObject.UninitializedScriptStructMembersCheck] EngineModuleReflectedUninitializedPropertyVerbosity=Error ProjectModuleReflectedUninitializedPropertyVerbosity=Warning

  • Added OodleDataCompression.h interface for direct access to Oodle compression. Oodle compression is now built into Unreal Engine Core and is available on all platforms for general purpose compression needs. This is separate from the configurable pak/iostore compressor.

  • Optimized IsValid(Object) performance: 19.8ms -> 9.2ms (based on internal GarbageCollector tests)

  • Add UE_CALL_ONCE to help call void functions once

  • In OutputDeviceFile, the async writer can now set its thread name to either the file name or a sequential number. Define OUTPUTDEVICE_DEFAULT_ASYNC_WRITER_THREAD_NAME to change the default behavior, which is to use the file name.

  • Added support for disabling Pending Kill functionality in the engine. Pending Kill will be disabled by default for any new projects created with the next Engine release.

  • FGCObjects without GetReferencerName overrides will now be reported during Garbage Collection verification tests.

  • Changed the CsvProfiler worker thread to be created on demand, rather than unconditionally. The CSV_PROFILER macro is now defined in Shipping on the Dedicated Server only if checks are defined as well.

  • Added support for disabling CsvProfiler categories through configuration by using the CsvProfiler/DisabledCategories array.

  • The UCLASS specifier now takes a Hidden flag. This maps directly to the ClassFlags Enum CLASS_Hidden flag. Adding this flag will hide the given class from any class browser in the editor.

  • Introduced Garbage Collector History. Garbage Collector can now store information about its previous runs which can then be used to track down UObject memory leaks.

  • The ReferenceChainSearch class will no longer store raw pointers to UObjects when constructing reference chains and instead will only preserve basic information about UObjects separate from UObjects themselves.

  • Downgraded level leak asserts to errors when PendingKill is disabled.

  • Updated to Oodle 2.9.5 SDK. Oodle 2.9.5 provides significantly faster rate-distortion optimized texture encoding.

  • Added a UnrealTraceServer.exe to the binary build. UnrealTraceServer is the tool that records traces for profiling purposes.

  • Added functionality to Allow Cast to gracefully handle an interface instance that's not a UObject.

  • ISPC support has been added for double versions of core types.

  • Traced a timing event for each task's start-end interval.

  • Added a template VariantStructure as an alternative to the template BaseStructure that provides access to script structs for f and d LWC variant types.

  • In the PathPermissionList class a const FName reference is now used instead of FName in iterators whenever it is possible.

  • Added support for values larger than 2 GB in the Derived Data Cache.

  • Added compression to the Derived Data Cache, reducing its size by 65-75%.

  • Added the ability to configure Task priorities from config files.

  • Made the scrollableFormatting and reverseSortRows properties of the SummaryTable able to be set in XML.

  • Added listSummaryTables option to list the available summary tables in the current ReportXML, then Output the report XML filename and report graphs filename to the log.

  • TPromise can now use non default constructible types.

  • Added support for more than two sticky columns in collated summary tables. New format info for columns have been created to replace the "lowIsBad" list. This provides specifying auto colorization rules and numerical formatting.

  • Added support for multiple section boundaries, and minor (dashed line) section boundaries Section boundaries no longer require startToken or endToken. Section boundaries now can be specific to collated or full tables

  • Added a minFrameCount param which filters out rows from the summary table based on frame count. This allows us to filter out bad CSVs. This works after the cache reads, so bad PRCs will also be filtered out.

  • Added maxFileAgeDays argument. CSV or PRC files older than the specified parameter will be ignored. This is faster than querying timestamp metadata, especially when reading from network drives.

  • Added input format detection for csvConvert. If not specified, input format and compression will be used for output.

  • Added setMetadata key/value argument for overwriting metadata, and ensured the command line metadata is written at the end when writing in .csv format.

  • PerfReportTool - hitchSummary - add summary table metrics for hitches of thresholds up to 1000ms at 100ms intervals. The new metrics are named Hitches>Xms.

Improvement:

  • Improved debugger visualization of TStaticArray.

  • Moved the FResourceSizeEx into its own cpp file so modifying the header isn't a full recompile.

  • Upgraded the engine's version of the third-party OpenEXR libraries to 3.1.1.

  • Moved GChaosMode state onto the heap to save on the static memory footprint.

  • Made FrameRate, Timecode, and TimeManagement work better with NTSC and/or drop frame timecode and frame rates.

  • Added quotation marks around strings from failed comparisons during automation tests to aid readability.

  • Added more heterogeneous string encoding overloads of FGenericPlatformStricmp::Strnicmp.

  • Reimplemented TSharedPtr reference counting using std::atomic and more optimal memory ordering in ESPMode::ThreadSafe mode.

  • Standardized the null smart pointer .natvis to say "nullptr" instead of "Null".

  • Improved performance, reduced code bloat, and simplified searching for non-constexpr constants by adding appropriate use of constexpr through core engine code.

  • Implemented scratch buffers for encoder scratch as well as decoder to improve OodleDataCompression performance.

  • Marked all FPlatformProcess::SleepInfinite implementations as [[noreturn]]

  • We now support passing a default value to FVector::GetSafeNormal. This value will be returned if the original vector is zero.

  • Loading of plugin-specific config files has been modified to be more consistent and reliable. BasePluginName.ini should always be used for engine plugins and DefaultPluginName.ini for game plugins.

  • FArchiveReplaceObjectRef (and subclasses) now pass parameters through flag enums rather than long lists of bools. FArchiveReplaceObjectRefBase no longer tracks replaced references by default.

  • Unified and improved output when reporting Garbage Collection World leaks and in 'obj refs' command output.

  • Added OodleTextureSdkVersion field to Texture assets so that textures remember the version of Oodle they were encoded with. Legacy assets load with this field blank. Different versions of Oodle Texture can be used based on this field to prevent unnecessary patch generation.

  • Disabled CsvProfiler RenderTargetPool category on the server side by default.

  • Prevented useless FString allocations in FindOrCreateStatSeries when checks are compiled. Enabled TLS memory caches for the CSV processing thread

  • PerfReportTool: Split classes into separate files.

  • PerfReportTool: Made Summary types self-register so they're self-contained and more easily extendable.

  • PerfReportTool: Removed redundant XmlHelper class, by converting existing usage of this to use the GetSafeAttribute method.

  • improved summary table formatting by adding support for 3 levels of section barrier in summary tables.

Crash Fix:

  • Fixed a crash when calling TPolygon2<>::Contains on an empty polygon.

  • Fixed a crash due to a missing type in the FAutomationTestAttemptToFindUninitializedScriptStructMembers test when running the automation tests from within Unreal HeaderTool.

  • Fixed a Linux crash when connecting to an incorrect trace host address.

  • A crash has been fixed that occured when running a reference gathering while incremental garbage collection running.

Bug Fix:

  • Fixed FastDecimalFormat not handling inf.

  • Fixed compile error in TRobinHoodHashMap::Remove() and data loss warning in TRobinHoodHashMap::Num().

  • Fixed FStringView::Mid to work the same as FString::Mid. Added Left, Right, and other slicing functions to TArrayView to match the behavior of FString.

  • Tidied up TSharedPtr's FReferenceControllerOps using if constexpr.

  • Fixed TTuple's per-element constructor to be conditionally explicit, allowing tuples to be initialized with a braced list of initializers.

  • Fixed some usages of FBox::ExpandBy, and clarified FBox comments.

  • Made TVariant::IsType issue a compile error when T isn't in the variant.

  • Fixed Expose_TFormatSpecifier in UTF-8 mode.

  • Fixed a dereferencing null pointer static analysis warning in AppendCharacters in String.cpp.

  • Caused a compile error when a class hierarchy inherits multiple instances of TSharedFromThis or when using TSharedFromThis when T doesn't inherit TSharedFromThis.

  • Supported the # alternative representation modifier in FGenericWidePlatformString::GetVarArgs.

  • Improved DisplayString visualization for TMemoryImagePtr.

  • Fixed the "% 123d" explicit space-padding formatting syntax in FGenericWidePlatformString::GetVarArgs.

  • Fixed FMath::Wrap for zero-sized ranges.

  • Fixed a compile error in TArray::operator<< when an element type is bulk serializable but not regularly serializable.

  • Made TUniquePtr's debugger visualizer's expanded view more consistent with other smart pointers.

  • Fixed the optimized map and set property serialization path when there are no defaults and the container is non-empty.

  • Fixed FGenericWidePlatformString to be usable under Windows by setting PLATFORM_USE_GENERIC_STRING_IMPLEMENTATION.

  • Removed UTF8CHAR as an alias for char8_t in C++20, as it causes ABI conflicts when linking modules built with a mix of C++17 and C++20.

  • Fixed a crash when trying to convert an array of a serialized struct type to an array of a non-struct type.

  • The W component is now properly preserved in vectorized TTransform::TransformFVector4 and TTransform::TransformFVector4NoScale.

  • Fixed up FCString in UTF-8 mode.

  • Loaded packages are no longer incorrectly marked as missing, which prevents incorrect skipping of imports after requesting load of an invalid export in a valid package.

  • Added support for padded widths in FImageWrapper classes, which fixes a bug where a Remote Session's image buffer could include garbage pixels on the right side due to the underlying GPU's pixel alignment requirements.

  • Added Define log categories for NO_LOGGING configurations.

  • The entire hash map will now lock instead of individual hash buckets when iterating UObject maps to prevent memory stomps when creating, renaming, or destroying objects mid-iteration.

  • Duplicating components now correctly duplicate instanced subobjects owned by that component.

  • Fixed redirected or unqualified enum values.

  • Fixed the GetMinimalName method from the MappedName class to be aware of case sensitive FNames.

  • Fixed the MemoryWriter from failing to write an index size greater than 2GB.

  • Slightly reduced framepro send buffer size so it fits under the small alloc max size amount of some allocators.

  • Fixed potential memory stomps during localization data gathering.

  • The method FStructUtils::TheSameLayout no longer returns false when passing in null structs to compare.

  • Prevented the Plugin Utillity method AddToPluginSearchPathIfNeeded from adding mod or enterprise plugin directories to the plugin search path.

  • UMG list view will now track its Actor references and remove them when they're about to be destroyed to ensure they don't prevent levels from being Garbage Collected.

  • InputComponent will now clear its reference to the PlayerInput to ensure it doesn't prevent levels from being Garbage Collected.

  • Cleared a reference to PathFollowingComponent on the MovementComponent when the PathFollowingComponent changes its MovementComponent to make sure it does not prevent levels from being Garbage Collected.

  • FPlatformMemory::OnOutOfMemory: Fixed thread-safety issue when concurrent calls return from the function.

  • Released references to other objects when the PlayerCameraManager gets destroyed to make sure they don't prevent levels from being Garbage Collected.

  • CheatManager will now empty its extensions list when its outer PlayerController is about to be destroyed to prevent issues with Garbage Collecting leaking references.

  • Fixed use iostore and make binary config settings from not being saved to the launcher profile.

  • Cleared the thread buffer for CPU tracing to avoid scopes ending up after thread end and cleared the thread buffer pointer.

  • Fixed a mismatching Malloc / delete in the DistanceFieldStreaming implementation .

  • Fixed a few issues where adding or changing a default subobject class in a class constructor would overwrite the previously set values in Blueprints and other instances of that class.

  • The CameraModifier's CameraOwner reference will now be nulled when it gets destroyed to ensure it does not prevent levels from being Garbage Collected.

  • PlayerState's Pawn reference will now be tracked and released when no longer required to make sure it doesn't prevent levels from being Garbage Collected

  • The AbilitySystemComponent's references to other Actors will now be released when the Actors are about to be destroyed to make sure they don't prevent levels from being Garbage Collected.

  • The AudioComponent will now clear references to other objects when its EndPlay is called to ensure it does not prevent levels from being Garbage Collected.

  • Fixed trace timestamps for Unix to match the double type.

  • Fixed usage of StringCast API in various source files.

  • Fixed usage of TCHAR_TO_ANSI and TCHAR_TO_UTF8 macros in various source files.

  • Fixed invalid arguments from being passed to CSV_EVENT and TRACE_BOOKMARK.

  • Fixed several Printf string calls that contained incorrect var arguments.

  • Fixed single-property config updates from failing to remove entries that were no longer needed as they matched the CDO.

  • Fixed Stats macros from causing extra evaluations of their Value expressions.

  • Fixed CrashReportClient from writing a buggy compressed header at the start of the compressed report and the valid one at the end of the report.

  • Fixed the FArchiveFileReaderGeneric to respect the FILEREAD_Silent flag.

  • Fixed a pointer to an unexpected type being passed to the CaptureStackBackTrace method.

  • Fixed a race condition causing log lines to merge together when writing to stdout.

  • Fixed many math types like FVector, and FIntPoint from violating strict aliasing rules.

  • Fixed Pakfile creation when the uncompressed buffer size exceeds the int32 capacity and introduced the TInlineAllocator64.

  • Added an ensure to avoid a synchronization bug involving DDC memory backend and value-locking that can occur when disabling the memory backend.

  • Fixed a bug where the filter order is ignored for columns in the rowSort list in collated summary tables. Columns you are collating by will still appear first, but their relative order is preserved.

  • Fixed peak summary from not emitting SummaryTableData when detailed reports are disabled.

  • Fixed an issue where Async Loading Handles could stall on Switch.

  • Fix to Async Loading Handles to stall on Switch, which was caused by an issue with the initial pak list.

  • Prevented the EditorPackageLoader method NotifyConstructedDuringAsyncLoading from asserting if an object is created during async loading.

Deprecated:

  • Deprecated the FPlatformString::TIsFixedWidthEncoding trait and replaced it with a constexpr FPlatformString::IsFixedWidthEncoding function.

  • Added a deprecation warning to typed allocators which fires when the allocator won't return appropriately-aligned memory - explicitly aligned versions of the allocators or alignment-aware allocators should be used instead.

  • Changed FPlatformString::CanConvertChar to FPlatformString::CanConvertCodepoint, with improved checks and documented assumptions.

  • The macros WANTS_COMMANDLINE_WHITELIST and OVERRIDE_COMMANDLINE_WHITELIST have been renamed to UE_COMMAND_LINE_USES_ALLOW_LIST and UE_OVERRIDE_COMMAND_LINE_ALLOW_LIST.

  • Deprecated the IsInitialized function and variable from ThreadingManager. The variable's access was causing TSan warnings.

  • Deprecated most public properties of UPackage and created accessors for them to be used instead.

  • Deprecated StringBuilder::Append(Char) in favor of StringBuilder::AppendChar(Char).

  • Deprecated StringBuilder's class AppendAnsi method in favor of the Append method.

  • Deprecated the TStringView SizeType method in favor of int32.

Removed:

  • the "Shared" version of the memory tracking functions. These are not used at all across the engine. This simplifies the code and makes the output of the obj list more readable.

  • Removed FPlatformMisc::SetEpicAccountAPI.

  • Removed the unused and inconsistently-applied BogusChar option from FPlatformString string conversion functions.

  • Removed deprecated FPlatformMisc::GetEnvironmentVariable overload.

  • Removed THasGetTypeHash.

Cooker

New:

  • Added Virtual Assets Dialogue to Derived Data Widget.

  • Added Analytics Support for Virtual Assets / Virtualization Module.

  • API support added to DerivedDataBackendInterface to help filter and tidy-up the Cooker's user interface:

    • IsRemote: Is this back end local or remote?

    • IsWrapper: Is this back end a wrapper?

    • GetTypeName: Returns a relatable back end type, such as Memory, S3, Http, Zen, or Fixed.

  • Reformatted the Cache Statistics user interface to show meaning full type name and display details.

  • Reformatted the user interface to add bold type for Titles and Totals

  • Disabled the InEditorCooking by default for all projects. Cooks launched from the editor by QuickLaunch will instead launch the cook commandlet in a separate process. Future cook architecture will move away from InEditorCooking, and the current default map type - WorldPartition - does not yet support it. A project should enable InEditorCooking only if necessary for backwards compatibility and only if it does not use WorldPartition.

  • Added ICookInfo and FInstigator to the cook to provide the AssetManager with the reason why a package was requested by the cook. This information is used automatically by the AssetManager, but can also be used to diagnose errors during cooking.

  • Added the commands -dpccvars=cook.displaymode=4: is used when packages are cooked, they will display the instigator that caused them to be cooked.

  • CookShowInstigator=: is used when the given package is cooked, it will display a message about the chain of instigators that caused it to be cooked.

Bug Fix:

  • Fixed ZenCache Statistics appearing when Zen is not the DDC backend.

  • Fixed pulsing of the cooker's Upload/Download arrows.

  • Fixed an AssetRegistry bug that caused the importer's new asset to never be found again until the editor is restarted.

  • Fixed the RemovePath method from the AssetRegistryImpl class to return true if the path already does not exist.

  • Changed the SetDefaultsForCookedEditor to always define the ASSETREGISTRY_ENABLE_PREMADE_REGISTRY_IN_EDITOR macro.

  • Made changes to the PackageNameCache definitions. The DoesPackageExist method will now use the TryConvertLongPackageNameToFilename method instead of the LongPackageNameToFilename method, so that it doesn't assert if the package name can't be resolved to filename.

  • The CookOnTheFlyServer class method GetAllPackageFilenamesFromAssetRegistry will now skip package names that don't have a valid mount point, such as packages in plugins that haven't been mounted yet.

Deprecated:

  • LegacyBulkDataOffsets is no longer supported in UE5.

Memory Profiler

Bug Fix:

  • Fixed the maxcount calculation to no longer integer overflow before capacity integer overflows. This expands the number of allocations we can fit into 32-bit LLM tracking, which is needed for some large projects that still want to use 32-bit LLM tracking.

Network Profiler

Crash Fix:

  • Fixed a crash that occurred when the nettrace is enabled and NetDriver is removed mid-frame.

UnrealFrontend

Bug Fix:

  • Fixed Exclusive time computation for old Profiler.

UnrealPak

New:

  • Implemented support for commands -Info, -List, -Diff and -Extract for IoStore containers.

Bug Fix:

  • Added a warning that will be printed when a pak file is loaded with a mount point that is not mounted to any root directory.

Datasmith

New:

  • DatasmithContent - Improved water shader (caustics, reflections, depth).

  • glTF Importer: Added support for PBR-Next Materials.

  • Navisworks: Added a warning dialog when trying to export an empty (initial) state.

  • Revit: You can now specify which metadata is exported with the Datasmith file.

  • Datasmith glTF: Added support for transmission extension.

  • DatasmithContent - Added water material and 2 instances for pools.

  • Changed the default, fallback Refraction value for Materials generated from USD Stages from 1.5 to 1.0.

  • It is now possible to set a threshold number of triangles, after which static meshes generated when opening or importing USD stages would get Nanite enabled. Additionally, it is now possible to add the "unrealNanite" token attribute to a Mesh prim, and use the "enable" or "disable" values to override the Nanite threshold and always enable or disable Nanite for static meshes generated from that prim.

  • Added a new export option when exporting levels to USD that allows controlling whether foliage is exported to the foliage Actor's layer or the place Component's layer. This is especially useful when the Place in Current Level option is enabled on the foliage tool.

  • You can now pick which AUsdStageActor is bound to the USD Stage editor via the combo box at the top-right of the window.

  • Prim attributes on the USD Stage editor are now sorted alphabetically by their attribute names.

  • You can now control the exported LOD range when exporting Static and Skeletal Meshes to USD.

  • Implemented custom 'unreal' USD render context for Unreal Materials. Now, existing, persistent Unreal Material Assets will only be used when opening a stage when the 'unreal' render context is selected. Additionally, in most scenarios, exporting Materials and Components that use Materials (with Material baking disabled) will generate USD Material prims with custom Unreal Shader prims, analogous to how MDL Materials are handled in USD.

  • There is now a new button (Reset State) on the File menu of the USD Stage editor. Use this button to reset the state / session of the opened stage without reloading it from disk.

  • Animated light and camera attributes, as well as skeletal animation, will now be read from USD and automatically added to the generated LevelSequence as regular tracks. Manipulation of these tracks will write the data back out to USD.

  • When writing out animation tracks to the stage while a USD Stage is opened, the exporter will now only bake every frame of the animation if absolutely necessary.

  • You can now control the location of the Asset folder when exporting Assets and Levels to USD.

  • You can now track the assignment of Material overrides on geometry cache Components generated when parsing the USD Stage. These assignments are now serialized to USD.

  • When exporting a Level to USD, if a USkyLightComponent is encountered that uses a TextureCube Asset with no existing HDR file on disk, the export process will now generate a brand new .hdr file from the source Asset and reference it in the exported USD scene.

  • Datasmith Solidworks: You can now export animations from Solidworks.

Bug Fix:

  • DatasmithContent - Fixed default rotation value for triplanar projection.

DevTools

Automation

New:

  • Improved the test exclusion list mechanic. This consists of the following changes:

    • Renamed blacklist to excludelist.

    • Support section exclusion rule can now exclude entire sections of tests.

    • Mark excluded tests as skipped in the report instead of entirely removed for the test list. This checks for exclusion just before running the test.

    • Removed NotEnoughParticipant state in favor of Skipped.

    • Add support for exclusion management from the Test Automation window.

    • Exposed device information to UE test report.

    • For platforms, the mechanic to edit their exclusion config file must be done manually through the target platform config file. This will be improved in a future release.

  • Added support for on-demand virtual devices in Gauntlet.

  • When test passes stop because of critical failures, AutomationTool now resumes UE test passes using a JSON report as tracking support.

  • Add support for comparing images other than PNGs.

  • Exposed arbitrary image comparison with test reference to python and blueprint.

  • Implemented OnTestStart and OnTestEnd events for the AutomationTestFramework. Included TestSamples plugin as an example.

Bug Fix:

  • Properly initiate FImageComparisonResult::CreationTime member.

AutomationTool

Bug Fix:

  • Fixed the initial map setting of the project launcher being ignored when also specifying maps to cook.

  • Fixed the -SeparateDebugInfo command for BuildCookRun failing to place debug files in a separate directory with the manifests.

  • AutomationTool will guard against the target platform's cooked data folder not existing during staging. This can happen when making builds that re-use previously generated pak files.

  • Pass -unattended to unrealpak from the staging code so that it doesn't pop up interactive dialogs.

BuildGraph

New:

  • Added support for nested expansion of Build Graph Properties. For example: $(Outer$(Inner)).

UnrealBuildTool

New:

  • Added support for Visual Studio 2022 as a source code accessor and compiler.

  • Added experimental support for Intel OneAPI compiler.

  • Added Linux and Mac support to GenerateClangDatabase in UBT.

  • UBT can create an "Internal" include directory. This directory is only added to a module if the referenced module has the same scope.

  • Uses /sourceDependencies to generate dependency list instead of cl-filter if the msvc compiler version is at least 14.27

  • Replaced uses of whitelist and blacklist with AllowList and DenyList in .uplugin and .uproject module descriptors. For example, WhitelistPlatforms is now called PlatformAllowList. If the new names are not found, the parser will fall back to the old names for one or two releases, but support will be removed entirely in a future version.

  • Added a -Rebuild command line option that will clean a target before attempting to build it.

  • Added support for passing /experimental:deterministic to the MSVC compiler (WindowsPlatform.bDeterministic). This is disabled by default.

  • Added support for log file rotation to UnrealBuildTool.

  • Added a TraceConsole function to EpicGames.Core.Log.

  • Added support for Clang's static analyzer to the Unreal Build Tool. You can enable this by adding -StaticAnalyzer=Clang to the invocation line. By default, Clang will print out the output from the analyzer to stdout. However, if you add -StaticAnalyzerOutputType=Html, a directory will be written in the same location that object files are produced, with a navigable HTML file containing the result of the static analysis.

Crash Fix:

  • Fixed a crash in UnrealBuildTool when a platform SDK is only partially installed.

Bug Fix:

  • Added sourceFileMap to the generated VSCode launch.json file for installed builds, so the debugger can load source files correctly when debugging the editor.

  • Fixed not being able to generate VS2022 project.

  • Updated compiler version to 143 in VS Project Generator.

  • UnrealBuildTool will provide a warning if a module is referenced with an incorrect text case.

Deprecated:

  • Removed support for deprecated Intel compiler.

  • Removed support for Visual Studio 2017.

  • Set minimum Visual Studio version to 2019 v16.11.5, toolchain 14.29.31033 Set minimum Windows Clang version to 10.0.0

UnrealHeaderTool

New:

  • UnrealHeaderTool can parse UFUNCTION defaults from default constructed structs.

    • Example: void MyFunc(FMyType MyArg = FMyType());

Editor

New:

  • Texture encoding now supports two encoding settings, so that you can enable slower, high quality encoding features for cooked builds while retaining fast encoding in editor. These settings are in Project Settings -> Texture Encoding. There is also a user override in Editor Preferences -> Texture Encoding.

  • Migrated the Alembic third party AlembicLib module to Engine/Source/ThirdParty.

  • Upgraded engine version of the third-party Alembic libraries to version 1.8.2.

  • Added Default World Partition Settings. These can be found in AWorldSettings, can be saved from the WorldSettings panel in the World - Advanced section. These set a default loading state for a World Partition map, including loaded cells and data layers, to avoid an empty world when loading a map for the first time.

  • Added support for property categories to be prioritized via a new 'PrioritizeCategories' metadata.

  • Added support in the Content Browser for Delete/Copy/Rename operations on World Partition worlds.

  • Upgraded the engine version of the third-party USD libraries to version v21.08.

  • Added a project setting to the World Partition settings for the Foliage Grid Size. This setting gets assigned to the WorldSettings actor when the WorldPartition gets created.

  • Property tooltips now also contain the raw name of the property, so you can identify the property if the name is too long to be displayed in full.

  • Feature packs can now have multiple categories specified for them in the "Category" field of the manifest.json file

  • Added the ability to break the Details view into sections, such as "Rendering" or "Physics". Sections can be defined anywhere with access to FPropertyEditorModule, using the FindOrCreateSection function. See FDetailCustomizationsModule::RegisterSectionMappings for an example of current section mappings.

  • Refactored the existing Derived Data Cache (DDC) Toolbar Widget:

    • Moved all the code to a plugin module.

    • Removed superfluous icons from the toolbar.

    • Added combo-box dropdown menu options.

    • Added dockable window support.

    • Added icons to the UE5 style.

    • Numerous adjustments made to UI layout.

  • Upgraded the engine version of the third-party OpenSubdiv libraries to version 3.4.4.

  • We now use per-platform Python site-packages directories for USD Python modules. This leverages recent changes to the PythonScriptPlugin that recognize per-platform site-packages directories. Arranging the modules this way allows the Python modules generated by building USD to be dropped directly into the appropriate platform directory and avoids the need to patch the init.py files to look for Mac .so files in a different location.

  • Advanced dropdowns in Details views are now styled like a normal group rather than as an expander.

  • Made adjustments to the Spline component, so that Alt-Drag and Add Key To Segment now copy the spline point type (curve/linear/constant) of the adjacent spline point.

  • Added detail customization for vector curves, so that you can create curve editors for vectors that are similar to the editor available for float curves.

  • Spline components are now colored with a gradient effect to more easily tell when they are selected, and they have more distinct colors.

  • Added support for cm/s as a speed unit for ForceUnits/Units property metadata.

  • Updated spline box and frustum selection to always add rather than toggle points in the selection area, or append to selection when shift is pressed.

  • P4 Client SDK has been updated to 2021.2 for the Mac target platform.

  • AssetRegistry now adds writable files to the Reconcile cache in the Source Control window.

  • There is now an UncontrolledChangelistValidator, which reconciles writable assets and warns the user if new uncontrolled changes are found during changelist validation

  • Added a Validate Changelist contextual action to the Source Control Changelists window.

  • Added Usecases to Editor Validators, so validators can specify which Usecase should be executed by overrides.

  • There is now a FValidateAssetsResult struct which holds detailed information about validated assets and results.

  • You can now open Unreal Insights from the Editor menu.

  • Added virtual shadow map debugging and profiling visualizations to the Editor Viewport dropdown.

  • You can no longer undo the deletion of sublevels.

  • Added new settings to the Geometry Cache plugin settings to control the memory usage of streaming geometry caches from Alembic and USD.

  • Streaming geometry caches stats are available through the console command stat GeometryCache.

  • Uncontrolled Changelists now support files marked for delete in Source Control.

  • You can now disable hardware occlusion queries on a per-scene basis in the Editor.

  • The Texture Editor now has a new tab that shows various properties about the encoded texture, including whether the texture was encoded with Fast or Final quality. This tab lets you experiment with various Oodle properties like encode quality settings on the texture, and also can show you the deployed size benefits of RDO encoding.

  • The P4 Client SDK has been updated to 2021.2 for the Win64 target platform.

  • When you launch Unreal Insights from the Editor, if Unreal Insights is not found it will now be built.

  • When importing a static mesh from an Alembic file, you can now enable Propagate Matrix Transformations without enabling Merge Meshes.

  • There is now a DirtyFilesChangelistValidator to verify there are no unsaved modifications when submitting a changelist in Source Control.

  • The FPropertyAndParent struct now contains the array indices of the changed property and all its parents, so you can determine which property value changed.

  • Added the option Delete New Files on Revert to the Source Control window.

  • Removed Python 2.7 support from the Engine.

  • Added a delegate for mode toolkits to do any UI shutdown that depends on the mode UI layer.

  • Exposed a Python setting to let users select if the embedded Python interpreter should run in isolation mode or not. By default, the engine interpreter runs in isolation mode to minimize risk of having incompatible Python software crashing the engine.

  • Reskinned the Message Log.

  • Added a shaded preview for Volumes.

  • Changed the column names in the Outliner to support localized strings.

  • Added the UFUNCTION UBlueprintEditorLibrary::GeneratedClass(UBlueprint*) as a script method for Python users. For example, bp = unreal.EditorAssetLibrary.load_asset("/Game/Blueprints/BP_AdjustButSpawn") print(bp.generated_class())

  • Reskinned the Restore Packages panel.

  • Added Bridge menu item back to the workspace menu, as well as updated the icon.

  • Added a 'Preview Profiles' combo box to asset editor viewport toolbars to quickly change preview profiles. The profile combo is only visible when the user has more than one profile. This was added to the Material Editor, the Static Mesh Editor, and the Niagara Editor.

  • FAssetEditorModeUILayer now serves as a layer between a given asset editor and the mode toolkits, so that the mode toolkits can request UI panels and the asset editor determines where they are located in the asset editor layout. The first implementation is in the Level Editor, and all default mode UI has been moved to FModeToolkit.

  • Added the ability to show or hide individual columns in the Outliner by right-clicking on the header.

  • Separated out the FActorInfoColumn that showed modes such as Type / Level / Layer into separate columns that can be hidden or shown.

  • Added support to recursively search Editor menus.

  • Added the combo chevron to the Status Bar button.

  • Reskinned the Create Blueprint From Selection Panel button.

  • Added colors to all major editor tab icons. Renamed the World Outliner to Outliner.

  • Reskinned the Plugin Manager.

  • Reskinned the Project Launcher window.

  • Added support for multiple modes in mode UI layers. There is now a paired AssetEditorUISubsystem that does the tab registration so the modes don't have to be registered before the asset editor opens.

  • Viewports can now focus on anything implementing a typed element world interface, not just Actors and Components.

  • Reduced the default length of Spline Component tangents to make them more manageable.

  • Reskinned the Level Editor Toolbar.

    • Moved the Editor Modes into a single dropdown.

    • Combined the Content and Create Menus into one menu.

  • Updated the placement and style of Play and Debug buttons in toolbars.

  • All menus, those created by menu builders and UToolMenu, now have a default height of 1000.

  • Add and Filter menus in the Content Browser are now searchable.

  • UToolMenus are searchable by default.

  • Added a warning icon in the Auto Save Restore UI beside a package to restore, if the auto-saved package modification time is older than the file it is supposed to restore.

  • Hiding a Level deselects everything in it now, not just Actors and Components.

  • The Open Asset Dialog (Ctrl + P) now opens as a Tab instead of a floating window.

  • Updated the embedded Python interpreter from 3.7.7 to 3.9.7.

  • Added the ability to copy property display names using the right-click context menu.

  • The visibility of columns in the Outliner is now saved across editor sessions.

  • In the USD Stage Editor, dirty layers will now show a star (*) after their names.

  • Removed the Alt+P shortcut for opening the Place Actors Panel.

  • Added support to USD for the IOR attribute on UsdPreviewSurface materials.

  • Added the SSimpleButton widget to the ToolWidgets API. This can be used to create buttons in the UE5 Style.

  • Added SSimpleTimeSlider to the ToolWidgets API. This can be used to create a Time Slider in the UE5 Style.

  • Add the SSearchableComboBox widget to the ToolWidgets API. This can be used to create a searchable combo box in the UE5 Style.

  • Added SCheckBoxList to the ToolWidgets API. This can be used inside a Custom Dialog to display a list of checkboxes.

  • Added support to USD for virtual textures on the UsdPreviewSurface master materials.

  • Added SWarningOrErrorBox to the ToolWidgets API. This can be used to display a warning or error in the UE5 Style.

  • Added SSimpleComboButton to the ToolWidgets API. This can be used to create a combo button in the UE5 Style.

  • Added SPositiveActionButton to the ToolWidgets API. This uses the UE5 Style and can be used for actions such as "Add".

  • Added SNegativeActionButton to the ToolWidgets API. This uses the UE5 Style and can be used for actions such as "Delete".

  • Added a script to build the USD SDK for UE on Windows.

  • Imported jpeg textures will now be stored in their original jpeg format in the package file, and will only be converted to compressed PNG format when the texture pixel data is modified inside the Editor.

  • Reskinned and Updated Interfaces:

    • World Details

    • Levels Browser

    • HighResScreenshotTool

    • Path Picker

    • Asset Picker

    • Find In Blueprints

    • Message Dialogs

    • Scene Outliner

    • Icons

  • Created Styling option for Parent Rows in Tree Views.

Improvement:

  • Added a Source Control Asset Data cache to prevent Source Control Changelist Window from rebuilding the Asset Data from scratch when the UI refreshes.

  • Modified the Source Control beautification to be an async process, preventing crowded changelists from blocking the workflow. The filenames are now beautified when available.

  • Parallelized Asset Data information retrieval from Source Control.

Crash Fix:

  • Fixed a crash when an invalid TitleProperty was used for a Details property.

  • You can no longer dock tabs into docking areas that are contained inside the tab itself, because this would cause an infinite loop and eventually crash.

Bug Fix:

  • The MakeTransform function now takes a default value for Scale from the FTransform struct. This fixed Python to initialize the unreal.Transform method with the expected default values.

  • Fixed mouse wrapping prematurely over RDP when clicking 10% away from screen edge.

  • Fixed an issue where Advanced Copy was not copying packages that weren't loaded into memory.

  • Fixed an issue where the camera would snap back after using SetLevelViewportCameraInfo and orbiting.

  • Opening the Save Layouts dialog no longer immediately renames the current layout to "Copy of ", leading to an ever-increasingly long name suggestion in the Save Layout dialog.

  • Fixed a crash due to unhandled cases in SGameFeatureStateWidget::GetDisplayNameOfState(...).

  • Fixed a crash when pasting an empty string, or a string with only newline separators, into a bulk property editor cell.

  • Booleans in EditCondition are now case insensitive.

  • Fixed improper filtering of object path names in AssetUtil::ExtractAssetDataFromDrag.

  • Fixed a bug that prevented the use of the Gamemode Override when calling GEditor > RequestPlaySession. The URL needs to contain the Unreal path for the game mode to be found.

  • Fixed a typo that prevented the bShowHiddenPropertiesWhilePlaying from being changed in the UI.

  • Fixed spline component to correctly compute zero bounds when the spline contains no points.

  • Selecting a spline point in one viewport now updates the other viewports in a multi-viewport layout.

  • Fixed an issue where a mouse click on "Pin Actor" in Scene Outliner entered FSlateThrottleManager's Responsive mode without ever leaving it. This is similar to SSceneOutlinerTreeRow::OnMouseButtonDown.

  • Addressed an issue where the camera velocity was reset when focusing on the camera editor. This fix prevents rubber banding.

  • Custom copy/paste actions now pulse the details row to indicate they were run.

  • Fixed an issue where StaticMesh Foliage would not appear in the Foliage Palette in a World Partition level.

  • Fixed an issue where StaticMesh Foliage Actors would not persist between saves on a World Partition level.

  • StaticMesh Foliage Type is now required to be an asset when working in a World Partition Level.

  • Fixed an issue where launching the Editor with -game would lead to a crash on levels using One File Per Actor.

  • Addressed an issue where Mesh Paint was not allowing vertex painting across all segments of a spline mesh component.

  • Fixed spline Alt-Drag to work correctly with large snapping values.

  • Fixed an issue with FBX Static Mesh reimport, so it now correctly recomputes the spline mesh component collision.

  • Added information to what failed when an edit condition cannot be parsed, indicating whether it was an issue with the type or the value.

  • Fixed an issue with spline Snap to Nearest to snap to the current spline as well as nearby splines and to only snap to valid and visible nearby splines.

  • Fixed vertex painting on Blueprint spline mesh component instances so the vertex data is no longer lost when the construction script is rerun.

  • Fixed an issue where an Ensure message could display in studio analytics during long slow task dialogs.

  • Added a LinearDeltaSensitivity metadata property tag to make it possible for Detail panel sliders without upper and lower bounds to not scrub exponentially.

  • The source control item in the Edit menu now dynamically changes between Connect to Source Control and Change Source Control Settings, depending on the current state of the connection to source control.

  • Fixed the regression where PIE sessions would have Lumen Visualization enabled by default.

  • When converting to FName in Python, there's a guard to verify the name will fit within NAME_SIZE.

  • Fixed the issue where the HighResShot console command would overwrite the file specified in the filename argument from a previous call because it didn't reset the reference when no parameter was given on a subsequent call.

  • Subcategory nodes now hide themselves if no children are visible.

  • Added a new function AddPendingLateJoinClient to fix an assert, if the experimental Late Join feature was bound to a key and the key pressed while in PIE.

  • Alembic import now stores all the import settings used at import so it can use them again on reimport.

  • Fixed the issue where shelved files from another branch were preventing FPerforceGetPendingChangelistsWorker from completing, causing the Changelist Window to refresh.

  • When you search in the Details panel, the Advanced subcategory will now be filtered out if there are no children to display.

  • Basic Python wrapped types now have the representation function repr, which was missing before.

  • Clicking a suggestion in the Engine Console auto-complete list now moves the caret to the end of the selected text, matching the behavior of pressing Tab to select the value.

  • RemoveLevelsFromWorld now checks if the GEditor->Trans pointer is valid before accessing.

  • Fixed the issue where the file history was truncated for moved files in Source Control.

  • Fixed an issue where SRichTextHyperlink was not triggering or navigating when clicked.

  • Fixed an issue where SRichTextHyperlink was not displaying correctly when clicking on the link, moving the mouse away from the link, and releasing the mouse. The link now appears underlined.

  • Fixed the Python plugin to allow resolving USTRUCT Make and Break functions specified with 'HasNativeMake' and 'HasNativeBreak' later. This supports cases where the Make or Break functions are implemented in a C++ module that is loaded after the module declaring the USTRUCT. The implementation postpones resolving missing functions until FCoreDelegates::OnPostEngineInit is invoked. If one or more functions are still missing, the corresponding error(s) are logged.

  • Fixed an issue where the current LOD would not display on static meshes in the Static Mesh Editor.

  • Fixed a crash in EditConditionParser when using an invalid enum or value.

  • Changed how lambda captures the Asset Editor toolkit name for conditional additions to the Asset menu.

  • We now refresh cached menus when the editor selection changes.

  • Fixed an issue where main frame notifications couldn't be dismissed if they were also set to time out, because the pointer would reset.

  • Removed code from the Python build scripts trying to detect if a user-specified SDK is 32-bit or 64-bit. Parsing the Python interpreter output could make the build fail.

  • Fixed source code navigation on Windows not working if "On Demand Symbols Loading" is enabled.

  • Fixed the Editor Python Executor to parse and escape quotes for -ExecutePythonScript command line parameters to allow quoting python arguments containing spaces.

  • Fixed an issue that prevented some options from functioning in an Asset Picker when it is embedded in a menu.

  • Prevented adding non-existing directories to Python 'sys.path'.

  • Fixed an issue causing duplicate buttons to show up for some properties in the Details Panel, such as the Row Struct property in the Data Table Details.

  • Fixed the Editor toolbar dropdown not closing when the user clicked in a non-client area, such as the one between the Help menu and the label showing the project and branch.

  • Fixed a memory leak each time we drag something in the Editor Viewport.

  • Fixed an issue where Preview Rendering Level change was not being applied to either editor-viewport or separate-window in-process PIE.

  • Added FSourceControlFilesDeletedDelegate. We now broadcast that revert or markfordelete operations could require cleanups, for example when packages, assets, or refs are deleted.

  • Fixed an issue where reverting Mark For Add on an asset was preventing you from recreating an asset with the same name in the same editor session. The asset was still present in AssetRegistry.

  • Fixed an issue with preview rendering levels where you couldn't change to a platform that had the same Feature Level as the running Editor.

  • Moved FocusAllViewportsToSelection to FEditorViewportCommands so that it doesn't trigger during PIE sessions.

  • Fixed a potential crash when AddObjectPropertyData was called during a customization.

  • Deprecated functions in the EditorScriptingUtilities plugin now correctly show the deprecation message in the Editor, which contains the location of the replacement functions.

  • Fixed a crash in the updated CurveTableEditor when adding curves.

  • Fixed an issue where Actors spawned with bHideFromSceneOutliner were still visible in the Scene Outliner.

  • Fixed the hit proxy gathering on asset editors that have no world.

  • Fixed saving high resolution Editor screenshots so they are saved as .png.

Content Browser

New:

  • Added support to the Content Browser for migrating selected assets and their dependencies that are inter-referential across content roots. Assets spread across content roots are migrated into the corresponding content root in the destination, if it exists. If any don't exist, we migrate the selection and dependencies to temporary packages into a folder that is migrated to the destination.

  • Updated class folders to use names friendly to plugins.

  • The Content Browser can now sync to levels and maps, making working with these assets a bit easier.

  • Float, Vector, and LinearColor Curve assets can now be imported from and exported to JSON. They also support the following hotfix syntax to hotfix the entire asset:

    • +CurveFloat=;CurveUpdate;""

    • +CurveVector=;CurveUpdate;""

    • +CurveLinearColor=;CurveUpdate;""

  • Asset names are now sorted in a way that handles all trailing numbers, including fully numeric names.

  • Made a slight increase to the Sources panel splitter size and Hit Detection handle in the Content Browser.

Material Editor

Bug Fix:

  • Fixed a typo in the RemapValueRange node for the Material Editor.

Media Framework

Bug Fix:

  • Fixed an issue when ExrImgMediaReaderGpu (ImageMedia) was falling back to default reader when the frame read was canceled, but still successful.

  • Fixed an issue with MediaTexture. There was no interpolation between mip levels for textures with mips generated externally to Media Framework, which created a hard aliased edge. Now there is filtering between mip levels when mip levels are provided from outside.

Scripting

New:

  • Added Get/SetNaniteSettings functions to StaticMeshEditorSubsystem.

  • Adding Get/SetLODGroup functions to StaticMeshEditorSubsystem.

  • Changed FMeshNaniteSettings to BlueprintType, and its members are now BlueprintReadWrite.

  • Plugins can now add third-party Python scripts within their Content/Python/Lib/site-packages and Content/Python/Lib/{Platform}/site-packages folders, and these will be automatically available for import within Unreal.

  • PythonScriptCommandlet now returns a non-zero value when the script execution fails.

  • Added the Python Foundation Packages Experimental Plugin. Python packages such as NumPy 1.20.3 and PyTorch 1.9.0 will be available in the Python environment when the plugin is enabled.

Static Mesh Editor

New:

  • Improvements were made to the Static Mesh Editor. The quality of 16 bit UV quantization is now rounded instead of truncated when converted from F32. In rare cases, this causes problems with old content, particularly when previous UVs were exported for baking textures. To allow toggling back to the old UV quantization, a new option was added in FMeshBuildSettings called bUseBackwardsCompatibleF16TruncUVs. In the Editor, this option is called "Lower-Quality UVs (UE4 Compatibility Mode)". This is set automatically from the mesh version, so seldom needs to be set manually.

  • The Static Mesh Editor now has the default ModeUILayer tab appear along with the existing docked extension tabs.

Bug Fix:

  • Fixed a crash in the Static Mesh Editor when setting a custom complex collision mesh and trying to select it.

Gameplay Framework

New:

  • Overhauled the Blueprint Debugger by adding rich tooltips to pins when stopping at a breakpoint, and expanded functionality in the Blueprint Debugger tab.

  • Exposed a method to set the Character's CrouchedHalfHeight variable to Blueprints.

  • Added a new Blueprint editor workflow setting to provide the user the choice on how to restore breakpoints when the Blueprint asset is reloaded.

  • Changed the default behavior of the CheatManager so it is completely disabled in Shipping builds. Test builds will now work like the Development build where it can be enabled in multiplayer with the EnableCheats command.

  • Added a PinSelectorFilter to provide users the capability to customize Blueprint pin filtering.

  • Added support for input bindings in components. You can now place Input Action and Input Axis mapping event nodes in components.

  • Implemented a Key parameter for PrintString and PrintText nodes.

  • Added new delegates to the GameViewportClient that allow overriding key and axis input before it is routed to the player controller. This can be used for things like console "Press Start" screens.

  • Increased the default value for the NetPackedMovementMaxBits variable from 2048 to 4096.

  • Implemented Kismet Library utilities for reading an entire Render Target at once.

  • Blueprints can now be associated with a namespace identifier(MyProject.MySubArea). When set, this will exclude it from being loaded in the next editor session by another Blueprint editor context that does not share or otherwise import the same namespace. This feature is experimental.

  • Added a note to Enhanced Input event nodes when an exec pin is connected to an action that will not fire. InputTriggers can override this method to provide their own bitmask of supported types.

  • Support for doubles and int64 types in the Format Text node have been added.

  • Exposed the AffectedByTimeDilation boolean in the InputTriggerTimedBase class to the Input Action editor.

  • Added a ToString method for Input Action Values.

  • Full Parent Names will now display in the Class Settings panel in the Blueprint Editor.

  • Exposed the bForceRebuildImmediately variable to both the AddMappingContext and RemoveMappingContext. This provides users a method to force a rebuild of the control mappings within the same frame of changing their context.

  • Improved the tooltip on the Execution pins of the Enhanced Input action event nodes to give more detail about when to use which pin.

  • Game feature plugins can now modify the gameplay cue paths on the GameplayCueManager.

  • All subobject editor icons are now white. The previous icon colors of green and blue have been removed.

  • Added FindRelativeLookAtRotation function to Kismet Math Library.

  • Added setters for default classes in the InputSettings.

  • Implemented the ability to double click an input action node and have it open the corresponding input action asset.

  • Support to replicate loose gameplay tags and an ability's Activation Owned Tags has been added in the Gameplay Ability System.

  • Games can now specify which Blueprint classes can be edited while playing in the editor. BaseClassesToAllowRecompilingDuringPlayInEditor is an option in both the Blueprint Project Settings for project wide allowances, and Blueprint Editor Preferences for local changes.

  • Blueprint interfaces now use Blueprintable/NotBlueprintable to determine if they can be implemented in Blueprints to match how classes work. CannotImplementInterfaceInBlueprint will still work and is treated like NotBlueprintable.

  • Gameplay Abilities: Exposed a helper method GetGameplayEffectUIData to get the UIData from a gameplay effect class.

  • Exposed GetBuildVersion and GetBuildConfiguration to Blueprints.

  • Added an explicit context to game feature activate/deactivate that allows restricting to a specific world instance. This means that game feature actions can be used correctly by game-specific systems while in Play in Editor.

  • Fixed data loss with Data Registry Ids that point to invalid registries. They will now keep their data but display a warning in the editor.

  • Added support for Niagara camera lens effects to gameplay cue notifies.

  • Re-ordered the message log tokens in Blueprint runtime errors so the most relevant token(node) is displayed first instead of last.

  • Changed the Async Load Primary Asset Blueprint nodes to return all requested and loaded assets instead of only newly loaded ones.

  • Added a PreCreatePIEInstances as a PIE lifecycle event on the editor engine.

  • Added the End Ability Locally function to gameplay ability, this is needed for predicted abilities with animations where you don't want the server ability to end early and miss a callback.

  • Added a display of expected units (cm/s or cm) to various properties in the CharacterMovementComponent class,

  • Added a new version of the PreLoadMap delegate called PreLoadMapWithContext that provides the associated world context for the load map request. This allows registrants to disambiguate which game instance is involved in multiplayer Play In Editor.

  • The target Actor for Add Component game feature actions can now be an abstract class.

  • Added a game feature plugin template that contains a runtime C++ module.

  • The controls for switching Game Feature states now have tooltips about the nature of each state.

  • Changed the LastMovementServerBase pointer on the Character Movement Component to a weak object pointer in case the component gets deleted.

  • Return value pins on async task nodes now attempt to pull tooltips from the underlying delegate declaration providing better user-facing information to be surfaced.

  • Get Subsystem nodes now pull the tooltip from the class declaration of the underlying subsystem.

  • Changed Blueprint functions to behave like the GetPlayerController function, to use a stable index where 0 is always the first local player controller. This stays consistent during map transfers.

  • Most core types (FVector/FMatrix/FQuat, and so on) now support both float and double variants, but will default to double. This enables enhanced precision for Actor placement/orientation, as well as increased world sizes.

  • Added an OnPawnChanged event to PlayerState class.

  • Added an OpenCV helper Blueprint Function Library which adds convenience nodes for ArUco marker tracking and camera calibration chessboard detection.

  • Added the following macros PRAGMA_FORCE_UNSAFE_TYPECAST_WARNINGS, PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNING, PRAGMA_RESTORE_UNSAFE_TYPECAST_WARNINGS to permit control of truncation and narrowing warning state within code blocks that assist with identifying potential Large World precision issues.

  • Made Conversion casts between float and double core type variants explicit.

  • Input Delegate Support inside of Widget Blueprints. This provides users capability to place the normal "Input Action" and "Input Axis" event nodes in a widget and they will behave as they would in an Actor as long as there is an owning Player controller.

  • Improved the state tracking of which keys are Triggered in enhanced input.

  • Added an EnableLargeWorlds boolean variable to the World Settings class for wrapping disabling bounds checks, octree visibility, and octree shadow culling. This can be used for preliminary Large Worlds testing.

Improvement:

  • Reflected references are automatically updated when instances are replaced. UMG widgets with existing instances do not work by default, however games can hook a delegate to recreate their user interface in order to enable support.

  • Improved the error message about duplicate world settings by printing the full path of the Actor and persistent level that has the issue.

  • Better support has been added for different world modes in the Add Components action for creating both client and server components in standalone.

Crash Fix:

  • Fixed a reference replacement oversight during object consolidation to a duplicated Blueprint asset that could lead to an editor crash in some situations.

  • Fixed a crash after choosing to find and replace all node references to a member variable in the Blueprint editor.

  • Fixed a crash when adding an input context that contained a null action mapping.

  • Fixed a crash when pasting a local variable get node in the event graph of a child blueprint.

  • Fixed a crash when pasting a local variable get node from the parent Blueprint into the child Blueprint's event graph.

  • Fixed a crash when activating a non-instanced ability that attempts to call instanced-only functions.

  • Guarded a potential crash in the GetAbilityLevel method from the Gameplay Ability class if the Ability System Component pointed to an Actor whose info has been destroyed.

  • Prevented a crash on shutdown that occurred if the UObject system had already been removed by the time the game features editor shut down.

Bug Fix:

  • Added the AbilitySystemGameFeatureActions plugin, and moved the GameFeatureAction_AddAttributeDefaults class into it from the GameFeatures plugin.

  • Added a space between arguments when parsing multi-axis console commands to correctly parse when initializing from a string in the EnhancedInput class.

  • Fixed propagation to instances when modifying the query in a parent object of a GameplayTagQuery.

  • Fixed the GetClassDefaults Node discarding ShowPins settings during compilation if connected to a reroute node.

  • Added a fix to account for indirect dependencies from a macro graph expansion which could otherwise lead to a script VM crash during PIE.

  • Refreshed user-defined structure editor data on save/compile to ensure default object reference values stay in sync with default structure instance data.

  • Fixed issue where looping gameplay cue notifies were incorrectly flagged as having active effects.

  • Fixed a few destructor typos that attempted to unregister handlers from the wrong delegate interface on editor shutdown.

  • Fixed a regression that incorrectly restricted the Outer input pin on ConstructObjectFromClass nodes to self class subtypes.

  • Fixed an issue resulting in an invalid graph when Promoting a Collapsed Node to Function/Macro is undone.

  • The const Blueprint function attribute is now kept in sync on function overrides when inherited from a parent class.

  • Fixed an uninitialized variable leading to a broken toggle UI on Mac/Linux editor targets.

  • Marked macros being pasted into Macro Libraries as public.

  • Fixed a bug where Blueprint nodes with gameplay attribute pins would not respect redirectors.

  • Fixed an invalid Blueprint compiler warning for generated Blueprint assets that were not otherwise loaded.

  • Marked the enhanced input console commands as ECVF_Cheat to prevent them from being added to any shipping builds.

  • Improved Blueprint thread safety checks.

  • Variable categories in the My Blueprint tab are now properly sorted.

  • Added function metadata that provides users capability to exclude functions from type promotion.

  • Fixed a minor bit packing issue in the generated Blueprint class structure.

  • The real time delta seconds of the world will now be tracked to use as a backup if Time Dilation on the player controller is set to 0. This ensures that timed triggers are still calculated correctly even with time dilation at 0.

  • Fixed an issue where repeated ability-driven montages could fail to be fully replicated on simulated proxies.

  • Prevented memory corruption when appending an array.

  • Added a flag to ignore EnhancedActionKeyMapping's if the Key was down during a rebuild of the Player Control Mappings.

  • Added Check if an ActorComponent is replicated to show an icon in Blueprint.

  • Check if AttachParent is valid when receiving AttachSocketName before updating the attachment.

  • Fixed several issues with Play In Editor with multiplayer games, it now correctly handles URL options like a listen server does across map transitions and the world net mode will be accurate to the current condition instead of the initially launched mode.

  • Fixed several issues with using interface types in blueprints for casting or constructing objects.

  • Prevented a spurious log error when editing CanReferenceTheseDomains in Asset Referencing Policy settings.

  • Fixed the GetDebugDisplayName method from the World class to work properly outside of the scope of 'play in editor' ticking.

  • Improved logging quality in the RawInput class and fixed expected behaviors such as disconnected devices or query results to be logs instead of warnings

  • Changed the user facing display name for GameFeaturesManagerClassName to "Game Feature Project Policy Class".

  • Fixed an issue that prevented certain state transitions in the Game Features editor from working.

  • GetAssetUserDataArray is now implemented for the WorldSettings class.

  • The PlayerController class will now never return a null view target.

  • Editor Only child Actors are no longer implicitly transient.

  • Added an assert to make errors when replicating an attribute set on an improperly set up ability system component more explicit instead of causing an access violation.

  • Prevented self-assignment of Child Actor Components in Blueprint classes.

  • Added detection and repair process for maps that became corrupted with multiple Level Script Actors.

  • Fixed an incorrect doc-comment for the AddFunctionGraph function.

  • Fixed an issue where the Blueprint class default values were not initially propagating to the child classes if created by promotion to a variable.

  • Fixed a bug where additive root motion's influence would be cut in half if applied while falling.

  • Fixed a mouse wheel scroll up and down by manually setting the value of boolean keys that are pressed and released within the same frame.

  • Blueprint-added component archetypes will no longer fail to load when the underlying class type has a non-default ClassWithin value.

  • Fixed an editor access violation crash caused by a reference to a stale property wrapper object.

  • Fixed a failure to regenerate function signatures referenced by call sites after renaming input/output pins on function graph entry/result nodes.

  • Fixed missing import warning on next editor load after renaming a macro in a Blueprint macro library.

  • Ensure that Blueprint graph nodes are always fixed on load as part of the precompile phase, including for fast paths (data-only Blueprints).

  • Blueprints can no longer bind to gesture keys if it is not enabled in the settings. To change this enable the gesture setting in the project settings or delete the problematic node.

Deprecated:

  • Deprecated old input scales on the player controller (InputYawScale, InputPitchScale, and InputRollScale).

  • Deprecated the UDynamicClass API and removed all special-case code paths for dynamic types.

  • Deprecated the Always host global Blueprint searches originating from the Blueprint editor's "Find Results" tab in a global tab window.

  • UHT no longer generates the PPO_ accessors that previously used to allow nativized Blueprints to bypass C++ protection levels as Blueprints have different semantics for private and protected.

  • KismetMathLibrary Deprecated MinimumAreaRectangle function, which effectively returns the average of all input points as the rectangle center, and introduced MinAreaRectangle function that returns the proper minimum area rectangle around the input points.

Removed:

  • Removed the creation of transient TRASHSTRUCT objects as they are no longer required by user-defined struct precompilation in the editor context.

  • Removed underlying framework and support for the Blueprint nativization feature and all related code modules from the engine.

Geometry

New:

  • Updated the Path Extrude tool to let users choose how to set poly groups on the offset top mesh.

  • The Path Extrude tool can now enable Ramp extrude modes for closed paths.

  • Users of the Path Extrude tool can now enable snap to grid (distance) during width specification.

  • Updated the Path Extrude tool to enable optional rounded corners. This replaces polygon corners with circular arcs. Users can set the desired uniform arc radius.

  • Added a Convex Hull mesh generator option to the AutoLOD tool.

  • Added the ability to add an overlay widget to the viewport.

  • Added a ModeUILayer member to handle mode toolkit hosting StaticMeshEditorModeling.

  • Created a mode and toolkit with AutoLOD and LODManager tools.

  • Added a button to the StaticMeshEditor's toolbar to toggle UMeshLODPluginEditMode.

  • Updated tools to use UnsetTriangle instead of SetTriangle if we know an overlay triangle is invalid. Avoids a checkSlow in SetTriangle.

  • Added the ability to draw unset UV triangles in the Mesh Inspector tool.

  • The Lattice tool no longer allows constrained lattice vertices to be moved, even when not in Soft Deformation mode.

  • When adding a new attribute, or undoing the deletion of an attribute, sets the selected attribute in the UI to the name of the new attribute in the Attribute Editor tool.

  • Added support for open curves in PolygonEdgeMeshGenerator to the Path Extrude tool.

  • Added temporary AActor members to contain UDynamicMeshComponents used as preview meshes in some tools.

  • Updated the Path Revolve tool so when the next click would finish the path, highlights the path in yellow to let the user know.

  • Added output type properties to Boundary Revolve tool.

  • Users can now optionally create new polygroups for refined output faces in the Subdivide tool.

  • Modeling Tools no longer snap the transform gizmo on mouse-down. Now waits for the drag event.

  • Added support for Custom Primitive Data to ProceduralMeshComponents.

  • Added support for Custom Primitive Data to DynamicMeshComponents

  • Updated the Subdivide tool to interpolate Material IDs from input mesh to subdivided mesh.

  • Added Mesh Inspector tool to Static Mesh Editor's modeling tools.

  • Warns the user that new assets might be created when AutoLOD is launched from the Static Mesh Editor.

Improvement:

  • Added AutoLOD tools to the Static Mesh Editor.

  • Shared ownership of StaticMeshViewportClient's ModeTools via the EditorModeManager member.

  • Set up the EditorModeManager's preview scene and selected components when it's copied.

  • Add a set of FStaticMeshEditorToolbarExtender delegates to the module (similar to FSkeletalMeshEditorToolbarExtender).

  • Refactored the Path Extrude tool. Moved FPolygonEdgeMeshGenerator to its own file with other mesh generators.

  • Refactored the Path Extrude tool and replaced planar UVs in the Polygon Edge Mesh generator with a UV strip that follows the input polygon edges.

  • Refactored the Path Extrude tool and removed hacky UV generation for closed-loop ramp case.

  • Refactored the Path Extrude tool and merged two extrude functions into one.

  • Refactored the Path Extrude tool and removed a function of all dead code.

Bug Fix:

  • Fixed a crash when adding a new key/value pair and were using sparse map type in FOptionallySparseIndexMap.

  • Fixed gizmo not appearing in the Lattice tool after lattice vertices are selected.

  • Fixed an ensure when a polygon self-intersection passes exactly through a vertex with the PolyExtrude tool.

  • Fixed the width mode always snapping to world grid, even when grid snapping is turned off in the PolyExtrude tool.

  • When using the Mirror tool, closing a dialog that asks the user if they want to delete a mesh component does the same thing as hitting No.

  • enabled SubdividePoly to handle input mesh with no UV attribute in MeshModeling.

  • Fixed a crash when undoing and then redoing the creation of multiple Brush actors.

  • Enabled snapping to world grid when laying out the path in Path Extrude.

  • When using the Lattice tool, clear any existing deformer constraints when the lattice resolution changes.

  • Allowed for an overlay element to not be incident on any overlay triangles but still have a reference count of one.

  • Maintain UV islands when subdividing with the Subdivision tool.

  • Update the visible attribute lists when undoing/redoing adding and deleting attributes with the Mesh Attribute Editor.

  • If a ToolTarget's MeshComponent has no MeshDescription, return an empty but valid one. Harden various tools to not crash on empty meshes.

  • The Path Extrude Tool now supports a single-segment path.

  • Fixed calling OnRemoveTriangle when it should have been OnRemoveVertex.

  • If a UDynamicMeshComponent's Mesh has no attributes, have GetAutoCalculatedTangents just return nullptr. Otherwise it will return whatever stale data is in AutoCalculatedTangents.

  • Prevents a dragged gizmo from detaching from lattice points when snapping is enabled in the Lattice tool. Control points were not being transformed if the gizmo returned to its exact (pre-drag) starting position. This became apparent with snapping when the gizmo did not smoothly return to its starting position.

  • When trying to modify a built-in editor asset, pop up a notification window rather than display in the viewport

  • Fixed gizmos not being selectable after placing a new mesh in the level.

  • Fixed an ensure in the Dynamic Sculpt tool by allowing the initialize remesher async tasks to finish at the end of each tick.

  • Fixed Volumes not updating player collision model when brush shape is modified or when undoing/redoing brush shape modifications.

  • Set a max lattice resolution for each dimension in the Lattice Deformer.

  • Fixed issue with Enter key not closing the polygon in the BSP Pen Tool.

  • Fixed FPoly::OptimizeIntoConvexPolys creating polygons that fail coplanar check in FPoly::IsCoplanar

Learning Resources

Content Examples

Bug Fix:

  • Fixed a bug in the POM (Parallax Occlusion Mapping) content examples where the POM material function was not casting self shadows.

Documentation

New:

  • Updated documentation links/parsing to include versioning.

Localization

New:

  • Added support for custom FText::AsDateTime formatting patterns

  • FText shared display strings are no longer required to be unique. Deprecated their public access.

    • Added FTextInspector::GetSharedDataId for when you want an opaque key for a unique text instance.

    • Deprecated FTextInspector::GetSharedDisplayString and changed it to return FTextDisplayStringPtr.

    • Deprecated the FStringTableRegistry::FindTableIdAndKey overload that takes an FText, in favor of using FTextInspector::GetTableIdAndKey.

    • Removed the FStringTableRegistry::FindTableIdAndKey overload that took a FTextDisplayStringRef.

    • Removed the DisplayStringsToKeys LUT from FStringTable. The FStringTable::FindKey overload that takes an FStringTableEntryConstRef is now non-accelerated, but also not called from anywhere.

    • Removed the FStringTable::FindKey overload that took a FTextDisplayStringRef.

    • Renamed GetLocalRevisionForDisplayString and DirtyLocalRevisionForDisplayString to GetLocalRevisionForTextId and DirtyLocalRevisionForTextId in FTextLocalizationManager, and updated LocalTextRevisions to key against FTextId rather than FTextDisplayStringRef.

    • Fixed some const-correctness in FTextLocalizationManager.

  • FText is no longer required to have (or be able to have) a shared display string.

    • Removed FTextHistory::SerializeForDisplayString. This data is now handled directly by FTextHistory::Serialize, with FTextHistory::UpdateDisplayString resolving the display string when needed.

    • Added FTextHistory_Generated to provide the common functionality for generated text histories that need to re-build a local display string.

    • Added FTextSnapshot::LocalizedStringPtr to detect if the localized string changed within a history.

    • Updated FStringTable to use FTextKey rather than FString for text namespace and keys.

  • FTextLocalizationManager::FindDisplayString and FTextLocalizationManager::GetDisplayString now return immutable shared display strings.

  • FTextLocalizationManager can now preserve the de-duplicated display string data loaded from a LocRes.

    • Made FDisplayStringEntry::DisplayString const, as shared display strings cannot be mutated.

    • Updated FTextLocalizationResource to preserve its de-duplicated display string data, to be applied within FTextLocalizationManager.

    • Leetification (for debug) now makes unique display string instances (as it cannot modify the shared display string).

    • Removed FDisplayStringEntry::bIsLocalized as it was inconsistently set, and ultimately not significantly used.

Bug Fix:

  • Text localization manager no longer returns explicitly excluded cultures from list of available cultures.

  • Consider all properties within an editor-only class to be editor-only when gathering localization

Mobile

New:

  • Mobile builds now exclude engine post-process calibration materials and textures.

Bug Fix:

  • Group read/write on created files on Android are now allowed.

  • Fixed handling comments after the section name in .ini files for UnrealPluginLanguage.

Removed:

  • Removed scene software occlusion. UE5's minimum specs require a device with hardware occlusion queries, which are more efficient than software occlusion.

Android

New:

  • Added the FGenericPlatformMisc::ShowConsoleWindow function as a way to toggle the console on the Android mobile platform.

  • Enabled cached OS page allocator on Android when using MallocBinned2. This reduces the overall amount of Virtual Memory Areas used by the process as they are limited to 65536, and games that use a lot of memory can go over that limit.

  • Added experimental support for NDK 22+.

  • Option to select build-tools version in Android project settings.

Improvement:

  • Increased stability of stack walking code during crashes on Android.

Bug Fix:

  • Android EGL now binds newly created shared surface on game thread after resume.

  • Added protection against null on failure response from Google Play IAP.

  • Fixed OptimizeForSize compile environment option for Android targets. Previously it was always overridden with -O3.

  • Fixed DeviceProfile fragment cvar lookups.

  • Removed patching of cpu-features.c now that ARMv7 is no longer supported.

  • Properly filter out all 32-bit Android includes and libraries.

  • Fixed a check for fallback location SetupAndroid.bat.

  • Fixed issue which caused resizableActivity not to appear in manifest.

  • Changed display of OpenGL 3.1 support to 3.2 for Android project settings.

  • Fixed hlslcc depth fetch support on Android devices not supporting GL_ARM_shader_framebuffer_fetch_depth_stencil.

  • Added a fix for uploading Android 12 shipping builds.

  • Fixed Android x86_64 linking for BinkAudioDecoder.

  • Fixed issues preventing Android ASan builds from working correctly.

  • Does not select unsupported build-tools versions installed. Now checks against min and max version numbers.

  • Fixed incorrect Adreno version checks in Android media players and camera plugin.

  • Added fallbacks for missing commands on older Android, did timing adjustments for StartServer.

  • Added missing OpenXR xml file to binary builds.

  • Fall back to netstat if ss utility is present but not showing connections during StartServer for Android File Server.

  • Added server failure reasons to logging and increased the number of retries on StartServer for AndroidFileServer.

  • Fixed issue with losing Android force feedback due to OpenXR and OculusVR plugins.

  • Fixed handling of AndroidFileServer startup checks where the receiver may not be ready immediately after install.

iOS

New:

  • Refactored iOS Icons to create the asset catalog according to the present file.

  • Set a new default shader for Apple platforms and IOS 15 support.

  • Added ios 15 / tvos 15 target and Metal 2.4 flag.

  • iOS icons will auto-generate from the Marketing Icon.

  • tvOS asset catalog support has been added in Unreal Editor.

  • Display the trust popup on iOS and tvOS when using an untrusted device.

  • Added support for the Device Output Window log and console command sending on iOS using libimobiledevice.

  • Made the iOS dSYM generation checkbox descriptions clearer

  • Added four iPhone 13 models and twelve iPad models to device profiles.

  • Fixed deprecation warning in iOS location services.

  • Updated IOS and tvOS assets to UE5 logo and font.

  • Removed perspective-correct shadow depth shader permutation when it is not required on mobile platforms.

CL: 17921199

  • Remove NoLightMap shader permutation for materials that are not using it on mobile platforms.

CL: 17591802

  • Added a project option to disable support for per-pixel material shading models on mobile platforms (r.Mobile.AllowPerPixelShadingModels=0).

CL: 17403931

  • Set FXAA quality to 0 on mobile platforms by default.

CL: 17348846

  • Reflection capture now accounts for reflection capture influence radius when finding closest capture for an object. Fallback to skylight reflection when there are no influencing reflection captures on mobile platforms.

CL: 17093848

  • Added an efficient mobile-specific implementation for auto-instancing and GPU instance culling. Supported on iOS and Android devices. To enable add r.Mobile.SupportGPUScene=1 into DefaultEngine.ini.

CL: 16921709

Improvement:

  • Both OpenGL ES and Vulkan are now enabled by default when packaging Android, and Vulkan will be used on the following devices:

    • Adreno 6xx and 7xx-based devices running Android 9 or later

    • Mali-G72 devices running Android 10 or later, or any Mali-G76, G77, G78 or G710-based device.

    • PowerVR GM9xx-based devices

    • Xclipse 920-based devices

CL: 19089743

Crash Fix:

  • Fixed a crash when disconnecting / reconnecting a bluetooth controller outside of the app.

  • Fixed crash on mobile while rendering custom depth primitives that require scene texture access.

Platforms - iOS

CL: 18581533

Bug Fix:

  • Fixed idevicefs pull call in iPhone Packager.

  • Release the viewcontroller holding the splashcreen storyboard when it's no longer displayed.

  • Removed default brightness and reset brightness on iOS.

  • Fixed iOS Location Usage Description.

  • Fixed enum warning in ios settings.

  • Fixed linker error for IOS Shipping builds when there are spaces in the project path

  • The Windows remote iOS toolchain now removes the old SSH key directory before generating a new SSH key, to fix up any incorrect directory permissions

  • Fixed r.MobileContentScaleFactor being ignored and always defaulting to 1 on iOS.

  • When packaging an iOS app on BigSur/Catalina, it is unable to be installed on an iOS15 device. This fix now sets the "--generate-entitlement-der" flag for 'codesign'.

  • Removed iOS 13 from plist to enforce minimum supported version of iOS 14.

Rendering - Mobile Rendering

CL: 19110691

  • Fixed rendering artifacts on some Qualcomm devices with Android 12.

CL: 18689185

  • PerlinNoise3D texture now correctly initializes on mobile platforms.

CL: 18104390

  • Fixed issues with texture mip generation at runtime on Android devices running Vulkan

CL: 17961893

  • Added access to CustomDepth and CustomStencil textures in a decal materials for mobile platforms.

CL: 17113348

  • Previously, FPlatformMemoryStats.AvailableVirtual was always zero on iOS. This has been resolved by setting it to the same value as AvailablePhysical.

Platform - Mobile - iOS

CL: 19153534

  • Fixed iPhone device names with apostrophes appearing as ???? in Unreal Editor on the Mac.

CL: 19092069

  • Fixed issue where fatal iOS errors were not being written to the log file.

CL: 19237934

  • Fixed problems with iPhonePackager downloading log files from devices with Unicode-character device names.

Platform - Mobile - tvOS

CL: 19284387

  • On tvOS log files are created in /Library/Caches, as /Documents is not avaialble on this platform.

Rendering - Mobile Rendering

CL: 19243809

  • Previously, CSM shadows were broken when Support Static Lighting is enabled but a level's World Settings have Force No Precomputed Lighting checked. This issue has been resolved, and CSM shadows will function normally with these settings.

Deprecated:

  • Removed instruments when launching iPhone apps. Instead, the launcher will use idevicedebug.

Removed:

  • Deleted iOS devices that don't support iOS 14+ from iOS device profiles.

Networking

New:

  • Added an option to let connections force all properties to be dirty on initial replication.

  • Added notification paths to other active net drivers of important Actor replication changes.

  • Added Actor flags to make PreReplication and PreReplicationForReplay functions optional.

  • Removed net.UseAdaptiveNetUpdateFrequency=0 from ConsoleVariables.ini file.

  • Added a compare/assign and mark dirty macro (COMPARE_ASSIGN_AND_MARK_PROPERTY_DIRTY) to the push model. This is defined in the #else so it will compile on the client.

  • Support for NetSerialization of a FInterfaceProperty.

  • Added additional CSV file stats/scopes for replication.

  • Added the number of active game driver clients to the engine crash context data.

  • Changed the SetReplicates method in the Actor class to avoid redundant work.

  • Added push model support to the base conversation component.

  • Increased the IPv4 private address space to include 172.16.x.x - 172.31.x.x.

  • Added support for push model dirty tracking to fast arrays.

  • Renamed command line options -DisableHttpWhitelist and -EnableHttpWhitelist to -DisableHttpDomainRestrictions and -EnableHttpDomainRestrictions.

  • Added a Switch Has Authority macro node for Blueprints derived from Actor component.

  • Renamed APlayerState::Ping and associated functions to CompressedPing, and introduced a new getter GetPingInMilliseconds that returns the accurate ping if it is available, or the decompressed replicated ping if not.

  • Added Net Fault Recovery to NetConnection to recover from non-fatal connection faults, and provide detailed analytics/logging for serverside and clientside connection errors.

Crash Fix:

  • Fixed a shutdown crash in the default voice engine implementation.

  • Fixed a crash when forcing a network update during shutdown.

  • Fixed a crash by resetting the NetPushId of an object when the object has no net driver state.

  • Fixed possible crashes from message construction using operator new by using FMessageEndpoint::MakeMessage() instead

  • Fixed a crash initializing object replicator state when the archetype is missing.

  • Fixed misleading unhandled socket error and subsequent crash by calling GetLastError before calling any other function that can clobber the error code that GetLastError returns.

Bug Fix:

  • Added net.ResetAckStatePostSeamlessTravel CVar to reset the package map's AckState on the server after seamless travel. Enabling this may prevent problems with Actors not replicating after travel due to clients missing entries in the NetGUID cache.

  • Fixed instances of missing push model dirty calls in scene components.

  • Moved the call to FlushNetDormancy earlier when removing active gameplay effects. This prevents issues where changes to ActiveGameplayEffects aren't tracked properly on dormant actors.

  • Fixed Fast Array bug where changing values after they are replicated in a single frame can cause them never to send.

  • Fixed an issue where replicated objects with only fastarrays or custom delta replicated properties would be tagged as having no replicated members and thus never replicate

Deprecated:

  • Deprecated InstancePreReplication on Blueprint-generated classes since it was not being used.

  • Deprecated FRepChangedParent in favor of a smaller bit array.

Replays

New:

  • Changed tracking of deleted startup Actors to avoid unnecessary uniqueness checks.

  • Added a new engine net version to support old replays. Fixed for net serialization compatibility issue.

  • Added the ability to set per object external data through the replay subsystem.

  • Allow replays to record unicast RPCs on Actors with the appropriate net driver name.

  • Added Blueprint accessibility to several replay subsystem functions.

  • Added a delegate for overriding the replay compatibility version check..

  • Added support for checkpoint-deleted Actor serialization to be split over multiple frames.

  • Added a way to request a checkpoint to be recorded immediately.

Bug Fix:

  • Fixed multiple compatibility issues that prevented Actor channels from being cleaned up during playback.

  • Fixed a crash that could occur when remapping playback channels.

  • Fixed a replay playback compatibility issue when an actor component class is missing.

  • Fixed a case where duplicate child actors would be spawned on replay scrub.

  • Fixed a rare scrubbing crash with delta checkpoints enabled.

  • Fixed non-replicated child actors not being cleaned up by their parents.

  • Fixed an issue with respawned startup actors having the wrong role during BeginPlay.

  • Fixed a case where dynamic actors flagged as replay rewindable might not be cleaned up properly after scrubbing.

Replication Graph

New:

  • Added CVar Net.RepGraph.GridSpatialization2DDestroyDormantDynamicActorsDefault to allow Grid2D Replication Graph nodes to specify the default value of the DestroyDormantDynamicActor boolean.

Bug Fix:

  • Fixed dynamically spawned, initially dormant actors not replicating after the first dormancy flush.

  • Added a check to prevent connections from other drivers from being added to the graph.

  • Fixed a case where the graph could open duplicate channels for actors that persisted through a seamless travel.

  • Fixed multiple issues with dormant destruction info processing.

  • Added ensures in ReplicationGraph to detect when a PlayerController will open a channel to a non-owner connection.

  • Fixed GridSpatialization2D nodes in ReplicationGraph not clearing pending actors list on graph reset/level load.

Deprecated:

  • Deprecated the PrevDormantActorList as it doesn't support multiple grids, The logic no longer processes dormant Actors for one grid on another grid when you have multiple grids for a connection. To upgrade you'll need to call ConnectionManager::GetPrevDormantActorListForNode to get your PrevDormantActorList and then modify the reference.

Socket Subsystem

New:

  • Replace/remove uses of whitelist/blacklist in WebSockets.

Niagara

New:

  • Added a new experimental renderer type called Geometry Cache Renderer.

  • Added a new static switch constant for interpolated spawning.

  • Added a new data interface plugin called Example Custom DataInterface. This data interface contains C++ example content that shows how to write your own custom data interface for Niagara. This plugin can be found in Engine/Plugins/FX/ExampleCustomDataInterface

  • There is now a default mode for all new parameters, which is set to "Fail if Unset".

    • See related CL: 17637669: Severity of messages for parameters with default mode "Fail if Unset" can be set via new CVar "Fx.Niagara.FailIfNotSetSeverity".

  • Added a cvar fx.Niagara.DeletePythonFilesOnError to prevent intermediate python scripts from being deleted in case of a version upgrade error.

  • Cascade was updated to support Large World Coordinates. CPU simulations are run with full double precision vectors. GPU simulations use a tile offset to translate world space emitter positions to float precision vectors.

  • Added function scripts to convert between RGB and HSV colors.

  • Added support for dynamic inputs to auto-convert types when dragging parameters in the stack.

  • Added a flag to the audio data interface to turn off audio when not in PIE.

  • Prevent Niagara compilations from accumulating, so there can be at most one pending compile request.

  • Changed derived data requests for compilation to be asynchronous. Also fixed a bug where FNiagaraEditorModule::OnPreExit would crash when trying to complete the compilation.

  • Added support for systems with a fixed tick delta.

  • Added HLSL syntax highlighting for custom HLSL nodes and the generated code view. Also added tab support to custom HLSL nodes.

  • Removed the Highlights feature from the System Overview. It was adding visual noise without having the intended benefit.

  • Groups can now be collapsed in the System Overview.

  • Scratch Pad modules now have a scratch pad icon in the System Overview.

  • The expansion state of the stack in the System Overview is now persistent.

  • Selected parameters can now be configured to show up in module rows in the System Overview. Parameters will show up either as a text-based button or an image-based button. This is configured in scripts via property metadata. Clicking one of the inline parameters will immediately highlight the represented parameter in the stack.

  • Added Category functionality to Niagara systems, to be able to filter the parameters in emitters.

  • Added copy paste for parameter metadata in Niagara scripts. A notification widget will inform the user if there is a duplicate parameter in the destination graph, and will skip copying the metadata. If the source and the destination graph are the same, the metadata paste will be skipped completely.

  • Removed CPU access warning for camera data interfaces as they are no longer valid.

  • Niagara viewport settings are now persistent. "Particles count" is now turned off by default.

  • Niagara's Mesh Renderer now adds its mesh batches to GPU Scene. These instances can be frustum and occlusion culled by the GPU Scene instance culling system. GPU Scene can also use this data to render the meshes in Virtual Shadow Map passes.

  • All GPU stages are now simulation stages. The intrinsic particle stage is now just another simulation stage that can be enabled or not. Iteration count is now dynamic and can be bound to a user variable. Simulation stages can be enabled or disabled dynamically by a user variable.

    • A random seed parameter has been added to system instances. This creates the potential for randomness in System scripts.

  • Created a new data interface for reading properties from UObjects. This allows parameters to be automatically pulled from objects, instead of using Blueprints to pull data manually per frame. A source actor, or an explicit object user parameter binding can be read into the data interface. If the object is an actor, the data interface will look at the root component, or for an component of type 'source actor component class' to bind properties to.

    • Added the ability to iterate over a subset of particles in a simulation stage.

  • Added a setting to allow sprites to maintain a one pixel coverage while applying a coverage 'fade'. The renderer can opt into this automatically, or manually. Currently, the setting only covers translucent and additive when set to automatic. The project can also set whether to opt in or out of this feature when in automatic mode.

  • Changed the system determinism default to false, which matches the default for emitters. Fixed CalculateRandomRange not using system seed information.

  • Added SceneCapture as an option to pull data from the baker. Set the default to use a scene capture in HDR mode, since this will be the most common path. Added a checkerboard display toggle, and an alpha blend toggle. Fixed an issue where StartSeconds was used from generated data to preview, rather than settings to generate data from. Inverted the alpha channel when capturing from HDR + A, so it can be used directly. Allowed alpha to be visualized in the baker.

  • Optimized the Ribbon Renderer FNiagaraRendererRibbons::AppendToIndexBuffer, resulting in 2 - 12x increase in performance.

  • Added an instance and particle transform space. You can use this space to transform in or out of mesh particle and instanced static meshes. Particle mesh space is now hidden, and will be removed later, since this new space covers that functionality.

  • Added support for setting system or emitter fixed bounds per instance.

  • GPU profiler is now hidden, and only required information is exposed outside the plugin. Extended the GPU profiler to capture the stage execution cost. It now passes the data to the particle performance statistics in the debug HUD.

  • Added a new data interface called ActorComponent, to access actors or actor component transforms. This can be set via the ActorSource parameter on the data interface, or via a user parameter.

  • Disabled the creation of render targets if the data interface is not used with an active GPU emitter.

  • We now allow data interfaces to opt out of running beyond PostActorTick. This is important for the collision data interface, since it relies on the async traces being issued this frame.

  • Split indirect argument generation into pre-opaque and post-opaque. This allows Mesh Renderers, sorting, and culling to all fully function on the low latency translucent path.

  • Added an option to sample RVT base color.

  • Added a menu option to show all data interface functions, and allow the HLSL code to be copied to the clipboard.

  • Added support for shared static float buffers that data interfaces can push data into.

  • Added support for getting the parent index of a bone. Added a warning if filtered bones are not required by all LODs, since this could mean that the effect may not play correctly if a lower LOD is used.

  • Added support for the MacroUV node in the Sprite Renderer.

  • Added support for pulling vertex or triangle data from a bind pose.

  • Improved debug element count forcing. Added an optional warning when we allocate GPU buffers beyond a certain threshold.

  • Added options for Niagara auto mip generation

  • We now allow arrays to be an iteration source. Updated the GPU copy when we dirty the data on the CPU, so that we can skip SetElement.

  • We now allow data interfaces to specify how they wish to dispatch, 1d, 2d, or 3d. Cleaned up the shader code generation between particle and iteration interfaces to improve performance.

  • Fixed force solo to not kill the component. When setting custom time dilation, Niagara will change into solo mode, and back out when it is set to 1.0.

  • Cleaned up multi-GPU Niagara code. Added cross-GPU transfer support to Niagara and Cascade. Added a method to Compute Dispatch Interface to allow data interfaces to send resources for transfer. Fixed missing persistent ID buffer transfers with alternate frame rendering (AFR). Fixed PostRenderOpaque transfer location to ensure we capture count updates.

  • Added per mesh rotation to the Mesh Renderer.

  • Add NiagaraID array data interface.

  • We now allow allocations from the count manager outside of the general compute dispatch.

  • Moved Simple Counter to Private, and extended functionality to support more operations and GPU.

  • When adding a module script, we now automatically choose a location in the stack that satisfies all dependencies.

  • Fixed "Set Parameter" menus not having transient parameters.

  • Added support to Cascade To Niagara Converter API to specify a script version when creating Niagara Scripts. UNiagaraEmitterConversionContext::FindOrAddModuleScript(), UNiagaraEmitterConversionContext::FindOrAddModuleEventScript(), and UFXConverterUtilitiesLibrary::CreateScriptContext() now take FCreateScriptContextArgs as an argument; existing python scripts using these methods will need to be refactored to pass their arguments in this format.

  • Added CVar Fx.NiagaraFailIfNotSetSeverity which makes it possible to select the severity of errors emitted when parameters are uninitialized.

Improvement:

  • Improved the colors of Niagara pin types.

  • Improved resolution numeric inputs and outputs. Made type checking stricter for Op nodes.

    • Dynamically enabled bindings for renderers.

  • Improved Dynamic Material parameter name resolution in the Niagara stack.

  • Improved detection for uninitialized parameters may raise compilation errors for existing content.

Bug Fix:

  • Prevent active Niagara compilations from starving all other background tasks. Prevent transient systems from starting compilations.

  • Fix for "ParameterOffsets.Num() should be 0 is 1" warning during cook.

  • Implemented refresh helpers for Convert nodes. Convert nodes will now fix up the paths in their connections to reflect changes made to Blueprint structs. Also fixing an issue when swizzle inputs didn't have a typedef, so the wiring was not shown on the nodes. Niagara bools and ints are now assignable.

  • Fixed a bug where large emitter nodes in the System Overview would vanish randomly.

  • Fixed a bug where UNiagaraFunctionLibrary::SpawnSystemAttached() did not handle EAttachLocation::SnapToTarget correctly.

  • Fixed a bug where changing to a system mid-compile could lead to a crash.

  • Added a module in Cascade to Niagara Converter Plugin to better replicate Cascade's light behavior.

  • Fixed a bug where the "fail if not previously set" default mode would not correctly pick up previous writes.

  • Fixed a bug where the Niagara translator could compile unused parts of the graph, resulting in errors when unset variables were being read.

  • Prevented users from entering a dot (.) character in the name for a static switch parameter.

  • Fixed a bug where inputs with a changed type didn't refresh after versioning up.

    • Ensured we tick instance parameters before building data interfaces, otherwise the GPU tick would have a reference to the wrong data interface.

  • Fixed a few bugs with the search bar in the Generated Code view.

  • Fixed a bug where setting an engine parameter in the stack that had a default binding in a parameter definition caused a compile error.

  • Resolved an issue that prevented playing audio from Niagara in cooked builds.

  • Fixed a bug where several threads would race and cause a crash in NiagaraComponentRendererProperties::UpdateSetterFunctions.

  • The Cascade to Niagara Converter now adds a Solve Forces and Velocity module when converting acceleration modules.

  • Fix memory stomp when loading UNiagaraGraph.

  • Fixed cases in which a Niagara User Parameter binding would either: not work when selected, or entries wouldn't show up at all.

  • "Make" actions are now supported when dragging off an output pin in a Niagara script.

  • The Cascade to Niagara Converter relied on hardcoded type names for converting types. This led to issues when type names changed. The converter now assigns type names directly from their Niagara Type Definition.

  • Updated preview widgets of Niagara Mesh Renderer properties to display meshes instead of their materials.

  • Closing and reopening the stack will no longer cause previous search results to be applied.

  • The Select node can no longer use parameter maps as a type.

  • Niagara Script parameter metadata now gets correctly hidden and shown based on the type of the parameter.

  • Fixed a bug where Mesh Renderers wouldn't show up for mesh renderer bindings.

  • Updated the Niagara Stack Style to correctly show selection.

  • Prevented the type registry from being modified while we are iterating over the array.

  • Fixed a bug in Dynamic Material Parameters, when enabling dynamic parameter 1 also stomped over dynamic parameter 0.

  • Fixed Niagara Depth Sample for Mobile. It now correctly samples SceneDepthAux or SceneDepthTexture.

  • Fixed the count buffer growth while the editor is out of focus.

  • Removed hard-coded ribbon tessellation disable from code. Replaced this with a console variable that can be data-driven.

  • Fixed issue when the socket attachments component is already registered.

  • Ensured we don't use aligned loads on some compilers for VectorLoad with VectorRegister4Float and VectorRegister4Double.

  • Fixed incorrect mip calculation. This also fixed a crash when enabling Generate Mips on a 1x1 render target.

  • We now include layout and uniform buffer changes as part of hash generation.

  • Forced DXC for NiagaraDataInterface shaders for platforms that support DXC.

  • Fixed GPU export count not being correct when going over the limit.

  • Added a missing swizzle on Color Sample.

  • Fixed incorrect bindings for Spline Rotation. Also fixed rotation extraction for Spline Rotation.

  • Fixed various issues with dependency checking for uninitialized parameters when compiling Niagara Systems.

Online

New:

  • Added rules-based ordering of QOS subregions into subspaces, biasing datacenter selection away from subspaces whose performance is not a sufficient improvement over their related subregion. The tolerances to control this can be set in the [Qos.QosRegionManager] section in the engine config on a per RegionDefinition basis, and also enabled/disabled per region. The rules-based comparison may be enabled or disabled overall in the engine config, or overridden with the -qossubspacebias=true|false command-line argument.

Crash Fix:

  • Fixed a hotfix crash when patching a soft object pointer.

Bug Fix:

  • Patchcheck INI configs now refresh with every patch check attempt, instead of only at object construction.

HTTP

New:

  • There is a new configuration option to limit the amount of concurrent threaded HTTP requests being processed. It can be defined as follows:

[HTTP.HttpThread] RunningThreadedRequestLimit=11

  • New configuration options have been added to HTTP to increase control of Flush time limits. They work within the following categories:

    • Default = when Flush is called with no overriding context

    • Background = when Flush is called because the app is backgrounding. This may not be called on backgrounding on all platforms.

    • Shutdown = when Flush is called because the app is being shut down. Some use cases may want an infinite wait. This may not be called on shutdown on all platforms.

    • FullFlush = explicit request to wait infinitely for all HTTP requests to complete. Some use cases may want to disable infinite waits. Typically not used in game code but may be used by applications or commandlets.

Each one of these categories has soft and hard limits to be defined as follows:

    • Soft Limit = how long to wait in seconds before cancelling active requests. -1 = never cancel. 0 = cancel immediately. Must be < Hard Limit to work. Typically after calling Cancel the HTTP request needs a tick to process the cancel, so it should not be == Hard Limit.

  • Hard Limit = how long to wait in seconds before stopping waiting altogether.

When used in a configuration file, it would look like this:

[HTTP]

FlushSoftTimeLimitDefault=2.0

FlushHardTimeLimitDefault=4.0

FlushSoftTimeLimitBackground=2.0

FlushHardTimeLimitBackground=4.0

FlushSoftTimeLimitShutdown=2.0

FlushHardTimeLimitShutdown=4.0

FlushSoftTimeLimitFullFlush=-1.0

FlushHardTimeLimitFullFlush=-1.0

Online Subsystem

New:

  • The SetSubsystemId function now logs an error when a proper SubsystemId isn't generated.

  • Added an analytics context helper to SocialUser Interaction menus, which are driven from static classes and built with macros. This addition makes it possible to attribute interactions to their respective places in the user interface.

  • Added config options to OnlineIdentityNull which enable emulating different types of platform setups. Changed default behavior to enable logins with no credentials, to match most other platforms.

  • Cached auth codes in online identity interface automatically expire after a set time interval on platforms that implement auth code caching (currently, Playstation 4 and Playstation 5). The default is ten minutes, and may be adjusted in the engine ini file using the AuthCodeTimeToLiveSecs config field.

  • Added IOnlineIdentity::ClearCachedAuthTokenAPI for clearing cached auth tokens in online identity interface, where applicable (currently, Playstation 4 and Playstation 5). On the command line, you can use -CachePsnAuthCode=true or -CachePsnAuthCode=true to override the value in the engine's .ini file.

  • OnlineSubsytemEOS now supports GetLinkedAccountAuthToken.

  • Starting the app from a platform invite or join is now supported when using EOSPlus.

  • Some of the options in the EOS Plus editor settings have been relocated or renamed:

    • "CrossPlay Settings" to "EOSPlus Login Settings"

      • "Use Epic Account Services" to "Use Epic Account for EOS login (requires account linking)"

      • "Use Crossplatform User IDs" to "Use Crossplatform User IDs for EOS Login (doesn't use Epic Account)"

  • Online Subsystem GDK will now use SETTING_SESSION_TEMPLATE_NAME when searching sessions by search handle. It will need to be set in both session creation and session search settings. If none is defined, "GameSession" will be used as a default.

  • The Gamertag Component type in the Online Subsystem GDK implementation used to be set to Modern and could not be changed. A new configuration option has been added to do so, with the following format:

[OnlineSubsystemGDK] GamertagComponentOverride=Classic

Overrides can be: Classic, Modern, ModernSuffix, or UniqueModern. If no override is specified, the system will use Modern.

  • Online Subsystem EOS Plus has a new implementation for the Title File Interface, transmitting all method calls to the base platform interface without EOS mirroring.

Improvement:

  • Moved Online session FNames to a new module called OnlineBase to be shared between OnlineSubsystem and OnlineServices.

Bug Fix:

  • Users are no longer shown as Muted when isListening is set to false in a second channel.

  • Fixed the Epic Online Services Online Subsystem encountering an SDK error when querying the presence of a player's friends.

  • Several fixes to Epic Online Services Online Subsystem (EOS OSS):

    • EOS OSS now batches a player's friends' net ids when querying their external account mappings to improve performance.

    • EOS OSS no longer modifies the net ID of a player's friend after executing the OnFriendsChange delegate with that friend's incomplete net ID.

    • Fixed the EOS OSS always firing the FOnQueryExternalIdMappingsComplete delegate with bWasSuccessful as false even when the operation succeeded.

  • Fixed the Epic Online Services Online Subsystem not registering players that were present in a session at the time the local player joined the session.

  • Moved Hotfix module's dependency on OnlineSubsystem from private to public.

  • Duplicate PIE login credentials are now accepted if the credential's type is Developer.

  • Fixed a connection issue when using Epic Online Services peer to peer with more than 3 peers.

  • An EOS lobby search with no results in the Online Subsystem EOS Session Interface will no longer return as a failure state. Instead, it will return as a success with 0 results.

  • Hosting and joining sessions is now functional for Play-In-Editor game instances when using EOS.

  • EOS Connect Login is now functional for platforms that require the UserLoginInfo field.

Deprecated:

  • Functions that used FUniqueNetId or shared pointers directly have been deprecated. We have added function overloads to UOnlineEngineInterface to take FUniqueNetIdWrapper.

Pixel Streaming

New:

  • Updated PixelStreamingAudioComponent in UE5 to support sending audio data from the browser to the engine. This is currently experimental, as audio data arrives after a significant delay; we plan to improve this in future releases.

  • Added experimental support for VP8 and VP9 software encoding. You can select an encoder codec with "-PixelStreamingEncoderCodec". Supported values are "H264", "VP8", and "VP9". The default encoder remains hardware accelerated H264. This is experimental as these software VPX encoders are much slower than the hardware accelerated H264. Specifically, VP8 encodes at roughly 30 frames per second, and VP9 encodes at roughly 15 frames per second.

  • A whole new set of internal WebRTC stats are now exposed to Pixel Streaming for programmatic use and visual inspection through the built-in optional stats HUD. The stats HUD can be viewed by passing "-PixelStreamingHudStats". The stats can also be queried programmatically using the appropriate stat changed delegate in UPixelStreamingDelegates.

Additionally, a number of the settings available in the player.html and app.js have been removed and trimmed down to a subset of settings we believe are genuinely helpful to configure through the web frontend - the rest are now only settable as console variables and launch arguments to your Pixel Streaming application. Following this decision, we have also changed the "Test Latency" button to be a "Get Report" button that reports a subset of stats using the newly exposed WebRTC stats in Pixel Streaming.

  • Added a "Kick Player" Blueprint node that takes a Player ID as input. This replaces the functionality of the "Kick All" button from the Pixel Streaming front end, which has been removed.

  • Introduced a new design within Pixel Streaming to specify video sources, which take texture sources. For example, we now have a FVideoSourceP2P which takes a FTextureSourceBackBuffer. With this new design, users can add more types of texture sources in the future, such as render targets or scene capture textures. This change is transparent to most current users, but should increase flexibility for users who extend Pixel Streaming in C++.

  • Added default simulcast settings to Pixel Streaming to control the resolution and bitrate of simulcast streams. You can pass your own simulcast stream settings on the command line using -SimulcastParameters. The format of simulcast parameters is comma separated triples of: stream scale denominator, minimum bitrate, maximum bitrate. For example, the default is one full resolution video stream and one half resolution video stream, which would be specified as: -SimulcastParameters="1.0,5000000,20000000,2.0,1000000,5000000"

  • Added Pixel Streaming support for Vulkan on Windows.

  • Start-up scripts have been added for Linux. These enable running of SFU server locally, and SFU and CoTURN in docker containers. The containers can be built on demand. Start and stop controls are provided for convenience on top of the docker command line layer.

  • Extended Pixel Streaming and the JavaScript front end to support either the browser being the WebRTC offerer or the Pixel Streaming instance being the WebRTC offerer. By default the Pixel Streaming instance is now the WebRTC offerer, which is the reverse of the case in previous versions. However, Pixel Streaming still remains compatible with the browser being the offeror as it was in previous versions.

  • Updated the GamePlayMediaEncoder.

  • Added Vulkan and Linux support to GameplayMediaEncoder.

  • Support for a Selective Forwarding Unit (SFU) has been added to Pixel Streaming which allows multiple clients to connect with different bitrate requirements.

  • Renamed PixelStreamerInputComponent to PixelStreamingInput to align with our new naming conventions in UE5.

Improvement:

  • Pixel Streaming has been refactored to be more modular and configurable.

  • NVENC encoder plugin has been made more stable.

Crash Fix:

  • Fixed a crash in CUDA module when NVIDIA drivers are present but RHI is running on a non-NVIDIA GPU.

  • Fixed Pixel Streaming bug causing crash for some hardware when using Vulkan.

  • Fixed a crash in Pixel Streaming related to malformed peerConnectionOptions.

  • WebRTC binaries have been rebuilt. Protobuf symbols have been stripped to avoid collisions with other Plugins when building monolithic binaries (ie with UEGame target). This fixes a crash when using WebRTC statistics while building any Debug config.

  • Fixes to GameplayMediaEncoder crash when no encoders are registered to AVEncoder.

Bug Fix:

  • Fix for keyframes being lower quality than the rest of the stream. This was particularly problematic as keyframes are now sent a regular interval by default thus causing the stream to become momentarily pixelated every keyframe.

  • Firefox and TURN on AWS was broken due to the WebRTC cross browser shim, adapter-latest.js being unable to detect Firefox correctly. This was fixed by patching this script in player.html.

  • Tidied and formatted console logging for the Pixel Streaming JavaScript to make it more readable and less redundant, particularly in the case of ICE candidates.

  • Added url parameter ?ForceTURN that discards any ICE candidates that aren't using relay. This is particularly helpful when testing TURN servers with Chromium based browsers.

  • Fixed an issue where the WebRTC data channel would abruptly close when attempting to send large amounts of data over the channel.

  • CUDA failure to initialize will now result in an error message rather than a fatal error. Note that having RenderDocsPlugin enabled when trying to use CUDA will result in CUDA failing to initialize, so that Pixel Streaming will not function correctly while the plugin is enabled.

  • Fixed an issue with incorrect hardware encoders loading when the target GPU is not present.

    • Vulkan/AMF encoding is currently unsupported and has been disabled.

    • Removed a fatal error when trying to use AMF with Vulkan.

  • Fixed installation scripts for Windows and Linux to ensure they occur before starting CoTURN.

Removed:

  • Removed the following unused console variables from Pixel Streaming:

    • PixelStreamingUseBackBufferCaptureSize

    • PixelStreamingCaptureSize

    • PixelStreamingWebRTCDisableResolutionChange

    • PixelStreamingMaxNumBackBuffers

  • AMF support with DX11 has been disabled. AMF with DX12 is unaffected.

WebSockets

New:

  • Websockets protocols are now configurable in BaseEngine.ini.

Physics

New:

  • Added scaling functionality to the buoyancy data so we can scale the pontoon element over time.

  • The following Buoyancy Types were added:

    • FSphericalPontoon::ScaleTimeFrequency (float): Defines how frequently the pontoon scale radius ticks.

    • FSphericalPontoon::ScaleRadiusPerTick (float): Defines how fast the pontoon radius reduces per tick.

    • FSphericalPontoon::MinRadiusToSink (float): Defines the radius required to sink the vehicle.

    • FSphericalPontoon::ScaledTime (float): Defines the tracked scale time as we're scaling.

    • FSphericalPontoon::BaseRadiusBeforeScale (float): Defines the base radius before scaling.

  • Added functionality to Chaos Debugging to draw collision for a single actor instead of all the actors in the scene.

  • The following CVars were added to the ChaosDebugDrawComponent:

    • p.Chaos.DebugDraw.SingleActor - If set to true, draws collision for the actor the camera is facing.

    • p.Chaos.DebugDraw.SingleActorTraceLength - Sets the trace length from the camera that selects the single actor that will be used to draw collision.

    • p.Chaos.DebugDraw.SingleActorMaxRadius - Set the max radius to draw around the single actor.

  • Added the ability to query the attached body names from a physics constraint in Blueprints.

Bug Fix:

  • The GetAngularDriveParams function for Physics Constraints now correctly returns the parameters by reference.

Deprecated:

  • The GeometryCollection debug draw classes have been deprecated. The Chaos debug draw console commands should be used going forward.

  • The asset factory for UChaosPhysicalMaterial has been removed.

Clothing

New:

  • Added the console command p.ChaosClothEditor.DebugDraw to enable / disable the cloth editor visualization mode.

  • Added multiple LOD deformer mapping data to Chaos Cloth. This allows the engine to use raytracing on cloth at a different LOD level than the LOD level used for rendering and simulation.

    • Added the ClothLODBiasMode property to the Skeletal Mesh to define the storage strategy depending on whether multiple LODs deformer mapping data are required or not.

  • Added a new SetBackstop Blueprint function to the Chaos Clothing Interactor to enable / disable the Backstop collisions at runtime.

  • Enabled convex collision for Chaos Cloth on mobile platforms.

  • Ran the Long Range Attachment tether constraints as a pre-iteration step instead as a per iteration step to improve simulation performance.

  • Added global point damping to offer a faster alternative to the current local damping formulation.

Improvement:

  • Improved the way the Cloth wrap deformer deforms the high quality render mesh based on the simulation mesh. It now uses each face connected to a vertex to compute the average normal at that vertex. This average is then used to deform the render mesh, making the deformation more consistent.

  • Improved the binding accuracy between the simulation mesh and the render mesh, which results in higher-quality render mesh deformation.

  • Significantly reduced the initialization time of Chaos Cloth at runtime. This change prevents the initialization hitch by caching the Long Range Attachment tether calculations inside the cloth asset at authoring time.

Bug Fix:

  • Fixed an issue with Chaos Cloth where the MaxDistance and Backstop constraints were not scaling correctly when the skeletal mesh component scale was changed.

  • Fixed an issue where changing LODs while cloth simulation was suspended would result in the cloth and render LODs to become out of sync and cause a crash.

  • Fixed an issue where the cloth simulation data and bounds output was incorrect if the simulation was suspended while the component was moving.

  • Fixed an issue where rendering with an invalid simulation LOD would cause a crash.

  • Fixed an issue with Chaos Cloth visualization where multiple cloth bounds were using incorrect transforms.

  • Fixed an issue where the cloth wrap deformer vertex contributions (which triangles are rendered kinematic or dynamic) were incorrectly updated when using multiple influences and editing the MaxDistance mask.

  • Fixed an issue where the simulation data transform was incorrect when rendering the cloth mesh started after the component's transform had been updated.

  • Fixed an issue where migrating an asset from Nvcloth to Chaos Cloth would result in a stiffness multiplier being included.

  • Fixed an issue where Chaos Cloth would experience hitches in game caused by a smoothing of the time step that was incorrectly applied to the kinematic particles' velocity calculations.

  • Fixed an issue where importing a clothing asset without a matching LOD section would cause a crash.

  • Fixed the suspended simulation positions and bounds by reverting part of changes made in CL18170330 and fixing the local space bounds calculation.

  • Fixed an ensure that would always fire in ClothingAsset.

Physics Asset Editor

New:

  • Added a way to edit the mouse interaction distance inside the Physics Asset Editor. The default distance value has been increased.

  • Added the ability to copy and paste bodies and constraints to the clipboard in a text-based format. This provides a way to copy bodies and constraints between different physics assets.

Bug Fix:

  • Fixed an issue where the preview animation of an asset would be lost after simulating in Physics Asset Editor.

  • Fixed an issue in Physics Asset Editor where the Detail panel would remain empty when selecting all the bodies in the skeleton tree.

    • Fixed an issue where copying a body setup to another one with a different primitive would cause a crash if the user used the Details view.

    • Fixed an issue where the selection was not being properly refreshed after the copy operation.

  • Fixed an issue where the preview animation of an asset would stop when simulation started or stopped.

Rigid Bodies

New:

  • Added the p.RigidBodyNode.UseDeferredTask CVar. Set this to 1 to defer the simulation results of RigidBody AnimNodes by one frame, improving performance by enabling the simulation more time to complete in the background.

Bug Fix:

  • Fixed an issue in RBAN where mesh component initialization may pass through a zero delta time when the node is set to inherit bone velocities. This resulted in an incorrect value being used in the velocity calculation.

Platforms

New:

  • The device profile editor can now properly add or check out platform-specific .ini files. It will also only save changed values for inherited device profiles. The device profile editor can now create production-ready .ini files that do not need manual fixes.

  • Made it possible to distinguish between controller types when using WinDualshock.

  • Added RunUAT CreatePlatformExtension command to auto-generate plugin and module platform extension files.

    • Examples for using CreatePlatformExtension:

      • RunUAT CreatePlatformExtension -P4 -platform=MyPlatform -source=MyProject/Source/MyProject.target.cs -project=MyProject/MyProject.uproject

      • RunUAT CreatePlatformExtension -P4 -platform=MyPlatform -source=Engine/Plugins/Path/To/MyPlugin.uplugin

      • RunUAT CreatePlatformExtension -P4 -platform=MyPlatform -source=Engine/Source/Path/To/MyModule.build.cs

  • Implement waitfordebugger / waitforattach for console platforms. These command line options allow a game to pause until a debugger is attached.

All GDK

New:

  • Added ability to query the Parter Center to automatically populate the title settings using the in-editor Project Settings dialog.

  • Added support for custom/modified GDK editions in AutoSDK, signified with an additional suffix. For example: "210603-01" vs "210603"

  • Adding support for launching a title by URI, for example: ms-xbl-[TitleId]://<custom string>. See the GDK documentation for details. The URI is available via FPlatformMisc.

  • Added support for -package -deploy to install GDK packages with UAT automatically.

  • The 480x480 packaging image is no longer considered optional. Previously the dashboard would silently scale up the 150x150 image as a fall-back.

Linux

New:

  • Increased Unix Cycles64 resolution to 100ns

  • Fixed Unix crash messages printing a truncated memory address.

  • Added support for asynchronous logging on forked instances

  • SkeletalMeshComponents will now run multithreadable tasks on the taskgraph on forked multithreaded servers

  • Moved FForkProcessHelper code in Fork.cpp.

  • Added FForkProcessHelper::IsForkRequested function. This returns true when the process is set to fork child processes or simulate forking by itself.

  • Implemented FUnixPlatformMisc::GetCPUVendor and GetCPUBrand() for non x64 Linux platforms to read and parse the /proc/cpuinfo file. Added tables for 64-bit arm cpu implementers and part numbers. This table may have further updates in the future.

  • FUnixPlatformProcess::CreateProc no longer requires you to pass an absolute path to an executable. If passed an argument containing a program name but no path separators, it now searches directories specified in the $PATH environment variable in the same manner as the shell would. The underlying API has changed from posix_spawn to posix_spawnp, and failures are no longer treated as fatal.

  • Add Linux -crashhandlerstacksize command line option to set crash handler stack size.

  • Moved stack to mapped memory instead of allocating in the heap. This can set and reduce the size of the 200k stack significantly through the command line.

  • Add DumpGPU viewer script for Linux and Mac. To use this, run the DumpGPU command in the console. This will open a folder to the DumpGPU HTML files and data, plus OpenGPUDumpViewer.sh. If you open OpenGPUDumpViewer.sh, the GPU Viewer will open in your web browser.

  • Updated Linux SDL to 2.0.20.

Bug Fix:

  • Unix's GetCPUTime refreshes the total cpu usage of the process every 250ms (same as other platforms) instead of the incorrect 25ms.

  • Replaced the single ensure crash reporting process handle with a pool of process handles.

  • Made UnixCrashContext for ensures thread-safe.

    • Stopped adding/removing FTicker delegates outside the game-thread.

    • Made the concurrently uploading processes thread-safe using atomic state machine.

    • Added option to limit the number of processes on dedicated game servers .

    • Fixed ensures not getting sent on dedicated game servers.

  • Use reliable messages for local swarm Mac/Linux messages Udp window size is ~64, so when sending large batches of "task completed" messages quickly, several would get silently dropped.

  • Change default optimization level for Shipping from O2 to O3.

Mac

New:

  • Added an Import Xcode GPU Debugger Plugin for Mac. This plugin works similarly to the RenderDoc plugin for Windows. Enable the plugin in your project settings, then press Shift+E to trigger a GPU frame capture of the primary viewport. It will automatically open in Xcode once the capture is complete, at which point you can replay the capture, step through it, and perform other operations.

  • Removed MetalShaderCompiler depenencies on DerivedDataCache.

Bug Fix:

  • Fixed incorrect format string in MacToolChain.

  • Fixed XCode GPU programmatic captures missing a file name.

VR

New:

  • Renamed EColorSpace to EOculusColorSpace to prevent confusion with the new engine definitions.

Bug Fix:

  • Fixed an issue where the editor would throttle whenever a VR headset was attached.

  • Fixed UE5 binary failing to package BP projects for HoloLens due to Missing Game Binary. UBT is required to run for all HoloLens packaging because this step generates the final target file used to generate the package.

    • This means you need to have Visual Studio set up to package for HoloLens even for a Blueprint-only project.

  • Fixed a bug which caused the Editor to throttle whenever a VR headset was attached.

  • Fixed an issue where the editor viewport would slow down when a Virtual Reality headset was being used.

Windows

New:

  • Display progress of splash screen on the Windows taskbar icon

Crash Fix:

  • Prevent a crash if the web browser component fails to load.

Bug Fix:

  • Force the webbrowser plugin to load when creating the bridge plugin.

WinGDK

New:

  • Added support for emulating "Default User Required" on Windows when the Simplified User Model is enabled, as it is not currently implemented in the GDK. When opting-in to emulating Simplified User Model & Default User Required, the game will block and display a user login prompt on startup. If the user cancels sign-in, the game will terminate. If the user signs out, the game will terminate.

  • Package install batch files are created alongside WinGDK packages.

XR

Bug Fix:

  • Correctly handle MultiView and Variable Rate Shading attachments in the PSO caching system.

Rendering

New:

  • Added a new Nanite Tools editor plugin, which includes an audit flow to find Nanite meshes with errors, and non-Nanite meshes that could be converted safely to Nanite. The tool performs a Material check to properly categorize error and optimization suggestions. This is the initial implementation and will be improved upon in future releases.

  • Implemented Nanite support for view visibility flags DrawInGame, DrawInEditor, VisibleInReflectionCaptures, VisibleInSceneCaptureOnly, HiddenInSceneCapture, ForceHidden, and others. Also partially implemented a GPUScene version of FPrimitiveProxy::IsShown().

  • Added an initial implementation of per-view primitive filtering in Nanite (such as GPUScene version of IsPrimitiveHidden from the SceneVisibility.cpp). This enables Nanite to support Show Only or Hidden Primitives lists for Scene Captures and other workflows.

  • Added a new debug mode to render only non-Nanite fallback meshes that incorrectly reference coarse static mesh assets. This mode is off by default, and enabled in non-shipping builds with r.Nanite.IsolateInvalidCoarseMesh 1.

  • Lights can now enable ray-traced shadows independently of the standalone Ray Tracing Shadows project setting. There are three options to select from: Disabled, Use Project Settings, or Enabled. For older scenes, lights that had Cast Ray Tracing Shadows enabled are mapped to the new Use Project Settings value.

  • Added a new define ("DXR_ALLOW_EMULATED_RAYTRACING") that automatically compiles out the r.D3D12.DXR.AllowEmulatedRayTracing by default.

  • Enabled Vulkan Wave Operations and use Vulkan 1.1 environment for shader compilation on desktop platforms.

  • Added wireframe viewmode support for Nanite using postfx barycentric coordinates.

  • To improve color management, there is a new Color Space property in the Texture Editor to specify the color space of the source textures.

  • Added compliant 64-bit image atomics in Vulkan, which fixes all validation issues with 64-bit atomics and allows the use of RADV driver (AMD + Linux) for Nanite and Lumen.

    • This change will use STORAGE_IMAGE to read from R64 formats when sampling isn't supported.

    • It leaves high level code and HLSL untouched. Render Dependency Graph will continue to consider them read-only access.

    • Creates a code path for HZB that uses UlongType.

    • Updates shader GUID for Vulkan to force a rebuild.

  • Added scoped CPU markers for CPU profiling for the most expensive parts of "GlobalBeginCompileShader" and "FShaderCompilingManager::SubmitJobs", which includes "FShaderType::AddReferenceUniformBufferIncludes" and "GetInputHash."

  • In the Environmental Light Mixer, Volumetric Fog toggle has been added to the minimal view for Exponential Height Fog.

  • Added a way to handle CopySrc/Dest transitions for depth-stencil targets in Vulkan, which allows the use of AddCopyTexturePass on depth-stencils of the same format.

  • Added Large World Coordinates support for cloth simulation in GPUSkinnedVertexFactory and SkinCache shaders.

  • Added descriptions for the various "stat *" EngineStat commands. Using "stat help" will list all available commands.

  • Added support for Morph Targets to the Motion Blur visualization when Skin Cache is disabled.

  • Modified DumpMaterialShaderTypes commandlet to add FMaterialShader types to the final shader type histogram.

  • Added additional options for linearizing (advanced) source encodings on texture import.

  • Enabled EmitDrawEvents by default when ProfileGPU is enabled, otherwise provide options to enable except in a shipping build to avoid oversights with release builds. Also removed EmitDrawEventsOnlyOnCommandList as it is unused.

  • Enabled cloth rendering on mobile and Windows ES3.1 platforms by default with per-project control. Use the console variable r.Mobile.EnableCloth to set it.

  • Added the ability to set shader defines for global shaders from configuration (*.ini) files.

  • Added new features and improvements to GPU Scene dynamic primitives:

    • Updates to GPU Scene and the GPUSceneCollector to support handling the upload of multiple instances and instance payload data for dynamic primitives.

    • Updates to Virtual Shadow Map caching to support the invalidation of cache pages upon removal of dynamic primitives.

    • Added the ability to provide a delegate to support initializing or modifying dynamic primitives' instance scene data and instance payload data from the GPU.

  • Added uniform buffer names to D3D12 shaders and added validation logging to uniform buffer binding.

  • Implemented Intel extensions for 64-bit atomics.

  • Fixed shader cooker stats showing the wrong shader format names.

  • Added GRHISupportsMapWriteNoOverwrite to check at runtime if RLM_WriteOnly_NoOverwrite is supported.

  • Allowed D3D12 global constant buffer updates to be more dynamic, which removes the shadow data overhead from stages that aren't used in a context. It also allows for global constant buffers larger than 4 kilo-bytes in size.

  • Refactored Vulkan renderpass initialization to allow for either vkRenderPassCreateInfo or vkRenderPassCreateInfo2 paths depending on platform support for the extension.

  • Added an optional MaxLODSize_VT option to Texture LOD Group to clamp cooked Virtual Texture sizes per group.

  • Added support for attaching to PIX on startup. You can either pass "-attachPIX" on the command line or set r.D3D12.AutoAttachPIX=1 in ConsoleVariables.ini. You will still need to manually hit "attach" inside PIX.

  • Added support for vkCreateRenderPass2 and vkCmdBeginRenderPass2 to Vulkan RHI.

  • Added an on-screen notification when Runtime Virtual Texture streaming mips are invalid and therefore likely to be causing a performance regression.

  • Added console variable r.VT.RenderCaptureNextPagesDraws to trigger render captures when Runtime Virtual Textures renders new pages.

  • The Virtual Texture System only updates during Draw Tile Mesh when the Material being rendered actually samples from a virtual texture. Previously, this was introducing lags in processing VT feedback, particularly evident when rendering the water brush which uses lots of Draw Tile Mesh internally.

  • Added single-callback version of CreateStructuredBuffer to automatically infer element size, total size, element count and data pointer (for example, CreateStructuredBuffer(GraphBuilder, TEXT("MyBuffer"), & -> auto& { return BufferSource; });, where BufferSource is a TArray)

  • Added support for uint2 shader parameters.

  • Added ForceTracking flag to ERDGBufferFlags/ERDGTextureFlags : force the RDG to track a resource even if it can be considered as read-only (no UAV, no RTV, etc.) This allows the graph to copy from and to external textures, and handling of the corresponding transitions, for example.

  • Added default pixel format capabilities for platforms that might not be able to poll for support at runtime.

  • Added RHIIsTypedUAVStoreSupported for texture format changes for D3D format queries that need to use the different UAV/Resource formats that are implemented on D3D11 and D3D12. Also, added checks for TypedUAVLoad support on D3D12.

  • Made changes to Landscape Grass type for "ShouldCacheLandscapeGrassShaders" to use "EShaderPermutationFlags::HasEditorOnlyData".

  • Vulkan 1.2 API now supports ray tracing when enabled (on by default) and adds support for ray query extension. Vulkan ray tracing can be set by the console variable r.Vulkan.ExperimentalRayTracing.

  • Added RHIUniformBufferLayoutInitializer and now RHIUniformBufferLayout is a proper FRHIResource. This brings proper RHI lifetime support to RHIUniformBufferLayout so we don't delete the layouts while RHI commands that use them are still in flight. This should fully address UniformBufferLayout and UniformBuffer crashes that randomly happen during shader compilation in the Editor.

  • Added separate RHI capability properties for full ray tracing shaders and inline ray tracing. While most RHIs may support both features, some may only support one.

  • Enable inline ray tracing support for Vulkan on PC via DDPI. Feature remains disabled by default using the console variable r.Vulkan.RayTracing. The minimal set of required ray tracing utility shaders is now always cooked for Windows Vulkan targets, and the "-noraytracing" command line argument can be used to disable ray tracing, which is useful when testing a game that was packaged with "r.Vulkan.RayTracing=1".

  • Added Dynamic Resource heap flags to Root Signatures, and moved static Root Signature text generation to a public file.

  • Added support for GPU asserts in ray generation shaders.

  • Extended Agility SDK support to all Windows family platforms.

  • Added an "Auto" setting to GenerateMips that detects format support before blindly using the compute version. A helper was also added to GenerateMips to tell if you need to add UAV support to a texture based on its texture format.

  • Added ray tracing feature support property to platform settings editor UI.

  • Added an option to disable high-end ray tracing reflection support per-platform. This avoids expensive, time consuming shader compilation for effects that will never be needed in practice.

  • Adding missing RHIValidation overloads for RHIBackBufferWaitTrackingBeginFrame and RHIFlushTextureCacheBOP.

  • Implemented Vulkan top level acceleration structure SRV management and binding. This allows acceleration structures to be used in shaders that perform inline ray tracing on Vulkan platforms.

  • Reduced ray tracing sampler heap allocation's high water mark through better sampler descriptor table duplication. Samplers were previously duplicated using per-thread hash tables, which results in some cross-thread duplicates. This change adds an exhaustive brute force search through the entire global sampler table if per-thread cache did not find a match.

    • This change was tested running a replay which previously reached 1400+ samplers (out of hard limit of 2048). With this change, the maximum sampler allocations are reduced to 400. The performance impact is minimal.

    • Control the duplication scheme with r.D3D12.RayTracing.DuplicateSamplers. By default it's enabled, but can store old behavior by setting it to 0.

  • Added support for compressed textures larger than 2 GiB.

  • Brought DXProgrammableCapture.h into ThirdParty and modified it to not require a NTDDI_VERSION. Cleaned up PixWinPlugin to use the correct header guards, correct types, and correct windows version check.

  • Implemented RHIGetNativeCommandBuffer in D3D11RHI, which returns the immediate context.

  • Updated WinPixEventRuntime to version 1.0.210818001.

  • Added quicker utility for getting a shader type's name. ValidateBoundShader and ValidateBoundUniformBuffer were rewritten to be templates instead of defines to make them easier to investigate.

  • Updated the Agility SDK to version 1.600.10.

  • Removed excessive calls to IsRHIDeviceIntel() to prepare for Gen12+ platforms.

  • The console variable r.Shaders.Optimize can now be set on a per-platform basis.

  • Extended GPU page fault information is now logged in Aftermath crash handler.

  • Resource dimensions and type are now reported when logging live and recently released resources after a GPU crash. This makes it easier to correlate resources reported by Aftermath with the live and recently released allocations in the engine.

  • Added an explicit SPIR-V target environment option to CrossCompiler::FShaderConductorOptions and use Vulkan 1.2 environment when compiling ray tracing shaders and shaders with CFLAG_InlineRayTracing.

  • Added support for accessing triangle indices and vertex positions in Vulkan inline ray tracing shaders. Use FRHIRayTracingScene::GetMetadataBufferSRV to access RHI-specific data associated with the ray tracing scene. This can be used to access vertex and index buffer binding information for inline ray tracing shaders.

  • Added ERayTracingPipelineCompatibilityFlags used by ShouldRenderRayTracingEffect to check if a particular effect can run on the current machine. Some effects may support inline or full pipeline ray tracing and some RHIs may support one or both features.

  • Making more RHISupports functions use FStaticShaderPlatform to take advantage of optimizations on certain platforms.

  • When Forward Shading is enabled, the Shadow Map Method is now grayed out to indicate it has no effect.

  • Implemented multi-platform DumpGPU command line tool for debugging common rendering artifacts. See the DumpGPU Tool documentation for more usage details.

  • Exposed per-project platform setting to control offline BVHs build mode (disabled, Maximize Performance, and Minimize Memory) since offline BVHs generally result in better performance and/or reduce memory usage. In its current state, Maximize Performance versus Minimize Memory controls whether triangle splits are used or not.

  • Added estimated compressed size metrics for Static Meshes in the Static Mesh Editor UI and in Asset Audit.

  • Added support getting transforms from GPUScene when building RayTracing Instance Buffer.

  • Improved the screen space subsurface scattering performance when it only occupies a small region.

  • Added functionality to wrap 1D dispatches into 2D or 3D to avoid API limits, and shader function to get the linear index.

Improvement:

  • Refactored Nanite hardware rasterizer to run as Material shaders, allowing for future Material graph evaluation of features like world position offset, pixel depth offset, and masked Materials.

  • Refactored Nanite Material audit checks into modular utilities, and added auditing support to Nanite Audit Tool.

  • Renamed FNaniteShader to FNaniteGlobalShader to make the base class more obvious.

  • Modified "DumpMaterialShaderTypes" commandlet to support listing Material Shader types, not just Mesh Material Types / Vertex Factories with a layout. Since this currently contributes a lot of unnecessary shader types / permutations, this change also temporarily disables Nanite raster shaders, except for the default Material.

  • Optimized the Nanite Material classify pass, using MaterialResolve to obtain MaterialSlotID directly, instead of obtaining SlotID through VisBuffer and ClusterPageData, and so on, to reduce bandwidth overhead and improve performance. Since MaterialResolve is 16-bit wide and VisBuffer is 64-bit, it can save at least 3/4 of bandwidth. After testing, the performance is improved by 40% on RTX 2070s. This optimization is enabled by default, and toggled with r.Nanite.ClassifyWithResolve.

  • Improved Instance Static Mesh and World Position Offset rendering by adding the console variable r.RayTracing.Geometry.InstancedStaticMeshes.SimullationClusterRadius to buck and sort ISM and WPO simulated instances based on distance to view. Also refactored the console variable code to fix/enable r.RayTracing.Geometry.StaticMeshes.WPO = 2, and fixed issues with current ISM and WPO if the local transform uses a non-identity matrix or if the simulated instance transform is non-identity.

  • Cleaned up shadow passes in order to remove unnecessary command list and feature level arguments.

  • Moved more hardcoded shader platform checks to DataDrivenShaderPlatformInfo.

  • While troubleshooting long compile times, enabled sorting by worker compile time to show the bigger offenders first. Removed instruction count from this display, as it is not a relevant stat in this context.

Crash Fix:

  • Fixed a crash in Procedural Mesh component with ray tracing enabled.

  • Fixed a crash when isolating Material Slots in editor.

  • Fixed a crash in Nanite mesh when reloading the global shader map.

  • Fixed a crash in GPU lightmass when baking an empty level.

  • Fixed a crash in ray tracing with invalid Static Mesh Proxies.

  • Fixed a crash that would usually happen when a Dynamic Material Instance created in a construction script could be unloaded with its owner, even when still referenced by primitives in the world.

  • Fixed a crash when clicking the RenderDoc viewport button, and implemented additional RenderDoc editor improvements.

  • Fixed a crash when using Try Get Shaders on a Material where there's no shader map available. For example, an invalid Material.

  • Fixed a crash that occurred when GPU ightmass was run with "Allow Static Lighting" disabled in the project settings. Now GPU Lightmass only runs when that option is enabled.

  • Fixed a GPU crash that could happen with Ray Tracing Global Illumination's final gather reprojection pixel index calculation and added an explicit bounds clamp.

  • Fixed a crash with landscapes when using the command line argument -rhivalidation that ensures the RHIBuffer is held for the life of the frame because not all RHI backends will have the SRV maintain a hard reference to the source buffer.

Bug Fix:

  • Fixed an issue that caused motion blur to become increasingly blurry when single stepping in PIE.

  • Fixed an issue with Nanite hit proxy selection for Instanced Static meshes that do not have "Has Per Instance Hit Proxies" enabled. Such as, Blueprint Construction Scripts spawning the ISMs rather than a content creator explicitly mutating the instances array.

  • Fixed an issue where ray tracing is not enabled by default in cooked games with r.raytracing set to 1.

  • Fixed an issue that would cause flickering in the Cable Component due to a race condition.

  • Fixed Per-Instance Custom Data and random ID for Nanite Materials and meshes.

  • Fixed an issue in Vulkan RHI when using Hair Strands debug mode 6 in Editor.

  • Fixed an issue when Realtime is turned off in the editor to make sure the RHI resources are flushed even when nothing is rendered to prevent leak in RHI (D3D12/Vulkan).

  • Applied fixes for broken and shuffled Nanite Materials when commands like "FUpdateStaticMeshesForMaterials" call "FPrimitiveSceneInfo::UpdateStaticMeshes", which will re-cache Nanite mesh draw commands (and deriving new Material table indices), but no other change will cause GPU Scene to perform a per-primitive upload, which would also update the global Material tables. This change modifies "FPrimitiveSceneInfo::UpdateStaticMeshes" to trigger a GPU Scene update so the MDCs and the global Material table stay synchronized. Normally, adding a primitive to the scene will mark GPU Scene dirty, but some cases of construction scripts adding to the scene, flushing the upload, but then changing just the Static Meshes or Material assignments wouldn't flush an update before.

  • Fixed an issue in Vulkan RHI to handle mixed sub-resource layouts when moving surfaces (defrag).

  • Resolved an issue where Raytracing Scene captures were using the Reflection Capture's visibility flag instead of the Scene Capture's visibility flag.

  • Fixed an issue with broken Morph Targets CPU update path.

  • Fixed an issue in Vulkan RHI for RHIReachSurfaceData. The bls8bpp use was inverted, Rect param was only partially taken into account, and added more supported formats.

  • In Vulkan RHI, added a barrier in Buffer Unlock to meet the expectation of higher level code that data is ready to read.

  • In Vulkan RHI, fixed FVulkanUnorderedAccessView for FVulkanTextureCube giving the validation error "requires an image view of type VK_IMAGE_VIEW_TYPE_2D_ARRAY but got VK_IMAGE_VIEW_TYPE_CUBE".

  • Vulkan RHI was missing CS lock in Vulkan Memory for when Render Thread (texture creation) overlaps with RHIThread (RHIEndFrame) and both can access the ActivePages.

  • In Vulkan RHI, fixed the Shader Complexity viewmode by adding approximate SPIRV instruction counts during shader compilation.

  • Fixed various issues in the Vulkan RHI with Async Compute. Added a new function to query stage bits supported by a queue that filters stages for barriers sent to async queue. And, avoid unnecessary semaphores when DstPipelines is ERHIPipeline::All.

  • Fixed accidental usage of the Stencil StoreOp for Depth in Vulkan RHI.

  • Fixed an issue in Vulkan RHI where transition batches containing only a single execution barrier were not submitted.

  • In Vulkan RHI, added RenderArea as a criteria for Framebuffer matching when reusing, which fixes some passes that were reusing the same set of targets but different areas.

  • In Vulkan RHI, fixed an issue with hashing in FDeviceMemoryBlockKey.

  • Protect extra GPU Scene instance data arrays from out of bounds access if data flags are incorrectly set.

  • Fixed an issue found in D3D12 sampler BorderColor copy.

  • Fixed issue where child Skeletal Mesh component LOD can be detached from its parent Skeletal Mesh component.

  • Fixed an issue when "LOD to Frame Skip Map" is set to a positive number of frames on Skeletal Mesh that would cause animation to become fuzzy from motion blur.

  • Fixed an issue with hair rendering with AddHairVisiblityCommonPass function using the wrong ViewRect for AddSimpleMeshPass function. This caused hair to not render at all in the right eye in XR and potentially in other situations that use multiple views.

  • Fixed Instanced Static Mesh (ISM) per-instance selection rendering where it used to draw every instance as selected, rather than only the instances that were selected.

  • Fixed CPU morphing broken on cooked mobile builds because its morph data was being stripped during the cook.

  • Restored the old FLightPrimitiveInteraction code. The new code can leak memory and it is no longer needed due to the removal of async LPI creation

  • Fixed hash generation for PC DirectX Shader Compiler (DXC) shaders to use the hash provided by DXC.

  • Fixed an issue where Adaptive Virtual Texture did not process the first allocation request each frame.

  • Fixed a dangling reference in Render Dependency Graph (RDG) blackboard implementation when blackboard struct is not first created.

  • Replaced overzealous check by ensuring when Hierarchical Instance Static Mesh (HISM) component transform or view projection matrix is invalid.

  • Fixed an issue where pooled buffers were not being renamed on reuse in external profilers.

  • Removed validation skipping from the SM6.6 code path as it's a fully supported feature in our version of DirectX Compiler (DXC).

  • Fixed an issue where bUseDiagnosticBuffer would be overwritten by the last used stage.

  • Fixed an issue with query waiting stats which prevented job thread wait times from being added to GRenderThreadIdle.

  • Fixed a bug that caused skeletal mesh rendering to break in forward shading mode when switching from another anti-aliasing mode to Multi-Sample AA (MSAA).

  • Fixed a race condition where multiple threads access a shared FD3D12RayTracingShaderTable::TransientCBVs array. This was solved by giving each worker thread its own version of this array, similar to TransitionSRVs and other such members of the FD3D12RayTracingShaderTable.

  • Fixed an issue where Adaptive Virtual Textures weren't correctly invalidated for regions marked as dirty.

  • Reserve worker threads are taken into account when creating contexts for Windows D3D12 to prevent running out of contexts during heavy loads.

  • Fixed a bug that caused the skeletal mesh LOD to change unexpectedly in the Editor viewport with Realtime viewport update turned on. This bug occurred when 1) hovering the mouse over the level thumbnail in the Content Browser (with bAllowWorldThumbnails enabled in DefaultEditor.ini) and 2) when dragging a rotation axis in the Details panel.

  • Fixed asserts on D3D12 platforms that don't support mesh shaders by excluding mesh/amplification from EShaderVisibility on those platforms.

  • Changed creation of FSceneViewState to require the correct current ERHIFeatureLevel.

  • Added SM6 into RHI LexToString, and fixed a typo in SceneView's LexToString.

  • Resolved an issue where elements of the geometry cache index buffer in FGeomCacheIndexBuffer::Update were not always initialized. This prevents out-of-bounds access of Geometry Cache index and vertex buffers on GPU during ray tracing acceleration structure build (which causes a GPU crash). This change also clamps FRayTracingGeometrySegment.NumPrimitives to ensure that the index buffer itself is not accessed out of bounds. Note that this change does not address the deeper underlying problem that causes a mismatch between FGeometryCacheMeshBatchInfo.NumTriangles and index buffer contents, it only treats the down-stream errors.

  • RDGBuffer objects need to be destroyed with their TFunction members, which fixes a slow leak when using Buffer creation callbacks.

  • Fixed an issue with bilinear sampling of light shaft texture in exponential fog draw step sampling outside the valid region due to dynamic resolution.

  • Fixed velocities on static objects being moved by editor widgets, which in turn fixes Lumen Global Illumination and Temporal Anti-Aliasing.

  • UDIM blocks are sorted by X/Y location This is important when using composite textures, as they require the composite texture's UDIM layout to match the source layout. Previously, block order was partially non-deterministic/related to how the texture was imported, so composite textures didn't always work with UDIMs.

  • Planar reflection now has smooth specular transition. It will start to fade off at roughness= 0.2, and finish at roughness = 0.3 as expected.

  • Fixed incorrect height field data in Global Distance Field. Now, the height field is only included once the texture is done streaming/compiling.

  • Lumen reflection is now working on Mac.

  • Fixed Distance Field Ambient Occlusion ghosting happening in the mesh preview window.

  • Don't include objects with "Cast Shadow" disabled in Distance Field Shadows.

  • Fixed issues related to when "r.AOGlobalDistanceFieldCacheMostlyStaticSeparately" is disabled.

  • Fixed non-Nanite Static Meshes not rendering in ray tracing in some situations (for example, when FarField ReferencePos is changed).

  • Fixed Global Distance Field corruption when the scene only contains height fields.

  • Fixed incorrect Distance Field Shadows caused by invalid Signed Distance Field bricks.

  • Fixed broken HZB culling result readback.

  • Fixed incorrect indexing when building mesh Signed Distance Field culled tile data, which caused flickering and incorrect results in Distance Field Ambient Occlusion.

  • Fixed Nanite meshes not respecting "Cast Shadow" toggle when using ray-traced shadows.

Deprecated:

  • Deprecate project settings for Virtual Texture Compression. All virtual texture compression is now handled by Oodle. Only one remaining use case for crunch compression in Runtime Virtual Textures exists, but will be migrated to use Oodle RDO in the future to remove any old compression code.

  • Deprecated RHIGetResourceInfo in favor of FRHIResource::GetResourceInfo.

Removed:

  • Removed r.SkinCache.ForceRecomputeTangents. It can be achieved equivalently with r.SkinCache.CompileShaders=1 & r.SkinCache.Mode=1 & r.SkinCache.RecomputeTangents=1.

  • Removed r.SkinCache.Mode=2.

  • Permanently enabled r.DoInitViewsLightingAfterPrepass and removed its console variable.

  • Removed usage of "DataDrivenShaderPlatformInfo" from "ValidateShaderParameterTypes".

  • Removed deprecated Distance Field Global Illumination and Heightfield Global Illumination features.

  • Removed editor toggle to manually control Ray Tracing Far Field assignment. HLODBuilder internally sets the flag when necessary.

FX

New:

  • Wrapped FVectorVMContext in Niagara Data Interface Function Context for external functions to facilitate running an experimental VM in parallel. External functions should no longer access FVectorVMContext directly, and instead use the helper member functions in the Niagara Data Interface Function Context class. This should have zero effect without NIAGARA_EXP_VM defined. If it is defined, then it'll use the experimental VM functions.

  • Shader symbol generation and "debug info" generation was split into two different console variables. This allows shader symbol generation post-packaging without generating different shader variants. As a result, you can always generate symbols and still have the final unduplicated shader sizes.

  • NotifyShaderCooked was replaced with NotifyShaderCompiled to prep for upcoming non-cook symbol writing.

  • PC DXC shader compiles only generate debug info when requested, not all the time. PC FXC shader compiles only generate debug info when requested, not just when the console variable r.Shaders.Optimize is 0.

  • Added support for filtering categories by section in modules in the selection stack view.

  • Made some minor improvements to Niagara Debug Hud: system colors are now customizable and applied a fix for colored background tile width.

  • Niagara Components can now have their scalability disabled by Sequencer, which should allow for better reuse of game FX in events/cinematics without having sequencer and scalability fight each other.

  • Niagara components can now optionally check for some relationship with a local player pawn to disable scalability culling. This can help prevent overzealous scalability culling for important player FX.

  • Refactored Debug Hud to allow easier extension. Adding a mode setting for the overview. Now includes the following modes:

    • Overview for existing overview data.

    • Scalability for detailed scalability culling info.

    • Performance for global and per-system performance info. This info can optionally be viewed in table or graph form.

Crash Fix:

  • The editor no longer crashes when you undo changes to a Niagara System after closing the Niagara Editor.

  • Fixed a crash occurring in the Niagara Camera Data Interface when transitioning between levels on a listen server.

  • Fixed for crash when priming Niagara Pools for Systems that needed to be recompiled.

  • Fixed several crashes with undo/redo of edits that cause the system to recompile.

  • Fixed an issue where making a user parameter from a Data Interface input would sometimes cause a crash.

Bug Fix:

  • Fixed an issue where Simulation Stage data interfaces wouldn't update the simulation until a full recompile.

  • Fixed an issue where renamed Static Switches on NiagaraScripts would not preserve the value correctly in existing content.

  • Fixed an issue where an emitter would incorrectly fail to compile if it had the same name as one of the modules it contained.

  • Niagara emitter parent to child merging will now display any issues encountered during the merge in a message on the emitter. Also, it more correctly handles Static Switch inputs.

  • Fixed an issue in Sequencer when using the Niagara System Lifecycle Track where the system would sometimes be missing from the first frame of the Sequence.

  • Applied a fixed for the forward renderer incorrectly premultiplying transparent surfaces by alpha.

  • Fixed an issue with emitter parent to child merging where a renderer would show that it had local changes in the child even though no changes were made.

  • Added a bias to SubUV calculations to avoid errors when 1/ImageCount loses numerical precision (most significantly when it's half precision on mobile platforms).

  • Fixed issue where spawning empty Niagara Systems would cause a memory leak.

  • Fixed an issue where the color picker would immediately close when making an edit to a Color Override parameter on a Niagara Component.

  • Fixed an issue where new user parameters wouldn't be visible in Niagara Components in the world in cases where the system was able to get the compilation data from the DDC.

  • Fixed issue with Niagara Debugger Loop Mode that prevented it working with burst systems correctly.

  • Fixed an issue where initial expanded state set in Details Customizations was ignored when an object was displayed in the Niagara selection stack. Also updated the initial collapsed state to more closely match the Details panel behavior.

  • Event writes from event handler scripts now throws a compile error instead of crashing. Also removing Niagara's own Event Generator modules from the menus for event handlers.

Lighting

New:

  • Implemented Absorption support for refractive Translucent Materials in the Path Tracer. The absorption color for solid glass Materials can now be configured with a "Absorption Medium Material Output" node in the Material graph. It defines the color change after traveling through 100 units (1 meter) of the Material.

  • Added a "Path Tracing Quality Switch" node that allows customizing a shader's behavior for path tracing without compromising or needing to set up separate Materials for the standard raster path and path tracing.

  • Fixed unnecessary invalidation of Virtual Shadow Maps for dynamic primitives that are culled in the shadow pass. Most relevant case is in editor with the "arrow" gizmos causing invalidations even though they do not cast shadows.

  • Adding Landscape support for Lumen Software Tracing and Voxel Tracing. The console variable r.LumenScene.Heightfield.Tracing (default=1) enables software heightfield tracing for Lumen detail traces.

  • Enabled Distance Field Ambient Occlusion on the Medium scalability level as a fallback from Lumen Global Illumination for games using fully dynamic lighting.

  • Lumen now supports Material Ambient Occlusion. When the variable r.GBufferDiffuseSampleOcclusion is disabled (default), Material Ambient Occlusion is passed through GBuffer.GBufferAO directly and applied to Lumen Global Illumination. When the project has r.GBufferDiffuseSampleOcclusion enabled, ambient occlusion is encoded into the DiffuseIndirectSampleOcclusion, which is the only path that supports Material Bent Normal.

  • Reflection captures are now supported in projects that have Allow Static Lighting disabled for the project. This allows them to be used on Medium scalability when Lumen Global Illumination is disabled. ReflectionEnvironmentAndSky is now run on Reflection Captures to apply Movable Skylight. Movable meshes and lights are now rendered into Reflection Captures.

  • Controllable Lumen settings have been added to the following:

    • Project Settings:

      • Ray Lighting Mode to set project-wide control for ray lighting quality.

    • Post Process Volume:

      • Lumen Scene Lighting to drive Radiosity gather quality.

      • Lumen Scene Detail that drives Lumen culling aggressiveness.

      • Lumen Scene View Distance to control the distance from the camera that Lumen Scene will be maintained.

      • Lumen Scene Lighting Update Speed that drives Radiosity gather convergence speed.

      • Final Gather Lighting Update Speed that drives Final Gather temporal accumulation speed.

      • Max Trace Distance that sets the distance that Lumen features will trace through the scene.

      • Ray Lighting Mode for local control for ray lighting quality.

    • Primitive Component

      • Emissive Light Source to provide a hint to Lumen that the mesh has an important lighting contribution and should not be culled.

  • Added Lumen scalability options to the existing Global Illumination and Reflections engine scalability options. Lumen GI and Reflections works on Epic and High settings only.

  • Lumen foliage over-occlusion was reduced by adding a Coverage channel to the Global Distance Field.

  • Lumen now supports the Two Sided Foliage shading model. Two Sided Foliage is treated like Subsurface, meaning there is no separate lighting gather on backfaces, and Subsurface Color is added to Diffuse Color. The Editor viewport shows a Scalability warning for anything other than Epic, whereas previously it was shown only for levels lower than Epic since Cinematic runs at a lower framerate.

Improvement:

  • Improved performance of the Path Tracer by implementing path compaction to keep GPU lanes more fully occupied as rays bounce around the scene. The idea here is to break up the bounce loop in the path tracer into independent launches so that active paths can be grouped together. This is done with wave ops plus atomics. This implementation renders scene with the path tracer up to two times faster in most scenes.

  • Improved shadow terminator of bump/normal mapped surfaces in the Path Tracer.

  • Improved path tracing denoising results behind sharp reflections and refractions.

  • Improved several self-intersection behaviors in the Path Tracer.

  • Reduced the likelihood of timeout detection and recovery (TDR) occurrences for the Path Tracer on Windows.

  • Raised the quality of Lumen Final Gather when in the Cinematic scalability level.

  • Improved Lumen Radiosity gather with spatial and temporal reuse.

Bug Fix:

  • Fix incorrect geometric normals on path-traced geometry with World Position Offset (WPO) Materials.

  • Fixed an issue where Material Instance changes were not causing path tracer to restart accumulation.

  • Fixed Foliage instances appearing single sided in ray tracing even when the Material is two sided.

  • IES Profiles light complexity now works correctly for lights.

  • Fixed Virtual Shadow Map invalidation issue with boxes parallel to light's near plane. This is most often encountered with Point Lights and axis-aligned boxes in the scene.

  • Fixed a bug to avoid constant path tracer invalidations when PostProcess or UI Materials are being changed as they cannot have an impact on the lighting calculations.

  • Fixed a bug that made the path tracer unable to be toggled through the show command in game viewports.

  • Fixed several virtual shadow map issues when using Large World Coordinates and scenes far from the origin.

  • Fixed a bug where light components fail to propagate certain property changes from Sequencer.

  • Path tracer updates now work over nDisplay and in the editor's picture-in-picture camera previews.

  • Using two sided subsurface Materials with opacity equal to 1 has a somewhat ambiguous physical meaning, so this ensures this is desired versus a lower opacity value. We normal opacity by clamping between classic and virtual shadow map paths. Opacity is clamped to a value slightly less than 1 which causes back faces of two side geometry to not be shadowed now consistently between the two paths.

  • Fixed issues relating to Volumetric Fog results in Reflection Captures not appearing correctly. Added a new console variable 'r.ReflectionCapture.EnableLightFunctions' that enables/disables light functions from appearing in reflection/sky light captures. Disabled by default.

  • Fixed missing light attenuation decoding on forward/mobile code paths, which resulted in incorrect shadows.

Removed:

  • Changed the name of the Lumen Max Trace Distance console variable from r.Lumen.MaxTraceDistance to r.Lumen.MaxTraceDistanceScale.

  • Removed tiled deferred rendering path as it was superseded by the more general clustered deferred path. This change is prompted because features are increasingly being added to the clustered shading path, such as support for single pass evaluation of multiple lights with Virtual Shadow Maps. In the future the clustered shading path may be enabled by default (r.UseClusteredDeferredShading 1).

  • Removed Geometry Shader path for Point Light shadow rendering that disables Point Light shadows if Vertex Shader Layer is not supported (at runtime).

Materials

New:

  • Implemented BxDF energy conservation for the Path Tracer.

  • Added UI for Custom Primitive Data on primitive components that shows each CPD's parameter name as defined in the Material, a color picker (if a vector parameter), warnings for mismatched parameter names, soft warning for undeclared parameters, and a hyperlink that takes user to the owning node in the Material Editor when the parameter name is clicked.

  • Added Blueprint methods for setting scalar and vector values by parameter name on Custom Primitive Data (CPD) and "get index for scalar/vector parameter name" methods. Will prioritize CPD index based on first parameter name found on assigned Material. This makes it conceptually easier for developers to assign CPD values to components like they would a normal Material parameter, but with all of the benefits of CPDs.

  • When the On-Demand Shader Compilation (ODSC) system is processing shader compile results on target, the render state for primitives needs to be recreated to ensure it updates draw commands, which are caching uniform buffers. It also needs to ensure systems which cache data regenerate their results (for example, Lumen). This negatively impacts performance when processing results, but it is necessary work.

  • Added Blueprint-callable functions to Material Parameter Collections to get Scalar and Vector parameter names, get and set default values, and convenience methods to Material Parameter Collection to get parameter indexes by Name.

  • The console variable r.vt.FeedbackFactor that is used to control the size of the VT feedback buffer can now be changed at runtime, no longer requiring restart or shader recompile to happen.

  • Text Render Components now allow use of Decal Materials.

  • Added a Runtime Virtual Texture Sample mip mode that ignores the World Position input in a Material. It calculates the mip based on derivatives of actual world position instead, and gives the same result as 'Default' when no World Position input is used. The use case for this mip mode is when a constant value is being piped into WorldPostion, that happens for things like picking a constant color from an RVT for grass. Without the new mip mode, the engine always computes a mip value of 0 which can be very heavy on the physical texture pool.

  • Added support for setting Runtime Virtual Texture parameters from Blueprint for both Dynamic Material Instances at runtime and Material Instances in editor Blueprint.

  • Static terrain layer weights are no longer treated as Material parameters. They are automatically assigned from The Landscape Component's "Get Combination Material" function, but after that there's no reason for any kind of Material parameter tracking/processing on them. This removes a bunch of code and simplifies/speeds up some logic.

  • The way Material Layer parameters are processed was updated:

    • Previously, parent Material Instances would attempt to remap layer indices, and cache the updated parameters in the derived-material instance's cached data. This worked to some degree but did not cover all cases. Now Material instance overrides are never cached and instead each instance maintains a table to remap layer indices for its parent. This remapping occurs on parameter lookup.

    • Previously, enabling Material Layers sent runtime parameter queries down a slow path, since the default parameter values stored on the shader map were not reliable. This issue has been resolved. When compiling a Material, the default value from the Material Expression is not automatically used any longer. Instead, the current Material Function (which may be a Blend Instance, Layer Instance, or regular Function Instance) is given the chance to override the parameter value. This way, the "correct" default value is now baked into the compiled output. Special code for checking default parameters is no longer required at runtime, which should remove the previous performance tax from using Material Layers.

  • Extended Material Parameter Metadata with Group, SortPriority, and Description. Cache this data inside FMaterialCachedData. UMaterialInterface methods to query this data become non-virtual, instead it's just returned along with other Metadata when accessing the parameter value. The parameter group caching mechanism inside PreviewMaterial.cpp has been removed, it is no longer needed since group lookup now comes "for free" along with other relevant parameter data.

  • Material layer "stacks" (FMaterialLayersFunctions) are no longer considered static Material parameters. APIs/data is changed to reflect the fact that a given UMaterial(Instance) can only have a single layer stack (or no layer stack). This removes some usage of slow/legacy APIs, which should help speed up editor/cooker performance (some additional changes/refactors are likely needed to fully take advantage of this). Lastly, layer stacks as parameters is legacy technical debt from an early iteration of the Material Layer system that did support multiple stacks.

  • Refactored and cleaned up Material Parameters with the primary goal being to reduce the amount of code duplicated across different parameter types, and reduce the amount of boilerplate required to add new parameters. There are new types FMaterialParameterValue, and FMaterialParameterMetadata (both in MaterialTypes.h).

    • FMaterialParameterValue contains a value, along with various editor-only fields that describe how that value is being used. Using this new type, many places that previously included separate APIs for each parameter type collapse to a single API that operates on FMaterialParamterValue/FMaterialParameterMetadata.

    • Code that previously had a black copy/pasted for each parameter type can be replaced with a loop that iterates over all parameter types.

    • This change also includes some API cleanup that should improve editor performance. Previously, the APIs had GetAllScalarParameters, GetALLVectorParameters, and similar others which would return a list of FMaterialParameterInfos for each one of the given type. Code would often query all parameters, then loop over the results and look up each parameter value. Now, with the new API, GetAllParametersOfType returns a list of all FMaterialParameterMetadata of a given type and collects the values at the time the list of parameters is being built. This saves the work of looking up each value individually.

Improvement:

  • Move Material Layer names to FMaterialExpressionCacheData which optimizes accessing layer names (remove previous ad hoc caching scheme), and should allow layer names to be properly stored for Material Layers as well.

Bug Fix:

  • Fixed an issue where landscape and water meshes would not update after forcing an update to them. With on demand shader compilation enabled, there are some scenarios where you do not want to rely on rendering to inform you of what shaders need to be compiled. Specifically scenarios where Materials are used to generate content, such as landscape brushes, thumbnails, scene captures and so on. In these situations, the engine should explicitly compile all shaders and call SubmitCompileJobs which is a straightforward way of compiling missing shaders from a map. Note that FMaterial::CacheShaders does not support this behavior and is too risky to change. Also, SubmiteCompileJobs supports being called multiple times and will not re-compile more shaders.

  • MipLevel sample mode now works when sampling an Adaptive Virtual Texture.

  • Fixed Virtual Height Field Mesh disappearing when used with a Material using Translucent or SingleLayerWater.

  • Fixed interaction between Material Layers and Material Quality Level Switches.

  • Material Instances with layers don't generate their own shaders, unless their layers are different from the parent Material.

  • Resolved an issue where Material Dot expressions allow mixing inputs with different numbers of components.

  • Resolved an issue preventing Material Function Instances from correctly handling parameter overrides when the Material Function INstance has another function instance for a parent.

  • Material autogen derivative code matches coercion logic of legacy code for min/max operations.

  • Fixed "Get All Parameters of Type" so that less-derived instances don't override parameter values in more-derived instances.

  • Ensure Material curve parameters caches the correct value (index of the curve in the atlas), which may not be correctly reflected in the expression's Default Value.

  • Removed a check function for input type to Material CrossProduct (Cross), allowing casting any input type to float3, so that it matches legacy behavior.

  • Resolved an issue where Material Instance parameter overrides are supposed to be ignored for nullptr textures.

  • Material Power expressions result type is driven by left-hand-side input only.

  • The Material transform expression is supposed to accept a scalar input value when input is tangent space. This was changed to accept both MCT_Float and MCT_Float1, rather than just MCT_Float1. Most places that generate scalar values use the MCT_Float type.

Removed:

  • Removed the dipole parameterization for Separable SSS in Subsurface Profile. All separable SSS parameters are automatically upgraded to Burley. Add Tint to Burley's profile (the same to the original Subsurface Color). It introduces the capability to add non-physically-based rendering into an SSS profile. You can stay within the bounds of physically based rendering by using the default value (white).

Mobile Rendering

New:

  • The mobile deferred and forward lighting calculations are now unified.

  • Added an option to use high quality BRDF on mobile, same as with PC.

  • If a light shading model is not supported on mobile, it will now fall back to the default light shading model.

  • Use EnvBrdf for mobile deferring lighting pass.

  • Mobile now supports the Subsurface and PreIntegrated Skin shading models. Subsurface Profile shading on mobile uses preintegral burley diffusion on ring, just like the PreIntegrated Skin but could be generated at runtime based on Burley inputs.

  • Vulkan now uses G8 format for mobile Ground Truth Ambient Occlusion (GTAO). Enabled mobile AO and PPR on high-end mobile devices.

  • Added support for Mobile Deferred Rendering mode on Android OpenGL ES.

  • Integrated Signed Distance Fields to Mobile Deferred Renderer.

  • Added GL_MAX_TEXTURE_BUFFER_SIZE to OpenGLES.h to not depend on the extension GL_MAX_TEXTURE_BUFFER_SIZE_EXT.

  • The variable r.MobileNumDynamicPointLights is now read from the platform .ini file instead of from the project console variable. The console variable r.MobileNumDynamicPointLights was added to the shader keystring.

  • Disabled Parallel RDG for Mobile Platforms from the RenderGraph.

  • Hair Materials now directly use the Hair Shading Model instead of doing so with a FeatureLevelSwitchExpression, improving hair Shading Model support on mobile.

  • Added support for a Skin Cache on mobile platforms.

  • Set Fast Approximate Anti-Aliasing (FXAA) quality to 0 on mobile platforms by default.

  • Added an option for projects to disable support for per-pixel Material shading models on mobile platforms. Use the console variable r.Mobile.AllowPerPixelShadingModels=0.

  • Account for Reflection Capture influence radius when finding closest capture for an object. Fallback to skylight reflection when there are no influencing Reflection Captures on mobile platforms.

  • Removed perspective correct shadow depth shader permutation when its not required on mobile platforms

Improvement:

  • Removed NoLightMap shader permutation for Materials that are not using it on mobile platforms.

Crash Fix:

  • Fixed a crash on mobile while rendering custom depth primitives that require scene texture access.

Bug Fix:

  • Fixed an issue where the brightness of the Reflection Captures couldn't be changed at runtime on mobile.

  • Fixed the specular artifacts that would occur on Snapdragon 845 devices.

  • Disabled mobile MSAA if DepthFullPrepass is enabled.

  • Fixed an issue where depth was not stored with fullprepass enabled.

  • Fixed an issue with incorrect depth stencil access flag in mobile multi-view rendering.

  • Integrated mobile Static Lighting when Distance Fields are enabled.

  • Enqueue FrameSyncEvent ReleaseResource on the Render Thread when in the RHI thread in OpenGLViewport.

  • Resolved a Depth issue with Editor Primitives in Mobile Preview.

  • Implemented a Binary Cache fix for the Compute shader and fixed calculation of ShaderLib Processing time.

  • Fixed a bug that caused Editor to stall in the Material Editor while in Mobile Preview.

  • Fixed Custom Stencil and Depth on mobile by making them not always memoryless. This changes the logic back to the way it was implemented in SceneRenderTargets.

  • Resolve issues with texture mip generation at runtime on Android devices running Vulkan.

  • Resolved an issue preventing PerlinNoise3D texture from correctly initializing on mobile platforms.

  • Allow access to CustomDepth and CustomStencil textures in Decal Materials for mobile platforms.

Removed:

  • Removed IsMobileDistanceFieldShadowingEnabled.

  • Removed the shader define MOBILE_PROPAGATE_ALPHA, and temporarily removed premultiply alpha. FXAA luminance calculation was moved from the tonemapper to FXAA when MobilePropagateAlpha is enabled.

  • Removed the OpacitySceneCapturePass from MobileSceneCapture since Depth is now stored in a different Render target. Moved everything to the shared SceneCaptureRendering file and removed MobileSceneCapture.usf.

Nanite

New:

  • Moved all Nanite defines shared between C++ and shaders into a common header file, removing all the "keep this define in sync with this file" cases all over the code. This makes the code a lot more maintainable. Common definitions now have a NANITE_ prefix to disambiguate global symbols.

  • Changed the name of the Nanite Proxy mesh to Nanite Fallback mesh. Fallback settings are now largely error based with a new property FallbackRelativeError. Nanite builder now provides the LOD fallbacks for all auto-generated LOD levels, which is far faster than generating them from scratch.

  • Added KeepTrianglePercent and TrimRelativeError properties to the Nanite static mesh settings. These properties trim detail from the Nanite data that is stored to disk, and can be used to optimize disk size after import. This is useful toward the end of production.

Improvement:

  • Optimized Nanite by streaming directly from DDC when running in editor, which eliminates the need for memory copy.

  • Optimized Nanite with several minor changes that result in 10-20% faster Nanite rasterization and culling.

Crash Fix:

  • Fixed a crash when importing a Nanite mesh with texture coordinates that are unreasonably large or contain floating point specials.

  • Fixed a crash that would happen when importing flat Nanite meshes.

Bug Fix:

  • Fixed an issue where Materials with pixel depth offset would cause severe visual artifacts when applied to Nanite meshes.

  • Fixed a bug where Nanite streaming would sometimes fail to settle on nDisplay setups.

  • Fixed edge artifacts when using lightmaps, shadow mask, or ambient occlusion with Nanite meshes.

Optimizations

New:

  • BlueNoise texture is loaded on demand, which saves around 2.6MB when not running with Lumen Reflection or Lumen GI.

  • Moved InstanceUpdateCmdBuffer from UPrimitiveComponent to UInstancedStaticMeshComponent. It is only used by the derived class so this code is safe. It saves 48-bytes (40-bytes from the removed member and 8-bytes of padding).

  • On Demand Shader Compilation (ODSC) - Only compile shaders that are used to draw instead of compiling every shader in each Material's shader map on PostLoad. This is an experimental feature that is still being developed. This change ensures the editor only compiles shaders it needs to render, resulting in approximately 60% less shaders being compiled and faster start-up times for the editor when opening maps.

    • This feature is disabled by default. Enable it with r.ShaderCompiler/JobCacheDDC 1.

  • Added a new transient allocator implementation supporting PC and consoles with Render Dependency Graph (RDG) integration.

  • Added parallel recording of Render Dependency Graph (RDG) pass execution onto command lists.

  • Enabled Vulkan fragment shading rate functionality when supported.

  • Added an option to render Distance Field Shadows using async compute. This also fixes an issue where a ray traced distance field Projected Shadow Info is rendered for all views instead of just its dependent view.

  • Added a NoRef Streaming LOD Bias setting for Static and Skeletal Meshes, which is a LOD bias that is only applied when a mesh doesn't have any component reference. The default value is -1, which means it uses the value of "r.Streaming.DefaultNoRefLODBias." When the console variable is greater than or equal to 0, then the specified value is used. The setting is implemented as a per-quality level variable so that users can specify different values for different quality levels. Quality levels can be selected by using the console variable "r.Streaming.NoRefLODBiasQualityLevel" under the ViewSitanceQuality sections in platform scalability configuration (*.ini) files.

  • Added attachment variable rate shading (VRS) for Vulkan. It goes through all required stage flags, access masks, layouts, renderpass attachments, and so on for the VK_KHR_fragment_shading_rate extension. The logic used to gather VRS properties (tile size, data type/format) have been fixed up. Also, a templated version of VkFragmentShadingRateAttachmentInfo is attached to renderpasses where supported and when attachment is provided.

  • Added the ability for UAVs to be mergeable between AsyncCompute and Graphics pipelines to allow compute shader overlap between them.

Improvement:

  • All DebugViewMode shaders have moved into a single shader, DebugViewModePixelShader.usf, and are dynamically picked based on a uniform. If you've added your own debug shaders or have modified one of the existing debug viewmode shaders, you will need to make similar changes to the DebugViewModePixelShader.usf file.

    • Removes FComplexityAccumulatePS, FLODColorationPS, FRequiredTextureResolutionPS, FMeshTexCoordSizeAccuracyPS, FPrimitiveDistanceAccuracyPS, FMaterialTexCoordScalePS

    • All shader code is now contained in DebugViewmodePixelShader.usf. Individual visualizations are contained within separate functions.

    • All the C++ interface code has now been folded into a single implementation.

    • Previously each implementation kept track of its name, and whether it needed local VF, if it needed Material properties and needed instruction count. Since every implementation is in the same shader we need all those features. To simplify the code all this has been removed.

    • We only keep track of a single FDebugViewModeInterface singleton to use for all debug modes.

  • Implemented D3D12 Shader improvements.

    • Duplicate D3D12 shader data and runtime code was consolidated to help with maintenance.

    • Platform specific code and data was reorganized to reduce overhead on platforms that didn't need it.

    • Moved FShaderCodeFeatures booleans into the bit flags EShaderCodeFeatures and added more D3D12 feature flags.

Bug Fix:

  • Fixed D3D11 hitches caused by unpaged memory returned from the Map. This was solved by having UnifiedBuffer create brand new resources instead of updating existing ones.

  • Fixed longstanding excessive stalls on RenderThread where the RHI thread would not yield fast enough on Windows.

Deprecated:

  • Added a new console variable r.VelocityOutputPass to replace r.BasePassOutputsVelocity. If you were using r.BasePassOutputsVelocity=0, the equivalent setting is r.VelocityOutputPass=1. In both cases, it is recommended to use a r.VelocityOutputPass=0 and only revert to the old behavior if you encounter issues.

Removed:

  • Removed deprecated "Set Shading Rate Image" functions that were marked as deprecated in Unreal Engine 4.27.

Postprocessing

New:

  • Improvements to eye adaptation (auto exposure) readback that cause it to always readback the most recent available exposure value and use a variable number of readback resources to prevent overwriting inflight requests.

Bug Fix:

  • Fixed an issue with the post processing sequence of the after-pass system to allow chaining multiple passes in the same location.

  • HighlightsMin values greater than 1.0 are now allowed by the Editor. A new parameter was added called HighlightsMax, which helps define the transition region from Midtones to Highlights in a way that allows high brightness pixels (>1) to be considered Highlights.

  • Fixed an issue causing the Auto Exposure toggle in Project Settings not to work.

UnrealLightmass

Crash Fix:

  • GPU Lightmass no longer crashes when debug mode is enabled.

Sequencer

New:

  • Added different clock sources when recording with Take Recorder, including specifying the default Recording Clock Source in the Project Settings.

  • Added command to snap sections within the Sequencer timeline according to their TimecodeSource property.

  • TimecodeSource will now be set when creating new skeletal animation sections in Sequencer with custom timecode bone attributes.

  • Clicking or dragging MMB in the Sequencer timeline will move the Playhead to that time but not evaluate Sequencer, allowing you to key the current state at that new time.

  • Added command when right-clicking on Control Rig sections for collapsing/baking all sections to a base section.

  • Added command when right-clicking on on additive Control Rig sections where you can set Zero or One keys or weights.

  • Subsequences and skeletal animation tracks now use the desired frame display format and zero padding from the sequencer settings.

  • Basic setting classes can now be created in Blueprints by inheriting from MoviePipelineSetting_BlueprintBase. This allows for creating custom properties that will be visible in the job configuration and can be fetched in a custom burn in.

  • UMovieSceneSequencePlayer::PlayTo API now supports inclusive or exclusive time to be specified.

  • MoviePipeline: Added DWAA and DWAB compression methods for multi-layer-enabled EXR's.

  • Added Remove Root Option to Take Recorder settings so that you can specify whether to include root motion in the sequence when recording.

  • Added support for {project_dir} as a Movie Render Queue format string so that export paths can be made relative to the project instead of the engine.

  • Added an experimental panoramic capture Render Pass to Movie Render Queue which should support temporal sub-sampling. This is enabled from the Movie Render Queue Additional Passes plugin.

Improvement:

  • TimecodeSource in Take Recorder is now better handled to prevent inconsistent Timecode values when recording and processing different Takes.

  • Moved TimecodeSource property from UMovieScene to now be stored on UMovieSceneSections.

  • The FMovieSceneTimecodeSource struct is now defined in MovieSceneSection.h instead of MovieScene.h.

  • Movie Render Queue now produces a warning when the Override Frames setting is used to create a zero length range, such as [0, 0].

  • Matinee actors upgraded to Level Sequences will have their sections set to 'Keep State' to more closely match original Matinee playback.

Bug Fix:

  • Fixed an issue with Sync Sections using Source Timecode so that trimming and other edits are now accounted for.

  • Restore State now correctly works for Control Rig sections and tracks.

  • Fixed a scenario where Movie Render Queue would fail to detect shots when a Subsequence had a start offset that pushed the evaluation range completely outside of the original playback bounds.

  • Fixed an issue in UMovieSceneSequencePlayer::PlayTo which caused events and other setup from frames after the current time to be triggered during low framerate situations.

  • Fixed Movie Render Queue's png output from having a speckled alpha channel caused by image quantization.

  • Updated Movie Render Queue example python scripts to use UMoviePipelineQueueSubsystem so that Sequencer's 'Auto-bind to PIE' setting does not cause duplicate objects while rendering.

  • Fixed several instances where auto tangents were not being set correctly in the Curve Editor.

  • Fixed FIntermediateColor not converting correctly from FColor.

  • Movie Render Queue's Job Author field can now be left blank and it will default at runtime to the local user name. This fixes an issue where loading a queue saved by another user would use the previous user name as author, and not the user who was actually running the job.

  • Fixed {shot_name} or {camera_name} format strings resolving into an incorrect folder name when clicking the hyperlink in the Output column.

Removed:

  • The Motion Trail plugin has been replaced by the new Motion Trail Control Rig plugin.

Tools

New:

  • Added support for UObject scopes to be reported to Unreal Insights when namedevents are enabled.

  • Added a CsvCategory command in the engine that provides the capability to change the active CSV categories. The syntax to use it is CsvCategory

    [Enable/Disable] (toggles if the second argument is omitted)
    .

  • Created new WorldPartitionRenameDuplicateBuilder class that provides capability to Rename or Duplicate a WorldPartition map without loading it all at once.

  • Created a new WorldPartition: Foliage builder class that provides the capability to change grid size.

  • Replace References can now consolidate different subclasses of a UPhysicalMaterial together.

  • Added a "minimum" formula to summary stats, to use for shared memory.

  • Introduced Screen Reader and Slate Screen Reader plugins to Win64, Mac, Linux, IOS, Android, PS4, PS5, XboxOne, XboxSeriesX, WinGDK and Switch platforms.

  • These plugins provide developers with C++ and Blueprint tools to provide blind end-users an accessible means of navigating around UI elements. These plugins can be used to comply with CVAA requirements. This feature is still experimental.

  • Added DeveloperSettingsBackedByCVars as a base class for developer settings which contain one or more variables with ConsoleVariable metadata.

  • Output log category improvements. You can now choose to color-code entire log lines by category, or just by the category itself (located in the CategoryColorizationMode in the editor appearance settings). You can choose to highlight all messages for a particular category by right-clicking on a line.

Improvement:

  • Updated the Server CSV ReportTypes with improved categories and colorization.

UnrealVS

New:

  • Updated VSIX for 1.62.

  • Implemented a RunningDocumentTable and created an onSave callback to cover all edit/save operations.

  • Updated new version 1.62 of assembly info.

  • Added a new annotate command.

  • Enabled warnings as errors.

  • Added further hooks for operations that require a checkout before being saved.

  • Added a UBT menu add CompileSingleFile and PreprocessSingleFile.

  • Converted the ReconcileExtensions function to use local paths.

  • Added option to allow async checkout.

  • Added UpdateInstructions command for future engineers.

  • Added library to respond to C# feedback.

  • Added functionality to the PreprocessOnly to publish the output file path to the log used by unrealVS.

Improvement:

  • Improved coding guidelines and fixed Diff titles.

Optimization:

  • Moved CompileSingleFile back into the stub menu allowing UnrealVS.CompileSingleFile. Added all other commands into the same stub which provides a simple commandline/binding mechanism.

Bug Fix:

  • Resolved a bug that occurred when running many commands at once.

  • Resolved issue where Checkout on Edit was not honoring the user option.

UI

New:

  • SlateInsights now shows SWidget::Paint events.

  • Added the LayerId to the WidgetReflector.

  • Added a context menu in Slate Insights to search for the selected widget. This provides information about the lifetime of the widget.

  • Added a menu in the WidgetReflector to display the different runtime validation test.

  • Added a menu with timing for each SWidget update to SlateInsights.

Bug Fix:

  • Added null check for Game Viewport in FCommonAnalogCursor::HideCursor.

  • Removed an ensure in MarkPartyMemberAsDirty as it is valid to have a nullptr SocialUser in the event that the local user is logged out. When logging out of an account, the SocialToolkit clears the 'UsersBySubsystemIds' map which is used to find users with FUniqueNetIdRepl.

  • Fixed the settings of SColorPicker.

Slate

New:

  • Add test to see if widgets have a valid LayerId. You can enable this with Slate.VerifyWidgetLayerId.

  • Added a W component to SVectorInputBox.

  • Upgraded some SWidgets to use TSlateAttribute (SExpanderArrow).

  • Upgraded some SWidgets to use TSlateAttribute (SExpandableButton, SFxWidget, SRadialBox, SSafeZone, SSplitter, SUniformGridPanel, SUniformWrapPanel).

  • Added the 'Source' name to the tooltip in the Widget Inspector, as the tooltip often covers up the source name.

Crash Fix:

  • Fixed a crash related to text glyphs accessing invalid memory.

Bug Fix:

  • Fixed unused SLATE_ATTRIBUTE arguments:

    • STextEntryPopup

    • SSuggestionTextBox

  • Previously, right-clicking outside of the current selection in editable text boxes would fail to update visuals, so menu options would appear broken or disabled. This issue is resolved by deselecting the text box and moving the cursor to the right-click location. This matches the behavior of text boxes in other environments.

  • Fixed a division by 0 error in UniformWrapPanel layout code.

  • Previously log colors such as Log Highlight, Log Text, and Log Command would not be available to programs other than the Editor. These are now available.

  • Fixed the Overlay ZOrder and ConstraintCanvas ZOrder in invalidation. The child widgets' order needs to match the order they are painted in for the Global Invalidation to work.

  • Fixed SWidgets that were not incrementing their LayerId correctly.

  • Fixed all mouse inputs being offset when fullscreen at resolutions that were not the same ratio as the native screen resolution.

  • Removed unnecessary error warning firing when dragging in widget archetypes derived from C++ UserWidgets. Warning no longer relevant with changes to widget template generation.

  • Fixed issues with scrollbox padding not applying if padding was less than width of scrollbox.

  • Added additional glyph logging. Speculative fix skip glyph if invalid or not visible.

  • Fixed 5.0 regression where transparent buttons got UI borders where they were not present before.

  • Fixed SSugestionBox failing to update with newly entered text properly.

  • Fix SSuggestionTextBox not closing the suggestion list when the user clicks outside it.

  • Fixed an issue where tall menus would jitter at certain applications' scales.

  • Fixed an issue where menus would flash white briefly at certain resolutions / applications scales.

UMG

New:

  • Added a function to change keyboard type: UEditableText::SetKeyboardType.

  • Added bCurrentlySwitching variable and const getter to UCommonAnimatedSwitcher.

  • Added DisableNativeTick metadata to UCommonActivatableWidget.

  • Exposed the Slate overflow policy to UMG RichTextBlock

  • Enabled Widget Library by default. Fix widget library locking up when scrolling edge is just before a new asset view.

  • Added CommonUI functionality to better support blueprint-only workflows.

  • Added functions to bind visibility to widget activation. This exposes GetFocusTarget on activatable widgets to Blueprint.

  • *Bug Fix:** Fixed warning when using default back actions. Since we no longer use CommonActivatablePanel.

  • Added Animation drawer to UMG editor. This can be opened from the hotkey Ctrl+Shift+SpaceBar.

  • Implemented GetOptions restrictions for gamepads.

  • Added ability to select CommonUI gamepads via dropdown.

  • Added limited support for gamepad type autodetection based on any active FInputDeviceScope

  • Allow Selection of base class for Widget Blueprint.

  • Fixed Common button group disabling buttons unnecessarily.

  • Removed CommonUI widget samples in favor of content examples.

  • Added GetChecked and HasVisibilityTag helpers to UCommonUIVisibilitySubsystem.

UMG

  • Added URichTextBlock::RefreshTextLayout method to support refreshing text layout on demand.

  • When creating a new WidgetBlueprint, it will no longer add a Canvas Widget at the root of the Hierarchy and let the user choose to add one instead.

Common UI

  • Added limited support for gamepad type auto-detection based on any active FInputDeviceScope. You can define the detection criteria in gamepad assets. This is limited because XInput can't distinguish between different controller types (other plugin sources will still work), so to preserve the ability to set a preference in Project Settings, the logic prefers to stick with an existing match rather than switching to something else. Otherwise it will prefer the first match found in the controller asset list.

UMG

  • Added a Wrap Widget operation in the Hierarchy to support wrapping multiple widgets at the same time. When selecting widgets that are not all in the same branch of the tree, each group of widgets in a specific branch will be wrapped in a different wrapper Widget.

  • You can now use keyboard arrow keys to move Widgets that are in a Widget Panel, such as Horizontal Boxes, Vertical Boxes, and Grids. For example a user can select an element in a Grid and move it to another cell in the specified direction in the Grid.

Common UI

  • Reworked and re-named hardware features into platform traits. This consists of the following changes:

    • Changed various references from Hardware Featureto Platform Traits. This includes the tag namespace, which is now "Platform.Trait."

    • Added the ability for games to enable or suppress tags debug globally using SetDebugVisibilityConditions.

    • The PlatformHardwareFeatures setting is now called PlatformTraits. It is an array of tags instead of a tag container to allow for .ini inheritance to work, which doesn't work correctly in the current config hierarchy editor. This will be improved in a future release.

UMG

  • Added UAssetActionUtility to Picker Common Classes.

Crash Fix:

  • Fixed 5.0 regression where drag drops in the UMG hierarchy would result in a crash.

  • Fixed a crash that can happen when an Editor Utility Widget asset is deleted while it is in use.

Bug Fix:

  • Implemented a fail-safe check in DynamicEntryBoxBas::AddEntryChild.

  • Fixed missing add keyframe button that was missing in the UMG editor.

  • Fixed widget spinboxes font foreground color.

Common UI

  • When you re-name a widget in UMG Designer, you can now change from a generated name back to its original name.

  • Previously, UMG could make all widgets in a Widget blueprint invalid when using undo on a Replace Child operation. This issue has been fixed.

  • You can now select Abstract Classes as a base for a UserWidget.

  • Fixed an issue in EditorUtilityWidgetBlueprint that prevented the World from being marked dirty when opening or changing a property on the EditorUtilityWidget object.

  • Fixed crash when calling Add Item on a List View in PreConstruct of an Editor Utility Widget. UListView doesn't support duplicate or null items, and adding either causes a crash. We now report a warning and stop the erroneous input from crashing.

  • Fixed regression that caused animations to be re-evaluated for widgets that were not ticked.

  • Fixed issue where editor utility widget style changes would not save correctly.

Virtual Production

New:

  • Added a Tools menu to Switchboard which has shortcuts to launch Unreal Insights and a local Switchboard Listener.

  • Created the CVAR nDisplay.render.show.visualizationcomponents for toggling the visibility of visualization components in nDisplay renders.

  • Provided a CVAR Preset for CVARs used commonly on Virtual Production stages by stage operators.

  • OpenColorIO in Unreal Engine now has in-editor support for Mac and Linux.

  • When capturing traces, Switchboard automatically enables vblank monitoring, which adds vblank bookmarks to traces for nDisplay. You can also enable this functionality for traces with bookmarks captured outside of Switchboard with the CVAR nDisplay.sync.diag.VBlankMonitoring.

  • Updated the OpenColorIO library to version 2.1.

  • Added an option in Switchboard to disable handling ensures in nDisplay. Ensures are non-fatal but when they happen it can cause hitches and issues during a shoot. We are now disabling them by default, but you can choose to enable them for debugging purposes.

  • You can override the render sync policy of an nDisplay cluster in Switchboard now. There is also an option to use the sync policy specified in the nDisplay config file, so you can use custom sync policies.

  • Added option to rebind all properties exposed to Remote Control Preset for an Actor.

  • Added option to rebind a property exposed to Remote Control Preset on a different Component.

  • Stage Monitor now has an activity filter for max age.

  • Stage Monitor settings, such as filters, are now saved.

  • Made Text3D more accessible to Blueprints by allowing access to underlying kerning and mesh components and removing the final keyword from public headers.

  • Moved OpenCV library and helper module into its own plugin.

  • Added Provider Role filtering to Stage Monitor activities.

  • Updated OpenCV library to version 4.5.5.

  • Added option to export a ULensFile Asset to a .ulens file so you can use your created ULensFiles in other projects.

  • The OpenCV library now supports Linux.

  • Added Live Link transaction filter for improved Multi-User setup workflow.

  • You can now optionally set the image dimensions for a LensData Asset. Note that these are not essential for current virtual production workflows.

  • Live Link VCAM iOS app now supports multitouch. Users can operate multiple elements on the Remote Session at the same time.

  • The Level Snapshots plugin content now includes default Level Snapshot Blueprint Filters.

  • UDP and TCP messaging now support hostnames in addition to IP addresses.

  • Main Switchboard UI now has start and stop controls for the Multi-User Server.

  • You can now transact the metadata for Takes over Multi-User.

  • Added a quick access setting to Switchboard so you can configure Unreal Insights and enable captures.

  • You can now quickly increment the Multi-User Session Name from the Switchboard UI.

  • Level Snapshots now support subobjects.

  • Switchboard Listener now has Unreal Insights tracing.

  • You can now override the Switchboard Listener inactive timeout value, which defaults to five seconds.

  • Added hitch detection and logging to both Switchboard and Switchboard Listener.

  • Switchboard Listener now integrates with Unreal's standard crash logging and reporting facilities.

  • Incremented Switchboard Listener version to 2.0.0 for Unreal Engine 5.

  • Switchboard now includes a cross-platform setup script, sb_setup.py. This unifies the Switchboard installation process for different host operating systems, and includes functionality for detecting and repairing a corrupt Switchboard Python virtual environment.

  • Switchboard now works on Linux.

  • Switchboard now uses a higher port number that does not require root privileges for its internal rsync server by default.

  • Rebroadcast Subject is set to true by default for Live Link XR Subjects.

  • The Subject Representation for LiveLinkComponentController now has a Blueprint getter and setter.

  • The Subject Representation for LiveLinkComponentController now emits a Blueprint event when the component's controller map changes.

  • You can now sort by the provider column in Stage Monitor.

  • Added vertical bars to the buffer visualization in Timed Data Monitor to show the location of each frame in a subject's frame buffer.

  • Removed the Save Lens Information button from the Lens Info step of the Lens File Editor. Any changes to Lens Info are saved automatically now.

  • Updated MessageBus protocol and CBor serialization backend to support communication between Large World Coordinates (LWC) and non-LWC endpoints. Previous protocol versions in Unreal Engine 4 are assumed to be non-LWC.

  • Created the CVAR LiveLink.Component.EnableLiveLinkEvaluation to specify whether all Live Link Components should evaluate their Subject.

Improvement:

  • Remote Control Presets detect changes to exposed properties modified by Blueprint calls, and can now include changes to the root component.

  • Asset searches from the Remote Control Web API now use Blueprint native class filters.

  • Machine names are now used for sorting after the source names are sorted to create a stable Live Link source list.

  • Exposing something to the Remote Control Preset is now logged.

  • You can now control Reflect Editor Level Visibility in Game from Switchboard and the Unreal Editor.

  • Improved first-time setup of the Switchboard dependencies, as well as creation of desktop and start menu shortcuts for both Switchboard and Switchboard Listener.

  • Improved smooth evaluation with Engine Time for Live Link Sources by adding a timing offset to avoid jitter-related buffer overflows.

  • Fixed the squishing of UI elements in the LensFile Editor by adding scroll boxes to multiple panels.

Crash Fix:

  • The Editor no longer crashes when you change the map while the Remote Control Web Application is connected.

  • Fixed a crash that occurs while resolving binding when a world can't be found.

  • Fixed a crash that occurs when changing editor layout while a Remote Control Preset is open.

  • VPFullScreenWidget in the VirtualProductionUtilities plugin no longer crashes when loading a new level.

  • Fixed a crash that could occur if garbage collection started while recording a Cine Camera with a Live Link Camera Controller in TakeRecorder.

Bug Fix:

  • Fixed stale OpenColorIO color space and preset selection after the underlying configuration changes.

  • The Stage Monitor role constraint is now only verified for auto starting the monitor. If your Unreal Editor doesn't have an allowed role, you can still start monitoring manually from the UI.

  • Assets no longer have to be loaded in the Unreal Editor before you can use them in the Remote Control Web Application.

  • Previously, timecode and timespan conversions were rounding the framerate in a non-drop timecode format. There's no need to make a distinction so the framerate is now used as is.

  • The selected group in the Remote Control Preset is now correctly highlighted.

  • Fixed reset to default not working on properties that didn't exist on a Class Default Object.

  • Remote Control works on Mac now because the WebSocket receive buffer size is reduced if the platform is not Windows.

  • Disabled Live Link Component from ticking in Editor Previews, such as in the Blueprint Editor, by default to avoid breaking the root component.

  • The Live Link Remove All Subjects option is now added back to the Virtual Subject context menu.

  • The default Live Link Preset will now be applied on launch.

  • Fixed inconsistencies with Remote Control rebinding where the incorrect Actor was associated with the properties being rebound.

  • Fixed Remote Control bindings getting invalidated when changing sublevels.

  • Live Link rebroadcaster is now removed when there are no more Live Link Subjects.

  • Fixed unresponsive touch controls for the Animation Preview in the VCam UI.

  • You can now filter assets by the Img Media Source type in the Content Browser.

  • Transactions over Multi-User are now delayed until after you finish editing a text field.

  • When creating sublevels for a persistent level during a Multi-User Session, the sublevels are now correctly named and referenced in the Levels window. This fixes the cases where the levels wouldn't save their content properly.

  • Fixed a logic error in Switchboard's ListenerClient class that would lead to keepalives being sent at more than 10 Hz rather than the intended 1 Hz.

  • Switchboard Listener handles non null-terminated buffers better while attempting UTF8_TO_TCHAR conversion and logging them.

  • The Recipient field for Switchboard Listener's PresentMon process is now initialized, which prevents log warnings of the form "Trying to send message to disconnected client 205.205.205.205:52685" (endpoint = 0xCDCDCDCD)".

  • Fixed a race condition related to launching short-lived processes through Switchboard Listener.

  • In Switchboard, fixed outdated references to the UE4Editor.

  • Updated the path to UnrealBuildTool in Switchboard.

  • When running the Unreal Editor with Vulkan, nodal offset calibration no longer produces NANs for the camera pose.

  • Switchboard now queries device host platform when initiating build actions, rather than assuming all devices are Win64.

  • Switchboard now uses the correct path to the engine's Python executable on non-Windows platforms.

Deprecated:

  • The Lens Distortion plugin is now deprecated. Update your project to use the features of the Camera Calibration plugin instead.

  • The Timecode Synchronizer plugin is now deprecated. Update your project to use the features of the Timed Data Monitor plugin instead.

Removed:

  • The nDisplay for Level Snapshots plugin functionality was added to the Level Snapshots plugin, so the nDisplay for Level Snapshots plugin was removed from the ICVFX plugin.

Worldbuilding

New:

  • Avoided resetting loaders while renaming duplicated actors for a runtime level cell as it flushes async loading.

  • When converting a World Composition map to World Partition, all Actors now go in a single runtime grid. Removed the creation of 1 spatial hash runtime grid per world composition layer.

  • Prevent rotation of water bodies in X,Y and scale on Z as they are not supported transformations for water bodies.

  • Added support for iOS and Android platforms to GeoReferencing plugin.

  • Added support for Level Instances to have a folder hierarchy in the World Outliner. Actor Folders can now have a root object which serves as a context for folder hierarchy.

  • Exposed SingleLayerWaterRefractionFullPrecision show flag to scene captures.

  • Exposed GetCollisionComponents on the WaterBodyComponent.

  • Add support for runtime/in-editor visibility flags for water bodies.

  • Added a collision height offset property to water bodies to allow extending the height of the collision box above the surface of the water.

  • High precision Cartesian Coordinates are now based on the new engine Large World Coordinates Vectors.

  • Added Methods to convert from Engine to Geographic Coordinates.

  • Added a Round-Planet Pawn to allow for Ellipsoidal movement around the Planet, avoiding Roll.

  • Added a sample for a Latitude/Longitude/Altitude placed Actor.

Bug Fix:

  • Fixed ActorPlacementUtils::IsLevelValidForActorPlacement to always return true for a partitioned world as checks don't apply. (bPromptWhenAddingToLevelBeforeCheckout / bPromptWhenAddingToLevelOutsideBounds).

  • Fixed broken Undo/Redo of create/delete Layer in ULayersSubsystem.

  • Fixed WaterMesh override boolean not being exposed to the UI.

  • Fixed mesh override on river water bodies.

  • Fixed custom water body materials that could be transparent.

  • Fixed r.water.WaterMesh.EnableRendering to allow/disallow all water meshes to be displayed, in-game or not.

  • Fixed memory corruption induced by invalid water materials.

  • Fixed undo behavior for water component.

  • Fixed Waves not appearing in the Wave category and some missing Wave parameters.

  • Fixed Word Partitioned Actors not being properly registered to the water brush.

  • Fixed custom water bodies being invisible when dynamically spawned.

Deprecated:

  • Changed GetWaterBodyType to no longer be virtual. Instead, users should prefer setting the value of the WaterBodyType property in water body constructors.

  • All Water body functions and data have migrated from the actor itself to a dedicated component. Any place where a function was called or data was modified on a Water Body Actor now needs to first access the respective component.

  • The Water Mesh Actor class has been renamed to Water Zone.

Data Layers

New:

  • Added Data Layer Hierarchy support.

  • Removed per-view editor Data Layer visibility show flags.

  • Added functionality to Data Layer Outliner (now very similar to world outliner).

  • Added show filters (hide Editor/Runtime Data Layers, hide actors/unloaded actors).

  • Added mechanism to lock editing of Runtime Data Layers.

  • Added Data Layer picker that reuses FDataLayerMode (shows hierarchy).

  • Added wp.Runtime.SetDataLayerRuntimeState to set any of the 3 Data Layer runtime states.

  • Modified wp.DumpDataLayers to also dump the whole Data Layer hierarchy with initial/target/effective state.

  • Added option to choose representing world in Data Layer Outliner.

  • Moved the "Allow Runtime Data Layer Editing" flag from the EditorPerProjectUserSettings to the AWorrldDataLayers actor so that the state persists for all users.

  • Added buttons to quickly add/remove selected actors to/from Data Layers.

  • Added the option to allow setting Data Layer runtime state recursively from parent to children.

  • Split contextual menu option "Create New Data Layer" into 2 options to allow creating Data Layers under a selected Data Layer or directly at root.

  • Fixed Data Layer details view not refreshing properly when toggling its "Is Runtime" flag.

  • Added column Initial Runtime State in Data Layer Outliner.

  • Fixed World Partition CheckForErrors not properly resolving invalid Data Layers.

  • Data Layer is considered not visible when it's marked as unloaded in the editor.

  • Fixed missing case in FDataLayerHierarchy::CreateParentItem.

  • Added Data Layer highlighting based on editor selection.

  • Added Data Layer / Actor filtering based on editor selection.

  • Fixed bug in Data Layer outliner where newly created actors, once saved, were showing a second unloaded version of the same actor.

  • Replaced old Data Layer placeholder icons with official ones.

  • Removed Editor Data Layers at cook and for game worlds.

  • Added ID Name column in Data Layer Outliner.

  • Fixed bad lambda captures in Data Layer Outliner context menu.

  • Reset Data Layer User Settings are now in the Advanced menu and always apply to all Data Layers.

  • Prevent pasting/importing/moving AWorldDataLayers actor.

  • Fixed detection of dirty actors newly assigned to a Data Layer that is about to be unloaded in the editor.

Bug Fix:

  • Fixed undo of Data Layer transactions when user cancels saving of dirty actors before unloading editor cells.

  • Fixed Data Layer Label tooltip.

Landscape

New:

  • Added debug name to Landscape component Edit Layers data, so that we can display a more readable name when a component is referencing an invalid edit layer.

  • Changed Landscape map check warnings to info messages, since the system is able to automatically cope with the problem.

  • Added Landscape Material to Edit asset context menus.

  • Changed grass height/weight data storage. Now uses a single continuous array to minimize slack waste.

  • Put the thumbnails on the left side of the paint layer names to prevent misalignment when importing a Landscape.

  • Added button to Landscape Details panel to create RVT volumes for all set RVT assets.

  • The context menu when right-clicking on the Heightmap layer in the Landscape Sculpt mode now points to the Manage -> Import tool instead for Landscape Heightmap import and export.

Bug Fix:

  • Clear selected Landscape components in the Details panel when clearing the selection.

  • Prevent Landscape Material Instances validation/recompilation if not in the editor or a commandlet (we cannot re-build material instance constants otherwise).

  • Fixed incorrect landscape normals computation.

  • Fixed crash in landscape resampling method. Regions in ResampleData are specified in quads, not vertices.

  • Fixed missing ShowForTools in Landscape Import/Export tool.

  • Refresh layer list from target when in Landscape Import tool

  • Fixed padding on property detail in Landscape Import/Export tool.

  • Added detection of discrepancies between the Landscape Material Instance's TerrainLayerWeightParameters and the Landscape component's weightmap allocations.

  • Renamed visibility layer name to "LANDSCAPE_VISIBILITY" to centralize/simplify the handling of that special layer's name.

  • Added resource streaming tracking system to Landscape in order to ensure RVT pages affected by a given heightmap/weightmap get invalidated each time it gets fully streamed in in the editor.

  • Fixed crash when going in Landscape mode after it was marked for pending deletion.

  • Fixed various copy/paste issues with Landscape and Textures.

  • Fixed grass maps not being able to detect that the grass map Material is finished compiling.

  • Fixed missing row of vertices when using the rendered WPO code path for landscape static lighting.

  • Fixed Landscape Edit Layers preventing Landscape to properly be carried over when converting a map to World Partition.

  • Fixed black landscape material thumbnails.

  • Fixed crash when converting old Landscape to Edit Layers or when deleting invalid paint layers in the Landscape panel and re-abilitating them after.

  • Fixed crash when creating new Landscape with no Material.

  • Added all of the current Ray Tracing Shader variations to the list of excluded Shader types for Landscape thumbnails.

  • Made TUniformGrid::Cell safe from internal precision errors. TUniformGrid::CellUnsafe was added and matches the old behavior of TUniformGrid::Cell.

  • Fixed Landscape waiting indefinitely on Landscape Brush Shaders on recompile.

  • Fixed assert that occurred randomly when undoing Landscape operations.

  • Added check to make sure Weight Blend Layers are never normalized.

  • Fixed race condition in FLandscapeEditLayerReadback when the GPU fence of 2 of its internal readback tasks get written in between their respective Tick.

  • Fixed warning "Leaking Landscape Edit Layer read back tasks." Won't process readback tasks when the Landscape is prevented from updating.

  • Fixed grass map being re-read over and over again.

  • Fixed bug where Runtime Virtual Texture settings made on a Landscape Actor did not propagate to the proxies.

  • Retopologize Tool was breaking navmesh generation.

  • Prevented continuous nav mesh updates when moving the mouse if the Flatten tool is active.

  • LandscapeGizmoActor is not shown anymore in the Scene Outline.

  • Fix VT update to happen with rest of Landscape painting tools (Smooth, Flatten, Noise).

  • Fix Landscape GetXYOffsetData to take mip level into account.

  • Get static parameter values prior to updating static permutation for Material Instance in Landscape components.

  • Fixed assert when updating heightmaps of different sizes when merging Landscape Edit Layers.

  • Fixed crash when deleting Landscape components.

  • Properly delete Landscape Edit Layers heightmaps and weightmaps when deleting Landscape components.

  • Fixed assert when cooking Landscape components on mobile and creating Materials.

One File Per Actor

New:

  • Call IsPackageExternal instead of manually testing for RF_HasExternalPackage.

Bug Fix:

  • Deleted empty/invalid external actor packages on OpenWorld template map.

World Partition

New:

  • Disabled building of static lighting in World Partition maps, It will be properly supported in a future release.

  • Fixed invalid bounds computed for ActorClusterInstance when cluster mode is set to Embedded.

  • Resaved OpenWorld with reduced actor packaging scheme and enabled actor folder objects.

  • Actor Folders Objects. When enabled, folders are actual objects and modifying a folder won't affect Actors (more compliant with OFPA).

  • Actor Folders Objects enabled by default for World Partition and Level Instances.

  • Can be enabled on regular levels through the experimental feature 'Use Actor Folder Objects'.

  • If Level uses OFPA, Actor Folders Objects are saved in their own package (but will use ExternalObjects root folder).

  • Generalized saving object in an external package (different from its outer package).

  • World outliner support for old folders and Actor Folder Objects.

  • Levels using the Actor Folder Objects will show a root Level node (like Level Instances).

  • WorldPartition now sorts level streaming using Level Streaming's priority so that UWorld::UpdateLevelStreaming processes making visible levels and call AddToWorld in the right order. This results in a more efficient usage of the AddToWorld time limit.

  • Moved World Partition Editor and Data Layer Outliner under same Level Editor Category.

  • WorldPartition now has its own max world size (value is currently equal to UE_OLD_WORLD_MAX).

  • Actor Folder Objects feature is no longer active while cooking or while running with -game.

  • For PIE partitioned worlds, propagate PersistentLevel's used Actor Folder Objects in each generated runtime level. This allows it to remove fallback to persistent level in ULevel::GetActorFolder.

  • Modified actors in partitioned worlds are now in the correct folders in PIE.

Bug Fix:

  • Removed next preferred level to process in AddToWorld and replaced by filter function that will skip non critical streaming levels when streaming performance is poor.

  • Fixes UWorld::BlockTillLevelStreamingCompleted not always waiting for all streaming levels that were making visible to become visible.

  • Fixed optimization using s.LevelStreamingAddPrimitiveGranularity : Support cases where AActor::PostRegisterAllComponents triggers code that either unregisters or re-registers components pushed in FRegisterComponentContext.

  • Fixed UWorld::BlockTillLevelStreamingCompleted to make it call Begin/End StreamingPauseDelegate only once .

  • Fixed bad management of unsaved level instances in world partition PIE. This was causing Level instance content to be added twice in the PIE world and caused a crash when exiting PIE.

XR

New:

  • Created the OpenXR function GetControllerTransformForTime to query velocity and acceleration of the controller at a specified time.

  • Added a mechanism to use OpenXR chain structs in OpenXR extension plugins.

  • You can now define a swapchain and renderbridge in an OpenXR extension plugin.

  • Added infrastructure to OpenXR for playing haptics on a VR HMD.

  • XR HMD plugins can now override Android device profile names.

Bug Fix:

  • Fixed issues related to OpenXR runtimes not supplying tracking data of various types. If data isn't being provided, it should not be copied out because it might be incorrect, and it is better to preserve the last cached position than overwrite with zero or identity values.

  • Runtime data is now per controller and the constant bulk data is shared by all controllers in the OpenXR APIs. This fixes the issue where you couldn't apply the same haptic effect on two devices simultaneously and have them behave correctly.

  • Fixed an issue where the VR Console Command window aligned off the player's view on several VR platforms. Now the debug canvas is drawn to an internal texture, and so no longer applies DPIScale from the viewport.

  • ShadowProjection passes no longer check for reused LoadBalancers if Instanced Stereo Rendering is enabled.

  • Changed the filename of the retrieved Android manifests by adding the prefix "Retrieved_" so they don't override the already generated manifests.

  • ETextureCreateFlags for resolve and target are now unified in OpenXR because only one texture is ever allocated. There is still the issue of IStereoRenderTargetManager exposing both sets of texture flags, and the concrete classes that utilize RHICreateTargetableShaderResource* still require the flags separated.

  • Deferred culling contexts are no longer used when Instanced Stereo Rendering views come in.

  • OpenXR HMDs now use custom OpenXR XrReferenceSpaceType from OpenXR extension plugins.

  • Fixed startup error in the Unreal Editor if the Windows Mixed Reality plugin is enabled and the Windows build is later than 2004. This is an interim fix, since the WMR plugin is tagged as deprecated in 5.0 and will be removed in a future version.

Deprecated:

  • The Windows Mixed Reality plugin is deprecated in Unreal Engine 5. Update your projects targeting Windows Mixed Reality and HoloLens devices to use OpenXR.

AR

Bug Fix:

  • The Windows Mixed Reality RHI now uses a non-null display adapter when creating D3D11 devices.

  • Set the macro PLATFORM_USE_GENERIC_STRING_IMPLEMENTATION to 0 on HoloLens to prevent failures.

VR

New:

  • The Oculus VR plugin was updated to v33.

Bug Fix:

  • Fixed the issue where SceneCapture was enabling stereo when it shouldn't because it doesn't own a viewport. Since SceneCapture shouldn't be enabling stereo, CreateSceneRendererForSceneCapture explicitly disables stereo.

アップグレード ノート

AI

Upgrade Notes:

  • Code that accesses recast / detour code directly or through deprecated functions. In the latter case, compiling code may create double to float conversion or deprecation warnings. Unless you are making use of large world coordinates (LWC) directly, the warnings can be ignored. To be fully compliant with LWC, conversion to FReal for UE / Game code, or dtReal / rcReal / duReal for recast library code, will be required.

Animation

Animation Tools

Upgrade Notes:

  • In Control Rig, Gizmo was renamed to Shape. All API calls which previously included the term "gizmo" have been renamed to "shape". Python scripts can be upgraded by using a simple text search and replace.

Audio

Upgrade Notes:

  • Refactored Audio::TScopedComPtr to TComPtr.

Core

Upgrade Notes:

  • Moved the FResourceSizeEx into its own cpp file so modifying the header isn't a full recompile. Wherever possible convert the usage of FResourceSizeEx to use the tracking functions which accept a named tag such as:

    • AddDedicatedSystemMemoryBytes(const FName& Tag, const SIZE_T InMemoryBytes);

    • AddDedicatedVideoMemoryBytes(const FName& Tag, const SIZE_T InMemoryBytes);

    • AddUnknownMemoryBytes(const FName& Tag, const SIZE_T InMemoryBytes); The "Shared" version of these functions have been removed and should be replaced with one of the options listed above.

  • Projects which have engine modifications using raw pointers will need to update those modifications to use TObjectPtr instead of T*. Note that this only applies to engine changes; plugins and projects are not affected.

Cooker

Upgrade Notes:

  • AlphaCoverage scaling was on by default for all textures, but now it defaults to off. It should only be used for punch-through transparency. Texture has a new bool, bDoScaleMipsForAlphaCoverage, to control this. The new config option "EnableLegacyAlphaCoverageThresholdScaling" can be set to true to keep the legacy behavior. Textures with AlphaCoverageThresholds at the default value of (0,0,0,1) now have AlphaCoverage scaling off by default.

Datasmith

Upgrade Notes:

  • The deprecated USDImporter module is now fully deleted from the USDImporter plugin, along with old, unsupported Python scripts. Users should update their code to use the USDStageImporter module instead.

Editor

API Change:

  • IContentSource::GetCategory() has been renamed to GetCategories() and returns an array of category names instead of only one.

Upgrade Notes:

  • Upgraded engine version of the third-party Alembic libraries to version 1.8.2, we are dropping support for HDF5.

  • The bForceRDOOff setting in the [TextureFormatOodle] Engine.ini section has been deprecated. Projects with RDO enabled (i.e. bForceRDOOff=false) will need to enable RDO in Project Settings -> Texture Encoding.

  • Users may need to resave Blueprint assets using MakeTransform with the default values. The default values saved as string with the asset changed from "1,1,1" to "1.000000,1.000000,1.000000", and this generates a Blueprint Compiler warning.

New:

  • The CVAR r.Editor.OpaqueGizmo has been replaced by ShowFlag.OpaqueCompositeEditorPrimitives to be scene-specific. This means the Editor Gizmo dithering can be controlled per-scene now.

Mobile

Android

Upgrade Notes:

  • FAndroidPermissionDelegate is now a multi-cast delegate, to allow multiple callbacks to be bound. Any callbacks bound to FAndroidPermissionDelegate with a Bind function will error; replace these with calls to Add functions instead.

Networking

Upgrade Notes:

  • The various Vector_NetQuantize types no longer clamp the scaled vector components to a specific number of bits. The only values that are considered invalid are non-finite ones which are still replaced with a zero vector during serialization. Precision has also been improved by not scaling values unless it's certain that the precision can be improved by doing so. If clamping of values in Vector_NetQuantize types is desired, make sure to clamp them before replicating. This also makes sure the server and clients have the same perception of what the values actually are.

Online

API Change:

  • A ChannelName parameter has been added to the IVoiceChat's FOnVoiceChatBeforeRecvAudioRenderedDelegate callback to disambiguate which voice channel the audio is from. Existing callbacks bound to FOnVoiceChatBeforeRecvAudioRenderedDelegate will break due to the signature change. To resolve this, you will need to add the new parameter to the signature of your callback functions.

Online Subsystem

API Change:

  • MAX_LOCAL_PLAYERS has moved from the OnlineSubsystem plugin to CoreOnline.

  • Removed the duplicate ToString function for ESocialRelationship type. If code fails to find ToString, use LexToString instead.

  • Removed ESocialFriendRequestMethod because it's the same as SubsystemType RequestMethod.

Upgrade Notes:

  • EOS Stat name inconsistencies are now fixed by converting to upper case before calling API methods. As a result, stat names that you define in the EOS Dev Portal should be all upper case.

Pixel Streaming

API Change:

  • Class names in private sections of the Pixel Streaming plugin have been moved into a "PixelStreaming" namespace.

Upgrade Notes:

  • Renamed a number of classes to use the phrase "PixelStreaming" instead of "PixelStreamer", specifically, PixelStreamerInputComponent to PixelStreamingInputComponent. Any projects directly accessing Pixel Streaming C++ will need to be updated to use the new naming conventions.

  • The HardwareEncoders Plugin needs to be enabled whenever using AVEncoder (GameplayMediaEncoder) otherwise there will be no encoders registered to AVEncoder.

  • Renamed PixelStreamerInputComponent to PixelStreamingInput to align with our new naming conventions in UE5. This change may break blueprints using the old PixelStreamerInputComponent. While we have put in active redirectors into the Pixel Streaming plugin in some cases these Blueprints will not upgrade, in such cases the old PixelStreamerInputComponent will have to be deleted and the new PixelStreamingInput component can replace it.

Platforms

Upgrade Notes:

  • Platform input customization cvars have been unified to use an "Input." prefix. For example: "Input.EnableMouse" instead of "[PlatformName].EnableMouse". Check your project's .ini files and migrate these as necessary.

VR

Upgrade Notes:

  • HoloLens packaging support modules have been moved from the "HoloLens"/"HoloLensAR" plugin into the engine to align with other platform implementations. The now empty "HoloLens"/"HoloLensAR" plugin was deleted. Existing projects that enabled the plugin will trigger a "HoloLensAR plugin missing. Continue/Cancel" dialog. Select continue and the deleted plugin reference will be removed from the uproject file. Any references to the deleted plugin should be removed, but most code references modules rather than plugins and should continue to work as expected.

Rendering

Upgrade Notes:

  • Cleaned up render target pool system by deprecating legacy MSAA split-texture creation and removing the old event viewer. Projects should use RDG when allocating MSAA render targets which require resolves.

Lighting

Upgrade Notes:

  • RayTracingAO is now disabled by default, affecting existing projects. Projects that actually intended to use RayTracingAO will need to re-enable it in the Post Process Volume settings.

Virtual Production

Upgrade Notes:

  • Moved common parameters from FOpenCVLensDistortionParameters from the Lens Distortion plugin to the OpenCV plugin so other plugins can easily use them.

  • Live Link's animation-related classes were moved to their own runtime module to better isolate from the Unreal Editor.

  • Live Link functions GetSubjectRole and DoesSubjectSupportRole have been deprecated and replaced by new thread-safe Live Link functions GetSubjectRole_AnyThread and DoesSubjectSupportRole_AnyThread.

  • Moved generic OpenCV convenience functions into OpenCVHelper so they're not scattered across multiple Virtual Production classes.

Worldbuilding

Upgrade Notes:

  • The double precision structure Cartesian Coordinates is now deprecated and has to be replaced by Engine Vectors

XR

Upgrade Notes:

  • The OpenXR HMD functions DrawHiddenAreaMesh_RenderThread and DrawVisibleAreaMesh_RenderThread no longer check the render thread and have been renamed to DrawHiddenAreaMesh and DrawVisibleAreaMesh. The relevant platform runtime functions were also updated with this change.

  • MRMesh (Mixed Reality Mesh) now uses Chaos physics for runtime async collision cooking. This is used by AR devices to represent the real world geometry scanning features in Unreal.

  • World meshing from the HoloLens using the Windows Mixed Reality plugin now writes floats instead of doubles to work with the new Large World Coordinates feature.

  • Moved the functionality for Oculus plugin-specific haptic data resampling into the Oculus plugin.

VR

Upgrade Notes:

  • Common stereo-enabled logic was moved to FSceneViewExtensionContext.

既知の問題

Unreal Engine 5.0 に影響を及ぼす既知の問題の完全なリストについては、「Unreal Engine Public Issue Tracker」を参照してください。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル