[GTMF]2019年上半期まとめ。Unreal Engine 4のアップデート情報レポート
Unreal Engine 4は米Epic Gamesの製品だが,このエンジンの日本国内の展開については日本法人のEpic Games Japanが担当している。最近では日本語によるサポートや日本語ドキュメントの充実化が図られ,そのサポート力も高く評価されるようになっている。最近の国内ゲームスタジオの採用事例増加傾向はUE4の高機能ぶりはもちろんだが,そのあたりが高く評価されてきたことにも起因しているのだろう。
さて,GTMF 2019において,そのEpic Games Japanは,自社ゲームエンジンUnreal Engine 4の最新動向を報告する「Unreal Engine 4の2019年上半期アップデート情報まとめ」と題したセッションを行った。登壇したのはEpic Games JapanでSupport Engineerを担当する澤田祐太朗氏である。
Unreal Engine 4.22の新機能(1)〜リアルタイムレイトレーシングへの対応へ
2019年4月にリリースされた最新版Unreal Engine 4.22(UE4.22)に実験的機能(Early Access機能。いわゆるβ版的な機能)としてリアルタイムレイトレーシング(DirectX Raytracing)への対応が追加された。このUE4.22でリアルタイムレイトレーシング技術を活用した実例として,映像制作スタジオのGoodbye KansasとDeep Forestが共同制作した映像作品「Troll」があり,今回のセッションでもこの映像が上映されている。
澤田氏はUE4.22でリアルタイムレイトレーシングを利用するための手順を紹介した。
この機能を試すためには,Windows 10 Ocober 2018 Updateを適用したWindows 10環境と,DirectX Raytracing(DXR)対応GPUが必要になる。UE4.22のDXR機能は,NVIDIAのPascal世代以降のRTコア非搭載GeForceでも動作はするが,澤田氏は「積極的にこの機能を活用して実験などをしたいのであればTuring世代以降のRTコア搭載のGeForce RTXシリーズの使用をお勧めする」と述べていた。
利用するためには[Project Settings]-[Platforms]-[Windows]-[Default RHI]を[DirectX12]に設定し,[Project Settings]-[Engine]-[Rendering]の[Ray Tracig]と,同じく[Project Settings]-[Engine]-[Rendering]の[Support Compute Skincache]を有効化する必要がある。
Support Compute Skincacheは,レイトレーシングパイプライン実行中に3Dモデルのアニメーション処理を行うと効率が悪いため,事前に処理してキャッシュしておく設定になる。これはレイトレーシングでは反復的に同じ3Dモデルを参照することがあるため,その都度アニメーションの計算をしていては冗長すぎるからである。
これらの設定を行うだけで,描画にレイトレーシングを利用できるようになる。とくに鏡面反射による鏡像(リフレクション)表現に説得力が増すので,一度体験してみてほしいとのことであった。
なお,澤田氏は,日本の有志達によるUE4.22のリアルタイムレイトレーシング技術の利用体験報告会「UE4 Raytracing Night Tokyo」の資料を紹介し,非常に有益な情報がまとまっているのでUE4.22でリアルタイムレイトレーシング技術の実験を行う際には一読することを勧めていた。
Unreal Engine 4.22の新機能(2)〜レンダリングの最適化
UE4.22では,「Mesh Drawing Pipeline」が改善され,Draw Callの量が大幅に削減できることとなった。
これは,3Dモデル描画の際のコマンドをキャッシュすることで高効率に再利用したり,複数の描画コマンドを併合することで描画オーバーヘッドを低減させる最適化になる。
澤田氏によれば,UE4のシネマティックエディタ「Sequencer」のサンプルプロジェクトを先代UE4.21と最新UE4.22とで実行させ,そのパフォーマンスを比較してみると,UE4.22ではDraw Callの数が半分以下に削減されたとのことである。
C++イテレーション高速化
UE4.22では,Molecular MattersのC++用のホットリロード&ライブコーディング支援用のミドルウェア「Live++」が統合され,これを実験的機能として無料で利用できるようになった。
開発対象のプログラムが実行中であっても,オンザフライでコーディングを続行できるライブコーディングは「コンパイル→実行を試しては調整」の繰り返し,いわゆるイテレーションサイクルの高速化につながる。
ただ,すでにUE4にはすでにホットリロードという同種の機能が実装されていた。結論から言ってしまえば,このLive++のほうがパフォーマンスが良いため,採用となったようである。Live++は,UnrealBuildToolとUnrealHeaderToolへの最適化が施されており,C++コードのフルコンパイルおよびインクリメンタルビルドの双方が劇的に高速化されるという。
澤田氏は,コメント化されているプログラム中の1行を非コメント化して有効コードとして保存して,これがインクリメンタルビルドされて実行中のプログラムに反映されるまでの所要時間を計測する実験の様子を見せた。
その結果は,もともとUE4が実装していたホットリロード機能で7.53秒,対してLive++が5.09秒となったという。
この機能の使用法は簡単で,[Editor Preferences]-[Live Coding]の[Enable Live Coding]をチェックして有効化するだけ。あとは,Visual Studioでコーディングしたあと[Ctrl]+[Alt]+[F11]でDebug.StepIntoCurrentProcessを実行すればリビルドされて結果が実行中のプログラムに反映される。
澤田氏によれば,UE4のEngine側のコアモジュールやPluginのコードまでを適用対象含めると動作が不安定になる点が既知の問題として把握されているそうだ。現在は実験的な機能なので気を付けてほしいとのことである。
3Dモデルのポリゴン数削減機能
UE4.22では,ボーンを内包する3Dモデルである「Skeltal Mesh」の低ポリゴン化機能「Skeltal Mesh Reduction」に対応した。従来はボーンなしの「Static Mesh」のみの低減化に対応していたが,ボーンあり3Dモデルに対応した新機能ということになる。これにより,部位の動きを伴う動的キャラクターのLoD(Level of Detail)システムの導入の品質や効率が向上できる。
使いは[LOD Settings]-[Number of LODs]で最大LoDレベル数を設定するところから始まり,以降は,生成されることとなる各LODレベルの3Dモデルに対する詳細設定(カスタマイズ)をしていく流れとなる。
カスタマイズでは「どういう条件下でこのLoOレベルの3Dモデルを採択するか」といった条件の設定から,「何割くらいの低ポリゴン化するか」といった3Dモデル形状に関する設定,低ポリゴン化した際に「どのボーンを残しやすくするか」「どのボーンを削除しやすくするか」といったボーン優先度の設定などが行え,かなり詳細に調整が行えるようになっている。
LoDシステムはうまく調整しないと,LODレベルを切り換えて描画した際に形状変化がプレイヤーにバレてしまう「ポッピング」現象が懸念されるが,それを低減させることに関連する設定「Lock Mesh Edge」が興味深い。
これは,3Dモデルの末端(Edge)の形状はなるべく温存するように低ポリゴン化する設定になる。指を伴う手やそのキャラクターを特徴付けている輪郭部分などについてこの設定を行うと,ポッピング抑止につながるというわけである。
なお,複数のプラットフォームでリリースする予定のゲームなどでは,GPU性能やメモリ容量などの限界で,LOD設計が異なってくる場合もある。そこで,UE4.22ではUE4が対応している各ハードウェアごとに個別に最低LoD(MiniLOD)レベルなどを設定できるようにしたそうだ。
アニメーション周りの機能追加
UE4.22のSkeltal Mesh Componentにおいて,アニメーションの更新頻度をカスタマイズできる「Animation Budget Allocator」機能が新設された。
最近では,ゾンビの大軍表現や,スポーツゲームにおける大量の観衆表現など,動的キャラクターがシーン内で同時に多数出現する描写のゲームが少なくないが,この機能はそうした表現に効いてくるものになる。
例えば,近景のキャラクターはゲームメカニクスに大きく絡んでくるため,敵も味方も60fpsでアニメーションさせるが,遠方のキャラクターはそれほど重要度が高くないので30fpsでアニメーションさせれば,CPU/GPUのパフォーマンスを節約できることになる。
今のたとえ話は,近景60fpsと遠景30fpsの2段階のアニメーション更新頻度とした事例だが,Animation Budget Allocatorでは,視点から離れれば離れるほど多段階にアニメーションの更新頻度を下げる(つまり間引く)といったこともでき,あるいは遠景であってもゲーム表現として重要なアニメーションについては更新頻度を下げない(間引かない)といった制御も行える。
また,アニメーションの更新頻度の制御に関して,設定値以上には間引かない「a.Budget.MaxTickRate」や,アニメーションシステム処理の総予算上限をミリ秒で設定する「a.Budget.BudgetMs」といったパラメータが利用できる。前者は過剰なアニメーションを間引きを抑止する効果があり,後者はCPUやGPU性能の高い環境/プラットフォームであればあるほどアニメーションの間引きが低減される効果がある。
この機能を利用するには[Plugins]-[Programming]で[Animation Budget Allocator]を有効化し,Game Modeなどで[Enable Animation Budget]ノードを実行する必要がある。
そしてこのシステムで制御したい3Dモデル(Skeltal Mesh)側の設定として,Skeltal Mesh Componentをカスタマイズされたものに置き換える必要がある。
またどの3Dモデル(Skeltal Mesh)のアニメーション更新頻度を優先させるかといったSignificanceの関数を定義する必要もある。
澤田氏は,「Animation Budget Allocator」は,前出のLODシステムの「Skeltal Mesh Reduction」や,レンダリング解像度を動的に上下させる「Dynamic Resolution」などと組み合わせるとパフォーマンスとクオリティのバランスを取りやすくなるだろうと述べていた。
サウンドシステムの改善
UE4.22では,サウンド関連の機能についても多くのアップデートが行われている。澤田氏はこのうち4つのテーマをピックアップして紹介した。
1つめは「New Audio Engine」(別名Audio Mixer)だ。
UE4の従来のサウンドサブシステムは,各プラットフォームが有するサウンド機能に依存する部分があったが「New Audio Engine」では,ミックス処理,エフェクタなどのDSP処理,シンセサイザ処理などを全プラットフォーム共通で開発できるクロスプラットフォーム仕様となった。
これは,UE4.1xから実験的機能として提供されてきたものだが,UE4.22では標準機能として利用できるようになった。ただ,デフォルト設定では従来のサウンドサブシステムである「AUDIO DEVICE」が選択されている。
2つめは,設定したリズムなどに応じてイベントを発生させる新機能「Time Synth」機能だ。
長めのPCMのサウンドクリップでBGMなどを再生している場合,そのリズムや音符の進行に応じてグラフィックスエフェクトを正確に再生するような演出が,これまでのUE4では難しかったのだが,これが可能になる。
結果,この「Time Synth」機能によって,映像と音響の密な連携を伴ったゲームや映像作品,あるいはサウンド関連アプリがUE4で制作できるようになる。
この「Time Synthの利用にあたっては「Time Synth Plugin」を有効化する必要がある。
実際の使用にあたっては,UE4におけるゲーム要素オブジェクト的な存在である「Actor」などに「Time Synth Componet」を追加し,リズムパラメータなどの設定も必要になる。このTime Synthの仕組みを使ってサウンドを鳴らす場合は,このサブシステムに対応したサウンドクリップである「Time Synth Clip」の作成が必要だ。
設定したリズムなどのタイミングでイベントを発生させるには「Time Synth Componet」に「Add Quantization Event Delegate」を利用して任意のタイミングでのイベント発生を設定(プログラム)することになる。
3つめのサウンド関連新機能は,サウンドの同時再生に関する設定である「Sound Concurrency」機能が,より複雑な条件設定やグループ監視に対応できるようになったことだ。
基本的にはサウンドクリップの同時再生は現在鳴っているサウンドに対して波形を加算するように処理して再生すればいいのだが,大量のサウンドを同時再生しようとすると音割れが発生する場合がある。
そこでUE4.22のSound Concurrencyでは,設定した同時再生数(Max Count)を超えた場合の挙動(Resolution Rule)を定義できるようになっている。
最後,4つめは,サウンドサブシステムに取り込めるサウンドフォーマットに「AIFF」「FLAC」「Ogg Vorbis」などが追加されたことだ。UE4.22では,今挙げた新しい3つのフォーマットのサウンドファイルを何の手間もなくContent Browserで取り扱うことができる。
バーチャル プロダクション パイプラインの改善
UE4.22ではUE4を映像制作向けに利用する際に有用な「バーチャル・プロダクション・パイプライン」の改善が行われている。
澤田氏はこれについては四つの改善ポイントを挙げていた。
1つは「OpenColorIO」(OCIO)への対応で,テクスチャや最終的なコンポジット処理において色空間変換をUE4内で行えるようになる。つまり,レンダリングから映像ファイルとして出力するまでの色設計をUE4内で完結できるようになるわけである。
2つめはGPUベースのビデオデコードへの対応だ。これにより,複数のビデオストリーム素材をUE4内で取り扱う際のCPU負荷が劇的に低減できる。
三つめはビデオストリーム素材の対応フォーマットの拡大と,対応ビデオ入力デバイスの拡大だ。
四つめは「nDisplay」対応の改善で,複数ディスプレイへの出力がより高機能となった。具体的には各クラスタノードのアプリケーションウィンドウに対し,個別かつ複数のビューポートを持てるようになったようだ。
Hololensリモートストリーミングのサポート
UE4.22ではWindows Mixed Realityプラグインを有効化することで,UE4で制作したMRコンテンツにて生成された映像やサウンドをWiFiなどを通じてHololens側にストリーミング出力できるようになった。つまり,Hololensコンテンツをスペックの高いPC側で動作させるようなMRコンテンツの制作をUE4で行えるようになるということである。
なお,次期UE4.23ではHololens2へのネイティブ対応が計画されているとのことである。
なお,澤田氏はEpic Games JAPANが,この機能のセットアップから起動までの手順をまとめた記事を公開しているので興味のある方はぜひ参照してほしいと述べていた。
今後のUE4のロードマップ
澤田氏は最後にUE4の今後のロードマップについて語った。
具体的にはプレビュー版が7月に公開されたばかりの次期バージョンであるUE4.23の新機能について言及した(参考URL)。
最初はパフォーマンスプロファイリングツールの「Unreal Insights」だ。
「Unreal Insights」は,UE4の内部処理を直観的かつ視覚的的に観察,調査できるツールで,実行中のUE4ベースのアプリケーションにおける処理のボトルネックを視覚的に発見することを目的に開発されたものになる。
横方向が時間軸で,縦方向に各スレッドの項目が列び,グラフ中に描き出される四角は,各スレッドごとの具体的なタスクを表している。
眺めているだけでもUE4の内部処理の流れを知ることができるので,フレーム単位のゲーム処理の構造を勉強するのにも役立つのではないか,と澤田氏は述べていた。
最後は,Epic Gamesが独自開発を進めている新物理エンジン「CHAOS」だ。
こちらはまだ前述したプレビュー版のUE4.23には組み込まれておらず,来年公開の正式版UE4.23にて実験的機能として搭載が予定されている。
UE4では,従来はNVIDIAの物理エンジン「NVIDIA PhysX」とそのフレームワークである「NVIDIA APEX」を統合していたが,意外と制御が難しく,悪条件下では「じゃじゃ馬」な挙動を示して「落ち着かない特性」もあって,ゲーム開発者から改善を求める声が少なからず挙げられていた。CHAOSはこれに応えるべき誕生した待望の物理エンジンというわけである。
CPU実装なのか,GPUアクセラレーションが効くのかといった細かい点は明らかにされておらず,澤田氏もCHAOSについては現在公開されている公式動画(下)を披露したのみであった。
映像を見る限り,挙動も安定しており,かなり大規模な衝突や破壊をサポートするように見受けられる。剛体以外の,例えば流体などもサポートされるのかと言ったところも気にかかるところである。
UNREAL FEST EAST 2019は,10月6日にパシフィコ横浜で開催予定となっており,すでに参加登録も始まっている。参加費は無料だ。非常に人気の高いイベントなので,興味がある人は登録を急いだほうがよいかもしれない。