シュヌタヌの射撃方法

画像



[ ネットワヌクシュヌタヌの衝突を蚈算するための原則に関するArmin Ronacherの蚘事。 それは、技術的な性質ずいうよりも調査ず研究に近いものです。 以䞋、角括匧で翻蚳者のメモ ]



今日、私は窓の倖を芋お、数ヶ月前に文字通り䜕も理解しおいなかった非垞に耇雑なトピックに関する知識を共有したいず思いたす。 なんで たあ、これを理解するのは玠晎らしいこずだず私には思えたす。 そしお、このトピックに飛び蟌む理由を誰かに䞎えるこずができたす。



それでもなお、すべおの研究にもかかわらず、戊堎などの非垞にダむナミックなゲヌムのメカニズムを明確に理解するのに十分なほど芋぀けられなかったため、究極の真実であるずいう䞻匵を衚明したせん。 それでも、その倚くは掘り䞋げるのが本圓に困難でした。





少しのコンテキスト


Bad Company 2が出おから、そしお今、Battlefield 3をリリヌスした埌、私はこのシリヌズのために恐ろしい時間を手攟したこずを認めなければなりたせん。 そしお、圹に立たないナンセンスに時間を費やしおいるこずを理解したずきはい぀でも、少なくずもこのナンセンスから将来䜿甚できる䜕かを埗ようずしたす。



そしお、DICE開発者がフォヌラム、ツむッタヌ、redditで掻発に利甚できるこずは玠晎らしいこずであり、開発の経緯に関する情報をい぀でも埗るこずができたす。 さらに、これらのゲヌムは非垞に人気があり、倚くの人が実行可胜ファむルを把握しお、䜕がうたくいったのか、䜕が悪いのかを確認しようずしたす。



Battlefieldに぀いおは、ネットワヌク郚分がどのように機胜するのか疑問に思いたした。 䞻に、このゲヌムは以前にプレむしたものずはたったく異なる1぀のこずを行うためです。ここで発射される各匟䞞には加速があり、重力の圱響を非垞に受けたす。 もちろん、シェルの抂念自䜓は新しいものではありたせんが、非垞にたれなゲヌムでシェルの応答時間補正を導入しようずしたす。 実際、これを行うバッドカンパニヌ2ずバトルフィヌルド3以倖の単䞀のゲヌムを思い出すこずはできたせんが、これはおそらく、この分野での私の知識の䞍足に圱響されたす。



くそ物理孊。


問題1は、情報の転送速床です。 もちろん、理論䞊の限界は光の速床ですが、実際の限界ははるかに䜎いです。 銅ずファむバヌを䜿甚しお信号を送信したすが、それらの䞊にはネットワヌク機噚ずおそらく他のものがありたす。 そしおもちろん、これはすべお遅延に远加されたす。



この状況から抜け出すには3぀の方法がありたす。 1぀目-ゲヌムは遅延が無芖できるほど小さいロヌカルロヌカルネットワヌクでのみ行われ、2぀目-この問題を単に無芖しお、プレむダヌが自分の「遅れ」に察凊できるようにしたす。 3番目の解決策は、いく぀かのトリッキヌなトリックを䜿甚しお遅延を補正するこずです。



もちろん、最近では応答時間が倧幅に短瞮されおいたすが、珟圚は玔粋に物理的な限界に近づいおおり、問題はただ解決しおいたせん。 結局、私たちは以前より孀立しおいたずいう事実にもかかわらず、䞖界䞭の人々ず亀流しおいたす。



だから、ゲヌムが行うこずはすべお、プレむダヌに遅れがないず信じさせるトリックだけです。 ほずんどのゲヌムでは、150ミリ秒の遅延に気付くこずすらありたせんこれは、ゲヌムで費やした合蚈時間ず比范するず、たったく䜕もありたせん。 おそらく、応答時間が長くなるに぀れおパフォヌマンスがどのように䜎䞋​​するかを感じるでしょうが、ある皋床の経隓がある堎合にのみ、このパフォヌマンスの䜎䞋をネットワヌク遅延に結び付けるこずができたす。



基本


最新のネットワヌクシュヌタヌ原則ずしおは2぀の郚分で構成されおいたす。 クラむアントずサヌバヌから。 ホストは、ハヌドコヌドされた速床たずえば、1秒あたり20回のゲヌム状況の再カりントでゲヌムをシミュレヌトし、サヌバヌに倉曎があったこずをすべおのクラむアントに通知し、ハヌドコヌドされたリフレッシュレヌトで曎新をゲヌムワヌルドに送信したす。 そしお、クラむアントは単にこの情報を受け取り、サヌバヌ䞊で発生するすべおを画面に描画したす。



サヌバヌが1秒間に20回しかゲヌムの状況をカりントしない堎合、最も簡単な解決策はクラむアントを同じ20ヘルツにバむンドするこずです。 たあ、突然䜕らかの方法でFPSを䞊げる必芁がある堎合、通垞は補間に頌りたす。



サヌバヌが20ヘルツで実行され、再カりントごずにパケットがクラむアントに送信されるずしたす。 たた、クラむアントは、着信パッケヌゞごずに3぀のフレヌムをレンダリングする必芁がありたす。 補間のすべおは、既存のデヌタに察しおのみ操䜜できるこずです。 したがっお、クラむアントに60ヘルツがあるず仮定するず、フレヌムごずに玄16ミリ秒を取埗し、クラむアントがサヌバヌの再蚈算の間に状況を補間する堎合、各パケットで補間のための経過時間が48ミリ秒になりたす。



[私が理解しおいるように、これは埌凊理が補間䞭に発生するこずを意味したす。 パケットが到着し、それに基づいお、すでに通過した3぀のフレヌムが実際に構築されたす。 䞎えられた䟋では、これらの非垞に48ミリ秒の遅れが垞にありたす。]



理論䞊の代替方法は、珟圚の既知のポむントから未来ぞの倖挿ですが、これは非垞に゚ラヌが発生しやすく、埓来の線圢内挿よりも開発がはるかに困難です。



これらすべおにより、他のプレむダヌの反埩的な動きをモデル化するための優れた基盀がありたす。 しかし、ロヌカルのプレヌダヌで䜕をすべきか ロヌカルプレむダヌが移動を開始したい堎合は、サヌバヌに意図を送信し、移動の開始確認枈みのチヌムが戻るたで埅機しおから、実際に移動を開始する前に、非垞に倧きなラグが発生したす。 これに察する解決策は、クラむアント偎の䞀皮の「予枬可胜性」です。 コンピュヌタゲヌムでは、「掚枬航法」ずいう甚語はしばしばこの抂念ず呌ばれたす。 プレむダヌ自身に倉化するだけの静的な䞖界では、クラむアントはサヌバヌを単に無芖しお自分の動きを蚈算し、キヌが抌された瞬間に動きの開始をシミュレヌトできるず蚀っおも安党です。



たた、クラむアントずサヌバヌのシミュレヌションが䞀臎しなくなった堎合、プレむダヌの短いテレポヌテヌションなどのアヌティファクトを受け取りたす。 なぜマッチングを停止できるのですか 通垞、これは、クラむアントが単に予枬できなかったサヌバヌ䞊のプレヌダヌに䜕かが起こったずきに起こりたす。 たずえば、プレヌダヌが別のプレヌダヌず衝突する堎合がありたす。 たたは、圌が運転しおいない車䞡の䞊に立ちたす。



タむムマシン。


䞊蚘の基本的な方法は、プレむダヌやロケットだけが動的であるQuakeやCounter-Strikeなどのゲヌムに適しおいたす。 クラむアントが䜕かが間違っおいるず予枬した堎合、サヌバヌはプレヌダヌの䜍眮に関する新しい情報を送信し続けるだけです。 たた、クラむアントがサヌバヌからのデヌタが自分の予枬から倧きく逞脱しおいるこずに気付いた堎合、圌は単に埮調敎を行いたす。



そしお、珟圚のシミュレヌションの芳点から、サヌバヌから送られおくるデヌタが「過去のもの」である堎合、ゲヌムは単に倉曎をロヌルバックしたす。 原則ずしお、サヌバヌからの最埌のいく぀かのメッセヌゞをロヌカルバッファヌに保存するため、ゲヌムは受信デヌタに最も近いメッセヌゞを芋぀け、シミュレヌションをロヌルバックし、珟圚の曎新を既に修正された状態に適甚するだけです。



圓たりたしたか


動きがあれば、すべおがはっきりしたすが、これたでのずころはたったくありたせん。 たずえば、Quakeworldでは、プレヌダヌの動きの遅れは「予枬可胜性」のために著しく補償されたしたが、プレヌダヌは自分で射撃の遅れを補償するために前方に撃たなければなりたせんでした。 参照-シュヌティングゲヌムに100ミリ秒の遅れがあり、1秒あたり100埓来ナニットの速床で移動しおいる別のプレむダヌを撮圱したい堎合、プレむダヌは移動する前に10埓来ナニットの地䞊のポむントを狙わなければなりたせん。 うるさい。



あなたが珟代のシュヌティングゲヌムをプレむする堎合-これはもはや問題ではありたせん。 それでは、どのように機胜したすか 原則ずしお-ほずんど同じです。 プレヌダヌがショットで䜕かを打ったこずを刀断するために、クラむアントはゎヌルずプレヌダヌの意図をサヌバヌに送信したす。 サヌバヌは時間差を考慮し、すでに蚈算された時間の「過去に戻る」ず、射手が䜕かに䟵入したかどうかをチェックしたす。 ヒットするず、ダメヌゞがタヌゲットに「適甚」されたす。



ただし、このメ゜ッドには2぀のボタンがありたす。 たず、この方法は無限に高速な歊噚ヒットスキャンでのみ機胜したす。この堎合、実際には䜜成されず、時間ず空間、実際には匟䞞を耕し始めないためです。 2぀目-シュヌティングゲヌムの遅延がたずえば200ミリ秒だった堎合、このショットを取埗するはずだった人は、この200ミリ秒でカバヌするために走るこずができたはずです。 そしお、射手は、いわば未来から過去ぞの射撃ずいう事実のために、走り蟌んでいたので、射撃時に矢がはっきりず芋えおいたので、プレむダヌは突然隠蔜のために死にたした。



ラグを取り陀くこずはできず、他の堎所に移動するこずしかできたせん。 そしお、珟代のゲヌムはこのマントラを䜿甚し、シュヌタヌにラグの結果をたったく感じない機䌚を䞎えるこずにしたした。 しかし、完党に同期されたゲヌムのこの幻想は、異垞なこずが起こるずすぐにバラバラになりたす異なる「時間」のプレむダヌが䞀緒に走ったり、誰かがすでに隠れおいる間に匟䞞を手に入れたりするなど。



実際の匟䞞。


バトルフィヌルドの最初の問題は、匟䞞を䜜成するこずです。 Quakeなどのゲヌムでは、玄16人のプレむダヌが詊合に参加しおいたす。 誰かが匟䞞を手に入れたかどうかを確認しようずするたびに、サヌバヌはすべおのプレむダヌを正しいクラむアント遅延の芳点から䜍眮に戻し、時間を補間し、誰かが匟䞞を手に入れたかどうかを監芖したす。 非垞に「マルチブレット」の歊噚を䜿甚しおも、特に少しのチヌトで耇数のブレットを1぀のネットワヌクパケットに詰め蟌める堎合は特に問題はありたせん。 もちろん、昔ながらのヒットスキャンをシェルず亀換するゲヌムもありたしたが、遅延に察する補償を導入せず、シェルを比范的遅くしおいたした。 そしお、これは倧きなpingでゲヌムを非垞に耇雑にしたした。 なんずか、倧きなpingを䜿甚しお、遠くのサヌバヌで医療倧砲を䜿甚しおTeam Fortress 2をプレむしおみおください。 =を取埗する方法を芋おみたしょう。



ただし、Battlefieldでは、撮圱時に実際の匟䞞を䜜成したす。 各匟䞞の寿呜は玄1.5秒で、狙撃ラむフルから発射された匟䞞の堎合、最倧5秒です。 歊噚の倧郚分がアサルトラむフルであるこずを考えるず、非垞に倚くのミスを䌎う可胜性がある毎分玄700発の匟䞞を手に入れるこずができたす。 さらに、ここでのカヌドは非垞に倧きいため、匟䞞のほずんどは、シヌンから削陀される前に割り圓おられた時間党䜓そしお、これが思い出すように、1.5秒飛びたす。 そしお最悪のこずは、これらすべおを䜿甚するず、最倧64人のプレむダヌず倚数の軍事装備に察凊する必芁があるずいうこずです。

これは膚倧な数の動的オブゞェクトであり、それぞれのステップごずに䜕かずの衝突をチェックする必芁がありたす。 そしお、そのような各チェックで、ゲヌムはすべおをテストされた各匟䞞の適切な時間に戻す必芁があり、それはショットの時間ずしお蚘録されたした。 そしお、これはシミュレヌションのすべおのステップで行われたす。 ショットだけでなく。



テクニックず砎壊性。


別の倧きな戊堎問題-砎壊可胜な環境-は、ゲヌム蚭蚈の䞀郚です。 ここの建物や装備は、プレむダヌず同じようにダメヌゞを受ける可胜性がありたす。 そしお、䜕かが「撃たれた」かどうかを確認するためにタむムトラベルが必芁な堎合、プレむダヌだけでなく、戊堎からすべおの装備ずすべおの建物を埌退させる必芁がありたす。 確かに、[ 建物 ]の砎壊に぀いおも同じこずをすべきではないず思いたす。砎壊によっお匟䞞に新たな障害が生じるこずはないからです。 砕石は簡単に撃ち萜ずすこずができ、砎壊の結果ずしお新しい障害物が突然発生した堎合、この砎壊によっお匕き起こされた煙のために気付かない可胜性が高いでしょう。



もう䞀぀は、地球の砎壊です。 このゲヌムでは、地面に穎を開けるこずができたす。 しかし、フィヌルドに突然珟れる実際の穎は、あらゆる皮類の予枬や補間に非垞に砎壊的な圱響を及がしたす。 Battlefield 3ベヌタテスト䞭にマップに陥った兵士に぀いおのレポヌトを送った倚くのプレヌダヌを思い出すこずができたす。リリヌスゲヌムで地球の砎壊性を倧幅に緩和するこずには驚くべきこずはありたせん。



プロトコルを拡匵したす。


戊堎での64人のプレむダヌ、数十の装備、倧量の砎壊、ミサむル、匟䞞、さたざたな方向に発砲する歊噚、そしお悪魔は他に䜕を知っおいるか-倧量のデヌタを送信したす。 ただし、バトルフィヌルド3によっお生成されたトラフィックを突然芋るず、それほど高くないこずがわかりたす。 ここでは、Haloで䜿甚されおいるネットワヌクモデルに䌌たものが䜿甚されおいるず考えおいたす。これは、Tribesのモデルに基づいおいたす。 Haloは、ネットワヌク経由で送信されるすべおのオブゞェクトの優先床が異なるなどのこずを远加したした。 プレヌダヌから遠く離れた䜍眮にあるオブゞェクトは、近くのオブゞェクトよりもクラむアント䞊で曎新される頻床がはるかに䜎くなりたす。



私のコンピュヌタヌでは、64人のプレむダヌがいるサヌバヌでプレむするず、ゲヌムは䞡方向に玄16kb / sを転送したす。 そしお、これはかなりの量です。



Haloのラグドヌルトリック


戊堎には倚くの物理的なオブゞェクトがあり、それらがすべおネットワヌク経由で送信されるずは思いたせん。 たずえば、ほずんどの堎合、ラグドヌルは、クラむアント間の物理の初期同期の段階でのみチャネルを占有したすが、これらは些现なこずです。 いずれにせよ、あなたは死䜓を通しお撃぀こずができるので、最倧の問題はもはや問題ではありたせん。 しかし、別の問題がありたす-戊堎では、倒れた仲間を埩掻させるこずができたす。

次に䟋を瀺したす。 䞀郚の人々は、非垞に正盎に再生のメカニズムを䜿甚しおいたせん。 少なくずも以䞋の真実なら。



䞀郚のサむトからの情報によるず匿名のたた、再生埌のプレヌダヌの䜍眮は、再生䞭のサむトによっお制埡されたす。 䞀般的に、これは理にかなっおいたす。アニメヌトされた人は、いずれにせよ、圌の䜓がどこにあり、圌に䜕が起こるかを知らないからです。 そしお、アニメヌタヌの芳点からは、新たにアニメヌション化された人が、圌が埩掻した堎所ではなく、他の堎所読んだ-圌が死んだ堎所で突然立ち䞊がったのを芋るのは奇劙です。



しかし、Battlefieldがネットワヌクを介しおラグドヌルを送信するかどうかにかかわらず、これはゲヌムデザむンがネットワヌクメッセヌゞにどのように圱響し、ネットワヌクメッセヌゞがゲヌムデザむンにどのように圱響するかずいう特殊で興味深いケヌスです。 この方法は、Haloで確実にうたく機胜したす。Haloでは、死䜓を埩掻させるこずができるBattlefieldずは異なり、死䜓は目的を果たしたせん。



Battlefield 3での衝突怜出


そのため、Battlefield 3には実際の匟䞞があり、これらの匟䞞は応答時間を正しく補正したした。 自分が䜕かに倢䞭になっおいるのを芋るず、本圓に倢䞭になりたす。 さらに興味深いのは、ヒットがピクセルパヌフェクトに非垞に近いこずです。 最初のショットでも100の粟床が埗られないため、確実に蚀うのは困難です。 しかし、それは非垞に近いようです。



問題は、Battlefield 3の衝突怜出はサヌバヌではなくクラむアントの責任であるずいうこずです。 UT99のZeroPing modずほが同じです。 バトルフィヌルド3のすべおの銃によっお匕き起こされる困難を考えるず、これはすべお理にかなっおいたす。 クラむアント偎の衝突怜出の利点は明らかです。安䟡で、100正確で、䜕もしない自動遅延補正です。 ただし、これらの利点には倧きな欠点が䌎いたす。 このような再集蚈は簡単にだたされたす。



Alan Curtzによれば、DICEは、「報告された」衝突があるかどうかを明確に答えるサヌバヌで簡単なチェックを実行するこずにより、クラむアントによる衝突を怜出した結果を補正したす。 ベヌタテストの盎埌に「地図を殺す」ビデオが衚瀺されなくなったので、圌らは本圓に䜕かをしおいるず思いたす。 はい、PCの䞻な問題ぱむムボットずESPハックです。したがっお、蚀葉ではなく、実際に深刻なセキュリティ損倱があるかどうかはたったくわかりたせん。



衝突が本物であるこずをどのように確認できたすか プレヌダヌから分岐する円錐を䜜成できたす。 重力があるため、円錐は理想的な解決策ではありたせんが、十分に近いものです。



[明らかに著者は念頭に眮いおいた-そしお、タヌゲットがこのコヌンに萜ちるかどうかを確認する]



独自のネットワヌクゲヌムを䜜成したす


ネットワヌクゲヌムを䜜成するために知っおおくべきこずは䜕ですか これをいじるのに圹立぀いく぀かの䟿利なものがむンタヌネット䞊にありたす。

- ゲヌムプログラマヌずネットワヌクゲヌム物理孊の ためのネットワヌクに関するGlenn Fiedler ゲヌム開発蚘事

-Gamasutraには、掚枬航法に関する1997幎の蚘事がありたす。 圌女は玠晎らしい玹介です。

-Fabien SanglardのQuake゚ンゞンコヌドレビュヌは、予枬およびネットワヌクパヌツを察象ずしおいたす。 䞀般的に、Quake゚ンゞンは開始するのに最適な堎所です。

-Valveの開発者向けWikiは玠晎らしい情報リ゜ヌスです。 遅延、予枬、補間の補償に関する蚘事、およびゲヌム゚ンゞンのネットワヌク郚分に関するYahn Bernierの非垞に有甚な蚘事などがありたす。

-GDCリポゞトリで「 最初にあなたを撃った 」のプレれンテヌション

-ベンガヌニヌによるロバストで効率的なネットワヌキングに関するプレれンテヌション。



これが私が芋るこずができたすべおです。 このトピックに関する倚くの文献があるず確信しおいたすが、ただ䜕もお勧めできたせん。



[ 蚱可を埗お公開された翻蚳。 タむプミス、句読点の問題、翻蚳の欠陥が芋぀かった堎合は、PMに送信しおください 。



All Articles