Unreal Engine 4.27 リリース ノート

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

Choose your operating system:

Windows

macOS

Linux

新機能

Unreal Engine 4.27 では、あらゆるクリエイター向けの機能およびアップデートを導入しました。AEC および製造分野のユーザー向けに製品版としてリリースされたバーチャル プロダクション向けの一連の機能や、新たに追加された機能を提供しています。Unreal Engine はこういった新機能を提供することで、テクノロジーをリードし続けています。Unreal Engine 4.27 では、作業を遂行するための適切なツールとワークフローを提供しています。

GPU Lightmass では、ライティングやレイアウトの変更を同日中に行うための迅速なベイクを提供しています。また、マルチ GPU のサポートにより、インカメラ VFX 用のより広角のカメラや複数カメラの同時撮影シナリオが可能になります。実際の制作作業で使用できるピクセルストリーミングによって、クリエイティブ制作の自由度が増し、Unreal Engine のデプロイ方法の選択肢も増えました。RAD Game Tools が Epic Games に加わり、すべてのUnreal Engine デベロッパーが利用できるように Oodle Compression Suite と Bink Video が追加されました。

Unreal Engine 4.27 は、来年リリースされる UE5 との互換性があります。

ただし、UE5 早期アクセスとの互換性はありません。

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

AlbinBernhardssonARM, Alexandr Kondratenko, author evolution, ayumax, bailehang, CapitanPumbo, colinpy, Collabora, Dave Merriman, dendnk, dev (bovesan.com), drichardson, Evan Hart, frals, HSeo, fieldsJacksonG (Microsoft), igor-kondratiev, JDCruise, Josef-CL, kidsmurf2000, kihl, kristjanvalur, KristofMorva, liang47009, Marc Olano, MarcusH(Yager), MattHesseling, Microsoft, moppius, neste, NexusEast, PanagiotisChristopoulosCharitos-ARM, Punlord, Remi.Palandri, rlabrecque, Robmaister, Sergey Budaretski, shovaen, Skylonxe, stefan-zimecki, thejinchao, tinyogre, triboud, Ultrahead, Wang Hao, wrflemin, X-Stuff, Xiang.Wei (Oculus), yuriy.odonnell, ZeroEightSix

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

Visual nDisplay のコンフィギュレーションとワークフローの改善

リリース 4.27 では、In Camera Visual FX など数多くのワークフローの要である nDisplay クラスタのセットアップと操作におけるユーザー エクスペリエンスの改善に重点を置きました。nDisplay システムのセットアップは、エンジン内の 3D nDisplay コンフィギュレーション エディタから開始します。新しく追加された nDisplay Root アクタ は、すべての nDisplay 関連の機能や設定を 1 つの UAsset に統合し、制作での操作をスムーズにし、繰り返し可能なセットアップを実現します。

4.27 で nDisplay の使用を開始するには、次の手順を実行します。

  1. Unreal Editor で新しい nDisplay Root アクタを作成します

  2. nDisplay 3D コンフィグ エディタで nDisplay Root アクタを設定します

  3. Root アクタをレベル ビューポートにドラッグして、プロジェクトのコンテンツをクラスタの視点でプレビューします

  4. Switchboard を使用して、プロジェクトを物理的な nDisplay セットアップで起動します

この新しいワークフローは、エンジンから離れて、コンフィギュレーション テキスト ファイルを変更し、nDisplay ネットワークを作成する従来の方法に代わるものです。これまでに作成した .cfg および JSON のコンフィギュレーション ファイルをインポートして、新しい UAsset 形式に変換することができます。

nDisplay での mGPU のサポートの改善 (ベータ)

4.27 での mGPU のサポートでは、複数のカメラとより大きい錐台の同時使用を可能にすることで、より広い角度レンズに対応し、ハードウェア デプロイメントの効率的なバランスが保てるようになります。GPU はインナー フラストラム専用にして、さらに複雑なコンテンツを表示することができます。複数のカメラを使用する場合、基本となる mGPU 技術は複数のカメラのセットアップおよび操作のワークフローによって支えられています。

nDisplay のオーバースキャン (実験的機能)

オーバースキャンを使って、複数の nDisplay レンダリング ノードで連続性を実現し、ブルーム、アンビエント オクルージョン、モーション ブラーなど、視覚的にインパクトのあるポストプロセス エフェクトを実現できるようになりました。ただし、オーバースキャンには、かなりのパフォーマンス コストがかかります。

この機能は単純なスクリーンと投影ポリシーでは動作しますが、メッシュなどのより高度なポリシーは、現在、サポートされていません。

nDisplay での Linux のサポート (実験的機能)

nDisplay と nDisplay のツール エコシステムで、Linux 向けの予備的なサポートを追加しました。Linux のサポートはグラフィック カード ドライバーに依存しており、レイ トレーシングや Vulkan などの一部のレンダリング機能は現在サポートされていません。

image alt text

nDisplay の同期

4.25 リリースおよび 4.26 リリースでのこれまでの取り組みを活用して、Sync Policy #2 のパフォーマンスと操作性の両方を改善しました。改善点は次のとおりです。

  • 461.72 以降の NVIDIA ドライバーで、ノンブロッキング表示をサポート

  • 改善された内部同期レンダリングスレッドのバリア管理により、クラッシュやタイミングの問題を修正

  • デバッグに役立つ cvar を公開

nDisplay での OpenColorIO のサポート

UE レンダリング、LED プロセッサ、LED パネル、そして最終的にはプロダクション カメラの組み合わせにより、再現性のある正確なカラー ワークフローの複雑なシナリオが作成されます。そのため、nDisplay で OpenColorIO のサポートを追加して、Unreal Engine でのコンテンツ作成を実際のカメラが LED ボリュームで見るものに接続する正確なカラーキャリブレーションを可能にし、コンテンツ アーティストと DP が最終的にキャプチャされた画像の共通の参照と連携できるようにしました。

image alt text

容易なセットアップと使用方法に改善されたリモート コントロール ワークフローと拡張された API (ベータ)

image alt text

触覚制御デバイスから得られる精選されたコントロールにより、より多くの人々が実際のライブ プロダクションで Unreal Engine と対話できるようになります。さらに多くのプロパティと機能を制御し、簡単なセットアップ プロセスで適切にレプリケートできるようにいくつかの改善を行いました。

リモート コントロール プリセットで次をサポートするようになりました。

  • プロパティごとのメタデータ

  • 同一のプリセットを複数のレベルで使用できるように、プロパティを再バインド

  • カスタムイベントを公開する機能

  • アクタ関数

  • WebSocket 経由でのサムネイル プレビュー

  • nDisplay でのリモート コントロールのレプリケーション

リモート コントロール Web アプリケーションの UI ビルダと UX の改善

新しいドラッグアンドドロップ インターフェースを使用して、コードを一切書くことなく、複雑な Web ウィジェットを素早くビルドできるようになりました。また、ウィジェットのインターフェースを一新し、バーチャル プロダクションシナリオに特化した次をはじめとするウィジェット タイプを追加しました。

  • ステージ位置

  • ウォールの色補正

  • ライト カード

  • レベル スナップショット

  • シーケンサー

  • グリーン スクリーン

image alt text

DMX、OSC、および MIDI 向けのリモート コントロール プラグイン

DMXOSCMIDI などの既存のライブ ショー プロトコルを、Unreal Engine のリモート コントロール システムで使用できるようになりました。

Remote Control C++ の API

リモート コントロール システムに C++ API が組み込まれ、複数の方法で、エンジンにリモートでアクセスして制御できるようになりました。これまでは、エンジンのプロパティにアクセスには、リモート コントロールの HTTP および WebSocket API を使用した Web アプリケーション経由する方法しかありませんでした。C++ API で、エンジンを制御したり、外部のデスクトップ アプリケーションで、公開されているリモート コントロールのプロパティを使用することもできます。

レベル バリエーション管理のためのレベル スナップショットの導入 (ベータ)

ライブ プロダクション、具体的にはインカメラ VFX はシナリオごとに共通レベルの小さな変更が必要になることが多々あります。これにより、データ ラングリングの問題が発生して、ステージ操作の速度が低下します。レベル スナップショットを使用すると、プロジェクトまたはソース管理に永続的な変更を加えることなく、レベルの現在の状態をスナップショットに記録することができます。後で、そのスナップショットから記録されている状態を復元してレベルを更新することもできます。このツールは、インカメラ VFX 撮影でステージ オペレーターに特に役立ちます。「テイク 6 に戻って、こちらの 5 本を除く、すべての樹木を移動させる」といった映像制作者の複雑な復元要求に対応することができます。また、クリエイティブな承認を得るためにさまざまなシナリオを作成するアーティストにも役立ちます。

image alt text

バーチャル カメラ システムの拡張

バーチャル スカウトに使用する場合でも、オーガニック カメラの録画に使用する場合でも、Unreal Engine 4.26 で導入された新しいバーチャル カメラ システムが製品版としてリリースされました。

このバーチャル カメラ システムは次の機能を備えています。

  • エディタでのマルチユーザー サポート。

  • 刷新されたユーザー エクスペリエンス。

  • バーチャル カメラを開発するための拡張可能なコア アーキテクチャ。

  • バーチャル カメラの出力を Composure、Media Framework、Editor のビューポート、または Unreal Remote アプリを実行しているあらゆるデバイスにルーティングする機能。

  • 出力に対するカスタム UMG コントロールをオーバーレイして、エディタまたはデバイス上でそのコントロールを操作する機能。

  • タッチスクリーンに加えて、コントローラーやその他のハードウェア入力に対応するためのビルトイン サポート。

  • フィルタリング、トラッキング、オートフォーカスなどのカスタム エフェクトでカメラ データを操作するためのモディファイア システム。

  • Live Link 経由で接続している任意のトラッキング システムに切り替える機能。

  • 撮影スタッフをサポートするデスクトップ オペレータ パネル。

新しいバーチャル カメラの iOS アプリ

また、バーチャル カメラ機能に特化した新しい iOS アプリ Live Link VCAM をリリースしました。このアプリでは、Unreal Remote アプリよりもカスタマイズされたユーザー エクスペリエンスを提供しています。image alt text

Universal Scene Description (USD) の改善による Unreal パイプライン サポートの改善

Universal Scene Description (USD) 交換形式は、メディアやエンターテイメント業界で広く使用され続けている形式です。このリリースでは、エクスポート オプションの追加に最も焦点を絞って、パイプラインの統合を可能にするためのいくつかの機能強化を行いました。また、Unreal Engine 4.27 では、マルチユーザー編集のサポートや、ランタイム時のオプションを追加しています。

image alt text

USD へのエクスポートの強化

USD シーン エクスポータを拡張して、次の複数の新しいオプションを追加しました。

  • USD ステージ エディタでの USD 属性の編集: USD ステージ エディタの [Details (詳細)] パネルでほとんどの USD 属性を直接編集できるようになりました。

  • レベルおよびサブレベルの USD へのエクスポート: Unreal にロードされたレベルを選択して、プライマリ USD ファイルとしてエクスポートできるようになりました。レベルのサブレベルやアセット (スタティック メッシュスケルタル メッシュライトフォリッジ または ランドスケープ など) は、プライマリ ファイルが参照する個別の USD ファイルとしてエクスポートされます。

  • USD へのアニメーション シーケンスのエクスポート: アニメーション シーケンスをいくつかの USD ファイル形式にエクスポートできるようになりました。新しいエクスポート アクションでは、アニメーション プレビュー メッシュとアニメーションの両方をエクスポートして、それらをバインドします。これにはすべてのボーンとブレンドシェイプ トラックが含まれます。

  • テクスチャのベイクとマテリアルのエクスポート: テクスチャ付きのマテリアルはベイクしてレベルでエクスポートすることができます。その後マテリアルは USD サポートによって別のアプリケーションで読み取ることができます。

USD インポータの機能強化

USD ステージをインポートする際に、他のアセットと一緒にアニメーション トラックをコンテンツ ブラウザにインポートするようになりました。このワークフローは、ディスク上の uAssets に変換されたすべてのアセットで FBX を使用する方法と類似しており、完全な Unreal ワークフローセットを可能にします。

ダイレクト USD ワークフローとシーン キャッシュ

USD Stage Actor を使用することで Unreal 内で USD シーンをロードすることができます。情報は、変更し編集レイヤーとして USD に保存できる USD 情報として保持されます。USD アセットは、後続のセッションでの読み込みを高速化するキャッシュを備えたメモリ内の uAssets に変換されます。これは、USD データが Unreal を通過する必要がある場合に選択されるワークフローですが、USD をサポートする他の DCC で引き続き使用されます。

Nvidia MDL のサポート

Nvidia Material Definitions Language (MDL) スキーマと MDL サーフェス マテリアルのサポートが追加されました。詳細については、「Nvidia MDL スキーマ」ドキュメントを参照してください。

ランタイム時の USD サポートの追加

複数の USD 機能をランタイム時に利用できるようになり、USD ファイルのコンテンツをロードして表示するアプリケーションを作成できるようになりました。

USD 向けのマルチユーザーのサポート

ほとんどの USD ステージの操作で マルチユーザー編集 をサポートするようになりました。

グルーム ワークフローの改善と Alembic キャッシュ サポートの更新

Unreal Engine では、メディアやエンターテイメント業界で広く使用されているアニメーション データのキャッシュ規格である Alembic のサポートを継続的に拡張しています。このリリースにおいて、Alembic キャッシュ サポートが強化され、ヘアとファーのワークフローが改善されています。

Alembic Groom のサポートの改善

ヘアとファーのサポートを拡張し、Alembic からインポートされた GeometryCache データにグルームをバインドできるようになりました。グルームをスケルタルメッシュにバインドするという面倒なワークフローが必要ではなくなりました。Unreal グルーム システムを駆動するためのグルームと、別の DCC でシミュレートされたヘアのキャッシュの両方がサポートされます。

さらに、アニメートされたグルームを Alembic から直接 GroomCache アセットにインポートして、GroomComponent の一部として使用できるようになりました。

詳細については、「Alembic for Grooms」のドキュメントを参照してください。

Alembic キャッシュ サポートの改善

ヘアとファーのワークフローの改善に加えて、Alembic キャッシュはサブフレーム サンプル、一貫性のないトポロジ キャッシュ、および空のフレームで開始するキャッシュをより適切にサポートするようになりました。これにより、Alembic シミュレーション キャッシュを使用した場合の結果が改善されます。

Archicad 用 Datasmith エクスポータ プラグイン

Unreal Engine 4.27 では、Graphisoft 社の広く使用されている建築 CAD ソフトウェア、Archicad 用の Datasmith Exporter を追加しました。このプラグインでは Datasmith Direct Link ワークフローをサポートしており、Archicad ユーザーはアプリケーションを Unreal Engine および Twinmotion と同期できるだけでなく、.udatasmith ファイル形式でデータをエクスポートすることができます。

image alt text

このプラグインでは、以下をサポートすることで、Archicad データと Datasmith との間で高い忠実度を保持することができます。

  • メタデータによる構造化された方法でエクスポートされたジオメトリおよび階層データ

  • PBR マテリアル

  • ライト

  • カメラのプロパティ

  • レイヤー

  • ホット リンクと Xrefs

  • アクタ タグ

SketchUp 用 Datasmith エクスポータ

SketchUp 用 Datasmith エクスポータが一から完全に再構築されました。この新バージョンでは、数多くの改善が行われ、Sketchup アプリケーションを Unreal Engine ベースのアプリケーションや Twinmotion と同期させることができる Datasmith Direct Link ワークフローをサポートするようになりました。

これらの機能強化をサポートするために、新しい Datasmith ツールバーが開発されました。

image alt text

この新しいツールバーでは、Direct Link 機能にアクセスできるだけでなく、データを .udatasmith ファイルとしてエクスポートするオプションも提供しています。

また、エクスポータを更新して、PBR マテリアルを新たにサポートすることで、既存のプラグインとの連携を強化しました。

その他の改善:

  • Sketchup 2021 のサポート

  • 新しい PBR マテリアル グラフ

  • Ruby スクリプトを使用したバッチ エクスポート

Rhino 用 Datasmith エクスポータ

Rhino 用 Datasmith エクスポータ プラグインにいくつかの改善を行いました。このリリースでは、Rhino と Unreal Engine ベースのアプリケーション (Twinmotion など) との間の Direct Link 機能を追加しています。

image alt text

4.27 では、ワークセッションのサポートを追加しました。Rhino のワークセッションを Unreal Engine にインポートすると、オーバーレイされた複数のモデルがわかりやすい階層に構造化されます。

image alt text image alt text

その他の改善:

  • Rhino 7 のサポート

  • さまざまな新しい Rhino ジオメトリ モディファイアのサポート

  • 指定のビューをカメラとしてエクスポートできるようになった

Datasmith エクスポーター プラグインの安定性およびアプリケーション サポートの改善

4.27 では、既存の Datasmith プラグインに機能強化と操作性の改善を行いました。プラグインの安定性と信頼性の改善に加えて、Revit、3ds Max、Navisworks の新バージョンのサポートを追加しました。

Revit
  • 天井のピボット ポイントの改善

  • Revit 2022 のサポート

3ds Max
  • 3ds Max 2022 のサポート

  • Navisworks 2022 のサポート

Datasmith for Solidworks (実験的機能)

image alt text

新しい Datasmith for Solidworks プラグインによって、広く使用されている CAD ソフトウェアにファイルをエクスポートできる機能を Unreal Engine および Twinmotion に追加しました。マテリアルや製品のジオメトリを .udatasmith ファイル形式にエクスポートしたり、Datasmith Direct Link を使用して Solidworks と Unreal Engine ベースのアプリケーションとの間にライブ接続を作成したりできます。

Visual Dataprep ワークフローの改善

Visual Dataprep では、さまざまな演算子および選択フィルタを使用して、3D データのインポートと準備のプロセスを自動化する機能を利用できます。このリリースで、多くの機能を強化し、操作性を改善しました。

image alt text

image alt text

  • 新しいフィルタ オプション: このリリースで、複数の新しいフィルタリング オプションを追加しました。アクタの選択から新しいフィルタを作成したり、アクタのセットから表示されているすべてのアクタを使用して選択をフィルタすることができます。また、一連のアクタと重なっているアクタを選択するフィルタを作成することもできます。

  • 新しい演算子: Plane Cut、Set Collision Complexity、Set Max Texture Size などの各種演算子が新たに追加されました。

  • アクタ コンポーネントのサポート: すべての演算子とフィルタにコンポーネントのサポートを追加しました。

  • ファイル形式固有のインポート オプション: Dataprep の入力で、ファイル形式固有の入力オプションを設定できるようになりました。

  • シーン統計パネルおよび簡易統計オーバーレイ: [Scene Statistics (シーン統計)] パネルおよび [Stat Overlay (統計オーバーレイ)] が刷新され、わかりやすくなりました。

  • UI の改善: アクションのグループを折りたたんだり、アクション ノードのサイズを水平方向に変更できるようになりました。

Datasmith ランタイム インポート サポート

ランタイム時に Datasmith の複数の機能を使用できるようになりました。これにより、Datasmith ファイルをインポートして、さまざまなブループリントの処理を使用してインポートしたファイルを操作できるアプリケーションを作成できます。

image alt text

image alt text

image alt text

次のインポート プロセスのパラメータを公開する Datasmith Runtime アクタで、「Datasmith Runtime Import Options」変数にアクセスできるようになりました。

  • Build Hierarchy。ファイルの階層の詳細または概要を公開するパラメータ。公開する階層の詳細度が高くなるほど、ロード時間やレンダリング時間が長くなります。

    • None:階層がランタイム アクタに格納され (4.26 の動作)、個々のノードにはアクセスできません。

    • Simplified:階層が単純化され、一部の中間ノードは削除されます。これにより、アプリケーションでプロパティを変更できるようにオブジェクトを公開することができますが、シーン内のアクタ数が多くなるため、ドロー コールが制限されます。

    • Unfiltered:CAD モデルや datasmith ファイルの未加工の階層を表示します。

  • Build Collisions: No Collision、Query Only、Physics Only、Collision Enabled (Query + Physics)。Query は通常、ポーンのナビゲーション、壁/床とのコリジョン、オブジェクトの選択に使用されます。

  • Collision Type: Project Default、Simple and Convex、Use Simple As Convex、Use Convex As Simple。個々のパーツのコリジョン生成を微調整することはできないため、シーンを操作する際に正確なコリジョンを追求する場合は、「Use Complex Collision As Simple」を使用することをお勧めします。

  • Import Metadata:メタデータを読み取り、アクタに追加します。これにより、ロード時間が延びます。

カメラ キャリブレーションによる正確なレンズ表現 (ベータ)

キャリブレーションされたカメラ データを使用してシネマティック カメラのレンズ ディストーションを制御できるようになり、ライブ合成ワークフローの外観が向上しました。新しいカメラ キャリブレーションとノード オフセット ツールを使用してレンズをキャリブレーションするか、ST マップの形式で外部のキャリブレーション データを取り込むことができます。

このリリースでは、Unreal のツールで、複数の新しいアセット タイプとレンズの歪みのサポートを追加しました。

  • 複数のフォーカスおよびズームの位置でキャリブレーションされたレンズ データを、新しい LensFile アセットに格納する。

  • 新しい レンズの歪みのポストプロセス マテリアル をシネマティック カメラに適用する。

  • LensDistortion コンポーネント を Cine カメラに直接追加する。

  • Composure の CG レイヤー に歪みを適用する。

  • Live Link カメラの被写体のレンズ ファイルを、ライブ フォーカスとズームの値に基づいて評価する。

  • 新しい Live Link Lens Role を使用して、特定のカメラ トラッキング システムから事前にキャリブレーションされた歪みデータを直接ストリーミングする。

Live Link FreeD プラグイン (ベータ)

Live Link で、FreeD データ プロトコルをサポートするようになりました。FreeD は、カメラの追跡、およびパン、ティルト、ズーム (PTZ) カメラでよく利用されるプロトコルです。Panasonic AW-UE150、Sony BRC-X1000 などの多くの PTZ カメラが、現在、このプロトコルをサポートしており、コスト効率に優れた方法でプロジェクトに追跡データを追加できる手段となっています。

Live Link VRPN プラグイン (ベータ)

VRPN は、VR やバーチャル プロダクションで広く使用されているプロトコルです。これまで、VRPN は nDisplay のみに対応していました。新しい Live Link VRPN プラグインはより一般的なソリューションで、Unreal Engine で複数のトラッキング デバイスを分散してレプリケートすることができます。Live Link VRPN プラグインとの重複を避けるため、nDisplay から VRPN 入力を削除しました。

image alt text

Live Link Face

フェイシャル キャプチャおよびデータのレコーディング方法を改善するため、Live Link Face iOS アプリを改善しました。

Live Link Face のキャリブレーション

Live Link Face を使用したフェイシャル キャプチャを個々のパフォーマーに合わせて調整することで、Live Link Face の新しいキャリブレーション機能を使用して Unreal Engine にストリーミングされたアニメーション データの品質が向上します。このことにより、ニュートラル (つまり、レスト ポーズ) な表情を設定できるようになり、アプリがレスト ポーズを使用して ARKit のデータをオフセットし、実際のパフォーマンスにより緊密に一致する、より詳細にカスタマイズされた結果を提供することができます。

image alt text

Live Link Face for iPad

Live Link Face はこれまでも TrueDepth 前面カメラ搭載の iPad でも十分機能していましたが、その表示やプロポーションは iPad サイズのスクリーンに合わせてカスタマイズされていませんでした。今回のアップデートで、iPad だけでなく iPhone も正式にサポートするようになり、タブレット端末を好むユーザーにも利用しやすくなりました。

シーケンサーおよびムービー レンダー キューとのビデオのフレーム精度の高い同期

Media Framework によるビデオの再生は、メディア プレイヤーのリアルタイム 動作とは別に、シーケンサーのタイムラインに高いフレーム精度で同期されます。この同期のためのメディア プレイヤーとの通信および設定は、シーケンサーが内部で処理します。

現在、この新しい同期をサポートしているのは ImageMediaPlayer のみです。この機能をサポートしていないメディア プレイヤーを使用した場合、再生はシーケンサーのタイムラインで示されるものに近い形で開始または停止しますが、フレームごとのアライメントはランダムになる場合があります。

Media Framework の画像シーケンス向けの EXR のミップマップのサポート

Media Framework の画像シーケンスの再生で、ミップマップ された EXR 画像をサポートするようになりました。ミップマップを画像シーケンスで使用すると、ロードされるデータ量を削減できます。UE では、設定で特に指定されていない限り、画像を表示する各オブジェクトのピクセルあたりのテクセルの推定密度に基づいてミップ レベルが選択されます。

詳細については、「画像シーケンス ミップ」を参照してください。

DMX パフォーマンスとインテグレーションの改善

Epic Games では、継続的に DMX プラグインを改善しており、プロトコル、ブループリント、sACN の改善を含め、ストレス条件下での全体的なパフォーマンスと安定性を向上させました。また、リモート コントロール、nDisplay などの他のエンジン機能と統合し、Controller by Ports を新しいネットワーク設定 DMX Ports に置き換えました。

ピクセル マッピング (ベータ)

ピクセル マッピングの UI パネルおよびコア機能を刷新しました。シーン バッファや任意のライブ テクスチャをフェッチして、必要な DMX データをハイ パフォーマンスで生成することで、低解像度のパネルやマトリクス器具を効果的に制御できるようになりました。

マルチユーザーでのユーザーごとの Take Recorder のコントロール

マルチユーザー セッションで Take Recorder キャプチャに関与するノードを制御できるようになりました。つまり、マルチユーザーのメイン オペレーターには表示されない、追加のシミュレーションされたデータやアニメートされたデータを含むレコーディング ノードとしてノードを設定することができます。

新しい「Design Configurator」テンプレートおよび「Product Configurator」テンプレートのアップデート

「Product Configurator」テンプレートは、ユーザーがインタラクティブな製品コンフィギュレーターをいち早く使用できるように、Unreal Engine 4.25 で [Automotive (自動車)] カテゴリで最初にリリースされました。このテンプレートは、Variant Manager の使用に関するベスト プラクティスや、UMG ベースのインターフェースを動的に生成する手段を備えています。

Unreal Engine 4.27 では、「Design Configurator」テンプレートをリリースしました。

image alt text

この新しいテンプレートは、 [Architecture, Engineering, and Construction (建築、土木、建設)] カテゴリで使用できます。また、「Product Configurator」テンプレートと同じ建築向けのインタラクティブ機能およびベスト プラクティスを製品向けに示しています。

また、両方のテンプレートで、次のように UI が改善されています。

  • Button Size (ボタンのサイズ): バリアント ボタンのサイズを調整します。

  • Button Size Outline (ボタン サイズの枠線): ボタンの周りに色付きの枠線の幅を調整します。

  • Button Outline Normal Color (通常時のボタンの枠線の色): ボタンの枠線のデフォルトの色を設定します。

  • Button Outline Hover Color (ホバー時のボタンの枠線の色): マウスがボタンに重なっているときのボタンの枠線の色を設定します。

  • Button Outline Pressed Color (押下時のボタンの枠線の色): ボタンが押されたときのボタンの枠線の色を設定します。

  • Popup Line Color (ポップアップの線の色): UI テキストの下に表示される線の色を設定します。

  • Popup Text Color (ポップアップ テキストの色): UI テキストの色を設定します。

LiDAR 点群プラグインの改善

Unreal Engine 4.27 では、LiDAR Point Cloud プラグインに複数の機能向上を追加し、点群データのインポートと操作性を改善しました。

このリリースでは、次のような複数の点を改善しました。

  • ポイント サイズ アルゴリズムの改善: スケーラブルなアルゴリズムを改善し、固定小数点モードを追加しました。この新しいモードは、ノイズの多いアセットを処理する際に特に役立つ可能性があります。

  • パフォーマンスと安定性の改善: 点群データの処理とストリーミングを改善し、エンドユーザーのパフォーマンスが大幅に向上しました。

  • 保存/ロード パフォーマンスの改善: シリアライザとストリーミングのメカニクスを大幅に改善しました。

  • シンプルなギャップ充填: 視認できるオーバーラップを最小限に抑える新しい技術を使用して、ポイントを拡大し、レンダリングします。

  • 錐台カリングの無効化: 錐台カリングを無効にできるようになり、シネマティックス撮影時のデータ ストリームの遅延に対処できるようになりました。

  • 新しい選択方法: ポリゴン、投げ縄といったペイントの選択方法が新たに追加されました。

ピクセル ストリーミング

image alt text

Unreal Engine 4.27 ではクセル ストリーミング プラグインが実際の制作作業で使用できるようになりました。ピクセル ストリーミングはデプロイのための新しいオプションを提供し、アンリアルの最高クラスのレンダリングをさらに幅広いデバイスとユーザーに対するストリーミングを可能にします。ピクセル ストリーミング アプリケーションの設定ワークフローは基本的に同じですが、今回のリリースにはいくつかの重要な改善と新しいコンフィギュレーション オプションが含まれています。

Linux でのクセル ストリーミング サポート

Linux サーバー インスタンスを使用して ピクセル ストリーミング アプリケーションをデプロイできるようになり、効率、スケーラビリティ、およびデプロイの全体的な容易さにおいて多くの利点が得られます。

AMD エンコーダー サポート

ピクセル ストリーミングは AMDAdvanced Media Framework ハードウェア エンコーダーをサポートするようになりました。これにより、AMDGPU を使用するインスタンスは Windows と Linux の両方でピクセル ストリーミングを使用できるようになりました。

アップグレードされた WebRTC による安定性と品質の向上

ピクセル ストリーミング プラグインで使用される WebRTC をバージョン M84 にアップグレードしました。これにより、ストリームの遅延と品質が向上し、時間の経過によるストリームの劣化を防ぎ、Firefox や Safari を含むほとんどの Web ブラウザとの互換性が向上します。

ブラウザ オーディオ入力サポート

改善された WebRTC では、ユーザーによるブラウザからのオーディオ入力をサポートし、ピクセル ストリーミング アプリケーションでのマイク入力のキャプチャが可能になります。さらに、キャプチャされたオーディオをエンジンに組み込むと、それを空間化または処理することができます。

レンダリング

GPU Lightmass 機能サポートの拡張 (ベータ)

引き続き GPU ライトマス システムを改善し、Unreal Engine 4 のより多くの機能をサポートすることで、プログレッシブ ライティング ベイキングを改善しました。

4.27 では、次の改善も行っています。

  • 減衰、非逆 2 乗フォールオフ、矩形ライト バーンドアなど、より多くのライト パラメータをサポート。

  • 詳細度 (LOD) メッシュのベイクをサポート。

  • 色付きの半透明のシャドウをサポート。

  • マルチ GPU (mGPU) サポートを改善。

    • NVLink および SLI に対応している Nvidia グラフィック カードが必要です。

  • [Irradiance Cache (放射キャッシュ)] をデフォルトで有効にし、実世界のシーンを大幅に高速化しました。また、UE 4.26 で発生していた問題が解決され、すべてのユーザーにメリットがもたらされました。

  • 時折発生する GPU タイムアウトを防止すること (すなわち、TDR) で、すべてのユーザーにメリットがもたらされる [Full Speed (フル スピード)] の新しいデフォルトを設定。新たなデフォルトでは、速度が 16 ではなく 8 に半減します。この速度は、[System (システム)] セクションの [GPU Lightmass (GPU ライトマス)] 設定パネルで必要に応じて調整できます。

  • 多くの問題を解決し、安定性を修正しました。

image alt text

詳細については、「GPU Lightmass」に関するドキュメントを参照してください。

パス トレーサー (ベータ)

パス トレーサーは、 Unreal Engine のプログレッシブ レンダリング モードで、追加の設定を行う必要なく、シーンをレンダリングすることができます。パス トレーサーでは、物理的に正しく、妥協のないグローバル イルミネーション、物理的に正しい屈折、反射および屈折内の機能的に完全なマテリアル、スーパーサンプリングされたアンチエイリアスにより、リアルタイム レイ トレーシング 機能の機能ギャップを解消します。

image alt text

パス トレーサーを使用するには、Windows 10 と DXR 対応のグラフィック カードが必要です。

4.27 では、パス トレーサーの多くの点を改善したため、AEC、自動車、製品設計を中心とした一般的なレンダリング シナリオでもパス トレーサーを使用することができます。

4.27 では、次の改善も行っています。

  • 髪、目、SingleLayerWater を除くすべてのマテリアル シェーディング モデルをサポート。

  • 屈折およびすべてのマテリアル ブレンド モードをサポート。

  • 近似コースティクスを含む、ガラス表面の光の透過。

  • ランダムウォーク サブサーフェス散乱をサポート

  • エリア サイズ、半影、減衰、矩形ライト バーンドア、矩形ライト テクスチャ、IES プロファイルなど、ほとんどのライト パラメータをサポート。

  • ほぼ無制限の数のライトをサポート。

  • サンプリング技術の向上により、同程度のレンダリング時間でより少ないノイズを実現。

    • これは現在も進行中の開発分野であり、今後のリリースでも引き続き改善される予定です。

  • 正投影カメラのサポート。

  • ムービー レンダー キューのサポートの改善。

詳細については、「パス トレーサー」を参照してください。

ヘアとファーのレンダリングのビジュアルおよびパフォーマンスの改善

Unreal Engine では、ヘアとファーのレンダリングおよびシミュレーション機能を備えています。ビジュアルおよびパフォーマンスに関する改善の多くは、Unreal Engine 4.26 以降、 MetaHuman Creator で対応しています。

image alt text

4.27 では、キャッシュ関連の次の 2 つの新機能が追加されました。

  • ヘア グルームを Alembic Cache にアタッチする機能。

  • シミュレート済みで、キャッシュされたフレームごとのヘア データを含むグルームをインポートする機能。

    • キャッシュされたグルームをスケルタル メッシュまたは Alembic キャラクターにバインドできます。

    • Play-in-Editor、シーケンサー、ムービー レンダー キューでの再生に対応しましたが、パッケージ化プロジェクトでは未対応です。

Alembic グルームのインポート時に、インポータはグルームにアニメーションが含まれているかどうかを検出します。アニメーションが含まれている場合は、2 つのグルーム キャッシュが自動的に生成されます。1 つはアニメートされたストランド用で、もう 1 つはアニメーショトされたガイド用で、これは、シミュレーションを使用して、レンダリング対象のストランドをアニメートします。

グルーム キャッシュは、 グルーム キャッシュ 割り当てスロットを使用して グルーム コンポーネントに割り当てることができます。

詳細については、「ヘアとファーのレンダリングおよびシミュレーション」に関するドキュメントを参照してください。

レイトレーシングの範囲拡張およびワークフローの改善

レイ トレーシング機能については、継続的に対象範囲を拡大し、サポートされている既存の機能のワークフローを改善しています。このリリースでは、次の改善および追加を行いました。

  • インスタンス化されたスタティック メッシュ (ISM) および階層インスタンス化スタティック メッシュ (HISM) で、反射、シャドウなどのレイ トレーシング機能でワールド位置オフセットをサポートするようになりました。

  • 反射における Niagara パーティクルで、BaseColor などのパーティクル駆動のマテリアル属性をサポートするようになりました。これまでは、反射内に表示されるパーティクルは、そのマテリアルのパーティクルごとのすべての特長が欠落していました。

  • 屈折は Specular 入力から派生するのではなく、Main Material ノードの Refraction 入力から制御されるようになりました。これは、透明マテリアルの屈折を制御する従来のラスター手法と一致するようになりました。

  • Unreal Engine 4.26 で無効になった透明オブジェクトのシャドウ キャスティングが再び有効になりました。透明オブジェクトのリアルタイムのレイ トレースによるシャドウは、不透明のもののみです。部分的に半透明なレイ トレースによるシャドウは、引き続きベイクされた静的ライトに限定されます。透明オブジェクトのシャドウ キャスティングを次のように無効にすることができます。

    • マテリアルごとに、マテリアル エディタの [Details (詳細)] パネルを使用して、 [Cast Ray Traced Shadows (レイトレースによるシャドウをキャスト)] を無効にする。

    • オブジェクトごとに、レベルの [Details (詳細)] パネルを使用して、 [Cast Shadows (シャドウをキャスト)] を無効にする。

詳細については、「リアルタイム レイトレーシング」を参照してください。

RAD Game Tools

RAD Game Tools 社が Epic Games ファミリーに加わり、RAD Game Tools 社の技術の多くが Unreal Engine に搭載されました。

Oodle Compression Suite

image alt text

Oodle Data Compression は、ゲーム データ用の高速で圧縮率の高い圧縮機能を提供します。この製品ファミリーでは、プロジェクトのニーズに適した 4 つの圧縮アルゴリズムを提供します。Oodle Data Decompression は、他のコーデックよりもはるかに迅速で、アルゴリズムは、Unreal Engine が対応しているすべてのプラットフォームで動作します。

Oodle Data Compression は、Unreal Engine でデフォルトで有効になっており、パッケージ化されたプロジェクトの大幅な圧縮と迅速なロードを実現します。

Oodle Texture Compression は、ブロック圧縮された BC1-BC7 テクスチャに対して、きわめて迅速で最高品質のエンコーダです。Oodle Texture の Rate Distortion Optimization (RDO) エンコーダは、非 RDO エンコーダと比較して、2 ~ 3 分の 1 とコンパクトで、高いビジュアル品質のエンコーディングを可能にします。

Oodle Texture Compressionは Unreal Engine でデフォルトで有効になっており、RDO エンコーディングは [Project Settings (プロジェクト設定)] で有効にできます (RDO エンコーディングはデフォルトではオフになっている)。

Oodle Network Compression は、ネットワーク トラフィックをリアルタイムで圧縮する独自のソリューションで、ゲーム サーバーが必要とする帯域幅を大幅に削減します。このソリューションは、すべての TCP および UDP ネットワーク パケットに対応しており、マルチプレイヤー ゲームに必要な最小限の帯域幅を大幅に削減します。

Oodle Network Compression はすでにフォートナイトで採用されています。有効にすると、ゲーム独自のネットワーク ストリーム用にトレーニングすることができます。

Bink Video: ゲーム用のきわめて迅速なビデオ コーデック

image alt text

Bink Video は、ビデオ ゲーム用の最も一般的なビデオ コーデックであり、このリリースから Unreal Engine に搭載されました。Bink Video は、パフォーマンスを重視して設計されたビデオ コーデックで、他のコーデックに比べてデコーディングが最大 10 倍速く、使用するメモリも 8 ~ 16 分の 1 に削減されます。一部のプラットフォームでは、Bink のデコーディングを GPU のコンピュート シェーダにオフロードして、さらに高速なパフォーマンスを実現することもできます。Bink Video は完全に自己完結型であり (他にインストールするものがない)、使いやすい Unreal Engine プラグイン インターフェースを備えています。

XR

OpenXR プラグインが実際の制作作業で使用できる段階になりました

OpenXR フレームワークは、複数の企業が採用している VR および AR の開発標準です。OpenXR プラグインを使用すると、Unreal Engine で同じ API を使用して複数の XR デバイスをターゲットにすることができます。また、OpenXR プラグインがマーケットプレイスの拡張プラグインをサポートするようになったため、Unreal Engine のリリースに依存することなく OpenXR に機能を追加することができます。

image alt text

資料提供:OpenXR および OpenXR のロゴは Khronos Group Inc. の商標です。

このリリースでは、Unreal Engine の OpenXR プラグインに次の機能のサポートを追加しました。

  • ステレオ レイヤー

  • スプラッシュ画面

  • Playspace 境界のクエリ

  • モーション コントローラー ビジュアリゼーション

プラットフォーム固有のプラグインも引き続き 4.27 で使用できます。デフォルトでは、エンジンはデバイスの互換性に基づいて次の順序でプラグインを優先的に実行します。

  • OculusVR

  • SteamVR

  • OpenXR

OpenXR に特化して開発を行う場合は、OculusVR プラグインと SteamVR プラグインを無効にしてください。

VRTemplate を一新

OpenXR フレームワークを使用した新たな VRTemplate を作成しました。このテンプレートは、すべての VR プロジェクトのスタート ポイントとして使用できるように設計されています。このテンプレートには、次に対応するためのカプセル化されたロジックが含まれています。

  • テレポートによる移動

  • スナップ回転

  • Grab コンポーネント

  • VR Spectator カメラ

  • メニュー

現在、VRTemplate によってサポートされている VR プラットフォームは、次のとおりです。

*Oculus Quest 1 および 2

  • Oculus Link 搭載 Oculus Quest

  • Oculus Rift S

  • Valve Index

  • HTC Vive

  • Windows Mixed Reality

詳細については、「VR テンプレート」を参照してください。

「Handheld AR」テンプレートの刷新

このプロジェクト テンプレートは、これまでの「AR Handheld」テンプレートに代わるもので、ARCore プラットフォームおよび ARKit プラットフォーム上で AR アプリを開発するためのスタート ポイントとして使用できるように設計されています。

次の機能が含まれています。

  • iOS と Android に対応した、すぐに使える簡単セットアップ

  • 基本的な UI およびタッチ インターフェース

  • スナップショット画像を取得する機能

  • モデルを移動、回転、スケーリングの機能

image alt text

「Collab Viewer」テンプレートの改善

Collaborative Viewer は、VR やデスクトップ上で CAD/BIM の 3D モデルを確認したり、複数のユーザーと共同でデザイン レビューを行うことができるテンプレート プロジェクトです。

4.27 では、次の改善も行っています。

  • マルチスケール対のサポート

  • 選択ツール

  • Datasmith Runtime との連携

  • テキスト メモの入力

image alt text

固定中心窩レンダリングの修正 (実験的機能)

固定中心窩レンダリングでは、VR ヘッドセットで画像ベースの可変レート シェーディングを使用して、ターゲットのシェーディング レートを調整することができます。固定中心窩レンダリングは、画質の認識可能な劣化がほとんどなく、パフォーマンスの向上を実現します。固定中心窩にはdisabled (無効)、low (低)、medium (中)、high (高) の 4 つのレベルがあります。

この機能は、現在、DX12 を搭載した Windows プラットフォームと、VRS Tier2 に対応している GPU でのみサポートされています。

コンテナ デプロイ (ベータ)

Image courtesy of Michael Wallace

Image courtesy of Michael Wallace

4.27 から Unreal Engine はコンテナ デプロイを正式にサポートします。コンテナは、アプリケーションとその依存関係を、ローカルマシンまたはクラウドを介して展開できる単一のポータブル ユニットにパッケージ化するためのオプションを提供します。仮想マシンのように機能しますが、コンテナでは計算負荷が軽くなるため、多数の同時デプロイが容易になります。

TensorWorksUnreal Containers コミュニティのイニシアチブによる開発されたオープンソースに基づいて、Unreal Engine は Unreal Editor とそのビルドツールを含む開発イメージと、パッケージ化された UnrealEngine プロジェクトを実行できるランタイム イメージの 2 種類をサポートしています。です。これにより、開発ツールまたはエンドユーザー アプリケーションをクラウドに広くデプロイすることが可能になります。

コンテナとコンテナ イメージのさまざまな利用方法については、「Containers 」ドキュメントを参照してください。

ゲームプレイ フレームワークおよびスクリプティング

Enhanced Input (ベータ)

拡張入力 は、合理的でありながら高度に設定可能な入力処理システムで、ランタイム入力再マッピングや複雑でカスタマイズ可能なトリガー ルールをサポートします。4.27 では、Enhanced Input プラグインが拡張され、ブループリント ビジュアル スクリプティングを完全にサポートするようになりました。このため、デベロッパーは C++ コードを記述することなくすべての機能を使用することができます。

image alt text

Data Registries (ベータ)

実験段階の Data Registries プラグインでは、デベロッパーが構造体ベースのデータ テーブルのための効率的なグローバル ストレージ スペースを作成できます。Data Registries を使用すると、同期または非同期にデータにアクセスしたり、必要に応じてデータをロードしたり、キャッシング ルールを設定したり、さらには独自の間接ルールを記述してシステムを拡張することができます。データ レジストリは、 Game Features プラグインおよび Modular Gameplay プラグインと併用することで、データ レジストリ全体を取り入れたり、既存のデータ レジストリにデータ ソースを追加したりすることができます。

image alt text

Data Registries プラグインは現在、標準的なデータ テーブルとカーブ テーブルの両方をサポートしています。

Unreal Engine as a Library

Unreal Engine as a Library により、UE4 ランタイムをライブラリとしてビルドし、次の機能を備える最小限のビルトイン API を使用して、そのライブラリを操作することができます。

  • UE4 を実行する。オプションで、コマンドラインと、エンジンが出力を送信するためのクライアント ウィンドウを受け入れます。

  • エンジンを更新 (または「ティック」) することで、実行するタイミングを制御します。

  • エンジンとのプロセス間通信のための Windows メッセージを受信する。

  • 受信後にエンジンをシャットダウンする。

また、ニーズに合わせて API を拡張し、既存または新規の機能を外部に公開することもできます。

Georeferencing

Georeferencing プラグインは、惑星表面領域のような物理的な場所を、UE4 のレベルなどのバーチャルの場所に関連付けます。UE4 では、測地座標系、地心座標系、投影座標参照系をサポートしており、緯度/経度や UTM 座標などのシステムを含む実在の場所や架空の場所を、エンジン内のレベルにマッピングします。次の 4 つの座標系の間で座標を変換できます。

  • Unreal Engine 座標系。

  • 任意の投影座標参照系 (CRS)。

  • 任意の測地 CRS。

  • 標準の Earth-Centered, Earth-Fixed (ECEF) CRS。

image alt text

このシステムは実在の場所にか限らず、はるかにリアルな架空の場所にも適用されるため、円形であるか、平面であるかを問わず、大きなワールドで一貫した空間関係で場所を表現することができます。

オンライン

Online Subsystem EOS プラグイン

UE4 の Online Subsystem インターフェースで、Epic Online Services (EOS) をサポートするようになりました。実装はデスクトップ、コンソール、モバイルの各プラットフォームで提供されており、これらの機能を使用したいゲーム向けのクロスプラットフォームのオンライン機能をサポートしています。使用可能な機能には、次のものが含まれます。

  • Epic Account Services (EAS) およびサードパーティ プロバイダを使用する場合でも、使用しない場合でも行われる場合でも実行される認証。

  • オーバーレイ UI でサポートされているソーシャル インタラクション、およびプレイヤー情報、プレゼンスの更新を含む、Epic フレンド リストの機能。

  • マッチメイキングと直接招待の両方を使用したセッションの管理と参加。

  • マルチプレイヤー ロビー。

  • プレイヤーに進捗状況を提供する、統計、リーダーボード、アチーブメント。

  • タイトルごとに生成されるファイルと、ユーザーごとのクラウド セーブ。

  • ゲーム内コマースのための、ストア製品の列挙と購入チェックアウト機能。

  • 専用サーバーとプレイヤーがホストする対戦、およびピアツーピア接続のビルトイン サポート。

Voice Chat EOS プラグイン

UE4 で、使用可能なボイス チャット インターフェースを使用して、新しい EOS 音声サービスをサポートするようになりました。この実装は、デスクトップ、コンソール、モバイルの各プラットフォームで使用でき、クロスプラットフォームの音声コミュニケーションを行うことができます。

新しい Online Subsystem EOS プラグインを使用すると、ロビーのボイス チャットを有効にすることができ、参加者は自動的に対応するボイス チャンネルに参加できるようになります。このシステムでは、IVoiceChatUser インターフェースを自動的に作成します。このインターフェイスには、Online Subsystem EOS を介してアクセスして、ロビーのボイス チャンネルをさらに操作したり、更新したりすることができます。

Vivox VoiceChat プラグインから移行した場合は、EOS VoiceChat プラグインが同じ IVoiceChat および IVoiceChatUser と同じインターフェースを実装しており、同じ方法で制御することができます。

オーディオ

専用サーバー用 Quartz

Quartz がオーディオ デバイスなしで実行できるようになりました。この新機能により、Quartz を専用サーバーで実行することができます。Mixer Device がない場合、Quartz クロックはオーディオ エンジンではなく、UObject ティックによって更新されます。

Quartz での操作性の改善

Quartz に、新しい Clock Handle ブループリント関数が追加され、現在のクロックの開始、停止、一時停止など、オーディオ デザイナーの操作性が向上しました。Quartz は、サンプル アキュレートな境界で別のクロックを開始することもできるため、オーディオ デザイナーはランタイム時に 2 つのクロックを切り替えることができます。Quartz を使用すると、別のクロックにシームレスに切り替えることで、タイム シグネチャを簡単に変更できます。

量子化列挙型にオプションとして「NONE」が追加され、Quartz コマンドをできるだけ早く実行できるようになりました。これを新しい「Reset Transport Quantized」ブループリント関数と併用することで、外部デバイスとの同期を保つためにクロックをハードリセットすることができます。

モバイル

モバイル向け FXAA および TAA

モバイル レンダラで、Fast Approximate Anti-Aliasing (FXAA) および Temporal Anti-Aliasing (TAA) を使用できるようになりました。FXAA および TAA を使用するには、Mobile HDR を有効にして、デスクトップ デバイスでこれらのアンチエイリアス ポストプロセスを使用する場合と同じ手順を実行します。

モバイル ディファード レンダリング パフォーマンスの改善

モバイル ディファード レンダラ のパフォーマンスと安定性を大幅に改善しました。さらに、より多くの Android デバイスでモバイル ディファード レンダリングを実行できるようになりました。また、Light 関数、IES ライト プロファイル、シンプル ライトにも対応しました。

Android 向けの Visual Studio によるデバッグ

Android プロジェクトで、Visual Studio のデバッグ ワークフローを使用できるようになりました。Visual Studio 向けの Google の AGDE プラグインをインストールすると、Android プロジェクトの作成時に Unreal Engine が内部的にこのプラグインを有効にします。このプラグインを使用すると、Visual Studio から直接プロジェクトのデプロイとデバッグを行うことができます。

Android メモリ プロファイラのサポート

Unreal Engine 4.27 では、Google の開発ライブラリを介して、Unreal のメモリ アロケータが Android メモリ プロファイラに公開されるようになりました。このため、開発、テスト、デバッグの各コンフィギュレーションで、回避策を必要とすることなく、Android メモリ プロファイラを使用できます。Android Studio でのメモリ プロファイラの使用方法については、Android のドキュメントの『Native Memory Profiler』を参照してください。

Android での操作性の改善

Android Studio 用のプロジェクトを生成すると、デバッガ タイプが自動的に Dual (C++ およびJava) に設定され、Unreal のデータ タイプ用のネイティブ ビジュアライザが設定されます。これにより、Android Studio でのネイティブ文字列のビジュアリゼーションに関する問題が修正され、Android Studio プロジェクトで余分な設定を実行する必要なく、Unreal のデータ タイプを使用できるようになりました。

シーケンサー

ムービー レンダー キュー

![image alt text](image_44a.png)(convert:false)

新しいエクスポート形式が コマンドライン エンコーダ の形式で、 ムービー レンダー キュー に追加されました。コマンドライン エンコーダを使用すると、 FFmpeg などのサードパーティ製ソフトウェアで独自の出力形式を作成できます。

image alt text

Object ID レンダリング パスを改善し、さまざまな方法での ID のグループ化に対応しました。アクタ名、マテリアル、フォルダなどに基づいて、オブジェクトをグループ化できるようになりました。

image alt text

シーケンサーのインターフェースの変更

イベント トラックの操作性を改善するため、シーケンサー ツールバーで イベントトラックの Director ブループリント を開くショートカットを追加しました。

image alt text

Take Recorder ツールの [Start Record (レコーディング開始)] ボタンに加えて、シーケンサーの再生コントロールにもボタンを追加しました。シーケンサーのレコーディング ボタンを使用すると、選択したアクタの現在のシーケンスへのレコーディングを行うことができます。その際、Take Recorder ウィンドウを開く必要はありません。

image alt text

ムービー レンダー キュー プラグインを有効にすると、シーケンサーの [Render (レンダリング)] ボタンをクリックしたときに、どのレンダラを開くかを選択できるようになりました。ムービー レンダー キュー または レガシー レンダリング を指定できます。

image alt text

テンプレート シーケンス プロパティの乗数

テンプレート シーケンス プロパティの乗算をサポートするようになりました。プロパティの乗数により、オリジナルのアセットを参照しながら、テンプレート シーケンス インスタンスの値を変更できるようになりました。

ゲームプレイ キュー トラック

シーケンサーに、ゲームプレイ アビリティ システム を使用してビルドされたアクタの通知状態をトリガーできる新しいトラックを追加しました。通知と同様に、Gameplay Cue トラックでは、範囲ベースのイベントまたはトリガーベースのイベントを活用できます。

image alt text

キューには、Instigator (インスティゲータ)、場所、アタッチメントのコントロールなど、トリガーの方法をカスタマイズするさまざまなオプションがあります。

image alt text

Gameplay Cue トラックを使用するには、 Gameplay Abilities プラグイン を有効にする必要があります。

image alt text

Niagara ビジュアル エフェクト

モジュールのバージョン管理

モジュール、関数、動的入力のバージョンを管理できるようになりました。これにより、機能を設定してバージョン番号にその設定を保存できるため、独自のモジュールをより柔軟に作成できるようになりました。モジュールの新しいバージョンを作成すると、その新しいバージョンがユーザーに提供されます。

初めてモジュールを Niagara システムに追加すると、公開と指定されているバージョンが使用されます。そのモジュールに新しいバージョンが追加されると、新しいバージョンにアップグレードするか、以前のバージョンに戻すかを選択することができます。

image alt text

この機能には、アップグレード時に既存の入力を新しいモジュールのバージョンに自動的に転送する Python 統合も含まれています。

詳細については、「Niagara でのモジュールのバージョン管理」ページを参照してください。[新機能ページへのリンクを挿入]

動作例

Niagara 4.27 から、新しい Niagara システムを作成すると、[Behavior Examples (動作例)] という新しいタブが表示されます。これらの例は、Niagara の一面を示す非常にシンプルな Niagara エミッタとして作成されています。これは、Unreal Engine の初心者が技術を理解するうえで役立ちます。

image alt text

Niagara デバッガ

レベル エディタに [Niagara Debugger (Niagara デバッガ)] という新しいパネルを追加しました。このパネルでは、レベルでの Niagara シミュレーションの内容を把握して、デバッグを実行し、ランタイム時に行われる処理内容を確認することができます。

image alt text

ビューポートの Debug HUD を切り替えると、レベルの Niagara シミュレーションに関する情報を表示できます。

シミュレーションを一時停止したり、スロー再生することで、時間の経過に伴い、どのような処理が行われているかを確認できます。Niagara デバッガでスロー モーションを有効にすると、レベルの Niagara パーティクル シミュレーションのみがスロー モーションで再生され、レベルのその他の部分は通常の速度で再生されます。また、個々のパーティクルのデータの読み取りを有効にすることもできます。

デバッグ描画

Sphere、Box などの一部のモジュールに新しい [Debug Drawing (デバッグ描画)] オプションを追加しました。このオプションを有効にすると、モジュールが視覚的に表示されます。この表示により、必要に応じてシステムをデバッグしたり、モジュールのパラメータを調整することができます。

モジュールで [Debug Drawing (デバッグ描画)] が使用可能な場合は、そのモジュールのチェックボックスの左に青いボックスが表示されます。[Debug Drawing (デバッグ描画)] を有効にするには、そのボックスをオンにします。

image alt text

複数のモジュールで [Debug Drawing (デバッグ描画)] をオンにしている場合は、各形状の描画が表示されます。

また、デバッグ描画は個々のパーティクルのパスの追跡にも使用できます。以下の例では、流体シミュレーションでの表示内容を示しています。

また、独自のカスタム モジュールにデバッグ描画を追加することもできます。

詳細については、「デバッグ描画 [機能ページへのリンクを追加]」を参照してください。

メッシュ レンダラでのメッシュ配列

メッシュ レンダラ に複数のメッシュを追加できるようになりました。複数のメッシュを追加することで、メッシュ配列を作成します。これらのメッシュのパーティクルをランダムにスポーンしたり、フリップブックとして連続して使用したりすることができます。

複数のメッシュを追加するには、[Mesh Renderer (メッシュ レンダラ)] を選択します。+ 記号をクリックすると、レンダラにメッシュを追加できます。各メッシュには、0 から始まる整数値が割り当てられていることがわかります。

image alt text

配列のメッシュを使用してランダムにパーティクルを作成するには、[Initialize Particle (パーティクルの初期化)] をクリックします。Mesh Renderer Array Visibility Mode[Random (ランダム)] に設定して、 [Source (ソース)] で使用するレンダラを選択できるようになりました。

image alt text

particles.meshindex という属性があるので、これを Niagara システムにドラッグします。たとえば、パーティクルを時間とともにランダムに変化させるようにしたい場合は、particles.meshindex を Particle Update グループにドラッグします。MeshIndex パラメータを Random Range Integer に設定すると、レンダラに設定したメッシュの数と同じ数の整数を切り替えることができます。

メッシュ レンダラでは、時間とともに切り替わる一連のメッシュがある場合に、配列をフリップブックとして設定できるセクションがあります。メッシュの名前は Flipbook Suffix Format (デフォルト設定は _{frame_number}) に一致している必要があります。

image alt text

これをさらに活用するには、Niagara システムに Mesh Array という名称の 動作例 を追加します。

カーブ エディタ ワークフローの強化

Niagaraカーブ エディタ を、 シーケンサー で使用されているカーブ エディタに合わせて更新しました。これにより、キーやタイミングを調整するためのより高度な編集ツールを使用することができます。

[Curves (カーブ)] パネルのデザインを変更し、システム内のすべてのカーブの階層を表示するようになりました。階層を検索して、迅速にアクセスしたいカーブをピン留めすることができます。カーブの概要の行をダブルクリックすると、 [Selection (選択)] パネルにそのモジュールが表示されます。

image alt text

[Selection (選択)] パネルに表示されるインライン カーブ エディタも更新されました。

image alt text

image alt text

カーブの [Templates (テンプレート)] をクリックすると、よく使用するカーブの形状を素早く適用できます。カーブ エディタの下部にある矢印ボタンを使用して、キーを素早く操作することもできます。

また、よく使用するものの、プリセットされていないカーブには、 [Project Settings (プロジェクト設定)] で独自のカーブ テンプレートを作成することもできます。

また、このバージョンでは カーブ エディタ のパフォーマンスを改善し、キーをドラッグしたときに速度が低下する問題を解消しました。

パラメータ定義

Niagara に、新しいアセット Parameter Definitions が追加されました。Parameter Definition を作成すると、任意の数の System、Emitter、Particle といった名前空間化されたパラメータのデフォルト値と説明を定義することができます。これらのデフォルト値と説明については、Niagara エミッタ、システム、およびスクリプトを参照してください。

他の Niagara アセットで Parameter Definition を参照すると、Parameter Definitions アセットでパラメータに加えられた変更に自動的にサブスクライブ (リンク) されます。この機能は、パラメータ名、デフォルト値、および説明の変更を、そのパラメータのすべての参照に自動的にプッシュする場合などに使用できます。

リボン形状のプリセットおよびカスタマイズ

これまでのバージョンでは、 リボン レンダラ はリボン向けに必ず平面を出力していました。4.27 から、平面、複数平面、チューブ、または独自の形状の頂点を選択できるようになりました。

これらのオプションを有効にするには、リボン レンダラ の新しいセクション「[Ribbon Shape (リボンの形状)]」をご覧ください。

image alt text

選択した形状の種類に応じて、形状を調整する各種オプションを使用できるようになりました。なお、これらのオプションを試す際には、 リボン レンダラ[Facing Mode (対向モード)][Screen (スクリーン)] ではなく [Custom (カスタム)] に設定する必要があります。

image alt text

Initialize Ribbon モジュールでは、Ribbon Width Mode Ribbon Facing ModeDirect Set に設定する必要があります。

image alt text 4

これらの追加オプションの他、リボンのアーティファクトを削減するための新しいパラメータを設定できます。[Ribbon Shape (リボンの形状)][Plane (平面)] または [Multi Plane (複数平面)] に設定されている場合、 [Width Segmentation Count (幅の分割数)] を調整してメッシュに頂点を追加することで、よりスムーズに変形させることができます。[Ribbon Shape (リボンの形状)][Tube (チューブ)] に設定されている場合、 [Tube Subdivisions (チューブのサブディビジョン)] を調整してチューブの頂点数を追加することができます。

Script Stats (スクリプト統計) パネル

Niagara の [Script Stats (スクリプト統計)] パネルを使用して、Niagara エディタ内で異なるプラットフォーム用に Niagara システムをコンパイルすることができます。これにより、プラットフォーム固有のエラーに関する情報を、クックを行うことなく、取得できます。これは、PSSL がより厳格な GPU システムで作業する際に特に役立ちます。

image alt text

Select ノード

Select ノードという Niagara スクリプト用のノードが新たに追加されました。これは、非推奨になった IF ノードに代わるものです。セレクタの型 (integer、bool、enum) を指定できます。また、さまざまな値を一度に選択することもできます。Select ノードに入力された値に応じて、値が出力されます。

image alt text

この例では、boolean に設定されている Select ノードを示しています。このノードでは、入力された値が true であるか false であるかを確認します。

Select ノードが Int32 に設定されている場合、+ 記号をクリックすると整数が追加され、- 記号をクリックすると整数が削除されます。

image alt text

Enum のリストから Select ノードを作成することもできます。次の例では、Scale Sprite Size から Select ノードを作成しています。このノードには、Scale Sprite Size に設定可能なすべてのオプションが入力されます。

image alt text

ハッシュ関数

ハッシュ関数には、Hash IntegerHash Float の 2 つの新しいノードがあります。これらのノードは、一連の整数の入力を指定すると、ランダム値を出力します。Hash 関数が Seeded Random と異なる点は、同じ入力が指定された場合、Hash では関数呼び出しにかかわらず常に同じ値を出力する点です。対照的に、Seeded Random は、関数呼び出しごとに一貫した値を生成します。

image alt text

Niagara ユーザー エクスペリエンスのアップデート

Niagara エディタのさまざまなユーザー エクスペリエンスが改善されました。改善内容の一部を以下に挙げます。

  • スケルタル メッシュのフィルタされたボーンとフィルタされたソケットのリストで、 [Auto-fill all (すべて自動入力)] オプション を使用できるようになりました。

  • Niagara 向けのホット キーをサポート: J + K キーで再生方向を前後に切り替えることができます。S キーで選択したエミッタを分離します。D キーで選択したエミッタを無効にします。

  • Niagara のスクリプト、モジュール、動的入力のメニューを改善し、新しくなりました。

  • スクリプト アクション メニューに [Library Only (ライブラリのみ)] チェックボックスを追加。

  • アセットに事前に Suggested (推奨) ラベルを付けることができる推奨機能。これらのアクションは、検索時にセクションとしてリストの一番上に表示されます。動的入力やモジュールの場合は、検索を行わなくても一番上に表示されます。

  • データ インターフェース機能の多くで、便利なツールチップが表示されるようになりました。

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

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

image alt text

  • Windows

    • 推奨要件:

      • Visual Studio 2019 v16.5

    • 最小要件:

      • Visual Studio 2017 v15.6

    • Windows SDK 10.0.18362

    • NET 4.6.2 Targeting Pack

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

    • Visual Studio 2017 v15.9.4 ツールチェーン (14.16.27023) と Windows 10 SDK (10.0.18362.0)

      • 最小サポート バージョン

        • Visual Studio 2017 v15.6

    • Xcode - Xcode 11.1

  • GDK

    • Windows SDK:10.0.19041.0

    • GDK:April 2021 QFE2

    • ファームウェア バージョン:Recovery May 2021 QFE1 10.0.19041.7772

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

  • Android

    • Android Studio 4.0

    • Android NDK r21e

      • また、一部のローエンド デバイスでは互換性の問題に対処するため、NDK r20b をサポートしています。

  • ARCore

    • 1.24

  • ARKit

    • 4.0

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

    • v18 clang-11.0.1-based (CentOS 7)

  • Oculus

    • 27.0

  • OpenXR

    • 1.0

  • Google Stadia

    • 1.6.2

  • Lumin

    • 0.24.1

  • Steam

    • 1.47

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 12.3.2 + optional NEX 4.6.6

    • 最小ファームウェア バージョン:12.0.2-1.0

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

  • PS4

    • Orbis SDK 8.508.001

    • System software 8.508.021

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

  • PS5

    • Prospero SDK 3.00.00.27

    • System Software 3.00.00.38

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

  • XboxOne

    • XDK:July 2018 QFE-13

    • ファームウェア バージョン:Recovery February 10.0.18363.9135

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

  • macOS

    • サポート対象

      • macOS Catalina 10.15.7, Xcode 12

    • 推奨要件

      • macOS Latest Big Sur, Latest Xcode

    • 最小要件

      • macOS Mojave 10.14.6, Xcode 11.3.1

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

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

      • まだ ARM64 スライスを含んでいない SDK があります (例 Steam, Vivox)。

  • iOS / tvOS

    • 推奨要件

      • Latest Xcode 12

    • 最小要件

      • Xcode 11.3.1

    • ターゲットとなる SDK バージョン 12.00 ~ 14.xx+ をサポート

リリース ノート

AI

New:

  • AIPerceptionSystem's class method RegisterAllPawnsAsSourcesForSense has now been marked as virtual.

  • Added an optional "FName Tag" to AISense_Damage, which gets propagated to the PerceptionSystem from AIStimulus.

  • The Environment Query Editor is now an engine plugin that is enabled by default; Individual users are no longer required to enable it through the experimental settings. The editor is still considered experimental and disabling the plugin will remove access to the feature.

  • Moved AI domain automation tests to 'System.AI' over from 'System.Engine.AI'.

  • Removed AIController dependencies of the AIPerceptionComponent and now it can be used with non-AI agents.

  • Made the UE4ML plugin public. Engine/Plugins/AI/UE4ML/README.md contains the basic documentation.

  • Switched AIPerceptionSystem's stimuli aging from previously using a timer to now counting elapsed time. In normal circumstances this doesn't make any difference, however, this change does help when trying to use the perception system in replays where UAIPerceptionSystem::StartPlay ends up not being called.

  • Added a blueprint-callable function to AIPerceptionComponent.GetPerceivedHostileActorsBySense and the native alternative GetHostileActorsBySense in addition to a new flexible filter GetFilteredActors that can use any arbitrary predicate for filtering.

Optimization:

  • Bit fields located in the PawnAction class have been optimized to pack into a single 32 bit allocation.

  • Added a tiny optimization to avoid calling AIPerceptionSystem.OnNewPawn when the perception system is configured to not care about new pawns.

Crash Fix:

  • Fixed a crash which occured when a new empty generator is added to an EQS query template while an EQSTestingPawn is using it.

Bug Fix:

  • Dynamic EnvQuery graph node titles will now update correctly when properties in their details panel are changed.

  • Initializing AI related USTRUCT data types will no longer have uninitialized fields.

  • Fixed calling AIPerceptionComponent methods SetSenseEnabled and UpdatePerceptionWhitelist when there is no SenseConfig registered.

  • Fixed UAIPerceptionStimuliSourceComponent's issues with unregistering from all senses if RegisterForSense has already been called during its lifetime.

  • Fixed issues in AIPerceptionComponent where perceptual data associated with actors were no longer valid and being broadcasted through delegates.

Behavior Tree

New:

  • Tick text on Blueprint BT Services that don't have a Tick implementation are now hidden.

  • Added the capability to categorize Blackboard Variables.

Improvement:

  • Added validation on instance arrays (aux nodes, parallel tasks and memory) to update stats properly and to prevent modifications while iterating through them.

Bug Fix:

  • Added minor BTDecorator_Loop fixes:

    • Loop will now force at least 1 execution.

    • Prevented the number of remaining executions from becoming a negative value.

    • Remaining time is now properly displayed.

  • Fixed an issue where iterating through active nodes would sometimes cause a node to be deactivated.

  • Fixed an issue where the BT evaluation of a Conditional Flow Abort skips a higher priority state if the evaluation triggers another Conditional Flow Abort in the previous state.

  • Fixed an issue where a BT task was being executed even though it had lower priority than another task higher in the hierarchy.

  • Fixed a computation issue of a child execution index of a composite node when the child is a task node with services.

Debugging Tools

New:

  • GameplayTasks debug data is now available when being compiled with developer tools.

  • Added the ability to select the local player for debugging in GDT through the command "gdt.SelectLocalPlayer".

Bug Fix:

  • [VisualLogger] Timeline fixes:

    • Prevented a freeze when trying to pan after zooming in.

    • Prevented panning below 0 by initializing the clamp range to the view range.

    • Prevented changing the zoom factor while panning outside the clamp range.

    • When using the right mouse button the Timeline will no longer snap to the closest element as it interferes with panning.

    • Removed the zoom sensibility due to the possibility of becoming stuck at a given zoom factor.

  • Fixed a bug in FVisualLoggerFilters::MatchCategoryFilters that resulted in log lines being filtered out if their category couldn't be found in FVisualLoggerFilters.Categories.

  • Fixed an issue where the EQS composite generator was not displaying CPU stats correctly.

  • Fixed an issue where clearing debug data would not properly clear the stored EQS debug drawing text.

New:

  • Added an option to debug draw poly flags and area flags in Recast Debug draw.

  • Added documentation tips to optimize Navmesh generation speed.

  • Added a templated RecastAStarGraph implementation so users can modify pathfinding logic using Recast Navmesh data.

  • Added the Console variables ai.debug.nav.refreshinterval and ai.debug.nav.displaysize to control the refresh rate and the size of the displayed area in the Navigation Mesh.

  • Added logs to track the geometry added when generating navmesh tiles.

Improvement:

  • Fixed the convex element export in the NavModifierComponent to improve the precision of navmesh generation around those elements.

Crash Fix:

  • Fixed a crash that occurred when changing navmesh generation parameters.

Bug Fix:

  • Fixed an issue where the Navigation Mesh was making the current map "dirty" on load without any user action.

  • Fixed an issue where unloaded levels were being added to the NavOctree, impacting the Navigation Mesh.

  • Fixed NavMesh method ‘closestPointOnPolyInTile' from returning the incorrect height.

  • Fixed missing Navmesh tiles when cooking Maps from the Editor's 'Launch' option.

  • Fixed the computation of the vertice count between mesh and detail mesh when creating the BVTree in DetourNavMesh.

  • Prevented the Navigation Mesh from being removed when a level is saved without a Navigation System.

Animation

New:

  • Added debug draw control support to the Control Rig Component.

  • Added support to bind a groom on a GeometryCache.

  • Added support to frame interpolation for subframe sampling to USD mesh animations.

  • It is now possible to import an animated groom through Alembic as a GroomCache asset and play it back on its associated Groom asset through the Groom Component.

  • Converted SkinWeightProfile scalability settings to CVars in order to be set through Device Profiles rather than Scalability settings.

Crash Fix:

  • Fixed a potential crash with Level of Detail Material mapping which occurred during a Skeletal Mesh merge.

Bug Fix:

  • Fixed Cyclic Coordinate Descent Inverse Kinematics (CCDIK) rotation limits in Control Rig Component.

  • Fixed virtual bones being generated on animations that don't animate them.

Animation Assets

Crash Fix:

  • Removing unused bones from the Skeleton no longer causes a crash.

  • Disabled Supplemental Streaming SIMD Extensions 3 (SSSE3) instructions, which was causing crashes when loading MetaHuman Creator assets on older CPUs that don't support SSSE3.

Bug Fix:

  • Fixed a CHECK_PUREVIRTUALS error in AnimMontage.h

Animation Blueprints

Crash Fix:

  • Fixed a crash ending PIE when a sequence is playing and is driving an Animation Blueprint with a Spring Bone Controller active.

  • Prevented a crash when re-selecting a group of trail nodes.

Bug Fix:

  • Output pose now initializes when no sources are present.

  • The Animation Blueprint Transition warning when the rule is bound is fixed. Pins are automatically disconnected if they are replaced with a bound rule.

  • RandomPlayer anim node will now support blend in times that are less than the frame delta, including 0.

  • Re-ordered AnimInstance's property access class method to copy after Event Graph methods in order for properties to be correctly transformed when accessed from Blueprint functions.

  • Fixed an uninitialized struct member in Property Access.

  • Fixed curve weights out of bounds access in the Inertialization node.

  • ControlRig AnimNode's exposed pins will now have the correct default values as specified in the source Control Rig Blueprint.

  • Fixed warnings about missing variables making property accesses non-functional.

  • Prevented memory corruption caused by unconnected pins on Control Rig nodes.

  • Fixed Animation Blueprint compiler issues occurring with collapsed graphs and isolated errors in state transitions.

  • Property Access nodes will now be able to generate unique property names.

Animation Tools

Crash Fix:

  • Fixed a crash from occuring when re-opening an Asset Editor after a new preview mesh is applied.

Bug Fix:

  • During the retargeting process, curves now copy correctly on child Animation Sequences.

  • Fixed Asset import path issues during the retargeting of Animation Sequences.

  • Fixed debug drawing of raw animation bones in Persona when component has post process or sub anim instances.

  • Changed layout of Animation Graph overrides to improve readability.

Import/Export

Optimization:

  • Improved motion blur for GeometryCache.

  • Improved support for GeometryCache starting with empty frames, such as fluid simulation, explosion, and other effects.

Crash Fix:

  • Fixed crash that would occur when importing a SkeletalMesh from Alembic with the "Merge Meshes" option.

Bug Fix:

  • Removed invalid Motion Vectors when importing GeometryCache with the option "Import Abc Velocities As Motion Vectors". This results in cleaner subframes.

Skeletal Mesh

New:

  • Added ENGINE_API Macro to Export SkeletalMeshVertexClothBuffer's Initialization method.

Crash Fix:

  • Fixed a crash which occured from concurrent access to a Skeleton's smart name map.

Bug Fix:

  • Fixed a conversion issue between signed and unsigned integer structs.

  • Added additional safety checks to ensure the bone transform is not being accessed out of bounds.

Removed:

  • Removed deprecated Skeletal Mesh Component check for Lerp Curves.

Audio

New:

  • Enabled the deletion of existing Quartz Clock Actors from Blueprints.

  • Added more efficient search options for Audio Streaming Cache.

  • Added Audio Modulation support for Sound Submixes from their Output Volume, Wet Level, and Dry Level properties.

  • Added new static gameplay functions to prime sounds for audio stream caching.

  • Updated Quartz with the ability to query for the duration of time that a given number of Quantization Type events will run based on the clock's sample rate and time signature settings.

  • Made Blueprint-accessible versions of audio-utility functions that were previously only available in C++, including:

    • GetFrequencyFromMIDIPitch

    • GetMIDIPitchFromFrequency

    • GetPitchScaleFromMIDIPitch

    • GetGainFromMidiVelocity

    • ConvertLinearToDecibels

    • ConvertDecibelsToLinear

    • GetLogFrequencyClamped

    • GetLinearFrequencyClamped

    • GetFrequencyMultiplierFromSemitones

    • GetBandwidthFromQ

    • GetQFromBandwidth

  • Added radius as a channel position parameter within the sound field format API.

  • Added a new log category for stream caching to independently control log levels from the logaudio category.

  • Added a Quartz function to return the current transport in a human-readable format.

  • Added a Quartz function that returns the time since a specified Quartz clock was last reset.

  • Added booleans to enable Base Submix, Submix Sends, and Bus Sends on Sound Base objects. These booleans replace the previous "Output to Bus Only" parameter. Assets created prior to 4.27 will be updated automatically.

Improvement:

  • Reduced memory overhead when using SoundCues by pruning branches that do not match the cooking target's quality level.

  • Added major optimizations for exhaustive search code path in Audio Stream Caching.

  • Raised maximum value for max global pitch scale.

Crash Fix:

  • Fixed crashes in Quartz when calling FQuantizedPlayCommand::OnFinalCallbackCustom().

  • Fixed crashes caused by race condition when adding new clocks to low-rate Quartz.

  • Fixed crash issue when Audio Modulation is enabled in an editor running using -nosound.

  • Fixed an issue where using a Submix Effects chain in Blueprints would cause a crash if no Submix Effects Preset was found.

Bug Fix:

  • Fixed issue where Sound Classes would sometimes load before certain referenced types could be known, breaking those referenced assets

  • Added fix to prevent rare memory stomp within 2DChannel map.

  • Fixed issue where sometimes a "divide by zero" check would get triggered if Quartz was using very high BPM.

  • Fixed ensure caused by clocks not being removed during Quartz Clock Manager shutdown.

  • Fixed issue with Vorbis in which it failed to load streamed data before the initialization phase was over. This primarily impacted Multichannel streams where the initial pages couldn't fit into 6 KB.

  • Fixed issue that caused activated reverbs to not be set.

  • Fixed channel-order issue when using 5.1 and streaming sounds.

  • Fixed an issue where the multi-channel source bus was using the number of frames instead of the number of samples.

  • Fixed a wrap-around issue on imported .ogg Vorbis files.

  • Fixed issues when importing audio files with higher than 16 bits.

  • Fixed an issue where restarting in virtual mode would not properly reset the active sound cue and playback time.

  • Fixed an issue where the multi-channel TSampleBuffer was using the number of samples instead of the number of frames.

  • Added a warning when applying a submix effect to a submix that doesn't exist.

  • Fixed an issue with "soloaudio" persisting in the Content Browser.

  • Added a fix for NaN appearing within the GetLogFrequencyClamped and GetLinearFrequencyClamped functions.

  • Added DLL exports to Audio Modulation statics.

Removed:

  • USoundBase::GetDefaultSoundClass() has been removed. Any references can be replaced with USoundBase::GetSoundClass() or UAudioSettings::GetDefaultSoundClass().

AutomationTool

New:

  • Added a Perforce helper to revert / delete multiple files at once.

Bug Fix:

  • Fixed the Replace All Reports feature in the Test Automation window not functioning the first time it is used.

Control Rig

New:

  • Prevented duplicate curves from being added when importing curves into Control Rig

Crash Fix:

  • Fixed a crash that occurred in cook builds that contain Full Body IK and Control Rig nodes.

  • Fixed a crash in Control Rig Editor that occured when connecting a sub-pin of a Get Variable Node to a Set Variable Node's value pin.

Bug Fix:

  • Changing pin values in Control Rig will now trigger the necessary recompile.

  • Control and Space will now work correctly with the "Add Mapped Elements" Blueprint function for the Control Rig Component. \

  • Fixed jittery movement animation when using Control Pin Value on the ModifyTransform Node's pin.

  • Prevented watched pins from causing ControlRig Editor to keep marking a ControlRigBlueprint as dirty after being saved.

Core

New:

  • Commandline argument "-buildmachine" now propagates to subprocesses (like ShaderCompileWorker) started by the engine.

  • The package difference test commandlet now produces a hexdump when differences are found.

  • In the editor preferences the "Enable Live Coding" option no longer requires an editor restart to take effect.

  • Improved feedback to Live Coding when it would not start due to a prior hot reload.

  • Added messaging about delays to live coding to accommodate cases where the Unreal Editor has stopped in the debugger when a system using a large number of processors.

  • Improved live coding feedback in the Unreal Editor when compiling is initiated using the keys Ctrl-Alt-F11.

  • Updated messaging when live coding is enabled after using hot reloading.

  • Moved live coding warnings from the live coding window to the log.

  • Fixed misleading comment on PostLoadMapDelegate function.

  • Added a UTickableWorldSubsystem as a base class for all world sub systems that need to be ticked along with their world. This is now the preferred method for UWorldSubsystem that also inherits from FTickableGameObject as it prevents some common pitfalls. By default:

    • It implements FTickableGameObject::GetTickableGameObjectWorld to return the subsystem's world.

    • It prevents the subsystem from ticking as soon as the subsystem is deinitialized.

    • It prevents the subsystem's CDO from ever ticking.

  • Improved performance for Unreal Insights Timing View when having a large number of frames.

  • Editor asset tagged property loading is now more resilient by seeking the expected end position and logging an error, as opposed to setting the archive into an error state.

  • Added new WIN32_WINDOWS macro to avoid a compiler error in SwitchBoardListener.

  • Added support for UE as a Library, which enables external applications to run and control their own UE4 instance.

  • Operator new overloads will now always allocate at least one byte.

  • Added new alignment-aware C++17 new/delete operator overrides.

  • Extended FGenericDataDrivenShaderPlatformInfo settings to support "opt-out" settings by adding the ability to set default values.

  • Setting GIsRequestingExit on the start of Engine Tick is now disabled unless SET_REQUEST_EXIT_ON_TICK_ONLY is enabled.

  • IoStore Diff command - helper is a command to diff two sets of container files. An example use:

    -UE4Editor-Cmd.exe-run=IoStoreCommandlet-Source=<Path>-SourceCryptoKeys=<PathToCrypto.json>-Target=<Path>-TargetCryptoKeys=<PathToCrypto.json>-DumpToFile=<OptionalFilename>

  • Added FPackageName overloads for FAnsiStringView.

  • A new package option to specify the URL to where crash reports will be sent, in cases where the crash report client is packaged with the game. This option can be found in the advanced package options, by default crash reports from the Editor are sent to Epic unless otherwise specified.

  • Support for single quotes around attributes has been added in the FXmlFile.

  • IoStore command to List container files to csv. An example use:

    -List=<ContainerFileNameOrWildcard> -csv=<filename> Outputs <PackageId, PackgeName, Filename, Container, Offset, Size, ChunkHash>

  • Included the name of the slowest unit test in a warning log for when a less than two second smoke test run time is executed.

  • Added coarse parallel name batch loading.

  • Added C++17 structured binding support for TTuple.

  • The TWeakInterfacePtr<T> class now has an API that is more consistent with the weak object pointer class.

  • Enabled comparison of string views of different types Compare, Equals, and the associated operators are now supported for any pairs of string views and C-style strings that FPlatformString has a comparison function for.

  • Added additional descriptive information to FMallocBinned2 asserts when they fire.

  • The Engine can now build successfully with CHECK_PURE_VIRTUALS enabled in order to verify that all PURE_VIRTUAL functions are correctly implemented in subclasses. UClasses that use PURE_VIRTUAL must be marked abstract and UStructs that use PURE_VIRTUAL must have the WithPureVirtual trait set.

  • Added RetainedRef Template to be used as a function parameter when the reference will be held beyond the length of the call, causing a compile error when passing an rvalue.

  • Added find functions for string views.

  • In FPropertyTextUtilities, the TextToPropertyHelper method can now have PortFlags specified.

  • Extended MakeValue and MakeError to take a variable number of arguments.

  • Added FNameBuilder to simplify passing FName to functions that take FStringView.

  • Changed DDC CachedDataProbablyExists to skip slow cache backends.

  • Allow copy constructor and assignment of ValueOrError template.

  • Smoke test responsible for finding uninitialized struct members will now also try to construct all structs with 'new FMyStruct' syntax to find properties that are uninitialized despite their struct having a custom default constructor.

  • Added const access to source in the String Reader.

  • Added command line options to PerfReportTool "-Add -cleanCsvOut <filename>", for writing out a standard format .CSV file with events stripped.

  • Added wildcard support to PerfReportTool for metadata filter values.

  • Recompiled CSV tools as 64-bit.

  • Added PerfReportTool SummaryMetadata disk cache support. This skips CSV processing entirely for files already in the cache, which is significantly faster for bulk queries.

  • Added PerfReportTool Scrollable summary tables with the command line option "-scrollableTable". This makes the summary table scrollable, with frozen first rows, columns, and automatic colorization. These are useful for historical data tracking.

  • Added Csv.bin compression support. Run CsvConvert with pass -binCompress 1 or 2 to enable compression on .csv.bin files.

  • Updated clang atomics to use newer atomic functions in favor of sync and added support for 128-bit atomics for platforms that support it.

  • Added Support for multiple wildcards in arbitrary positions has been added to CsvTools. Wildcards can be used for PerfReportTool reports and CsvToSvg stat lists.

  • Added a checkpoint heartbeat hang detector to help diagnose issues such as infinite loading screens.

    • This detects cases where all the main threads are ticking but the high level logic is stuck.

    • Adds calls to ThreadHeartBeat class methodMonitorCheckpointStart and MonitorCheckpointEnd to use.

    • If it takes longer than the threshold to reach MonitorCheckpointEnd, a fatal error will be thrown.

  • Added MakeBinaryConfig commandlet. This will optionally run at stage time to generate a BinaryConfig.ini, which if present at runtime will load up ini files.

    • Can be enabled in Packaging settings, or -makebinaryconfig option to BuildCookRun.

    • Can use -textconfig at runtime to go back to non-binary config files.

  • Added const access to source in String Reader.

  • Removed several low-value/high-frequency profiling scopes to improve performance and stability while capturing.

  • FObjectIterator has now the option to lock the global UObject array when it's iterating over it to prevent thread safety issues when iterating over all objects while other threads are creating new UObjects.

  • Added cvar ‘Engine.DelayTrimMemoryDuringMapLoadMode' that will delay calling TrimMemory until the end of LoadMap.

  • a CsvProfiler stat for 2d camera speed has been added to Profiling.

Optimization:

  • Asset registry optimizations have been made to reduce Engine initialization time.

  • Optimized the time required to resolve call stack symbol names on Windows OS. The Engine now loads and caches the debug symbols on demand rather than loading all debug symbols at once on the first request.

  • Asset registry optimizations have been made to reduce Engine initialization time.

  • Optimized FName batch loading and added FArchive batch serialization

  • Saved one-hundred and twenty milliseconds to next gen load time by removing superfluous sleeping on a critical path.

  • Optimized Cooked AssetRegistry loading optimizations.

  • Improved performance of GetSubSystem calls from C++ code.

Crash Fix:

  • Fixed crashes when running commandlets with -noshadercompile argument.

  • Fixed crash when polling to see if a UTexture is ready for PostLoad while it is processing it's texture data on a background thread.

  • Fixed a crash that could occur if an imported package was garbage collected during loading.

  • Fixed hot reload crash caused by EInternalObjectFlags' PendingConstruction function.

  • Fixed possible crashes when loading Blueprints with circular dependencies.

  • Fixed a crash in UnrealHeaderTool when parsing a BlueprintImplementableEvent with an int64 return type.

  • Fixed a crash that occurred when working with map instanced properties if the map's sparse storage has gaps.

  • Fixed a crash from occuring when decryption of a pak signature fails.

  • Fixed a crash which occured when running commandlets with the -noshadercompile argument.

Bug Fix:

  • Fixed an issue where files were not getting cleaned after hot reloading.

  • Fixed debugger support in Live Coding to properly display FName values.

  • Garbage Collection will now treat cluster objects with Internal Object Flags set to Garbage Collection Keep, the same way as if they are in the root set to prevent them from being destroyed while being referenced by the async loader.

  • Fix for non-unity build of BuildPatchTool.

  • Fixed automated test compiler error in shipping builds.

  • Fixed hot reloading where a change would not be detected due to a mismatch between how Unreal Editor and Unreal Build Tool formatted the module name.

  • Fixed an error where changing projects from the Unreal Editor which had been "Quick Restarted" from the live coding console would result in the Unreal Editor failing to start properly.

  • Fixed multiple issues where live coding would fail to compile code changes.

  • Fixed issue where live coding fails to compile changes when both the editor and game are running.

  • Fix for uninitialized variables.

  • Fixed the building of the live coding console in non-unity builds.

  • Fixed a compile issue in the live coding console when building without pre-compiled headers.

  • Fixed misaligned noexport structs.

  • Fixed Missing initializers for bool members in source control.

  • Added a missing call to the EngineSubsystemCollection Deinitialize method when on engine shutdown is invoked.

  • Missing initializers for bool members in template project defs.

  • Fixed potential race conditions when calling GC'd objects' destructors.

  • GC weak references will now be cleared after gathering unreachable objects as more objects become unreachable during the process.

  • Fixed FString class method SanitizeFloat from returning "0.0" when built under the /fp:fast command.

  • Fixed a hot reload assert when reloading an Engine-derived type.

  • Fixed POSIX platforms not honoring the -log= parameter in forked processes.

  • GarbageCollection: Changed InternalObjectFlag priority to make sure that objects are not being destroyed while being referenced by the async loader.

  • Fixed a memory stomp that occured when comparing file paths.

  • Improved instanced propagation.

  • Creating an FName with FNAME_Find no longer asserts if the name length exceeds the maximum name size.

  • Fixed code generated by UnrealHeaderTool when a const UObject pointer is returned by a UFUNCTION.

  • Fixed a problem in ArrayProperty's SerializeItem method when using a user-defined structured archive formatter, caused by a mismatch between the saving and loading branches when doing unversioned property serialization.

  • Fixed a UnrealHeaderTool error when building a project inside a .tmp folder.

  • FMallocBinned3 will now try to allocate memory from a bigger pool to avoid Out of Memory crashes.

  • Fixed perfect forwarding in the PimplPtr header.

  • Fixed a possible buffer overflow when reporting a failed 'ensure'.

  • Due to Windows 7 no longer being supported by Microsoft, the bundled version of DbgHelp.dll is no longer compatible.

  • Added a missing call to AsyncLoading's class method PumpEssentialAppMessages when processing loaded packages PostLoad and CompletionCallbacks on the GT.

  • TArray's conversion constructor now enables library templates to work correctly.

  • Fixed a parse error in UnrealHeaderTool when a UENUM is deprecated.

  • Fixed a race condition in FMallocLeakDetection.

  • Fixed backward compatibility with 32-bit platforms for LLM tags tracing.

  • Prevented an object from being accessed from weak pointers after it's been destroyed and fixed a race condition between FWeakObjectPtr and Garbage Collection AsyncPurge.

  • Changed the checkSlows to checks in theFixedAllocator template to allow them to detect user error in Development builds.

  • Added static assert to detect inherited Structs which are not polymorphic unless inherited base struct also is polymorphic. If this happens, there are two options:

    • Add a vtable to the superclass (and a virtual destructor), or

    • Remove any virtual methods from the derived struct

  • Fixed IsContiguousContainer template concept checking compile error.

  • We now check that cache keys are valid before they are shortened in the Derived Data Cache.

  • Avoided a stack overflow in FOutputDeviceRedirector.

  • CsvToSVG will no longer throw an exception in multiple CSV mode if a single CSV has missing metadata.

  • Fixed edge cases with stripping by events.

  • Fixed a bug causing an exception in graph generation when the temp directory contained spaces.

  • OutputDeviceRedirector's buffered lines will now only be emptied if there are any output devices to redirect to.

  • Fixed a bug that prevented the PkgInfo commandlet from loading UAsset files.

  • Fixed a potential concurrency issue when renaming objects and enabling UObject hashing error asserts in development builds.

  • Fixed a rare case which a compressed IO read re-using a cached buffer that wasn't intended.

  • A Compiler error with Visual Studio 2019 has been fixed.

  • Async loads from the async loading thread during the final async loading flush will now also be allowed to prevent a safeguard from firing.

  • Async loading will no longer be allowed after the final async loading flush to prevent crashes on exit.

  • Fixed a typo of "Tuesday" in FDateTime.

  • FPackageReader will now copy the Editor only filtering flag from the underlying reader archive to the owning package reader.

Deprecated:

  • Deprecated UPackage::Guid.

Removed:

  • Removed safety check from FUObjectAllocator's FreeUObject constructor.

Cooker

New:

  • Reduced memory usage of EDLCookChecker in Cooker memory.

  • AssetRegistry EditorOnly dependencies. This change adds different Game and EditorOnly dependencies to the AssetRegistry.

  • Added command -NeverCookDir option to the cook commandlet.

  • Added a cooker parameter which allows DLC cooks to override the platform name used to find and load the development asset registry. Allows different platforms to use a single registry where that makes sense.

  • Added a "-BasedOnReleaseVersionPathOverride" parameter which can be used to override the value generated by GetBasedOnReleaseVersionPath.

Bug Fix:

  • Fixed pathing mismatches in DLC cooking when the cooker executable is built with a unique build environment, so it is not rooted in the Engine/Binaries/<platform>.

Network Profiler

  • Re-added a "Check All Connections" checkbox functionality in network profiler that got removed by mistake.

  • Fixed issues with network profiler graph view not loading if there are fewer than 30 frames worth of data in the profile.

  • Fixed anchoring to work with the "Check All Connections" checkbox.

Unreal Insights

New:

  • Network predication traces can now be examined using the external Unreal Insights application.

Bug Fix:

  • Fixed issues when tracing data from multiple threads.

  • Fixed a crash in NetworkPredictionInsights when jumping in time for a live session.

UnrealPak

  • Signed pak files now ensure the validity of the pak file's index.

Datasmith

New:

  • Actor visibility attribute is now serialized. An exporter can decide to export hidden actors that way.

  • You can now add a .neu.* extension (.neu.1, .neu.2, and so on) to a Creo neutral format.

  • A Datasmith scene can now declare new materials that inherit existing Material Instances and override their parameters.

  • Dataprep has been enhanced to allow operators/filters cards to look in the graph.

  • The Dataprep operators/filters palette has a new look and feel.

  • The Dataprep string array in filters has a new look and feel.

  • Cleaned up statistics displayed in the Visual Dataprep 3D viewport.

  • A Plane Cut operator was added to Dataprep.

  • The UI for Dataprep stats has been improved for easier visibility and use.

  • Dataprep now has the ability to horizontally resize action nodes.

  • Dataprep can now collapse a group of actions.

  • Dataprep has a new operator to set collision complexity.

  • The Datasmith Revit Exporter now corrects Structural Steel Connection pivots.

  • In Dataprep, you can now set format-specific import options.

  • Dataprep has a new operator to resize textures.

  • A panel was added to visualize, browse, and select components in Visual Dataprep.

  • Dataprep now has the ability to create a filter from a selection.

  • You can now disable/enable groups of actions in Dataprep.

  • In Datasmith Revit exporter, you can correctly export hierarchy based on Super Component.

  • Datasmith Revit exporter provides Floors and Ceilings pivots at scene origin instead of at their own local pivots.

  • Added support for thin translucency shading models on the Datasmith UE PBR (physically based rendering) materials.

  • Facade now includes an exposed variant API, with bCleanupUnusedElements parameter to FDatasmithFacadeScene::ExportScene().

  • Added AP242 XML Step, XPDM, SolidEdge formats in Datasmith supported file types.

  • Add support for reading FBX metadata into Datasmith when importing scenes from DeltaGen and VRED.

  • Fixed a memory corruption issue on export of scene in 3dsMax exporter.

  • Revit Datasmith exporter now exports luminance color temperature.

  • A processing time control in CADWorker has been added. This prevents a DMU from not being imported due to a referenced file looping. The processing max time is based on the size of the file to process, and its format. Only the blocked file is canceled. This can be disabled with cvar r.CADTranslator.EnableTimeControl=0.

  • In Dataprep, the filter is now updated from Selection with a simpler UI, and uses object/actors path as the unique ID.

  • Update of KernelIO dll with 2021 sp1.2 version. With this new release, the supported version by format are:

    • CATIA V5 (.CATPart, .CATProduct, .cgr) R10 → R31

    • CATIA V6 (.3Dxml) 2011 → 2013X

    • 3D Experience (.3Dxml) 2014 → 2020X

    • Inventor (.ipt, .iam) All → 2021

    • JT (.jt) 7.0 → 10.5

    • Pro/Engineer part files (.prt, .asm) ProE 13 → Creo 7

    • Pro/Engineer neutral files (.neu) ProE 13 → WF5

    • SAT : ACIS (.sat) All → R27

    • Solid Edge (.par, .asm, .psm) All → 2020

    • Solidworks (.sldprt, .sldasm) 99 → 2021

    • STEP (.stp) 203/214/242

    • XT Format (.x_t) All → 32

    • NX / Unigraphics (.prt) 11 → CR 1957

  • Navisworks 2021 is now supported by the Datasmith Navisworks exporter.

  • For PLM XML files, some error messages have been replaced by warning messages when files are prevented from parsing.

  • Added new Collaborative Viewer content: two new templates in Collab Base that use shared resources.

  • Support has been added for a multilingual installer for the Revit exporter.

  • For the Navisworks importer, Mesh Actors for merged geometry are now re-pivoted to the bottom center of the bounding box.

  • Added a Mobility property to the Datasmith Area LightActor:

    • The Datasmith Area Light Blueprint now sets its components (mesh/light) for mobility in construct in accordance with this.

    • Dataprep Set Mobility supports setting ADatasmith Area Light Actor (in addition to the usual Scene Component).

Crash Fix:

  • A crash no longer occurs when an asset referenced by a captured UObject property in the Variant Manager is swapped with an asset of an incompatible class.

  • Fixed a crash that occurred when trying to capture Variant Manager thumbnails from the viewport during standalone mode.

  • No longer crashes when a landscape is imported by Dataprep or reimported from Datasmith.

Bug Fix:

  • Fixed the Variant Manager spawning function director outer ALevel Variant Sets Actors so they always spawn on the persistent world levels instead of on the vestigial worlds of sublevels.

  • Fixed the Variant Manager function directors that were unnecessarily collected and recreated repeatedly.

  • It is now possible to set nullptr values on UObject property captures in the Variant Manager.

  • User-set Material overrides are no longer replaced when reimporting Datasmith scenes in some scenarios.

  • Fixed support for Variant Manager thumbnails using transparency.

  • For DataSmith Content StdMasters:

    • Fixed normals when using triplanar mapping.

    • Fixed POM when using rotated UVs.

    • Added double-sided support to normals.

    • Reduced cost and complexity of triplanar mapping.

    • Tweaked glass master default values.

  • Fixed an issue where Variant Manager visibility changes were not applied to the viewport on some scenarios when the viewport's Realtime property was set to Off.

  • Added the newest decals to be on par with Twinmotion, and fixed a POM issue.

  • Updated decal material usage to avoid material compile failure.

  • FDatasmithSceneCleaner::Clean() will no longer remove materials that are referenced only by a variant.

  • Fixed incorrect exported joint indices when exporting skeletal meshes to USD if the skeleton has a different number of bones than what is used by the skeletal mesh.

  • Fixed an issue in the material generation by a datasmith import. The expression names in the material functions used by a Datasmith-created material are now unique.

  • Emissive master now uses the alpha channel of the Luminance Filter Map as an opacity mask.

  • Tweaked triplanar projection, added panning in triplanar, tweaked glass default values, and added decals material permutations.

  • The following fixes have been made to the Automotive and Architecture Collab Viewer templates:

    • 3D cut plane no longer cuts the model.

    • Added creation of bookmarks at Runtime.

    • You can now load saved states in the editor.

    • Changed the title of the popup window of datasmith runtime load.

    • Removed the Transmission hierarchy in the architecture template.

    • Fixed Reset and Reset All Fail on the Collab Viewer with data imported through runtime Datasmith.

  • Fixed a broken documentation link on the import help button and added an automated test to make sure the link stays valid.

DevTools

New:

  • Added a custom solution section to allow Visual Assist to identify the solution as an Unreal solution.

Bug Fix:

  • The full path to the VsCode compiler is now specified, as well as command line arguments in the format expected by the compiler.

Automation

New:

  • The automated tests report is now more resilient in cases of critical failure or timeout.

    • The JSON report is saved after each test execution.

    • Test artifacts are now copied after each test execution.

    • The HTML report now displays not run and in process test states.

    • Removed the undocumented command line option checkpoint.

Bug Fix:

  • Corrected an issue with degenerate artifact creation. Attempting to create files with the same source and destination folder hierarchies when the Role was null would lead to file errors. These required five 30-second timeouts each to skip when ending runs using -skipserver

  • Fixed an issue with NullPointerExceptions on run when the Configuration's "Build" was null.

  • Fixed automation and gauntlet tests exit code on Unix systems (docker).

    • FPlatformMisc::RequestExit(force = true) caused editor exit with code 1 due to implementation for the UNIX platform.

    • This led to problems in the CI pipelines, the CI stage was sometimes assumed to have failed despite the fact the tests were ok and the tests' status code was 0.

    • Added a simple call of RequestExitWithStatus to correct the problem.

AutomationTool

New:

  • Added the AdditionalIoStoreOptions parameter to the UAT ProjectParams class, which lets you supply extra parameters to the iostore commandlet when staging a build.

  • Fixed an incorrect default value being applied for the skipiostore parameter in UAT.

Bug Fix:

  • Corrected the handling of the -skipdeploy UAT \ UBT command. This now reduces the time it takes to Launch the game from the Editor.

  • Fixed staging chunk assignment failing when there were case mismatches between paths in the staging manifest and the pak chunk lists.

  • Corrected a case during project param creation where we still assumed there was a single editor target per project.

Memory Profiler

Bug Fix:

  • FileCache memory is no longer attributed to the first caller.

UnrealBuildTool

New:

  • Fixed issues when running UBT in a build environment without a local data directory, by falling back on the Engine folder.

Bug Fix:

  • Corrected module dependencies not working when a module has no source files.

  • Fixed IsHostOnVpn() always returning false, so Incredibuild isn't used for building C++ over VPN.

UnrealHeaderTool

  • The ExpandEnumAsExecs metadata now properly handles spaces in a comma-delimited list of parameters.

Editor

New:

  • When toggling sub-level visibility on the Levels Editor, Multi-User editing now reflects the corresponding game flags so that -game nodes will properly display updated visibility. Users can opt-out of this behavior by disabling the Reflect Level Visibility to Game option in the Multi-User project settings.

  • The spline point property editor now allows toggling between absolute and relative position and rotation.

  • Added Copy and Paste options to the context menu on each field of the spline point property editor.

  • Specific fields and interp types for subclasses of USplineComponents can now be disabled.

  • Reworked water actor sprites to a more dynamic system.

  • Water actor sprites are now replaced with an error icon if certain checks fail.

  • Added new icons for the WaterLandscapeBrush and WaterMeshActor.

  • Package save events are now captured when running in -game mode. This is to support remote recording of takes on headless nodes.

  • Transaction events on Multi-User are now synchronized on nDisplay nodes.

  • Added an API ConcertSyncClient module that enables users to participate in transaction filtering. API users can indicate if a UProperty or UObject should be included, excluded, or have default behavior applied to it.

  • Added support to nDisplay to properly synchronize Multi-User activity stream when the nDisplay nodes first connect to the session. All nodes will coordinate their activity sync and they will finalize simultaneously. Note: If a node reconnects during an active session after initial synchronization, it is no longer possible to synchronize it. All nDisplay nodes should be restarted if synchronization is required.

  • Implemented a custom asset editor for waves assets which shows a preview of the resulting waves.

  • Multi-User take recording is now automatically available when connected to a Multi-User session. Previous versions required you to enable a special CVar.

  • Added a new Editor preference (Check References on Delete). When disabled, Unreal Engine no longer checks actor references when deleting actors from the World Outliner or warns about possible lost references. This can reduce the delay of initial deletion for levels that contain a lot of soft references.

  • Users can now control the maximum transmission rate for packets on a UDP connection. The default value is 1 Gbit/second. This value can be adjusted in the Project Settings for UDP Messaging.

  • Users can now use new controls in the Take recorder to specify who is recording and who provides the source data to nodes connected in a Multi-User session. This feature is only enabled when connected to a Multi-User session.

  • FNames can now be initialized with a string that starts with an underscores in the Editor.

  • Reference Viewer now has an option to show only the filtered node.

  • Reference Viewer now has a Compact Mode that hides thumbnails on the graph nodes and reduces the space taken by each one.

  • Added an Editor delegate that is broadcast from ObjectTools::AddExtraObjectsToDelete. It allows the insertion of secondary assets that should be deleted at the same time as the ones selected by the user.

  • Added icons for landscape BP brush actors.

  • Added an option to UTextureFactory to specify the source image color space. This saves processing time when importing MDL materials by creating the textures with the right color space at the factory level.

  • You can now load a material from a module path and a definition name instead of loading it from a file.

  • You can now add and remove MDL module search paths for the MDL importer.

  • Very large (2GB+) skeletal meshes can now be imported into the Editor.

  • Name resolution can now be performed on TCP Message Bus and File Server connections. You can use IPv4 style addresses or a named address.

  • The Reference Viewer no longer displays the graph state overlay.

  • 16-bit grayscale PNGs are now imported as 16-bit gray textures.

  • Added support for changing the aspect ratio axis constraint when the viewport is locked to an Actor.

  • If there is a still pending open transaction when trying to launch PIE, UE now cancels the transaction instead of preventing PIE from being launched.

  • Added -BulkCheckout and -GarbageCollectionFrequency=X options to the ResavePackages commandlet. -BulkCheckout causes all assets likely to be saved during the commandlet's run to be checked out of source control before loading packages. This reduces the number of source control operations needed when working with large numbers of files. -GarbageCollectionFrequency=X helps control how often garbage collection happens, which also helps when operating on a large number of Assets.

  • Changed the spline SnapToPoint / SnapToActor default hotkeys to Shift+P / Alt+Shift+P to avoid conflict with viewport navigation hotkeys.

  • Added spline point selection buttons to the spline details panel "Selected Points" category.

  • Plugins for remote control protocols (DMX, OSC, MIDI) now have their own icons.

  • Fixed a regression in Editor loading time when using GameplayCues.

  • Added support for negative values in CurveAtlas when color adjustments are disabled.

  • DDC - Added detailed stats about the DDC that are browsable in the Editor.

  • Added an Editor setting that writes to the engine global setting key/value storage instead of the environment variables. If you're already using the global DDC environment variables, these will remain in use.

  • Added per-project settings you can configure to recommend the setup of a globally shared DDC. These settings are off by default.

  • Added code support for using the gameplay tag UI in other Editor customizations via GameplayTagsEditorModule.

  • Added a new SGraphPinStructInstance class to make it easier to build custom UI for struct pins in Blueprints.

  • Added support for non-square resolutions in Curve Atlas.

  • Added default color and grayscale calibration chart materials to Engine content and BaseEngine.ini project settings.

  • Added the -FrameproEnableContextSwitches command-line interface argument to turn on context-switch tracking in Framepro captures.

  • For the MDL Importer, imported material graphs no longer contain unused constants and parameters.

Crash Fix:

  • Fixed a crash that happened when moving Light Cards on an nDisplay Stage Actor.

  • Fixed a crash that was caused by an uninitialized FBox in BaseMeshPainComponentAdapter causing infinite recursion.

  • Removed a message dialogue from skeleton processing to fix a crash with destroying SAssetPicker while it is rendering thumbnails in its Tick().

  • Fixed multiple crashes related to selecting options from Event Graph context menus.

  • Fixed how the base address was being calculated in FPropertyValueImpl::EnumerateObjectsToModify. This caused a crash with UObjects that use Sparse Class Data.

  • Fixed SVN integration crashing the Editor on Mac because libserf-1.dylib was not found.

  • Fixed a crash that happened when right-clicking certain elements in the source control history.

  • The editor no longer crashes when importing a corrupted EXR image.

  • Fixed a crash that happened when dragging new elements onto arrays of Actor instances.

  • Fixed a crash when reimporting a UDIMs base texture that was renamed.

  • Fixed a crash caused by Replace References.

  • Fixed a crash that occurred when trying to use Blueprints derived from AUsdStageActor in standalone mode.

Bug Fix:

  • Fixed a bug with the CSVToSVG tool that caused invalid HTML to be generated when system locale used commas as the decimal separator.

  • The Multi-User actor no longer displays in raytraced reflections when running in -game mode.

  • Fixed an issue where water actor sprites would not load due to Water Subsystem being nullptr in the actor constructors.

  • Client windows no longer spawn in a position where their title bars are hidden.

  • Fixed a bug where the first texture imported in an Editor session could have the wrong settings applied to it.

  • The type of first texture imported in an Editor session is now correctly identified.

  • ConfigureEnabledPlugins() now reports success when plugin count is zero. (Contributed by WenchaoXia)

  • The Ctrl + Alt + Shift + P keyboard shortcut now works while in Play In Editor mode.

  • Fixed an issue with a sub-level not being garbage collected properly when creating a new world from a template.

  • Fixed a sub-level offset issue that happened when loading a top-level world in World Composition when that sub-level had been already loaded.

  • Added a missing water sprite category in the viewport options. Billboard components now need to be added to the CDO in order to be detected by the Editor as proper sprite categories.

  • Fixed an issue that caused the icon for river water body actors to appear oversized the first time a water actor was placed in the level.

  • Fixed two separate issues that prevented the Goto Definition Editor feature from working in relocated Installed Builds.

  • Added support for displaying floats greater than e18 in the Editor, and removed cast losing double precision.

  • Fixed a bug that prevented reporting when not using the crash reporter. (Contributed by Phyronnaz)

  • SDetailsViewBase now allows deferred actions to call EnqueueDeferredAction. These additional deferred actions are then immediately processed in the same frame.

  • Fixed a bug with instanced objects not updating the reset to default state in the parent object when changed.

  • Fixed a bug where explicitly setting the IsEnabled attribute of an FDetailWidgetRow would not be respected, because SDetailSingleItemRow was only checking IsBound(), not IsSet() as well.

  • The Paint tool is now correctly grayed out when painting textures with mesh paint if the mesh has no paintable textures to cycle through.

  • Fixed an issue that caused Fixed FApiContext::AddSearchPath to register a folder's parent folder to the MDL path instead of the folder that was requested.

  • Fixed an issue that caused a missing portable call stack in the crash report generated when the Editor had more than 256 threads and the crashing thread was not in the first 256 threads visited by the OS.

  • Fixed an issue that caused the Editor to deadlock randomly while reporting a failed ensure().

  • Fixed an issue that caused sublevel components to fail to toggle when changing sublevel visibility in the Editor.

  • Fixed an issue that caused the crash reporter UI to sometimes take several minutes to process and display crash information after an Editor crash.

  • Fixed a bug that caused HighRes Screenshot SetResolution to ignore Resolution Scale.

  • Improved the messaging for file I/O errors in JSON deserializer that usually happened when users ran the Editor from a network drive that disconnected or failed to read.

  • Fixed an issue where specifying multiple TCP connection endpoints from the command line did not work.

  • Fixed a bug that prevented Camera Shake Actors from previewing correctly.

  • Range selection in the Persona tree view now behaves correctly when the initial selection is made from the viewport and the second selection is made from the tree view.

  • Updated string table CSV export to apply the .csv extension.

  • Fixed a bug that caused disabled toolbar combo buttons to incorrectly appear enabled when shown in a sub-menu.

  • Fix loading map status text displaying the word "loading" twice.

  • Fixed duplicated transactions when pasting sub-objects

  • Fixed an issue where some Asset editors would end up in a non-functional state after a window closing request was canceled, including the Blueprint Editor showing 'Unrecognized Tab' panels.

  • Preview widgets are now marked as being in Design mode before being destroyed, to prevent them from invoking NativeDestruct in the Editor.

  • Added ConditionalPostLoad call before building collision on a display mesh, fixing a potential issue where complex collision meshes didn't work properly in PIE.

  • Transient Actors spawned through BP are now also transactional.

  • Fixed an issue with FBX exporting where multiple meshes with the same material would receive the default material instead.

  • Camera piloting now takes into account the camera component's additive offset.

  • Fixed issue where SkipProperty wasn't being passed to WriteRow in the data table CSV writer.

  • Fixed a vulnerability due to an integer overflow and a heap overflow when loading a modified TGA file.

  • Fixed 'More Actions' menu items not doing anything when using the embedded gameplay tags editor within the Blueprint editor details panel.

  • Fixed an issue where transform changes were applied twice to attached Actors when selecting both the Actor and its parent.

  • SGraphEditor now correctly returns the value of GetSingleSelectedNode.

  • Fixed an issue where expansion state was not being properly retained in trees with more than 500 items

  • The new mesh paint mode is now correctly hidden if legacy mode is set in the Editor preferences.

  • Fixed an issue that caused map built data to be marked dirty too aggressively (for example, when placing an invisible / logical actor that did not affect lighting in the Level).

  • Fix a crash that happened when syncing out of date Assets in the Editor if a dependency package was not found.

  • Fixed a crash that happened when importing an OBJ file and using the create instanced materials option.

  • Updated AdvancedCopyPackages to pass the bShouldSuppressUI flag in headless mode.

  • Fixed FEditorModeTools::IsSelectionAllowed to allow selection if any Editor modes do instead of just checking the last mode in the list.

  • Fix an issue that caused a duplicate copy of a package to remain on disk with the old name when renaming the package.

  • Open Color IO UI: Fixed a UI issue where Colospace Index was not serialized into string and therefore appeared as invalid on instanced objects.

  • Fixed a bug that caused DPI adjustment to be incorrectly applied to the new window spawned when starting PIE.

  • Fixed an issue where socket snapping didn't work unless the component was the root component.

  • Base brush properties (size, strength, and falloff) are now correctly restored after leaving and re-entering Mesh Paint mode.

  • Fixed an import problem with FBXs containing LODs with meshes which could not be triangulated (for example, due to being non-manifold). Problematic meshes will be omitted and a warning will be generated. If a LOD cannot be imported at all, it will be auto-generated instead.

  • Fixed a hang during startup when a Blueprint-based Trace Source filter was active.

  • Fixed a bug with spline component Undo/Redo when the component was selected, rather than the Actor.

  • Reimporting a .FBX file no longer deletes custom metadata on the reimported assets. Only the FBX metadata are now affected by the reimport.

  • Fixed an issue where the FBX import would wrongly assume the importing of a skeletal mesh when the FBX file contained animation but no skeletal mesh.

  • Fixed a potential failure in the FBX collision mesh import.

  • When importing a FBX file, fixed an issue where some custom curves configurations were not properly imported, causing incorrect tangents.

  • Fixed a bug in the editor which would open the file selection window twice when reimporting an asset with the "reimport with new file" option.

  • In MDLimporter, clears the log error when an .mdl file can't be imported because the plugin was built without MDL SDK.

Cascade

Crash Fix:

  • UParticleModule is now marked as within ParticleSystem to prevent instancing with other outers, which caused several crashes.

Content Browser

New:

  • Asset tooltips now display data tags based on the asset's parent class.

  • Added a Writable Content filter to the Content Browser.

Bug Fix:

  • Fixed a bug that prevented any type of Haptic Feedback assets from being created in the Content Browser.

  • Fixed a bug that prevented the creation of Sub UV Animation assets from the Content Browser.

  • Fixed a bug that prevented the creation of UForceFeedbackAttenuation assets from the Content Browser.

  • Fixed a bug that prevented native classes from appearing in the Content Browser Collections.

  • Fixed a bug that caused thumbnails for child Blueprints which override parent Blueprint data to render incorrectly.

  • Updated SetPrimaryContentBrowser in FContentBrowserSingleton to verify that the browser can be set as primary.

  • Fixed an issue where files could not be dragged into new folders in the Content Browser's column view.

  • Optimized source control operations when renaming Assets to fix a large stall when renaming or moving a large number of files.

  • Advanced copy will now find all dependencies, even if they are not in memory.

Geometry

  • Prevent crashes when creating mesh sections in ProceduralMeshComponent with out-of-bounds vertex indices or non-unique vertex indices within a triangle.

Material Editor

New:

  • Added tooltips for Scalar parameters in the Material Editor.

  • Added support for texture arrays with TextureSize material expression.

  • Added local variables and portal nodes to Material Graph. (Contributed by Phyronnaz)

Optimization:

  • Sped up opening material editor for material instances with many parameters.

Crash Fix:

  • When a material function changes, all in-memory material functions are now checked to see if they use that function, and recompiled if they do.

Bug Fix:

  • Vector parameter children should now be editable as expected when the vector parameter is overridden.

  • Stopped unnecessary recompilation of shaders when changing texture compression.

Media Framework

New:

  • Overhauled AMF support, including support for Linux.

  • Media Capture: Added support for unconventional pixel formats such as R, RG, RGB10A2, and BGR.

  • Merged alpha manipulation function into one shader. Media capture options allow you to force the alpha channel to be set to 1. This is useful if the render target doesn't have an alpha channel.

  • Upgraded NVENC to version 10.0.

  • Overhauled AVEncoder to support Linux and Windows with both NVENC and AMF.

Scripting

  • Added GetLevels in EditorLevelUtils for Blueprint and Python scripting.

  • Added a function to EditorStaticMeshLibrary for setting material slot assignment for LODs.

  • Exposed UEditorLevelLibrary::ReplaceSelectedActors to Python.

Bug Fix:

  • Updated Editor utility widgets to not dirty the level when reinstancing.

  • Fixed an issue where utility widgets could fail to spawn properly on Editor startup.

Static Mesh Editor

Crash Fix:

  • Fixed a crash that happened when the Preview Scene Settings tab was spawned before the Viewport tab.

USD

New:

  • Added support for the treatAsPoint attribute on UsdSphereLights. This attribute will change how the light surface is calculated when converting USD light units to physical light units.

  • Added support for the UsdLuxShapingAPI schema. If a sphere light has the schema, a spot light component will be generated in UE and its cone angle will be set according to the cone angle attribute.

  • Added support for USD render contexts. When parsing materials, Unreal Engine will now load the shaders associated with the requested render context.

  • User code can register new render contexts to display in the USD Stage Editor.

  • Added the ability to export an Anim Sequence asset to a USD file.

  • Added progress display to the USD Stage asset creation steps.

  • Added support for the UsdLuxLight exposure attribute when calculating the light intensity for Unreal.

  • Added support for the EmissiveColor input when parsing UsdPreviewSurface materials.

  • Improved the conversion from Unreal skylight components to UsdLuxDomeLights. The cubemap will now be written out as relative to the USD layer Unreal Engine is writing to.

  • Attributes will now be written out to the default time code instead of at the UsdStageActor time.

  • Added an asset cache to speed up reloads for USD Stage actors. Textures can be persisted in the cache and won't be recreated unless the source file has changed since the last time it was processed.

  • Added support for the USD MDL Schema in the USD importer. This enables referencing MDL materials in a USD file and importing those in Unreal.

  • Updated the USD SDK to version 21.05.

  • Added a script to convert USD lights to the new USDLuxLight schema in USD 21.05. The script is located in "Engine\Plugins\Importers\USDImporter\Content\Python\usd_unreal\update_lights_to_21_05.py". Detailed instructions can be found within the script itself.

  • More warnings and feedback have been added for when the prim configuration is incorrect for the parsing of LOD meshes from USD files.

  • Persistent support was added for muting tracks and disabling sections on the Level Sequence Asset generated when opening a USD Stage.

  • Improved the undo/redo and multi-user support for USD stage manipulation via the USD Stage Editor window. Most operations and attribute changes are now tracked.

  • Added Blueprint and Python functions to fetch prim/component/asset correspondence for opened USD Stages via the USD Stage Editor window.

  • Allows editing other properties via the prim properties panel on the USD Stage Editor window.

  • You can now use tags to correctly handle USD-style pruning visibility when toggling Scene Component visible flags and prim visibilities in the USD Stage Editor.

  • There has been a complete rewrite of the level exporter to USD to add support for exporting foliage, landscapes and sublevels, and to update legacy scripts to Python 3.

  • In-memory stages are now created when using File > New on the USD Stage Editor instead of immediately presenting the Save prompt.

  • Stabilized behavior of AUsd Stage Actor when it is a Blueprint parent class.

  • Allows exporting Static/Skeletal Meshes and scenes to USD using dedicated payload files.

  • Back light and camera component property changes are now written to the opened USD Stage when edited on spawned components.

  • Removed the dedicated stage info panel on the USD Stage Editor. This now shows (along with more data) when no prim is selected; additionally, the stage now shows as the root prim entry on the stage tree view.

  • Synchronizing prim selection on the USD Stage Editor window with viewport selection is now allowed by picking Options > Selection > Synchronize with Editor on that window.

  • A dedicated asset cache has been created to store the assets generated from opened USD Stages to the AUsdStageActor.

  • Added static and skeletal mesh export options when exporting to USD to allow setting of Meters Per Unit and Up Axis.

  • Changed how the Usd Stage Actor binds stage loading and unloading to actor lifecycle functions. This provides more predictable behavior in complex scenarios like level streaming, switching levels during PIE, and Movie Render Queue operations.

  • Added support for loading USD files at runtime.

  • Changed the USD material import workflow to use master materials instead of generating new materials on each import.

  • Support has been added for renaming prims via the USD Stage Editor.

  • Added an export options dialog when exporting UAnim Sequence assets to USD.

Crash Fix:

  • No longer crashes during reimport of a material from USD when the original replaced material is currently in use on the scene.

  • Trying to import LOD meshes out of some elaborate prim hierarchies in USD files no longer causes crashes.

  • Sequencer no longer crashes if an opened USD Stage has animations and startTimeCode < endTimeCode.

  • Fixed a crash that occurred when loading a project with the USD Stage Editor window open in the layout along with a startup level without an AUsd Stage Actor.

  • Fixed a crash that occurred when handling mesh components with material overrides on LOD meshes from USD Stages.

  • A crash no longer occurs when switching levels after opening USD Stages that generated UGeometry Cache assets.

  • Fixed multiple crashes when parsing LOD meshes out of USD variant sets while opening a USD Stage.

Bug Fix:

  • Fixed an issue that caused texture file names to be lost when importing from USDz packages.

  • Fixed an issue that caused only one texture to be imported from USDz packages.

  • Fixed an issue where the cubemap was not getting assigned to the SkyLightComponent if the texture was already cached.

  • On the USD Stage Editor window, fixed the right-click interactions on prims inside variant sets.

  • An issue where USD AnimSequence exporter was not, in some cases, finding a preview mesh to export with has been resolved.

  • Fixed incorrect skeleton matching when exporting AnimSequences/SkeletalMeshes to USD in some instances, such as when the mesh's skeleton differs slightly from the skeleton asset.

  • Fixed the USD stage sometimes failing to close after interacting with prims on the stage tree view (left pane) of the USD Stage Editor window.

  • Fixed an issue where the USD stage would unnecessarily close or open when the USD Stage Actor was in a persistent level that was hidden or shown.

  • The stage now properly closes and reopens when the USD Stage Actor is in a streamed sublevel that is hidden or shown.

  • Fixed the Post Edit Change Property so it no longer forces the USD stage to load when already loaded.

  • A warning now displays if cubemap is not found on the filesystem when setting it onto a USD prim.

  • Incorrect color space conversion was corrected when importing vertex colors from USD geom meshes.

  • Fixed an issue so skeletal meshes are no longer visible on the viewport in some scenarios after exporting UAnimSequence assets as USDs.

  • The USD Stage Importer now uses the provided import options if triggered from an automated task.

  • Fix camera transform orientation compensation when writing back camera transforms to the USD stage.

  • Spawned components are no longer left in an invalid state after undoing a transaction where their owning AUsd Stage Actor is deleted.

  • Fixed a stationary light overlap problem for lights imported or spawned from USD files.

  • Fixed an issue where USD Stages and layers remained open even after being closed via the USD Stage Editor window.

  • Fixed the AUsd Stage Actor trying to use a deleted Level Sequence in some scenarios.

  • Fixed an issue where normal maps would disappear in the MeshEditor tab of the Static Mesh Editor for some meshes imported from USD files.

  • Added support for material overrides on Point Instancer prototypes when opening/importing them from USD Stages.

  • Fix an issue of spawned actors and components being visible for an AUsd Stage Actor in a hidden level or layer opened a new USD Stage.

  • It is now possible to mute/unmute USD layers via the USD Stage Editor window if the root layer is within the project's folder. This fix included a way to add USD layers as a sublayers of themselves.

  • Fixed some USD meshes that were losing their UV sets when opened with the USD Stage Editor and imported with Actions > Import.

VR-Editor

Crash Fix:

  • Disabled the placement of VR editor mode gizmo actors from the place actors panel. This prevents the VR gizmo actors from saving into a level and causing a crash when that level is deserialized.

World Browser

Bug Fix:

  • Fixed an issue where the Level Browser would lose folder information when switching streaming type.

Gameplay Framework

New:

  • Added GetSquaredHorizontalDistanceTo function to Actor class.

  • Added FindNearestActor function to Gameplay Statics class.

  • Added BindKey with key signature delegate to Input Component class.

  • Can now hide all unused pins when using Blueprint Make Struct nodes.

  • PlayerState Actor's IsOnlyASpectator function is now exposed to Blueprints.

  • Action level modifiers and triggers are evaluated in a second pass, after all mapping level modifiers and triggers. \

  • Added new Blueprint Compiler options and internal reinstancer flags to allow users to enable delta serialization.

  • Camera modifiers; including Camera Shakes, will now affect post-process settings. Matinee Camera Animations are played directly by the Player Camera Manager.

  • Moved legacy Matinee Camera Shake into the new GameplayCameras plugin. This makes it possible to add a Sequence shake pattern onto this class, because Matinee is deprecated and will be removed in a future version.

  • Moved Camera Shake implementation in a "shake pattern" class, leaving the base class as a container. This is to make it easier for artists to change a shake completely without having to make a new one, as well as for programmers to write new shake behaviors that can work with existing ones.

  • Game feature action for adding a Data table or Curve table as a Data Registry source.

  • Modified UGameplayAbility's PreActivate method to optionally take in trigger event data.

  • Newly placed comment nodes will no longer show comment bubbles when a graph is zoomed out.

  • Applied limits to Camera Shake Rotation when not using headsets.

  • When restarting a single-instance camera shake that was blending out, the current blending weight will transfer into a blend-in if appropriate.

  • Camera shakes with a custom duration can provide a "hint" of that duration.

  • Camera shake time-keeping and result handling logic have been refactored for reusability. \

  • Added new method ‘GrantAndActivateAbilityOnSelfWithParams' which allows Designers to pass in FGameplayEventData when granting and then activating an ability from Blueprint.

  • Sequence camera shake can now animate post process settings, and better handles the difference between focal length and field of view.

  • Added support for a custom camera shake initializer.

  • Added API for scrubbing camera shakes. This results in better support for putting shakes inside sequences.

  • Removed an unused virtual method ‘ApplyStackingLogicPostApplyAsSource' in the ActiveGameplayEffectsContainer class and made the destructor of the ActiveGameplayEffectsContainer class non-virtual.

  • Changed the Gameplay Cue Interface to pass Gameplay Cue Parameters Struct by reference.

  • Added more support to filter Gameplay Tags in the Editor using a project-specific filter. OnFilterGameplayTag supplies the referencing property and the tag source, so you can filter tags based on what asset is requesting the tag.

  • Improved Asset Manager to support virtual paths like AssetSearchRoots that can be replaced with dynamically set paths. Additionally, several new utility functions have been exposed as part of increased support for data registries and game plugins. \

  • Added OnActorPreSpawnInitialization delegate which is broadcasted before the Actor and its components have been initialized.

  • Exposed SourceObject to GameplayAbility's K2_CanActivateAbility method.

  • Native Gameplay Tags. Introducing a new FNativeGameplayTag, these make it possible to do one off native tags that are correctly registered and unregistered when the module is loaded and unloaded.

  • Improved Scalable Floats in the Gameplay Abilities plugin to support dynamic lookup of curve tables from the new Data Registry system. Added a ScalableFloat header for easier reuse of the generic struct outside the abilities plugin.

  • Added option to preserve the original captured SourceTags when GameplayEffectSpec's class method SetContext is called after Initialization.

  • Editor-only references are no longer followed when assigning management references in the Asset Manager.

  • Improved UI for registering Gameplay Tags from specific plugins. The new tag UI now lets you select a plugin location on disk for newly added Gameplay Tag sources.

  • Exposed AddControlPointPosition and ResetControlPoints to Blueprint in the InterpToMovementComponent.

  • The script execution recursion limit is now stored in a cvar named bp.ScriptRecurseLimit. The default value on desktop is now 120 to match consoles, instead of the previous value, 250. You can set this value higher in the [Console] section of DefaultEngine.ini file if you need to keep the limit at 250 on desktop.

Optimization:

  • Improved member packing on FHitResult to reduce size from 148 bytes to 144 bytes.

  • Made several performance improvements to loading and regenerating the gameplay tag table were implemented so that this option would be optimized.

Crash Fix:

  • Fixed a crash when calling CanSelectActor on an Actor that is not in a level.

  • Fixed a crash that occurred on loading placeholders iteration.

  • Fixed a crash that occurs when dragging and dropping a Geometry Cache asset into Blueprint Editor viewport to instantiate a Geometry Cache Component.

  • Fixed a crash which occurred when applying instance changes to a Blueprint while a child Blueprint with different properties is also present in the level.

  • Fixed an Editor crash that could occur when reparenting a Blueprint with at least one Blueprint-added component to a duplicate of the Blueprint as the new parent class.

  • Fixed crash when diff a blueprint asset which contains an enum variable while the enum class has been moved to another file/ folder.

  • Fixed a serialization crash that could occur when a previously-compiled function's outer Blueprint class object had not yet been freed by Garbage Collection.

  • Fixed an ensure that occured when running in-game when a Text3D component was added in a Blueprint.

  • Fixed a crash when reinstancing a Blueprint with an abstract outer.

  • Fixed a crash that could happen when compiling a Blueprint after loading it for a diff.

Bug Fix:

  • In the Kismet Math Library, BlueprintAuthority has been removed from MinimumAreaRectangle .

  • Prevented the CharacterMovementComponent from continually sending client location corrections when World Origin is rebased.

  • Any Completed or Canceled action event delegates will now report proper timing data.

  • The upper threshold clamp on the input system's deadzone modifier is now applied correctly.

  • AxisConfig settings from the old input system are now ignored for all devices, except for mouse axis scaling.

  • Fixed a case where a Level Blueprint would not run during Play In Editor (PIE) sessions after the Editor had been restarted.

  • Linkage to UStaticMesh when inheriting from your own module has been fixed.

  • GamePlayEffectsContainer's SetActiveGameplayEffectLevel method will no longer dirty FastArray if setting the same EffectLevel.

  • Added null checks to prevent Garbage Collection crash in ChildActorComponent's DestroyChildActor class method.

  • Fixed Actors who are attached to the World Outliner as a Child Actor from becoming detached when a level is reloaded.

  • Improved the display of structs when watching their values in Blueprint.

  • Fixed split pin defaults from being wrong when splitting nested user defined structs.

  • Fixed a root motion source issue where a networked client could crash when an Actor finishes executing an ability that uses a constant force root motion task with a strength-over-time modifier.

  • Property chains will now resolve when old and new objects are not of the same class.

  • Fixed missing struct-typed TSet and TMap default value overrides in a dynamically-instanced Blueprint-added component when "optimized Blueprint component instancing" is enabled for an Actor class in a cooked build.

  • Added an additional check in GameFrameworkComponentManager while dealing with an AddComponentRequest call so we don't hit an ensure before the Actor has begun play.

  • Fixed an edge case in gameplay effect mixed replication mode where Actors not explicitly owned by the net connection but who utilize that connection from GetNetConnection will not receive mixed replication updates.

  • Fixed a case where cyclic dependencies could cause default values to be unloaded.

  • When checking if a Blueprint variable is in use, the Editor will now consider references from other Blueprints as well, Additionally this is used when attempting to delete a variable.

  • Fixed an endless recursion occuring in GameplayAbility's class method EndAbility which was called by calling EndAbility again from K2_OnEndAbility.

  • Allow wildcard connections to the wildcard pins in the Format Text node so that it can be used inside of macros.

  • Gameplay tags Blueprint pins will no longer be silently cleared if they are loaded before tags are registered. They now work the same as gameplay tag variables, and the behavior for both can be changed with the Clear Invalid Tags option in the Project Settings.

  • Improved thread safety of Gameplay Tag operations.

Deprecated:

  • Deprecated SimpleConstructionScript's class method GetAllNodesConst FBlueprintEditorUtils::FindSCS_Node, which now returns the USCS_Node pointer and not the index to the node.

Learning Resources

Content Examples

New:

  • DMX Fixtures - DMX spot lights now correctly emit constant total energy distributed over a dynamically changing cone area (steradians). This better mimics a real spotlight with zoom and affects both the light and the light beam.

Localization

  • FText::AsCurrencyBase now takes an optional additional parameter that can be used to override the number of fractional digits.

  • ICU timezone data has been updated to v2021a.

Bug Fix:

  • We now rebuild the package localization cache for all current cultures when the culture changes. Previously, we would only rebuild the cache for the current language, which could leave the asset group cultures uncached and lead to the incorrect localized package being used.

Mobile

New:

  • Added profile-guided optimization (PGO) to optimize build options to Android Toolchain. PGO-optimized builds can be up to 10% faster in some CPU-bound scenarios.

  • The Editor Preview Rendering Level mode now activates the IOS or Android device profiles in the editor, allowing mobile-specific console variables to be set.

  • In DefaultDeviceProfiles.ini, the PreviewAllowlistCVars and PreviewDenyListCVars arrays can be used to specify the CVars that will be applied when Preview Rendering Level is enabled.

  • Android now calls the Memory Warning Handler when triggered via Java-side on Memory Trim callback and memory advisor state changes.

  • Android GLES has a new texture LRU system that is enabled by default. 2D textures are now held in system memory until required for draw calls. The textures are returned to system memory after 500 frames of non-use.This reduces the GLES memory footprint for most devices; however, it can have an impact on performance, and should be disabled if many new textures are frequently required in a single frame. Setting r.OpenGL.DeferTextureCreation to 0 will disable the GLES texture LRU.

Crash Fix:

  • Fixed a crash in FSkeletalMeshObjectGPUSkin::GetSkinVertexFactory when no valid LOD render data is available — for example, due to platform MinLod.

Bug Fix:

  • Fixed the stat Draw Count mobile preview in the editor. It now displays correct draw count statistics

  • Android Java logging callback is now initialized earlier to capture more messages at startup.

  • When handling a fatal log message, Android now calls out to FCoreDelegates::OnHandleSystemError and FCoreDelegates::OnShutdownAfterError as well as filling GErrorExceptionDescription with the actual error string.

Android

New:

  • Added an option that allows DOM storage on Android WebView.

  • The CPU per-core frequency is now exposed to CSV Profiler and Unreal Insights.

  • HWC Pipe (GPU performance counters for ARM Mali) is now only enabled when -hwcpipe is specified in UE4CommandLine.txt.

  • Java can now pass logging to Unreal with NativeCalls.UELog* on Android.

  • While the editor is running, Android devices now maintain a port forwarded over USB to allow Cook-on-the-Fly (COTF) network file server and Unreal Insights to work without requiring WiFi connectivity. Specifying the IP address 127.0.0.1 will now allow Insights or COTF traffic to work across the USB cable.

  • Improvements for Memory Advisor include an updated crash reporter state at once instead of per property, and a 10-second delay on reporting less critical states.

  • Exposed the Memory Advisor's Memory Warning state (from 0, OK, to 2, Critical) to CSV Profiler and Unreal Insights.

  • Added a per-project Gradle-warning filter with Build/Android/GradleFilter.txt (see an example in Engine/Build/Android/Java).

  • SoC temperature and\or thermal notifications are now exposed to CSV Profiler and Unreal Insight. This information might be unavailable on some devices.

  • Exposed Android Memory Trim messages to the CSV profiler.

  • Added config rule variable access to Android's Device profile-matching rules. The SRC_ConfigRuleVar source type is now available to Android's Device Profile Selector. \ The 'MatchString' must be in the format of MatchString="<configrule.txt variable name>|<desiredmatchstring>". The <desiredmatchstring> will be used for the CMP operation against the actual value contained in <configrule.txt variable name>. \

    • Example: \ +MatchProfile=(Profile="Android_DeviceA",Match=((SourceType=SRC_ConfigRuleVar,CompareType=CMP_Equal,MatchString="DeviceA_Enabled|true") \ Thus Android_DeviceA will be matched if the config rule variable 'DeviceA_Enabled' CMP_Equal's 'true'.

  • Added preliminary support for DualSense controllers on Android.

  • Added support for alternate mouse events on Android to support DualShock4/DualSense controller touchpads.

  • Unregisters listeners from SensorManager when not being used to reduce the SensorManager battery cost.

  • Updated to use AndroidX instead of older support libraries.

Crash Fix:

  • Fixed crashes with the Android Web Browser Widget that were due to event delegates being called from the wrong thread.

Bug Fix:

  • Fixed the GooglePAD handling of disable checks.

  • Changed the handling of the Android console history to work with Android 11 (buttons instead of a swipe).

  • Updated Android distribution install scripts to use /data/local/tmp instead of /sdcard/Downloads for staging OBB files.

  • Fixed a permissions issue with access to UE4Game directories.

  • Updated the default icons and splash screens.

  • Fixed an issue with releasing previous media samples.

  • Corrected the per-file cost calculation of an OBB that is used to determine how to split up PAK files between OBBs.

  • Fixed an issue where the editor's Preview Rendering Level menu only showed the first Android preview platform even when OpenGL ES and Vulkan were both enabled.

  • Fixed high refresh rate support on Android 11 devices.

  • Fixed backup log saving on Android—now registers the log file in the UFS/NonUFS manifest after it is created so that it can be correctly backed up later.

  • The timestamp is now removed from the UFS/NonUFS manifest when a file is deleted on Android.

  • Fixed a GLES assert that could fire during PSO cache processing if the incoming PSO had already been rendered/instantiated before PSO cache loading began.

  • Fixed an issue when UE failed to detect Samsung's family of Exynos SoCs, and would not set Big\Little core affinity masks for threads.

  • Included a config rules version in logging.

  • Now uses proper line endings for Android install scripts based on the target platform.

  • Fixed Android gyro rotation.

  • Fixed ProGuard to keep defaults for AndroidX annotations.

  • Added cleanup of previous APK/AAB before the packaging step to fix an issue with package size growth.

iOS

New:

  • Added an option under Project Settings > IOS, to allow you to override the path on the remote build Mac where iOS builds are performed. This is useful for saving space on the primary hard drive on a remote Mac.

Crash Fix:

  • No longer crashes when destroying text entry fields on iOS.

  • Fixed a crash that occurred when trying to open a new dialog while an existing dialog is transitioning in or out.

Bug Fix:

  • Fixed a texture leak related to movie player on iOS devices.

  • Fixed some capitalization issues with iOS in plugins. When using Whitelist Platforms inside a uplugin file, the correct syntax for iOS is "IOS" not "iOS". Using the incorrect case can cause dependency problems.

  • iOS now uses a default compressed format for textures set to BC7 compression instead of falling back to uncompressed formats.

  • Fixed a path-quoting issue linking Frameworks that caused link errors for IOS when using the Launcher binary build.

  • Fixed a bug in iPhonePackager Mach-O handling by updating signatures to use SHA-256. This resolves a problem where iOS apps built on a PC or re-signed by iPhonePackager would fail to load on iOS 14.5 or later.

  • Fixed build errors when compiling iOS C++ on Mac using Unreal Engine installed from the Mac Epic Games Launcher.

Networking

New:

  • Updated PacketHandler components so that they can be added from non-engine C++ using a delegate.

  • Added a maximum number of retry-attempt settings for message bus UDP messaging auto repair mode.

  • Updated IpNetDriver‘s maximum time budget check in the packet reception iterator to correctly check only after a specified number of packets

  • Added optional logging of synchronous loads triggered by the replication system.

  • Modified the "LogNet: NotifyStreamingLevelUnload" to verbose by default to prevent log spam.

Crash Fix:

  • Fixed crashes when trying to clone adapter addresses when none are available.

  • Fixed issue causing potential crashes in SetNetDormancy.

  • Fixed crash issue caused when UDP message errors are received after the UDPMessaging module is unloaded.

  • Added null check to GetLevel() in UNetConnection::UpdateLevelVisibility.

  • Fixed potential crashes in server NetDriver code.

Bug Fix:

  • Fixed issue in which DTLS packet handler failed to connect under high-packet-loss conditions.

  • Fixed a potential underflow error in the DTLS packet handler.

  • Fixed issue in which invalid authentication tags prevent the AESGCM packet handler from connecting.

  • Suppressed expected warnings triggered by NetPacketNotifyTests.

  • Fixed issue in which fast array struct delta serialization does not properly resend on NAK.

  • Added a check to detect RPC calls from non-game threads.

  • Fixed issue where UniqueNetIdRepl replicated when the net ID string is numeric and contains the + or - character, or has an odd number of digits.

  • Fixed a rare hash collision within shared property serialization.

  • Optimized the building of LevelsToTick list in LevelCollection to reduce build time.

  • Prevented InitConnect from failing during IpNetDriver's garbage collection.

Beacons

Crash Fix:

  • If an OnlineBeacon attempts to destroy the NetDriver while the NetDriver is ticking, the destruction operation will be deferred to PostTick to prevent a crash.

Network Emulation

New:

  • Added Net.DisconnectSimulatedConnections cheat to disconnect simulated connections.

Bug Fix:

  • Prevented SimulatedConnections from destroying PlayerController when disconnected.

Replays

New:

  • Added a path export table to network GUID cache serialization in checkpoints to reduce its size.

  • Added option to not reload the default map after a replay stops.

  • Added a flag to replay headers indicating recording connection type.

Crash Fix:

  • Fixed crash issue during delta checkpoint loading.

  • Fixed a replay crash when scrubbing in the editor.

Bug Fix:

  • Updated ReplaySubsystem::PlayReplay to use WorldOverride in StopExistingReplays.

  • Fixed regression where information about net startup Actors destroyed prior to recording start were lost.

  • Added broken channel cleanup during playback.

  • Added handling for serialization errors when reading net field export groups from a replay checkpoint.

  • Prevented replay delta checkpoints from recording unnecessary property data.

  • Prevented replays from incorrectly forwarding RPCs during playback to other drivers.

  • Fixed network path remapping when using duplicate level IDs.

  • Fixed delayed replication when using replay connection recording.

  • Fixed an issue when recording DORM_Never Actors into checkpoints.

  • Prevented delta checkpoint recording from overflowing the changelist history.

  • Fixed an issue with reused destroyed channel index in amortized checkpoint recording.

  • Fixed cleanup for broken Actor channels that never spawned.

  • Fixed uninitialized members of FMulticastRecordOptions.

  • Prevented inactive property changelist from being modified by replay checkpoints.

  • Fixed a replay ensure by using the base function when finding the layout for a received RPC.

  • Fixed issue when the server could stop replicating based on the position of the replay connection.

  • Removed unused checksums from replay GUID serialization.

Replication Graph

New:

  • Exposed the LogReplicationGraph category.

  • Optimized DormancyNodes in ReplicationGraph using a configurable setting to improve RepGraph performance when adding or removing dormant Actors after multiple clients disconnected.

  • Added number of total connections replicated during a frame to the FFrameReplicationStats.

  • Updated ReplicationGraph to send statistics on replicated Actors on every frame that must be collected using PostServerReplicateStats.

  • Optimized ReplicationGraph by allowing ConnectionDormancy nodes to be considered obsolete if they have not been gathered for a specified time.

  • Added the ability to log statistics on all RepLists held by RepGraphNodes using Net.RepGraph.Lists.Stats.

  • ActorList nodes will now empty their RepList on TearDown.

  • Added TearDown support to StreamingLevelListCollection.

Bug Fix:

  • Updated the DynamicSpatialFrequency node's ActorChannelCloseFrameNum to prevent dependent Actors from being prematurely destroyed.

  • Fixed an issue where multicast RPC channel opens ignored Actor's bOnlyRelevantToOwner flag.

  • Fixed issues when a join a progress client reused the pointer of a disconnected client.

  • Fixed RemoveClientConnection not removing the proper GraphConnection if it was in the PendingConnection list

  • Fixed the GraphConnection's ConnectionId potentially clashing after removing a NetConnection

Deprecated:

  • Renamed GraphConnection's ConnectionId to ConnectionOrderNum. This is to prevent users from thinking the ID persists across the lifetime of the object. It is only unique during a single tick of the RepGraph and will change during a session as clients join and disconnect.

  • FActorRepListRefView::ResetToNull is deprecated and has been renamed to TearDown.

  • Deprecated the FActorRepListRawView struct in favor of the new FActorRepListConstView, which uses a cleaner interface to the allowed operations when parsing a gathered list.

  • Updated DependantActor lists to use a TArray instead of a FActorRepListRefView which reduces the number of allocated lists in the list pool.

  • Updated FActorRepListRefView to use TArrays to store its replication list instead of FActorRepLists which increases its overall performance by up to 10 times.

  • Deprecated IsValid and PrepareForWrite.

  • Deprecated Remove() in favor of RemoveFast and RemoveSlow.

  • Deprecated the PreAllocateRepLists function.

Socket Subsystem

New:

  • Added a warning to BSDSockets for when the destination protocol does not match protocol.

  • Added a warning to FUdpSocketReceiver when MaxReadBufferSize limit is reached.

Niagara

  • Added new Asset type "Niagara Parameter Definitions." The Niagara Parameter Definitions Asset allows defining a set of parameters, and those definitions are shared with all Niagara Scripts, Emitters and Systems in the project. The intended use for Niagara Parameter Definitions is to predefine a name, type and description for parameters used in Scripts, Emitters and Systems, and automatically synchronize changes to the parameter definition's name, default value, and description with all parameters it is linked to.

    • Menus to add parameters in Niagara Scripts, Emitters, and Systems are now populated by all Parameter Definitions in the project.

    • Parameters that share the same Namespace, Name and Type with a Parameter Definition are now linked to the Parameter Definition. The description, default value and name of the Parameter Definition are synchronized to all Parameters it is linked with.

    • Parameters have a new default value mode "Definition". Parameters that are linked to a Parameter Definition can choose "Definition" as the default value mode. This automatically copies the Default Value Mode and Default Value of the linked Parameter Definition to the parameter.

    • Parameters created before a Parameter Definition but which share the same Namespace, Name and Type with the Parameter Definition will become linked to the Parameter Definition. The Parameter's description will be overwritten with the description of the linked Parameter Definition. If the Parameter default value is different from the default value of the linked Parameter Definition, the Parameter retains its default value; otherwise, the Parameter has its default value mode set to Definition, and its default value will be overwritten with that of the linked Parameter Definition.

  • Users can now handle a buildup of render ticks inside the batcher in a user-selectable way. Use "fx.Niagara.Batcher.TickFlush.Mode" to select the mode (Do Nothing, Process, Kill). Use "fx.Niagara.Batcher.TickFlush.MaxQueuedFrames" to decide how many frames before you need to flush.

  • Added a new Select node that can use an Index type for its selector pin (bool, integer, enum). This is used to select one or more values at runtime, based on the input of the selector pin.

  • Previously established output types in the Select and Static Switch nodes can now be altered by using the "Pin Type Selector" next to its respective output pins.

  • A wildcard pin type in the Select node now allows changes to the existing pin types using drag-and-drop.

  • Added to Mesh Arrays:

    • Added the ability to choose multiple Static Mesh resources for the Mesh Renderer (selectable via Particles.MeshIndex).

    • Added "Mesh Flipbook" feature to fill the array with a sequence of Static Mesh assets.

    • Added a Mesh Renderer Info data interface, to enable systems to query info about their mesh renderers (such as the number of meshes selected and the bounds of each).

  • New menus and features have been added to the Niagara Editor. This includes options for better filtering, as well as a "Suggested" section in the modules, dynamic input, and Script action menus that will list often used actions at the top. Scripts and Modules can be marked as "Suggested" in the metadata.

  • Exposed Collision Material Surface ID on Niagara's CPU Collision Module.

  • Added a random seed offset to Niagara System instances, to allow for variance between duplicated deterministic systems (this must be set on either the component or from Blueprint before activating the system when spawning).

  • Curves can now be exposed to material bindings.

  • The Select and Static Switch nodes driven by an enum will now automatically refresh when the enum is changed. This excludes Static Switch nodes created before this release.

  • Render target Data Interfaces can now be an iteration source. You can not read from the render target, as they do not handle flipping buffers correctly, so they are considered write-only.

  • You can use a Define to control partial write code generation; this enables you to keep the same functions for reading in, making it compatible with CustomHLSL. It also means Niagara doesn't rely on the compiler to strip out the bindings for input values, which has been unreliable on some platforms.

  • Added "Source Mode" to the Skeletal and Static Mesh Data Interfaces, so users can more explicitly identify where the source mesh should come from.

  • Added support for tooltips on Data Interface function inputs and outputs.

  • Niagara now supports configurable playback speeds in its editor settings.

    • New shortcut: S key isolates all currently selected Emitters.

    • New shortcut: D key disables all currently selected Emitters.

  • Added options to control how many bits we use to store probability/alias buffers for uniform sampling. The default is set to 24 bits, triangle 8 bits probability, allowing for 16.7 million triangles.

  • For Niagara 2D gas fluids, added offset to the Advect Scalar Module, to allow for the parent velocity to be used without it integrating into the sim's local velocity grid.

  • Added Niagara Texture 2D Array Data Interface.

  • If a Static Switch is switching on an enum that isn't registered yet, it now can be registered as a Niagara-wide enum using the new context option.

  • Added the "Set Fixed Bounds (System)" command in the "Bounds" section of the toolbar. Previous command for Emitters is now only available if any Emitter is selected (in a System); it is always available when in an Emitter Asset.

  • Added a new Waveform Module and Dynamic Input which can be used to generate and combine many different waveforms, including: triangle, square, sawtooth, trigonometric functions and multiple spline variants.

  • In Niagara 2D Fluid, added a world space noise option to the turbulence field module (the default is "Off").

  • Added an option to the Light Renderer to scale light brightness by color alpha.

  • Added support for overriding textures used with UNiagaraDataInterface2DArrayTexture.

  • Added "Renderer Visibility" to the Component Renderer, and fixed a bug where components would be deactivated but not set to invisible when a particle dies.

  • Added the ability to collide with custom depth in the Collision Query Data Interface.

  • Grid3D Updates: Added a preview.

  • New: Grid3D Updates: Users can now expose user parameter/render target binding to materials.

  • New: Grid3D Updates: Added an override for material/resolution selection.

  • New: Grid3D Updates: Added Details so users can display Attribute names (when hooked up).

  • Added mip map generation options to Niagara Render Target 2D.

  • Added a variable binding for the Pivot Offset of Niagara sprites.

  • Added an Inherit Source Movement module which emulates the Cascade Source Movement module.

  • Added "Default Exponent" (value to use when a variable is not bound) and "Renderer Visibility" to the Niagara Light Renderer.

  • Added Distance Culling and Renderer Visibility to the Niagara Sprite Renderer.

  • Added GPU support for GetFilteredSocketTransform.

  • Added symbolic search capability (+,-,*,/) in the search filter for common math dynamic inputs such as add, divide, and some boolean operations.

  • Added Show Flag for Niagara.

  • Improved Niagara's indirect dispatch argument buffer allocation scheme (the buffer that is used for GPU systems and for culling and sorting meshes and sprites).

  • Niagara now allows Particle Reader to be used as an iteration source.

  • Added "Pivot Offset" to the Niagara Mesh Renderer.

  • Exposed CustomDepth to the gbuffer interface.

  • Added support for the 2D Array Render Target.

  • New Static Switch nodes that switch on an enum will now automatically refresh upon load, or if it's open. Old Static Switch nodes will not do that, they do not break existing usages. CVar "Niagara.StaticSwitch.EnableAutoRefreshOldStaticSwitches" has been introduced to enable refreshes on old static switches as well.

  • New: Enum context options for Select and Static Switch when user performs a right-click on these nodes.

  • Added the ability to right-click and select "Auto-fill all options" on various array properties in Niagara (such as "Filtered Bones" on a Skeletal Mesh Data Interface).

  • Added unused attribute trimming for Niagara particle scripts. \ This improves the existing heuristics for figuring out which particle attributes are not needed (either by a renderer or an external reader), and adjusts the generated code so that the attributes can be stripped. This results in a ~25% reduction in particle payload for typical scripts.

  • Made updates to static VectorField. CPU data is now stored as a half3 (instead of float4) when ISPC is available, and an ISPC kernel has been added to the Niagara DI for sampling. For supported platforms, it reduces memory cost (from 16 bpp to 6 bpp) and improves sampling time (2x speedup).

  • Refactored significance handling. This now allows for various metrics such as Age and Distance. Projects can also define their own game-aware significance calculations. Spawn Only EffectTypes also have the option to consider the significance of Systems when spawning.

  • New: Systems with Dynamic Bounds can now make use of visibility culling.

  • New: Exposed fx.Niagara.Quality level as a System constant.

  • New: Added a new Data Interface that allows checking of the current platform. As an example, this can drive specific behavior that only works on a certain platform.

  • Optimized FNiagaraScalabilityManager for cases where there are large numbers of registered components. It now tries to meter out updates to scalability state over a number of frames, limited by a new cvar (fx.ScalabilityMaxUpdatesPerFrame) and based on the frequency of updates. It cleans up how significance is processed, so that it is done only for necessary components. It updates how we consider the component state to be dirty, which limits how often Niagara tries to unnecessarily activate/deactivate components.

  • Added a new instance count culling option, to cull for each System as well as for each effect type.

  • Updated the GridCollection2D and GridCollection3D node APIs to be more descriptive and consistent. Older paths still operate, but they are suppressed from creation.

  • Added a new experimental feature to Niagara Skeletal Mesh Data Interface, for generating and querying a quadtree mapping UV to the vertex index. A quadtree is created on demand for a given Skeletal Mesh when referenced by the Data Interface.

  • Prevented byte code generation by particle scripts for GPU emitters; this reduces runtime memory costs and compile time costs, and eliminates some edge cases where shader warnings can be generated.

  • Implemented RibbonRender DistanceFromStart to allow for correct train track-style UV tiling with minimal effort; spawn modules are being updated to set this by default.

  • Added a new module to the Skeletal Mesh Data Interface supporting adjacency information. A buffer containing up to 8 adjacent triangle indices for each vertex is created at runtime. Currently two methods are supported (on GPU only): one for retrieving an indexed element from the buffer, and one for finding the first adjacent triangle.

  • Niagara now supports reading barycentric coordinates and adjacency information. This allows users to traverse Skeletal Meshes using those values.

  • Implemented tessellation across ribbon width, this helps reduce stair stepping in UVs.

  • New: Implemented multiplane/sheet rendering for ribbons, similar to Cascades "Sheets".

  • New: Implemented tube ribbons with 3-16 sides, and custom shaped ribbons with 3-16 sides.

  • NiagaraPlatformSet now has the ability to select platforms based on arbitrary Float, Int or Bool CVars.

  • Added the ability for the Spline Data Interface to be driven by a User object variable.

  • Changed "Simulation is invalid..." message to "No active preview..." to better reflect the meaning of the message, which is that you don't have a preview simulation running, not that there's something actually wrong with the emitter.

  • The collision module now supports post-solve collisions.

  • Added a new mode "Fail if not previously set" to defaults; it makes Niagara generate a compile error if the variable hasn't been set previously. This is optional within graphs, but is set any time a variable is linked in the stack. This is only for new changes, as old Assets in the field "work" but will likely be using these defaults unintentionally.

  • Implemented Emitter mode rendering for the Mesh Renderer. Implemented material parameter binding for both the Mesh Renderer and the Ribbon Renderer.

  • Added an optional property to NiagaraParameterCollections to allow a MaterialParameterCollection to drive values in Niagara. Parameters are automatically created when an MPC is assigned, and the backing parameter store is updated as changes are made to the MPC.

  • Niagara Outliner tab in the Niagara debugger now allows gathering and display of information about the current state of Niagara systems on the connected debugger client.

  • Fixed an issue with disabling simulation stages; they will no longer generate a shader for the stage.

  • Updated debug draw UI, so it only shows the option to turn it on or off if the module contains debug switches.

  • The Collision Module now returns the material type index when CPU ray casts are used.

  • Added the ability to output compiler metadata, called Compiler Output Tags. This will allow users to get named metadata, like MaxLifetime or bIsImmortal, out of a complicated particle System.

  • Added a category field for Niagara Emitters, to specify a sorting category when adding an Emitter using the New Asset wizard or the asset picker.

  • Niagara Outliner can now display performance information about Systems on the connected client.

  • Moved Niagara's SkeletalMess Generated Data to a more generic implementation so it can be used by other Systems.

  • Niagara now contains all of Pivot Painter's functions, except the full foliage simulator.

  • Tweaked the HLSL shader generation for GPU particle simulations to reduce the burden on the HLSL compiler. Added preprocessor directives to limit the scope of FSimulationContext for simulations using shader stages. Reduced compilation time by 20x (for serial compilation, about 10x for regular usage in the editor).

  • New features have been added for timed Niagara effect notify.

    • GetSpawnedEffect returns the system spawned for a given mesh component.

    • GetNotifyProgress returns a 0-1 progress value between the notify's beginning and end for a given mesh component.

  • Added a unified FX Budget. You can now track and budget Cascade and Niagara runtime costs together. Niagara has some new scalability features to act upon this, such as reducing cull distances and max instance counts when budget usage is high. Projects using the Significance Manager with Cascade or otherwise driving SetRequiredSignificance calls into Cascade can use the result of the FFXBudget function, GetWorstAdjustedUsage, to influence calculations. This function returns the worst current budget usage for GameThread, Concurrent Threads or Render Thread work. It also has some decay on the value to help prevent fast oscillations that could cause FX to turn off/on repeatedly.

CL: 16199909 (Niagara)

Bug Fix: Fixed a bug where linked module outputs could be renamed to a wrong namespace.

CL: 16223604 (Niagara)

Bug Fix: Dialogs and graph pins now correctly show tooltips for intrinsic Niagara parameters.

CL: 16355938 (Niagara)

Bug Fix: Fixed a crash caused by checking compile results when the rendering thread is suspended.

CL: 16369575 (Niagara)

New: You don't need to create full copies of scripts and graphs when compiling. You can reuse objects instead, using an object pool that increases compile performance.

CL: 16386669 (Niagara)

Bug Fix: Fixed a bug where the Parameters panel would show all attributes and not filter by Static Switch selection.

CL: 16389995 (Niagara)

Bug Fix: Fixed a bug where propagating a Static Switch would delete it from the Parameter panel.

CL: 16400325 (Niagara)

Bug Fix: Fixed a bug where the Script.Usage and Script.Context Static Switches would generate an error if a new default value was defined behind one of its branches.

CL: 16410927 (Niagara)

Bug Fix: When duplicating a parameter in the module editor, metadata is also copied.

CL: 16518408 (Niagara)

Bug Fix: Fixed an issue where the Simulation Stage iteration source was showing unrelated items in the dropdown. Also fixed a problem with Simulation Stag iteration sources not updating on rename.

CL: 16531962 (Niagara)

Bug Fix: Fixed a bug where a deleted renderer's name remained in the Editor data.

CL: 16590157 (Niagara)

Bug Fix: Fixed a bug where tooltips for Map Get were not showing the parameter description from the metadata.

CL: 16590574 (Niagara)

Bug Fix: Fixed a bug where creating a duplicate parent created a redirector instead of a new Emitter Asset.

CL: 16590726 (Niagara)

Bug Fix: Fixed a bug where resetting a NPC instance caused a crash.

CL: 16605005 (Niagara)

Bug Fix: Fixed a bug where various engine constants were not displayed. Also improved sorting in the "add" menu.

CL: 16605005 (Niagara)

Bug Fix: Fixed a bug where various engine constants were not displayed. Also improved sorting in the "add" menu.

  • Updated Niagara sprites and meshes so they provide precise motion vectors for motion blur and temporal anti-aliasing by default (as opposed to the prior linear motion approximation).

  • A project setting was added to the Niagara project settings (Default Motion Vector Setting) to globally choose between the previous behavior and the more precise new behavior; the setting can also be overridden individually for each renderer.

  • Added Niagara GpuReadback Opengl optimization.

Crash Fix:

  • Fixed a potential crash in Niagara meshes when sections have materials with invalid indices.

  • Fixed a crash in Niagara sprites.

Bug Fix:

  • Fixed bugs occurring with Niagara Mesh Particle distance and frustum culling in Point, Spot, and Rect light shadow.

  • Fixed issues occurring with Niagara mesh shadows when the shadows are frustum culled, or culled using VisibilityTag.

  • Fixed crashes related to Static Mesh Data Interfaces being assigned a mesh that was marked Pending Kill.

  • Fix a crash that could occur when cooked out Niagara Emitters reset on some platforms.

  • Fixed crashes that could occur in the Niagara Mesh Renderer when reloading the Static Mesh Asset, and then changing the mesh.

  • Fixed bugs in Niagara occurring with Instanced Stereo for VR.

  • Fixed an issue in Niagara Blueprint functions caused by passing None in for various objects.

  • Exposed the Position for Point Attraction as an Input, but defaulting to Particles.Position.

  • Fixed an issue causing incorrect skeleton calculation when a master pose is used on CPU.

  • Fixed crashes that occurred when re-importing a static mesh that was being used by a Mesh Renderer.

  • Fixed frame-behind issues with the Niagara Component Renderer.

  • Fixed Z-axis sampling for Niagara curl baked fields.

  • Added copy-paste support for comments in the Niagara Overview graph. Emitter node positioning has been updated to be consistent with comment nodes when pasted, and will be pasted at the cursor location.

  • Fixed an issue occurring when trying to sample a Skeletal Mesh that has no valid LOD data streamed in.

  • Added the memory used by the 3D Neighbor Grid Data Interface to Niagara's GPU memory stats.

  • Fixed a bug where occlusion queries did not take perspective into account.

  • Dynamic Parameters beyond Cascade's range now return the material default value rather than the same value for all inputs.

  • Fixed a bug with culling/visibility shader for GPU emitters, where it would attempt to cull dead particles.

  • Fix a tear down/GC issue where the FFXSystem would be destroyed before the particle components that reference it.

  • Fixed a bug causing crashes when setting nullptr Asset.

  • A bug was causing incorrect removal of instances from the SpawningDataSet when they were in the MainDataSet; this has been fixed.

  • Bug Fix: Fixed a potential race that occurred when removing from pending spawn.

  • Fixed bugs caused by Particle Read Data Interfaces referencing emitters that are excluded when cooking for the target.

  • Wait for all simulation to complete before performing tick group update, to avoid potentially accessing simulation data that is still running concurrently.

  • Fixed an issue causing a crash when applying vertex painting to a Static Mesh that was being used for a Mesh Renderer in an active Niagara Editor.

  • Fixed issues that occurred with GC and pooled components when debugging was not enabled. The objects were created with the wrong outer, allowing them to be garbage-collected while playing.

  • Bug Fix: Removed strong reference from pool debugging to avoid confusion between different build configs; originally this was causing the shipping config issue to be masked due to the strong reference.

  • Bug Fix: Fixed HandleTimelineScrubbed so it uses UFXSystemComponent to handle all FX component types (Mainly Cascade and Niagara).

  • Previously, it was possible to use rapid iteration parameters in a worker thread while also accessing on the game thread. This has been resolved.

  • Niagara can now handle SkeletalMesh changes on a SkeletalMeshComponent when more than one Niagara System is referencing them.

  • Made RandomTriIndex more robust against missing or invalid data.

  • Ensured that pool prime does not occur inside PostLoad. It is not safe, as UStaticMesh does not ConditionalPostLoad the materials we need access to.

  • In certain cases, such as when there is no Asset set, a crash could occur. This has been resolved.

  • Fixed a crash that occurred when CalculateTickGroup is called from the SystemSimulation, as the prereqs were not updating.

  • Fixed a bug where local-space simple lights would render with a frame-old transform.

  • Fixed an issue where dump was not working with cooked out Emitters; modified the dump command so that we can perform a full dump of all Systems.

  • Fixed an issue with unmatched LODIndex between Register and Unregister. Also fixed potential nullptr access to SkelMesh.

  • Fixed an issue that could lead to transient namespace variables leaking between Emitters in a Niagara System.

  • Fixed the normals for Ribbon MultiPlane. The default is to flip normals on the standard two-sided render based on the view direction. An option has been added in renderer properties, to duplicate geometry with correct normals for opposite face and to re-enable backface culling for any material that doesn't behave correctly with the flipping normal. Updated test to show normals.

  • Optimized the Generated Code window in the NiagaraEditor.

  • Fixed a crash in the Scalability Manager.

  • Fixed an issue with dynamic bounds calculations for Niagara components with negative coordinates.

  • Fixed an issue where Niagara renderers were trying to update while their dependent objects (System/Emitter/Script) hadn't finished loading (RF_NeedsPostLoad). Since PostDuplicate is called before PostLoad, we need to defer any work on the renderers till after PostLoad. This existing work is handled by the System on load.

  • Fixed a problem where SpriteRenderer ParticleAlignment and ParticleFacing parameters were not respecting the LocalSpace setting on Emitters, and were defaulting to Worldspace. Regression from prior behavior.

  • Fixed issues with Niagara's compute shader generation.

    • Moved some string properties to Editor-only.

    • Now it skips deferred deletion of scripts unless they actually have cached shaders.

    • Moved FNiagaraShaderProcessorTickable to an FTickableGameObject so that compute shaders will be properly handled in -game situations.

  • Fixed an issue for a non-determinism cook with Niagara Renderer properties.

  • GPU Simulations were continually spawning the previous contents of their SpawnInfo struct if they became inactive. This has been fixed.

  • Fixed VectorVM assembly debug output.

  • Fixed an issue where device profile preview would not set correctly, because its device profile had not been loaded from its platform INI file.

  • Bug Fix: Fixed an issue where a Niagara-specific override console command would override the DP but would not set the fx.Niagara.QualityLevel cvar.

  • Bug Fix: Fixed an issue where after setting a DP preview, you could no longer properly use engine scalability.

  • Fixed a problem with the Niagara Matrix Multiplication node; made it actually a mul() rather than per-component scaling.

  • Fixed an issue causing a race condition in processing Niagara shaders. Now they are only processed when they have been released from the FShaderCompilingManager. BReleased has been added to the job, which is flipped when the job has actually been fully processed by the compiling manager.

  • Fixed an issue where internally complete Emitters would still render their final frame's data.

  • Fixed an issue for pooled Niagara components; components marked hidden in game would remain hidden when re-used from the pool.

  • Fixed a crash that happened when passing large text blobs into Niagara scratch pad names. Limited names to 256 characters.

  • There was a problem with Niagara VM bytecode compilation where self assignments had rvalues replaced in all expressions: A = A + B; OutputFloat(A); This has now been fixed.

  • Prevented some Niagara logspam in server builds.

  • Fixed an issue that could cause an incorrect component tick state for Niagara components.

  • Fixed uninitialized struct values for the Niagara plugin.

  • Fixed the initial bounds on fixed bounds systems.

  • Fixed an issue that could lead to incorrectly culled effects, due to the LastRenderTime not being reset early enough in Activate.

  • Fixed an issue where Ribbon Rendering with 2-3 particles was causing invalid UVs; these were either flipped or zeroed unless EdgeMode was set to Locked, due to same-age particles. Updated several Ribbon tests based on UV fixes with same-age particles, like beams, to show fixed UVs now. Updated some naming/descriptions, and the edit conditions of Ribbon UV Properties, to better reflect meaning and show what affects what.

  • Fixed a crash that occurred when you changed the size of a user-provided RenderTarget2D.

  • Made several Niagara shader compilation logging improvements.

    • Downgraded the importance of some of the logging.

    • Added system names to VectorVM logs so that they are more actionable.

    • Added NiagaraTrace channel.

  • Fixed a crash caused by a race condition in the unbinding of the GPUExecContext combined parameter store.

  • Fixed graph convert node pins so they properly dirty the graph.

  • Fixed a crash that occurred when spawn event handlers kill particles.

  • Ensured we don't try to resolve Niagara NPC references during PostLoad.

  • Fixed an issue with non-deterministic cooking with the Texture Asset backing Niagara curves. Added UTexture::SetDeterministicLightingGuid to be used for assets generated during cooking.

  • Fixed up UNiagaraComponent::GetDataInterface so that it just uses the existing implementation for the user parameter Data Interface (rather than the very specialized implementation that would only support the first GPU emitter).

  • Fixed ribbon indexing issues with multi-segment ribbons and initialization order of FNiagaraRibbonShapeCustomVertex.

  • Fixed an issue with resetting GPU Systems in some situations.

  • Fixed a bug with Niagara VM bytecode compilation for swizzled mask on LHS: MyVec3.yz = float2(1.0f, 2.0f);.

  • Fixed Niagara VM bytecode compilation for preserving original swizzle mask during self-assignments.

  • Ensured that NPC are fully loaded before we access them which was causing an issue if a compile was triggered from the PostLoad of a script/emitter/system.

  • Fixed crashes and bugs with Niagara Data Interfaces that must rebind their VM functions after a reinit.

  • DDC was getting polluted with NiagaraScript results when rapidly generating compile requests. This fix ensures that the data cached is associated with the source request rather than the current CompileId of the UNiagaraScript.

  • Fixed FNiagaraDataInterfaceArrayBool to use a Buffer<uint> on the GPU.

  • Fixed a problem for some cases in the Editor where CVars changed at runtime weren't applied correctly. Also created a threadsafety fix for CVar changed callback handles.

  • Fixed an issue causing Niagara crashes with -noshadercompile.

  • Fixed Niagara's Pow node to clamp the base to zero; it now matches materials and prevents divergent behavior between platforms.

  • Fixed a use-after-free bug within Cascade GPU simulations.

Deprecated:

  • Deprecated If node, Usage Selector node, and Sim Target node in favor of the new Select node and the old Static Switch node. Deprecated nodes will continue working, but are no longer offered in the action menu.

Online

New:

  • Updated libstrophe for android with openssl-1.1.1x support

  • OpenSSL has been upgraded to openssl-1.1.1k for Windows, macOS, iOS, and Android. All older versions of openssl for the Windows platform have been deprecated and removed from the source tree.

  • Added an ini-based setup for TestLeaderboardInterface, allowing ShooterGame to test its own leaderboard keys instead of using test keys.

  • Re-enabled Steam when running Single Process Play-In Editor, but disabled Steam Sockets. This will keep the connectivity path using local TCP/IP.

  • Pixel Streaming CVars can now be set using command line arguments. See documentation for specific arguments.

  • Multiple Pixel Streaming improvements such as parameterisation of many encoder settings, AMF encoder, and better pixel streaming stats.

  • Added indexed cache storage functionality for Switch Indexed cache storage support.

  • To use Indexed Cache, set [/Script/SwitchRuntimeSettings.SwitchRuntimeSettings] CacheStorageIndexMax to the max index of cache storage that will be used.

  • Fixed a clang issue with LPTSTR conversion.

  • Changed LogHotfixManager default verbosity from Verbose to Display. Significant log lines were updated to Log.

  • Engine bundled WebRTC upgraded to Release M84 for Windows and Linux. Engine Opus version upgraded to 1.3.1-12 on Windows and Linux to match WebRTC. Developers using the old bundled WebRTC directly, instead of through the Pixel Streaming plugin, will need to manually link the old WebRTC or upgrade their custom implementations to utilize the new WEBRTC library.

  • Moved Party Beacon crossplay restriction definitions to ini.

  • Added additional platform information to the Social Platform Description in order to to group similar platforms.

  • Improved functionality of Pixel Streaming web player, including more statistics data.

  • Added a CVar to allow guest accounts on GDK account picker. To use it, add [OnlineSubsystemGDK] bAllowGuestLogin=true

  • Added a configuration option to perform or skip the XBox Live Gold check. Defaults to XBox Live Gold account required.

  • Promoted LogHotfixManager lines to "Log" due to community feedback that they are commonly used as a reference.

  • Added Exec function to SocialToolkit, SocialManager now attempts to call Exec on all its SocialToolkit instances.

  • Quality of Service (QoS). Quality of Service pings are now performed using non-blocking sockets on a single async task thread. Spawns one socket per protocol type such as IPv4 and IPv6, based on the list of target host addresses supplied.

  • Promoted IsFriendRestricted from Protected to Public to allow for quick usage by Game implementations.

  • Added configuration options to enable or disable EULA and waiting room checks on PC/Mac.

  • The Engine Framebuffer Pixel now formats automatically.

  • Commandlets are now configured to function correctly if rendering is enabled or when passing -AllowCommandletRendering.

  • Made SocialUser's class method ValidateJoinTarget virtual, in order for it to be overridden at the game level.

  • Adjusted MarkupTag code to no longer use TypeName.

  • Added virtual "GetMarkupTagForPlatform" function to SocialUser class, so that games can override the icon or platform.

Crash Fix:

  • OnPartyJoined delegate listener will now clear on user logout. This fixes a crash observed when the local player changes.

  • Fixed an ensureMsgf crash that occurs when an Interaction Type is not recognized.

Bug Fix:

  • Audio over Pixel Streaming is now of higher quality and correctly plays in stereo.

  • Fixed platform specific issues in Party Platform Session Monitor.

  • Improved parsing of RTC ice server configuration for Pixel Streaming

  • Fixed instances of UserPlatform being constructed with an empty string which triggers an ensure.

  • Secondary local players can no longer be promoted by primary players.

  • Fixed connecting to Pixel Streaming session from browsers running on Mac or iOS.

  • OnApplicationActivationChanged now correctly fires on application reactivation

  • Changed GetCachedAchievements in Sony interfaces so they return an array of readable values.

  • SocialManager no longer marks itself as PendingKill on shutdown. Instead it sets a "bShutdownPending" bool.

  • Added ABORT_DURING_SHUTDOWN macro that checks the bShutdownPending bool, then displays a log message, and immediately returns. This macro is used in all SocialManager callbacks that might fire after a Shutdown occurs.

Deprecated:

  • The VivoxVoiceChat plugin is deprecated as of Unreal Engine 4.27, and is scheduled for removal in Unreal Engine 5.0.

  • Deprecated old versions of WebRTC that were not used by any of the projects.

  • Added new version of ProcessRequest (and derivative methods) that returns void instead of bool. Deprecated the previous versions for 4.27.

Removed:

  • Removed STUN/TURN server binary as it is no longer maintained.

HTTP

New:

  • Added configurable time limits for the flushing active HTTP requests when shut down or suspended. This aids compliance with platform requirements for shutdown and suspend times.

  • The trusted root certificate bundle used by the SSL module has been updated.

  • Added a new "Optional Object" JSON Serialization Macro.

  • HTTP Request Interface. The IHttpRequest interface has been modified so that a timeout can be specified on a per-request basis.

Bug Fix:

  • Resolved a non-thread safe execution pattern when handling request progress updates in AppleHTTP.

  • ProcessRequest and CancelRequest completion callbacks always fire on the main thread for all HTTP implementations.

  • Added ability to cancel all requests in progress when suspending.

Online Subsystem

New:

  • OnlinePurchaseInterface FinalizePurchase method now takes ReceiptInfo as an optional parameter.

  • Included party data in QueryPartyJoinability response.

  • Implemented GetSocialPlatformName method in the OnlineSubsystem Interface for use in labeling a platform's friend list.

  • Added a missing enum "VoiceChatResults" to the LexToString function in the VoiceChatManage class.

  • Modified the User Search to use the new "withUserGuid" endpoint.

Bug Fix:

  • Fixed OnlineEncryptedAppTicketInterfaceSteam using a unicast delegate where a multicast delegate was intended.

  • FUniqueNetId Thread Safety: It is now possible to use ESPMode's class method ThreadSafe with FUniqueNetId shared pointers and references by opening CoreUObject.Build.cs and changing the UNIQUENETID_ESPMODE public definition from ESPMode::Fast to ESPMode::ThreadSafe, then recompiling. The FUniqueNetIdPtr/FUniqueNetIdRef typedefs in CoreOnlineFwd.h are provided to help migration. For example, you can replace TSharedPtr<FUniqueNetId> with FUniqueNetIdPtr to cause it to use the appropriate ESPMode.

Deprecated:

  • Deprecated Online Subsystem Twitch. The web API has not been kept up to date. This will be removed in a future engine release.

OpenSSL

  • Deprecated old versions of OpenSSL for all platforms.

WebSockets

Bug Fix:

  • LWS Web Socket connections will now use a dynamic string buffer size when dealing with UrlPaths.

XMPP

Deprecated:

  • XMPP Jingle has been deprecated, licensees must move over to using the updated XMPP Libstrophe system for their message handling.

Physics

New:

  • Added Element Index to the Blueprint Break and Make hit result functions.

  • Added PopFutureOutputData_External to SimCallbackObject to get all physics thread outputs, including outputs past the current time.

Bug Fix:

  • Fixed Sweep_Geom to calculate the correct transform for queried shapes when querying from a component with multiple shapes like a skeletal mesh component.

  • Corrected SyncBodies logic for scenes with multiple custom Chaos solvers to correctly sync back results to components.

Clothing

New:

  • Chaos Cloth - Added fictitious centrifugal forces to compensate for when the Velocity Scale is reduced.

  • Chaos Cloth - Added a new Continuous Collision Detection mode. This is more accurate than sub-stepping, but can be more taxing on performance.

Improvement:

  • Added ISPC optimizations.

  • Improvement: Removed inactive LOD constraint rules from the simulation.

  • Re-enabled geodesic long range attachment and deprecated bUseGeodesicDistance.

Bug Fix:

  • Chaos Cloth - Fixed a crash caused by constraint map re-allocations.

  • PhysX Cloth - Fixed a crash when applying a higher definition LOD 1 cloth than the one used in LOD 0.

  • Cloth Painter - Reduced the long pause / delay before being able to interactively preview the simulation (while pressing on the H key) while in the cloth paint editor mode.

  • Chaos Cloth - Fixed an issue causing a bad simulation impulse at startup.

  • Chaos Cloth - Fixed issues that were occurring when a non unit scale was used on the owner component.

  • Chaos Cloth - Removed collision tests from collision particles that are not in the active LOD.

  • Cloth Painter - Fixed lag that was occurring after each paint stroke.

  • Chaos Cloth - Corrected an issue that occurred in cases where the simulation data was queried before the simulation's first step.

  • Chaos Cloth - Fixed an issue with the AnimDriveSpringStiffness parameter effect on the simulation that occurred when its value was changed in the Chaos Clothing Config UI.

  • Cloth - Added tapered capsules to the primitive lists to pass as external cloth collision sources.

  • Chaos Cloth - Fixed a crash in multi-cloth simulations caused by a race condition on the offset creation.

  • Chaos Cloth - Fixed a crash that occurred when a Skeletal Mesh asset with more than one LOD had only one cloth LOD.

  • Chaos Cloth - Fixed an overzealous collision LOD deactivation that was preventing external collision source updates.

  • Chaos Cloth - Fixed missing Animdrive stiffness and MaxDistancesMultiplier updates.

  • Chaos Cloth - Fixed a bad local space simulation impulse at simulation startup, that only became apparent with a lower than one Velocity Scale.

  • Cloth - Fixed an issue where sometimes the Undo function would reset the cloth LOD. \

Collision Detection

New:

Physics Asset Editor

Bug Fix:

  • Fixed simulation sometimes starting unexpectedly in the Physics Asset Editor when editing asset properties.

  • Keyboard navigation in the Physics Asset Editor skeleton tree view is now properly ignoring hidden elements.

  • The Physics Asset Editor 3D viewport and skeleton tree view are now properly synchronized when the selection changes in one or the other.

Rigid Bodies

  • Fixed the Rotation of Mass computation in all oriented implicit geometries to properly account for the rotation of the geometry axis compared to the Z axis.

Physics

Platforms

New:

  • Unreal Engine now ships with Dockerfiles and example code for official Docker container images.

  • The Steam SDK has been updated to 1.51.

  • Refactored Platform TextureFormat classes to be subclasses from a new FChildTextureFormat class that handles compressing with other modules, and then runs a post-process on it.

  • New: Pulled GetPixelFormatForImage out into a separate function in ITextureFormat, so that child formats can inherit a parent format that generates without needing to compress a test texture.

Bug Fix:

  • Added the function UserHomeDir to FGenericPlatformProcess, so that TestPAL could be updated to test UserHomeDir on Linux without breaking other platforms.

All GDK

New:

  • For GDK Pass-type entitlements, acquiredDate is appended to the receipt ID format, so that your game service can tell separate purchases apart. If your game services parse receipt IDs, or you have already stored receipt IDs in your game services, please consider migrating to this new format.

Bug Fix:

  • Fixed a potential block that occurred when checking account privileges.

  • Stopped the creation of search handles for sessions that aren't meant to be searchable.

  • Fixed a thread safety issue that could arise when the user was querying consumables on the platform store.

  • Fixed a crash that occurred when the user joined a multiplayer session with verbose logging enabled.

  • Removed the memset of a shared pointer in FOnlineAsyncTaskGDKQueryAchievements.

  • Fixed an issue with AutoPIX not working on GDK.

  • Fixed a crash that occurred while toggling between constrained and running applications. Added thread safety when handling responses from multiple checks.

Linux

New:

  • Moved to LLVM 11.0.1

  • When dynamically loading libraries under a Unix platform, the engine now also checks the global path.

  • Android support added for Installed Builds on Linux.

  • Added support for returning the last measured CPU time on Windows and Linux platforms. UnixPlatformTime can now update the CPU time independently of the fixed 250ms threshold.

  • Forked Process - Added DEFAULT_FORK_PROCESS_MULTITHREAD definition thats sets the default multithread behavior of a forked process (the default is singlethread).

  • New: Forked Process - Added -DisablePostForkThreading cmdline option that disables MT if the default is true.

Bug Fix:

  • Time moving backwards has been changed to a warning over a fatal error. This allows that time to be clamped and provides an opportunity for the system to recover.

  • This fix ensures that our ClockSource is always initialized.

  • LinuxAArch64 is now allowed to build and package CrashReportClient.

Mac

New:

  • macOS Catalina and above now supports Apples Game Controller framework for connecting the latest console controllers.

Windows

Bug Fix:

  • Previously, when using more than one monitor and switching from Window mode to Fullscreen mode, if the window was partially outside the virtual screen one monitor switched to Fullscreen and the other monitor only showed a single frame of the game. This has now been fixed.

  • GetWorkArea on Windows now correctly supports Remote Desktop.

WinGDK

New:

  • Added support for D3D11 RHI.

Bug Fix:

  • Fixed an issue that occurred with Visual Studio project generation after installation of February GDK. This prevents the Visual Studio solution from failing to load due to a duplicated project item MGCCompile error if the UWP component is installed in Visual Studio.

Linux

Crash Fix:

  • Fixed a crash that happened when no HOME environment variable was set.

Rendering

New:

  • Ray traced ambient occlusion, shadows, reflections, GI and skydome passes use a new sampling sequence that converges faster and diffuses the visible error in screen space.

  • The path tracer now performs anti-aliasing with a multi-pixel filter kernel for improved quality. The width of the filter can be set in the PostProcessVolume settings. Settings such as TAA are automatically disabled while the path tracer is active.

  • Improved the support for using the path tracer with Movie Render Queue.

  • The path tracer supports per light show flags and can isolate direct vs. indirect lighting.

  • The path tracer now applies backface culling to camera rays to match raster modes.

  • Orthographic cameras are now supported by the path tracer.

  • Updated the Vulkan SDK to 1.2.162.0 from 1.2.148.2.

  • Added Scene Capture visibility flags.

  • MovieRenderPipeline and DLSS - Added support for the DLSS Plugin to MRQ and for the supporting UI to control quality settings.

  • Adding logging of the before and (attempted) after states to viewport resize failure logging.

  • Enabled RenderDoc in cooked builds.

  • Added support for PIX GPU captures on Windows with a new plugin.

  • Added an option to disable ray tracing for old drivers.

  • Adding logging of the GPU status when a query timeout is hit.

  • Hair passes and hair shaders shouldn't have any performance impact on runtime when the HairStrands plugin is disabled.

  • Implemented RAY_TRACING_PAYLOAD_FLAG_IGNORE_TRANSLUCENT.

  • Added bIgnoreTranslucentMaterials to TraceMaterialRay.

  • Added extra logging for CreateSwapChain failing with E_INVALIDARG.

  • Fixed hair transmittance applied on hair cards in forward rendering.

  • Movie Render Queue: Users can now set overscan to work in combination with EXR output.

  • Added a cvar to set the minimum Windows version to enable ray tracing in DX12.

  • Added adaptive voxel allocation to avoid overallocation, allowing for a large set of grooms casting shadow.

  • Added support for screen percentage in ray-tracing skylight.

  • Changed the hair cards sampler to use anisotropic sampling for better rendition.

  • Added Blueprint methods to create volume / array textures.

  • Added a project setting to enable / disable auto virtual texture import. The setting defaults to enabled to match existing functionality.

  • Updated the hash functions Rand3DPCG32 and Rand4DPCG32 to have higher quality and faster GPU runtime performance.

  • Moved the location of virtual texture feedback per frame. Previously, we sampled the same location for feedback each frame, now we jitter the location over the virtual texture feedback tile to ensure we touch each location over time.

  • Added new optional hair strands composition points (after the separate translucent pass, and before the translucent render after DOF). \

  • Added an option to cull objects by distance and solid angle behind the camera in ray tracing.

  • SortedIndices and SortedIndicesOffset in NiagaraMeshVertexFactory are now part of FNiagaraMeshUniformParameters instead of being separate resources. This is needed for ray tracing hit shaders, which should always be uniform buffers or loose parameters.

  • Added ray tracing support for per instance attributes such as color for Niagara meshes.

  • Refactored per-vertex attribute interpolation in ray tracing shaders to reduce register usage. Attributes are now interpolated explicitly inside the per-vertex loop. Removed a few variables that are no longer used.

  • All ray tracing shaders now explicitly share the global root signature. This allows separate pre-compilation of ray tracing pipeline collection objects containing only hit shaders.

  • Added support for AMD HitToken extension.

  • Added clear coat approximation to the experimental ray-traced reflection shader.

  • Added cvars to globally control ray tracing shadows for different light types. All light types are enabled by default and are still controlled by r.RayTracing.Shadows as well as per-light settings. The new cvars are intended for global easy overrides, allowing fine grained control over quality vs performance in games, without content changes. New cvars:

    • r.RayTracing.Shadows.Lights.Directional

    • r.RayTracing.Shadows.Lights.Point

    • r.RayTracing.Shadows.Lights.Spot

    • r.RayTracing.Shadows.Lights.Rect

  • Moved pixel coord into an explicit field of the ray-tracing payload. This grows the payload structure to 64 bytes and invalidates all ray-tracing shaders.

  • Added r.RayTracing.Shadows.AcceptFirstHit CVar that adds RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH to shadow rays, allowing the ray tracing process to terminate before the real closest hit point is found. This improves shadow ray tracing performance, but may theoretically result in worse shadow denoising quality.

  • Added various improvements for the experimental ray-traced reflection shader:

    • Implemented support for the reflection capture fallback.

    • Excluded unlit and hair pixels.

    • Now respects cvars for direct and indirect lighting.

  • Implemented a roughness threshold for skipping any-hit shader invocation in the experimental ray-traced reflection shader.

  • Implemented a roughness bias for experimental ray-traced reflection, controlled by r.RayTracing.Reflections.ExperimentalDeferred.SmoothBias (default = 0). This can improve reflection performance in certain scenes by forcing ray directions to be more coherent. Additionally, this allows globally controlling RT reflection appearance without content modification.

  • Ray-tracing shader creation is now skipped when run-time ray-tracing support is compiled out. This replicates logic from FShaderCodeArchive::CreateShader in FShaderMapResource_InlineCode::CreateRHIShader.

  • Added the r.D3D12.DXR.MinimumDriverVersionAMD cvar to allow banning ray tracing on drivers that may be too old or have known issues. The default is 0, which allows any version.

  • Implemented an optional non-blocking ray-tracing PSO compilation mode, eliminating CPU time spikes at the cost of rendering some objects using a fallback shader (opaque black). \ The new cvar r.RayTracing.NonBlockingPipelineCreation can be used to opt-in to non-blocking mode (default=0, preserving previous PSO creation behavior). Non-blocking mode should only be used in the game where hitches are not acceptable. Any offline engine use cases, such as cinematic rendering, should use a default blocking mode to avoid any artifacts due to fallback shaders.

Improvement:

  • Improved the sampling pattern used by the path tracer to speedup convergence.

Crash Fix:

  • Corrected a crash with invalid ISM indices and ray tracing enabled.

  • Fixed a crash caused by a null pointer dereference in distance field generation while cooking assets.

  • Corrected a RHI Bypass crash caused by RHI Resources losing their reference counts before being used in a draw.

  • Fixed a Lightmap Density view mode crash when using tessellation.

  • Ensured that adaptive virtual textures allocation happens before any virtual texture flush. This fixed an intermittent crash bug when using adaptive virtual textures.

  • Fixed a crash when enabling r.RayTracing.ExcludeDecals because ray tracing instances were skipped but VisibleRayTracingMeshCommands had already been registered.

  • Fixed a crash with hair strands when running in split screen / VR due to VR not being supported yet.

  • Fixed a crash when deleting a groom asset while it is still being used.

  • Fixed a crash when ray tracing shadows is the only active ray tracing effect and r.raytracing.shadows is set to 0. While the "r.RayTracing.Shadow" cvar is thread safe, it is bound to the GRayTracingShadows variable, which is not. This could produce a scenario where the variable was still set to 1 when the cvar was already 0, and therefore the RenderRayTracingShadows function would be called when it should not have been.

  • Fixed a crash in SingleLayerWater when using the forward renderer.

  • Fixed a ray-tracing-related crash on startup when running on an old windows version or an old driver. The version checks must be done much earlier during initialization.

Bug Fix:

  • Fixed possible NaN values from UniformSampleDiskConcentric.

  • Corrected washed-out appearance in path traced images at high exposure values.

  • Fixed UI clamps of Path Tracing related scene settings.

  • The path tracer output is invalidated in more cases such as object deletion and setting changes.

  • Fixed the LockStructuredBuffer to work correctly with the OpenGL RHI thread.

  • Fixed a case where per-instance data size did not match a number of instances the Hierarchical Instanced StaticMesh Component was attempting to render.

  • Corrected a hair strands precision issue that occurred when a groom was attached to a skeletal mesh whose bounding box was too large.

  • Fixed the groom property override and reset on component. This allows a clearer view of what properties are overridden by a Groom asset compared to a Groom component.

  • Fixed forward lighting on hair strands rendering.

  • Fixed bad BC compression of the Runtime Virtual Texture mask channel.

  • Fixed a missing uniform buffer in custom depth passes.

  • Disabled occlusion meshes for primitives that only render to runtime virtual texture.

  • Fixed a D3D12 Race condition for ActiveGenerations having dequeue called concurrently in WaitForCompleteion and CleanupActiveGenerations, resulting in an incorrect double pop, causing an unrelated sync point to be dropped from processing (this fixed random meshes flickering, random GPU crashes / hangs, possibly fixed numerous texture corruption cases).

  • Copied strings being registered to FVisualizeTexture, because it can accept textures with dynamic string names allocated with FRDGBuilder::AllocObject, while GVisualizeTexture outlives the RDG builders.

  • Fixed an issue where pending barriers wouldn't always be submitted in DirectX12.

  • Enforced respect for the existing virtual texture setting on texture reimport. Previously a texture might change from a regular to a virtual texture simply because of a reimport, which is usually not desirable.

  • Configured the procedural mesh object to accept ray tracing updates.

  • Fixed virtual texture pages not being unmapped for virtual textures with a non-zero FirstMipToUse.

  • Fixed handling of null SRVs in RHI Validation.

  • The RHI command list is now flushed if we are using null RHI and are exiting the RHI just in case commands have been queued up.

  • Fixed the graphic corruption caused by streaming levels reloading in combination with the DisplayCluster module.

  • Format support is now checked before using display formats.

  • Fixed RTAO to work correctly when SSAO intensity is set to 0

  • Fixed a compilation warning for material referencing the hair attributes node.

  • Fixed RenderTarget validation.

  • World Origin shifting for Runtime Virtual Texture volumes is now supported.

  • Fixed an uninitialized texcoord value for LoadVertexFactoryInputForHGS in GeometryCacheVertexFactory.

  • Corrected a missing application of pre-shadow onto the hair strands shadow mask.

  • Added some checks in RHIGetAvailableResolutions around GetDisplayModeList returning DXGI_ERROR_NOT_FOUND.

  • Fixed disable section in ray tracing that was not working with cooked content.

  • Re-added missing SSR Visualization.

  • Fixed an issue where ray-traced reflections were not being accurately represented in multi-view (such as split-screen) when material sorting for ray tracing is enabled.

  • Fixed an issue with querying for local video memory in DX12.

  • Now correctly use anisotropic filtering instead of bilinear by default for runtime virtual textures.

  • Remapped virtual texture ancestor pages when doing an Evict. This fixed an issue where unmapped pages were still referenced in the page table leading to incorrect rendering for a few frames when the physical page was reallocated and written.

  • Fixed RHIReadSurfaceFloatData ignoring the mip / array index.

  • Fixed the resource size calculation for streaming virtual textures. The size should be based on the memory footprint, not the disk footprint. Note that any streamed data ends up in a fixed-size pool.

  • Corrected RenderDoc captures asserting when running with -onethread.

  • Fixed transforms of CPU Niagara meshes instances in ray tracing.

  • Fixed the IsRotationNormalized() assert in Niagara meshes with ray tracing enabled.

  • Fixed a possible deadlock in the ray-tracing PSO compilation tasks on machines with low CPU core counts. Ray-tracing PSO compilation tasks used to run on high priority threads and would internally create additional tasks and immediately wait on them. The inner tasks also use high priority, but they may never get to run as WaitUntilTasksComplete does not execute anything itself and all HP threads already run the outer tasks. The solution is to make the outer tasks run at normal priority (or lower), so that inner tasks will always run on other task threads.

  • Fixed DeprojectScreenToWorld inaccuracy when the camera is very far from the world origin (for example, painting clouds on earth from space when using the Volumetrics plugin).

  • Texture - Stopped logging an invalid data warning for DDC misses.

  • The stencil buffer is now cleared prior to the distortion accumulation pass to prevent unintended screen distortion.

  • Clamped the frame sync slack amount to not exceed one frame interval.

  • Fixed dynamic memory allocation every time FStaticMeshSceneProxy::GetLOD is called in development builds.

  • Fixed a potential use-after-free issue when RenderData is null, because the static mesh name did not live long enough.

  • Fixed the MeshBatch.SegmentIndex assignment for procedural ray tracing meshes.

  • Fixed a potential deadlock on shutdown in the FRHIFrameOffsetThread.

  • Corrected the handling of the mip tail in Texture2DArrays. FTexture2DArrayResource was not respecting the mip tail count, and CreateTexture was not correctly copying the bulk data.

  • Output pixel coordinates are now explicitly passed to ray-tracing hit shaders through payload instead of using DispatchRaysIndex to emulate SV_Position. This fixes dithering effects in ray-tracing shaders when ray sorting is used.

  • Fixed a race condition that occurred when initializing FormatVersionMap for FShaderCompileUtilities::DoWriteTasks.

  • A BitMask template function is now used to avoid bugs when creating masks where the number of bits requested equals the type bit size.

  • Added a fix to prevent the pre-loadscreen pumping of render thread ticks when RHI is suspended.

  • Fixed incorrect validation of the stencil plane in DSV surfaces. SRVs were always set up to validate against the depth plane, even for stencil SRVs, causing the validator to miss some barrier errors.

Deprecated:

  • Deprecated the PreviousLODLevel in UStaticMeshComponent. This member was added back in 2005 and all uses of the member have since been removed.

  • The groom length clip property is now deprecated and will be removed in a subsequent release.

  • Deprecated the unused function UStaticMeshComponent::UpdatePreCulledData

FX

New:

  • Open Color IO - Now when a user makes any external changes to the raw OCIO config file or any related files, UE4 will bring up a dialog prompting the user to reload the related config file.

    • These files will also be reloaded on UE4 start.

    • Added a button to reload the raw config file manually.

Bug Fix:

  • Fixed an issue with texture resources being deleted before being released.

Lighting

New:

  • The path tracer now implements multiple-importance sampling for all light and material types to improve sampling quality across the full range of light source sizes and roughness values.

  • The Source Length attribute on point and spot lights is now supported by the path tracer.

  • Skylight is now hidden from view in the path tracer unless real-time capture mode is active.

  • Textured Rect Lights are now supported in the path tracer.

  • The path tracer now approximates caustic light paths to reduce noise on scenes with glass and shiny metals by default.

  • Non-shadow casting lights, objects, and materials are now supported in the path tracer.

  • The path tracer now supports barn doors on Rect Lights.

  • The path tracer now supports the attenuation radius falloff controls.

  • Added MaxPathExposure to PostProcessVolume to clamp path tracer fireflies.

  • Added a setting for the path tracer to control if emissive materials affect other surfaces or not. This is enabled by default, but can be turned off to reduce noise if those surfaces are already represented by lights.

  • The Path Tracer now supports more than 256 lights. Performance will vary based on the amount of overlap in the attenuation radius.

  • Ray-traced shadows from Skylights now support the real-time capture mode.

  • Improved sampling quality for Skylights.

  • IES profiles are now supported in the path tracer.

  • An OpenImageDenoise-based plugin is now provided for the Path Tracer to reduce visible noise after the target sample count has been reached.

  • Added Sky Atmosphere functionality to recover the atmosphere transmittance from Blueprint (for a Directional Light).

  • The LMGPU panel is now forced to refresh on starting and stopping building to enforce CanEditChange settings.

  • Added a shadow source angle factor for ray-traced shadows from directional lights. This allows artists to vary the penumbra shape without changing the light shape.

  • Contact shadows now respects the "cast dynamic shadows" flag

  • Added ray tracing global illumination improvements to the final gather method.

  • Added support for ray-traced, subsurface shadows. This emulates raster, subsurface shadows by casting a secondary ray from the point-of-view of the light source. A homogenous volume is extruded from the furthest occluder to the shading point where the density of this volume is proportional to the shading model's opacity.

  • Subsurface falloff is now applied to contact shadows similar to the PCF path. This replaces the ad-hoc lightening of transmission shadows

  • Added a new flag for "cast contact shadows", which is stored in Gbuffer and respected (as much as possible) when applying contact shadows.

  • Added cvars to enable / disable ray-traced global illumination contribution by light type.

    • r.RayTracing.GlobalIllumination.Lights.DirectionalLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.PointLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.SpotLight (default = 1)

    • r.RayTracing.GlobalIllumination.Lights.RectLight (default = 1)

Improvement:

  • Adjusted barn door visualization to match how lighting is computed from Rect Lights

Bug Fix:

  • Fixed shading of points inside the barn door volume of Rect Lights

  • Fixed path traced shadow artifacts on point lights with tiny radiuses.

  • Ray traced shadows from point lights are now more robust for small radiuses.

  • Fewer auxiliary passes are rendered when the path tracer is active, speeding up render times in complex scenes.

  • Fixed lighting inconsistency with point lights of 0 radius.

  • Materials tagged as sky are now skipped for indirect rays by the path tracer to prevent double-counting against the skylight. Ensure that any such materials have the "Is Sky" checkbox enabled.

  • PostProcessVolume and Skylight now respect the different editor Hidden flags (Outliner, DataLayers, Level).

  • Fixed DFAO artifacts when the global distance field is disabled.

  • Fixed multi-view rendering for the Path Tracer.

  • The Indirect Lighting Intensity factor is now respected when computing ray-tracing global illumination.

  • Made Distance Field Ambient Occlusion (DFAO) mutually exclusive with Ray Traced Ambient Occlusion (RTAO).

Materials

New:

  • File containing stable shader keys used for PSO cache is no longer text (scl.csv) but a binary (.shk)

  • Performance of "expand" step during the PSO cache collection has been greatly improved.

  • ShaderCompiler will print a warning if it detects that a shadermap is taking too long to compile.

  • ShaderCompiler will print out a warning when a shadermap is taking too long to compile and can crash the build if configured so (useful to prevent the builds from being stuck indefinitely).

  • For a chunked build, shader library is now also split into chunks, so the shader code is there for the assets that need it.

  • Mapping between the assets and shader code will now be copied to build's Metadata after the cook.

  • Added an in-memory cache of shader compile jobs, which reduces the amount of shaders needed to be compiled.

  • "Missing cached shadermap" string now includes more information about the asset, including the DDC key hash.

  • The path tracer now supports Subsurface and Subsurface Profile materials with a random walk approach.

  • The cloth shading model is now supported in the path tracer.

  • Improved sampling quality for the shading models supported by the path tracer.

  • All material blending modes are now supported in the path tracer. Translucent materials will produce (rough) refraction when a non-unit IOR is provided.

  • The Thin translucent shading model is now supported in the path tracer. This produces colored transparency by default, and when refraction is specified, will produce (rough) thin refraction.

  • An error is now thrown when a translucent material with 'Output Velocity' enabled (in which case it writes to depth buffer) contains material nodes reading from the depth buffer, as it cannot read from and write to the depth buffer at the same time.

  • Added an option to blend skylight cubemap on forward shaded elements. Disabled by default to preserve performance.

  • Added Supports Anisotropic Materials as a DDPI setting to disable anisotropic materials on a per-platform basis. By default, Supports Anisotropic Materials is false.

  • The "missing cached shadermap" string now includes more information about the asset, including the DDC key hash.

  • ShaderCompiler will now print out a warning when a shadermap is taking too long to compile and can crash the build if configured so (this is useful to prevent the builds from being stuck indefinitely).

  • Added an in-memory cache of shader compile jobs, which reduces the amount of shaders needed to be compiled.

  • Added a Blueprint API to query material statistics.

  • Removed the dedicated logic around compiling debug view mode shaders on demand, instead they are now included in the regular shader map, and now compiled on demand by the new system used for all shaders.

  • Added the ability for shaders to check whether the editor is being targeted in ShouldCompilePermutation.

    • This now excludes debug view mode shaders from non-editor paks. Previously, debug view mode shaders were never cooked into .pak files, so this should match previous behavior.

    • This means more compile jobs will now be submitted in-editor, since debug view mode shaders jobs are now submitted by default, but this shouldn't affect overall editor performance, since important shaders should still compile on demand at a higher priority.

  • Now, when a 'ForceLocal' shader compiler job is prepared, if an existing job for the same key has already been started on an XGE worker, a copy of the job is also kicked with the 'ForceLocal' priority.

  • Added on-demand shader compiling:

    • Rendering from potentially incomplete shader maps is now allowed, as long as all required shaders are present.

    • Attempts to access missing shaders will now kick compile jobs on demand.

    • Shader compiler interface was refactored to better handle lots of (potentially duplicated) jobs being submitted from multiple threads.

Bug Fix:

  • Relaxed PSO cache filtering logic as to prevent it from flagging valid cases (particularly with packed normals in vertex declaration).

  • Fixed GPU skin vertex factory using too many TEXCOORD semantics.

  • Fixed non-deterministic name sorting in memory images that resulted in spurious build differences.

  • Fixed non-determinism in material shader maps (reduces patch sizes).

  • Added a saturate node to the parallax bomb material function to prevent Max Steps potentially exploding, which can hang the GPU.

  • Added support for sampling Eye Adaptation in decal materials.

  • Fixed the generation of material texture scales, used for texture streaming.

  • Fixed debug texture scale rendering.

  • Debug view rendering now takes the blend mode from the original material, which fixes flickering translucent materials.

  • Information from FDebugViewModeInterface is now considered when deciding whether or not to compile specific debug view mode shaders.

  • Fixed inheriting static material parameters from one material instance to another.

  • Fixed various problems related to material layer parameters.

  • Added changes to clear coat shading model, addressing several UDN issues:

    • Corrected ClearCoat not properly modifying roughness for specular contribution of the under-coat when lighting with area lights.

    • Fixed an issue with bottom-normal not initializing all context dot-products needed by some lights.

    • Now prefers NoL for the geometry term to have closer parity with DefaultLit when ClearCoat=0.

    • Now respects GBuffer.Specular for reflection specular contribution when ClearCoat=0.

    • Reverted the application of NoL to the refracted specular lobe.

    • Now apply the Fresnel term to the non-refracted bottom coat to handle cases when ClearCoat<1.

  • Relaxed PSO cache filtering logic to prevent it from flagging valid cases (particularly with packed normals in vertex declaration).

  • Trying to compile/render debug view mode shaders is now skipped, if FMaterial::ShouldCache returns false for any of the required shader types. This fixes a failed check / crash which occurred when trying to compile landscape debug shaders, as landscape material resources have a complicated ShouldCache override.

  • Various fixes related to material layer inheritance

  • Ensured FMatExpressionPreview::ReleaseResource happens on the render thread.

  • Ensured the Lambda that assigns RenderingThreadPendingCompilerEnvironment holds a ref-count

Deprecated:

  • Volumetric Cloud prototype: Disconnected the material connection to the volumetric cloud .ush file that was causing cook errors on some platforms. Please use the Volumetric Cloud actor, or reconnect the pins in the prototype material.

Mobile Rendering

New:

  • Vulkan is now allowed on devices with Adreno5xx GPUs running Android 10 or a newer Android version.

  • Added an onscreen warning for mobile for a misused Sky Atmosphere. This will help to identify why Sky Atmosphere is missing on mobile platforms.

  • DepthPass FullOpaque is now added when SDF or AO are activated on mobile.

  • DepthPass is now decoupled from BasePass when SDF or AO are active.

  • Removed reprojection from basepixel, it is no longer needed as we are now using current frame depth.

  • The TC_ReflectionCapture setting is now hidden.

  • Added support for Panini projection on mobile.

  • FXAA mobile is now available, it can be enabled with r.DefaultFeature.AntiAliasing=1

  • Added a SSAO technique to the mobile forward renderer.

  • Added a config cache for a per-platform toggle of MobileNumDynamicPointLights.

  • Implemented DistanceField Shadow on mobile (no GL / Metal for now).

  • Added support for the ASTC decode mode on GL.

  • Updated Metal version to 2.1 for the iOS desktop renderer.

  • Enabled Manual Vertex Fetch on the iOS desktop renderer.

Bug Fix:

  • Reducing the number of supported dynamic point lights on mobile (r.MobileNumDynamicPointLights) will now correctly reduce the number of bound constant buffers.

  • Read-only buffers are now explicitly marked as read-only in Vulkan shaders to improve device compatibility.

  • Fixed incorrect usage of Vulkan sub-passes while MSAA is enabled.

  • Fixed a case where unbuilt static objects were not affected by indirect lighting on mobile.

  • Generated Vulkan shaders will no longer initialize variables to zero where it is not required.

  • Added a missing DBuffer Emissive blend mode remapping for a mobile decal rendering.

  • Fixed runtime mipmaps generation on mobile.

  • It is now possible to opt out Encoded TextureCube from the package if the platform doesn't need EncodedData.

  • Fixed modulated shadows so that the Modulated Shadow option is greyed out if the Light is not Stationary.

  • Made fixes to the VK_EXT_ASTC_decode_mode extension.

  • Corrected the VertexInterpolator material node so that it functions correctly when used in a mesh particle material.

  • Fixed the DisableFlipCopyGLES logic that inverted scene captures with Android GLES RHI.

  • Fixed the Vulkan CPU readback.

  • Fixed a thread deadlock between ray tracing and RHI.

  • The calling context is now passed down during defrag instead of accessing the global context.

Postprocessing

New:

  • Added ray-tracing-specific ambient occlusion parameters in the post process volume.

    • Intensity: A scalar factor applied to the ambient occlusion score.

    • Radius: Adjusts the world-space radius of occlusion rays.

Improvement:

  • The following improvements have been made to Cubemaps to introduce better prefiltering that limits excessive blur from occurring from the sources:

    • Cubemaps generated from .hdr long-lat sources were being strongly blurred in cases when mipmaps were enabled. This happened originally because such cubemaps were intended for use only with the "Ambient Cubemap" lighting feature, and their mips were generated using angular filtering. Skylights now have many mechanisms for visibility and shadowing, causing that feature to become obsolete. Angular mipmap filtering for long-lat textures is disabled, and therefore mipmaps for cubemaps no longer introduce significant blur.

    • Cubemaps generated from long-lat originally were low quality because their maximum size was set to 512 pixels by default. This limitation has been removed, and resolution of generated cubemaps is now determined by the size of the source long-lat texture.

    • Imported .hdr textures were incorrectly marked as sRGB, even though they were internally processed as textures using linear color space. Now, they should have sRGB mode automatically disabled when imported.

    • Cubemaps generated from long-lat sources can now use the texture adjustment settings of the Texture Editor.

Bug Fix:

  • Color Correct Regions - changed the Regions refresh method to better support environments other than Editor.

  • Regions that occupy less than 1 pixel on the screen are no longer rendered.

  • Fixed a color correction issue where shaders with Highlights assumed that max Scene color was capped at value 1.

Sequencer

New:

  • Implemented a Camera Shake upgrade tool to convert any legacy Matinee camera shake asset to a Sequence animation. Shakes with no CameraAnim asset are left untouched.

  • The Dummy Camera Manager now enables you to see the camera shake FX in the Camera Shake Previewer tool.

  • Added per-material support for each Object ID instead of per-component in Movie Pipeline. Additionally, per-material support now applies to Instanced Static Meshes, such as foliage. Individual materials are not supported on instanced static meshes.

  • The "Write all Samples" debug option moved from HighRes settings to the new Debug Setting in MoviePipeline.

  • New options in Control Rig enable ticking on all skeletal mesh components and warm up frames when baking an animation sequence.

  • FK Control Rigs are now masked in all sections when a Control is inactive.

  • Add an aspect ratio axis constraint accessor on the IMovieScenePlaybackClient.

  • Add a serial number on bound object caches.

  • The Level Sequence playback context picker now lets you pick actual level sequence actors instead of just worlds.

  • Add support for previewing camera shakes' post process settings to the camera shake previewer tool.

  • Added track pre-compilation parameters. This lets tracks alter the default metadata at compile time for all the entities that will be created by their sections.

  • Added the HasAnyData method to non-float channels

  • Debug visualization now supports more component types for the new core evaluation system.

  • The asset picker in the Camera Animation Track now remembers your toggled preferences for showing / hiding outdated assets.

  • Added a component flag to CopyToOutput for the new core evaluation system.

  • Added an API to get the list of sequence IDs in a hierarchy.

  • Added a utility function to find a related sequence instance in a given hierarchy.

  • The Entity Import metadata allows a property track to use a different property binding that can also be computed during compiling.

  • The Camera Cut Track can now blend out to a parent sequence's camera cut track. Blend times are affected by sub-sequences time dilation.

  • The Frame Time Range conversion helper now includes a frame number range.

  • You can now directly load an Animation Sequence into a Control Rig Section at the current time.

  • Added return value to OnSectionMoved to know when a moved section caused other sections to be added/removed.

  • The interrogation linker now has a utility function to get the animated value of a property.

  • Camera Shake track now uses the base shake class instead of the (deprecated) Matinee shake class.

  • Camera animation sequences can now be toggled between the camera component and cine-camera component.

  • Added network masks to sub-sections allowing for server and / or client only sub-sequences. This optimizes cinematic assets such as FX or audio when playing back on dedicated servers.

  • Sequencer can now be emulated as a client or a server using the Networking section of the settings menu in the Sequencer UI.

  • High performance ECS-based evaluations now support Byte, Enum, Integer, Vector, and Color properties. This includes the following:

    • Byte, Enum, Integer, Vector and Color properties all now run through the ECS supporting greater parallelism and efficiency.

    • Vectors and Colors both leverage metadata components for the number of vector channels and the color type, respectively.

    • Both types run their own derived property component type handler (FVectorHandler and FColorHandler) for initializing their metadata components.

    • Automatic overriding of PostProcessing properties is now supported. This means that users no longer need to manually override PP settings when animated through Sequencer for them to apply to the camera.

  • Entity systems can now run in multiple phases. Systems can check the currently executing phase by checking Linker > GetActiveRunner() > GetCurrentPhase().

  • Trait Classes for runtime metadata simplify the runtime process, and removes the need for using the PropertyType and OperationalType template parameters. This includes the following improvements:

    • Built-in property accessors are refactored to correctly utilize a trait's class.

    • The API now uses traits which supports the specification of metadata components for switching property types at runtime. This lays the foundation for also using Vector and Color property types.

    • Traits now specify the conversation layer from storage type to the UObject property application for custom accessors, fast PTR offsets, and track instance bindings. This includes the storage type and the required metadata components.

    • Blend Output entities now also contain an FMovieScenePropertyBinding, which is copied from the contributors.

  • Added Read/WriteComponent methods to FEntityAllocation to make custom component access now return a scope-locked wrapper around the component data.

Improvement:

  • There are several new improvements for Sequencer playback.

    • Playback speed is now configurable per sequencer instance by using a delegate. Defaults to previous values.

    • Shuttle Backward/Forward now uses speeds from the delegate.

    • Added the Restore Speed command to restore the speed to the designated playback speed. No default binding.

    • TogglePlay now actually toggles play and no longer calls PlayForward.

  • Upgraded boolean property tracks to use the new evaluation core.

  • Resizing and moving camera cut and shot track sections are more streamlined and easier to do.

  • Files converted from Matinee to Sequencer are now broken into multiple files.

Crash Fix:

  • Duplicating a Control Rig track in Sequencer no longer crashes the Editor.

  • The Matinee to Level Sequence converter plugin no longer crashes Editor.

  • The Editor no longer crashes when playing / rendering level sequences that contain template sequences.

  • Dragging track sections over each other or completely overlapping other sections no longer crashes the Editor.

  • The Editor no longer crashes when you switch worlds with Sequencer open.

Bug Fix:

  • The Output Directory in MRQ now correctly uses a local file path.

  • Template Sequences now correctly have no hierarchical bias. This allows Template Sequence animation to blend with any animation set directly on the same object.

  • Fixed various minor issues with the Matinee to Level Sequencer Converter tool.

  • The camera cut global start times are no longer changed when new global times start.

  • Don't stomp the global start time of camera cuts when new ones start

  • FBX Export options can now correctly be created in Blueprints.

  • The FOV blending preview in Editor now displays correctly when scrubbing/playing over a blend-out at the end of a cinematic.

  • Non-Linear Animation now correctly only caches root transforms when an offset transformation is set.

  • Blending preview code is now viewable in the modifier callback. This solves problems with cameras who have look-at constraints and problems with system dependencies in the new core evaluation system.

  • Zero-frame-wide sections are no longer created when converting Matinee files to Sequencer.

  • Template Sequences now correctly use base classes instead of child classes for compatibility with other Template Sequences.

  • Resolved an issue that prevented a sequence from playing more than once.

  • Exiting a camera cut now correctly goes back to the previous Editor location for blending cuts.

  • Sequencer now correctly counts property composites in the non-float method in the new core evaluation system.

  • BlenderType component values now correctly copy child entities in the new core evaluation system.

  • The warning Number of TAA samples is no longer hard coded in MoviePipeline, and it now respects the actual variable set.

  • Camera shakes with a custom duration no longer incorrectly shows a warning on the shake track.

  • Ease in and out is now correctly enabled for the first and last sections on the Camera Cut track.

  • Easing durations are now automatically reset if auto-easing is not allowed for the given section.

  • Sequencer no longer incorrectly fails to animate an object's properties.

  • World depth green channels now have the correct values for view-relative depth in MoviePipeline. The values now represent the distance from the camera by direction-to-pixel.

  • The latent action setup is now simplified and correctly handles re-entrancy in latent actions.

  • Fixed an issue in MoviePipeline where using Camera Cut for Motion Blur caused camera motion vectors to be incorrect for motion blur.

  • The Camera Shake Previewer is now compatible with Matinee shakes.

  • Selections between Template Sequences and the Editor Viewport now synchronize correctly.

  • Fixed camera jitter problems related to camera blending after a blend has finished.

  • Sequencer: Can now Bake Anim Sequences from a loaded sub sequence.

  • Resolved various outlier issues with Camera Cut blending.

  • The Camera Shake previewer tool now correctly cleans up the completed camera animations and initializes the base FOV.

  • Correctly clean-up finished camera anims and initialize the base FOV in the camera shake previewer tool.

  • Event tracks now correctly rebind to the Sequence Director when copy / pasting tracks.

  • Initial Values are now correctly shared between FSequencer instances and Interrogators. This ensures that exports and trail rendering share the same initial value data, despite objects potentially being in animated states when an interrogation is performed.

Deprecated:

  • You can no longer use ForEachAllocation task callbacks for resolving access to component data. The task internals already handle the callbacks and the lock is maintained correctly for the duration of the task.

Tools

AutoSDK

New:

  • Updated AutoSDK to allow unprivileged execution of the install / uninstall hooks when possible.

UI

  • SRadialBox : Added support for Radial sectors with a central angle smaller than 360 degrees.

Slate

  • Added Custom Safe Zone support for runtime builds.

  • Added debug callstack to root Invalidation Widgets in Slate Insights plugin.

  • Added a new Slate.bAllowNotificationWidget console variable to enable / disable the display of notification widgets.

Crash Fix:

  • Fixed a crash related to Preload Screen multi-thread protection.

Bug Fix:

  • Fixed an issue where mouse input was ignored when the application ran in Standalone mode or after packaging when FSceneViewport wasn't associated with UGameViewportClient.

  • Fixed a bug with the Component Visualizer Manager that prevented right-clicks in the Editor from being reported correctly.

  • Fixed a possible bad reinterpret cast in WidgetRenderer.

  • Fixed an issue that caused combo boxes to sometimes start capturing keyboard or gamepad input upon construction, even though that was not intended.

  • Updated the Slate LetterSpacing property to take font scale into account. Zooming on the UMG designer no longer causes text with line spacing applied to change (relative) size.

  • OnItemScrolledIntoView can no longer be called if the item provided doesn't correspond to a valid Widget.

  • Fix to a possible deadlock in Slate Loading screen code.

  • You can now use the CVar, Slate.Font.AsyncLazyLoad, to force fonts marked as LazyLoad to be loaded on a background thread. This prevents IO hitches in font loading.

  • When reflowing the UI based on Right To Left, the pivot point is now also mirrored about the middle.

UMG

New:

  • UWidgets that had their SWidget component garbage collected now have a (No Slate Widget) label in the Debug Filter of the Blueprint Debugger.

  • The SetSelectedItem function in UCommonRotator (part of the experimental CommonUI plugin) is now virtual.

  • Added a Cvar to limit the Render target size used for Widget Components (4K size by default).

  • Renaming a UMG animation to a name longer than 100 characters now issues a warning and prevents you from submitting that name.

  • Added a new function to allow updating the render target on the UWidgetComponent even if ticking is disabled.

Crash Fix:

  • Fixed a crash that happened when trying to paste multiple items on a Widget that only supports one child if it already has one.

  • Fixed an issue that caused WidgetComponent to try accessing deleted resources in the render thread.

  • Fixed an issue that caused a crash on iOS when entering Korean text.

Bug Fix:

  • Copying and pasting a widget no longer pastes the copy as a child of the original.

  • Fixed a copy-paste issue where editing the text on the copy also changed the text on the original.

  • Fixed an issue that made it impossible to undo changes if window focus was lost while dragging a slider (for example, by using a keyboard shortcut to switch to a different window).

  • Fixed an issue that caused LongPress touch events to end prematurely when the finger or mouse didn't move.

  • Fixed a UMG bug that prevented Widgets from being dragged in the Designer view.

  • Added a null check in RichTextBlock's SetTextStyle.

  • Fixed an assert when renaming UMG animations to strings greater than 1023 characters

  • Fixed crash that could happen when pasting a Widget in UMG Editor.

Virtual Production

New:

  • Performance improvements are now in place for handling large files in Multi-User Editing. This means users can now sync light bakes, take recordings, and other heavy package data efficiently. These files now transfer in seconds on local networks.

  • Multi-user servers will do asynchronous writes with large files instead of serial processing. This improves multi-user servers and reduces possible timeouts when processing large files. \

  • We added Multi-User support to Virtual Camera Actors and authority is configured via the roles assigned in VPRoles.ini.

  • Overall cluster and per-viewport Post Process settings were added to nDisplay clusters.

  • Live Link FreeD is a plugin that allows cameras and other devices that send the FreeD protocol over UDP to be utilized as a Live Link source in the engine. The FreeD protocol sends a combination of device position, orientation, and/or FIZ (Focus, Iris, Zoom) data. These are combined into a Live Link Camera Role that can easily be used in the engine.

  • Live Link VRPN is a plugin that allows connection to a VRPN server to fetch device data as a Live Link source in the engine. VRPN device types that are currently supported are Analog, Dial, Button, and Tracker. Analog, Dial, and Button device types are seen as a basic Live Link role as an array of labeled floats. Tracker device types are seen as a Live Link Transform role.

  • Support has been added for Live Link rebroadcast to virtual subjects.

  • Timestamp functionality was added to Blueprint Live Link virtual subject.

  • Virtual subject Take Recorder support is now available.

  • Added a way to intercept requests before they are handled by the Web Remote Control.

  • The nDisplay plugin now includes a LightCard Blueprint Actor. The LightCard Actor is a customizable card used to provide practical lighting on nDisplay stages.

  • Improved Switchboard config file management allows subdirectory-based organization.

  • Added the ability to access exposed preset entities by ID through the web API.

  • Added a way to get, set, and delete exposed entities metadata, which shows up in the Remote Control Details panel.

  • You can now make Remote Control API requests by using either preset ID or preset name.

  • Improved Remote Control support in -game and packaged games. Properties or functions that can't be used in -game will be marked in the Remote Control Panel, which can be disabled by a project settings. \

  • Added rebinding to the Remote Control Preset, which allows you to re-use presets across levels.

  • The function-picker search is now reliable in the Remote Control Preset.

  • Added a Details panel for exposed fields in the Remote Control Panel.

  • For Switchboard, added autodetection of project and engine paths:

    • Looks for Unreal Editor processes and projects in their command lines for detection.

    • If UE isn't running, then it will try to fill out the engine directory that Switchboard is running from.

  • For Time Management, added a genlocked, fixed-frame rate, custom timestep. It is very similar to the Fixed Rate in Project Settings implemented in UnrealEngine.cpp, except that it keeps up with platform time by accounting for any missed frames when the fps drops below the specified fixed rate.

  • For Camera Calibration, prepared NodalOffsetAlgoPoints to become a base class for algos with machine vision.

    • Now that OpenCV doesn't crash, an extra copy of the media frame was removed.

    • Moved ReadMediaPixels to the step controller so that it can be used by any step without reimplementation.

    • Changed methods and member variables in NodalOffsetAlgoPoints from private to protected because they need to be accessed by derived classes.

    • Added a button to apply the nodal offset to the calibrator parent.

    • Improved a few user-facing error messages.

  • For Switchboard, added local P4 settings detection. These settings can be detected when P4 is enabled in the new Switchboard config dialog, but will respect existing values (if there are any), or if the new Detect button is pressed, in which case it will replace existing values with any values found.

  • Added Multi-User support to nDisplay.

  • In Movie Render Queue, added a stills automation editor utility called Still Render Setup Automation. This automates the creation of a sequence with a still for a given camera. The Python script required a plugin dependency to Sequencer Scripting.

  • The Composure ICompElementManager is now public.

  • RCWebUI: Added a command line option "-RCWebInterfaceDisable" to prevent the WebApp from starting. This is useful when starting instances of the same project that are not meant to run the web server.

  • VPUtilities: Created a Blueprint library function for virtual production rendering-related functions. Added a functor generator to activate a given Scene View Extension when it is:

    • A PIE viewport.

    • A SIE viewport.

    • The active editor viewport.

    • The game primary scene viewport.

    The initial use case is to be able to set an OCIO config in BP.

  • Added Line Wrap and Auto Scroll controls to the log pane in Switchboard. Enabling Line Wrap breaks long messages into multiple lines, ensuring you can read them in their entirety without needing to scroll horizontally. Auto Scroll causes the view to follow the newest messages as they're appended to the bottom of the log, but can be disabled to make it easier to inspect older log messages (and is disabled automatically when you drag the scroll bar).

  • SwitchboardListener now caches the mosaic topologies reported via NvAPI, which change infrequently and can be expensive to query, rather than updating them every second. A Refresh Mosaics button was added to Switchboard's nDisplay Monitor to manually trigger an update.

  • Switchboard now includes the ShaderCompileWorker target when performing compilation on Unreal and nDisplay devices.

  • Switchboard now uses a new Python script called sbl_helper to perform Perforce syncing, rather than the Unreal Automation Tool Sync Project. Syncing is now faster, with better progress reporting, and build versioning is more consistent with UnrealGameSync. sbl_helper laying the groundwork for additional planned improvements.

  • Added Linux support for Blackmagic.

  • Switchboard now includes a toggle setting for nDisplay devices (labeled Unattended, and enabled by default) to include the -unattended argument on the command line, suppressing undesirable interactive UI and notifications.

  • The Switchboard toolbar options, Install Listener and Uninstall Listener, were replaced with a checkbox labeled Launch Switchboard Listener on Login, which more accurately describes its behavior, and a bug in creating the corresponding registry entry was fixed.

  • Added an editor command line argument "-AutoDeclinePackageRecovery" to bypass the Restore Packages prompt and discard autosaves. This is controlled by a corresponding Skip Package Recovery checkbox in Switchboard's Unreal device settings. This can be useful in multi-user editing scenarios, where restoring autosaved packages may not be desirable.

  • Switchboard will send the local nDisplay cluster configuration Blueprint asset to nDisplay devices upon launching them, which simplifies iteration and testing of these configurations without the overhead of submitting to and syncing from version control.

  • Added a new Blueprint editor, the nDisplay Config Editor, specifically for creating nDisplay assets. You can create a cluster, assign projection policies, and model 3D previews of the complex configurations of physical displays. The assets created here are now Blueprint Actors which you can drag and drop into levels. Once instanced in a level, properties can be exposed to Remote Control and replicated with Multi-User. Assets from UE4 4.26 will update to the new version provided that the imported JSON config file is available and at the location where the old asset was imported. It is still possible to import old JSON config files manually by dropping them into the content browser.

Crash Fix:

  • Fixed a crash in the Virtual Camera remote output provider.

  • No longer crashes when force-deleting a Live Link remap asset.

  • Live Link virtual subjects API no longer crashes when multi-threaded.

  • Fixed a crash that occurred when loading a preset with an exposed BP function.

Bug Fix:

  • Fixed an issue with Multi-User Sequencer playback where scrubbing the timeline would result in playing game nodes.

  • Playing back a sequence on a game node no longer results in the spawned objects persisting when closing the Sequencer Editor.

  • Fixed a bug in the Live Link Transform Axis Switch preprocessor that caused incorrect mappings in some cases. The UI was also simplified to use standard Front, Right, and Up axis notation to match other available tools and software. Position and Orientation offsets were added as well to shift the incoming tracking origin to match the desired world origin.

  • The default OCIO 3D LUT file size was increased to 65x65x65.

  • The Camera component frustum now updates when driven from Live Link.

  • Added a way to avoid applying data coming in from Live Link on camera, and to force using the camera component's range instead of relying on the lens file.

  • Fixed the Timed Data Monitor timecode provider display.

  • Added getters for raw animation static and frame data from the Blueprint helper struct SubjectFrameHandle.

  • Fixed an issue where LiveLinkComponent selection based on role did not go down the hierarchy.

  • Resolved an issue with the Timed Data Monitor stage events type that made it unfilterable.

  • Updated the static assert to catch wrong base types for stage events.

  • Added a validity check when updating the Source Framerate from the first enabled Subject with valid data.

  • Fixed the TimedDataMonitor MediaIO input GetDisplayName, where player base SetRate would always return false, causing it to not play back correctly.

  • Composure is now allowed to run packaged builds.

  • Fixed presets with the same names not displaying when querying presets.

  • It is now possible to expose custom events in the Remote Control Preset.

  • In OpenCV, added cv::unreal module. This adds functions to override new and delete operators, so that UE can replace them with its FMemory implementations and avoid crashes when UE passes containers (such as std::vector<T>) that OpenCV populates, then UE tries to release the container memory.

  • Fixed an issue with Switchboard's multi-select combo boxes that could sometimes cause them to show a stale string after all items had been deselected, and improved their handling of mouse clicks.

  • Fixed several instances where malformed JSON commands could cause SwitchboardListener to crash, and added diagnostic logging indicating when required command fields are missing.

Deprecated:

  • Removed a property in FixedFrameRateCustomTimeStep that has been deprecated since 4.21.

Removed:

  • We removed old Virtual Camera tools and assets. Users should now use Simple Virtual Camera or VirtualCamera2 Actor.

  • All references to the deprecated VirtualCamera actor have been removed from the Virtual Camera Showcase project.

Worldbuilding

Bug Fix:

  • Fixed a race condition happening due to the render thread accessing the materials in the main thread.

  • The transient actor UBuoyancyManager is now hidden from Scene Outliner (it will eventually become a subsystem).

  • Deterministic fixes for water:

    • Deterministic names are now used for all automatically-generated UObjects generated by water body actors.

    • Hack around UBodySetup's BodySetupGuid, which generates random GUIDs each time a new UBodySetup is created (this can happen on construction for lake and ocean collision components).

    • With deterministic names for collision components, they can be made net-addressable. This is a solution for warnings occurring on the server about replicated references not being net-addressable.

    • Generated objects have been made NonPIEDuplicateTransient to work around a check in NewObject, which can happen when saving as a map. Otherwise, a duplicated and named object marked for NeedsPostLoad might end up being reused without the flag being cleared.

  • GC collector was not properly tracking materials used by WaterMeshComponent, and this caused a crash. This issue has been fixed.

  • Fixed an issue causing an assert when the debug information for underwater materials was displayed.

  • Fixed an issue where river spline point parameters were getting out of order when the user added new points; it now uses the ordered list of spline mesh components from the river water body, instead of relying on the Actor's GetComponents function which returns components in an undefined order.

  • Fixed a reentrance crash with UWorld::UpdateLevelStreaming.

HLOD

New:

  • Added an HLOD build option "-MapCleanup" that will delete any invalid LODActor.

  • Added the ImpostorBaker Plugin to Plugins\Experimental.

  • HLOD - Added support for per-level custom HLOD baking transform; this allows materials with WPO to be baked properly for the HLOD.

  • HLOD Rebuild Commandlet - Added a "-SkipSubLevels" option to allow building HLODs only for the persistent level.

Bug Fix:

  • Material Baking - Fixed a color constant conversion issue in FMaterialUtilities::CreateProxyMaterialAndTextures. This will only affect the "Bake out materials" tool in the Static Mesh viewer, with no change to HLODs.

  • Fixed a bug causing some Actors with multiple static mesh components to be excluded from the HLOD generation by error.

  • HLOD Clustering - Meshes excluded from HLOD volumes were not considered by the next HLOD level; this is now fixed.

  • HLOD - Ensured that all ISMC instances are properly added to the LODActor instances.

  • Fixed an issue with unbuilt HLOD detection being too sensitive.

  • Mesh Merging - Lightmap UV generation is now skipped if no free channel is found.

Landscape

New:

  • Added a render capture tag for each landscape brush being rendered.

  • Reduced runtime virtual texture invalidation during landscape editing. Editor now invalidates the brush region instead of full components.

  • Deferred readback of landscape edit layer textures to the CPU, to avoid stalling on GPU during landscape layer editing.

  • Neither selecting landscape components nor locking/unlocking landscape layers will dirty world packages anymore.

Bug Fix:

  • Fixed a problem where heightfield data was not being updated when the water brush was updated; if a heightmap/weightmap readback modification was detected during the frame, and the component was not requesting that the collision data be updated, it would fail to update the collision data when a later request was made and no modification was detected at the time of the later request.

  • Fixed an issue where the landscape layer reserved for spline was being lost upon resize.

  • Edigrated CL 14156485 - Fixed a crash that occurred when using the Smooth tool in landscape mode.

  • Edigrated CL 14193183 - Fixed a rare crash that occurred during landscape painting. LandscapeComponent's SceneProxy was recreated while RenderThread was accessing it through the component. Now it makes its copy first.

  • Fixed a problem with landscape component bounds being invalidated when using the water brush; the components were first updated with the ELandscapeComponentUpdateFlag::Component_Update_Approximated_Bounds flag, (temporarily) invalidated the bounds, and then were updated with the IsUpdateFlagEnabledForModes(ELandscapeComponentUpdateFlag::Component_Update_Heightmap_Collision) flag, but the bounds weren't updated if the heightfield was actually unchanged. Now, the bounds are not invalidated (with an approximate bounds computation) if no change is actually detected on the heightmaps.

  • Edigrated CL 14187664 - Fixed a crash occurring in RenderLandscapeComponentToTexture_RenderThread when LandscapeComponentSceneProxy is null. Added ensures at a couple of places to help track rare crashes.

  • Default landscape grass inputs to zero now, instead of throwing a compile error when not connected. Previously we threw an error as soon as node was created but not set up.

Worldbuilding/Landscape

New:

  • Added CVars landscape.RenderCaptureLayersNextHeightmapDraws and landscape.RenderCaptureLayersNextWeightmapDraws to trigger a render capture during the next heightmap/weightmap draw calls.

Improvement:

  • All landscape edit layers, render targets, and draw calls now have a proper debug name.

  • Replaced CVar landscape.OutputLayersDebugDrawCallName, which was forcing the layers to update, with landscape.ForceLayersUpdate, which does the same thing but more explicitly.

Bug Fix:

  • Fixed an issue where landscape layers were incorrectly compositing/decompositing heightmaps when a heightmap was shared between multiple landscape components and not entirely covered by its components (for example, 3x4 components).

  • Generation of landscape normals now matches the CPU version.

  • Fixed an issue where deleting a layer from the Landscape would have no lasting effect when Edit Layers was enabled.

  • The landscape scale XY constraint is now respected when using the viewport gizmo.

  • bFillCollisionUnderLandscapeForNavmesh and bUsedForNavigation were not propagating from landscape streaming proxies to their components when setting the property. This has been fixed.

XR

New:

  • Added the -xrtrackingonly command line parameter to start OpenVR in a mode where frames are not submitted to the renderer. This allows for reading the tracker and device info separately. It also allows multiple instances of the engine to run on a single machine, and for all instances to share incoming tracking and input data.

  • Added support for StereoLayer Quads to the OpenXR plugin.

  • Took OpenXR out of Beta and set it to On by default.

  • Implemented OpenXR Controller Visualization.

  • Implemented missing Head Mounted Display Blueprint nodes for OpenXR.

  • Updated the OpenXR loader and headers to version 1.0.17.

  • OpenXR doesn't support 10-bit sRGB swapchains, so we're forcing 8-bit sRGB swapchain format in OpenXR.

  • Added support for late updating the projection of each stereo view. This ensures that you are projecting for the latest field-of-view information from the headset.

  • Added WebXR standard controller models to OpenXR plugin content. The OpenXR plugin now includes all commonly found XR controller models. \

  • Added Linux support to the OpenXR plugin.

  • Added Head Mounted Display Blueprint nodes to query play space size.

Improvement:

  • For OpenXR, improvements were made to swapchain pipelining.

Crash Fix:

  • Editor no longer crashes when opening a project with OpenXR enabled if an HMD is not attached.

Bug Fix:

  • Start Session/Stop Session in OpenXR plugin now uses exclusive locks so frame calls can't overlap session calls.

  • Fixed the swapchain timeout by increasing retry count, adding a timeout for stereo layers, and increasing the timeout value to 100ms by default.

  • Get Camera Intrinsics for WMR was implemented.

  • Windows Mixed Reality Anchor Store case-sensitivity problems were resolved by setting all IDs on the way into WMRInterop to lowercase.

  • Added Hand Mesh as an AR Capture type for use in WMR and OpenXR.

  • WMR Hand Mesh now hooks up to XRVisualization.

  • WMR's Hand Mesh has been decoupled from spatial mapping. Previously, the Hand Mesh was part of the MRMesh, would only show if spatial mapping was enabled, and could leave zombie hands in view as the hands lost and regained tracking.

  • XR now allocates backing MSAA targets from XR runtimes.

  • Temporarily disabled ScreenSpaceDiffuseIndirect rendering for VR.

  • OnControllerButtonReleased now triggers when isActive becomes false.

  • Fixed ShadowSetup incorrectly checking for Multi-Viewport instead of Mobile Multi-View.

Removed:

  • The deprecated Mono Culling Distance variable was removed from World Settings.

AR

New:

  • Live Link was updated to handle a tick from OpenXR hand tracking.

  • HoloLens apps can now launch a website from an existing Unreal interface in an Edge pop-up.

  • A quality-of-life improvement has been added for using an EHandKeypoint directly as an input in arrays from FXR Motion Controller Data. Previously, developers could cast the EHandKeypoint byte to a 32-bit int using built-in math conversion Blueprint functions, but this was not discoverable, and is not automatically suggested when dragging an EHandKeypoint to a Blueprint integer input.

  • A Scene Understanding update adds an Occlusion Hint OpenXR extension that could return different meshes with different levels of detail for the same surface. This could be a higher detail visible mesh, an occlusion mesh that is not meant to be visualized, or a mesh for collision.

  • Since multiple meshes could be returned for the same surface, we now ensure that only the collision meshes are used with the physics system. The user can set materials on the meshes based on what the mesh usage type is. This also fixes a bug where the trackable added event was firing before the spatial mesh was initialized. Meshes now have an appropriate material applied or added to a particular list when the mesh is first added, rather than waiting for the first update.

  • Add NV12 texture format support for DX11 and DX12 RHIs for HoloLens

Crash Fix:

  • WMR Spatial Mapping has been fixed so that it no longer crashes on Stop/Pause in an AR Session.

Bug Fix:

  • AR Actor types are now cached so the AR Session is not used erroneously in Update.

  • Plane finding in OpenXR no longer checks that spatial mapping meshes exist before processing planes. This allows updating plane finding if spatial mapping is not being used. This has been fixed by making the check predicated on the list of planes.

  • The function SupportsMultipleRenderTargets() now returns true (instead of false) for the Magic Leap OS Lumin.

  • UXR Visualization Function Library methods are now accessible via C++.

  • The ability to toggle Spatial Mapping on and off at runtime without needing to stop/resume the ARSession is now exposed. Toggle failures return false for each of WMR's AR Captures (QR, PV, SR) so a toggle retry can be made.

  • Updated WMR Toggle AR Capture to work before Start AR Session.

  • Added an option to write depth to translucent materials for HoloLens devices.

  • ARCore now uses parent class FDefaultXRCamera for SetupView.

VR

New:

  • The Oculus OVR plugin has been upgraded to v25 (v1.57). Some deprecated API usages were also fixed.

  • Enabled the Mobile Phase Sync for mobile Oculus devices in the Oculus VR plugin.

  • Update HMD priority list to be in this order:

    • Oculus VR

    • OpenXR

    • WMR

    • SteamVR

    Since SteamVR also works with the Oculus Rift and Windows Mixed Reality, give priority to the native Oculus and Windows Mixed Reality plugins before trying SteamVR.

OpenXR is production-ready. If enabled, it should be the priority plugin. In 4.27, the native Oculus plugin still requires higher prioritization to address runtime features that are required for shipping by Oculus but not yet supported in OpenXR .

Crash Fix:

  • Fixed a crash on startup with Oculus when -nohmd was specified in the command line.

Bug Fix:

  • Oculus HMD Module can now set up the Oculus Plugin Wrapper when the Oculus Service is not installed or broken.

  • Redundant OVRPlugin.dll verification has been removed from the Oculus Editor Module.

  • For the Steam VR Input Device, unchecked static_casts to FSteamVRInputDevice were fixed.

Upgrade Notes

AI

Upgrade Notes:

  • The signature for IAISightTargetInterface::CanBeSeenFrom has changed to give users more information about the previous visibility state, and provide access to a userdata payload. Please update your code accordingly.

Datasmith

Upgrade Notes:

  • If you have an existing project using the USDImporter plugin on platforms other than Win64, Mac, or Linux, you may get and error like this:

"ERROR: USDImporter.uplugin is referenced via YourProject.uproject with a mismatched 'SupportedTargetPlatforms' field"

To fix this, open the .uproject file for the project, and change the USDImporter entry in the plugins section from this:

  {
     "Name": "USDImporter",
     "Enabled": true
  },

To this:

  {
     "Name": "USDImporter",
     "Enabled": true,
     "SupportedTargetPlatforms": [
        "Win64",
        "Mac",
        "Linux"
     ]
  },

Editor

  • This introduces a breaking API change for classes inheriting IPersonaPreviewScene or ISkeletonTree that override SetSelectedBone, and for user code that binds to their SelectionChanged event. These now take an extra argument to route the cause of the change (user interaction or direct code) through to the UI elements.

Niagara

New:

  • Updated the Niagara system and emitter asset tag generation code. There are multiple new tags that can help in mass-analyzing content, but these tags will only be available on assets from UE4 4.26 or earlier after resaving the assets in UE4 4.27.

Online

Upgrade Notes:

  • Matchmaker and Signalling server have been moved from Engine/Source/Programs/PixelStreaming to Samples/PixelStreaming. References to these paths will need to be updated. Both Signalling server and Matchmaker can now log to a file.

Deprecated:

  • Deprecated PixelStreamingIP and PixelStreamingPort in favor of the new PixelStreamingURL command line parameter to specify Signalling Server url using ws:// or wss:// Users should replace -PixelStreamingIP <ip> and -PixelStreamingPort <port> with -PixelStreamingURL=ws://<ip>:<port>

Platforms

Windows

Upgrade Notes:

  • Profile Guided Optimization is now available on Windows. Build the client with -PGOProfile and -PGOOptimize to create Profile Guided Optimization executables for improved performance.

Rendering

Bug Fix:

  • Default maximum texture size for cubemaps generated from long-lat sources has been changed from 512 to unlimited. Cubemap textures saved before upgrading to UE4 4.27 will be explicitly set to 512 on asset load to preserve their old behavior, but new generated cubemaps will base their resolutions on the sizes of their source long-lat textures.

  • Previously imported .hdr textures were processed in linear color space but marked as sRGB, which could lead to incorrectly using "Color" sampler type instead of "Linear Color" in texture expressions. This can cause incompatibility between new textures and old texture expressions; to resolve this, update the texture expressions to use "Linear Color" sampler type when referencing newly imported .hdr textures.

UI

Slate

  • WidgetInteractionComponent's PointerIndex variable is now an integer; it used to be a float.

Virtual Production

Upgrade Notes:

  • The LiveLink camera controller has been moved to its own plugin, called LiveLinkCamera. You must enable this to get LiveLink camera controller functionality. Previously, the controller was automatically added when enabling the LiveLink plugin.

New:

  • To improve performance of Multi-user in situations of large files, we have added heuristics to the message construction to use compression. With this change, the system only compresses messages between 512 bytes and 3 megabytes. This is a major update to the session database, and existing sessions will be incompatible.

既知の問題

For a complete listing of known issues affecting Unreal Engine 4.27, please see the Unreal Engine Public Issue Tracker.

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる