2015-8-31

Unreal Engine 4.9 リリース!

作成 Alexander Paschall

今回のリリースでは、アンリアル エンジン 4 の数百のアップデートが含まれており、そのうちの 129 の改善点は GitHub のアンリアル エンジンのデベロッパーのコミュニティから寄せられたものです。アンリアル エンジン 4.9 に貢献をいただいた以下の皆様に謝意を表します (以下、敬称略)。

Andrew Zhilin (zoon), Artem V. Navrotskiy (bozaro), Artyom Sovetnikov, Ben Rog-Wilhelm(zorbathut), Ben Wiklund (bwiklund), Black Phoenix (PheonixBlack), Błażej Szczygieł (zaps166), Brad Grantham (bradgrantham), Brent Scriver (FineRedMist), Cengiz Terzibas (yaakuro), chipgw, Christian Radich (yoyohobo665), Christopher P. Yarger (cpyarger), Clay Chai (chaiyuntian), Cliff Jolly (ExpiredPopsicle), Dave Newson (dave-newson), Derek van Vliet (derekvanvliet), Dorgon Chang (dorgonman), ewirch, Felix Laurie von Massenbach (erbridge), Gabriel Hare (GabrielHare), gatools, Hakki Ozturk (ozturkhakki), HueyPark, JaredTherriault, Jason Spangler (Stormwind99), Javier Osset (Xaklse), Jeff Rous (JeffRous), JohnAlcatraz, Kitatus Studios (KitatusStudios), Konstantin Nosov (gildor2), korypostma, Lee Berger (MrCrowbar), Maarten Scholl (maartenscholl), Marat Radchenko (slonopotamus), marynate, Matthias Huerbe (MatzeOGH), Maxim (maxpestun), Michael Allar (Allar), Michael3DX, MiniTurtle, Moritz Wundke (moritz-wundke), Nako Sung (nakosung), Nari Demura (demuyan), Nastenko Michael (deM-on), Nathan Stocks (CleanCut), Niels Huylebroeck (red15), Pablo Zurita (pzurita), Patrick Flanagan (valtrain), Pedja Ljubomirovic (3dluvr), Philipp Smorygo (fsmorygo), Pierdek, Piotr Bąk (Pierdek), Quadtree, Rajko Stojadinovik (rajkosto), Rama (EverNewJoy), Rem (rveilleux), rlefebvre, Robert Khalikov (nbjk667), Russ Treadwell (trdwll), Salamanderrake, Sebastian Witkowski (witkowski-seb), Sébastien Rombauts (Srombauts), Simon Taylor (simontaylor81), Stephen Whittle (stephenwhittle), szyszq, TK-Master, Tobias Mollstam (mollstam), Tomasz Sterna (smokku), user37337, Victor Xie (FTPiano), Vladimir Ivanov (ArCorvus), Will Stahl (merlin91), yamashi, Zhi Kang Shao (zkshao)

主要機能

モバイル デバイスのサポートを拡張

モバイル プラットフォームのサポートを大幅に向上すべく作業を進めてきました。今回のリリースには多くのエキサイティングなレンダリング機能が含まれています。こうした機能は最先端のモバイル タイトルの制作を支援するでしょう。新規追加アイテムには、効率的な動的シャドウ、可動ライト、およびデカールがあります。今後も引き続きモバイルと HTML5 のレンダリング クオリティを向上させるつもりです。今回のリリースでは、iOS アプリ内課金の機能が改善し、Remote Push Notification (リモート プッシュ通知) と CloudKit のサポートを追加しました。Android については、 OpenGL ES 3.1、Immersive Mode (没入モード) のサポート、非同期オーディオの伸長 (解凍)、方向機能の改善を加えました。NVIDIA AndroidWorks も含まれ、デバイスの立ち上げと実行が簡単になります。UE4 には iOS 用の Flurry analytics プラグインがすぐに使える状態で同梱されます。モバイル デバイス用の新機能の多くが、HTML5 ゲームでもご利用いただけます。

image alt text

New:モバイル向け動的キャラクター シャドウ

Directional light (平行光源) からの動的に調整されるキャラクター シャドウが、モバイル デバイスでサポートされるようになりました!

image alt text

  • シーンが静的にライティングされていても動的調整シャドウ (dynamic modulated shadow) を利用することができます。

  • この機能を有効にするには、Directional lightで [Cast Modulated Shadows] をオンにします。

New:モバイル向け動的ポイントライト

モバイル デバイスと HTML5 で動的ポイントライトがサポートされます!

image_2.gif

  • 動的ポイントライトは、爆発、発射物、パーティクルエフェクトなどの持続時間が短いビジュアル エフェクトを高めるために使用することができます。

  • ライトが照らされる各オブジェクトで動的ポイントライトが最高 4 つまで利用できます。

  • 注意:ポイントライトからの動的シャドウのキャストには未対応です。

New:モバイルのデカール

モバイルのレンダラーでデカールがサポートされます。

image alt text

  • 透過、加算、調整のブレンド モードにも対応します。

  • 注意:現在、モバイルとウェブ上ではライティングなしのデカールのみをサポートしています。

New:VR の主なアップデート

Steam VR (HTC Vive)

アンリアル エンジンの SteamVR のプラグインには多くの主要な修正が含まれます。こうした修正は使用を簡単にし、パフォーマンスを上げるためのものです。

image alt text

SteamVR の改善点:

  • 4.8 のプレビュー 2 以降で現れたレイテンシー問題の修正。

  • 標準のモーション コントローラーの抽象化をサポートし、両方の Vive コントローラーを同じプレイヤーにルートできるようになりました。

  • C++ プロジェクトはプラグインの API によって適切にサポートされるようになりました。

  • 様々な改善点とバグ修正

Gear VR は SDK 0.6.0 にアップデートしました。

このリビジョンでは、いくつかのGear VR の0.5.0 のリリースのレンダリングの主要なバグや問題点、およびいくつかのハードウェア互換性の問題も修正しました。

image alt text

New:VR モーション コントローラーのサポート

モーション コントローラーが UE4 の共通抽象化レイヤー (common abstraction layer) でサポートされます。

image alt text

つまり、このモーション コントローラー デバイスは、すべて共通インターフェースを介して利用できるようになりました。現在、HTC Vive コントローラーがサポートされています。サポート対象は近い将来さらに増える予定です (PlayStation Move など)。入力ボタンの押下とトリガーは、モーション コントローラーのキーの抽象化を用いて、複数コントローラーから単一のプレイヤーにルーティングできるようになりました。さらに、Motion Controller コンポーネントをキャラクターに追加するだけでモーション トラックをプロジェクトに追加することが可能であり、それにアタッチされているものは何でも自動的に更新し、コントローラーの位置に従うようにします。モーション コントローラーのすべてのプラグインをこの新システムに移動し、デバイスに依存しないこのインターフェースの一部になるようにすることをお勧めします。

New:DirectX 12 の実験的サポート

DirectX 12 が実験的機能としてサポートされます! Windows 10 を使用している場合は、コマンドラインで "-DX12" を使用してエンジンを実行して試してください。

image alt text

Microsoft のエンジニアが DirectX 12 の UE4 のサポートを追加しました。彼らと協力してこの変更を 4.9 に統合しました。この機能はまだ新しく実験的なものです。DirectX12 では、はるかにローレベルのレンダリング API を提供し、一段と効率が高まり、多くのスレッドにコマンドを同時に送ることが可能です。これは、コンソール レンダリング API からアイデアを得た機能です。今後も引き続き、DirectX 12 のサポートを向上させます。エンジンの将来のバージョンでこの新しい API を活用する方法を模索します。

New:メッシュのディスタンス フィールドを用いたフル シーンのパーティクル コリジョン

ディスタンス フィールドの GPU パーティクル コリジョンでは、パーティクルが効率的にシーン全体で衝突するようにします。

image alt text

これは、 サーフェスに衝突する火花 に使用することができます。

image alt text

また、サーフェスに積もる雪 などの様々なエフェクトにもご利用いただけます。

image alt text

  • GPU パーティクル エミッタのコリジョン モジュールには、 [Collision Mode] という新しいプロパティがあります。ここで [Distance Field (ディスタンス フィールド)] を指定することができます。

    image alt text

  • パーティクルが衝突するためには、衝突面が必要です。これはディスタンス フィールドから非常に効率的に抽出することができます。ディスタンス フィールドのひとつのサンプルから最も近い衝突面への距離が得られます。ディスタンス フィールドの勾配を計算することで、そのサーフェスの方向と法線が求められます。これらを合わせて衝突面が導かれます。

  • こうした方法を用いたパーティクルのコリジョンは、既存のシーン深度コリジョンよりも信頼性が高くなります。既存のシーン深度コリジョンは画面上にあるものに対してのみ衝突し、持続時間が短いエフェクトに使用が制限されます。しかし、グローバル ディスタンス フィールドはかなり低解像であるため、パーティクルは細いオブジェクトを通り抜け、シャープな角は丸くなります。

  • すべてのディスタンス フィールド機能と同様に、[Rendering Project (レンダリング プロジェクト)] 設定で [Generate Mesh Distance Fields (メッシュのディスタンス フィールドの生成)] を有効にする必要があります。ディスタンス フィールド パーティクル コリジョンは、シェーダー モデル 5 (SM5 ) の機能です。SM5 をサポートしないハードウェアでは、パーティクルは代わりにシーン深度コリジョンに戻ります。

  • ディスタンス フィールドを用いたパーティクルのコリジョンは非常に効率的です。その負荷はシーン深度のパーティクル コリジョンとほぼ同じです。

New:Hierarchical LOD (HLOD、階層的 LOD) の高速プレビューとクラスタリング

Hierarchical Level-of-Detail (HLOD) は、4.8 で導入されたシステムです。レベル内の多くのオブジェクトを画面上で折りたたんで少数のオブジェクトにすることができます。その結果、ごく近くでオブジェクトを見る場合に非常に高品質なレベルを実現し、レベルの全体的なパフォーマンスを速めることができます。4.9 では HLOD を改善しました。今後も引き続き改善を続けます。

高速 HLOD プレビュー

Hierarchical LOD (HLOD ) のビルドで迅速なイタレーションを可能にするために、[Preview HLOD] オプションを利用することができます。このオプションでは、HLOD のメッシュ自体をマージしたり、作成することなく境界 (bound) とオブジェクトを視覚的に表したもので HLOD アクタを作成します。この境界は、特定の Hierarchical LOD レベルの LOD システム設定内のDraw Distance (描画距離) 設定に従いレンダリングされます。

image alt text

上の画像は、1 つめと 2 つめのHierarchical LOD レベルのクラスターが急に表示される様子を示しています。時間がかかるマージのプロセスや Hierarchical LOD メッシュを作成する必要なくどのようにレベルをクラスター化できるかを明確に表しています。これはプレビュー システムの初期の実装であり、時間経過に伴い変更や改善される可能性があることに注意してください。

カスタム LOD クラスタリング (HLOD ボリューム)

Hierarchical LOD のクラスタリング プロセスで一段と詳細な制御を可能にするために、Hierarchical LOD ボリュームを配置することができます。このボリュームはカプセル化するアクタに対するクラスターを定義します。これを使用してレベル内のどのエリアやオブジェクトをまとめてクラスター化するかを手動で定義します。

image alt text

New:"Arch Vis" Character Controls (Arch Vis キャラクターコントロール)

新しい "ArchVisCharacter” プラグインには、character クラスが追加されました。これは、建築ビジュアライゼーションのアプリケーションに適切な、すぐに使える制御を与えてくれます。リアルなワールド スケールの制御で快適かつ自然な感覚が得られること、またビデオやライブ デモをよりスムーズなものにすることを意図しています。

image alt text

ArchVisCharacter を直接 Pawn クラスに接続するか、ArchVisCharacter からカスタムのブループリントを作成して適切に見えるように移動の設定を微調整します。

New:ウィジェットの深度の順序

スクリーン空間の Widget コンポーネントはビューアからの距離に応じて自動的にソートされます。一番近いスクリーン空間の Widget コンポーネントが常に他のコンポーネントよりも上にくるようにします。

image alt text

カメラへの距離に基づいてすべての widget コンポーネントをソートします。これまでは、手動の Z Order に基づくか、最初にビューポートに追加したものに基づいていました。

New:エリア シャドウ (Stationary Light (固定ライト) 用)

均一な半暗部のサイズのシャープなシャドウに限定されなくなりました。ライトマスのレイ トレーサーは固定ライトのエリア シャドウもサポートするようになりました!

image alt text

この機能を使用するには、[Use Area Shadows for Stationary Light (固定ライトにエリア シャドウを使用)] オプションをオンにします。[Light Source Angle] (またはポイントライトの 'Source Radius' (ソース半径)) は、シャドウをどの程度ソフトにするかを制御します。

image alt text

パフォーマンスの詳細:

  • 解像度が低いライトマップを扱うには、均一な半暗部シャドウの方が良いため、これをデフォルトのままにします。以前は均一な半暗部のサイズはあいまいなプロジェクト設定で制御されていました。現在は、エリア シャドウと同じように [Light Source Angle] のプロパティで制御されるようになりました。例えば、ソース アングルを倍にすると、2 倍ソフトなシャドウになります。

  • マップのエリアの新しい最適化もあります。これは、単一の Stationary Light (固定ライト) チャンネルによってのみ影響を受けます (例、ひとつの Stationary Directional (固定の平行光源) ライト)。これらのシャドウ マップは、4 チャンネルのテクスチャの代わりに単一のチャンネル テクスチャにパックされ、メモリの負荷は 1/4 になります。

New:アンビエント オクルージョンのマテリアル マスク

新しいアンビエント オクルージョンのマテリアル マスク機能を使用すると、マテリアルでライトマスが計算された AO (アンビエント オクルージョン) を使用できます。これはプロシージャルなテクスチャリングで役立ちます。例えば、エージング エフェクトやエリアに蓄積される汚れを加えます。

image alt text

上のスクリーン ショットでは、AO マスクを使用して汚れのレイヤーを自動的に背景の隅にブレンドしています。

AO マスクを使用するには、 World Settings (ワールド設定) -> Lightmass settings (ライトマス設定) で [Use Ambient Occlusion] と [Generate Ambient Occlusion Material Mask] の両方を有効にする必要があります。Max Occlusion Distance などの他の AO 制御は外観を微調整するのに便利です(必ず、Direct Occlusion Fraction および Indirect Occlusion Fraction を 0 に設定し、この AO が実際のレベルのライティングに適用されないようにします)。

image alt text

次にマテリアルで PrecomputedAOMask ノードを使用して 0-1 マスクのこの AO にアクセスすることができます。このノードはオクルードされたエリアで 1、他の場所で 0 になります。

image alt text

パフォーマンスの詳細:

  • PrecomputedAOMask ノードの使用は標準のテクスチャ ルックアップと同じです。この機能を有効にすると、ライトマップのテクセル毎に 1 バイトの半分を加えます。デフォルトの使用の場合は、ライトマップのテクセル毎に約 4 バイトになります。

  • AOMaterialMask のテクスチャ メモリは、‘ListTextures' コンソール コマンドで調べることができます。

New:Mesh Distance Field Materials (メッシュの ディスタンス フィールドのマテリアル)

この機能では、空間内のどのポイントからでも最も近いソリッド (空でない) なものへの距離をマテリアルが低負荷で判断することができます。グローバル ディスタンス フィールドのプロパティを利用するために、マテリアル エディタ内に 2 つのノードがあります。

image alt text

DistanceToNearestSurface は、ワールド空間単位で符号付きの距離を戻します。この距離は、不透明なメッシュのサーフェス上では常に 0 に近い値になることに注意してください。DistanceToNearestSurface を使用して以下のようにオクルーダを避けるエフェクトを持つことができます。

UE4 ユーザーである Roel Bartstra 氏は既に面白い用途を見つけています。ひとつは、やわらかい物体の外観 です。もうひとつは、サーフェスを自動的に避ける流れのマップ です。

すべてのディスタンス フィールド機能と同様に、[Rendering Project (レンダリング プロジェクト)] 設定で [Generate Mesh Distance Fields (メッシュのディスタンス フィールドの生成)] を有効にする必要があります。ディスタンス フィールドのマテリアルのアクセスは、シェーダー モデル 5 の機能です。FeatureLevelSwitch マテリアル ノードを使用して、シェーダー モデル 4 のハードウェアへのフォールバックを設定します。

New:ディスタンス フィールド アンビエント オクルージョンの改善

スカイ オクルージョンはスカイによってライティングされるオブジェクト周りに見栄えのよいソフトなシャドウを与えます。これは雲で覆われたライティングのシナリオにおいて特に重要です。ユースケースとしては、従来、事前計算されたライティングなしには高品質でのレンダリングが難しかったものが考えられます。ディスタンス フィールド アンビエント オクルージョンは、時間帯や背景が常に変わりうる完全に動的なゲームでこうした問題に対応します。4.9 ではクオリティと技術のパフォーマンスを向上させるために多くの労力を注ぎました。現在、典型的なゲーム シーンで 4ms の総 GPU 負荷で中程度のスペックの PC や PlayStation 4 レベルのハードウェアで出荷可能な機能になりました。

これまでの方法では、適応サンプリングを行っていました。そのため、フラット サーフェスでは作業が少なくなりますが、クリーンな背景では多くの汚れも生じていました。

image alt text

AO の演算処理は適応サンプリングをなくすのに十分な速さになったため、オクルージョンははるかにスムーズになりました。

image alt text

このこの新しい方法の何点は、より長い履歴フィルターが必要になるということです。これは、特にシャドウ キャスターが移動した場合にゴーストの原因になります。将来的にはこの問題を改善したいと思います。

パフォーマンス

ディスタンス フィールド AO は、中程度のスペックの PC や PS4 で実行できるように、かなり高速になりました。負荷の信頼性も高くなり、オブジェクトの密度に若干依存しますが、ほぼ一定になりました。

静的なカメラでほぼフラットなサーフェスの場合は、この新しい方法を使用すると 1.6 倍速く なります。フォリッジや高速移動カメラを使用した複雑なシーンでは、 5.5 倍速く なります。フル ゲーム シーンに対する PS4 でのディスタンス フィールド AO の負荷は 3.7 ms になります。

技術的な詳細

主な最適化は、カメラに従うグローバル ディスタンス フィールドを使用することです。これは通常のオブジェクト毎のディスタンス フィールドの全てを、カメラ周囲を中心としたクリップマップと呼ばれるいくつかのボリューム テクスチャに合成することで作成されます。新たに見えるエリアやシーンの変更の影響を受けるエリアだけを更新する必要があります。そのため、合成の負荷はあまりかかりません。

クリップマップのテクセル サイズの視覚化です。各クリップマップは異なる色になります。

image alt text

グローバル ディスタンス フィールドはオブジェクトのディスタンス フィールドよりも低解像度であるため、何にでも使用できるわけではありません。スカイ オクルージョンでコーンのトレースを演算処理する場合、オブジェクトのディスタンス フィールドはシェーディングされているポイント近くでサンプリングされます。一方、はるかに高速なグローバル ディスタンス フィールドはさらに離れた場所でサンプリングされます。

以下は、グローバル ディスタンス フィールドとオブジェクトのディスタンス フィールドを対比するためにレイトレースしたものを視覚化しました。グローバル ディスタンス フィールドのサーフェスはぼやけて細いオブジェクトは消えました。

image alt text

New:コンテンツ ブラウザの高度な検索機能

コンテンツ ブラウザでは高度な検索シンタックスに対応するようになりました。UE4 は多くの大規模プロジェクトで使用されています。中には数百名のデベロッパーで構成されるチームもあり、コンテンツ ライブラリには数百、数千という数のアセットがあります。新しい検索機能を使用すれば、プロジェクトの規模に関わらずコンテンツ検索のワークフローが改善します。

image alt text

これは既存のシンプルな検索シンタックスを向上させます。アセットのメタデータおよび以下の特殊キーから key->value のペアをマッチさせる方法で行います。

  • Name - アセット名に対してテストします。

  • Path - アセットのパスに対してテストします。

  • Class (alias:Type) - アセット クラスに対してテストします。

  • Collection (alias:Tag) - そのアセットを含む任意のコレクションの名前に対してテストします。

New:コレクションの改善

このリリースでは、コレクションに多くの変更を加えました。コレクションのネスティング、スマート コレクション、およびタギング機能などゲーム内のアセットの管理を支援します。

コレクションのネスティング
  • アセットのコレクションを整理して階層化することができます。

    image alt text

  • このコレクションは、任意のコレクションのコンテキスト メニューから [New…] オプションを選択して作成することができます。または、ドラッグ & ドロップ操作でコレクションを親子付けすることができます。

    image alt text

Dynamic Collections (動的コレクション)
  • Dynamic collections では、Advanced Content Browser Search Syntax (コンテンツ ブラウザの高度な検索シンタックス) の威力を活用してコンテンツ ブラウザのフィルタを作成し、共有することができます。

    image alt text

  • コンテンツ ブラウザのテキスト検索でできることなら何でも、他のコレクションの参照 (静的および動的の両方) も含めて動的コレクションとして保存することができます。

  • コンテンツ ブラウザのテキスト フィルタの右側にある「Save (保存)」ボタンを使用して動的コレクションを作成することができます。

    image alt text

Quick Asset Management (クイック アセット管理)
  • 新しい [Quick Asset Management] チェックボックスを使用して、一度に多くのコレクションにアセットを素早く追加できるようになりました。

    image alt text

  • これらはコレクション ビュー内から、または選択したアセットのコンテキスト メニューから利用することができます。

    image alt text

堅牢さを向上
  • コレクションは自動的にそのリダイレクタに従います。これにより、アセットを名前変更したり、移動した場合にコレクションから消えると思われるアセットの問題を回避します。さらに、コンテンツ ブラウザ経由でリダイレクタを修正する (最終的には取り除く) 場合にコレクションが考慮されるようになりました。

ステータス レポートの改善
  • 各コレクションはその行のアイテムの右側に小さなステータス インジケータを持つようになりました。これはコレクションの現在の状態に応じて色が変わります。各色の意味は次のとおりです。

    • 赤 - このコレクションは何らかの悪い状態かリードオンリーの状態になっています。問題解決方法については、ツールチップをご覧ください。

    • オレンジ - このコレクションはソース コントロールの最新バージョンではありません。

    • 青 - このコレクションは保存されていないローカルの変更があります。これは保存または自動チェックインに失敗したり、コレクションがリダイレクタにフォローされている場合に起こることがあります。

    • 緑 - このコレクションは空ではなく最新状態です。

    • グレー - コレクションが空であり、最新状態です。

アセットのツールチップの改善
  • 任意のオブジェクトの静的コレクションが、コンテンツ ブラウザでツールチップの一部として表示されるようになりました。

    image alt text

New:プラグイン作成ウィザード

UE4 での新規 C++ プラグインの作成が簡単になりました。新しいプラグイン ウィザードをご覧ください。

image alt text

  • プラグイン ブラウザ (Window メニューからアクセス可能) では新規プラグインを作成できるようになりました!

  • 新しいプラグインに名前を付けて、いくつかのプリセット プラグインのタイプ (Blank、 Toolbar、 Standalone Window) から選ぶことができます。

  • これでプラグインをコンパイルし、エディタに読み込むために必要なすべての初期ファイルが作成されます。

New:拡張カーブ エディタ

カーブエディタに多くの改善を加えました。カーブ キーとタンジェントを簡単に操作できるようにしました。

image alt text

  • マウス中ボタンで、選択したキーフレームやタンジェントを動かせます。

  • 複数タンジェントの選択および操作をできるようにしました。

  • 選択では、コントロール (切替え) とシフト (既存の選択に追加) を使用することができます。

  • シフト キーを押すと一つの軸に動きを制限します。

  • ナビゲーション:alt-キー押しながらマウスの中ボタンを押すと、ビューをパンします。alt-キーを押しながら右クリックするとビューをズームします。

  • 新しいタンジェント表示オプション: 常にタンジェントを表示、選択したポイントに対してタンジェントを表示、タンジェントを非表示にするオプションがあります。

  • カーブ用の新しい pre-post infinity extrapolations (プリインフィニティ / ポストインフィニティ補外 (外挿)) オプションを加えました。

  • キーの追加を予測しやすいものにしました。

    • 編集対象のカーブがひとつだけ存在する場合、キーはマウスの下に追加されます。

    • 複数カーブが利用可能な場合は、あるカーブをクリックするとそのカーブ上にキーのインラインを追加します。カーブから離れてクリックするとすべてのカーブにキーを追加します。

    • メニュー アイテムのテキストを変更して何が起こるかをわかりやすくしました。

New:ブループリントの複数の Return ノード

関数は複数の Return ノードを持つことができます。実行が関数の戻りに到達すると、関数の実行は終了します。これはブループリント関数から早く戻るか、分岐および別の値を戻すために使用することができます。

image alt text

New:ブループリントでカスタム オブジェクトを構築

ブループリントでは、より基本的なオブジェクトのタイプ (アクタ / コンポーネントだけでなく) をスポーンすることができます 。Class ノードからの Construct Object は、クラスを取り、そのタイプの新規オブジェクトを作成します。Class から Spawn Actor と同様です (ただし、アクタではないタイプは除く)。

image alt text

  • この「Outer」の入力は新規オブジェクトのオーナーとして機能し、作成したオブジェクトのライフタイムを制御します。

  • Actor クラスでは、まだ Class ノードから Spawn Actor を使用します。ウィジェットでは、Create Widget ノードを使用します。今後のリリースでは、こうした様々な機能を組み合わせるかもしれません。

New:Blueprint クラスのデフォルト

ブループリントでは、新しい Get Class Defaults ノードを使用してクラスのデフォルトにアクセスできます。これはデータのみのブループリントで作業する場合に便利です。インスタンスを作成する必要なくこうしたブループリントの値にアクセスできるからです。

image alt text

  • 出力ピンが大きくなりすぎて扱いにくくなるのを防ぐには、ノードの詳細を使用して特定のデフォルトを表示 / 非表示にします。

New:Level ブループリントの通信

Level ブループリントはインターフェースを介して通信できるようになりました。Class ブループリントと同様にインターフェース関数を採用し、実装することができます。Level ブループリントにインターフェースを追加したらインターフェース メッセージ ノードを通して (ストリーミング レベルをターゲットとして使用) 呼び出しすることができます。

image alt text

  • "Get Streaming Level" ノードを使用して通信するレベルを取得します。

    • 特定のレベルをターゲットとするために "Get Streaming Level" を使用しなければならないため、これはサブ レベルに対してのみ機能します。

New:Math Expression の最適化

Math Expression ノードを最適化し、通常のノードよりもパフォーマンスを高めました。現在、同等の式を表す一連の演算 / 関数のノードに比べて、Math Expression ノードを使用すると 2 倍速くなります。

image alt text

New:ブループリント アセットの ID

ブループリントがアセットをすぐにではなく、オンデマンドでロードできるようにしました。2 つの新しいタイプのデータがブループリントにエクスポーズされました。"Asset ID" と “Class Asset ID” の 2 つです。Asset ID は、ロードされた、またはアンロードされたアセットを表し、“Resolve Asset” ノードを使用してオブジェクトに解決することができます。アセットがロードされていなければ、“Resolve Asset” ノードは無効なオブジェクトを戻します。“Load Asset” ノードを使用してアセットをロードすることができます。同様に、“Class Asset ID” はクラスに解決し、 “Load Asset Class” ノードでロードすることができます。

image alt text

New:Montage Element Timing Interface (モンタージュ エレメント タイミング インターフェース)

​モンタージュ エディタに新しいパネルを追加しました。アニメーションがランタイムに実行するときに、Montage イベントが発行する順序を制御する支援をします。

image alt text

New:非線形のアニメーションのブレンド

アニメーションのポーズと遷移の間で多様なブレンド機能をサポートするようになりました!

image alt text

これまでは、線形lまたは三次のブレンドだけがサポートされていました。以下のような様々なブレンド関数から選ぶことができるようになりました。Linear (線形)、Cubic (三次)、Hermite Cubic (エルミート三次)、Sinusoidal (正弦)、Quadratic (二次)、Circular (円)、Exponential (指数)、および Custom (カスタム) のブレンド関数があります。ほとんどのタイプで、カーブの「in」または「out」でイージングするかを個別に制御することができます。

"Custom" オプションでは“Curve Float” アセットが必要です。ひとつ作成したら、それを関連ノードの詳細パネルに割り当てることができます。

image alt text

image alt text

これで行いたいどのようなブレンドでも指定することができます。カーブの長さは指定されたブレンド時間に合うようにノーマライズされてスケールダウンされます。範囲 0-1 外の値があれば、フィットするようにクランプされます (この制約は近いうちになくしたいと考えています。この空間に注目してください)。カスタム仕様のカーブを指定しなければ、システムは線形ブレンドに戻ります。

image alt text

New:Bone-driven Animation Controllers (ボーン駆動のアニメーション コントローラ)

この機能では、"Driver" ボーンがひとつまたは複数の “Driven” ボーンのモーションに動的に影響を与えます。これは、アクセサリがアタッチされているキャラクターにとって素晴らしいことです! 多くのブレンドを使用する場合であっても、アニメーション中にジオメトリが交差するのを防ぐことができます。

image alt text

上の例ではアタッチされているアクセサリ (緑色部分) にはオーサリングされているアニメーションは存在しません。キャラクターの大腿部の骨の機能として 2 つの軸で駆動されています。これはすべてランタイムに計算されるため、手動でオーサリングされた微調整がなくてもアニメーションのブレンドはここでは非常にうまく機能します。

"Driver" 値を直接乗数で設定するか、全く新しい範囲に再マッピングすることができます。または単にカーブ アセットを使用してモーションを駆動することができます。カーブの使用は通常、最適なアプローチです。リアルタイムで変化をみながら反応を自然に定義し、ポイント / タンジェントをインタラクティブに微調整できるからです。

以下はボーン駆動のアニメーション コントローラの新しい設定です。

image alt text

New:アニメーション遷移ルール

今回のリリースでは、アニメーション ブレンディング ツリーに対する改善があります。特に、遷移ルールが機能する仕組みを改善しました。

アニメーション アセットのオーバーライドの処理方法の改善

遷移ルールの Time Remaining のようなノードは、子 Animation ブループリントでのオーバーライドされたアニメーションが原因でアニメーションの長さが変更されることに正確に反応するようになりました。つまり、遷移ルールによって参照されるアニメーションは、すべての子Animation ブループリントで同じ長さである必要はなくなりました。

最も関連性が高いアニメーション プレイヤーを参照する

ステートマシンを管理しやすくするために、ゲッターの新しいクラスを使用できるようになりました。これは将来変更されうる特定のアニメーションをターゲットにするのではなく、ソース ステートから最も重み付けが高いアニメーションを常に選びます。以下のノードをご利用いただけます。

image alt text

カスタム ブレンド グラフの改善

一回限りではなく、より多くのカスタム遷移アニメーションで使用できるようにカスタム ブレンド グラフに追加の情報がエクスポーズされました。対応する遷移ノードとソース / 目的地のステートに関する情報を提供する以下のノードをカスタム ブレンド グラフで利用できるようになりました。

image alt text

遷移ルール内と同じようにアセット プレイヤーを参照するゲッター メソッドを使用することもできます。

New:Animation Curve Evaluation (アニメーション カーブの評価) の変更

アニメーション カーブの評価はアニメーションの Update フェーズで起こるように使用されていましたが、Evaluate フェーズに移動しました。これには以下のメリットがあります。

  • カーブのウェイトはブレンドされたウェイトで適切に評価されます。

    • Cache ノード

    • Additive ノード: Additive ノードは、アニメーションのボーン変形が行うのと同じように、ベースからの加算カーブ データのデルタを現在のポーズに適用します。

    • Layered ノード:これは適切に機能させるには少々難しくなっています。どのカーブがどのジョイントのパーツに影響を及ぼしているかがわからないからです。現在は、カーブのブレンド方法のオプションがあります。

      • Max Weight (最大ウェイト): ブレンドしたポーズからカーブの最大ウェイトを選びます。

      • Normalize by Weight (ウェイトでノーマライズする): すべてのカーブに対してブレンドしたポーズのすべてのウェイトを合計し、1 にノーマライズします。

      • Blend by Weight (ウェイトでブレンド): 単に合計します (ウェイト * カーブ値)。

image alt text

  • Curve Evaluation は、並列評価を使用している場合、マルチ スレッディングに移動しました。

  • 最終的に、ボーン変形からカーブを操作およびその逆からノードを作成することができます。

  • しかし、評価されていないカーブが必要な場合 (ティックしているが評価していない場合)、最新データは取得しません。カーブ データは以前のように通知としてではなく、ボーン変形として扱われます。

New:アニメーション アセットのメタデータのサポート

アニメーションアセットに追加可能なメタデータをサポートするようになりました。メタデータは Anim Meta Data クラスから派生したブループリントで利用可能なクラスです。カスタム メタデータをアニメーション アセットに追加することができます。Anim Sequence、 Anim Montage、 Anim Composite、 および Blendspace はすべてサポートされます。

image alt text

C++ でアニメーション アセットからのこうしたデータをクエリーできます。GetMetaData() メソッドを呼び出すか、Anim Montages で GetSectionMetaData() を使用します。

New:Sound Quality (サウンド クオリティ) レベル

サウンド デザイナーがよりローエンドなマシン/デバイスのオーディオ メモリの使用とパフォーマンスを (ある程度) 管理できる新機能を追加しました。

利用可能な Sound Quality レベルはプロジェクト設定のオーディオ セクションで定義されます。各 Quality Level では、オーディオ デバイスによって作成されるオーディオ チャンネルの最大数を現在指定することができます(ただし、一部のプラットフォーム、特に Android では、この値をまだ少ない数に制限することがあります)。

image alt text

サウンド キューに、Quality Level sound ノードを配置することができます。このノードは、プロジェクト設定で定義される各クオリティ レベルに対する入力ピンを提供し、アクティブな Quality Level に接続されているブランチだけを実行します。ロードされたバリエーションの数を減らすために使用、またはフィデリティ (忠実度) を低くした wave ファイルを指定するために使用することができます。

image alt text

スタンドアローンのゲームでプレイする場合、Quality Level は Game User 設定で指定され、その Quality Level に対して必要な Sound Waves のみメモリにロードされます。デフォルト値は、適切な GameUserSettings.ini ファイル経由でゲーム毎またはプラットフォーム毎に設定することが可能であり、ゲームでは設定値のUI 経由で値を設定することができます。現在、クオリティの変更を有効にするにはゲームを再起動する必要があります。

Play in Editor では、Level Editor Play Settings からどの Quality Level を使用するかを指定することができます。プレイ セッションがアクティブなときに、この値を変更すると新しいサウンドは現在の Quality Level を使用します。

New:Custom Audio Attenuation Curves (カスタム オーディオ減衰カーブ)

サウンドを減衰するためにビルトインのアルゴリズムに制限されるのではなく、独自のカスタム カーブを定義することができるようになりました。

減衰設定で、Distance Algorithm を [Custom] に設定すると、カスタム カーブ セクションが表示されます。続いて、コンテンツ ブラウザから外部カーブ アセットを指定するか、詳細パネルでカスタム カーブを直接定義することができます。

image alt text

New:アクタのティック間隔

Tick 関数が実行される間隔を指定することができます。これにより、タイマーのオーバーヘッドや複雑さなしにフレーム毎のティック実行のオーバーヘッドを減らすことができます。

これは、Actor と Component のデフォルトのプロパティでエンド ユーザーにエクスポーズされています。プログラマは他の Tick Function プロパティと同様に C++ で設定することができます。

image alt text

覚えておくべきいくつかの実装の詳細は以下のとおりです。

  • すべての Tick 関数は、それらが登録されている最初のフレームを実行し、その時点で次のティックまでティック間隔の間、待機します。

  • 既にティックしている関数のティック間隔を変更しても、次にスケジュールされているティックがいつ起こるかは変更しません。変更をただちに有効にしたい場合は、このティックを無効にし、間隔を変更してから、ティックを再度有効にします。

  • Tick 関数は、次のティックをスケジューリングするときに、オーバーランがあれば調整することで可能な限り指定された間隔の近くで起こります。例えば、関数が 1 秒毎に起こるように設定されていて、Tick 関数が実行された最後のティックから 1.1 秒が経過した場合、あと 0.9 秒が経過したらこのティック関数が一回実行されるようにスケジューリングされます。ただし、フレーム中に複数の間隔が起こっても 1 フレーム内で 1 回より多く Tick 関数は実行しません。

  • Tick 関数の DeltaTime は、ティック間隔に関わりなく同じままです。これはこの関数が最後にティックした時からの時間ではなく、常に対象となるフレームのデルタタイムになります。

  • アクタの Custom Time Dilation (カスタムの遅延) は、ティック間隔には適用されません。個々のアクタが独自の Time Dilation を持っているかに関わりなく、ティックがディスパッチされる頻度は一定のままです。Time Dilation は Tick 関数に渡される DeltaTime だけに適用されます。

New:アクタの Encroachment (侵犯) 検知

Encroachment (侵犯) 検知は、さらに堅牢になり、多くの状況で機能するようになりました。侵犯のためのカスタマイズ オプションを新たに追加しました。

image alt text

アクタのスポーン時の "Spawn Even If Colliding" オプション (C++ では"bNoCollisionFail") が拡張されて、以下のようにスポーン ポイントでのコリジョンを処理する 4 つの方法をサポートするようになりました。

  • とにかくそこでスポーンする。

  • 可能であれば近くの適切な場所にスポーンする。そうでなければ、とにかくそこでスポーンする。

  • 近くで適切な場所が見つかった場合に限りスポーンする。そうでなければ、スポーンしない。

  • スポーンしない。

既存のブループリントは、正しい選択肢を選ぶように自動的に更新されます。一部のコードは非推奨になっていて、手動更新が必要なものがあります。

Actor クラスには新たにブループリントにエクスポーズされた Spawn Collision Handling Method という新規メンバーがあります。Spawn Collision Handling Method は、デフォルトでコリジョンのスポーンをリゾルブする方法を制御します。これは Spawn Actor ノードまたは関数呼び出しの設定でオーバーライドすることができます。

Movement コンポーネントを持つアクタでは、更新されたコンポーネントを基本的なコリジョン形状とみなし、encroachment (侵犯) に対してテストする唯一のコンポーネントになります。他のアクタについては、適切なコリジョン設定を持つすべてのコンポーネントがチェックされるようになりました。これはアップグレード後にアクタがスポーンに失敗するような状況につながることがあるので注意してください。コリジョン設定処理方法をダブルチェックして、こうした事態になったら transform をスポーンします。

New:Post Process Blending (ポスト プロセスのブレンディング)

ポストプロセスの [Blendables] を使用して異なるステート間でのポスト プロセス エフェクトを遷移させます。このシステムを改善しました。

各 Blendables のブレンドするウェイト値を設定できるようになりました。このブレンドするウェイト値はブループリントまたは C++ コードでランタイムに修正できます。そのため、ポスト プロセスの遷移で面白いことができます。

ポスト プロセスの設定をポスト プロセス ボリューム内で「インライン」で定義できるようにもなりました。または、多くのオブジェクト間で共有可能なスタンドアローンの Blendables アセット作成を選択することもできます。

image alt text

image alt text

独自のカスタムの blendable 設定の定義も簡単にできるようにしました。エンジンのビルトインの PostProcessSettings 構造を修正する必要はなくなりました。代わりに、上の画面の Light Propagation Volume Blendable 設定などで、設定を持つ新たな構造を定義することができます。

最後にブループリントを使用して、ランタイムに Blendable のウェイト値のブレンドを編集方法の例を以下に示します。

image alt text

New:Runtime Asset Cache (ランタイムのアセット キャッシュ)

一部のゲームでは、ゲームと一緒には出荷されない場合があるアセットのローカル コピーの保存に対応する必要があります。例えば、プロシージャルに作成したアセットが多数ある場合や、サーバーからのアセット (広告のグラフィックスなど) がある場合があります。この新しい Runtime Asset Cache は、汎用アセット キャッシュ システムです。ランタイム中に生成されたデータを設定可能なアセット バケットに永続的に保存するために使用できます。

image alt text

Runtime Asset Cache には、以下のような特徴があります。

  • 複数のバケットに、個別にユーザーが意図したアセットのタイプを保存します。例えば、Character Image のキャッシュや Advertisement Image のキャッシュがあります。

  • 各バケットのサイズは個別に設定可能です。

  • アセットのバージョニングでは、不要になったときにキャッシュのエントリをリビルドすることができます。

  • 同期および非同期のキャッシュのクエリができます。

  • 指定サイズよりもキャッシュが大きくなれば、一番古いエントリがキャッシュから取り除かれます。

New:Volume Decals (ボリュームのデカール) (まだ実験段階です!)

3D 関数フィールドのレンダリングはジオメトリを表すポリゴンの代替です。どちらかというと、シャドウ、ブール演算、スムージング、アンビエント オクルージョン、レイトレーシング、変形などの難しいレンダリングの問題に対処するのに適しています。2D と 3D の 距離関数はすでにエンジンの様々な場所で使用されています。例えば、フォント、ライトマップ、ディスタンス フィールド シャドウ / アンビエント オクルージョンなどがあります。この新しい Volume Decals 機能では、アンビエント オクルージョン、スクリーン空間の反射、ライティング、および被写界深度などディファード・パスで通常利用可能なすべての情報を使用して、距離関数を不透明なオブジェクトとして GBuffer にレンダリングされるようにします。以下の画像のボウル (器部分) は Volume Decal です。

image alt text

このオブジェクトは、以下の手順で作成されました (以下の画像の左から右にご覧ください)。

  • デカールの中央への距離とテクスチャ プロジェクションで球体を定義します。

  • 別の球体を定義し、2 つの最大を取ります (ブールの交差 (intersection))。

  • 球体を移動して形状を調整します。

  • 別の球体を追加してマテリアルを変更します (ブールの減算)。

  • 再度形状を調整します。

image alt text

以下の画面はこの球体の距離関数がどのように定義されたかを表しています。

image alt text

この機能は未完成です。シャドウ キャスティング、法線マップのサポート、間接ライティングがなく、パフォーマンスとクオリティの最適化が行われていません。さらに、GPU の負荷が常に高くなります (距離関数は各ピクセルについておそらく何百回も評価する必要があります)。マテリアル関数、シャドウ キャスティング、ドキュメントなどを追加してこの機能に磨きをかける予定ですが、リアルタイムの用途では十分に速くならないかもしれません。

New:UE4 ドキュメントのタブ、バージョン、スキル レベルについて

  • ドキュメントのページには、ページの上部と下部にスキル レベル、エンジンのバージョン、カテゴリのタグが表示されるようになります (更新作業中です)。タグと一致する他のページを見つけることができます。

    image alt text

  • サイトマップをフィルタリングできます。スキルレベルやエンジンのバージョン別の 展開可能なツリー ビュー があります。フィルタリングすると、ツリーが展開し、一致するアイテムを表示します。一致しないアイテムはグレイアウトされます。

    image alt text

  • ページにあるスキル レベル、エンジンのバージョン、およびタグは、サイトマップにもリンクするようになり、自動的にフィルタリングします。あるタグをクリックすると、そのタグに関するページのみを表示するようにフィルタリングします。

    image alt text

  • チュートリアル (操作方法、クリックスタートなど) へのリンクには、そのチュートリアルのスキル レベルとエンジンのバージョンが表示されます。

    image alt text

新規作成および更新された UE4 のドキュメント

New:非同期のリアルタイム オーディオ伸長 (解凍)

リアルタイムの ogg-vorbis ベースのオーディオ伸長をサポートするプラットフォーム (PC、Xbox One、Mac、Android) は、メイン ゲーム スレッドでオペレーションのブロックを回避するために、可能な場合は伸長を非同期で行うようになりました。

New:Feature Pack とテンプレートの共有リソース

テンプレートと Feature Pack で共有リソースをサポートするようになりました。これはテンプレートと Feature Pack の両方で他の Feature Pack を含むように指定できるようにして実現しました。つまり、すべてのテンプレートで共通だった多くのアセットは、一度だけ存在するようになりました。また、これはテンプレートのブループリントと C++ のバージョンとの間で共有しているアセットを複製する必要がなくなったことも意味します。

複数のターゲット プラットフォームがサポートされます。そのため、様々なアセットがモバイルとデスクトップのターゲットに対して、ひとつのテンプレートまたは Feature Pack に存在することができます。これは、あるプラットフォームで詳細度が低いモデルが必要だが、他のプラットフォームでは異なる場合などに便利です。

New:HTML5 (Easy Setup、Amazon S3 Support、Networking) を改善しました。

HTML5 での開発を開始し、ウェブ ブラウザにゲームをパッケージングするためにサードパーティの SDK をインストールする必要はなくなりました。パッケージングするには、File -> Package メニューで HTML5 を選択します。

その他の改善点としては以下があります。

  • 圧縮した javascript をエミットし、ビルドのサイズを著しく減らします。

  • パッケージング中に、圧縮されたファイルをローカル テスト用に提供する処理をする小さなウェブ サーバーがゲームに含まれます。

  • HTML5 Networking がサポートされます! 現在、Unreal Build Tool コンフィギュレーション変数があり、HTML5 クライアントをサポートするデディケイテッド サーバーを作成するために使用できます。

  • パッケージング中に Amazon S3 へのアップロードをサポートするようになりました。AWS の認証情報が入力されると、ビルドは S3 にアップロードされ、S3 から直接ブラウザにゲームを供給することができます。

    image alt text

Release Notes 「訳注: 以下は、非常に技術的な部分が含まれるため、翻訳を省略します。」

AI

  • New:A dedicated AI asset category has been created and is available in Content Browser's context menu.

    image alt text

  • New:Added log errors when EQS (Environmental Querying System) queries take longer than 0.25 seconds (cumulatively).When the query completes we also log how long each test took to perform.

  • New:Added support for trace based projection in EQS generators.

  • New:Added Z offset for circle center(s) in the On Circle EQS generator that uses data bindings.

  • New:AI Controller's Path Following Component has been exposed to blueprint and can be tweaked via blueprint-created classes' default properties.

  • New:Blackboard assets have been made blueprint types to allow blueprint users to interact with them.

  • New:Exposed filtering and scoring options for multiple contexts of EQS query.

  • Fixed "Skip Item" in EQS not always showing results in debug view.

  • Fixed "Skip Item" acting like "Pass" and in some cases like "Fail" when handling filtering.

  • Fixed crash when unregistering the Pawn Actions Component when the Controlled Pawn is pending kill pending.

  • Fixed AI stimuli never expiring which resulted in AI never forgetting perceived actors.

  • Fixed crash in pathfinding batch EQS test.

  • Fixed crash on running a EQS query without valid options.

  • Fixed EQS pathing grid generator getting stuck on points inside geometry.

  • Fixed restoring EQS query asset with multiple options.

  • Fixed crash when doing a pathfinding batch EQS Query Test when test items are not considered valid.

  • Fixed "On Circle" EQS generator crashing if its query owner is not an actor.

  • Blueprint compilation and loading are much more efficient.

Behavior Tree
  • New:Added dynamic subtree injection support for behavior trees.

  • New:Added new restart mode for behavior tree tasks, they can now ignore restart which leads back into running the same task again.Use case depends on task type and its parameters: some of them work better with restarting every time (e.g. movement), some should finish their action (e.g. animation).

  • Blueprint based behavior tree tasks will now ignore Finish Execute and Finish Abort calls depending on state of task, fixed latent blueprint actions not being cleared when task finishes execution.

  • Fixed behavior tree decorators losing blackboard observers.

  • Fixed behavior tree restarts from blackboard decorator in On Value Change mode.

  • Fixed Behavior Tree tag cooldown decorator testing the current value of the tag cooldown end time against its duration.(Duration in the Tag Cooldown decorator should only be applied when we deactivate, not used for comparison.)

  • Fixed behavior tree's search update for branch with loop decorator.

  • Fixed bug with aux nodes losing all changes in memory block during discarded search.

  • Fixed crash on pasting composite decorator node in behavior tree editor.

  • Fixed drag & drop operation for composite decorators.

  • Fixed duplicated subnodes in behavior tree editor.

  • Fixed order of behavior tree nodes when creating a new node from existing pin.

  • Fixed rare crash on aborting behavior tree task connected to parallel node.

  • Fixed Rotate to Face task getting stuck on receiving abort event.

  • Replaced Has Reached Goal decorator with Is At Location.

Debugging Tools
  • New:Added "-LogNavOctree" command line parameter, to log Nav Octree debug geometry to visual logger, on stop logging.

  • New:Added new shapes to log with Visual Logger: mesh, convex polygon, navarea / pulled convex and Nav Octree dump from given bounding box.

  • New:Minor improvements to gameplay debugger.

    • Added multiple logs selection to Visual Logger tool, to analyze all selected objects simultaneously.

    • Added debug camera to gameplay debugger, to have a way to fly around (Tab key to switch between cameras).

    • Added alternate keyboard bindings to gameplay debugger, for keyboards without numpad (can be enabled in gameplay debugger settings).It uses Alt + [regular number] shortcuts.

  • Added more data about EQS queries to vlogs.

  • EQS score for the winning item will no longer be set to 1 when picking a single item.That way, scores can be compared appropriately since none of the other scores have been normalized.They will all be on the same relative scale.

  • Fixes Gameplay Debugger's client server issues.Everything should replicate to clients correctly again.

  • Tweaked description width for EQS debug display from 200 to 312 to allow for slightly longer descriptions without overlapping the next column.Item Description Width, Item Score Width, and Test Score Width can now be tweaked in code (they are now variables rather than in-line values).

  • New:Added a dedicated blueprint-bindable event to AI Perception Component that's being triggered for every newly sensed stimulus.

  • New:Added bUseNavAgentGoalLocation to pathfinding Reached tests for moving to Actors.(Sometimes it is useful to move towards / test against the actual actor's location, rather than its location projected into the navigation system.)

  • New:Added custom navigation export for skeletal meshes.

  • New:Added navigation agent selectors to navmesh bounds volume, defining zones per agent.

  • New:Added navigation updates for destructible mesh.

  • New:Added new option to navigation link, which allows connecting to cheapest area in snap radius.

  • A bug in editor-time navigation system, resulting in removing all the saved data in static navmesh on map load, has been fixed.

  • Abstract navigation data actor will no longer be visible in scene outliner.

  • Added timeout for path following's waiting state.

  • Fixed a bug in navigation system preventing collision-less shape components from affecting navmesh generation by other means (like nav areas).

  • Fixed bounds of "standalone" nav relevant components (without navigation parent), which caused them to be ignored during navmesh generation.

  • Fixed crash in crowd movement when AI is using direct path to location.

  • Fixed crowd simulation updates for moving without pathfinding.

  • Fixed Floating Pawn Movement component's issue resulting in teleporting AI following a path, ignoring Max Speed limits.

  • Fixed geometry projection for navmesh walking mode using cached location even if pawn moved far away on Z axis.

  • Fixed handling of custom navigation links loaded with map before navigation system is created.

  • Fixed issue with navigation system being stuck on Initial Lock in editor mode.

  • Fixed missing abstract navigation data (handling direct paths) in game.

  • Fixed missing navigation links with big snap height.

  • Fixed navigable collision export from convex elements of Body Setup not using element's local transform.

  • Fixed navigation relevancy and update order of custom navigation links in Nav Link Proxy actor.

  • Fixed Navigation System not handling properly deep Actor hierarchies.Now you can have Actors attached to Actors attached to Actors and all of them will affect navmesh generation just as expected!

  • Fixed updating Nav Relevant Components attached to an actor without collision component.

  • Navmesh's rendering component has been made transient and we made sure any navigation rendering component saved with old maps won't break anything.

  • Updated deprecation messages for Navigation System's "get random point" functions family to be more precise.

Animation

  • New:"Observe Bone" nodes for debugging animations.

  • These let you print out the current position of a bone (at that particular point in the animation tree) and have a couple of options for coordinate space and whether to display relative to the reference pose.

  • The observe bone nodes are meant for debugging.They don't cost much but are not currently compiled out of a shipping build, so you should probably remove them when you are done working with the graph.

    image alt text

  • New:Added turntable feature for Persona.

    image alt text

  • New:Added a "Remove this LOD" button to each LOD (after 0) in Persona's mesh mode.

  • New:Added an icon overlay to the 3D thumbnail for Animation Blueprint assets in the Content Browser.

  • New:Added 'Blend Out Trigger Time' to AnimMontages.

    • Time from Sequence End to trigger blend out.

    • <0 means using Blend Out Time, so Blend Out finishes as Montage ends.

    • >=0 means using "Sequence End - Blend Out Trigger Time" to trigger blend out.

    • Also added as an optional parameter to Play Slot Animation As Dynamic Montage.

  • New:Added compilation warnings to the Modify Bone skeletal control when it will do nothing (e.g., when all components are set to be ignored or no bone is selected).

  • New:Added event for Post Evaluation.

    • This gets triggered after bone evaluation is done.

    • If your mesh component has physics, it will trigger after bone is blended back to it.

  • New:Optimized animation evaluation by looping over the bones directly instead of indirectly.

  • New:Added flag to notifies to stop them triggering on dedicated servers.

  • New:Added friendly display names to Bone Modification Mode enumerants.

  • New:Added new node "Bind Cloth To Master Pose Component" that makes cloth on a slaved skeletal mesh component to reuse the simulation data from the master component, rather than processing the cloth separately.

  • New:Added new node "Is Section Using Cloth" to query whether a skeletal mesh section has cloth data.

  • New:Added reference pose toggle toolbar.

    • Also now you can edit during reference pose.

  • New:Added sorting of Smart Name curves.

  • New:Added support for Montage-to-Montage synchronization.

    • A montage can only have a single leader.A leader can have multiple followers.

    • Synchronization is performed once before any of the leader or followers are updated in a given frame.

    • Essentially, synchronization is performed one frame late, so tick order between montages is not an issue.

  • New:Allowed skeletal controls to specify the coordinate space that they would prefer the gizmo to be displayed in by implementing GetWidgetCoordinateSystem.

  • New:First pass of the dependency preloading system.

    • Uses asset information created during cooking to determine the dependencies for all packages and make them load BEFORE the requested package.When using pak files, the pak file will be ordered to match this load order, giving much reduced seek times.

    • Currently disabled by default, but can be enabled with "s.PreloadPackageDependencies 1" in the console.

  • New:Look At Control now supports look axis in local space.

  • New:Started moving animation nodes out of Engine into a new AnimGraphRuntime module.

  • New:Support Append Frames in the begin/end of the AnimSequence.

    • Also fixed to rearrange notifies and curve keys.

  • New:Wrapped re-entrancy checks during AnimationBlueprint node Update/Evaluate in DO_CHECK tests so that they are compiled out in shipping builds.

  • Animation and joint name now supports UTF-8 when importing.

  • Animation Record gives default path and available name.

  • Changed MasterPoseComponent serialization so that you can use it in a construction script.

  • Changed animation stat names to reflect whether they are running on the main game thread or a worker thread.

  • Changed new NativeNotify menu to display the localized class name.

  • Fix for crash in BlendSpaces when referenced AnimSequences have been deleted.

  • Fixed a bug where the latent action manager wasn't correctly removing actions.

  • Fixed a crash due to incorrect current time when switching a sequence player node's animation to one that is shorter than the current one.

  • Fixed a crash when compiling a malformed Animation Blueprint (containing a missing node caused by deleted code or a disabled plugin) and added a graph validation pass prior to compilation.

  • Fixed adding an extra frame when importing animations.

  • Fixed an issue where the message log was not displayed/refreshed when using the "click to recompile AnimBP" prompt rather than the Compile button.

  • Fixed client/server disagreements when playing root motion animations.

    • When a Montage ends, some left over root motion could stick around and be used the next time around, potentially creating positional differences between client and server.

    • If sending a DualServerMove when root motion starts, server can update root motion for a move that didn't use root motion on the client yet.

  • Fixed crash during animation blueprint compilation due to incorrect parent class being accessed during skeleton recompile.

  • Fixed crash during skeleton class recompile when structurally changing some animation blueprints.

  • Fixed crash in blend node with when evaluating a LOD'd skeleton (bones were stripped out.)

  • Fixed crash when enabling Show Uncompressed Bones.

  • Fixed crash when pausing the game and using "Tick when paused" on a SkeletalMeshComponent.

  • Fixed crash when you mix additive and non additive animations within montage.

  • Fixed crashes relating to animation notifies that had invalid slot indices when linked in montages.

  • Fixed divide by zero when importing zero-length animations.(Contributed by rajkosto, pull request 1148.)

  • Fixed incorrect state machine weights when using a custom blend on a transition.

  • Fixed montage linkable elements sometimes losing segment links when external animations had changed.

  • Fixed non-human-controlled characters moving much more than they should while running root motion on dedicated servers with AnimUpdateRateOptimizations and RootMotionFromMontages ON.

  • Fixed 'phantom' warnings that could show up the first time an Animation Blueprint was opened in an editor session but would go away when you recompiled interactively.

  • Fixed reimporting breaking RetargetBasePose.

  • Fixed variable initialization order bug that caused evaluation skipping on SkeletalMeshComponents to not function properly.

  • If you import a mesh that adds bones to a skeleton, but don't save the skeleton, it could cause a crash.Added the ability to recover these bones in the editor.

  • Minor style fixes for padding/fonts of bone references and the alpha scale/bias of a skeletal control.

  • Removed WITH_EDITOR define around GetActiveSocketList in QuerySupportedSockets so behaviour of QuerySupportedSockets is consistent between editor and non editor builds.

  • Reworked animation track segment looping logic to reduce floating point error problems.

  • When Skeleton detects inconsistent hierarchy, it will try fix up.You're going to notice merge bone effort with error message.

    • When this message comes up, please resave skeleton.

  • While piloting an object, 'move to' object button functionality works properly.

Audio

  • New:Added ability to set the volume headroom per platform with a new Engine.ini field.

  • New:Improved Gameplay Statics sound API:

    • New Spawn at Location functions return an Audio Component that allows manipulation of the played sound similar to the Attached version.

    • Play at Location still does not return the audio component and should be used for one-shot sounds.

    • Rotation parameter added to API calls that specify location or attachment.This causes non-spherical attenuation shapes to face the intended direction.

    • Play Attached renamed to Spawn Attached.

    • Sound and Dialogue APIs are now consistent.

  • Fixed volume differences on the Mac platform due to splitting and merging audio streams when using reverb, EQ, or radio effects.

    • Added low-pass filter for voice audio units to closer match PC audio.

  • Fixed to use proper linear-to-dB volume equation on the Android platform.

  • Fixed a Core Audio API crash for Mac when the number of active sounds exceeded the number of available audio units.

Automation

  • New:Basic lighting tests have been separated from the 'General Editor Test'.

    • They are now:"System.Promotion.Editor.Lighting.Place Scale Rotate", "System.Promotion.Editor.Lighting.Modify Properties", and "System.Promotion.Editor.Lighting.Duplicate and Copy Paste".

  • New:GenerateProjectFiles.bat will now exit with a non-zero exit code (1) when any failure happens.

  • New:Material Editor promotion tests are now contained in the MaterialEditor module.Fully exported UMaterialGraph.

  • New:Particle system promotion tests are now contained in the Cascade module.

  • New:The geometry automation tests have been separated from the 'General Editor Tests' automation test.It is now:"System.Promotion.Editor.Geometry Validation".

  • New:UAT and UBT will no longer wait for the global mutex, and will fail immediately instead.Previously, each instance would wait in line serially, hiding the fact that the command was not actually running.

  • Fixed UAT base path being invalid if the UE4 workspace is mounted directly onto a drive letter (e.g. C:\Engine, D:\Engine, etc.).

Blueprints

  • New:Added Blueprint-exposed GetBoundingBox function to StaticMesh.

  • New:Added Equals and NearlyEquals functions for Transforms to Blueprint math library.

  • New:Added TimeSecondsToString function to convert float seconds to formatted string.

  • New:Added a node icon to identify editor-only properties referenced in Blueprint script.

    • Properties like a Character's arrow component, or a TargetPoint's sprite.

    • Fixed crashes that would occur from referencing these properties in cooked builds (replaced with a logged exception instead).

  • New:Added editor .ini config settings that can be used to hide specific Blueprint menu entries.

    • Use the "[BlueprintEditor.Menu]" section header to add exclusions under in the .ini file.

    • In the .ini file, specific fields can be hidden like so: +BlueprintHiddenFields="/Script/Engine.Actor:GetTransform".

    • In the .ini file, specific nodes can be hidden like so: +BlueprintHiddenNodes="/Script/BlueprintGraph.K2Node_IfThenElse".

  • New:Added Get Map Range Value Unclamped and renamed Get Mapped Range Value to Get Mapped Range Value Clamped.

  • New:Added Invert Transform blueprint node.

  • New:Added support for expressing a per-parameter Display Name using the markup UPARAM(DisplayName="Something neat") before the parameter declaration.

    • This allows renaming parameters without using a K2ParamRedirect, and the use of names that are not legal C++ identifiers.

    • e.g. static void DoSomethingAwesome(UPARAM(DisplayName="Awesome Param") float BoringParam);

  • New:Added the ability to filter out library functions and macros from the Blueprint context menu.

  • New:Added various improvements related to Select node.The node doesn't return a copy of input parameter, it returns a reference to the input.

  • New:An "InternalUseParam" meta tag for UFUNCTION has been added to support hiding function parameters from Blueprints.The pin for that parameter will be hidden and not connectable.

  • New:Blueprint Timer API improvements.

    • Set Timer By Delegate now returns a Timer Handle to be used when interacting with the timer via other functions.Interacting with timers by handle is significantly more performant and enables the same timer delegate to be used for multiple timers simultaneously.

    • Set Timer By Name, and all timer manipulation functions, by name and delegate have been deprecated.

  • New:Blueprint Timeline UI updates:

    • Made individual tracks collapsable.

    • Added an option to turn off the view synchronization for an individual track.

    • General padding and layout tweaks.

  • New:Game/URL Options parsing nodes are now exposed to blueprints.

  • New:Can change a variable's type in the My Blueprint window by clicking on its type icon, or right-clicking to toggle whether or not it's an array.

  • New:Can drag and drop custom events from the My Blueprint window to add a call function for the event.

  • New:Can promote pins to local variables in Blueprint function graphs (or their child graphs).

  • New:Can set the Advanced Display flag on Blueprint member variables.

  • New:Made the boolean pin in Blueprints less subtle.

  • New:Fixed a crash that could occur with data-only Blueprints that explicitly called their parent's construction script.

  • New:Fixed error about missing World Context pin in blueprint library.

  • New:CreateEvent nodes are now more user friendly - they will use the current blueprint as the default context and no longer suggest that the user select an asset for context.

  • New:Improved details panel for nodes:Make, Break and Set Member.Properties are grouped in categories.Improvements for PostProcessSettings.

  • New:Improved the logic for when to reuse an existing graph tab versus open a new one.

    • All subgraphs will now open in the parent when double-clicking on a node in a graph.

    • Holding down Shift while clicking on an item in the My Blueprint tree or in the graph will force the creation of a new tab regardless of what is already opened.

  • New:Node "Set member in .." has an output pin for the post-modified struct.

  • New:Object Reference, Class Reference, Asset ID, Asset Class ID pin types have been spun off into a sub-menu on the item to reduce duplication of these items in the listview.

  • New:The output pin subtype for a GetClass function call node is now linked to the input pin's subtype.

  • New:Added support for multi-line editing to blueprint comment nodes.

    • To enter a newline in the comment title use shift + enter.

  • New:Exposed NOR and NAND node support to blueprints.

    • The nodes can be found in the math/Boolean section in the blueprint action menus.

  • "Color" name is not longer restricted.

  • Added "magnitude" keyword to vector length functions.

  • Adding or removing members from an editor created structure will no longer cause 'inappropriate outermost' warnings when blueprints that use that structure are saved without recompiling.

  • Adding pins to a MakeArray node will give the new pin a default values.

  • After context fail (Access None error) return data are properly cleared.

  • Attaching a bool to the "Select" nodes index pin will force the node to update it's pin names even when there are only two options.

  • Axis mapping value getters can no longer be called from other blueprints.

  • Blueprint Diff Tool no longer has buttons to switch between the components, graph, and defaults views.Navigation is now done via the list of differences.

  • Blueprint Editor context menu filtering is much more efficient.

  • Blueprint member variables of type component that are not generated by SCS now have the details options normally available to exposed variables.

  • Breakpoint is triggered on Access None error.

  • C++ Functions that are tagged as BlueprintImplementableEvent and are overridden as a function graph in Blueprints will display an error when attempting to drag and drop into the graph to inform the user that the function is not Blueprint Callable.

  • Call Function nodes will no longer change the function reference when duplicating the node or duplicating the entire Blueprint.

  • Can no longer split pins on Blueprint nodes if the struct does not have any valid properties.

  • Can now Make and Break the DateTime struct in Blueprints.

  • Can right click in collapsed graphs to add local variables that are part of the outer function graph.

  • Can right click on any node to search for references of it.Does initial search only in current Blueprint.

  • Can use unicode characters in Math Expression nodes.

    • All unicode "letters" are now allowed for variable/input/output names.

    • This does not extend to symbols and only the underscore symbol is still allowed.

  • Cannot name Timeline tracks the same as any of the native pins on the node.

    • Any nodes previously broken by this functionality should work again.

  • Changing a pin type on a Select node will recombine all sub pins on the option and result pins before setting the new pin type.

  • Changing the Class of a "Spawn Actor from Class" node will no longer disconnect the result pin's links if they are still valid.

  • Child components in a Blueprint Class asset attached to a default scene root will no longer be lost after reparenting to a Blueprint Class that also has a default scene root.

  • Connecting function result node array pins to a reroute node will no longer prevent the node from compiling with all its output parameters.

  • Copying and pasting a K2Node_CallFunction with an interface pin for the self pin will no longer change the self pin into a normal Object Reference pin.

  • Deleting a custom event when there are no other events in the Blueprint will no longer disallow you to name other items placed in the Blueprint the same as the deleted custom event.

  • Drag and dropping a component from the SCS editor to a graph will no longer incorrectly report that the graph is outside of scope when it is a part of the same Blueprint.

  • Dragging and dropping variables from the My Blueprint tab will no longer default to assuming that the variable is read-only.

  • Duplicating function or macro graphs that contain nodes with Text pins will no longer incorrectly link the original and duplicated pins so that changes in one appear to affect the other.

  • Duplicating the "Add Scene Component" node while the transform pin is split will no longer make visible the transform pin on the duplicated node.

  • Editing a blueprint that is instanced in a hidden sub level no longer resets transforms on the hidden instances.

  • Ensure 'bExchangedRoles' is not set after serialization of an Actor-based Blueprint Class asset.

  • Examining the value of an enum array pin will show the enum value's display name.

  • Fixed a crash when compiling a Blueprint while intermediate graphs are open.

  • Fixed a crash while compiling a Blueprint with a validated Get node that is missing a property.

  • Fixed a crash when compiling a Blueprint while Find-in-Blueprints is searching all Blueprints.

  • Fixed a crash when vectors are compared in Math Expression using operator!=.

  • Fixed a potential crash during component registration when constructing instances of a Blueprint Class.

  • Fixed a potential crash on load during component template serialization for older Blueprint Class assets.

  • Fixed a potential crash when copying an array of USTRUCTs from one Actor instance to another.

  • Fixed an issue where deleting the scene root component in the Blueprint editor could lead to incorrect state of instances of the Blueprint class post-reconstruction.

  • Fixed crash executing cast to a class that is not loaded (presumably due to referencing a class in an unloaded module).

  • Fixed crash on reload of maps saved with constructed component instances that match archetypes by name but no longer by type.

  • Fixed a crash that would occur when editing an instanced variable nested within another instanced variable.

  • Fixed propagation of material swaps when editing "native" component templates (i.e. inherited from the C++ class) in the Blueprint Class editor.

  • Fixed socket browsing in the Blueprint editor for inherited component templates.

  • Fixed stale components persisting in a Blueprint Class asset after changing a native parent class's inheritance hierarchy.

  • Fixed vector axis input event nodes displaying a float output pin instead of a vector pin.

  • Fixed a bug that prevented new components from having the same name as a deleted one (prior to a compile).

  • Fixed a bug that was preventing copy, duplicate, and rename hotkeys from working in the Blueprint viewport.

  • Fixed a bug where certain keywords for Blueprint menu items were being ignored.

  • Fixed a bug where dirty Blueprints were not being compiled before you selected "Launch".

  • Fixed a bug where static functions were being hidden from Blueprints with Hide Categories metadata.

  • Fixed a bug with cyclic parent/child dependencies, where inherited components could be trashed when compiled.

  • Fixed a bug with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load.

  • Fixed a crash after renaming local variables when other functions have local variables of the same name.

  • Fixed a crash that could occur when passing a default Blueprint Session Result object to the "Join Session" Blueprint node.Instead of crashing, the join will fail an execution will continue from the "On Failure" pin, as normal.

  • Fixed a crash that could occur when undoing, after compiling an Actor Blueprint with components.

  • Fixed a crash that would occur in specific cyclic dependency cases involving an Actor and Actor Component Blueprints.

  • Fixed a crash that would occur when hovering over the "Edit Blueprint" button, for Blueprint instances that had components added in their construction script.

  • Fixed a crash that would occur when loading a Blueprint that depended on a plugin that was disabled.

  • Fixed a crash that would occur when removing an event/function param in a Blueprint that was associated with the set GameMode.

  • Fixed a crash that would occur when removing a pin that had a debug watch applied to it.

  • Fixed a crash when deleting a map while it's level Blueprint was opened.

  • Fixed a crash when restarting level after streaming sublevels in.

  • Fixed a cyclical dependency bug involving macro libraries, where Blueprints could load with a false error.

  • Fixed a potential failure to restore component instance data during reconstruction of an Actor-based Blueprint Class instance.

  • Fixed an issue where it would appear that the Increment/Decrement macros would occur twice when using the output pin from the macro.

  • Fixed an issue where some component property values on a Blueprint class instance in the current scene could be reset as a result of recompiling the Blueprint class.

  • Fixed crash when Local Variable of array type is compiled.

  • Fixed crash when making changes with multiple components selected in the blueprint editor.

  • Fixed crash when selecting for "None" class type on the Spawn Actor From Class node after having already selected another class.

  • Fixed crash when struct value is copied from invalid object using Set node.

  • Fixed crash, when two empty User Defined Enums have the same name.

  • Fixed decrement int macro node to actually decrement.

  • Fixed duplication of components within the component tree in the Blueprint editor.

  • Fixed editing of Instanced Static Mesh Component and Hierarchical Instanced Static Mesh Component.

  • Fixed exposed APEX cloth functions not appearing in blueprint editors.

  • Fixed incorrect tooltips between "Convert to validated Get" and "Convert to pure Get" options on Get variable nodes.

  • Fixed issues that could occur if an existing Blueprint class default object or instance contained one or more invalid property values for native (C++-defined) component subobjects on load.

  • Fixed issues with graph node bubbles rendering incorrectly when there is nothing in the top slot

  • Fixed issues with hiding categories in Blueprints not always hiding all the expected nodes.

  • Fixed issues with node titles being out of date (e.g., animation skeletal controls) by forcing node titles to be updated when a property on a graph node is modified

  • Fixed issues with Target pins being invalid after reparenting a blueprint.

  • Fixed rare crash in the Blueprint diff tool that occurred when user dragged certain UI elements.

  • Fixed the cause of a 'Critical Failure' that could occur when replacing references to one blueprint with references to a different blueprint.

  • Fixed crash with Find-in-Blueprints, fallout from changes to FString.

  • Hidden pins generated from native functions will correctly use their default values.

  • Improved the Pin Type Selector filter so order of words and case sensitivity does not matter.

  • In the pin type selector dropdown, hitting the shift key will no longer move the cursor back to the start of the search box and hitting the down and up arrow keys will again navigate the list view.

  • Input action and key events will no longer be placeable in Blueprint functions.

  • Input Touch event node cannot be placed in function or macro graphs.

  • Local variables in Blueprint functions will now be set to the default values of the user defined struct their type represents.

  • Math expression functions without any parameters will still provide their end parenthesis in the Math Expression node.

  • Math Expression nodes will again correctly lookup by the display name of a function.

  • Math Expression nodes will no longer always appear as changed when doing a diff on a Blueprint.

    • Improved diffing support to see how the expression has changed between revisions.

  • MathExpression nodes will not count function inputs as valid variables to access via getter nodes.

  • More strict restrictions related to WeakObjectPtr exposed to blueprint.No arrays of WeakObjectPtr.

  • On Blueprint enum pins, tooltips will appear when hovering over items in the drop down menu.

  • On the select node, setting the Index pin's type will always change the pin names of the option pins to "False" and "True".

  • Exposed FMath::FixedTurn to Blueprints.(Contributed by MatzeOGH, pull request 1254.)

  • Preventing in UK2Node::AutowireNode hidden pins from being auto-connected to passed in Wildcard pins.

    • This prevents issues with wildcards connecting to the "self" pin of functions when dragging off them.

  • Proper error is generated when incompatible Blueprint pins are connected.

  • Recompiling a Blueprint with a Component parent class now correctly re-registers any instances of the blueprinted component in the level.Previously existing instances could disappear.

  • Removed a check that was asserting when compiling a Blueprint with invalid Call Function or Call Parent Function nodes.

  • Renaming a component and then adding a new component of the same type in the Blueprint editor will no longer result in broken defaults editing.

  • Select nodes using enums with hidden values will no longer incorrectly match up the Option pin connections to the improper enum value.

  • Selecting a pin type for a Select node will not fail the first time.

  • Setting default values of Text properties in the User Defined Struct or for Local Variable properties in Blueprints will correctly assign the value and preserve the value between instances of the editor.

  • Splitting pins on the Function Result node will no longer attempt to compile the split pins as result pins.

  • The "Get" pin(s) on "Set" variable nodes will now display the name of the pin if the pin has been generated by splitting a struct pin.

  • The details view in Blueprints of non-member variables (either from a parent class or an external member reference) will no longer show various detail uneditable options as editable.

  • The eye icon appears now for marking a user created component variable as editable in the My Blueprints window.

  • Tooltips will display for sub-menu items in the Pin Type Selector.

  • Tweaked the tooltip for "Expand Nodes" menu option to better describe what the action will do.

  • When dragging off a pin in a function graph, local variable nodes will no longer be filtered out of the context menu for placement if they are valid for connection.

  • When indexing all Blueprints, hitting "No" will correctly skip checking out all un-indexed Blueprints.

  • When loading a blueprint pin types that don't match are no longer disconnected, instead we rely on compile errors to prevent the potentially broken blueprint from executing bad code.

  • When signature of a function is updated, its instances in the Event Graph are properly updated.

Core

  • New:A plugin with the same name but of different versions can be placed in multiple game projects.This allows studios with multiple projects to utilize the same plugin at different revisions as long as the plugin is part of the game project.

  • New:Added module path caching to improve editor startup times.

  • New:Added pre-allocated memory pool which is freed when the system runs out of memory to properly handle such crashes.

  • New:Added 'stat slow' console command.

    • Displays the game and render thread stats.

    • Can take two optional parameters -ms=x -depth=n that specify the minimum stat duration and the displayed hierarchy depth respectively.

  • New:Added the ability to force garbage collection when worker threads are inside of garbage collection lock.

    • In this case main thread will be blocked and wait until lock is over.

    • This can be configured in Project Settings under Garbage Collection section.

  • New:Added two new parameters to AutomationTool's BuildCookRun command:

    • IgnoreCookErrors - Ignores all cook errors and continues with deploying the project.

    • FastCook - Passes fast cook parameter to the cooker, which is handled on a per-project basis.

  • New:Changed the file reader to use async I/O for a 1.6x+ speedup reading files on Windows based platforms.

  • New:CMake project generator now works on Mac and Windows.

    • Pass -cmakefile to GenerateProjectFiles and use CLion or other IDEs to build UE4.

  • New:DirectoryWatcher can now optionally ignore changes in subdirectories (works on Windows and Linux; Mac implementation ignores this flag).

  • New:Exposed garbage collection settings to Project Settings under Garbage Collection category.

  • New:Exposed Streaming settings to Project Settings under Streaming section.

  • New:Improved missing import message to include the source asset name.

  • New:Improved the clean command in Unreal Build Tool.It will now properly clean up modules no longer referenced by the project.

  • New:Made zlib to also use standard Unreal memory allocators, which makes it easier to track them.

  • New:Memory stats will now also be reported when the engine crashes.

  • New:More verbose log message when the engine crashes because of a corrupted file.

  • New:Optimized transaction processing, saving unnecessary iteration when performing an ObjectRecord preload.

  • New:Improvement in garbage collection performance by implementing three micro-optimizations.(Contributed by pzurita, pull request 1348.)

  • New:Slightly optimized object loading by looking up the object in memory before flushing async loading.

  • New:Small optimizations for structure serialization:

    • Added native serialization for immutable structures.

    • Added POD flags for various math classes.

  • New:The amount of logging information displayed in the editor has been reduced.The removed logging is now only written to the log file.

  • New:TAssetPtr now supports conversion from derived to base.

  • Fixed a memory leak in the FLinkerLoad in debug builds, never clearing itself from the list of live linker loaders.

  • Added a system for deferring linker deletion to fix crashes during async loading.

  • Added attribute serialization to the XML File writer.

  • Added code to force exit when a worker thread crashes.

  • Added message log error for source name collisions in redirector ini sections.

  • Always use the Engine directory instead of the Process directory to locate executables on Windows.

  • Changed "CreateExport:Failed to load Outer..." message to be emitted to the message log so it is better surfaced to the user when running the editor.

  • Changed the message about missing config files on startup to make it more accurate.

  • Disabled runtime crash processing for launcher builds to reduce memory footprint.Callstacks will still be processed by CrashReporter.

  • Editing "Project Settings" value now only edits a single value in the config ini file.

    • With the exception of Arrays, which need a whole new implementation.

  • EPackageFlags & EObjectFlags can now be properly viewed in the debugger as a collection of enum entries, e.g. RF_Public | RF_Transactional, rather than just the raw numerical value.

  • Fixed crash reporting on Windows to make it more reliable.

  • Fixed "nearly equal" math comparisons not returning true when values are exactly equal and tolerance is zero.

  • Fixed a bug in TBB allocator that caused aligned allocations to overlap incorrectly.

  • Fixed Get Value Range function on Curve Base giving Min instead of Max.(Contributed by MiniTurtle, pull request 1314.)

  • Fixed a bug where game thread graph was not always enabled after loading a UE4Stats file in the profiler.

  • Fixed a bug where profiler could not perform 2 captures in a row through UI.

  • Fixed a crash after renaming a map or asset that couldn't have been renamed due to errors.

  • Fixed a crash in Online Async Task Manager Null when running the game with "-nothreading" on Windows.

  • Fixed a crash on exit after streaming levels in a cooked game.

  • Fixed an assert when checking for existing linker after async loading.

  • Fixed an intermittent deadlock when shutting down a game.

  • Fixed an issue where installed plugins would cause a content-only game to build when packaging.

  • Fixed Blueprint compilation errors after hot-reload.

  • Fixed build failures that could happen when user tried to add modules' dependencies.

  • Fixed crash on exit in packaged games caused by random order of destruction of some of the core UObject systems.

  • Fixed crash reporting and the engine not reporting correct windows version for Windows 8 and 10.

  • Fixed redirectors assets "Fail to load" messages that could appear in certain situations in the editor making redirector assets unusable and unfixable.

  • Fixed saving failure after hot-reload when blueprint node contained a reference to a class default object.

  • Fixed sporadic audio crash after hot reload.

  • Fixed the search order for detecting a target for game projects.

  • Fixed the search paths for plugins when running a packaged content-only game.

  • Fixed BSP texture align tools all being initialized to default.(Contributed by yamashi, pull request 1136.)

  • Fixed a crash if list of delayed linkers includes multiple entries of the same linker.(Contributed by MarcKamradt, pull request 1197.)

  • Fixed broken UnrealBuildTool dependency file caches when the process is terminated unexpectedly.

  • Fixed UnrealBuildTool not being able to harvest environment variables when the user's Windows login name contains non-ASCII characters.

  • Fixed UnrealBuildTool not updating the makefile when a .Build.cs or .uproject file changes.

  • Fixed UnrealHeaderTool crash that was occurring in some rare cases if parsing step had other errors.

  • Fixed UnrealSwarm "Channel already registered" error to log the actual reason why exception has happened, cause until now it was very misleading.

  • Fixed UnrealSwarm connection problems, which were happening if coordinator and agent were on the same machine and coordinator address in agent's settings was set to non-loopback IP.

  • Incredibuild binaries are now sought in Path and not just Program Files.

  • Integrated some UnrealBuildTool performance fixes which were added in 4.7 but omitted from 4.8.

  • Made sure default subobject (component) properties are not reset to default on actor construction.

  • Made sure packages are not marked as dirty when they're being streamed in.

  • Minor performance optimizations for UnrealHeaderTool that shave a couple of seconds off of an invocation for a typical game project.

  • Moved linker serialization from UObject to UPackage to fix inaccurate UObject mem reporting.

  • Optimized object referencing system when collecting garbage while streaming.

  • Profiler will now load all frames, previously the last frame was ignored.

  • Quadrupled trunc length for callstack lines when forming the human readable string for windows callstacks.

  • Removed some redundant calls from FPaths::MakeStandardFilename to make it faster.

  • Rendering thread callstacks are once again correctly printed to the log for non-editor builds.

  • Save to default config no longer writes out duplicate entries.

  • Smoke test added to ensure platform consistency on opening files for append, and ability to seek said file handles.

  • The TAttribute no longer allows you to directly compare another TAttribute for equality.

    • They've been deprecated, and corrected to only allow comparison against literal values instead of comparison attributes, which was causing implicit construction of attributes when comparing against a literal.

    • There's a new IdenticalTo() function on TAttribute which can actually compare two attributes to see if they are really the same.

  • When bAutoCompleteWhenLoadingCompletes is false in the MoviePlayer, the movie correctly continues playing until prompted to stop after loading completes.

  • When queueing new async packages, async loading code will also look for existing packages in loaded packages to process to prevent infinite streaming times.

Editor and Tools

  • New:Added "Zip Up Project" button under File -> Package Project to grab necessary project files and package into a zip.For easily sending the project to other people excluding unnecessary files.

    • Smart Resizing for Transform Details UI:

      ​​ image alt text

      • The vector and rotator widgets now support automatically rendering in a more compact mode as the details panel shrinks, making it possible to edit properties over a wider range of widths.

  • Rotator UI Consistency:

    • Rotators now display everywhere in a consistent order as XYZ, rather than being displayed as XYZ in the level editor but as Pitch, Yaw, Roll (YZX order) in Blueprints.

    • In a Blueprint:

      image alt text

    • In the level editor:

      image alt text

    • All existing content is automatically updated and will work as expected, but you may notice wires crossing that didn't cross before since the order has changed.

    • As a refresher (this information is also displayed in the tooltips):

      • X is the roll value (rotation about the X axis, typically the forward vector, e.g. tilting your head sideways).

      • Y is the pitch value (rotation about the Y axis, typically the right vector, e.g. looking up/down).

      • Z is the yaw value (rotation about the Z axis, typically the up vector, e.g. turning to face left/right).

  • New:"Add Auto Connect To Server" option to the advanced Play In Editor options, defaulting to old value of true.If set to false it will launch multiple clients but they won't connect to each other, which is useful for UI testing.

  • New:Added "No to All", "Yes to All" and "Cancel" options to the "Failed to Merge Bones" dialog when importing skeletal meshes to avoid having to dismiss large a large amount of windows.

  • New:Added "Save All" button to Visual Logger tool.

  • New:Added a check to determine whether plugins are compatible when opening a content only project.This is needed because a content only project will not attempt to build incompatible plugins later, users can now choose to disable them.

  • New:Added a support URL to plugins so that it is easy for users to know how to contact the creators of plugins for support.

  • New:Added file modified date and file size to map file asset tool tips.Allows sorting by these values in column view mode.

  • New:Added SkeletalMesh Resource Size in content browser.

  • New:Added support for multi-line text in the Note actor's text field.

  • New:Added support for positioning and always centering standalone play windows.Fields are added under Level Editor - Play advanced settings to position the standalone play window and turn always centering on and off.

  • New:Added the option to display the current Unreal Engine's version number in the project badge.This feature can be enabled in the Miscellaneous category inside of the Editor Preferences.

  • New:All integer property types are now supported in details panels instead of only int32 properties.

  • New:Allows play in editor windows to always be displayed on top of other windows, enabled/disabled under Level Editor - Play advanced settings.

  • New:Clarified the use of Server Game Options and Command Line Options in the tooltips for the Level Editor - Play settings.

  • New:Enabled engine/game plugin switch in plugin wizard.(Contributed by szyszq, pull request 1145.)

  • New:FBX importing detection has changed.

    • If you have animated curves, it will detect as Skeletal Mesh even if you don't have deformer.

    • This is so that it is easier to import animation for rigid bodies.

  • New:"Light Types” show menu:

    • "Lighting Components" -> “Ambient Occlusion” affects both DFAO and SSAO now.

    • Added "Screen Space Ambient Occlusion" show flag under ”'Lighting Features”.

  • New:Made the Blueprint Editor viewport camera speed a per-project editor user setting, which is saved between sessions.

  • New:Major optimizations to the BSP building process and BSP Undo.

  • New:Moved Plugins menu from Windows to Settings/Configuration.

  • New:Optimizations to setting the material or its texture transform on a BSP surface.

  • New:Placed cameras can now be looked through and piloted more quickly by using the camera dropdown in the level editor viewport.

  • New:Added hooks to Material Editor for plugin support.(Contributed by bradgrantham, pull request 1168.)

  • New:Removed the close button from the Convert Project modal dialog, as it was returning an undefined reason code (and was not necessary as there was already a Cancel button).

  • New:Removed the SaveBrushAsCollision command and its bindings, as the builder brush is no longer a user-facing concept.

  • New:Renamed the editor preference "Automatically Hot Reload New Classes" to "Automatically Compile Newly Added C++ Classes" to convey that it implies a compile.

  • New:Text FrontendFilter now tries to match with components of the path name, as well as the asset name itself.

  • New:The "Maximum Texture Size" property now yields an error dialog when attempting to change it for non-power-of-two textures which do not have a padded Power of Two Mode.

  • New:The RenderToTexture Blueprint toolset now has its own set of options for EXR exporting and does not require interfacing with the 'High Resolution Screenshot" dialogue box.

  • New:Users can now edit PlayerStateClass and SpectatorClass for a game mode via the Project Settings menu.

  • New:The green flash on tutorials will not return in future sessions once the tutorial is started.It is no longer necessary to dismiss the tutorial manually or complete it.

  • New:When building the plugin category tree, plugins are now also added to their parent category until we reach the root, so that all plugins can be searched from the root level.

  • New:When using "-List" command with UnrealPak, the files will now be printed out in the order they appear in the pak.

  • Actor Merging tool now correctly assigns user specified lightmap channel to a merged mesh.

  • Actors generated by 'Hierarchical LOD' system can no longer be transformed using Details panel.

  • Added an ensure to the main frame to indicate when it is being incorrectly loaded in a -game build.

  • Added an option to not use MikkTSpace tangent generation for static mesh importing.

  • Added error message if a material expression parameter name is too long.

  • All PIE world objects are now marked pending kill when exiting a play in editor session to break any references that could prevent garbage collecting the PIE world.

  • Attempting to enter greater than the maximum allowed number of FName characters into a name property will now show an error message in the text box in a details panel instead of crashing.

  • Changed common and divisions of 360 rotation grid snap values.

  • Changed Plugin Creator to allow plugins to be created in subdirectories.

  • Decals now drag and drop properly when dropped on top of meshes.

  • Disabled Plugin Creator plugin in content only projects as it currently won't generate projects/compile any plugins that are created.

  • Ensured that dependencies on missing plugins can be removed from the .uproject file when loading the editor.

  • Ensured that Plugin Browser displays correct results after adding a new plugin.

  • Fix for crash while trying to hide the Tick property category within a class.

  • Fixed "Multiple Values" being committed to property text blocks when they lose focus or when the user presses enter.

  • Fixed a crash executing source control commands with the Subversion source control provider.

  • Fixed a crash that could occur during a Play In Editor session with two or more players, using multiple processes, and having the editor multiplayer mode set to "Play as Client".

  • Fixed a crash when a level that has a Matinee Actor is unloaded at runtime.

  • Fixed a crash when changing a struct that was being used by an open Data Table editor.

  • Fixed a crash when dragging junk text from an external program into the graph editor.

  • Fixed a crash when immediately closing Visual Studio after opening a source file via the editor.

  • Fixed a crash when importing multiple objects with the same name at the same time when one of them is an FBX file.

  • Fixed a crash which could occur when attempting to open a map in the content browser that is currently loaded in the world composition browser.

  • Fixed an issue where selecting a surface with no actor selected did not bring up the details panel specialization for the surface properties.

  • Fixed an issue where some of the shape textures in engine/content did not have textures.

  • Fixed BSP selected surface rendering in Geometry Mode.

  • Fixed camera roll being applied to level viewport cameras after ejecting from the player in a Play in Viewport session.

  • Fixed crash accessing the engine when attempting to play a slate sound after the engine has been shut down.

  • Fixed crash converting texture sample to parameter when MipValue is set to "Level" or "Bias".

  • Fixed crash copy and pasting material function call nodes while live preview is disabled.

  • Fixed crash ending Play in Editor if transactions made before starting PIE were undone while PIE was running.

  • Fixed crash in visual logger when you run the editor with an invalid .uproject.

  • Fixed crash when reimporting a mesh while editing collision in the static mesh editor.

  • Fixed duplicated brush actors not appearing in game.

  • Fixed editor viewports not remembering maximized state after shutting down in immersive mode.

  • Fixed error where during Mesh Paint mode using the Remove button would only remove the Vertex Colours from the first LOD level.

  • Fixed existing collision not being restored if there is no collision in the FBX file when importing over existing Static Meshes.

  • Fixed FBX import failure caused by incorrect import factory attempting to handle incoming assets.

  • Fixed geometry surface alignment tools for BSPs.

  • Fixed issue where BSP surface texture transforms could break when rebuilding geometry if their parent brush had been rotated about more than one axis.

  • Fixed issue where BSP surface transforms could get broken when applying them to geometry surfaces which are out of sync with the owner Brush (because Auto Build BSP is disabled).

  • Fixed issue where cancelling unsaved packages dialog when launching resulted in the Launch button permanently disabled.

  • Fixed issue where creating a child of an anim blueprint would result in a regular blueprint being created.Also fixed a similar issue with GameplayAbilityBlueprints.

  • Fixed issue where the AssetImportData for an asset was being lost when loaded.

  • Fixed issue where warnings during PIE were not being announced via a notification at the end of a PIE session.

  • Fixed issue with EyeDropper tool returning incorrect colour due to lack of gamma-correction.

  • Fixed issue with selection box rendering in the Curve Editor.

  • Fixed issues with redirector fixup, so that redirectors are deleted cleanly and referencing map packages are correctly fixed up.

    • In addition, fixed an issue where sometimes it was necessary to perform redirector fixup twice.

  • Fixed issues with the Delete Assets dialog so that the operation is always performed cleanly where possible, and not erroneously requiring a "Force Delete" operation.

  • Fixed issues with the geometry Optimize operation so that it always works correctly, without sometimes first requiring a Triangulate operation.

  • Fixed lights not being hidden when changing the editor visibility via the World Outliner.

  • Fixed manually entered rotations in the editor sometimes not resulting in the correct object rotation (mainly when editing Pitch).

    • Component transform editing now makes sure to only edit the single component (Yaw, Pitch, or Roll) that has been changed, and makes sure Quat<->Rotation conversion does not mess with the end result.

  • Fixed manually entered rotations in the editor sometimes not resulting in the correct object rotation (mainly when editing Pitch).

    • Component transform editing now makes sure to only edit the single component (Yaw, Pitch, or Roll) that has been changed, and makes sure Quat<->Rotation conversion does not mess with the end result.

  • Fixed Matinee Editor Preview Viewport FOV lagging by a frame.(Esp. noticeable during cuts between cameras of different FOVs)

  • Fixed menus so that they set the widget to focus upon activation to the actual content widget, rather than the wrapper.This fixes issues with the Ctrl+Tab file selection shortcut.

  • Fixed mirror transforms on BSP / Volumes.

  • Fixed missing engine controls overlay for mac and linux in the lower-left part of the viewport.

  • Fixed numeric math expression input when using a combination of units in unit-based numeric entry boxes.

  • Fixed Paper2D JSON files no longer importing as Paper2D assets.

  • Fixed rare crash in Visual Logger during shutdown of engine.

  • Fixed rare editor crashes caused by proxy updates happening after proxy destruction.

  • Fixed rendering issue with the Collision Analyzer window when opened from a non-editor build via the console.

  • Fixed rendering of graph node popups (for example, dropdown boxes) in graph editors.They are now rendered and sized at 100% scale, regardless of the zoom of the graph itself.

  • Fixed some users being unable to create blueprinted components without visual studio installed.

  • Fixed Tag and Tag Query Editor windows on Mac.

    • These windows were parented wrongly on Mac and couldn't be clicked.

  • Fixed Undo in Geometry Mode so that the geometry selection state is correctly restored.

  • Fixes to Visual Logger tool, to fix how we use this tool only with keyboard.

  • If you import a Skeletal Mesh with scale 0 of bone for reference pose, it will print warning.

  • Improved Data Table handling of User Defined Enums:

    • The Data Table editor UI will now show you the friendly name of the enums in its grid panel (matching what the property panel shows).

    • The Data Table import will now fallback to trying to import using a friendly name if no matching enum entry was found for the given name.

  • Improved instructions for what to do after creating new plugins with the wizard.

  • Improved performance when importing thousands of mesh sections from one FBX file.

  • Improved the localization support of the class wizard dialogs.

  • Made StartPIEGameInstance virtual to allow for game-specific PIE code.

  • New game windows now default to being positioned centered on the screen.

  • Optimizations to histogram graphs from Visual Logger tool.

  • Optimized pasting of actors into levels that contain a large number of actors.

  • Option to enable Hierarchical LOD is now more discoverable and can be found in 'World Settings' under the LODSystem category.

  • Performance improvements to OpenEXR exporter.

  • Placement mode can now correctly place new actors at locations occupied by foliage meshes.

  • Fixed small but annoying typos in ContentWrangleCommandlet.

  • Fixed Animation Sequence 'Reimport With new Source' context action.

  • Fixed issue with Animation Sequence reimport not respecting 'Default Sample Rate' flag set by the import UI.

  • Reduced ULevel::BuildStreamingData editor hitches from 600ms to 30ms.

  • Removed the map check warning "has simple collision but is being scaled non-uniformly - collision creation will fail" as a collision shape is created regardless of the fact that an object is non-uniformly scaled.

  • Renamed "Tick" category in UActorComponent to "Component Tick" and Actor tick to "Actor Tick" to differentiate between the two when they are both shown in a details panel.

  • Resizing a viewport no longer flushes texture streaming, causing a hitch.

  • Stopped ensure being triggered when scaling a skeletal mesh to 0.

  • Textures are no longer compressed for auto-saves to reduce the time it takes to save.

  • The color picker no longer assumes a straight inverse gamma conversion from colors sampled on the screen using the eye dropper.This change makes it so sRGB is the assumed space all colors are sampled in, making sampling colors from Photoshop bring in the identical version of the color converted into linear space, which when transformed back into sRGB space will be the same color you saw in photoshop.

    • FColor and FLinearColors can now default to sRGB space using a UPROPERTY meta tag of sRGB=true (or false), you can force a specific default checking of the sRGB checkbox.

    • Several places in UMG now force this default since sRGB is the space UMG will be rendered in (on PC).Additional work will be needed on Mac where the final rendering space is gamma 2.2.

  • The editor now properly saves out array elements to the ini files.

  • The Far View Plane setting for level editor viewports is now saved between sessions.

  • The Scalability state is now saved back to the same .ini file that it was loaded from, so that launching the editor doesn't reset Scalability settings set by the game.

  • There is now no longer a max limit to the number of static mesh sections that can be generated when importing meshes.The previous limit was 64 sections.

  • Updated Material Preview Mesh properties to include Adjacency Info.

Content Browser

  • New:Improved the behavior of Ctrl+B in the Content Browser and Persona.

    • Ctrl+B in the Content Browser will now invoke the "Show in Folder View" command to allow you to easily sync to the actual location of an asset in the cases where you're viewing it via a search or a collection.

    • Ctrl+B in the Persona animation sequence browser will now invoke the "Find in Content Browser" command.

    • Ctrl+B will no longer do anything when Persona has no asset available for a given edit mode.

  • New:The "Move Folder Here" operation can now be aborted if there are a large number of assets within.

  • Auto reimporter now uses MD5 hashing to ensure that benign reimporting does not happen when only the timestamp has changed.

  • Can now use the "Show Developers Folder" option in the save/load dialogs.

  • Fixed an issue in which cancelling the attempted delete of read only files would still remove the asset from the Content Browser.

  • Fixed being able to rename or delete some read-only types in the Content Browser.

  • Fixed Content Browser drag-and-drop so that it works in all views (it only used to work in tile view).

  • Fixed Size Map incorrectly displaying assets with back-references in the "shared" node.

  • Fixed the "Show Collections" option appearing multiple times if multiple Content Browsers were open.

  • Fixed the Content Browser assets not updating their SCC state correctly when the SCC provider is changed while the editor is running.

  • Local collections are now preserved when creating a copy of your project.

Landscape

  • New:Added a "Mesh Vertical Offset" to landscape spline control points:

    • This new property is blendable along the spline and independent of the spline width, unlike the old "Offset" in the spline segment mesh settings.

    • The old "Offset" in the spline segment settings has been renamed to "Center Adjust", to more accurately describe what it does.

  • Added the p.bUseUnifiedHeightfield console variable to allow disabling the use of PhysX unified heightfields.(These are enabled by default):

    • When this feature of PhysX is enabled, landscape collision thickness does not function and CCD is the only option to prevent fast moving rigid body penetration.

    • You can set p.bUseUnifiedHeightfield=0 in your ConsoleVariables.ini file if you wish to disable the PhysX unified heightfield.

  • Fixed a crash generating landscape rendering data during mobile preview rendering level.

  • Fixed a crash when assigning a material to a LandscapeProxy.

  • Fixed crash when using the landscape resize tool.

  • Fixed a crash when colliding with landscapes with physical materials due to mismatch between the saved level and and data in the derived data cache.

  • Fixed external reference errors caused by moving components with an XY-offset map texture to another level.

  • Fixed Landscape Grass not updating after undoing a landscape painting operation.

  • Fixed landscape spline control point meshes not working.

  • Fixed problems with landscape cooking where launching on a mobile device or in the mobile previewer multiple times from the editor would not correctly cook changes made in the editor session.

  • Fixed rare crash caused by various UObjects used by the landscape tools getting garbage collected.

  • Fixed smooth tool being broken for strength > 1.

  • Fixed spline meshes stored in foreign levels disappearing in cooked builds.

  • Fixed the "Smooth" tool also causing a flattening effect.

  • Fixed the Landscape Editor keyboard shortcuts not working.

    • Note:The number keys are bound to bookmarks by default, and so these won't work for switching tools in the viewport unless you unbind or rebind them.

  • Landscape collision thickness value now correctly propagated to underlying PhysX heightfield when changed.

    • Note:Heightfield thickness requires the p.bUseUnifiedHeightfield=0 console variable setting in order to have any effect in PhysX.

  • Landscape tool now correctly shows layer names when new layer has been added.

  • Moving landscape components to a sub-level will now correctly move any attached foliage as well.

  • Precomputed visibility should now be correctly calculated for landscape actors.

  • Properly deform navigable geometry for spline mesh.(Contributed by mollstam, pull request 1295.)

  • The user is now prevent from attempting to use the World Grid Material as a landscape hole material.Overriding blend mode on the default material will cause a crash.

  • Undo now works correctly with "Clear Region Selection".

Material Editor

  • New:Added Map Check warning after loading a level in the editor that uses a material that needs one of its Usage Flags set.Unless resaved, such materials will render as the default material in cooked builds.

  • New:Added World<->View transforms to the TransformPosition node in the material editor.

  • New:The Material Editor now saves the toggle state of nodes' comment bubbles, so they are preserved when reopening the material.

  • Fixed a crash placing a Custom Output material node in the material editor.That node type should have been excluded from the material node list.

  • Fixed a material compile error generating when using a Custom material node together with a TextureObject on OpenGL platforms.

  • Fixed a small error which was causing some Material Functions in the library to not appear in the right click menu, despite being exposed.

  • Fixed issue where editing a Material Parameter Collection results in marking an unnecessarily large number of materials as dirty.

  • Fixed titles on math nodes to update when the pin connections change.

  • TextureSample material nodes now fetch the correct tooltips.

Matinee

  • Fix bug that could cause sounds to start not quite at the beginning during playback.

  • Fix matinee crash when running without audio device.

  • Fixed matinee sound preview playback so that it respects the loop section and correctly restarts.Improved the quality of audio playback when scrubbing.

  • Launching movie capture once again works when using a DebugGame binary.

  • Matinee can no longer be opened while there is an active Play in Editor or Simulate session as it is unsafe to change matinees during play sessions.

  • Switching editor modes will now warn before closing Matinee mode.

Cascade

  • All particle modules now reset to their distribution properties to their correct defaults instead of "None".

  • Fixed crash when setting the particle system Initial Velocity to defaults when configured as a Distribution Vector Uniform Curve.

  • Mesh particles now properly populate dynamic parameter names in Cascade.

Persona

  • New:Added key handling to Persona segment panel for montages so delete key now works correctly.

  • Fixed delete context menu option for animation notifies not correctly deleting notifies on some platforms.

  • Fixed a crash in reinstancing of Persona preview instances after compiling blueprints that are referenced in the Animation Blueprint event graph.

  • Fixed a crash when switching between edit modes with wind source actors active.

  • Fixed an issue in the type-in UI for blendspace sample coordinates where the Y coordinate could not be set to the same as the X coordinate.

  • Fixed APEX clothing files failing to import when non-ANSI characters were present in the file path.

  • Fixed crash in anim compression when retargeting an animation with a single key.

  • Fixed crash in Persona accessing stale preview instances.Now we reinitialize the animation correctly when the blueprint changes.

  • Fixed crash in Persona when undoing deletion or duplication of state nodes.

  • Fixed crash when undoing a change in custom blending graphs for state machine transitions.

  • Fixed deleted names in smart name managers remaining after deletion.

  • Fixed ordering of source and target bones in the details panel for the copy bone node to make them more intuitive.

  • Fixed UI refresh being triggered for any property edit event fired from any UObject.Now filtered to refresh only when notify data is changed.

PhAT

  • Fixed issue where changing the mesh rendering mode in PhAT would not update in the viewport until the second click.

  • Fixed PhAT Editor crashing due to being able to select nonexistent bones.

World Outliner

  • New:Changed the level name tooltip in the Levels Browser to display the full package path name.

Static Mesh Editor

  • New:Added the ability to push the bounds for StaticMesh objects manually.

    • The bounds can be altered by changing the value of the PositiveBoundsExtension and NegativeBoundsExtension properties for a StaticMesh.

  • New:Static mesh adjacency buffer generation is now set per-mesh.Controlled either through the mesh editor or on import.

    • This was previously controlled by an internal fixed triangle limit but needs to be optional to allow PN tessellation on high-poly meshes.

    • The flag will be auto-set for old meshes preserving existing behavior.

Source Control

  • New:Added make file writable button for advanced project setting pages, which allows files to be edited when non-writable and not connected to source control.

  • New:Once an asset is made writable (if it cannot be checked out), it will no longer continue prompting the user for check out when it is modified.

  • Fixed not being able to use collections with SVN or Git set as your SCC provider.

  • Fixed Subversion source control plugin to recognize the correct line terminator sequence depending on the platform.This was previously breaking the log output on Mac.

  • Subversion source control provider can now use the system default svn binary where it exists.

    • This addresses issues where users have repositories and checkouts that were made with different versions of SVN to the client binary we ship.We now attempt to detect a system-level svn binary, and only use the shipped binary as a fallback.

World Browser

  • New:LOD sub-level generation has more options for material simplification (texture size, constant material parameters).

  • Fixed a case where world composition would scroll the minimap view to an undefined location if the user selected a hidden tile.

  • Fixed X-axis orientation when importing tiled landscapes from World Machine.

  • The 'Bake Grass' option for LOD sub-level generation will now correctly bake grass across all landscape surfaces.

  • World composition now incrementally updates sub-level tile images, preventing large editor hitches when a large number of tiles need update at the same time.

Foliage

  • New:Added a bulk foliage instance removal Blueprint function to HierarchicalInstancedStaticMeshComponent

    • RemoveInstances takes an array of instance indices.

    • It can directly use the Instances array passed into the new FoliageInstancedStaticMeshComponent OnInstanceTakeRadialDamage event to remove all damaged instances.

  • New:Added Blueprint support for Foliage instances.

    • The foliage component class can now be overridden in the Foliage Type.

    • Users can create a Blueprint subclass of FoliageInstancedStaticMeshComponent to respond to Hit or Damage events and hide or remove instances, spawn effects, spawn real Actors in place of an instance etc.

    • The default class is FoliageInstancedStaticMeshComponent which is a subclass of HierarchicalInstancedStaticMeshComponent but has added support for Point and Radial Damage.

  • New:Added support for instanced mesh components (e.g. foliage) to FBX export.

  • New:Foliage painting now always trying to paint through filtered geometry.For example, when static meshes are filtered out foliage still can be painted on landscape bellow static mesh.

  • New:We no longer try to create physics data for InstancedStaticMeshComponent (eg Foliage) instances with a zero scale, which removes some PhysX warnings and improves performance.

  • Added a button to the Map Check warning about duplicate Instanced Foliage Actors to allow you to consolidate them.

  • Foliage can now be correctly spawned on top of Actors composed from Hierarchical Instanced Mesh components.

  • Running procedural foliage simulation will now mark only sub-levels that were actually affected by the simulation as dirty

  • Thumbnails in the foliage editor now update properly when hovered over.

  • We no longer try to create physics data for InstancedStaticMeshComponent (eg Foliage) instances with a zero scale, which removes some PhysX warnings and improves performance.

Cooker

  • New:General cooking performance optimizations.

  • New:Multiprocess cooking is in UnrealFrontend custom profiles.

  • New:New cooking stats system for more details ddc / package stats.Are saved into the \Saved\Stats\ directory.

  • New:Optimization to Save package improves cook times.

  • New:Performance improvements of saving and caching packages in the cooker.

  • Cooking dlc no longer includes assets from base game in the asset registry.

  • Fixed an occasional crash when cooking, where a material with a mismatching texture sampler type binding would try to looking an UEnum during cooking and hit a check().

  • Fixed asset registry getting out of date when using -iterate.

  • Fixed crash in cook on the fly when recompiling shaders.

  • Fixed failure to package a build when also playing via LaunchOn.

  • Fixed missing PS4 x64 dlls (pad/morpheus) and .uplugins during staging.

  • Fixed various issues that were only showing up during the process of packaging a project from the editor.

Gameplay Framework

  • New:Actor transforms when spawning.

    • The process of spawning actors has changed slightly.If an actor is spawned and its template's root component has a transform (for example, a RelativeRotation), that transform, including scale, will now be respected by the spawning code.

    • For certain cases where you are sure you want to spawn at the exact transform given and ignore any transform on the template's root component, we have added the SpawnActorAbsolute() function.

    • Check out DecalActor for an example of how this works in practice.

    • Notes when upgrading:

      • If you have custom actors or blueprints with transform data on the root component that was previously ignored, you will see different results when spawning them with 4.9.In this case the best fix is likely to be simply zeroing out the transform data, since it was ignored before anyway.

      • If you have added code somewhere to take this transform data into account before spawning, you will likely want to remove it, or else you will end up applying the transform twice.

  • New:A Remove Player analogue to Create Player is now available for use in Blueprints.

  • New:AActor::bPendingKillPending renamed to bActorIsBeingDestroyed and made private.

  • New:Added "BrakingFriction" for CharacterMovementComponent, optionally enabled by "bUseSeparateBrakingFriction" setting.

    • Previously GroundFriction was also used as the braking friction.This new setting allows separate control from the GroundFriction that affects turning control.

    • Added "BrakingFrictionFactor" which controls how friction is used in ApplyVelocityBraking().(Note: this is 2 by default for historical reasons, but a value of 1 more closely matches the actual drag equation).

    • Different values are easily used in different movement modes by hooking in to OnMovementModeChanged and modifying BrakingFriction.

  • New:Added AbilityEndedCallbacks delegate to AbilitySystemComponent that broadcasts when an ability ends.

  • New:Added an automated test that will attempt to all variations of a new project.(IE C++ and blueprint and target platform for both mobile and desktop).

  • New:Added an automated test will parse and validate all available feature packs.

  • New:Added debug command ("p.VisualizeMovement") for showing in-world debug drawing of CharacterMovementComponent state including current velocity and acceleration.

    • virtual UCharacterMovementComponent::VisualizeMovement() can be overridden in child classes to add project-specific debug drawing.

  • New:Added GetServerWorldTimeSeconds() to return the simulated time in seconds of the server.This is safe to call on either the server or the client.

  • New:Added MaxRange and a Tag (FName) to noise parameters for AI hearing.

    • MaxRange is only used if > 0.It is modified (multiplied) by the loudness.Sensors must still pass their own range checks as well.

  • New:Added new Math functions to KismetMathLibrary:

    • RandomUnitVectorInConeWithYawAndPitch, creates an uniformly distributed random Vector within a cone defined by the given Yaw and Pitch values.

    • CreateVectorFromYawPitch, creates a Vector from the given Yaw and Pitch rotation values.

    • GetYawPitchFromVector, retrieves the Yaw and Pitch rotation values in degrees from the given vector.

  • New:Added optional interpolation curve to the MoveToLocation AbilityTask to support per-axis interpolation.

  • New:Added ShouldAcceptGameplayCue() function to GameplayCueInterface, to allow actors to opt-out of receiving gameplay cues under certain circumstances.

  • New:Adding the blueprint function GetSupportedFullscreenResolutions, which gets the list of supported full screen resolutions.

  • New:Can now bind mouse wheel not just as scroll up or scroll down, but also as an axis which returns the delta change in mouse wheel position.

  • New:Collision now supports a new "PhysicsOnly" option.These objects will only be used in the simulated physics scene, not the query scene.

    • Added ECollisionEnabled::PhysicsOnly option to round out all options of NoCollision, QueryOnly, PhysicsOnly, QueryAndPhysics.

    • Can be used for things like capes and hair that users may not want to be considered by scene queries.

  • New:Convenience function to get level name in BPs.

  • New:Exposed UPrimitiveComponent::CharacterCanStepUpOn variable and UPrimitiveComponent::CharacterCanStepUp() function to blueprints.

    • Also improved comments/docs on these to indicate that it only prevents step ups when bumping in to objects, not walkability on them (use walkable slope override for that).

  • New:Exposed some Vector :Integer arithmetic methods to Blueprints.

  • New:Gameplay Cues can now be specified via GameplayCueSets.Classes can implement IGameplayCueInterface to return a GameplayCueSet to use instead of the global set.

  • New:Performance:Optimized overlap detection during swept movement.Approximate 10% or greater reduction to swept movement cost when in the presence of overlaps (depending on scene complexity).

    • Overlaps at the end location are now computed based on tests against the individual candidates found during the sweep, rather than using a full scene query from UpdateOverlaps().

    • Changes in rotation still allow cached overlaps as long as the rotation is symmetric (ie couldn't have changed overlaps).

    • UpdateOverlaps() now avoids any processing for child components when done for the root component.This makes optimization simpler and children will test the parent anyway.

  • New:Revised feature pack parsing code.Feature packs can now be parsed via the manifest file eliminating the need to pack all feature packs.

    • This was used to implement the feature packs used for the shared resources now used in templates.

  • New:Smooth rotation for network corrections of simulated proxies in character movement.

  • New:Spawn Actor now accepts Scale properly.

    • Because of this, we added SpawnActor to accept FTransform as an input.

  • New:The class of the default physics volume can now be set via the World Settings properites.

  • New:When unloading a streaming level all objects are now marked pending kill to avoid any stray references to the objects that could prevent the level from being garbage collected.

  • New:You can now bind the Any key.This will respond to any key press/release event and follows the same rules for consumption that other keys follow.

  • "Always-loaded" sub-levels will now be fully loaded before gameplay begins when using seamless travel.

  • A graceful message for failure to load the default map is now shown followed by closing the application when travelling instead of crashing.

  • AActor::bPendingKillPending renamed to bActorIsBeingDestroyed and made private.

  • BeginPlay will no longer be called on a component that has seamlessly travelled from another level.

  • Broadcast PhysicsVolumeChangedDelegate even if the previous physics volume was null.

  • Bugfix to timers that are paused immediately after being set.

  • Calling TryActiveAbility will now call CanActivateAbility on the Primary Instance of the Ability Spec, if it exists.(If not we continue to do the previous implementation which will call CanActivateAbility on the CDO.)

  • Change FQuat tolerance within SceneComponent and PrimitiveComponent to allow smaller rotation changes to get through.

  • Changed KismetMathLibrary functions PointsAreCoplanar, LinePlaneIntersection, and LinePlaneIntersection_OriginNormal to be BlueprintPure.

  • Component attachment is now replicated correctly to clients.

  • Console command ServerTravel can now pass parameters to the map.

  • Fixed characters not rotating with a base object that is moving at a very low rotation rate in games with a high frame rate.Quat comparison tolerance was too strict.

  • Fixed Editor crashing due to SetMaterial getting called on a DestructibleComponent during the construction script.

  • Fixed crash exiting Play in Editor if you had travelled to or restarted the level being edited during the PIE session.

  • Fixed crash when the component specified as the player's audio listener component has been destroyed.

  • Fixed Sound Mix failing to be pushed if it had been popped in the same frame.

  • Fixed using the PIE prefixed map name when trying to seamless travel in multiplayer PIE.

  • Fixed a crash which occurred on PIE exit after enabling Show Collision in game.

  • Fixed an issue with feature packs registering for super search which could result in multiple registrations which then caused an assert.

  • Fixed camera jumping when trying to interpolate back to original view target.(Contributed by ArCorvus, pull request 1215.)

  • Fixed CameraModifier blending issue that occurred with blends longer than 1 second.

  • Fixed Character::CanJump() event no longer showing up as overridable in the BP event menu.

  • Fixed crash when adding an instanced component with a native sub-component to an actor with a blueprint created root component.

  • Fixed crash when loading a map that was saved with a WorldSettings object of a class that no longer exists.

  • Fixed crash when overlap events (triggered by toggling bGenerateOverlaps or changing collision setting) destroy components or cause other overlaps to end.

  • Fixed issue where a Matinee event which stops the Matinee sequence could cause a crash when updating subsequent tracks.

  • Fixed issue where EndAbility was not reentrant-safe due to EndAbility being called again from inside of the call to K2_OnEndAbility.

  • Fixed issue with camera shake oscillations not working in non-local play spaces.

  • Fixed GameMode potentially outputting misleading log message with incorrect class name.(Contributed by slonopotamus, pull request 1319.)

  • Fixed Navigation Mesh not getting created correctly for a ProceduralMeshComponent's mesh due to not having its bounds updated.

  • Fixed NavWalking movement mode replicating to network proxies as Custom movement.

  • Fixed one shot reverse behavior in interp to component.

  • Fixed physics volume change notifications not working for the first change in physics volume.

  • GameplayEffects now have a higher granularity on the client prediction of time remaining on active effects.

  • Improved comments on actor set location/rotation/transform functions, especially regarding bSweep and bTeleport.

  • Interpolate simulated position faster when network character proxy is coming to a stop.Reduces visual overshoot past end location.

  • Keys bound via key or action events will now count as having consumed the event even if there wasn't a pressed or released event this frame preventing axes using that key in lower priority input components from being active on other frame.

  • Made UCharacterMovementComponent::GroundMovementMode private, and provided Get/Set methods.

    • Enforces that GroundMovementMode is only ever Walking or NavWalking.

    • Set method will switch movement modes if currently a different ground walking mode.

    • Cleaned up constants in Pack/UnpackNetworkMovementMode() and made sure we only have a valid ground mode (Walking or NavWalking).

  • Made it clear that MoveIgnoreActors does not apply to movement from physics simulation.

  • Made some useful CameraShake instance variables public and BP-accessible.Also Added UCameraAnimInst::SetScale().

  • Make sure client and server perform movement with the same acceleration value after network rounding.Reduces accumulated client position error.

  • Marked bTeleport' flag as Advanced for blueprints wherever we do so for the bSweep flag.

  • Negative values are no longer allowed in the editor for CapsuleComponent radius or half-height.

  • Pawns whose Tick functions have bStartWithTickEnabled set to false will no longer start ticking when possessed.

  • Performance:Controller::SetControlRotation() now avoids doing work if nothing changes.

  • PlayerCameraManager crashing on empty entries in DefaultModifiers array.

  • PlayerController uses a reliable RPC to request that the pawn gets resent from the server if it has not yet replicated.Previously this was an unreliable call so it didn't always work.

  • Revised comment on interp to component bPauseOnImpact to better reflect functionality.

  • SceneComponent AttachChildren array is now replicated so that it is consistent with AttachParents.

  • SetCullDistance on UPrimitiveComponent now accepts 0 as a legal distance.A distance of 0 means the primitive is not culled at any distance.

  • The data for automated line test was incorrect causing false failures.

  • Timeline components will no longer execute their tick function when not active.

  • We no longer ignore hit testing in APlayerController::GetHitResultAtScreenPosition if the mouse isn't directly over the viewport.That function can be used regardless of the state of the mouse, so that logic has been moved elsewhere.

  • When transitioning levels EndPlay will no longer attempt to be executed for an Actor that was destroyed by another Actor's EndPlay call.

  • You can now set the GameMode HUD class to be none.

Learning Resources

Documentation

  • Improved docs for Add Yaw Input and Add Controller Yaw Input etc., to point to the scaling values that are applied.

  • Improved docs on Movement Component and Floating Pawn Movement to indicate that collision is wholly dependent on the Updated Component (normally the root component).

Sample Content

  • Fixed UI icons not being present in sample content.

Localization

  • New:Added game native culture setting to control which culture's localization data the editor loads for game assets.Game assets now display the specified culture's localization data when in the editor.

  • New:Added initial support for working directly with Localization Services in the editor.Allows you to upload and download translations to online services for localization.Allows plugins for specific localization service providers (OneSky, etc).Also created first localization service plugin for OneSky.

  • New:Added the source location information of a localization archive entry as an "extracted comment" in PO files when exporting.

  • New:Culture names now consistently use hyphens rather than underscores.Culture names with underscores are still accepted.

  • New:First pass of the OneSky plugin:Extend Localization Dashboard toolbar with OneSky buttons for "Import all cultures/targets from OneSky" and "Export all cultures/targets to OneSky".

  • New:Fixed live culture swapping when in certain configurations such as shipping.Enabled use of "-culture=" switch on command-line in all configurations.

  • New:Foreign archives now generate entries for the native translation of the native source as though it were the native source - the result is that the native translation will also be translated in the foreign culture.Localization resources now use the native translation of the native source as though it were the native source, specifically when looking up the foreign translation to use from archives - the result is that the native source will use the foreign translation of its native translation.

  • Fixed broken legacy support for SourceFileSearchFilters setting in GatherTextFromSource steps in localization configuration scripts.

  • Fixed dashboard handling of paths rooted in drives other than the current drive of the editor.

  • Fixed issues selecting language and region combinations for Chinese and Portuguese in the Region & Language page of the Editor Preferences.

  • Fixed non-functional PO import/export buttons from the translation editor.

  • Localization commandlet JSON file writing no longer fails if source control is enabled but the files don't already exist on disk.

  • Localization dashboard now appropriately adds the native culture setting to generated localization configuration scripts.

  • Retrieving localized metadata will prefer local changes to the metadata if they do not match what is expected by localization.

  • The Category Names of Components in blueprints are no longer gathered for localization when the "ShouldGatherEditorOnlyData" setting is false.

  • Updated logic in commandlet for gathering text from assets which