ビデオゲームで弾丸はどのようにシミュレートされますか?


86

私は最近MW2のようなゲームをプレイしていますが、プログラマーとして、ゲームをどのように没入型にするのかを自問する傾向があります。たとえば、弾丸の速度をシミュレートする方法。

  1. NPCが銃から銃弾を発射すると、銃弾は実際に銃から指定されたターゲットに移動しますか、それともこの部分を完全に無視してターゲットに銃弾の穴を開けますか?

  2. 弾丸が実際に銃からターゲットまで移動している場合、実際にどの速度で移動していますか?


25
血まみれの画面、とてもリアル!
攻撃

6
シュート:ブーイング
mahen23

1
メガマンレジェンドの弾丸を弾丸と呼べるかどうかはわかりませんが、メガマンでは、弾丸に遅い発射体を使用しています。それらでは、撮影中に円を描くと曲線がはっきりと見える(コリオリ効果)。
ライライアン

回答:


84

ほとんどのFPSゲームは、実際のゲームプレイにレイキャスティングを使用します。弾丸は即座に移動し、発射されるとターゲットに命中します。

しかし、ほとんどのゲームは「偽の」トレーサーの使用も採用しています。3ショットごと、またはその他の間隔ごとに、トレーサーが弾丸とともに発射されます。トレーサーは非常に高速ですが、瞬時ではありません。これは視覚効果としてのみ行われ、ゲームプレイには直接影響しませんが、射手、射手に手掛かりを与え、傍観者に銃声への方向性のある参照を与えます。

これらの種類の弾丸物理学を使用するほとんどのゲームは非現実的です。弾薬や弾丸の破片がなく、貫通がある場合は通常線形です。

ARMA II、STALKER(シリーズ全体)などの一部のゲームでは、より現実的な弾丸物理学を使用して、移動時間、跳弾、および偏向角による貫通を実現しています。これらのシステムはレイキャスティングを使用していると思いますが、制限は弾丸の速度によって決まります。これらのゲームでは、銃口の速度はARMA IIのように現実的であるか、STALKERのように見えます。

銃はレーザーではなく発射体を発射するので、私は現実的な弾丸物理学を持つことを大いに好みます。


1
上記のゲームをプレイしていない場合、これはゲームプレイにどのように影響しますか?つまり、Call of Dutyのようなゲームに弾丸の物理学を採用した場合、あなたは本当に顕著な違いを見ますか?浸透角はゲームを変えるか?プレイヤーは、自分のキャラクターがシューターに関連して銃弾の穴と並んでいないことに気づきますか?オーバーヘッドを正当化することの利点を知りたいだけです。前もって感謝します。
Dutchie432

それは、私が喜ぶと思う射撃の仕組みに、予測不可能性と深さの層を追加します。弾丸は瞬時ではありません!!! chuckhawks.com/rifle_ballistics_table.htm 600フィートで1秒間に2644フィート移動するスラッグは、スローダウンを考慮せずにターゲットに到達するのに0.2秒以上かかります。実行中のターゲットは、直接狙った場合は見逃されます。さらに距離を置くと、ナメクジは音速よりも遅くなり、ショットを聞いた人は地面などに飛び乗ることができます。
攻撃

この回答にはいくつかの不正確な記述があり、削除する必要があります。以下の私の答えを確認してください。
-EddieV223

1
ArmA 2の弾丸はシミュレートされた発射物です。飛行中に変更(速度の変更、方向の変更)したり、移動するオブジェクトと衝突したりすることができます。これがレイキャスティングによって行われるかどうかは関係ありませんが、実際の物理オブジェクトとして機能します。
減速

だからMW2?レイキャスティングかどうか?弾丸の穴とそれによって破壊される環境をシミュレートするのに彼らが明らかに素晴らしい仕事をしているからです
-mahen23

51

弾丸の場合、彼らは通常、実際に空中を移動する弾丸をシミュレートすることをせず、単に発射された瞬間にターゲットに弾痕を置くだけです。ロケットのような他のものはより遅く*、ゲームは実際にそれらが空中を移動していることを示します。

短い距離では、弾丸はフレーム間の時間経過とともに移動し、いずれにせよシューターから1フレーム以内またはターゲット内に到達します。

*それは、プレイヤーが空中を飛んでいるのを見るために、実際の生活でロケットよりも遅いです。


44

PlanetSideの弾丸コードを書きました。いくつかの「ヒットスキャン」発射体がありましたが、CPUの制約といつでもプレイできる膨大な数の弾丸を与えることができる限り、発射体をほとんどシミュレートしました。

ヒットスキャンの場合、影響は、多くの場合単一のレイキャストを使用して、入力が受信されるのと同じフレームで決定されます。これは、レーザーやその他の非常に高速の発射体などの武器に適しています。ヒットスキャンは、発射体の初速度を1ティックでゲームボードを横切るほど高くするだけで行いました。

非ヒットスキャンの弾丸は、グラフィックフレーム時間または固定タイムステップのいずれかにチェックマークが付けられ、加速(ロケットを考える)、重力、空気摩擦、誘導(熱を求める発射体を考える)などの計算が適用されます。目標は、タイムステップの発射体の終端位置を生成することです。開始点と終了点が確立されると、1つ以上の光線を投射して飛行経路を近似し、飛行中に発生したであろう衝突を検出できます。

ヒットスキャンと非ヒットスキャンの両方の発射物で、衝突時に何が起こるかは、発射物の特性と衝突する表面に依存します。たとえば、ハードサーフェスにヒットすると、バウンスカウントを確認し、反射ごとに位置と速度を調整するか、最大バウンスカウントに達した場合に発射体を爆発させることができます。このシステムでは、ロケットの最大バウンスカウントは0です。柔らかい表面にぶつかり、貫通力を確認して、発射体がマテリアルを通過するかどうかを判断します。

書くのは楽しいコードでした。また、何が起こっているのかを適切にデバッグするための視覚化を書くことは、飛行経路やイベントなどを視覚的に調べることができるのでとても便利です。


2
素敵なゲームのプログラミングに入る前にPlanetsideをプレイしましたが、コードを書くのは楽しいようです。
アンソニー

18

それはゲームと正確さ/リアリズムのレベルに依存します。

マルチプレイヤー設定でのシューティングモデルとダメージモデルの同期は、弾丸がどこでいつ発射されたか、ターゲットに命中したかどうか、パスを通過したものが何かを正確に判断する必要があるため、かなり困難です。

したがって、可能な場合は、ゲームデザイナーはショットを瞬間として扱うことで(時間内に全員の位置のみを考慮する必要があるように)、弾丸の範囲を制限することで物事を単純化すると考えています。幸いなことに、これはしばしば実際の物理学に対応しています。たとえば、スナイパーライフルは高速のラウンドを発射します。

多くのゲームは、低速で移動するオブジェクト(大砲、爆弾、マーカー弾など)のマルチステップマルチスナップショットパスをシミュレートできますが、これは非常にコストがかかり、同期の問題がより一般的で、面白いYouTubeビデオにつながります。

別の懸念は、より大きな空間の錯覚を作成するために、個別の小さな「環境」を維持するゲーム(たとえば、各部屋が個別にシミュレートされる)です。これらの場合、「部屋」の境界内の物は正しくシミュレートされ、部屋の全員が弾丸が作る空間の一連の遷移について更新されますが、その環境以外の人はそうではありません。


14

目で見るよりも速く移動する発射体の場合、レイキャスティングがよく使用されます-銃口からの光線が適切な方向で計算され、潜在的なターゲットオブジェクトに対してテストされ、何がヒットしたかが判断されます。弾丸の落下などのようなものをシミュレートしたい場合、これは複数の光線といくつかの追加の計算で複雑になる可能性があります。また、プロジェクトに速度を与え、それを使用して計算に現実感を追加することもできます(弾丸は瞬時ではありません)。


11

それは実装に依存しますが、ソースエンジンは物理的な弾丸(発射体オブジェクト)をまったく使用せず、プレーヤーからターゲットへのレイキャストをランダムな「ヒットゾーン」円で行いました(より大きな半径または小さな半径は武器の発射速度、およびプレイヤーが発射ボタンを押し下げた場合)、その中心がプレイヤーが照準を合わせていたポイントであり、プレイヤーからランダムに決定されたポイントへの実際のレイキャストを決定した後、他の要因(弾丸の「重量」と銃口の速度(すべての内部数値)、オブジェクトのヒットなど)レイキャストは複数のオブジェクトを通して、または地形に到達するまでキャストされました。

反対に、Torque 3D Engine DIDは実際の発射物オブジェクトを使用し、設計者は個々の速度、質量、重力の修飾子に影響を与える可能性があります。エンジンはすべて、32ミリ秒ごとに値を更新しました。

編集

発射物オブジェクトの使用に加えて、Torque 3D Engineは代替手段としてレイキャストの使用も許可しました。(「投射物」が実際にはパーティクルエフェクトであるゲームをいくつか作成しましたが、投射物オブジェクトがサポートしていないため、レイキャストが必要です。)


素晴らしいストーリー仲間。ただし、これらすべての物理を計算するために、Torque 3Dエンジンにはより多くの処理能力が必要であると確信しています。
mahen23

@ mahen23びっくりするでしょう。Source Engineよりも少ない物理計算が行われました。これは、Softbodyのコリジョンをまったく処理せず、単純なバウンディングボックスとコリジョンボックスのみを処理したためです。
ケーシー

10

Team Fortress 2 wikiには、発射物とヒットスキャン武器の動作に関する非常にクールな記事があります。

http://wiki.teamfortress.com/wiki/Mechanics#Hit_detection


2
そのwikiは良い読み物です。
mgiuca

このセクションは短いですが、hitscanとnon-hitscanの両方について説明し、hitboxが何であるかと、それらがどのように使用されるかについて説明します。
ジョッキング

そのセクションのタイトルの下にあるサブプロジェクション「プロジェクション」と「ヒットスキャン」を忘れずに読んでください
-lunixbochs

6

実際、多くのゲームはGPUレンダリングヒットテストアルゴリズムを使用しています。基本的な仕組みは次のとおりです。

1)オフスクリーンは、すべての地形が黒で、すべての文字が黒以外の色である現在のビューのレンダリングを作成します2)十字線の下のピクセルの色を取得します3)黒以外のルックアップの場合、色- >プレーヤーをマッピングし、そのターゲットにヒットを適用します。

この方法は、ピクセルパーフェクトであるため、ゲームで長年使用されてきました。プレーヤーの帽子の1ピクセルが壁の後ろから突き出ている場合、彼を打つことができます。IEあなたはそれを見ることができれば、あなたはそれを打つことができます。このタイプの精度は、単純なレイキャスティング技術ではほとんど不可能です。次に、この種のテストは非常に高速で、GPUで実行できます。


color-> playerルックアップは痛いですか?レイキャストした場合、それは同じ効率ではないでしょうか?
減速

実際、非常に高速です。レンダリングに費やされる時間の大半は、実際のポリゴンのシェーディングに費やされます。ヒットテストをレンダリングする場合、単色のポリゴンのみが使用されます。さらに、このヒットテストはGPUで完全に実行でき、ピクセルパーフェクトです。プレーヤーをターゲットに完全にヒットさせてから、ヒットテストでそれがミスであったことを伝えること以上に、プレーヤーに影響を与えるものはありません。
ティモシーボールドリッジ

しかし、ピクセル空間を、ヒットした対応するオブジェクトのワールド空間にどのように変換しますか。
減速

@ダニエル:答えが言うように、ヒットしたターゲットは色で識別されます。各キャラクターは異なる(無地の)色としてレンダリングされるため、色と黒=ミス、その他の色=ヒットしたためにその色でレンダリングされたユーザーを確認することができます。
デイブシェロマン

@Dave Sherohman、私は元々それを間違って読んだに違いない、あなたの説明を読んだ後、彼が何を意味していたのかとても明確に見えた...歓声
減速

4

一部のゲームは、弾丸の移動時間とドロップを考慮して、現実的な弾丸の物理学を使用することは間違いありませんが、少なくともNPCについては、ほとんどのゲームは使用しないと推測しています。

弾丸の直接的な移動(ドロップなし)を瞬時に行うゲームの場合、ゲームはバレルのポイントから前方に架空の線(ベクトル)をトレースします。次に、そのラインが交差するものを計算し、そのポイントで弾丸の「ヒット」を登録します。弾丸がヒットしたデカールや煙/破片の「パフ」など、衝撃がエフェクトを引き起こす壁のような固体オブジェクトである場合があります。破壊可能なオブジェクトに影響を与えて破壊するか、物理オブジェクトに影響して「キック」を与える可能性があります。または、もちろん、プレーヤーまたは別のNPCにヒットし、ヘルスヒットを引き起こす可能性があります。ハードコアシミュレーションは、壁を貫通する弾丸をモデル化し、出口側でヒット効果をトリガーし、おそらく出口での弾丸のダメージを減らします。

NPCが完璧な目的を持っていないように、多くのゲームは弾丸の広がりをモデル化するためにベクターに何らかのランダム化を追加します。これは実際の生活で見られるものであり、弾丸はすべて狙った場所に当たるのではなく、照準スポットを中心としたパターンでヒットします。

弾丸の広がりを視覚化するために、直線(ベクトル)の代わりに銃から出てくる円錐を想像してください。実際の弾丸の方向は、この円錐内のどこかにランダムになります。射手が標的に本当に近い場合、広がりは小さく、精度は高くなります。ターゲットが遠くにある場合、コーンはより大きな広がりを追加するため、射手がターゲットにヒットする可能性は低くなります。

ショットコーンのこのアイデアは、シューティングゲームの精度(スキル)、武器の精度、およびその他の条件をモデル化するために使用できます。たとえば、低レベルのNPCには低精度のショットコーンが与えられますが、熟練したNPCには高レベルの精度があります。短機関銃で腰から射撃して走っているプレイヤーは、ワイドショットコーンを持っているでしょう。スナイパーライフルは、ピストルを言うよりも本質的にタイトなショットコーンを持っているでしょう。


+1情報。しかし、AIがより大きなコーンではなく、プレーヤーを狙うのが実際に悪い場合、視覚的にもっと楽しいかもしれないと思います。または、コーンを大きくしたい場合は、反動に基づいてサイズを可変にし、低レベルの敵にサイズ増加率を速くします。
攻撃

1

私が見た時からのネクスイズのソースコードといえば、彼らは実際に「弾丸」オブジェクトをポイントAからポイントBに送信しませんでした。発射された瞬間に命中した武器は、コードが銃が指している場所を見ます。「射撃」をクリックしたときに、それが人に向けられている場合(そして、即射武器である場合)、ヒットしました。

また、注目すべきは、Nexuizがクライアントまたはサーバーでヒットを計算するサーバー側オプションを備えていたことです。クライアントが不正行為をしている疑いがある場合は、それを軽減するためにサーバー側のヒット計算に切り替えることができます。


1

別の戦略は、すべてのレンダリングとすべてのレイトレーシングのハイブリッドです。必ずしもすべての弾丸をレンダリングする必要はありません。たとえば、銃が1秒間に30発発射すると、ストラフは数百のパーティクルを生成する可能性があります。「トレーサー効果」を使用してレンダリングを減らし、3番目のショットごとにレンダリングし、他の2つをレイトレースできます。プレイヤーは敵に10発/秒の砲撃を行うことを引き続き確認します。

特定の状況に合わせて微調整し、発射速度が遅い場合はレンダリングを増やし、発射率が高い場合はレンダリングを減らします。


1
3回目のショットごとにトレーサーが使用される理由に関する情報を含める必要があります。ゲーム開発者の開発ではありません。それは軍隊でした。ナメクジの後部にリンが埋め込まれたトレーサー弾丸。弾丸が撃たれると、火薬はリンに点火し、弾丸の後ろに明るい軌跡を作ります。トレーサーの弾丸は、通常の弾丸よりも高価であるため、お金を節約するためにXショット程度でしか使用されませんが、狙いを定めることができるという意図した効果があります。
攻撃

また、あなたが言うようにレンダリングと更新でそれを分割したくありません。すべての弾丸の物理学をupdateメソッドで完全に実行する必要があります。すべてのXショットなどで、動きや方向を示すために弾丸よりもはるかに遅いトレーサー効果も生成する必要があります。
攻撃

@AttackingHobo私はリンの弾丸については特に考えていませんでしたが、弾丸が飛んでいるという視覚的な手がかりです。アイデアは、選択的圧縮を使用することでした...プレーヤーが「欠落」として登録することのない詳細レベルを削除しますが、システムの負担を軽減します。「3番目の箇条書きごと」のビットは任意です...何がうまくいったかを見るために実験する必要があります。あなたの答えで、あなたは「偽のトレーサー」と言ったが、それは同様に多くの意味をなす。
スティーブン

1

弾丸の速度に対するフレームレートが問題になる可能性があることを忘れないでください。場合によっては、物理エンジンを十分にコーディングしなかった場合、弾丸は衝突することなくオブジェクトを通過することができます。その問題には解決策がありますが、よく覚えていません...

とにかく、マルチプレイヤー環境で現実的な弾丸を補正することは、レイテンシが30ミリ秒または50ミリ秒より長くなると不可能ではないにしても、非常に問題になると思います。

ある日、ISPはレイテンシーをもう少し気にし、さまざまなオファーを提供するかもしれません...しかし、FTTHがなければ、それはまだ夢です...


1

悪い会社、バトルフィールド3、ストーカーなどのゲームでは、弾丸は「ロケット」のように発射される実際の個々のエンティティであると思います。弾丸が即座にターゲットに当たる場合にのみレイトレーシングが必要だと思います。実体が現実的な弾丸の実体が誰かにぶつかるかどうかを見るためにカチカチ音をたてるとき。


0

実際、Call of Dutyでビデオのリプレイを見ると、オレンジ色の二足歩行が空中を意図したターゲットに飛んでいるのをかすかに見ることができます。

ホーボーのようなリッチチェット効果が必要な場合は、Haloゲームをプレイしてください。より近い位置から金属製の壁を撃つと、弾丸が金属から飛び散るのを見ることができます。その中の狙撃兵は、それが命中した場所への道を残します。

遅らせられた回答が終了しました。後で修正するために戻ることができます。


-5

ゲームのストーカーシリーズの箇条書きとすべての物理学では、「Open Dynamics Engine」と呼ばれるオープンソースライブラリを使用します。

http://en.wikipedia.org/wiki/Open_Dynamics_Engine

弾丸は重力で落下し、壁から跳ね返り、非常に正確に弾丸を何かから曲げて、見えないがその位置を知ることができる人を撃つことさえできます。箇条書きは実際のオブジェクトモデルです。これは私が見た中で最も現実的な方法です。レイトレース法は、大きな空間に移動し始めると実用的ではありません。しかし、レーザー銃を撃っても大丈夫でしょう。

BloodRayne 2、Call of Juarez、World of Goo、X-Moto、OpenSimulatorを使用する他のゲーム。

別の良い選択は、物理ライブラリ「弾丸」です。 http://en.wikipedia.org/wiki/Bullet_%28software%29

グランドセフトオート4、レッドデッドリデンプションなどで使用されました。

ps arma 2は社内の物理エンジンを使用し、次のゲームarma 3はphysX物理エンジンを使用します


3
弾丸とは関係のない目的でODEを使用したゲームをリストアップすることは誤解を招きます。
11

4
また、ストーカーが弾丸にODEを使用していると言うのも誤解を招きます。実際、ゲームは独自の衝突テストを使用しますが、ODEソルバーのみを使用します。
攻撃
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.