Diarkis Field の特徴

Diarkis Field はクライアントの座標を使ってクライアント同士がリアルタイムに同期できるようにする機能です。 Diarkis のサーバクラスタ全体で仮想世界を表現することで一つの仮想世界を全てのクライアントが共有することが可能になります。

Diarkis Field はオープンワールドを「グリッド」単位で自動分割してサーバのオートスケールに合わせて「グリッド」の数も自動でスケールします。これによって接続クライアントの規模に合わせてオープンワールドの自動スケール・イン/アウトを実現しています。

グリッドについて

ゲームなどで使われる物体の当たり判定(Collision Detection)を効率よく計算するために事前にマップをグリッドで分割して同じグリッドにいる物体かどうかの判定をしてから、もっと処理負荷の高い物体同士の当たり判定の計算をする方式と同じコンセプトを採用しています。

まず同じグリッドにいるかどうかをチェックすることで、そもそも視界に入る可能性がないクライアントを排除します。その後サーバは視界に入るクライアントを見つけたらそのクライアント同士で同期するためにサーバからリレー方式でリアルタイム通信を使って同期をします。

隣接するグリッドとの同期

別のグリッドに居るクライアントは視界に可能性はないという判定をされるますが、視界に入っている場合はグリッドを跨いでも通信の同期を取ることが可能です。これによりユーザーから見ると境界線が全く存在しないシームレスな世界の表現を実現します。

視界に大量のクライアントが入ってしまった場合

イベントなど多くのユーザーがごく限られた地点に集中するような場合、視界に大勢のクライアントが入ってしまうことがあります。あまりにも多くのクライアントと同期をとってしまうとサーバの高負荷にもつながりますし、グラフィックの描画も難しくなる場合が発生します。

Diarkis Field は明示的に同期するクライアントの数の最大値を指定することが可能です。この指定した数値を超えて視界に入った場合は自分に一番近いクライアントでこの上限以内のクライアントとだけ自動で同期をすることが可能です。

field

リクエスト型のクライアント同期

リクエスト型の同期では、任意に自分の視界に入るクライアントをサーバから取得することができます。この同期方式の特徴は自分のタイミングで自分が欲しい時に同期データをサーバから取得してくることが可能な点です。

サーバ通知型のクライアント同期

サーバ通知型の同期では、サーバから自動で自分の視界に入っている他のクライアントと同期をします。サーバから通知される同期プッシュメッセージを受け取るイベントをリッスンすることでサーバからプッシュがある度にイベントが発火して同期を行います。