物理エンジンとは正確には何ですか?


57

プログラムは入力を受け取り、それを処理し、出力する必要があります。それでは、物理エンジンは正確に入力として何を受け取り、出力として何を提供しますか?


36
多くの用語が人々に疑問を投げかけています。基本的な質問であるため、基本的な質問に投票する必要はありません。
マイケルハウス

16
「入力を受け取り、それを処理し、出力を与える」ものとしてのプログラムの記述は、そのプログラムを無駄であると考える、非常に単純化された還元主義的な考え方です。「プログラムは入力を受け取り、処理し、出力する必要があります。それで、ゲームは入力として何を受け取り、出力として提供するのですか?」という質問にどのように答えるかを考えてみてください。答えることはできますが、ゲーム。
ジャックエイドリー16

10
@JackAidleyあなたの主張はわかりますが、実際には、ゲームはそのようなものです:入力:キーストロークとマウス/ジョイスティックの動き、出力:画面上の楽しい画像とスピーカーからの面白い音。単純ですが、「ゲーム」が計算上何であるかを理解するのに役立ちます。また、私の経験では、コードアーキテクチャ、資産設計、プロジェクト管理などについて考える非常に便利な方法です(もちろん、唯一の方法ではありません)。
wjl

回答:


58

物理エンジンは、オブジェクトが実際の(または実際の物理に類似した)物理の制約下にあるかのように、オブジェクトの動きと反応をシミュレートします。通常、スタンドアロンプ​​ログラムではなく、より大きくて興味深いプログラム(ゲームなど)のコンポーネントです。

物理シミュレーションへの入力は、通常、プロパティ(剛体か軟体か、質量、形状など)およびそれらの体に作用する力のコレクションを持つオブジェクト( "ボディ")のコレクションです。

その入力に基づいて、エンジンは更新されたボディの位置と向きをシミュレートし、それらを適用(「出力」)します。一般に、オブジェクトが衝突またはオーバーラップすると、それはクライアントコードがフックして衝突に関連する特定のゲームプレイロジックを処理できるコールバックの形式でシミュレーションステップの出力に含まれます。


6

入力は速度、質量、時間であり、出力は新しい速度です。時々、回転/角運動量も入力および出力です。

基本的に、物理エンジンは重力と衝突の両方の効果をシミュレートしようとします。より良い物理エンジンのためには、オブジェクトを複数のオブジェクトに分割したり、オブジェクトの角運動量を含む、オブジェクトの永続的および一時的な変形の両方を含める必要があります。理想的には、たとえば橋が崩壊するまでその橋を何台のトラックが通過できるかなどのストレスもシミュレートしますが、それは非常にまれです。空気抵抗などのさらなるシミュレーション変数も物理エンジンとしてカウントされますが、私が知る限り、これらはまだゲームに組み込まれていません。

ほとんどの物理エンジンはある程度特殊化されており、ゲームに必要なポイントまで物理をシミュレートします。車のゲームの物理エンジンは、多くの場合、3Dシューティングゲームの物理エンジンとは大きく異なります。そして、ゴルフゲームの物理エンジンは、ゴルフボールと個々の草の葉の相互作用を過度に計算し、高速衝突と自動車の変形の処理を完全に欠いている可能性があります(ゴルフボールが当たった場合) 。


1
空気抵抗は実際には物理エンジンの非常に一般的な特性であることを指摘したいと思います。落下するオブジェクトに最終速度を適用するゲームは、空気抵抗をモデリングしています。
パトリックロバーツ

@PatrickRoberts Terminal Velocityは、空気抵抗について言及するときに私が考えていたものとはまったく異なります。これは、Pongには運動学的影響をモデル化する物理エンジンがあると言っているようなものです。
ピーター

12
まあ、公平に言えば、大まかに言ってそうです。無重量環境で完全に弾性衝突をモデル化します。モデルは単純化できることを理解していますが、実際に経験する現象の実際的な近似であるため、モデルと呼ばれる理由です。
パトリックロバーツ

4

通常、物理エンジンは、可能なシナリオごとに特定のアニメーションを設計することなく、ゲーム内のオブジェクトを環境に対して現実的な方法で動作させるために使用されます。

具体的には、物理​​エンジンは一連のプロパティ(質量、ジョイントなど)を持つモデルを取得し、一連のパラメーターに従ってゲーム内でレンダリングします。

これの初期の例は、ぐったりした体が階段から落ちるなどの方法をモデル化したラグドールエンジン(例:Unreal)です。

現在の技術では、物理エンジンは、AI、ゲーム内UI、カットシーン生成などとともに、ゲーム全体のパッケージに密接に統合されることがよくあります。

確かに、物理エンジンはゲームデザインの夜明けにまでさかのぼることができます。たとえば、ピンポンは粗い物理エンジンと考えることができます。ただし、主要な点は、物理エンジンがモーションキャプチャまたは手動アニメーションからの所定のアニメーションシーケンスを単に使用するのではなく、パラメータセットに基づいてオンザフライでアニメーションポイントを生成できることです。

他の回答で述べたように、ドライビングやフライトシミュレーションなどの一部のクラスやゲームでは、物理エンジンがゲームのプレイの基本であるため、画面上のアニメーションを駆動するメイン入力になります。通常、この用語は、地面から構築された非常に具体的なシミュレーターではなく、開発者側で問題のコンテキストの非常に具体的な知識や分析を必要とせずにさまざまな状況に適用できる汎用ツールに使用されます特定のアプリケーションのために。


4

物理エンジンは、「世界」内のオブジェクトの動きをシミュレートする役割を果たします(エンジンのコンテキストでの意味は何でも)。最近のほとんどの物理エンジンは、シミュレーションを行うのが比較的簡単で、スペースシムを実行しない限りほとんどの目的に「十分に正確」であるため、これを行うためにニュートン力学を使用します。

理論的には、「純粋な」物理エンジンは3つの入力を受け取ります。

  • 最後の「ティック」(エンジンがモデル化する必要があった最後の瞬間)の時点での世界の状態(オブジェクト、オブジェクトの位置、速度)
  • 最後のティックが発生してからどれくらい時間が経過したか
  • 最後のティック以降、世界のさまざまなオブジェクトに作用している力のリスト

慣性と力を考慮して、エンジンはオブジェクトを動かします。物理エンジンの出力は、単に「世界」の新しい状態であり、ゲームは必要に応じて読み出して変更できます。

実際には、物理​​エンジンは必ずしもそれほど「純粋」ではありません。オブジェクトを作成および破棄する必要があり、物理エンジンの法則では許可されない方法でオブジェクトを移動する必要がある場合があります。これはエンジンの外部で実行されることもありますが、内部で実行されることもあります。そのためには、エンジンにさらに入力が必要です。しかし、上記の3つの入力は基本をカバーしています。

たとえば、ジョイスティックを使用してゲーム内のキャラクターを移動する必要があるとしましょう。物理エンジンを使用していない場合、これは非常に簡単です。ユーザーがジョイスティックを動かしていることがわかると、それに応じてオブジェクトを移動します。物理エンジンでは、オブジェクトを直接移動するのではなく、オブジェクトの移動方向に対応する力をオブジェクトに適用し、エンジンが実際にオブジェクトを移動するようにします。

違いは何ですか?物理エンジンは現実的な加速などを処理するため、世界に他に何も存在しない場合でも、オブジェクトがまったく同じように移動することはほとんどありません。しかし、慣性の可能性があるように、他の力が同時にオブジェクトに作用している可能性もあり、エンジンはそれらすべてを考慮します。たとえば、オブジェクトに北向きの力を加えたが、他の何かが西向きの力を加えている場合(またはオブジェクトが既に西向きに動いていて、何も減速させていない場合)、エンジンはオブジェクトを北西に移動させます。

物理エンジンは、オブジェクト、その位置と速度、およびそれらに作用する力を追跡します。力学の法則のおかげで、ゲーム開発者であるあなたが特別なことをしなくても、衝突、摩擦、重力などを自動的に処理するために、独自の力を作成することさえできます。


1

物理エンジンは基本的に物理体のシミュレータです。

入力

質量、サイズ、密度などの物理特性を指定するボディ(または複数のボディ)を作成できます。

また、シミュレーションが発生する物理世界のプロパティ(重力など)を定義することもできます。

最後に、力を適用したり、ボディ間にジョイントを作成したりできます。

出力

これらすべてを定義すると、シミュレーションを開始でき、物理エンジンは次のタイムステップ(通常はゲームの次のフレームに対応する)ですべてのボディが配置される場所を通知します。そして、次のように...

ゲームエンジンが物理エンジンに尋ねるすべてのフレームのため、画面上でスプライトが移動しているのがわかります。

この体は今どこにありますか?

ゲームエンジンはそれに応じてグラフィックス表現を更新します。

考慮事項

私は通常、物理法則を宣言的な方法で適用するツールのような物理エンジンを見るのが好きです。

実際には、次のタイムステップで体がどこにあるかを判断するためにどの計算を実行する必要があるかを記述するコードを記述するのではなく、体の物理世界(および物理世界自体)の属性を設定する物理世界を単に説明し、物理エンジンに答えさせますその質問。


あなたの「考慮事項」セクションは、まったく明確ではありません(私にとって)。それをより明確で具体的/実践的に改善する(たとえば、観察、構築した実際のシステム例を提供するなど)場合は、+ 1を提供します。
code_dredd

@ray:ご提案ありがとうございます。できるだけ早く修正します!
ルカアンジェレッティ

完了したらコメントを必ず送ってください。急いではいけません。後で他の人に役立つはずです。
code_dredd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.