Fusionイントロダクション
概要
Fusionは、Unityのための新しい高パフォーマンスな状態同期ネットワークライブラリです。単一のAPIで、専用サーバー、クライアントホスト型、共有/分散権限など、様々なネットワークアーキテクチャに対応します。
「シンプルさ」を大切に構築しており、Unityの代表的なワークフローとシームレスに統合できます。また 、データ圧縮、クライアント側予測、遅延補正等をアドバンスト機能もデフォルトで搭載しているため、さまざまなユースケースに対応します。
例えば、RPCやネットワークステートはメソッドの属性やMonoBehaviour自身のプロパティ自体で定義され、明示的なシリアライゼーションコードを必要としません。またネットワークオブジェクトは、ネスティングやバリアントなどUnityの最新プレハブ機能を使用することで、プレハブとして定義することができます。
実は、Fusionは最新の圧縮アルゴリズムを使用して最小CPUオーバーヘッドでの帯域幅要件を軽減しています。データの転送は圧縮スナップショット(Hosted Modeのみ)または結果整合性のある部分的なチャンクのどちらかで行われます。後者の場合は、完全に構成可能なエリアオブインタレスト(関心領域)システムが提供され超大人数プレイヤーの場合も対応できるようになっています。
Fusionでは、 Shared Mode または Hosted Modeのどちらにも対応する堅牢なティックベースのシミュレーションを内蔵しています。主な違いは、ネットワークオブジェクトにオーソリティ(変更権限)を持つ人にありますが、これは他のどのSDK機能が使用できるか知らせてくれます。
Hosted Mode/ Server Mode
Hosted Modeでは、専用ヘッドレスサーバーとしての動作または同一のデバイス上で組み合わされたクライアントとサーバーとしての動作どちらの場合でも、全てのオブジェクトに対してサーバーに完全かつ独占的な権限があります。例外はありません。
クライアントが修正できるのはネットワークオブジェクトのみで、サーバーにインプットを送信する(そしてサーバーにそのインプットを反省してもらう)か、RPCを使用して趨勢を依頼することで行います。
クライアントが直接ネットワークステートに行う変更は全てローカルの予測となり、受信されるとサーバーからの実際のオーソリテーティブなスナップショットに置き換えられます。これはクライアントがサーバーが提供するステートにロールバックしてそこから再シミュレーションを行いローカルティックにバックアップする調整として知られます。
以前の予測が正確であった場合、このプロセスはシームレスとなります。正確でなかった場合はステートが更新されます。これは、ネットワークステートがレンダリングステートとは異なり、レンダリングがこの新しいステートをスナップする場合もあれば、様々な形式の内挿やエラー訂正を使用してスムージングを行い訂正によってもたらされるビジュアルアーティファクトを軽減するからです。
Hosted Modeでは、Fusionはラグ補正ヒットボックスに対応して、各クライアントに見えている他のクライアントが過去のものであり、サーバー上の通常のレイキャストはプレイヤーに見えている者と一致していないという事実に対応できるようにしています。ラグ補正によって、サーバーはインプットの受信時において効果的にプレイヤー視点でワールドを見ることができるようになっています。
ファイアウォールやルーターを使用してHosted Modeを実行する場合、Photon cloudは必要に応じてUDPパンチスルーまたはパッケージリレーを提供しますが、セッションの所有者はホストで、ホストが切断するとセッションは失われます。Fusionには、現在のホストが切断した場合に、ネットワークオーソリティを新クライアントに委譲するためのホストマイグレーションの仕組みがあります。ただしShared Modeとは異なり、これを行うにはクライアントコードで特別な処理が必要になります。
Shared Mode
Shared Modeでは、ネットワークオブジェクトのオーソリティは全クライアントに振り分けられています。具体的には、各クライアントは、最初の段階で自分がスポーンしたオブジェクトのオーソリティを所有していますが、そのオーソリティを他のおクライアントに自由に渡すことができます。オプションとして自由にオーソリティを獲得することもできます。
Shared Modeでのデータ転送モードは常に 結果整合性 となり、ラグ補正、予測およびロールバック等の機能は使用できません。シミュレーションは全クライアントで同様のティックレートで常に先へ進みますが、必ずしもそのティックがクライアント間で一致する保証はないことに注意してください。
Shared ModeネットワークセッションはPhoton cloudが所有しており、接続しているクライアントがいる限り生き続けます。Photon cloudはパッケージリレーとして動きUnityを起動する必要なくネットワークステートへアクセスすることができます。専用サーバーハードウェアをスピンアップする必要なく軽量なサーバーロジックおよびデータ検証(例:チート保護など)の実装を可能にしています。
Shared modeは多くの点でPUNに類似していますが、機能がより充実しスピードも上がり、ランタイムアロケーションオーバーヘッドもありません。
PUN、Bolt、Fusionの比較
Fusionは、Photonに既存のUnityへのステート転送製品(BoltとPUN)に置き換わりパワーアップさせるために開発されました。対応のアーキテクチャ等も含みます!
PUNとBoltは堅実なネットワーキング・ソリューションですが、そのアーキテクチャではさらなる最適化ができません。Fusionは、PUNとBoltの優れたコンセプトをすべて融合させるとともに、高性能なアーキテクチャーを一から構築し、最先端の機能をすぐに利用できるようにしました。次の図は、その改良点をまとめたものです。
