Unreal Engine 5.2の新機能と次世代プロシージャル生成ツールの概要
2023年7月4日,秋葉原UDXで「Game Tools & Middleware Forum 2023東京」(以下,GTMF)が開催された。ここでは,エピックゲームズジャパンによるUnreal Engine 5.2の新機能に関する講演を紹介してみたい。
アップデート機能の要約は午後の2つのセッションにまたがって行われた。注目機能の紹介として,グラフィックス周りを除いた部分の新機能の紹介が岡田和也氏と鈴木孝司氏から,続くセッションではレンダリング周りの新機能とPCG機能に関する紹介が行われている。
まずは岡田和也氏によるアニメーション機能のアップデートからだ。アニメーションデータをボーン構造が違うモデルに対してリターゲットするIK RigやIK RetargeterをBlueprintやPythonで生成・設定することが可能になった。設定項目が多くて煩雑だったこれらの設定を自動化できるようになったのだという。これを利用したLeon Gameworksによる生成ツールも紹介されていた。
また,スケルトンの互換性に関する設定が双方向になり,スケルトンAからBに対して設定を行えば,スケルトンBからAに対する設定も同時に行われるようになった。どちらかで設定すれば相互でアニメーションの実行が保証されるのだ。それに加えて,互換性の設定をしなくても,ボーン名や構造の比較でスケルトンが違っていてもアニメーションが利用できるようになった。さらに互換性の設定がUnreal Editor上だけで完結するようになっている。
β機能として実装されている機械学習による変形のサポート機能MLデフォーマが改善された。これを利用したサンプルも公開されている。MLデフォーマはUE5.3でさらなる改善が行われる見込みである。
iPhoneを使ってMetaHumanでパフォーマンスキャプチャを行うMetaHuman Animatorが公開された。フェイシャルアニメーションでiPhoneの深度カメラを使う手法は,iPhone Xの登場以降,業界のトレンドにもなっていたが,それがMetaHumanでも利用できるようになったわけだ。
モデリングに関するアップデートでは,Unreal Editorのモデリングモードで80以上の機能が実装されたことが発表された。これはEditor上でレベルのモデリングができるという機能だが,講演では,一般的なモデラーツールを代替するものではないといった説明に時間が費やされていた。
Naniteなどが登場して,UE5で扱う地形のメッシュ量は格段に上昇している。配置時に調整したいと思ってもDCCツールとの行き来だけでかなり時間を取られてしまうこと,そしてなにより,今やそういったハイメッシュデータを扱うのはUE5が一番得意になっていることなどもあって,UE5上でメッシュデータをいじれる需要が増えているのだ。
これはあくまで地形をいじるためのもので,キャラクターらランドマークになるようなものを作るためのものではないと岡田氏は強調していた。
具体的な機能としては,ハイポリゴンで制作したデータのレンダリング結果をローポリデータにベイクすBakeRC機能や,ハイポリデータから自動でローポリデータを作成するAuto LOD機能が紹介された。UE5.3ではSkeletal Editorが追加されるとのこと。
BlueprintやPythonを使ってメッシュを生成するGeometory Scriptもアップデートされ,スクリプトからメッシュ情報をコピーできるコンポーネントにSpline Mesh,Posed Skinned Mesh,Skeletal Meshが追加されている。Skeletal Meshからポーズを取り出してコピーするような処理が紹介されていた。
スクリプトで使用するメッシュ上のサンプル点は,均等または不均等で交差しないものを自動で生成できる。会場では,頂点カラーで重み付けして球体を生成したウサギの画像などが紹介されていた。
こういった手法で生成したメッシュデータをディスタンスフィールド上で合成し,それに対してスムージング処理などを行うことで,生成される形状を加工することも可能だ。
Geometry Scriptで使用できるノードは現在約250種が用意されており,UE上でプロシージャル処理などができる環境が整えられている。
Unreal Editor上で独自のツールを作れるScriptable Tools Frameworkが公開され,BlueprintやC++で独自のデザインツールを追加できるようになった。サンプルでは,Editor上で引いたラインに沿ってオブジェクトを配置するようなツールや,スーパーマリオ的な横画面ゲーム用の簡易エディタの例が示されていた。
クリックした場所にオブジェクトを配置したり,3Dギズモを表示してオブジェクト操作を行ったりといったことがBlueprint上でできるようになったことが示されていた。
また,作成したツールのプロパティやイベントを公開することもできる。PropertySetを操作するためのヘルパー関数も用意されている。
続いて,モバイルプレビューとMac版のアップデート情報が紹介された。
PC上でモバイルデバイスの画面を再現できるモバイルプレビューは全体に精度が向上し,デバイスを切り替えたときの安定性も改善されているという。また,通常のビューからモバイルプレビューへの切り替えが高速化されたので,製作途中に頻繁に確認しても問題がなくなっている。
iOS,tvOS,iPadOS用のパッケージ作成やデバッグ処理を高速化するPrepare for Debuggingも紹介された。これは,過去に行ったアセットのクック情報を流用することで処理時間を短縮するというものである。ソースコードのビルドだけでパッケージを作成できるという。
Mac版では,Apple Siliconへのたいおうが進んでおり,Unreal Editorはランチャー版も含めてネイティブ化された。CPUタイムが短縮されていることなども示された。
また,UE5.2からM2Macのみだが,Naniteの実験的サポートが開始されている。UE5.3で普通に使えるようになる予定である。現状のMac版では,それ以外にもいくつか制限が出てきている。
UE5.2でMac版などでの開発はかなり快適になったとされているものの,今後を考えると,M2チップ採用機種でメモリは16GB以上の開発環境を整えることが推奨されていた。
岡田氏と交代で鈴木孝司氏から続きの新機能の紹介が行われた。
NNEプラグインはNNIプラグインとして用意されていたものの名称が変更されたもので,ニューラルネットワークで学習した内容をゲームで扱うためのものとなる。GPUまたはCPUで実行されるが,一部プラットフォームではCPUのみでの運用となる。
ここで扱う機械学習のデータはTensorFlowやMATLABなどで作成する必要があるが,ゲームデータの学習を行うためのプラグインも超試験的ながら公開されている。どのように活用できるのか今後が気になる機能である。
続いて紹介されたChaos Fleshは,軟体シミュレーションを行うための機能だ。Electric Dreams Environmentデモに出てくるEVピックアップトラックRivian R1Tが悪路の走行で岩を乗り越えるときのタイヤの変形などに使われている。岩の形に合わせてタイヤが凹むのだ。個人的には,オフロード仕様にしても凹みすぎな気もしないではないが。
Chaos Fleshのチュートリアルとしては,こちらが最高の逸品であるとのこと。
Chaos Fleshでは一度ポリゴンのデータから,中身まである四面体データ構造を作成して,頂点に力学的なパラメータを設定後にソルバーに渡してシミュレーションを行っているようだ。生成されたデータグラフの様子はスプレッドシート形式で確認できるほか,デバッグ用のコンソールコマンドも用意されている。
具体的に軟体がどのように衝突して変形するのかについては,ぶつけたいメッシュを手動で配置してソルバーを起動するDeformableCollisionとデータグラフの中心から頂点にレイを飛ばすRaycastCollisionの2種類の方式が用意されている。Raycastはタイヤやボールなどのシンプルな形状に適しているとのこと。
ここで使われる四面体メッシュをSkeletal Meshのアニメーションで動かすこともできる。
シミュレーション結果をSkeletal Meshに転写する手順も紹介されたが,鈴木氏が悩んだのはTarget Skeletal Mesh名を指定する部分だったという。対象が1つしかない場合はなにも入れなくてOKとのこと。
次の新機能は,Targeting Systemプラグインだ。ゲーム内のアクターを検索できるものであるという。戦闘時の敵を探したり,最も近いアイテムを探すなど,さまざまな探す処理を汎用化したものとなる。
GameplayAbilityやBlueprint/C++から呼び出して利用することができる。TargetingPresetを作成してから,Blueprintの場合はTargeting*Task*を継承,C++の場合はUTargetingTaskなどを継承したクラスを作成して利用する。問題がなければバックグラウンドで実行することも可能だ。
Unreal EngineのモニタリングツールUnreal Insightsも操作性が改善され,Editorから呼び出しやすくなり,トレースの開始などでコマンドラインを操作する必要がなくなった(実機の場合などはコマンドラインが必要)。
またトレース中に撮影したスクリーンショットの実行タイミングと画像パスがブックマークに記録される。ブックマークからスクリーンショットが確認可能になる。また,ネットワーク越しにスクリーンショットを転送する機能なども追加されている。
そのほか,コンテンツブラウザで2つのファイルを選択して,差分を取るDiffツールも公開されている。Blueprintの比較ではビジュアライズされた比較画面が出るものの,それ以外のファイルだとテキストになったものを外部ツールを利用しての表示となる。
最後に紹介されたレビューツールは,コードレビューをUE内で行うもので,アセット管理ツールのPerforceが実装されている環境でのみ利用可能となるという。
続くセッションでは,UE5のレンダリング周りとPCG機能についての解説が行われた。講師は,澤田祐太朗氏と鈴木孝司氏だ。
澤田氏から最初に紹介されたのは,UE5のElectric Dreams Environmentデモで,そこで使われている,UE5の新たなマテリアルシステムであるSubstrateとアセット配置ツールPCGについての説明が行われた。
Substrateは,これまで固定式だったシェーディングモデルをモジュール式にした実験的なマテリアルシステムだ。UE5.1から導入されている。現状では試しに使うと,既存のマテリアルをSubstrate形式に変換して戻せなくなるので注意とのことらしいが,マテリアルの扱いが根底から変わるシステムとなる。
そもそもSubstrateでは,マテリアルパラメータとなるBSDFノード(遅まきながらUE5はBRDFじゃなくてBSDFだったんだと認識)の主体がSlab BSDFというものになり,これまでとは格段に多いパラメータで運用されることになる。SSSや発光などもノードに含まれており,これだけで非常に多彩な表現ができることが分かる。また,汎用のもの以外に,水面や目,髪の毛専用のものも用意されているという周到ぶりである。
このSlabは複数のSlabに対して演算を行って新たなマテリアルを作るような使い方が可能だ。Vertcal Layerはそのうちの1つで,Slabを上下に重ねた表現が可能になる。
UE5のGIレンダリングシステムLumenもアップデートされた。内容は,GIやオクルージョンの品質向上,高品質透過性反射のラフネス対応,ハードウェアレイトレーシング時の反射の品質向上,同じくTwo Sided Foliage対応だ。
GIやオクルージョンの品質向上の例は下の写真の通りなのだが,写りがよくないのでこれでは分からないかもしれないが,よく見ると鼻の下や襟の部分の陰影が正しく反映されているのが分かるだろう。
高品質透過性反射のラフネス対応は,半透明の反射体に擦りガラスのような効果を付加できるようになったという意味である。下の写真のような表現が可能になる。
ハードウェアレイトレーシング時の反射の品質向上というのも分かりにくいかもしれない。下左側の写真の影の部分を見ると,UE5.1では影の中の影が濃さを加算したように表現されているのに対して,UE5.2では適正な濃さに修正されている。
反射のTwo Sided Foliage対応は下右側の写真を見れば分かるように,半透明で光を透過するような材質(Two Sided Foliage)の透過表現が,これまではハードウェアレイトレーシング使用時に鏡に映ったものでは適用されていなかったものが,ちゃんと適用されるようになるという意味である。
続いて,UE5のもう1つの目玉機能Naniteのアップデートについてだ。UE5登場時に皆の度肝を抜いたNaniteだが,使用時の制限は非常に多かった。当初のデモのような岩山などには有効だったが,木が生えるとお手上げだったのだ。
UE5.1でマスクドマテリアルがサポートされ,Electric Dreams Environmentデモのような高密度の森林によるオープンワールドマップを動かすようなこともできるようになった。UE5.2では,さらにステンシルやCustom Depthに対応し,描画できるものがさらに増えている。そのほかライトチャンネルにも対応した。
単純なPlanar Refrectionにも対応できるようになったほか,メッシュ単位で法線の精度を指定できるようになり,これまで以上に綺麗な曲面反射を表現可能となり,微妙な曲面への映り込みが重要となる自動車の映像では重宝されそうだ。
Max World Position Offset Displacementと言われてもなんのことだか分かりにくい。World Position Offsetは風でそよぐ木に適用される揺れなどを指定するためのパラメータで,NaniteではUE5.1から対応していたのだが,カリングなどの処理が変形前の座標で行われるため不自然になることがあった。それに対応するため,極端に大きなオフセットを指定できないようにするのがこの機能ということのようだ。
同時に,これで設定した制限から外れていないかどうかを可視化するツールも用意されている。下の写真では,外れた部分がピンク色に塗られていることが分かる。
そのほか,Nanite Streamerに機能が追加されて,Naniteの実行中のルールやI/O情報を表示することができるようになっている。
さらに,Naniteを使って,シンプルなメッシュにテクスチャの模様を凹凸として適用するスタティックディスプレイスメントマップ機能も紹介された。押し出し量などを指定することで,形状の変形度も指定できる。細かいディテールを持つNaniteオブジェクトを簡単に作成する機能だ。
VSM(バーチャルシャドウマップ)機能も改善されている。これは,非常に大きなシャドウマップを指定することで,レンダリングの画質改善を行うもので,ライティングなどをまとめてやることでパフォーマンスの改善が行われている。
時間的スーパーサンプリング機能であるTSR(Temporal Super Resolution)は,低解像度でレンダリングした画像を高解像度にアップスケーリングして出力するなどで,パフォーマンスを稼げるわけだが,そのGPU負荷がさらに軽減された。
UE5.1.1から搭載された機能だが,UE5.2ではSTATでTSRの各種情報を画面に表示できるようになった。ここで表示される情報は2つ。1つは拡大前の実レンダリングされる画像の情報量を示すTSR Feed,そしてもう1つは,「最終的に出力したい解像度の1ピクセルに必要な時間」であるTSR 1sppだ。
このTSR 1sppの説明だと意味が分かりづらい。1080p映像を4K映像のアップスケールする場合,1フレームタイムが25msであれば1sppは100msになるとされている。1ピクセルの処理時間だとするとまったく計算が合わないわけだが,ここはTSRの処理である。結局のところ,1sppは,TSR処理にどれくらい前のピクセルまで使うかを示すものだと考えたほうがよさそうだ。1080p→4Kの処理ではソースの1ピクセルを4ピクセルに増やすわけだが,それを行うために4フレーム前までの情報を利用しているということになる。
60fpsディスプレイの場合,40fpsのゲーム映像というのは7割くらいフレーム落ちしているということなので,実際には66.8ms〜133msくらいの変動があるのだろう。なぜフレーム数ではなく時間で記述しているのか,筆者には理解できない。
このように,TSRでは結構前の画像データまで使って処理を行うので,場合によっては残像が出てしまうのは容易に想像できるだろう。これに対しては,Velocityデータを用意して対応を行っているという。逆にいうと,VelocityデータがないとTSRの品質はかなり低くなることが予想される。
そのほか,レンダリングに関連したリソースをまとめて確認できるRender Resource Viwerが用意されたり,VRで行われていた可変レートシェーディングを行う機能も追加されている。
可変レートシェーディングは,場所によってレンダリング解像度を変化させる方式だ。VRの場合,視線追跡とセットで利用することで大きな効果が期待できたわけだが,一般的なディスプレイでの利用では,どの部分を簡略化するかの判断が問われることになりそうだ。
レンダリング周りの新機能の解説はここまでで,続いて鈴木氏から,PCG機能などの紹介が行われた。
鈴木氏は,今後のゲーム背景に求められるものとして「広大」「高密度」「高速イテレーション」の3つを挙げていた。オープンワールドなどで探索し甲斐のある広大なエリアが求められている一方で,いくら広くてもスカスカでは誰も納得しない。時代に合った画像の情報量も要求されるのは当然の話だろう。そして,それらを開発する際に,重すぎて手直しも厳しいようでは良質なコンテンツは望めない。
UE5は登場時からオープンワールドを志向しており,過去にはプロシージャルツールHoudiniと連携したRuleProcesserなども導入されてきた。
UE5.2で導入されたPCG(Procedual Contnt Generation)フレームワークは,Houdiniのような外部ツールに依存しない,独自のプロシージャル機能である。
UE5に内蔵され,ノードベースで扱えてプロシージャル生成を行うことができる。そして非破壊編集可能である。非破壊編集というとよく分からないが,同じ手順で再現可能な編集機能だと思っておけばよい。
PCGのサンプルとしては,すでに何度も挙げられているElectric Dreams Environmentがある。UEのElectric DreamsシリーズのうちのEnvironmentデモである。
出来上がった森林風景も凄まじいが,それを簡単に操れる操作性がさらに凄い。なお,PCGに関しては,GDCでの関連講演があり,エピックゲームズジャパンの手で日本語字幕も入れられているのでぜひ参考にしてほしいとのこと。
UE5.2でのPCGは実験的機能であり,本番のゲームを製作するには適さない。しかし,検証用として使うことにも意味があり,なにより楽しいのでやってみてほしいと鈴木氏は語っていた。
PCGを利用するには,まずプラグインを有効化する必要がある。procedualで検索すると2種類出てくるので,両方とも有効化しておこう。2つめのものはPCG拡張用のものである。
PCGの構成要素は多くあるが,鈴木氏は重要なものを抜き出して紹介してくれた。
PCGGraphはコンテンツブラウザから生成できるPCG用のノードグラフ,PCGComponentはPCGGraphを実行するコンポーネント,PCGVolumeはPCGGraphをドラッグ&ドロップしたときに作成されるボリュームを持ったアクターだ。PCGComponentを備えている。
PCGGraphには大きく4つの機能分類があり,データの取得,ポイントの生成,ポイントの加工,そしてポイントをもとにアクターを配置するノードがある。
●データ取得ノード
空間データ取得ノードにはランドスケープや特定のタグを持ったアクターのデータ,テクスチャや点群データなどを取得するものが揃えられている。
●生成ノード
生成(Sampler)ノードでは,地面にサンプル点を敷き詰めたり,ボリューム内に立体的にサンプル点を生成することができる。サンプル点を生成すると同時に,さまざまな処理で使われるDencityパラメータを設定できる。
アクターから空間データを生成しているもの,テクスチャから平面データを作成しているものの例が示されていたが,2次元と3次元では扱いが異なってくるので注意が必要だそうだ。
おそらく頻繁に利用されることになるであろうSurface Samplerを取り上げてパラメータの意味などが解説された。密度と大きさの両方を上げすぎると,簡単に吹っ飛ぶそうなので注意しよう。
●加工ノード
ポイントの加工では,最初にポイントのフィルタリングを行ってから加工を行うことで多彩な処理が可能になる。
Point Filterノードでは,条件に合ったポイントを抽出することができ,Dencity Filterでは上限値と下限値を設定して一定の密度の部分だけ取り出すことができる便利なフィルタだ。
FilterByTagは,その名のとおり,タグによってフィルタリングを行うノードだ。対象となるタグはアトリビュートウィンドウの下の部分で確認できる。
続いてポイントの位置や大きさなどの重要な情報を加工するノードがまとめて紹介された。
Transform Pointsはポイントの位置を操作するもの,Bounds ModifierやExtents Modifierはポイントの大きさを操作するものとなる。
さらにポイントを演算するノードが紹介された。中でも点群と点群を指定して差分を取るDifferenceノードは驚くほど多用することになるとのことだ。Distanceは点群同士の距離を計算するノード,Inercentionは点群の交差部分を抽出するノードだ。
入力をまとめるものとしてMergeとUnionの2種類がある。Mergeは単に点群をまとめるもの,点群を含む複数の空間データを配列上にまとめるものとなる。
各ノードに含まれている変数を個別に加工するノードが以下のものとなる。PCGでは各ノードに自由に変数を追加することができる。これらを駆使することで,多彩な処理が可能になるという。
●生成ノード
生成ノードでは,指定部分に新たなメッシュを生成することができるのはもちろん,アクターを生成することも可能だという。アイテムやエネルギーをばらまいたりすることもできる。
以降はPCG機能を使うためのさまざまなTipsが紹介された。
●デバッグ機能
ノードを選択した状態でキーボードのDキーを押すとデバッグモードとなり,Editorのビューポート上でポイントをキューブとして可視化することができる。このとき生成されるキューブの明るさはDencityを示している。キューブの大きさが表す内容はScaleMethodプロパティで変更することが可能だ。また,キューブの色や塗りつぶすかどうかをノード単位でカスタマイズできる。
ノードを選択してAキーを押すとインスペクト表示が行われ,Editor内のスプレッドシート上に情報が表示され,ここでちゃんと演算が行われているかを確認できる。表示対象はEditor上部のリストから選択する必要がある。
●PCGリンクをクリア
PCGConponentと生成結果は1対1で関連付けられているが,「PCGリンクをクリア」ボタンを使用すると,生成結果をコピーして別アクターとして扱うことができるようになる。現状,PCGはランタイムで生成動作を行うが,このようにPCGリンクをクリアされたアクターは静的に生成される。将来的にはPCG全体でクック時に静的に生成されるように改善が行われる予定とのこと。
●アクターのパラメータを利用
Get Actor Propertyノードを使用するとコンポーネントを持つアクターから値を読み出すことが可能となる。これを使ってバリエーションを調整することができる。将来的にはBlueprintを利用しなくてもEditor上でパラメータを利用できるように改良される見込みだという。
利用できるパラメータには組み込みのものもユーザーが定義したアトリビュートも利用できる。組み込みのものはパラメータ名に$が付いている。
●PCG Element
PCG ElementはPCGを拡張する仕組みであり,PCG Blueprint Elementを親としてBlueprintを作成することで利用でき,一般的なBlueprintのノードを使ってポイントを加工することができる。PointLoopBodyを使えば,マルチスレッド動作も可能だ。
●PCGGraphのマクロ的な利用
PCGGraphはマクロ的に利用することもできる。単純にイランライン展開されるので記述を簡潔にできる。
●Landscape Layer
PCGではLandscapeにベイクされたレイヤーを読み取ることもできる。レイヤー名でアトリビュートが追加されるのでそれを利用する。現状では1×1のセクションのLandscapeしか扱えないがUE5.3では2×2のものにも対応予定とのこと。
●Tag
PCGで除外設定を行う際にはActor Tagが便利に使える。Electric DreamsでもActorTaggerユーティリティを利用して効率化が行われていたとのこと。
Electric Dreamsでは,ボリュームを利用して土手の一部に別メッシュを割り当てるような使い方が行われていた。PointsFromActorTagというPCGGraphを使って行われているので解析の参考にしてほしいとのことだ。
●PCG Settings
最後のTipsは,レベルに一塊に含まれているメッシュ名やマテリアル名などの情報をアセットとして出力してPCGGraphで利用するという方法だ。これを使ってフィルタリングを行えば,より詳細なプロシージャル生成が可能になる。データの取得にはPCGUtility_LevelToPCGを利用する。
次世代のレベル作成ツールとなるPCGでは,多彩な表現が軽快に実行でき,ノードベースで記述・拡張もできるという嬉しい仕様となっている。GDCの講演をはじめ公式サイト,さらにヒストリアからも日本語で利用できるコンテンツが用意されているので,それらを参考に取り組んでみるのもいいだろう。
アップデート機能の要約は午後の2つのセッションにまたがって行われた。注目機能の紹介として,グラフィックス周りを除いた部分の新機能の紹介が岡田和也氏と鈴木孝司氏から,続くセッションではレンダリング周りの新機能とPCG機能に関する紹介が行われている。
また,スケルトンの互換性に関する設定が双方向になり,スケルトンAからBに対して設定を行えば,スケルトンBからAに対する設定も同時に行われるようになった。どちらかで設定すれば相互でアニメーションの実行が保証されるのだ。それに加えて,互換性の設定をしなくても,ボーン名や構造の比較でスケルトンが違っていてもアニメーションが利用できるようになった。さらに互換性の設定がUnreal Editor上だけで完結するようになっている。
β機能として実装されている機械学習による変形のサポート機能MLデフォーマが改善された。これを利用したサンプルも公開されている。MLデフォーマはUE5.3でさらなる改善が行われる見込みである。
iPhoneを使ってMetaHumanでパフォーマンスキャプチャを行うMetaHuman Animatorが公開された。フェイシャルアニメーションでiPhoneの深度カメラを使う手法は,iPhone Xの登場以降,業界のトレンドにもなっていたが,それがMetaHumanでも利用できるようになったわけだ。
モデリングに関するアップデートでは,Unreal Editorのモデリングモードで80以上の機能が実装されたことが発表された。これはEditor上でレベルのモデリングができるという機能だが,講演では,一般的なモデラーツールを代替するものではないといった説明に時間が費やされていた。
Naniteなどが登場して,UE5で扱う地形のメッシュ量は格段に上昇している。配置時に調整したいと思ってもDCCツールとの行き来だけでかなり時間を取られてしまうこと,そしてなにより,今やそういったハイメッシュデータを扱うのはUE5が一番得意になっていることなどもあって,UE5上でメッシュデータをいじれる需要が増えているのだ。
これはあくまで地形をいじるためのもので,キャラクターらランドマークになるようなものを作るためのものではないと岡田氏は強調していた。
具体的な機能としては,ハイポリゴンで制作したデータのレンダリング結果をローポリデータにベイクすBakeRC機能や,ハイポリデータから自動でローポリデータを作成するAuto LOD機能が紹介された。UE5.3ではSkeletal Editorが追加されるとのこと。
BlueprintやPythonを使ってメッシュを生成するGeometory Scriptもアップデートされ,スクリプトからメッシュ情報をコピーできるコンポーネントにSpline Mesh,Posed Skinned Mesh,Skeletal Meshが追加されている。Skeletal Meshからポーズを取り出してコピーするような処理が紹介されていた。
スクリプトで使用するメッシュ上のサンプル点は,均等または不均等で交差しないものを自動で生成できる。会場では,頂点カラーで重み付けして球体を生成したウサギの画像などが紹介されていた。
こういった手法で生成したメッシュデータをディスタンスフィールド上で合成し,それに対してスムージング処理などを行うことで,生成される形状を加工することも可能だ。
Geometry Scriptで使用できるノードは現在約250種が用意されており,UE上でプロシージャル処理などができる環境が整えられている。
Unreal Editor上で独自のツールを作れるScriptable Tools Frameworkが公開され,BlueprintやC++で独自のデザインツールを追加できるようになった。サンプルでは,Editor上で引いたラインに沿ってオブジェクトを配置するようなツールや,スーパーマリオ的な横画面ゲーム用の簡易エディタの例が示されていた。
クリックした場所にオブジェクトを配置したり,3Dギズモを表示してオブジェクト操作を行ったりといったことがBlueprint上でできるようになったことが示されていた。
また,作成したツールのプロパティやイベントを公開することもできる。PropertySetを操作するためのヘルパー関数も用意されている。
続いて,モバイルプレビューとMac版のアップデート情報が紹介された。
PC上でモバイルデバイスの画面を再現できるモバイルプレビューは全体に精度が向上し,デバイスを切り替えたときの安定性も改善されているという。また,通常のビューからモバイルプレビューへの切り替えが高速化されたので,製作途中に頻繁に確認しても問題がなくなっている。
iOS,tvOS,iPadOS用のパッケージ作成やデバッグ処理を高速化するPrepare for Debuggingも紹介された。これは,過去に行ったアセットのクック情報を流用することで処理時間を短縮するというものである。ソースコードのビルドだけでパッケージを作成できるという。
Mac版では,Apple Siliconへのたいおうが進んでおり,Unreal Editorはランチャー版も含めてネイティブ化された。CPUタイムが短縮されていることなども示された。
また,UE5.2からM2Macのみだが,Naniteの実験的サポートが開始されている。UE5.3で普通に使えるようになる予定である。現状のMac版では,それ以外にもいくつか制限が出てきている。
UE5.2でMac版などでの開発はかなり快適になったとされているものの,今後を考えると,M2チップ採用機種でメモリは16GB以上の開発環境を整えることが推奨されていた。
NNEプラグインはNNIプラグインとして用意されていたものの名称が変更されたもので,ニューラルネットワークで学習した内容をゲームで扱うためのものとなる。GPUまたはCPUで実行されるが,一部プラットフォームではCPUのみでの運用となる。
ここで扱う機械学習のデータはTensorFlowやMATLABなどで作成する必要があるが,ゲームデータの学習を行うためのプラグインも超試験的ながら公開されている。どのように活用できるのか今後が気になる機能である。
続いて紹介されたChaos Fleshは,軟体シミュレーションを行うための機能だ。Electric Dreams Environmentデモに出てくるEVピックアップトラックRivian R1Tが悪路の走行で岩を乗り越えるときのタイヤの変形などに使われている。岩の形に合わせてタイヤが凹むのだ。個人的には,オフロード仕様にしても凹みすぎな気もしないではないが。
Chaos Fleshのチュートリアルとしては,こちらが最高の逸品であるとのこと。
Chaos Fleshでは一度ポリゴンのデータから,中身まである四面体データ構造を作成して,頂点に力学的なパラメータを設定後にソルバーに渡してシミュレーションを行っているようだ。生成されたデータグラフの様子はスプレッドシート形式で確認できるほか,デバッグ用のコンソールコマンドも用意されている。
具体的に軟体がどのように衝突して変形するのかについては,ぶつけたいメッシュを手動で配置してソルバーを起動するDeformableCollisionとデータグラフの中心から頂点にレイを飛ばすRaycastCollisionの2種類の方式が用意されている。Raycastはタイヤやボールなどのシンプルな形状に適しているとのこと。
ここで使われる四面体メッシュをSkeletal Meshのアニメーションで動かすこともできる。
シミュレーション結果をSkeletal Meshに転写する手順も紹介されたが,鈴木氏が悩んだのはTarget Skeletal Mesh名を指定する部分だったという。対象が1つしかない場合はなにも入れなくてOKとのこと。
次の新機能は,Targeting Systemプラグインだ。ゲーム内のアクターを検索できるものであるという。戦闘時の敵を探したり,最も近いアイテムを探すなど,さまざまな探す処理を汎用化したものとなる。
GameplayAbilityやBlueprint/C++から呼び出して利用することができる。TargetingPresetを作成してから,Blueprintの場合はTargeting*Task*を継承,C++の場合はUTargetingTaskなどを継承したクラスを作成して利用する。問題がなければバックグラウンドで実行することも可能だ。
Unreal EngineのモニタリングツールUnreal Insightsも操作性が改善され,Editorから呼び出しやすくなり,トレースの開始などでコマンドラインを操作する必要がなくなった(実機の場合などはコマンドラインが必要)。
またトレース中に撮影したスクリーンショットの実行タイミングと画像パスがブックマークに記録される。ブックマークからスクリーンショットが確認可能になる。また,ネットワーク越しにスクリーンショットを転送する機能なども追加されている。
そのほか,コンテンツブラウザで2つのファイルを選択して,差分を取るDiffツールも公開されている。Blueprintの比較ではビジュアライズされた比較画面が出るものの,それ以外のファイルだとテキストになったものを外部ツールを利用しての表示となる。
最後に紹介されたレビューツールは,コードレビューをUE内で行うもので,アセット管理ツールのPerforceが実装されている環境でのみ利用可能となるという。
澤田氏から最初に紹介されたのは,UE5のElectric Dreams Environmentデモで,そこで使われている,UE5の新たなマテリアルシステムであるSubstrateとアセット配置ツールPCGについての説明が行われた。
Substrateは,これまで固定式だったシェーディングモデルをモジュール式にした実験的なマテリアルシステムだ。UE5.1から導入されている。現状では試しに使うと,既存のマテリアルをSubstrate形式に変換して戻せなくなるので注意とのことらしいが,マテリアルの扱いが根底から変わるシステムとなる。
そもそもSubstrateでは,マテリアルパラメータとなるBSDFノード(遅まきながらUE5はBRDFじゃなくてBSDFだったんだと認識)の主体がSlab BSDFというものになり,これまでとは格段に多いパラメータで運用されることになる。SSSや発光などもノードに含まれており,これだけで非常に多彩な表現ができることが分かる。また,汎用のもの以外に,水面や目,髪の毛専用のものも用意されているという周到ぶりである。
このSlabは複数のSlabに対して演算を行って新たなマテリアルを作るような使い方が可能だ。Vertcal Layerはそのうちの1つで,Slabを上下に重ねた表現が可能になる。
UE5のGIレンダリングシステムLumenもアップデートされた。内容は,GIやオクルージョンの品質向上,高品質透過性反射のラフネス対応,ハードウェアレイトレーシング時の反射の品質向上,同じくTwo Sided Foliage対応だ。
GIやオクルージョンの品質向上の例は下の写真の通りなのだが,写りがよくないのでこれでは分からないかもしれないが,よく見ると鼻の下や襟の部分の陰影が正しく反映されているのが分かるだろう。
高品質透過性反射のラフネス対応は,半透明の反射体に擦りガラスのような効果を付加できるようになったという意味である。下の写真のような表現が可能になる。
ハードウェアレイトレーシング時の反射の品質向上というのも分かりにくいかもしれない。下左側の写真の影の部分を見ると,UE5.1では影の中の影が濃さを加算したように表現されているのに対して,UE5.2では適正な濃さに修正されている。
反射のTwo Sided Foliage対応は下右側の写真を見れば分かるように,半透明で光を透過するような材質(Two Sided Foliage)の透過表現が,これまではハードウェアレイトレーシング使用時に鏡に映ったものでは適用されていなかったものが,ちゃんと適用されるようになるという意味である。
続いて,UE5のもう1つの目玉機能Naniteのアップデートについてだ。UE5登場時に皆の度肝を抜いたNaniteだが,使用時の制限は非常に多かった。当初のデモのような岩山などには有効だったが,木が生えるとお手上げだったのだ。
UE5.1でマスクドマテリアルがサポートされ,Electric Dreams Environmentデモのような高密度の森林によるオープンワールドマップを動かすようなこともできるようになった。UE5.2では,さらにステンシルやCustom Depthに対応し,描画できるものがさらに増えている。そのほかライトチャンネルにも対応した。
単純なPlanar Refrectionにも対応できるようになったほか,メッシュ単位で法線の精度を指定できるようになり,これまで以上に綺麗な曲面反射を表現可能となり,微妙な曲面への映り込みが重要となる自動車の映像では重宝されそうだ。
Max World Position Offset Displacementと言われてもなんのことだか分かりにくい。World Position Offsetは風でそよぐ木に適用される揺れなどを指定するためのパラメータで,NaniteではUE5.1から対応していたのだが,カリングなどの処理が変形前の座標で行われるため不自然になることがあった。それに対応するため,極端に大きなオフセットを指定できないようにするのがこの機能ということのようだ。
同時に,これで設定した制限から外れていないかどうかを可視化するツールも用意されている。下の写真では,外れた部分がピンク色に塗られていることが分かる。
そのほか,Nanite Streamerに機能が追加されて,Naniteの実行中のルールやI/O情報を表示することができるようになっている。
さらに,Naniteを使って,シンプルなメッシュにテクスチャの模様を凹凸として適用するスタティックディスプレイスメントマップ機能も紹介された。押し出し量などを指定することで,形状の変形度も指定できる。細かいディテールを持つNaniteオブジェクトを簡単に作成する機能だ。
VSM(バーチャルシャドウマップ)機能も改善されている。これは,非常に大きなシャドウマップを指定することで,レンダリングの画質改善を行うもので,ライティングなどをまとめてやることでパフォーマンスの改善が行われている。
時間的スーパーサンプリング機能であるTSR(Temporal Super Resolution)は,低解像度でレンダリングした画像を高解像度にアップスケーリングして出力するなどで,パフォーマンスを稼げるわけだが,そのGPU負荷がさらに軽減された。
UE5.1.1から搭載された機能だが,UE5.2ではSTATでTSRの各種情報を画面に表示できるようになった。ここで表示される情報は2つ。1つは拡大前の実レンダリングされる画像の情報量を示すTSR Feed,そしてもう1つは,「最終的に出力したい解像度の1ピクセルに必要な時間」であるTSR 1sppだ。
このTSR 1sppの説明だと意味が分かりづらい。1080p映像を4K映像のアップスケールする場合,1フレームタイムが25msであれば1sppは100msになるとされている。1ピクセルの処理時間だとするとまったく計算が合わないわけだが,ここはTSRの処理である。結局のところ,1sppは,TSR処理にどれくらい前のピクセルまで使うかを示すものだと考えたほうがよさそうだ。1080p→4Kの処理ではソースの1ピクセルを4ピクセルに増やすわけだが,それを行うために4フレーム前までの情報を利用しているということになる。
60fpsディスプレイの場合,40fpsのゲーム映像というのは7割くらいフレーム落ちしているということなので,実際には66.8ms〜133msくらいの変動があるのだろう。なぜフレーム数ではなく時間で記述しているのか,筆者には理解できない。
このように,TSRでは結構前の画像データまで使って処理を行うので,場合によっては残像が出てしまうのは容易に想像できるだろう。これに対しては,Velocityデータを用意して対応を行っているという。逆にいうと,VelocityデータがないとTSRの品質はかなり低くなることが予想される。
そのほか,レンダリングに関連したリソースをまとめて確認できるRender Resource Viwerが用意されたり,VRで行われていた可変レートシェーディングを行う機能も追加されている。
可変レートシェーディングは,場所によってレンダリング解像度を変化させる方式だ。VRの場合,視線追跡とセットで利用することで大きな効果が期待できたわけだが,一般的なディスプレイでの利用では,どの部分を簡略化するかの判断が問われることになりそうだ。
レンダリング周りの新機能の解説はここまでで,続いて鈴木氏から,PCG機能などの紹介が行われた。
鈴木氏は,今後のゲーム背景に求められるものとして「広大」「高密度」「高速イテレーション」の3つを挙げていた。オープンワールドなどで探索し甲斐のある広大なエリアが求められている一方で,いくら広くてもスカスカでは誰も納得しない。時代に合った画像の情報量も要求されるのは当然の話だろう。そして,それらを開発する際に,重すぎて手直しも厳しいようでは良質なコンテンツは望めない。
UE5は登場時からオープンワールドを志向しており,過去にはプロシージャルツールHoudiniと連携したRuleProcesserなども導入されてきた。
UE5.2で導入されたPCG(Procedual Contnt Generation)フレームワークは,Houdiniのような外部ツールに依存しない,独自のプロシージャル機能である。
UE5に内蔵され,ノードベースで扱えてプロシージャル生成を行うことができる。そして非破壊編集可能である。非破壊編集というとよく分からないが,同じ手順で再現可能な編集機能だと思っておけばよい。
PCGのサンプルとしては,すでに何度も挙げられているElectric Dreams Environmentがある。UEのElectric DreamsシリーズのうちのEnvironmentデモである。
出来上がった森林風景も凄まじいが,それを簡単に操れる操作性がさらに凄い。なお,PCGに関しては,GDCでの関連講演があり,エピックゲームズジャパンの手で日本語字幕も入れられているのでぜひ参考にしてほしいとのこと。
UE5.2でのPCGは実験的機能であり,本番のゲームを製作するには適さない。しかし,検証用として使うことにも意味があり,なにより楽しいのでやってみてほしいと鈴木氏は語っていた。
PCGを利用するには,まずプラグインを有効化する必要がある。procedualで検索すると2種類出てくるので,両方とも有効化しておこう。2つめのものはPCG拡張用のものである。
PCGの構成要素は多くあるが,鈴木氏は重要なものを抜き出して紹介してくれた。
PCGGraphはコンテンツブラウザから生成できるPCG用のノードグラフ,PCGComponentはPCGGraphを実行するコンポーネント,PCGVolumeはPCGGraphをドラッグ&ドロップしたときに作成されるボリュームを持ったアクターだ。PCGComponentを備えている。
PCGGraphには大きく4つの機能分類があり,データの取得,ポイントの生成,ポイントの加工,そしてポイントをもとにアクターを配置するノードがある。
●データ取得ノード
空間データ取得ノードにはランドスケープや特定のタグを持ったアクターのデータ,テクスチャや点群データなどを取得するものが揃えられている。
●生成ノード
生成(Sampler)ノードでは,地面にサンプル点を敷き詰めたり,ボリューム内に立体的にサンプル点を生成することができる。サンプル点を生成すると同時に,さまざまな処理で使われるDencityパラメータを設定できる。
アクターから空間データを生成しているもの,テクスチャから平面データを作成しているものの例が示されていたが,2次元と3次元では扱いが異なってくるので注意が必要だそうだ。
おそらく頻繁に利用されることになるであろうSurface Samplerを取り上げてパラメータの意味などが解説された。密度と大きさの両方を上げすぎると,簡単に吹っ飛ぶそうなので注意しよう。
●加工ノード
ポイントの加工では,最初にポイントのフィルタリングを行ってから加工を行うことで多彩な処理が可能になる。
Point Filterノードでは,条件に合ったポイントを抽出することができ,Dencity Filterでは上限値と下限値を設定して一定の密度の部分だけ取り出すことができる便利なフィルタだ。
FilterByTagは,その名のとおり,タグによってフィルタリングを行うノードだ。対象となるタグはアトリビュートウィンドウの下の部分で確認できる。
続いてポイントの位置や大きさなどの重要な情報を加工するノードがまとめて紹介された。
Transform Pointsはポイントの位置を操作するもの,Bounds ModifierやExtents Modifierはポイントの大きさを操作するものとなる。
さらにポイントを演算するノードが紹介された。中でも点群と点群を指定して差分を取るDifferenceノードは驚くほど多用することになるとのことだ。Distanceは点群同士の距離を計算するノード,Inercentionは点群の交差部分を抽出するノードだ。
入力をまとめるものとしてMergeとUnionの2種類がある。Mergeは単に点群をまとめるもの,点群を含む複数の空間データを配列上にまとめるものとなる。
各ノードに含まれている変数を個別に加工するノードが以下のものとなる。PCGでは各ノードに自由に変数を追加することができる。これらを駆使することで,多彩な処理が可能になるという。
●生成ノード
生成ノードでは,指定部分に新たなメッシュを生成することができるのはもちろん,アクターを生成することも可能だという。アイテムやエネルギーをばらまいたりすることもできる。
PCG利用時のTips
以降はPCG機能を使うためのさまざまなTipsが紹介された。
●デバッグ機能
ノードを選択した状態でキーボードのDキーを押すとデバッグモードとなり,Editorのビューポート上でポイントをキューブとして可視化することができる。このとき生成されるキューブの明るさはDencityを示している。キューブの大きさが表す内容はScaleMethodプロパティで変更することが可能だ。また,キューブの色や塗りつぶすかどうかをノード単位でカスタマイズできる。
ノードを選択してAキーを押すとインスペクト表示が行われ,Editor内のスプレッドシート上に情報が表示され,ここでちゃんと演算が行われているかを確認できる。表示対象はEditor上部のリストから選択する必要がある。
●PCGリンクをクリア
PCGConponentと生成結果は1対1で関連付けられているが,「PCGリンクをクリア」ボタンを使用すると,生成結果をコピーして別アクターとして扱うことができるようになる。現状,PCGはランタイムで生成動作を行うが,このようにPCGリンクをクリアされたアクターは静的に生成される。将来的にはPCG全体でクック時に静的に生成されるように改善が行われる予定とのこと。
●アクターのパラメータを利用
Get Actor Propertyノードを使用するとコンポーネントを持つアクターから値を読み出すことが可能となる。これを使ってバリエーションを調整することができる。将来的にはBlueprintを利用しなくてもEditor上でパラメータを利用できるように改良される見込みだという。
利用できるパラメータには組み込みのものもユーザーが定義したアトリビュートも利用できる。組み込みのものはパラメータ名に$が付いている。
●PCG Element
PCG ElementはPCGを拡張する仕組みであり,PCG Blueprint Elementを親としてBlueprintを作成することで利用でき,一般的なBlueprintのノードを使ってポイントを加工することができる。PointLoopBodyを使えば,マルチスレッド動作も可能だ。
●PCGGraphのマクロ的な利用
PCGGraphはマクロ的に利用することもできる。単純にイランライン展開されるので記述を簡潔にできる。
●Landscape Layer
PCGではLandscapeにベイクされたレイヤーを読み取ることもできる。レイヤー名でアトリビュートが追加されるのでそれを利用する。現状では1×1のセクションのLandscapeしか扱えないがUE5.3では2×2のものにも対応予定とのこと。
●Tag
PCGで除外設定を行う際にはActor Tagが便利に使える。Electric DreamsでもActorTaggerユーティリティを利用して効率化が行われていたとのこと。
Electric Dreamsでは,ボリュームを利用して土手の一部に別メッシュを割り当てるような使い方が行われていた。PointsFromActorTagというPCGGraphを使って行われているので解析の参考にしてほしいとのことだ。
●PCG Settings
最後のTipsは,レベルに一塊に含まれているメッシュ名やマテリアル名などの情報をアセットとして出力してPCGGraphで利用するという方法だ。これを使ってフィルタリングを行えば,より詳細なプロシージャル生成が可能になる。データの取得にはPCGUtility_LevelToPCGを利用する。
次世代のレベル作成ツールとなるPCGでは,多彩な表現が軽快に実行でき,ノードベースで記述・拡張もできるという嬉しい仕様となっている。GDCの講演をはじめ公式サイト,さらにヒストリアからも日本語で利用できるコンテンツが用意されているので,それらを参考に取り組んでみるのもいいだろう。