
クリス・ブッチャーは4点の1であるエンジニアリングリードでバンジースタジオの大ヒットの創出監督を担当した「ヘイロー2を。」Halo 2のAIに関する記事を読んだことがあれば、Chrisが本当に賢い人物であることをすでにご存知でしょう。11月3日にバンジーを訪れたとき、実際にクリスと2回座る機会がありました。
「Halo2」とオリジナルの「Halo」の最大の違いの1つは、「Halo2」をXboxLiveで再生できることです。それを実現するために、Bungieはインターネットを介してHaloマルチプレイヤーマッチをネットワーク化する新しい方法を作成する必要がありました。この責任は主にクリスの肩にかかった。2回目のインタビューでは、ネットワーキング「Halo2」について説明しました。

さて、この記事をあなたが見慣れている伝統的なQ&A形式にするのではなく、クリスが言わなければならなかったことを読んでもらいましょう。真実は私がクリスに1つの質問をしただけだからです:
「では、 『Halo 2』をライブで公開するにはどうすればよいのでしょうか?」
彼の答えを読み続けてください。
もっとハローが欲しいですか?
ストーリーとサウンドの作成に関する内部情報、Bungieスタジオのツアー、Haloの歴史の入門書などがあります。
ここをクリックしてすべてをチェックしてください。
- 今すぐ一緒に
- ここで誰が担当していますか?
- Halo2の新しいネットワーク
- 例えば
- 適切な場所にあるすべて
- 優先順位をまっすぐにする
今すぐ一緒に

クリスブッチャー:
「Halo1は、System Linkを使用してLAN(ローカルエリアネットワーク)経由でプレイできるため、ネットワークゲームでした。それは非常に成功した部分でした。「Halo2」で本当にやりたかったのは、それを取ることでした。ネットワークモデルをインターネットに拡張して、XboxLiveでプレイできるようにします。
「Halo1」ネットワーキングは、同期ネットワーキングと呼ばれるものです。つまり、いくつかのアプリケーションとソフトウェアのさまざまなインスタンスがさまざまなマシンで実行されている場合です。この場合、ゲームは4台のXboxで行われます。これらのマシンはすべて同じゲームシミュレーションを実行しており、ゲームシミュレーションは決定論的です。つまり、シミュレーションに同じ入力を提供すると、そのすべてのコードを実行したときに同じ出力が生成されます。その事実を利用して、マルチプレイヤーゲームを活用します。 [情報]をすべてのマシン(ゲームの世界全体で起こっていることに関するすべての情報)に送信する代わりに、送信するのは「現時点でゲームシミュレーションに提供する入力です。 「」
NTSCは60ヘルツであるため、ゲームは毎秒30ティックで実行されます。したがって、画面を2回描画するごとに1つのゲームティックを実行します。一度に1つのフレームをレンダリングするため、フレームレートは毎秒30フレームになります。ゲームを実行するたびに、マシンはその時点でプレーヤーがゲームで行っていることをサンプリングします。たとえば、ジャンプするときも、車を手に入れるときも、左に3度回転するときも、発射ボタンを引くときも、コントローラーで何をしているのかなどです。
次に、プレーヤーの入力内容に関する情報をゲームシミュレーションで他のすべてのマシンに送信します。また、ローカルマシンにいないすべてのプレーヤーから情報を受け取るため、すべてのマシンが同時に必要なすべての入力を持ち、すべてが一緒にシミュレーションを実行します...その後、すべてのマシンが場所を認識します[各プレイヤーの行動]は世界とその結果にあり、その結果はすべてのマシンで制定されます。..したがって、世界の状態はマシン間で一貫して維持されます。」
ここで誰が担当していますか?

クリスブッチャーは続けます:
「Haloはクライアント/サーバーベースのネットワークモデルでもあります。つまり、ゲーム内の1台のマシンがゲームのサーバーであり、全員がそれに参加してそのマシンをマスターにします。クライアントの場合は、アクションをサーバーに送信します。そして、サーバーがすべての人からアクションを受信すると、サーバーはすべてのクライアントにすべての人の集合的なアクションを送信します。これにより、すべての人が同じゲームに参加していることを確認できます。
マラソンにはいくつかのバグがありましたが、実際には、当時マラソンで使用したのと同じネットワークモデルです。このネットワークモデルの特徴は、2台のマシンが同じ入力を提供しても異なる出力を取得する可能性があるコンピューターコードにバグがある場合、問題が発生する可能性があることです。発生する可能性のあるさまざまな方法がたくさんあります。コンピュータでランダムなガベージメモリを使用している場合、それはマシンごとにランダムになるバグである可能性があります。それは悪いことです。
もう1つは、すべてのマシンでまったく同じシミュレーションを実行しているわけではないということです。[サーバー]がすべてのマシンで発生しているアクションに関する情報を送信しているとき[サーバー]はそれらをすべてのマシンに送信しません。もし私たちがそれをみんなに送ったとしたら、それは純粋なピアモデルになるでしょう。
重要なのは、シミュレーションを実行し、世界を実行することです。これは私たちが行うことの一部ですが、すべてのフレームでは、ローカルプレーヤーのためだけに、一人称の武器が何であるかを把握する必要があります。彼らが手榴弾をリロードするか投げるかにかかわらず、やっています。私たちは実際に彼らの世界観も表現しています。
したがって、これらのアクションは1台のマシンでのみ実行されるため、これらのアクションが世界の決定性状態に影響を与えることは許可されません。つまり、基本的にゲーム内に分離があります。これは決定論的なものです-それは世界のすべてのオブジェクトとそれらがどのように動くかです。これは決定論的ではないものです。ローカルマシンで聞こえる音、グラフィックスでレンダリングしているもの、その他いくつかのことです。これら2つを分離する必要があります。
それらを分離しておくと、ゲームは他のマシン間で同期されたままになります。しかし、それらが正しく分離されていない場合(2つの間で情報が転送されている場合)、マシンはシミュレーションで発散します。1台のマシンがプレーヤーのように見える可能性があるため、同じプレーヤーがここにいることに気付かない場合があります。 [少し違う場所で]他の誰かのマシンにあるので、あなたがそれらを撃とうとして、あるマシンでそれらをヒットし、別のマシンでそれらを逃すような方法で弾丸がそれらをヒットしない限り、必ずしも気付かないかもしれません。その後、発散は基本的にそのようにカスケードし、最終的にはゲームがマシンごとに完全に異なり、もちろん意味がなくなります。」
Halo2の新しいネットワーク
クリスブッチャーは続けます:
「つまり、クライアントがサーバーにアクションを送信し、サーバーがそれらをクライアントに送り返すため、クライアントとサーバーの間を往復する必要があります。これは、ローカルエリアネットワークでは正常に機能します。遅延ボックス間の間隔はおそらく2〜3ミリ秒です。XXからインターネット経由でトラフィックをトンネリングするPCを使用できるXB Connectソフトウェアを使用すると、実際にはインターネット経由で人々の間で機能させることができます。しかし、私たちの経験ではあなたはクライアントなので、あなたはあなたの行動が何かをするためにあなたのサーバーからの往復を待たなければならないということです。あなたの動きやあなたの射撃はすべてある程度遅れます。私たちが「Halo2」で避けたいのは本当に影響を受けやすいネットワークモデルを設計する。
したがって、「Halo 2」に移動します...マシンからマシンにアクションを送信するのではなく、クライアントとサーバーがまだあるのですが、サーバーが何が起こるべきかを正確に伝えるのをクライアントが待っているのではありません順番に、クライアントは全世界を予測しています。物事が起こるはずだと思っているとおりに世界をシミュレートしているので、サーバーと完全に同期します。クライアントが知らないのは、ゲームの他のプレイヤーのように、他の入力ソースです。
したがって、そのモデルを採用すると、自分自身を完全に予測できるため、走ったり、ジャンプしたり、エレベーターに乗ったりすることができます。これらすべてのことで、クライアントボックスのプレーヤーがうまくやっていることが予測できます。違いが生じるのは、世界の他の人々と交流するときです。サーバーからの最後の情報によると、クライアントは他のプレーヤーが左に移動していると予測しますが、この時点で右に移動した場合は、わずかな違いが生じる可能性があります。
つまり、これらはネットワークモデルの一種のアーティファクトです。それは、他のマシンからの集合的な入力ソースと対話するときに、予測された世界がマシン上にあったものと一致しない奇妙さを目にするということです。つまり、クライアントサーバー/モデルが必要ですが、クライアントはサーバーに送信します。これらに関する情報は、私が行っているボタンの押下であるだけでなく、1つ上のレベルであり、私がどこにいるかに関する情報です。世界にいて、その瞬間に私がしていること。つまり、ジョイスティックの力を23度調整すると言うのではなく、私はイボイノシシにいて、ここにいて、この方向に運転していると言うだけです。
また、これが私の世界で起こっていると思うことであると言って、一連のイベントをサーバーに送信します。手榴弾を投げていると思うように、その男を狙ったと思います。頭を殴ったと思います。次に、サーバーはすべてのマシンからのこれらのストリームを処理します。これは、すべてのバージョンのイベントです。そして何が起こっているのかというと、サーバーはシミュレーション自体も実行しています。違いは、それは予測されていないということです。それは権威です。ゲームで発生するすべてのことに対して責任があります。」
例えば

クリスブッチャーは続けます:
「つまり、私がクライアントで、トリガーを引いて手榴弾を投げると、実際に世界で手榴弾を作成します。アニメーションを再生し、サウンドを再生します。しかし、手榴弾は[実際には世界に影響を与える]-それは権限を必要とするアクションであるため、作成することは許可されていません。サーバーは、破壊オブジェクトを作成し、人にダメージを与えたり、キルなどを与えたりすることができる唯一のマシンです。つまり、クライアントがサーバーに「手榴弾をここに投げるように要求します」などの要求を送信しているということです。サーバーは、「大丈夫、私はあなたがこの場所にいると私の知識が言っているので、それは私のバージョンのイベントと一致しているので、あなたを信じています」と言うでしょう。つまり、本質的には■イベントのバージョンをサーバーに送信するクライアントと、それらを調整して信頼できるバージョンの世界を作成しようとするサーバーとの間の相互作用。次に、信頼できるバージョンを世界中のすべての人に送信します。
したがって、手榴弾を投げるためのイベントの完全なシーケンスは次のとおりです。手榴弾を投げ、アニメーションを見て、音を聞いてから、数ミリ秒後にサーバーは世界のこの新しいオブジェクトの情報の送信を開始します。私の行動の結果として作成された手榴弾。したがって、ユーザーの観点からは、この手榴弾が空中に現れ、これらの複雑な相互作用のように見えるようにするためのすべてのトリックと予測があります。誰かの車に乗るような相互作用は、基本的にサーバーからの5つまたは6つの異なるメッセージで構成されます。あなたは車に乗っており、アニメーションを開始して彼に乗り込み、彼は追い出され、彼は世界にいます。これらのイベント間のすべてのやり取りは、サーバーから個別のメッセージとして送信されます。」
適切な場所にあるすべて

クリスブッチャーは続けます:
「パズルの最後のピースは、一貫した世界観をプレーヤーに提示しようとしているクライアントです。サーバーが送信しているのは、実行中および射撃中のこのプレーヤーに対して、1秒間に4つの更新を送信している可能性があります。つまり、基本的に1秒間に4回、「これはそのプレーヤーがいる場所であり、これは彼が見ている場所であり、これは彼が世界で行っていることです」ということです。送信されると、サーバーから送信されるのは必ずしもスムーズなパケットではないため、クライアントにはぎくしゃくした途切れ途切れの動作が多く見られます。
したがって、予測されたクライアントの世界でオブジェクトを管理するコードがあります。基本的に、それは世界のプレイヤーに起こっていることの外観を滑らかにしようとします。たとえば、単にプレーヤーを送信するのではなく、「彼はここにいる、彼はここにいる、彼はここにいる」。サーバーは、「彼はここにいて、これが彼がしていることであり、これが彼が向かっている方向です」と送信します。次に、クライアントはその情報を使用して、次の300ミリ秒の間、男が実際にそこに着く前にどのようになるかを予測できます。だから、男がジャーク、ジャーク、ジャーク、ジャークするのを見るのではなく、私は彼がここで走っているのを見て、彼はここで走っています。
男の行動を予測したら、基本的にスムージングを適用して、データ送信の違いを滑らかにし、男が走っているのを確認します。たぶん彼の動きの範囲は完全に一貫していませんが、私たちは彼を場所から場所へとぐいと動かしません。その時点で彼がどこにいる必要があると思うかに基づいて、彼をスピードアップまたはスローダウンします。そしてもちろん、あなたは乗り物、世界の物理的な物体、そしてそのようなすべてのものに対して同じことをします。
したがって、本質的に問題は...サーバーがクライアントからこの情報のストリームを生成する必要があるということです。そして、彼らはそれをどのように行うのですか?その方法として、サーバーが送信できるものには2つの異なるタイプがあります。オブジェクトの永続性状態と発生するイベントがあります。
それで、テーブル上のこのジャージの持続状態を想像してください-それがこの位置にある[クリスがジャージを動かす]か、それともその位置にあるのですか?したがって、世界中のすべてのオブジェクトについて、サーバーはこのオブジェクトについて何が変更されたか、およびこの情報がどのマシンから送信されているかについての情報を追跡しています。
たとえば、ここに手榴弾を投げて、その場所の地面にたくさんの物体があり、それらが飛んでいくと、最終的には新しい場所に落ち着きます。それらのオブジェクトはマークされます。彼らの新しい立場は、彼らの立場が変わったので、世界中のすべての人に送られる必要があります。
しかし、遠く離れた人々は、どこかで戦闘をしている可能性があるため、これらのオブジェクトをあまり気にしません。しかし、彼らがその場所にやってくると、最終的にはそれらのオブジェクトを正しい場所に配置する必要があります。つまり、これらのオブジェクトは遠く離れているため、優先度が低くなります。ただし、最終的に送信する必要があるため、マークが付けられています。したがって、時間の経過とともに、これらのオブジェクトの優先度は上昇し、最終的に送信されるしきい値を超えるまで上昇します。」
優先順位をまっすぐにする
クリスブッチャーは続けます:
「基本的に、システムは人々に送信する内容を記憶しています。私があなたに欲しい情報が5,000個あることはわかっていますが、ネットワークでは特定のサイズのパケットしか許可されていないため、このパケットで送信できるのは50個程度です。ネットワークを混雑させないために、特定のレートを送信しました。
したがって、最も重要なことは、あなたがどこにいるのか、何をしているのか、生きているのか死んでいるのか、誰かを撃っているのかどうかに基づいていることがわかります。私が誰かを狙っていて、彼らが私の前にいるのなら、私は彼らについて非常に高い優先順位で知る必要があります。でも、後ろに見えない人がいたら、知る必要はありません。サーバーがオブジェクトの優先度を決定します。物事にはたくさんのルールがあります。手榴弾の優先順位は50から70の間ですが、地面に横たわっている小さなオブジェクトは優先順位ではないかもしれません。10から20の間、またはそのようなものです。実際には、優先度の低いオブジェクトがクライアント側からまったくレンダリングされない場合があります。
優先されるデータには基本的に2つのタイプがあります。常に最終的に送信されるオブジェクトの永続性状態があります。時間がかかる場合があります。その理由は、優先度の低いオブジェクトが継続的に移動している場合、そのオブジェクトを表示するまで、そのオブジェクトに関する情報を送信したくないということです。 10秒ごとに更新して、優先度を低くして「ここにあります」と言うことをお勧めします。優先度システムは、オブジェクトの優先度、最後に送信されてからの時間、およびそのデータを送信するために必要な情報の量を管理します。
永続的な状態があり、弾丸が壁にぶつかったり、誰かが殺されたために「急いで」と言ったりするなど、世界中で起こっている一連のイベントもあります。これらのイベントは、送信する必要のない情報です。イベントを削除する必要が生じた場合は、削除します。したがって、たとえば、マルチプレイヤーマッチで百万発の手榴弾を爆破した場合、それらの手榴弾の多くは、パイプラインに十分な速さで入ることができなかったため、最後から外れてしまいます。それらは無関係として破棄されます。ですから、あなたが持っていなければならないことと、あなたにもっと良い絵を与えるが必要ではない世界で起こっていることとの間で起こっているこのバランスがあります。
このデータの分離は、あらゆる種類の興味深いものをサポートできることを意味します。たとえば、すべてのクライアントにワールド内のエンティティの永続状態が送信されるため(エンティティは、ワールド内の永続オブジェクトと呼ばれます)、すべてのクライアントがワールドに関するすべての情報を持っていることを意味します。クライアントは世界のすべてを知っているので、新しいサーバーにすることをサポートできます。サーバーマシンの電源がオフになった場合、Xbox Liveから切断された場合、またはプレーヤーがゲームを終了したい場合に使用できます。何が起こるかというと、ゲームが一時停止し、新しいサーバーが決定され、制御がシフトされ、ゲームが続行されます。 LANゲームでも動作します。そのため、情報を複製して新しいサーバーを再割り当てするテクノロジーがあるため、開始時とはまったく異なるプレーヤーのセットでゲームを終了できます。
Xboxライブの可能性は本当にエキサイティングかもしれません。このゲームをオンラインにすることには、あらゆる種類の興味深い社会的影響があります。私たちが話したことよりもはるかに多くのものがあります。私は、ユーザーインターフェースの設計やプレーヤーのゲームへの誘導など、社会的側面のすべてについて話すのに最適な人物ではありませんが、ネットワークの側面については間違いなく話すことができます。」
あなたは確かにクリスができます、あなたは確かにできます。