インディーRPG『Shores Unknown』に見る、徹底したデータ管理による小規模開発【UNREAL FEST EXTREME’21 WINTERレポート】
UE4公式大型勉強会「UNREAL FEST EXTREME’21 WINTER」が11月1日から6日にかけて開催されています。セッションのひとつとして、インディー発のRPGの開発事例についての講演「少人数と低予算で賢く開発!超野心的なインディーRPGの挑戦」が配信されました。
本公演では、技術的な事例からプロトタイピングの変遷、トラブルや解決法など、インディー開発においてとても参考になるノウハウが大量に紹介されました。
特に現在UE4でゲーム製作をする開発者必見の内容となっていますので見ていきましょう。
ゲーム「Shores Unknown」と制作体制
「Vallynne」は、インディーゲーム「Shores Unknown」を開発中のスタジオです。今回登壇したのはVallynneに所属するラドニフ由子さん、ラドニフイリヤさん。
「Shores Unknown」はターンベースのRPGで、2021年2月からSteamにてアーリーアクセスが配信されています。
ノンリニアで自由度が高いシナリオを持ち、正式版のボリュームは20~30時間ものプレイ時間になるとのこと。
チームは多国籍からなる5人のコアメンバーで構成され、それ以外に一時的な契約として14人が参加し、アセット等の発注を依頼する形で活動を続けていると発表されました。
外部クリエイターは知人に頼んだ他、RedditやTwitterで探して採用するケースもあったそうです。
イリヤさんは質疑応答にて、少人数での開発の利点としてコミュニケーションが円滑だったり、作業の分担箇所の把握が容易といったものを挙げています。
反面、担当が兼業になりがちで一人あたりの作業量が多いことにも言及していました。
仕様書やゲーム中のデータはGoogleドキュメントで、タスクはAsanaで、会話はDiscordでといったようにオンライン上ですり合わせが行われ、タイムゾーンの異なるメンバー間の協力を実現できたということです。
プロトタイピング
ゲームの開発は2017年から趣味のプロジェクトとして開始されたそうです。
システムが動くようになった段階でUE4マーケットプレイスのアセットを購入し、ゲーム中のキャラクターや景観が形作られました。
使用されたSynty Studiosのアセットシリーズ(マーケットプレイス)
ラドニフさんは同年冬にはストーリー要素を追加し、「Project Shore」と銘打ちアルファ番をリリースしています。
約1年でゲームの要素を一通り詰め込んだプロトタイプが完成していることになります。
ゲームのコンセプトを知ってもらうにはとても良い手段になりそうです。
この後アルファ版公開をきっかけにパブリッシャーとの契約に成功し、2018年からはメンバーを新しく迎えて本格的に開発が始まりました。その際イリヤさんは仕事を退職し、開発に専念するスタイルにシフトしたそうです。
ゲーム中のキャラクターはオリジナルのデザインに置き換えられましたが、既存のアセットと雰囲気をマッチさせるため、絵柄はローポリのままに統一されました。
購入したアセットを捨てることなく、工数とコストを抑えることにも繋がっています。
コードの実装
UE4ではコードをC++で記述できるほか、ビジュアルスクリプトである「ブループリント」が搭載されています。
ブループリントは一部制限はあるもののアーティストでも気軽に触りやすい設計をしており、簡単なロジックならプログラマに頼らず実装することも可能です。
「Shores Unknown」では開発初期にブループリントのみを使用していたこともあり、現在もロジックは90%以上がブループリントで実装されているそうです。
ただし、クラス構成や構造体(Structure。複数の変数を用途に合わせて1つにまとめたもの)に関しては部分的にC++を使用している部分もあるそうで、これは根幹に関わる部分ではC++の方がより多くの情報にアクセスできるためと理由が述べられました。
また、ブループリントは比較的負荷が高くなるケースがあるので、プレイヤーから離れたアクターはAIを無効化するなどの対策をしたそうです。
効率的なゲームキャラクターの設計
キャラクター達は独自の方法で設計され、なんと700体以上の登場キャラクターデータが登録されているとのこと。
その実装について見ていきましょう。
「Shores Unknown」のキャラクターは、内部的にふたつのデータを持つ設計になっていると前提が説明されました。
両者はセーブデータに保存されるか否かで分けられ、例えば成長記録や装備アイテムなどは保存される「CharacterData」に、外観やボイスといったデータはビルドされたゲームデータが持つため「CharacterStatics」として振り分けられているそうです。
これらはUE4内の「データテーブル」という機能を使って格納されています。
これは表にデータを書き込み保存できる機能で、スプレッドシートなどを使用しUE4外で作成しインポートすることも可能です。
データテーブルの管理には「DataTable procedural update plugin」というプラグインアセットが役に立ったとのこと。
これはデータテーブルにランタイムで情報を書き込む機能を追加するプラグインであり、ゲームを実行しながらデータを編集することが容易になります。
DataTable procedural update plugin
https://www.unrealengine.com/marketplace/ja/product/datatable-procedural-update-plugin
UE4でブループリントなどからデータテーブルを扱う際、インデックス名(RowName)を文字列で指定する必要があります。
しかし開発中にはタイプミスによるエラーが懸念されるため、プルダウンメニューからインデックス名を選択する形式に変更し、効率化をはかるテクニックが紹介されました。
株式会社ヒストリアの技術ブログに、データテーブルを使用したプルダウンメニューの実装方法が公開されています。
[UE4] データテーブルの内容を使って変数の中身を一覧から選択させる方法
https://historia.co.jp/archives/12411/
キャラクターはBlenderでモデリングされました。
自動で人体のリグを生成する「AutoRigPro」と精度の高い自動ウェイト機能を持つ「Voxel Heat Diffuse Skinning」といったプラグインによってリギングとウェイトペイントの手間を最小限に省いているとのこと。
「AutoRigPro」はUE4標準のマネキン互換のリグにも対応しているため、マーケットプレイスのアニメーションアセットとの親和性がとても高くなります。
髪や衣類で物理演算を適用する部分、いわゆる「揺れもの」にはUE4標準のClothing機能を採用しているとのこと。揺れる部分は頂点数の少ない別パーツとして追加することで、パフォーマンスと設定のしやすさが実現したそうです。
また、LOD(Level of Detail。遠く離れたモデルの描画を簡略化する機能)により簡略化されたモデルには物理演算は適用されないため、モデルにLODを設定することでコストを制限できるというテクニックも。
キャラクター生成には「Editor Scripting」機能を使い、UE4内で作られたエディタが使用されました。
エディタに入力されたデータが、前述のキャラクターの外観を決定する「CharacterStatic」の情報を持つデータテーブルにエクスポートされる流れになります。
キャラクターはベースとなるメッシュのみがアニメーションし、髪や顔、服といったパーツは「MasterPoseComponent」という機能でベースメッシュに追従する手法で動いているそうです。
しかしデータテーブルで参照されるモデルデータを、常にすべてロードする設計になっていたためにメモリの枯渇が発生。コンシューマ機で動かす際大きな問題になったと語られています。
これはハード参照と呼ばれ、参照するモデルを直接指定している場合にトラブルが起こることがあります。
この問題を解決するために、アセットの参照がソフト参照に切り替えられました。
ソフト参照ではゲーム実行中に任意でアセットをロード・アンロードしてメモリに余裕を持たせることが可能になります。
これにより500MB占有していた「CharacterStatics」のサイズを7MBにまで抑えることができています。
「Shores Unknown」ではロード中、画面が暗転している間にアセットをロードしているとのこと。
戦闘システムの構成
「Shores Unknown」ではターン制のコンバットシステムを採用しています。
キャラクターのアニメーションは、ほとんどがマーケットプレイスで購入したものを使用しているそう。
命中判定などが見たとおりに再現されるアクションゲームなどとは異なり、戦術的な要素があるRPGでは多くの変数や複雑な計算式が用いられる傾向があります。
こういった戦闘システムを直感的に作るのは難しいですが、「Shores Unknown」はオブジェクト指向の強い方法で多くの要素を生み出しています。
戦闘中のアビリティ使用により攻撃やサポートなどの様々な効果が発生します。
内部的には、アビリティに対応したアクタをスポーンすることで演算やエフェクトを呼び出しているそう。これらの処理はすべてブループリントで実装されているとのこと。
キャラクターの行動により様々な効果を生み出せるよう、ブループリントのEvent Dispatcherが積極的に使用されているとのこと。
Event Dispatcherは特定の関数とイベントを紐付けるもので、戦闘中ではダメージなどを検出して新たなイベントを呼び出しています。
カットシーン・シナリオ作成
会話システムはエクセルのシートでテキストを管理する予定でしたが、結局ゲームデザイン・実装に合わせて会話システムが持つ機能の目標を設け、それを満たすようなシステムが開発されました。
会話は「DialogueData」というデータテーブルで管理され、セリフを話すキャラクターや、次に再生する会話の情報が格納されているとのこと。
会話シーンを管理するアクタ「DialogManager」は常にレベル上に存在しているため、アクタを参照することで会話が呼び出せるようになっているそうです。
レベルデザイナーがイベントにアクセスしやすくなる仕組みを作ることで、プログラマが介入せずとも会話シーンなどが呼び出せるようになっています。
少人数でプロジェクトを回さなければならないインディー開発では、メンバーに作業を任せきる環境によりいっそうの効率化が見込めそうです。
ゲーム中のカットシーンはシーケンサーで作られているそう。
UE4ではシーケンサーのデータはアクタとしてレベルに配置したり、変数から参照することもできるため、幅広い用途で扱うことができます。
シーケンサーは既にレベル上にいるキャラクターを動かすこともできるため、アニメーション用に新しくモデルをスポーンする必要がありません。
チームにはアニメーターがいないため、ゲーム中のアニメーションはマーケットプレイスで購入したものが多く使用されているそうです。
それに加えてアニメーションブループリントを使用し、プロシージャルなアニメーションも作成されました。
外部のクリエイターに発注したアニメーションも一部あるとのこと。
レベルデザイン
「Shores Unknown」では基本となるレベル(パーシスタントレベル)に複数のサブレベルを内包し、各サブレベルがキャラクターやクエストを分担して所持するという構成になっていると紹介されました。
こうした方法で50以上のマップが作成され、レベルデザインや最適化、作業の同時進行をより快適なものにしているそう。
パーシスタントレベルとサブレベルの構成やバランスは開発環境によりけりですが、要素の多いRPGでは分割することで恩恵を受けやすくなりそうです。
また、サブレベルが一部のライティングやジオメトリを持つことで、同じ地形で異なる景観を見せるなどのバリエーション変化も可能になるという要素も語られました。
サブレベルが増えてくると管理が大変になり、目的のサブレベルを見失いがちです。
これを解決するために、レベルもデータテーブルで管理し、ロジックと紐付けることでフラグとの整合性をチェックする方法がとられました。
現在のレベルにマッチしたサブレベルが自動的に検索されるため、ヒューマンエラーを抑えることにも繋がります。
UE4に搭載されている地形編集機能「ランドスケープ」は、「Shores Unknown」の開発ではローポリというスタイルにマッチしなかったため使用されませんでした。
大まかな地形はBlenderでモデリングされ、UE4で山や建造物といったアセットを追加していくフローになったそうです。
最後に主に草木を配置するのに使われる「Foliage」ツールを使用し、植物や小石といったモデルを配置し装飾をしている様子が映されました。
数の多いオブジェクトはUE4のMergeActorツールで結合し、描画不可を減少させているそうです。
特にモデルを曲げて配置するSplineMeshでは負荷の減少が顕著になっています。
しかし、建物などの大きなモデルをマージすると、遮蔽されたオブジェクトの描画を省く「オクルージョンカリング」が効きにくくなり、逆に負荷が上がってしまうケースも。
パフォーマンスを常にチェックしながらの負荷対策が必要になりそうです。
ゲーム中のライティングは動的なライトのみが使用されているとのこと。
遠景の雰囲気を表現するため、Distance Field Shadows(DSF)が有効にされました。
DSFは遠くの影をソフトに、写実的なものにする機能です。使用するにはプロジェクト設定から有効にする必要があります。
「Shores Unknown」は2022年に正式版をリリースする予定で、日本語へのローカライズやNintendo Switchでのリリースといったものも含まれるとのこと。
将来的にUE5へ開発の舞台を移すことも検討されているそうです。
少人数体制で効率的に物量を制作するワークフローの好例
「Shores Unknown」というひとつのゲーム開発を通して、多くのクリエイターにとって課題となる軽量化やワークフローの知見を取り入れることができます。
特にパフォーマンス関連の事故やヒューマンエラーに関しては、実際にゲームを仕上げていかないと気づかない部分も多く、先人たちの軌跡がとても良いケーススタディになります。
これからゲームを設計する方には、様々な開発事例を見た上で自作品の実装設計に役立てることができるでしょう。
今回の事例も唯一の実装方法ではないので、過去のセッションも参考にしてプロジェクトに合ったデザインをしていきたいものです。
「UNREAL FEST EXTEREME」では他にも有用なセッションがたくさん配信されています。
ノウハウが得たい方、開発モチベーションを高めたい方はぜひ本動画や、他の動画もチェックしてください。
Shores Unknown 公式ページ
UNREAL FEST EXTREME 他セッションの視聴はこちらから