プログラムは入力を受け取り、それを処理し、出力する必要があります。それでは、物理エンジンは正確に入力として何を受け取り、出力として何を提供しますか?
プログラムは入力を受け取り、それを処理し、出力する必要があります。それでは、物理エンジンは正確に入力として何を受け取り、出力として何を提供しますか?
回答:
物理エンジンは、オブジェクトが実際の(または実際の物理に類似した)物理の制約下にあるかのように、オブジェクトの動きと反応をシミュレートします。通常、スタンドアロンプログラムではなく、より大きくて興味深いプログラム(ゲームなど)のコンポーネントです。
物理シミュレーションへの入力は、通常、プロパティ(剛体か軟体か、質量、形状など)およびそれらの体に作用する力のコレクションを持つオブジェクト( "ボディ")のコレクションです。
その入力に基づいて、エンジンは更新されたボディの位置と向きをシミュレートし、それらを適用(「出力」)します。一般に、オブジェクトが衝突またはオーバーラップすると、それはクライアントコードがフックして衝突に関連する特定のゲームプレイロジックを処理できるコールバックの形式でシミュレーションステップの出力に含まれます。
入力は速度、質量、時間であり、出力は新しい速度です。時々、回転/角運動量も入力および出力です。
基本的に、物理エンジンは重力と衝突の両方の効果をシミュレートしようとします。より良い物理エンジンのためには、オブジェクトを複数のオブジェクトに分割したり、オブジェクトの角運動量を含む、オブジェクトの永続的および一時的な変形の両方を含める必要があります。理想的には、たとえば橋が崩壊するまでその橋を何台のトラックが通過できるかなどのストレスもシミュレートしますが、それは非常にまれです。空気抵抗などのさらなるシミュレーション変数も物理エンジンとしてカウントされますが、私が知る限り、これらはまだゲームに組み込まれていません。
ほとんどの物理エンジンはある程度特殊化されており、ゲームに必要なポイントまで物理をシミュレートします。車のゲームの物理エンジンは、多くの場合、3Dシューティングゲームの物理エンジンとは大きく異なります。そして、ゴルフゲームの物理エンジンは、ゴルフボールと個々の草の葉の相互作用を過度に計算し、高速衝突と自動車の変形の処理を完全に欠いている可能性があります(ゴルフボールが当たった場合) 。
通常、物理エンジンは、可能なシナリオごとに特定のアニメーションを設計することなく、ゲーム内のオブジェクトを環境に対して現実的な方法で動作させるために使用されます。
具体的には、物理エンジンは一連のプロパティ(質量、ジョイントなど)を持つモデルを取得し、一連のパラメーターに従ってゲーム内でレンダリングします。
これの初期の例は、ぐったりした体が階段から落ちるなどの方法をモデル化したラグドールエンジン(例:Unreal)です。
現在の技術では、物理エンジンは、AI、ゲーム内UI、カットシーン生成などとともに、ゲーム全体のパッケージに密接に統合されることがよくあります。
確かに、物理エンジンはゲームデザインの夜明けにまでさかのぼることができます。たとえば、ピンポンは粗い物理エンジンと考えることができます。ただし、主要な点は、物理エンジンがモーションキャプチャまたは手動アニメーションからの所定のアニメーションシーケンスを単に使用するのではなく、パラメータセットに基づいてオンザフライでアニメーションポイントを生成できることです。
他の回答で述べたように、ドライビングやフライトシミュレーションなどの一部のクラスやゲームでは、物理エンジンがゲームのプレイの基本であるため、画面上のアニメーションを駆動するメイン入力になります。通常、この用語は、地面から構築された非常に具体的なシミュレーターではなく、開発者側で問題のコンテキストの非常に具体的な知識や分析を必要とせずにさまざまな状況に適用できる汎用ツールに使用されます特定のアプリケーションのために。
物理エンジンは、「世界」内のオブジェクトの動きをシミュレートする役割を果たします(エンジンのコンテキストでの意味は何でも)。最近のほとんどの物理エンジンは、シミュレーションを行うのが比較的簡単で、スペースシムを実行しない限りほとんどの目的に「十分に正確」であるため、これを行うためにニュートン力学を使用します。
理論的には、「純粋な」物理エンジンは3つの入力を受け取ります。
慣性と力を考慮して、エンジンはオブジェクトを動かします。物理エンジンの出力は、単に「世界」の新しい状態であり、ゲームは必要に応じて読み出して変更できます。
実際には、物理エンジンは必ずしもそれほど「純粋」ではありません。オブジェクトを作成および破棄する必要があり、物理エンジンの法則では許可されない方法でオブジェクトを移動する必要がある場合があります。これはエンジンの外部で実行されることもありますが、内部で実行されることもあります。そのためには、エンジンにさらに入力が必要です。しかし、上記の3つの入力は基本をカバーしています。
たとえば、ジョイスティックを使用してゲーム内のキャラクターを移動する必要があるとしましょう。物理エンジンを使用していない場合、これは非常に簡単です。ユーザーがジョイスティックを動かしていることがわかると、それに応じてオブジェクトを移動します。物理エンジンでは、オブジェクトを直接移動するのではなく、オブジェクトの移動方向に対応する力をオブジェクトに適用し、エンジンが実際にオブジェクトを移動するようにします。
違いは何ですか?物理エンジンは現実的な加速などを処理するため、世界に他に何も存在しない場合でも、オブジェクトがまったく同じように移動することはほとんどありません。しかし、慣性の可能性があるように、他の力が同時にオブジェクトに作用している可能性もあり、エンジンはそれらすべてを考慮します。たとえば、オブジェクトに北向きの力を加えたが、他の何かが西向きの力を加えている場合(またはオブジェクトが既に西向きに動いていて、何も減速させていない場合)、エンジンはオブジェクトを北西に移動させます。
物理エンジンは、オブジェクト、その位置と速度、およびそれらに作用する力を追跡します。力学の法則のおかげで、ゲーム開発者であるあなたが特別なことをしなくても、衝突、摩擦、重力などを自動的に処理するために、独自の力を作成することさえできます。
物理エンジンは基本的に物理体のシミュレータです。
質量、サイズ、密度などの物理特性を指定するボディ(または複数のボディ)を作成できます。
また、シミュレーションが発生する物理世界のプロパティ(重力など)を定義することもできます。
最後に、力を適用したり、ボディ間にジョイントを作成したりできます。
これらすべてを定義すると、シミュレーションを開始でき、物理エンジンは次のタイムステップ(通常はゲームの次のフレームに対応する)ですべてのボディが配置される場所を通知します。そして、次のように...
ゲームエンジンが物理エンジンに尋ねるすべてのフレームのため、画面上でスプライトが移動しているのがわかります。
この体は今どこにありますか?
ゲームエンジンはそれに応じてグラフィックス表現を更新します。
私は通常、物理法則を宣言的な方法で適用するツールのような物理エンジンを見るのが好きです。
実際には、次のタイムステップで体がどこにあるかを判断するためにどの計算を実行する必要があるかを記述するコードを記述するのではなく、体の物理世界(および物理世界自体)の属性を設定する物理世界を単に説明し、物理エンジンに答えさせますその質問。