見出し画像

#REALITY釣り部 のリアルタイムサーバー

#REALITY釣り部 Season1

こんにちは、ゲーム事業部エンジニアリングチーム マネージャーの角田です。
弊社では先月#REALITY釣り部をリリースいたしました。

まずはSeason1という形で2週間限定のサービスでしたが、遊んでいただけましたでしょうか?
今回はこのタイトルで使われている技術についてお話したいと思います。

…と、その前に触れておかなければならないことがあります。
#REALITY釣り部を楽しんでいただけたのと同時に、プレイに支障のある不具合も確認しております。
遭遇してしまった方は申し訳ありません。
次回Season2に向けてゲームの改善と同じプライオリティで不具合の解消に努めていますので、引き続きREALITY釣り部をよろしくお願いいたします。


リアルタイムサーバー

ゲーム事業部の初作となる#REALITY釣り部では、REALITY上で動作するネイティブアプリケーションとしてリアルタイム性を重視しました。

4人でコラボ配信を行いながらリアルタイム性の高いマルチプレイゲームを行うためには、既存のAPIサーバーだけでは実現できません。

サーバー上にゲーム専用のプロセスが立ち上がり、その中で刻々と変化するサーバー内の事象をリアルタイムに管理し適切にクライアントとやりとりする必要があります。
これをDedicated Serverと呼び、FPSの黎明期にはゲームのクライアントとは別にサーバー専用のプログラムが付属しているタイトルもありました。

クラウドサービスもなくサーバーコストが高かった時代はユーザーにサーバーを立ててもらうのが有効だったのですが、現在は競技性が高くeSportsとして厳格なチート対策が求められることもあり運営が用意したサーバーにしか接続しないため、あまり耳にしない用語かもしれません。

近年Agonesの登場と共にクラウド上にこの仕組みを採用するケースが増えてきて、界隈ではDedicated Game Server(以下DGS)と呼ばれています。
REALITY釣り部でもAgonesを採用していますが、これについては別の機会で解説させて頂きます。


#REALITY釣り部のサーバー構成

#REALITY釣り部ではREALITY上で行われるコラボ配信のシステムに乗る形で#REALITY釣り部用の各種サーバーを連携させる必要があり、以下のような構成となっています。

REALITY釣り部のサーバー概念図

REALITYには既にリリースされているWebベースのゲームが多数存在し、それらはMultigame Serverのみで動作しています。

▼仕組み
#REALITY釣り部はゲーム用のAPI Serverを別に持ちAgonesでマッチング、DGSを生成して各ホストに振り分ける仕組みです。
DGSは高いリアルタイム性を保証するためにホストとコラボ配信のゲストしか接続しません。
また、DGSは突発的なクラッシュなどで停止するとデータが失われる可能性が高いため、釣りメダルの収支など失うことが許されない事象はAPI Serverと逐次通信します。
視聴者についてはホストの画面をそのまま再現するために必要なデータをMultigame Server経由で受け取ります。

▼DGSのリアルタイム性
DGSの応答時間は日本国内の固定回線なら50ms以下、4G回線では80~100ms程度を基準にしています。
5G回線は本来のパフォーマンスが出る条件が揃えば固定回線並のレスポンスになるはずですから今後に期待ですね。
今のところ格闘ゲームの様なシビアな同期型の仕組みが求められることはありませんが、ここのレスポンスは「移動して何かに当たる、乗る」「ものを投げる、動かす」「アバターで挨拶をする」など、多くの基本挙動にも影響するため妥協できません。

一方で国土が広く3Gなど回線品質が悪い地域も海外にはまだまだあるため、遅延が200ms、300msと悪化しても破綻してはいけません。
こちらはパケットロスなど技術的な解決を目指す問題に加えて、体験を実現するゲームデザインや仕様による遅延を隠蔽する工夫が求められますね。

▼スケーラビリティ
このサーバー構成はこのままスケールすることも特徴となっていまして、同接数十のテスト段階からサービスイン後の数万、数十万の規模まで設定を変更するだけで対応可能です。


#REALITY釣り部におけるDGSの役割

#REALITY釣り部のDGSで処理されるのは
1.魚影の生成、消滅、移動
2.プレイヤーのキャスト
3.魚のつつき、ヒット
4.釣果(API Serverとの通信もあり)
5.ボスゲージの増加、昼夕夜のフェーズチェンジ

これらの処理を一元管理することにより、破綻のない高いリアルタイム性を実現しています。
ゲームのフィールドである釣り場をDGS内部に持っているということですね。

釣り場はDGS内にのみ存在し、各クライアントから同じものを見ています。

今後のアップデート

REALITYにはメタバースという目標があるため、対応人数の増加、空間の拡大、その中での移動、コリジョン制御などの各種インタラクション、ゲームで使われる低遅延処理、高効率のデータ通信(UDPの活用、圧縮伸張、ゲームデザイン的な省略)を用いて規模の拡大と機能の拡充を目指しますが、我々にとってはSNSとしての側面も重要です。

単純に多人数が同一空間内に存在できるMMORPG的なサーバーを目指すわけではなく、REALITYの特徴である少人数対不特定多数の非対称コミュニケーションにDGSを組み合わせて新しい体験を作り出していきます。

ゲーム事業部には過去コンソール機やPCでゲームを作ってきたスタッフも在籍していますが、これから必要なことは今までのゲームの技術をなぞるだけではなく、現在の技術との融合です。

もうDedicated ServerをCやC++だけで書く時代ではありませんが、わずかな通信データを削る必要がない時代も来ていません。
モダンなソフトウェア開発と1ビットが血の一滴の精神を両立することで見えてくる世界もあるはずです。

ゲーム事業部エンジニアリングチームではWeb3.0やNFTと聞いても顔をしかめることなく、古のテクニックを過去の遺物と一笑に付すことのない、技術に対して真摯で探究心あふれる仲間を募集しています。

サーバーサイドエンジニア募集中です!

カジュアル面談も行っているのでお気軽に!