はじめに
年末年始で思ってたよりも時間が取れたので、
2019年内にリリースされたUE4の各バージョン(UE4.22, 23, 24)を復習。
全部はしない上にメモ代わりなので雑な文章になると思います。ご了承くださいましまし
docs.unrealengine.com
メッシュ描画パイプライン リファクタリング
新しいメッシュ描画パイプラインでは、静的シーンにあるエレメントの描画情報が以前よりも積極的にキャッシュされるようになりました。そして、可能な場合は、自動インスタンス化によって描画呼び出しがマージされます。これにより、メッシュ パスの新しい実装で、コードの行数を 4〜6 倍少なくすることができます。
公式ドキュメント
メッシュ描画パイプライン | Unreal Engine ドキュメント
Unreal Engine 4.22 のメッシュ描画パイプライン変換ガイド | Unreal Engine ドキュメント
Auto Instancingについて
可能な場合は自動的にDraw CallをまとめることでCPU負荷を削減する機能
- 異なるパラメータを使っていてもAuto Instancing対象にする方法について
- UE4.23でモバイルにも。ただし不具合あり
New: Added experimental support for auto-instancing on mobile, which is disabled by default. It can be enabled with the command "r.Mobile.SupportGPUScene" in DefaultEngine.ini. It requires Metal, Android Vulkan or OpenGL ES3.1.
- UE4.24で正式対応
Unreal Engine 4.24 のリリース ノート | Unreal Engine ドキュメント
r.Mobile.SupportGPUScene=1
r.Mobile.UseGPUSceneTexture=1
モバイルの自動インスタンス化を使用して出荷する前に、プロジェクトのパフォーマンスをプロファイルして、パフォーマンスが大幅に向上するかどうかを確認することをお勧めします。自動インスタンス化は、GPU にバインドされたゲームではなく、CPU にバインドされたゲームで最も効果的であることがわかっています。
- UNREAL FEST EAST 2019講演資料でも紹介 (p116より)
www.youtube.com
ライブ コーディング (Live++)
すべてのデベロッパーが Unreal Engine プロジェクトで Molecular Matters の Live++ を使用できるようにそのライセンスを取得し、それを新しい ライブ コーディング 機能として統合しました。ライブ コーディングを使用すると、開発環境で C++ コードを変更し、それを実行中のエディタまたはスタンドアロン ゲームに数秒でコンパイルしてパッチを適用できます。従来のホット リロードのメカニズムとは異なり、ライブ コーディングはオブジェクトの再インスタンス化について特別の考慮を必要とせずに個々の機能にパッチを適用するため、大規模プロジェクトでの信頼性とスケーラビリティが大幅に向上します。
- UE4.24時点でもExperimental
-
- コンソールコマンド LiveCoding.Compile からコンパイルを開始できるように
いくつか不具合も修正されているので、ライブコーティングを多用している方はUE4.23に上げてみるのがいいかも
Composure によるリアルタイム コンポジット
Composure のコンポジット システムが大幅に改善され、Unreal Engine 内で直接、画像、ビデオ フィード、CG エレメントを合成することがこれまで以上に簡単になりました。
- 公式ドキュメント
Composure によるリアルタイム コンポジット | Unreal Engine ドキュメント
- UE4.23で機能追加。Composureサンプルも最新のフローに更新
- AlphaHoldOut ブレンド モード - この新しいマテリアル ブレンド モードを使用すると、オブジェクトがマテリアル内のアルファを隠し、その後ろのオブジェクトに穴を開けます。
- カラー グレーディング - Composure は、浮動小数点ポストプロセス ルックアップ テーブル (LUT) を使用したカラー グレーディングとホワイトバランスをサポートするようになりました。
- Composure レイヤーのシーン カメラからのポストプロセス パラメータの継承 - Composure レイヤーはシーン カメラからポスト プロセス パラメータを継承できるようになり、色補正コントロールを各 CG レイヤーで個別に有効にできるようになりました。
- クイックスタート
リアルタイム コンポジット クイック スタート | Unreal Engine ドキュメント
シーケンサーによるリアルタイム コンポジット | Unreal Engine ドキュメント
メモ:
Key Colorsのピッカーを押すと何故かデフォルトの緑っぽいテクスチャが出てきてしまうのに躓いたけど、media_plateを再選択したらちゃんとMedia Sourceで指定した絵が出てくるようになった
TimeSynth
TimeSynth は、サウンド デザイナーへ音声クリップのサンプルベースの正確な開始、停止、連結を提供することに重点を置いた、新しいオーディオ コンポーネントです。TimeSynth で、インタラクティブな音楽アプリケーションに不可欠な、正確で同期的なイベント オーディオとイベント キューが可能になります。
- 残念ながら UE4.24でもベータ。
- 超わかりやすい解説記事(感謝…)
[UE4]TimeSynthでBGMに同期した演出を作る|株式会社ヒストリア
Time Synth Live Streaming Demo メモ|床|note
- イントロループをTimeSynthで実装しているサンプル
Unreal Engine Livestream - TimeSynth in Blueprints - April 25 - Live from HQ - Unreal Engine Forums
- 見るべきポイント
DoriansRun_Intro_Lo
DoriansRun_Intro_Hi
DoriansRun_MainLoop_Lo
DoriansRun_MainLoop_Hi
CompletedDoriansRunActor の StartMusic, OnBarEvent
別記事にまとめてみました
UE4標準のTimeSynth機能を使ってイントロループを実装してみた - ぼっちプログラマのメモ
シーケンサ内のレイヤー化されたアニメーション ワークフロー
↑リリースノートにある動画、Key This Sectionの使い方が間違ってる…
UE4.22 リリースノートの動画で「Key This Section」を知ったけど、改めて見るとその動画での使い方間違ってた。
— おかず (@pafuhana1213) 2019年12月29日
複数のセクションがある場合、外部から自動的にキーを追加する際にどのセクションを対象にするかを制御するための機能なのでこういう使い方が正しい #UE4 #UE4Study pic.twitter.com/8ch9knGZSr
問題の動画はUE4.22リリースノート「シーケンサ内のレイヤー化されたアニメーション ワークフロー」にあるこちら。KeyThisSection と 手動でキーを打つのは全く関係ない…だから当時見てもシックリこなかったのか…https://t.co/0eNPO5dLV3
— おかず (@pafuhana1213) 2019年12月29日
アニメーションバジェットシステム
新しい Anim Budgeter ツールを使用すると、プラットフォームごとに固定のアニメーションに割り当てる時間 (ゲームスレッドで実行する作業のミリ秒) を設定できます。すべて割り当てることが可能か、実行した作業を削減する必要があるかを判定します。このシステムは、アニメーション更新 にかかる総コストを測定し、1 つの作業単位のコストを計算することによって機能します。割り当てに適合させるため処理を減らす必要がある場合は、重要度に基づいていくつかのエリアをターゲットにして削減処理を行います。つまり、ティックを停止してマスター ポーズ コンポーネントを使用したり、低いレートのアップデートを行ったり、アップデート間の補間の実行 (の判断) などを行います。目的は、固定 (ゲーム スレッド) の割り当て内に収まるように負荷を動的に調整することです。
- 公式ドキュメント
アニメーション共有プラグイン
新しく Animation Sharing プラグインが追加されました。これにより、多数のアクタの使用時に要求される全体のアニメーション作業量を減らすことができます。これは、マスター ポーズ コンポーネントシステムをベースにしている一方で、ブレンドと付加的なアニメーションのステートを追加しています。アニメーション ステートは、アニメーション インスタンスが評価されるバケットです。結果のポーズは、バケットのすべての子コンポーネント部分に転送されます。システムの内訳については下の図を参照してください。
- 公式ドキュメント
サブシステム
サブシステムは管理されたライフタイムを持つ自動的にインスタンス化されたクラスです。このクラスは、ブループリントと Python を同時にそのまま使用せず、複雑なエンジン クラスの変更または上書きをすることなく、拡張ポイントを簡単に使用できます。
- 公式ドキュメント
Subsystems | Unreal Engine Documentation
Programming Subsystems | Unreal Engine ドキュメント
GameInstanceSubSystem継承のクラスを作って…BlueprintCallableなテスト関数を作って…使おうとすると…おお、たしかにキャストいらず! #UE4 #Ue4Study pic.twitter.com/jyp3DITr41
— おかず (@pafuhana1213) 2019年12月29日
順次更新