Epic Games Japanが主催するUnreal Engineの公式大型勉強会「UNREAL FEST EXTREME 2021 SUMMER」が、5月17日(月)~22日(土) にかけてオンラインで開催された。本記事では、18日(火)のGAME講演、ソレイユ株式会社と株式会社ブラストエッジゲームズによる「SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた」の模様をレポートする。
関連記事
Epic Games Japanが語る、MetaHuman Creatorの魅力と新たな可能性~UNREAL FEST EXTREME 2021 SUMMER(1)~
バレンシアガの世界観をゲームに。Streamline Media Groupの新たな挑戦~UNREAL FEST EXTREME 2021 SUMMER(2)~
TEXT_土居りさ子 / Risako Doi(Playce)
EDIT_小村仁美 / Hitomi Komura(CGWORLD)、山田桃子 / Momoko Yamada
原作ファンにもゲームファンにも楽しんでもらえることをめざして
「SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた」と題したセッションでは、ソレイユ株式会社の田中達大氏と、株式会社ブラストエッジゲームズの上野能弘氏、松田理孝氏が登壇した。本セッションでは、アメリカの人気アニメ『SAMURAI JACK』を原作としたゲーム『SAMURAI JACK: BATTLE THROUGH TIME』の開発について解説。開発における工夫点やUE4だからこそ実現できたことなど、開発の裏側について登壇者たちが熱く語った。
セッションの前半は、ソレイユ株式会社のシニアソフトエンジニア・田中氏が、本ゲームの概要や開発方針について紹介した。そもそも本ゲームの原作である『SAMURAI JACK』は、カートゥーンネットワークオリジナルのアメリカのテレビアニメ。2017年に放送されたシーズン5で物語は完結しているが、2021年初めにリマスター版が放送されるなど、現在も海外を中心に人気の作品だ。『SAMURAI JACK: BATTLE THROUGH TIME』では、シーズン5のアニメをベースにしながら、各シーズンの主なエピソードをモチーフに構成しており、主人公ジャックを操って多彩な武器を駆使しながら冒険を進めていくという内容になっている。
▲主人公は、刀を携えた日本人の男。あるとき謎の悪魔「アク」の魔力で未来に飛ばされてしまった彼は、たどりついた未来で「サムライジャック」と名乗り、アクと戦いながら過去へ戻る方法を探し続ける
ゲームの開発方針として田中氏がまず挙げたのは、「原作アニメファンを大事にする」ということ。具体的には、原作を踏襲したストーリーで制作したり、シナリオ作成にはアニメのシナリオライターを起用するなどして、ゲームファンだけでなく原作ファンも楽しませることを意識したという。また、どのプラットフォームでも同じ体験ができるようにUE4を使って効率よく開発することも方針の1つで、田中氏は「UE4を使用したことで、マルチプラットフォーム開発が容易にできたため、とても助かった」と述べた。
続いて田中氏は、本ゲームでUE4を改造した部分について紹介。具体的には、無駄なUVセットをもつアセットは、GPUの負荷になる場合があるため、Static Meshを使用していないUVセットを削除したことや、一部のキャラクターにアウトラインを描画するため、マテリアルのシェーディングモデルを追加したことなどを説明した。
キャラクターのアウトライン描画については、「メッシュの頂点カラーにアウトラインの差分情報を格納し、Gバッファのスペキュラにその情報を出力した」と解説。本ゲームのグラフィクスでは、UE4のライティング・マテリアルをほぼそのまま使用しているが、ジャックの鼻筋、顔と首の間、指の間など局所的にアウトラインが入れられている。
▲アウトラインあり/なしを比べると、ありの方が、首元やあごのあたりが少しくっきりして見える。「わかりにくいちがいだが、キャラクターデザインとしては大事なポイントだった」と田中氏
次に田中氏が「本ゲーム開発で行なっている特殊なこと」だと述べたのが、ライティングシナリオ運用だ。本ゲームでは、ステージ内でライティングが大きく変更される場合に、ライティングシナリオの切り替えが行われている。田中氏は「屋外から屋内など、同じパーシスタントレベル内で複数のライティング環境というシチュエーションに対応したかった」と説明した。
▲具体例1:最初のステージの、前半の鉱山は赤っぽく、後半の沼地は緑っぽいライトの色になっている
▲具体例2:砂漠から始まり、その後宇宙船の中に入るステージ。屋外と屋内でライトマップの明るさが異なっているのがわかる。また、宇宙船内のジャックには赤いライトが当たっている
ライトビルドについては、「ライティングシナリオとそのシナリオでライティングされるサブレベルだけ表示状態にして、その状態でライトビルドを実行すると、Volumetric Lightmapがライティングシナリオレベルに作成される」と説明。また、ライティングシナリオの切り替えは一瞬で行われるわけではないので、切り替え中はフェードしておくことなどを注意点として述べた。
続いて田中氏は、UIについても解説した。最近の海外ゲームではUIがシンプルな傾向にあると分析し、「描画負荷や開発工程から見てもUIは少ない方が良く、必要なものを足す方針で進めている」と語った。例えば、当初はジャックのHPゲージがなく、次第に服が破れたり髪が乱れたりしていくことでHP減少を表現していたが、それではわかりにくいという意見があり、表示することになったという。また、敵のHPはターゲットした対象のみ表示するようになっている。
最適化ポイントについては、「Dynamic Resolutionを使用しているが、なるべく高めの解像度を保ちたかった」と説明。最適化は「ProfileGPU、ProfileCPUで計測し、あたりをつけて修正して再計測、さらに気になるところはプラットフォームのプロファイラで計測した。勘ではなく、とにかく計測をしながら作業を進めることが大切」と述べた。
田中氏は最後に「2年弱という比較的短い開発期間だったが、本ゲームは高評価をいただいている。UE4はマルチプラットフォームでのゲーム開発に適していると改めて実感した」と制作時を振り返った。
「チャンバラ感」を表現するための様々な工夫
セッションの後半は、株式会社ブラストエッジゲームズでCTOとしてエンジニア全般のまとめ役を担う上野氏と、リードエンジニアの松田氏が、それぞれ「組行動」と敵の実装について語った。
まずは上野氏が組行動の実装について解説。本ゲームでは、攻撃をしたり、受けたりする「投げ」の動き全般を「組行動」と呼んでおり、組行動はレベルシーケンスで実装していると語った。レベルシーケンスを任意の場所で再生できるようにしたことについて上野氏は、「本ゲームではC++で書き換えができるようにし、Level Sequencer Actorを継承したアクターにオリジン用アクターを設定する関数を追加した」と説明した。
また上野氏は、「トランスフォームトラックの制御は必須ではないが、非常に助けられた」と語った。環境を無視してキャラクターの位置を強力に固定してくれるトランスフォームトラックと、環境に依存して地形などにぶつかって動いてくれるルートモーションを使い分けることで、多少の地形変化に対応することが可能になるという。
そのほかにも、ダメージを与えたり与えなかったりするしくみや、イベントでのアニメーション再生など、プロジェクトに合わせて細かな実装を行なったことを説明。上野氏は開発時を振り返って、プロジェクト中シーケンサーに仕様変更があったときには苦労したものの、「レベルシーケンスは非常に自由度が高くて助かった」と語った。
続いては松田氏が、敵の実装について解説。敵の実装で目指したのは、「アニメ原作ファンとソレイユのアクションゲームファンの両者に良さを届けること」と「原作に近いチャンバラ感」だったと語った。また、納期もあまり長くない中で、幅広いユーザーに楽しんでもらうために、UE4の機能に極力頼ることも意識したという。
なかでも「チャンバラ感」を出すために工夫したことのひとつは、遠くの敵からの攻撃がプレーヤーに当たらないようにしたり、近くの敵が集団でプレーヤーを攻撃しないように調整するなどして、敵の行動を距離に応じて制限したこと。そのほかボス戦などでは、「ボスを中心にしつつも、周りの敵からも嫌がらせの攻撃をしかけて緊張感のあるバトルを演出した」と説明した。
▲「原作では多種多様な敵キャラクターが存在していてシーンによって雰囲気も異なるため、ゲーム中の攻撃が単調にならないようにすることにも気を付けた」と松田氏
次に松田氏は、Behavior Treeを中心とした敵単体の実装について解説。アクションゲームでは敵の形はさまざまだが、プレーヤーに対するリアクションや組行動など、基本の行動は共通のものが多くあり、それらを「共通Behavior Tree」にしたという。逆に敵の個性を出すような行動はサブツリー化して共通Behavior Treeにぶら下げる形にしたと語った。
また本作では、敵を「AI行動中の状態」と「ライフサイクルの状態」の大きく2つに分けていることについても説明。例えば「パトロール→プレーヤー発見→バトル」という「AI行動中の状態」の一連のながれは、Behavior Tree上に乗せている。キャラクターはこのBehavior Treeに従って動き、さらにBehavior TreeはAI Controllerに従う。これにより、様々なイベントの処理を一括で行うことが可能になるという。
一方、敵が生まれてから倒されるまでを「ライフサイクルの状態」と呼び、これらはEnemy Spawn Pointを使って管理している。松田氏は「エネミーグループマネージャというツールを用意して複数のSpawn Pointを設定し、同時に出現する敵の数や難易度に応じた細かい設定を行なった」と語った。
▲プレーヤーが近づくと水中から敵が飛び出す演出や、倒しても倒しても新たな敵が発生する演出など、Spawn Pointを使うことで、敵の登場演出の幅が広がる。松田氏は「最終的にSpawn Pointの全ての敵を倒すと、エネミーグループマネージャが、ギミックを動かすなどのイベントを発火する」と説明
松田氏は最後に、「当初の実装方針のひとつであった、『チャンバラ感』を良いレベルで実装できた」と開発をふり返った。一方、Behavior Treeのポテンシャルを引き出しきれなかったことを課題として挙げたが、AI Controllerからの要求に対してBehavior Treeがきちんと応えてくれたことや、使用する楽しさを実感できたことを良かった点として述べ、講演を締めくくった。
「SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた」講演動画