アンリアル エンジン 4.11 がリリースされました!
2016-3-31

アンリアル エンジン 4.11 がリリースされました!

作成 Alexander Paschall

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

Anton Olkhovik (Sektor), Alessandro Osima (AlessandroOsima), Alex Widener, Alexandru Pană (alexpana), Andreas Axelsson (judgeaxl), Andreas Schultes (andreasschultes), Artem (umerov1999), Artem V. Navrotskiy (bozaro), Ben Reeves (BGR360), bensch228, Black Phoenix (PhoenixBlack), Brandon Wamboldt (brandonwamboldt), Cameron Angus (kamrann), Christoph Becher (chbecher) ,Clay Chai (chaiyuntian), Dan Ogles (dogles), David Baack (davidbaack), Don Williamson (dwilliamson), Eli Tayrien (ETayrienHBO), Eren Pinaz (erenpinaz), G4m4, Hannah Gamiel (hgamiel), Hevedy (Hevedy), Hyeon-Cheol Cho (crocuis), Igor Karatayev (yatagarsu25), Jason (Abatron), Jefferson Pinheiro (Ixiguis), kallehamalainen, Kiqras, Konstantin Nosov (gildor2), Leon Rosengarten (lion03), Manny (Manny-MADE), Marat Radchenko (slonopotamus), Markus Breyer (pluranium), marynate, Matthias Huerbe (MatzeOGH), Maxim Pestun (maxpestun), Moritz Wundke (moritz-wundke), Mustafa TOP (MSTF), Nikos Tsatsalmas (ntk4), Pablo Zurita (pzurita), Pavel Dudrenov (dudrenov), Peter Oost (Sirrah), Piotr Bąk (Pierdek), projectgheist, Rama (EverNewJoy), Rene Rivera (grafikrobot), Rob Ray (robdeadtech), Robert Khalikov (nbjk667), sackyhack, sankasan, Sébastien Rombauts (SRombauts), Simon Taylor (simontaylor81), Skylonxe, Spencer Brown (JedTheKrampus), Tam Armstrong (tamarmstrong), Thomas Mayer (tommybear), Thomas McVay (ThomasMcVay), unktomi, Verdoso, ZehM4tt.

新機能

今回のリリースには、新機能とパフォーマンス最適化が数多く含まれています。現在、次作タイトル Paragon の出荷準備段階にあるため、パフォーマンスが極めて重要となりました。4.11 では、オーディオ機能とツールの改善に加えて、キャラクターのリアルなレンダリングに特化したレンダリングとアニメーション機能が新たに追加されています。UE4 の VR は進化し続けています。ゲームを出荷できるように、VR レンダリングを改善し、最新の SDK をサポートしました。

主要機能

パフォーマンスとマルチスレッディング

この数ヶ月間は、次作ゲーム Paragon を PC および PlayStation 4 で動かすために UE4 の最適化に重点的に取り組んできました。

Paragon はチームにとって、ユニークな挑戦の連続でした。Paragon では、長い見通し線の美しい詳細マップを 60fps でレンダリングしながら、10 人のヒーローと 120 超のミニオン (子分) を大量の FX で一度にアニメートする機能をサポートしなければなりませんでした。Paragon はエンジンの限界への挑戦でした。特にアニメーションとレンダリングに力を注ぎました。

image alt text

細かい最適化をエンジン全体で数多く実施することで Paragon のパフォーマンスを大幅に改善しました。UE4 で作成されたすべてのゲームの改善にもつながるでしょう。これらの最適化の多くが 4.11 で実現され、今後のリリースで更に最適化されます。最適化作業の成果を幾つかを紹介します。

Parallelization (並列化): PC やコンソール上での高いフレームレートの実現には今やマルチコア スケーリングが極めて重要となるので、 スレッド アーキテクチャ をいくつかの方法で改善しました。タスク作成の負荷を減らして、優先度の高いタスクへのサポートを追加し、同期ポイントを多数取り除きました。

レンダリング パフォーマンス: GPU でオーバーヘッドを増やさずに最大の並列処理を実現するために、レンダラが GPU に生成された作業者タスクとコマンド バッファのサイズのバランスを保持できるようになりました。レンダラの同期ポイントも取り除いたので、利用可能なコアが使いやすくなりました。

クロス シミュレーション: が劇的に速くなり、マルチスレッディングが使いやすくなりました。アセットごとに APEX ソルバをワーカースレッドから直接呼び出せるようになりました。そのため、スケジューリングが簡単になり、同期ポイントとオーバーヘッドが多数取り除かれました。クロスは、アニメーション後 (ブレンドが必要ない場合) あるいはスケルタル メッシュ コンポーネントのアップデート後にアップデートされるようになりました。

ガーベジ コレクションの高速化: ガーベジ コレクション "クラスタ" がサポートされて、エンジンがオブジェクト群をひとつのユニットとして処理できるようになったので、考慮すべきオブジェクト数が大幅に減りました。今のところ、マテリアルとパーティクル システムのサブオブジェクトのみクラスタ化されます。さらに、マーク フェーズおよび破壊フェーズがさらにキャッシュ コヒーレントになり、処理時間は 9 分の 1 に短縮、到達可能性分析中のメモリ チェーンも少なくなりました。

マルチスレッド アニメーション: アニメーション グラフのアップデートがワーカースレッド上で実行できるようになったので、アニメートされたキャラクター数をコアの数でスケールすることが可能になりました。アップグレード ノートを確認してください。多くのアニメーション関連の API を非推奨とし、ワーカースレッド上で実行できるアニメーション グラフを制限しました。

アニメーション変数へのインスタント アクセス: アニメーション グラフ アップデートに変数アクセスのためのファスト パスが追加されました。ブループリント コードを実行せずに、内部でパラメータを簡単にコピーできるようになりました。メンバ変数、無効の Boolean メンバ変数、ネスティングされた構造体のメンバをコンパイラで、最適化できるようになりました。

加算アニメーションのベイク処理: ベイクした加算アニメーションをオンにするオプションが付きました。 加算アニメーション が約3 倍 の速さになります。加算アニメーションのデルタ ポーズの計算に関わる作業はランタイムではなくクックタイムで処理されます。加算デルタ作成の計算作業のみならず、ランタイム時に必要がなくなったベース アニメーション解凍のメモリ アクセスと割り当ても保存されます。この機能によりクック時間が増加するので、cvar "a.UseBakedAdditiveAnimations" を 1 に設定して有効にする必要があります。今後のバージョンでは、この負荷が発生しないようにして、最適化された状態が永久に保たれるようにエンジンのアニメーション クック処理を改善します。

新規:リアルなヘアシェーディング

映画からの最新の研究にもとづいて リアルなヘアを実現するための物理ベースのシェーディング モデル が追加されました。

image alt text image alt text

2 つのスペキュラ ローブ、トランスミッションとスキャタリングをモデル化します。この機能を使うには、マテリアル エディタのシェーディング モデル リストから [Hair] を選択します。

新規:リアルなアイシェーディング

アンリアル エンジンの新な物理ベースである目のシェーディング モデルを使えば、キャラクターの 目をかなりリアルに 作成することができます。

image alt text

シェーディング モデルにより、強膜のサブサーフェス スキャタリング、虹彩上のコースティクス、濡れたレイヤー上のスペキュラが近似されます。提供されている目のマテリアルおよび眼球のジオメトリと一緒に使用します。角膜での屈折、瞳の外側の境界線の暗化、瞳の拡張制御も追加されています。

新規:スキンシェーディングの改善点

 リアルな皮膚を作るためのシェーディング モデルであるサブサーフェス スキャタリング プロファイルの クオリティとパフォーマンス が改善されました。

image alt text

アップデートされたシェーディング モデルはこれまでの半分の解像度、必要な GPU メモリも減りました。スキャタリングは独立した解像度となり、オブジェクトのエッジでのカラー シフトがなくなりました。ひとつのピクセルに両方パックするのではなく、基盤の目状で別々にディフューズとスペキュラ ライティングを保存することで、テクスチャとライティングの詳細が保存されやすくなりました。

新規:リアルなクロスシェーディング

 クロスを作るためのシェーディング モデルが追加されました。不明瞭なレイヤーをシミュレートし、これまでよりもリアルなクロスの生成が可能になりました。この機能は、マテリアル エディタで [Cloth shading model] を選択します。

image alt text

新規:カプセル シャドウ

アンリアル エンジンは、キャラクターの カプセル表現 による 非常にソフトな間接シャドウ キャストをサポートするようになりました。

image alt text

間接的に照らされている場合、スクリーン空間アンビエント オクルージョンの場合を除き、通常はシャドウは付きません。間接的なシャドウイングは非常にソフトにする必要があります。間接的なライティングは多方向から入ってくるので、通常のシャドウ マップではうまくいきません。間接的なシャドウ方向とソフトさは、ライティング ビルド中に Lightmass によって配置および計算された Folume Lighting Samples によるものです。

ゲームでは、間接的なカプセル シャドウがキャラクターを背景に配置します。

image alt text

直接シャドウにもカプセルを使うことができます。ライトのソース半径またはソース アングルは、ソフトさによって決まります。効率的にベイクされたライティング背景の中での非常にソフトなキャラクター シャドウの作成が、今回初めて可能になりました。

image alt text

このカプセル シャドウの実装は非常に効率的です。深度を意識したアップサンプルを使って半分の解像度でシャドウイングを計算し、スクリーン タイル カリングを使ってシャドウイング作業を必要な場所のみに制限します。

GPU 負荷は、カプセル数およびキャストされたシャドウが影響するピクセル数に比例します。

カプセル シャドウを有効にする方法

  1. カプセルのみを使って、物理アセットを新規作成します。球体でもできますが、柔軟性が欠けます。カプセルはジョイントでわずかにオーバーラップします。足のカプセルは、キャラクターが地上にいるように見せる調整のために、もっとも重要です。腕は、地面を覆ったり這ったりする以外は、あまり必要ありません。
  2. 物理アセットをスケルタル メッシュ アセットの Shadow Physics アセットに割り当てます。
  3. 最後に、スケルタル メッシュ コンポーネントでカプセルの直接シャドウを有効にします。

新規:パーティクルの DOF (被写界深度)

新しいマテリアル関数で焦点ずれしている小さなパーティクルを拡大して、不透明なパーティクルと同じ方法の  DOF レンダリングが可能になりました。

image alt text

左の画像は、パーティクルが数多くグラウンドに配置されているシンプルなシーンです。右の画像では、Circle DOF が有効にされており、この新しいマテリアル関数がパーティクルをその他のすべてのジオメトリのようにぼかしてレンダリングします。ノイズ アーティファクトが発生しないので、クオリティはむしろ良くなります。ぼかしたパーティクルは常に 1 ピクセル分拡大して、ちらつきを避けます。

この機能は、パーティクル マテリアルで変更する必要があります。

image alt text

新規:Dithered Opacity Mask (ディザ処理したオパシティ マスク)

Dithered Opacity Mask を使って、不透明なマテリアルを使った 透過サーフェスのエミュレーション ができます。

image alt text

マテリアル エディタの [Dithered Opacity Mask] チェックボックスは、テンポラル アンチエイリアシングが有効の場合、順番に依存しない透過性のストキャスティック フォームを提供します。テンポラル AA は、フォアグラウンド オブジェクトをバックグラウンドとブレンドするために利用します。これにより、半透明のオブジェクトですべてのディファード シェーディング機能をノイズとゴーストの負荷がほとんどなく使用できます。

新規:Dithered LOD Crossfades (ディザ処理した LOD クロスフェード)

アニメートされたディザ パターンを使って、スタティックメッシュが LOD 間をスムーズにクロスフェード できるようになりました。

image alt text

注意:この機能は有効化してもパフォーマンス負荷は低いので、マテリアル上で有効にしておかなければなりません。

image alt text

新規:階層 LOD の改善点

今回のリリースでは 階層的な Level-of-Detail (HLOD) システムが 大幅に改善されました 。階層的な LOD により、遠くにある大量の細かいメッシュをシンプルなメッシュ数個に自動的に置き換えることができます。これにより、至近距離のオブジェクトが極めて高品質に見せることができ、レベル全体のパフォーマンスも速くなります。

image alt text

Paragon の Agora -- トライアングル数 2,560,000 個、ドローコール数 5690 (それぞれ 3,940,000 個と 7060 から削減)

HLOD を最も効率よく使うためには、Simplygon SDK が必要です (Simplygon のライセンスが必要です)。Simplygon は、少ないポリゴンでプロキシ メッシュを生成するために必要です。これがないと、異なるマテリアルを使うセクションを、ひとつのドローコールへ焼き付けてまとめるだけの処理になります。

新機能の Hierarchical LOD Outliner には新しい設定がたくさんあります。レベルの HLOD の設定に役立ちますので、こちらも確認してみてください。

新規:VR Instanced Stereo Rendering

Instanced Stereo Rendering を使うと、VR ヘッドセットのステレオスコピック画像のレンダリングが効率的に行われる最適化機能です。

これまでは、左目に対してすべてを描画したら右目に対してすべてを描画するという方法でステレオスコピック画像をレンダリングしてました。これに対して Instanced Stereo Rendering は、両目を同時にレンダリングするので、CPU 処理が大幅に減り、GPU 効率が改善されます。では 2 つの技術を比較してみましょう。

image alt text

Bullet Train をテスト用コンテンツに使ってみると、何も手を加えていないのに、CPU 時間は約 14 %、GPU は約 7 %の改善が確認されました。ほとんどのレンダリング機能は Stereo Instancing と一緒に使えますが、まだサポートされていない機能もたくさんあります (DFAO など)。

プロジェクトでこの機能を有効にするには、エディタの [Project Settings (プロジェクト設定)] の [Instanced Stereo] のボックスにチェックを入れます。

image alt text

新規:Anim Dynamics (キャラクタ用の高速物理シミュレーション)

Anim Dynamics は、アニメーション ブループリント用の最新の 独立した  シンプルな物理シミュレーション で、全部の物理ソリューションを使わずに、動的なモーションをプロシージャルにスケルタルメッシュに追加することができます。

image alt text

Anim Dynamics の主要機能の概要です。

  • 剛体の簡易シミュレーション
    • アニメーション評価ステップで実行します。
    • アニメーションに反応するため、コンポーネント空間で実行します。
    • 高速シミュレーションなのでコリジョンは使えません。
    • イナーシャの計算には、ボックスのみサポートしています。
  • 剛体コンストレイント
    • Angular - 3 本目の軸をロックして 2 本の軸に制約をかけます。剛体は自由な 2 本の軸の周りを所定の角度範囲で回転できます。Prismatic と Planar コンストレイントと一緒に機能します。
    • Cone - コンストレイントの指定角度内に剛体を維持する自由回転のコンストレイントです。Prismatic と Planar コンストレイントと一緒に機能しますが、Angluar が選択されていると Angular に変わります。
    • Prismatic - 3 本の軸の線形コンストレイントで、指定された制限内で 3 本すべての主軸と平行に移動ができます。
    • Planar - 剛体が交わることができない無限に広がる平面のリストです。グラウンド平面として使用してオブジェクトをぶらさげたり、オブジェクトがキャラクターを突き抜かないようにするために使用します。各平面は、ワールド空間に配置するか、キャラクター上のボーンから操作されるトランスフォームを持つことができます。
  • チェーン
    • 各ノードは、ひとつの動的ボーンか、同類のコンストレイント データを共有する動的ボーンの連続的なチェーンのいずれかを表します。沢山のボディを結合した場合、そのシミュレーションを行うとビヘイビアのリアルさが増します。
    • ノードがひとつの場合は力はチェーンの一方向だけ伝え、絶対に戻しません。チェーン モードを使えば力が双方向に伝わるのでチェーンが良くなります。
  • スプリング ターゲット
    • 線形および傾斜ばね作用は、ばねのようなエフェクトを出すために使います。独立した設定が可能で、異なるスプリング定数を付けることができます。
  • 風作用
    • Anim Dynamics は、APEX クロス オブジェクトに影響を与えるのと同じ風を起こすアクタと使用できます。ノードごとの切り替えが可能で、スケーリングすることで風の完璧に反応させることができます。
  • 補正サブステップ機能
    • シミュレーションは、物理プロジェクト設定にもとづいた法線ティック設定による実行、あるいは適応設定による実行が可能です。
    • シミュレーションはノードごとに設定できるので、あるノードで収束のシミュレーション用にイタレーションがさらに必要であれば、他のシミュレーションに影響を与えずに必要なだけ増やすことができます。
    • このモードでは、シミュレーションを実際に実行する時間とは別に、チックするゲームの総合時間をトラックします。開始が遅れれば、時間の負債を維持してシミュレーションを複数回実行します。問題のスパイラル化を止めるために使われますが、複雑なシミュレーションに安定性を追加することができます。
  • ビジュアライゼーション
    • ノード上で、様々なものを視覚化するオプションを選択することができます。以下のビジュアライザーが利用できます。
      • Angular limits

      • Prismatic limits

      • Planar limits

      • Planar exclusion methods (平面制限のある球体コリジョン)

新規:ゲームプレイからのアニメーションのライブ録画

 ライブ ゲームプレイ  にスケルタルメッシュの アニメーションを記録  し、Anim Sequence アセットとして保存できるようになりました。

image alt text

エンジン内で使用したり、FBX としてエクスポートしてサードパーティ ツール内で使用することができます。ライブでもリプレイ中でも、アクティブになっているゲームシナリオにはすべて機能します。

使用方法:

  • アニメーションを記録するためには、コンソールを開いて  RecordAnimation MyActorClass_05 /Content/Foo/RecordedAnimation と打ち込みます。
  • 記録を停止するためには、StopRecordingAnimation MyActorClass_05 or StopRecordingAnimation all と打ち込みます。
  • 無効なアセット パスを省略あるいは提供すると、選択した場所にピッカー ポップアップが表示されます。ワールド アウトライナーでアクタ名の検索ができます (アクタ名にカーソルを乗せると "ID Name" が確認できます)。

新規:DOF のクオリティがアップ

パフォーマンス コストは変えずにノイズを減らして品質を高めるために、DOF のサンプリング回数 ("Circle DoF") を増やすことができるようになりました。

image alt text

新規:プラットフォームと SDK のアップデート

通常のアップデートと合わせて、各種 VR プラットフォームの起動ウィンドウでのタイトル シッピングに備えて最新の SDK を使うためにすべての主要な VR プラットフォームもアップデートしました。今回のアップデートは安定性と仕上げに重点を置きました。UE4 4.11 で作成したタイトルは VR 出荷ができる状態のはずです!

image alt text

今回のリリースのプラットフォームのハイライトは以下のとおりです。

  • アンリアル エンジン 4.11.1 ホットフィックスで Oculus Rift 1.3.0 SDK が間もなく登場。(アンリアル エンジン 4.11.0 では Oculus Rift SDK 0.8.0 ベータでした)
  • Oculus Mobile SDK 1.01
  • Playstation VR SDK 3
  • SteamVR 0.9.12
  • PS4 SDK 3.008.201 (w/ PSVR)
  • Xbox One XDK November QFE 1
  • HTML5 SDK (Emscripten) 1.35.0
  • Linux Clang 3.7.0
  • Apple tvOS 9.0 サポート (GitHub のみ)

新規:DirectX 12 の改善点

image alt text

レンダリング コマンドを生成しながら CPU をさらに賢く使うために、Microsoft からアンリアル エンジンの DirectX 12 へのアップデートを統合しました。複数のルート署名へのサポート、デフォルトでアシンメトリなパイプライン ステート ディスク キャッシュを有効にしたり、メモリ フットプリントや修理したリークの削減、リソース トランジションの最適化、メモリ割り当ての高速化、アイドル GPU 時間中に作業をフラッシュすることで GPU 不足を制限などを改善しました。

Xbox One 向け DirectX 12

Microsoft が実験的に Xbox Oneの DirectX 12 にサポートを追加しました。

この機能を有効にするためには以下のステップが必要です。

  • XboxOneRuntimeSettings section of BaseEngine.ini で bBuildForD3D12 を true に設定します。
  • XboxOneShaderCompiler.cpp で D3D12_ROOT_SIGNATURE を 1 に設定します。
  • PostProcessSelectionOutline.usf での GetSamplePosition 使用に関するコメントを除外しました (Xbox One ではまだサポートされていません)
  • 再ビルドして再起動します!

体験版なので、この機能を有効にするtレンダリングあるいは安定性に問題が発生する可能性があります。

新規:Mac OS X 上でのメタル レンダリング

メタルは Mac OS X El Capitan 上でデフォルトのグラフィック API になりました!

image alt text

エピックは Apple、AMD、Nvidia、Intel と密接に連携して Mac のメタルを統合し、4.11 では OpenGL を OS X El Capitan 用主要グラフィックス API に置き換えました。4.11 では、Metal と OpenGL 全体に同じレンダリング機能がデフォルトで提供されています。Metal は、ストリームライン、プリコンパイルされたシェーダー付きで小さいオーバーヘッドの API、効率のよいマルチスレッド サポートで GPU の処理パワーを最大にします。今後も引き続き、Mac Metal のサポートを拡張させます。エンジンの将来のバージョンでこの新しい API 機能を活用する方法を模索します。

Shader Model 5 機能で実験的にメタルもサポートしました。"-metalsm5" コマンドライン スイッチを使って試してみてください。

新規:ライティング ビルドの高速化 (Intel Embree をサポート)

 Intel's Embree ray tracing library を Lightmass に統合しました。それにより、ライティング ビルドが大幅に改善されました。

ライティング ビルドは、ライトの跳ね返り方を計算するために光線をトレースに大半の時間を割きます。テストケースとして、Embree を使うと "Sun Temple" のレベル ライティング速度が 2.4 倍  になりました (45 秒から 18 秒)。Indirect Lighting Quality を 4 に設定すると、結果は一目瞭然です。

新規:Lightmass ポータル

ポータル アクタを隙間に設定することで、屋内でのスカイライトのクオリティが格段に良くなりました。

image alt text

ポータルは Lightmass に入射光を探す場所を伝えるたけで、ポータル自体が実際に光を放出しているわけではありません。最終的なライティングに重要な小さな隙間を覆う場合にポータルはもってこいです。Lightmass は入射光に向かう光線の焦点を合わせることができるので、質の高いライトとシャドウを生成することができます。(下図 :ポータルなし。 :ポータルあり。)

image alt text

Lightmass のクオリティはその他の点でも改善されました。

  • ポイン ライト/スポットライト/ 指向性ライトで光が漏れるアーティファクトとを修正しました。
  • スカイライトの直接ライティングが改善されました。

新規:メッシュからのコピーによるアニメーション ポージング

アニメーション グラフ内のスケルタル メッシュ間のポーズをコピーする Animation ノードが追加されました。ソース アニメーションと新規アニメーションのブレンドが可能になるので、Master Pose コンポーネントの改善版といえます。

image alt text

上のサンプルでは、装甲手袋は ソース メッシュの女性キャラクターから手と腕をコピーするために Anim ブループリント内の Copy Mesh Pose を使用しています。同時に、装甲手袋のスパイクは独立してアニメートします。

image alt text

ソースメッシュが別のメッシュ コンポーネントからポーズをコピーするように設定にします。ボーン名が一致する部分のみトランスフォームをコピーします。ノードからポーズを取得してしまえば、他のアニメーションとブレンドすることができます。

ソース メッシュはターゲットより前にアニメートしておかなければなりません。ターゲットがソースにアタッチされている場合は自動的にアニメートします。また、ジョイント名は一致していなければなりません。ボーン トランスフォームは物理シミュレーション より前に コピーされることにも注目してください。つまり、物理の実行 後に ターゲット メッシュがアニメートするのは問題ありませんが、ソースメッシュがシミュレートしても機能しないということです。

新規:LOD Bone Reduction ツール

スケルタルメッシュの LOD から  ボーンを削除  できるようになりました。スケルタルのウェイト付けは自動的にアップデートされます。ゲームのキャラクター アニメーションのパフォーマンスを上げる最も簡単な方法です。

image alt text

LOD のボーンを無効にするには、 スケルトンツリーの右クリック メニューに追加された [Remove Children] オプションを使います。

image alt text

今までこの機能は、メッシュ削減ツールとしっかり結合していました。削除したいボーン LOD を表示して、そこでジョイント (子も含めて) を選択して削除するだけになりました。現在の LOD のみ、あるいは下層 LOD すべてを含めて削除することもできます。

削除されたボーンはグレーアウトになり、現在の LOD ではスキンされないことを示します。ペルソナの LOD プレビュー モードも無効になるとボーン名をグレーアウト表示にします。

最後に、表示されるボーンをフィルタリングするために、スケルトンツリー ツールバーに"LOD Bones" 表示オプション ドロップダウンが加わりました。

image alt text

新規:パーティクル カットアウト (フリップブック パーティクルの高速レンダリング)

パーティクル カットアウトにより、フリップブック パーティクルのレンダリング速度が 3 倍になりました!

フリップブック アニメーション (Sub-UV Animation モジュール) を使ったパーティクルには、ピクセル シェーダーが実行される領域に無駄なオーバードローが大量に含まれる傾向がありますが、最終的なオパシティはゼロでした。例として、以下のテクスチャは大部分が透明なピクセルで構成されています。

image alt text

アニメーションのどのフレームがプレイされているかに関係なくフルクワッドを使わなくても、表示されない領域を除外しながら、かなりしっかり結合したジオメトリを使ってパーティクルをレンダリングできるようになりました。

image alt text

設定

マテリアル グラフではどんなロジックでもパーティクルのオパシティが (テクスチャからでなくても) 作成できてしまうので、エンジンのデフォルトではパーティクル カットアウトは使用できません。アーティストはパーティクル カットアウトを設定して、使用に対するオプトインをする必要があります。

  1. フリップブック テクスチャから新たに 'SubUV Animation' アセットを作成します (コンテンツ ブラウザのテクスチャを右クリックします)。

image alt text

  1. 'SubUV Animation' アセットを開いて、Sub Images プロパティが正しく設定されていることを確認します。この 2 つのステップは、フリップブック テクスチャにつき 1 回行えばよい作業です。

image alt text

  1. カスケードで、SubUV モジュールを見つけて Animation アセットを割り当てます。

image alt text

パフォーマンス結果

image alt text

シェーダーの複雑度のビューモードに、カットアウトを使ったパーティクル システムではオーバードローがかなり少ないことが示されます。カットアウト ジオメトリを使うと、パーティクル システムの GPU 負荷が 2 分の 1 から 3 分の 1 に減ります!

新規:頂点単位の透過ライティング

 新機能の頂点単位で 透過ライティングを設定すると、Lit の透過処理のレンダリングが 格段に速く なります!

image alt text

頂点ごとのライティングを計算する透過ライティング モードが、マテリアル エディタに 2 つ追加されました。

image alt text

  • Per-vertex lighting モードでは、たった半分の数の シェーダー インストラクション とテクスチャ ルックアップしか使いません。
  • "Volumetric PerVertex NonDirectional" 設定は非常に速く、Unlit マテリアルとほぼ同じ速度です。
  • Per-vertex lighting モードをできる限り使用することを推奨します。ライティングは各トライアングルを補間するので、非常に大きなパーティクルやトライアングルは例外です。

新規:ライティング チャネル

ライティング チャネルは、オブジェクトのライティング チャネルがオーバーラップした時に、動的ライトがオブジェクトのみに影響を与えることを可能にします。 ライティング チャネルが 3 つまでサポートされます。

image alt text

Primitive コンポーネントあるいは Light コンポーネントを入れるチャネルを設定することができます。

image alt text

  • シネマティクスにとても便利です。例えば、周辺の背景に影響を与えないキャラクター上にリムライトを使うことができます。
  • Lighting Channel の影響は動的に適用されます。つまり、Static Lights (静的ライト) と一緒には機能しません。Stationary (固定ライト) あるいは Movable lights (可動ライト) を使用する必要があります。また、ライティング チャネルは不透明なマテリアル上の直接ライティングのみに影響を及ぼします。
  • ライティング チャネルを使用した場合、ライト当たりの GPU 負荷は非常に小さいです。

新規:ステレオの空間化

3D 空間化 が、PC、Xbox One、PS4 プラットフォーム上の サウンド アセット で行えるようになりました。ステレオの空間化とは、基本的に各入力ソース チャネル (左右のチャンネル) をモノラル音源であるかのように空間化します。左右のチャネルの位置は、[Sound Attenuation (サウンド減衰)] 設定に追加された 3D Stereo Spread パラメータでオフセットされた音の発生位置によって決定します。

image alt text

3D Stereo Spread パラメータは、左右チャネル間およびリスナーとエミッタ ベクターに垂直なベクターに平行なのゲーム単位の距離を定義します。つまり、stereo channel spread パラメータはワールド座標内にあって、リスナーが音源から遠ざかるほど、(左右のチャネルがまとまる) モノ ポイント ソースへ自然に消えていきます。

image alt text

新規:サウンド フォーカス

サウンド デザイナーがリスナーに関係するサウンドの方向に基づいて自動的に各種パラメータを制御できるようにする新機能 サウンド フォーカスが Sound Attenuation settings アセットによりサポートされました。

以下のダイアグラムを使って方位角設定を説明します。

image alt text

サウンド デザイナーは、音のフォーカスを合わせるタイミングを定義する方位角度を指定します。これらの方位角間で、サウンドの相対位置を補間することで領域間をブレンドします。新しい設定は、Sound Attenuation Settings UStruct で指定します。

image alt text

フォーカスの調整値を使ってサウンドを修正するには、Distance Scaling (距離のスケール)、Volume Scaling (ボリュームのスケール)、Priority Scaling (優先度のスケール) の 3 通りの方法があります。Distance Scaling は、そのサウンドの明確な距離をスケールして、ブーム マイクロフォンまたはズーム マイクロフォンのフォーカス状態を調整する場合に便利です。Volume Scaling は、可視性に基づいてサウンドに減衰を追加していく方法です。Priority Scaling は、同時並行性のためにサウンドの優先順位を下げる (あるいは上げる) 場合に使います。

新規:サウンド オクルージョン

シンプルなレイキャスト ベースのサウンド オクルージョンがサポートされました。サウンド上で有効なオクルージョン計算を使うためには、Sound Attenuation Settings アセット内を以下の画像のように指定します。

image alt text

Sound Attenuation オブジェクトのオクルージョンが有効にされている場合、そのオブジェクトでプレイしているサウンドはコリジョン ジオメトリに対してレイキャストを実行してサウンドがオクルードされているかどうかを判断します。サウンドをオクルードすると判断した場合、ロー パス フィルタ Frequency 値とボリューム減衰を適用します。オクルージョン システムはバイナリ レイキャストに基づくので、オクルードされる frequency 値とオクルードされていない frequency 値で補間するオクルージョン補間時間がオプションで提供されます。オプションのチェックボックスを使って、複雑なジオメトリに対するコリジョン チェックを有効にします。

新規:Sound Concurrency (サウンドの並列処理)

並列データをサウンド インスタンスから削除して、それを独自のアセット内に配置する並列処理システムが加わりました。コンテンツ ブラウザの [New Asset] メニューから [Sound Concurrency] を選択して使用します。

この新しい Sound Concurrency オブジェクトにより、これまでの Max Count と Resolution Rule に加えて、並列処理に関係する以下のオプション機能が追加されました。

Limit To Owner

その並列処理でプレイされるサウンドは、サウンドのオーナー主体で並列処理が行われていることを示すためのボックスです。サウンドにオーナーがない場合は (アクタ上もしくはオーディオ コンポーネント経由でのプレイではない場合など)、チェックが入っていないものとして並列処理が行われます。並列処理をアクタごとに制限するための機能です。

Volume Scale

ボリュームを管理するためにサウンドを並列処理グループに分類する機能です。並列処理グループ内の複数のサウンドが同時にプレイされると、古いサウンドほど静かになります。この機能には、以下の方程式がサウンドのボリューム スケールに使われています。

VolumeScale = VolumeScaleSettingNewerSoundCount

 VolumeScaleSetting はユーザー設定値、 NewerSoundCount はその後に開始された並列処理グループ内で現在プレイ中のサウンド数です。例えば、サウンド A、B、C が同じ並列処理グループにあって、VolumeScaleSetting  が 0.9 の高速連続プレイの場合、以下のように調整されます。

A の VolumeScale = (0.9)2 = 0.81

B の VolumeScale = (0.9)1 = 0.9

C の VolumeScale = (0.9)0 = 1.0

言い換えると、直近のサウンドはそのまま変えずに、古いサウンドを避けることでボリュームが急激に減衰します。つまり、同じグループのサウンドを自動的に避ける効率的なシステムなのです。

新たな解像度ルール:Stop Lowest Priority と Stop Quietest

新しい並列処理オブジェクトにより 2 つの解像度ルールである Stop Lowest Priority と Stop Quietest が実装されました。

Stop Lowest Priority ルールでは、USoundBase オブジェクト (SoundCue、SoundWave など) に設定した優先値が使用されます。並列処理グループの制限に達すると、システムはグループ内のすべてのアクティブなサウンドを実行し、優先度が一番低いサウンドを停止します (優先度が一番低い場合は新しいサウンドをプレイしません)。

Stop Quietest ルールは名前の通り、距離に応じて停止するのではなく (ボリュームに正比例する場合が多いですがそうでないこともある)、グループで一番静かなサウンドを停止する、あるいは新規サウンドが一番静かな場合はそのサウンドはプレイしません。最も静かなサウンドとは、サウンドのすべてのゲイン ステージを評価した結果、ボリューム スケールが最小のサウンドです。

Sound Concurrency オブジェクトのサウンドへの適用

Sound Concurrency オブジェクトは、Sound Attenuation Setting オブジェクトと全く同じ方法でサウンドコールまたはサウンドオブジェクトのどれかに指定すれば使用できます。以下は Sound Wave アセットの詳細パネルです。

image alt text

黄色枠で囲まれたセクションで、アセット リファレンスを新しい Sound Concurrency アセットに指定することができます。

Sound Concurrency のオーバーライド

後方互換性の場合も、古いビヘイビアを好む場合も、Concurrency stetting オブジェクトをアセット上のローカルデータでオーバーライドする選択ができます。この場合、サウンド アセットは独自の並列処理グループとなり、アセット インスタンスで制限された並列処理の古いビヘイビアが実行されます。4.11 に変換された古いプロジェクトは、サウンド アセットをオーバーライドする設定に自動的になります。

新規:マーカーベースのアニメーション同期

image alt text

アニメーション データで マーカー を使ったアニメーションの 同期 が可能になりました。前回のリリースでは、2 つのアニメーションの唯一の同期方法は時間に基づく方法のみで、アニメーションのスケールは長さ調整のためだけでした。通知トラックを右クリックして、[Add Notify (通知を追加)] -> [New Sync Marker (新規同期マーカー)] を選択してマーカーを追加します。

初回リリースの機能群は以下の通りです。

  • 同じ SyncGroup 内のアニメーションのみ同期します。同じ同期グループ内でリーダーがフォロワーの位置を操作します。
  • プレイレートは常にマスター アニメーションのレートを使うので、調整しません。
  • グループ内のすべてのアニメーションに共通するマーカーのみ同期します。例えば、アニメーションに 'Right Foot Down' マーカーがなければ、そのフレーム位置の決定時にこれらのマーカーはすべてのアニメーションで無視されます。
  • 位置は、共通マーカーのリーダーの相対位置に基づいて同期します。例えば、リーダーが左右のフットマーカーの間の 25% の場所にいたら、フォロワーはそれぞれの左右のマーカーの間の 25% に同期されます。
  • マーカーベースの同期は、同期グループのアニメーションに一致するマーカーが十分ある場合に使います。それ以外の場合は、元のスケールの長さに同期したビヘイビアが使用されます。
  • モンタージュもブレンドしながらのマーカーベース同期をサポートしているので、別のアニメーションからスムーズに遷移することができます。モンタージュで Sync Group 設定が行えます。

新規:アニメーション モンタージュのカーブ ブレンド

モンタージュ で カーブ ブレンドがサポートされます。モンタージュの Blend In / Blend Out オプションで、モンタージュのプレイのブレンド方法を制御します。別のモンタージュがプレイされると、その Blend In 設定が使用されることに留意してください。

image alt text

新規:階層 LOD アウトライナー

新しい Hierarchical LOD Outliner 機能は、メッシュ アクタのクラスタ化を可視化し、さまざまな HLOD 設定と生成プロセスの編集を可能にします。

image alt text

マテリアル生成

頂点単位のカラー、頂点位置、頂点法線など、マテリアルの合成プロセスのサポート対象となるマテリアル プロパティが増えました。ワールド スペース テクスチャリング、サーフェス法線にもとづく雪やコケのブレンド処理、頂点カラーでのマテリアル レイヤーのマスク処理などの技術が HLOD で正しく機能するようになりました。

機能の中には、Per-pixel normals (ピクセル単位の法線) や World-to-Tangent transform (ワールドからタンジェントへのトランスフォーム) はまだサポートしていないものがあります。そのような場合、あるいは HLOD に違うマテリアルまたは単純化したマテリアルを使用したい場合は、 Material Proxy Replace ノードを使用することができます。このノードの機能は Lightmass Replace とよく似ており、"real-time" 入力はランタイム時、“material proxy” 入力は生成プロセス中のみ使用されます。

マテリアル合成プロセスの設定は、 [World Settings (ワールド設定)] パネルの他、 [HLOD Outliner] パネルでも行うことができます。

プロキシ メッシュ生成

プロキシ メッシュ生成が簡素化されて、最近統合された Simplygon SDK の目玉であるメッシュ生成プロセスが [HLOD Outliner] パネルからも行えるようになります。

その他の改善点

  • スプライン メッシュが HLOD システムでサポートされます。
  • プロキシ メッシュ / クラスタは、可視 (サブ) レベルでのみ表示、生成、ビルドされます。
  • エミッシブ カラーはマテリアル合成プロセスでサポートされます。
  • 不透明なマテリアルのスタティックメッシュはマテリアル合成プロセスでサポートされます。

新規:複雑なテキストのレンダリング (実験的)

複雑な形状のテキスト (アラビア語など) を含めて、 右から左 と 双方向のテキスト のサポートをスレートに追加する作業をしています。

image alt text

この機能はかなり初期段階です。今回のリリースではエッジ周辺がかなり粗い仕上がりとなっていますが、確認してフィードバックして頂けると助かります。

周知の問題

  • シングルライン編集用テキストブロックは、現在、複雑なテキストでは機能しません (マルチライン編集用テキスト、静的プレーン / リッチ テキストのみ)。
  • Text Actors や Canvas はサポートされません。
  • 複雑なテキストのレンダリングは、現在 Windows、Mac、PS4 builds のみで可能です。

新規:ブループリントの詳細検索

ブループリントの検索ツールがアップデートされ、(精度のよい検索結果につながる) 詳細な検索機能が追加されました。

image alt text

  • ノード、ピン、グラフ、関数、マクロ、変数、プロパティ、コンポーネントなど特別なエレメントを検索対象にすることができます。詳細はこちら https://docs.unrealengine.com/latest/INT/Engine/Blueprints/Search/index.html をご覧ください。
  • (syntax:Tag=Value を使用した) Tag/Value matching に加えて、And (&&) と Or (||) ロジック演算がサポートされます。
  • 新しいこの検索機能は、変数の [Find References (リファレンスを検索)] オプションを使うと、さらに精度が高まります。

新規:VR ヘッドマウント ディスプレイ カメラの改善点

ヘッドマウント ディスプレイ用のカメラ システムがリファクタリングされ、より多用途に、さらに使いやすくなりました。エンジンでアクティブなカメラ コンポーネントが、現実世界でヘッドセットを基点からオフセットするのと同じ方法でオフセットされるようにしました。つまり、ワールドでの VR ヘッドセットの位置を計算し、メッシュやその他のオブジェクトを直接そこにアタッチし、VR ゲームの制御スキームを簡素化することが簡単に行えます。

 

さらに、カメラ コンポーネントにアタッチされたものはすべて「アップデートが遅く」なります。つまり、レイテンシーを下げるために、レンダリングには可能な限り最新の位置データが使われます。カメラにアタッチされたメッシュ、エフェクト、スプライトはそこでしっかり固定されて、ヘッドマウント ディスプレイ自体をアップデートする方法でフレームごとにアップデートされます。

現在のプロジェクトを新規システムで使用する方法については ドキュメントのアップデート をご覧ください!

新規:VR ステレオ レイヤー

ステレオ レイヤーは、VR のコンポジターに直接送られた別のレイヤーのワールド内のどこにでも、テクスチャを使ったクワッド描画を可能にします。より見やすく、歪みの少ない UI を作成することができます。現在、この機能は Oculus Rift ヘッドセットのみに採用されていますが、弊社のプラットフォームにも間もなく搭載される予定です!

新規:シーケンサーの進捗状況 (実験的)

シーケンサーは、新しいノンリニア シネマティクス アニメーション システムです。シーケンサーはまだまだ開発段階ですので、制作作業で使うことはお勧めできませんが、試しに使ってフィードバックして頂けると大変うれしいです!今後の UE4 リリースで、シーケンサーに関する情報をもっと提供できると思います。

4.11 でのシーケンサーの注目すべき新機能:

  • 以下のトラックが追加されました:Shot/director、play rate、slomo、fade、material、particle parameter トラック
  • 動画の録画が改善され、EXR レンダリングがサポートされます。
  • キーフレームのコピー / ペースト、マチネからのキーのコピー、サード キーフレーム パス表示などのキーフレーム処理のビヘイビアを改善しました。
  • マスター シーケンス ワークフローを使って、大きなシーケンス内にサブ シーンを持つことができます。
  • "Spawnables" (シネマティクス アセット内に存在するアクタ) がサポートされます。
  • UI の改善点:トラックの色表示、キーフレームの形成 / 色表示、トラックのフィルタリング

シーケンサーを起動するには、[Plugins] パネルを開いて、[Level Sequence Editor] プラグインを有効にしてからエディタを再起動します。

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

AI

  • New: A new EQS scoring function, Square Root, has been added.
  • New: A simple "Current Location" EQS generator has been added to support reasoning about AI's current location.
  • New: Added an EQS test for geometry overlaps.
  • New: Added Blackboard Keys support to EQS' NamedParams.
  • New: EQS tests can now be configured to normalize results against declared ideal value rather than max value.
  • New: Made EnvQuery a blueprint type, which enables storing EQS templates in blueprint classes and AI blackboards.
  • New: Added a silent auto-conversion of Controllers to Pawns when calling blueprint RunEQS function.
    • This is usually the desired behavior. But it can be disabled with AISystem.AllowControllersAsEQSQuerier flag in Project Settings
  • New: The way EQS test scoring gets previewed in EQS editor has been improved towards higher display resolution as well as flexibility for future expansion
  • New: AI debug display for several subsystems has been improved by disabling their scene outline drawing in the editor.
  • New: Added a feature to the BT MoveTo task enabling it to observe and react to changes to an indicated blackboard entry storing move goal location or actor.
  • New: Added ability to specify the number of points generated by the OnCircle generator.
  • New: Added time slicing, logging and additional profiling stats to AISense_Sight to help debug and manage performance cost for AI on servers.
    • Exposed new parameters MaxTimeSlicePerTick (in seconds) and MinQueriesPerTimeSliceCheck AI Perception values.
  • New: Pathfollowing parameters responsible for path's mid-points reachability acceptance have been exposed for configuration via AISystem settings.
  • New: Stopping AIController's logic during pawn's unpossess event has been made optional. Use AIController's StopAILogicOnUnposses property to control this mechanism.
  • Bugfix: The blackboard editor no longer crashes when adding new keys while having a search filter applied to keys list.
  • Bugfix: A crash in garbage collection related to a bug in EQS query template caching in certain use cases has been fixed.
  • Bugfix: Fixed a crash in EQS where wrappers could be garbage-collected during queries.
  • Bugfix: Blueprint-implemented EQS generators no longer crash when trying to add a generated value of a wrong type (vector/actor mismatch).
  • Bugfix: A bug in EQS resulting in FEnvQueryInstance's result never getting set to "failed" has been fixed.
  • Bugfix: AIPerceptionSystem.UnregisterSource no longer crashes when perception agents being unregistered don't use all of the defined senses.
  • Bugfix: The AI perception system will no longer allow AIs to bypass visibility-cone checks.
  • Bugfix: AIController.MoveTo will no longer ignore its navigation data's default querying extent.
  • Bugfix: AIController's pawn possession no longer overrides cached GameplayTasksComponent references, which could break AI's gameplay tasks usage.
  • Bugfix: Blueprint interface functions to PawnActions have been fixed to return apropriate values.
  • Bugfix: Fixed AI stimuli never expiring, which resulted in AI never forgetting perceived actors.
  • Bugfix: BTService_BlueprintBase will now correctly trigger "deactivation" events that are implemented in derived blueprint classes, but not the base class.
  • A safety feature has been added to AI's possession logic. AIControllers will no longer try to possess soon-to-be-destroyed pawns.
  • EQS Query instances that run longer than expected will output once to the log, and then once more when the query finishes. The previous behavior was to log repeatedly until the query finished.
  • EQSTestingPawn's ticking has been disabled in game worlds. This can be re-enabled with the bTickDuringGame property.
Behavior Tree
  • New: BTService_RunEQS, a new BT service for regular EQS query execution, has been added.
  • New: Added new property to all EnvQueryTests: TestComment. This property is a simple, optional string used to label the purpose for a test. For now, it only shows up in the details view, but it is still useful for helping to document the reasons for tests, especially when using more than one of the same type.
  • New: Expanded the RunEQSQuery BT task so that users can configure it to use a query template indicated by a key in blackboard.
  • Changed the color of root level decorator nodes in the behavior tree editor to distinguish them from regular decorators.
  • Bugfix: Stopping behavior tree with instantly aborting parallel tasks no longer crashes.
  • Bugfix: Handled an edge case in BT's parallel tasks removal that could result in not cleanly finishing all of tasks, and potentially hanging.
  • Bugfix: Behavior tree focus service reacts to blackboard changes appropriately.
  • Bugfix: Behavior tree's blackboard filters work correctly when a single object uses multiple configurable filters of the same class.
  • Bugfix: BTDecorator_Blackboard now handles user-requested condition inversion properly.
  • Bugfix: Fixed behavior tree decorators not observing in LowerPriority mode when search flow enters and leaves their branch without finding a task to run.
  • Bugfix: Prevented behavior trees from starting new task execution just to be abandoned in next tick due to decorators firing between abort and execute calls.
  • Bugfix: Fixed cleanup of active blueprint actions for blueprint based behavior tree tasks.
  • Bugfix: Fixed missing Tick event in aborting behavior tree tasks from an abandoned subtree.
  • Bugfix: Copy and paste operations in behavior tree's composite decorators subgraphs now work properly.
  • Bugfix: Fixed node memory allocations for injected behavior tree decorators.
  • Bugfix: RotateToFaceBBEntry no longer gets stuck when passed a blackboard key with FRotator value.
  • Bugfix: Fixed order of behavior tree graph nodes when a node is being moved.
  • Bugfix: GameplayDebugger's default settings are now applied properly.
  • Bugfix: Triangulation errors in some convex polygons recorded by visual logger have been fixed.
Navigation
  • New: CompositeNavModifiers have been expanded to support use of convex and sphere physics shapes.
  • New: Enabled custom export of navigable geometry for foliage with InstancedStaticMesh type.
  • Bugfix: Streaming out of a level containing a RecastNavMesh instance no longer crashes the engine.
  • Bugfix: A bug in editor-time navigation system, resulting in removing all the saved data in static navmesh on map load, has been fixed.
  • Bugfix: A memory leak in Recast's heightfield layers building has been fixed.
  • Bugfix: Navigation bounds gathering no longer produces unexpected results while streaming levels with certain streaming setups.
  • Bugfix: NavLinkProxy no longer marks instances containing only smart links as navigation-irrelevant.
  • Bugfix: A missing NavigationSystem notification has been added to let it know about editor-time changes to ActorComponent.CanEverAffectNavigation property. This fixes situations where toggling this flag wouldn't result in rebuilding navmesh.
  • Bugfix: Added a safety feature to address navmesh generation related crashes when BP-implemented actors get their construction script re-run just after navmesh generation finishes.
  • Bugfix: "Navmesh build in progress" editor notifier no longer hangs indefinitely if it's created just after navmesh has finished building.
  • Bugfix: Crowd simulation works properly with auto-possessed pawns placed in a level.
  • Bugfix: Collision data for navigation built from mirrored PxConvexMesh now exports correctly.
  • Bugfix: Fixed geometry projection for navmesh walking mode when a pawn moves far away from the geometry on the Z axis.
  • Bugfix: Corrected HitNormal values reported by navmesh raycasts.
  • Bugfix: Fixed the influence of navmesh edges on crowd simulation near the ends of paths.
  • Bugfix: Navigation export of destructible mesh without collisions enabled now works as expected.
  • Bugfix: Fixed navigation export of NavRelevantComponent attached to an actor not affecting navmesh generation.
  • Bugfix: Navmesh tiles are no longer drawn in red, or not drawn at all, after navmesh generation finishes.
  • Bugfix: Reuse of navigation paths now updates all flags appropriately.
  • Bugfix: Corrected scoring of navmesh boundary segments in detour's crowd simulation.
  • Bugfix: Fixed UNavRelevantComponent not being included in navmesh generation when it's not attached to actor with collision component.
  • Navmesh raycast will use nearest poly containing ray origin instead of just closest one.
  • Added Z check to detour's crowd avoidance segment gathering.
  • RVO avoidance now takes the height of agents into account when culling obstacles.

Animation

  • New: Level-of-Detail Threshold for Animation Graphs
    • Many animation graph nodes now have an LOD Threshold option for performance optimization:
      • Apply Additive

      • Apply Mesh Additive

      • Aim Offset

      • All Skeletal Control nodes

    • Whenever the Skeletal Mesh instance drops below this LOD, the node will not execute.

image alt text

  • New: Per-Animation Compression Settings
    • You can now set animation compression on a per-animation basis.

image alt text

  • Choosing Automatic and then pressing Apply will cause the engine to determine the best setting (based on error metrics) and set that for you.
  • New: Added "Delete All" option to anim curve panel.
  • New: Added a new property called "Min Time Between Ticks" to particle systems. This can be used to force a lower tick rate on a particle system by specifying the minimum number of milliseconds between ticks.
  • New: Added a new role for sync group members: TransitionLeader. It is excluded from the group while it blends in. Once it reaches full weight it becomes leader until it is fully blended out again.
  • New: Added AssetRegistrySearchable tag to AnimSequence's EnableRootMotion property so that it shows in the content browser.
  • New: Added blend profiles to skeleton assets, which allow per-bone multipliers when using blend per bone or other blending nodes.
    • These are accessible from the skeleton tree pane in Persona.

image alt text

  • New: Added DrawCanvas and viewport string support to skeletal controls to enable them to output debug information to the viewport.
    • This feature can be enabled using the Show -> Display -> Skeletal Controls option in Persona's viewport,
  • New: Added a flag to animation evaluator nodes so users can set whether they should loop when being ticked.
    • With the addition of Marker Based sync, evaluator nodes now have the ability to be ticked like sequence players (by adding them to a sync group).
    • By default, the evaluator node's playing direction will be forward or backward based on whether the target time is earlier or later than the current time.
    • With the loop flag enabled the playing direction will be based on whichever direction will reach the target animation time more quickly. For example, going from 4.9 seconds to 0.1 seconds in a 5 second animation will play forward and loop instead of playing backward.
  • New: Added GetCurrentStateName as a blueprint-accessible function on animation instances.
  • New: Added a "Random Player" node for anim graphs. With this node, the user can play a selection of animations in a random order with certain randomized parameters. With Random Player, "Shuffle Mode" acts more like a randomized playlist, in that it will play everything on the list before repeating.
  • New: Added SetMinLOD and SetForcedLOD functions. These enable the user to restrict LODs for the a specific SkeletalMeshComponent.
    • For example, calling SetMinLOD with 1 will mean that the component will not use LOD 0, even if it gets close to the camera, but it can use LODs 1 and higher as it normally would.
    • Similarly, calling SetForcedLOD with 0 will force the component to use only LOD 0 all the time. This can be useful for ensuring that the local player's character is always at maximum quality.
    • If both functions are used, SetForcedLOD will override SetMinLOD.
  • New: Added support to tie update rate optimization directly to LOD level instead of selecting the amount based on screen size.
  • New: Added a "Start Position" to the player node. The Sequence Player and BlendSpace Player both contain the Start Position parameter, which will start the animation at the given position on the first time it plays.
  • New: Added support for space conversion in the copy-bone skeletal controller node.
  • New: Added support to PoseableMeshComponents for the MasterPoseComponent property.
  • New: Added the ability to remap to existing assets when retargeting in Persona.
    • Persona can also attempt to auto fill the correct assets if the source and destination assets use a similar naming scheme.
  • New: Allow users to change animation compression settings per animation in the detail panel.
    • Note that you'll have to click "Apply" to apply to the current compressed data. If not, data will not match the displayed compression setting.
    • Default compression settings are in Project/Animation.
    • An automatic setting exists. This may take a while, as it will try all possible configurations and compare results, but it will find the optimal compression settings.
  • New: Anim Montage now contains FAlphaBlend BlendIn/BlendOut option
    • Supports both preset and custom curve types.
  • New: Blend List node now supports Reset Child On Activation for reinitialization when reactivated.
  • New: Changed TrailRelaxation to Curve type, so that different relaxation values can be used on chains.
  • New: Offline animation retargeting supports rules for naming output animations.
    • Rules supported: Target folder, Prefix, Suffix, Replace.
  • New: Exposed SkeletalMesh property bDisableMorphTarget to blueprints. A new cvar, r.EnableMorphTargets, can be turned off to disable all morph targets.
  • New: FBX import now saves animation length property.
  • New: Persona Asset Browser displays folder path column.
    • Tooltip also displays folder path.
    • Sorting by path in the asset browser is supported.
  • Bugfix: Recompiling anim BPs that are dependencies of parent blueprints no longer causes a crash.
  • Bugfix: Fixed a crash that happened when something other than USkeletalMeshComponent had a MasterPoseComponent set.
  • Bugfix: Fixed a crash with retargeting additive blendspace animation assets.
  • Bugfix: Error is reported instead of crashing when compiling an animation blueprint that has a missing skeleton asset and contains a ModifyBone node.
  • Bugfix: Displaying the debug info of an AnimInstance object whose root node is null will no longer cause a crash.
  • Bugfix: Blendspace editor does not crash when the editor opens for the first time.
  • Bugfix: The random animation sequence player does not crash when there are no entries in the playlist.
  • Bugfix: Fixed a crash when default transition pins are set to true.
  • Bugfix: Reimporting a skeletal mesh that is currently open in Persona does not crash.
  • Bugfix: Fixed a crash with animation editing when the source data gets invalidated, possibly due to retargeting.
  • Bugfix: Fixed a crash with Blendspace having per bone set up when the interpolation value is 0.
  • Bugfix: Fixed a crash with invalid BlendSpace preview input coming when switching preview assets in Persona.
  • Bugfix: Prevented a crash in Persona while reimporting data.
  • Bugfix: Removed possible divide by zero in state machine transitions when using crossfade durations of zero.
  • Bugfix: Fixed assert on executing blueprint code during post load when an animation wants to spawn a "needs re-saving" message.
  • Bugfix: Fixed potential to call incorrect functions in derived anim blueprints, which could make derived anim blueprints function incorrectly.
  • Bugfix: Importing corrupted FBX files no longer crashes.
  • Bugfix: Fixed issue when importing curve values from FBX files with unwind rotation on.
  • Bugfix: When importing curves, the break tangent doesn't work, so now import curve defaults to auto.
  • Bugfix: Particle systems and other events triggered from anim notifies now work properly in the editor and at runtime.
  • Bugfix: Root Motion from Everything is no longer calculated incorrectly with animations that are part of a sync group.
  • Bugfix: Anim montage playback error correction is no longer incorrectly applied when the montage is stopped.
  • Bugfix: Anim instance native transitions no longer rely on state machine initialization to bind delegates.
  • Bugfix: Fixed animation blueprint relevancy nodes returning unexpected values when no relevancy can be determined.
  • Bugfix: Animation graph node properties that have underscores in their names now update appropriately.
  • Bugfix: Blueprint set morph target curves are now being set from master components to slaves.
  • Bugfix: Cloth and skeletal meshes no longer flicker or disappear at the edge of a viewport.
  • Bugfix: Memory is now reported correctly in GetResourceSize for UAnimSequence and USkeletalMesh assets.
  • Bugfix: Removed a one-frame delay when applying animation curve data.
  • Bugfix: A memory leak related to montages during shutdown has been fixed.
  • Bugfix: Negative curve values now work with montages.
  • Bugfix: Fixed issues with montage instances and slot nodes getting inconsistent weight data, causing animations to evaluate in different states.
  • Removed thread-unsafe access to LastRenderTime in animation system.
  • Improved duplicate slot node warning to make it easier to find malformed assets in larger projects.
  • Prevented invalid ranges being entered into FBX import data.
  • Optimized SafeSetCSBoneTransforms used by skeletal controllers after they have submitted their transforms.
    • Removed double iteration over the pose.
    • Removed iteration over the entire pose (we can start at the first bone in the transform list).
    • Removed bone masks and instead collect interesting nodes to perform conversion on.
    • Removed unnecessary conversions.
  • The anim blueprint compiler can now access member variables directly instead of thunking to the VM.
  • OSX version of the Maya rigging tools are now included in the launcher distribution.
  • Some animation nodes have moved to AnimGraphRuntime module.
  • Added a few support functions to UAnimInstance to make querying asset player states easier. Also added more montage stats to UAnimInstance.
  • Added NativeUninitializeAnimation override point to UAnimInstance.
  • Animation Compression: "Automatic" animation compression settings now default to the settings specified in Project Settings: Animation: Compression.
  • Reduced memory churn by removing many unnecessary allocations in various animation update and evaluate methods.
  • Sub-state machines can now work properly with native bindings. Previously, only sub-state machines in entry states worked correctly.

Audio

  • 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 added to Location and Attached API to allow facing to be specified to work properly with non-spherical attenuation shapes.
    • Play Attached renamed to Spawn Attached.
    • Sound and Dialogue APIs are now consistent.
  • New: Added ability to set a global pitch scale for every non-UI sound in the game via a new blueprint function.
  • New: Made audio component's applied sound attenuation settings accessible from blueprints.
  • New: Orphaned sounds due to a Sound Node Looping now output a warning to the log.
  • New: Sound attenuation boundaries match the attenuation curves at min/max.
  • New: Sound attenuation values match attenuation curves at min and max rather than assuming 1.0 or 0.0 respectively.
    • This allows for more unusual distance-based attenuation curves, such as donut-shaped curves, or curves that cause audio to be loud far away but quiet nearby.
  • New: Support for playing sounds with audio component properties without needing an audio component as long as the sound's properties do not change.
  • New: XAudio2 voices for PC/XBoxOne platforms are pooled and reused.
  • New: Volume-weight voice prioritization sorting for active voices.
    • This allows for sounds with zero volume, but high priority, to be stopped by lower priority, but audible, sounds.
    • Bugfix: This feature includes a fix for when sounds go out of range (attenuation reaches zero) and then come back in range while still active. If not stopped in between, the sound won't automatically restart from the beginning.
  • Bugfix: Fixed a probable crash that could have happened if 9 reverbs became activated at once.
  • Bugfix: Concatenator sound cue nodes will now wait for all sounds to finish in child mixer nodes before playing next sound in sequence.
  • Bugfix: On PC/XBoxOne, an audio skip in sounds past a certain length have been removed.
  • Bugfix: On Mac, splitting and merging audio streams when using reverb, EQ, or radio effects no longer causes volume levels to to change.
    • Added low-pass filter for voice audio units to closer match PC audio.
  • Bugfix: Play In Editor Sound Quality Level is now being used correctly for Sound Quality nodes in Sound Cues when playing in editor.
  • Bugfix: A rare case where a sound would not be played because an async load request had been made too recently has been fixed.
  • Bugfix: Core Audio API no longer crashes on Mac when the number of active sounds exceeded the number of available audio units.
  • Updated OVR Audio SDK.

Automation

  • New: Added config entries to determine which platforms and configurations are available in an installed build
    • Also specifies whether platforms are available for code or content projects only
  • New: Added -FastPDB commandline parameter for UnrealBuildTool, so that we can make use of the /DEBUG:FASTLINK option in Visual Studio 2015
    • Used by default in Visual Studio Projects and Hot Reload, with a Build Configuration override if you don't want to use it
  • New: Adding option to mark the output of a module as publicly distributable if the module source code is not
  • New: Improved methods of identifying installed builds
  • New: Improved methods of identifying installed builds
  • New: Refactored automated test flags
    • Added Disabled flag to disable tests without commenting-out or deleting code.
    • Replaced Smoke Test button in Automation Front End with a Filters dropdown.
    • Test configurations do not compile out Automation features (except in Shipping mode).
    • Automation tests can be triggered from in-game console in non-editor builds (automation controller is enabled).
  • Added Third Party binaries folder to Build Plugin command
  • Changed BuildDerivedDataCacheNode to use target receipts to add runtime dependencies.
  • Deprecating -rocket command line argument as it is no longer needed to identify installed builds
  • Bugfix: Fixed a bug that could cause a crash when running automation tests from the commandline.
  • Bugfix: Fixed issue with Packaging DLC on Mac
  • Bugfix: Use runtime dependencies from module files to determine what needs to be included in released builds

Blueprints

  • New: Blueprint "Development Only" Functions
    • Native C++ functions marked BlueprintCallable can now also be optionally marked as DevelopmentOnly. This new metadata allows calls to those functions to be disabled (compiled out) of all Blueprint function graphs in cooked/packaged builds without breaking the execution flow.  image alt text
  • The PrintString and PrintText system library functions have now been marked DevelopmentOnly by default. This allows for a quick removal of Blueprint logging in the final build product.
  • To get packaged/cooked Blueprints to compile without the "DevelopmentOnly“ nodes, disable the “Compile Blueprints in Development Mode" option found in the project's Cooker settings (this option is on by default to preserve functionality).
  • New: Condensed Blueprint Struct Nodes
    • We've improved and refined usability for structs that contain toggle values that are conceptually linked to other property "settings" in the same struct (like how our PostProcessSettings struct operates).  image alt text
  • Different override/enabled states are now managed through a toggle or dropdown widget that is exposed along with the setting on "Make Struct" and “Set Member” nodes.
  • To associate a toggle variable with another property, use the "EditCondition" metadata like is pictured above.
  • We've adopted this workflow for our PostProcessSetting nodes, which have proven to be unwieldy and confusing without it.
  • New: Added advanced searching syntax to Find-in-Blueprints.
  • New: Added experimental option to use the Blueprint Diff Tool with Animation Blueprints and Widget Blueprints.
  • New: Added facilities for specifying override vertex colors for meshes via Blueprints: PaintVerticesSingleColor and PaintVerticesLerpAlongAxis.
    • PaintVerticesSingleColor sets all mesh vertices to the specified color.
    • PaintVerticesLerpAlongAxis allows you to specify a linear blend along a mesh axis from one color to another.
  • New: Added Min and Max nodes for byte variables.
  • New: Added CopyPoseFromSkeletalMesh node, which takes a snapshot of a skeletal mesh pose and applies it to another skeletal mesh component.
  • New: Added support to AsyncTask nodes so that their corresponding functions can return null.
  • New: Added the ability to mark BlueprintCallable functions as development only.
    • By default, these nodes will be compiled out of Blueprint class function graphs at cook/package time, potentially improving runtime performance.
    • The "Print String" and "Print Text" functions are now marked as development-only, and will not be executed at runtime in cooked builds by default.
  • New: Added asset registry tags "NativeComponents" and "BlueprintComponents" to store the number of native and blueprint components, respectively. These counts can be used to identify targets for optimization.
  • Blueprint context menu performance improved.
  • By default, Buildmachines will no longer ignore compile on load errors for Blueprints.
  • Users can no longer edit Actor default values on properties in User Defined Structs or in CDOs that have structs with Actor properties.
  • New: Users can now delete function graph overrides that used to be interface implementations.
  • Bugfix: Crash fix when undoing add/remove operations on default instanced subobjects in a Blueprint.
  • Blueprint division nodes now show the callstack if a divide by zero is attempted.
  • During undo/redo, when deleted Blueprint instances are restored to the scene, they will be reinstanced using the newest version of their BlueprintGeneratedClass.
  • New: GetPathName node created. This node returns the full path name of a UObject.
  • New: Exposed many scalability settings to Blueprints via UGameUserSettings, making it easy to build a settings screen entirely in UMG.
  • New: The Blueprint Profiler is now available as an experimental feature to help identify costly operations in blueprints and guide optimization.
    • Enable the Blueprint performance analysis tools option in editor preferences under General - Experimental in the Blueprints section.
    • Analysis is currently enabled on a per-blueprint basis in PIE only.
    • To profile a blueprint, enable the profiler option in the blueprint editor and recompile the blueprint to add instrumentation. Then enter PIE and the editor will display the blueprint profiler tab and display timing data.
    • Work is ongoing in this area and the feature is not expected to be fully complete in this release.
  • New: Vector2D now has equal and not equal functions, just like Vector3D.
  • When adding new variables to user defined structures, the variable type will be the same as the last set type.
  • Bugfix: When converting a selection of components into a Blueprint, CDO values will no longer be lost.
  • Bugfix: "Convert Selected Components to Blueprint Class" no longer generates new components when used repeatedly.
  • Bugfix: Find-in-Blueprints will correctly check-out all out-of-date Blueprints if Index All With Source Control is selected.
  • Bugfix: When modifying default values on inherited Blueprint variables, the default values in the parent Blueprint will not be affected.
  • Bugfix: "Add Component" node adds components with exposed variables to the correct target actor (previously always went to "self").
  • "Color" name is no longer restricted.
  • Bugfix: "Convert selected actor to blueprint class" and "Convert selected components into blueprint class" actions can no longer be used to convert types that aren't blueprintable.
  • Added "focus" keyword to "AIController::SetFocalPoint".
  • Bugfix: Adding a WeakObjectPtr to an array of object references in a Blueprint now works correctly.
  • Bugfix: Assigning an interface property that is exposed on spawn using the Spawn Actor of Class node will no longer error.
  • Bugfix: Async Task nodes and Load Asset nodes no longer change superficially each time they are cooked
  • Bugfix: Attempting to follow a Blueprint compile error message to a node that has been delete no longer crashes
  • Blueprint Options and Class Options details view will correctly display in non-English languages.
  • Bugfix: Blueprint VM no longer crashes when encountering a type mismatch, throws an exception instead.
  • Bugfix: Blueprints duplicated for PIE will no longer register as dependencies to other Blueprint.
  • Bugfix: Blueprints with events in them no longer indicate they are different when compared against themselves using the Blueprint Diff Tool.
  • Bugfix: Can no longer add reroute nodes to read-only graphs such as math expression graphs.
  • Bugfix: Can no longer change the "Parent Socket" member of an inherited component.
  • Can no longer reparent level Blueprints to other level Blueprints, though native classes are still an option.
  • Changed an ensure to an error when attempting to generate literals for unsupported properties in Blueprints.
  • Bugfix: 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.
  • Bugfix: Copy and pasting local variable nodes for functions into collapsed graphs will no longer invalidate the node.
  • Bugfix: Crash fix for prompting user to check out Blueprint during the compilation stage.
  • Bugfix: Crash fix in Find-in-Blueprints after switching languages and searching.
  • Bugfix: Crash fix when AIController possesses a Pawn during Pawn's Unpossess event while exiting PIE.
  • Bugfix: Crash fix when attempting to override Timeline event nodes in a child Blueprint.
  • Bugfix: Crash fix when hiding the "CameraSettings" category on custom Camera Component classes.
  • Bugfix: Crash fix when pasting an event node is undone/redone.
  • Bugfix: Crash fix when doing a "Find Reference" on local variables without any placed nodes for the variable.
  • Bugfix: Crash fix when creating a local variable from an orphaned node inside a collapsed graph.
  • Bugfix: Custom event nodes bound to delegate signatures that include 'const&' and/or TArray input parameters will no longer emit a compiler note/warning.
  • Bugfix: Delay nodes can now be used in GameInstance's Initialize function. Previously they would only work in PIE.
  • Bugfix: Dependencies that arise due to Blueprint Macros are now correctly detected so that bytecode can be regenerated when needed - fixes one cause of TRASHCLASS appearing in bytecode.
  • Bugfix: Diffing Blueprints with deleted component assets will no longer cause an assert.
  • Bugfix: Warnings about missing parent functions no longer appear if the child function is invalid as a result of compile-on-load.
  • Bugfix: Dragging and dropping to create pins on function Return nodes when there are multiple of them will correctly update all Return nodes.
  • Bugfix: Dynamic Component delegate bindings to self are no longer exported on copy/paste & ALT-drag. This corrects the side effect of a copied Actor instance also affecting the original.
  • Bugfix: Find-in-Blueprints no longer requires the Asset Registry to initialize.
  • Bugfix: Crash fix when editing an instanced variable nested within another instanced variable.
  • Bugfix: Crash fix deleting graphs or delegates while a "Create Event" node's graph is in the transaction buffer.
  • Bugfix: Crash fix when a Blueprint's skeleton class is null.
  • Bugfix: Fixed a Blueprint breaking bug where invalid "PLACEHOLDER" classes would replace Blueprint class references.
  • Bugfix: Crash fix in Blueprint Editor after removing a previously-serialized root and/or parent component within the native scene component hierarchy of a native C++ parent class.
  • Bugfix: Crash fix in Blueprint Editor when a specific HideCategory (PrimaryTickProperty) was set on an Actor-based Blueprint Class.
  • Bugfix: Crash fix in Blueprint Editor when deleting a root scene component with 2 or more children followed by deleting a non-root child of the promoted child node.
  • Bugfix: Crash fix in Blueprint Graph editor after an undo of an unlinked user-defined pin removal action (e.g. removing an unlinked Function Input).
  • Bugfix: Fixed a Blueprint Graph editor issue that caused Add Component nodes not to be restored properly on an undo/redo after a deletion followed by a compile.
  • Bugfix: Fixed a bug in duplicated event nodes that could cause unrelated content to be referenced and loaded.
  • Bugfix: Fixed a bug in the array Shuffle method where the last entry wasn't as randomized as the other elements.
  • Bugfix: Crash bug during garbage collection for child Blueprints cyclically dependent on their parent.
  • Bugfix: Crash fix when applying instance changes to a Blueprint.
  • Bugfix: Crash fix while dragging off pins.
  • Bugfix: New components are now able to have the same name as a deleted component without having to compile after deleting the old component.
  • Bugfix: Copy, duplicate, and rename hotkeys wor correctly in the Blueprint viewport.
  • Bugfix: Fixed a bug that was resetting arbitrary defaults on Blueprint sub-classes.
  • Bugfix: ClassAssetIDs properly resolve circular dependencies.
  • Bugfix: Fixed a bug where special game specific event nodes could be removed on load (when they're associated with interface functions).
  • Bugfix: Fixed bugs with parent/child cyclic dependencies, where the child's overridden property values would be cleared on load and inherited components would be trashed during compilation.
  • Bugfix: Crash fix on undo of an Actor-based Blueprint Class instance deletion if it followed a previous redo.
  • Bugfix: Crash fix when using the diff tool with a Blueprint that implements an interface.
  • Bugfix: Crash fix on save with an EditInline instanced object owned by an Actor component instance.
  • Bugfix: Crash fix when modifying a function signature after deleting a sub-class override for it.
  • Bugfix: Crash fix when passing a default BlueprintSessionResult object to the "Join Session" Blueprint node. Instead of crashing, the join will fail and execution will continue from the "On Failure" pin.
  • Bugfix: Crash fix when using the "Replace References" feature when deleting a Blueprint asset.
  • Bugfix: Crash fix in specific cyclic dependency cases involving an Actor and ActorComponent Blueprints.
  • Bugfix: Crash fix when removing a event/function param in a Blueprint that was associated with the set GameMode.
  • Bugfix: Crash fix when deleting a map while its level Blueprint is opened.
  • Bugfix: Crash fix after a hot reload of the compiled game project.
  • Bugfix: Fixed a potential infinite loop runtime crash when adjusting Actor rotation in a Blueprint function.
  • Bugfix: Crash fix in to component reconstruction in a Blueprint Class instance related to undo/redo operations.
  • Bugfix: Fixed an internal Blueprint compile error on expansion of a Macro Instance node with one or more unconnected Enum output pins.
  • Bugfix: Crash fix when force-deleting a non-Actor parent Blueprint Class asset in the Content Browser if a child Blueprint Class asset was also loaded.
  • Bugfix: Event Dispatchers do not become unmodifiable after reparenting the Blueprint.
  • Bugfix: Component property values on a Blueprint class instance in the current scene are no longer reset as a result of recompiling the Blueprint class.
  • Bugfix: Convert Selected Components to Blueprint Class no longer asserts inappropriately.
  • Bugfix: Fixed collision response options editing for instances of Skeletal Mesh components added to a Blueprint Class.
  • Bugfix: Sliders behave properly on Capsule Collision component shape properties in the Blueprint editor.
  • Bugfix: Find-in-Blueprint goes to an item after the user double-clicks on it when searching locally.
  • Bugfix: Fixed compile errors after creating a local function variable from a node that could not find its assigned property.
  • Bugfix: Crash fix from invalid macros resulting from deleting the source graph in MacroLibrary.
  • Bugfix: Crash fix on Blueprint load when a macro instance referenced a struct.
  • Bugfix: Crash fix when generating bytecode for circularly-dependent blueprints.
  • Bugfix: Crash fix when a Blueprint Enum name collides with a Details Customization Name. For example, "Color" is now a safe name to use for a Blueprint Enum.
  • Bugfix: Crash fix when a Blueprint is saved without valid default values.
  • Bugfix: Crash fix Fixed when attempting to open the Property Matrix for a Blueprint that is missing its parent.
  • Bugfix: Crash fix when indexing all Blueprints in the Find Results window.
  • Bugfix: Crash fix when making changes with multiple components selected in the blueprint editor.
  • Bugfix: Crash fix when using "Find References" on a struct operation node (Make, Break, Set Members).
  • Bugfix: Crash fix when modifying some properties in sub-struct variables inside user-defined structs.
  • Bugfix: Crash fix when using the target of an Interpolate Component To node is destroyed before the node finishes.
  • Bugfix: Crash fix when using the Editor to debug breakpoints in blueprints with a null MacroGraph. Now it calls Ensure and recovers gracefully.
  • Bugfix: Crash fix with duplicating Timeline nodes, which was causing the new Timeline's tracks to be misplaced.
  • Bugfix: Crash fix after reinstancing Component BPs in thumbnails.
  • Bugfix: Crash fix in editor when using hotkeys to create local variables in graphs that do not support locals.
  • Bugfix: Crash fix when applying instance changes to a struct array back to the blueprint using the IWCE interface.
  • Bugfix: Crash fix when using "Draw Debug Float History" and "Draw Debug Transform History" in Blueprints.
  • Bugfix: Crash fix while garbage collecting recompiled Blueprints.
  • Bugfix: Promoting function graphs from interfaces during interface removal no longer calls Ensure.
  • Bugfix: Fixed thread-unsafe code in the Blueprint VM by removing static/global data.
  • Bugfix: Fixed errors that would sometimes appear when reloading a level that referenced a sub-level.
  • Bugfix: Fixed issue with appearing to be able to select actors in the viewport using Level Blueprints loaded through the Find-in-Blueprint system.
  • Bugfix: Deleting macros in Macro Libraries and then using undo no longer causes external dependencies.
  • Bugfix: Fixed UI issues when clearing GameplayTagContainers.
  • Bugfix: Fixed issues that could occur if an existing Blueprint class default object or instance contained one or more invalid property values for native component subobjects on load.
  • Bugfix: Fixed issues with "Find References" on local variables located in function graphs with a space in the name.
  • Bugfix: Fixed issues with graph node bubbles rendering incorrectly when there is nothing in the top slot.
  • Bugfix: Fixed the inability to save a Blueprint Class asset after renaming another Blueprint Class asset on which it depends.
  • Bugfix: Fixed warnings that would sometimes appear when using level Blueprint communications.
  • Bugfix: Fixed an issue causing Find-in-all-Blueprints to not be able to load up Blueprints due to missing path.
  • Bugfix: ForEachEnum will now correctly iterate over all enum values.
  • Bugfix: Functions correctly inherit purity in Blueprints and will update to reflect the current purity state of the inherited function.
  • Bugfix: GameplayTag and GameplayTagContainer switches will now work in standalone and cooked builds.
  • Bugfix: Harvesting components into a new Blueprint will correctly mark the components as movable so they can properly attach to the root.
  • Bugfix: Macros leveraging wildcard parameters will no longer fail to expand during compile-on-load.
  • Bugfix: Moved error bar for variable nodes to the bottom instead of the top to prevent shifting of nodes when there are errors.
  • No longer possible to duplicate Blueprint graphs while in PIE.
  • Optimization for Find-in-Blueprints gathering of property data.
  • Per instance lighting and vertex coloring on static mesh components is now only applied after the user construction script when the actor is reconstructed.
  • Removed direct dependency on GameplayAbilities from GameplayDebugger to solve problems with its classes showing in blueprints editor as a result of the OS automatically loading the library.
  • Bugfix: Removing an interface and keeping the functions will correctly make the pins on the function available in the details panel.
  • Bugfix: 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.
  • Bugfix: Renaming a component no longer renames all components of the same name in dependent Blueprints (inherited components are still updated as expected).
  • Bugfix: Resolved Blueprint compiler errors with duplicating Matinee Actors and adding controllers.
  • Bugfix: Right clicking on the graph instruction text for new Blueprints will no longer prevent the node context menu from appearing.
  • Bugfix: 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.
  • Slight improvement to native Actor instance construction time.
  • Bugfix: Spawn Actor From Class nodes can no longer be placed in Blueprints that do not support a world context.
  • Suppressed import linker errors related to Blueprint Generated Classes.
  • Bugfix: Child actor construction scripts run appropriately when starting Play In Editor sessions.
  • Bugfix: Blueprint graphs don't lose focus after pressing debugging keys in the blueprint editor.
  • Bugfix: Validated Get nodes can now be used on local variables.
  • Bugfix: This fixes an issue with array nodes where the top input pin would be obscured by the comment bubble making it hard to wire up the nodes.
  • Bugfix: Undoing changes to a Blueprint Actor Class's component hierarchy when the Blueprint Editor is closed now works correctly.
  • Bugfix: Undoing changes to object reference properties in a Blueprint no longer causes "Graph is linked to private object(s) in an external package" errors.
  • Bugfix: User Defined Enums begin counting at 0, and will no longer increase by two's.
  • Bugfix: User defined structs with Blueprint class references in their defaults will no longer lose their defaults when loading.
  • Bugfix: User defined structs and Local Variables can have non-basic type arrays of size 1 without resetting size 0.
  • Bugfix: When promoting an orphaned variable node to a local variable, all orphaned variable nodes in the local scope will point at the new local variable as expected.
  • When using a pin connection to specify the class for "Spawn Actor From Class", the default value overrides from the node are assigned to the new actor when it is spawned.
  • WorldContext pins will no longer be visible when the editor starts up if a Blueprint is loaded during game module load (actor/object constructors).
  • Exposed the ESplineMeshAxis type to Blueprints.
  • Improved "Find References" for variable nodes to more directly search for references to the specific variable.
  • Improvements to the usability of PostProcessSettings structure in Blueprints.
  • Log statements coming from blueprints now include the blueprint's name. This can be disabled in [Kismet] in Engine.ini via bLogPrintStringSource.
  • Optimized performance of USimpleConstructionScript::GetAllNodes. This dramatically improves the performance of FindArchetype which is relied upon heavily when spawning a Blueprint defined Actor with components added in blueprints.
  • PinTypeSelector has improved usability with the sub-menu for object types.
  • Added a warning when a deprecated output from Break Struct node is used.
  • Toggling a function to pure will automatically remove all breakpoints from call sites.

Core

  • New: .ue4stats file will now have ".inprogress" extension for the duration of stats capture. This prevents accidental use of an incomplete file.
  • New: Added compile-time define support to filter out command line args on a per-game basis.
  • New: Added configurable threshold settings for fps/frame time displays.
    • t.TargetFrameTimeThreshold and t.UnacceptableFrameTimeThreshold set the thresholds (in ms, defaulting to 33.9 and 50.0, respectively).
    • Values below the target level are green, values above the unacceptable level are red, and the ones in between are yellow.
    • The bar for on-screen cycle counters is now based on t.TargetFrameTimeThreshold rather than a hardcoded 33.3 ms.
  • New: Added console command "LoadTimes.DumpReport" which provides a report of the exclusive load time of packages.
  • New: Added debug renderensure console command.
  • New: Added -DUMPALLWARNINGS command line param to force dump all warnings and errors after after executing commandlets.
  • New: Added -fullcrashdumpalways commandline option to force full crash minidumps.
  • New: Added garbage collection array pool leak checks.
  • New: Added LIKELY/UNLIKELY macros for static branch prediction hinting.
  • New: Added -MatchAutoStatCapture command line switch to save .ue4stats automatically during each match.
  • New: Added more log info when saving temporary shader files fails. Increased the number of attempts when moving a file fails.
  • New: Added new hitch detection CVars to make it easier to control how hitches are detected and reported
    • t.HitchFrameTimeThreshold is the definition of a hitchy frame (in ms), defaulting to 60 ms.
    • t.HitchDeadTimeWindow is the minimum time that must pass before we'll record a new hitch (in ms), defaulting to 200 ms.
    • t.HitchVersusNonHitchRatio is the minimum ratio between the last frame time and the current frame time to consider it a hitch, defaulting to 1.5 (e.g., if the last frame time was 50, the current frame must be at least 75 to be considered a hitch).
    • They can also be set in the [SystemSettings] section of DefaultEngine.ini for games that target something other than 30 fps.
    • Switched 'stat hitches' display to use the t.HitchFrameTimeThreshold value, and updated coloring to use the related coloring thresholds (at 25% of the hitch value) instead of using hardcoded yellow at 100 ms and red at 200 ms.
  • New: Added "stat startfile", “stat stopfile”, “stat hitches”, and “stat namedevents” to the console command autocomplete list.
  • New: Active class redirectors map is loaded from all config files, so plugins can define redirectors.
  • New: Asset Registry tags are now excluded from cooked builds. This reduces memory usage. Tags needed at runtime must be added to the CookedTagsWhitelist list in DefaultEngine.ini
  • New: Async loading priority has been given a typedef and made into a signed type.
  • New: Async: Added ability to register an optional callback function that is executed when a Future completes.
  • New: Console windows opened by the engine on Windows, such as for log output, will now attempt to match their horizontal size to the console's buffer size to minimize the need for manual scrolling or resizing.
  • New: Added unit test for ISO date/time conversion of empty strings.
  • New: Allowed for specifying custom data in FStructOnScope.
  • New: Templatized TypeContainer implementation to allow for thread-safe objects; updated unit test
  • New: Enabled user-defined suffixes on Saved folders with the -saveddirsuffix= command line parameter.
  • New: Exposed async load priority through streamable manager.
  • New: FCachedReadPlatformFile can now be disabled to decrease memory usage in exchange for decreased speed.
  • New: Function for getting total and free disk space on Mac.
  • New: Garbage collector will now spawn sub-tasks as soon as there's enough work without waiting for the parent task to finish processing all objects.
  • New: Implemented Undo Barriers on the transaction buffer.
    • This adds some new methods to the UTransactor interface for adding and removing Undo Barriers.
    • PIE now adds an Undo Barrier upon startup, so that it is not possible to undo beyond the start of the PIE session.
  • New: Pkginfo commandlet can now open packages from outside of the current project by specifying the absolute package path.
  • New: Script callstacks are now printed out on ensures.
  • New: Added support for FText properties to serialization.
  • New: Added support for TMap property serialization.
  • New: Exposed entire serializer state in backend API.
  • New: Added HUDinformation about currently running stats file command (in format "STATS FILE: Duration: {0}, Filesize: {1}").
  • New: Stats converter is using a new stats reader which runs 10x times faster.
  • New: When cooking by the book, saving packages will now skip creating exports and imports that are editor-only (are instances of an editor class).
  • New: Profiler loading time optimized to be up to 6x times faster.
  • Bugfix: Crash fix in undo/redo when a lazy object pointer refers to a garbage collected object.
  • Bugfix: Crash fix in async loading caused by iterating over an array while new elements were being added to it.
  • Bugfix: Crash fix when loading the AssetRegistry cache.
  • Bugfix: Crash fix on failure of request file functionality to UnrealSwarm. It will no longer crash on sporadic network problems.
  • Bugfix: Crash fix to UnrealHeaderTool in some rare cases if the parsing step had other errors.
  • Bugfix: Crash fix when replacing references to a deleted anim blueprint with a duplicate.
  • Bugfix: Crash fix to hot reload when dealing with empty user-defined enums.
  • Bugfix: Profiler indication loading progress reworked so it no longer freezes without a progress bar.
  • Bugfix: Fixed missing return value in TAsyncResult assignment operator.
  • Bugfix: CrashReporter records crashes properly on Windows 10.
  • Bugfix: Async loading system will not promote an existing request's priority where a new higher priority request for an already requested package wn't promote the existing requests priority to match the new one.
  • Bugfix: Cooked asset registry generation now takes redirectors into account.
  • Bugfix: "-benchmark" command line switch is now honored in non-editor builds so that benchmarking games is possible again.
  • Bugfix: Servers no longer make repeated attempts to initialize the HighRes screenshot system.
  • Bugfix: Fixed a case where FAssetRegistry::RemoveDependsNode could potentially delete an allocation from within an array allocation.
  • Bugfix: Removed a potential deadlock when suspending and resuming async loading multiple times.
  • Bugfix: Thread local values are no longer accessed with invalid TLS keys in Stats2 code.
  • Bugfix: Fixed an assert when cancelling async loading with async loading thread enabled.
  • Bugfix: Game-agnostic editor settings are now processed correctly when output to the engine saved config directory.
  • Bugfix: Fixed blueprints compilation errors after hot reload.
  • Bugfix: UnrealBuildTool dependency file caches are no longer broken when the process is terminated unexpectedly.
  • Bugfix: Comparisons between module names of different case are now handled correctly when checking files for rebuilds in UnrealBuildTool.
  • Bugfix: Fixed 'debug ensure' console command logic.
  • Bugfix: FAssetRegistry::DependencyDataGathered no longer favors soft asset dependencies.
    • FAssetRegistry::DependencyDataGathered was potentially replacing hard asset dependencies with soft asset dependencies, but the hard asset dependencies need to take precedence.
  • Bugfix: FURL comments are now properly gathered for documentation.
  • Bugfix: Fixed leaking certain auto-generated structures (ICppStructOps) on exit (reduces spurious memory leak reports by memory profiling tools like valgrind).
  • Bugfix: Memory leaks related to async loading have been fixed. Array memory churn has been reduced.
  • Bugfix: JsonReader::ParseNumberToken now terminates properly on sudden end of stream.
  • Bugfix: There is no longer a race condition where StaticFindObject can be called from another thread while SavePackage is running.
  • Bugfix: Fixed 'remove' actions when processing .ini files in UnrealBuildTool.
  • Bugfix: Removed a possible infinite loop and avoided skipping elements in UMapProperty::Identical.
  • Bugfix: Various issues fixed with hot reload on Mac.
  • Bugfix: Time markers in the log file when using -LOGTIMESINCESTART are now logged correctly.
  • Bugfix: Fixed issue where memory counters are not correctly listed in the profiler's window.
  • Bugfix: Path generation errors in streaming network file platform layer fixed.
  • Bugfix: Fixed stack corruption in UnrealHeaderTool when increasing NAME_SIZE.
  • Bugfix: "Stat MemoryPlatform" no longer exhibiting errors the first time it is used in a run.
  • Bugfix: UnrealBuildTool is now able to harvest environment variables when the user's Windows login name contains non-ASCII characters.
  • Bugfix: UnrealHeaderTool now stops the build when a warning occurs and "warnings as errors" is enabled.
  • Improved the readability of on-screen stat displays.
    • The background color for each row is now solid instead of a gradient, and it alternates colors from row to row to improve reading across a line.
  • Hot-reload performance has been improved with parallelized search for old class default objects' referencers.
  • Added "out of space" checks to the build patch services.
  • CrashReporter always dumps minidumps even when the full crash dump mode is enabled, mostly to avoid hitches during writing the minidump.
  • Increased the default UObject count limit in the editor to 16 million objects.
  • BuildConfiguration.xml changes will now cause a makefile rebuild.
  • Minimized allocations made by garbage collection process by pooling UObject arrays.
  • Optimized UObject array copying during garbage collection by using memcpy instead of iterating over the array.
  • Minor improvements to scoped timing functionality.
    • Make scoped seconds timer class available outside of stats build. Normal usage macros still remain guarded.
    • Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE, which only times during the outmost instance of a recursive function
    • Added SCOPE_SECONDS_COUNTER_RECURSION_SAFE_BASE and SCOPE_SECONDS_COUNTER_BASE, which are defined in all build types, for easy temporary timing in Test/Shipping builds.
    • Added a boolean parameter to the timer class which can be used to disable it without having to scope the calling code.
  • Added a more verbose message when crashing due to seeking to invalid file positions.
  • Optimized custom version system so that it takes less space in saved packages and is faster to access at runtime.
  • Optimized FElementBatchMap usage in Slate rendering.
  • Optimized FMemory::Memswap and TSparseArray::Compact.
  • Optimized object iterator by storing the current object pointer in the iterator object.
  • Optimized performance of FindFunction, which decreases overhead for calling all UFUNCTIONs.
  • Optimized the code generation path in UnrealHeaderTool.
  • Fonts will no longer be loaded on the server.
  • Framesync for external profilers now happens reliably around gamethread frames.
  • Game resolution now will always be smaller than the primary desktop size, even if the command line specifies a bigger resolution.
  • Memory stats are logged on OOM.
  • Made sure that all instanced subobjects are not reset on actor construction and not only components.
  • TMap properties are now processed when searching for object references.
  • Moved FriendsAndChat module to Runtime folder.
  • OS memory stats are no longer acquired every tick unless stats are being captured.
  • Bound by (GT, RT, GPU) calculations now uses the t.TargetFrameTimeThreshold cvar (in ms) rather than being hardcoded to kick in only when over 30 fps.
  • Changed the ini file name generation for PerObjectConfig objects that are saved into a package to use the file name specified by the object instead of the content path where they live.
  • Cook-by-the-book will now skip saving packages that are only referenced through editor-only properties.
  • Cooked packages can now be loaded in the editor if cooked for the same non-editor version of the platform the editor runs on.
  • Buttons on CrashReporter window have been updated for better user experience.
  • Stats are now visible in VR mode.
  • String output functions in JsonObjectConverter now ignore Deprecated properties by default.
  • Various fixes and improvements to asset-registry-based package dependency preloading

Editor and Tools

  • New: SessionFrontend now has the ability to set session name and owner from the command line, e.g. on consoles running from Visual Studio.
  • New: "Reset to default" button on the Image Size property of a brush now resets to the size of the brush's texture, if one is set.
  • New: "Scalabilty Group" console variable category has been added to the device profile editor view.
  • New: Added "-FixupStringAssetReferences" command line option to use with the ResavePackages commandlet. This will forcibly fix any string asset references the same way it fixes hard object references.
  • New: Level sequences now support particle system parameter animation.
  • New: Animation tracks can be copied from a matinee to a level sequence.
  • New: Added support for slot name animation to the skeletal animation track in the level sequence editor.
  • New: A font metrics visualiser has been added to the font editor preview. This helps you ensure that all of your sub fonts are within the clipping region (the green box) of your main font.
  • New: Added a horizontal scrollbar to the Message Log so that very long lines can be seen in their entirety.
  • New: Added a new add key mode in the curve editor. Shift + ctrl + left mouse will add new keys (value and time) on all editable curves at the mouse location.
  • New: Added a new Blueprint-callable method to force an update on a Spline Mesh (to recalculate its collision), and also added it as an extra optional parameter on any Blueprint calls which set spline mesh parameters so that mesh/collision update can be deferred if desired. This can provide a big performance optimization in Construction Scripts which manipulate Spline Mesh Components.
  • New: Added a new Editor Preference (Editor Preferences -> Level Editor -> Miscellaneous -> Move BSP Pivot Offset Automatically) which maintains a Brush's pivot in the center of its geometry when its vertices are being edited in Geometry Mode.
  • New: Added a new simplified plugin creation wizard.
    • It can be opened from the plugin browser instead of being another plugin that needs to be enabled.
    • Now, users only need to choose a plugin template and a path/name for it.
  • New: Added the ability to bind a delegate to a property to react to a child property changing.
  • New: Added an option (in editor style settings) to mirror output log warnings or errors into the message log during PIE.
  • New: Added Data Table support for static sized arrays.
  • New: Added sRGB color input support in ColorPicker.
  • New: Added support for a package to be launched to multiple targets from a single launch command line.
  • New: Material parameters can now be animated in level sequences.
  • New: User Defined Struct string and text properties can be marked as multi-line text.
  • New: "Convert to Static Mesh" can be used on volumes and works the same way as it does for brushes.
  • New: Added template to the Plugin Creator that will help you create a plugin using a Third Party library.
  • New: Added the ability to take, save, and load widget snapshots via the widget reflector. This works for both local and remote targets, and allows you to do things like take a widget reflector snapshot from your game running on a PS4, and then inspect that snapshot on PC
  • New: Added the ability to type in a path for the reference viewer, which makes it much easier to track down assets that are broken due to references to missing assets. Paste in the missing asset path to view the assets that referenced it.
  • New: After making changes to certain language settings which require an editor restart, a toast prompt is now displayed indicating this to the user, with a button for performing the restart.
  • New: Camera preview window in the level viewport now has better support for actors with multiple camera components. It will ignore camera components with bIsActive set to false, letting the user decide which component to use.
  • New: Changed Plugin Creator to allow new plugins to be created in subdirectories.
  • New: Changed the hierarchy of some of the command lists to better reflect when a keypress has the potential to be handled by a parent if necessary.
    • This fixes the issue where some hot keys were not alerting the user that they had already been assigned in the Keyboard Shortcuts editor.
  • New: Changed the placement offset for lights so that they're placed closer to the cursor.
  • New: Changes to spawning / duplicating actors in Simulate In Editor: now actors are always spawned non-permanently into the SIE world, in line with other edits to actors which are reverted upon exiting SIE.
  • New: Clarified the use of Server Game Options and Command Line Options in the tooltips for the Level Editor -> Play settings.
  • New: Disabled the "Refresh/Generate Project" and "Open C++ Code" actions for Blueprint projects with no C++ code.
  • New: Engine: Allowed the use of tokens {GameName}, {PlatformArchitecture}, or {RHIName} in UGeneralProjectSettings::ProjectDisplayedTitle
    • Note: The value must be manually edited in the ini file and wrapped with "" currently, due to a core issue with ini values for strings/text that contain { or })
  • New: Experimental "Merge Actors" feature now merges collision bodies.
  • New: Fixed and enabled UnrealBuildTool makefiles on Mac. This should give faster build iteration times on Mac.
  • New: FPngImageWrapper now has working error handling. This was previously causing the editor to crash on launch if a project thumbnail had become corrupted.
  • New: Improved lightmap import performance in editor, improves build lighting time.
  • New: Improved searching in the console. Typing "? " at the beginning of the console command will make it search for all cheat commands containing your terms instead of just those starting with what you type.
  • New: In the UI widget animation editor and level sequencer editor, you can now change auto key options to auto-key off, auto-key existing animations only, and auto-key all.
  • New: Made an optimization to component instance data cache application, resulting in big savings for Actors with a large number of construction script created components. Moving actors with many components now works much more quickly.
  • New: MessagingDebugger: Added keyboard shortcuts for debugger actions
  • New: MessagingDebugger: Implemented details view for messages
  • New: MessagingDebugger: Simplified message tracer API
  • New: New Quad Complexity view mode displaying the amount of rasterized quad overshading.
    • The quad overshading can also be taken into account in the Shader Complexity view mode by enabling the "Visualize.Quad Overhead" show flag.
  • New: Added limited support for text based filtering of the event list in Profile.
  • New: Profiler:made filter box resizable; replaced spaces with slot paddings; more sensible default sizes.
  • New: Reinstated the ability to edit Spline Components via their visualizer even if the Construction Script sets the points itself. This is done by checking 'Override Construction Script' in the Spline Component's details.
  • New: Reinstated the control mechanism to move the pivot by Middle-dragging the center point in perspective mode; this allows the vertex snapping mode (holding V+MMB drag) to work as before.
  • New: Implemented session authorization for remote users in SessionFrontend.
  • New: Sound class assets no longer modify their package as soon as they are opened in the editor.
  • New: Stopped the builder brush from being erroneously rendered by 'show collision'.
  • 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 auto-save feature has been revamped and now functions as intended. It will wait for a small period of inactivity prior to operating, so as not to intrusively interrupt the user's workflow.
  • New: The light complexity view mode now has improved, more readable color coding. The color per number of lights are configured in BaseEngine.ini under Light Complexity Colors.
  • New: The process of duplicating Brushes in the editor has now been hugely optimized.
    • In a test level with 227 brushes, these are now duplicated in around 2 seconds instead of nearly 4 minutes as before.
    • A dialog has been added to show progress on the operation if it takes more than a few seconds.
  • New: The reflection visualization viewport mode is now available when using Feature Level ES2, to help visualize mobile reflection differences compared to PC
  • New: You can now specify a collection to ParticleSystemAudit which will cause you to only audit particle systems in that collection via -FilterCollection=.
  • Bugfix: Crash fix when using custom structs with custom slate UI inside Blueprints.
  • Bugfix: Crash fix setting struct variable to CurveTableRowHandle.
  • Bugfix: Crash fix when the engine exits during PIE.
  • Bugfix: Crash fix when attempting to edit plugin metadata in the Plugins Viewer.
  • Bugfix: Crash fix when dragging junk text from an external program into the graph editor.
  • Bugfix: Crash fix when importing multiple objects with the same name at the same time when one of them is an FBX file.
  • Bugfix: Crash fix when importing an animation containing different rotation order in different bones from an FBX file.
  • Bugfix: Crash fix when saving a Data Table that didn't have a row-struct set.
  • Bugfix: Crash fix when using an empty FKey property with a Data Table.
  • Bugfix: Crash fix when using the eye dropper on color pickers in Material Editor graph nodes.
  • Bugfix: Crash fix when shutting down the engine while a Play in Editor (PIE) instance is running.
  • Bugfix: Crash fix when scaling Speedtree assets.
  • Bugfix: Crash fix when editing an array in the Widget Blueprint editor when there was an active widget animation in the animation editor.
  • Bugfix: Crash fix when packaging a game after creating a plugin through the editor.
  • Bugfix: Crash fix when dragging materials onto BSP surfaces within the level editor viewport.
  • Bugfix: Crash fix to SessionFrontend when right clicking UFE session browser section headers.
  • Bugfix: "Play in Standalone Game" games now show up in SessionFrontEnd session list.
  • Bugfix: Unnamed, non-standalone sessions are now correctly showing as "unnamed" in the SessionBrowser.
  • Bugfix: Fixed an issue in the Widget Blueprint animation editor and level sequence editor timelines where the key editor in the tree view would not stay in sync with property changes when auto-key was turned off.
  • Bugfix: Byte and enum properties are now evaluating correctly for values greater than 1 in the widget blueprint animation editor and level sequence editor.
  • Bugfix: Single component values like floats are now showing up in the curve editor within the timeline in the widget blueprint animation and the level sequence editors.
  • Bugfix: Mac no longer experiences editor hang when removing devices.
  • Bugfix: Fixed a major issue with rebuilding the collision mesh on Spline Mesh Components when spline parameters are changed. Now collision geometry is always updated correctly when deforming the spline mesh in the editor. Also made the mesh generation more robust for highly deformed spline meshes, which should avoid PhysX warnings in the log and the creation of bogus geometry.
  • Bugfix: Empty Material Functions no longer mark themselves as dirty when first opened.
  • Bugfix: Content-only projects will now properly use their config files instead of the defaults when building.
  • Bugfix: Duplicating, in a Property Tree, an array of instanced objects will correctly deep copy the objects instead of a shallow (referenced) copy.
  • Bugfix: FBX exporter has two fixes:
    • Fixed the export order to make sure the hierarchy is exported correctly.
    • Fixed a crash when an exported selection does not contain a parent.
  • Bugfix: "Replace Selected Actors With" feature correctly changes all references to the replaced actors.
  • Bugfix: In the Spline Component visualizer, points are correctly selected on a new spline when a different spline was previously selected.
  • Bugfix: Speedtree assets will no longer receive blank materials.
  • Bugfix: Fixed a failure to build Windows and Mac Client from the Project Launcher.
  • Bugfix: Fixed an issue in calculating the vertical scrollbar ratio for the Curve Editor and Cascade viewports. This was leading to curves not appearing in the Track list when added.
  • Bugfix: Canceling the color picker dialog in the Curve Editor now correctly preserves the original color.
  • Bugfix: Fixed an issue where "Show Only Selected" would not show members of actor groups.
  • Bugfix: Clicking a Text property field corresponding to multiple properties no longer causes the "Multiple Values" text to be erroneously committed to those properties.
  • Bugfix: Closing the editor with a dirty material open in the Material Editor no longer invokes multiple prompts.
  • Bugfix: Menu options no longer remain highlighted after the menu closes.
  • Bugfix: Mobile certificates that are valid do not show up as expired, even if other certificates are expired.
  • Bugfix: Spline Components added dynamically through the in-world details panel are now editable with the visualizer.
  • Bugfix: Actor scale (when entered directly in the details panel) works correctly with undo.
  • Bugfix: Setting the Brush Type of a BSP Brush to default does not put it into an unsupported state.
  • Bugfix: Hidden BSP geometry will no longer occlude BSP geometry behind it during selection attempts.
  • Bugfix: Brush extrusion tool now yields correct results if the Brush actor is rotated.
  • Bugfix: Fixed an issue with files which have been marked as writable not appearing on the list of items to save.
  • Bugfix: When staging DLC from the Project Launcher, .uplugin files are no longer repeatedly copied.
  • Bugfix: Changing editor visibility via the World Outliner now correctly hides lights.
  • Bugfix: Player Collision view mode now draws mirrored collision volumes correctly.
  • Bugfix: Fixed makefile errors when hot reloading multiple different modules.
  • Bugfix: "-manifests" parameter is now included when packaging with chunking (PlayGo, Streaming Install etc).
  • Bugfix: Fixed NavMesh generation around mirrored blocking volumes.
  • Bugfix: Transformation widgets scale correctly with screen percentage in SIE mode or when using "r.ScreenPercentage.Editor"
  • Bugfix: Profiler window now is correctly disabled when no session instances are selected.
  • Bugfix: Fixed not being able to open Sequencer files with audio tracks.
  • Bugfix: Exiting from the editor during a Launch On will no longer crash.
  • Bugfix: Camera roll is no longer applied to level viewport cameras after ejecting from the player in a PIE session in the existing editor viewport.
  • Bugfix: UE4 prerequisites installer will no longer fail when attempting to install an older version.
  • Bugfix: T3D exporter now properly exports empty arrays and arrays that were larger than the default but otherwise unmodified.Bugfix: Data Table CSV/JSON import now works correctly with FName properties that contain a space.
  • Bugfix: Fixed undo/redo when locking levels.
  • Bugfix: AssetImportData for an asset is no longer being lost when the asset is loaded.
  • Bugfix: Tag and Tag Query Editor windows on Mac can now be clicked.Bugfix: Widget deltas are now correctly calculated when the widget is positioned behind the camera. This was affecting the "Ctrl + Mouse Button" actor movement mode when the widget was offscreen.
  • Bugfix: The Windows / Command key is now handled correctly as a modifier key. This addresses an issue where switching away from and back to the editor with Win+Tab would result in it no longer responding to input.
  • Bugfix: Clicking the clear button on the SearchBox widget will no longer close the parent menu (this was affecting context menus in the Blueprint / Material editors amongst others).
  • Made a number of substantial optimizations and improvements to Mesh Paint mode. This addresses very poor performance when vertex painting on spline meshes or static meshes with a large number of vertices, and also addresses an issue of gradual slowdown when left in Paint Mode for a while.
  • Added automatic fixup code on load for brushes that were mirrored (which could have resulted in inverted/invalid collision).
  • BSP is now immediately rebuilt after converting brushes to volumes.
  • Camera preview window in the level viewport now has better support for actors with multiple camera components. It will ignore components with bIsActive=false, letting the user decide which component to look through.
  • Color properties with HideAlphaChannel metadata now set the default alpha value to 1.0, instead of 0.0 when the color picker is used to select a new value.
  • Compilation audio cues now mute if the user disables editor sounds.
  • Disallowed deletion of assets while PIE is active. Deleting an asset while PIE is active can have a number of adverse effects; before doing so, any current PIE session needs to be finished.
  • Correct session names are now used by the launch-on feature.
  • Ensured that all files are deleted when editor fails to create a new project for any reason.
  • Ensured that Plugin Browser displays correct results after adding a new plugin.
  • Fixed log spam attributed to redundant component tree updates in the level editor's Details view when the Actor's root component is both native and editor-only.
  • Internal references in a group of duplicated actors will be fixed up if the referenced object's name coincides with the name of a different object.
  • Fixed path found for CRT libraries when Windows Driver Kit is installed.
  • Fixed PIE window positioning when starting a multiplayer PIE session. The 'Center New Window' option is ignored in this case, so that the windows aren't created on top of one another.
  • Improved rendering performance with very long tangent handles in the spline component visualizer.
  • Brush Builder parameter editing in the Details panel of a Brush Actor will prevent invalid combinations of parameters. For example, setting inner radius greater than outer radius.
  • Importing 8bpp BMP images and BMP images stored in reverse row order is now supported.
  • Fixed the visual appearance of submenu buttons when the submenu is open.
  • Graph panels no longer handle numpad and direction keys when they are pressed with a modifier.
  • Grouped actors pasted with 'Paste Here' now have their group actor and pivot position set correctly.
  • High-res screenshots delay for a few frames to allow temporal artifacts to resolve.
  • Inertial scroll methods and cached geometry of STableViewBase are now available to derived types.
  • Made a change so that the Materials category always appears in Primitive Component detail panels with Material properties.
  • The Maps and Modes setting panel now uses standard asset picker for map configuration properties.
  • Made minor optimizations to HDR image export process.
  • Made the shadow color for in-viewport text in the profiler more opaque to increase readability.
  • Percentage-based scaling is no longer enabled when multiple actors/components are selected.
  • Redesigned SessionFrontend session browser.
  • Plugin names are now disallowed from starting with non-alphabetic characters.
  • StableSort is now used to sort pak files. This preserves file order across builds and can make patch sizes smaller.
  • Fixed various typos in UMG.
  • Added FInteractiveProcess class to handle creation and interaction with external processes.
  • Prevented node flickering when changing details properties with the slider in the Sound Cue Editor.
  • Reinstated the Plugins menu option in the Edit menu when "Expand Configuration Menus" is enabled.
  • Reworked plugin templates so that they are laid out with desired folder structure, making it easier to add new templates without relying on existing ones.
  • Scene component translation manipulator drag is now properly handling the scale and rotation from the parent hierarchy.
  • Selecting all actors of the same class as the selection (Ctrl+Shift+A) now works when there are actors selected from more than one class.
  • Smoother scrolling in "Save Packages" dialog when many assets have been changed.
  • The "New Plugin" button now appears grayed out for Blueprint projects, with an explanatory tooltip. If a Blueprint project is changed into a C++ project by adding a new C++ file, this change is reflected in other project related dialogs.
  • The data table editor now handles multi-line rows of text.
  • The editor now only adds plugin directories to the environment path when the plugin is enabled.
  • The FBX SDK has been upgraded to version 2016.1.1.
  • The FBX importer is now as fast as it was in version 4.9.
  • The Level Viewports' Exposure settings are now correctly saved and restored between editor sessions.
  • Skeletal meshes now use smoothing groups when using mikktspace for calculating normals and tangents.
  • The User Defined Struct editor now treats TAssetPtr as an asset property type.
  • Asset discovery performance improved.
Content Browser
  • New: Added a prototype content browser search filter for assets that use a specific gameplay tag.
    • Note: The filter currently only shows matching assets that are already loaded, it will not discover tag usage in an unloaded asset!
  • New: Added a way to forcibly refresh the source control status of a collection.
  • New: Improved the asset gathering and path prioritization workflow for very large projects.
    • Previously, the file discovery phase of the asset gathering process would block the entire process until it had found all of the files it needed to test.
    • This can take quite some time for projects with a large amount of assets, so this change adjusts the process so that discovered paths will be reported back to the asset registry while the file discovery is on-going. This allows you to prioritize the scanning of certain folders before the initial discovery phase has finished.
  • New: Reinstated Thumbnail Edit Mode Primitive Tools. Now the mesh used by the Content Browser when editing thumbnails can be changed.
  • New: Removed the UCurve derived asset types from the Create Asset menu in the Content Browser, while still presenting the option to create them as new assets in the asset picker dropdown menu in details panels.
  • Auto re-import improvement: When a new file is added alongside an asset that has no source file associated with it, a re-import will be attempted instead of reporting a warning.
  • Bugfix: Editor content browser is now showing an error instead of crashing when user rename a map outside of the editor and then try to manipulate the file in the content browser.
  • Bugfix: Fixed a bug that could cause a crash when searching asset tags in the Content Browser.
  • Bugfix: Crash when searching by tag in a folder with redirectors.
  • Bugfix: Content browser filters used the default category could result in an extra copy of the default category in the menu
  • Bugfix: Crash that could be caused by creating, reverting, and then moving a file with the same name
    • FAssetRenameManager::FindCDOReferencedAssets now ignores deprecated and dead classes
  • Bugfix: There was a potential editor crash when moving assets between folders in the Content Browser.
  • Bugfix: A new package name was auto-generated when duplicating an asset whose name ends with a numeric suffix. This addresses a crash bug when copy + pasting map assets in the Content Browser.
  • Bugfix: Crash when importing some FBX files
  • Bugfix: Drag and drop only worked in the Content Browser tile view
  • Bugfix: The "Show in Explorer" action in the Content Browser works correctly for C++ classes and finds the associated header file.
  • Bugfix: The collection manager was sometimes watching non-collection directories for changes
  • Bugfix: Realtime Thumbnail toggle now correctly remembers state after restarting editor.
  • Modified DDS cubemap loading to prevent an array overflow when importing a cubemap with too many mips.
  • Moving assets now corrects source reimport paths where possible
  • Some performance improvements when opening the Content Browser
Landscape
  • New: Added a new Landscape Layer Usage visualization mode. This allows you to easily see and optimize which landscape components are using which layers to improve performance.
    • Each layer has a color code which can be chosen by clicking on the layer thumbnail while the Layer Usage visualization mode is active.
    • Each landscape component renders a stripe pattern across the entire component. The stripe is made up of the color codes for the layers that are applied to the component.
  • New: Added layer whitelisting by component to the landscape editor
    • Enabled via the layer restriction dropdown in paint mode
    • The brush will go red in areas that aren't whitelisted and will block painting
    • Hold the main keyboard +/- and click to add/remove layers from the whitelist (not the numpad, the ones next to backspace)
    • Warning: Removing a layer from components with "-" + click will also delete that layer's painted data on those components
  • New: Landscape can now have "world position offset" from the landscape material baked into its collision
    • This feature is experimental and currently has the following restrictions:
      • Only z (vertical) offset is supported. XY offsets are ignored.

      • Does not work with CollisionMipLevel > 0

      • Does not work with an XY offset map (from retopologize tool)

  • Bugfix: Landscape editor did not show layers that were only defined inside a Material Function used by the landscape material, and not the landscape material itself.
  • Bugfix: Fixed black spot / hole if all layers on a component use height blending and add to <= 0
  • Bugfix: Fixed crash in LowPassFilter when landscape smoothing brush is used with bDetailSmooth set and a very small brush size
  • Bugfix: There was a crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
    • Also hardened the landscape spline tool, although I don't believe it was crashing it could still try to render for a frame after the landscape was hidden/destroyed.
  • Bugfix: Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
  • Bugfix: Can now import landscapes over 8161 verts in size
  • Bugfix: Landscape would become offset and have corrupted blend weights when using the "change component size" tool if an edge row/column of landscape components had been deleted
  • Bugfix: Landscape component resize tool moved the landscape into the persistent level, and crashing if the persistent level was hidden
  • Bugfix: Landscape material instances were not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later
  • Bugfix: Landscape sculpting with a brush below a certain size and strength was not having any effect
  • Bugfix: Landscape smooth tool was doing strange things near cliffs
  • Bugfix: Various landscape editor materials (e.g. brushes) being easily obscured by grass or world-position-offset effects in the landscape material
  • Improved handling of erasing painted landscape layers
    • Erasing is now possible on vertices 100% painted with one layer, it will now fill with the next most dominant layer on the component
    • Note: Erasing is still impossible on components which are entirely painted with only a single layer - where there is no next most dominant layer on that component
  • Bugfix: More robust handling for landscape editor missing the "mouse up" message and getting stuck or crashing
Material Editor
  • New: Comment nodes added in the Material Editor now start with the focus on the editable text.
  • New: Landscape Layer Blend now works with Material Attributes
  • New: Material inputs are now greyed based on translucency lighting mode
  • New: Removed duplicate entries in the list of Material Functions for the Material Editor right-click context menu.
  • Bugfix: Corrected an issue with the Material Editor constantly updating node titles while a details slider is moved, leading to flickering.
  • Bugfix: Crash when selecting a vector and a scalar parameter in the Material Editor at the same time.
  • Bugfix: A group of material nodes containing a MaterialFunctionCall node would lose their connections when copy+pasted.
  • Bugfix: Changing a texture's Texture Group was not causing any dependent materials to be refreshed.
  • Bugfix: Fixed material errors using Custom nodes with LandscapeGrassOutput or other CustomOutput node types.
  • Bugfix: Parameters connected to LandscapeGrass or other CustomOutput nodes were not appearing in the Material Instance Constant editor
Matinee
  • Bugfix: The editor would hang when performing a viewport camera transition (by pressing F) while Matinee has a locked actor defined.
  • Bugfix: Movie scene captures where hardware mapped surfaces to memory of a different stride to the render target is fixed
  • Bugfix: Matinee audio tracks now properly start at the correct point when scrubbing.
  • Bugfix: Sound now correctly restarts in matinee preview when jumping back along timeline after reaching end.
Cascade
  • Bugfix: Fixed a bug that could cause a crash when exporting an emitter
Persona
  • New: Simplygon Reduction tool
    • Fixed so that you only apply your reduction setting to certain LOD only
    • Fixed so that it does regenerate with the setting that was there before.
    • Fixed so that it warns the users if you'd like to reduce mesh for imported mesh
    • Now displays in the material section if generated.
    • Allow BaseLOD to change - for example if you want to generate simplygon from LOD 1, you can using BaseLOD.
  • Bugfix: Fix for SkeletalMesh section highlighting when number of mesh materials is smaller than number of sections.
  • Bugfix: Crash in Persona when undoing duplication of state nodes.
  • Bugfix: Multiple crashes and instances of incorrect behavior fixed when undoing and redoing repeatedly while editing state machines.
  • Bugfix: Crash on undo when changing child animation blueprint overrides.
  • Bugfix: Crash when editing details of an animation object and losing focus to another window.
  • Bugfix: Crash when undoing changes to a socket property in a notify
  • Bugfix: Mesh reduction tool bugs resolved
    • Fixed so that it keeps the ScreenSize set before for the regenerated mesh reduction
    • Fixed so that materials created by Simplygon are to be assigned
  • Bugfix: Persona and PHaT viewport client can now handle changes in translucency when drawing physics constraints
  • Bugfix: The playrate in Persona will use the viewport worlds time dilation instead of managing time dilation separately
Static Mesh Editor
  • New: Cancelling at the prompt to change LOD Group in the Static Mesh Editor now no longer changes the LOD group.
  • New: Added feature to visually isolate meshes by material
    • Enabled via the 'Isolate' checkbox in the details panel for each material section (below Highlight option)
    • Resets when closing the Static Mesh Editor
  • Bugfix: Added code to restore the section info that is cached when reimporting a mesh so LOD section information is not lost on reimport.
  • Bugfix: Crash in Auto Convex Collision tool with very small or flat meshes.
  • Bugfix: 'Focus Viewport to Selection' in the Static Mesh Editor works properly now.
Source Control
  • New: If the assigned diff tool cannot be launched when diffing assets, the user is offered an opportunity to set a new default one.
  • New: Added SSL support to Perforce libraries for Visual Studio 2015.
  • Bugfix: Crash when submitting assets to source control
    • FEditorFileUtils::FindAllSubmittablePackageFiles now uses FPackageName::TryConvertFilenameToLongPackageName to avoid a crash if it finds a bad package path
  • Bugfix: Regression where packages were no longer notifying the user that they needed checkout (or were no longer being automatically checked out) when dirtied.
  • Bugfix: Assets pending delete were sometimes not showing up in the list of files to commit.
  • Bugfix: An issue where assets under SVN which had been made writable continually prompted the user for checkout when saving.
  • Bugfix: Git Plugin can find the git.exe binary installed on the Local AppData user directory
  • Bugfix: User*.ini configuration files are now excluded from source control submission.
World Browser
  • New: Added the facility to find levels in the content browser from the Level Editor Levels submenu, and in the World Browser context menu.
  • Fixed: Reduntant seek for world composition related data inside level package in a cooked builds
  • Fixed: World origin offset handling for UInterpToMovementComponent
  • Fixed: World origin rebasing now properly shifts hidden actors in the persistent level
Foliage
  • New: Added a check that the hierarchical instanced mesh "unbuilt bounds list" is the correct size, and fixed a bug where on undo the bounds list would be one entry larger than expected.
    • There was a crash in 4.10 where the bounds list was unexpectedly empty, we haven't yet seen it in 4.11 but hopefully the check will catch it if it is still happening.
  • Bugfix: Crash when alt-drag-duplicating a static mesh with attached foliage
  • Bugfix: SpeedTree foliage was flickering and there were other rendering glitches especially when the same SpeedTree was used both with foliage or instancing, and with regular StaticMeshActors.
  • Bugfix: Memory leak in instanced static mesh lightmap/shadowmap building
    • (Approx 200 MB leaked per 1 million instances every lighting build)
  • Bugfix: a bug in Foliage Type loading code when converting 4.9 content's bEnableStaticLighting setting to a Mobility value.
    • If your Foliage content from 4.9 was opened in 4.10 and then resaved, it's possible foliage with bEnableStaticLighting=true would have incorrectly had its Mobility setting set to Movable.
    • Static lighting would no longer work on the foliage unless the Mobility setting was changed back to Static. Please check your Foliage Type assets and set their mobility to Static if needed.
Cooker
  • New: Avoid cooker reloading ddc data at end of cook to generate asset registry. Reduces time to GenerateAssetRegistry.
  • New: Deterministic cooking: Added support for diffing cooked packages against a previously cooked package to help track down deterministic cooking issues.
  • New: Deterministic cooking: Added warning to resave material package when a dependent texture becomes out of date.
  • New: Deterministic cooking: Added warning to resave the source package of a blueprint when a child blueprint function / dependency is out of date.
  • New: Deterministic cooking: Changed libraryCategoriesText to EDITORONLY_DATA as it's not needed in cooked builds and was causing deterministic cooking issues with UMaterialFunctions.
  • New: Deterministic cooking: Fixed issue with distribution not having PostLoad called before initializing RawDistribution.
  • New: Deterministic cooking: Stopped kismet enums from re-initializing FText from strings.
  • New: Moved ogg size tag from the asset registry as it causes bulk data to be loaded unnecessarily.
  • New: Precache shaders for platform in editor has max inflight jobs, to keep editor responsive while cooking
    • Added commandline options to cook a single package from the editor / commandlet for debugging purposes
  • New: Reduced peak memory when cooking by clearing out already processed textures / audio data.
  • New: Stopped default materials from being included in cooked content when they are not required.
  • New: Deterministic cooking: Distribution float was missing it's postload call before initializing Raw distribution, causing errors in min / max also causing deterministic cooking issues.
  • New: Deterministic cooking: Removed AssetImportData from the cooked builds.
  • New: Deterministic cooking: stopped kismet enums from reinitializing FText from strings.
  • New: Deterministic issue: Moved LibraryCategoriesText into editor only data as it's not needed in cooked builds.
  • Bugfix: File->Cook option in the editor now receives all options specified in project settings.
  • Bugfix: Iterative cooking was not working if the Uproject name was different to the project name.
  • Bugfix: "AllMaps" was being included for cook when providing a map on the command-line.
  • Bugfix: There was a hang when building audio if audio was not in DDC.
  • Bugfix: Multiprocess cooking was resaving asset registry multiple times.
  • Bugfix: Various issues that were only showing up during the process of packaging a project from the editor are now resolved.
  • Bugfix: Stopped packages which failed to cook from being saved in the asset regsitry.

Gameplay Framework

  • New: Added some extra keywords to Delay and RetriggerableDelay in KismetSystemLibrary.
  • New: It is now possible to resize game windows in non fullscreen mode for Windows.
  • New: Added support for replicated generic events to deliver a vector payload.
  • New: There is now a "ListTimers" console command, which lists all currently active Timers to the log output.
  • New: Added "bTickBeforeOwner" to MovementComponent to control whether a tick prereq is set for the owner.
    • Default is true since, in most cases, a ticking Pawn would need the latest location from the component update. Disabling this can get back some performance when the order doesn't matter.
  • New: Added "set controller" keywords to Possess and UnPossess in Controller classes.
  • New: Added GetSquaredDistanceTo method to AActor to get the squared distance between two actors.
  • New: Added an OnLanded function delegate to the Character class for triggering logic based on CharacterMovementComponent landing.
  • New: Added DrawTriangleUsingVertexColor function in FTriangleRenderer which takes the color from the vertices for the draw color.
    • Canvas Triangle items will now use the vertex color by default (since there was previously no other way of passing the color to them).
  • New: Added extra methods to Spline Component for finding the closest point on the spline to a given world location.
  • New: Added improved title text to UAbilitySystemComponent debug display - contains category of debug information along with avatar and owner info and their respective roles.
  • New: Added KeyState accessor function to UPlayerInput.
  • New: Added new p.VisualizeMovement cvar for showing in-world debug drawing of CharacterMovementComponent state (velocity and acceleration text and arrows show up over character heads when enabled).
  • New: Added UGameplayCueManager::ShouldAsyncLoadObjectLibrariesAtStart which can be overridden in game-specific derived classes to determine if async object library loads should be triggered on creation.
  • New: Changed SplineMeshActor so that its SplineMeshComponent defaults to allowing editing per-instance.
  • New: Eliminated overhead of the HUD HitBox system when not being used.
  • New: FPS Chart goes to 120 FPS now
  • New: GameplayEffect GrantedAbilities respect Effect inhibition (ongoing tag requirements) - abilities are applied/removed/cancelled based on whether the ongoing tags are met or not
    • Previously, if application tags passed, target would have the granted ability for full duration of effect application, even if the ongoing tags weren't met
  • New: Implementation of Anim Notifies for Play Sound and Spawn Particle Effect moved from blueprint to native.
  • New: Optimized Matinee Actors no longer tick unless playing
  • New: Optimized component transform updates by adding bWantsOnUpdateTransform, which controls calling OnUpdateTransform virtual
  • New: Particles: added "bAutoManageAttachment" option to ParticleSystemComponent such that it can automatically attach to a component when activated and detach when deactivated.
    • During registration this will also detach the component from any AttachParent previously assigned.
    • bAutoManageAttachment avoids initial attachment unless the system is set to auto activate.
  • New: Reduced overhead related to determining which streaming levels should be loaded and visible.
  • New: Some extra functions to InterpToMovementComponent
    • Added function to reset the component after its been stopped and allow it to restart.
    • Added function to initialize the control points array after points have been added (This allows points to be added after BeginPlay has been called)
  • New: SplineComponent: Added RemoveSplinePoint() and AddSplinePointAtIndex() functions that can also be called from a Blueprint.
  • New: The controller light color can now be set from blueprints.
  • New: Touch inputs can now be bound used with functions such as GetInputKeyTimeDown, IsKeyDown, etc. from blueprints.
  • New: UTextRenderComponent and UFont will now not be loaded on dedicated servers - watch out for NULL references!
  • 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.
  • 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.
  • Bugfix: Crash fix to PlayerCameraManager crashing on empty entries in DefaultModifiers array.
  • Bugfix: Crash fix when player stands in a PhysicsVolume that streams out. PrimitiveComponents with bShouldUpdatePhysicsVolume are prevented from continuing to reference PhysicsVolumes in a level that is streamed out.
  • Bugfix: Crash fix to changing the mobility of a component.
  • Bugfix: Crash fix when using open console command in PIE to travel to level, or a level that has a sub-level, that is also a sub-level of the open editor world.
  • Bugfix: Crash fix to CheckStillInWorld() after Actor has been destroyed or is not in the world.
  • Bugfix: Crash fix to PainCausingVolume when streamed out while objects are still overlapping.
  • Bugfix: Crash fix in projects where the project-specified game instance class does not exist. Instead, an error will be logged and the game will fall back to the default game instance class.
  • Bugfix: Crash fix to GameSession in the case that PlayerStateClass is null.
  • Bugfix: CameraShakes with OscillationDuration of -1 will now shake indefinitely, as intended.
  • Bugfix: Icons in Windows task bar are set correctly for blueprint Windows games.
  • Bugfix: Duplicate overlap events no longer run when moving a component during an overlap event that involves that component.
  • Bugfix: Actors and Components with Primary Tick Functions that do not start with tick enabled will no longer fail to start ticking when instructed to do so.
  • Bugfix: Removed multiple bugs related to creating more than one UWorld within one game engine instance.
    • Using multiple UWorlds with UGameEngine is still very experimental, and your mileage may vary.
  • Bugfix: Fixed issues playing CameraAnims that don't have a movement track.
  • Bugfix: Visualization sub-components for camera component could end up duplicated and one version would be in the incorrect location.
  • Spectator pawn movement now accounts for per-actor time dilation.
  • Bugfix: Fixed USplineComponent::GetInputKeyAtDistanceAlongSpline for closed loops so that the correct value is returned when the input key lies on the closing segment of the loop.
  • Bugfix: Level streaming will now correctly handle "package async load failed" event
  • Bugfix: GameInstance objects will no longer be leaked when exiting Play In Editor due to referenced objects preventing garbage collection.
    • When PIE ends all Objects outered to the GameInstance are now marked pending kill in the same way that Objects outered to the World are.
  • Bugfix: GetInputKeyTimeDown now returns correct value for Touch inputs.
  • Bugfix: Changing the values of the Main and Alt Input Keys for a Touch Interface now works correctly.
  • Bugfix: Actor destruction will no longer output warnings about moving a component with a non-movable mobility.
  • Bugfix: Actors being spawned during another Actors' BeginPlay during map load will no longer cause ensure() to be called.
  • Bugfix: Component overlaps now always end when a component is destroyed.
  • Bugfix: High res screenshot will not break focus in full screen games.
  • Bugfix: Incorrect Begin/End overlap events are no longer run when BeginOverlap is used to disable collision or overlap events on the other object.
  • Bugfix: Actors/Components will no longer tick until BeginPlay() has been called when in a game world. This was an issue in some situations in network games.
    • Actors may opt out of this by setting bAllowTickBeforeBeginPlay to true. APlayerController, AInfo and derived classes (AGameMode, AWorldSettings, etc) enable this by default because they typically have match start up logic.
    • Components with no Actor owner will start ticking immediately before the world begins play. This should be rare however.
    • Editor worlds don't "begin play", so ticking begins immediately in those.
  • Bugfix: GameplayCues will no longer be invoked from ActiveGameplayEffectsContainer::NetDeltaSerialize when there are unmapped objects. This was causing GameplayCues to be invoked with incomplete information in their EffectContext.
  • Bugfix: Timers that are set and paused in the same frame now keep track of their remaining time correctly.
  • Null pointer checks on LocalPlayer->ViewportClient have been added to PlayerController.cpp.
  • bShowDebugForReticleTarget in the HUD is no longer static.
  • AInfo's root component in editor builds is now set to the sprite component. This avoids AInfo subclasses generating warnings when going into PIE.
  • ChildActors now inherit their visibility from the owning component and actor visibility.
  • 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. This prevents axes from using the key in lower priority input components in future frames.
  • Lighting and vertex coloring now persists correctly for Child Actor Components.
  • Memory corruption no longer occurs due to improper clean up of GameplayDebuggingReplicator
  • Network clients now sync physics simulation state (on/off) from the server if bReplicateMovement is true.
  • OnComponentDestroyed now ensures and logs an error about the inconsistency instead of crashing in the case a component is in the AttachChildren array, but has no AttachParent.
  • Optimized FURL construction when passed a short map name by trying the asset registry before resorting to a disc search. This can save 10-20 seconds when issuing an "open mapname" console command on some platforms.
  • OnComponentBeginOverlap has been prevented from triggering more than once in some cases, usually when the event tries to disable collision or overlaps.
  • DestroyActor calls will no longer recurse.
  • Removed allocations in player input system.
  • In USceneComponent, AttachTo() now returns a bool indicating if attachment is successful (or if already attached). OnRegister() now clears AttachParent and AttachSocketName if the AttachTo() call fails.
    • Fixes AttachParent still being set when initialized in a constructor but when the attachment is invalid.
  • When destroying a component, attached children will now remain correctly at the same world position.
  • Whether or not to draw subtitles will now take immediate effect rather than waiting for the next sound to play.
  • Improved error message when SpawnActor fails due to the spawned actor being marked pending kill.

Learning Resources

  • New: Clarified some comparison functions (IsZero, IsNearlyZero, Equals) in FRotator to explain that they compare as orientations, not other interpretations such as rotational speed, winding, etc.
Sample Content
  • Bugfix: Old file was checked out. Had to revert.

Localization

  • New: Added ability to opt out of adding reference comments as extracted comments when exporting localization to PO files.
  • New: Added new setting for localization import/export in order to persist comments in PO files that aren't generated from manifest/archive.
  • 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: Improved the text gather from assets
    • We now gather the texts from Blueprints using their generated class and script bytecode. This avoids polluting a game gather with all of the editor-only texts that come from the K2 nodes in the blueprint asset.
    • The objects within a package are now gathered recursively, as this correctly honors the editor-only flags used by the containing object (this both recurses by walking properties - to detect editor-only properties - but also by gathering all of the inner objects at each level).
    • We now recurse through and gather from map properties.
    • Fixed texts of differing case being combined when gathering from assets.
    • Editor tutorial BPs are now gathered as as editor-only.
  • New: Overall improved Editor Region & Language settings page.
  • New: Blueprint text pins now generate a new key each time they are set, rather than use a deterministic key
    • This matches what text properties do, and removes the possibility of having a duplicate key (eg, if you serialized some data from a BP pin, changed the BP pin text, and then reloaded the data).
  • Bugfix: FTextLocalizationManager::UpdateFromLocalizationResource was discarding the data it had loaded
  • Bugfix: Crash on the Chinese version of Windows version when changing the editor language
  • Bugfix: Some FText instances were not rebuilding correctly when the culture is changed
  • Bugfix: The culture display name was not updating when the culture was changed
  • Bugfix: The Category Names of Components in blueprints are no longer gathered for localization when the "ShouldGatherEditorOnlyData" setting is false.
  • Bugfix: The editor now loads all available cultures
    • It only used to load EFIGSCJK culture data, which prevented you being able to localize for other cultures.
  • Bugfix: The spoken text of dialogue wave assets are now gathered for localization under the root localization namespace, rather than a "Dialogue" namespace.
  • Bugfix: The translation editor now properly supports viewing and editing the individual translations for different contexts of a dialogue wave's spoken text.
  • Updated PO export/import logic to use generate msgctxt based on namespace and, conditionally, key (only if key metadata is present) and added info metadata as extracted comments.

Networking

  • New: Added ability to force various replay failure conditions. Use demo.ForceFailure to enable. 1 Will force failure during initial call to start streaming. 2 will simulate load map failure.
  • New: Added an initial implementation of an InMemoryNetworkReplayStreaming module.
    • Unlike NullNetworkReplayStreaming and HttpNetworkReplayStreaming, this implementation doesn't rely on the disk or network, and as a result is generally much faster.
    • It is intended to be used for specific cases where a local, transient replay would be useful.
  • New: Added initial support for game clients to record replays. Previously replay recording was only supported on servers.
    • A client replay will only record the client's view of the world, so actors that are not considered network relevant to the client will not be present in the replay.
    • Note that RPCs are not currently supported in client replays.
  • New: Added new Lobby module for a server to host a lobby via beacons before actually connecting to the server itself. Actor replication and classes similar to AGameMode (ALobbyBeaconHost), AGameState (ALobbyBeaconState), APlayerController (ALobbyBeaconClient), and APlayerState(ALobbyBeaconPlayerState) added.
  • New: Added -REPLAY= cmdline option, which allows you to play a replay from the cmdline
  • New: Added server network stats that measure in/out bandwidth per client connection (min among clients, max among clients, average among clients).
  • New: Added task system to replay systems internals for more code maintainability, and stability.
  • New: Allow ping to subtract server and client frame time from ping to try and predict what true cloud ping is
    • Set net.PingExcludeFrameTime to 1 to test this out
  • New: Better networking logging format. Example: [2015.08.03-21.06.12:006][285]LogNet: UChannel::CleanUp: ChIndex == 0. Closing connection. [UChannel] ChIndex: 0, Closing: 0 [UNetConnection] RemoteAddr: x.x.x.x:xxxx, Name: IpConnection_1, Driver: IpNetDriver_3 IpNetDriver_3, Server: YES, PC: NULL, Owner: BeaconClient_0
  • New: Changed the stats port format to be "HTTP-like" (just enough to be compatible with curl/wget/etc)
    • stubbed out a super basic framework for being able to issue exec commands via this port (not open by default and binds only to loopback)
  • New: Custom events are now supported in demo replays. An event has custom metadata and data and is tied to a timestamp in the replay.
  • New: Allow for servers to create multiple voice data channels.
  • New: Initial Oodle support as a plug-in added. This is work in progress, and will improve over time.
  • New: Lots of networking profiler improvements:
    • Restore chart position when loading new charts after applying filters
    • Draw last selected range as a transparent red overlay to remind you where selection is after zooming out/scrolling
    • Re-calculate selected range when filters are applied
    • Fixed more anchoring issues when maximizing window
    • Removed default chart series from designer since we add these programmatically now
    • Added context menu strip for future right click capabilities to be added
    • Differentiating replicated actor count from total actor count to give a sense of waste
    • Added "hz" to end of count/s items in summary * Added "Bytes/s" when representing bytes per second in summary
    • Added tabs for summary, actor perf, and details
    • Actor perf view how uses a list view, with actual columns you can sort by
    • Added combo box for search filters that fill in automatically fill in with searchable data, and supports auto-complete
    • Added "Waste" columns to actor perf view, which shows how much an actor updates vs actually replicates something
    • Add KB/s in actor details view + more anchoring fixes
    • Allow loading partial networking profiles (so you no longer have to force a level change to save the profile)
  • New: Messaging: Implemented interceptor tracing
  • New: Minor improvement to the setup/tick logic of the perf counter module query port implementation. Should prevent "connection not ready" timeout issues that occur sporadically.
  • New: Optimized networking CPU time somewhat by not ticking network channels that don't need to be ticked.
  • New: The NullNetworkReplayStreaming implementation can now play back live games. This is useful for testing with multiple instances of the game running on the same machine.
  • New: The replay streamer implementation module to use can now be overridden at runtime.
    • You can pass the name of the module to use into FNetworkReplayStreaming::GetFactory, or you can use the "ReplayStreamerOverride=" URL option. The URL option is useful when combined with the "DemoRec" URL option.
    • If neither of these overrides is provided, the implementation will fall back to the one defined by the "DefaultFactoryName" in the Engine configuration file, as before.
  • New: The replay streaming system can now scrub to a new time while playback is paused. Try it out in ShooterGame!
  • New: UdpMessaging: Added console commands for basic diagnostics
  • New: UdpMessaging: Added tunnel connection stats to diagnostics command
  • New: Allow replay chunks to request downloads even if something else is in-flight or pending
  • Bugfix: Added missing socket error type ENODEV
  • Bugfix: Removed bug in FNetViewer::FNetViewer that could cause the view location to be at (0,0,0) when nothing was hit which would then cause the net relevancy distance check to fail.
  • Bugfix: Character movement component now has better smoothing when going up/down terrain in replays
  • Bugfix: Disconnect instead of assert when channels receive reliable packets before fully opening (this can happen from malicious clients)
  • Bugfix: A fatal error if a replication notify function couldn't be found at runtime. Now a warning will be logged and the notify function will simply be skipped.
  • Bugfix: Replays were not recording at intended framerate
  • Bugfix: RPC's weren't being sent to connections + fixes warning spam where rpc's were getting rejected
  • Bugfix: Issues when replay scrubbing was aborted mid scrub
  • Bugfix Crash that happens when server stops recording replays
  • Bugfix: Crashwhen loading older replays
  • Bugfix: Bug prevented HTTP retries from working. TimeSinceLastResponse was not getting reset with ElapsedTime so once a request timed out it would always time out N more times until the retry sys gives up
  • Bugfix: Bug caused the incorrect IRepChangedPropertyTracker to be passed to the UActorComponent::PreReplication function during replay recording. The tracker is now correctly looked up in the demo net driver instead of the game net driver.
  • Bugfix: Crash occured when many static meshes set to replicate movement were placed in a level.
  • Bugfix: Crashed when the server stops recording a replay.
  • Bugfix: Fixed a race condition in UdpMessaging
  • Bugfix: Replay recording could cause large portions of "dead air" to be saved into the replay if there were slow frames during recording.
  • Bugfix: An issue caused the output log to spam "no owning connection" warnings when a client used the "ToggleDebugCamera" console command.
  • Bugfix: An issue occurred while connecting a client to a server while in Play In Editor (PIE) mode during runtime might fail and instead load the default map. The travel to the server's world should now succeed.
  • Bugfix: FNetViewer::FNetViewer could cause the view location to be at (0,0,0) when nothing was hit which would then cause the net relevancy distance check to fail.
  • Bugfix: Incorrect receive buffer size in UdpSocketReceiver
  • Bugfix: If the server detected a malicious packet, the connection would then remain open until session manually stopped
  • Bugfix: Fixed typo in property tooltip and comments
  • Bugfix: Lots of cleanup and improvements to how we smooth out character movement in replay playback.
  • Bugfix: Lowered the verbosity of networking logs involving doubly acked packets, and out of sequence packets (this is completely normal when there is packet loss)
  • Bugfix: Messaging: Fixed message bridge not unregistering remote endpoints on shutdown
  • Bugfix: Networking: Processing UDP receive buffer only if bytes received.
  • Bugfix: Ping calculation fixes:
    • Fix bug where extra acks were contributing to ping.
    • Call FlushNet on frames where SendAck was called.
    • Use wall time when calculating pings.
    • Stop subtracting half of frame time from ping.
  • Bugfix: Properly go back to default map, and recover from error gracefully when replay level fails to load.
  • Bugfix: Replay scrubbing stability fixes.
  • Bugfix: Sockets: Setting number of bytes read to zero on failure.
  • Bugfix: Temporarily disable seamless travel in PIE when using single process until proper fix comes in (it results in crash otherwise).
  • Bugfix: UdpMessaging: Always forcing service restart on settings changes.
  • Bugfix: UdpMessaging: Avoid an extra copy of outbound message data.
  • Bugfix: UdpMessaging: Fixed a race condition during message serialization.
  • Bugfix: When replay events fail to download, it's no longer catastrophic (won't cancel playing the replay), will return error instead.

Online

  • New: Added a function to the replay streamer to retrieve the custom event data for a specific event.
  • New: Added a reconnecting state for parties.
  • New: Added delegates that report download progress for OnlineTitleInterface's reading of files from a remote server
  • New: Added functionality to the network replay streamer to be able to search for any events from a specified group.
  • New: A