【レポート】『PSO2 ニュージェネシス』 長期運営タイトルにおける、大規模バージョンアップの開発事例の紹介 #CEDEC2022 #classmethod_game

CEDEC2022の"『PSO2 ニュージェネシス』 長期運営タイトルにおける、大規模バージョンアップの開発事例の紹介"の視聴レポートです。身に覚えがある話などありました...。
2022.08.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。ここではCEDEC 2022で講演された「『PSO2 ニュージェネシス』 長期運営タイトルにおける、大規模バージョンアップの開発事例の紹介」について興味あるところをメインに、まとめてみました。

セッションの概要

『PSO2 ニュージェネシス』 長期運営タイトルにおける、大規模バージョンアップの開発事例の紹介

『ファンタシースターオンライン2(以下、PSO2)』を運営、開発しながら、『PSO2 ニュージェネシス(以下、PSO2:NGS)』へと大規模にバージョンアップする必要があり、そこで得られた知見、事例を紹介します。
・開発環境やデータコンバート手法、自動化の取り組みの紹介
・オープンフィールドの実装方法とデータ管理手法、最適化事例
・『PSO2:NGS』で採用されたグラフィック表現と、『PSO2』アセットに対する互換性の取り組み

内容について

以前のPSO2は、2012年7月にリリースされました。そしてその後2021年6月にグラフィックスエンジンを一新してリリースされたのはPSO2ニュージェネシス(以降、PSO2 NGSと表記)となります。この9年間運営されたゲームに対して、互換性を保ちつつリニューアルするのは相当大変な事であるのは容易に想像できます。そのようなバージョンアップがやり遂げられた背景を知りたく、このセッションを視聴しました。

クライアントの構成

このような互換性を残したバージョンアップを行う際には、何を共通化して、何を分離させるかを考慮する必要があります。PSO2 NGSでは次のスライドにあるように、グラフィックス関連をPSO2とPSO2 NGSで別モジュールにしつつ、それ以外の処理についてはPSO2と共通化した設計となっていました。

この方法であれば、今後の運用に伴うクライアントの変更があっても追従して対応できます。そして、PSO2 NGS固有のグラフィックスへの対応も可能となります。互換性の維持や今後の運用への対応への考慮なども考えられており、理にかなったモジュール構成となっていると感じました。

サーバの構成

これとは対照的にサーバ側は、別々のアプリケーションとして運営されていました。

このあたり、この後に解説されたPSO2 NGSで登場したオープンフィールドへの対応を考慮してこのような構成になっているものと考えられます。

データ管理

また、ゲームで扱うアセットのバージョン管理やデータの互換性などについても触れられていました。これだけ長く運営しているゲームでもありますので扱うアセットのファイルサイズも約540GBと膨大な量となっています。

このような膨大なバイナリデータを管理するためには、やはりPerforceのようなゲーム業界でよく使われているバージョン管理ソフトウェアを利用するのがよいのでしょう。Git LFSを使っても管理はできなくはないですが、こういった大量かつ大容量のバイナリファイルの扱いはPerforceが得意としています。

ブランチ運用

ソースコードのブランチ運用ですが、特殊なことはしておらず、ごくごく普通の手法で行われています。PSO2 NGSを開発するにあたってはPSO2 NGSブランチを作成した上で開発を継続し、そして一通り完成した時点でマージし、後はPSO2とPSO2 NGSの両方に対応したブランチとなっています。

スライドには両方が動くブランチで開発と簡単に書かれていますが、この互換性を維持しつつメンテナンスしたり機能追加していくのは、とてもとても大変だと考えてます。

PSO2 NGS開発中の話ですが、PSO2 NGSが合流するまでのPSO2でのコード差分をPSO2 NGSに取り込む様子も解説されていました。確かに開発差分をその都度取り込む必要があります。

このスライドには、「コンフリクトの際のマージは大変…」と書かれています。私にも身に覚えがあります。軽く一文で大変と書かれていますが、もう発狂寸前になることもあるほど大変だったんだろうなぁ、という事は想像できます。お疲れ様でした...。

負荷測定

印象に残ったのが負荷計測ツールですね。このようなネットワークを介したゲームでは負荷測定は必須です。よくあるWebサービスと違い、このようなネットワークゲームだとゲーム仕様にあわせて負荷測定ツールを自分たちで用意する必要があります。そのためにPSO2 NGSではダミークライアントを表示するソフトウェアが開発されていました。

このようなダミークライアントを表示するツールですが、しっかりゲーム描画の仕様などを把握して作成していかないと「一通り完成して一見すると大量にキャラクターが表示されて負荷がかかっているように見えるが、実は全く負荷がかからないツールだった」ということにもなりかねないので。このあたり注意深く作成していく必要があります。

グラフィクス

PSO2 NGSの売りの一つがグラフィックスまわりの刷新です。ですが、ここに過去の互換性を保ちつつ刷新ということで、さまざまな苦労があることは想像に難くないです。真っ先に上がるのが「PSO2向けに作成されたアイテムを PSO2 NGS向けのステージで表示する」といった様な、過去に作成されたグラフィックスデータを刷新されたグラフィックス環境で表示される、もしくはその逆といった事ですね。

ここを何も考えずに対応しようとすると同じアイテムをPSO2とPSO2 NGS向けの両方に向けてデータを用意することになるでしょう。が、これは物量的にも現実的ではないです。そのため、既存データを上手く使って、違和感のある内容に表示させる、といったことをする必要があります。

このあたりはPSO2開発初期段階からPSO2 NGSについて考慮してデータ作成されていればよかったのでしょうが、そんなことはできないでしょう。いろいろ試行錯誤された結果かと思っています。

その他

その他、PSO2 NGSで追加されたさまざまな仕様について、どのような工夫がされていたかなどが解説されていました。

まとめ

最初に述べるとPSO2 NGSリリースお疲れ様でした、ということでしょうか。過去の互換性を保ちつつ新しいものをリリースする苦労は理解していますので、この発表の裏にはいろいろあったんだろうなぁ、と思いを馳せてしまいます。

あと、大規模にしろ、そうでないにしろバージョンアップ対応には銀の弾は存在せず、自動化できるところは自動化しつつ、あとはひたすら地味に一つづつ対応していくしかないよなぁ、と思いを新たにしました。