暗中模索で開発システムを構築

“UNREAL FEST”は、エピック ゲームズ ジャパンが主催するUnreal Engineの公式大型イベントで、Unreal Engine 4（以下、UE4）が一般公開された2014年から、秋に関東、春に関西で開催されている。ここでは、2019年10月6日にパシフィコ横浜で開催されたUNREAL FEST EAST 2019の中から、“メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例”というセッションの様子をお届けしよう。

広告

講演者は、マーベラスのチーフエンジニア・河野雄太氏と、リードアーティスト・菊地悟氏のおふたり。セッションは2部構成で、前半の“エンジニア編”は河野氏が担当、後半の“VFX編”は菊地氏が担当した。『DAEMON X MACHINA（デモンエクスマキナ）』はマーベラスのコンシューマーゲームとしては初のUE4採用、かつNintendo Switch向けということで、まさに暗中模索の開発だったという。

講演の前半を担当した河野氏。『DAEMON X MACHINA』ではリードプログラマーとしてシステム面に携わった。

前半では、『DAEMON X MACHINA』でどのようにUE4を利用したかと、課題にどう対処したかを紹介。ここではいくつかのアジェンダごとに、その内容が説明された。河野氏のコメントによる。各アジェンダの概要は以下のとおりだ。

・UE4運用方針

UE4はなるべくそのまま使いたいが、ある程度改造を加える心構えはあった。結果は予想通りだったという印象。タイトルの特徴である絵作りにはしっかり手を入れることとなった。

・キャラクター構成

アーセナルというメカは、Characterクラスを使用し、複数のSkeletal Meshをアタッチして組み合わせた。6個ある武器は個別のActorで、持ち替えや切り離しが可能。部位破壊は、モデル差し替えとエフェクトを組み合わせて表現している。アウターという人間モデルもCharacterクラスで、構成もアーセナルとほぼ同様だが、頭部にはSetMasterPoseを使用していない。エネミーはPawnクラスを使用。単体モデル構成だが、砲塔などの部位は別Actorでアタッチしている。

・レベル構成

およそ4キロ四方の広さとなっており、内側2キロがプレイ可能領域。背景用のブループリントはアーティスト自身が作成している。天候はライティング・天球・環境エフェクトのサブレベルを入れ替えて表現。ナビメッシュはそのままDynamic Modifiers Onlyで使用。レベルブループリントは、最初は自由に組んでもらっていたが、複数チーム用にルール決めをしてエンジニア側が提供した。問題点としては、ブループリントの組みかたにかなりの個人差があったことが挙げられる。

・絵作り・レンダリング

絵作りの方針として、輪郭線はなしにして、子どもっぽい絵になるのを避けた。平行光源は3つ使用してチャンネルで切り替え。負荷対策としては、LODの徹底、半透明をなるべく使わないなどで対応。

・VFX・SFX

エフェクトはCascadeをそのまま利用し、一部モジュールを修正。サウンドはCRI ADX2/Sofdec2を使用。付属するプラグインも基本はそのままで、負荷対策のため一部改変して対応した。

・デモシーン

カットシーンはSequencerをそのまま使用。最初はMatineeとどちらにするか迷った。イベントトラックなどで、タイトルに合わせて拡張は行った。Sequencerの問題点としては、リリース初期だったのでドキュメントや事例がほとんどない状態だったこと、エンジンバージョンアップで仕様が変わることなど。

・UI

UIはUMGをそのまま使用。CPU負荷が高くてGameThread以外では動かせないこと、UObjectが大量に生成されてしまうことが問題点となった。

・フルキーコンフィグ

ActionMapping・AxisMappingは利用していない。UInputComponentを直接操作して、入力の変換テーブルを作成して実現した。ジャイロセンサーにすぐ対応できたのはよかった。Joy-ConのDualモードでは、左のセンサーしか拾えないので注意。

・マルチプレイ

OmlineSubsystemSwitchをそのまま使用。ListenServer形式のため、誰かひとりがホストとなり、残りがゲストとなる。移動処理はクライアント側。レフェリーやランキングは、直接SDKを利用して実装した。問題点は、ネットワーク構成がスター型なので、サーバーとなるプレイヤーに負荷が集中すること。ほかにも細かい問題点は多かった。なおOmlineSubsystemSwitchでは、バグが頻発した。

・ローカライズ

テキスト言語は、ローカリゼーションダッシュボードとAssetLocalizationをそのまま利用した。音声はテキストと別系統にするため、独自に実装。poファイルの編集環境にあまりよいものがなかった。bSerializeAssetRegistryでは、メモリを節約できると思いオフにしたが、AssetLocalizationが機能せず、オンに戻した。

・パフォーマンス

パフォーマンス対策については、大体がCPUネックで、いろいろなエンジンの設定を駆使して、負荷を下げる対応を行った。各事例を項目別にワンポイントで紹介する。

＜キャラクター＞

一部をPawnクラスに変更し、アタッチする要素もなるべく減らした。

＜背景＞

破壊可能オブジェクトが多いので、静止時は機能オフにして、オンオフを徹底することで負荷を軽減。

＜弾丸＞

エフェクトでは、プール処理により負荷を減らし、移動はコリジョンのオンオフを設定してMoveCompornentで移動させた。

＜GC＞

GCでは、UObject減らしがメイン。

＜ブループリント＞

ブループリントは、前提としてTickは厳禁で、C＋＋なら大丈夫。

＜メモリ＞

不要なRenderTargetを開放する閾値を変更できるが、簡単な設定で効果大なのでオススメ。なおおまけ情報として、参考までに一部のUObject数を公開する。

＜自動プレイ＞

自動で部屋を作ってマルチプレイなどが行えるように実装。稼働したのはプロジェクト終盤から。日々の集計は通常のバグ報告と照合できて役に立った。

・まとめ

UE4はそのままでもいけるが、細かい設定は必要。バージョンアップにも注意したい。プラットフォーム依存の機能もしっかり確認を。今後の課題としては、エンジンバージョンアップ、アニメの組み込みフローの見直し、マルチプレイでのReplicationGraphの検証、自動プレイ内容の充実などを考えている。

“メカ＋トゥーン”を目指したVFX

後半の担当は、リードアーティストの菊地氏。『DAEMON X MACHINA』のVFXの方針や概要、アーティストとしてこだわった部分、直面した問題点などが語られた。

菊地氏はコンシューマーを中心に多数のタイトルに参加。『DAEMON X MACHINA』ではVFXリードアーティストを担当している。

菊地氏がまず語ったのは、VFXの制作方針について。プロジェクトとしてはトゥーン表現を選択し、「メカ物だけれどトゥーン」という差別化を目指したという。方向性としては、1980年代アニメやコミックのような、シンプルで特徴的な方向性。その形を模索するため、菊地氏は自宅でメカ系アニメを見まくり、VFXルックを定めていったそうだ。

「お風呂場で、防水タブレットで視聴しました。もともとメカが好きなので、とても楽しい時間でした」（菊地氏）。

プロジェクト開始時は、スタッフのほとんどがUE未経験者という状況だったが、短期間でかなりの数のアセットを作成しなければならなかった。UE4でのVFX制作も初めてで、すべてが手探りの状態でのスタートだったという。以上のことから決めた大枠の方針は、「あまり複雑にせず、使いやすく、量産しやすい点に重きを置く」ということ。ちなみに制作環境は、バージョンがUE4.20で、ツールはCascadeだった。

マテリアルについては、最初に構成を検討。Usage別、用途別、ライティング別などで分け、階層構造は“親、子、孫”タイプとした。そしてブレンドモードでのゲーム要素を洗い出した結果、半透明はなるべく使わず、Masked中心に決定したという。

「思い切った決断でしたが、いま思うと、正しかったと思います」（菊地氏）。

レギュレーションは、詳細は割愛し、要素のみが紹介された。チェックリストは細かくしすぎず、重要度を分けてチェックしたそうだ。

バージョンアップとカスタマイズ対応では、過去にUE3での開発の際、カスタマイズをしたらバージョンアップで苦労した点を踏まえて、カスタマイズをしないことを選択。計4回ほどバージョンアップをしたが、問題なく移行できたという。

方向性に合わせて描写を調整

続いては具体的に、各アセットごとのVFX事例が紹介された。アセットは“弾”、“煙”、“爆発”、“スライド移動”、“範囲”、“スラスター”、“地表煙”の7つだ。

“弾”については、ミサイルやライフルなども初期はごくふつうの描写だったが、軌跡に図形を加え、最終的には“ミサイル：六角形、スナイパー：四角形、ブリッツ：三角形”と記号化。一見してわかるようなビジュアル表現を実現した。

“煙”はディゾルブで制御。UVスクロールの速度を上げるとテクスチャが荒れる問題が生じたが、Pannerノードを確認し精度をあげることで解決できた。またエッジの荒れについては、GrayScaleテクスチャを使用することで、低い解像度でもキレイな表現に成功。大きな煙が画面を覆う問題については、カメラの距離に応じて煙に穴を開けるという対策をとり、視界の確保が可能となった。

ザコエネミーの“爆発”も、初期はゴチャついていて見ていて疲れるような描写だったが、赤熱マテリアルの調整で修正。赤熱マテリアルは、4種類の色と幅を設定可能だ。墜落時のVFXについてはボリューム感を強調。派手にして、達成感を味わってもらうとともに、縦長の炎で墜落地点を確認できる目的もあるという。

“スライド移動”は、トレイルとディゾルブマテリアルで表現。PCでは問題なかったが、実機でトレイルが暴れる現象が起こり、これは“Size By Life”を消したら解決できたとのこと。

“範囲”では、まず爆発について説明された。範囲爆発では説得力ある動きにするため、ふきとばしとモーションブラーを追加して威力を感じられる演出に。回復空間やシールドでは、透明表現を活用。ボスシールドでは、マテリアルが少し豪華になっている。

“スラスター”は、アーセナルの背中部分のギミックで、スリット状になっている。ブーストでは、噴射時の気持ちよさと、クロスフレアの表示でメカアニメ感が強調されている。

“地表煙”は背景と関連したVFXで、フィールドが広大なため、自動配置する仕組みとなっている。エミッターをカメラにくっつけ、上空から見えないパーティクルを落下させ、ヒットした地点で煙を生成。地面の種類によってVFXやSFXは変化する。この物理マテリアルの仕組化は難航し、かなり苦労したとのこと。挙動確認には異なる地形が続く専用のマップを用意してもらい、各種VFXをチェックした。ハーディングチェックでは、手作業の他仕組み化を行い気を配ったという。