Unreal Engine 4.26 リリース ノート

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

Choose your operating system:

Windows

macOS

Linux

新機能

Unreal Engine 4.26 のリリースにより、 比類のないリアリズムで環境、キャラクター、生き物を作成し、UnrealEngine の周りに全体的な制作パイプラインをデザインすることができます

実際の制作で使用できるようになったヘア、ファー、フェザーのシステムでは、 限りなく本物に近い人間と動物をデザイン することができます。VolumetricCloud コンポーネントを SkyAtmosphere および SkyLight と一緒に使用することで、芸術的センスを存分に発揮して リアル、あるいはスタイライズドな空、雲、その他の大気効果 の作成およびレンダリングが可能となります。新しいウォーターシステムでは、キャラクター、乗り物、武器と反応する 風景の地形の中に本物のような水域 が生み出されます。Chaos physics の機能セットが改善および拡張されたことで、 リジッドボディに加えてビークル、クロス、ラグドールのシミュレーション が可能になりました。環境のあらゆる側面を活気づけることができます。

シーケンサーが、Control Rig および新しいフルボディ IK ソリューションと連携するようになりました。 シーケンサー内に新しいアニメーションを作成 することで、外部ツールの使用を減らします。Movie Render Queue (以前の High Quality Media Export) が レンダリングパスをサポートするようになりました 。ダウンストリームの合成アプリケーションで 最終イメージをさらに改善 することができます。nDisplay マルチディスプレイ レンダリングは、容易なセットアップとコンフィギュレーションに加えて「より多くのピクセルをより高いフレームレートでレンダリング可能にする」ため、パフォーマンスが向上し、既存のハードウェアでより大きな LED ボリュームをサポートします。Collaborative Viewer テンプレートが大幅に改善され、 共同デザイン レビュー エクスペリエンスが強化されたことで、より多くのユーザーがセッションに参加できるようになりました 。リモートコントロール API が改善され、Unreal Editor のプロパティと機能を UI ウィジェットにシームレスに接続できるようになりました。これにより、アーティストがステージにいる時に空の回転や太陽の位置を iPad から変更するなど、ユーザーは 外部デバイスからプロパティをすばやく変更できる ようになります。

今回のリリースに含まれる改善点は、GitHub の Unreal Engine のデベロッパーのコミュニティから寄せられたものです。Thanks to each of these contributors to Unreal Engine 4.26: adamnv, Aintaer, aknarts, Antonrr, bitdewy, blakeanator, broly, ckendal3,codeslicer0,D3adKnight,dd-sbinet, DecoyRS, dogles, doublebuffered, drichardson, erebuswolf, eugene-rho, geordiemhall, gmpreussner, gunsungithub, HafdisE, hgamiel, HSeo, iwlasny, jackknobel,jessicafalk, jgilbert-ca, jiahuah-owi, JorgeQuesada, jpark37,kristjanvalur, KristofMorva, LizardThief, lolmx, Magic Leap, Mattiwatti, mengran3275188,MichaelBell, Microsoft, moppius, muchcharles, muchcharles, nklose, Oculus, projectgheist,RPG3D, SertacOgan,Skylonxe, smallshake, stephan-nordnes-eriksen, The Coalition,tommybear, valval88, Vawx, vsolobay, yaakuro,Zeblote, zompi2

主要機能

ヘア、ファー、フェザー機能のプロダクション リリース

このリリースでは、髪のレンダリング システムが実際の制作で使用できるようになりました。直近のリリースでビジュアルの向上を重ねることで、継続的に髪のレンダリングを改善してきました。この改善により、ミドルレンジからハイエンドのデバイスでパフォーマンスと拡張性が向上し、Unreal Engine でより幅広い機能をサポートするようになりました。

image alt text

グルーム アセット エディタ

プロパティ エディタに代わって新たに搭載されたグルーム アセット エディタは、インポートしたグルームを自分のビューポートで視覚的に表示して管理、編集できる機能を完備したエディタです。

グルーム アセット エディタでは、次の操作を実行できます。

  • 補間、ストランドの外観や長さ、物理などに関してグルームを微調整する

  • インエディタ ツールを使用して、ストランド、カード、メッシュの詳細度 (LOD) を生成して設定する

  • 様々な髪の表現のためのマテリアルを管理する

詳細については、「 髪のレンダリングとシミュレーション 」およびグルーム アセット エディタに関するドキュメントを参照してください。

空、雲、および環境のライティング

このリリースでは、これまで積み重ねてきた取り組みにより、空、大気、雲の状況を反映した広大なワールドに、時間帯に応じたダイナミックなライティングを実現できるようになりました。さらに、このような環境およびライティングのコンポーネントを一か所で作成、編集できる統一ウィンドウも追加しました。

ボリュメトリック クラウド

大規模な雲のランドスケープや大気フォグのための新しい雲のレンダリング システムが追加されました。このシステムでは、コンソール プラットフォームとデスクトップ プラットフォームでスケーラブルで質の高い雲を作成するための完全にダイナミックなマテリアル主導のワークフローを提供します。また、映画やテレビ制作に対応できるシネマティック品質をサポートしています。

マテリアル主導型のワークフローでは、ボリューム テクスチャを使用した、アーティストが使いやすいアプローチを提供しています。このアプローチにより、作成した天候エフェクトと組み合わせて、大気中に拡がる波状雲、陰鬱な曇り空の日、サイクロンまで様々な種類やバリエーションの雲を作成することができます。

image alt text

この雲システムが完全に統合され、空の大気、スカイ ライト、(太陽と月を表現する) 2 つのディレクショナル ライトからの環境照明とのインタラクションをサポートしています。雲システムを使用するには、 Volumetric Cloud コンポーネントをシーンにドラッグして、そのコンポーネントにボリューム テクスチャを持つマテリアルを割り当てます。このシステムを使用し始めることができるように、構成済みの雲マテリアルのサンプルが、Engine/EngineSky/VolumetricClouds/m_SimpleVolumetricCloud の「Engine Content」フォルダに用意されています。

詳細については、「Volumetric Clouds (ボリュメトリック クラウド)」のドキュメントを参照してください。

Sky Atmosphere コンポーネントの改善

このリリースでは、プロジェクト全体をより使いやすくし、また品質を向上させるため、Sky Atmosphere コンポーネントにいくつかの新機能が追加され、既存の機能が改善されました。

image alt text

  • 空が不透明のメッシュとボリュメトリック クラウドのシャドウを受け入れることができるようになりました。

    • [Cast Shadows on Atmosphere (大気にシャドウをキャスト)] [Cast Cloud Shadows on a Directional Light (ディレクショナル ライトに雲のシャドウをキャスト)] を有効にすると、大気のシャドウイングをサポートします。

    • [Cloud Shadow Strength (雲のシャドウの強さ)] [Cloud Shadow on Atmosphere Strength (大気に対する雲のシャドウの強さ)] では、シャドウの濃さを制御します。

    • ワールドをカバーして妥当なパフォーマンスを実現できるように適切なシャドウ マップの解像度とレベルを設定することで、不透明なシャドウの距離、深度バイアス、およびスケーラブルなシャドウ マップの解像度を制御できます。

    • また、雲は雲の下の大気の多重散乱をオクルードします。このようなアンビエント オクルージョンは、暗く不気味な嵐を作成するうえで重要です。

  • 大気のトレースに使用されるサンプル数のスライダを使用する際のスケーラビリティを改善しました。

    • 不透明のメッシュや雲からのボリュメトリック シャドウを有効にするには、ボリュメトリック シャドウのディテールのすべてを確実にキャプチャできるように、大気をトレースする際により多くのサンプルが必要になります。Sky Atmosphere コンポーネントのサンプリング品質を調整できるようになりました。

    • シネマティックスでは、コンソール変数 r.SkyAtmosphere.SampleCountMax を使用してサンプル数の上限を上げ、Sky Atmosphere コンポーネントのプロパティ フィールドにより大きい値を入力することで、さらに高い品質の結果を得ることができます。

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

スカイ ライトのリアルタイムのキャプチャ

スカイ ライティングで、大気、雲、高さフォグ、不透明なメッシュ用のシーンのリアルタイム キャプチャをサポートするようになりました (Is Sky が有効になっている非ライティング マテリアルを使用)。これにより、スカイ ライトの品質が向上し、ブループリント ノードでより迅速に機能するようになります。スカイ ライトの リアルタイム キャプチャ モードでは、CPU リードバックを一切行うことなく、GPU 上ですべての計算を実行するため、シーンをキャプチャする際に生じる可能性のある問題が解消されます。

詳細については、「 スカイライト 」ドキュメントを参照してください。

環境光ミキサー

新たに搭載された 環境光ミキサー は、1 つのウィンドウに空、雲、ディレクショナル ライト、スカイ ライトのすべての環境ライティング コンポーネントが集約されており、簡単にアクセスして編集することができます。デザイナーおよびアーティストは、このウィンドウからこれらのコンポーネントを作成して編集したり、プロパティ パネルに表示する詳細度を選択したりできます。

image alt text

シーンで環境光ミキサーを使用するには、メイン メニューの [Window (ウィンドウ)] ドロップダウンで [Environment Light Mixer (環境光ミキサー)] を選択します。

詳細については、「 環境光ミキサー 」ドキュメントを参照してください。

ウォーター レンダリングおよびメッシュ システム (実験的機能)

完全な機能を備えた新しいウォーター レンダリングとメッシング システムが搭載されました。このシステムでは、大規模で開かれたワールドをサポートしており、スプラインベースのワークフローを使用して、河川、湖、海を素早く作成できます。また、このウォーター システムでは、ゲームプレイでの物理インタラクションおよび流体のシミュレーションをサポートするサーフェス メッシュ機能とともに、統一されたシェーディングとレンダリング パイプラインも提供しています。

image alt text

image alt text

Water プラグインでは、既存の Landmass プラグインを活用し、Water Body アクタが非破壊の「 ランドスケープ編集レイヤー 」機能を使用して、テレイン サーフェスとインタラクションできるようにします。

image alt text

ウォーター システムは、ワールドをビルドする (河川、湖、海をビルドして編集し、ワールドにシームレスに融合させる) ための 2 つの機能コンポーネントと、マテリアルとポスト プロセスを使用してルック&フィールを定義する単一のレンダリングおよびシェーディングのパイプラインとして機能します。

ウォーター レンダリングおよびシェーディング機能

ウォーター レンダリング パイプラインでは、ワールド内の水の外観を定義するのに役立つ多くの改善、機能強化、およびプロパティが含まれています。つまり、独自のマテリアルを作成したり、エンジンで提供される編集可能なデフォルトのマテリアルから作成を開始することができます。この機能を使って、よどんだ湖、流れる川、美しい青い海など、自分が定義した外観を持つあらゆるタイプの水を一から作成することができます。

ウォーター レンダリングとシェーディングの一部として、次のような属性と機能を利用できます。

  • 水中ポスト プロセス マテリアル。カメラ位置に基づいて自動的に適用され、水中での部分的なサブミッションも可能です。

    image alt text

  • 流れる川から穏やかな湖への遷移など、マテリアル主導のウォーター ボディ (水塊) タイプ間の遷移の指定。

    image alt text

  • コースティクス マテリアル生成ツール。浅い水面下に適用できる独自のコースティクス マテリアルを定義してレンダリングするのに役立ちます。

    image alt text image alt text

  • 単一レイヤー ウォーター シェーディング モデル。屈折およびユーザー定義の散乱、吸収、吸光係数をサポートする 1 つ深度のレイヤーを持つ物理ベースの水面を提供します。

Water Body アクタおよび編集

小さなシーンまたは広大なワールドに関わらず、水を追加する場合に水の作成と編集をきわめてシームレスで簡単に行えるようになりました。Water Body アクタを使用すると、様々なウォーター ボディ タイプから選択して、レベルに配置することで、河川、湖、海などの水を表現できます。これらのウォーター ボディ タイプごとのスプラインベースのワークフローにより、レベルの作成を直感的かつ簡単に開始し、素早く編集することができます。

新しい Water Body アクタでは、次の機能を使用できます。

  • テレイン サーフェスとのブレンドや編集をサポートする様々な Water Body アクタを使用して、シンプルな世界や複雑なワールドを作成できます。ランドスケープ テレインと同様に、ウォーター ボディ メッシュでは、配置済みのタイルを使用します。このタイルは、距離に応じて動的にスケーリングすることで、近くにある場合は高度にテッセレーションされた詳細度の高い水面を、遠くにある場合は詳細度の低い水面を作成できます。

    image alt text

  • ウォーター ボディは、高度にカスタマイズ可能なゲルストナー波シミュレーションを備えています。このシミュレーションはシンプルなものから複雑なものまで様々な水面を作成するのに使用できるため、ワールドに配置された各ウォーター ボディの外観をより簡単に作成、編集することができます。

    image alt text image alt text

  • スプラインベースのワークフローにより、ワールド全体に適用するウォーター ボディを素早く編集および複製することができます。

    image alt text

  • インタラクティブな流体物理シミュレーションで、水面に対するキャラクターやオブジェクトのインタラクションが可能になります。これらは、水の波紋、泡、水しぶきなどで表現されます。

    image alt text

ムービー レンダー キューのワークフローと機能強化 (ベータ)

このリリースでは、新しいワークフローとエクスポート機能を追加することで、 Movie Render Queue (これまでの High-Quality Media Export) 機能が拡張されています。

新しいワークフロー

エクスポートとレンダリングをサポートする次の新しいワークフローが加わりました。

  • Final Cut Pro で出力した XML/EDL ファイルのサポート

  • OpenColorIO の統合

  • 独自のアプリケーションに実装するためのランタイム サポート

image alt text

レンダリング パスのサポート

デイリー (編集用の下見フィルム)、ポスト、エディトリアルなど、標準的なプロダクション パイプラインの様々な側面で使用するコンテンツを生成するために、ムービー レンダー キューで、個別のパスで様々なデータをレンダリングできるようになりました。現在、次のチャンネルがサポートされています。

  • マット ID (制限付き) / ユーザー定義レイヤー

  • Z 深度

  • ワールド位置

  • ワールド法線

  • アンビエント オクルージョン

  • リフレクション

image alt text

これらのチャンネルの他、次のような複数の改善が行われています。

  • 個々のショットの有効/無効を切り替えることで、レンダリングする必要のある特定のショットを分離することができます。

  • 現在のジョブ、設定、ショット マスクを格納するアセットにキューを保存できるようになりました。

  • 一部のコンフィギュレーション設定をショット単位で調整できるようになりました。

さらに、Deadline などのサードパーティのレンダリング管理ツールを使用するときに、エクスポートやバッチ レンダリングを効率化するため、UX に対していくつかの改善が行われました。

Pro Media Codecs のサポート

ムービー レンダー キューで以下のコーデックをサポートするようになりました。

  • Apple ProRes (高ビット深度 10-12 ビット)

  • Avid DNxHR (810-12 ビット)

  • マルチチャンネル EXR (16、32 ビット)

image alt text

次の EXR の圧縮設定をサポートしています。

  • 非圧縮

  • PIZ

  • ZIP

image alt text

ムービー レンダー キュー関連のすべてのドキュメントは、「 シーケンサーでのレンダリングとエクスポート 」で確認できます。

シーケンサー ノンリニア アニメーション (NLA) ツール (ベータ)

ノンリニア アニメーションを使用すると、新しいアニメーションやシネマティックスを作成するために、アニメーション アセットを素早く作成、変更、結合、およびブレンドできます。これにより、アニメーション シーケンスの再利用や作成のワークフローが改善され、特にバーチャル プロダクションに役立ちます。

これは、次のように様々な方法でサポートされています。

  • シーケンスを予測的かつ非破壊的にブレンドします

  • ルート モーション ソリューションがゲームプレイとよりシームレスに統合されました

  • シーケンサーを使用してスケルタル構造の個々のボーンを編集できます

  • ノンリニア編集を容易にするための各種シーケンサー ツールが強化され、合理化されました

image alt text

シーケンサーでコントロール アニメーションを ControlRig にインポートする (実験的機能)

FBX を介して DCC リグのトランスフォームからシーケンサーの ControlRig にスパース アニメーション データをインポートできるようになりました。これにより、スケルタル アニメーション データをシーケンサー以外にもインポートできるようになりました。

FBX データをインポートするには、ControlRig トラックを使用して、 [Import Control Rig FBX (コントロール リグ FBX のインポート)] を選択します。どのコントロールをインポートするかを指定したり、アニメーション カーブをコントロールにマッピングする方法のオプションを絞り込んだりすることができます。

nDisplay の改善

このリリースでは、 nDisplay に複数の機能が追加され、ユーザー エクスペリエンスを改善し、様々な種類のディスプレイ サーフェスにレンダリングできるようになりました。nDisplay コンフィグ ファイルを JSON ファイル形式で簡単にカスタマイズできるようになりました。また、クラスタ イベントでバイナリ形式を使用できるようになり、データのスループットとレイテンシーが向上しました。

nDisplay 設定ビューア (ベータ)

新しい nDisplay 設定ビューア を使用すると、nDisplay のセットアップを簡単に構成できます。このビューアでは、設定階層、レンダリング ノード、ウィンドウ、ビューポート、入力、カメラ、および投影ポリシーのツリーが表示され、それぞれに 詳細 パネルがあります。また、ビューポートの 2D レイアウトと投影ポリシーの 3D 表現も確認できます。

image alt text

NVIDIA NVLink を使用したマルチ GPU のサポート

NVIDIA NVLink を使用したマルチ GPU (mGPU) のサポートを追加し、 nDisplay を大型 LED ボリュームに拡張できるようになりました。コンフィグ ファイルの viewport セクションの gpu_node パラメータで、nDisplay ビューポートのレンダリングにシステム内のどの GPU を使用するかを指定できるようになりました。インカメラ VFX のシナリオでは、1 つの GPU をカメラのインナー フラストラムのレンダリングに割り当て、より低いスクリーン パーセンテージでのアウター フラストラムのレンダリングにもう 1 つの GPU を割り当てると、パフォーマンスが向上します。

image alt text

image alt text

nDisplay VIOSO の統合 (実験的機能)

Unreal Engine に VIOSO テクノロジーが組み込まれ、サポートされるようになり、きわめて複雑なサーフェスでのプロジェクターのワーピングとソフト エッジ ブレンディングが可能になりました。次の nDisplay 投影ポリシーを使用して、ネイティブの VIOSO 形式 ( .vwf ) でワープ ファイルおよびブレンド ファイルをロードできます。

  • MPCDI

  • SDK のネイティブの統合

image alt text

nDisplay DomeProjection 投影ツールの統合 (実験的機能)

Unreal Engine に DomeProjection 投影ツール が組み込まれて、サポートされるようになり、巨大なドーム型サーフェスでのプロジェクターのワーピングとソフト エッジ ブレンディングが可能になりました。nDisplay 投影ポリシーの ネイティブ SDK 統合 を使用して、ネイティブの DomeProjection 形式でワープ ファイルおよびブレンド ファイルをロードできます。

image alt text

Chaos (ケイオス) による決定論的クラスタ レンダリング (ベータ)

クラスタ レンダリング ノード間でレンダリングする場合のビジュアルの一貫性を実現するために、 Chaos などのリアルタイム機能のための決定論的なレンダリングを追加しました。

Sky Atmosphere レンダの問題を修正

Sky Atmosphere は、nDisplay が使用する Scene Capture コンポーネントの 1 つによって、キャプチャしないようにフラグが設定されている場合でも、キャプチャされていました。この問題により、シーンの上半分が明るくなっていました。回避策を講じたため、nDisplay でこの問題は発生しなくなりました。

インカメラ VFX テンプレート

インカメラ VFX Unreal プロジェクト テンプレートは、ライブアクション LED ステージを構成するスターティング ポイントとして使用できます。このプロジェクトでは、次の機能を紹介します。

image alt text

  • インカメラ VFX のための nDisplay の設定とブループリントのセットアップ

  • インナー フラスタムおよびアウター フラスタム

  • nDisplay で LED ウォールを定義するためのメッシュベースのワープ

  • Live Link

  • クロマキーとトラッキング マーカー

  • 色補正領域

  • Web Remote Control

  • OSC

Collab Viewer テンプレートの改善

このリリースでは、UI の設計を変更しコラボレーション セッション用のユーザー入力機能を追加しました。また、セッションをより多くのユーザーに拡張できるように、パフォーマンスを改善しました。

コラボレーション セッションでの音声通信

プロジェクトでデフォルトで有効になっているボイス オーバー IP を使用して、セッション内で他のユーザーと通信することができます。デスクトップ UI で音声通信のオン/オフを切り替えることができます。

UI の設計を変更

2D のデスクトップ UI から VR メニューまで、すべての UI 要素の設計を変更しました。3D アバターが改良され、リモート参加者が表示されていない場合にインジケーターが表示されるようになりました。

image alt text

image alt text

ネットワークの改善

ボトルネックや切断を回避するため、ネットワーク ブループリントのパフォーマンスを改善しました。ネットワーク設定が高い負荷に対応できるように調整され、より多くの参加者がよりスムーズなオブジェクトの操作と動きを体験できるようになりました。

image alt text

両手でのインタラクション

没入型体験で、両手または複数のコントローラーを使用して異なるオブジェクトを同時に操作できるようになりました。

image alt text

リモート コントロール API (ベータ)

リモート コントロール API が GET、PUT、POST、DELETE アクセスを備える REST に完全に準拠した API になりました。また、エンジン内のプロパティをリモートで制御するためのデフォルトのウィジェット、スライダー、ゲージ、ボタンなどを備えるコンパニオン Web アプリも追加しました。

image alt text

  • 永続的な Web 接続 - WebSocket 接続が永続的な接続になり、接続を閉じることなくライブ データを受信できるようになりました。

  • パッケージ化されたアプリでの Web サーバー - パッケージ化されたアプリで Web サーバーを実行することで、Web アプリからリモートに制御できるようになりました。

  • リモート コントロール プリセット - リモート コントロール プリセット アセットに公開されているすべてのコントロールを表示する [Remote Control (リモート コントロール)] パネルを追加しました。このパネルを使用すると、UI にプロパティを公開したり、[Details (詳細)] パネルに表示できない関数ライブラリを公開したりできます。

  • リモート コントロール プリセット API レイヤー - ユーザーフレンドリーなリモート コントロール プリセットに加えて、リモート コントロール プリセット API を追加しました。この API により、公開されているすべてのアクタを取得するなど、シーン内の情報に簡単にアクセスできるようになりました。

  • HTTP Server Port Change - Remote Control API のデフォルト HTP サーバー ポートは 30010 になりました。

Chaos Physics (ケイオス物理) (ベータ)

Chaos Physics は、 フォートナイト で使用されている軽量な物理シミュレーション ソリューションです。今回のベータ リリースでは、この機能を学習中のデベロッパーが利用できるようにしました。Unreal Engine 4.26 (Epic Launcher で利用可能) の物理エンジン サブシステムでは PhysX がデフォルトで有効になっていますが、今後のリリースで Chaos Physics がデフォルトで有効になると PhysX は非推奨になります。

デフォルトでソルバが有効にされた特別ビルドは近い将来使用可能になります。

image alt text

Chaos Physics のベータ リリースでは次の機能を使用することができます。

これらの機能の詳細については、「 Chaos Physics の概要 」を参照してください。

Chaos Vehicle (ケイオス ビークル) (実験的機能)

Chaos Vehicle の作成を試してみるには、「 Chaos Vehicle Setup guide (Chaos Vehicle のセットアップ ガイド) 」を参照してください。または、PhysX Vehicle (PhysX ビークル) を Chaos に変換するには、こちらの「 変換ガイド 」を参照してください。

Zen Loader (ベータ)

最新のハードウェア技術を活用した次世代コンソール向けのランタイム Zen Loader をリリースします。Zen Loader は次のようなメリットを提供します。

  • ロード時間の短縮

  • ストリーミング プロセスや起動プロセスのロード時間の短縮

  • データ アクセスのための低オーバーヘッド インターフェースを提供する新しい入出力メカニズム

  • 次世代のストレージ API とのインターフェースの役割を果たす API を搭載。この API により、最小限の CPU オーバーヘッドでターゲット メモリに直接データを読み取ることができます。

既存の EDL ローダーをベースにしているものの、Zen Loader は EDL ローダーのすべての機能をサポートしているわけではありません。

メッシュ作成ツールの改善 (実験段階)

メッシュ作成ツールが追加のツールと機能強化で拡張され、エンジン内でメッシュ アセットをさらに簡単に作成できるようになりました。このツールセットの更新により、エディタでの基本的なモデリング タスクおよび編集タスクのワークフローが拡張されました。

image alt text

これらのツールにアクセスするには、最上部にあるメニュー バーで [Edit (編集)] > [Plugins (プラグイン)] を選択して、 Modeling Tools Editor Mode プラグインを有効にします。プラグインを有効にした状態で、ツールバーの [Modes (モード)] ボタンをクリックして、 [Modeling (モデリング)] オプションを選択するか、 Shift + 7 キーを押します。

プリミティブ作成ツールバー

パラメトリック プリミティブに独自のツールバーが追加され、カスタマイズ可能なプリミティブ形状の標準セットに簡単にアクセスできるようになりました。

image alt text

メッシュ回転ツールの改善

カスタムの回転メッシュを作成するための新しいツールを 2 つ追加しました。アーティストは、エディタ ウィンドウで新しい断面をインタラクティブに描写したり、既存の断面を選択して回転させ、多数のユニークな形状を作成したりすることができます。

image alt text

  • ユーザー定義の軸でカスタマイズされた回転を行うことができる

  • ユーザー定義のパラメータを使用して、形状を 1 つ上のレベルに向上させることができる

ミラー ツールの改善

選択したメッシュを定義した軸を中心にしてミラーリングできるようになりました。必要に応じて、新しいメッシュを元のメッシュとマージしたり、別の新しいメッシュを生成したりすることができます。

image alt text

ミラー ツールに複数の機能強化が行われました。この機能強化により、対称性への依存が解消され、複数の反復的な機能が、単一のツールに統合され、このツールでメッシュの組み合わせと結合、法線の反転、軸を中心としたアセットのミラーリングを実行できるようになりました。

ブーリアン ツール

メッシュ作成ツールセットに ブーリアン ツール が追加されました。ブール演算では、複数のスタティック メッシュの交差、結合、または差分を使用して、1 つのスタティック メッシュを作成します。

image alt text

1, Boolean:Union; 2, Boolean B-A.

ブーリアン ツールセットでは、2 つのスタティック メッシュのオーバーラップを減算したり、それらのメッシュのトリムされた部分だけを抽出したりすることもできます。

メッシュ編集ツールの改善 (実験段階)

新しいツールでメッシュ編集ツールセットが拡張され、一般的なモデリング手法やプラクティスに対応できるようになりました。さらに、既存のツールに新しいオプションが追加され、より使いやすくなりました。

image alt text

image alt text

  • Insert Edge (エッジの挿入) を使用すると、クワッドベースのポリゴングループをインタラクティブに分割して、結果として得られるメッシュを再三角化することで、より明確なトポロジを実現できます。

  • Edge Loop (エッジ ループ) ツールを使用すると、クワッドベースのポリゴングループを含むメッシュに単一または複数のエッジ ループを追加できます。

  • Hole Fill (穴埋め) ツールが、スムーズな穴埋めのための新しいオプションで強化されました。

  • アーティストは、 Offset (オフセット) ツールを使用して指定した値だけメッシュをオフセットすることで、シェル メッシュを作成したり、既存のメッシュ フォームを展開したりできるようになりました。

  • Edit Tangents (接線の編集) ツールを使用して、選択したメッシュの接線を設定したり、再計算したりできるようになりました。

スカルプティング ツールの改善 (実験段階)

image alt text

スカルプティング ツールと変形ツールに新機能とブラシ オプションが追加されました。アーティストは、エンジン内でカスタム ウェイト マップを作成できるようになりました。このことにより、スムーズ ツールと変位ツールの機能を強化できます。

image alt text

ウェイト マップ

image alt text

メッシュをウェイト マップに変える

Datasmith Exporter Plugin for Navisworks のプロダクション リリース

Datasmith がサポートする 3D アプリケーションがさらに増えて、Autodesk Navisworks をサポートするようになりました。

Epic Games の Navisworks Exporter プラグインには、Epic Games の他の Datasmith エクスポータと同じ機能の多くが含まれており、Navisworks 2019、Navisworks 2020、および Navisworks 2021 をサポートしています。

メタデータのエクスポート

このプラグインでは、Navisworks シーンからのメタデータのエクスポートを完全にサポートしています。データは、次の形式を使用してタブ名の前に付加されます。

[TabName]_[PropertyName] = [Value]

image alt text

この画像では、結果は次のようになります。

MyTab_MyStringProperty = "MyStringValue"

MyTab_MyBooleanProperty = "Yes"

MyTab_MyFloatProperty = "0.000"

MyTab_MyIntegerProperty = "0"

Datasmith Exporter Plugin for Rhino のプロダクション リリース

きわめて幅広い 3D アプリケーションをサポートするという目標の一環として、Unreal Engine で Rhino から直接 Datasmith ファイルをエクスポートできるようになりました。

この新しいエクスポータは、既存の Datasmith プラグインと同様に機能し、MacOS と Rhino 6 をサポートしています。このプラグインは、オブジェクト名、ピボット ポイント、マテリアル名、レイヤー、階層などを、既存の UE 4.25 Rhino のインポート プラグインと同じか、非常に類似した形で保持します。

メタデータ

これらの重要なディテールを保持するために、アセットにカスタム プロパティをキー値ペアとして追加し、これらの値を Datasmith メタデータとしてシーンに引き継ぐことができるようになりました。

image alt text

Rhino のワークセッション データ

Rhino Exporter プラグインでは、ワークセッションを介してロードされたデータをシーンの一部としてエクスポートすることができます。Datasmith は、これらのオブジェクトがネイティブ シーンの一部であるかのようにデータをインポートします。

USD Live アクタ とステージ インポータの改善 (ベータ)

Unreal Engine では、Pixar のユニバーサル シーン デスクリプション (USD) 相互交換形式のサポートを継続的に拡張しています。多くのさまざまなアプリケーションで USD 形式が使用されており、既存のプロダクション パイプラインへの Unreal の統合を促進するために、いくつかの機能強化が追加されています。

image alt text

USD ステージの改善

  • シーケンサーで UsdGeomXformable トランスフォームを直接アニメートして、そのアニメーションを USD に戻すことができるようになりました。

  • USD ライト (UsdLuxLight スキーマ) のサポートを追加しました。

  • USD Preview Surface の法線マップのサポートを追加しました。

  • Unreal のモーフ ターゲットとしての USD ブレンド シェイプのサポートが追加されました。

  • USD ジオメトリ アニメーションが Unreal Geometry Caches を介して再生されるようになり、パフォーマンスが向上しました。

USD インポータの改善

  • 新しい USD インポータが搭載され、USD ステージでサポートされているすべての USD スキーマをインポートすることができます。

  • 新しいインポータでは、スタティック メッシュ、スケルタル メッシュ、モーフ ターゲット、アニメーション シーケンス、マテリアル、アクタ、カメラ、ライト、および階層スタティック メッシュ コンポーネント (HISM) をインポートします。

  • バリアント セットとバリアントを使用して、USD での LOD レベルの表現を処理します。

USD エクスポータの改善

  • USD エクスポータで、スタティック メッシュをエクスポートする際に、頂点カラー、オパシティ、LOD、マテリアルの割り当てをエクスポートできるようになりました。

  • Unreal Engine のマテリアルをベイクして USD Preview Surface として直接 USD にエクスポートできます。

  • スケルタル メッシュとモーフ ターゲットをエクスポートする機能を追加しました。

その他の USD の改善

  • MacOS での USD のサポートを追加しました。

  • USDZ ファイル拡張子をサポートしました。

  • USD SDK を Python 3 をサポートしている 20.05 にアップグレードしました。

Alembic ストリーミングの改善 (ベータ)

image alt text

Alembic は、複雑なスタティック データやアニメートされたデータをディスク上のストリーミング可能なキャッシュ ファイルにキャッシュするメカニズムとして、メディアおよびエンターテインメント分野全体で広く使用されています。Unreal Engine では、キャッシュされた Alembic データをジオメトリ キャッシュとして先にインポー トする必要なく、エンジンで直接このデータをストリーミングできるようになりました。

プロセス間での GPU テクスチャの共有 (ベータ)

image alt text

TextureShare は、CPU をバイパスしている間に Unreal Engine と他のプロセスとの間で GPU テクスチャやバッファを効率的に送受信する新しいプラグインです。TextureShare は、同期メカニズムとスレッド バリアをサポートしているため、共有アプリケーション間の一貫性が保たれます。この機能は、nDisplay を使用するか、またはスタンドアローンで使用できます。

新しいバーチャル カメラ (ベータ)

バーチャル カメラ のアーキテクチャを、独自のバーチャル カメラをカスタマイズ、拡張、作成できるように、モジュール式 コンポーネント に再構築しました。また、この再設計されたアーキテクチャに基づいてビルドされた新しいバーチャル カメラも実装しており、すぐにプロダクションで使用できるソリューションを提供しています。この新しいアーキテクチャを使用していないバーチャル カメラは、現在非推奨となっています。

新しいバーチャル カメラは次の機能や特性を備えています。

  • すべての機能がマルチユーザー対応の エディタ で動作。

  • ユーザー エクスペリエンスの設計を変更。

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

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

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

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

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

  • Live Link を使用して任意のカスタム トラッキング システムに切り替えることができる

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

  • iOS アプリ Unreal Remote を更新。新しい UI を搭載し、ストリーミング パフォーマンスを改善しました。アプリからの ARKit データが Live Link で送信されるようになりました。

フレームの正確なビデオ フィードバック (ベータ)

ビデオ フィードバック時のフレーム精度を改善するために、次のような複数の機能強化を行いました。

  • タイルベースのメディアの再生で、カメラの視野内にあるもののみが GPU にストリーミングされます。このことにより、クリップ全体のストリーミングが不要であることを意味し、処理時間を大幅に短縮し、迅速かつ効率的に再生できるようになりました。

  • メディア トラックで、Apple Pro Res と Avid DNxHR コーデック クリップをサポートするようになりました。

  • EXR Reader GPU モジュールが最適化されました。EXR が非圧縮の RGB または RGBA を使用すると、高速化し、CPU の使用を最小にします。

DMX プラグインのプロダクション リリース

DMX (Digital Multiplexer) プラグインは、DMX プロトコルを使用する外部コントローラーおよびデバイスに Unreal Engine を接続します。ArtNet および aSCN ネットワークを介した双方向の通信とインタラクションにより、ステージ ショーと照明器具を Unreal から制御し、設計段階において仮想環境でショーをプレビジュアリゼーションできます。

DMX の改善

image alt text

テレビ局やライブ イベントのプロデューサーの満足度を向上するこのセットでは、DMX プラグインで、UX の改善、UI 要素の統合、パフォーマンスの向上、コードのリフアクタリングが行われ、また DMX マトリックスがサポートされています。このリリースでは、Unreal Engine の DMX ボタンの作成に加えて、以下の機能が改善されています。

  • DMX Monitor (DMX モニター)

  • DMX Controllers (DMX コントローラー) パネル

  • DMX Output Console (DMX 出力コンソール) パネル

  • Fixture Type (器具タイプ) パネル

  • Fixture Patch (器具パッチ) パネル

  • DMX Attribute Map (DMX 属性マップ)

さらに、このプラグインでは DMX Multicast および Unicast をサポートするようになりました。

DMX およびシーケンサー

image alt text

DMX とシーケンサー が統合され、物理 DMX と Unreal Engine を使用してショーを作成できるようになりました。この統合により、カスタム DMX タイムラインを作成できるようになり、アニメーションおよびイベント トリガーを利用したリニアなライティング体験を簡単かつ迅速に作成することができます。シーケンサーを使用すると、ブループリント スクリプトや C++ プログラムを使用する必要なく、カーブやサブシーケンシングなどの機能を使用して DMX をプログラムして制御することができます。

DMX Pixel Mapping (Experimental)

image alt text

DMX ピクセル マッピング は、ピクセル バッファ (レンダリング ターゲット) を DMX ストリームに変換します。このメカニズムにより、デベロッパーはライブ レンダリングのターゲット テクスチャ データを使用して DMX 器具を制御したり、低解像度 LED パネルやデバイス (基本的に、すべてのピクセルが DMX 器具を表している) を制御したりすることができます。

image alt text

DMX ピクセル マッピング LED ストリップ

DMX ピクセル マッピングは次の機能を備えています。

  • XY 座標のサンプリングと順序付けのためのツールを搭載

  • テクスチャ データを使用して、LED テープや低解像度 LED ディスプレイをアニメートできる

image alt text

LED ディスプレイ

詳細については、「 DMX プラグイン 」を参照してください。

DMX FixturesVFX ブループリントとテンプレート

ライブ ショー デザイナー、オーディオ ビジュアル (AV) インテグレーターおよびスペシャリスト、クリエイティブ エージェンシーやプロダクション企業など、様々な業界の DMX サポートの提供に関心を持っているユーザーに応えるため、提供された DMX テンプレートで紹介されている DMX 器具と VFX ブループリント をリリースすることで、DMX ユーザー エクスペリエンスを強化しています。

DMX 器具システムで、C++ ベースのモジュール式システムを使用するようになりました。このため、次を含む幅広いサブ機能を有効化/無効化することができます。

  • Pan (パン)

  • Tilt (ティルト)

  • Gobos (遮光板)

  • Strobe (ストロボ) など

また、DMX 器具システムには、品質レベルを調整できるボリュメトリック ビーム シェーダや、Matrix および Pix Bar 器具モデルも搭載されています。さらに、ブループリント スクリプト作成者向けに、以下のアクタを含む DMX 対応の VFX ブループリント アクタのセットを提供しています。

  • Pyro

  • Lasers

  • Fireworks

  • Water fountain

DMX テンプレート

次の機能を示すために、ベータ版の DMX テンプレート を作成しました。

  • Artnet + sACN プロトコルの受信と送信

  • 器具パッチの適用と GDTF のサポート

  • 属性マッピング

  • 器具プロキシ

  • シーケンサーの統合

  • DMX レコーディング

  • ピクセル マッピング

image alt text

DMX テンプレート

また、ライブ会場をプレビジュアリゼーション (プレビズ) する方法、器具コントロールを活用する方法、リアルタイム コンテンツ トリガーの操作方法もデベロッパーに紹介します。

ライブ会場のプレビズ

DMX を使用すると、次の機能にで、ライブ ショーのステージや様々なライブ会場をプレビジュアリゼーションすることができます。

  • 器具パッチの適用

  • DMX 入力とブループリント ロジック

  • シーケンサーの統合および DMX レコーディング

器具のコントロール

Unreal Engine では、次の機能を使用して、DMX 器具を制御することができます。

  • 器具パッチの適用

  • DMX 出力とブループリント ロジック

  • ピクセル マッピング

コンテンツ トリガー

Unreal Engine の DMX を使用すると、次の機能でリアルタイムに生成されるコンテンツまたはレコーディング済みのコンテンツをトリガーすることができます。

  • 器具パッチの適用

  • DMX 入力とブループリント ロジック

詳細については、テンプレートをダウンロードして、「 DMX テンプレート概要ガイド 」のドキュメントを参照してください。

ステージ モニター (ベータ)

image alt text

新しい ステージ モニター ツールでは、マルチユーザー セッションのすべてのマシンに接続し、FPS や GPU の使用率などのパフォーマンス統計や不具合をレポートします。セッション内のすべてのマシンでこれらのレポートを表示できます。また、複数の重大セクションにレポートをコンテキスト化することで、簡単にフィルタリングしたり、JSON ファイルとしてエクスポートしたりすることができます。

Switchboard (ベータ)

Switchboard は拡張可能な PySide アプリで、バーチャル プロダクション ステージ上でシーンを操作したり、データを生成する多くのデバイスやツールを調整します。Switchboard は次の操作をサポートしています。

  • 様々なマシンで複数の Unreal Engine と nDisplay インスタンスを起動して、 マルチユーザー エディタ とこれらのインスタンスを自動的に接続する。

  • すべてのマシンでコンテンツを Perforce と同期させる。

  • テイクの名前を設定し、 Take Recorder を使用して Unreal Engine で、または、追加のパフォーマンス キャプチャ ソフトウェアおよびデバイスでレコーディングを開始する。

  • nDisplay の同期ステータスに関する診断情報を提供する。

Live Link XR プラグイン

Live Link XR プラグインを使用すると、XR デバイスをパフォーマンス キャプチャ用のバーチャル カメラとして、またはライブ アクション撮影用のライブ カメラ トラッキングとして使用できるようになりました。Live Link ワークフローは、XR デバイスを使用する場合も、他のトラッキング システムを使用する場合も同じであるため、プロジェクトのニーズやデバイスの可用性に応じてトラッキング システムを切り替えることができます。このリリースでは、Live Link XR は Steam ベースのデバイスのみをサポートしています。

Visual Dataprep ツールのプロダクション リリース

Visual Dataprep ツールでは、データのインポートから UE アセットの作成まで、準備プロセスを記述するための高レベルの構成要素を使用した明確なワークフローを提供します。Dataprep がプロダクション リリースされ、ユーザー インターフェースと操作性が改善されています。また、様々な新しい演算子や選択フィルタも利用できるようになりました。

  • 置換マテリアル テーブル - Dataprep で直接置換マテリアル テーブルを作成して、入力モデルのマテリアルを迅速に置き換えます。

    image alt text

  • メッシュ モデリング操作 - Dataprep でメッシュ モデリング演算子を使用できるようになりました。これには、デシメーション、UV 生成などが含まれます。

  • グラフ ツールおよび選択ツールの改善 - Dataprep のグラフ ツールと選択ツールで複数の点が改善されました。

  • グラフの不要なノードをバイパスできるようになりました。

  • アクタのセットのすべての可視アクタを選択します。

  • アクタのセットに重なるすべてのアクタを選択します。

  • トランスフォームの選択、すべての演算子、およびフィルタがアクタ コンポーネントで機能するようになりました。

  • 入力パネルが更新され、読み取りやすくなり、操作性も向上しました。

  • コンテンツ プレビューで選択されたアセットを使用しているアクタをシーン プレビューでアクタを選択できるようになりました。逆の操作も可能になりました。

  • プレビュー フィルタを使用すると、選択範囲がコンテンツ プレビューとシーン プレビューに自動的に同期されます。

OpenColorIO のサポート

Unreal でレンダリングする画像やリニア メディアの色空間をより詳細にコントロールできるようになり、カメラでの撮影から Unreal Editor での作業、最終出力まで一貫した色を維持できるようになりました。 OpenColorIO (OCIO) カラー変換のサポートが拡張され、次の操作を実行できるようになりました。

  • エディタ ビューポートごとに色空間変換を設定する。

  • ムービー レンダー キューでショットをレンダリングする際に色空間変換を設定する。

  • 各 nDisplay ビューポートに色空間変換を設定する。

コントロール リグの分岐とループ

分岐とループにより、最小限のセットアップで柔軟でダイナミックなコントロール リグを作成することができます。ループを使用すると、反復可能なオブジェクトの集合 (ボーン チェーン、コントロールのリスト) を動的に作成することができます。これにより、グラフのサイズが大幅に縮小され、グラフのパフォーマンス、作成時間、およびリグの柔軟性が向上します。

image alt text

  • 新しい分岐/条件ノードにより、条件の要素に基づいてグラフを分岐できるようになりました。

  • ループでロジックを利用して、より簡潔で柔軟なグラフを作成できるようになりました。

  • 項目のグループ化とサポート ノードをサポートするようになりました。

コントロール リグの反転

image alt text

コントロール リグの反転機能により、シーケンサーを使用して編集できるアニメーション リグに既存のアニメーションを再マッピングできるようになりました。また、使いやすいコントロール リグを使用して、既存のスケルタル アニメーションを変更できるようになりました。新しい Backwards Event ノードでは、ボーンがコントロールやその他のコントロール ロジックにどのようにマッピングされるかを定義します。

  • 数値プレシーケンサー機能により、シーケンサーでアニメーションのフレームごとにバックワード イベントを実行することで、コントロール リグにベイクできるようになりました。

Control Rig コンポーネント

Control Rig コンポーネントを使用してブループリントからコントロール リグ データにアクセスできるようになりました。これにより、ブループリントでゲームプレイ ロジックを使用してコントロール リグを制御したり、異なるプロポーションのキャラクターに合わせてコントロール リグを再初期化したり、他のコントロール リグ データを直接読み取ったり、書き込んだりできるようになりました。さらに、Control Rig コンポーネントのアクセサーを使用して、スケルタル メッシュ以外のオブジェクトを Control Rig コンポーネント階層にアタッチできるようになりました。

image alt text

  • コントロール リグの新しいセットアップ イベントにより、スケルトンとコントロールを初期化できるようになりました。

  • コントロール リグの初期化状態の間にスケルトンとコントロールを配置することができます。

  • ブループリントでゲッター関数とセッター関数を使用して、ボーンおよびコントロールのトランスフォーム/値を取得または設定できます。

  • コントロール リグのコントロールとデバッグ描画が、ブループリントのビューポートに表示されます。

  • コントロール リグからボーン トランスフォームを取得することで、スタティック メッシュ トランスフォームを制御することができます。

Fullbody IK ノード (実験的機能)

ランタイム時にキャラクターのポーズをプロシージャルに変更する必要があるユーザーのために、Fullbody IK ソルバが追加されました。ヤコビアン擬似逆行列減衰最小二乗法に基づく Fullbody IK Control Rig ノードには、剛性、ボーンの制限、ポール ベクター、およびその他のソルバ パラメータを制御するための追加プロパティがあります。

  • どのスケルトンでも機能します。

  • コンストレイントや剛性の設定などの追加プロパティを使用することで、特定のアーティスティック要件に合わせてソルバを改良することができます。

GPU Lightmass (ベータ)

Unreal Engine のライト ベイク システムである Lightmass で、一から構築された次世代の GPU ベースのバリアントを提供するようになりました。GPU Lightmass は、DirectX 12 と DXR レイ トレーシング機能を活用して CPU ベースのライトマス システムを改良し、複雑なシーンのビルドにかかる時間を大幅に短縮し、単一ホスト上で CPU ベースのシステムの分散型 Swarm レンダーに匹敵する速度を実現します。

image alt text

資料提供:Dekogon Studios 作成- www.dekogon.com

新しい GPU Lightmass により、現行のライト ベイク システムが次のように改善されています。

  • ビューポートでオプションのリアルタイム プレビューを備えたプログレッシブ ライトマッパーを使用する。

  • ライティングをビルドするためのモード、 Full Bake モードと Bake What You See モードを提供する。

  • 複雑なシーンでのライト ベイクの速度が大幅に向上している。

  • CPU ベースの Lightmass よりも物理的に正確な結果が得られる。

GPU Lightmass を使用するには、 GPU Lightmass プラグインを有効にして、次のプロジェクト設定を行います。

image alt text

  • [Default RHI (デフォルト RHI)] を DirectX 12 に設定する (Windows 10 ビルド 1809 以降が必要)

  • Ray Tracing (レイ トレーシング) サポートを有効にする (DXR 対応カードが必要)

  • [オプション] インタラクティブ プレビュー モードでは [Virtual Texturing (仮想テクスチャリング)] [Virtual Texture Lightmaps (バーチャル テクスチャ ライトマップ)] を有効にする

    image alt text

    image alt text

Unreal Insights Insights

Memory Insights (ベータ)

Memory Insights (メモリ インサイト) の追加により、Unreal Insights で、アプリケーションのメモリの使用状況を把握できるようになったため、自分の作業がアプリケーションのパフォーマンスやエンジンの挙動にどのように影響するかをより詳しく理解できるようになりました。

image alt text

デフォルト グラフのトラックで、Total、TrackedTotal、Untracked、Meshes、Textures、Physics、Audio のメモリ使用量を表示することができます。

[Memory Insights (メモリ インサイト)] パネルに追加された LLM タグの詳細については、更新された「 Unreal Insights の概要 」を参照してください。

Slate Insights

UI デベロッパーがユーザー インターフェースのパフォーマンスを把握できるようにするために、Unreal Insights を UMG およびスレート プロファイリング ツールで拡張しました。 Slate Insights 拡張を使用している場合、デベロッパーは、 Slate Frame View を使用して、フレームごとにペイント、無効化、更新されているウィジェットのリストを取得することができます。

image alt text

デベロッパーが GlobalInvalidation を有効にすると、負荷の高いフレームの原因となっているウィジェットを特定することができます。

Slate Frame View などの UMG およびスレート プロファイリング ツールの詳細については、こちらの「 Slate Insights の概要 」を参照してください。

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

既存の機能の最適化と新たに使用可能になったポスト プロセスの両方を含む、従来のモバイル レンダリング パイプラインが改善されました。

モバイル向けバーチャル テクスチャ圧縮 (プロダクション)

モバイルでのランタイム バーチャル テクスチャのテクスチャ圧縮のサポートを追加しました。これにより、モバイル デバイスでバーチャル テクスチャを使用する際のパフォーマンスが大幅に向上しています。バーチャル テクスチャの操作方法の詳細については、「 バーチャル テクスチャリングの参照情報 」を参照してください。

モバイル向け反射キャプチャ圧縮 (プロダクション)

Reflection Capture コンポーネント で、モバイル デバイスでのテクスチャ圧縮をサポートするようになりました。このサポートにより、反射キャプチャのメモリ フットプリントが削減され、モバイル プロジェクトで反射キャプチャをさらに有効に活用できるようになりました。

モバイルでの GTAO (グラウンドトゥルース アンビエント オクルージョン) (実験的機能)

グラウンドトゥルース アンビエント オクルージョンがモバイル デバイスで使用できるようになりました。アンビエント オクルージョンのこの実装により、モバイル プロジェクトで、高いパフォーマンス負荷をかけることなく間接ライティングやシャドウの外観を改善することができます。

GTAO disabled

GTAO enabled

*GTAO を有効にすると、このシーンのコーナーでのアンビエント オクルージョンが顕著になります。***_Modular Building Set courtesy of PurePolygons_**

モバイルに GTAO を実装する場合、Mali デバイスでは、最大コンピューティング シェーダ スレッド数が 1024 未満であるため、パフォーマンスの問題が発生します。

モバイル向けダイナミック スポットライト シャドウ (実験段階)

モバイルでダイナミック スポット シャドウがサポートされるようになりました。このサポートにより、スポットライトがスタティック メッシュと可動メッシュの両方にシャドウをキャストすることができます。

モバイル向けピクセル投影反射 (実験段階)

4.26 ではモバイル デバイス向けのピクセル投影反射のサポートが追加され、モバイル上で平面反射でスクリーン空間反射を生成できるようになりました。

image alt text

現在、次のモードがサポートされています。

  • Usual — 平面反射アクタがすべてのプラットフォームで同じように機能します。

  • MobilePPR — 平面反射アクタが PC/コンソール プラットフォームでは通常通りに機能するものの、モバイル プラットフォームではピクセル投影された反射を使用します。

  • MobilePPRExclusive — 平面反射アクタがモバイル プラットフォームでピクセル投影された反射にのみ使用されます。これにより、PC とコンソールのプロジェクトでは従来の SSR を使用する余地が生じます。

レイ トレーシングの更新と改善

引き続き機能の範囲を拡大し、最近実現させた Fortnite へのレイトレーシングのサポート に見られるように、ゲームのレイトレーシングの限界を押し広げます。Fortnite でレイトレーシングをサポートするための取り組みにより、リアルタイム パフォーマンスが向上し、品質を向上させるための最低化を数多く実現し、独自のプロジェクトで使用できるようになりました。

image alt text

1, レイトレーシングを有効; 2, レイトレーシングを無効

このリリースでは、次の改善が行われています。

  • 効率的なバッファ アロケータ、ヒープ管理、より高速なダイナミック パス、より優れた RTPOS 処理により、 CPU パフォーマンス を最適化しました。これは、DirectX 12 の操作性をさらに向上させるうえでも役立ちます。

  • 視覚的に関連性のないワールド位置オフセット (WPO) 評価のより正確な無効化、より効率的なライティング サンプリングのための空間構造、カメラ ビューの背後にあるオブジェクトのカリング オプションなどにより、 GPU パフォーマンス が向上しました。

  • 安定性 を改善することで、ゲームやプロジェクトでレイ トレーシングが幅広いく普及していることに伴い生じるエンジン内での多くのクラッシュや不安定性の原因を解決ました。

  • レイ トレーシング機能の ビジュアル 面で多くの改善が行われました。これには、グローバル イルミネーションの品質とパフォーマンスの改善、両面フォリッジのサポート、拡張透過処理のサポート、半透明のシャドウなどが含まれます

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

ベイク ツールの改善 (実験段階)

ベイク ツールを使用すると、法線、アンビエント オクルージョン、曲率、位置、およびテクスチャのマップを、簡単に、プロジェクトのコンテンツ ブラウザに直接ベイクすることができます。アーティストはメッシュを選択して、特定の UV チャンネルに基づいてマップをベイクできます。

image alt text image alt text

UV 編集ツールの改善 (実験段階)

UV 編集ツールは、継続的に拡張されており、エディタ内で UV レイアウトを表示したり調整したりするための新しいオプションが追加さました。新しい UV Display (UV ディスプレイ) オプションでは、UV ツールの 1 つを使用しているときに、エディタのビューポートでメッシュの UV レイアウトをビジュアリゼーションする方法を提供します。新しい Cut Selected Edge UV ツールを使用すると、アーティストは、3D ソフトウェアで変更して、再度エクスポートする必要なく、スタティック メッシュの UV マップを簡単に調整できます。

image alt text

ボリューム編集ツールの改善 (実験段階)

ボリューム編集ツールの新しいスイートを使用すると、エンジン内で直接コリジョンやボリュームの形状を編集できます。BSP 形状、既存のボリューム、またはコリジョン形状をスタティック メッシュ アクタに変換して、それをメッシュ編集ツールで編集します。その後、これらのメッシュは、カスタマイズしてから、ボリュームやコリジョンの形状に変換して戻すことができます。

Gen5 テンポラル アップサンプリング (実験段階)

Epic Games では、現在、次世代プラットフォームと PC 用に特別に設計された新しいテンポラル アップサンプリング アルゴリズムの開発を積極的に進めています。現在、この新しいアルゴリズムを使用して、Fortnite を 4K でシッピングおよびテスティングを行っています。依然として開発中ではあるものの、Gen5 テンポラル アップサンプリングでは、公正な品質比較を行うために、同じフレーム レート内で追加のパフォーマンス負荷に対応できるように ScreenPercentage を低く設定する必要があるにもかかわらず、現行のアンチエイリアシング (TAA) とテンポラル アップサンプリングよりも画像品質の高い出力が実現します。

Gen4 テンポラル アップサンプリング

Gen5 テンポラル アップサンプリング

より高品質なテンポラル アップサンプリング技術のパフォーマンス上のメリットは、より高いアップスケーリング負荷を補う以上に、スクリーン比率を下げた場合に顕著になります。こうすることで、高品質の最終出力ピクセルに最終的に役立つその他のレンダリング機能の品質を有効化または向上できるため、フレームの残りの部分の新しい GPU の割り当てが解放され再度活用できるためです。

これらのプラットフォームをサポートしている間は、既存のコンテンツへの回帰を避けるために、従来の Gen4 テンポラル アップサンプリングを Gen5 のテンポラル アップサンプリングの積極的な開発とは別に、引き続き維持します。

Python 3.7.7 のサポート

Python 2.x が今年の初めにサポート終了となった後、 VFX リファレンス プラットフォーム ガイドラインに従うため、Unreal Engine で Python 3.x のサポートを追加しました。Unreal Engine は Python 3.7.7 を搭載して提供されていますが、Python 2.7 にも対応しています。今回のリリース後、Unreal Engine では Python 2.x は非推奨となります。

Unreal Engine の USD サポートも Python 3.x に移行しました。Python 2.7 を引き続き使用する必要がある場合は、USD プラグインとエンジンを再コンパイルして Python 2.7 をターゲットにする必要があります。Unreal Engine で Python のバージョンを変更する方法の詳細については、「 Python を使用したエディタのスクリプティング 」を参照してください。

Datasmith の改善

Datasmith は継続的にパフォーマンスが改善が行われています。また、ユーザーが使い慣れた次の 3D ソフトウェア パッケージをサポートするように拡張されています。

  • Datasmith Exporter for Revit で Revit 2021 のサポートが追加されました。

  • Datasmith for 3ds Max プラグインが拡張され、複数の Corona マテリアルとマップをサポートするようになりました。

Datasmith のパフォーマンスの改善

大規模で複雑な CAD モデルを扱う自動車や製造業のユーザーのサポートを向上させるために、Datasmith で次のような複数のパフォーマンスの強化が行われました。

  • 適切な最適化設定による MSVC2017 を使用したコンパイル。

  • マルチスレッディングでシーメンス JT モノリシック モデルを読み取るための一時的なソリューションの実装。

  • メモリ割り当てを強化することでパフォーマンスを最適化。

Datasmith Export API の MacOS でのサポート

Mac OS X 上で実行されている設計アプリケーションに Datasmith のサポートを追加したいと考えているサードパーティ デベロッパーが、Datasmith エクスポート API のツールとヘルパー クラスを使用して、オブジェクトやシーン データを .udatasmith ファイルに変換する独自のエクスポータを作成できるようになりました。

Animation Insights でのオブジェクト プロパティ トレーシング(実験的機能)

Animation Insights は、アクタ、コンポーネント、アニメーション インスタンスなどのゲームプレイ関連オブジェクトのプロパティのトレースをサポートするようになりました。このサポートにより、外部デバッガや、ネイティブ クラスとブループリント クラスの両方をサポートする必要なく、オブジェクトのプロパティが時間の経過とともにどのように変化するかをビジュアリゼーションできます。

image alt text

これを使用するには、'ObjectProperties' トレース チャンネルを有効にしてから、エディタでアクタを右クリックしてプロパティをトレースします。コンポーネントやその他のオブジェクトは、Insights でトラックを右クリックすることで、そのプロパティをトレースすることができます。

アニメーション ノードのプロパティ アクセス システム

Animation Blueprint ノードで、プロパティ アクセス システムを介して、ピンで公開されているパラメータをゲーム内の任意のアクセス可能なプロパティにバインドできるようになりました。

image alt text

これは、ピンを介してデータを接続するよりも、次のような複数の利点があります。

  • データが常にスレッドセーフな方法でアクセスされる。

  • アニメーション ブループリントに手動でデータを集約する必要性が減る。

  • 複数のノードを同じ値にバインドすることで、よりシンプルで読みやすくなる。つまり、より少ないグラフで情報が整理されます。

  • 通常の '高速 パス' と比較して、パフォーマンスが最大 25% 向上する。

  • 関数、配列、リンク オブジェクト、ネスト構造体、およびこれらすべての組み合わせへのバインディングをサポートする。

Quartz (ベータ)

image alt text

Quartz は 4.26 で導入された新しいオーディオ ツールです。オーディオ エンジン内のすべてのサウンドに対して、サンプル精度のクリップでサウンドの出だしをスケジュールする方法を提供します。これにより、オーディオ レンダリング プロセスをより高いレベルで制御できます。

Quartz を使用すると、ワールド サウンドを完璧なサンプリング精度の時間的な境界 (音楽的であるか、そうでないかを問わない) で再生し、それらのサウンド エミッタをワールド全体で任意に同期させることができます。

Audio Modulation (ベータ)

image alt text

新しい Audio Modulation プラグイン には、ソース オーディオをミキシングしたり、オーディオのプロパティを動的に制御およびパラメータ化したりするための、さらに使いやすくなった次の一連の機能が含まれています。

  • 柔軟で分離された汎用的なパラメータ モジュレーションとミックス システムを公開

  • ゲームのミックスを試聴してデバッグするためのより堅牢なツール セットを確立

  • 簡単に拡張でき、プラグインを介してソース、エフェクト、サブミックス、その他様々なオーディオ タイプのさらなるモジュレーションに使用できる API を提供。

オーディオ ストリーム キャッシング

ストリーム キャッシングは、オーディオを任意の時点でロードして、使用しないときは自動的に解放する手段です。ストリーム キャッシングを使用すると、オーディオに一定のメモリ バジェットを設定し、エンジンが残りを処理し、必要に応じてオーディオ データをストリーミングします。ストリーム キャッシングにより、サウンド デザイナーは、メモリ境界を超えることなく、必要に応じてオーディオ アセットをロードすることができます。この機能は 4.24 以降ベータとして搭載されていましたが、4.26 ですべてのプラットフォームでプロダクション リリースされました。

モバイル向けデスクトップレンダラ (iOS - ベータ/Android - 実験的機能)

Unreal Engine 4.26 では、モバイル デバイス向けのフォワード レンダラおよびディファード デスクトップ レンダラを提供しています。これらのレンダラでは、互換性のあるデバイスに改善された一連のレンダリング機能を提供します。これらのレンダラは iOS デバイスだけでなく、Vulkan を使用した Android デバイスでも利用可能です。iOS 実装は機能のベータ機能で、Android Vulkan の実装は実験的機能です。

image alt text

デスクトップ フォワード レンダラを使用して iPad Pro で実行されている Infiltrator デモ

これらのレンダリング オプションの詳細については、「 フォワード シェーディング レンダリング 」を参照してください。

モバイル向けディファード レンダラ (実験的機能)

Unreal Engine 4.26 は、モバイル レンダラーのディファード レンダリングモードを備えています。このモードは、高品質のリフレクション、多数のダイナミックライト、ライティングありのデカール、およびモバイル フォワード シェーディングではサポートされていないその他の手法をサポートします。

モバイル向けフォワード レンダラ

モバイル向けディファード レンダラ

デフォルトのモバイル向けフォワード レンダラと新しいディファード レンダラ

現在、モバイル向けディファード レンダラーは、iPhone 6 以降の iOS デバイス、およびAndroidVulkan 用の GalaxyS9 以降のデバイスでサポートされています。

異方性のプロダクション リリース

異方性がプロダクション リリースされました。Epic Games では、異方性のパフォーマンスを改善し、異方性をデフォルトで公開しました。また、異方性を使用していないときに追加のパフォーマンス負荷がかかることはありません。

異方性を使用すると、スペキュラ ハイライトと反射の形状と方向を制御できます。最も一般的には、艶消しの金属マテリアルを表現するために使用されます。

image alt text

1, 異方性応答、 2, 等方性応答

マテリアルで異方性を使用すると、異方性パスが有効になり、異方性マテリアルを使用しているオブジェクトだけに追加の gbuffer プロパティを発行します。さらに、シーンに異方性マテリアルが含まれている場合、ライティング パスが、ピクセルに異方性プロパティが含まれている場合に限り、異方性 BRDF を使用して各ピクセルにライティングを適用します。異方性の負荷の大きさは、ほぼ、そのようなマテリアルを表示するピクセル数に比例します。

異方性は、PC と次世代コンソール (XBXS/PS5) でのみデフォルトで有効になっています。異方性は、現時点では、エリア ライト、ソース エリア サイズを含むスポット ライトやディレクショナル ライトはサポートしていません。

異方性の詳細については、「 Material 入力 」を参照してください。

UMG とスレート入力のデバッグ ツール

ユーザー インターフェース (UI) をデバッグする際に、プロセスに干渉することなく入力 (ゲームパッドやキーボードからの入力など) シーケンスを再現することは困難な場合があります。このリリースでは、UI ナビゲーションをデバッグし、ナビゲーション イベントのスタティック ビヘイビアを可視化するツールを提供します。このツールにより、デベロッパーは特定の UI バグに関連する入力を効率的に特定することができます。

image alt text

ウィジェット リフレクターでのナビゲーション イベントのシミュレーション*

ウィジェット (またはシステム) は、ランタイム時に異なる結果を提供することがあります。

詳細については、「 ウィジェット リフレクター 」を参照してください。

コンソール スレート デバッガ

コンソール版の Slate Debugger (スレート デバッガ) に、次のプロファイリング拡張機能が追加されました。

  • ペイント オプション。当該フレームのペイントされたウィジェットを表示します

  • GlobalInvalidation モードを有効にすると、デバッガは、ユーザー インターフェースを頻繁に無効にするウィジェットを特定するのに役立ちます。

また、次の入力拡張機能も追加されました。

  • 追加のフィルタとイベント オプション

  • ルーティング オプション。デベロッパーが、システムがイベント ハンドラとしてウィジェットをどのように選択するかを観察できます

image alt text

詳細については、「 コンソール スレート デバッガのリファレンス 」を参照してください。

LiDAR 点群の改善

LiDar Point Cloud プラグインのパフォーマンスとワークフローが改善され、より多くのファイル タイプのサポートが追加されました。

image alt text

  • LAZ および E57 ファイル形式のサポートが追加されました。

  • 新しい LidarClippingVolume アクタがシーン内のすべての LiDAR コンポーネントでリアルタイムに動作します。

  • このプラグインを使用すると、点の法線ベクターを計算できるようになりました。これは、点群全体または選択範囲に対して行うことができます。

  • 点群のインポート、処理、エクスポートに必要な RAM が大幅に削減されました。

  • 選択範囲の反転:選択されたすべての点と選択されていないすべての点を切り替えることができるトグルが追加されました。

  • 選択範囲の反転:選択されたすべての点と選択されていないすべての点を切り替えることができるトグルが追加されました。

    • r.LidarTargetFPS X - X の全体的な FPS を維持するために点の割り当てを継続的に調整します。

    • r.LidarIncrementalBudget X - true に設定されている場合、ビューポートが静止している場合に限り、点の割り当てきわめて高い値 (10 FPS 以下) まで自動的に増加させます。

  • アセットあたり 20 億点という制限を撤廃しました。

OpenXR の統合 (ベータ)

OpenXR プラグインという 1 つのプラグインをプロジェクトに追加するだけで、複数の XR デバイスをターゲットに設定できるようになりました。OpenXR プラグインがマーケットプレイスの拡張プラグインをサポートするようになったため、Unreal Engine のリリースに依存することなく OpenXR に機能を追加することができます。

image alt text

資料提供:OpenXR および OpenXR ロゴは、Khronos GroupInc の商標です。

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

  • アイ トラッキング、ハンド トラッキング、グリップ ポーズや指さしポーズなどの入力。

  • ARPin。Unreal Engine の実世界での注視点。

  • DirectX12 RHI。

プラットフォーム固有のプラグインも引き続き 4.26 で使用できます。OpenXR プラグインを使用するか、プラットフォーム固有のプラグインを使用するかを選択できます。

Azure Spatial Anchors (ベータ)

没入型モバイル アプリのセッション間で、実世界で持続する注視点を指定できるようになりました。Unreal Engine に ARKit と ARCore の Azure Spatial Anchor サポートを追加し、C++ API を更新しました。

image alt text

RHI の変更:バリア リファクタリング、RDG の更新

これは API の更新です。この変更は、ソース コードを扱わないエンド ユーザーが認識することはありません。

RHI リソース バリア/トランジション API がリフアクタリングされ、スプリット トランジション、サブリソースの状態追跡、および明示的なリソースの状態をサポートするようになりました。スプリット トランジションを使用すると、同一のハードウェア パイプライン上でのワークロードのオーバーラップが可能になり、状態遷移がより明示的になるため、さらにターゲットを絞った GPU キャッシュ フラッシュが可能になります。この新しいトランジション API では、最新のグラフィック API の設計を反映し、リソースの現在の状態と遷移後の状態の両方が必要です。また、状態がより詳細になり、汎用的な読み取り/書き込み可能な状態ではなく、新しい API では、レンダリング ターゲット、SRV、UAV などのために個別のフラグが提供されます。これにより、より正確なバリアを GPU に送信できるようになり、パフォーマンスを向上させることができる場合があります。

また、RHI によって内部的に実行されていた暗黙的なバリア (特に BeginRenderPass 内部のバリア) のほとんどを削除しました。呼び出しコードでは、レンダリング パスを開始する前に、レンダリング ターゲットを明示的に正しい状態に遷移させる必要があります。

このため、場合によっては、リソースの現在の状態を追跡するのが困難な場合があります。状態追跡とバリア バッチングを行うため、新しいレンダリング コードには レンダリング依存関係グラフ (RDG) の使用を推奨します。従来のトランジション API は現在非推奨となっており、Unreal Engine の今後のリリースで削除される予定です。これらの関数を使用する既存のコードは、コンパイラで警告が表示されるようになるため、新しい API を使用するように変換する必要があります。

コマンド (ドロー コール、シェーダ ディスパッチの演算、コピー操作など) が送信されたときに、リソースが正しい状態にあるかどうかを確認する検証レイヤーを追加しました。これはコマンドラインに -rhivalidation フラグを追加することで有効にすることができ、どの RHI でも動作します。

RDG 実装で、非同期演算スケジューリング、レンダリング パスのマージ、未使用パスのカリング、読み取り専用状態のマージ、サブリソースの粒度で追跡されるスプリット トランジションがサポートされるようになりました。RDG リソースを使用したユニフォーム バッファがサポートされるようになりました。ディファード レンダラが、統一された RDG ビルダー インスタンスを使用するようにさらにリフアクタリングされました。深度プリパス以降のすべてがモノリシック レンダー グラフになりました。

スマート再テッセレーションの改善

再テッセレーション ツールが強化され、三角ポリゴンを再生成する可能性のあるサーフェスをより詳細に制御できるようになりました。

再テッセレーションの新しいオプションには次のものがあります。

  • すべての未変更のサーフェスと変更されたサーフェス (ただし、削除されていないもの)

  • すべてのサーフェス

サウンド クラスによる減衰距離のスケーリング

サウンド クラスを使用している場合に、距離に応じてサウンドの減衰を調整できるようになりました。

サブミックス エフェクト

この機能では、ソース エフェクトのステレオ ディレイと同じであるものの、サブミックス エフェクトに適用されるデジタル信号処理 (DSP) を提供します。

ガベージ コレクションの改善

迅速なリファレンス コレクションを優先することで、 FArchive の使用量を減らし、 ガベージ コレクション のパフォーマンスを改善しました。

詳細については、「 ガベージ コレクション 」を参照してください。

Variant Manager の改善

Variant Manager では、継続的に、バリエーションの設定やアクタ階層の可視性の切り替えをより簡単に行えるように取り組んでいます。バリアント間の依存関係を設定したり、Python を使用してバリアントのサムネイルを設定したり、バリアント セットのサムネイル画像を設定したりできるようになりました。

image alt text

iOS プロジェクト用の Windows Metal シェーダ コンパイラ

Epic Games では、Windows で Metal 用の新しいシェーダ コンパイラを導入します。これにより、リモートのシェーダ コンパイルを使用する必要がなくなるため、Windows ユーザーは大幅に簡素化されたワークフローで、iOS プロジェクト用のシェーダをコンパイルすることができます。

Windows Metal シェーダ コンパイラを使用するには、 「Metal Developer Tools for Windows」 をインストールする必要があります。その後、 [Project Settings (プロジェクト設定)] > [iOS] でシェーダ コンパイラを有効にすることができます。

iOS/tvOS ゲームパッド入力 (プロダクション)

iOS、tvOS、iPadOS 14 で、ゲームパッド、キーボード、マウス、トラックパッドなど、より幅広い入力デバイスをサポートするようになりました。さらに、ユーザーは Xbox コントローラーや PlayStation コントローラーのゲームパッド ボタンを OS レベルで再マッピングでき、OS がそのボタン表示を処理できます。

4.26 では、入力デバイスの新しいオプションをフルに活用するために、これらのデバイスの入力処理をリフアクタリングしました。ブループリントの Get Gamepad Button Glyph ノードを使用すると、ユーザーのマッピングに正確なグリフを取得できます。

ChunkDownloader プラグイン (ベータ)

Unreal Engine 4.26 に、 ChunkDownloader という新しいパッチ適用プラグインが統合されました。これは、BattleBreakers でパッチ適用に使用されているシステムで、定期的なアップデートで配信する小さなコンテンツ ファイルが大量にあるゲームに最適です。

ChunkDownloader を初期化すると、最初に最新バージョンのマニフェスト ファイルがダウンロードされます。引き続き .pak ファイルがダウンロードされ、そのマニフェストを使用してローカル ファイルが最新であるかどうかを確認し、マニフェストにないファイルは破棄し、ディスク上にないファイルをダウンロードします。

ChunkDownloader の使用方法の詳細については、「ChunkDownloader クイック スタート ガイド」を参照してください。

Google GamePAD のサポート (ベータ)

Unreal Engine は、Google の Play Asset Delivery System にも対応しています。このシステムは、Google Play ストアの App Bundle ビルドで入手できます。

App Bundle ビルド (.aab) を作成する際に、テクスチャ、モデル、テキスト ファイルなどのアセットを .pak ファイルに分割し、App Bundle ビルド内に アセット パック として含め、Google Play ストアにアップロードすることができます。Google の Dynamic Content Delivery System により、ユーザーのデバイスに最適化された .apk がインストールされます。また、GooglePAD プラグインに含まれるライブラリを使用すると、提供したアセット パックのダウンロードを要求することができます。これらは、アプリケーションの特定のフェーズで提供されるように設定することができます。

自分のプロジェクトで Google GamePAD を使用する方法の詳細については、「 Google Play Asset Delivery のリファレンス 」を参照してください。

このプラグインは依然としてベータです。一部の手動のセットアップでは .pak ファイルをアセット パックに分割する必要があります。

Sun Sky プラグインのパフォーマンス改善

Sun and Sky アクタ ( Sun Position Calculator プラグインの一部) では、リアルタイム キャプチャ モードでのスカイ ライト レンダリングの最新の改善により、空とマテリアル間の視覚的な不一致が解消され、シーンのパフォーマンスも改善されました。

このプラグインおよび使用方法の詳細については、「 Sun and Sky アクタ 」を参照してください。

Niagara の更新と改善

このリリースでも継続して、安定性、パフォーマンス、および全体的なメモリ使用量に関する次の改善を行いました。

  • 引き続き、プラットフォーム全体でのパフォーマンスの改善とメモリ消費量の低減に取り組みました。

  • Niagara パーティクル システムとシーケンサーの統合を改善しました。

  • ユーザー インターフェースを更新し、ユーザー エクスペリエンスと操作性を改善しました。

  • Niagara の UI スタックで配列を使用できるように新しい 配列入力 を追加しました。配列はユーザーが作成できます。また、配列には、インデックスで直接アドレスを指定したり、スポーン時やフレームごとにランダムに配列要素を選択したり、リンク済みの属性で配列要素を補間したりできるビルトイン オプションがあります。

  • Particle Attribute Reader モジュール の新しいセットが追加されました。これにより、あるエミッタが別のエミッタのパーティクルをサンプリングして、サンプリングからスポーンするか、どの属性をコピーするか、サンプリングされたらどのように処理をするのかなどの意思決定をそのサンプリングに基づいて行うことができます。この挙動は GPU 上で動作し、リーダー/フォロワーの関係を可能にします。Niagara エミッタのリジッド チェーンとフレキシブル チェーンのための新たに一般化されたコンストレイント関数では、Particle Attribute Reader を活用しています。

    image alt text

  • 新しい組み込み Niagara プロファイラ。既存の統計システムと統合して、CPU のモジュールと GPU のスクリプトの負荷全体に関するライブのインエディタ プロファイリンを提供します。また、このプロファイラはエミッタとシステム スクリプトにも対応しています。

    image alt text

    最新情報については、「 Niagara ビジュアル エフェクト システム 」を参照してください。

Niagara のランダム入力のリフファクタリング

Niagara の Random Number Dynamic 入力の名称が、ブループリントの同等の入力とより厳密に一致するように、 Random Range X に変更されました。乱数動的入力を使用すると、デフォルトではスポーン時に一度だけ乱数を計算するようになったため、更新スクリプトでの乱数の使用が簡素化されました。エミッタまたはシステム スクリプトで使用する場合は、ループごとに一度だけ再計算するように、スポーンを設定できます。たとえば、ループのたびにスポーン バースト時間を計算します。

新しい配列入力は、 Select X From Array で使用可能な一連の新しいランダム配列動的入力で使用できます。この入力は、ランダムに選択された数値の配列を自動的に作成するか、配列インデックスを使用してスタック UI で直接アドレスを指定できます。

image alt text

Cascade to Niagara Converter (実験段階)

パーティクル システムをカスケードから Niagara に素早く移行できる Cascade to Niagara Converter プラグインをご利用いただけるようになりました。

image alt text

このプラグインを使用するには、[Plugins (プラグイン)] ウィンドウで [Cascade to Niagara Converter] を有効にします。有効にすると、 Cascade パーティクル システム アセットを右クリックして "Convert to Niagara System" を選択することで、同じディレクトリに同等の Niagara システムを生成することができます。生成された Niagara システムには、Cascade パラダイムからのアップコンバートのガイドをしやすくするために、変換プロセスのログが保存されます。

Cascade to Niagara Converter ツールは実験的機能であり、すべてのモジュール、レンダラ、Cascade システムのプロパティ (イベント、Beam / AnimTrail レンダラ、Vector Field、r-LOD ごとのスケーリング) をサポートしているわけではありません。このコンバーター ツールは、Cascade と同等の動作をする Niagara の FX アセットを作成するための導入として、および Cascade システムのアップコンバートを支援するためのガイドとして使用することを推奨します。

Cascade システムの変換は、Cascade モジュールごとのドロップイン/アウトスクリプトをサポートする Python スクリプト レイヤーを介して有効になり、カスタマイズされたアセット変換が可能となり、新しい Niagara エミッタとシステム アセットをプログラムで生成します。

Niagara コンポーネント レンダラ (実験段階)

Niagara コンポーネント レンダラ は実験段階のノードで、 レンダリング スタック下のナイアガラ エミッタに追加することができます。Niagara コンポーネント レンダラでは、エディタで使用できる様々なタイプのコンポーネントに、プラットフォームごとのスケーラビリティのオーバーライドを提供します。コンポーネント レンダラを使用すると、ポイント ライトやスタティック メッシュ コンポーネントなどの任意のコンポーネント タイプを素早く割り当てることができ、パーティクル シミュレーションの前のデータを任意のコンポーネント プロパティにバインドすることができます。様々な新機能を搭載しており、プロジェクトのアイデアを素早くイテレーションする必要のあるアーティストやデザイナーに最適です。

Niagara 高品質パーティクル ライト

Niagara では、Point Light コンポーネントを使用する Component Renderer ノードを使用したパーティクル シミュレーションの高品質なシャドウが投影されたライティングをサポートするようになりました。これは、ハイエンドのプロジェクトやシネマティック プロジェクトをターゲットにしているユーザーに最適です。

シミュレーションの基本的なプロパティとライティングのみを提供する Light Renderer ノードとは異なり、Point Light コンポーネントを使用する Component Renderer では、アーティストやデザイナーにフルセットのライトのプロパティと機能を提供します。

image alt text

Niagara のパーティクル シミュレーションからのオーディオの再生

パーティクル インタラクションからのオーディオを、シンプルなワンショットの「ファイア&フォーゲット」サウンド エフェクトを使用して、または再生中のサウンドのピッチをコントロールするなど、オーディオのより複雑なコントロールを使用して、はるかに簡単に再生できるようになりました。この機能により、パーティクル データをブループリントにエクスポートして必要なオーディオ エフェクトをトリガーする際のワークフローが改善されます。

Niagara システムが無効または破棄されている場合も再生し続ける ワンショット サウンド エフェクト では、 Play Audio ノードをモジュール スタックに追加してそのノードをモジュール スタックで構成することで、ワンショット サウンド エフェクトを設定できます。モジュールが評価されるたびに Particles.PlayAudio 属性が確認され、この属性が有効になっている場合は、サウンド エフェクトを作成します。

フル オーディオ コントロール では、有効になっているバインディングが true のときは再生を維持し、Niagara システムが破棄またはリセットされると停止する高度なオーディオ コントロールを実行できます。これは、 Play Persistent Audio モジュールをモジュール スタックに追加して、このモジュールをモジュール スタックで構成することで、設定することができます。実行中のサウンドのプロパティを変更するには、 Update Persistent Audio モジュールをスタックに追加し、スタックでこのモジュールを設定します。

これらの概要については、Epic Games Launcher の [Learn (ラーニング)] タブにある更新されたコンテンツ サンプル プロジェクトを確認してください。両方のアプローチが紹介されています。

Niagara の高度なコンテンツ サンプル

コンテンツ サンプル プロジェクトに、このリリースの Niagara パーティクルの新しい学習サンプルが多数追加されています。

image alt text

これらの最新の追加機能にアクセスするには、Epic Games Launcher の [Learn (ラーニング)] タブにあるコンテンツ サンプル プロジェクトからダウンロードします。次に、 Niagara レベルと Niagara_Advanced レベルをロードします。

Niagara GBuffer データ インターフェース (実験段階)

このデータ インターフェースを使用すると、Niagara GPU シミュレーション内の GBuffer から属性を読み取ることができます。たとえば、ディフューズ カラー、ワールド法線、カスタム深度、シーン深度、シーン カラーなどを読み取ります。これを正確に使用する方法のサンプルについては、Niagara_Advanced レベルのサンプル 1.4 を開いてください。

削除された機能:OpenGL デスクトップ レンダリング

OpenGL は、デスクトップ レンダリング (SM4/SM5) の用途では、4.23 で非推奨となっていました。4.26 ではデスクトップ オプションとしては OpenGL は削除されました。Vulkan は Linux でサポートされている RHI です。なお、OpenGL を使用して、デスクトップでモバイル レンダラを実行し、起動時に「-game -opengl -featureleveles31」フラグを渡すことで、引き続き GLES の問題をデバッグすることができます。「-opengl」だけを渡すとエラーが表示され、プラットフォームのデフォルトの RHI が使用されます。

シーケンサーの新しいランタイム パフォーマンス システム

リアルタイム シネマティック コンテンツの複雑さ、規模、忠実度が Unreal Engine の品質の限界を押し上げ続けているため、我々は Unreal Engine のシネマティック ツールであるシーケンサーのランタイム機能を批判的に評価し、最適化の可能性のある領域の洗い出しができます。

4.26 では、これまでよりも大規模なシネマティクスと同時 UI アニメーションのパフォーマンスを大幅に向上させる新しい基盤となるランタイム アーキテクチャを展開しています。データ指向の設計原則を使用してランタイムデータ構造とロジックを再編成することで、大規模なデータセットを処理する際の最適化の可能性が高まり、サードパーティの拡張性が広まり、今後さらにインタラクティブで動的なシーケンスコンテンツへの道が開かれます。

これらのシステムの変更、旧バージョンと 4.26 との動作の変更、および API の破損について詳しくは、技術ブログ「Sequencer through a new lens:Cinematic performance in 4.26」を参照してください。

シーケンサーの操作性の強化と改善

新しいシーケンサーで、いくつかの品質向上と改善が行われています。

UI/UX の改善

  • グローバル マーカー

  • カーブ エディタ

  • インエディタ プレビューでのカメラの揺れソースの揺れトラッキング

  • ツリー グループを使用すると、特定のトラックのカスタム ビューを作成できます。これにより、トラック階層を調整する必要なく、特定のトラックを簡単に表示して調整することができます。

  • サブシーケンスで、ブラウザ階層内で完全なブレッドクラム トレイルが表示されるようになりました。

  • ホットキー「F」を使用して、選択したキーフレームを素早く構成できるようになりました。

パイプラインの改善

シーケンサーで Python のスクリプト レイヤーへのアクセスがサポートされるようになりました。エディタ ユーティリティ ウィジェットで以下を使用できるようになりました。

  • GetSelectedSections, SelectSection

  • GetSelectedTracks, SelectTrack

  • GetSelectedFolders, SelectFolder

  • GetSelectedObject, SelectObject

  • EmptySelection

評価の改善

任意の時点で特定のフレームを再生したり、停止したりできるようになりました。これは、ライブ イベントや放送のキュー システムで役立ちます。

Live Link Face for iPad

Live Link Face アプリを更新し、iPhone に加えて iPads も正式にサポートするようになりました。このため、より大きな画面で簡単に顔をキャプチャすることができます。

カラー補正領域

[Color Correct Regions (カラー補正領域)] を使用して、Unreal シーンの領域にカラー グレーディングを適用できます。インカメラ VFX 撮影では、実世界のセットと LED ボリュームに表示されている Unreal シーンとの間でライティングやシャドウを一致させることができます。

タイムコードと同期の改善

このリリースでは、タイムコード データを取得するための複数の機能が追加されました。エンジンのゲンロックに AJA または BlackMagic SDI キャプチャ カードを使用する場合に、ゲンロックをタイムコード ソースよりも迅速に実行できるようになりました。これで、タイムコード値を繰り返すのではなく、中間のタイムコード値を自動的に生成するようになりました。

Timed Data Monitor

Timed Data Monitor プラグインにより、複数の Live Link ソースおよび Media ソースのタイムコードに基づいてこれらのソースの評価が調整されます。[Timed Data Monitor (時間指定データ モニター)] パネルでは、複数のソースを管理し、それらの同期状態を表示することができます。

ノードのカスタム属性

ノードでのカスタム タイムコード属性のサポートを追加しました。 Take Recorder では、 シーケンサー とアニメーション アセットの両方アクタをレコーディングする際に、現在のタイムコードを使用してカスタム属性を生成します。さらに、FBX のインポートとエクスポートで、タイムコード データが保持されるようになりました。

アニメーション シーケンス アセットから保存および評価されたカスタム属性は 実験的機能 でです。実制作には使用しないでください。

AR の統一 (ベータ)

Epic Games では、サポートしている AR プラットフォームの機能セットに共通する機能を特定し、それらの機能を Unreal Engine の通常の AR ツール スイートに統合しました。プラットフォームに依存しない AR ツール スイートを使用することで、サポートされていないプラットフォームであっても、すべてのプラットフォームで同一の API をコンパイルすることができます。

ARCore 1.18 のサポート

ARCore の最新リリースの Depth API を使用して、AR アプリで実世界のオブジェクトにホログラムをオクルードさせることができるようになりました。Depth API は、depth-from-motion アルゴリズムを使用して、1 台の RGB カメラで深度マップを生成します。

image alt text

ARKit 3.5 のサポート

シーン ジオメトリ、インスタント AR、Mocap、およびオクルージョンの改善など、ARKit 3.0 で利用できる高度な機能を使用することができます。

ARKit 4.0 のサポート (ベータ)

LiDAR スキャナを使用する Depth API や、実世界の注視点を指定するための Geo Anchors など、ARKit 4.0 とその機能のサポートを追加しました。

新規:プラットフォームの 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 - Visual Studio 2017 v15.9.4 ツールチェーン (14.16.27023) および Windows 10 SDK (10.0.18362.0)

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

        • Visual Studio 2017 v15.6

      • NET 4.6.2 Targeting Pack が必要

    • Xcode - Xcode 11.1

  • Android

    • Android Studio 3.5.3

    • Android NDK r21b

      • 幾つかのローエンド デバイスでの互換性問題に対応するために NDK r20b をサポートします。

  • ARCore

    • 1.18

  • ARKit

    • 4.0

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

    • v17 clang-10.0.1-based (CentOS 7)

  • Oculus

    • 1.44

    • API Level 23

  • OpenXR

    • 1.0

  • Google Stadia

    • 1.53

  • Lumin

    • 0.23

  • Steam

    • 1.47

  • SteamVR

    • 1.5.17

  • Switch

    • SDK 10.4.0 + オプション NEX 4.6.4

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

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

  • PS4

    • Orbis SDK 8.008.011

    • System software 8.008.041

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

  • XboxOne

    • XDK:July 2018 QFE-13

    • ファームウェア バージョン:Recovery October 10.0.19041.4981

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

  • macOS

    • サポート対象

      • macOS Big Sur 11.0.1, Latest Xcode 12

    • 推奨

      • macOS Catalina 10.15.7, Latest Xcode 12

    • 最小

      • 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

    • Target SDK version 12.00 - 14.XX

アップグレード ノート

AI

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

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

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

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

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

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

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

  • New: 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.

  • New: 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.

Behavior Tree

  • Crash Fix: Fixed a BlackboardComponent issue resulting in a failed check crash when a new BlackboardComponent is being created as part of AAIController::UseBlackboard call and the BB asset being used has synchronized keys.

  • Bug Fix: Fixed an issue with behavior tree combo buttons in the editor resulting in creating multiple instances.

  • Bug Fix: Fixed Behavior Tree highlight for decorators using abort priority.

  • Bug Fix: Fixed stats for instance memory, number of loaded templates and number of created instances.

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

  • Bug Fix: Fixed a bug where a tick function that is ready to run during the current frame could get rescheduled back to a previous frame

  • Bug Fix: Fixed a bug with Behavior Tree Component not Ticking even though ticking was still enabled.

  • Bug Fix: Fixed a bug in UBTNode::CastInstanceNodeMemory that was making it impossible for BT node child-classes to extend its parent class'・memory structure.

  • New: Newly created Blackboard assets using the "New Blackboard" button are now automatically assigned to the BehaviorTree.

  • New: Added unregister queue for decorator abort to prevent removing auxiliary nodes while iterating through them.

  • New: Added unit tests when exiting a branch due to a parent decorator failure to validate that all auxiliary nodes below it are unregistered.

  • New: Made automatic creation of "SelfActor" entry in newly created blackboard assets optional. This is controlled via AddBlackboardSelfKey property in the Project Settings.

  • New: Added a failed-case warning to UBehaviorTreeComponent::RestartTree to let the user know that restarting has failed and why.

Debugging Tools

  • Bug Fix: Fixed FGameplayDebuggerCanvasContext::PrintAt functions to properly save and restore previous cursor and default positions

  • Bug Fix: Fixed EQSTestingPawn to update it's query and results upon selection in the Editor.

  • Bug Fix: Fixed SIGHT_LOG_SEGMENT and SIGHT_LOG_LOCATION AIPerception logging macros.

  • Bug Fix: Fixed Label drawing on a numerous amount of vislog shapes.

  • Bug Fix: Fixed CrowdManager from not displaying debug drawing if it's being run in Client-Server PIE.

  • New: Zoom is now applied at cursor position in VisualLogger.

  • New: Added tweakable cvars to control refresh rate "ai.debug.nav.RefreshInterval" and size of the displayed area "i.debug.nav.DisplaySize"・for navmesh through the GameplayDebugger.

  • New: AI testing framework improvements:

    • Changed signatures of test-time FAITestBase methods to give those functions a way to signal that the test went wrong.

    • Added an easier route for implementing a bunch of high-granularity tests using a common fixture. (see the IMPLEMENT_INSTANT_TEST_WITH_FIXTURE macro)

    • Switched a numerous amount of 'latent'・AI tests to properly mark them as 'instant'・

    • Changed how assertions are being tested to replicate how UTEST_* macros work. Updated all AI tests to utilize the new approach.

  • New: Improved FGameplayDebuggerCategory_Perception::CollectData so that it can now collect PerceptionComponent data even if the current DebugActor is not AI-controlled.

  • New: Added a console command to the gameplay debugger (gdt.EnableCategoryName) that allows setting an enable/disable state of a category indicated by a partial name.

  • New: Added a flag to VisLog settings that controls how we differentiate between logged objects. The default behavior remains, but by setting the flag ForceUniqueLogNames, we generate IDs more probable to be unique across the engine session.

  • New: Enabled the capability to summon an in-game hud for GameplayDebugger during replay playback.

  • New: Added an option to enable shadows by default for gameplay debugger's text. (DebugCanvasEnableTextShadow in Project Settings).

  • Improvement: Fixed a vislog's performance and architecture issue that resulted in vislog constantly recreating AVisualLoggerRenderingActor in client-server PIE due to vlogging with different worlds.

  • Bug Fix: Fixed computation of the navmodifier area in the NavModifierComponent when using the failsafe extents.

  • Bug Fix: Fixed a scenario where navmesh might get deleted on load when streaming in NavigationData and NavMeshBoundsVolume from different levels depending on the loading order.

  • Bug Fix: Fixed holes in NavMesh caused by single voxel areas near the area boundary.

  • Bug Fix: Fixed computation of the vertices count between mesh and detail mesh when creating the BVTree in DetourNavMesh.

  • Bug Fix: Fixed InstancedStaticMesh components that were not registered to the navigation octree if their associated mesh was assigned post registration.

  • Bug Fix: Added error reporting and fixed calls to GetNavigationParent in UNavRelevantComponent that were being made before the cache initialization.

  • Bug Fix: Added a safe-guard to make sure FRecastBuildConfig.tileSize doesn't end up being 0.

  • Bug Fix: Fixed mesh loading dependency for static mesh using a ComplexCollisionMesh and ensured physical meshes are created before creating the nav collision. This fixes missing collisions when using ComplexCollisionMesh to create nav collisions for meshes.

  • Bug Fix: Fixed missing navmesh tiles when cooking maps from the editor 'Launch'・ This includes fixing multiple AI tests failing when locally running in a cooked build, and enemy bots not moving when launching Sanctuary in the ShooterGame example project.

  • Bug Fix: Changed UNavigationSystemModuleConfig::UpdateWithNavSysCDO to no longer copy the value of UNavigationSystemV1.bStaticRuntimeNavigation since it resulted in the the value of static bStaticRuntimeNavigation persist between maps.

  • Bug Fix: Fixed possible NaN when calling GetPolysInBox.

  • Bug Fix: Fixed a serious issue with FRecastQueryFilter::SetIsVirtual that resulted in losing virtual function overrides if called on a derived filter class.

  • Bug Fix: Fixed navigation octree not being updated when custom navlinks state change. This fixes dynamic navmesh updates causing navlinks to reset to their default state.

  • Bug Fix: Modified how we react to RecastNavMesh's generation-category value changes. The main goal is higher reliability while changing properties in the editor, meaning that the property being changed is the driving factor of other properties'・changes which keeps the value from being changed.

  • Bug Fix: Fixed a navmesh rasterization offset by one when projecting spans to bottom. This is related to the usage of the bFillCollisionUnderneathForNavmesh property.

  • New: Changed the CrowdFollowingComponent dependencies to use IRVOAvoidanceInterface from the movement component instead of the UCharacterMovementComponent.

  • New: Added CSV stats for navigation generation tasks.

  • New: Added error reporting for large areas dirtying the navigation data. Error reporting is disabled as long as navigation lock is effective.

  • New: Added advanced property "DirtyAreaWarningSizeThreshold" in NavigationSystem to report warning logs when tiles larger than the specified threshold are pushed to the dirty queue.

  • Optimization: Optimized RecastNavMeshGenerator MarkDirtyTiles by reducing search size in dirty tiles set and the number of copies between containers. The order of the pending elements is now preserved if tile sorting isn't used.

  • New: Added compile switches for segment links ( WITH_NAVMESH_SEGMENT_LINKS ) and cluster ( WITH_NAVMESH_CLUSTER_LINKS ) to allow projects that don't require them to save memory.

  • New: Added support for asynchronous pathfind queries with dynamic generation.

  • New: Synchronization between the async pathfind query tasks and the game thread. The sync point is implemented in OnWorldPostActorTick. This prevents pathfind requests from running at the same time as Navmesh generation tasks or beyond the engine frame boundary.

  • New: Replaced task to broadcast async pathfinding results by a queue that is flushed by the NavigationSystem update. This prevents tasks from being started during loading or other undesired locations.

  • New: Replaced task to register new active path instance by a lock to ensure all paths are registered for potential invalidation before adding a generated tile on the main thread.

  • New: Added a new project setting bUseExtraTopCellWhenMarkingAreas to control the addition of extra cells on top of shapes when marking areas. Added a similar option on FAreaNavModifier to allow exceptions. This is useful for objects that affect navigation on the floors above them.

  • New: Made UNavCollision.AreaClass read only in the StaticMesh editor if bIsDynamicObstacle==false.

  • New: Added 'bMaskFillCollisionUnderneathForNavmesh'・option on NavModifierVolume to go along with 'bFillCollisionUnderneathForNavmesh'. This allows navvolumes to mark a 2D area to be ignored by the fill under feature.

  • New: Added additional logs to track geometry and their bounds when added to navigation.

  • New: Ensure to mark map packages as dirty when navmesh tiles are built, except for when automatic navigation build is occurring on load.

  • New: RecastNavMeshDataChunk can now be used to move and rotate navmesh tiles on the tile grid.

  • Added utilities to allow movement and rotation of navmesh tiles on the tile grid (dtTransformTileData and dtComputeTileOffsetFromRotation).

  • New: Added functionality to properly account for time slicing across multiple generators. The time slicing is now calculated in the navigation system.

  • New: Added some more stats to help trace down long navmesh tile generator times.

  • Improvement: Improved logging of locks and rebuild all for the navmesh.

  • Deprecated: IsNavigationBuildInProgress(bool) and IsBuildInProgress(bool). These functions behaved inconsistently between the different navmesh build types and were causing issues.

Animation

  • Crash Fix: Fixed a crash when re-opening an asset editor after a new preview mesh is applied.

  • Crash Fix: Fixed a crash when duplicating older Control Rigs.

  • Crash Fix: Fixed a crash when opening a level with a saved skeletal mesh component that has a post-process anim Blueprint.

  • Crash Fix: Fixed a crash when compiling an actor implementing an interface referenced by its mesh component's anim notifies.

  • Crash Fix: Fixed a crash when trimming a rich curve with invalid key handles.

  • Crash Fix: Renamed FComponentData in AnimationBudgetAllocator.h to FAnimBudgetAllocatorComponentData. This fixed a crash that's suspected to be caused by the compiler generating code with the size of another struct with the same name.

  • Crash Fix: Fixed various crashes when playing back Geometry Cache.

  • Crash Fix: Fixed crash when exiting while async animation compression is still in progress.

  • Crash Fix: Fixed crash in TallyErrorsFromPerturbation when animation contains a track that doesn't exist on the target skeleton.

  • Crash Fix: Fixed editor crash when exporting anim sequences with a changing UIDToArrayIndexLUT.

  • Bug Fix: Fixed FStringView overload of IAnalyzer::FEventData::GetString to now return the correct buffer size.

  • Bug Fix: Fixed notifies from not being fired for linked instances when running "root motion from everything".

  • Bug Fix: Pin watches now work for property access bindings.

  • Bug Fix: Fixed some thread safety issues with parallel physics blending.

  • Bug Fix: Fixed linear interpolation in the Pose Driver.

  • Bug Fix: Restricted fast-path MakeStruct support to split pins in order to ensure nodes update correctly.

  • Bug Fix: Fixed a bug with AnimNode_SaveCachedPose not properly propagating Initialize to children.

  • Bug Fix: Fixed linked anim graphs that were not properly tearing down their anim instances in TeardownInstance.

  • Bug Fix: Restricted Animation Blueprint compiler subsystem APIs.

  • Bug Fix: Re-enabled ticking for controlled components when the animation budget allocator is disabled.

  • Bug Fix: Implemented a Guard against tracing object properties when the channel is disabled.

  • Bug Fix: Fixed root motion playing faster when the animation budget allocator is enabled.

  • Bug Fix: Animation Layer defaults for a single group can now come from different Animation Blueprints.

  • Bug Fix: LinkAnimClassLayers can now be called from within UAnimInstance::UpdateAnimation.

  • New: Moved away from templated getters for value arrays, replaced with regular function overloading.

  • Bug Fix: Fixed baked additive data for Custom Attributes. Previously the base sequence data was not taken into account. + Changing additive automation test to use an animation sequence as base pose rather than ref-pose

  • Bug Fix: Ensure geometry caches adhere to lighting channels.

  • Bug Fix: Changed how multiple additive states are handled within the Animation Sharing system to ensure state-specific animations will be ticked.

  • Bug Fix: Fixed crash reimporting a skeletal mesh in skeletal mesh editor with LOD or weight filter applied.

  • Bug Fix: Fixed a crash when inspecting a BlendProfile property within the Blueprint Diff tool.

  • Bug Fix: Fixed SkeletalMeshes with AnimSharing from being unable to turn off ticking.

  • Bug Fix: Fixed Control Rig from folding into itself when loops are present.

  • Optimization: Heavily optimized TraceSourceFiltering plugin runtime performance.

  • Bug Fix: Added new EulerTransform Control Type to allow rotations above 180 degrees.

  • Bug Fix: Fixed collapsing hierarchy when using root motion on additive animations.

  • Bug Fix: Fixed virtual bones being reordered during removal.

  • Bug Fix: Changed how Anim Node Live Link determines whether or not an animation and basic roles are supported.

  • Bug Fix: Async anim compression now cancels existing attempts if we are requesting a new compression on the same animation.

  • Bug Fix: Fixed baked transform curves crash when the track doesn't currently exist.

  • Bug Fix: Fixed deterministic cook issue with the pre smart name skeletons.

  • Bug Fix: Fixed insert frame leaving raw/source animation data in invalid state.

  • Bug Fix: Get marquee selection is now working with Control Rig controls.

  • Bug Fix: Stopped UAnimSequence CDO from trying to load a compression scheme.

  • Bug Fix: Fixed looping in marker sync blend spaces.

  • Bug Fix: Removed filtering on async anim compression toast notification.

  • Bug Fix: Fixed blend space marker sync popping when markers land on animation boundaries.

  • Bug Fix: Fixed Apply compression in the editor from blocking the main thread.

  • Bug Fix: Added new functionality when selecting multiple Controls with different gizmo's supported (pos,rotate,scale), Select will now use the first gizmo, otherwise a flash will indicate as you cycle between them.

  • Bug Fix: Added option to edit mode in Control Rig. Edit mode will now translate multiple objects in their own local space instead of the first object's local space.

  • Bug Fix: Removed USkeleton reference from anim compression to address thread safety.

  • New: Sync groups can now optionally sync with other linked instances.

  • New: Added CustomAttribute feature to support float/int/string curve data within AnimationSequences on a per-bone basis.

  • New: Added customization details for (Baked)Custom attribute structures - Showing bone name rather than the index - Grouping the attributes according to their types - This will only show the number of keys for individual attributes. (no data)

  • New: Added support for URO/interpolation of custom attributes #misc fix attribute look-up crash with nullptr skeletal mesh

  • New: Added hide baked custom attributes property, which was causing performance issues with Slate.

  • New: Added AnimSequence.h Include into CustomAttributeCustomization.cpp

  • New: Moved deprecated functionality to AnimSequenceBase and deleted all overrides from child classes.

  • New: Reworked the TraceSourceFiltering tab.

  • Pulled out source filtering widgets into a separate CompoundWidget.

  • Wrapped different filtering widgets within SExpandableArea rather than into splitters.

  • Fixed incorrect ComboButton style name.

  • New: Reworked (SourceFiltering) World filtering tab.

  • New: Added toggle button style it, World filtering will now use toggle buttons rather than menu items.

  • New: Introduced high-level actor class filtering concept to TraceSourceFiltering plugin.

  • New: Added Actor class specific filtering.

  • New: Added Widget to SourceFiltering tab for setup.

  • New: Added Actor class filtering data to SourceFilterCollection.

  • New: Added filter picking functionality to session service.

  • New: Added ActorCollector, similar implementation to TActorIterator, this functionality filters the AActors at UObject hash table level, drastically increasing performance for a large number of actors vs IsA () within user filters.

  • New: Added ForEachObjectOfClasses.

  • New: Added the ability to create a data source filter class from within the Source Filtering tab.

  • New: Added Blueprint and Python exposed functionality to retrieve curve names from an Animation Sequence.

  • New: GetBoneIndex, GetRigidBone and GetBoneWeight on FSkinWeightVertexBuffer are now exported.

  • New: Converted 'a.SkinWeightProfile.LoadByDefaultMode=1'・from Scalability to Default cvar. Users should set these in the device profile rather than scalability from now on.

  • New: FullBodyIK plugin - this includes a FullBodyIK Solver Node that you can use in the ControlRig.

    • Takes a list of Effectors as inputs.

    • Takes a list of Constraints, which you can apply to any joint within the chain.

    • Enables users to tweak Joint's Limit, Stiffness, and PoleVectors.

  • New: Added the ability to scale gizmo's in the Animate Panel.

  • New: Eigen library has been upgraded to 3.3.7

  • New: Added an "AddToClient" method in ULiveLinkPreset that will not destructively add subjects and sources to Live Link.

  • Improvement: Optimized TallyErrors to significantly reduce anim compression overhead and worker thread blocking.

Animation Assets

  • Crash Fix: Fixed a crash when deleting a pose if the pose was prior to a base pose.

  • New: Added Support to ControlRig AnimNode and Pose Driver to support LOD Threshold for optimization.

  • New: Added Weighted Tangents for Rich Curve in Animation Editor.

Animation Blueprints

  • Crash Fix: Fixed a crash when selecting nodes in sub-graphs of deleted nodes.

  • Crash Fix: Fixed a crash when compiling an anim BP containing an animation node with a TMap exposed as a pin.

  • Bug Fix: Prevented pasted linked anim graph nodes from referencing Blueprints with other skeletons.

  • Bug Fix: Fixed ensure when resetting a preview mesh while a specific animation is set to be previewed for an animation Blueprint.

  • Bug Fix: Fixed Linked Anim Layer nodes without input poses failing to trigger inertial blends.

  • Bug Fix: Fixed being able to place input poses in state machine state graphs.

  • Bug Fix: Fixed inertial blending not being triggered when switching a Linked Anim Layer to a child Animation Blueprint.

  • Bug Fix: Added the option to force an update on the K2Event Node, to guarantee that the node is up to date in case any function declarations have moved from parent to child.

  • Bug Fix: Sequence players can now use bindings for pin-exposed sequences.

  • Bug Fix: An orphan pin will no longer be created when hiding a pin.

  • Bug Fix: Removed experimental flag from linked anim layers.

  • Bug Fix: Fixed an issue with sync group collisions when syncing with 'component'・scope.

  • Bug Fix: Fixed an issue with ConvertComponentPosesToLocalPoses.

  • New: Enabled auto-sizing functionality for bone reference widget to allow it to grow larger to show the full bone name.

  • New: Added support for CopyPose AnimNode to allow ComponentSpace Pose. This can be useful when you want to copy a part of the hierarchy as an optimization.

  • New: Added Support for CopyPose AnimNode to select which joints to copy from 'select a root bone to copy from'・

Animation Tools

  • Crash Fix: Fixed a crash when tracing an animation Blueprint with linked anim graphs/layers.

  • Crash Fix: Fixed a crash when closing the animation document tab with a curve editor tab open.

  • Crash Fix: Fixed editor crash in PersonaMeshDetails.cpp.

  • Crash Fix: Fixed a crash when removing a curve that hasn't been edited.

  • Crash Fix: Fixed a crash when a native control rig is selected when creating a new ControlRig.

  • Bug Fix: Fixed Animation Insights tab from always popping up in the editor when the plugin is enabled.

  • Bug Fix: Fixed frames provider to use Algo::LowerBound, it now supports int64.

  • Bug Fix: Added FStringView overload to string store.

  • Bug Fix: Fixed to prevent animation asset preview tooltips from continuing to advance after closing.

  • Bug Fix: Added a feature to loop animation insights playback inside the currently selected range.

  • Bug Fix: Fixed notify tracks not resizing when external modifications are made to notifies.

  • Bug Fix: Added copy/paste keyboard shortcuts for anim notifies.

  • Bug Fix: Converting a curve to metadata now zooms-to-fit for a consistent appearance.

  • Bug Fix: Added safety checks to prevent OOM when panning anim timeline after an anim notify is placed.

  • Bug Fix: Fixed notify labels jittering when label color changes.

  • Bug Fix: Fixed keyboard shortcuts registered in the Insights plugins from not functioning in standalone app.

  • Bug Fix: Fixed and improved snapping in animation editor timelines.

  • Bug Fix: Fixed Animation Insights traced data not appearing until PIE is stopped when enabling tracing while PIE is in progress.

  • Bug Fix: Disabling snapping to grid when editing 1D Blend Spaces now functions as expected.

  • Bug Fix: Changed Animation Graph Overrides layout to make it more readable with long property names.

  • Bug Fix: Added Ensure to maintain global and initial transforms in Control Rig, when reparenting items in hierarchy view.

  • Bug Fix: Moved Control Rig BoneIndex to CachedRigElement.

  • Bug Fix: Added Support for debug watches on variable nodes. You can now right click pins on variable nodes and debug watch them in the editor.

  • Bug Fix: Control Rig now uses defaults when exporting RigVM memory contents. Previously the VM was storing differences to a zero mem version of each register, with this fix we now use the default for structs.

  • Bug Fix: Control Rig will now draw bones in the editor when there is no skeletal mesh.

  • Bug Fix: Fixed marking assets as dirty upon opening Control Rig.

  • Bug Fix: Fixed Bool Math Constants from not working correctly in Control Rig.

  • Bug Fix: Fixed connectability issues by allowing mutable nodes to connect to previous nodes in the execution stack.

  • Bug Fix: Fixed a bug with resetting ControlRig Mapping info.

  • New: Added basic RBF interpolation nodes to Control Rig.

  • New: Added ability to trace an Object's property to the trace stream.

  • New: Added functionality to preserve camera speeds in animation editor viewport similar to how we preserve FOV.

  • New: Moved virtual destructor to ControlRigDrawContainer from ControlRigDrawInterface.

  • New: Implemented Base functionality around interaction rigs in Control Rig.

  • New: Introduced new "offset transform" for controls which allows spatial offsets without the use of spaces.

  • New: Implemented Looping in Control Rig. Users now have the ability to build graphs which can loop, solve multiple parts of the pose sequentially or perform a computation multiple times.

  • New: Implemented RigElementCollection for Control Rig. The collection data type allows the ability to group a series of items in the hierarchy using name based search, hierarchy traversal, and group operations such as union, difference etc.

  • New: Added Support for ControlRigComponent in Sequencer.

  • New: Added Support for Curves in the Control Rig Component.

  • New: Added Mirror functionality in Control Rig for hierarchies. Includes support for bones, controls, and spaces. This functionality can be utilized by right clicking elements in the hierarchy and choosing "Mirror" to create a matching, mirrored hierarchy.

  • New: Added Support for enums in Control Rig. Controls can now represent enums. To utilize this feature, turn the Control to be of type int32 and enable the enum setting in the details panel.

  • New: Added RigVM Support for external variables in Control Rig. External variables represent unowned memory and allow the VM to read / write to those.

  • New: Added Control Rig Inversion: Added Backwards event to enable users to define the execution to invert the rig, solving from an existing pose to animation inputs.

  • New: Added Control Rig: Constant folding - allows the VM to fold constant branches into a resulting set of values to optimize runtime performance.

  • New: Added Control Rig Component - a new component to host a Control Rig on an actor and connect other components. For example, this allows the ability to drive static meshes.

  • New: Added pin redirector functionality to Control Rig. Pins / struct members now properly support redirectors. If you need to change a data structure after serializing assets, you can rely on the default pin director functionality in the project ini files. The Control Rig graph will pick up the redirection and adjust pin default values accordingly for backwards compatibility.

  • New: Enabled blueprint-side variables and implemented an upgrade path. Control Rig now uses normal Blueprint Variables (through the MyBlueprint) widget. Parameters are auto converted to public variables in UE 4.26.

  • New: Added support for if and select branching in Control RigVM. New If and Select nodes perform branching based on a value selection. To use this functionality drag a pin out and look for If and Select in the context menu.

  • New: Added Support for nested dynamic arrays in Control RigVM.

  • New: Added Aim Math node in Control Rig.

  • New: Introduced bracketing scope system to bracket init, update, setup, interaction and sync in Control Rig.

  • New: SetRelativeTransform node now replaces SetRelativeBoneTransform.

Deprecation Note: Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Updated descriptions, keywords, and tooltips in Control Rig nodes.

  • New: Lift error reporting nodes to be interactive - nodes will now show changes as the graph is running in Control Rig.

  • New: Added new generalized GetTransform node to replace GetBoneTransform and 5 other nodes in Control Rig. The GetTransform takes in an item, and can now read any transform within the hierarchy.

  • New: Added Control Rig operation nodes : Name endswith, startswith, contains. String operation / Name operation nodes.

  • New: Control Rig will now Save default expansion state for nodes. Users can provide a default expansion state for a node and save it by right clicking the node and choosing "Save Default Expansion State".

  • New: Enabled Control Rig Component to drive the root component of an Actor.

  • New: Added a new Control Rig Ability to create collections by drag & dropping.

  • New: Added a Control Rig Collection Difference node.

  • New: Moved mode on FK Rig to UProperty instead of Control RIg.

  • New: SetTransform node in Control Rig will now replace SetBoneTransform, SetSpaceTransform, SetControlTransform, SetInitialTransform, SetInitialSpaceTransform. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Added support for sending events from a Control Rig to the Engine/Editor.

  • New: Added an "Additive" option to the context menu in FK Control Rig.

  • New: Added Branching support for execution model in Control Rig.

  • New: Added new Control Rig node: Propagate to Children Unit. This node enables the ability to propagate a transform change within the hierarchy to the children of a provided item. This is useful if you want to delay the propagation to a later time and manually call it.

  • New: Initialize Verlet integrator during the first run, not during init. To avoid an issue concerning determinism, we now initialize all verlet simulated nodes during the first run of the node instead of initialization time.

  • New: The Rig Hierarchy now uses Int32 for comparison of hierarchy topology versions. (adding, removing, renaming / repairing items).

  • New: Introduced notion of SliceContext per pin in Control Rig.

  • New: Added weight to fit on a curve node in the Control Rig.

  • New: Added new node to Control Rig 'Quaternion Scale Unit'・ A node which enables magnitude scalability of a quaternion.

  • New: Added 'Twist Bones Unit Node'・to Control Rig.

  • New: Added PreSetup / PostSetup events and support units to Control Rig Component.

  • New: Added new functionality to Control Rig to support entry names + init execution.

  • New: Enabled Control Rig access to mapped elements in Blueprint.

  • New: Added Blueprint functionality to Control Rig component. You can now drive the Control Rig Component's functionality through Blueprint.

  • New: Added Hierarchy accessor units such as GetParent, GetParents, GetChildren and GetSiblings to Control Rig.

  • New: Introduction of slice context and support for a loop node in Control Rig.

  • New: Added Support for additive mode to FK Control Rig.

  • New: Introduced slices data structure to ExecuteContext and Dynamic Memory support in Control Rig.

  • New: Disabled Control Rig auto-compile during setup mode.

  • New: Added new hotkey Ctrl+Shift+G to reset all Control Rig transforms.

  • New: Provided access to event names and information about controls being accessible. The Control Rig API including the RigVM API has been extended to provide access to the supported event names as well as the accessibility of Controls.

  • New: Pin Watches now support slices (multiple values per loop) in Control Rig.

  • New: Added new node 'Item Exists'・to Control Rig. Item Exists node will return false if a specified item cannot be found.

  • New: Enabled Shift P hotkey to Parent/Unparent User defined bones. Within the Rig Hierarchy Widget or the Control Rig Editor viewport press 'Shift+P'・on your keyboard for parenting or unparenting the selection to the root of the tree.

  • New: Added draw space functionality to Control Rig. The Control Rig Editor's viewport now provides the option to draw all spaces by default.

  • New: Introduced support for the constant / varying state of pins and nodes in Control Rig to prepare for constant folding.

  • New: Events coming from Control Rig will now provide a total time.

  • New: Added Ensure to set map range and other settings on alpha interp during Execute in Control Rig.

  • New: Enabled the option to retain control values within the ControlRigEditor during compile. Within the editor preferences you can now choose if you want to retain the pose of Controls during a compile or not.

  • New: Added a new menu entry for adding an FK Rig in Control Rig and removed additive and automaticbonecurve rig from the asset filter when adding a track.

  • New: Added a new setting to Control Rig that enables the automatic reset of all transforms on compile.

  • New: Control Rig / RigVM: Change MaxArraySize tag to ArraySize Since we no longer support resizing of arrays we are dropping the Max prefix.

  • New: Replaced Control Rig Name unit.

  • New: Added Copy & Paste functionality to mouse location in Control Rig.

  • New: Added Support to Control Rig for creating comments using the 'C' hotkey.

  • New: Moved all DebugSettings on Control Rig node to "details only".

  • New: Added DetailsOnly functionality for RigUnits. Pins can now provide the "DetailsOnly" meta tag to make them show in the details panel.

  • New: Implemented access to all Control Rig control values in python. This includes minimum and maximum.

  • New: Upgraded Control Rig's AimBone, BoneHarmonics, ChainHarmonics and DistributeRotation to use FRigElementKey.

  • New: Added Mirror functionality to the Control Rig graph. To use, right click on a selection of nodes to allow string replacement and mirroring of transform pins.

  • New: Control Rig Sequencer will now use a display name test to track a name, rather than the class name.

  • New: Implemented new SetControlVisibility Node in Control Rig. You can utilize Control Visibility within the graph to hide sets of controls.

  • New: Implemented RigVM access to currently active instructions.

  • New: Implemented new nodes to Control Rig 'Collection enumerate'・ 'Index accessor'・and 'get length'・ These nodes enable the user to get the index of an enumeration as well as the overall count / length.

  • New: Added new ControlRig Component to get two auxiliary Blueprint functions which simplify mapping elements.

  • New: Added new Plane intersection node to Control Rig.

  • New: Implemented int32 nodes and all related int32 math nodes to Control Rig.

  • New: Control Rig will now Set Initial Transforms on Controls in order to affect Offset.

  • New: Renamed Control Rig helper nodes for item and collection.

  • New: Implemented Control Rig API for introspection on available events / entries.

  • New: Added support scale for BasicIK in Control Rig.

  • New: Added Control Rig support for auto compile during setup mode.

  • New: Added weight to Control Rig DistributeRotation node.

  • New: Replaced GetBoneRelativeTransform with GetRelativeTransform node in Control Rig. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Replaced AddBoneTransform with OffSetTransform node. Users won't be able to create the old nodes, but content won't break. Nodes will be flagged as "deprecated" with a red node title.

  • New: Added Control Rig functionality to apply effector transform even if FABRIK or CCDIK doesn't change bone locations. In certain scenarios FABRIK and CCDIK nodes would not perform changes to the effector in the past.

  • Improvement: Improved keyboard workflow in Control Rig with pin name list widgets.

  • Improvement: Improved gizmo material and integrated with eye adaption in Control Rig.

  • Improvement: Added Branch folding for branch, if and select nodes. Optimized Compiler to remove unnecessary dead branches when using If and Select nodes.

  • Deprecated: Removed IControlRigManipulatable and IControlRigManipulationLayer in Control Rig.

  • Deprecated: Deprecated Blend(Transform) Node in Control Rig.

  • Deprecated: Removed ControlRigPickerWidget. The Control Rig Picker is no longer supported and has been removed.

  • Deprecated: Deprecated all other get transform nodes and updated "GetUnitLabel" in Control Rig. Users won't be able to the old nodes anymore, but content won't break. Old nodes will show up as 'Deprecated'・with a red node title.

  • Deprecated: Removed the manipulation module and moved the GizmoActor to the Control Rig module.

  • Deprecated: Disabled Point Simulation Node in Control Rig. Please note that this node is using a deprecated point solver which is going to be replaced by another physics solver. Please do not rely on this node.

  • Deprecated: If you were using the "MaxArraySize" metadata tag in a custom Control Rig node, replace it with 'ArraySize'・for 4.26+.

Import/Export

  • Crash Fix: Fixed various crashes when importing Alembic as a Geometry Cache or a Skeletal Mesh.

  • Bug Fix: Fixed materials not applying correctly to a flattened GeometryCache.

  • Bug Fix: Fixed a bug when importing animations that would try to report invalid progression values on an animation with multiple channels.

  • New: Added a new Alembic import option to skip computing tangents that can improve playback performance of a streaming Geometry Cache.

  • New: Added an experimental editor plugin to stream a GeometryCache from an Alembic file without having to import it as an asset. Enable the "Geometry Cache from Alembic File(Experimental)" plugin to start using it.

  • New: Improved playback performance of animated meshes inside a USD stage.

Skeletal Mesh

  • Bug Fix: Fixed missing macros in FSkinWeightVertexBuffer and FSkinWeightDataVertexBuffer.

  • Bug Fix: Explicitly specify which UAV buffers participate in overlapped compute shaders.

  • Bug Fix: Exposed Skin Weights public API to external modules.

  • Bug Fix: Fixed PoseableMeshComponent to now tick when the transform is updated.

  • New: Added warning on mobile if skelMesh LOD number of influences per vertex is greater than twelve.

  • New: Exposed pre-skinned vertex buffer to local vertex factory so that pre skin vertex position is available to material nodes that use it when derived vertex factories generate position buffers that are post skinned.

  • New: Exposed pre-skinned vertex buffer to local vertex factory so that pre skin vertex position is available to material nodes that use it when derived vertex factories generate position buffers that are post skinned.

  • New : Added LODSyncComponent to synchronize LOD across different mesh components, for example, SkeletalMeshComponent or GroomComponent. This can be used for synchronizing LOD to ensure the intended LODs are used together between different parts.

  • New: When the recomputing tangent option is on in GPUSkinCache, allow the user to select which Vertex Color channel to use to blend between the recomputed tangents and the skinned tangents. The color green is used as the default channel color.

  • New: Allowed classes that have FBoneReference properties to specify what skeleton to use by inheriting from IBoneReferenceSkeletonProvider.

Audio

  • Crash Fix: Fixed a crash on an audio device hot swap when channels have changed.

  • Crash Fix: Fixed a garbage collection crash with an async task owned by FMixerSourceBuffer.

  • Crash Fix: Fixed a crash due to a race condition with the Audio Spectrum Analyzer.

  • Crash Fix: Fixed a crash on load with the Oculus audio plugin.

  • Crash Fix: Fixed a crash that occurred during Submix Graph editing when trying to connect certain pins to or from a parent submix.

  • Bug Fix: Cooked Quality Node Culling now works properly; when enabled, projects will only cook the branches of the quality node that are enabled for that platform, discarding all other branches. This saves memory and speeds up serialization.

  • Bug Fix: Fixed a SoundConcurrency issue where StopLowestPriority and StopLowestPriorityThenNewest had swapped logic.

  • Bug Fix: Fixed a deadlock caused by listeners attempting to access an audio device instance during device destruction when it should no longer be accessed.

  • Bug Fix: SoundCueTemplate code now utilizes the new ClassTemplateEditorSubsystem.

  • Bug Fix: The proper SoundClass per SoundWave now shows when using stat waves/au.debug.soundwaves 1.

  • Bug Fix: Low-pass filters now behave correctly when set through a Sound Class mix.

  • Bug Fix: Fixed a submix issue with muting audio output in unrelated submixes.

  • Bug Fix: Fixed issue with ambisonic decoding where rotation had to occur in both elevation and azimuth to update the decoding instead of either/or .

  • Bug Fix: Fixed a bug where SoundCues wouldn't update the Stream Caching loading behavior of their USoundWaves.

  • Bug Fix: Fixed the mic noise gate threshold for OSS VoIP.

  • Bug Fix: Fixed a bug where sounds with a short fade-in were not playing.

  • Bug Fix: Impulse responses (IRs) have been removed from the list of assets that can be created from the Content Browser. This fixed an issue when using raw imported .wav data vs. compressed data for IR Assets.

  • Bug Fix: Fixed the default device selection in OSS VoIP.

  • Bug Fix: Fixed an issue with a flipped X-axis in ambisonics decoding.

  • Bug Fix: Fixed a bug where sounds in a concurrency system were becoming orphaned and stale if set to PlayWhenSilent.

  • Bug Fix: Added a normalized version of FSpectrumAnalyzer::GetMagnitudeForFrequency() called GetNormalizedMagnitudeForFrequency().

  • Bug Fix: Fixed submixes not re-registering in editor when modifying an effect array or reparenting submixes. Also fixed a crash that occurred when attempting to call InitInternal() from a render thread.

  • Bug Fix: Fixed a memory stomp in the editor when importing audio files.

  • Bug Fix: Fixed a bug with import math for impulse responses.

  • Bug Fix: Fixed an error on the gains of the upmixing function Mix2ChannelsTo6ChannelsFast.

  • Bug Fix: Fixed an issue with AudioComponent::StopDelayed() not stopping the audio component under certain conditions.

  • Bug Fix: A fix was made for the submix envelope follower delegate not outputting the correct envelope for the submix.

  • Bug Fix: Fixed a race condition on rebuilding the submix graph.

  • Bug Fix: Fixed an issue with updating params on submixes.

  • Bug Fix: Fixed a bug in the source effect chain initialization that caused source effects to not play in certain cases.

  • Bug Fix: Fixed the ability for audio components to control source bus sends in Blueprint through SetSourceBussendPreeffect and SetSourceBusSendPostEffect.

  • Bug Fix: Swapped function descriptions to match audio volumes for interior and exterior settings.

  • Bug Fix: Fixed an issue with sound class-based distance attenuation scaling.

  • Bug Fix: Fixed the audio component start time offset for playback percentage.

  • Bug Fix: Fixed short XMA stream truncation.

  • Bug Fix: Fixed a bug with passing an incorrect target platform name for cook overrides.

  • Bug Fix: Fixed an issue with soundfield submixes connecting to incompatible soundfield submixes in the submix graph. They are now shown as disconnected and incompatible.

  • Bug Fix: Fixed an issue with submix assets not opening correctly when double-clicked in the Submix Editor.

  • Crash: Fixed a crash caused by the immediate teardown of an audio device if the device fails to initialize.

  • Bug Fix: Fixed the audio distortion when resuming after a constrain/suspend app life cycle event on Xbox.

  • Bug Fix: Fixed a buzz issue with resonance when outputting to output > 2 channels (such as for surround) and graph has no binaural sources to process.

  • Bug Fix: Fixed a crash when calling GetMMDeviceInfo.

  • Bug Fix: Fixed an assert in FinishRecordingOutput when given an invalid path argument.

  • Bug Fix: Fixed a COM exception in the audio mixer.

  • Bug Fix: Fixed an issue with the non-realtime renderer outputting silence.

  • Bug Fix: Fixed a race condition in the audio renderer by refactoring the audio render buffers to use a thread-safe circular buffer.

  • Bug Fix: Fixed an OSS VoIP failure that occurred after level travel.

  • Bug Fix: Fixed an APU crash caused by a race condition on shutdown on Xbox.

  • Bug Fix: Fixed the support for audio Niagara Data Interfaces on the CPU.

  • Bug Fix: Fixed an issue of sounds failing to cull based on priority.

  • Bug Fix: Fixed an issue where sound cue node culling was not working in non-editor builds.

  • Bug Fix: Fixed an issue with rotating ambisonics sound sources.

  • Bug Fix: Fixed to ensure on servers when USoundWave::RetainCompressedAudio is called. Retained audio is not relevant for servers.

  • Bug Fix: Fixed a regression in the way SoloSound console command works.

  • Bug Fix: Fixed an issue for when sample rate quality changes asset do not recook.

  • Bug Fix: Fixed an issue with source buses and submixes not getting properly imported or discovered when the editor is run with -nosound.

  • Bug Fix: Fixed a bug with quality 100 seekable streams (LPCM) hitting the EOF correctly.

  • Bug Fix: Fixed a bug with baked envelope data returning data for non-looping sounds.

  • Bug Fix: Fixed a hang on PIE exit.

  • Bug Fix: Fixed a shutdown for single-threaded applications.

  • Bug Fix: Fixed a rare hang when the application exits on Xbox.

  • Bug Fix: Fixed a dynamics processor key gain issue.

  • Bug Fix: Fixed an issue where the reverb dry level was not working correctly.

  • Bug Fix: Fixed a bug with the IR asset being in the correct category in the sound submenu.

  • Bug Fix: Fixed a race condition with audio device swapping.

  • Bug Fix: Fixed a Solo Sound Wave action that was not working.

  • Bug Fix: Fixed an issue with the Create New option in the editor for IR assets since they are converted from SoundWaves.

  • Bug Fix: Fixed an issue with audio assets getting compressed/retrieved from the DDC even when cooking the server, which resulted in long server cook times.

  • Bug Fix: Fixed a bug with multiple submix effects not processing.

  • New: Migrated modulation plugin debug commands to work properly with the au.debug.soundmodulators command.

  • New: A new interface was added for procedural audio generation to avoid UObject dependencies in the audio render thread: the ISoundGenerator.

  • New: Audio volumes can now send audio to submixes.

  • New: Dry (initial sound) and wet (repeated sound) level controls were added to submixes.

  • New: Improved the FAudioChunkCache::GetChunk()-if it is called with bBlockForLoadCompletion, it will perform that load synchronously instead of starting and waiting for an async task.

  • New: Added a LoadingBehavior category to the Audio Stream Caching section in AudioMemReport, as well as an on-screen debug print.

  • New: Added a new Audio Bus Asset feature that allows audio to be routed to effects but not rendered as audible.

  • New: A multiband compressor was added to the DSP library.

  • New: Multi-channel sources can now send to source buses.

  • New: Real-Time Submix Spectrum Analysis Delegate contains a host of improvements and new functionality over the existing submix spectral analysis utilities:

    • Convenience functions for creating spectrum bands make it easier to choose the right set frequencies for the sounds you want to visualize.

    • Custom delegate events and a configurable update rate provide easy control over the runtime cost of performing spectral analysis.

    • Normalization and Auto Range make the spectrum analyzer robust to all types of content.

  • New: Subtitle-related properties of Sound and Dialogue Wave are now exposed to Blueprints.

  • New: Added AssetUserData support to SoundBase.

  • New: Organized attenuation categories when they display in the Details panel.

  • New: Added a new convenience method in Blueprints for creating an OSC Server and Client that avoids common problems with the garbage collector.

  • New: Moved the Audio Modulator update to the audio render thread for smoother transitions and better audible masking of game thread hitches.

  • New: Added the ability to use PlaySound2D for non-UI related sounds.

  • New: Updated libsndfile to 0.1.9.

  • New: Added a Modulation Envelope Follower Generator.

  • New: Added a Class template.

  • New: Added the ability for plugins to define their own Modulation Generators.

  • New: Added data-driven Modulation Parameters, which are now assets that can be referenced by Modulation Destination Settings and modulator types.

  • New: Added delegates for reporting when playstate and virtualization change in an AudioComponent.

  • New: Added functions to audition Modulation Mixes in the editor.

  • Improved: Added an SIMD-optimized version of the plate reverb effect.

  • New: Added visual data and layouts for linear and unit encoding for Modulation Bus values in the editor.

  • New: Added a retrigger threshold for sound concurrency. Sounds that trigger on the same sound concurrency below the threshold will not be played.

  • New: Added new CVAR-based debug commands that replace and deprecate the older, stat-style debug commands.

  • New: Added an option for enabling all viewports in editor (present and future), as well as per viewport, by setting -allViews to on or off.

  • New: Added support for True Stereo impulse responses for the Convolution Reverb Submix Effect.

  • New: Additional multichannel mixing controls provide the tools needed to create a consistent convolution reverb for stereo and surround channel configurations.

  • Deprecated: Deprecated OnStart and OnStop synth component virtuals as they are redundant to OnBeginGenerate and OnEndGenerate.

  • Deprecated: Deprecated specialized import for multiple .wav files with special cased file names.

Automation

  • Bug Fix: Expected errors in automated tests are no longer reported as errors in commandlet runs or causing commandlet runs to return a non-zero return code.

  • Bug Fix: Fixed a typographic error ("Screnshots") for Automation errors.

  • Bug Fix: Fixed Linux packaging failure resulting from Lumin key being copied locally into Gauntlet.

  • Bug Fix: Fixed an issue where, on some platforms, new and modified screenshots for the automation framework could not be approved in the Editor.

  • New: Added stompmalloc and d3ddebug options to the EngineTest BuildGraph script.

Blueprints

  • Crash Fix: Fixed a crash on cook with Blueprint nativization enabled if an unexpected class type was specified in the 'ExcludedBlueprintTypes'・list.

  • Crash Fix: Fixed crash loading a map after adding an entry to a set on an instance of a Blueprint when the set's default values in the Blueprint had at least 1 entry.

  • Crash Fix: Fixed an occasional crash during nativization of child Blueprint assets that were reparented to a native Actor class in an older editor version.

  • Crash Fix: Fixed a crash when renaming a nested UserDefinedStruct would incorrectly access pin indices after reconstruction.

  • Crash Fix: Fixed a crash when creating a Blueprint User Struct with the same short name as a C++ struct.

  • Crash Fix: Fixed a crash in SetLinker when loading actors with components that have subobjects.

  • Crash Fix: Fixed a crash that could occur after deleting and replacing references to a Blueprint asset.

  • Crash Fix: Fixed crashes that could occur after reloading Blueprint assets from the Content Browser.

  • Crash Fix: Using Undo after duplicating Custom Event nodes no longer causes a crash.

  • Crash Fix: Fixed a crash in SGraphPinKey construction of orphaned pins.

  • Crash Fix: Fixed a crash that could happen when gathering asset registry tags from a cooked Blueprint.

  • Crash Fix: Fixed an editor crash after converting a class with a user-defined type dependency when using the Blueprint native code generation developer menu tool.

  • Crash Fix: Fixed an editor crash that could occur when compiling a Blueprint Function Library with a function graph that contained an error if a dependent Blueprint contained a call to the library function in its construction script.

  • Crash Fix: Fixed an editor crash on process exit if one or more Blueprint assets were still being indexed in the background.

  • Bug Fix: Prevented pin types from propagating on the target array if it is a wildcard and there is already a connection type.

  • Bug Fix: Updated EnumEditorUtils to propagate to user defined structs as well, not just classes when the order of an enum is changed.

  • Bug Fix: Fixed the Blueprint delegate references not being updated after duplication.

  • Bug Fix: Added a missing code thunk for nativized Blueprint assets utilizing an array swap node.

  • Bug Fix: The construction script is now correctly run from FinishSpawning when an actor is spawned via Blueprint in the editor world.

  • Bug Fix: Fixed Reset Instance Changes to Default for Blueprint added components.

  • Bug Fix: Function nodes added by dragging from the function list will now correctly snap to the grid.

  • Bug Fix: Disabled adding parameters to functions during PIE.

  • Bug Fix: CompileAllBlueprints whiteList option will now work as one. Previously, It was acting as a black list.

  • Bug Fix: Fixed call in editor buttons visible in Blueprint editor.

  • Bug Fix: Fixed incorrect encoding on UHT boilerplate source files generated from a nativized Blueprint class header file with Unicode characters in one or more Blueprint function names.

  • Bug Fix: Fixed a potential C++ type ambiguity in a nativized Blueprint function call site with at least one input argument that accessed a non-native member through an unconverted stub class.

  • Bug Fix: Hid Shortest Path Pin by default on the Ease Function Blueprint node.

  • Bug Fix: Added missing nativized Blueprint typecast support for map key/value and set element wildcard-typed function call inputs.

  • Bug Fix: Fixed an edge case in nativized Blueprint ctor code generation where custom collision profile response values would sometimes not be applied to a mesh instance.

  • Bug Fix: Component Expose on Spawn properties are now correctly set before OnConstruction or OnRegister events occur.

  • Bug Fix: No longer display the bindable events if the object property cannot be resolved.

  • Bug Fix: Added Component nodes now correctly hide the comment bubble on disabled "ghost" nodes.

  • Bug Fix: TSubclassOf is now correctly reflected to nativized Blueprint C++ code for "wrapped" object ptr types.

  • Bug Fix: Fixed negative time check in K2_SetTimer.

  • Bug Fix: Instanced components will no longer remain visible in the component tree view after resetting to Blueprint defaults.

  • Bug Fix: Fixed a bug where using a reroute node connected to GetClassDefaults would cause pins to become hidden on compile.

  • Bug Fix: Fixed a bug where variables created by promoting a pin would lose their default value on undo.

  • Bug Fix: Fixed an unrecognized tab that appeared when opening a Blueprint that was not up-to-date in defaults-only editor mode.

  • Bug Fix: Fixed "Call Parent Function" nodes having an incorrect tooltip in duplicated Blueprints.

  • Bug Fix: Fixed non-commutative binary operators in FBasicMathExpressionEvaluator.

  • Bug Fix: Removed the ability to create a Property Reference type in the Blueprint editor as it is not functional on it's own. Native FFieldPath properties can still be used with a customization.

  • Bug Fix: Added missing code thunks for auto generated SetMapPropertyByName()/SetSetPropertyByName() call sites in a nativized Blueprint class.

  • Bug Fix: Fixed a compiler error that occurred when removing interfaces from duplicated Blueprints.

  • Bug Fix: Added IsConnectionDisallowed to UK2Node_CallArrayFunction to correctly block connections from related object classes.

  • Bug Fix: Added a KismetSystem function for setting FColor's properly, instead of incorrectly calling the setting for "FLinearColor" upon compilation.

  • Bug Fix: Added 'Self'・as a reserved name for function parameters in Blueprints.

  • Bug Fix: When collapsing a to Function and Add Function in a const Blueprint, it will now automatically make the new function const.

  • Bug Fix: Updated the green "+" or "view"・buttons in the details panel to properly utilize the ComponentTemplate class so native component delegates will show up as well.

  • Bug Fix: BP Variable sets will now only clear wildcard types if both pins are empty.

  • Bug Fix: Removed an unnecessary call to NotifyPostChange which was causing UserDefinedStruct recursion guard to trigger and not save references to assets.

  • Bug Fix: MaterialParameterCollection can now be promoted to variable in Blueprints.

  • Bug Fix: Map Variables now have an icon in the Blueprint Editor Action Menu.

  • Bug Fix: Fixed interface-typed inputs on non-native Blueprint functions leading to a compile error in its nativized C++ code if the input was cast to an object inside the function graph.

  • Bug Fix: Fixed case sensitivity for Switch on String node.

  • Bug Fix: Added soft class/object support to FDynamicOutputHelper::IsTypePickerPin. Remove invalid ensure about dynamic output pin directions.

  • Bug Fix: Updated the amount of padding for graph nodes by default so that it better fits our compact math nodes.

  • Bug Fix: Fixed non-nativized Blueprint stub functions failing to copy values back out to any output parameters after VM execution when using exclusive nativization.

  • Bug Fix: Fixed the default BlueprintNativeEvent method definitions in the DataSourceFilter/IDataSourceFilterInterface APIs to be overridable in C++ in order to support nativization of Blueprint implementers.

  • Bug Fix: Added more explicit messaging for map/set errors when attempting to create a container of non-hashable type.

  • Bug Fix: Disabled connections of exec pins to array, set, or map container nodes.

  • Bug Fix: Made local function variables global when converting from a function to an event.

  • Bug Fix: Fixed keyboard navigation issue after renaming a component in Blueprint Editor.

  • Bug Fix: Added UFUNCTION parameter name validation to UHT on native functions.

  • Bug Fix: No longer set autogenerated nodes to transactional unless the owning graph is also marked as transactional.

  • Bug Fix: Added ATAN2 naming alias which allows it to be placed in the Math Expression node.

  • Bug Fix: Removed Blueprint recompiling on rename as it is redundant with new BP Compiler updates and causes a re-entrance into FileHelpers::SaveWorld.

  • Bug Fix: Dragging off a pin in Blueprint Function Libraries will now allow the user to Promote it to a Local Variable.

  • Bug Fix: Components added directly as a child node will now have an initial transform consistent as if they were added to the root and then attached to the parent node.

  • Bug Fix: Native Components will now only display the "Add Event" context menu if editing is allowed on them.

  • Bug Fix: Duplicating a function now correctly updates the details panel to edit the new function.

  • Bug Fix: Marked child Blueprints as modified when removing an interface to prevent phantom references in the Reference Viewer.

  • Bug Fix: All subobjects are now preloaded when preloading templates for the Inherited Component Handle.

  • Bug Fix: Fixed duplicate nodes being created when Promoting a collapsed graph to a function or macro.

  • Bug Fix: Exported the FFindInBlueprintsResult and FStreamSearch APIs.

  • Bug Fix: Duplicating variables inherited from a parent class in the MyBlueprint panel now copies the default value from the old variable to the new one.

  • Bug Fix: Enabled renaming Enumerators to the same name with different capitalization.

  • Bug Fix: Self-context function calls that are implemented as an event will now be properly created as such.

  • Bug Fix: Enabled wildcard pins for assignment nodes to take on container types from other wildcard pins.

  • Bug Fix: Fixed Blueprint type-checking logic so that an error is properly raised after a member variable changes type.

  • Bug Fix: Fixed an edge case where custom collision profile response values were not being applied in nativized Blueprint ctor code.

  • Bug Fix: Refactored UEdGraphPin::GetPrimaryTerminalType to use the existing FEdGraphTerminalType::FromPinType method.

  • Bug Fix: Fixed non-functional collision in a nativized Actor Blueprint with one or more components set up to use a custom collision profile to override the component's inherited default collision response.

  • Bug Fix: Added a check to guard against a reported crash while scanning a new object redirector to a Blueprint asset when surfaced by the directory watcher.

  • Bug Fix: Fixed variables on spawned Blueprint instances from not being initialized to modified native struct types with details customization and no UPROPERTY() fields.

  • Bug Fix: Fixed a compile error during packaging when nativizing a Blueprint class with a MakeStruct node used to create an FFrameTime struct value literal.

  • Bug Fix: We now validate bound events at compile time to ensure that the owning component has not been removed from the Blueprint. This may throw Blueprint Warnings in existing assets and exposed events that were bound, but never called. The error will read " does not have a valid matching component".

  • Bug Fix: Blueprints with containers that reference user-defined structs that have been deleted outside of the editor are no longer unfixable. Users can now delete these references so that the Blueprint compiles again.

  • Bug Fix: Skeleton classes will now only reinstance into valid class hierarchies, enabling garbage collection to handle them properly, avoiding reprocessing during every instance.

  • Bug Fix: Blueprint diff tool's AdvanceMapIterator and AdvanceSetIterator will now correctly advance valid iterators. This fixes a bug where only the first element in a map would be diffed against, but it would be done N times.

  • Bug Fix: We no longer relocate transient ICH override templates when compiling a parent Blueprint class. This avoids archetype lookup failures on a child class load.

  • Bug Fix: Added functionality to break custom event node links when promoting from a collapsed graph to a new function graph to avoid creating a cross-graph pin link.

  • Bug Fix: Fixed an issue where Blueprint functions called from UMG or async callbacks would run in the wrong client/server context when using Play In Editor. Now every time a Blueprint function gets executed it will correctly set the "world context" which should fix issues with soft object references.

  • New: Added Move to Parent option for variables and functions in MyBlueprint list.

  • New: Added Copy/Cut/Paste Support for variables, functions, and macros.

  • New: Disabled editing of default values on soft object reference member variables.

  • New: Added "Create Matching Function" context menu option to unresolved CallFunction nodes.

  • New: Improved Replace Node References feature and promoted from experimental.

  • New: Component tick properties can now be modified by a Blueprint that has added a component of that type.

  • New: Instead of just removing connections on latent action nodes, rewire them if possible and if not then create an orphan pin.

  • New: Exposed TSoftObjectPtr variants of LoadStreamLevel, UnloadStreamLevel, and OpenLevel.

  • New: Generated new Variable GUIDs when duplicating Blueprint assets, preventing them from finding false positives in Blueprints.

  • New: Added GetPlatformUserDir to kismet function library.

  • New: Fixed static functions on network-enabled classes like Actor to correctly handle Authority Only/Cosmetic correctly.

  • New: Blueprint Variables now show tooltip text when hovering over the tooltip EditableTextBox in the details panel.

  • New: Added reverse function for arrays to Blueprint API.

  • New: Added bOpenInEditor parameter to CreateBlueprintFromActor and CreateBlueprintFromActors.

  • New: Adjusted the Blueprint debug toolbar to better fit on the screen for smaller window sizes.

  • New: Added the ability to convert functions and events from the "My Blueprint" window as well as by right clicking on the node.

  • New: Added export flag to UK2Node_GetSubsystem.

  • New: Enabled Vectors and other struct types to edit the value and slider range metadata in the details panel.

  • New: The context search will now prefer options that have been favorited by the user.

  • New: Added automatic naming of Blueprint variables to match their target pin when "Promoting to Variable".

  • New: Added controllable length to ArrowComponent and expose in TargetPoint, which grants ability to use them as an editor visualization from Blueprints.

  • New: Added GetSystemPath function for finding the full path to an Asset on disk.

  • New: Subsystems that are marked NotBlueprintType in their metadata are now hidden from showing up as subsystem targets in Blueprint editor, allowing native-only subsystems. Static functions will still be available.

  • New: Added suppressable warning dialog when attempting to rename RepNotify functions.

  • New: Added prompt when pasting unresolved function nodes to ask how they should be resolved.

  • New: Added new "Random" and "RandomFromStream"・to KismetArrayLibrary.

  • New: Enabled UEdGraphPin to opt out of "Friendly" Names in Editor without explicitly declaring an override.

  • New: Added int64 type to Temporary variable action registry and GetValueFromString in Blueprints.

  • New: Actor Component Blueprints now use the same Data Only Blueprint logic as all other types. They will open in the Data Only Blueprint editor if they contain no nodes.

  • New: Blueprint debugger commands Step (Into/Next/Out) will now ignore the currently selected filter object, making it easier to trace execution from one Blueprint to another.

  • New: Blueprint Editor will now display which Blueprint library is currently being loaded so that developers can have visibility on which libraries take a long time to load.

  • New: Exposed InterpToMovementComponent's AddControlPointPosition and ResetControlPoints functions to Blueprint.

  • New: Added an on-by-default CVar that enables users to suppress warnings about events that are missing their bound components. Turning this on will result in possible silent failures of the Blueprint compiler.

  • New: Added a new Blueprint compiler safety check that will warn when a bound event's component has been deleted. This can possibly expose a lot of previous silent failures. If you wish to disable these warnings, then you can set the Config variable "bp.PinValidityCheck.bDisplayMissingBoundComponentWarning" to false in your DefaultEngine.ini file. We don't recommend turning off these warnings in the long term, but it can be useful to clean up the issues over time on large projects instead of all at once.

  • New: Added function alias "FCeil" for "Ceil"・on math expression nodes

  • New: Added wildcard connections to the wildcard pins in the Format text node so that it can be used inside of macros.

  • New: Added Preview Playback FPS option to SubUVMaker, changing settings will no longer reset the preview result.

  • New: Added new Macros "Create and Assign Render Target" and "Create and Assign MID"・that handle the logic to assign the resulting assets to variables and avoid re-allocating memory if the variable still contains data that matches the requested input.

  • New: Added Cloud Compositing BP tool to Volumetrics Plugin, includes some example shaders from simple billowy clouds to storms.

  • New: Made SubUV maker work with Niagara systems and capture them directly in the editor viewport.

  • New: Exposed more LiDAR interactions to Blueprints.

  • New: Added a simpler preview subUV that works better and is easier to start from.

  • New: Added override functionality for fluid simulation testing in Landmass.

  • New: Added a "DisableSplitPins" metadata tag for native make/break nodes. Adding the metadata tag to the "meta"・section of your UPROPERTY tag will disable split pins on your custom UClass/UStruct.

  • Improvement: Improved behavior when using the Blueprint debugger object filter on an actor that was dynamically spawned. It will attempt to save and restore your selected actor/object over multiple PIE sessions until the filter is manually changed.

  • Deprecated: Fixed "Quaterion" typo by renaming two functions with the type to Conv_VectorToQuaternion and Conv_Vector4ToQuaternion.

Core

  • Crash Fix: Fixed a crash in UnrealHeaderTool when you have a UInterface but no corresponding IInterface.

  • Crash Fix: Fixed a crash when using the property system to edit a TMap property with a TWeakObjectPtr key.

  • Crash Fix: Fixed rare crash occurring during LoadTime analysis threading issue where EditCpuTimeline ended up being called without being under the proper edit session scope.

  • Crash Fix: Fixed hot reload crashing when creating a new user-defined Blueprint struct.

  • Crash Fix: Fixed a crash in UnrealHeaderTool when parsing two headers with the same leaf name but different paths.

  • Crash Fix: Fixed shutdown crash in monolithic editors, this was due to a global static being marked destroyed and falling out of scope.

  • Crash Fix: Fixed an UnrealHeaderTool crash when you have a UInterface but no IInterface.

  • Crash Fix: Fixed skiprows crashing in CsvToSvg, csvdir will now read .csv.bin files.

  • Crash Fix: Fixed nullptr crash when cooking.

  • Crash Fix: Fixed a crash when running clients and -nullrhi. Ensure the preload screen manager is running even though there is no window to render.

  • Crash Fix: Fixed a rare crash when incremental Garbage Collector is running and other threads create new UObjects.

  • Crash Fix: Fixed TCHAR_TO_UTF8 crash for illegal UTF-16 strings that end with the first half of a UTF-16 surrogate pair.

  • Crash Fix: Fixed Garbage Collector crashes caused by Object class 'ClassPrivate pointer'・being null, and added an assert to FObjectPropertyBase::CheckValidObject when an object class is null.

  • Crash Fix: Fixed a crash when generating native code for Blueprints that contain 'Property Reference'・variables.

  • Crash Fix: Fixed a rare crash when destroying objects caused by logging code trying to log path names of destroyed objects.

  • Crash Fix: Fixed a crash when saving Blueprints with 'Set Float Attribute'・node.

  • Bug Fix: Fixed potential precision error in FEngineWaitLatentCommand::Update and FStreamAllResourcesLatentCommand::Update.

  • Bug Fix: Changed DDC file writes and reads to be silent. This avoids commandlets failing because of errors logged during access to DDC.

  • Bug Fix: Fixed usage of SCOPED_NAMED_EVENT and TRACE_CPUPROFILER_EVENT_SCOPE in various places. This avoids scope event names to get additional quotes and avoids the overhead of using macros with dynamic string as scope names.

  • Bug Fix: Fixed TRACE_PLATFORMFILE_FAIL_OPEN to use -1 as an invalid handle for trace events.

  • Fixed missing TRACE_PLATFORMFILE_END_WRITE event when write operation fails to write all bytes.

  • Bug Fix: Updated ProjectManager.cpp.

  • Bug Fix: Remapped soft/weak object pointers when duplicating multiple actors.

  • Bug Fix: Fixed the FGenericPlatformOutputDevices::GetAbsoluteLogFilename() not reporting the correct log filename when more than one instance of the same application was running. This could lead to attaching the wrong log file to a bug report.

  • Bug Fix: Fixed leaked process handles on Windows.

  • Bug Fix: Fixed issue where the crash reporter was truncating some pointers.

  • Bug Fix: Fixed XMLFile. It wasn't properly dealing with a single quote in a content field.

  • Bug Fix: Fixed a race condition occurring when an ensure and a crash executed concurrently.

  • Bug Fix: Fixed the name generation of the folder containing the crash/ensure artifacts to avoid collisions.

  • Bug Fix: Fixed a race condition when generating the crash error message.

  • Bug Fix: Fixed a deadlock that could occur between an application and CrashReportClient.

  • Bug Fix: Fixed CrashReportClient HttpSendTimeout configuration having no effect because it was set before GConfig was initialized.

  • Bug Fix: Fixed a variety of subobject instance issues:

    • ComponentInstanceDataCache will now compare instances when evaluating whether objects are identical or not.

    • ComponentInstanceDataCache now preserves object names by duplicating them in unique objects rather than directly in the transient package where the name could already be taken.

    • ComponentInstanceDataCache now overwrites objects with the same name when restoring a duplicated object during the apply phase.

    • Fixed PPF_DeepCompareInstances between 2 instances not working. Now only template against template is skipped.

    • Deep comparisons now work on objects instanced in Blueprints. Instead of insisting the CDO itself has a DSO of the correct name, we simply compare that the objects have the same name and that they either have the same archetype, or one is the archetype of the other.

    • Comparisons of instanced objects in containers are now correctly using a deep comparison for property panel purposes.

  • Bug Fix: Fixed a bug that resulted in an infinite loop when launching a project where the editor was built with a Unique Build Environment.

  • Bug Fix: Fixed UnrealHeaderTool wrongly emitting a UObject::Serialize adapter function when a type provides overloads for both FArchive& and FStructuredArchiveRecord.

  • Bug Fix: Fixed UnrealHeaderTool generated code when a BlueprintNativeEvent UFunction is inside a WITH_EDITOR block.

  • Bug Fix: Fixed a hang in UnrealHeaderTool when a class inherits an interface with the same name except for the prefix.

  • Bug Fix: Fixed a bug in FVector::Coplanar. The test was returning a false result when plane B was 'under'・plane A.

  • Bug Fix: Fixed usage of Encode 7bit in trace code. It may now use up to a maximum of 10 bytes.

  • Bug Fix: Fixed FString::TIsCharRangeNotCArray and FString::TIsTCharRangeNotCArray to avoid recursive template instantiation on some compilers.

  • Bug Fix: Fixed issue where application aborted when plugins failed to load due to EnableAllPlugins command.

  • Bug Fix: Removed CPF_HasGetValueTypeHash from FArrayProperty as arrays are not hashable.

  • Bug Fix: Changed the generated code emitted for properties by UnrealHeaderTool to avoid a PVS static analysis warning.

  • Bug Fix: Renamed CVar Debug.EnableLeakTest to EnableLeakTest. It was not possible to change from the console as "DEBUG" was consumed by UEngine::Exec.

  • Bug Fix: Fixed a MallocStompOverrunTest for 64 bits platforms. The original code was not causing a buffer overrun because of the 16 bytes alignment.

  • Bug Fix: Fixed a compile error TSparseArray::PointerToIndex.

  • Bug Fix: DisableEnginePluginsByDefault is now saved as part of the written Uproject JSON.

  • Bug Fix: Added support for namespaced native base types of UStructs in UnrealHeaderTool.

  • Bug Fix: Fixed a compile error in TLruCache::RemoveByPredicate.

  • Bug Fix: Fixed a compilation error with Algo::Rotate.

  • Bug Fix: Increased read buffer limit to 1MB (from 48K) for reading metadata from a trace file.

  • Bug Fix: Fixed TSet not being able to accept const pointers as search inputs when the element type was a non-const pointer.

  • Bug Fix: Fixed the nulling of properties during hot reload when a reinstanced object refers to another reinstanced object.

  • Bug Fix: Removed the "Channel" suffix from channel names when tracing them. This fixes regression for Trace Data Filtering plugin (showing "Channel"・suffix and presets not working anymore) and backward compatibility with previous traces.

  • Bug Fix: Added comments to TRACE_CPUPROFILER_EVENT_SCOPE macros.

  • Added TRACE_CPUPROFILER_EVENT_SCOPE_STR macro that receives static string parameters.

  • Fixed SCOPED_NAMED_EVENT macros adding extra quotes to named events when traced.

  • Fixed SCOPED_BOOT_TIMING to use TRACE_CPUPROFILER_EVENT_SCOPE_STR instead of the dynamic string version.

  • Bug Fix: Fixed FString::ParseIntoArray when the string has uninitialized reserved memory but is zero length.

  • Bug Fix: Fixed TSet properties'・text import of a struct type, where the struct doesn't initialize all of its members in the constructor.

  • Bug Fix: Fixed ObjectName:FieldName reversal bug in FField::GetPathName. Added StringBuilder version of FProperty and UObject GetPathName to optimize allocations in Niagara graph cooking.

  • Bug Fix: Changed GetNum(std::initializer_list) to return int32. This fixes the construction of a TArrayView from an initializer list.

  • Bug Fix: Fixed bias in Array_Shuffle.

  • Bug Fix: Fixed ObjectName:FieldName reversal bug in FField::GetPathName().

  • Bug Fix: Fixed TArrayView comparison ambiguity with == and != when both operands are TArrayView.

  • Bug Fix: ReadLibraryImportsFromMemory will no longer read past the end of the Imports table. This could result in invalid symbols added to the ImportNames table which resulted in increasing the engine start time.

  • Bug Fix: Allowed FStringView to be used with the ByHash TMap functions for FString TMap key queries.

  • Bug Fix: Forced stat groups to register in the constructor of their FThreadSafeStaticStat. This fixes a situation that prevented a group without FScopeCycleCounter from being activated if no other group was activated.

  • Bug Fix: Disabled copying of FUObjectItem.

  • Bug Fix: Prevented precision loss when passing an int64 value with basic math expression. The default value of the min and max is now the limit of the numeric type.

  • Bug Fix: Save INI files as UTF-8 by default.

  • Bug Fix: Subsystems will not attempt to instance non-authoritative classes.

  • Bug Fix: Avoided a stack overflow in FOutputDeviceRedirector.

  • Bug Fix: Added double overloads of IsNaN and IsFinite for Unix and Mac.

  • Bug Fix: Added an Ensure to AssetRegistry OnPathAdded and OnPathRemoved events are always fired hierarchically.

  • Bug Fix: Prevented the render thread from tracing an unmatched frame event.

  • Bug Fix: Fixed pak signature file data from incorrectly storing the original decrypted master hash after the initial load. This behavior caused future chunk hash mismatches to incorrectly report a master table corruption.

  • Bug Fix: Fixed CrashReportClient/CrashReportClientEditor sometime uploading the wrong log file.

  • Bug Fix: Fixed GenericPlatformOutputDevices to reserve and lock the name of the log file to prevent a concurrent instance to use it and ensure CrashReportClient.exe pick up.

  • Bug Fix: Fixed memory hangs when flushing async loading and the queue gets stuck on a low priority job which is not being serviced due to throttling. Please note that this is disabled by default due to a potential performance impact, but can be enabled via the CVar pakcache.AsyncLoadingAllowFlushProtection.

  • Bug Fix: Fixed a present hang detector race condition.

  • Bug Fix: Fixed initialization workflow of ExternalProfilers.

  • Bug Fix: Fixed a random memory corruption when using FMallocBinned.

  • Bug Fix: Fixed a Check failure in FD3D12CommandListManager::EndTrackingCommandListTime when running ProfileGPU.

  • Bug Fix: Fixed access violation in subsystem container startup discovered with the command '-stompMalloc'・

  • Bug Fix: Disabled use of FPreloadFile for the asset registry. To re-enable define ASSET_REGISTRY_USE_PRELOAD_FILE to 1.

  • Bug Fix: TAllFieldsIterator will now iterate over nested inner fields. This fixes a bug where adding a new property to a user defined struct that's used in an array property on a Blueprint will corrupt the array values.

  • Bug Fix: Fixed up analytics WeakPtr reference by using Pin.

  • Bug Fix: Fixed Tickable objects from sometimes failing to register when re-allocated with the same address as previously destroyed ones.

  • Bug Fix: Added Ensure that FParse::Value returns a string with a correct length when used with an input string which length is greater than 4096.

  • Bug Fix: Fixed FPackageReader to copy the editor only filtering flag from the underlying reader archive to the owning package reader. It can be set by the summary reading code and affect how future serialization occurs.

  • Bug Fix: Fixed type conversions between Percentages and Multipliers.

  • Bug Fix: Fixed cooked builds using async archives, if we fail to load the package file summary then advance the async archive's load state out of "waiting for header" so that the failure can be processed gracefully and not trigger a check.

  • Bug Fix: Fixed StaticFindObject to search for any package with a package name that is only a substring of the full package name.

  • Bug Fix: Fixed a rare thread hang that could occur when reading from signed pakfiles from multiple threads.

  • Bug Fix: Fixed operator precedence and associativity in basic math expression evaluator.

  • Bug Fix: FReferenceFinder will no longer use multithreading until all native classes have been registered in order to avoid asserts when assembling token streams for classes that haven't had it assembled yet.

  • Bug Fix: Fixed FFieldPath::ToString from not removing nativized BP temp package prefix.

  • Bug Fix: Fixed a wrong printf conversion specifier for int64 type.

  • Bug Fix: Fixed final window size computation when only the window height is specified.

  • Bug Fix: Fixed global fstructuredarchive insertion operator not closing the adapter after use, added slot insertion overloads for TEnumAsByte, and enum class types.

  • Bug Fix: Fixed FAsciiSet::Skip skipping wide characters, Optimized Skip speeds, simplified ParsePropertyToken, and added some unit tests.

  • Bug Fix: Fixed issue with non-ASCII directory names.

  • Bug Fix: Added missing AddReferencedObjects functions to FDelegateProperty and FMulticalDelegateProperty.

  • Bug Fix: IncrementalPurgeGarbage will now lock the Garbage Collector guard only once to avoid too many locks.

  • Bug Fix: Made FPageAllocator a singleton to control global initialization/destruction order. Avoids a potential startup crash in monolithic builds.

  • Bug Fix: FFieldPaths should no longer re-resolve themselves each time a Blueprint is destroyed and only re-resolve if the Blueprint that owns the property they resolve is destroyed / or recompiled.

  • Bug Fix: Fixed Garbage Collector skipping some generated class references because they were incorrectly marked as CLASS_Native.

  • Bug Fix: Fixed a rare case of a compressed IO read re-using a cached buffer that it shouldn't have.

  • Bug Fix: Fixed StaticFindObject to handle nested sub-objects when searching for any package without a package pointer.

  • Bug Fix: Added ensure to fail the loading of an async package correctly when the summary load fails.

  • Bug Fix: FieldPath property's ImportText will now properly support full path names including the field type as well as delimited strings.

  • Bug Fix: UStructs with AddStructReferencedObjects are now correctly marked as containing object references, even if it contains no UPROPERTY object references

  • Bug Fix: Fixed memory stomping occurring when a long command line is used.

  • Bug Fix: When cooking, references to editor-only FProperties will be nulled out.

  • Bug Fix: Fixed wrong return type of rarely used ExportTextPathToObjectPath overload.

  • Bug Fix: FKismetCompilerContext::ValidateVariableNames will now look through both UFields and FProperties when looking for conflicting names.

  • Bug Fix: FFieldPaths will no longer attempt to resolve themselves to new fields after the original field they resolved to has been destroyed.

  • Bug Fix: FReferencerFinder will now properly find GGCObjectReferencer as one of the referencing objects.

  • Bug Fix: When converting UProperties to FProperties, the engine will rename the old property so that it doesn't collide with potentially valid objects of different type.

  • Bug Fix: Fix incorrect default value being applied for the skipiostore parameter in UAT

  • Bug Fix: Fixed memory stomping occurring when a long command line is used. Modified FGenericCrashContext to perform safe string copies which caused TLazySingleton to crash due to static memory being overloaded.

  • Bug Fix: Fixed code for c++17 compilation. std::binary_function, std::unary_function and register keyword have all been deprecated.

  • Bug Fix: Added ensure to UAnimBlueprintGeneratedClass::EvaluateGraphExposedInputs'・ValueHandlerNodeProperties so they now properly resolve against their class which can be in a renamed package when loading.

  • Bug Fix: TFieldPaths will now always try and use the provided struct when resolving themselves and update its path with the resolved package if it's different to the existing serialized value.

  • BugFix: The command line '-handleensurepercent='・now works correctly.

  • Bug Fix: Changed TArray version of TMap::GetKeys to reset supplied array before adding keys as the function did not work correctly if used to accumulate keys over multiple maps.

  • New: Updated API in FAxisViewportInt32 and FAxisViewportDouble. All functions from FAxisViewportInt32 and FAxisViewportDouble classes that change positions now return true if the position was changed.

  • New: Exposed a more customizable EnforceScrollLimits, in addition to UpdatePosWithinLimits.

  • New: Converted StaticConstructObject_Internal to use a parameter block.

  • New: TMap::GetKeys now resets the TArray passed into it.

  • New: Moved DeveloperSettings into its own module so it can be used outside of Engine. When inheriting from UDeveloperSettings, you will need to add DeveloperSettings as a module dependency.

  • New: Made the string builder types more generic. The string builder type hierarchy has been simplified to TStringBuilderBase and TStringBuilderWithBuffer .The append operators have been simplified to append anything convertible to a string view.

  • New: Changed TStringView to be usable where CharType must be deduced Both FString and TStringView can now be constructed and assigned from any contiguous container of the same character type. This allows FString to be constructed and assigned from FStringBuilderBase and TStringBuilder.

  • New: Added GridSnap and Floor as a templated function.

  • New: Added Emplace functions to SparseArray. New: Made internals of LoadFileToStringArray[WithPredicate] to support 64-bit sized files (still returns a 32-bit TArray of 32-bit FString lines).

  • New: Added Game and EditorOnly dependencies to the AssetRegistry. The information for which imports and soft package references are editor-only is calculated during SavePackage, and requires resaving packages to use; until packages are resaved, all of their dependencies are assumed to be used in-game. The interface of dependencies in the asset registry changed to support reporting the extra information for each dependency: EAssetRegistryDependencyType was split into EDependencyCategory and EDependencyProperty.

  • New: Added an option to view full reference chains (ignoring non-GC objects). Just add "full" to the argument list.

  • New: Custom versions can now register a validation function that can flag an asset as unloadable.

  • New: Added the IsValidPath function to FPackageName. This function checks for a valid root. FindOrLoadAssetsByPath (in EngineUtils) now uses IsValidPath to be able to load the content of roots. This was not possible before as IsValidLongPackageName on a root is always false.

  • New: Added FindDisplayNameTextByValue and FindAuthoredNameStringByValue functions to UEnum. These are like their Get equivalents, but return whether a value was found or not.

  • New: Updated ApplyBefore and ApplyAfter to TTuple. These functions use Invoke instead of a direct call to the callable object so that member function pointers can be used instead. Also removed TMemberFunctionCaller from the delegate system, which was doing the job that Invoke now does.

  • New: Added TDelegate and TMulticastDelegate syntax, similar to TFunction, to be used instead of the DECLARE_DELEGATE and DECLARE_MULTICAST_DELEGATE macros.

  • New: Added the Get function to TTuple to enable developers to get a tuple element by its type rather than by its index.

  • New: Updated AsConst to work the same as std::as_const. The overload for pointers is deprecated because it caused arrays to decay to pointers.

  • New: Added a check for VS2019 redist, and to trigger the prereq installer if it isn't found.

  • New: Moved AssetRegistry structs into CoreUObject - AssetData, AssetBundleData, ARFilter, and AssetDataTagMap were moved into CoreUObject. This will enable us to remove the link requirement that all functions in these structs are inlined.

  • New: Moved all AssetRegistry headers into AssetRegistry subdirectory to match include style in the rest of the engine. Includes using the invalid include path AssetRegistry/Public/ will need to immediately change to AssetRegistry.

  • New: Added "Render" thread group (trace events) also to the "RHIThread"・and to the "RTHeartBeat"・rendering threads.

  • New: Added support for the %hs format in FGenericWidePlatformString::GetVarArgs.

  • New: Added a TTupleIndex trait for getting the index of a type in a tuple, and a TTupleElement trait for getting the type at a given index.

  • New: Changed TTuple::Get() to work like std::get<>, which behaves differently from struct member access when elements have rvalue reference types and are extended to allow volatile tuple access.

  • New: Added a ::type typedef to TEnableIf and ::value static members to TAnd, TOr and TNot for compatibility with the standard library.

  • New: Added policy support to delegates, allowing them to take a user policy to configure behavior and state. Added .natvis support for multicast delegates.

  • New: Added IoStoreUtilities: Compression support.

  • New: Promoted the prototype RingBuffer class into Core\Public\Container, this is the recommended container for a single-threaded queue, dequeue, circular buffer, or ring buffer.

  • New: The following minor additions have been added to the TaskGraph interface:

    • FFunctionGraphTask supports functors that take the completion graph event as a parameter.

    • A shortcut for FTaskGraphInterface::GetWaitUntilTaskCompletes()->FGraphEvent::Wait().

  • New: Captured and logged the call stack of a crash inside CrashReportClientEditor.exe. The log is emitted with the Editor analytics to help diagnose crash in the crash reporter.

  • New: Memory-mapped bulk data in IoDispatcher.

  • New: Made the Algo:: Sort algorithms take rvalue refs so that they can be passed temporary TArrayViews.

  • New: Added an option for potentially increased performance when getting UTC time via FDateTime::UtcNow when PlatformUtcNow is slow. This can be enabled with 'bUseEstimatedUtcNow'・located in the TargetRules.

  • New: TMap::StableSortByValue now works when your value contains a TUniquePtr.

  • New: Enabled the unhandled exception filter on Windows for games. This captures crashes in non-engine threads and from Windows Kernel callback.

  • New: Added a version of CreateOptionalDefaultSubobject which allows specification of the type to create by default.

  • New: Added a version of TMap::GetKeys that takes a TSet instead of TArray to populate.

  • New: Vectorized several FQuat operations and improved numerical stability of FQuat::GetRotationAxis().

  • New: Added .natvis visualizers for FVector, FQuat, FRotator and FTransform.

  • New: Implemented new class FEventRef - an RAII-style alternative to FEvent which gets or returns an FEvent instance from or to the pool automatically. The class definition is placed into Event.h to be close to FEvent so Users can see that there's an alternative to FEvent . Implementation is placed in ThreadingBase.cpp where FEvent and FScopedEvent implementations are.

  • New: Allowed TTuple to be constructed and assigned from tuples with different types, as long as all the destination element types are constructible or assignable from the source types.

  • New: Added Tie function for destructuring TTuple return types into individual variables, like std::tie().

  • New: Added a ForwardAsBase function which allows the perfect forwarding of a reference as a base type.

  • New: ReadLibraryImportsFromMemory was reading past the end of the Imports table. This could result in invalid symbols added to the ImportNames table which was increasing the engine start time.

  • New: Added new code comment inside TUniquePtr; containing advice for when its use inside UObjects causes a compile error.

  • New: Added First function and Last function to TPageArray.

  • New: Added a new compile error when binding a delegate with a const object pointer and non-const function.

  • New: Added a new TVariablePagedArray implementation with fixed-size pages, but a page may have unused items either at the beginning or at the end of it's items array.

  • New: Added FPlatformProcess::Yield method.

  • New: Changed the definition of LLM_ALLOW_ASSETS_TAGS to allow activation without modifying the header.

  • New: Added Move operations to TAttribute.

  • New: Made trace channel names tolerant to ending 's'・or 'S.

  • New: Added new BuildPatchErrorUtils to add patching error utilities.

  • New: Added support for passing "abscrashreportclientlog" and "nullrhi"・command line arguments to crash reporter monitor.

  • New: Added a TPimplPtr type which can be used as a substitute for TUniquePtr of an incomplete type; without forcing the outer class to define all of its special member functions in the .cpp file where the type is fully defined.

  • New: Added a TInvokeResult trait for getting the return type of a callable with given argument types.

  • New: Added templatized InitializeDependency to subsystems. Also modified InitializeDependency to return the subsystem.

  • New: Extended TValueOrError with TryGet functions, perfect forwarding of arguments, and more efficient storage.

  • New: Fixed PLATFORM_CAN_ASYNC_PRELOAD_FILES code path in FPreLoadFile to correctly handle files that are not available when the read request is executed.

  • New: Created a new trace event " Diagnostic.Session2". This event includes improved formatting that utilizes string type fields and handles the new event in the DiagnosticsSessionAnalyzer.

  • New: Enabled the unhandled exception filter on Windows for all applications. This is to capture crashes in non-engine threads, additionally, this captures some crashes from Windows callback that are not going through the main thread except blocks.

  • New: Added CreateStandardFileName, implemented by MakeStandardFilename, and optimized both to be approximately 30% faster than the original MakeStandardFileName.

  • New: Added Ensure when getting the correct case for the project path during engine startup on the Windows platform. This no longer resolves directory junctions at the same time as it can cause problems for p4 operations. This is done using the slow 'FindFirstFile'・approach on EVERY SEGMENT of the project file path.

  • New: Enabled CONTAINER_INITIAL_ALLOC_ZERO_SLACK, this provides cross-platform memory saving functionality which saves up to 96MB on consoles.

  • New: Added Ensure that the project directory is updated after the first time that the project file path is set.

  • New: Added support for passing strings in execcmds, enclosed in single quotes.

  • New: Added Silence warnings regarding the possible loss of precision converting from integer to floating-point types.

  • New: Removed unnecessary conversion to float in FTimecode::FromFrameNumber to minimize loss of precision in FThreadHeartBeatClock::Seconds for long-running titles

  • New: FGenericPlatformMath::FRand now truncates Rand to 24 bits or RAND_MAX, whichever is smaller. This prevents values closer to 1.0 being higher probability due to loss of precision.

  • New: Added TArrayView64 by adding a SizeType parameter to TArrayView.

  • New: Added Ensure to no longer resolve directory junctions when also getting the correct case for the project path during engine startup on Windows.

  • New: Fixed an infinite recursion error when calling Add in TDiscardableKeyValueCache.

  • New: Added csvExecCmds command line option to run exec commands on particular CSV frames. E.g: -csvexeccmds="500:listtextures,1000:listtextures". This can be useful when doing deterministic benchmarking.

  • New: Added the command line option '-d3d12instrumented'・to control the use of the instrumented d3d driver.

  • New: Added a new CSV tool for binary support. Use the conversion tool 'CsvConvert'・to convert CSVs to a packed binary representation (csv.bin), which is smaller and faster to parse. All CSV tools will seamlessly read .csv.bin files.

  • New: Added a version of FPaths::ChangeExtension to FPathViews that uses FStringView as the input type rather than FString.

  • New: Removed identical duplicate types from PS4UE4.natvis that existed and matched in UE4.natvis.

  • New: Added a fallback so that '-mempro'・and '-memprollmtag'・will work if the command line wasn't initialized when FMemProProfiler::Init when it was first called,

  • New: Fixed a bug where fatal UE_LOG messages could potentially return and continue execution if several threads were issuing fatal log messages at the same time.

  • New: Added Ensure to no longer resolve directory junctions when also getting the correct case for the project path during engine startup on Windows. This is done using the slow 'FindFirstFile'・approach on EVERY SEGMENT of the project file path.

  • New: Added two new arguments to PerformanceReportTool for bulk query support '-spreadsheetfriendly'・which outputs a single quote before non-numeric entries in summary tables and '-noSummaryMinMax'・ which makes disables min/max columns for each stat in a condensed summary.

    • Fixed a bug with duplicate header entries in email summary tables.

    • Added a support for reading .csv.cache files. These contain metadata and stat names, so they are faster to read than the full CSV when filtering with '-metadatafilter'・

    • Allowed specifying a condensed summary table type, with '-condensedSummaryTable '・

    • Made the tool robust to accommodate zero-length CSVs.

  • New: FString now supports construction from an FStringView with an additional memory slack in its internal buffer.

  • New: Mempro tag tracking improvements:

  • Added support for tracking multiple LLM tags, for example, mempro.llmtag "chaos,chaostrimesh"

  • New: Added support for enabling mempro and specifying tags without the need for execcmds. This can be done with -mempro and -memprotags= respectively.

  • New: Added a cooker parameter (-DevelopmentAssetRegistryPlatformOverride) 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. Guard a loop that accesses asset registry data for cases where that data doesn't exist.

  • New: Added FScopedMemory, which will scope out the difference in Physical and Virtual memory in addition to capturing other threads allocating.

  • New: Added GetTypeHash() support to TWeakObjectPtr properties.

  • New: Refactored stage time only encryption config to be "explicit" groups that can take normal assets and external non-UAsset based files for encryption.

  • New: Removed comments from *.ini files when staging.

  • New: Reduced the constant memory cost of keeping FProperty related references from 32 to 8 bytes per UStruct.

  • New: Added additional asserts when failing to remove UObjects from hash tables due to a rare crash in Garbage Collector.

  • New: Creating new UObjects while Collecting Garbage will now result in an assert.

  • New: Added a missing constructor definition of FAutoConsoleVariableRef when NO_CVARS is defined.

  • New: Fixed a spelling error located in assertion.

  • New: Added the name of the slowest unit test in warning for >2s smoke test run time.

  • New: Only inject encryption key asset metadata into the cooked asset registry for platforms that actually require it.

  • New: Various engine init optimizations and new string conversion paths:

    • Added some core string conversion paths, added FString::Append and += overloads to avoid pointless temporaries when appending c strings and various other string types.

    • Added UTF32 <-> TCHAR string conversion macros.

    • Optimized QuotedString parsing, and property parsing.

    • Added PackageName optimizations and SoftObjectPath optimizations.

  • New: Added logic to change how background generation of distance fields works in the editor, Instead of creating a new thread pool for the distance field tasks the editor will now use GLargeThreadPool when available. This reduces thread spam in profilers and reduces overhead on machines with a large number of available logical processors.

  • New: Removed unnecessary target dependencies for ShaderCompileWorker on Linux.

  • New: Folded FSynchronizedArchiveState into FArchiveState to reduce complexity and restore private FArchiveState inheritance.

  • New: Disabled STATS in UHT.

  • New: Core will now be aware of multiple CPU groups to make better use of high-core systems. Reimplemented FWindowsPlatformMisc::NumberOfCores and FWindowsPlatformMisc::NumberOfCoresIncludingHyperthreads in terms of GetLogicalProcessorInformationEx.

  • New: Added in-game console key for Swedish keyboard layout.

  • New: Avoided pointless FString temporaries when appending c strings.

  • Added Append and += overloads compatible with C strings, char arrays, string views, and string builder as well as FString.

  • New: Added some core string conversion paths.

  • New: Added FPlane::IsValid, FPlane::GetOrigin, and FPlane::GetNormal.

  • New: Added FVector::XAxis, YAxis, and ZAxis constants.

  • New: Added .uptnl to the list of extensions that must exist in pak files, and won't trigger a lower level platform file call.

  • New: Refactored sandbox file system creation so it gets funneled via a factory function, to support multiple implementations.

  • New: Optimized Garbage Collection, Core Redirect, and SavePackage related code in UHT since they contribute greatly to the overall build time.

  • New: BMP writing is now supported in shipping config.

  • New: Converted UEdGraph::Serialize over to a structured archive format.

  • New: Parsed int64 value with basic math expression without losing precision. Added the option to only parse FText to number parsing only if the parsed number is inside the limit of the desired type and the option to clamp that value to the limit of the desired type.

  • New: PluginManager now takes into account the default editor target config param when trying to decide which editor target to use.

  • New: Moved the hardcoded list of ini suffixes in the staging system out into lists in the deployment context so that projects can choose to override them.

  • New: Added a PreModifyDeploymentContext callback to the project params struct which will be invoked after the deployment context is created, but before any files are processed by the staging system.

  • New: Fixed staging chunk assignment from failing when there are case mismatches between paths in the staging manifest and the pak chunk lists.

  • New: Added ELogVerbosity to FDebug::DumpStackTraceToLog.

  • New: Added Windows SetProcPriority implementation.

  • New: Added FArchive error propagation to all proxies.

  • New: Changed how FFieldPaths are internally stored and serialized. Now instead of storing the full path from the outermost UPackage to the innermost FProperty, FFieldPaths will store the owner's UStruct reference and a short path to its property or inner property of its property. The same applies to serialization: both the owner UStruct reference and only the short path will be serialized. Serializing the owner reference will enable proper handling of any owner struct package renames as well as greatly increase the initial field resolution performance.

  • New: Added CanUseUnversionedPropertySerializationForServerOnly setting to disable UPS for dedicated servers.

  • New: Fixed a path comparison in LaunchEngineLoop.

  • New: Added a bAllowShrinking parameter to TArray::RemoveSwap().

  • New: Published UE_NODISCARD and UE_NORETURN.

  • Improvement: Improved TSet and TMap .natvis to skip invalid entries.

  • Improvement: Optimized TArray::RemoveSwap() and TArray::RemoveAllSwap() to shrink once at the end of the operation, rather than each time it removes an element.

  • Improvement: Improved delegate system comments and added pointer from DelegateCombinations.h to the proper Delegate.h header that should be included instead.

  • Improvement: Improved ResavePackage commandlet reporting.

  • Improvement: Optimized TSet::Empty to avoid a pathological case where the hash size would be large, without many elements populated in the hash set.

  • Improvement: Implemented FString equality optimizations that checks length before touching data and incurring cache misses.

  • Improvement: Optimized code in XmlFileParser.

  • Improvement: Optimized QuotedString parsing and added UTF32 <-> TCHAR string conversion macros.

  • Improvement: Added Property parsing optimizations.

  • Improvement: Optimized PackageName.

  • Improvement: Optimized SoftObjectPath.

  • Improvement: Fixed and Optimized TBitArray. Initialized unused TBitArray bits, switch to faster unsigned operator%, and don't shrink past initial allocation size operator<, == and GetTypedHash would access unused bits in the last word.

  • Improvement: Removed redundant ToLower calls which caused slowdowns when launching console while using -stompmalloc.

  • Improvement: Refactored FindField into FindUField and FindFProperty to avoid confusion caused by the fact that FindField will no longer return FProperties.

  • Improvement: Optimized TRobinHoodHashMap by changing a costly check to a checkSlow.

  • Improvement: Significantly improved MarkObjectsAsUnreachable phase of Garbage Collection performance in scenarios where there are many root objects.

  • Improvement: TBitArray fixes and optimizations. Initialize unused TBitArray bits, switch to use a faster unsigned operator% and don't shrink past initial allocation size operator<, == and GetTypedHash will access unused bits in the last word.

  • Deprecated: Deprecated TracingProfiler.

  • Deprecated: Deprecated GRenderThreadId and GRenderingThread global vars as preparation for removing the rendering thread.

  • Deprecated: Macros deprecated: FUNCTION_CHECK_RETURN_START FUNCTION_CHECK_RETURN_END FUNCTION_NO_RETURN_START FUNCTION_NO_RETURN_END.

  • Deprecated: Deprecated GRHIThreadId and GRHIThread_InternalUseOnly as preparation for removing the RHI thread.

  • Deprecated: Added a comment to use std::atomic instead of 'TAtomic'・

  • Deprecated: Removed FSubobjectPtr and TSubobjectPtrDeprecated.

    • Removed deprecated FObjectInitializer functions 'CreateAbstractDefaultSubobject'・and 'CreateDefaultSubobject'・with a bAbstract parameter.

    • Removed deprecated FCoreUObjectDelegates StringAssetReferenceLoaded, StringAssetReferenceSaving, and RedirectorFollowed. Removed deprecated private_subobject define.

    • Removed unused EPropertyFlags::CPF_SubobjectReference.

  • Deprecated: EPowerSavingEligibilityFGraphEvent::SetGatherThreadForDontCompleteUntilFCompletonList.

  • Deprecated: Deprecated GAudioThread and GAudioThreadId in preparation for removing named threads. This allows to remove them completely in the next version and to modify IsAudioThreadRunning and IsInAudioThread functions to work correctly even without the audio thread.

  • Deprecated: Deprecated the PROJECTION and PROJECTION_MEMBER macros, replacing them with UE_PROJECTION and UE_PROJECTION_MEMBER.

  • Deprecated: Deprecated AddAtLowestFreeIndex in favor of EmplaceAtLowestFreeIndex.

  • Deprecated: Added deprecated support for Cast and CastChecked functions for FProperties to minimize compilation errors when upgrading to the new engine version

  • Deprecated: The existing StaticConstructObject_Internal has been deprecated in favor of a version that takes a parameter struct.

  • Removed: Removed legacy file profiling wrappers.

  • Removed : Removed AddFrameRenderPrerequisite and AdvanceFrameRenderPrerequisite.

Cooker

  • Crash Fix: Fixed a crash that was occurring when cooking a scene containing a runtime-generated static mesh.

  • Bug Fix: Fixed cooking without a project.

  • Bug Fix: Corrected the name of 'GetContentDirecctoryForDLC'・and implemented it in terms of "GetBaseDirectoryForDLC" so that it doesn't throw an assert when building DLC without plugins.

  • Bug Fix: Fixed MapsToCook to match its documented behavior. Maps in MapsToCook will no longer be added to cook when there are maps specified on the command line using -Map or -MapIniSection.

  • Bug Fix: Fixed a bug where a substring could be replaced multiple times when path remapping is done when using COTF server.

  • Bug Fix: Fixed a bug to ensure the DDC graph used when launching a command-line cook from the editor is the same one used in the editor. While UAT will accept this argument as part of the 'Run'・command, the editor/launcher does not supply this argument in those scenarios for now.

  • Bug Fix: Fixed duplicated property comment in cooker settings.

  • Bug Fix: Fixed bug where recursive directory traversal would not reach plugin or platform extension directories when using the cook on the fly server.

  • Optimization: Optimized FindTargetPlatform during cooking.

  • Optimization: Optimized Skip VerifyEDLCookInfo when cooking DLC.

  • Bug Fix: Added a warning to resave static meshes that invalidate physics when loaded. Meshes that generate the new warning need to be resaved to suppress the warning and ensure deterministic cooking. The warning text is, "Mesh {MeshName} is recomputing physics on load. It must be resaved before it will cook deterministically. Please resave {MeshPath}."

  • Bug Fix: Removed duplicated warnings when cooking.

  • Bug Fix: Fixed a bug where platform-specific raytracing data is incorrectly stripped during a cook.

  • Bug Fix: Fixed a non-deterministic cook issue with hierarchical precompiled Level Sequence data.

  • New: Cooker LoadQueue CookOnTheFlyServer now has an additional state for UE::Cook::FPackageData - EPackageState::Load. When in the Load state, FPackageData are contained in the new FPackageDataQueue LoadQueue. When processing requests, the load dependencies of FPackageData are read from the asset registry, and dependencies are inserted into the LoadQueue ahead of the requested package.

  • New: Added a diagnostic during cooking that shows the number of open file handles.

  • Added hooks for PlatformFileTrace on Mac.

  • Added tracking of open file handles in FPlatformFileTrace.

  • New: Cooker LoadQueue Preloading. Divide LoadQueue into LoadPrepareQueue and LoadReadyQueue; Packages in the LoadPrepareQueue are waiting for FPreloadableFile archives to be asynchronously opened for their Package; these archives are passed into the linker for use when loading the package.

  • New: UCookOnTheFlyServer - Refactor PackagesPendingSave into a SaveQueue.

  • New: Replaced Regex of COOKTIMER macros to all have UE_ prefix.

  • New: Changed LoadTimer & CookTimer to use a metadata field to record the package name instead of creating new scopes for the package name.

  • New: Marked save/load custom trace events as NoSync.

  • New: Included StaticSwitch and StaticMaskComponent to the cached data set and leveraged it from the UpdateParameterSet.

  • New: Added Cook insights instrumentation.

  • New: Changed DLC Mount point to be '/ /'・rather than '/Game/'・when cooking DLC.

  • New: Added a new method to the AssetManager ModifyDLCCook, which preserves the current behavior of scanning the path for all assets, however, this can be overridden for custom game DLC cooking logic.

  • New: Fixed cooking non-determinism issue related to ChildActorComponent.

  • New: Added command-line options for DisableUnsolicitedPackages and NoDefaultMaps to the Cook Commandlet.

  • New: New setting ProjectSettings -> Project -> Packaging -> Test directories to not search. This setting is similar to DirectoriesToNeverCook, except that it applies to all commandlets that enumerate assets, including the DerivedDataCacheCommandlet which populates DDC from all files on disk. This is useful for test assets or incomplete assets that are known to give errors on load.

  • New: Added an option to not populate the entire asset registry when cooking for DLC

  • Improvement: Avoided having native packages look up on disk by considering them "fully loaded" without checking if a file already exists on disk for them.

  • Improvement: Improvements to PostLoad and Serialize profiling instrumentation in the LoadTimes channel for use during a cook.

  • Improvement: Avoided scanning and sending superfluous files under the Plugins directory server during initialization.

  • Avoided requesting the same package as a .uasset and as a .umap by allowing the server to return a different file than the one that was requested.

  • Improvement: Optimizations and bug fixes to improve Cook On The Fly server iteration times.

    • Avoided performing both FileExists and GetTimeStamp operations on the same file in IPlatformFileSandboxWrapper.

    • Added Ensure for *.uasset files that are not excluded from the cached files list sent by network filesystem connection.

    • Avoided having the network file system server do two passes recursively iterating over directories to get file timestamps.

    • Fixed the network file system to handle looking for packages with FindPackageFileWithoutExtension as a .uasset file first, and then as a .umap file. If the target file already exists in the local cache as a *.umap file, then the filesystem will not ask the COTF server to cook the map again.

  • Improvement: Avoided calling UpdateStaticDrawListsForMaterials in the FMaterialUpdateContext destructor at cook time if there's no renderer that needs to be updated.

  • Improvement: Optimized cook time in large project cooks due to repeated calls to UMaterial::UpdateCachedExpressionData.

  • Improvement: Optimized large cached project cooks, by using material cached data when remapping override values to the parameters they're overriding.

  • Improvement: Avoided calling SerializeInlineShaderMaps during a save if the archive save pass is non-persistent, is an object reference collector pass, or should skip bulk data.

  • Improvement: Avoided excessive realloc and memcpy overhead when regenerating procedural foliage.

  • Deprecated: Deprecated the -DiffCookedPackage command-line argument with a warning in the log when used.

  • Deprecated: Deprecated the -dumpsavestate and -dumpsavestatebyarchetype command line support with a warning in the log when used. Please note that the aforementioned commands will be removed in a future version.

Memory Profiler

  • Bug Fix: LowLevelMemTracker fixes.

  • Bug Fix: Fixed memory leak in FLLMArray Add, a critical section to prevent simultaneous calls to UpdateStatsPerFrame from multiple threads.

  • Bug Fix: Fixed console variable usage to work on threads other than the game thread.

  • Bug Fix: Fixed use of physical memory rather than virtual memory on Windows.

  • Bug Fix: Disabled ShouldReduceThreads; it is currently used by FGenericPlatformMisc::UseRenderThread, which is defunct and crashes if it returns false.

  • Bug Fix: Fixed calculation of total memory in TrackFree which was using (int64)(-(uint32)), and getting additions of large uint32 instead of subtraction of small uint32. Fix missing critical section, header, and parent tag handling in LLM_ALLOW_ASSETS_TAGS.

  • Bug Fix: Changed Bump LLMMap in LowLevelMemoryUtils to handle a 64-bit number of allocations. When running on a large project, Cook Margin Capacity was causing the cook time to become arbitrarily slow.

  • New: Added FullClassName option to "obj list" command. If present, this will output the full pathname of each class rather than the short name.

  • New: Added FMallocFrameProfiler class to get callstack of allocation/deallocation of the same pointers in the same frame.

Network Profiler

  • Crash Fix: Network Profiler will no longer cause a crash when it's enabled before a map is loaded.

  • Bug Fix: Resized cut-off UI elements of Network Profiler.

  • Bug Fix: Fixed the "check all connections" checkbox in the networking profiler which had stopped working.

  • Bug Fix: Fixed an issue in the networking profiler where profiles with fewer than 30 frames of data could not be loaded.

UnrealPak

  • Crash Fix: Fixed a crash after removing a property from a struct while being used in a Blueprint that's also open in the Editor.

  • Bug Fix: Fixed some bad logic for calculating when padding is needed in Pak files.

  • Bug Fix: Fixed UnrealPak patch generation crash when the crypto.json file for the source data isn't explicitly specified. Core

  • Bug Fix: Fixed Crash Report Client dealing with crashes that occur very early in the process lifetime.

  • Bug Fix: Fixed async purge phase to finish with the same multithreading settings before switching multithreading off for the exit purge to prevent an assert.

  • Bug Fix: Added missing UDelegateProperty deprecation macros.

  • Bug Fix: Fixed classes that have potential thread-safety issues with their destructors when they are not destroyed asynchronously by Garbage Collection.

  • Bug Fix: Fixed disregard for the Garbage Collector pool, it no longer needs to be enabled for Garbage Collector clustering to be enabled.

  • Bug Fix: Fixed modifications to the command line using environment variables to be correctly used in PreInitPreStartupScreen.

  • Bug Fix: Enabled SEH on Clang on Windows.

  • Bug Fix: Removed the requirement for AddStructReferencedObjects to be const. AddStructReferencedObjects should not be const because GaC will attempt to null references to pending kill objects when calling this function.

  • Bug Fix: Fixed Project-specific tags from being collected When LLM tags were summarized per frame.

  • Bug Fix: Disabled permanent object pool when disregard for Garbage Collector pool is disabled due to permanent object pool objects becoming marked as unreachable and potentially becoming destroyed.

  • Bug Fix: Fixed Crash Report Client from needing full access to the process on Windows.

  • Bug Fix: Soft Object Pointers will no longer return pending kill objects in PIE.

  • Bug Fix: Fixed issue with plugin stack traces not resolving correctly in logs. This manifested as "UnknownFunction" entries in the logged stack trace.

  • Bug Fix: Fixed issue where CrashReportClientEditor would crash while exiting due to the "request exit flag" not being set.

  • Bug Fix: When defining AddStructReferencedObjects for Garbage Collector exposed structs, GC will now continue to process other UPROPERTY exposed UObject references instead of only calling AddStructReferencedObjects on that struct.

  • Bug Fix: Imported FFieldPathProperty from the text.

  • Bug Fix: Toggling TraceLog CPU channel could result in incorrect timing data. Due to mismatching begin/end events and batches that weren't flushed incorrect scopes would frequently be displayed in UnrealInsights when toggling the CPU channel on and off.

  • Bug Fix: Added Ensure for getting the correct case of project path during engine startup on the Windows platform.

  • Bug Fix: Fixed buffer overrun and static buffer reuse in crash context.

  • Bug Fix: No longer load pak verification data if pak verification is turned off, this leads to a slight reduction in memory footprint.

  • Bug Fix: Fixed a small bug in which pak verification data was being loaded, when pak verification was turned off. This is always in memory so represents a small memory gain.

  • Bug Fix: Fixed some bad logic for calculating when padding is needed in Pak files.

  • New: Moved environment command-line parsing earlier. This allows setting up for example log output using environment variables in automated scenarios.

  • New: Added Ensure fix for getting the correct case of the project path during engine startup on Windows platforms. The case will no longer resolve directory junctions at the same time as doing so can cause problems for p4 operations.

  • New: Added Ensure to the project directory so that is updated after the first time the project file path is set.

  • New: Added Support for "-ddc=default" syntax. It functions the same as omitting the '・ddc'・argument, but useful for CI environments.

  • New: Refactored TFastReferenceCollector template arguments to use enum options instead of multiple bool flags.

  • New: TFastReferenceCollector now supports traversing weak pointer properties when collecting references to UObjects.

  • New: Added a callback to allow custom property types (from plugins etc) to be converted from UProperties to their respective FProperty types.

  • New: Added support for additional properties to TraceLog channels.

  • New: Cooker File IO improvements:

    • No longer check the End-of-File tag unless working in a Windows uncooked build with DO_GUARD_SLOW enabled.

    • Avoid emptying the file content buffer in FArchiveFileReaderGeneric when performing a seek but staying within our current buffer window.

    • Avoid emptying the file content buffer in FArchiveFileReaderGeneric when performing a seek outside the buffer window then a seek back into our buffer window without any read in between.

  • New: Added more debug info to ensure triggered by invalid object path when setting Soft Object Path.

  • New: Introduced additional UE_LOG statements in SavePackage.cpp.

  • New: Refactored ContainsObjectReference and ContainsWeakObjectReference so that the latter is implemented in terms of the former.

  • New: TraceLog channels now use refcounting to track enabled state. In order to easier manage enabled channels and initialization, Trace::FChannel now uses reference counting. Negative values mean the channel is disabled.

  • Improvement: Optimized Pak file indices by computing the PathHashIndex in Unrealpak rather than using strings at runtime. This removes the need to shrink the string indices for performance, which was triggering a bug due to unsynchronized multithreaded access.

  • Improvement: Garbage Collector will now use the token stream instead of serialization for TMap and TSet properties.

  • Improvement: Flipped the logic for UObject::IsDestructionThreadSafe. It will now be whitelisting classes instead of blacklisting resulting in memory and performance optimizations for async destruction of UObjects.

  • Improvement: Optimized internal Garbage Collector functions by removing inline in order to optimize compile times.

  • Deprecated: Deprecated CreatePackage(Outer, Name) and replaced it with CreatePackage(Name).

Datasmith

  • Crash Fix: Fixed a crash that occurred when importing variant data from some DeltaGen scenes.

  • Crash Fix: Fixed a crash when parsing UsdGeomPointInstancersin USD where the prototype is a reference to another primitive.

  • Crash Fix: Fixed a Datasmith Addin crash on export of Line and Curve entities with Revit.

  • Crash Fix: Fixed a crash that occurred when adding new USD layers via the USD Stage Editor window, and fixed meshes that were unnecessarily rebuilding when adding empty layers via the USD Stage Editor window.

  • Crash Fix: Fixed a crash from changing the framerate of the AUsdStageActor's imported LevelSequence after opening a USD stage.

  • Crash Fix: Fixed a crash that occurred when trying to import meshes from Cinema 4D scenes that have more than 7 UV channels.

  • Crash Fix: Crash caused by Set Convex Collision Dataprep node was fixed.

  • Bug Fix: Fixed USD PointInstancers that did not update their spawned HISM components when their prototypes were updated and the file was reloaded via the USD Stage Editor window.

  • Crash Fix: Fixed a crash that occurred when reloading a USD stage and a PointInstancers prototype path could not resolve.

  • Crash Fix: Fixed a crash when adding empty existing USD layers as references in the USD Stage Editor window.

  • Crash Fix: Fixed a crash caused by parsing USD SkelRoot meshes with interleaved triangles and quads.

  • Bug Fix: Fixed USD stage not animating when going into PIE in some scenarios.

  • Crash Fix: Fixed a crash when unchecking prim payloads on the USD Stage Editor window.

  • Crash Fix: Fixed a crash when importing a USD prim that doesn't have enough displayColors.

  • Crash Fix: Fixed a crash when importing a USD SkelRoot mesh that does not have joint weights.

  • Crash Fix: Datasmith no longer crashes when parsing VRED variant files with invalid transform data.

  • Crash Fix: Closing the USD stage or switching variants via the USD Stage Editor window no longer leads to a crash.

  • Crash Fix: Fixed crashes related to undoing a change of the metersPerUnit field on the USD Stage Editor window.

  • Crash Fix: Fixed a crash after clicking Execute button in a Dataprep asset instance.

  • Crash Fix: For OpenNurbs importer, a potential crash if the scale vector was non-uniform was fixed.

  • Bug Fix: Fixed the displacement scale for MDL files.

  • Bug Fix: Fixed an incorrect export time field in a Datasmith scene when imported from Revit.

  • Bug Fix: Fixed metersPerUnit display not resetting when closing the USD stage.

  • Bug Fix: Now shows original import options when reimporting USD assets.

  • Bug Fix: Fixed Variant Manager variants with unspecified dependencies being marked as invalid dependencies for others; fixed Variant Manager variant dependencies not being updated when the target variant has been removed.

  • Bug Fix: Fixed the blend shape and animation bugs that occurred when the same SkelRoot was referenced multiple times in the same USD stage.

  • Bug Fix: FBX Exporter now supports material instances.

  • Bug Fix: Fixed an issue where Cinema 4D objects would always use display color materials even when set to off.

  • Bug Fix: Components name collision is now better handled when importing through Datasmith.

  • Bug Fix: Corrected a wrong Normals orientation on wall entities exported from Revit Datasmith.

  • Bug Fix: Dataprep Merge and Proxy Mesh Operators no longer leave empty mesh actors in the hierarchy.

  • Bug Fix: Volumes from Boolean operations are now removed by the IFC importer.

  • Bug Fix: Datasmith now supports Opacity Mask Clip Value.

  • Bug Fix: SkeletalMesh now outputs logs with the mesh name when there is a compute tangent error.

  • Bug Fix: The Dataprep Disable/Enable function now populates the undo stack.

  • Bug Fix: The Reimport workflow for FBX from Import to Level now updates in place.

  • Bug Fix: For PLM XML, the ProductRevisions and ProductViews actors are no longer created if not present in the original file.

  • Bug Fix: Fixed the Selected Option property where Switch Actors were not capturable via the Variant Manager window.

  • Bug Fix: Fixed an issue where, in some cases, the Corona default light units conversion wasn't correct, making the lights too bright in Unreal.

  • Bug Fix: Incorrect location of spawned actors using Spawn Actors At Location no longer happens.

  • Bug Fix: Scene hierarchy from a Revit Datasmith export no longer has duplicates.

  • Bug Fix: Fixed a section length rounding error for LevelSequences imported from USD for optimized builds.

  • Bug Fix: Fixed animations that were not resetting properly when reloading the USD stage via the USD Stage Editor window.

  • Bug Fix: Dataprep no longer creates assets that cannot be moved to dataprep subfolders.

  • Bug Fix: Revit Structural Steel Connections are now exported with Datasmith.

  • Bug Fix: Incorrect names on subcomponents imported with Datasmith integrated from Dev-Enterprise no longer occur.

  • Bug Fix: Fixed the behavior of AUsdStageActor when going into and out of PlayInEditor sessions, and fixed the stage not closing when switching maps with the USDStage window closed.

  • Bug Fix: Fixed a behavior of AUsdStageActor when undoing and redoing in the editor, along with the USD Stage Editor window not updating when switching maps.

  • Bug Fix: Fixed the parent SwitchActor option switching, clearing the chosen choices of child SwitchActors; fixed child SwitchActors being able to set children as visible when they themselves are unselected.

  • Bug Fix: You can now hide USD mesh prims with the USD Stage Editor window in some circumstances; invisible meshes sometimes contributing to collapsed parent meshes when importing from USD has also been fixed.

  • Bug Fix: Fixed skeletal meshes disappearing when toggling the visibility of SkelRoot meshes in the USD Stage Editor window.

  • Bug Fix: The DataPrep Output to Folder now does a sanitize check on the name of the folder.

  • Bug Fix: Illegal characters in a texture name will now survive a Datasmith export when integrated from Dev-Enterprise.

  • Bug Fix: Fixed incorrect CineCamera transforms and parameters when importing from USD files.

  • Bug Fix: Entities in Revit exporter Datasmith scenes no longer have offsets on their meshes.

  • Bug Fix: Fixed incorrect camera transforms when opening or importing stages with Z as the up-axis.

  • Bug Fix: Fixed an issue where escaping out of renaming a prim with the USD Stage Editor window sometimes left an empty row on the prim hierarchy view; fixed updates to USD Stage Editor prim hierarchy view resetting item collapsed states; when creating prims with the USD Stage Editor window, no longer allows names that would lead to USD errors.

  • Bug Fix: It is now possible to drag and drop actors onto empty Variant Manager actor lists.

  • Bug Fix: Fixed some USD scenes from being opened purely as components of the AUsdStageActor.

  • Bug Fix: Fixed importers incorrectly traversing into USD PointInstancers when generating meshes.

  • Bug Fix: Fixed additional static mesh and components from being generated when collapsed USD prims update under some circumstances.

  • Bug Fix: Stabilized behavior of AUsdStageActor during some complex editor interactions such as undoing deletes, undoing stage changes, and map changes.

  • Bug Fix: Fixed exported CineCamera parameters when exporting levels to USD.

  • Bug Fix: Fixed an error when exporting level to USD due to incorrect CineCamera property names; improved name sanitizer when exporting USD levels.

  • Bug Fix: Fixed an issue where the PurposesToImport import option was not being saved to a config file between USD imports.

  • Bug Fix: Fixed an issue where imported USD assets were not being updated in some circumstances when reimported.

  • Bug Fix: Fixed a USD error message when trying to import AnimQuery objects of SkelRoots that do not have any SkelAnimations.

  • Bug Fix: Fixed an issue when importing a USD stage after opening it via the USD Stage Editor window.

  • Bug Fix: UE4 materials are no longer ignored when importing from an existing USD stage.

  • Bug Fix: USD PointInstancer prims no longer import with extra actors.

  • Bug Fix: Fixed mesh with partial material assignment not receiving DisplayColor materials on unassigned faces when importing USD scenes.

  • Bug Fix: Fixed USD SkelRoots not generating DisplayColor materials when imported.

  • Bug Fix: Added support for importing all USD interpolation types for displayColor and displayOpacity for SkelRoots.

  • Bug Fix: Fixed displayOpacity USD materials not being created when importing unless there's also a displayColor.

  • Bug Fix: Fixed Normals being unnecessarily discarded and recomputed in some scenarios when importing Cinema 4D scenes.

  • Bug Fix: Imported actor and component visibility now import correctly from VRED scenes.

  • Bug Fix: Improved support for parsing USD primvars as UV sets.

  • Bug Fix: Fixed the File > Reload option on USD Stage Editor window not re-reading the USD file in some scenarios.

  • Bug Fix: Fixed GeomBindTransform not being applied to imported blend shapes when importing USD SkelRoot scenes.

  • Bug Fix: Wrong Normals orientation on wall entities exported from Revit Datasmith Integrated from Dev-Enterprise no longer occurs.

  • Bug Fix: Renamed Scale to metersPerUnit on the USD Stage Editor window.

  • Bug Fix: Fixed mismatching frame rates on imported LevelSequence when the parent USD layer is not animated but the child layer is.

  • Bug Fix: Fixed USD message log messages that never cleared on sequential imports.

  • Bug Fix: Fixed displayColor interpolation support for varying mode in USD scenes.

  • Bug Fix: In the USD Stage Editor window, fixed hiding UsdGeomMesh prims that are part of SkelRoots but were having no effect.

  • Bug Fix: Fixed USD blend shapes desyncing with SkeletalMesh in some scenarios.

  • Bug Fix: Old assets no longer show up in content folders when importing USD scenes from the USD Stage Editor window.

  • Bug Fix: Fixed AUsdStageActor not loading USD stage on startup if loaded from a sub-level.

  • Bug Fix: Fixed the USD Stage Editor window not refreshing when the StageActor was destroyed.

  • Bug Fix: Fixed a behavior when opening, closing and reloading USD stages if the AUsdStageActor is in a sublevel.

  • Bug Fix: Fixed undoing an Action > Import in the USD Stage Editor window removing the dirty flag from imported assets.

  • Bug Fix: Fixed a warning when creating an import package with an invalid name when importing USD scenes.

  • Bug Fix: Fixed an issue where assets were not being generated if parsing a custom, user-defined schema when opening a USD stage, or during USD import.

  • Crash Fix: The following crashes were fixed:

    • The USD plugin no longer crashes when opening USD stages (both via USD Stage Editor as well as importing) with generated static meshes containing more than 255 material slots if the ray-tracing plugin is enabled.

    • It no longer crashes on every second reimport when reimporting USD scenes.

    • A crash that happened in some scenarios when importing the same skeletal mesh twice in a row from USD scenes no longer occurs.

    • USD materials destined for Renderman are ignored by our USD importer.

    • Fixed a crash that occurred when closing an open USD stage via the USD Stage Editor window with one of the generated static mesh components selected.

    • Fixed a rare crash when closing the USD Stage Editor window after deleting its AUsdStageActor.

  • Bug Fix: The following bugs were also addressed:

    • Fixed skeletal meshes not updating material assignments whenever the USD stage was reloaded via the USD Stage Editor window.

    • USD skeletal mesh reimports now only consider vertex positions when deciding whether the skeletal mesh was changed on disk.

    • Skeletons now import alongside their skeletal meshes when importing USD scenes in some scenarios.

    • Fixed USD importer and stage editor ignoring higher index UV sets if a lower index UV set wasn't available.

    • Now keeps intended UV set indices when importing or opening USD scenes, as opposed to always packing them sequentially.

    • Improved feedback related to UV set or primvar problems when importing or opening USD scenes.

    • Refresh metersPerUnit display on USD Stage Editor window whenever the stage is reloaded.

    • Fixed undoing USD Stage Editor stage openings, sometimes leading to duplicate components.

    • Fixed SkinnedMeshComponents generated when opening USD scenes not refreshing their render state when undoing or redoing changes.

    • Added basic editor multi-user support for USD Stage Editor (opening/closing stages, manipulation of the AUsdStageActor directly, and undo/redoing those operations).

    • Added support for sharing meshes and using material overrides when importing USD static and skeletal meshes via the USD Stage Editor window or direct import.

    • Fix bugs on USD Stage Editor related USD always converting layer file paths to lower case (especially visible if layers had absolute file paths).

    • Fixed some generated static and skeletal meshes losing their UV sets whenever the USD stage was reloaded via the USD Stage Editor window.

    • Fixed file extensions when browsing for USD files to open or save via the USD Stage Editor window on Mac.

    • Fixed a stack overflow when importing USD stages (or opening via the USD Stage Editor window) if a layer has itself as a sublayer.

    • Fixed the USD Stage Editor window to correctly remember the stage variant state between different openings of the same stage.

    • Fixed undoing a AUsdStageActor deletion with an opened USD stage that sometimes caused a component to pop out of its actor/component hierarchy.

    • On the USD Stage Editor window, visibility buttons for prims that can't be hidden via USD were removed.

    • Minor tweaks were made to the USD Stage Editor window so that column splitters can be used for the variant and variant sets panel.

    • Fixed rounding errors when parsing some types of animation curves imported from USD scenes.

  • Bug Fix: When importing an Alembic file as a Skeletal Mesh, normals will be computed for each of the generated morph targets.

  • Bug Fix: Fixed duplicate objects being spawned when importing Cinema4D scenes with instanced nodes; also fixed animations of instanced nodes not importing correctly from Cinema4D scenes.

  • Bug Fix: Fixed an issue where material instance parameters that were overridden in Unreal were not preserved during a reimport.

  • Bug Fix: Fixed mesh reimport not using tessellation parameters specified at import time.

  • Bug Fix: Improved support for lights with no attenuation when importing Cinema4D scenes.

  • Bug Fix: Fixed multiple LevelSequence bindings when importing Cinema4D scenes with instanced nodes.

  • Bug Fix: Fixed SwitchActor label incrementing twice when dragging and dropping it onto the viewport.

  • Bug Fix: An issue with Materials was fixed where material parameters were not updated when parent master material changed by reimport.

  • Bug Fix: Fixed a reimport issue where new components would be created instead of updating the existing ones in the case where the label of a component had changed since the last import.

  • Bug Fix: Improved support for the standard 3ds Max blend material. Its conversion has been updated to use the newer Datasmith UE Pbr material system.

  • Bug Fix: In MDL, fixed excessive material compilation on import.

  • Bug Fix: Removed a redundant folder creation in MDL.

  • Bug Fix: Dataprep folder import no longer creates an unexpected folder hierarchy.

  • Bug Fix: Fixed incorrect shading on LiDAR Point Cloud assets when extracted from another asset.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent the FDatasmithSceneImpl::Reset() function from fully resetting the scene.

  • Bug Fix: DatasmithFacadeCSharp—In C#, FDatasmithFacadeActors now stay valid after they are added to a scene.

  • Bug Fix: The scene orientation of the OpenNurbs (.3dm) Datasmith importer has been modified to match the orientation of the .FBX scene importer and of the upcoming DatasmithRhinoExporter. Effectively, this translates into a 180ツー rotation around the Z-axis, between .3dm scenes imported with UE4.25 and those imported with UE4.26.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent the Flatness property for FDatasmithMaterialExpressionFlattenNormal to be properly set.

  • Bug Fix: The failure message when trying to import huge meshes(bigger than 2Gb) has been improved.

  • Bug Fix: Fixed a bug in the DatasmithSDK when exporting an IDatasmithTextureElement with a custom Label, where the label would not be exported to the generated .udatasmith file.

  • Bug Fix: MDL: Removed a misplaced error message.

  • Bug Fix: Fix a bug when reparenting an actor during reimport did not give the proper result.

  • Bug Fix: In Dataprep, an actor nesting for Folder import was fixed.

  • Bug Fix: Fixed color- and contrast-related issues when importing LAS files containing 12-bit components.

  • Bug Fix: Fixed a bug in the DatasmithSDK that would prevent exporting 2 textures with the same file name but different paths. A suffix is now added to the conflicting file name instead of ignoring that texture file.

  • New: PLM XML now retessellates imported geometry without having to reimport it.

  • New: Improved conversion of UVs and transforms for tiling/shift coordinates when importing Rhino files.

  • New: Pivot for files imported from Rhino now set to geometry bounding box center.

  • New: Implemented a new class: UDataprepFilterTransform.

  • New: Added support for normal maps when processing UsdPreviewSurface materials.

  • New: Added support for USD on Mac.

  • New: Added support for USD Lights. The following UsdLux schemas are now supported: UsdLuxDistantLight, UsdLuxDiskLight, UsdLuxRectLight and UsdLuxSphereLight.

  • New: Support now in place for exporting and importing variant data from .udatasmith files.

  • New: Implemented Flip Face operation in Dataprep.

  • New: Implemented a Spawn Actors at Location operation.

  • New: Created a selectable material substitution table.

  • New: Added support for UsdLuxDomeLight as UE SkyLight with a cubemap for USD.

  • New: Implemented the ability to skip a step within an action node in Dataprep.

  • New: Updated the USD SDK to 20.05 with Python 3 support.

  • New: In Dataprep, you can now copy a name from an asset/actor in a content/scene preview.

  • New: Dataprep now has a wizard for custom operation and filter creation.

  • New: Regroup Add New and search bar in operators/filters tab now available in Dataprep.

  • New: Automatically synchronize selection with filter preview.

  • New: You can now implement Reference Filter Transform in Dataprep.

  • New: The USD importer will now reuse identical generated DisplayColor materials when importing USD scenes; support for generating double-sided DisplayColor materials when importing USD scenes has also been enabled.

  • New: Setting thumbnails to the Variant Manager's variant sets is now allowed, along with setting Variant Manager thumbnails at runtime with Texture2D objects. An event was added that is fired whenever Variant Manager thumbnails are updated.

  • New: Exposed access to the Variant Manager's UPropertyValue's prop segments.

  • New: The UI for the Variant Manager was updated to better separate elements.

  • New: Multiple transform animations are now combined into the same LevelSequence when importing animated DeltaGen scenes.

  • New: Some materials are now always set on the base imported mesh when importing Cinema 4D scenes, even if there are multiple overrides.

  • New: Added support for exporting materials to USD as preview surface materials with baked textures.

  • New: The USD importer now imports baked UAnimSequence skeletal animations when importing USD stages with animated SkelRoots.

  • New: Updated the Dataprep operation Spawn Actors At Location to support more asset types.

  • New: Added support for exporting SkeletalMeshes to the USD formats.

  • New: Changed USD Exporter to emit Z-up stages by default.

  • New: Added widgets to control prim kinds and purposes on the USD Stage Editor window; set root prim to Assembly kind by default when creating stages via the USD Stage Editor.

  • New: Fixed multiple bugs that occurred when adding, removing, or renaming prims in the USD Stage Editor window. Now allows adding top-level prims with the USD Stage Editor window.

  • New: Allows setting dependencies between Variant Manager variants.

  • New: Added support for parsing USDZ archives as regular USD scenes.

  • New: Now writes back the visibility of scene components to the USD stage when opened via the AUsdStageActor; fixed prims that sometimes were not hiding when toggled in the USD Stage Editor window.

  • New: Support for:

    • Exporting vertex color and opacity to USD

    • Exporting all static mesh LODs to USD as "LOD" variant sets

    • Exporting to USD multiple material assignments per LOD

  • New: Added support for importing USD Skel blend shapes as Morph Targets.

  • New: Implemented a Set Layer operation.

  • New: Disabled actor importing when importing USD scenes from the Content Browser.

  • New: It is now possible to import Alembic velocities. This is useful when the topology is not constant during an animation since Unreal cannot compute motion vectors without matching vertex pairs between frames. If the velocities are available in the Alembic file, they can be imported, and motion vectors will be deduced from them.

  • New: Removed an icon that showed when moving a node onto itself and replaced the associated message.

  • New: Datasmith now exposes a multi-process CAD import to Python.

  • New: The MDL SDK has been upgraded to 2020.1.

  • New: With Datasmith, you now have the ability to author USD xform animations in Sequencer when using the USD stage.

  • New: Import of folders has been speeded up by making use of multi-core processing.

  • New: Datasmith now supports the thin translucency shading model.

  • New: Improved support for 3ds Max Corona materials when exported through Datasmith. The following materials and maps conversion have been improved: CoronaMtl and CoronaLayeredMtl, CoronaAO, CoronaColor, CoronaNormal and CoronaBitmap.

  • New: Support is now available for display and document color when importing Cinema4D scenes.

  • New: PLM XML now accepts .xml. It also includes minor wording fixes.

  • New: Datasmith importers should now only recompute invalid normals and tangents, and leave valid ones intact, as opposed to discarding them all and recomputing the entire set.

  • New: A Navisworks exporter has been added.

  • New: Individual LiDAR Point Cloud assets no longer have a 2-billion point limit, which allows virtually unlimited amounts of points per asset.

  • New: Added support for importing and exporting point clouds in LAZ format.

  • New: Significantly improved performance (up to 80%) when merging LiDAR Point Cloud assets.

  • New: Added LiDAR Clipping Volume Actor, allowing real-time clipping of LiDAR point clouds.

  • New: It is now possible to calculate the Normal vectors for points, either for the whole cloud or for only a selection. The current model is best suited for urban and human-made surfaces.

  • New: Added support for importing point clouds in E57 format.

  • New: Significantly improved performance (up to 65%) and RAM usage (up to -80%) when exporting Point Cloud assets as LAS.

  • New: Significantly improved performance (up to 50%) and RAM usage (up to -40%) when importing LAS files.

  • New: The DatasmithFacadeCSharp is now Mac-compatible. With it, it is now possible to export Datasmith scenes in C# on Mac.

  • New: Better handling of incorrectly formatted LAS/LAZ files

  • New: Rhino Exporter is now available.

  • New: Datasmith OpenNurbs (.3dm) import now supports importing the Rhino Attribute User Text as metadata.

  • Deprecated: Deprecated the old version of the USD Importer in favor of the new module, USD Stage Importer, that shares code paths with the newer USD Stage Editor window.

  • Deprecated: Removed deprecated async functions from actors and components.

  • New: DatasmithFacadeUEPbrMaterial was added to the DatasmithFacadeCSharp. With it, it is now possible to export material graphs using the DatasmithFacade.

  • API Change: We must now use the FDatasmithFacadeScene.AddMaterial() function instead of the FDatasmithFacadeScene.AddElement() when adding materials to the scene.

  • New: FDatasmithFacadeTexture was added to the DatasmithFacadeCSharp, allowing for better customization of the exported textures.

DevTools

  • Bug Fix: Fixed incorrect quotation in VSCode configuration files thus breaking IntelliSense.

  • Bug Fix: VSCode - Stopped iterating to parent directories when the root directory is reached, as there can not be any relevant compiler options specified further up than that. Avoids reaching the root of the drive.

  • Bug Fix: Fixed an error that occurred when the ParentDirectory property was used on non-windows paths and it would iterate to the root (index out of bounds exception).

  • Bug Fix: Fixed an issue with converting UnrealTargetPlatform to a string when parsing command-line options. Added a "TypeConverter for UnrealTargetPlatform Added" check to verify if a type converter exists when parsing command-line arguments.

  • Bug Fix: Separated CppStandards into different PCHs to not mix Cpp17 with Cpp14 in the same shared PCH.

  • Bug Fix: Fixed excluded files in VsCode for foreign projects. Hid the .vscode folder as it only contains configuration files for the project itself.

  • Bug Fix: Corrected settings.json generation for single projects (VSCode).

  • Bug Fix: Added a small variance to the time the UGS scheduled sync starts (+/- 10 minutes) to avoid everyone hitting the P4 server at exactly the same time.

  • Bug Fix: Fixed VsCode error failing to find the omnisharp extension.

  • Bug Fix: A display message will now only be issued when NvAPI / AGS isn't available due to RenderDoc being enabled. Reduced the normal path verbosity to Warning from Error.

  • Bug Fix: The UAT script SyncProject can now be used outside of Perforce when syncing a project without syncing the engine.

  • Bug Fix: The RenderDocPlugin should now only prompt to find RenderDoc when not running in Unattended mode.

  • Bug Fix: The editor Perforce plugin will now sync all revisions up to the specified changelist instead of just the specified change.

  • Bug Fix: Because the RenderDoc plugin loads well before DPCVars are loaded, it was not possible to disable RenderDoc during Ray Tracing tests. Support for disabling frame trace captures via cmd line was added as a workaround.

  • Bug Fix: Fixed infinite loops for DMX Blueprint events.

  • Bug Fix: For DMX, the default Protocol Name is no longer None.

  • New: VSCode Intellisense mapping has been reworked, it now creates a C++ configuration per project, with a name that makes it clearer to which target/platform/configuration the Intellisense is mapped.

    • Win64 development is still mapped for each target so run a build for it to make UHT generate the headers in the expected location.

    • The clang cpp file now specifies PCH / defines for each cpp file, which will correct occasional Intellisense errors for certain files.

  • New: Added a Perforce cstat command wrapper to the editor Perforce plugin.

  • New: Exposed AllowShaderWorkers to CVars as well.

  • New: Added the 'Res=1280x720wf'・command line argument to simplify setting window resolution.

  • New: The RenderDoc plugin no longer loads when automation is not allowed to take frame traces. Loading the RenderDoc plugin is disallowed when RayTracing tests are being run.

  • New: Optimizations for DDC access on remote/slow drives.

    • Added a new 'ConsiderSlowAt'・property to the 'Filesystem'・DDC entries in DefaultEngine.ini. If latency to the node is greater than or equal to this value then the node will be marked as slow which disables touching and reduces file stats.

    • Added a new 'PromptIfMissing'・property to the 'Filesystem'・DDC entries in DefaultEngine.ini. If a path is set but not accessible, the user will be prompted and able to retry if they had to start a VPN or mount a drive.

  • New: Implemented auto mapping of Function Names to Attributes in the DMX Attribute system when parsing a GDTF file.

  • New: Added a "-Info" option for UnrealPak to dump some header information about a pak file.

  • Improvement: Disabled attempting frame trace captures when the cmd line is specified.

  • Improvement: Tweaked job scheduling in ParallelExecutor to make ISPC jobs execute early; ISPC jobs tend to run long so starting them early prevents ISPC from causing the build to take longer than necessary.

  • Improved: Updated DXC to rev. 04a84f0.

AutomationTool

  • Bug Fix: AutomationTool: Force the usage of backslashes in the *.exe path that will be set as resource 201 for BootstrapPackagedGame. The usage of slashes resulted in a part of the path being truncated by PathRemoveFileSpec which was preventing the test of local DLLs from succeeding.

  • Bug Fix: The BuildPluginCommand now properly supports non-Test and non-Shipping Game targets. The previous code prevented the DeveloperTool modules from being compiled if there were no Runtime modules in the plugin.

  • Bug Fix: Removed the [STAThread] attribute from the AutomationTool entry point as this was causing issues with some platforms'・use of COM APIs.

  • New: Added CSVTools to installed builds.

  • New: Added a callback to the UAT project parameters so a script that uses buildcookrun can choose to modify the deployment context before staging.

  • New: Exposed a function from the staging code which allows remapping staged file paths based on the project remapping configuration.

  • New: Extended cooked target staging so that any programs or editor server targets are forced to Development configs, rather than what the master client/server targets request.

  • New:

    • Missing target receipts are now ignored when staging a DLC plugin. A content-only DLC plugin can now be staged using the previously-built executables from the staging of the original project.

    • Disabled chunking when staging a DLC plugin.

  • New: In UAT, added a staging option to disable the use of existing .pak files from the staging folder of other build targets, when forcing the reuse of another target's cooked data.

  • Improvement: Hardened UAT to not crash when the PATH variable contains a path with invalid characters.

UnrealBuildTool

  • Bug Fix: Fixed retry in Linux when linking batch files.

  • Bug Fix: Moved VS Code file exclusions to .ignore to fix large projects.

  • Bug Fix: Fixed a crash in ListThirdPartySoftware.Automation.cs.

  • Bug Fix: Fixed the UnrealBuildTool crashing on launch if the initialization of UnrealTargetPlatform static members variables happens out of order.

  • Bug Fix: Corrected the ConfigHierarchy parsing of negative integers. The value parsing code was not handling the "-" character so config items such as "Value=-1"・would fail to parse.

  • Bug Fix: Corrected some inconsistencies with how inlining compile options were applied to the VCToolChain:

    • The CompileEnvironment variable 'bUseInlining'・is now correctly applied in all configurations.

    • Enabling 'Edit and Continue'・will now disable inlining for all configurations.

  • Bug Fix: Fixed IsHostOnVpn always returning false (so XGE will now be turned off when working on a VPN).

  • New: Build targets are now allowed to use config file attributes.

  • New: Added code in UBT to detect circular dependencies in module references early in the build process. This will display an error message such as: Error : Circular dependency on PhysicsCore.Build.cs detected. Route is Target -> Launch.Build.cs -> Engine.Build.cs -> RenderCore.Build.cs -> RHI.Build.cs -> (Dynamic) -> VulkanRHI.Build.cs -> HeadMountedDisplay.Build.cs -> AugmentedReality.build.cs -> MRMesh.build.cs -> PhysicsCore.Build.cs -> ChaosEngineBridge.Build.cs -> ChaosSolvers.Build.cs -> PhysicsCore.Build.cs. Break this loop by moving dependencies into a separate module or using Private/PublicIncludePathModuleNames to reference declarations As part of this change, all current UE4 modules with circular references have been modified to declare them and those dependencies either whitelisted or fixed if the change was straightforward.

  • New: Added an option to UBT project generation to allow users to specify include paths to be omitted from project files. This speeds up parsing, reduces the memory footprint, and allows irrelevant symbols to be excluded from IntelliSense suggestions. Example usage in BuildConfiguration.xml: ThirdParty\WebRTC;ThirdParty\PhysX Example savings - Adding ThirdParty\PhysX = 47% vcproj reduction (28MB -> 15MB) Adding ThirdParty\ = 61% vcproj reduction (28MB -> 11MB)

  • New: Added Thread_UseAllCpuGroups to the UnrealBuildTool config to enable UBT to use both CPU groups on high-core systems such as 64-core ThreadRippers.

  • New: Performance improvements to SN-DBS integration in Unreal Build Tool:

    • Switched to the json interface and removed local task execution, allowing all task scheduling to be handled by SN-DBS.

    • A full engine rebuild demonstrated an improvement of ~40% vs the previous implementation on a network with 4 worker agents.

  • New: Added a minor fix for the bCreateHotPatchableImage property setter which ignored the requested value.

  • New: Exposed a function to clear plugin and directory caches. If new plugins are created by the owning UAT script, then they can be ignored because they weren't there when the directory/plugin availability information was cached.

  • New: When generating visual studio project files, projects with multiple editor targets will now use the default editor target config setting, if it exists, to determine which editor target should be added to the main project file. All others will generate separate projects inside the VS solution.

  • New: Clang 10 is now the default for Windows Clang configuration.

  • Improvement: Turned off parsing of platform data that fails for disabled plugins during project generation.

UnrealGameSync

  • New: Added a "View in Swarm…" command to the context menu for changelists.

UnrealHeaderTool

  • Bug Fix: UHT will now correctly parse an implemented interface class function declaration that includes one or more TSet/TMap parameters.

  • Bug Fix: Added a static assert to detect that inherited UStructs are not polymorphic unless basestruct is also polymorphic as this is currently not supported by the reflection system.

Editor

  • Crash Fix: Fixed a crash in the P4 Source Control plugin when parsing the history of an asset that was deleted, then added back.

  • Crash Fix: Fixed crash when issuing the Console command stat none.

  • Crash Fix: In multiplayer, you can reload your level in-game.

  • Crash Fix: Fixed a crash that occurred when resetting the layout.

  • Crash Fix: The Level Editor no longer crashes when adding a new level.

  • Crash Fix: Duplicates are filtered out when gathering Source Control states, preventing a crash when syncing Editor data.

  • Crash Fix: Fixed a crash on Undo and Redo actions when the Preview Material source instance is null.

  • Crash Fix: Cancelling a transaction now cancels the entire transaction instead of a part of it.

  • Crash Fix: The tutorial closes when the Editor window is closed.

  • Crash Fix: Updated ObjectTools where we de-referenced an Editor transaction without checking its validity. This caused a crash when using these functions from commandlets.

  • Crash Fix: Fixed an issue where canceling the PIE multiplayer client while loading would cause a crash.

  • Crash Fix: Fixed an issue with scripted toolbar buttons where implementing IsVisible or CheckState functions would cause a crash because no UFunction was allowed.

  • Crash Fix: Fixed a crash when calling CanSelectActor on an actor that is not in a Level.

  • Crash Fix: Fixed an issue where newly-created redirectors would be garbage-collected before being renamed, causing a crash.

  • Crash Fix: Fixed a crash when opening a recent level that had changed to a redirector.

  • Crash Fix: Fixed a crash when trying to restore a package at startup that no longer exists.

  • Crash Fix: Fixed a crash when following tutorials that opened the Modes tab.

  • Crash Fix: Fixed an Editor crash when toggling to full screen after a layout change.

  • Crash Fix: Fixed a crash where SPropertyEditorInteractiveActorPicker was trying to deactivate a mode that was not active.

  • Crash Fix: Fixed a crash when an Asset is deleted inside the Save As dialog.

  • Crash Fix: Fixed an issue where re-importing a SpeedTree that had its original materials removed from the Project caused a crash.

  • Crash Fix: Fixed a crash with the transactional temporary UI stub object.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Mesh with new bones that had animations using that skeleton.

  • Crash Fix: Fixed a crash when re-importing a Skeletal Mesh that failed to re-import.

  • Crash Fix: Fixed an Editor crash during multi-user editing when using the Retopologize Tool.

    • Fixed the file sharing service to gracefully handle the case where the file containing the list of active processes using the service failed to open or save.

    • The service will only delete the expired files after one hour, rather than removing the entire shared folder.

    • Fixed the recovery service being killed on Editor exit.

  • Crash Fix: Fixed crash when syncing out-of-date Assets in the Editor if a dependency package was not found.

  • Crash Fix: Fixed a crash when the frame rate was zero in the animation timeline.

  • Crash Fix: Fixed an issue where the Editor crashed if the package path being passed to Map Load was a redirector, such as the EditorStartupMap.

  • Crash Fix: Fixed an issue where removing a Level from the world would cause a crash if actors in that level were selected inside the Hierarchical Level of Detail (HLOD) Outliner.

  • Crash Fix: Fixed an issue where accessing certain static functions caused a crash due to the EditorStyle module not being loaded first.

  • Crash Fix: Fixed a crash on auto-save when a Hierarchical Level of Detail (HLOD) Actor was manually deleted from the HLOD Outliner.

  • Crash Fix: Fixed a crash when importing an FBX file containing degenerate tangents or invalid meshes.

  • Crash Fix: Fixed a potential crash when force-deleting textures or materials used by BSP geometry in the current Level.

  • Bug Fix: MessageBus: Fixed infinite message sending when sending a direct message to a combination of local and remote recipients.

  • Bug Fix: Fixed initialization for UInstanceStaticMeshComponent after an owning actor Blueprint compilation.

  • Bug Fix: Fixed the mesh paint adapter so it handles larger meshes.

  • Bug Fix: Undo/Redo actions now work after adding a Component to an Actor, when the Component name was scrolled out of the view while still being edited.

  • Bug Fix: - USplineComponent::ClearSplinePoints now updates its SplineMetadata - SplineComponent.

  • Bug Fix: Fixed the text location in HiDPI.

  • Bug Fix: Restored child Editor windows now display their name.

  • Bug Fix: The JSON data table import now respects the Ignore Extra Fields option.

  • Bug Fix: In the Content Browser, the Asset file path is no longer cleared in the Editor after cancelling and closing the browser.

  • Bug Fix: When using Force Delete, the selection change is now detected.

  • Bug Fix: Vertex data statistics now update in Mesh Paint mode.

  • Bug Fix: Painting is no longer permitted on textures with an unknown number of bytes per pixel.

  • Bug Fix: Updated CSV import factory to prevent setting the import path to an empty string when importing text directly

  • Bug Fix: The Play dropdown menu now reflects the correct value for the number of clients.

  • Bug Fix: Fixed several issues with Editor UI interaction when using single-process multiplayer mode, and fixed the client number in the window name to always match the log client number.

  • Bug Fix: Updated Class Viewer to allow unloaded Editor-only classes.

  • Bug Fix: Updated Level Editor floor snapping to properly ignore all Actors in a group selection.

  • Bug Fix: Fixed nodes that were placed in unexpected locations on Material, Blueprint, and Niagara graphs.

  • Bug Fix: Broadcast Camera Moved event when the user jumps to a Bookmark in Editor.

  • Bug Fix: The selected Actor and corresponding Details panel now transfers to the current PIE or SIE instance when starting the session.

  • Bug Fix: Fixed legacy world rename handling, avoiding potentially renaming map build data with the name of an existing build.

  • Bug Fix: In the Perforce plugin, you can now use the command, -P4Passwd cmd , when connecting to Perforce.

  • Bug Fix: Fixed FName and exponential behavior when fixing up Meshes with many duplicate material names.

  • Bug Fix: When using Replace Actor, the mobility of the original Actor is retained.

  • Bug Fix: The Details panel no longer attempts to select separator nodes, which resulted in an invalid selection.

  • Bug Fix: Fixed viewports getting stuck upside down after orbit because of pitch locking.

  • Bug Fix: The Message Log now uses a fixed size font, and duplicate tooltip text was removed.

  • Bug Fix: User configuration is now preserved across package copies. Copying a package no longer causes packs like StarterContent to re-import and overwrite changes.

  • Bug Fix: Disabled editing of data table rows in the composite data table editor since changes are not saved.

  • Bug Fix: The SVN connection log message has been rewritten.

  • Bug Fix: Properties that have subcategories specified for them and have the ShowOnlyInnerProperties metadata flag now display correctly.

  • Bug Fix: World subsystems now initialize after a map rebuild.

  • Bug Fix: When Class Viewer is refreshed, it now scrolls to the selected item.

  • Bug Fix: The Parameters menu size has been clamped to no longer appear larger than the screen, also preventing flickering.

  • Bug Fix: When resetting Transform from the Details panel, the Transform of the rendered instance updates correctly.

  • Bug Fix: When resetting Curve Atlas Row, the row value resets correctly and no longer locks the user out of editing the value.

  • Bug Fix: Fixed PropertyEditor argument names for clarity and consistency.

  • Bug Fix: In the Details panel, the spacing of Float Curve Asset widgets was fixed.

  • Bug Fix: If the index is greater than the default array size, you can now export the last item of an array containing default values.

  • Bug Fix: There is no longer a prompt to save content when the user has bUseSingleProcess turned off, regardless of whether or not their PIE session was occurring in a separate process.

  • Bug Fix: When invoking CodeLite, a path name that includes spaces is now recognized correctly.

  • Bug Fix: PIE session windows now open with the correct Multiplayer Viewport Size setting found in Editor Preferences.

  • Bug Fix: Fixed an issue with Source Control submitting Project files.

  • Bug Fix: Updated Asset Picker to simultaneously show the filtered menu and hide the Search field.

  • Bug Fix: StatsRender no longer overlaps when using a custom LegacyFontSize.

  • Bug Fix: The MeshSimplifier & ProxyLODPlugin plugins were updated. The ProxyLOD plugin no longer generates uninitialized vertices at the end of the vertex buffer.

  • Bug Fix: The Editor analytic now correctly accounts the computer hibernation time as idle time.

  • Bug Fix: Updated Socket Manager to correctly adjust for DPI scaling. It no longer moves to the corner of the screen.

  • Bug Fix: In a VR PIE session, only the first viewport is marked as stereo-capable.

  • Bug Fix: When joining a multi-user session with in-memory change, the notification message has been rewritten for clarity.

  • Bug Fix: Moving an Actor to a World Outliner folder now created the proper transaction.

  • Bug Fix: Allow parsing of complex and localized numbers when emitting change events from SNumericTextBox.

  • Bug Fix: Fixed Level Details that were not using all of the space in its panel.

  • Bug Fix: Class Viewer now retains its selection when losing focus.

  • Bug Fix: Edit conditions now work correctly with fixed-sized C arrays.

  • Bug Fix: Fixed Class Viewer selection of unloaded Blueprint classes.

  • Bug Fix: Added partial Perforce state support for Move and Delete actions and Move and Add actions.

  • Bug Fix: Fixed a grammar mistake in the FBX Scene Import dialog.

  • Bug Fix: Changed Python3 TCHAR to PyApiChar(wchar_t) for platforms where wchar_t is 4 bytes.

  • Bug Fix: Fixed an issue where double-clicking a water mesh would cause a run-time error if the engine was compiled from source.

  • Bug Fix: Editor actions that try to focus a particular tab, like Blueprint debugging, will always work, even if the window is minimized.

  • Bug Fix: Fixed an issue where the Show in Explorer menu was not working properly for plugins in the Content Browser folder tree.

  • Bug Fix: Fixed an issue where displaying multiple instances of the InstancedStaticMeshComponent caused a long UI refresh. Now, if there are more than 512 instances (controlled by CVar r.Editor.MaxNumInstancesDetails), a performance warning displays with a button to show or hide instances per user preference.

  • Bug Fix: Fixed a thread safety issue in Perforce integration.

  • Bug Fix: Fixed the map-built data not being saved when closing a Level due to a save prompt re-entrance guard.

  • Bug Fix: Fixed an issue where changing the preview rendering level to Android and creating or opening a new Level would cause a mismatch between the tool button status and the feature Level.

  • Bug Fix: Fixed an issue where clicking the Clear option for a Streaming Volume was not working correctly.

  • Bug Fix: Fixed an issue where CreateNewStreamingLevel would try to load a streaming level of abstract type, causing an error.

  • Bug Fix: Fixed source control errors during rename of a file open for an add operation.

  • Bug Fix: Fixed the unsafe cast of IAssetTypeActions to FAssetTypeActions_Base

  • Bug Fix: Fixed an issue where opening the Landscape Spline Tool would cause a run-time error if the engine was compiled from source.

  • Bug Fix: Fixed a memory leak in SDetailsView when it was refreshed while not visible.

  • Bug Fix: Fixed an issue where a redirector was being saved as a .uasset instead of a .umap if the file did not exist.

  • Bug Fix: Fixed an issue where users were able to create a new streaming layer with a streaming distance of 0 when distance streaming was enabled.

  • Bug Fix: Fixed a bug where resizing the Content Browser was not updating the hit detection correctly.

  • Bug Fix: Closing a menu now releases the memory taken by the menu widget.

  • Bug Fix: A 1.0 vertices/triangles reduction will now correctly reduce the mesh if the source model has more vertices/triangles than the MaxNumOfVertsPercentage/MaxNumOfTrianglesPercentage value.

  • Bug Fix: Fixed an issue where the ChildActorComponent was not properly previewing in the editor.

  • Bug Fix: Fixed an issue where a column customization passed to the PropertyTable widget was ignored.

  • Bug Fix: Fixed an issue where re-importing a Static Mesh with custom LODs would result in the LODs to have incorrect materials assigned to their sections.

  • Bug Fix: Fixed a crash when moving the mouse during LOD generation. Some UI delegates were not unbound properly.

  • Bug Fix: Fixed Editor Analytics sessions not correctly reporting bIsLowDriveSpace field.

  • Bug Fix: Fixed an issue where importing a Skeletal Mesh with custom LODs and no skinning was resulting in incorrect remapping of the bones.

  • Bug Fix: Fixed an issue to ensure that the Skeletal Mesh source data supports 16 bits of materials to be on par with the render data.

  • Bug Fix: Fixed an issue where screen messages were displaying when GAreScreenMessagesEnabled was set to False.

  • Bug Fix: Fixed an issue where the Mesh Bone Reduction would use a fixed InfluenceIndex, instead of the MAX_TOTAL_INFLUENCES.

  • Bug Fix: Fixed the Editor Analytics so it reports a project name by concatenating UGeneralProjectSettings::ProjectName and FApp::GetProjectName().

  • Bug Fix: Fixed an issue where re-importing a Skeletal Mesh would result in the values of Use High Precision Tangent Basis and Use Full Precision UVs to be reset in the Skeletal Mesh asset.

  • Bug Fix: Fixed an issue where the Editor would check for a pre-existing realtime override on viewports when doing a blanket removal.

  • Bug Fix: Fixed an issue where the Project Creation dialog would display a blank selection for the Starter Content option if the Feature Packs folder was unavailable.

  • Bug Fix: Changed the sharpening method for mask textures so that each color channel is processed separately.

  • Bug Fix: Fixed an issue where Instanced Static Meshes (ISM) were not initializing properly after a Blueprint re-instance.

  • Bug Fix: Fixed an issue where an old reduced Skeletal Mesh asset with a disabled section would not keep the disabled section state after a re-import.

  • Bug Fix: The Actor Picker Mode now gets disabled when the Editor loses focus. This prevents the Unreal Engine tooltip from rendering over the top of other applications.

  • Bug Fix: Fixed an issue in the Static Mesh Importer where it would use the FBX bounding box to test if the mesh was too small to be imported. Now, it correctly multiplies the mesh bounding box by the node global scale transform to test the real bounding box size.

  • Bug Fix: Fixed an issue to prevent a FBX node name clash when not keeping the namespace.

  • Bug Fix: Fixed an issue where using USkeletalMesh::ReleaseResources would use the FlushRenderingCommand in PIE tick.

  • Bug Fix: Fixed an issue where screen warnings were displayed even when bSuppressMapWarnings was set to False.

  • Bug Fix: Fixed an issue where an old package was not properly deleted when renaming a package.

  • Bug Fix: Fixed crash on map load when world legacy rename handling was renaming over other existing maps.

  • Bug Fix: Fixed level streaming volume properties so they can be cleared.

  • Bug Fix: Fixed an issue where the Skeletal Mesh was being rebuilt every time the LOD settings were changed in the Persona Editor.

  • Bug Fix: Fixed source control checkout errors when a package is saved. Errors will no longer appear if the file is already open, or being renamed.

  • Bug Fix: Fixed an issue where the Editor transaction buffer was being cleared when hiding levels.

  • Bug Fix: Fixed an issue with the transaction system in the Editor where intermediate transactions would record incorrect information due to using a different serialization algorithm.

  • Bug Fix: Fixed an issue where the message dialog would appear after a FBX import if no import error was found.

  • Bug Fix: Fixed an issue where the last item of an array would not export if it contained default values and the index was greater than the default array size.

  • Bug Fix: Fixed an issue where Actors with Editor-only Static Mesh components or components with no Static Meshes assigned were being included in the Hierarchical Level of Detail (HLOD) generation.

  • Bug Fix: Fixed issue causing some actors with multiple static mesh components to be excluded from the Hierarchical Level of Detail (HLOD) generation.

  • Bug Fix: Fixed an issue where selecting a spline point in one viewport and manipulating that point in another would result in the entire spline component being transformed, instead of the selected spline point.

  • Bug Fix: Added a fix to ensure that the Editor style module is loaded before calling its static functions from MeshPaintMode.

  • Bug Fix: Fixed an issue that caused invalid material baking in Hierarchical Level of Detail (HLOD) meshes when using the option 'Reuse Mesh Lightmap UVs'・on mirrored (negative scale) meshes.

  • Bug Fix: Fixed incorrect DPI scaling of the selection box inside the LiDAR Point Cloud asset editor.

  • Bug Fix: Fixed an issue that occurred when attempting to convert a procedural mesh component without materials to a static mesh. If no material is assigned, the new static mesh will now use the default material.

  • Bug Fix: Fixed an issue where newly created Hierarchical Level of Detail (HLOD) packages that were only present in memory, did not appear in the Save All dialog.

  • Bug Fix: Fixed an issue in the Hierarchical Level of Detail (HLOD) volumes caused by overlapping meshes with offsets from their origins.

  • Bug Fix: Removed unneeded UV sets generated for Hierarchical Level of Detail (HLOD) meshes.

  • Bug Fix: Fixed an issue where a code-less project would fail to compile after adding a feature pack.

  • Bug Fix: Fixed multiple UV remapping issues in merged meshes created by the Hierarchical Level of Detail (HLOD) system.

  • Bug Fix: Added the Hierarchical Level of Detail (HLOD) results to the Message Log user interface.

  • Bug Fix: When adding the first C++ class to a source-less project, the internal UBT target name is now correctly set to the default Editor target name for the project.

  • New: Removed cast to SceneComponent when drawing component visualizer HUDs in the Blueprint editor. Actor component visualizers can also draw to the HUD.

  • New: Added BLUTILITY_API to UEditorUtilityWidgetBlueprint.

  • New: Loaded and on-disk gather functions for external actors are now split.

  • New: When requesting a PIE session, an open PIE transaction is now cancelled and the user notified, instead of preventing the PIE session entirely.

  • New: Added list of real-time overrides for level viewports. Previous APIs were deprecated or renamed to better indicate that a list of overrides is keyed to a system name. A system name is now required to ensure the caller removes the override they actually want to remove. This solved the problem where various systems added or removed real-time overrides in interlocked ways, especially when starting or stopping a PIE session.

  • New: Broadcast OnActorMoved for all Move and Snap Editor actions.

  • New: Added Package class filters similar to transaction class filters in multiplayer mode. This allows the Editor to filter package save from an asset type and/or a folder path. When a package is filtered out, the package event is not sent out to the server and the file is locally persisted instantly.

  • New: On Windows, handled WM_ENDSESSION message to detect the user logging off the system, calling the core delegate OnUserLoginChangedEvent to notify the event.

  • New: Pasting properties in a Details panel now retains the existing item expansion state, when possible.

  • New: Added the Rendering Hardware Interface (RHI) to the Editor analytics summary session.

  • New: Made an improvement to avoid memcopies in MergeFlattenedMaterials.

  • New: Level Play Settings now include Logical Resolution and Content Scale for device profiles.

  • New: User-defined filters are now allowed in the Open Blueprint Class dropdown menu using View Options.

  • New: When duplicating levels for PIE, Actors are duplicated instead of loaded from disk.

  • New: Class Viewer filters match with cpp-prefixed Search text.

  • New: Added Editor Utility version of Tool Menus for Blueprints in the Editor.

  • New: When all items are filtered from the Details panel, a message displays indicating that there are active filters.

  • New: Improved Scale to Fit Zoom mode in Texture Editor.

  • New: Added the display of native component names in the Simple Construction Script tooltip.

  • New: Added Mesh CSG operations (union, intersect, subtract, and a self-union to resolve self-intersections) to the modeling tools.

  • New: Code templates can now be easily added to Plugins using the UClassTemplateEditorSubsystem. Class template .h/.cpp files can be added to the plugin's Content/Templates subdirectory. By implementing a child class of UPluginClassTemplate in a plugin's Editor module, developers can override the default code UClass generation of their given class provided by the Class Generation Wizard.

  • New: Added the ability to bundle commands in the Keyboard Shortcuts menu.

  • New: Added a context menu when there is no valid selection that allows you to select all Actors or place an Actor.

  • New: The DisplaceMeshTool was updated. Multiple layers of Perlin noise can be combined. For each layer, the user can specify the frequency and amplitude. A new option was added to apply the offset only to vertices with normals pointing in a given direction.

  • New: Category expansion state in the Details panel is now restored after clearing the Search bar.

  • New: FMouseDeltaTracker can be exported from a DLL.

  • New: Always Center Window to Screen checkbox is now disabled by default.

  • New: The last known size of the PIE window is saved.

  • New: Added procedural animation support to the Data Charts plugin. This allows growing and collapsing data charts based on user events.

  • New: Added the bAvoidRelabelOnPasteSelected option to avoid relabeling Actors when pasting them.

  • New: Made all linked instancing context pointers pass as constant.

  • New: PIE sessions that launch a new standalone window no longer double render debug safe zones and all PIE options are more consistent when handling r.DebugSafeZone.XXXX cvars.

  • New: The following fields were added to Editor analytics:

    • bIsUserLoggingOut detects when the Editor closes because the user logged out.

    • bIsCrcExeMissing detects if the user compiled CRC.

    • SessionTickCount detects if the Editor ticked.

    • UserInteractionCount detects if the user interacted with the Editor.

    • MonitorTimestamp gets the approximate time of crash of CrashReportClientEditor.

  • New: Loading an Editor layout keeps the displayed asset sub-editors open. If PIE or SIE is open, the Editor displays a warning to prevent loss of work, and if the user accepts, it will close PIE and load the desired layout.

  • New: Added a Blueprint Editor option for short tooltips.

  • New: In Editor Preferences, added Minimum Orthographic Zoom option to the Level Editor - Viewport settings.

  • New: Added Title Property meta support to arrays of Instanced UObjects.

  • New: Common pin action menu items in the Graph Editor were moved to the Base Graph Editor.

  • New: In the Graph Editor, the Tab key opens the context menu to create a node at the current mouse position.

  • New: Details panel dropdown menus for Enums and other items now display a Search field if there are more than 20 items. This threshold can be changed for a custom property dropdown menu using the new FPropertyComboBoxArgs structure.

  • New: Files created by the Editor for a new C++ class can be put into subfolders.

  • New: Mouse panning was added to the Texture Editor.

  • New: Added spline point fast selection buttons to the Spline component Details panel.

  • New: Added an optional background Brush setting for all Graph Editors.

  • New: Replace references now considered subclasses of DataTable to be compatible, including CompositeDataTable.

  • New: Added the option to make BoundsCopyComponent usable outside of RuntimeVirtualTextureVolume and made it Editor-only.

  • New: GeometryProcessing library updates:

    • Added copy Boolean improvements from Main.

    • Added a catch out-of-range search tolerance in MergeCoincidentMeshEdges.

    • Added TMeshSimplification::SimplifyToMinimalPlanar, which simplifies flat areas of the mesh only.

    • Enabled the GeometryProcessing plugin for Runtime use.

  • New: Made the spline point details show up first in the Details panel of a Spline component.

  • New: We now allow a SaveConfig to not update the class default object.

  • New: Added a maximum number of debug strings per actor for AddDebugText in the HUD to avoid long frames when possessing the player after having ejected from it in PIE.

  • New: The Gameplay tags are now saved to a separate configuration file to improve performance of the main Editor configuration file.

  • New: Made the UDP Messaging Module add and remove static endpoint functions thread-safe.

  • New: Made the FBX Scene Importer accessible in Python.

  • New: You can now call SetLODGroup directly in Blueprint and Python to set a static mesh LOD Group.

  • New: You can now set all material properties directly in Blueprint when importing a material.

  • New: The Place Actors panel now allows filtering by the native class name as well. For example, PointLight is now a valid search term for the Point Light item.

  • New: Added the export flag to UK2Node_GetSubsystem.

  • New: Added the ability to import and re-import custom LODs directly in Blueprint and Python by adding functionality to EditorStaticMeshLibrary and EditorSkeletalMeshLibrary.

  • New: Added an option to downscale textures without Mips to allow for texture compression.

    • Accepts values between 1.0 and 8.0.

    • Can be overridden per-platform, for a specific texture or texture group.

    • Downscaling will keep texture size divisible by 4 so they can still be compressed

  • New: Added the new console command stat framecounter to see the overlay of the GFrameCounter that increments for every frame.

  • New: Added improvements to the Editor analytics.

    • Added WasDebuggerIgnored Editor summary event analytic fields.

    • Updated the save frequency on Windows from 1 minute to 30 seconds.

  • New: SpeedTree assets can now be imported using automated imports.

  • New: Updated the tooltip and display name for the Editor preference LogTimestampMode to make it clear that it affects the Output Log Window, and not the log file itself.

  • New: Added a delegate that allows developers to add widgets to individual property rows in the details panel via C++.

  • New: Added improvements to the Editor analytics

    • Added the filtered Editor command line to the Editor summary analytic event.

    • Added the engine tick count to the Editor summary analytic event.

    • Added the engine last tick timestamp to the Editor summary analytic event.

    • Added the Editor death timestamp as captured by CRC to the Editor summary analytic event.

  • New: Made the Static Mesh reduction options available directly in Blueprint and Python.

  • New: Users are now able to set the AssetImportData source file directly in Blueprints and Python, in addition to C++.

  • New: Added a Max Vertices/Triangle option to the skeletal mesh reduction options in addition to the current Percent Vertices/Triangle. This allows the user to enter a percentage while still keeping a budget limit.

  • New: Reduced the memory used when building textures.

    • Reduced the maximum memory usage when importing 16k PNG textures from 12 638 MB to 8 885 MB (Delta from before the import).

    • Allowed the function ITextureCompressorModule::GenerateMipChain to reuse the BaseMip when possible instead of generating another intermediate texture of the same size as the BaseMip.

    • When compressing the texture, the compressed texture is moved to the output instead of being copied.

    • Added some moves instead of copies in the CompressImage function of FTextureFormatUnCompressed.

    • Avoided an unnecessary copy in the CompressImage function of FTextureFormatDXT.

  • New: Added Editor settings to avoid Actor relabel on paste.

  • New: Added GRHIName to the Editor Analytics summary report.

  • New: The DumpPrimitives command creates a CSV file of visible primitives in the Logs folder.

  • New: Added a Voxel Solidify tool to the Mesh Modeling Toolset that turns mesh inputs into solid meshes by running marching cubes on the fast winding number of the mesh. In addition, added an option to pre-process other voxel tool inputs with a solidify pass to make them work more easily on bad inputs.

  • New: Added option to focus the viewport on the selection when inside the LiDAR Point Cloud Asset Editor.

  • New: The meta flag GetOptions now handles TArray as well. In addition, added support for multiple selected items.

  • New: Minor update to Editor target selection on launch to account for the possibility of default targets living in the engine.

  • New: Improved the built-in menu searching so it now filters options with more consistency. In addition, the search box now allows for actions such as copying and pasting as well.

  • New: Added a TArray64 overload to FImageUtils::ImageResize for working with pixels already in linear space.

  • New: Made the multibox search filter reset on gaining focus.

  • New: Added a new hyperlink to the Project root folder that appears when the Project has completed the zipping process. This notification now appears for a longer period of time to give the user more time to click on the hyperlink.

  • New: Replaced the Wiki option in the Editor Help menu with Online Learning.

  • New: Added new spline component options for selected spline points: Snap To Actor, Align to Actor and Align Perpendicular to Actor.

  • New: Hierarchical Level of Detail (HLOD) actors can now be saved to the HLOD packages.

    • Added a Save LOD Actors To HLOD Packages project option, which will cause all properties necessary to rebuild LODActors from scratch to be saved in the _HLOD packages.

    • When loading a level in the editor, the LODActors from the level are destroyed and new (transient) actors are spawned from the content of those packages. This extra processing isn't performed in cooked builds as LOD actors are recreated one last time during cooking.

    • The HLOD rebuild commandlet will avoid submitting the level itself and will now only update its associated _HLOD packages.

  • New: Added an option to create transient actors in EditorLevelLibrary.

  • New: Updated disaster recovery icons.

  • New: Projects now use the default editor target configuration setting, if specified, to determine the name of the editor target file for startup re-compilation purposes.

  • New: Added hotkeys to reset spline point tangents in the spline component. With a spline point selected, pressing T will reset the tangent to the default unclamped value, while pressing Shift-T will reset the tangent to the default clamped value.

  • New: Added Snap To Last Selected Axis options to the spline component. In addition, modified the option Snap All to Selected Axis to set the spline point to Auto so tangents are automatically adjusted.

  • New: Added post-process calibration materials for display calibration. Materials are set in Project Settings with show flags for visualizing materials full-screen when calibrating.

  • New: Added spline component functions SetScaleAtSplinePoint and SetRotationAtSplinePoint.

  • New: Added the concept of EditorUtilityTasks. These tasks are long running operations that can be queued to execute as soon as the previous task finishes.

  • You can create and customize your own tasks by extending the base class and can run a task by simply calling RunTask .

  • New: Introducing a new optional plugin called Asset Search. Its job is to index different asset types and store an indexed set of searchable data in a local SQLite database.

  • This plugin complements the Content Browser search by adding the ability to search for tags and phrases that appear on any asset in the project. In addition, it can be extended to support new asset types in your project or plugin.

  • New: Splines: Changed Alt-drag behavior when dragging off spline endpoints. The attached segment will be split if the drag direction is within 60 degrees of the segment rather than always creating a new point.

  • New: Splines: Added Editor Preferences for spline hit proxies to adjust point size, tangent handle size, line thickness and tangent scale.

  • New: Added a configuration value to determine if the asset registry scanner should gather data on cooked packages that it didn't find an asset export for. Defaults to TRUE to match existing behavior.

  • New: Added the failed assert error message that terminated the Editor to the Editor session summary analytic event.

  • New: The ResavePackages commandlet can now customize its garbage collection frequency via the command line GCFREQ=??? where ??? is how many packages should be resaved before a garbage collection is run.

  • New: Point selection within the LiDAR Asset Editor can now be inverted.

  • New: During advanced copy, don't reparent and recompile a Blueprint unless the parent changes, and don't reparent any Blueprints in the restricted list.

  • New: Improved performance of tangent generation when building Static Meshes after import, or when modified in the Static Mesh Editor.

  • New: Added Tangent Color property to spline components.

  • Improvement: Increased write performance for the .ini configuration files.

  • Improvement: Loading an Editor layout now leaves the open Asset sub-editor open. If either PIE or SIE is open, the editor will warn the user and once accepted, it will automatically close PIE or SIE and load the desired layout. This alert notifies the user of potential loss of work.

  • Improvement: A Project user can set their own default layouts for a selected Project. Each Project can have its own DefaultEditorLayout.ini file, which opens the first time a Project is opened and overrides the default engine layout found in Engine/Config/BaseEditorLayout.ini.

  • Deprecated: Deprecated the duplicated IBookmarkTypeTools functions that were inside FEditorModeManager.

  • Deprecated: The SnapGrid macro definition. Going forward, use the UEditorStyleSettings::GridSnapSize config.

  • New: The property Collision Accuracy has been renamed to Max Collision Error to better reflect its intent. Going forward, references to ULidarPointCloud::CollisionAccuracy should be updated to use ULidarPointCloud::MaxCollisionError instead.

Content Browser

  • Bug Fix: Fixed it so object properties marked AssetRegistrySearchable -・such as DataAsset native class -・properly show in the content browser.

  • Bug Fix: Initialized asset view search options in content browser so that they don't need to be toggled in the active session to take effect.

  • Bug Fix: Changed SizeMap to use the standard FText::AsMemory function.

  • Bug Fix: Fixed a bug when reloading unsaved packages.

  • Bug Fix: Added a fix to prevent Delete Assets Dialog from compiling every Blueprint when you open the Replace References drop down.

  • Bug Fix: Fixed the Skeletal Mesh assets vanishing thumbnails, caused by incorrect bounds calculation of empty Chaos Cloth simulations.

  • Bug Fix: Fixed an issue where the Content Browser was not showing the newly created asset after merging LiDAR Point Clouds.

  • New: Added support for extensible data sources for the Content Browser:

    • UContentBrowserDataSource is the common implementation of a "do nothing" data source for the Content Browser. You can derive from this type to create new data sources for the Content Browser, overriding any required functionality and validation logic.

    • See UContentBrowserAssetDataSource and UContentBrowserClassDataSource as an example.

  • New: The function CopyFilePathsToClipboard in ContentBrowserUtils now returns the absolute path of an asset, instead of the relative path.

  • Improvement: Improved the experience of renaming a read-only asset when SCC is disabled.

Foliage

  • Bug Fix: Fixed a rare desync between GPU/CPU when Foliage was erased completely and then painted again.

  • Bug Fix: Fixed a crash in HISM.

  • Bug Fix: Reminded UE to make sure to BuildTree non-async when in a Serialize call with Ar.IsSaving() cases Cleanup HISM Duplication/PostEditImport/Serialization.

  • Bug Fix: Grass Maps updated during Tick are no longer dirtying packages. Instead, they mark themselves as dirty/need rebuilt. The new map warning will display "GRASS MAPS NEED TO BE REBUILT" whenever grass maps are outdated. We've added a new 'Build Grass Maps'・command to the Build menu options.

  • Bug Fix: Fixed an issue where foliage instances snapping was dirtying/invalidating foliage component's lighting cache even when result didn't change.

  • Bug Fix: Fixed an issue where foliage Erase Mode radio button remains highlighted even after releasing Ctrl and Shift keys.

  • Bug Fix: Fixed a bug with foliage that was writing to both a Runtime Virtual Texture and the main pass. Previously hierarchical and distance culling were getting disabled in the main pass.

  • Bug Fix: Fixed landscape grass not updating in edit layers mode when landscape material doesn't have any paint layers.

  • Bug Fix: Fixed Grass Align to Surface normal computation when using Halton sequence placement.

  • Bug Fix: Fixed an issue when removing null entries in AInstancedFoliageActor::CleanupDeletedFoliageType that never worked properly.

  • Bug Fix: Made sure we EndTransactions on ExitMode. Also wrapped most Begin/EndTransactions inside scopes.

  • Bug Fix: UE now deletes null entries from the types before rebuilding foliage actors.

  • Bug Fix: Fixed an issue where UpateGrass discarded components were processing in the next loop.

  • New: Added CustomDepthStencilWriteMask support to foliage.

  • New: Fixed foliage non-deterministic cooking by removing unused UProceduralFoliageSpawner::bNeedsSimulation that can change depending on the cooking order.

  • New: Added support discarding Foliage types independently from density scaling.

  • Improvement: Improved performance when adding multiple instances to InstancedStaticMeshComponent.

Landscape

  • Bug Fix: Fixed Landscape Grass Scale to not be applied when min and max are the same value.

  • Bug Fix: Fixed crash when applying spline component to landscape without a proper edit layer (when Edit Layers is enabled).

  • Bug Fix: Fixed a crash when copying offset regions.

  • Bug Fix: Reimported tiled Landscape Layer Weightmaps now have the same behavior as Import (no more forcing a normalization of layer weightmaps).

  • Bug Fix: Addressed a crash when entering Landscape Mode with Mirror Tool enabled and mirror point set to 0,0 but without any landscape.

  • Bug Fix: Resolved a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed a crash when using the smooth tool in landscape mode.

  • Bug Fix: Addressed a crash when importing sublevels with landscape layers.

  • Bug Fix: Resolved a crash when creating a new Landscape with Edit Layers enabled.

  • Bug Fix: Fixed Landscape rotation not being considered in ULandscapeComponent::GetLayerWeightAtLocation.

  • Bug Fix: Fixed a bug with ForeignWorld not being updated properly on SplineControlPoints.

  • Bug Fix: Fixed Undo/Redo of Clear/FillLayer which was filling MaterialInstanceConstantMap with mismatching Key/MI.

  • Bug Fix: Fixed ULandscapeSplineControlPoint not updating its body instance when changing mesh collision preset.

  • Bug Fix: Fixed a crash using landscape add component tool.

  • Bug Fix: Addressed a crash from unbound shader parameters when using RVT and tessellation together in a landscape material.

  • Bug Fix: Fixed a bad index buffer generation on mobile landscape. Vertex Key generation was not unique for a 255*255 grid. Removed it along with its use as a TMap key and replaced it with a simpler array lookup.

  • Bug Fix: Fixed crash using GetLandscapeMaterial node in BP.

  • Bug Fix: Fixed not thread-safe Landscape CVar code.

  • Bug Fix: Fixed a bug preventing the edit layer brush from applying when one of its resources is not ready. Editing layer brush resources may now include all types of objects but only handles UTexture2D (texture resource needs to be streamed in) and UMaterialInterface (material shader needs to be compiled). UE will now display user notification after the brush fails to apply for more than 3 seconds.

  • Bug Fix: Fixed a crash with grass scattering when virtual texturing is not enabled. We use the fixed grid vertex factory for both the grass and virtual texturing now.

  • Bug Fix: Fixed crash when importing Landscape layers in the New Landscape Tool.

  • Bug Fix: Fixed an issue with grass components trying to be detached while not attached after undoing a location change.

  • Bug Fix: Fixed a crash when Resizing a Landscape with Edit Layers.

  • Bug Fix: Fixed an occasional crash when creating a new landscape with edit layers.

  • Bug Fix: Fixed a crash when opening an old map with Chaos.

  • Bug Fix: Fixed landscape grass placement shader to correctly calculate SvPosition. This fixes landscape grass placement materials which use AbsoluteWorldPosition.

  • Bug Fix: Fixed LandscapeExportHeightmapToRenderTarget to take exported components'・overall extent into consideration. Added option to export or not all landscape proxies when LandscapeExportHeightmapToRenderTarget is used with Landscape Actor.

  • Bug Fix: Fixed an infinite loop when undoing a landscape change.

  • Bug Fix: Fixed crash when creating a landscape from scratch with edit layers enabled.

  • Bug Fix: Fixed an issue with Runtime Virtual Texture updates to landscape paintings when working with landscape streaming proxies. Before the fix if no Runtime Virtual Texture targets were set in the main landscape actor (but were only set in the landscape streaming proxies) then the virtual texture wouldn't immediately update on landscape painting.

  • Bug Fix: Fixed an issue preventing stored reimport weightmap paths per tile when importing a tiled landscape.

  • Bug Fix: Fixed an issue causing problems when going in and out of landscape (and in manage tab).

  • Bug Fix: Fixed a crash in Landscape Mode when a paint layer gets its Layer Info assigned but no Edit Layer is selected. Also made sure to always have a valid Edit Layer selection.

  • Bug Fix: Fixed an issue with landscape shadows still rendering when the landscape show flag is disabled. To help with this we exposed shadow settings on the landscape proxy.

  • Bug Fix: Replaced temporary toolbar Landscape Resize icon with new one.

  • Bug Fix: Fixed a crash with landscape grass mesh when there are more mips than the landscape currently has.

  • Bug Fix: Fixed crash after moving Landscape Actor to another Level.

  • Bug Fix: Fixed crash when Resizing a Landscape with Edit Layers.

  • Bug Fix: Fixed warnings about invalid material for landscape thumbnail renders.

  • Bug Fix: Fixed crash in Landscape Mode when a paint layer gets its Layer Info assigned but no Edit Layer is selected. Also made sure to always have a valid Edit Layer selection.

  • Bug Fix: Fixed an issue with the Resize Landscape Tool not showing up in the manage landscape toolbar. We've also replaced the temporary toolbar Landscape Resize icon with a new one.

  • Bug Fix: Fixed crash in Landscape Edit Layer mode that occured when Landscape Material changes are applied without Landscape properly updating/creating the necessary rendering resources.

  • Bug Fix: Fixed an issue causing the landscape max draw distance from updating correctly in landscape components when set on the owning landscape proxy.

  • Bug Fix: Fixed an issue preventing the landscape cached heightfield from being cleared when the landscape is changed.

  • Bug Fix: Fixed Landscape LOD selection for stereo rendering.

  • Bug Fix: Fixed SimpleCollisions from being incorrect on Landscape when the specified Simple Collision mip level is greater than Collision mip level.

  • Bug Fix: Fixed non-determinism in the generation of Runtime Virtual Texture low mips. This is done by forcing textures to stream before each tile render.

  • Bug Fix: Fixed an issue preventing all split screen views from using view 0 for landscape LOD calculation. This fixes bugs where landscape components would be rendered with the wrong scale in the second view.

  • Bug Fix: Fixed Landscape Edit Layers warning text to be read-only.

  • Bug Fix: Fixed a crash when attempting to re-import weightmaps with Landscape Edit Layers disabled.

  • Bug Fix: Fixed a memory leak of FViewInfo objects in Runtime Virtual Texture rendering.

  • Bug Fix: UE now accounts for StaticMeshLODDistanceScale when calculating landscape shadow LOD. This fixes bugs where offscreen landscape components could render shadows at a scale too large or too small.

  • Bug Fix: Fixed bug where user was able to select actors while in the Landscape Edit Mode.

  • Bug Fix: Fixed an issue where resetting sub-levels in the World Composition window where new position and old position overlap would cause visual defects.

  • Bug Fix: Fixed crash when loading a map with a BP landscape brush that is not compiling.

  • Bug Fix: Fixed grass.MaxCreatePerFrame.

  • Bug Fix: Fixed landscape visibility mask material warning when using the landscape base material for holes.

  • Bug Fix: Fixed a crash when using the smooth tool in landscape mode.

  • Bug Fix: Fixed Landscape rotation not being taken into account in ULandscapeComponent::GetLayerWeightAtLocation (Procedural Foliage).

  • Bug Fix: Fixed a crash in ULandscapeMaterialInstanceConstant::UpdateCachedTextureStreaming.

  • Bug Fix: Fixed a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed a crash when importing sublevels with landscape layers.

  • Bug Fix: Fixed Landscape Grass Scale not being applied when min and max are the same value.

  • Bug Fix: Fixed a regression with Landscape Collision when the whole LandscapeComponent is painted as a hole.

  • Bug Fix: Fixed Undo/Redo of Clear/FillLayer which was filling MaterialInstanceConstantMap with mismatching Key/MI.

  • Bug Fix: Fixed ForeignWorld not being updated properly on SplineControlPoints.

  • Bug Fix: Fixed a crash occurring when copying offset regions.

  • Bug Fix: Fixed an issue where UpdateCachedTextureStreaming compound TexelFactor every load/save.

  • Bug Fix: UE will now allow the landscape editor to continue gracefully if the CDO alpha texture doesn't contain any source data. This can happen when the editor is loading cooked data.

  • Bug Fix: Fixed a bug allowing edition of landscape proxy properties that are shared with the parent landscape properties.

  • Bug Fix: Within a Landscape, UE will now use Equal() (with error tolerance) when testing whether a spline component transform should be updated.

  • Bug Fix: Fixed a crash when loading a cooked landscape in the editor.

  • New: Added experimental version 0.1 of the Virtual Heightfield Mesh plugin. The plugin is a mesh renderer for heightfields where the source data is a runtime virtual texture containing height values. It is intended as an alternative final rendering technique for very large landscapes

  • New: Added support for adaptive virtual texture added. This allows the support of larger runtime virtual texture resolutions. The new limit is 1GiTexel x 1GiTexel.

  • New: Added the UVirtualTextureBuilder asset type for building virtual textures. The URuntimeVirtualTexture low mips have been moved out of the URuntimeVirtualTexture asset and into this. The streaming mips build is now set up from the Runtime Virtual Texture Volume Actor. This allows multiple streaming mips to be built against a single URuntimeVirtualTexture for cases where the URuntimeVirtualTexture is reused in different levels.

  • New: Added a continuous update flag to Runtime Virtual Texture assets. This allows Runtime Virtual Textures to be marked to have a random small number of pages updated each frame. This can help in cases where Runtime Virtual Textures contain stale data due to late texture streaming etc.

  • New: Added the concept of virtual texture scalability groups to allow varying scalability settings for different Virtual Texture assets and components.

  • New: Changed the naming for the Runtime Virtual Texture setting: "Virtual Texture Pass Type" to "Draw in Main Pass"・ The enumerated option names have also changed to try to make the usage more clear.

  • New: Rewrote the Runtime Virtual Texture Volume SetBounds logic so that all relevant primitives are considered in the bounds calculation, not just the selected alignment actor.

  • New: UE now provides additional information in message dialogs when import using the landscape copy gizmo fails.

  • New: Added custom stencil write mask support for landscape. We've also added full custom depth stencil support for landscape spline.

  • New: Primitives that write to a Runtime Virtual Texture but are hidden in the main pass are now shown in the Editor when selected. To support this we've added a Show Flag that makes all such primitives visible in Editor mode even when non-selected. They remain hidden in game mode.

  • New: UE will now show a progress bar when reimporting tiled Landscape.

  • New: The transform for a Runtime Virtual Texture volume is now based around a corner of the bounding volume instead of around the center. This makes it more consistent with other actor types and simplifies any transform maths. Legacy data is fixed up on load.

  • New: World Composition layer creation menu now creates the layer on Enter keypress.

  • New: Exposed Blueprint function on RuntiveVirtualTextureComponent to invalidate VT pages within given world bounds.

  • New: Sped up landscape tessellation PIE load.

  • New: Landscape edit layers are now supported when importing/reimporting a World Composition Landscape.

  • New: Added Texture LOD Group setting to Runtime Virtual Texture assets. We;ve also added a Virtual Texture Tile Size Bias and Tile Count Bias to the Texture LOD settings. This allows us to apply Tile settings per platform and use smaller tile sizes on platforms with less processing power.

  • New: World Composition: Added Fit View to Selection command bound to F key.

  • New: Added a new material expression for landscape that outputs a physical material. This can optionally be used to generate the dominant physical material for each point on a landscape. When setup in a landscape material it overrides the standard layer based physical materials. The aim is to allow greater logical control over physical material placement on the landscape.

  • New: Made Landscape actors not placeable.

  • New: Made BP brushes use their actor factory upon spawning, if applicable. Default-named the spawned BP actor according to the landscape they're added to.

  • New: Exposed Material Overrides to Grass Variety.

  • New: Made GetAllParameterInfo virtual, so UMaterialExpressionLandscapeLayerBlend can be subclassed.

  • New: ALandscape::LandscapeLayers is no longer 'TextExportTransient'・

  • Improvement: Made Landscape actors not placeable.

  • Improvement: Fixed invalid foliage instance tooltip incorrect spelling.

  • Improvement: Made GetAllParameterInfo virtual, so UMaterialExpressionLandscapeLayerBlend can be subclassed.

  • Improvement: Released an update to not reset the landscape actor locked status when it's selected.

  • Improvement: Improved support for Runtime Virtual Texture components in PIE. This fixes issues where Runtime Virtual Texture did not respond to streamed in changes in PIE.

  • Deprecated: Removed redundant bEnable flag on runtime virtual texture assets. A better alternative is to use the visibility of the associated runtime virtual texture volume.

Material Editor

  • Bug Fix: The material editor no longer crashes when attempting to select a curve row parameter from a curve atlas when the atlas references invalid curves.

  • Bug Fix: Fixed Virtual Texture warning messages.

  • Bug Fix: Resolved a bad reference to structure variables.

  • Bug Fix: Fixed various items concerning opening material layers created by prior engine versions. Also released fixes for linking derived material layers to parent layers.

  • Bug Fix: Addressed key transient material parameter overrides on the MPI, rather than parameter index. This fixes material parameters getting scrambled while editing material.

  • Bug Fix: Updated virtual textures on any relevant material parameter value change while in the material editor.

  • Bug Fix: Fixed a crash on undo/redo when the preview material source instance is null.

  • Bug Fix: Updated UE to not perform project setting based validation on engine visualization materials during DDC warming.

  • Bug Fix: Fixed unnecessary recompilation of shaders when changing texture compression.

  • Bug Fix: Fixed a problem where material could display incorrect parameter values when parameters are added/removed in the material editor.

  • Bug Fix: Fixed material baking cache not invalidating cached material when changes are made to instance constants.

  • New: Added SmoothStep, Step, and InverseLerp material expressions.

  • New: Added function to material editing library to get a list of textures used by a material

  • New: Added editor scripting functions for iterating through expressions in a material.

  • New: Shader compile log messages now appear during shader compile instead of after all shaders compiled.

  • New: Added thresholdWithRange Material Function. This allows the artist to define a threshold value and a range value to falloff linearly towards. There is a bool to do a one sided falloff or to falloff on both sides.

  • New: You can now sort Material Parameter Collection entries alphabetically: material editor + Blueprint node.

  • New: UE will now ensure that overridden material parameter values are preserved, when override is disabled.

  • New: Custom HLSL nodes now support outputs of type FMaterialAttributes, and multiple outputs.

  • New: Engine functions: Added simple functions to convert between km and cm for sky work.

  • New: Engine Functions: Added Material functions to convert between degrees/radians.

  • Improvement: Made MID asset editor read-only.

Media Framework

  • Bug Fix: Released a fix to compute pipeline use by PS5MediaPlayer to improve performance. Also improved stability when using more then one player at once.

  • New: Added APIs to check on current aspect ratio and image orientation of UMediaTexture.

  • New: Added media player timing mode that simply displays the latest video frame without any timing.

  • New: Added AVEncoder module's documentation (in code).

Scripting

  • Bug Fix: Fixed Python int/long -> float/double conversion forcing unsigned.

  • Bug Fix: Fixed potential null pointer access during Python shutdown.

  • Bug Fix: Instructed UE to Invoke sys.excepthook when generating Python errors in UE4.

  • Bug Fix: Fixed documentation link for editor python scripting plugin.

  • Bug Fix: Fixed the automated FBX re-import to show the dialog under certain situations.

  • Bug Fix: Fixed Python defined UFunctions with a return type failing to pass data for some arguments.

  • New: Added a call_method method to unreal.Object to let you call functions via Unreal reflection.

    • This can be useful to let you call functions that haven't had Python glue generated for them, such as functions defined with a Blueprint class.

  • New: Added unreal.new_object as a way to create an object instance from a UClass* in Python without having access to its glue type.

  • New: Exposed source control sync functionality for files and directories.

  • New: Added support for showing Python files in the Content Browser.

    • This is disabled by default, and can be enabled by setting "Enable Content Browser Integration" to true in your Editor Python plugin preferences.

    • When enabled, this will show Python files in the Content Browser, and add an option to let you run them (either via the context menu, or by pressing "space" on an item).

  • New: Added debugpy_unreal.py utility to help debug the embedded Python interpreter using VS Code.

  • Improvement: Switched to Python 3.7.7 by default. If you need to continue to use Python 2.7.14, then you'll have to use a source build of UE4 and either:

    • Edit PythonScriptPlugin.Build.cs and PythonScriptPluginPreload.Build.cs to use "Python" rather than "Python3"・in their dependency lists.

    • Set your UE_PYTHON_DIR environment variable to point to a custom Python installation.

  • Improvement: Exposed UEditorLevelUtils::AddLevelToWorld to scripting.

  • Improvement: Exposed ReloadPackages to editor scripting.

  • Improvement: Changed Python objects to being transactional by default.

Sequencer

  • Bug Fix: Movie Pipeline: Fixed a bug causing cinematic shot section restore to not work properly when multiple segments map to the same shot section.

  • Bug Fix: Fixed a bug causing auto-easing computation of blending camera cuts when sections are completely underlapped.

  • Bug Fix: UE no longer notifies the game of camera cuts when using camera cut blending and there's no actual cut.

  • Bug Fix: Updated Sequencer to only autoscrub if in scrubbing state to fix double evaluations when autoscroll is enabled during playing.

  • Bug Fix: Performed an update to use camera component directly (if possible) to compute from/to transform when previewing camera cut blends.

  • Bug Fix: Fixed a bug to stop performing camera cut blending when the blend is finished. This fixes some interpolation problems that create jitter during cinematics with fast-moving cameras.

  • Bug Fix: Fixed renaming of MoviePipeline Master Config not correctly updating name.

  • Bug Fix: Sequencer no longer counts the root node when counting the number of items to be displayed in the tree.

  • Bug Fix: UE will now highlight the default filter option when opening the filter dialog in CurveEditor.

  • Bug Fix: Fixed several bugs related muting/soling tracks which have been renamed or moved.

  • Bug Fix: Fixed default MoviePipeline presets not being visible in Preset Importer.

  • Bug Fix: UE will no longer set viewports to realtime if they're already running PIE.

  • Bug Fix: Fixed exported audio cutting out if movie rendering window loses focus.

  • Bug Fix: When rendering a movie, UE will now detect if there is no more disk space.

  • Bug Fix: UE will now skip processing of render passes in MoviePipeline that are not enabled.

  • Bug Fix: Added duration/wave support for dialogue player so that a sound cue with dialogue is added with the correct duration.

  • Bug Fix: Live Link will now discard recording samples if outside of the section start frame.

  • Bug Fix: In Take Recorder, renamed NewTake to ClearPendingTake.

  • Bug Fix: Fixed FCPXML Import/Export so that it uses the in frame as the start frame offset if the original start frame offset doesn't exist in the lognote.

  • Bug Fix: Fixed FCPXML Import/Export so that it supports same named shots and retrieves the lognote correctly from the logging info node given the master clip id.

  • Bug Fix: Will now focus on endpoint when creating a new binding or setting the event endpoint.

  • Bug Fix: When importing FCPXML, if the corresponding level sequence isn't found, UE will now skip past it. It will then set the correct in/out frames, and continue importing the rest of the sequence.

  • Bug Fix: The local time is now set to loop so the evaluation is automatically set to Play To, rather than Jump To when autoscrolling. This enables a swepts evaluation when autoscrolling.

  • Bug Fix: Fixed last tick game time seconds from being set to 0 which ends up stopping sequence playback immediately.

  • Bug Fix: Fixed subframe end playback range conditions so that playback that ends on a subframe will now fire events that lie between the last whole frame and playback end. Previously, the last valid time would be based on DurationFrames, which is display rate and would get rounded to a frame number in SetFrameRate(). The fix is introduced in DurationSubFrames which contains the subframe.

  • Removed: Removed unnecessary cast to ULevelSequence in selection synchronization. This allows derived classes to participate in the synchronization of selection in the editor with the Sequencer tree.

  • Bug Fix: Fixed issues with sequencer style definitions in SlateEditorStyle.

  • Bug Fix: Fixed missing blend-out handle on camera cut track when there's only one section.

  • Bug Fix: Made filters menu more consistent. Enable/Disable All operates on all level filters and group node filters as well. Now it doesn't close menu after clicking on group filter submenus

  • Bug Fix: Sequencer now only shows easing handles for sections that actually support manual easing.

  • Bug Fix: Fixed a crash in curve editor when widgets inexplicably disappear.

  • Bug Fix: Fixed an issue with modifying sequences when opening. OnNodePathChanged does not need to mark the sequence dirty.

  • Bug Fix: Fixed camera cut track giving control to the incorrect camera in some hierarchical use-cases.

  • Bug Fix: Renderpass is now inserted before the shot frame in file format string to fix import of image sequences exported by MoviePipeline.

  • Bug Fix: Fixed bugs with starting/stopping controlled shake source shakes.

  • Bug Fix: UE no longer displays thumbnails over blending areas of the camera cut track.

  • Bug Fix: UE no longer lets silent mode computations linger around after silent mode has ended.

  • Removed: Removed auto-exposure and shutter angle overrides from Movie Render Queue. The active camera is now respected in both cases.

  • Bug Fix: Warm-up frames can now optionally be rendered in the Movie Render Queue. This allows gpu particles to warm up correctly.

  • Bug Fix: Fixed large values in the console variable setting not applying correctly when the target cvar type was an int.

  • Bug Fix: Fixed an issue where jobs would not use the latest values from a preset if the preset had been modified after the job was created.

  • Bug Fix: Fixed a dependency with MovieSceneTracks.build.cs editor.

  • Bug Fix: Fixed an issue with the invalid key handles state after calling FRichCurve::SetKeys.

  • Bug Fix: MoviePipeline: If a movie render is interrupted, UE will now log it as an error as the render did not complete.

  • Bug Fix: Fixed a crash when copying a geometry cache track.

  • Bug Fix: Fixed a crash unregistering camera shake previewing view modifiers when there's no editor.

  • Bug Fix: UE will no longer make cyclic inclusions with template sequences. This fixes a possible loop with template sequence track editor.

  • Bug Fix: Fixed a bug where template sequences aren't correctly run on object bindings.

  • Bug Fix: Camera cut track blending is now handled by a parent sequence's camera cut track, and support blend times dilated by sub-sequence play-rates.

  • Bug Fix: Fixed a crash where creating a level sequence could spawn an actor in a world that's being torn-down.

  • Bug Fix: Fixed an issue where calling Set Playback End on a sequence resulted in an incorrect bounds type.

  • Bug Fix: Fixed an issue with Fade track rendering in MoviePipeline.

  • Bug Fix: When exiting a camera cut, UE will now only go back to the previous editor location for blending cuts.

  • Bug Fix: Fixed undo/redo adding a spawnable by setting the spawn flag to transactional.

  • Bug Fix: Control Rig: Fixed a crash when re-compiling BP and removing a transform control that's also open in sequencer.

  • Bug Fix: Movie Pipeline: Mode the restore fixed time step to OnPIEEnded. This was done to fix an issue where the editor plays back faster after rendering.

  • Bug Fix: Added options to selectively save transforms and curves when doing animation sequence baking from Sequencer.

  • Bug Fix: Extended the working range if trying to type in the time outside of it.

  • Bug Fix: Refactored making a unique spawnable name so it can be used when creating a spawnable camera in various places. This ensures that cameras are created with consistent names, Cine Camera Actor (1), Cine Camera Actor (2), Cine Camera Actor (3), etc. Otherwise some names are "CineCamerActor", "Cine Camera Actor"・ and they aren't numbered in order.

  • Bug Fix: Fixed a crash when trimming animation if length is 0.

  • Bug Fix: Movie Pipeline: Fixed an issue where unconventional aspect ratios would render with the wrong fov.

  • Bug Fix: Fixed subfolders getting muted when their parent folder is muted.

  • Bug Fix: Released a fix for null object binding with control rig when dragging in a control rig to a level sequence that isn't loaded.

  • Bug Fix: If there's multiple transform tracks affecting a given actor, UE will now export with interrogation. Previously, interrogation would only happen for multiple sections on a single transform track.

  • Bug Fix: Fixed Blending Sections in Control Rig.

  • Bug Fix: Fixed bake so that it doesn't attach to the previous parent's parent. The previous idea was flawed because the parent attachment could be animated, so it's more straightforward to just unparent to the root.

  • Bug Fix: Released a fix for importing broken tangents, FBX.

  • Bug Fix: UE will now clear transient flags on spawnable template components. This fixes a bug where adding components to an empty actor would not save those components.

  • Bug Fix: Curve Editor: Fixed an issue with filter window not opening for standalone curves since the tab manager may not exist.

  • Bug Fix: Released a fix changing blending type so that the object is restored to its pre animated state before applying relative/additive. This fixes an object flying away when changing the blend type to relative/additive since it would have been relative/additive to the current animated state.

  • Bug Fix: Expand the section when adding keys through the enter key, otherwise newly created keys wouldn't evaluate.

  • Bug Fix: Fixed sequencer curve editor 'selected node'・filter continually expanding.

  • Bug Fix: Control Rig: Provided a fix for Control Rig in Sequencer breaking when Control Rig is compiled in it's Editor.

  • Bug Fix: Fixed default tracks not being added properly for some properties (ie. OuterConeAngle on SpotLights) because the object to be keyed should be the property owner, and not the actor.

  • Bug Fix: Fixed an issue when converting a possessable to spawnable failing when selection changes during the conversion.

  • Bug Fix: Fixed bake transform when the camera is an additive camera offset.

  • Bug Fix: Transform origins no longer apply to components and actors that are attached to other components or actors.

  • Bug Fix: Curve Editor: Fixed a crash when undoing inserting keys. The panel's edit box's CurveIDToKeyProxies becomes stale on undo. Invalidate the curve model ID and relevant key handles on undo.

  • Bug Fix: Sequencer will now set AlwaysTickAndRefreshBones on child skelmesh components when Skeletal Meshes are added to Sequencer.

  • Bug Fix: Fixed copy/paste of spawnables by forcing it to be spawned so that its possessable components can be bound.

  • Bug Fix: Changed GetPlaybackRange so that it returns values in display rate, similar to GetPlaybackStart and GetPlaybackEnd.

  • Bug Fix: When recording an anim sequence live link section, it's source can start at any time during the recording. Because of this UE will now always force tick and check for new sources every frame.

  • Bug Fix: Fixed event endpoints being lost when renaming or duplicating a Level Sequence.

  • Bug Fix: Fixed duplicate object bindings not pasting to original folder.

  • Bug Fix: Cine Camera: Moved the upgrade path to Serialize() so that newly created Blueprint cameras don't have their filmbacks incorrectly upgraded.

  • Bug Fix: Control Rig: Selecting Parent Control will now select single channel child control allowing for thing's like S to key as expected.

  • Bug Fix: CurveEditor: Scaling with Transform Tool no longer reverts on mouse up.

  • Bug Fix: Control Rig will now frame on selected controls. Note if any control is selected UE will focus on them, then if not UE will do actors.

  • Bug Fix: Curve Editor: Fixed the set curve attributes menu (ie. pre and post infinity) to operate on all curves rather than just the selection.

  • Bug Fix: Fixed fbx import through scripting not creating bindings for components. The bug here is that it's not able to import the focal length property because it doesn't create a camera component binding first.

  • Bug Fix: Fixed curve editor tree items not showing up when switching sub sequences.

  • New: Added TakeTrack and TakeSection which contains timecode tracks and a slate property. Take recorder records timecodes for each tick and adds them to the actor's take track section.

  • New: Added Python scripting support for the Movie Render Queue. Added example Python scripting support for rendering movies both in-editor and from the command line. See \Engine\Plugins\MovieScene\MovieRenderPipeline\Content\Python for more details.

  • New: The "-MoviePipeline=" argument has been changed to "LevelSequence="・to clarify what gets used for (as it only attempts to load a ULevelSequence). See MovieRenderPipelineCommandLine.cpp for examples.

  • New: Added the option to disable TDR (graphic driver timeout) when burning out sequences with MoviePipeline, defaults to on.

  • New: Exposed SetName to set the name of a track binding.

  • New: Added Create Group to the context menu in the group manager. Fixed undo issues not refreshing the groups manager.

  • New: Added RefreshCurrentLevelSequence() which refreshes the UI for the currently loaded level sequence.

  • New: Concerning MoviePipeline, we've blended post processing volume settings to motion blur amount.

  • New: Made calls to OnSectionMoved consistent in dragging operations, calling it for sections being moved and resized, both during interactive dragging and at the end of the operation.

  • New: Added support for toggling markers in a subsequence to be globally visible in other subsequences.

  • New: Added a Timecode clock which sets the sequencer clock to the timecode provider. Renamed the existing Timecode clock to Relative Timecode.

  • New: Added the ability to create bindings in root or local space. Camera cut bindings in a subsequence should be created in local space so that they can resolve when opened on its own. Updated the master sequence example to create a binding in local space.

  • New: Added support for AvidDNx and AppleProRes video codecs. Does not support compositing burn-in data on top of video output.

  • New: Movie Render Queue's Burn-In setting now allows the burn-in to not be composited onto the final image.

  • New: Added access to sequencer selection. GetSelectedSections, SelectSection GetSelectedTracks, SelectTrack GetSelectedFolders, SelectFolder GetSelectedObject, SelectObject EmptySelection.

  • New: You can now use a non-realtime audio mixer to allow generating deterministic audio when rendering movies in PIE.

  • New: Added a warning via Message Log when levels are set to Blueprint Streaming for Movie Renders.

  • New: Added option (shift modifier) to append sections as they are dropped as opposed to stacking them on subsequent rows.

  • New: Exporting fbx through python now spawns spawnables if necessary on export.

  • New: Added ability to create an event repeater section through scripting

  • New: We've exposed Set/GetClockSource and Set/GetEvaluationType.

  • New: Added the ability to record camera cuts/switching.

  • New: We've exposed GetBoundObjects from FSequencer to retrieve the objects bound to the level sequence editor.

  • New: Added numeric type interface to pad take number digits.

  • New: Added veryverbose log for ingested live link frame times. You can enable this by using the console command: log LogLiveLinkSequencer.

  • New: Added the ability for sequences to opt in/out of certain track types. Each track editor can now call Sequence->IsTrackSupported to determine whether it should opt in/out or continue with its default implementation.

  • New: For converting existing track editors in a plugin to be compatible with LevelSequence, implement: virtual bool SupportsSequence(UMovieSceneSequence* InSequence) const override and return true if a sequence is a ULevelSequence.

  • New: Added display showing number of tracks and how many are hidden by filters.

  • New: Added get/set selected channels. Channel selection is defined as a FSequencerChannelProxy which is a section pointer and a channel FName.

  • New: Can now show marked frames in the cinematic viewport.

  • New: Take Recorder: Added option to exclude all properties for a component. For example, you can now do this in BaseEditorSettings.ini to exclude the light component properties from being recorded: (MatchingActorClass=/Script/Engine.Light,ExcludePropertyTracks=((ComponentPath="LightComponent0", PropertyPath="")).

  • New: Concerning Fbx, added import/export integer and string channels.

  • New: Added config to HierarchicalBias. For example, you can set this in EditorPerProjectUserSettings to set the default hierarchical bias for sections to -100: [/Script/MovieScene.MovieSceneSubSection] Parameters=(HierarchicalBias=-100)

  • New: Added options to cancel movie rendering via the movie pipeline executor from blueprint/python scripting.

  • New: Take Recorder: Added option on actor source to toggle whether the parent hierarchy is automatically added for recording if it isn't already. When disabled and recording to possessable, the child will be recorded in local space since it will retain its parent in the level. When disabled and recording to spawnable, the child will be recorded in global space.

  • New: UE now allows opening and navigating curve editor for locked sequences.

  • New: Added the ability to export custom attributes when exporting a skeletal animation track (mapped from an anim sequence).

  • New: Added Node Groups feature, which allows creating groups of sequencer nodes for selection, filtering, and editing.

  • New: UE will now warn users when we automatically insert the {render_pass} tag for them as it will cause the output filename to change names unexpectedly.

  • New: Sequencer Scripting: SetTickResolution now also migrates frame times to the target tick resolution. Added SetTickResolutionDirectly which does not migrate the frame times. Refactor MigrateFrameTime to MovieSceneTimeHelpers

  • New: Added movie pipeline queue subsystem for runtime.

  • New: Added an option to lock previous camera in a blending camera cut.

  • New: UE will no longer unlock cameras when going from a sub-sequence to a parent sequence. This lets artists and designers working in a sub-sequence use the camera from a "sibling" animation sub-sequence.

  • New: Added a new "additive from base" blend type, where values are animated relative to the first value of a section. This is mostly useful for camera animations and camera shakes.

  • New: Added support for hierarchical easing, where an entire sub-sequence can be eased in and out at the beginning and end, as if every single track inside had the same ease-in/out curves.

  • New: Added two tracks for starting and previewing camera shakes on a camera shake source component/actor: a "controlled" track where sections control when the shake starts and stops, and a "trigger"・track which is a "fire-and-forget"・way to trigger shakes. These cinematic camera shakes can be previewed directly in the editor by playing the sequence.

  • New: Added the ability to match animation sections in Sequencer by specified bones and visualize skeletons on sections to help with matching.

  • New: Movie Pipeline: Implemented the exporting of FCPXML project files, and added metadata tracking for the files output.

  • New: Added a motion trail editor mode for transform tracks, skeletons and control rigs.

  • New: Made ULevelSequenceBurnIn::GetSettingsClass_Implementation() overridable.

  • New: Added a reduce keys tolerance to specify how much keys should be reduced by after recording. Keys tolerance and key interpolation were also added to the section menu.

  • New: Ctrl-Drag dilate will now work with skel anim tracks, geometry cache tracks and geometry collection tracks. In all three we now scale the playrate to do time warping.

  • New: Added Control Rig Created FK Rig that replaces Additive Control Rig and allows one to override or add to existing transforms and curves(morph targets).

  • New: Added Sequence hierarchy navigation. There's now a new picker to show the sequence hierarchy which allows you to pick any subsequence to dive into directly. There's also forward and backwards navigation buttons, and subsequences are now always shown.

  • New: Control Rig: Added the ability to import FBX into a Control Rig, with options for matching, insert/replace, etc.

  • New: Cloth (Chaos) will now update in Editor if the Update Cloth In Editor flag is toggled on a Skel Mesh Component.

  • New: Added an option to disable sections when baking as opposed to deleting.

  • New: Added the ability to copy the contents of a track to another track.

  • New: Movie Pipeline: Added the ability to toggle the selected shots. If the shot being toggled is not selected, only that shot will be toggled.

  • New: Added meta DeterminesOutputType to UFUNCTIONs to eliminate the need to cast the return type in Blueprints.

  • New: Take Recorder: Added support for recording animated attachments.

  • New: Cine Camera: Updated 16:9 Digital Film SensorWidth and SensorHeight to 23.76 x 13.365 to match Arri Alexa.

  • New: Added support for animating properties on decal component materials.

  • New: Control Rig: Added 'default animating rig'・to SkeletalMesh, which if specified will create a track with that Control Rig when a Skeletal Mesh Component with that Skeletal Mesh is added to Sequencer.

  • New: Movie Pipeline: Sequencer will now report errors/warnings to the FMessageLog.

  • New: Added support for toggling markers in a subsequence to be globally visible in other subsequences.

  • New: Movie Pipeline: Added warnings when camera cuts start on subframes.

  • New: Movie Pipeline: Renamed friendly name to "Movie Render Queue."

  • New: Sequencer is now more responsive when viewing large data sets.

  • New: Live Link / Rich Curve: Improved save times for take recorder by setting all times and values at once and not auto tangent each key.

  • New: Curve Editor: Changed mode hotkeys to have a modifier. Transform - Ctrl-T, Retime - Ctrl-E, Multi - Ctrl-M. This removes conflicts with w,e,r which are reserved for the viewport transform gizmo. Ctrl-W is used for weighted tangents.

  • New: Added a color gradient for color tracks (material parameter and material tracks). Added a color picker for color keys on double click. A key is added to all channels if it doesn't exist when the color is edited.

  • New: Control Rig: Added bidirectional links using asset user data between sequencer skeletal tracks and anim sequences. Users can now create and open these links either from Sequencer or via Animation Editor via asset and toolbar extenders.

  • New: Take Recorder / Animation: Improved logging by adding time for creating animation asset and saving sequences. With LogAnimation Log and LogTakesCore Log.

  • New: Control Rig: Now supports Baking Animation Onto Control Rigs.

  • New: You can now zoom to fit selected sections and keys. Hotkey 'f'・

  • New: Control Rig: Added Sequencer Support for Int/Enum Control types.

  • Improvement: Movie Render Queue now supports a 'stencil'・based layering system to better support unrendered objects.

  • Improvement: Improved usability of dragging and snapping keys in CurveEditor.

  • Improvement: Cine Camera: Updated 16:9 Film SensorWidth and SensorHeight to 24.00 x 13.5.

Static Mesh Editor

  • Bug Fix: The Toolbar is now shown in the Static Mesh Editor Viewport.

  • Bug Fix: Fixed Selection Highlighting in Static Mesh Editor.

  • Bug Fix: Fixed an incorrect calculation of LOD in editor static mesh wireframe and LOD coloration views.

  • Bug Fix: Fixed the "Additional Data" button in the Static Mesh editor, so that the changes are propagated to individual viewports.

  • Bug Fix: Fixed an issue that could cause a large difference in the binary output when saving a mesh multiple times in the editor.

VR-Editor

  • Bug Fix: Added a check to make sure legacy mesh paint mode is enabled before going into VR Mode.

  • Bug Fix: Fixed being unable to exit the VR Editor when using Valve Index controllers.

  • Bug Fix: No longer need to remove one element from the menu due to search element changes.

  • Bug Fix: Fixed VR Editor using invalid Valve Index bindings.

World Browser

  • Bug Fix: Fixed an issue where level browser would lose folder information when switching streaming type.

  • Bug Fix: Fixed an issue where expansion state was not being properly retained in trees with >500 items.

  • Bug Fix: World Composition - Fixed a crash when importing a heightmap using the Import Tiled Landscape feature. If the heightmap filename contained invalid characters, the level package would not be created

  • Bug Fix: Released various fixes to WorldBrowser and scripted streaming level creation to avoid crashing when setting an invalid level name. We've also repaired world streaming levels when they point to an invalid level package.

  • Bug Fix: Fixed an issue with Level Details not using all of its panel's space.

  • New: Level Browser now scrolls to current level when using MakeActorLevelCurrent.

Gameplay Framework

  • Crash Fix: Prevented a crash when spawning an Actor into a Sublevel that is not Loaded/Visible.

  • Crash Fix: Fixed a crash when harvesting a subset of components from an actor such that a harvested component is attached to a component that is not being harvested or already exists in the Blueprint.

  • Crash Fix: Fixed a crash when adding a gameplay tag without a valid tag source selection.

  • Crash Fix: Added the path string arg to a message to fix a crash in UGameplayCueManager::VerifyNotifyAssetIsInValidPath.

  • Crash Fix: Fixed an access violation crash in AbilitySystemComponent_Abilities when using a ptr without checking it.

  • Bug Fix: Changed FComponentTypeRegistryData to only clear the 'needs to refresh'・flag when a refresh actually happens.

  • Bug Fix: Fixed undo/redo of attached components when attached to an Actor which overrides DefaultAttachComponent.

  • Bug Fix: Fixed players standing on an object with static mobility teleporting when the object gains movable mobility.

  • Bug Fix: Fixed a UPawnMovementComponent::SetUpdatedComponent bug causing PawnOwner to potentially mismatch UpdatedComponent when component is pending kill.

  • Bug Fix: Fixed rotating movement component from not working in standalone.

  • Bug Fix: Child Actors created by nested Child Actor Components now inherit transience if an outer Actor is an editor-only Actor.

  • Bug Fix: Cameras now properly detect when shakes with duration end, and mark them as stopped in the preview panel.

  • Bug Fix: Components that are being harvested to create a new Blueprint will no longer perform collision checks as they are temporarily moved as part of the harvesting process.

  • Bug Fix: Fixed horizontal walking velocity calculation when bMaintainHorizontalVelocity is disabled and we call StepUp.

  • Bug Fix: Fixed Camera aspect ratio bug when computing view matrices.

  • Bug Fix: Fixed JumpCurrentCount discrepancy when JumpMaxCount is greater than 1 and there is a correction in the air.

  • Bug Fix: Fixed memory leak with infinite camera shakes staying around even after their blend out time expired.

  • Bug Fix: Implemented better protection against invalid values in lens and filmback settings.

  • Bug Fix: Fixed incorrect Spline Component comments.

  • Bug Fix: Fixed duplicating and copy/pasting of a root component which would result in an unexpected transform. Fixed pasting a component to the root component of an actor attached to another actor attempting to attach to the root of that other actor instead of its own.

  • Bug Fix: Fixed an issue where MaterialParameterName cache was not marked dirty when applying a UMaterialInstanceConstant.

  • Bug Fix: Added logging message of velocity in projectile when it detects that a bounce has failed because the object is stuck in penetration.

  • Bug Fix: Reset physics state when teleporting a player to their initial location causing large physics velocity and collision along the old path to the new location.

  • Bug Fix: Fixed Regression caused by actor overlaps not properly triggering during initial level load even if bGenerateOverlapEventsDuringLevelStreaming was enabled.

  • Fixed incorrect comments in the header file.

  • Bug Fix: Moved an overlap initialization used within AActor::DispatchBeginPlay to its own function for clarity and for any possible future adjustments.

  • Bug Fix: Added client character movement bit sent to server to indicate that we shouldn't perform a dual move inside a FScopedMovementUpdate.

  • Bug Fix: Disabled the filmback preset dropdown widget on CineCameraActors if the sensor size isn't editable.

  • Bug Fix: Fixed a bug where FieldPathProperties did not clear the old field path info before adding the new info.

  • Bug Fix: Fixed a bug where stacking GEs that did not reset the duration on additional instances of the effect being applied.

  • Bug Fix: Fixed an issue that caused CancelAllAbilities to only cancel non-instanced abilities.

  • Bug Fix: Reverted the DeferredRemove where it was before changes in the TickTaskManager.

  • New: Added OnDataTableChanged callback to FTableRowBase to handle changes to rows that aren't imported, this allows doing game-specific fixups to table rows that are edited by the Data Table editor.

  • New: Added a SetRelativeTransform_Direct helper function to USceneComponent.

  • New: Prevented users from setting single-instance shakes on shake source actors.

  • New: Added a templated version of GetOwner.

  • New: Added optional tag parameters to gameplay ability commit functions.

  • New: Fixed subsystems to work similar to Blueprint libraries in the editor and correctly guess whether they are run from a client or server context in the editor. This is accomplished by using new GetGlobalFunctionCallspace and GetCurrentPlayWorld functions that can be used by any class wanting similar logic.

  • New: Added StartTimeSeconds to PlayMontageAndWait ability task and improved comments.

  • New: Exported GameFramework log categories using ENGINE_API.

  • New: Enhanced Input experimental release - A highly configurable replacement input handler supporting collections of dynamically enabled prioritized button mapping contexts and complex customizable input trigger rules.

  • New: Prevented OnUnpossessed from being called multiple times. Blueprint events ReceivePossess/ReceiveUnPossess will only be called when the pawn was successfully possessed or unpossessed. OnNewPawn delegate is only broadcasted when a new pawn has been successfully possessed and when unpossessing a non null pawn. Calling Possess with a null pawn will unpossess any current one.

  • New: Added some utility functions like CallOrRegister_OnCompletedInitialScan to UAssetManager that allow other systems/plugins to depend on asset manager initialization.

  • New: Fixed FCollisionProfileName detail customization to have a reset to defaults button.

  • New: Added tag container "DynamicAbilityTags" to FGameplayAbilitySpec. These are optional ability tags that are replicated with the spec. They are also captured as source tags by applied gameplay effects.

  • New: GameplayAbility IsLocallyControlled and HasAuthority functions are now callable from Blueprint.

  • New: Moved AGameMode::HasMatchEnded up to AGameModeBase.

  • New: Added New methods for ending camera shakes of a given type that originate from a given source.

  • New: Added a multicast delegate to GameInstance that gets triggered when a pawn gets it's controller assigned.

  • New: Added support for PlayScale, PlaySpace, and UserSpaceRotation for camera shake source components.

  • New: Reverted code to set a parent component that was accidentally removed for runtime builds.

  • New: Visual logger will now only collect and store info about instant GEs if we're currently recording visual logging data.

  • New: Added support for redirectors on gameplay attribute pins in Blueprint nodes.

  • New: Added new functionality for when root motion movement related ability tasks end they will return the movement component's movement mode to the movement mode it was in before the task started.

  • New: A new base class for camera shake, called UCameraShakeBase, has been created. It offers a few basic pieces of logic (managing time, blending, play space, and scaling of shake) to make writing sub-classes easier. All the core engine APIs now take and return this base class. The old camera shake class is now renamed UMatineeCameraShake, since it contains a Matinee camera animation. It will make it easy to deprecate Matinee later. Some backwards compatible core engine APIs have been added that take and return the Matinee shake. This makes it possible to have core redirectors in place and not break existing content.

  • Improvement: AFunctionTest now passes messages around by const FString& instead of copying them.

  • Improvement: Improved many source code comments and cvar messages for commonly used gameplay config options to better explain their functionality.

  • Improvement: CurveTables now strip redundant keys at cook time to optimize loading at runtime.

  • Improvement: Consolidated client-server character movement RPCs to a simple function signature using a new extensible struct, to more easily support custom data in RPC parameters without having to change engine source. This allows for customized serialization that can more efficiently pack the data over the wire, and solves some previous ordering issues with ServerMoveOld being sent as a separate RPC function. See the feature docs for more details.

  • Deprecated: Deprecated UWorld::BeginTearingDownEvent in favor of FWorldDelegates::OnWorldBeginTearDown.

Learning Resources

Code Examples

Localization

  • Crash Fix: Fixed a crash in LocalizationCommandletExecution caused by closing the process read and write pipes too early.

  • Bug Fix: Published a fix to stop watching a String Table CSV file when the String Table that loaded it is unregistered.

  • Bug Fix: Updated the localization source code gatherer so that it now reports warnings for localization macros that span multiple lines.

    • Previously the source code gatherer would not collect these since it runs line-by-line and would often ignore them.

  • Bug Fix: Fixed an issue where localization meta-data values with new lines would break the PO file.

  • Bug Fix: Enabled non-EDL archives to load Enabled String Table asset references when EDL is active.

  • Bug Fix: Added support for C++11 raw strings to the localization source code gatherer.

  • New: Added an alternative PO export mode that allows key stabilization to work correctly with Crowdin.

    • This uses the X-Crowdin-SourceKey tag to let Crowdin correctly track a piece of text over time. Crowdin is great for this as it uses a combination of msgctxt and msgid to find the text. The mode then puts the msgctxt into the msgid field and tells Crowdin to use msgstr as the source string.

    • The downside of this is that PO files no longer know which source string UE used to make a specific translation. Because of this UE4 is no longer able to tell whether a particular translation is "stale" when importing it from a PO file.

  • New: Added a way to get the language and locale, that the text localization manager will be requesting during initialization.

  • New: Added a data validator to ensure that localized assets conform to the rules needed to use them at runtime.

  • New: Enabled the AddToolbarExtender for use with StringTableEditor…

  • Improvement: Improved FText::IdenticalTo so it can now perform a deep comparison of the text history (comparing generated texts, like a format result). It can also now perform a lexical comparison of invariant text instances as well. This allows it to quickly compare two cases that would have previously failed the same check due to having different text data instances.

Networking

  • Bug Fix: Addressed an issue affecting level visibility changes received during seamless travel. These are now queued up and executed when the server has completed the travel to avoid issues with clients loading faster than the server.

  • Bug Fix: Fixed a crash where UE would not check NextIndex if valid in APlayerController::GetNextViewablePlayer.

  • Bug Fix: Fixed crash when cleaning up the world on seamless travel.

  • Bug Fix: SceneComponent - Fixed bug where UE might remove locally attached from AttachedChildren array if replicated AttachedChildren are not at once resolvable. This would call OnRep_AttachedChildren multiple times without receiving the array from the server.

  • Bug Fix: Added a check to prevent Actors pending kill from sending RPCs.

  • Bug Fix: Fixed an issue that would snap the Replicated Relative Location to zero. This was happening when UE attached the Component using snap-to-location and it changed the transform before replicating the attachment.

  • Bug Fix: Fixed an issue that caused initial lag statistics to be incorrect.

  • Bug Fix: Fixed a divide-by-zero compile error in ReadFixedCompressedFloat which occurred when instantiated with certain template parameters.

  • Bug Fix: Fixed replication bug causing re-used channels to permanently fail replication by moving closing of acknowledged channel closures to the end of ReceivedPacket. This restores the old behavior allowing channels to process incoming bunches before closing the channel.

    • The new behavior is closer to how it worked when we were sending explicit ack-bunches.

  • Bug Fix: Removed the ApplyStackingLogicPostApplyAsSource function from FActiveGameplayEffectsContainer because the system never called it. We also made the destructor of FActiveGameplayEffectsContainer non-virtual, since adding a VTABLE to a struct if not present in the base breaks reflection.

  • Bug Fix: Prevented calling PreReplicate and comparing properties multiple times for actors during multicast RPCs.

  • Bug Fix: Added a sanity check to prevent child net connections from creating channels.

  • Bug Fix: Fixed a potential underflow crash in the DTLS packet handler.

  • Bug Fix: Made sure we track property changes in Push Model due to mapping or unmapping network objects. This is only necessary for Client-Side Demo Recording.

  • Bug Fix: Prioritized FObjectKey in PushModel tracking instead of just UniqueId. This will guarantee uniqueness across Garbage Collections to prevent potential collisions.

  • Bug Fix: Fixed an issue where if UE added a replicated subobject to an actor that has already had its spawn acked, UE would prevent the actor from ever going dormant.

  • Bug Fix: Stopped NetSerializeStructs from using Property Identical checks on shadow state. Shadow State is not GC safe and this can cause crashes in rare circumstances.

  • Bug Fix: Fixed up a wrongly formatted log message in FObjectReplicator::StartReplicating and made it more descriptive.

  • Bug Fix: If SetReplicates is called on an already replicating Actor, we force property comparisons to capture the role change.

  • Bug Fix: Fixed "attempted to use an out of date NetDriver" log spam that could occur when a client attempted to connect to a new server.

  • Bug Fix: Fixed a regression in UEnum Net Serialization for max values.

  • New: In Networking Insights, specifying -NetTrace=[Verbosity] on the command line now implicitly enables the "net"-trace channel.

  • New: Added CSV Profiler events that can track when a Connection's Actor (or its Pawn) are stuck on network loads for a long time.

  • New: Added the choice to use the control channel for replicating destroyed static actors, rather than having each create its own channel.

  • New: Prioritized RemoveSwap over Remove when removing actors from actor rep lists in the Replication Graph to slightly improve speed.

  • New: Added a way to set certificate lifetime in the DTLS packet handler.

  • New: Made StatelessHandshakeComponent ENGINE_API.

  • New: Changed Fast Array Limits to configurable CVar. Added a log on the server when we know we have exceeded these limits.

  • Improvement: Exposed network dormancy types to Blueprint.

  • Improvement: Increased the default NetDriver bandwidth limit to roughly 100 KB/second. This will help alleviate latency users would experience when reaching the old limit. This new limit is still well within the ability of modern internet connections.

  • Improvement: Added a more explicit warning when UE replicates channel names as full strings and that causes overflows in bunch headers.

  • Improvement: The NotifyStreamingLevelUnload log from net drivers is now in the verbose category, reducing spam when LogNet is set to "log" verbosity.

Replays

  • Bug Fix: Fixed a rare crash when restoring startup actors during replay scrubbing where the actor's level was invalid.

  • Bug Fix: Fixed local replay streamer error on scrub if data did not decrypt properly.

  • Bug Fix: Changed how UE adds some actors to the network object list in replays to reduce the overall size of the list during recording.

  • Bug Fix: Fixed a rare replay bug where dynamic arrays would not be resized properly during playback.

  • Bug Fix: Fixed local replay streamer not raising an error properly when not decompressing or decrypt a chunk of streaming data.

  • Bug Fix: Fixed level script actor names in streaming levels that UE incorrectly mapped to the wrong game instance when using Play-In-Editor replays.

  • Bug Fix: Added better logging for replay header flags during playback. Fixed delta checkpoint loads skipping the last packet in each checkpoint.

  • Bug Fix: Modified serialization of class net cache exports in replays to be properly unique when two classes share a name but have different paths.

  • Bug Fix: Fixed a rare replay crash that could occur if two net export classes had the same name but different paths.

  • New: Added the ability for the replication graphs to record without using a demo net driver. We also added a replay subsystem as an interface for both recording methods. We've also added support for when a dormant channel closes when recording. Lastly, we deprecated most public variables of UDemoNetDriver.

Replication Graph

  • New: Added a call to ShouldReplicateActor in the replication graph when adding a new actor to mirror the functionality of the network object list.

  • Deprecated: Deprecated the GraphConnection's ConnectionId and renamed it to ConnectionOrderNum. We did this to prevent users from thinking the ID persists across the lifetime of the object. In fact, it's only unique during a single tick of the RepGraph and will change during a session as clients join and disconnect.

Socket Subsystem

  • New: Added option to TcpListener that allows to make the socket non-reusable.

Online

  • Bug Fix: Fixed a crash when destroying an online session on iOS.

  • Bug Fix: Fixed a bug preventing UE from adding secondary players to platform sessions.

  • Bug Fix: Fixed a bug preventing platform sessions from clearing in Social Party's replicated data that have no members when we are promoted.

  • Bug Fix: Modified Party Platform Session Monitor to only do a FindSessionById and to not retry on failed session finds. This fixes repeated failed session finds happening on a timer.

  • New: Added optional iOS 13+ support to the WebAuth plugin, which adds the required protocols to handle view support.

  • New: Added directive to force account picker on login in defined platforms.

  • New: Updated IVoiceChatUser instances created with the IVoiceChat::CreateUser API so they are now released with the IVoiceChat::ReleaseUser API. These were previously released by calling "delete" on them.

  • New: Added ::Exec() function to SocialToolkit. SocialManager now attempts to call Exec on all its SocialToolkit instances (after attempting SocialDebug instances)

  • Improvement: Upgraded Android BillingApiV2 to version 3.0.0 to better support in-app purchases.

  • Improvement: Leaderboards now test interface refactor to admit more parameters when querying leaderboards.

  • Improvement: Improved NvEnc and Amf in the AVEncoder module so that they now use the unwrapped DX Device. This fixes pixelstreaming/highlight recording for both NvEnc and Amf when used in together with the EOS SDK. This is necessary because the EOS SDK hijacks the D3D11CreateDevice.

  • Deprecated: IOnlineStore is deprecated, please use IOnlineStoreV2 and IOnlinePurchase instead.

  • Deprecated: Removed deprecated iOS 11 SDK calls from WebAuth, as UE supports iOS 12+ by default.

  • Deprecated: The IVoiceChat interface (and therefore the VivoxVoiceChat implementation plugin) has migrated from using human readable display names as the device selector, to using unique device ids. This fixes issues where a user with multiple, identically named devices could not differentiate between them. New "Get" methods return a structure containing both the human readable display name, and the unique id, and new "Set"・methods take the unique id.

Deprecated methods, and the relevant new method to use instead: GetAvailableInputDevices -> GetAvailableInputDeviceInfos GetAvailableOutputDevices -> GetAvailableOutputDeviceInfos SetInputDevice -> SetInputDeviceId SetOutputDevice -> SetOutputDeviceId GetInputDevice -> GetInputDeviceInfo GetOutputDevice -> GetOutputDeviceInfo GetDefaultInputDevice -> GetDefaultInputDeviceInfo GetDefaultOutputDevice -> GetDefaultOutputDeviceInfo

Deprecated APIs have been replaced with helper methods that adhere to the old contract, to aid migration.

  • Deprecated: Removed unused dead code from the PixelStreaming plugin

  • Deprecated: Changed OSS iOS instances of playerID to use gamePlayerID for iOS 12.4+. This is important because Apple no longer supports playerID in GameKit and for certain iOS revisions this may fail to give a result if used. The replacement gamePlayerID will not give you an id based on the older global playerID but an entirely new value. Be aware that if you have data that relies on the old playerID system you will need to track and migrate this data to the new gamePlayerID upon first successful login.

HTTP

  • Bug Fix: Updated IHttpRequest to use a thread safe shared pointer. This should help fix crashes caused by the system creating requests on threads other than the game thread.

  • Bug Fix: Added a http check in curlhttpRequest to avoid Download Image BP to fail when using a local file instead of a web URL.

  • Bug Fix: JsonSerializer now properly serializes an array of json values instead of treating it as a json object.

  • New: Added move-aware SetContent API to IHttpRequest to avoid copying the payload. This is especially helpful when passing large payloads to the HTTP system.

  • New: Added support for path parameters to the HTTP Server. You can now add routes with path parameters by providing them in the path like so: "/route/object/:objectid"

  • Deprecated: Changed instances of SecTrustEvaluate (which Apple deprecated) to instead use SecTrustEvaluateError when building for iOS 12+, tvOS 12+, and macOS 10.14+.

Online Subsystem

  • Bug Fix: The ToString function now reports the correct version number in all localizations.

  • Bug Fix: Fixed some race conditions and instances of not getting marked as complete in Online Subsystem GDK's async tasks.

  • New: Added Operations Support System (OSS) to support "Sign in with Apple" on iOS.

  • New: Provided a way to pass an obfuscated user id when purchasing using OnlineSubsystemGooglePlay. Google uses this as part of their anti-fraud efforts.

  • New: Added MaxSpectators session setting.

  • New: Moved parsing logic of ReadOnlineSubsystemConfigPairs into a public function ParseOnlineSubsystemConfigPairs.

  • New: Implemented FindSessionById in TestSessionInterface.

  • New: Added IOnlineSession::StartMatchmaking with per-user settings. Not implemented on most platforms.

  • New: OnlineSubsytemGDK has been added to help support new Microsoft GDK platforms.

  • Improvement: Changed iOS instances of playerID to use teamPlayerID instead for iOS 12.4+. This should make it easier to find the right players.

  • Improvement: Moved MAX_LOCAL_PLAYERS definitions to platform extensions to OnlineSubsystem.

  • Improvement: Modified FOnlineEventParms to use FString instead of FName.

  • Improvement: Added new implementation of QueryPresence that takes multiple ids.

WebSockets

  • New: Added error message handling to Matchmaking websocket clients for both client and Dedicated Servers.

  • New: Added flag from client settings to mcp ticket to signify legacy controls were forced to be changed to new control mappings.

XMPP

  • Bug Fix: Added a Tick function in XmppModule to call ProcessPendingRemovals to clean closed xmpp connections.

Paper2D

  • Bug Fix: Hosted mode toolkits can now display in the level editor for modes which are not part of the toolbar, such as Paper2D.

  • Bug Fix: Fixed a bug that caused old assets not to appear in the SpriteEditor if they were unloaded.

  • New: Exposed the GetSpriteColor function for UPaperFlipbookComponent.

Physics

  • Crash Fix: Attempting to generate a levelset from an empty triangle mesh no long causes Editor to crash.

  • Crash Fix: Updating shape bounds with invalid geometry no longer crashes Editor.

  • Crash Fix: Running scene queries against clustered objects no longer crashes Editor.

  • Crash Fix: Converting a static mesh with null materials into a Geometry Collection no longer causes Editor to crash.

  • Crash Fix: Chaos Niagara interface binding to events for non-active editor solvers no longer causes Editor to crash.

  • Bug Fix: Unculled fields no longer incorrectly apply dynamic parameters to inactive geometry collection particles.

  • Bug Fix: Holes are now properly supported in Chaos landscapes and navigation meshes.

  • Bug Fix: Geometry collection collision filters now correctly filter down from the component settings.

  • Bug Fix: GC scene proxy initialization for RHIs that do not support no-overwrite locking now function properly.

  • Bug Fix: Skipping navigation generation for geometry collection components when they have no available rest collection now works properly.

  • Bug Fix: Disabled particles now function correctly. They no longer get pushed into spatial acceleration structures, fixed cluster particles, and global objects or skip collision resolution while slowing down other queries.

  • Bug Fix: Geometry Collection non-threadsafe collection on DDC cook now functions correctly.

  • Bug Fix: Cluster implicits and initial cluster transforms now function correctly.

  • Bug Fix: Underlying Cull Field now correctly reports the type so the operator nodes can work properly with culled data sets.

  • Bug Fix: Resolved several LiDAR-related line tracing issues.

  • Bug Fix: External strains no longer incorrectly always trigger breaks in geometry collections.

  • Bug Fix: Geometry Collection non-threadsafe code in connectivity graph generation now functions correctly.

  • Bug Fix: Update Body Scale now correctly handles tri-meshes that were created from an externally owned mesh.

  • Bug Fix: Geometry Collection cluster transforms are now correct after changing leaf node transformations for fractured pieces.

  • Removed: Collision particles for Chaos unions and re-enabling child collisions for unions passing through the child simplicials.

  • Bug Fix: Cluster unions are no longer incorrectly filtered out of collision detection due to internally created clusters not having valid collision filter data.

  • Bug Fix: Phantom collisions in Chaos now function correctly. They no longer remove dynamic particles from a disabled active particle list and no longer force a dirty state on every Geometry Collection particle during Physics State Push.

  • Bug Fix: Material face remapping now works correctly when cleaning Chaos triangle meshes.

  • Improvement: Physics Material is now part of the Physics Core module so you can use it outside of the Engine.

  • New: Using physical materials now requires Physics Core as a module dependency.

  • New: Geometry collection now uses Unreal physical materials rather than the obsolete Chaos physical materials.

  • New: Landscapes that are re-topologized now have a new Chaos mesh collider.

  • New: Added an Experimental Chaos Caching plugin to manage and record and playback physical simulations. Currently implemented for static mesh and geometry collection components.

  • New: Heightfields in Chaos level-set collisions now can use the PhiWithNormal setting.

  • New: Reimplemented analytic solver floor for custom Chaos solver actors.

  • New: Implemented basic network replication for geometry conditions to correct the client. The replication can cause differing results with stacked objects since the client can run simulations between updates without prediction.

  • New: Chaos Solver Actor is now refactored and solver properties are now their own object. Additionally, the enable/disable is now replaced with the ability to "pause" a solver. A paused solver ticks at Dt=0 and still runs through the advance to update other systems, such as spatial acceleration.

  • New: Implemented Levelset sweep and overlap functionality.

  • New: Added Levelset overlap implementation

  • Improvement: Optimized Collision Detection through replacing expensive thread-safe queues with a pre-allocated cache that does not require synchronization and improved collision detection and gather to be move-aware and avoid repeated copies of contact data.

  • Improvement: Contact graph generation in Chaos is now optimized.

  • Improvement: Chaos field command types now use reduced evaluated sample sets.

  • Improvement: Scene queries for children of internal clusters are now enabled in Chaos.

  • Improvement: Volume levelset approximations are now closer to the actual value; however, it is not completely accurate at this time.

  • Improvement: Geometry collection collisions now default to implicit-implicit to match the default collision Box type.

  • Improvement: Union group generation in Chaos clustering no longer submits breaking events when releasing from a static cluster when building internal clusters.

  • Improvement: Added pre-skinned bounds for Geometry Collection render proxies.

  • Deprecated: The APEX Destruction plugin is now deprecated.

Clothing

  • Crash Fix: Restoring the cloth LOD index after undoing Remove Cloth to prevent simulation no longer crashes Editor.

  • Bug Fix: Resolved an error that occurred when deleting a duplicated SimpleCloth asset.

  • Bug Fix: Resolved an error when loading 4.24 cloth assets that displayed the message, "Attempting to replace an object that hasn't been fully loaded: ClothConfigNv object."

  • Bug Fix: Fixed an empty cloth configuration migration issue when reloading 4.24 assets that were caused by a deprecated config property having its UObject name recycled.

  • Bug Fix: Changing buffer buckets now size correctly when using 65k cloth.

  • New: The Clothing Simulation Factory property in the Skeletal Mesh Component will automatically change at run time to the first available factory that is compatible with the included cloth assets. This allows to run Chaos Cloth simulation on levels setup with the ClothingSimulationNv when PhysX is disabled, and vice-versa.

  • New: A warning message now appears in the Mesh Editor viewport when the Chaos Cloth simulation lost impulses due to running slow or being teleported

  • New: Cloth diagnostic and profiling functions are now part of the Clothing Simulation Interactor in Chaos Cloth, which means they can be called in Blueprints. This feature is not compatible with PhysX.

  • Improvement: Mesh-to-mesh skinning now supports multiple influence triangles. This change allows the use of multiple low-res/sim triangles to influence a high-res mesh vertex, and you no longer need to bind mesh vertices with barycentric weighting.

  • Deprecated: Removed the uninitialized member bEnableClothLOD_DEPRECATED from the Skeletal Mesh section serialization.

Collision Detection

  • Bug Fix: In the Details panel, the "Reset to Default" buttons on the mesh collision preset "Object Response"・channel now functions correctly.

  • Bug Fix: The Reset to Defaults button now works correctly on "Object Response" channel rows in the collision property details.

  • Crash Fix: On Create Physics State function of the Landscape Heightfield Collision Component no longer causes Editor to crash.

  • Improvement: Updated an asset warning for the Cook Collision Data function in the Landscape Heightfield Collision Component.

  • Improvement: Clustering contact rejection now considers the velocity along with the collision rather than the impulse of the collision.

Linux

  • Bug Fix: Resolved an issue with Linux with the SegFault in source filtering and notification manager when closing QAGame Clear Regional Lists at the pre-exit instead of during the global dtor.

  • New: Building with a -gbd-index with Clang v9 or above now cuts symbol loading time by more than half (45 seconds to 17 seconds).

  • New: Added the No Relative Mouse Mode command-line option to support remote VNC.

  • New: Lld linker is now supported with Clang v9 and above.

Rigid Bodies

  • New: You can now Reset Geometry Collections to empty (pre-fracture state) through the Reset button on the Fracture Mode toolbar. Reset only works with assets that are generated from the Geometry Collection.

Platforms

  • Bug Fix: Check if the platform's ini name is valid (not empty) before trying to load the target platform module. If the platform's ini name is empty and it drops down to using [IniName]+TargetPlatform it will try to recursively load TargetPlatform. This can happen in cases where the AllDesktopTargetPlatform module is not available.

  • Bug Fix: When using the HLSL Cross Compiler, the Shader Compiler Workers (SCW) no longer use more memory than was available on the PC. SCWs are now recycled after each job. You can also now enable the ability to restrict the SCW count based on the memory on non-build machines.

  • Bug Fix: Fixed an uninitialized variable in FShaderPipelineCache that was causing stable cache load failures on some computers.

  • Bug Fix: Released a fix for a console command not properly allocating the right amount for the string. This resolves a potential buffer overrun crash.

  • Bug Fix: Added a fix for PSO Cache not properly setting the mask when no cache is present but game mask usage is enabled.

  • Bug Fix: Fixed an issue concerning invalid PSO masks when the GameMask is disabled by default.

  • Bug Fix: Fixed the + issue on AdditionalRestrictedFolders in DataDrivenPlatformInfo.ini once and for all.

  • New: If an appropriately named platform directory exists under Platforms, it is assumed the project supports the named platform.

  • New: The ISPC compiler was updated to version 1.13.

  • New: CountLeadingZeros and FloorLog2 were optimized.

  • New: Editor Preview Rendering Level platforms are now extensible using DataDrivenPlatform.ini.

  • New: Made the per-platform properties evaluate to the current Preview Rendering Level in the editor.

  • New: Added platform extensions support for installed builds BuildGraph changes:

    • now accepts a semicolon-delimited list of includes to process.

    • This allows a list of includes to be determined dynamically.

    • Pass DataDrivenPlatformInfo names to BuildGraph scripts.

  • New: Made modifications to allow support for multiple build distribution backends. From now on, adding support for a new build distribution backend like XGE can be done by writing a new plugin. To support this we also renamed all classes/structs involved in generic tasks to remove XGE from the name, and we wrapped XGEControllerModule into a plugin. Additionally we exposed methods in Shader Core to figure out the real path from virtual paths for shaders, and added a method so each target platform can define their compiler dependencies.

  • New: Optimized the Expand command of ShaderPipelineCacheTools commandlet so that it takes less time to finish and uses less memory.

  • New: Added support for data sets larger than 2 GB to the ShaderPipelineCacheTools commandlet.

  • New: Enabled all categories in persistent storage manager and set all quota to unlimited. Access to containers in persistent storage manager is not thread-safe. This makes sure all files can still be written to persistent storage without any extra restriction, but analytics will still be able to collect usage information for each category.

  • New: Added a CVar per console to allow gamepad control of the cursor without requiring a mouse. These include: GSonyAllowGamepadControlOfCursor, GSwitchAllowGamepadControlOfCursor, and GXboxOneAllowGamepadControlOfCursor.

  • New: Changed the verbosity of detailed material info printed to the login ShaderPipelineCacheTools commandlet to not spam the log unnecessarily.

  • New: Improved platform extension plugin name error to indicate the proper fix depending on what is wrong.

  • New: UE no longer scans for .uplugin files for platform extensions where there is no support for the platform compiled into the editor. This helps with build machines that don't have NDAd platform support that makes precompiled binaries, but users sync those platforms so they have the .uplugin locally. We've also added a FDataDrivenPlatformInfoRegistry::HasCompiledSupportForPlatform() function that can be used in other places to detect if a platform has been compiled or not.

  • Improvement : Platform extension changes:

    • Now uses <Option> to expose a command-line option enabling the platform.

    • This restores original command line args to existing platforms.

    • Test that platform is enabled in each of the macros defined so that the base script doesn't need knowledge of what platforms are enabled.

  • Improvement: Performed a big code reorganization for PlatformExtensions (Engine/Platforms/…) and Restricted (for instance, Engine/Restricted/NotForLicensees/… and Engine/Restricted/NotForLIcensees/Platforms/…). This is to prepare a cleaner p4 permissions structure in UE5. Projects can also have a Platforms directory to put platform specific files into, but it is not required you re-layout your directories to match.

  • Deprecated: Removed deprecated GetUniqueDeviceId() from UE4. GetDeviceId() now returns an empty string on un-implemented platforms, instead of falling back to GetUniqueDeviceId(). This would end up returning a constant MD5 hash of an empty string on platforms that don't implement GetMacAddress(). GetHashedMacAddressString() will now return an empty string if the MAC address is not implemented on the platform.

  • Removed: Deleted fake XXX platform extension.

All Mobile

  • Bug Fix: Changed IntelISPCTexComp to use 6x6 for ASTC normalmap compression.

Android

  • Bug Fix: Fix to create video track info if unable to run media extractor (usually network streams),

  • Bug Fix: Corrected calculation of OBB per file cost.

  • Bug Fix: Fixed a crash in AndroidMovieStreamer if no PAK files to search. We also fixed the same issue in AndroidMediaPlayer.

  • Bug Fix: Addressed a handle exception that can occur when attempting to clear keyboard focus after having used autocomplete.

  • Bug Fix: Disabled --gc-sections on link if not compiling with -ffunction-sections and -fdata-sections for Android.

  • Bug Fix: Ensured android java restarts only happen from the UIThread. Fixes possible race conditions in which startActivity could create the new activity in the same process as the outgoing activity and then exiting process.

  • Bug Fix: Fixed a bug when GameThread will be displayed as Thread-2 and UI Thread will be displayed as "MainThread-UE4" in Android Studio.

  • Bug Fix: Added support for Android SDK Cmake for building PhysX for Android.

  • Bug Fix: Fixed incorrectly configured GL shader programs when an evicted binary program is restored from the BSS cache.

  • Bug Fix: Disabled autofill manager in GameActivity to prevent Android 10 crash.

  • Bug Fix: Performed an update to correctly track OpenGL resources in ELLTracker::Platform.

  • Bug Fix: Disabled WRITE_EXTERNAL_STORAGE permission if not needed (shipping and externalfilesdir enabled).

  • Bug Fix: Linking a compute shader will now print an error message only in Debug Android builds.

  • Bug Fix: Fixed random memory corruption when using BP arrays on Android armv7 platform.

  • Bug Fix: Enabled universal APK by default for Android. Bundles still need to be enabled for this to take effect.

  • Bug Fix: Fixed an issue where enabling Vulkan validation layers would cause a crash on Android devices

  • Bug Fix: Fixed an app crash when exporting a texture through 'Export to Disk'・BP node on Android.

  • Bug Fix: Fixed inverted scene captures with Android GLES RHI. The "Disable Flip Copy GLES" option added in 4.25 introduced this regression as the flag was being treated opposite to what was intended. The 4.26 behavior is now the same as 4.24.

  • Bug Fix: Fixed crash that could occur when invalid memory is encountered during stack walk.

  • Bug Fix: Released a fix for an Android build issue where gradle was being run even if the apk was up to date due to some incorrect file paths.

  • Bug Fix: Changed android physical memory usage reporting on Android 10+ to use VmRSS. This is due to getProcessMemoryInfo only updating once every five minutes with Android 10.

  • New: UE will now report an error if x64 or x86 is the only platform and in binary build.

  • New: Added Android Vulkan frame pacer to support switching native display refresh rates.

  • New: Added the a.SupportNonVSyncMultipleFrameRates console variable to support CPU-based frame pacing to target frame rates that are not a multiple of any available vsync rates.

  • New: Added Android Platform support to query available screen refresh rates, and to set the current screen refresh rate.

  • New: Updated Network Changed Manager to provide network connection type. The Network Changed Manager is the best place to know what kind of connection type we have. This change introduces a Network Transport Type enum provided in the On Network Available callback of the Network Connectivity Client. The callback is called any time the transport type changes.

  • New: Added more UPL plugin injection points for Android Activity and Application.

  • New: Exposed memory warning state received from Google's MemoryAdvice library to CSV profiler as an integer value. This graph can be found under Android Memory section in your CSV report. This library might not be reliable on certain devices and it's output should be used as a guideline, not a hard rule. The warning state integer can have 3 states:

    • 0 (OK)

    • 1 (Approaching memory limit)

    • 2 (Critical, application can be OOM killed any time).

  • New: Added support for Texture2D arrays in OpenGL.

  • New: Exposed Android CPU Temperature (STAT_CPUTemp) and Thermal Status (STAT_CPU_ThermalStatus) to Unreal Insight and CSV profiler. In Unreal Insights these stats can be found under STATGROUP_AndroidCPU. In CSV reports these stats can be found under "Android Thermals".

  • New: Cleaned up OpenGL ES implementation and based it on ES3.1 spec. NDK minimum version is set to 21 (link against libGLESv3.so ).

  • New: Added option for up to 2 overflow OBB files if Patch OBB enabled.

  • New: Added GL RHI support for creating VB/IBs WithoutNativeResources and switching of VB/IB underlying resources. Required for mesh lod streaming support.

  • Improvement: LibPNG has been updated to version 1.6.37.

  • Improvement: FreeType 2 for Android has been updated to version 2.10.4.

  • Improvement: libsndfile has been updated to version 0.1.9.

  • Improvement: Shader models that are not compatible with Mobile feature levels will now fallback to a default shader model and display a warning in the console log. In the Defaults for your material, you can set the Shading Model to From Material Expression to add a Shading Model pin to the output node. You can then use a Feature Level switch to control the Shading Model.

iOS

  • Bug Fix: Fixed a crash in FIOSInputInterface::SendControllerEvents due to a call to UIInterfaceOrientation from the game thread

  • Bug Fix: Removed FullHDR as a reflection capture format on iOS. This prevented full hdr data from being stored in cooked data then discarded after load, which was causing memory spikes on load.

  • Bug Fix: Adjusted compression on iOS to fallback to a supported format instead of leaving texture uncompressed when compression is set to a BC7 format.

  • Bug Fix: Fixed an iOS GPU crash when PostProcess material uses a custom stencil while project sets r.CustomDepth=1.

  • Bug Fix: Fixed an issue where AnimSequence assets in DLC packages could not be correctly loaded on iOS.

  • Bug Fix: Fixed an iOS GPU crash when doing scene captures with MSAA enabled.

  • Bug Fix: Fixed a number of minor issues to enable the use of the Address Sanitizer with iOS.

  • Bug Fix: Added a fix for UObject invocation on non-game thread which could cause a race condition or crash.

  • Bug Fix: Added a device profile for TVOS that inherits AppleTV settings.

  • Bug Fix: [IOS] Added a check if the bundle exists before trying to copy manifests. This prevents an error being displayed in the log before staging.

  • New: Added a batch file in Engine\Extras\iTunes that will set the required file permissions to allow Unreal Engine to communicate with iTunes installed from the Windows Store.

  • New: Added code to hide the white bar indicating where to swipe the Home gesture on iPhone X and later devices.

  • New: Added Multi User support on tvOS.

  • New: Removed iOS 6 to 11 references, made iOS 12 minimum support iOS version, and added iOS14.

  • New: Removed ios 11 support and set ios 12 as default in webauth.

  • New: Fixed deprecated behavior of Menu button on iOS and tvOS.

  • New: Modified how provisioning profiles are selected for signing of IPAs on iOS. Newer profiles are now checked first by sorting the complete profile list into descending order based on creation date. This addresses the issue where people can recreate a profile (for example, by adding a new device or changing entitlements), reimport it, and still have the old profile be selected because the older file was returned first by EnumerateFiles.

  • New: Added device profile detection support for iPhone 12, iPad Air 4 and iPad 8 devices. Mapping of the iOS hardware string (such as "iPhone13,4") to a specific device profile is now performed using regular expressions in the [IOSDeviceMappings] section of BaseDeviceProfiles.ini for easier updating.

  • New: Added a setting to the ARKit plugin that allows projects to choose whether they may only be installed on ARKit-compatible devices. The setting is True by default (requiring AR capable devices) which is the existing behavior, and because apps can remove hardware requirements like this in updates but not add them.

  • New: Removed arm64 references as they're now the only supported architecture on iOS

  • New: Added support for the Metal Compiler Tools for Windows, and modified the hash key to be based on the compiler version instead of the Xcode version.

  • New: Attempting to bind a memoryless texture is now a hard failure.

  • New: We've moved all code into the .text segment on ARM.

  • New: Changed the memory statistics to use the OS jetsam values for determining total memory available.

  • New: Removed internal argument buffer emulation. This saves about 1.7MB on average under heavy load.

  • New: We now triple-buffer dynamic and volatile allocations. This pushes all transfer buffers (for platforms that use a staging buffer to blit into private buffers) into a short-lived frame allocator pool.

  • New: Memory usage is now obtained via usage of IOS 13 API, os_proc_available_memory(). This provides more accurate accounting of the memory left until being jetsamed.

  • New: Addied iPad Pro 2020 device profiles (12.9 and 11).

  • New: We now allow the use of presentAfterMinimumDuration Metal API to smooth out the framerate on IOS.

  • New: [IOS] We've rebuilt IPhonePackager with new code to support Apple Development and Distribution certificates.

  • New: [IOS] Added support for Apple Development and Distribution certificates.

  • Improvement: Performed code cleaning and an overall refactor of ios14 and tvos14 input interface requirements (glyphs and current controller feature).

  • Removed: The Apsalar plugin has been removed. It had been relying on a deprecated SDK and APIs and had been non-functional for some time.

Linux

  • Bug Fix: Implemented GetWindowUnderCursor for Unix Platform.

  • Bug Fix: Updated README.md for Linux build.

  • Bug Fix: Fixed SegFault in source filtering and notification manager when closing QAGame Clear RegionalLists at pre-exit instead of during global dtor when many objects / modules have been freed. Call RemoveAll on FilterCollection->GetSourceFilters updated in PreExit instead of global dtor when many objects / modules have been shut down.

  • Bug Fix: For Unix, fixed FUnixPlatformMemory::GetStats() that always returned 0 when memory was over 10.24gigs.

  • Bug Fix: UE no longer hard codes c14 in LinuxToolchain as the default c standard.

  • Bug Fix: Added SP_OPENGL_SM4_REMOVED to IsDeprecatedShaderPlatform(). This fixes assert when getting shader stats (called from FShaderCookerStats::Initialize).

  • Bug Fix: Added error messagebox when vkGetPhysicalDeviceSurfaceSupportKHR fails (no present support).

  • Bug Fix: For Linux Vulkan, fixed amdgpu mesa crash where drawinstance call is outside render pass enabling shader complexity view.

  • Bug Fix: Update translucent rendering fix to use BeginRenderingTranslucency.

  • Bug Fix: Honor UE4's Mono-build environment using Build.sh .

  • Bug Fix: Fixed BC6H/BC7 texture formats not being available for Linux.

  • Bug Fix: Fixed submenus closing causing main context to close.

  • Bug Fix: Fixed focus issue where Windows with never activate policy were being set to active.

  • New: Updated Linux SDL2.0.10 to SDL2-2.0.13-13784. Also we removed Epic opengl and emscriptem changes. Source snapshot for SDL 2.0 (Updated Wed Apr 29, 2020) https://www.libsdl.org/hg.php .

  • New: Enabled ssse3 by default for Linux x86.

  • New: Build ShaderConductor for Linux Script now uses v16 Clang 9.0.1, and works around incorrect llvm-tblgen location. This also adds declspec guid -fms-extensions for build error.

  • New: Updated Linux SDL2.0.10 build files to SDL2-2.0.13-13784.

  • New: Added support for multithreading in forked processes. Use -PostForkThreading when SupportsMultithreading() is false to allow multithreading in forked processes. Forked processes do not inherit threads from the master, so this keeps the master process in single thread mode but transforms the RunnableThreads into real threads on the forked version. Use FForkProcessHelper::CreateForkableThread to use this feature. ForkableThreads will behave correctly according to the environment they are called in (singlethread, multi thread, forkable). SyncEvents created in -PostForkThreading environments are real events on the master process (Win, Unix platform only).

  • New: Added TaskGraph.ForkedProcessMaxWorkerThreads cvar to directly control the number of worker threads spawned on forked processes that enable multithreading.

  • New: TaskGraph can now be multithreaded on a forked server with -PostForkThreading. To do this the TaskGraph needs to be shut down and recreated entirely by the forked process for the switch to occur. The functionality can be disabled via "TaskGraph.EnableForkedMultithreading 0" if needed.

  • New: Linux AArch64 libs for FreeType2 v2.10.0, ICU 64.1, and HarfBuzz 2.4.0 now include BuildForLinuxAArch64.sh cross compilation scripts. This also adds LinuxAArch64 back to installed engine builds.

  • New: Added bGdbIndexSection bool to LinuxToolChain.

  • New: Changed default linux directory permissions to 775 from 755 to make working with them easier.

  • New: You can now use msbuild in mono for Linux when using an installed copy and mono >= 5.0.

  • New: Linux directory watcher optimizations and fixes for cases where we're running with "virtual" layers in the platform file (i.e. pak files).

  • New: Added a skip linux UE4_DO_ROOT_PRIVILEGE_CHECK check for programs.

  • New: Updated to new LLVM V17 Clang 10.0.1 toolchain.

  • New: Moved to using llvm-objcopy for objcopy and strip.

  • New: Installed Linux builds now assume a bundled toolchain.

Mac

  • Bug Fix: Fixed build for Xcode 12.1.

  • Bug Fix: Updated Mac Chromium Framework binary with a version that fixes a crash on macOS 10.15 Catalina. This was caused due to CEF's use of TSM API outside of the main thread.

  • Bug Fix: Fixed flickering decals in mobile preview.

  • Bug Fix: Changed Mac toolchain to use relative paths where possible when linking. This solves the "Argument list too long" error during linking.

  • Bug Fix: Released a fix for a Metal validation failure. In MetalStateCache, make sure that the color attachment's slice is always set to 0 for 3D textures, as they don't support rendering to multiple slices.

  • New: Updated third party binaries required to support the majority of Mac client targets targeting Apple Silicon.

    • Remember that Steam SDK does not have an ARM64 slice and will not link to an ARM64 or fat target.

  • New: The minimum macOS version required has been rolled forward to Mojave 10.14.

  • New: Removed internal argument buffer emulation.

  • New: Updated FMacPlatformProcess::GetDllHandle() to accommodate macOS 11 Big Sur.

  • New: Enabled Metal RHI runtime virtual texture support.

  • New: Fixed an error adding Android tools to path in the SetupAndroid.command shell script.

  • New: Added support on Mac and Linux for user-defined .unrealrc files that allow developers to specify environment variables for UBT and UAT scripts. .unrealrc files in the home and the workspace directory will be applied before the editor, UnrealBuildTool, UnrealAutomation tool, etc are run.

  • New: -Wno-range-loop-analysis is now set when building iOS / Mac with Clang 12.0.0 or higher (Xcode 12.00). This should prevent warnings when ranged loops use copies and not references. Note that all instances have been fixed up, the warning is disabled as these issues are easily introduced but only Clang on Apple platforms currently warns about them.

  • New: Removed VR support for Mac. No longer supported and not compatible with current/future Mac updates.

  • New: Improved the GPUBenchmark accuracy on Mac.

  • New: Enabled MacClient target platform on windows.

Steam OS

  • Bug Fix: Changed the desc status for hidden in the Steam achievements query.

VR

  • Bug Fix: Fixed a bug where Windows Mixed Reality hand joint transforms were always returning an invalid radius.

  • Bug Fix: Fixed a bug where the VR Mode Vive touchpad was not scrolling smoothly.

Windows

  • Bug Fix: Fixed FWindowsPlatformProcess::GetPerFrameProcessorUsage to work with more logical cores.

  • Bug Fix: Fixed handling of UNC paths on Windows.

  • Bug Fix: Fixed a bug in ShaderPipelineCache commandlet that was making it generate too many PSO permutations on D3D12

  • New: Clang builds on Windows now build with the -mssse3 flag to match Visual Studio 2019 SSE support.

  • New: Made FD3D12GPUFence available externally.

  • New: Changed the File|Package menu for Windows to only show 32 or 64-bit options, based on the bTarget32Bit Windows project setting. It now won't cook with Win64 but run with Win32.

  • New: Made ProjectLauncher/UnrealFrontend/LaunchOn respect the Target32Bit windows project setting.

Rendering

  • Crash Fix: Fixed a crash that occurred when resizing a UTextureRenderTarget2D with autogenerate mips enabled.

  • Crash Fix: Corrected a startup crash that occurred when -disable-platform-chunk-install was enabled

  • Crash Fix: Implemented a fix for a rare crash, which happens for users with multiple adapters, where not all of them support ALLOW_TEARING.

  • Crash Fix: Vulkan: Fixed the handling of FRHITextureReference. This corrected a crash which occurred when importing UDIM textures.

  • Crash Fix: Corrected a crash that would occur if a game started up in a specific mode, and clicked in another window. This would cause DXGI_ERROR_INVALID_CALL, which would cause the engine to halt.

  • Crash Fix: Fixed a crash on certain platforms when running with "-onethread" caused by incorrect reference counting in FSlate3DRendering.

  • Crash Fix: Fixed a crash in the Hierarchical Instanced Static Mesh of Mesh with MinLOD set to 1 or higher.

  • Crash Fix: Fixed a potential crash in Sky Light when attempting to dispatch CDF compute shaders before the shader map was ready.

  • Crash Fix: 64bit math is now used for calculations when building large streaming virtual textures, which prevents crashes from 32 bit overflow errors when building the textures; out of memory errors during texture compression for 64K textures remain possible.

  • Crash Fix: Fixed a crash that occurred during ClearUAV in OpenGL ES due to the UnrealFormat being set incorrectly in the constructor of the FOpenGLStructuredBufferUnorderedAccessView.

  • Crash Fix: Fixed a crash on macOS when setting the budget too high.

  • Crash Fix: Fixed a crash when a texture was not null but the internal referenced texture was. This was handled individually by some RHIs but now it is managed at a high level.

  • Crash Fix: There will no longer be an attempt to add shader virtual paths if shader compilation was disabled on the command line. This avoids some crashes in editor builds that don't have a shader source.

  • Bug Fix: Fixed cloud interaction with opaques being biased by back and forth deviceZ/linear depth transform. Also unified the code and tested translucent rendering and intersection when using Translucent.ScreenPercentage < 100.

  • Bug Fix: Now uses the same reflection environment shader permutation for deferred reflections as for SSR. Fixes deferred reflections on clear coat materials.

  • Bug Fix: Fixed leaking frametempmemory in Vulkan.

  • Bug Fix: For the Pixel Streaming Signaling Web Server, add an error code for the disconnect player event.

  • Bug Fix: The DeviceRemovedReason is now logged to verify the device has not been hung.

  • Bug Fix: Vulkan textures created with TexCreate_CPUReadback are now created as buffers. This allows for support for mip levels on hardware that does not expose this feature. Added basic Transitions to LandscapeEditoLayers, so it passes validation.

  • Bug Fix: Fixed an issue with resource barriers being nonsense. Corrects an issue with subsurface scattering not working correctly on AMD.

  • Bug Fix: Added fixes to RendererScene.cpp.

    • Fixed sublevel loading.

    • Fixed a crash bug in the shadow generation code.

    • Added a missing FMemMark in FAsyncCreateLightPrimitiveInteractionsTask.

  • Bug Fix: Fixed deferred reflection reflection capture compositing on ray miss.

  • Bug Fix: Fixed an issue in DX11 RenderTarget binding. When Pixel Shaders write to a variable number of render targets within a pass and use UAVs, they end up overwriting bound RTVs. This caused issues with Objects -not- writing in the subsurface gbuffer, but binding a UAV for Virtual Texture feedback. This would leave the subsurface gbuffer unbound.

  • Bug Fix: Fixed the mGPU visibility mask when initializing FD3D12ResourceAllocator and FD3D12FastAllocator.

  • Bug Fix: Vulkan: fixed Uniform buffer allocations being released too early during the first few frames.

  • Bug Fix: Vulkan: Fixed leaking Pipeline and RenderPass objects, which occurred when multiple threads were creating objects with the same hash. Corrects a Vulkan validation error VUID-vkDestroyDevice-device-00378. The Renderpass fix was reapplied to work post barrier refactor.

  • Bug Fix: Fixed a bug with HDR UI composition where the render target was not being cleared if there were no slate render batches, leaving stale data when there are no UI elements on screen. This caused a black screen in ShooterGame.

  • Bug Fix: Vulkan UAVs now all get identity swizzle, as this is the only thing supported. This fixes a validation error.

  • Bug Fix: Fixed per-vertex lighting in forward shading when separate ratio is not 100.

  • Bug Fix: Fixed the issue causing the PVS-Studio Warning: CanvasRenderTarget Pointer Utilization Before Being Verified Against NullPtr.

  • Bug Fix: Added a dummy back buffer texture which is used to bind the current back buffer on the RenderThread.

    • On the RHI thread the actual current back buffer texture is retrieved from the viewport.

    • Removed the independent RenderThread and RHIThread back buffer index which might not be incremented in sync causing DXGI errors and lost device issues.

    • The expected back buffer index is still used to inform the mGPU what GPU will be used for the present, this is kept in sync when the present will be skipped.

  • Bug Fix: Re-enabled the GetDynamicMeshElements path in FInstancedStaticMeshSceneProxy for test and submission builds which was previously incorrectly disabled. This fixes a bug which prevented instanced Static Meshes with dynamic relevance from rendering.

  • Bug Fix: Fixed an issue with the D3D12 Query heap with a dangling resource on outstanding queries after a heap resize, and fixed the outstanding open query count to track if it's from the current active heap.

  • Bug Fix: Rendering editor selection for mesh batches without a PrimitiveSceneProxy is now prevented.

  • Bug Fix: Fixed a potential race condition when trying to render data that was not ready yet.

  • Bug Fix: Added an EndFrame and BeginFrame when performing garbage collection on slow running tasks (using the increment frame fence value which can currently be used to track internal resource lifetime). This corrects the out of memory error on D3D12 when exporting animations and other long running tasks.

  • Bug Fix: Fixed Vector Field debug visualizations.

  • Bug Fix: Fixed painted vertex loading in the Editor's -game mode.

  • Bug Fix: Fixed buffer visualization for the Overview rendering mode.

  • Bug Fix: Fixed an issue with transparent/translucent materials when forward shading is enabled and r.SeparateTranslucencyScreenPercentage is not 100.

  • Bug Fix: Fixed arrow perspective scaling when its origin is behind the view camera.

  • Bug Fix: Updated the RenderDoc plugin to support executables from RenderDoc 1.0 or higher.

  • Bug Fix: DirectX RHIs now fully supports MSAA textures.

  • Bug Fix: Fixed the UStreamableRenderAsset::IsTextureFullyStreamed not taking into account LOD Bias

  • Bug Fix: The loading of resolutions added by Dynamic Super Resolution now operates correctly.

  • Bug Fix: Pre-exposure for debug visualization modes now works correctly…

  • Bug Fix: Fixed issues with ByteAddressBuffers not calculating the correct offsets and sizes.

  • Bug Fix: Fixed MSAA on Vulkan.

  • Bug Fix: The overlay menu button will now transition on click from + to x when the menu is opened / closed.

  • Bug Fix: Fixed potential race condition when trying to render data that was not ready yet.

  • Bug Fix: Corrected a malfunction caused by Pixel Streaming always assuming a physical mouse would be attached, even when running on a cloud machine or in Windows session 0 with no physical mouse. The bPixelStreamerMouseAlwaysAttached setting can override this behavior.

  • Bug Fix: Fixed pre-exposure for convolution bloom in scenes with physical light ranges.

  • Bug Fix: Fixed the pipeline cache file GUID reporting in OpenPipelineFileCache.

  • Bug Fix: Fixed CleanUpWorld to release resources when closing an editor window. This prevents leaking of two things: RenderTargets, which are referenced in uniform buffers, and particle buffers from FXSystems.

  • Bug Fix: Delayed deletion of all buffer objects. This fixes a rare GPU corruption issue that occurred when buffer memory was reused.

  • Bug Fix: GeometryCacheSceneProxy now correctly marks lighting channel view relevance.

  • Bug Fix: Fixed the HLSLcc shader compilation by correcting ensure logic in ir_visitor_status visit_enter. Previously, the ensure logic may have triggered incorrectly, this has been remedied.

  • Bug Fix: Fixed the stat drawcount command for D3D12.

  • Bug Fix: Fixed a typo, the initial layout transition wasn't actually using the intended layout type

  • Bug Fix: Removed a redundant editor primitives mesh pass.

  • Bug Fix: Fixed an issue where custom depth meshes were using stale GPUScene data.

  • Bug Fix: Fixed issues with the clear coat shading model, in order of severity:

    • Removed energy normalization on the diffuse contribution.

    • Removed dependence on negative NoL and NoV when computing transmission.

    • Modified SphereSinAlpha to account for top-coat and bottom-coat roughness when using spherical area lights.

    • Eliminated the glossy contribution of bottom-coat for clear coat dielectric materials (noting that IOR ratio (Eta) approaches 1.0).

  • Bug Fix: Fixed an issue with indexbuffer and vertexbuffer views being created incorrectly when using WHOLE_SIZE.

  • Bug Fix: Corrected a Vulkan validation error when the VkBufferViewCreateInfo range does not equal VK_WHOLE_SIZE.

  • Bug Fix: The CommandBuffer reset now happens on reallocation instead of on-demand when updating fence. This fixes an issue where the VkCommandBufferPool was accessed from two threads.

  • Bug Fix: Fixed issues with sampler initialization for a Texture2DArray assets.

  • Bug Fix: Added missing Vulkan pixel formats.

  • Bug Fix: Fixed two validation issues in Vulkan caused by the Track Editor Thumbnail.

  • Bug Fix: Added a heuristic PSO cache sanitization (based on hardcoded knowledge).

  • Bug Fix: Fixed an issue with InOutMask for vertex shaders missing bits when there are arrays in Vertex Input semantics. Fixes the following validation error: UNASSIGNED-CoreValidation-Shader-InputNotProduced: Vertex shader consumes input at location 6 but not provided #review-14610138

  • Bug Fix: Fixed Vulkan command buffers being freed without waiting for them to finish first.

  • Bug Fix: Fixed an issue with automatic resource transition based on bindings, but binding to several slots.

  • Bug Fix: Fixed a Vulkan validation error for depth attachments (which can't have swizzling).

  • Bug Fix: Fixed an issue with bloom application in splitscreen. PostProcessTonemap.usf now properly accounts for a restricted ViewRect on the bloom input texture.

  • Bug Fix: Fixed out-of-bounds access in CalcSkyLightPdf and PdfSkyLightOcclusionRay due to both sides of the ternary operator always being evaluated in HLSL.

  • Bug Fix: Changed the PSO cache file to be smaller and easier to patch by removing redundant GUIDs.

  • Bug Fix: Fixed a GPU memory corruption in D3D12 that could happen when a FD3D12FastAllocatorPage is used from the RHI thread but then recycled from FD3D12FastAllocator::Allocate on the Render thread. The wrong fence value could end up being used to detect when it's safe to re-use the page. Occasionally this could result in pending vertex or index buffer uploads being overwritten by the CPU before they are consumed by the GPU, leading to severe visual artifacts.

  • Bug Fix: Fixed broken occlusion for planar reflections.

  • Bug Fix: Made sure the parent directory is created for the PSO cache file.

  • New: Made PSO hashes consistent across sessions so the specific PSO from a crash log can be identified for debugging.

  • New: The -d3ddebug status is now always indicated in the log.

  • New: Dumping shader debug info only on compilation errors or warnings is now supported. Valid settings for r.DumpShaderDebugInfo are now 0-3

    • 0 - Don't dump (unchanged).

    • 1 - Always dump (unchanged).

    • 2 - Dump on error (i.e. compilation failure).

    • 3 - Dump on generated errors or warnings.

  • New: Added two-sided foliage material to the path tracer, and applied energy conservation to the throughput. Currently, this uses diffuse transmission instead of rough transmission.

  • New: Added a reflection pass switch node. This is useful to tweak visuals for less volumetric clouds details according to the sample count in reflection capture, for instance for the sake of performance.

  • New: The barrier command list build and execute command list are now performed via a task to offload the RHI Thread:

    • Use a special fence which has a pending fence value while the task is running which can be used to get the 'correct'・future fence value used for resource deletion and such.

    • Multiple places in the code now need to force the execute task to wait in order to make sure that the execute command list has happened on the device.

  • New: Refactored Global view heap code to use a global heap from which blocks can be allocated at fixed block sizes.

    • Block size can be controlled via D3D12.GlobalViewHeapBlockSize console variable (2000 default).

    • The fallback to the threadlocal heap is now really a very rare case and should be considered invalid (still supported as is, no changes done for that heap).

  • New: New pools depending on creation flags can now be created on the fly.

  • New: Added support for single-state resources (can be any state - even UAV and internal tracking is disabled for those resources).

  • New: Apply pow 2.2 on Roughness (the same as done by the BufferVisualization/Roughness engine material graph).

  • New: Added support for Intel hardware with non-local memory.

  • New: Added DX11 support for EnumAdapterByGpuPreference; this allows for OS-assisted selection of GPU use preferences.

    • Use -gpupreference=1 to set a preference for minimum power use

    • Use -gpupreference=2 to set a preference for highest performance.

    • The default value is 2.

    • Any other value causes the feature to fallback to the older code.

    • Also upgraded DXGI to the latest version.

  • New: Now allows optional per-vertex offset pre/post skinning to be applied to Skeletal Meshes. This is a temporary solution for applying correctives to animations.

  • New: Added tracking code to help debug memory leaks from Vulkan objects. Disabled by default. Use r.vulkan.dumpmemory to dump when enabled.

  • New: Refactored the scene texture uniform buffer to use RDG resources.

  • New: Added the -noexceptionhandler command line parameter. This allows the use of JIT debugging.

  • New: Applied D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX to the index buffer and texture.

  • New: Added support for VK_KHR_image_format_list, VK_KHR_shader_atomic_int64 and VK_KHR_driver_properties support for Linux; added gpu crash extension support on Linux for AMD and NVIDIA.

  • New: Moved GPixelFormats from the RenderCore to RHI module.

  • New: Replaced the compile time GD3DCheckForTypedUAVs toggle in D3DShaderCompiler.cpp with a console variable (r.D3D.CheckedForTypedUAVs) so the restriction on using typed UAV loads can be lifted if a project's minimum spec. is higher than the Windows 7 D3D11.0 feature level.

  • New: Added the PreExposure value to HDR visualization.

  • New: Added support for ATI1 texture format being interpreted as BC4

  • New: Optimization of excluding Separate Translucency Pass when no translucent objects are rendered.

  • New: For Pixel Streaming, the -PixelStreamingHideCursor command line option will make the cursor invisible in UE4. This should be used when you want the cursor to be shown only by the web-browser.

  • New: Added support for NV Aftermath on Vulkan via -gpucrashdebugging, and corrected AMD_buffer_marker not being enabled.

  • New: Updated Vulkan headers to 1.2.141.2.

  • New: Text3D: Added support for Arabic cursive writing.

  • New: Swapped the Bcrypt node module to the native .js version, and added npm console commands to ease usage.

  • New: Added support for BUF_Shared on D3D11

  • New: Ported custom depth/stencil rendering to RDG.

  • New: Ported Screen Space Ambient Occlusion and Ground Truth Ambient Occlusion to Render Graph.

  • New: Added the '-ForceAsyncCompute'・command line option to force the D3D12 RHI to think the GPU is optimal for Async Compute.

  • New: Implemented DRED 1.2 support. Changed the DRED log to only show command lists that were partially completed (partial log up to the last completed command).

  • New: PixelStreaming: Added the MinBitrate console variable, that makes PixelStreaming ignore the video encoder bitrate recommended by WebRTC if it drops below the MinBitrate value. Can be useful to sacrifice interactivity for better video quality on low-bitrate connections. Disabled by default.

  • New: Added RDG_CSV_STAT_EXCLUSIVE_SCOPE / RDG_CSV_STAT_EXCLUSIVE_SCOPE_CONDITIONAL and cleaned up exclusive CSV tags in the deferred renderer. Added the 'r.RDG.VerboseCSVStats'・console variable which toggles verbose CSV stats for the different phases of RDG itself. This restores CSV timings back to their original domains instead of being absorbed into the monolithic RDGBuilder_Execute tag.

  • New: Merged GPU skinning vertex factories for 4 and 8 bone influences into a single factory with branches inside a vertex shader. This reduces the total number of shaders generated for Skeletal Mesh materials.

  • New: Implemented a templated version of IMPLEMENT_VERTEX_FACTORY_TYPE_EX for templated Vertex Factories.

  • New: Updated Vulkan sdk to 1.2.148.2.

  • New: Implemented draw call counters into RDG stat scopes. This fixes missing RHI draw calls for mesh passes in the CSV profiler.

  • New: Integrate AMD QueryVideoMemoryInfo, this time with a fix for pre-GCN hardware.

    • This fix was implemented because when true, IsRHIDeviceAMD can indicate either integrated graphics or a discrete GPU.

    • The budget calculation comes from the OS via IDXGIAdapter3, falling back to the original calculation method if the interface for IDXGIAdapter3 does not exist (e.g. on Win7).

    • This update also includes a fix for old, pre-GCN cards used on Win10.

    • The QueryVideoMemoryInfo call can fail even though the QueryInterface for IDXGIAdapter3 succeeded, in which case, the system also falls back to the original calculation method.

  • New: Changed DX11 RT/UAV hazard detection to use UAV bind information instead of RTV bind information.

  • New: Added support for static samplers for D3D12 shaders compiled with DXC for PC (such as ray tracing shaders).

  • New: Text3D: Added support for creating outline text.

  • New: FRenderQueryPoolRHIRef is no longer used for fencing because it's not thread safe - one query is allocated and freed at a time.

  • New : Added defragging in the Vulkan memory subsystem:

    • Performed a partial defrag in an attempt to free up pages to release.

    • Free Pages are now kept in the Memory Manager, and the actual suballocators are no longer kept around; they are now freed after a while.

    • Added a bucket system for allocations, which covers the bucket system previously used on Android; Desktop platforms now also use buckets of less than two megabytes and less than sixty-four megabytes.

  • New: Reintegrated the new NvAftermath version which supports GPU Crash minidumps which now contains DXGI loading fixes for Win7 support.

  • New: The Global Shader Cook Commandlet now allows you to cook an override shader file that can be hot reloaded while the target is running.

  • Improvement: Cleaned up the Vulkan Memory System:

    • CallStackHandling has been rewritten; the new code defers symbolization (making it much faster), and it is now possible to enable it using a runtime parameter since it's now always enabled in the callstack code.

    • Vulkan memory classes have been merged.

    • All Vulkan allocations now have a meta tag.

    • The command "vulkanmemory stat" shows allocations per meta tag.

    • The command "vulkanmemoryraw stat" shows stats for heaps.

    • The memory dump output now gives a better overview over where memory is being used.

    • Vulkan memory allocations are now defer-deleted by default. Subsystems that don't need this can opt out (Uniform Buffers).

    • All Vulkan allocations now go through FVulkanAllocation. This class is intentionally not reference counted.

    • Some options that used to be hidden in definitions are now console variables so that they can be used and tested on all platforms.

    • The Vulkan memory system now supports an experimental automatic eviction of textures when running low on memory. Only non ray-traced, non UAV textures can be evicted. Currently, once evicted, textures are never promoted back to host.

    • The frame delay for freeing resources is now unified for all platforms (at 3, and no longer 10 for Desktop).

    • The fake memory limit is now controlled using a console variable that can be changed at runtime (in non-shipping builds). It now properly counts only memory on the primary host heap.

    • Corrected an issue with FXSystems which would leak when opening and closing the Material Editor.

  • Improvement: Improved logging when processing and loading the shader pipeline cache.

  • Improvement: Replaced check with a verbose error message in ExpandPSOSC.

  • Improvement: The Vulkan LLM now tracks spare and render target memory.

  • Improvement: Overlapping of draws or dispatches on D3D11 is now enabled by default, and UAV transitions determine when the next draw or dispatch shouldn't overlap the previous due to a UAV hazard (other types of hazards are still handled automatically by the driver in D3D11).

    • The BeginUAVOverlap /EndUAVOverlap functions now only affect the RHI validation layer. UAV validation is disabled between calls to these functions, so they should be used sparingly.

    • New overloads which take a UAV pointer (or array of UAV pointers) can inform the validator that specific UAVs are safe to access concurrently and don't need a transition. These overloads should be used whenever possible to allow the validation layer to still warn about missing transitions on any other UAVs used by the shader.

  • Improvement: Refactored the buddy allocator system for dynamic pool count.

  • Improvement: 2 frames of FrameLag are used before deleting unused buffer allocated pages.

  • Improvement: Removed some log spam for when virtual texture page allocation fails, and added a stat counter to keep track of failure occurrences.

  • Improvement: Corrected the range on the low clamp for basic eye adaptation to account for pre-exposure.

  • Improvement: Optimized the ISM culling structure to avoid transforming them at each frame, and replaced a linked list structure with a more efficient AOS.

  • Improvement: Improved the error message in the shader compiler if a shader uses typed UAV loads but they are disallowed.

  • Improvement: Renamed dxcompiler_sc.dll to dxcompiler.dll, added its .pdb file to help debugging, and ShaderConductor is now built using VS 2019.

  • Improvement: Refactored the DX12 buffer, unifying the buffer core to a single class.

  • Improvement: FReadBuffer now follows the FRWBuffer style and allows data initialization in "Initialize" as well.

  • Improvement: Updates from NVIDIA to the Ansel plugin.

  • Improvement: Performing culling and lighting is now iterated in batches of 32 lights (the previous implementation was limited to 64 lights and lacked a loop to cover the entire light list).

  • Improvement: Improved PSO init management.

  • Deprecated: Tessellation is now Deprecated.

  • Deprecated: Extend Default Luminance Range is now Deprecated

  • Deprecated: Deprecated TexCreate_DisableAutoDefrag as it's no longer used.

  • Deprecated: OpenGL is no longer supported for desktop rendering. If the -opengl command line option is used, an error message will be displayed, and Unreal will fall back to the default RHI for the platform.

Cascade

  • Crash Fix: Fixed a crash that would occur when adding LODs to a Cascade System while running Play In Editor (PIE).

  • Crash Fix: Fixed a crash in Cascade that would occur when refreshing a dynamic parameter module for a material with no dynamic parameter nodes.

  • Crash Fix: Fixed a crash that could occur when using spawn events with ribbons in Cascade.

  • Bug Fix: Fixed an issue with world time in the Cascade Preview window. This could cause odd issues with some culling features.

  • Bug Fix: Corrected an issue in Cascade SetTemplate calls on running systems.

  • Bug Fix: Fixed an issue where Cascade's High Quality lights would not respect the Spawn Fraction setting of the light module.

  • Bug Fix: Cascade GPU systems no longer submit simulation draw calls when inactive or culled by LOD.

Lighting

  • Bug Fix: Fixed an issue with a stale view uniform buffer. If "r.DoInitViewsLightingAfterPrepass 1" was enabled then UpdateGlobalDistanceFieldVolume would be called after view UB was created and cached. UpdateGlobalDistanceFieldVolume will modify view UB parameters, but previously there was no code which would re-cache view UB.

  • Bug Fix: Fixed an issue when rendering both Capsule Indirect Shadows and SSAO in the Forward renderer. Previously the SSAO would overwrite the results of the capsule shadows.

  • Bug Fix: Excluded billboards and shapes from light attachment groups.

  • Bug Fix: Fixed the temporal reprojection of the denoiser when using dynamic resolution.

  • Bug Fix: Fixed shading bugs in the path tracer for point and spot lights.

  • Bug Fix: Stopped the shadow fade-out transition at the end of CSM shadows for directional lights when there is static shadowing taking over (as blending is then done in the lighting shader).

  • Bug Fix: Fixed a bug where Spot Lights were treated as Point Lights in the Tiled Deferred shader if Specular Scale was 0.

  • Bug Fix: Fixed incorrect SSR when TemporalAA is turned off. The fix is to ensure the history buffer has the ViewportRect and ReferenceBufferSize filled in when TAA is turned off.

  • Bug Fix: Disabled the anisotropy pass for forward shading in a deferred shading class.

  • New: SunSky Actor Blueprint changes:

    • Activated Realtime capture on the SkyLight component.

    • Removed BP calls to force update SkyLight.

    • Removed an unnecessary call to the parent constructor script (the parent is "actor").

    • Removed the now-unused "UpdateSky" function.

  • New: Added r.SSS.Burley.BilateralFilterKernelFunctionType to the control screen space subsurface bilateral filtering.

  • New: Switched Burley screen space subsurface sampling sequence from Fibonacci to R2 in order to decrease noise.

  • New: Made the last cascade extend to include the near plane if r.SkyAtmosphere.SampleLightShadowmap is set and light is supporting shadows in the atmosphere or on clouds.

  • New: Changed the behaviour of ShadowResolutionScale = 0. For whole scene shadows, it disables the shadow maps and makes it possible to have contact-shadow only.

  • New: Relaxed the clamping of directional light depth ranges for cascaded shadow maps. This extends shadow ranges in large cascades, removing arbitrary shadow clipping, which is required to support shadows in atmosphere.

  • Improvement: Removed the anisotropy project setting and introduced an anisotropy pass if any object uses an anisotropic material.

  • Improvement: Contact shadows improvements.

    • Replaced the ad hoc transmission lightening for contact shadows with a subsurface falloff similar to the shadow maps path. Note that it will not match exactly since with contact shadows the occluder closest to the light is often not known, but the new logic will avoid over-shadowing subsurface transmission.

    • Added a new mesh flag for "cast contact shadows". Previously contact shadows would indiscriminately apply to all objects in the depth buffer. Now they will respect the new flag as much as possible given the information in the GBuffer.

  • Deprecated: Light Propagation Volumes have been deprecated and will be removed in a future release.

  • Deprecated: Atmospheric Fog has been deprecated. Sky Atmosphere should be used in its place.

Materials

  • Crash Fix: Fixed a crash that occurred when updating a material function used by a MID currently being edited.

  • Crash Fix: Prevent a crash if UMaterialInterface::GetParameterInfo is given a null LayerFunction, this can happen with a user-created BP.

  • Bug Fix: Fixed cook output stats to properly show savings due to sharing the material code.

  • Bug Fix: Corrected the automatic view bias not being applied to Runtime Virtual Texture samples in a material. This fixes slight blurriness for Runtime Virtual Textures in certain Temporal AA modes.

  • Bug Fix: Fixed an issue with materials not resolving Runtime Virtual Texture material parameters correctly.

  • Bug Fix: Forced UDIM textures to be built with the CLAMP address mode, to avoid seams between UDIM blocks.

  • Bug Fix: Adjusted the layout of UDIM tiles to account for the inverted V-axis when mesh data is imported into UE4.

  • Bug Fix: Virtual textures are now updated whenever a Material Instance parameter changes.

  • Bug Fix: When the r.SeparateTranslucencyScreenPercentage is not equal to 100, it will no longer cause separate translucency to be nearest upscaled instead of bilinearly upscaled.

  • Bug Fix: The Material Pow function now properly handles a Base value of 0. It will in this case return 0.

  • Bug Fix: For API, fixed the PositiveClampedPow to properly work with Base==0. This removes the max instruction but adds a conditional select instead.

  • Bug Fix: Fixed SSS specular when the checkerboard is off.

  • Bug Fix: Corrected the velocity buffer material expression when sampling geometry that is not drawing geometry.

  • Bug Fix: Fixed layer parameters being inherited from one MIC to another MIC.

  • Bug Fix: Fixed the external texture material parameters, used for media textures.

  • Bug Fix: Fixed issues caused by using Property Coloration and Level Coloration on materials with tessellation or world position offsets.

  • Bug Fix: FHashedName converts strings to upper-case before hashing, otherwise the hash depends on what particular case of a given string is first seen.

  • Bug Fix: Change order expressions are now visited while updating cached material expression data, which fixes a problem with getting correct values from parameters duplicated in multiple functions.

  • Bug Fix: Fixed a bug with FHashedName when using FNames with UTF32 TCHARs.

  • Bug Fix: Fixed a material tracking nested function dependency.

  • Bug Fix: Fixed recompileshaders command running on a target with COTF server.

  • Bug Fix: Removed canceled shader map compiled from the ShaderMapsBeingCompiled array, otherwise it was possible for a future compile request to be merged into the now-canceled compile job.

  • Bug Fix: It is no longer assumed that there are as many parent material layers as there are layers for the child.

  • Bug Fix: Introduced FMaterial::MaterialUsesAnisotropy to the MaterialCompilationOutput. This boolean is populated after compilation and saved in the compilation output (cooked & editor builds), and checked by the runtime to decide if anisotropy is used. DDC Key / Deciding whether to compile still uses the more permissive / conservative API HasAnisotropy, which returns true for MaterialAttribute nodes just in case anisotropy is actually used. This ensures all relevant shader variants are actually compiled.

  • New: Changes made to layers in a base material are now propagated to derived MIs.

  • New: Material Layers system is now enabled by default. The Project Setting has been removed.

  • New: Added an optional WorldPosition input to the Runtime Virtual Texture Sample node, allowing manipulation of sample coordinates.

  • New: Added a Blueprint API for setting layer parameters on MID.

  • New: Added a Time input to TimeWithSpeedVariable with the fallback of using the regular Time material expression to make it backwards-compatible.

  • New: Added a runtime virtual texture max mip level to view properties exposed to the material graph. This can be used along with the virtual texture mip level property for mip specific virtual texture generation.

  • New: Added the choice of WRAP or CLAMP texture address modes to the Runtime Virtual Texture Sample material node.

  • New: Added the ability to exempt certain materials from sharing code (to support chunked builds).

  • New: Added Blueprint API for setting layer parameters on dynamic material instances.

  • New: For TextureVariation, submitted a new material function to create texture UVs with variation applied to break up the tiling.

  • New: Replaced FHashedMaterialParameterInfo with FMemoryImageMaterialParameterInfo, which uses FScriptName rather than FHashedName. Names will be patched on load, but thus avoids frequent string hashing at runtime.

  • New: Fixed issues causing material DDC values to be non-deterministic.

    • Shader code within resources is now sorted by hash

    • Debug source code values are now sorted by type, also a mechanism was added to serialize any MemoryLayout described type to string.

    • This makes it easier to inspect material data to find sources of non-determinism.

  • New: Added a new material function for vector based refraction.

  • New : Added Blueprint setters for default custom primitive data.

  • Deprecated: Deprecated the RuntimeVirtualTexture material domain, and added code to auto convert materials with this domain to use an RVT output node.

Mobile Rendering

  • Crash Fix: Fixed a crash in the mobile renderer when the Sky Light cubemap resolution is less than 64.

  • Crash Fix: Fixed a crash related to reflection capture when running DirectX mobile emulation.

  • Bug Fix: Fixed brightness flickering on mobile related to eye adaptation.

  • Bug Fix: Set RGBA8 as a default backbuffer format on mobile devices. This avoids selecting HDR backbuffer formats when the device reports support for it.

  • Bug Fix: Fixed broken MobileSceneCapture when requesting HDR format.

  • Bug Fix: Fix a bug that caused the screen to be brighter on mobile compared to PC if there is a PP material whose blendable location is before tonemapping.

  • Bug Fix: Fixed shader compilation errors for materials that use certain particle properties (ParticleToWorld transform) on mobile.

  • Bug Fix: Fixed an issue where the Indirect Lighting Cache does not work correctly with multiple lighting scenarios on mobile.

  • Bug Fix: PostProcess materials will now correctly handle cases where viewport size does not match render target size on mobile.

  • Bug Fix: iOS and Android will now always use ETC compression for all Virtual Textures, ignoring project texture compression settings. This is done to avoid fragmentation of VT formats.

  • Bug Fix: Added fixes for the desktop renderer on iOS

    • Fixed inf in SingleLayerWaterComposite.

    • Added a flag to check for VertexFetch in Cloth.

    • Fixed tonemapping to use the correct color space on iOS.

  • Bug Fix: Opaque geometry will write 1.0 to the alpha channel when rendering directly to the backbuffer on mobile. This will make it easier to mask out opaque geometry in the final image.

  • Bug Fix: Fixed an issue causing black sky reflections on mobile if the scene has a non-static Sky Light actor.

  • Bug Fix: Fixed cases where toggling sub-levels visibility could lead to an incorrect precomputed Indirect Lighting in the mobile preview.

  • Bug Fix: Fixed a sRGB/Linear space mismatch for Runtime and Streaming virtual textures in the Editor mobile preview.

  • Bug Fix: Added a fix for some mobile GPUs when using Depth Read - Stencil Write.

  • Bug Fix: PostProcess materials with a blendable location set to BeforeTonemapping will now run after separate translucency on mobile.

  • Bug Fix: Fixed a bug causing rendering a black background on Tegra devices (Nexus 9).

  • Bug Fix: Removed the clamping of the light range for the receiver matrix and made it the same as the 'SubjectAndReceiverMatrix'・ This fixes a shadow culling bug for mobile.

  • Bug Fix: Removed a flag "D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS" which is not necessary for feature level es31.

  • Bug Fix: Fixed handling of MobileUseHWsRGBEncoding so it is correct in all cases.

  • Bug Fix: Corrected the issue of missing PreIntegratedGF textures in translucency passes

  • Bug Fix: Fixed a RGBM bug where it would not be calculated after the first buildReflectionCaptures

  • Bug Fix: Fixed the Editor GPUScene

  • Bug Fix: Corrected Niagara GPU for A10 and earlier devices.

  • Bug Fix: Corrected a GpuFence bug where RT would delete the Fence object while the RHIT was still using it.

  • Bug Fix : Reflection Capture change, fixed a check when postloading for console.

  • Bug Fix: Fixed the Encoded ReflectionCube when using old MapBuildData. The default is 16 RGBM.

  • Bug Fix: Corrected theEncoded ReflectionCube when old MapBuildData is present. It now defaults to 16 RGBM.

  • Bug Fix: Added a missing flattened material property enum that was overlooked when anisotropy was added.

  • Bug Fix: Made AO decals respect meshes that disable receiving decals.

  • Bug Fix: Handled RT bindings for decals that write or read to the normal Gbuffer.

  • Bug Fix: Corrected the blend state when the normal Gbuffer is not used during decal blending.

  • New: Added support for RHIClearUAVUint and RHIClearUAVFloat to work for TextureUAV on the OpenGL platform.

  • New: Added a '_centroid'・parameter for tangentworld interpolation to have better quality and be consistent with PC.

  • New: Ported mobile postprocess to the RDG.

  • New: Implemented using a separate uniform buffer for each dynamic point light so the mesh draw commands can be cached.

  • New: Added support for alpha to coverage for masked material.

  • New: Added support for dynamic spotlight shadows for mobile

  • New: Pixel projected reflection is now supported on the mobile platform forward renderer.

  • New: Added support for Ground Truth Ambient Occlusion (GTAO) on mobile.

  • New: Added support for UMG background blur on the Android OpenGL platform.

  • New: Mali Offline Compiler is now supported for vulkan spir-v.

  • New: Reflection Compression - Android now will use ETC2 by default. The RGBM MaxValue is set to max M value from the cubemap, unless the value is set in the component. HQ Reflection cubemaps are now also compressed.

  • New: Allows depth sampling in the Compute shader on Mobile.

  • New: Added ETC compression support for a Runtime Virtual Textures on mobile (iOS, Android).

  • New: Removed a mobile-specific InverseOpacity shader permutation for translucent materials. This change reduces the total number of shaders generated for mobile platforms.

  • New: Added support for UMG background blur on Android.

  • New: Now no longer show the deprecation message when running Windows OpenGL in mobile emulation (-featureleveles31).

  • New: Added deferred shading path to a mobile renderer (to enable r.Mobile.ShadingPath=1). Only supported on iOS and Android Vulkan, it will fallback to forward shading on Android GL. This is an experimental implementation as some of the mobile rendering features are not supported yet. The deferred shading path allows efficient rendering of multiple dynamic local lights, high quality reflections, and lit decals.

  • New: Added support for static lighting in mobile deferred.

  • New: Added support for Qualcomm Transform in Vulkan.

  • New: Added limited support of Mesh Decals on mobile. Decals are unlit and support only modes that write to SceneColor

  • Improvement: Clamped the roughness to 0.015625 instead of 0.12, in order to improve the specular quality.

  • Improvement: Cleaned up the code of HQReflection and enabled it to work properly with the mobile clear coat. Added support for cube reflection to HQReflection.

  • Improvement: Improved performance for mobile eye adaptation.

  • Improvement: Reductions to LightGridSizeZ and MaxCulledLightsPerCell for Android as a workaround for the 64k texel limit

  • Improvement: Niagara GpuReadback OpenGL optimization.

  • Improvement: Reflection Capture change, the TextureCube is no longer cooked for non mobile rendering platforms.

  • Removed: Removed the mobile legacy shading model.

  • Removed: Removed remaining references to ES2 and AEP.

  • Removed: Removed mobile's separate CSM shader permutations. Shader side CSM calculation is now conditionally performed according to a parameter within the mobile base pass's uniform buffer. This should dramatically reduce the number of PSOs required when shadows are enabled.

Niagara

  • Crash Fix: Removed an incorrect call to GetSkinWeights that is not required and can potentially crash.

  • Crash Fix: Fix a crash when GetEmitterViewModel returns nullptr.

  • Crash Fix: Corrected a crash in the GPU ticks if the Interface has been garbage collected.

  • Crash Fix: Fixed a crash with Static Mesh streaming where GT would send too few materials to the RT; the GT was reading CurrentFirstLODIdx which is modified on the RT leading to a mismatch on a frame in which they are streamed.

  • Crash Fix: Fixed a crash in GetFilteredSocketTransform that occurred when there were no elements in the array.

  • Crash Fix: Corrected a crash due to no objects being modified in the property notification when fixing CPU access on a NPC.

  • Crash Fix: Fixed a crash that could occur when resetting a function input to its default value.

  • Crash Fix: Fixed a rare crash that would occur if a Niagara System auto-destroys when activated (for instance, from being culled by Scalability options).

  • Crash Fix: Fixed a crash in Niagara that could occur when calling SetAsset on a running component.

  • Crash Fix: Fixed a crash that could occur when deleting a Niagara Event Handler from a running system.

  • Crash Fix: Fixed a bug that could lead to a crash when a variable default value was not initialized.

  • Crash Fix: Fixed a crash that occurred when events spawn particles beyond the CPU max limit.

  • Crash Fix: Fixed a bug where a missing Data Interface implementation caused assets using that Data Interface to crash on load.

  • Crash Fix: Fixed a crash that could occur in Niagara with Mesh Renderers when force reloading the Static Mesh asset from the Content Browser context menu and then changing properties of the Static Mesh in its editor.

  • Crash Fix: Fixed crashes that can occur in some Niagara Blueprint Library functions when passing invalid (nullptr) components.

  • Crash Fix: Fixed an editor crash that would occur when applying vertex painting to a Static Mesh that was being used by a Mesh Renderer in an active Niagara editor.

  • Crash Fix: Adding multiple location events to a script stage will now result in a script compilation error instead of crashing.

  • Crash Fix: Fixed a crash which could occur when resetting a data interface user parameter to default in the details panel when the data interface pointer was null.

  • Crash Fix: Fixed a crash which could occur when merging changes from parent emitters when a simulation stage was added in a child emitter.

  • Crash Fix: Fixed a crash loading into WeapGun_Impacts in Shooter game.

  • Bug Fix: Fixed the DDC getting polluted with NiagaraScript results when rapidly generating compile requests. Ensures that the data cached is associated with the source request rather than the current CompileId of the UNiagaraScript.

  • Bug Fix: Corrected a subtle bug in the "Apply rotation vector" function that occurred when applying rotations which were far off axis. This stabilizes and improves quality on "Mesh Rotation Force"・as well as the "Rotation"・input on "Initial Mesh Orientation"・

  • Bug Fix: Added fixes to the MeshParticleSpace material transform node for Niagara.

  • Bug Fix: Fixed two issues with activation with the Niagara component system life cycle track.

    • When handling the beginning of the section, first deactivate and reset if the system is already active. This is necessary to have the correct reset behavior when the life cycle section starts on the first frame of the sequence and it was already active, or when the sequence is looping.

    • The default behavior of the section evaluation will now activate if it is inactive instead of being 'none.'・

  • Bug Fix: Fixed VectorCeil and VectorFloor and added a unit test for them.

  • Bug Fix: Fixed M_AddForce and BP_PaintClouds so that the alpha channel can be correctly painted along with the RGB channels.

  • Bug Fix: Fixed Niagara vector field resources being accessed on the game thread without it being necessarily initialized.

  • Bug Fix: Fixed a bug with Niagara NDC cooking by adding the system name into the hash to prevent collisions between identical systems.

  • Bug Fix: Exposed an attractor position override to Point Attraction Force. This improves the stability of the optional particle killing feature on the point attractor which accounts for fast moving particles in the kill radius check, which better prevents overshoot when the kill radius option is exposed.

  • Bug Fix: Comment boxes can now be edited in the stack overview graph.

  • Bug Fix: Parameter data will now not be reallocated when it is assigned during initialization.

  • Bug Fix: During VectorVM compilation, all rvalues are now evaluated for potential replacements, not just those that are in assignments.

  • Bug Fix: GPU shaders are now included when evaluating the auto compilation in the Niagara editor as changes are made to systems / emitters.

  • Bug Fix: Fixed the following issues with user parameter animation in sequencer. Parameter section boundaries are now infinite by default. User parameters which are animated by Sequencer now show their animated value in the selected actor details view. When adding a new user parameter track, it will default to the current parameter value instead of resetting to 0.

  • Bug Fix: Fixed an issue where emitter initialization would not have system bounds set in time resulting in unnecessary work creating bounds helpers.

  • Bug Fix: Systems with dynamic bounds can now be culled by the property "Max Time Without Render."

  • Bug Fix: Added a fix for a system's MaxDeltaTime not properly getting reset from the values of it's child emitters.

  • Bug Fix: Corrected an issue with VectorVM compilation mishandling the expression: MyVec3.yz = float2(1.0f, 2.0f);

  • Bug Fix: All Niagara engine parameters will now be correctly updated after a component transform change.

  • Bug Fix: Renderers will now always be stripped from cooked builds if their parent emitters aren't valid.

  • Bug Fix: Fixed an issue with RapidIterationParameters being out of date when they are being baked out by the cooker. The generation of the correct values was moved to the pre-compile so that when the translation is triggered the correct values are used.

  • Bug Fix: Added validation (at runtime and at cook time) to ensure there is no mismatch in bindings between RapidIterationParameters and ScriptExecutionParameters.

  • Bug Fix: Make / Break X dynamic inputs have been renamed to more accurately match their actual behavior.

  • Bug Fix: Fixed Sphere location to properly factor component scale and nonuniform scale into its Sphere Normal output.

  • Bug Fix: Fixed an issue with Spawn Per Unit not respecting emitter delay.

  • Bug Fix: Fixed an issue where a parameter couldn't be renamed through the parameters panel if it was created in a "Set Parameters" module.

  • Bug Fix: Fixed an issue with the handling of user override parameters on a component and how it handles booleans.

  • Bug Fix: Fixed a bug where new data interface inputs were always displayed as "invalid" until reset.

  • Bug Fix: Prevented the spawning of Niagara on dedicated servers.

  • Bug Fix: Fixed an issue with world time in some editor viewports. This could cause odd behavior with some culling features.

  • Bug Fix: Fixed PSC deactivating on launch due to LastRenderTime not being up to date.

  • Bug Fix: Fixed the attribute spreadsheet capture to handle Disabled / GPU sims.

  • Bug Fix: When autowiring, all possible pins will now be searched through for the first possible real match rather than just assuming the first pin matching direction will work and failing.

  • Bug Fix: Added a fix for the Niagara matrix multiplication node; make it actually a mul function rather than per-component scaling.

  • Bug Fix: Fixed instance override parameters getting confused when dealing with variables with / without the User prefix. It now uses the UserRedirectionParameterStore to disambiguate User. and when it comes to the InstanceParameterOverrides.

  • Bug Fix: Niagara will no longer block the shader compilation when running -game.

  • Bug Fix: Generate Location Event now caps event send rate at 60fps by default, this is user overridable but should provide stable counts and visuals across platforms now and be less framerate dependent.

  • Bug Fix: Fixed hitches that happen in the UI when editing some emitter and system properties that don't require a system reset.

  • Bug Fix: Made UNiagaraDataInterfaceSpline threadsafe with respect to the Spline data.

  • Bug Fix: NiagaraSystems are now guarded against system update and spawn scripts being mismatched (they need to agree upon the attributes in the dataset). Systems will warn / stay disabled on a mismatch and will force a full rebuild of the shaders in an attempt to fix the shaders.

  • Bug Fix: Fixed an issue with resetting GPU particle counts; particle systems which should allow their particles to finish out their lifetime can now survive the component being deactivated.

  • Bug Fix: Changed the fallback texture used by the VolumeTeture Data Interface to be a volume texture.

  • Bug Fix: Updated the EmitterChangeState module to fix an issue where emitters would only go from Inactive to Complete if the first emitter did too.

  • Bug Fix: Added a fix for NDC with parameters and static switches. This ensures the state of the StaticSwitch node is fully reset when there is no constant resolver so that the state can't leak across compiles / parses.

  • Bug Fix: VectorVM compilation - ir_propagate_non_expression_visitor now properly handles self assignment.

  • Bug Fix: Fixed an issue with emitter inheritance where inherited modules and inputs would not correctly show they were inherited.

  • Bug Fix: Fixed an issue with emitter inheritance where inputs with numeric values which matched the default wouldn't receive updates when the parent values were changed.

  • Bug Fix: Fixed an issue handling Niagara bone sampling when no bones are present.

  • Bug Fix: Added fixes to NiagaraLightRenderer

    • The generation of dynamic data is now skipped if deferred shading is not used.

    • Made it draw relevant so that they will actually render without relying on other renderers.

  • Bug Fix: Fixed ComputeMaxUsedComponents to properly handle different typed attributes in the dataset.

  • Bug Fix: Niagara will now only block for the shader compilation when spawning systems during the automated tests.

  • Bug Fix: Corrected a subtle bug with Jitter Position related to choosing new positions when delay was used.

  • Bug Fix: Fixed Niagara to not block on shader compilation during OnPreGC (happens on editor load).

  • Bug Fix: Fixed an issue with getting random bones on the GPU (Filter Socket / Bone was incorrect)

  • Bug Fix: Fixed the path where direct reads do not write data out to the VM which can lead to NaNs / invalid simulations.

  • Bug Fix: Fixed an uninitialized field in FNiagaraEventGeneratorProperties::MaxEventsPerFrame which was causing non-determinism.

  • Bug Fix: Corrected an issue caused by incorrectly using the first GPU script only to determine whether viewing the uniform buffer was needed or not.

  • Bug Fix: Fixed a dependency issue when sampling Skeletal Mesh data in solo mode; the tick group must be calculated in the same way Niagara does otherwise the Skeletal Mesh data will not be ready for the solo components'・tick.

  • Bug Fix: Fixed the component pool.

  • Bug Fix: Fixed an edge condition with GPU emitters and going inactive on the first frame.

  • Bug Fix: Fixed a couple of issues with scaled transforms and bone sampling.

  • Bug Fix: Handled an edge case on world cleanup where ComponentPool has been destroyed before a component that can be returned to the pool.

  • Bug Fix: Handled an edge case where BeginDestroy is called before OnComponentDestroyed which will call DestroyInstance potentially returning to the pool incorrectly.

  • Bug Fix: Fixed a missing increment inside FNCPool::RemoveComponent.

  • Bug Fix: Now use advanced preview settings for background color.

  • Bug Fix: Removed early out as it skipped PostTick which will not clear events resulting in continual spawning.

  • Bug Fix: Fixed an issue with not clearing out LocalFunctionTable when data interfaces are dirty; this fixes an issue where Skeletal Mesh rebinding due to data changes did not choose the correct function since it was picking the old one from the table.

  • Bug Fix: Changed InverseFast -> Inverse to handle zero scaled Skeletal Meshes.

  • Bug Fix: Use of GetSystem is now prevented as it can race with the component; ArrayView is used rather than the constant TArray&.

  • Bug Fix: Handled an issue with incorrect area weighted sampled data when used with GPU systems, this will now result in a warning and uniform sampling being disabled.

  • Bug Fix: Fixed a bug when attempting to read from GPU buffers on the CPU with nullptr access.

  • Bug Fix: Fixed a read-early issue with Skeletal Mesh components that have identical start and end tick groups.

  • Bug Fix: Fixed a tick group ordering issue with physics enabled Skeletal Mesh components as they will have physics results interjecting during TG_EndPhysics.

  • Bug Fix: All emitters are now taken into account, not just those that are running, when working out whether view uniform buffer is required; this fixes an issue where multiple ticks in a single frame could jump between tick groups.

  • Bug Fix: Fixed mesh renderer stats so they don't increment per section.

  • Bug Fix: Fixed having a RenderTarget still bound that will be used as an SRV during Niagara's compute pass.

  • Bug Fix: Fixed races in Volume / Texture data interfaces due to reading from the data set by the RT when determining if the texture was valid.

  • Bug Fix: Fixed an issue that occurred if a GPU emitter was disabled on the first frame and never ticked.

  • Bug Fix: The velocity vector to quat function now correctly rotates meshes along the z axis. This will rotate existing particles that used the initial mesh orientation module's rotate feature.

  • Bug Fix: Fixed an issue with incorrect transform application (and reading from component) in GetFilteredSocketTransform -

  • Bug Fix: Removed the stub GPU implementation of GetFilteredSocketTransform which caused a stack error; the new functions should be used instead

  • Bug Fix: Corrected not applying the rotation on the GPU for gathering bone transforms.

  • Bug Fix: Fixed an issue with Niagara post work where the simulation is marked as dead but there is post work.

  • Bug Fix: Fixed stomping over override parameter data when they are set inside a constructor script.

  • Bug Fix: Corrected Niagara texture references when referencing things like MovieTexture / RenderTargets, etc. where the underlying RHI reference may be swapped out. The TextureReference will be used instead, rather than the TextureRHI.

  • Bug Fix: Fixed the occurrence of NaN/uninitialized values in Niagara GPU sort info.

  • Bug Fix: When setting a texture object, the editor will not stomp over the data if the system is duplicated because the component will be informed that it was overridden.

  • Bug Fix: The last render time will now be updated to the default value when a pooled component is reused.

  • Bug Fix: Fixed an issue where while waiting on the system simulation task, the finalize is executed which completes and removes the instance while attempting to remove the instance

  • Bug Fix: The system will now wait for all simulation to complete before performing a tick group update to avoid potentially accessing simulation data that is still running concurrently.

  • Bug Fix: Fixed dynamic material parameter names so that material function-defined dynamic parameters are also good.

  • Bug Fix: Fixed an issue with FName with case sensitivity in stack overview name changes.

  • Bug Fix: Fixed the UI alignment of the "Socket Name" property.

  • Bug Fix: Improved the "script usage" static switch to work as expected and across GPU scripts.

  • Bug Fix: Reading from CurrentData is now guarded to get the particle count if a fence has not been passed which guarantees that the tick has been processed on the render thread. This fixes an issue where we could deactivate a GPU emitter because the CurrentData is set to 0 instances as the tick was not yet processed.

  • Bug Fix: Fixed a bug where user parameters could not be assigned to Data Interfaces in the stack UI.

  • Bug Fix: Fixed a bug where if two modules use the same Data Interface function on two different Data Interfaces, they would both use the same data interface.

  • Bug Fix: Fixed the stack UI to correctly evaluate the usage constants for static switches.

  • Bug Fix: Fixed a bug where bound default parameters in Niagara modules would not behave correctly.

  • Bug Fix: Fixed graph pin default values being editable even when set to read-only.

  • Bug Fix: SetAsset calls on currently active Niagara Systems will now correctly reset the system with the new asset.

  • Bug Fix: Corrected a bug where local-space, velocity-facing meshes would not be correctly oriented.

  • Bug Fix: Attempting to sample a Volume Texture in a Niagara CPU script now results in a compiler error.

  • Bug Fix: Fixed a bug with local-space Niagara Emitters where Simple Lights would render with a frame old transform.

  • Bug Fix: Fixed an issue with the particle read Data Interface return value when an invalid attribute is used.

  • Bug Fix: Fixed a bug where multiple renderer feedback issues clashed in the stack UI because they were assigned the same unique ID.

  • Bug Fix: Fixed a bug where a Skeletal Mesh Component user variable in a Niagara System set from Blueprint wouldn't get reset on pooled reuse.

  • Bug Fix: Fixed an issue in which pooled Niagara components being invisible.

  • Bug Fix: Fixed a bug where renaming a parameter lost all its metadata.

  • Bug Fix: Fixed the rename tooltip.

  • Bug Fix: Fixed a bug where pasting or resetting a user parameter Data Interface did not propagate to running systems.

  • Bug Fix: Fixed a bug where some Niagara engine parameters were not correctly updated after a component transform change.

  • Bug Fix: Fixed a bug in the Grid2D Data Interface that would allow an attempt to copy to an incompatible format, causing errors.

  • Bug Fix: Fixed a Niagara compile error that would occur when adding a new custom expression to an input in Niagara's module stack.

  • Bug Fix: Fixed a bug that could trigger an ensure when copying a stack value with a data interface in it.

  • Bug Fix: Fixed a bug where non-uniform scaled Niagara meshes would render with different normals than regular Static Meshes with the same scale would, causing them to be lit differently.

  • Bug Fix: Fixed an issue where emitters would enter a state unable to spawn if they ever exceeded their max allocation count.

  • Bug Fix: Fix errors with cooking volume textures that were not created from a 2D initial texture

  • Bug Fix: Fixed a scale bug with the Skeletal Mesh Location module when the Skeletal Mesh Component is scaled.

  • Bug Fix: Fixed a bug where default values of attributes behind static switches could not be set.

  • Bug Fix: Fixed an issue with FX not reactivating when changing scalability settings at runtime.

  • Bug Fix: Fixed an issue with the Vector VM Assembly view in Niagara's Generated Code window.

  • Bug Fix: Fix various bugs and visual issues in Niagara with Instanced Stereo VR enabled.

  • Bug Fix: Added a missing GPU flag to a function signature.

  • New: Added automatic partial write detection code that is enabled by default, which currently looks for InputData methods and ParticleReads on the same emitter; added a separate boolean to disable this in the advanced view for debugging purposes in case other edge cases are found.

  • New: Auto-detect if a simulation stage iterates over particles but does not modify the particle attributes, in which case the particle data will not be written out, saving performance. Added an option to enable partial particle writes on particle simulation stages, for example if a stage only modifies position (does not kill / add particles), data will read / write to the same buffer improving performance.

  • New: Added optional shader permutations generated when using simulation stages, enabled by default this will generate a unique permutation per stage to significantly increase GPU performance.

  • New: Material Instance Dynamic is now created on demand if the Material Parameter Bindings array is set.

  • New: Data Interfaces can define child variables that can be used to bind to these Material Parameter Bindings, like the render target from the DataInterfaceRenderTarget2D.

  • New: Material Parameters can also be bound to the System, Emitter, and User variables. Data Interface function signatures can now specify a usage mask and whether or not they need an exec pin if the function has side effects. This makes it easier to have functions that don't actually return results but write to a data interface internally.

  • New: The GPU simulation has been reworked so that they no longer get bindings from particle scripts, but instead get them from the same source that particle scripts got their data from since GPU scripts are a superset of particle script capabilities.

  • New: Added the ability to drive emitter activation from console variables for finer control than just specifying a platform.

  • New: Optimized SetUserParametersToDefaultValues to prevent creating unnecessary additional data interfaces.

  • New: You can now create a Texture Object variable type to add a texture to a Niagara System for use in simulation or rendering.

  • New: Added functionality to the Skeletal and Static Mesh Data Interfaces to enable explicit specification for how they should source the mesh component, preventing them from falling back to an undesired mesh.

  • New: Added a component renderer that enables you to drive individual components (such as lights and meshes) in the level using Niagara for CPU particles.

  • New: Added curve binding to enable the creation of curves inside Niagara that get baked to a texture to use in Material using the Material Attribute Binding user interface.

  • New: Added a new SubUV Animation module that includes four modes: Linear, Curve, Random, or Infinite. Infinite improves upon the Cascade "SubUV movie" mode with a start frame, end frame, play rate, and a start time offset.

  • New: A marked list can now optionally be used for PostActorWork, which can reduce overhead in certain cases.

    • Use the console variable 'fx.Niagara.WorldManager.UsePostActorMark 0'・to disable using the marked list.

  • New: Added a Volume and Render target Data Interfaces and allowed Niagara to push Grid3D data into it.

  • New: Added a new preliminary plugin to convert Cascade Particle Systems to Niagara Assets. It is an experimental plugin that can be enabled and will be improved in later releases.

  • New: Added a Data Interface to play audio from within Niagara for CPU emitters.

  • New: Added a Data Interface to export particles, which works on both CPU and GPU.

  • New: Added a Niagara commandlet to find assets with warmup time / lights / GPU emitters.

  • New: Changed the attribute spreadsheet readback to use a readback manager; this is more reliable as the system is not required to tick in order to execute the readback.

  • New: Added RandomFilteredSocketOrBone functionality.

  • New: Added BP methods to create volume / array textures.

  • New: Now use the Enum string rather than the number in warning messages, makes it clearer to the end user on why the warning is visible.

  • New: Marked FNiagaraUserParameterBinding as NIAGARA_API so it can be used in other modules.

  • New: Niagara is now allowed to spawn new systems async and earlier if the TG has been processed already; this is enabled by default, use the console variable "fx.Niagara.WorldManager.SpawnPerTickGroup 0" to disable this function.

  • New: Added a performance option to allow event-based spawning to be combined into a single spawn. This results in a single execution from 0 to the number of particles rather than several when using the ExecIndex function, which is not recommended to do this.

  • New: Added support for Static Mesh socket sampling.

  • New: Added FNDIInputParam as an easy method to wrap complex data types, and cleaned up some data interfaces to use the new input / output wrappers.

  • New: Added a method to modify which sampling regions are used by the Skeletal Mesh data interface.

  • New: The max number of instances required across all sim passes is now calculated ahead of time. This reduces memory pressure when Sequencer is scrubbing the timeline and forcing many simulation ticks at once as buffers will not grow progressively but instead grow all at once up front.

  • New: Niagara tick behavior is now exposed to Blueprints

  • New: The collision module now supports simulation stages.

  • New: Implemented an export data interface for GPU systems

  • Added a GPU readback manager to allow enqueuing a readback that is not depending on a system tick.

  • New: Added the ability to go beyond a single dispatch dimension.

  • New: Added the ability for dynamic inputs to display custom text when being collapsed, using their child inputs in the format text.

  • New: Added an optional display to show emitter execution order, helpful for debugging dependency issues with events or particle reads.

  • New: The Niagara System no longer waits if it is not deactivating immediately; it won't wait for Activate Reset calls if running asynchronously, allowing them to defer until Finalize instead, which avoids stalling the GameThread.

  • New: Niagara arrays are now allowed to have data modified when running on the CPU; the functions added are Reset / SetNum / SetValue / PushValue / PopValue.

  • New: Added support for upgrading data interface function calls.

  • New: Added support for Skeletal Mesh IsValidBone and BoneCount on the GPU.

  • New: The collision module no longer requires users to specify whether it's a GPU or CPU system.

  • New: - Added fx.Niagara.SetOverridePlatformName as a way to quickly change between which platform Niagara is using; the caveat is that on cooked platforms only the device profiles that are contained within the cook are available.

  • New: Added a Data Interface that enables you to define a platform set and query whether it's currently active.

  • New: Stats on memory usage from data interfaces are now collected.

  • New: Added the option to change the grid format from 32-bit to 16-bit float.

  • New: The collision module's CPU trace channel is now exposed.

  • New: Added optimizations to reduce the cost of system and emitter creation and activation

    • Modified data set accessors into two separate structures so they can be cached on the System / Emitter to avoid map searching each instance, removing the need for various allocated arrays since there is one copy in memory rather than per instance.

    • Enqueuing multiple commands to initialize DataSets for GPU simulations is now avoided, this can be slow when waking task threads.

    • DebugSimName is now cached once in PostLoad to avoid per-instance memory usage / performance costs.

    • Removed various stat markers as they were measuring chunks small enough to introduce confusion / variance in profiling.

    • MaxInstanceCount is now cached inside the UNiagaraEmitter rather than generated with each instance created.

  • New: A number of distance field nodes have been added to allow artists to easily find the global distance field isosurface, its normal, to sphere cast through it, etc.

  • New: Added a function to get simulation stage iteration information, i.e. iteration index, max iterations, normalized iteration index.

  • New: Added minor tweaks to allow cleaner inheritance from NiagaraComponent if necessary:

    • Exported FNiagaraSceneProxy under NIAGARA_API.

    • Made GetViewRelevance public to match the primitive scene proxy API.

    • Removed the final keyword from FNiagaraSceneProxy's inheritance.

  • New: Changed the Niagara SetBoolByFloatComparison to use Static Switches for optimization reasons.

  • New: Extended the comparison operators to include greater than / less than / equal to for both inputs.

  • New: Added a new translator constant that is unique each time the node is translated. This can be used to calculate repeatable randoms.

  • New: Adding a new warning to Particle Attribute Reader Data Interfaces to notify end users when persistent IDs must be set in order to function properly.

  • New: An error message will now show if users attempt to reference the global distance field without it being enabled in the project.

  • New: Added the ability for the Sprite Renderer to be particle-less, if needed.

  • New: Added the ability for Data Interfaces to say they need execution pins and ensure that those functions don't get compiled out. This should clean up any write-only Data Interface functions that had to have a single parameter wired into the map previously, even if it wasn't really used.

  • New: Added a collapsed state text to dynamic input scripts. This formatted text is displayed in the stack UI when the node is collapsed. The text supports formatting placeholders for the function inputs, for example "myfunc({0}, {1})" will be converted to "myfunc(1.23, Particles.Position)"・

  • New: Removed "Is It Optimized Out" warnings in data interfaces as they are often benign and not necessary.

  • New: Added the Stack Context namespace to allow more reusable modules across different stacks. This also enables Data Interfaces to be used as iteration sources in Sim Stages to act like particles namespace and created named attributes on GridCollection2D

  • New: Added support for the Previous namespace modifier, which stores off the values from the previous script execution for use in a simulation.

  • New: Changed script visibility to an enum to allow for soft deprecation of assets.

  • New: Added two styles to the particle count display to reflect the different emitter states (normal, isolated, disabled). Also enabled showing particle count by default.

  • New: Sorted Niagara function input menus and added submenus for more clarity.

  • New: Niagara systems can now be spawned from pools to reduce CPU overhead of spawning and activation. These pools can now be optionally "primed" with a set number of initial instances. This prevents slow spawning and activation times when first spawning these systems and instead transfers this cost to load time.

  • New: Changed the color of the vector field visualization from white to red.

  • New: Added a shader compile error if using sim stages with the CPU.

  • New: Added a shader compile error if using events with the GPU.

  • New: It is now possible for Systems and Data Interfaces to ignore their dependencies, allowing them to potentially tick earlier in the frame, using the bRequireCurrentFrameData flag. When this option is disabled, the previous frame's data is used and the simulation is issued early. This greatly reduces overhead and allows the game thread to run faster, but comes at a tradeoff if the dependencies might leave gaps or other visual artifacts.

  • New: Niagara particles will now properly support custom depth writes, lighting channels, disabling rendering in the main pass, and volumetric translucent shadows.

  • New: Added a new static switch constant for the script context (system, emitter, particle).

  • New: Added a couple of new features to Niagara's Mesh Renderer:

    • "Locked Axis" enables combining the various facing modes with locking an axis to a specific direction.

    • "Camera Offset Binding" allows mesh particles to be pushed toward or away from the camera.

  • New: Added support for dragging Niagara assets into Blueprint graphs.

  • New: Added an option to switch between relative and absolute scale in Anim Notifys.

  • New: Niagara Emitters will no longer complete if no valid Static Mesh can be resolved. Instead, sampling the Static Mesh will result in sampling the Niagara System's location.

  • New: Changed the light renderer enabled binding to not be guarded behind a checkbox but always be evaluated (similar to other light values like radius or exponent).

  • New: Added a few new features to Niagara's Mesh Renderer:

    • The "Renderer Visibility" option allows particles to exclude themselves from certain Mesh Renderers.

    • "Distance Culling" disables rendering of meshes at a given distance from the camera.

    • "Enable Frustum Culling" culls individual sprites and mesh particles from rendering when they are not in view for performance optimization.

  • New: Added copy/paste support for stack entries in the user parameter default panel.

  • New: The Static Mesh Data Interface is now allowed to use the physics velocity rather than calculating it via the component transform.

  • New: GPU Simulation setup is now off to worker threads.

  • New: Local space mesh particle systems now support camera offset.

  • New: It is now indicated to the user when using the Camera Query Data Interface in a CPU emitter.

  • New: Changed the visibility of the ribbon renderer bindings to no longer be advanced.

  • New: Niagara Emitters will no longer complete if no valid Skeletal Mesh can be resolved. Instead, sampling the Skeletal Mesh will result in sampling the Niagara System's location.

  • New: Add a "Pivot Offset" feature to Niagara's Mesh Renderer and an ability to choose which space the offset should be in (Mesh, Local, or World).

  • New: Fixed the thumbnail generator to correctly crop the image to a quadratic size before scaling it down.

  • New: Extended the "copy metadata" action to static switches.

  • New: Niagara Renderers can now be optionally enabled / disabled for specific platforms.

  • New: Altering how default effect types are handled as existing behavior was confusing to users. Previously, Systems with no Effect Type set would use the project default Effect Type automatically. Now, setting no Effect Type does what you'll expect but new Systems are given the project default Effect Type on creation.

  • New: Hide the appended numbers after dynamic inputs to reduce stack visual noise.

  • New: Added a new Data Interface allowing Niagara modules to query the current platform.

  • New: A new Dynamic Input which returns one of the component axes of your mesh orientation as a vector.

  • New: Added a "Preview Mesh" fallback option to Static Mesh Data Interfaces in Niagara that will not be included in cooked builds for viewing in the editor. This saves memory over using the "Default Mesh"・if it will never be used in game.

  • New: ParticleToWorld and WorldToParticle can now be initialized (using the local matrix) for the local vertex factory, allowing better debug visualization.

  • New: "Solve Forces and Velocity" and "Calculate Accurate Velocity"・now use the new Particles.Previous.Position paradigm instead of the manual cached off attributes, as .Previous is now an intrinsic characteristic of attributes when accessing a previous frame value.

  • New: Added support for copying and pasting parameter metadata in Niagara script editors.

  • New: Tweaked the HLSL shader generation for GPU particle simulations to reduce the burden on the HLSL compiler, and added preprocessor directives to limit the scope of FSimulationContext for simulations using shader stages. This reduced compilation time by 20x for serial compilation, and by about 10x for regular usage in the editor.

  • New: Added a new property called "Apply Owner Scale to Attributes". This allows users to decide which attributes to scale via the owner scale of the Niagara actor placed in the world.

  • New: Changed FNiagaraVariableBase to include an index to a type definition (in the type registry) instead of the definition itself. Reduces the size of FNiagaraVariableBase from 24 to 12 bytes (cuts about 5% of the memory cost of UNiagaraScripts), and significantly reduces the number of object references that gets processed by garbage collection.

  • New: A new Initialize Particle module has been implemented into all default templates. Common behaviors such as randomness, uniform vs nonuniform sprite / mesh size, mass initialization, sprite UV flipping, and more, are now in plain english dropdowns to reduce clicks and simplify setting defaults for common behaviors. A "direct set" mode is included on all attributes so the previous behaviors are always easily accessible if desired.

  • New: Refactored ribbon texture UV options to be easier to use and added options to override the U and V range values per particle. However, you may find some instances that need additional adjustments after these changes.

  • New: Performance improvements for the creation of uniform buffers for GPU compute scripts (different buffers are shared between the emitters and stages)

  • New: Added the ability to drag and drop parameters from the system editor parameters panel into a scratch pad script graph or script asset graph.

  • New: Refactored how significance is handled. It is now handled by helper classes called Significance Handlers. The effect type can select which handler to use from the list of any available ones. Currently, the selectable options are Distance, Age, and None.

  • New: "Calculate Kinetic And Potential Energy" now has a remapping option when outputting the total energy. This sets a max cap on the energy amount and then outputs a normalized total energy. This is useful for driving 0-1 attribute values based on energy in physical behaviors.

  • New: The Particle Attribute Reader now has two official modules, "Spawn Particles From Other Emitter" and "Sample Particles From Other Emitter"・ The spawn module replaces existing spawn modules in the child emitter, and the sampling module initializes sampled attributes in the spawn script. Together these allow for GPU-based lead / follow emitters where one emitter provides attributes to another emitter for sampling, and there is an example of these in action in the new "Niagara_Advanced"・hallway in the Content Examples.

  • New: Added Set Mode for accurate value painting.

  • New: Since it is impossible to set a reference to a world within the system editor, made all the properties referencing AActors or UActorComponent derived classes disabled in the system editor.

  • New: Added a new metadata field to a Niagara type to indicate it is internal, and shouldn't really be visible to users (currently, this is limited to the half precision floats).

  • New: Changed the code generation for GPUComputeShaders to pull out the simulation code so that it's no longer duplicated in the spawn and update branches. This causes both compile times and instruction counts to drop significantly (about 50% savings in both cases).

  • New: Added a new module to cull individual emitters based on their significance. It enables you to have an expensive emitter on only the number of most significant instances of a System in the scene. It can also be used to set up a lower quality fallback emitter for all other instances. It works using a new engine constant passed in and named "Engine.System.SignificanceIndex."

  • New: The Niagara datasets are now trimmed, removing attributes that are never read by the VM (or special data interfaces). This reduces VM operations and should reduce memory consumption and work.

    • Trimming is disabled by default but can be enabled on the system level with an advanced flag.

    • Individual attributes can be added in an emitter's advanced properties for forced preservation.

    • ParticleRead and Export data interfaces will force an emitter to not trim their attributes.

    • Custom HLSL nodes / expressions are parsed for attributes to keep.

  • New: Made it possible to disable emitters from a console variable.

  • New: The internal structs of particle scripts are now prevented from being defined in system scripts, which dramatically improves compile times (2x faster).

  • New: Added a new dynamic input to return individual worldspace mesh orientation axis vectors from the Particles.MeshOrientation quat.

  • New: Removed the constraint on allowing access to engine.deltatime and engine.invdeltatime in particle spawn scripts.

  • New: Removed NiagaraEmitters and NiagaraScripts from dedicated servers. NiagaraSystems remain, but are light weight, and allow a consistent interface for Blueprints.

  • New: Added a "Scale UVs by Center" function when working with texture samplers

  • New: Added a "World Position to Screen UV" function when working with the new Gbuffer data interface.

  • New: Added the ability to add parameters to a "Set Parameters" module by dragging and dropping from the parameters panel directly into the module in the system overview.

  • New: Added an optional property to NiagaraParameterCollections to allow a MaterialParameterCollection to drive values in Niagara. Parameters will get automatically created when a MPC is assigned, and the backing parameter store will be updated as changes are made to the MPC.

  • New: The "Normalized Exec Index" functions and dynamic inputs now have a boolean input which makes the normalized result inclusive or exclusive. Exclusive does not return 1 and is useful when driving a periodic function such as sine.

  • New: Added Array data interfaces, which have two new dynamic inputs for "Select float/vector from array". There are now three array sampling modes: direct, random, and interpolate. Interpolate will interpolate through the entries in the array based on an interpolation factor, and has an optional input to normalize the interpolation.

  • New: Added an Official Module for the "Export Particle Data" Data Interface. This allows particles to export their data to Blueprint or gameplay code.The functions work on both CPU and GPU. The GPU is done via a readback and can be up to 3 frames latent depending on the platform.

  • New: Return Particle ID attributes now have an optional input to extract info from another Niagara ID, such as RibbonID.

  • New: You can now access generic GBuffer frames within Niagara using a Data Interface.

  • Improvement: On the Skeletal Mesh Data Interface, the array element name for "Specific Bones" and "Specific Sockets"・have been renamed to "Filtered Bones"・and "Filtered Sockets."・

  • Improvement: Cleaned up parameters being passed to various RT Data Interface calls, i.e. Pre / Post Stage, to ensure that all parameters are set correctly to the functions that are called.

  • Improvement: Moved NiagaraComponentSettings into its own file.

  • Improvement: Extended NiagaraComponentSettings to allow forcing which systems use the component pool.

  • Improvement: We've standardized how data is pushed to the render thread for GPU simulations, you may need to make some modifications to match it.

  • Improvement: Improved performance and compilation speed in Sim Stages.

  • Improvement: Made batching of System instances more common by reducing the need to go solo if using data interfaces as user variables.

  • Improvement: Preview meshes will now only show inside editor / preview windows, not inside PIE as it can be confusing when it is not visible inside a cooked build.

  • Improvement: Improved messaging for missing bones / sockets, sent in a single line to improve reception by various toolings.

  • Improvement: Renamed RandomFilteredSocketBone to RandomFilteredSocket.

  • Improvement: Optimized FNiagaraParameterStoreToDataSetBinding::Init by avoiding double map lookups in some cases.

  • Improvement: Moved the emitter dependency order calculation to the system from per system instance; now calculated on PostLoad, it may be possible to serialize for cooked platforms.

  • Improvement: Reorganized the Niagara sim stages RasterizeParticlesGrid2D minor module input to aid ease of use.

  • Improvement: Updated the Niagara SetBoolByFloatComparison module to use static switches for optimization reasons.

  • Improvement: Improved the stack UI to include parent/child relationships.

  • Improvement: Significant optimization for Niagara Systems that use Data Interfaces in particular ways.

  • Improvement: Improved CPU collision traces by skipping traces if collision is disabled for a particle.

  • Improvement: Added CPU optimizations for Niagara GPU emitters.

  • Improvement: Added minor CPU optimizations for Niagara Systems using Events.

  • Improvement: Updated the Niagara RasterizeParticlesGrid2D metadata for clarity from an artist's point of view.

  • Improvement: Added optimizations for CPU implementation of Niagara's Particle Attribute Reader Data Interface.

  • Improvement: Added some CPU performance gains when spawning Niagara Systems that are pooled.

  • Improvement: Added a minor optimization for CPU systems using the Skeletal Mesh Data Interface.

  • Improvement: Added updates for static VectorField Data Interface. 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 Data Interface for sampling. For supported platforms it reduces memory cost (16 bpp -> 6 bpp) and improves sampling time (2x speed increase).

  • Improvement: Updated the sequencer particle trigger track to support triggering Niagara systems.

  • Deprecated: Added a "IsValidField" output to the distance field query function.

  • Deprecated: Removed old, unused collision Data Interface functions.

  • Deprecated: Deprecated data interface export function without exec pin.

  • Deprecated: Updated default values for the torus location module.

  • Deprecated: All "Uniform Ranged X" dynamic inputs have been soft-deprecated and replaced by the new "Random Range X"・functions. These are more optimal from an optimization standpoint, and more critically, they now include two modes when used in an update script like Particle Update, "Spawn Only"・or "Every Frame."・

    • Spawn Only enables a random number to be calculated directly in an update script only once, instead of requiring a random variable to be initialized in spawn and then linked in an update, which is a significant workflow improvement.

    • Every Frame causes random dynamic inputs to revert to their original behavior of being recalculated every frame.

    • When used in Emitter Update, these functions also expose a new option to "Recalculate Each Loop", which returns new random numbers only on loop boundaries.

Optimizations

  • Bug Fix: Fixed the half resolution SSR rendering path.

  • Bug Fix: Reenabled and fixed dedicated memory allocations (used by NVIDIA cards). Allocations can never be reused as they are tied to the image.

  • Bug Fix: Fixed ref counting in FRenderTargetPool::FreeUnusedResource so that it frees resources correctly.

  • New: Sorted reflection material gather rays now use RAY_FLAG_FORCE_OPAQUE.

  • New: Added DEFINE_GPU_DRAWCALL_STAT to get the draw call count per specific category; DEFINE_GPU_DRAWCALL_STAT macro is now used instead of DEFINE_GPU_STAT to also get the draw call count in CSV for a specific pass. SCOPED_GPU_STAT will then output the CSV time for the GPU pass and the number of draw calls of this GPU pass in the CSV Draw Call category.

  • New: Added a batched RT material gather pipeline using batched / parallelized API. This saves ~50% of the RHI thread critical path time.

  • New: Symbols from RT PSOs are no longer exported. This slightly improves large PSO linking performance by avoiding some of the string deduplication cost in d3d12.dll.

  • New: Enabled r.Streaming.UseAsyncRequestsForDDC by default. This enables async DDC requests by default to prevent stalling the editor when the shared DDC network is slow.

  • New: Shader creation during drawing has been multi-threaded for the RHIs where this is thread-safe. This can be controlled with r.MeshDrawCommands.AllowOnDemandShaderCreation.

  • New: Redundant resource residency management is now skipped when the same SBT or RT scenes are used on the same command list repeatedly.

  • Improvement: Optimization of CREATE_NOT_ZEROED to reduce hitches on Windows 10 build 2004 and later.

  • Removed: Removed unused vertex input streams in c++ that should already have been removed.

Post Processing

  • Bug Fix: Fixed TAAU for DOF sampling outside the input viewport

  • Bug Fix: Corrected SignFastInt in FastMath.ush

  • Bug Fix: Fixed DOF sampling outside the viewport when using TAAU and SP > 100.

  • Bug Fix: Reduced DOF tiling artifacts when fast gathering foreground on foreground transition coc range by computing output opacity based on kernel size.

  • Bug Fix: Fixed the IF_PP handling of BloomMethod.

  • Bug Fix: Fixed bug due to incorrect subrects in Basic Eye Adaptation Compute Shader.

  • Bug Fix: Corrected white light appearing on cubes when disabling post processing.

  • Bug Fix: There is now a check that there must be correct viewport information after processing a frame while not in 'real time'・

  • New: Added information about the depth velocity in the velocity buffer.

  • New: Color Correct Regions. A new plugin module that allows users to add color correction to regions in 3D Scenes. Based on the concept of Color Correct Volumes and optimized to support many Regions in one level.

  • New: Added a new step in the pipeline for view extensions to be able to access the rendering stages before Postprocessing. Users can subscribe to different stages of Postprocessing via the ISceneViewExtension. This adds more flexibility to postprocessing including giving an ability to do color correction before a tone map is applied.

  • New: Added interfaces to enable Temporal Anti-Aliasing GPU passes to be replaced by a plugin. No backward compatibility on this interface is guaranteed between major releases.

  • New: The Filmic Tone Curve portion of the tonemapper can now be individually disabled via ShowFlag.ToneCurve or by setting the ToneCurveAmount (in PostProcess->ColorGrading->Misc) to zero. NOTE: Typical use cases that require the tone curve to be disabled may also require ExpandGamut to be set to zero (the default is 1.0).

  • New: Added more flexibility to Post Processing via Scene View Extensions. This is required to support OCIO conversion after the tone map.

  • New: Added a Context that a Scene View Extension (SVE) can use to determine if it should be active or not, in addition to the FViewport pointer, for use when there is no FViewport, or when applying a SVE on a particular view that shares a FViewport. This provides a way to have an arbitrary Context that corresponds to the rendering entity, and a mechanism to provide the SVE lambdas that can find and parse the custom context. The SVE can then decide if it should be active for the current frame and context, or simply use default normal behavior. This does not change the normal behavior, and only adds an option for renderers to provide a context.

  • New: Added more flexibility to Post Processing via Scene View Extensions. This is required to support OCIO conversion after the tone map.

  • New: Added a new step in the pipeline for view extensions to be able to access rendering stages before PostProcessing.

  • New: Major Updates to Ground Truth Ambient Occlusion code.

    • Added the ability to set more than 1 angle per pixel. Having 1 angle is problematic due to the projection of the per pixel normals on the view direction.

    • Improved the fall off function to band less

    • Changed the dither pattern to be based on Interleaved gradient noise. This also reduces banding.

    • Added a PPV value to control the temporal blending rate.

    • Fixed a bug regarding running at full resolution.

  • New: Added support for Open Color IO (OCIO) in the Viewport and Movie Render Pipeline.

    • OCIO in the Viewport enables users to modify the Viewport's color output and add OCIO color conversion after the tone map, which disables the tone curve and gamma. To do this, create a new Open Color IO Settings Asset and assign it to the viewport using the OCIO Configuration menu in the View. Once assigned, you should select a source colorspace to convert from and a target colorspace to convert to.

    • OCIO in the Movie Render Pipeline enables users to add a custom color configuration to the Movie Render Pipeline. It allows for control over tone curve and OCIO color conversion settings. Similarly to the Viewport OCIO Configuration menu, you need to add a new OCIO Configuration Asset and then select a source colorspace and target color space.

Ray Tracing

  • Crash Fix: Corrected a crash in ray tracing when the value of the skin cache is null.

  • Crash Fix: Fixed a crash caused when ray tracing shadows is the only active ray tracing effect and r.RayTracing.Shadows is set to 0 while leaving GRayTracingShadows set to 1, resulting in the RenderRayTracingShadow function being called when it should not.

  • Crash Fix: Fixed a crash when turning off all ray tracing effects during run-time.

  • Crash Fix: Fixed a crash calling SetupRayTracingCullClusters when RT was disabled.

  • Crash Fix: Fixed a crash that occurred when enabling r.RayTracing.ExcludeDecals because ray tracing instances are skipped but VisibleRayTracingMeshCommands have already been registered.

  • CrashFix: Fixed a crash caused by RT Niagara ribbons with zero polygons.

  • Crash Fix: Fixed a crash that occurred when initializing foliage structures with RT enabled.

  • Crash Fix: Fixed a crash on startup when attempting to load a RT shader while run-time RT support is compiled out.

  • Bug Fix: Fixed a possible deadlock in RTPSO compilation tasks on machines with low CPU core counts. RTPSO 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 get to run on other task threads.

  • Bug Fix: GPU copies are now used to fill the ray tracing IES light profile texture atlas. This corrects the handling of pre-tiled source profile textures.

  • Bug Fix: Fixed a potential assert when rendering ISM with ray tracing enabled if the ISM proxy had no instances.

  • Bug Fix: Added a UAV barrier at the end of each BLAS build batch. This fixes a GPU bug when running with ray tracing due to build and update commands overlapping on the GPU and corrupting memory.

  • Bug Fix: Landscape grass is now visible in ray tracing. Grass does not have per instance indices so previously it was filtered out.

  • Bug Fix: Fixed a potential race condition accessing data that is being destroyed from another thread when ray tracing Skeletal Meshes.

  • Bug Fix: Fixed Ray Tracing Post Process Volume settings cannot be edited/interpolated by Sequencer.

  • Bug Fix: Fixed GRayTracingPlaformMask initialization, which could be incorrectly enabled in editor builds and lead to unwanted ray tracing shader compilation. The console variable r.RayTracing is checked in TTargetPlatformBase and it should always be taken into account, regardless of per-platform settings.

  • Bug Fix: Fixed missing transition barriers for ray tracing resources that are bound directly and not through uniform buffers.

  • Bug Fix: Added an explicit shader parameter to differentiate direct vs indirect dispatch in RayTracingDynamicGeometryConverterCS. Fixed the handling of MinVertexIndex.

  • Bug Fix: Fixed raytraced Niagara Meshes on the GPU with multiple sections.

  • New: Added ray-traced reflections to single-layer water.

  • New: Added ray-traced transmission support for subsurface material.

  • New: Ray tracing reflection rays are not traced from pixels that have an unlit shader model.

  • New: Added a console variable to disable WPO evaluation for Static Meshes in ray tracing

  • New: Rendering reflections is now skipped in ray tracing debug or path tracing view modes.

  • New: Ray Tracing Final Gather GI improvements:

    • Added optional neighbor sample stealing (and consistent stratification within the filtering neighborhood): r.RayTracing.GlobalIllumination.FinalGather.FilterWidth (default = 0)

    • Added optional gather point multi-sampling to improve per-frame convergence: r.RayTracing.GlobalIllumination.FinalGather.Iterations (default = 1)

    • Now uses reprojection on the temporal gather point history.

  • New: Added LightingChannelMask support to path tracing and ray tracing global illumination passes.

  • New: Added options to turn off the compilation of ray tracing material closest-hit shaders or any-hit shaders. The values are read-only and must match between cook-time and run-time. New console variables added:

    • r.RayTracing.CompileMaterialCHS (default 1)

    • r.RayTracing.CompileMaterialAHS (default 1)

  • New: Created large fixed-sized ray tracing view descriptor heaps instead of creating worst-case heaps for the current frame.

    • The initial heap size is set by r.D3D12.RayTracingViewDescriptorHeapSize (default = 250k).

    • This avoids the pathological performance issue when new meshes are progressively added to a large ray tracing scene. The previous allocation scheme resulted in ever-larger heaps being created as the scene grew, which caused significant CPU spikes (200-300 ms). The new scheme reuses the same heaps that are pre-sized to be large enough.

    • If an overflow is detected, the heap size will be doubled for the next frame, but the current frame will have some number of placeholder shaders bound to the ray tracing scene and will not be rendered correctly as a result.

  • New: Added support for parallel AddMeshBatch processes for DynamicRT meshes.

  • New: Shadow rays in RTGI are shortened by default to avoid hitting the sky sphere, which makes it possible to get desired sky reflections without affecting GI.

  • New: Ray tracing debug visualization modes are now consistent with GBuffer visualizations.

  • New: The RT debug show flags are now hidden in the editor menu, since the corresponding functionality is exposed via the view modes menu instead.

  • New: Ray tracing global illumination is now enabled on two-sided foliage.

  • New: Optimized the command list generation for the dynamic geometry RT update.

    • A shared vertex buffer is now used for the compute output (managed by the collector); the vertex buffer offset is now required in the compute shader and the acceleration segment data.

    • Commands are now sorted by shader and then by vertex buffer to reduce command list creation overhead.

    • The FShaderBindingState is used to reduce incidence of binding the same uniform buffers repeatedly.

    • The loose parameter data is now stored in the FMeshPassProcessorRenderState instead of setting it twice.

  • New: Added solid-angle sampling to RT spherical lights.

  • New: The Indirect Lighting Intensity factor is now respected when computing RT global illumination.

  • New: Added a console variable to control if RT BLAS compaction should be automatically performed after build

    • r.D3D12.RayTracing.AllowCompaction 0 / 1 (default)

    • Compaction is still enabled by default, but the console variable can be used to easily A/B test memory usage, GPU time, etc.

    • The value is read-only at runtime, as it requires all acceleration structures to be re-created.

  • 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.

  • New: Implemented the DXR 1.1 PSO addition API. Ray tracingPSOs can now be grown/extended through AddToStateObject on a supported Windows version and driver. A compatible base pipeline is automatically selected from the pipeline cache based on how recently and frequently it was used, unless it is explicitly provided by the user.

  • New: Implemented a roughness bias for experimental ray-traced reflections. 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.

    • The drawback of this technique is that it is not physically based and can produce surprising / inconsistent visual results and so it must be used with care.

    • The feature can be enabled using r.RayTracing.Reflections.ExperimentalDeferred.SmoothBias (default = 0). Only surface roughness below this value will be biased towards zero.

  • New: Added transmission to the RT global illumination pass. This feature does not yet have a global override control to systemically disable the effect.

  • New: Added console variables to globally control RT 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 console variables are intended for global easy overrides, allowing fine grained control over quality vs performance in games, without content changes. New console variables:

    • r.RayTracing.Shadows.Lights.Directional

    • r.RayTracing.Shadows.Lights.Point

    • r.RayTracing.Shadows.Lights.Spot

    • r.RayTracing.Shadows.Lights.Rect

  • New: 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. The density of this volume is proportional to the shading model's opacity.

  • New: Implemented a roughness threshold for skipping any-hit shader invocation in the experimental RT reflection shader.

  • New: 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.

  • New: The cloth shading mode is now supportedl in the ray-traced reflections pass.

  • New: Implemented basic support for masked materials in the experimental ray-traced reflection shader.

  • New: Moved ray tracing vertex and index buffer tracking from SBT to the scene. This saves 2/3 of the time spent in FD3D12RayTracingScene::FindOrCreateShaderTable.

  • New: FD3D12CommandContext::RHISetRayTracingHitGroups is now able to internally parallelize the work to improve RHI thread critical path time. The maximum number of worker threads is limited to 5 (RHIT + 4 task threads). Each thread gets a dedicated descriptor cache as well as separate referenced resource tracking sets to avoid contention.

  • Improvement : A single-state resource is now used in Ray Tracing buffer allocation to speed up allocation time.

  • Improvement: Only allow tone mapping on radiance, indirect irradiance, and primary rays debug ray tracing view modes.

  • Removed: Translucent objects no longer cast ray traced shadows, which more closely matches the default behavior of dynamic shadows.

Water

  • Bug Fix: Fixed artifacts that occurred when computing underwater ray tracing reflections.

  • New: Added ColorScaleBehindWaterInput to the SingleLayerWater Shading Model. This can be used to add custom colorization effects such as caustics or custom surface shadows to the scene behind the SingleLayerWater surface.

  • New: The Water Plugin has been released as Experimental.

Tools

  • Bug Fix: MoviePipeline: Fixed an issue where having multiple shots pointed to the same inner movie scene would restore incorrectly, causing the inner Playback Range to slip further and further with each successive use of the sequence within a single render.

  • Bug Fix: Update source control helpers to properly resolve file paths for RevertFiles and RevertUnchangedFiles

  • Bug Fix: Fixed a crash in UATHelperModule where pointers for old notifications could potentially be invalid.

  • Bug Fix: Fixed a LevelStreaming issue that occurred when exchanging the desired level with an already loaded level between request and completion. The pending unload was never processed and the state machine remained in the LoadedNotVisible state indefinitely.

  • Bug Fix: Fixed FWorldTileCollectionModel::GenerateLODLevels not releasing generated assets.

  • Bug Fix: Fixed a crash when a map fails to load from the recently opened levels list.

  • Bug Fix: Fixed LevelStreaming when changing the desired level to an already loaded level between request and completion. The pending unload was never processed and the state machine remained in the LoadedNotVisible state indefinitely.

  • Bug Fix: Removed the clamp in USplineMeshComponent::SetEndTangent

  • Bug Fix: Returned previously renamed public members/methods in FWorldTileModel and UWorldComposition and deprecated them.

  • Bug Fix: The PIE window now correctly adjusts its window position if DPI scaling is in use.

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

  • Bug Fix: Fixed a bug that would prevent the user from restoring an imported SkeletalMesh LOD after applying a reduction to it.

  • Bug Fix: Material slot names are no longer lost when merging multiple SkeletalMeshes together.

  • Bug Fix: Reimporting an FBX mesh no longer destroys custom collision meshes added in Unreal.

  • Bug Fix: Fix a bug in the MeshEditing toolbar where material assignments were not preserving shadow and collision settings when creating a new material section.

  • Bug Fix: Fixed an assert that could be fired regarding bad progression values when importing FBX files.

  • Bug Fix: Fixed a bug in FBX import where element names would not be properly parsed as UTF-8.

  • Bug Fix: FBX Import - Fixed a bug when reimporting a SkeletalMesh that would reset all the LOD settings.

  • Bug Fix: Fixed the SkeletalMesh "Bake Out Materials" option overriding Slot Names and Imported Material Names.

  • Bug Fix: Fixed a bug that would prevent a collision mesh from being generated during import if the collision data in the FBX file is invalid.

  • Bug Fix: Fixed the python import option ResetToFbxOnMaterialConflict introduced last release. Now, when enabled the FBX import will properly use the "ResetToFbx" behavior on material conflict.

  • Bug Fix: Fixed a bug that would open a new content browser window when cancelling FBX import with the existing browser window locked.

  • Bug Fix: Fixed an issue with bad texture assignment during FBX import when importing textures with names conflicting with material names.

  • New: Added BuildCMakeLib UAT automation script for building third party libraries that use CMake.

  • New: NetworkInsights/NetTrace - Improved tracing of bunches to capture open / close / sequencenumbers and channelid

  • New: Added FVisualLogExtensionInterface::OnScrubPositionChanged to make it easier to tie the visual logger to other debug systems. Contributed by The Coalition.

  • New: Enabled verbose output for SN-DBS code builds - supported platforms compile cleanly, so verbose output is now enabled by default so any issues will be caught as they arise.

  • New: The materials assigned to UStaticMesh and USkeletalMesh assets are now accessible in Python. The "StaticMaterials" and "Materials"・properties are now respectively exposed.

  • New: The FBX SDK used has been updated to the latest 2020.1.1 version.

  • Improvement: Clarified function and parameter names in FWorldTileModel and UWorldComposition.

  • Improvement: Removed (or moved to a runtime toggle) some high-frequency/low-value engine performance counters. This improves performance and stability in some profilers.

  • Improvement: In the FBX Import dialog box, renamed "Auto Generate Collision" to "Generate Missing Collision"・for clarity.

UI

  • New: Implemented a new Letter Spacing property for UMG/slate widgets with font attributes (text-based widgets). Due to limitations with the HarfBuzz library and issues with letter spacing for cursive text (e.g., Arabic), Discretionary or complex ligatures are not affected by the letter spacing, such as Arabic and Thai.

  • Improvement: Duplicating or copy/pasting widgets in UMG now behaves similarly with other comparable software applications that use layer and object hierarchies, such as Photoshop and Unity. Duplicated widgets now insert the duplication directly above the selected widget, and duplicated widgets are selected by default. When pasting a panel widget, the widget will appear as a child at the top of the draw order or replace the existing panel if you cannot have more than one panel for that particular widget.

Slate

  • Crash Fix: Editor no longer crashes when the Viewport size is set bigger than the maximum texture size allowed.

  • Crash Fix: Editor no longer crashes when rendering Slate from another thread.

  • Crash Fix: Changing to Fullscreen State or resizing the window no longer causes Editor to crash. This was required to support the new flip model, described here: https://devblogs.microsoft.com/directx/dxgi-flip-model/

  • Bug Fix: The Searchable Combo Box no longer incorrectly closes instantly when selecting the box.

  • Bug Fix: The timer handle now sets correctly in the List View Base.

  • Bug Fix: The retainer box no longer incorrectly applies animation render transforms twice.

  • Bug Fix: Memory no longer leaks when using font outlines.

  • Bug Fix: Calls are no longer incorrectly made to Slate Application when in headless mode.

  • Bug Fix: The mouse no longer incorrectly deselects on mouse release when using the Single Toggle selection.

  • Bug Fix: Tooltips now work correctly when receiving OnOpening and OnVisualizeTooltip callbacks.

  • Bug Fix: When right-clicking while dragging a gradient stop, a transaction no longer is incorrectly left open on the SColorGradientEditor.

  • Bug Fix: Rich text blocks now filter data tables correctly by allowed row type.

  • Bug Fix: Multi-select mode now correctly allows multiple selections in the widget tree view.

  • Bug Fix: Resolved an issue where the first item in a list view is skipped by navigation.

  • Bug Fix: Resolved an issue with the Rich TextBlock's Set Text Style by adding a null check.

  • Bug Fix: Register Commander no longer incorrectly attempts to register an unhandled key down event handler on dedicated services. This is because Slate is not initialized.

  • Bug Fix: Using inline text boxes in edit mode now work properly during a drag/drop.

  • Bug Fix: After receiving an element request with no gamma correction, the Slate opengl and d3d references now restore gamma correction values correctly.

  • Bug Fix: When rendering text, frame updates now occur on the game thread. This resolves a potential issue where the font cache is destroyed.

  • Bug Fix: The Invalidation Root now properly handles cases when Process Invalidation is called 2 times in a single frame.

  • Bug Fix: Slate RHI Resource Manager now locks mtex before GC to prevent multithread access to a UObject while processing rendering commands in the loading screen.

  • Bug Fix: Resolved an issue where the Retainer did not properly return the correct Layer ID.

  • Bug Fix: Changed paint calculations in the Retainer Widget to resolve an issue.

  • Bug Fix: We've made a correction to the Slate Global Invalidation mode concerning volatile flags on SWidgets. Previously, flags under an invisible parent that have just been made visible were sometimes ignored in the updating process.

  • Bug Fix: Resolved threading issues with PreLoad Screen.

  • Bug Fix: The Invalidation Panel now updates correctly when used in another panel.

  • Bug Fix: Removed invalid widgets from the fast path. When the FastPathGenerationNumber is incremented on the same frame as when the widget is removed, then the widget would hold a pointer to the invalidation root. That pointer may then because invalid. We've added code to detect that case and added WITH_SLATE_FIND_WIDGET_METADATA to help find the widget.

  • Bug Fix: Resolved an issue with the Slate Debugging Input Event parameter error.

  • Bug Fix: Resolved an issue with the Slate Invalidation Root by adding a test handler to check if the root is destroyed before the persistent Widget data is cleared. If so, the handler fixes the bad memory when the global invalidation flag changes.

  • Bug Fix: To fix a bug, UE will now delay the construction of ConsoleSlateDebugger and move the text construction from ConsoleSlateDebugger to the defined structure that holds the information. To support this we've also added a filter and more info to SWidgetEventLog.

  • Bug Fix: Implicit conversion warnings for Slate Enable Global Invalidation now function correctly.

  • Bug Fix: Made a correction to resize cursor blinking when trying to resize a Window making it very difficult to resize.

  • Bug Fix: We've released a fix to make sure the Retainer uses a valid InvalidationRoot. This should also fix issues in the fast path where the retainer was not updated when invalidated.

  • Bug Fix: Slate Tick is now correctly separated from replicated objects when using ClientRecordAsyncEndOfFrame1to replay recordings. This divides up the initial call to just Platform and Input ticking, which performs message pumping as well as some additional added Slate input tasks.

  • Bug Fix: Released a fix to invalidate the user widget canvas when its slot properties change.

  • Bug Fix: UE will now warn the user when the SRetainerWidget render target size is too big or 0.

  • Bug Fix: When reflowing the UI based on Right To Left, we now also mirror the pivot point about the middle, since everything is going to swap sides.

  • Bug Fix: Addressed a crash occurring when the widget loses focus and UE tries to open a submenu. The issue only occured on Mac because of how the message loop is handled.

  • Bug Fix: Menu anchors should now correctly create the popup window for dropdowns in a World space Widget Component.

  • Bug Fix: When the RHI texture resource is not ready, to keep the texture, transparent black now shows correctly, instead of rendering a white rectangle for a frame or two (which causes the UI to "flash").

  • New: The asset picker now includes Required Asset Tags so you can specify the required key/value pairs necessary to display an asset.

  • New: Added the SLayerImage widget to draw an arbitrary number of images on top of each other.

  • New: VCamCore now has an accessor for the protected Scene Viewport variable in the SEditor Viewport class.

  • New: You can now double-click to disable words in multiline text boxes, such as the Editable Text and Text Box.

  • New: SpinBox now supports double and int64.

  • New: The new Header Row now allows you to select the header you want to generate.

  • New: There are several new updates to the Widget Reflector:

    • Overall widget layout update

    • Ability to save your settings

    • Ability to toggle your column visibility in the menu

    • Widget Snapshot Visualizer includes a clipping zone

    • Added filters for other UMG widgets in the widget tree

  • New: Added the Console Slate Debugger Update, which enables you to determine which widgets have update flags. Other widgets can be updated as a side effect of the updated widgets.

  • New: Added debugging tool for a navigation event in the Widget Reflector.

  • New: Added debugging tool to support drawing debug information on top of Slate Widgets.

  • New: You can now use a Visualizer key input in Demo Mode through the commands Slate.DemoMode.KeyEvent or Slate.DemoMode.MouseEvent. This input is now separate from Widget Reflector.

  • New: Mouse Capture is now compatible with Widget Reflector events.

  • New: Added the Slate Navigation Event Simulator so when offline, the event simulates a navigation event as it would occur in game. The OnNavigation function and other callbacks are not executed. If the widget has special needs for simulation, the Simulated Navigation MetaData can be added to the widget.

  • New: Introduced a way to prevent IO hitches in font loading. You can now use the CVar, Slate.Font.AsyncLazyLoad 1, to force fonts marked as LazyLoad to be loaded on a background thread. Until these fonts show up you'll see your error glyph like, until the font finishes loading, once it does we'll invalidate font layouts forcing recalculation.

  • New: Exposed ListView's EntrySpacing to Blueprints.

  • New: Added the console command SlateDebugger.InvalidationRoot. We've also enabled the option to display how the invalidation roots are updated.

  • New: Added the console command SlateDebugger.Invalidate. We've also enabled the option to display how the widget gets invalidated.

  • New: Added a debug tool to see which widgets are painted. It's useful in a fast path, and can be activated from the console with 'SlateDebugger.Paint.Start'・

  • New: Added Slate.CheckUObjectRenderResources to find UObject resources that are not valid but used by Slate RHI.

  • New: Added a log to record how input events are routed in Slate. This log uses the ConsoleSlateDebugger with the option "InputRoutingModeEnable" enabled.

  • New: Added entry size getters to Tile View.

  • Improvement: The checkbox widget now treats key down events similarly to events and carries over any settings for click/touch/press methods. The touch/press methods are now part of the SCheckbox and are all exposed to the UWidget.

  • Improvement: The Collapse Menu On Parent Focus setting now appears on the SComboBox node, in addition to the SComboButton.

  • Improvement: The MultiLine Editable Text Box now clears focus when pressing the Escape key. This is now consistent with the Editable Text Box behavior.

  • Improvement: You can now use Undo in any editable text field.

  • Improvement: The Rich TextBlock decorator class now uses the overridden default style, when provided.

  • Improvement: The Input Preprocessor mouse movement event call is now part of the Process Mouse Move Event, and is removed from OnMouseMove/OnRawMouseMove. This ensures touch events are always routed through the Input Preprocessor and can be handled appropriately.

  • Improvement: Several major improvements were made to RDP behavior with Editor.

  • Improvement: The Input Event only translates when needed.

  • Improvement: The Universal Search binding is now added to the Widget Blueprint Indexer.

  • Improvement: Changed FWidgetProxy::MarkProxyUpdatedThisFrame from static to class function.

  • Improvement: Added a tint option to the draw quad.

  • Improvement: In Slate, you can now use the window as a dangling pointer with the Pre Load Slate Widget Renderer.

  • Improvement: Fixed some instances of the deprecated EInvalidateWidget to EInvalidateWidgetReason. Moved EWidgetUpdateFlags into its own file. Changed FWidgetProxy::MarkProxyUpdatedThisFrame from static to class function.

  • Improvement: You can now use the Input Routing Mode Enabled to log how input events are routed in Slate.

  • Deprecated: The 'Slate.InvalidationDebugging'・console command is not deprecated. Use 'SlateDebugger.Invalidate.Enable'・instead.

  • Deprecated: Renamed TranslateMouseCoordinateFor3DChild to TranslateMouseCoordinateForCustomHitTestChild, to more accurately reflect its purpose.

UMG

  • Crash Fix: Editor no longer crashes when Widget Renderer's status is nullptr.

  • Crash Fix: Editor no longer crashes when dragging and dropping a named slot element.

  • Crash Fix: Added a null check to the Widget Blueprint Has Latent Actions to prevent Editor from crashing when pasting widget Blueprints from other projects that reference a Blueprint library.

  • Crash Fix: UMG slots now have a check for InSlot>Content to validate the property. This prevents an issue that caused Editor to crash.

  • Bug Fix: WidgetComponent now correctly supports Component only using SWidget.

  • Bug Fix: Widgets now clip correctly.

  • Bug Fix: Widget components with render targets that change colors now re-initialize correctly.

  • Bug Fix: Editor utility widgets no longer incorrectly dirty the level when reinstancing.

  • Bug Fix: When a Widget is renamed, you can now search for any previous variable "get" nodes and adjust the orphan pins correctly.

  • Bug Fix: Widget Components now correctly support using only SWidgets.

  • Bug Fix: Widget Components now re-initialize render target color changes correctly.

  • Bug Fix: UMG slot Details category no longer incorrectly changes position when multiple widgets are selected.

  • Bug Fix: When verifying if the BindWidget properties are bound to the correct Widget, UE will now test on the Widget owner when the Widget is part of a Named Slot. The Widget will appear 2 times because the ForEach is recursive. Also, an inner UserWidget may have a NamedSlot that contains the BindWidget. Keep in mind that BindWidget is part of the inner UserWidget tree but not part of the inner UserWidget class. To help support this, the CompileAllBlueprint commandlet has been changed to only compile a certain type of Blueprint.

  • Bug Fix: The UMG Designer Class Viewer now correctly populates the class tree when a parent Blueprint is loaded without the child Blueprint.

  • Bug Fix: Concerning Slate, added missing UPROPERTY tag on UMG widget.

  • Bug Fix: When renaming, we've added a reason for when the BindWidget is not of the right type.

  • Bug Fix: Abstract & deprecated widgets are now hidden in the UMG Widget palette.

  • Bug Fix: We've changed the Pointer Index to an integer.

  • Bug Fix: Implemented a correction in UMG Designer to prevent a crash due to drag/drop of the named slot element.

  • Bug Fix: Released a fix to prevent a crash in AsyncTaskDowloadImage when using nullrhi.

  • Bug Fix: Released a fix for when Background Blur in UMG is filled with black when UI.CompositeMode is used in HDR.

  • Bug Fix: WidgetInteractionComponent's implementation of OnComponentCreated now calls the parent class'・implementation.

  • Bug Fix: Fixed "Replace Binding" incorrectly removing all bindings when all requested widgets are already bound to other tracks.

  • New: You can now use a scaling ruler when using ScaleToFit.

  • New: You can now use Set Animation Current Time to set the current time of the animation without changing the game state (playing, pausing, ect.)

  • New: UMG now has a new navigation simulation and debugging input.

  • New: Added Scale To Fit to the scaling ruler.

  • New: You can now add an unique UMG Designer Extension externally from the designer module.

  • New: The TickMode option on Widget Components improves widget performance by preventing the widget from ticking when the widget is not visible or not set.

  • Bug Fix: You can now correctly select which variable to delete with the "Delete unused variables" command.

  • New: Added a generic Check Box List to display a list of checkboxes with labels associated with your variables.

  • New: Added dialog to confirm that the user wants to delete a widget, when it's used in the graph.

  • New: Exposed WidgetInteractionComponent debug line thickness.

  • New: Added default Widget Blueprint parent class to Project Settings.

  • New: Added events for when interpolation starts and when it updates on the numeric textblock to allow for synchronized sounds or other stuff.

  • New: Added draw function to show the result of the Navigation simulation. UE now displays the result for selected widget or all the widgets if there is no selection.

  • Improvement: The Property Binding now hides by default in the preview widget.

  • Improvement: You can now use a culling rectangle for the appended grid. The owner of the grid may have a different culling rectangle than when it got created.

  • Improvement: Redesigned how templates (archetypes) are generated for widgets, resulting in large memory savings (approximately 60% of total template memory can now be recouped).

  • Deprecated: On Get Menu Content Event is now deprecated. Use the On Get User Menu Content Event instead.

Virtual Production

  • Crash Fix: Fixed a crash when r.D3D11.UseAllowTearing was changed after viewport creation and then was Resized. This was happening when using Multi-User with -ConcertAutoConnect and Oculus VR plugin was enabled, because auto connection created a notification window, then Oculus VR cleared r.D3D11.UseAllowTearing.

  • Crash Fix: Corrected a crash that occurred when r.D3D11.UseAllowTearing was changed after viewport creation and then got resized. This was happening when using Multi-User with -ConcertAutoConnect and Oculus VR plugin was enabled because auto connection would create a notification window and then Oculus VR would clear r.D3D11.UseAllowTearing.

  • Crash Fix: Fixed an AudioCaptureTimecodeProvider crash due to stack overflow when calling GetFrameRate().

  • Crash Fix: Fixed the editor crashing when stopping the WebControl server.

  • Crash Fix: Fixed a crash in nDisplay when DisplayClusterRootActor sits in the sublevel and this sublevel is not last in the list.

  • Crash Fix: Fixed a crash for when nDisplay was used with instanced stereo enabled.

  • Crash Fix: Fix crash when in VR and Multi-User, where other machines may crash when one starts VR Mode. This was happening because success of GetTransformAndForwardVector was not being checked, hence uninitialized location values were being sent in the Multi-User/Concert event to the other clients, and eventually cause NaN values in the bounds of laser spline mesh components of the VR presence actor.

  • Crash Fix: Fixed a crash when hot reloading level in -game by correctly resolving the world package.

  • Crash Fix: Fixed a possible crash where frame rate is bad in timecode synchronizer.

  • Crash Fix: MoviePipeline now skips null shots in the Executor Job to avoid crashing when trying to check if they match our target shot.

  • Crash Fix: Fixed an nDisplay crash that occurred when it was launched in windowed mode with a window size larger than the main display size.

  • Crash Fix: Fixed a crash that was preventing sequences to be saved at nDisplay cluster nodes via StartRecording/StopRecording Blueprint commands.

  • Crash Fix: Fixed a crash on nDisplay when adding VR Scouting Actors.

  • Crash Fix: Fixed some nDisplay crashes while working with Multi-User:

    • Crash on LoadLevel

    • Crash on root actor manipulations

  • Crash Fix: Fixed a crash when cluster events are sent to the second PIE session.

  • Crash Fix: Fixed a crash when nDisplay was used with instanced stereo enabled.

  • Crash Fix: Fixed an nDisplay crash when camera component was missing at Pawn in the in-camera VFX workflow.

  • Crash Fix: Fixed an editor crash when an nDisplay cluster event is emitted in PIE.

  • Crash Fix: Fixed various nDisplay crashes that were happening when Multi-User was used.

  • Bug Fix: Fixed a gamma issue in VPFullScreenUserWidget - PostProcess mode (UMG was rendered too dark).

  • Bug Fix: Fixed a missed frame warning that was missing when using genlock from the ref pin.

  • Bug Fix: Fixed a bug to prevent sending negative color values to OpenColorIO transforms.

  • Bug Fix: Fixed a jitter and periodic glitch for nDisplay when requesting screen percentage below 0.5. TAA Upsampling were only working well up to 2x, so if larger ratios are requested it now clamps the primary screen percentage to 0.5 and the secondary screen percentage does the remaining upscaling.

  • Bug Fix: Fixed three of functions in LiveLinkBlueprintLibrary to be static so that they are accessible from Blueprints.

  • Bug Fix: Teleport to bookmark now takes headset offset into account.

  • Bug Fix: Fixed a bug for Multi-GPU in DoCrossGPUTransfers, where it was using view rects without their offsets within the render target.

  • Bug Fix: CCRs: Made sure that Color Correct Regions appear during the search.

  • Bug Fix: AJA has improved format detection to include HDMI, and suggest progressive/interlaced based on request. Also fixed the sync rate calculation based on PsF. Tested using KONA 5, using PsF, interlaced and progressive inputs, with and without WaitForFrame flag, which currently has no effect.

  • Bug Fix: Fixed an issue with CCRs not getting Scene Textures for post processing.

  • Bug Fix: Fixed nDisplay's multi viewports functionality for DX12.

  • Bug Fix: Provided a fix for KONA 5/IO4k sub 30fps 4k issues.

  • Bug Fix: Fixed 3D audio in VR mode, where it was not taking the HMD rotation into account when setting the transform of the audio listener.

  • Bug Fix: Fixed incorrect settings in the RemoteSessionFrameBufferChannel.

  • Bug Fix: : Fixed a missing CloseProc in Switchboard.

  • Bug Fix: Composure preview window will now Suspend when in Simulate.

  • Bug Fix: Fixed the AppleProRes Media Encoder in MoviePipeline using a removed variable.

  • Bug Fix: Fixed queues in MoviePipeline that were losing their ShotInfo when the editor was restarted.

  • Bug Fix: Snapping functionality now automatically turns off when going into VR with the VR scouting plugin enabled, then turns back on when exiting VR. This avoids an issue of not being able to grab items.

  • Bug Fix: Delayed start (and device enumeration) in LiveLinkXR to OnEndFrame so that UpdatePoses can happen beforehand. Without this workaround, default LiveLink presets using LiveLinkXR would not work because it enumerates the devices before the first call to FSteamVRHMD::UpdatePoses() happens (since default presets are set in OnFEngineLoopInitComplete), and without a valid pose the tracker is not enumerated.

  • Bug Fix: Add missing UpdateResidency() calls in ConditionalCompactAccelerationStructure().

  • Bug Fix: Allow AppleARKit and AppleARKitFaceSupport plugins to package in Win64 (in addition to iOS). Without this, users are not able to stream from Live Link Face app into a packaged game in Windows.

  • Bug Fix: Fixed 3D audio in VR mode, where it wasn't taking the HMD rotation into account when setting the transform of the audio listener.

  • Bug Fix: TDM: Genlock status is now set to Synchronizing when the genlock signal is not valid in AJA card.

  • Bug Fix: Fixed zombie UE instances in Switchboard:

    • List of running programs can now detect multiple instances of the same program running on the listener, and so can send the command to kill them and avoid zombies.

    • Resolved cstat_project exception. The issue was that multiple instances of the cstat_project command were being issued, but only the last ID was remembered in the program_name to program_id dict.

    • Improved socket management and disconnect detection.

  • Bug Fix: Removed the dependency of VPCCR on D3D12 RHI because it was breaking compilations on platforms that do not support it.

  • Bug Fix: Fixed a Switchboard bug related to Monitor UI not populating when there are no initial devices. Can now take nDisplay config paths with double quotes. Also ensured config save flag is restored even when exceptions happen.

  • Bug Fix: Allows the Remote Control API to be used in shipping.

  • Bug Fix: Apply Multicast TimeToLive (TTL) to the Unicast socket, which is the one used to send the multicast packets. This does not affect unicast TTL.

  • Bug Fix: nDisplay now avoids a crash in Root Actor PostLoad when there is no World yet. PostLoad is being called without a World, and InitalizeRootActor was crashing. It now checks for the World and returns immediately without initializing. Since PostLoad is being called later when there is a World, initialization is performed then. This was happening in one of the test projects when nDisplay is in a sublevel, even with Always Loaded checked.

  • Bug Fix: Fixed PFM preview Blueprints.

  • Bug Fix: Color Correct Regions were fixed to handle an issue due to the fact that lower Scalability settings for the rendering pipeline were dropping the Alpha channel completely. Therefore, sampling Scene Texture for the Alpha channel was returning 0. Since we are pre-multiplying the output color by alpha, it was giving black color in a region area as a result. Since there was no Alpha channel in Scene texture or in color-correct region render-target texture, the blending pass was producing a black box.

  • Bug Fix: Moved LiveLinkXRSourceFactory out of LiveLinkXREditor so it would work in Runtime.

  • Bug Fix: Fixed high CPU usage due to spinning reading a pipe.

  • Bug Fix: Applied Multicast TimeToLive (TTL) to the Unicast socket, which is the one used to send the multicast packets. This does not affect Unicast TTL.

  • Bug Fix: Fixed rgb-to-yuv conversion shaders for mediacapture (mostly apparent in 720p).

  • Bug Fix: MoviePipeline has a fixed scenario where if one camera cut section in a moviescene was disabled, all subsequent camera cuts in that shot would get disabled.

  • Bug Fix: CCR: Fixed the issue related to how subsurface objects and other types of Materials are propagated further down the post processing pipeline, and processed by CCR incorrectly. In High Effects settings, scene color stored in RGBA texture and shaders can sample alpha correctly. In Lower Effects settings Shaders have to sample a special GBuffer texture containing opacity. Since these materials are processed properly much later in pipeline, Opacity looks more like a stencil than anything.

  • Bug Fix: Fixed a LiveLinkXR bug where OnEndFrame could call a destroyed object.

  • Bug Fix: Vcam was updated to prevent users from recording with a slate that has a space in it.

  • Bug Fix: Fix for VR Scouting ensured that Gaffer Light Level is propagated to Multi-User Clients.

  • Bug Fix: For Vcam, the following have been fixed: map indicators, screenshot info, stats readers, and focus/interact panel bugs.

  • Bug Fix: Fixed the GetAttributeNode pins.

  • Bug Fix: Fixed VProd Measure Tool not updating motion controller texture in context menu on construct.

  • Bug Fix: For Vcam, it now properly views clips recorded from the currently open LevelSequence.

  • Bug Fix: VR Scouting bookmarks are now spawned in the direction of the controller.

  • Bug Fix: Fixed a KONA HDMI RGB input issue.

  • Bug Fix: Fixed an issue where the Stop PIE button was not available after any error during nDisplay initialization.

  • Bug Fix: Updated protocols unit tests.

  • Bug Fix: Fixed the treads and sockets issue for sACN:

    • Removed the thread for each universe.

    • The socket now opens only when the universe is using it.

    • Sockets are cleaned if there are no listeners.

    • The sACN thread listener has been removed.

    • It is now using a gameplay tick for listening changes on the sockets.

  • Bug Fix: Fixed a custom origin component set for PICP and PICP-MPCDI projection policies.

  • Bug Fix: Fixed byte swapping for sACN.

  • Bug Fix: Implemented a fix for VR scouting tools that would not work after closing the VR menu if Undo/Redo was pressed.

  • Bug Fix: The Gaffer Actor is now transacted when modified via the Gaffer tool in VR Scouting

  • Bug Fix: Fixed an issue where nDisplay root actor could not be found if it was located in a sub-level.

  • Bug Fix: The sACN Universe not ticking when slate UI not in focus has been fixed. It now gets replace with core delegate. It blocks the ticking in ThrottleManager

  • Bug Fix: In VR Scouting, the Second Controller was unusable with First Controller submenu. This has been fixed.

  • Bug Fix: Fixed replication of all nDisplay internal real numbers to prevent precision loss.

  • Bug Fix: Switchboard had issues fixed relating to Settings:

    • Plugin Settings now properly clear between config loads and do not contaminate each other.

    • Fixed issues where instance settings variables were sometimes being used instead of class settings variables.

    • All settings are now in collections instead of independent attributes, simplifying parts of the code.

    • Cleaned the settings code, clearly separating plugin from instance-only settings.

    • Removed redundant cascade of resaving of settings every time a setting changes while the Settings Dialog is open.

    • Config paths now accept double quotes (as returned by Windows "Copy As Path").

  • Bug Fix: Switchboard has an improved project build command. Previously, it was not building the project cpp modules.

  • Bug Fix: An issue with Switchboard has been fixed where it was not able to build a non-Perforce project due to a hidden button. This also handles an error message from Perforce cstat instead of showing only the last word in the message.

  • Bug Fix: Fixed a bug in Switchboard where each listener_client could use up to 100% of a core.

  • Bug Fix: In Switchboard, fixed zombie PresentMon:

    • The Flip monitors are now being killed explicitly, not relying on their functionality to terminate when their watched process terminates.

    • Killing processes now send a close signal and allow 2 seconds for the process to close before forcing the termination, giving it an opportunity for proper cleanup.

    • To keep listener responsiveness given the new 2 second timeout, killing processes is now an async task.

  • Bug Fix: Switchboard was not updating the launch button when launch failed. This has been fixed.

  • Bug Fix: Switchboard miscellaneous fixes:

    • Added a CONCERTRETRYAUTOCONNECTONERROR command line option when launching MU.

    • Improved handling of cstat response.

    • Renamed the Workspace Name field to clarify that it is a name and not a path.

    • Fixed device removal notifications, where you can choose whether or not to update the config or not.

    • Added NoVerifyGC as a fixed option when launching nDisplay render nodes.

  • Bug Fix : Switchboard can now distinguish between multiple instances of Unreal opened by the same listener upon reconnection, by matching a caller field with the device.

    • Fixed mishandling of a program start failed delegate.

    • Parses the fullscreen parameter in nDisplay config file and uses it to properly construct the launching command line.

    • Added noxrstereo to nDisplay launch command to avoid conflicts with VR devices (such as Vive Tracker).

    • Added a way to specify ExecCmds.

    • Added DisableAllScreenMessages when launching the nodes to avoid sync issues due to notifications.

    • Re-parses config file before launch to update parameters that are exclusively controlled by it. Otherwise you could, for example, change screen resolution and it would not be updated unless the config file is re-added, losing all overrides and customizations of the nDisplay set of devices.

    • Added a way for Device instance settings to opt out from getting a UI in the Settings Dialog -For example, when these settings are controlled by the config file and not manually by the user.

    • Last column in nDisplay Monitor does not stretch anymore. It is more pleasing this way.

  • New: Switchboard now handles full screen nDisplay window configuration when launching the render nodes.

  • New: For Switchboard:

    • Added support for Maps to nDisplay launches.

    • Added a Default Map option to avoid forcing the map in the command line and instead use project defaults.

    • Moved map setting to configuration, since this is a per-project setting.

    • Map list now updates when map path is changed.

  • New: For Switchboard:

    • Added overrides for cmd line and execcmds for nDisplay nodes.

    • Separated cmd line and execcmds between "unreal" and "ndisplay"・devices.

  • New: Miscellaneous improvements for Switchboard:

    • Added -forceres to the nDisplay launch command line when in windowed mode.

  • New: Switchboard can now choose which commands are echoed in the output log of the listener. This is meant to avoid a spam of periodic messages.

  • New: For Switchboard:

    • Added device icons.

    • Improved handling of missing icons.

    • Renamed a specific mobile device to LiveLinkFace.

  • New: Switchboard status now includes the NVIDIA driver version.

  • New: Switchboard now has a taskbar monitoring autohide flag. Also removed one of the build flags that could prevent engine rebuild.

  • New: Switchboard now injects class overrides to avoid needing WindowsEngine.ini in Perforce. It also includes the bUseBorderlessWindow option in DefaultGame.ini.

  • New: Switchboard: Added the ability to read and report NVIDIA Sync Status and the Flip Mode of a process started by Switchboard (i.e. UE) Listener:

    • The task is performed asynchronously.

    • Added a mechanism to run tasks asynchronously based on Async and TFuture.

    • Fixed a bug related to the listener's main loop fps.

    • Added a mechanism to identify equivalent requested tasks so that they can be optionally rejected.

    • Used said mechanism so that repeated get sync status requests can be safely rejected if an equivalent task is already in progress.

    • Python App:

      • Added a mechanism for plugins to add their own UIs into the main window, namely the main toolbar and new plugin tab manager.

      • Using this mechanism, added a custom tab to monitor nDisplay nodes.

      • Added an nDisplay Monitor class to query and parse the new get sync status command and populate the model used by the tableview in the custom tab.

  • New: Switchboard now has detection of compatibility flags in UE4Editor executable. In particular, the Disable Fullscreen Optimization flag is of interest because it can cause tearing in LED walls. Also fixed the missing if PLATFORM_WINDOWS.

  • New: Switchboard Listener now reports its state, namely its running processes, to the Switchboard app upon connection. This is particularly useful when the Switchboard app gets restarted and needs to reconnect.

  • New: VCamCore is a new framework for creating, customizing, and using virtual cameras in Unreal Engine. It can be used in Editor, Play In Editor (PIE), and standalone game modes. It is fully customizable and does not require any special game modes, controllers, or maps. To create a Virtual Camera, add a CineCameraActor to your scene and attach a VCamComponent to it. Add various Modifiers and Output Providers to customize, and for added flexibility, the Composure compositing system can also be integrated.

  • New: Updated the Aja TimecodeProvider and internal library to support reading from a dedicated LTC pin.

  • New: Added a new type of asset-Remote Control Preset-that makes it possible to expose object properties and functions to remote control. It also allows grouping properties from different objects under a single panel.

  • New: For TextureShare, a plugin was added that can be used to share textures and buffers between Unreal Engine and third-party applications.

  • New: Added a LiveLink subject rebroadcast option to rebroadcast any LiveLink subject over a separate LiveLink provider. This allows the subject to be shared with other editors receiving the LiveLink data.

  • New: Added a Composure output option to VPFullScreenUserWidget that allows the widget to render the UMG into a separate render target instead of directly to a viewport. This is intended to primarily be used with the Composure system for compositing UMG layers with other layers.

  • New: For beam rendering:

    • Added more samples for high quality

    • Changed "set initial state" behavior to use defaults and "snap"・first DMX packets

    • Tweaked zoom (beam and light)

    • Added support for "Intensity Scale" in PIE

    • Fixed warning from dynamic materials when packaging matrix fixture

    • Tweaked beam culling

    • All lights fixtures are now moveable by default

    • Updated pan/tilt rotation range based on MF feedback

  • New: Added Blueprint and C++ accessors for various parts of the Composure pipeline. Also added a sample Editor Utility Widget Blueprint in the VirtualProduction/VCamCore plugin that uses the new functionality to setup a simple "A over B" composure stack with a single click.

  • New: Sample Blueprints and Assets for VCamCore are now available.

  • New: A new engine plugin is now available under VirtualProduction/LiveLinkXR. This plugin allows you to track any SteamVR-compatible devices and send the transform data out over LiveLink. Supports HMDs, controllers, Vive Trackers, and any other trackable device.

  • New: Removed the timecode frame rate requirement from a Live Link subject.

  • New: Added a smooth-latest mode to the timecode evaluation for Live Link subjects.

  • New: Updated Live Link to support loop playback by using received order dropouts. Also added verbose logs to help debug live streams.

  • New: Added a new StageMonitoring plugin to manage stage machine logging and monitoring.

  • New: Updated the clock offset estimation to be continuous so as to have a more accurate difference on each Live Link sample. That way, EngineTime evaluation mode can be seen as a smooth latest mode.

  • New: Added settings to RemoteControl plugin to auto start web servers on boot.

  • New: The Virtual Camera has been implemented, and GameMode/PlayerController has been deprecated. Please use the new SimpleVirtualCamera and VirtualCamera2 Classes.

  • New: For Concert: A command line option, -CONCERTISHEADLESS, was added to disable notification windows as these windows can interfere with nDisplay sync.

  • New: Added functionality to VPFullScreenUserWidget to optionally specify a viewport instead of always assuming currently selected viewport.

  • New: For nDisplay: Config paths with spaces are now supported. This requires a small change in the command line, where you need a '-'・prefix, such as -dc_cfg="path\with spaces\config.cfg" iInstead of: dc_cfg="path\nospaces\config.cfg"・If it cannot parse the new form, it will try the old one, so that old custom launchers can still work. The same thing was done with -dc_node and -dc_gpu for consistency.

  • New: Composure can now be included in packaged game builds.

  • New: PresentMon binary and associated license file was added to Switchboard.

  • New: : Added to Switchboard support for the new JSON-based nDisplay config file format.

  • New: LiveLink: Added a flag to disable the LiveLinkComponentController when inside a Sequencer spawnable. This avoids LiveLink interfering with Sequencer when playing back spawnables. Also added a way to explicitly pause the controller from evaluating LiveLink.

  • New: On Cine Camera, there is a change to depth-of-field method from None to Do Not Override to describe what it is actually doing, as it is not overriding post process settings. Also added a new method of Disable, which disables depth of field entirely by overriding post process settings.

  • New: Added native delegates to the OSC server to pass address and port to callbacks.

  • New: ComposureWizard is an example Editor Utility Widget for use with VCamCore that shows how to create a simple composure stack and hook it up to a virtual camera automatically using Blueprints. Starting from an empty map, you can click a couple of buttons and instantly connect via the UnrealRemote 2 app from iOS.

  • New: In OCIO BP wrappers of the Scene View Extensions were added that can be assigned OCIO config and associated with a rendering context.

  • New: Added support for fractional timecode to ARKit face protocol.

  • New: Added WebSocket support to the Web Remote Control API.

  • New: MoviePipeline EXRs now write multiple render passes to a single EXR file instead of separate EXR files.

  • New: MoviePipeline now has metadata support for multi-layered EXR files. Implementation adds metadata for: Camera Focal Length, Focal Distance, FStop, Sensor Height/Width, camera position/rotation, previous camera position/rotation, frame rate, level sequence name, level name, and job date/time (UTC). Additional metadata can be added by implementing additional setting classes.

  • New: In MoviePipeline, added a {version} format string which can be either specifically versioned or can auto-detect the version number. Auto detection looks for the first {version} tag in the output directory, then searches all sibling files and folders for version tags before picking the highest one and incrementing that by one.

  • New: MoviePipeline has refactored the UMoviePipelineDeferredPassBase into a more common base class to allow additional rendering passes.

  • New: TDM has an added way to detect if the Genlock signal is present.

  • New: Added a command line option to tell XRSystem to not override GEngine->StereoRenderingDevice. This is useful when XR-tracking features are desired, but GEngine->StereoRenderingDevice should be implemented by a different system (such as nDisplay). In the absence of this cmd line parameter, everything works as usual.

  • New: Movie Pipeline has initial refactoring to simplify the setup of custom render passes.

  • New: In MoviePipeline, Path Tracer and select other Viewport Lit modes are now supported as output passes for the render pipeline.

  • New: Added Static and Unicast Endpoint configuration to MotionBuilder LiveLink plugin.

  • New: Added support for fractional timecodes to ARKit face protocol.

  • New: UDP Messaging: Fixed UDP Messaging static endpoints that were not properly sent to when the unicast endpoint was forced to a specific interface. Modified the Multi-User Server launching to bind a different port on the unicast endpoint port of the editor. This is set when it transfers its settings to it. Updated the UDP messaging settings tooltip as well as a multi-user launch server button. Now exposes Server Port settings for the Multi-User server unicast endpoint over the passed UDP messaging settings when booting the server from the Editor.

  • New: Exposed settings of UDP Messaging module

  • New: Switchboard has an added -ConcertIsHeadless command line option when launching nodes to avoid notification windows from interfering with nDisplay sync. Also disabled nDisplay logs that were on by default.

  • New: MoviePipeline now has the ability for passes to override show flags based on user settings such as disabling Depth of Field or Motion Blur.

  • New: Letterboxing support was added to Movie Render Queue.

  • New: In MoviePipeline, the separation between Engine Pass and Render Pass was removed. The abstraction layer was providing no benefits in practice, and complicating implementation of additional passes.

  • New: Timecode has converted the BlackMagic Timecode Provider and Custom Timesteps to genlocked versions. This allows the Blackmagic timecode to use genlock to count.

  • New: OCIO viewport display look now has a hook in the viewport View menu to configure a display look. Also added an OCIO display view extension to apply color conversion to viewport being rendered.

  • New: Timecode has an improved robustness for the LinearTimecodeDecoder, in particular, for AudioCaptureTimecodeProvider:

    • Checks for a pattern at end and beginning.

    • Checks for valid timecode value ranges.

    • Checks for valid bit time durations when provided. Also converted to GenlockedTimecodeProvider since LTC is typically genlocked to a master clock or video signal.

  • New: Timed Data Monitor now supports multi-format and timecode counts from Genlock Sync if the timecode provider allows it. Added an abstract class GenlockedTimecodeProvider and GenlockedCustomTimeStep to support this functionality. Added a function that more explicitly fetches the timecode, and can be used to encapsulate certain behavior (like checking genlock). The getters are now meant to not fetch from HW and instead return a cached value-This should not affect existing timecode providers. Also, AJA now defaults to trying to enable multiformat.

  • New: Added a MediaUtils.StartupProfile CVar that can be used to load the specified Media Profile at startup. Because this is usually a hardware-dependent setting (such as per PC), this allows the user to specify it in the -SystemSettings section when launching the project. An example would be in DefaultEngine.ini: [SystemSettingsNode0] MediaUtils.StartupProfile=/Game/MP_Test.MP_Test. You would pass -SystemSettings=SystemSettingsNode0 in the command line.

  • New: Added a Switchboard application that provides a way to control remote machines on a Virtual Production set. It can be used to sync and build Unreal projects on those machines, as well as launch nDisplay nodes.

  • To make launching Switchboard easier, an editor plugin named Switchboard was also added. This plugin can be used to:

    • install Switchboard's dependencies on first launch

    • launch Switchboard

    • launch the Switchboard listener

    • (un)install the Switchboard listener for windows autostart

  • It also adds several project settings that can be used to change how Switchboard and its listener are started. This then offers the opportunity to use a different Python interpreter than the one installed by default.

  • A UE4 program named SwitchboardListener was added to communicate with remote clients. It relays various information and commands between Switchboard and the remote machine. It is meant to be started on the remote host that the user wants to control via Switchboard. The SwitchboardListener can:

    • Start arbitrary applications and track their process

    • (Soft) kill previously started applications and send back their output

    • Send and receive arbitrary files

    • Report GPU sync state

  • New: Updates DXM fixtures assets.

  • New: Implemented a node for casting a fixture patch to a specified fixture type.

  • New: Added a new plugin that allows an exchange of any textures between UE4 and third-party applications; sample projects are provided as well. Also added integrated textures exchange functionality into nDisplay, and multi-GPU render support for nDisplay viewports.

  • New: Initial implementation of nDisplay configuration in-editor preview has been added. This is an early preview, limited by simple and MPCDI projection policies only. It will be finished in the next release.

  • New: Two new fixture types have been added: The first adds key inputs for Delete, Duplicate, Copy, and Paste for Functions and Modes The second adds attribute names next to the function name.

  • New: Users can now upload or download their created fixtures into the GDTF database as GDTF files.

  • New: The in-camera VFX workflow now supports Multi-User editing functionality. Modifying IncameraSettings and IncameraStageSettings no longer crashes the nDisplay cluster.

  • New: A new nDisplay projection policy was added to allow utilization of VIOSO SDK for multi-display setups (DX11, DX12).

  • New: A texture preview interface for Output Graph in "DisplayClusterConfigurator" has been implemented.

  • New: RemoteControlWebInterface provides a web control interface to remote control UE preset.

  • New: nDisplayListener properly sets a working directory for every nDisplay UE4 instance on launch.

  • New: nDisplay now syncs objects that are replicated on TG_PostPhysics tick group.

  • New: GameVice is now integrated with panning and teleport to home for Vcam.

  • New: Duplicated entities (when using Ctrl+W or the Context Menu command) are now added immediately after their original counterparts.

  • New: Vcam VirtualJoystick has been integrated with flight mode animations.

  • New: A master node of a preview config is used automatically by default for nDisplay PIE sessions.

  • New: Added a mode dropdown with the options Multicast, Broadcast, and Unicast.

  • New: Integration of modifier delegates into VCam2UI has been added.

  • New: Switchboard added a -MaxGPUCount setting to support mGPU.

  • New: Added a RenderSync log category to the nDisplayLauncher Log tab and nDisplay core synchronization logic.

  • New: In Switchboard, build progress for each device is now shown:

    • Sync progress also has an indication of progress in the form of stdout line count.

    • Build step is in the tooltip for build percentage.

    • Any program start request from Switchboard can now include a flag to get stdout updates as they happen.

    • Fixed an issue with keep alive while building.

    • Replaced TAtomic with std::atomic due to deprecation warning in source.

    • Fixed an issue when building a path to VPRoles.ini file where double quotes were incorrectly included.

    • Fixed getting the CL for the project instead of the Engine.

  • New: Added support for making Virtual Subjects in Blueprint. Blueprint Virtual Subjects can be created through the Create Advanced Asset dialog under Live Link > Blueprint Virtual Subject.

  • New: Replaced VRPN analog data serialization to text hex format to avoid precision loss.

  • New: In Switchboard, missing command line options for Stage Monitor to work properly with nDisplay have been added: VPRole, StageFriendlyName, and SessionId. It also now has an improved handling of writing strings on int fields in the settings dialog.

  • New: Updated focal length and aperture slider value labels now support GameVice integration.

  • New: Vcam has added MotionAdjustment stabilization delegates.

  • New: You can now use the nDisplay root node as an origin for a simple projection screen when its parent is missing in a config file.

  • New: Two-finger pinch-to-zoom and panning now implemented into VCam Map.

  • Deprecated: The OnProtocolReceived event has a deprecated.

XR

  • Crash Fix: Fixed a crash in Magic Leap when launching project via editor with -game and ZI is enabled and running.

  • Crash Fix: Fixed a crash in the Unreal test framework for HoloLens 2.

  • Crash Fix: Fixed a Vulkan editor crash on dual GPU machines. The lifetime of the strings given to UE via ml_remote.h were maintained by the VkExtensionProperties object sent to UE instead of providing a string view. When a second GPU queried GetVulkanDeviceExtensionsRequired, the original strings were cleared. The first GPU would then receive garbage data when acting upon the char*s it was given. This change allows dual GPU systems to launch the editor with ZI enabled.

  • Crash Fix: VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT support was added for pipeline stage and access mask. This fixes a potential crash on Quest/Quest2 with Vulkan.

  • Crash Fix: Added new texture aliasing APIs for OpenGL. The missing implementation was causing an assertion failure and crash when initializing mobile VR devices using OpenGL.

  • Crash Fix: Fixed an OpenXR crash when entering VR Preview a second time.

  • Crash Fix: Fixed a potential crash caused by null pointer access when cooking ARCore candidate images.

  • Bug Fix: Fixed an HMD-tracked query so it will ignore extra PIE worlds. This fixes problems with local multiplayer PIE and VR. The first player's camera will be VR. Others will not.

  • Bug Fix: Fixed a hologram jitter when not using multiview.

  • Bug Fix: Cleared MRMesh blocks when the world scale is changed.

  • Bug Fix: The USE_LOGGING_IN_SHIPPING macro now works as expected on Lumin.

  • Bug Fix: For HoloLens Remoting, addressed an issue where the first VR Preview against a remoting connection would only show a still image of the scene.

  • Bug Fix: Fixed a critical performance issue-CustomPresent now returns a correct value for the WMR plugin when presenting natively on a device.

  • Bug Fix: HoloLens: Visual Studio 2019 + new forwarders for the interop; updated Nuget libraries - including fix of remoting from game.

  • Bug Fix: Start/Stop QRCode detection from HoloLensARFunctionLibrary now works. Previously, QR would always start, with an unexpected webcam permission dialog at startup.

  • Bug Fix: GetTrackingQuality bugs fixed, and implemented TrackingQualityReason.

  • Bug Fix: Various fixes made for choppy audio, no audio, or random noise when the Magic Leap device went into or came back from standby mode.

  • Bug Fix: Fixed to use single speech recognition when remoting on HoloLens.

  • Bug Fix: HoloLens now uses correct cleanup of MeshUpdateObserver.

  • Bug Fix: The HoloLens third cam is now allocated for the HoloLens device only.

  • Bug Fix: Fixed a bug where apps did not launch on HoloLens devices that were not using developer mode.

  • Bug Fix: Magic Leap no longer exits early if another HMD hijacks the Vulkan initialization. This caused extensions required by MLRemote to never be queried.

  • Bug Fix: Added a debug for HoloLens x64 APEX binaries for use with debug CRT.

  • Bug Fix: HoloLens now explicitly uses only x64 remoting dependency binaries for x64 builds.

  • Bug Fix: Modified Avatar SDK mesh/bone conversion to align with FBX imported files and other SDKs.

  • Bug Fix: Added the functionality required for the Oculus Keyboard Overlay to work.

  • Bug Fix: Fixed the screenshot code to ensure that it grabs a screenshot from the correct window. Previously, it would just try to screenshot the first window to update after F9 was pressed, which, in preview, could have been any editor UI window.

  • Bug Fix: Oculus now ignores the app command APP_CMD_PAUSE if it occurs before APP_CMD_INIT_WINDOW.

  • Bug Fix: Fixed an issue where PokeAHole material was not loading on Android successfully.

  • Bug Fix: Oculus support added for device color specifications and hand tracking.

  • Bug Fix: Fixed the preview window clipping error that was introduced by a fix to backbuffer scaling/window resize handling in Slate. The preferred window size is now used in the UpdateFullscreenState call in the stereo rendering mode.

  • Bug Fix: Fixed an assert on Quest with HISM and mobile multi-view.

  • Bug Fix: Changed to RGBA format to avoid a Universal Bandwidth Compression (UBWC) bug with BGRA formats on mobile stereo devices (which fixes a potentially serious performance regression on these devices).

  • Bug Fix: Because the Microsoft Store requires a unique version number for each update for easier tracking, an auto increment project version has been added for each build. You can opt in to this feature in the HoloLens project settings under Packaging/Auto Increment Version.

  • Bug Fix: Fixed the FRHICustomPresent override where it gave an incorrect return value that caused a critical performance issue on the HoloLens 2 native.

  • Bug Fix: Updated the default minimum Win10 SDK for HoloLens packaging to correct an issue where the SDK < 17763 would fail to package if one of these SDKs were installed (for example, < 16299) on the build machine.

  • Bug Fix: Fixed issues in AugmentedReality implementation for MagicLeap:

    • Reset the worker thread setup for image tracking so it restarts on consecutive VRPreviews.

    • Handled UpdateTrackedGeometry in LuminARTrackedPointResource::UpdateGeometryData so that it would update even if there was not a valid position and orientation to update to. This would sometimes happen after a level transition, and if UpdateTrackedGeometry was not used, the Point might not have a valid ARSystem pointer, which could crash if certain Blueprint functions (GetLocalToWorldTransform, for example) were called at that time.

    • Removed GetTrackableHandleMap from the ARTrackingSystem interface. Instead, a new function, RemoveHandleIf, is now used to set the StoppedTracking state and remove the handle. RemoveHandleIf now takes in a higher-order function that is applied to every stored handle if the geometry type matches. When the applied function returns true, the tracked handle stops tracking and is removed internally. Users of the tracking system can perform additional removal behavior as they see fit via the input function.

  • Bug Fix: Fixed a memory overwrite issue in ARCore.

  • Bug Fix: Corrected volumetric particles that were drawn twice in left eye with instanced stereo.

  • Bug Fix: Fixed a bug where the fragment density map in Vulkan (if you use Vulkan Foveation) is added in the renderpass, but not in the renderpass attached to the graphics pipeline.

  • Bug Fix: The HoloLens world mesh has been fixed to prevent bricks from vanishing and reappearing. The bricks were actually being moved around whenever an update came through that did not change the mesh.

  • Bug Fix: Added an Android Dynamic RHI string for OpenXR render bridge.

  • Bug Fix: This fix forces the backbuffer to 1x1 for standalone VR mobile devices to save memory.

  • Bug Fix: Fixed a black screen issue if using the Mobile Preview when Mobile Multi-View is enabled.

  • Bug Fix: Fixed OpenXR occlusion masks and enabled them on supported runtimes.

  • Bug Fix: Improved frame pipelining in the OpenXR plugin to eliminate hitches.

  • Bug Fix: Headsets going into idle in the OpenXR plugin are now properly handled.

  • Bug Fix: There is now support for Texture2D Arrays with multi-view and MSAA.

  • Bug Fix: Fixed an assertion with certain materials on Magic Leap.

  • Bug Fix: Packaging fix for HoloLens was implemented to make sure to save the manifests for each architecture with unique names so they don't get overwritten. This fixes packaging issues when building from binary engine releases, where the build produces a manifest for the plugin for ARM64, which then would get overwritten by the manifest for x64. This, in turn, would cause another error during packaging, where the plugin was referencing a manifest for the wrong architecture.

  • Bug Fix: Added a delegate to allow external code to get notified when the brick data in UMRMeshComponent is updated. This fixed the problem that there's no easy way to expose the vertex data from UMRMeshComponent in a CPU readable format.

  • Bug Fix: HoloLens now has both x64 and Arm64 targets available.

  • Bug Fix: Fixed a bug where the ARCore camera feed was vertically inverted when mobile HDR was disabled.

  • Bug Fix: Enabled occlusion rendering for ARCore.

  • Bug Fix: Fixed the ARCore/ARKit camera passthrough material. MOBILE_STENCIL_COMPARE_FUNCTION was introduced in the shader code without a sensible default value. Its value was only set by FPostProcessMaterialPS but there were other native codes that also used the same shader code (FGoogleARCoreCameraOverlayPS, TARKitCameraOverlayPS). Now the default value for MOBILE_STENCIL_COMPARE_FUNCTION is set to MOBILE_STENCIL_COMPARE_NEVER, making it backward compatible.

  • Bug Fix: Fixed UARBlueprintLibrary::IsARSupported so that it returns a meaningful value.

  • Bug Fix: HoloLens and Windows Mixed Reality support for Windows Server 2019.

  • Bug Fix: Workaround fix for MRMesh flickering on Vulkan desktop renderer. To fix this, at least for now, enable mesh occlusion when the MRMesh is connected to the MagicLeapTrackerComponent. Since this happens after the MRMeshProxy is created, modify SetEnableMeshOcclusion so that it updates the proxy's value as well.

  • Bug Fix: The MagicLeap ImageTracking now works on consecutive VRPreview launches, and Light estimation works when ARSession is restarted on the device.

  • Bug Fix: No longer attempts to update the depth texture unless scene depth is enabled for ARCore.

  • Bug Fix: Fixed AR overlay occlusion rendering. All the AR passthrough material has POST_PROCESS_MATERIAL defined, but they're actually rendered at the end of the base pass. Since we cannot access SceneColor.A during the base pass, this change added an additional check against POST_PROCESS_AR_PASSTHROUGH when trying to access it.

  • Bug Fix: Add x64 architecture for HoloLens to fix packaging.

  • Bug Fix: No longer renders the depth target to MLGraphics in Zero Iteration. Only reallocate depth target if requested size matches the expected one. This workaround is required because this depth allocation function can receive requests for targets other than the one for eye stereo render (like when using a SceneCaptureComponent).

  • Bug Fix: Fixed a bug where the AR component visualization did not work when the ARActor was spawned locally on the client in a networked session. It is not necessary to set ARActor's owner to the player controller to get its RPC and replication working. In fact, setting the owner as the player controller confuses the networking logic when ARActor is spawned locally on the client. In particular, ServerUpdatePayload_Implementation is no longer triggered on the authoritative client, which breaks the callstack used for triggering visualization update.

  • Bug Fix: Call TriggerOnTrackableAddedDelegates until the AR component is first updated. This ensures that the UMRMeshComponent is created when the user code is triggered by the delegate.

  • Bug Fix: Changed ARKit to use the material-based method for camera image color space conversion and rendering. The material-based code path is enabled by MATERIAL_CAMERAIMAGE_CONVERSION=1 in the Build.cs file. The CIContext based method can still be enabled with MATERIAL_CAMERAIMAGE_CONVERSION=0, but it is mostly kept for testing purposes.

  • Bug Fix: Fixed a Vulkan validation layer error for missed layout transition on Magic Leap.

  • Bug Fix: Converted the ARKit camera texture to the correct rotation:

    • The color space conversion code now also takes the device rotation into account and corrects the output texture rotation automatically. This makes it a lot easier to consume the converted texture in other places of the engine.

    • As a result, you now only need two vertex buffers for rendering the camera overlay, instead of four. The need to rotate the camera image in the Remote Session plugin is also removed.

    • Bonus: fixed a bug in the AppleImageUtils plugin regarding Metal texture image rotation.

  • Bug Fix: Internal GC object is now used to make all the UObject used by FGoogleARCoreDevice GC aware.

  • Bug Fix: Fixed planes not working on consecutive VRPreview runs when using the AugmentedReality interface.

  • Bug Fix: Fixed the compilation on VS2019 without VS2017, and Azure Spatial Anchors on the emulator.

  • Bug Fix: Moved the Azure Spatial Anchors plugin code to a new directory. The Microsoft directory caused build problems for Android, so these plugins moved up into the AR directory. Their names are unchanged.

  • Bug Fix: Azure Spatial Anchors now calls SubmitManifest instead of UpdateManifest.

  • Bug Fix: Issues with OpenXR motion controllers were resolved:

    • If no profiles are bound, aim/grip will bind to the Khronos Simple Controller profile.

    • The SimpleController OpenXRExtensionPlugin replaced by the HandTracking and EyeTracking OpenXR Extension Plugins.

  • New: Azure Spatial Anchor support for ARKit on IOS is now available.

  • New: Azure Spatial Anchor support for ARCore on Android is now available.

  • New: OpenXR Hand Tracking support now available for both motion controller left/right and getting joint transforms via Blueprint.

  • New: Added the spatial anchor ARPins to the OpenXR plugin. This added an interface where an AR anchor implementation can be provided as OpenXRExtensionPlugin. It also makes OpenXRHMD an IARSystemSupport.

  • New: Support was added for selecting between grip and aim poses for controllers in the OpenXR plugin. New motion sources for grip and aim were also added. The default left and right are the same as the grip, with either hand able to use either grip.

  • New: The default OpenXR loader was updated to 1.0.9 to ensure that it works with all prerelease extensions.

  • New: Support was added for querying pose and velocity at time of an action trigger with OpenXR:

    • A custom event can now be bound to receive an OpenXR input action event, along with a timestamp. In the future, the core input system would likely provide a 64-bit timestamp that could be used for this purpose.

    • A HeadMountedDisplayFunctionLibrary function and IMotionController function were also added to get the controller pose and velocity data at a specific time. For some platforms this defaults to a cached value, but when possible it returns more information.

  • New: QR code tracking was added for OpenXR:

    • Interfaces were added for using QR code AR-tracked geometries in OpenXR. This does not add QR support out of the box; Microsoft has a plugin that implements an OpenXR extension, and uses this interface to implement the feature. The user needs that plugin or a similar plugin for the feature to be active.

    • Fixed std:c++17 and other build settings for HoloLens (used in Microsoft's OpenXR plugin).

  • New: Implemented the XR_MSFT_hand_interaction OpenXR extension in a plugin using the Microsoft extension, which allows hand tracking to act like a motion controller, providing grip and aim poses and two gesture-based, button-like inputs, Select and Grip.

  • New: OpenXR now has Eye Tracking support for XR_EXT_eye_gaze_interaction OpenXR extension:

    • This was hooked up for worldscale and trackingtoworldtransform.

    • A few additions to the IOpenXRExtensionPlugin were made to enable extensions that need to set up and consume XrActions.

  • New: OpenXR AR anchor persistence support:

    • Added an interface to IOpenXRExtensionPlugin for ARPin Local Store support.

    • An extension plugin can be created to provide support for storing a pin/anchor to device-supported storage, such as the device or user account.

    • This change does not provide an implementation.

  • New: The HoloLensAR module was moved from the HoloLensAR plugin to the WindowsMixedReality plugin:

    • The module provides AR feature support via Windows Mixed Reality APIs.

    • This removed the dependency of WindowsMixedRealityPlugin on the HoloLensAR plugin, as it was no longer needed.

    • HoloLens Remoting now works with only the WindowsMixedReality plugin enabled. The HoloLensAR plugin is required for HoloLens device packaging with either WindowsMixedReality or OpenXR, but WindowsMixedReality HMDs do not require the HoloLensAR plugin.

    • UE4 code operates mainly at the module level, not the plugin level, so this change is unlikely to require code changes, but it might leave third-party plugins with unnecessary dependencies on the HoloLensAR plugin.

  • New: Adds support for ARTrackedGeometry to OpenXR. This infrastructure supports other OpenXR extension features.

  • New: Support for selecting between grip and aim poses for motion controllers now provides a way to hook up aim and grip to the legacy left EControllerHand so that these motion sources will work even on old content or code.

  • New: Image-tracking integration was refactored to fix a number of issues, and to allow users to select an image target orientation format:

    • FMagicLeapImageTrackerTarget was split into FMagicLeapImageTargetSettings and FMagicLeapImageTargetState.

    • The module/runnable integration was made into an on-request polling API for the image target state and transform. This means that it no longer queries the target state on its own in a tick, but provides a func for someone else to poll (in this case the ImageTrackerComponent). Because of this, the module/runnable also does not fire the target found/lost events. This is now the responsibility of the component itself, so it can manage the sequence of transform updates and delegate broadcasts. This design now fixes the bug where the target found event was fired before the transform of the component was updated.

    • The mutex locks were limited to the minimum possible scope, which fixed some bugs with potential nested mutex lock calls.

    • Some Blueprint function library getters have been marked as BlueprintPure.

    • The MagicLeapAR integration for image tracking was updated in accordance with the rework of the MagicLeapImageTracker module.

    • All image tracker-related code was moved (adding candidate images) into FLuminARImageTracker.

    • Unreliable pose updates in FLuminARImageTracker have been accounted for and corrected.

    • Tracker creation is now delayed until the first candidate image is added when using MagicLeapAR.

    • Fixed a bug in MagicLeapRunnable that caused CompletedTasks to never be reported on non-Lumin platforms. This was causing OnSetImageTarget delegates to never be called, and subsequently, the MagicLeapAR integration to never work for image tracking.

    • The AugmentedReality interface reports orientation for images tracked via ARKit and ARCore with Up (Z) axis as the normal, whereas on Lumin we report the Forward (X) axis as the normal. Added the option for devs to choose which orientation they want their image target transforms to be reported in.

  • New: Content bindings (friendly name and MagicLeapARPin ID combo) are saved and a callback is fired when MagicLeapARPins are found. Save and load game operations are now async in the MagicLeapARPin implementations. Added missing files from previous changelist.

  • New: Added support for ARSession mesh config properties in MagicLeapAR.

  • New: Updated Magic Leap SDK to 0.24.

  • New: Implemented MagicLeapARPin To/From string parsing helpers, which implement how the conversion is expected by the platform.

  • New: Implemented MagicLeapARPin query filters, exposed pin types, fixed actor restoration when using the MagicLeapARPinComponent, and defined functional use cases in the API.

  • New: Added an account for the listen server in MagicLeapSharedWorldGameMode. In a listen server, one of the clients was also the server; that client returned true for IsLocalController(), causing the condition in MagicLeapSharedWorldGameMode::Tick() to fail, which then caused the client to never contribute any PCFs. Since a PlayerController only exists for clients, local or remote, and the GameMode instance only exists on the server, we now do not need to check for anything-Authority, role, remote role, or net mode. If it is a PlayerController, we expect PCFs from it.

  • New: Provides the ability to run code analysis on HoloLens builds.

  • New: HoloLens Media Player plugin support is now available.

  • New: Added new privilege types available with Magic Leap SDK 0.24.

  • New: Added a HoloLens Remoting option to listen on a known port for connections.

  • New: Added D3D12 support for HoloLens 2 via OpenXR.

  • New: HoloLens will now only go immersive if bStartInVR is enabled.

  • New: Added a show-and-hide HoloLens system keyboard.

  • New: Added Dynamic Fixed Foveated Rendering on Quest.

  • New: Added Quest 2 support for adding Quest2 device type and manifest generation.

  • New: Updated OVRPlugin to version 1.49.

  • New: Added an interaction profile support to the upcoming HP Reverb G2 controllers for developers who wish to natively target the new button and axis mappings (a,b,x,y buttons/analog grip).

  • New: The Oculus Widget update included disabling mobile shader options to reduce shader permutations, and iteration through ULightComponentBase objects instead of ULightComponent so skylights will also be recommended to be set as static.

  • New: Updated the OVRPlugin to v19 (1.51).

  • New: Upgraded the Oculus plugin to 1.47. This also deprecates some old APIs (deprecated ZED camera device was removed, and Touchpad input was deprecated).

  • New: Updated the Oculus Platform Tools panel.

  • New: Unreal Insights has been enabled for HoloLens.

  • New: Support for OpenXR AR webcam capture support was added.

  • New: Depth composition on HoloLens when using OpenXR is now enabled.

  • New: Updated the HP Motion Controller and SteamVR so they would work with each other: Squeeze Action was renamed to Grip to work with SteamVR mappings, HP Controller was added to the list of devices looking for an x and y button, and the plugin was renamed HPMotionController.

  • New: The AR Pin/Anchor local store was refactored to create a cross platform-compatible API for Anchor Local Store in ARBlueprintLibrary. On the supported platform (currently Windows Mixed Reality and HoloLens) you can save an anchor to the Local Store or load them from it by a string key. This supersedes the old Named Pin system, which saved anchors to the store by pin name, because not all platforms have pin names. Some of the Blueprint API is being automatically transformed by redirect. Other functions that need more content work were deprecated.

  • New: Scene Understanding support in OpenXR AR makes DirectX12 the default for HoloLens OpenXR rendering Expose OnLineTraceTrackedObjects to OpenXRExtensionPlugins.

  • New: Added an OpenXR Hand Tracking extension plugin.

  • New: Added support for Instanced Stereo Rendering to Niagara VFX.

  • New: The OpenXR plugin can now be extended using Extension plugins.

  • New: There is now a unified code path for rendering the passthrough camera on handheld AR platforms:

    • The engine lacked a generic and unified code path for rendering the passthrough camera background, or onto occlusion mesh that users could add to the level. Previously each AR platform had its own way of rendering the passthrough camera, which usually involved different UV setups and custom materials.

    • We have now unified the pattern by using several standard materials in the ARUtilities plugin. These materials reply on the Map AR Passthrough Camera UVs node to map from normalized UV to a suitable one for a particular view/texture size combination.

    • Most of the custom materials from the ARKit, ARCore and remote session plugins have been removed due to the use of standard materials. The custom material expressions are also flagged as deprecated.

    • For rendering the passthrough camera onto a user defined occlusion mesh, there is a helper-UPassthroughMaterialUpdateComponent-that makes things easier. It handles picking the correct passthrough material based on the camera texture type, as well as updating the texture parameter in the tick, both of which are required for ARCore.

  • New: Added support for HoloLens 2 to the OpenXR plugin.

  • New: Integrated the Depth API for ARCore 1.18:

    • The new Depth API can be enabled by using EARSessionTrackingFeature::SceneDepth on the AR Session Config object.

    • The user can query if the feature is supported via IsSessionTrackingFeatureSupported.

    • If supported and enabled, the engine will create a R32F texture, holding the depth map data from ARCore.

    • The data in this texture is the depth of the environment with regard to the camera, in millimeters.

  • New: There's a CVAR controlling debug rendering of the depth map:

    • arcore.DebugOverlayMode=1: shows the raw value of the depth map, in meters.

    • arcore.DebugOverlayMode=2: shows a coloration of the value in the depth map.

    • To access the depth map, users can use GetARTexture from UARBlueprintLibrary.

    • Currently, occlusion rendering is disabled for ARCore as there is a bug about accessing the scene depth in the occlusion material; hopefully this can be fixed in a later change.

  • New: Removed beta tags on WindowsMixedReality and HoloLens plugins; both plugins are now production ready.

  • New: Added support for the hand pointer pose in input simulation

  • New: Basic stats pass for ARCore's frame update code path.

  • New: Replaced custom APIs in the ARCore plugin with a generic interface class for AR dependency and permission handling. Users should now call UARDependencyHandler::GetARDependencyHandler() to get a handler object, with which they can perform several tasks related to dependency and permission management. On platforms that don't support explicit dependency management, a nullptr will be returned.

  • New: Added support for the standard onboarding UX from ARKit 3.0. This feature is enabled by bUseStandardOnboardingUX from the session config object. For devices supporting ARKit 3.0 and above, the ARKit plugin will create a FARKitCoachingOverlay object managing the ARCoachingOverlayView, which is added to the root view of the application. Note that it is not easy for the overlay to show up, and there is no way to configure its sensitivity. The easiest way is to start the session with the camera covered and wait for ~10s.

  • New: Fixed a bug in Windows Mixed Reality when using a SpatialStageFrameOfReference where camera height decreases when tracking is lost. Context: The stage frame of reference is at the floor-used by VR. The stationary frame of reference is at eye-level-used by HoloLens The attached frame of reference is also at eye-level-used for 3DOF fallback. When falling back to 3DOF, the expected transform to use was the last known transform between the tracking coordinate system and the attached coordinate system. However, we were accidentally creating new variables with the same name in a different scope, so an identity transform was being used instead. Since the stationary and attached frames of reference are both at the same height, HoloLens was not affected by this bug, but VR devices with valid stages were.

  • Bug Fixes: Various fixes for Magic Leap hand meshing:

    • Removed explicit caching and resending of the current mesh data. This is not required because MRMesh keeps a local cache of the current data to be rendered. We only need to send new data when we want to update the mesh.

    • Fixed flickering caused by garbage data being used for the bounds in a frustum/bounds visibility check. The data was garbage because it was never supplied. A box is now supplied based on the HMD position and orientation.

    • Fixed the vertex normal calculation for Magic Leap hand meshing (using incorrect normals was crashing on low poly meshes). Generates normals by adding the normal of each triangle that a vertex is part of, then normalizes the result (this is done during tangent generation to remove the need to add a separate iteration over the mesh just to do normalization). If triangle weights should be used for this, multiply the normal by the area of the triangle first. Add a Blueprint callable to set whether to use triangle weights when calculating the vertex normals. False by default, as this is slightly more expensive and doesn't have a huge impact.

    • Note: The order of the cross product in FMagicLeapMeshTracker::GetResult has been intentionally swapped to account for the left handed coordinate system of Unreal. One-sided materials should work on the hands now (a previous change to the hand mesh winding only seemed to work because the normals were not correct at that time).

  • New: Added support for multiple tracked faces with ARKit 3.0:

    • Use UARBlueprintLibrary::GetNumberOfTrackedFacesSupported to query the number of supported tracked faces on the device.

    • Use UARSessionConfig::MaxNumberOfTrackedFaces to specify the number of tracked faces to request. Right now no device supports more than three tracked faces.

    • If multiple faces are tracked, each one will be assigned an unique Live Link subject name, based on UAppleARKitSettings:

      • DefaultFaceTrackingLiveLinkSubjectName: #1:

      • DefaultFaceTrackingLiveLinkSubjectName #2:

      • DefaultFaceTrackingLiveLinkSubjectName-1 #3:

      • DefaultFaceTrackingLiveLinkSubjectName-2

  • New: Support was added for the smoothed scene depth data introduced in iOS 14 beta 5.

  • Deprecated: HoloLens 1 Remoting is now deprecated, and will be removed entirely in UE5.

  • Deprecated: Deleted the deprecated MagicLeapScreens plugin.

  • Deprecated: Deprecated the HoloLens 2 virtual keyboard show/hide methods; these were replaced by some virtual keyboard functionality improvements.

  • Deprecated: GearVR has been deprecated.

  • Deprecated: Oculus Go and 3DoF have been deprecated.

  • Deprecated: Mobile Multi-View Direct is now the default multi-view mode.

  • Deprecated: Deprecated UGoogleARCoreFaceMeshComponent:

    • Improved the implementation of UARFaceComponent so that it has all the functionality of UGoogleARCoreFaceMeshComponent, and deprecated the latter.

    • Fixed a problem where the ARKit face tracking integration did not upload the UV info to UARFaceGeometry.

    • Allowed additional vertex data to be uploaded to UMRMeshComponent via the UpdateMesh API, which is now used for uploading the vertex normal for the face mesh from ARKit/ARCore.

  • Deprecated: Deprecated individual GetAllTrackedXXX APIs in favor of a generic API: GetAllGeometriesByClass.

  • Deprecated: GetUpdatedAugmentedFaces was deprecated in favor of GetAllGeometriesByClass.

  • Deprecated: Removed the BlueprintSpawnableComponent flag from the deprecated ARCore actor components so that they can no longer be used in Blueprints.

VR

  • Crash Fix: Fixed out-of-order destruction crashes with the Oculus Avatar plugin.

  • Bug Fix: Fixed warnings when exiting VR mode.

  • Bug Fix: Added SteamVR Input JSON manifests as part of packaging. This fixes manifests not being packaged on Blueprint-only projects.

  • Bug Fix: Fixed an issue in Oculus for a VAO overwrite issue causing black screen on Quest in OpenGL.

  • Bug Fix: Fixed an out-of-date view uniform buffer for selection rendering post-process (broken selection highlights in VRMode).

  • Bug Fix: Disabled the selection outline for VRMode to avoid rendering artifacts.

  • Bug Fix: Fixed an initial button repeat delay being ignored on the Oculus Touch. Fixed cross and triangle buttons being swapped on PS Move controllers.

  • Bug Fix: More optimal handling of scene capture and reflection capture when in VR Mode (using Grow rather than resize in cases where it makes sense).

  • Bug Fix: Changed the OVRPlugin library linking to explicit from implicit, so the module is not loaded on platforms that do not use it. This avoids linking errors on various versions on Android, as well as some runtime errors—but still works on Quest and desktop.

  • Bug Fix: Removed invalid Valve Index Grip Click and Trackpad Click controller keys.

  • Bug Fix: Fixed incorrect base pose caching in SteamVR Input module.

  • Bug Fix: VR devices are no longer initialized when the project launcher is opened if a project is not loaded.

  • Bug Fix: Warnings have been made more friendly for missing OVR DLLs.

  • Bug Fix: The selected Oculus audio DeviceId now passes to XAudio2. This fixes the case where it passed null, forcing the application to use the Windows default device, which would disable the functionality of allowing a VR headset to choose its preferred audio device.

  • Bug Fix: Fixed a bug in Vulkan Multiview: there was a case where a texture array would get the Depth attribute copied under NumLayers where depth should be 1, and numLayers 2 (for a multiview texture for example).

  • Bug Fix: Fixed SingleEyeLetterboxed mode in Spectator Screen for Oculus. The issue was that Oculus was setting the viewport with RHICmdList.SetViewport(DstRect.Min.X, DstRect.Min.Y, 0.0f, MipViewportWidth, MipViewportHeight, 1.0f); this was incorrect since the 4th and 5th parameters are supposed to be max X and Y (not width and height). This worked in most modes since Min.X and Min.Y are usually 0. In this mode, Min.X was non-zero which exposed the bug.

  • Bug Fix: Fixed the long timeout hitch when calling Enable/Disable HMD for Oculus headsets.

  • Bug Fix: Vulkan Submit for HMDs (which do not use swapchains) was causing assert on negative array index. This has been fixed.

  • Removed: The Oculus Avatars plugin has been removed.

  • New: Added Mobile Multi-View support for Hololens using instancing.

  • New: Added Oculus Quest platform support to OpenXR.

DMX

  • Crash Fix: Fixed a crash from the FDMXBuffer shared pointer getting destroyed when used among different threads.

  • Bug Fix: Fixed a double channel component in DMX Fixtures, and added a gobo spin component.

  • Bug Fix: For DMX Fixtures:

    • Resolved an initial state issue

    • Added strobe burst and sine wave effects

    • Matrix beam is now proportional to the matrix

    • Fixed Moving Mirror tilt rotation to always look down

  • Bug Fix: Fixed DMX Fixtures to ensure that texture resource is not null.

  • Bug Fix: DMX: Fixed reimport conflict.

  • Bug Fix: Fixed water fountain BP logic in DMXFixtures.

  • Bug Fix: The DMXFixtures lens is now modulated by intensity and color to avoid "glow in the dark", fixed the color disk to avoid desaturation, recompiled fireworks emitters and PS, set new default attributes for FW/pyro/water/laser, inverted zoom values, fixed color inconsistency between beam and light, and updated disk bake tool to output textures with needed settings

  • Bug Fix: DMXFixtures has had fireworks debug prints removed, and max light distance for beam mesh fixed.

  • Bug Fix: Fixed a DMXFixtures issue with lens effect and black color.

  • Bug Fix: DMXFixtures has a fixed beam scaling issue.

  • Bug Fix: DMXFixtures no longer have interpolation divergence between PIE and standalone.

  • Bug Fix: Upgraded the SendDMX subsystem function with arguments instead of functions.

  • Bug Fix: A DMX fix was made for references to Entities in a duplicated library so that they are no longer lost after restarting the editor.

  • Bug Fix: DMXFixtures has a fix for dynamic occlusion and a tweaked zoom component.

  • Bug Fix: DMX fixtures now return to their default state after Play in Editor.

  • Bug Fix: Fixed building issues with the collision in DMXFixtures, and added a check to make sure dynamic materials exist at init time.

  • Bug Fix: Added beam visibility options on all light fixtures in DMXFixtures, and tweaked the WashLED fixture (the lens is back and disabled pointlight).

  • Bug Fix: Tweaked lens materials in DMXFixtures to get a shiny look. This now supports a normal map. Disable light and beam visibility when lights are off.

  • Bug Fix: Get All Fixtures of Type node now has dropdowns for selecting a DMX Library asset and its Fixture Types. This replaces a previous custom node that was deleted.

  • Bug Fix: A DMX fix handled an issue where Fixture Patches copied into a different library asset with several Parent Types will no longer be pasted with the same Parent Type.

  • Bug Fix: DMX fixes for Controller updates to valid universes when created. Patches on default Universe 1 now display as assigned.

  • Bug Fix: DMX Bug Fix: SNameListPicker selected value on the dropdown menu is no longer incorrect after changing the property it represents through means other than the dropdown itself.

  • Bug Fix: Renamed SendDMX and SendDMXRaw map parameters to clarify their intent.

  • New: For DMX Fixtures, added Laser with DMX, changed the format of few Gobo textures, fixed the format of lavender texture, and resaved all assets.

  • New: Upgraded visuals and optimized performance in DMX Fixtures.

  • New: Streamlined pyro/water/fireworks Blueprints and FX in DMX Fixtures.

  • New: Fixed the matrix Blueprints for DMX Fixtures, and updated the matrix beam.

  • New: For DMX Fixtures:

    • Switched fixtures materials to metallic, updated strobe mesh

    • Set the default intensity of light fixtures to 2000cd (approximately 25000 lumens)

    • Fixed beam falloff since it was too strong

  • New: Updated water fountain for DMX Fixtures, and added a few new components.

  • New: For DMX Fixtures, switched pyro sim to the CPU for now so they show up, updated light intensity in materials, and updated the function category in matrix fixtures.

  • New: Added DMX Fixture Assets.

  • New: DMX now has a custom Sequencer Track for animating Fixture Patch function values.

  • New: DMXEngine, DMXFixtures, DMXProtocol are no longer experimental!

  • New: A DMX Fixture Patch Editor now visualizes its Fixture Patches, and allows for drag and drop for patches.

  • New: You can now use live render target texture data to drive DMX fixtures or low resolution LED panels and devices. Each pixel represents a DMX fixture.

  • New: Refresh Rate for incoming and outcoming DMX has been implemented.

  • New: Added an AddOrCreateUniverse into the IDMXProtocol API.

  • New: DMX now has a DMX Library Take Recorder Source.

  • New: DMX now supports Take Recorder and Sequencer for the new Attribute System.

  • New: FDMXProtocolName and FDMXFixtureCategory Name properties are now exposed to Blueprints.

  • New: The DMX Library asset now has its own category in the Asset Creation menu.

  • New: In the DMX attribute system, a search box was added on SNameListPicker for when the list has more than 15 values.

  • New: For DMX GDTF file import, a function's address span is computed from the actual addresses described on the Offset values of the imported functions. The functions'・initial address are kept by computing their address offsets when needed.

  • New: DMX Libraries are now available without loading them explicitly.

  • New: DMX has experimental support for ETC consoles.

  • New: DMX has an initial implementation of the Attribute system for Fixture Functions names that can be easily referenced on Blueprints and other related systems.

  • New: Store DMX Input monitor console Protocol and Universe ID on .ini files.

  • New: There are new tools for collecting data about DMX for profiling and debugging, similar to other stat tools in Unreal Engine such as STAT FPS. These are console commands that display debug information or allow a user to query the currently connected fixtures and controllers.

  • New: DMX now has the correct naming of duplicated and copy-pasted Fixture Patches.

  • New: The DMX Attribute system now has Blueprint nodes that access DMX values through Attributes.

Programming Notes

  • Bug Fix: The AutoDestroy Subsystem will now tick only if the outer object exists and is not marked for destruction.

  • Bug Fix: Fixed usage of SCOPED_NAMED_EVENT and TRACE_CPUPROFILER_EVENT_SCOPE in various places. It avoids scope event names to get additional quotes. Also avoids the overhead of using macros with dynamic string as scope name where not necessary.

  • Bug Fix: Fixed usage of TRACE_CPUPROFILER_EVENT_SCOPE macro (to avoid adding extra quotes to named events).

  • Bug Fix: Fixed a crash due to uninitialized UVChannelData which could occur when adding a new material on a static mesh at runtime.

  • New: Added a Viewport Status subsystem which supports a more extensible API for displaying messages like "LIGHTING NEEDS TO BE REBUILT".

  • New: Added the third-party tool Cruncher Sharp to Engine/Extras/ThirdPartyNotUE.

  • New: Added horizontal drag and drop support for STableRow.

  • New: UHT now supports int64 properties marked as ExposeOnSpawn.

  • New: Implemented a GetDistanceAlongSplineAtSplineInputKey function on the Spline Component.

  • Improvement: Optimized TSet::Empty to avoid the pathological case where the hash size is large but there are not many elements in the hash. This is mainly used when marking and unmarking objects, such as during package saving and other archives tagging objects, but also in several cases all over the engine.

  • Improvement: UWorldSubsystem::GetWorld is now marked as final.

  • Improvement: Decreased the time it takes to discover game projects in the coding environment.

  • Deprecated: In MeshDescription, when accessing mesh attributes, TMeshAttributesView<> has now been deprecated. TMeshAttributesRef<> should be used instead.

Upgrade Notes

Blueprints

  • API Change: Renamed core FBlueprintExceptionTracker to FBlueprintContextTracker, moved it to Script.h, and added access protection for members. Deprecated global core delegate OnScriptExecutionEnd; moved it and entered a new context callback into FBlueprintContextTracker.

Core

  • Upgrade Notes: FMath::Clamp now has UE_NODISCARD; its return value must be used.

Editor

Sequencer
  • API Change: Decoupled the timing element of the PlayTo, ScrubTo, and JumpTo families of functions from their core operations. Now, users call SetPlaybackPosition to establish the time (in frames, seconds, or marked frames) at which operations should take place. The user then calls the new PlayTo, ScrubTo, or JumpTo function to perform the appropriate operation.

  • API Change: The UMovieSceneTrack::OnSectionMoved method has gained a parameter struct, which gives information about the section movement.

Networking

  • Upgrade Notes: NetworkDriver.cpp has been renamed to NetDriver.cpp to be consistent with class name and coding standards. Any custom code changes to NetworkDriver.cpp must also be moved or merged into NetDriver.cpp.

Online

  • Upgrade Notes: Following a Social Platform Descriptions refactor in FUserPlatform, any user extension of FUserPlatform needs to be updated.

  • Upgrade Notes: Code releasing IVoiceChatUser instances with the delete keyword should instead call IVoiceChat::ReleaseUser.

HTTP
  • New: HTTP Server Improvements

    • Listeners can be configured on a per-port basis via [HTTPServer.Listeners] config section

    • Fixed issue where HTTPListener::Tick() could be called after the underlying connection has been closed

    • Fixed unnecessary HTTPListener warning re: send buffer size

  • Upgrade Notes: HTTPListener instances now default bind to the loopback ethernet interface; users who wish to listen via an external ethernet interface must explicitly do so via the newly available configuration section [HTTPServer.Listeners]

  • Upgrade Notes: Any code that uses TSharedRef and TSharedPtr will need to be updated to use TSharedRef and TSharedPtr or FHttpRequestRef and FHttpRequestPtr.

Physics

Clothing
  • Upgrade Notes: If the results of a cloth simulation on a SkeletalMeshComponent are used on the game thread for any purpose, you must now set bWaitForParallelClothTask on the USkeletalMeshComponent.

Platforms

Android
  • Upgrade Notes:Any implementation of NetworkConnectivityClient.Listener will need to update the onNetworkAvailable callback to include the NetworkTransportType, a new Enum added to the NetworkConnectivityClient. Network transport types can be one of the following:

    • Wifi

    • Vpn

    • Ethernet

    • Cellular

    • Bluetooth

    • Unknown (other)

  • Upgrade Notes: The "Disable Flip Copy GLES" flag has reversed its meaning since the previous release due to a bug fix.

Rendering

Lighting
  • Upgrade Notes: The new "cast contact shadow" flag defaults to true, so behavior should match previous versions in any cases where meshes have the "cast shadows"・flag enabled. If the old behavior where contact shadows are cast for all objects (even if either flag is set to false) is desired, set the CVar "r.ContactShadows.NonShadowCastingIntensity"・to 1.

Materials
  • Upgrade Notes: The default of r.ViewTextureMipBias.Min is now -2.0 for texture quality when temporally upscaling with a ScreenPercentage greater than 50%. To maintain backward compatibility, projects that use temporal upsampling (r.TemporalAA.Upsampling=1) without overriding this cvar that might affect should set r.ViewTextureMipBias.Min=-1 in DefaultEngine.ini.

XR

  • Upgrade Notes: Blueprints will warn that ConfigSession is deprecated and should be replaced by ConfigSession2.

  • Upgrade Notes: Removed XR's MRMesh hard reference to WireframeMaterial.uexp, which prevents it being pulled into packaged projects that don't use it. Users of MRMesh should set a wireframe material if they want one. We fall back to UMaterial::GetDefaultMaterial(MD_Surface) if nothing sets one.

  • Upgrade Notes: Renamed CreateCloudAnchor to ConstructCloudAnchor to better fit microsoft docs. A redirector will fix up existing content.

既知の問題

Unreal Engine 4.26 に影響を与える既知の問題の一覧は、 Unreal Engine Public Issue Tracker でご確認ください。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる