OpenGL対物理学?


8

私はゲームプログラミングに非常に慣れていないため、最初のプロジェクトに参加しています。私は専門家の助言が必要になるようになりました:

ゲームの物理演算がオブジェクトを操作できるようにするには、3D空間での各オブジェクトの位置と方向を知る必要があります。シミュレーションの一部として、オブジェクトによる移動(位置の変更)および方向の変更(回転)。

これは、回転と平行移動の計算が2回行われることを意味しますか?物理学の1つともう1つは、オブジェクトを描画する前にglTranslateとglRotateを使用して行われますか?

IMOこれは起こらないはずです。また、物理部分で平行移動と回転を計算すると、GPUではなくCPUが使用され、パフォーマンスに影響します。

これは専門家によってどのように行われ、そのような状況を処理するための効率的なゲームアーキテクチャについてどのようなアドバイスをしますか?

回答:


17

レンダリングパイプラインと物理パイプラインが伝統的に分離されている理由はいくつかあります。これらを挙げているので、これはゲームだけではないことを覚えておいてください。あなたの質問は、OpenGLのような3Dレンダリングテクノロジーを使用するアプリケーション、競合他社、またはその先駆者です。

  • 3Dを使用するすべてのアプリケーションが物理学を必要とするわけではありません。OpenGLは単にゲーム用に構築されたのではなく、その使用法は医療シミュレーションから販売統計のモデリング、航空交通シミュレーション、複雑な化学反応など、すべてをカバーしていることを思い出してください。
  • 目的が多すぎるシステムは、効率の面で希薄になります。グラフィックパイプラインは信じられないほど高速でなければなりません。パイプラインがメインシステムメモリ(コードが存在する場所)などの他のサブシステムとインターフェイスする必要があるポイントを導入し始めると、効率が大幅に低下します。グラフィックカードのハードウェアは非常に具体的に絞り込まれ、非常に高いコストと長年にわたる競争の激しい研究で、ピクセルプッシュするために超最適化されています。

  • 物理演算を取り巻く数学とデータ構造の性質(特に衝突の検出と解決。これがなければ、物理学はありません)は、レンダリングに必要な数学とは大きく異なります。

  • ハードウェアの物理を扱うソリューションがあります。しかし、レンダリングの方法とは異なり、特定の状況で物理を実行する方法は大きく異なります。これの最も基本的な兆候は、ニュートン物理学がすべてに当てはまるわけではないことです。物理学を数学的にモデル化する他の方法があり、それはハミルトニアン力学のような他の状況でより適切です。また、特にゲームでは、個々のゲームごとに、2Dと3Dのどちらの場合でも、物理を異なる方法でモデル化することを選択できます。これらは実際の物理を反映する必要さえありません!-ゲームは想像力の産物だからです。言い換えれば、物理学は最終的にゲームダイナミックの一部であり、OpenGLのようなテクノロジーが適用される他のすべてのソリューションは言うまでもなく、ゲームごとに変化する可能性があります。
  • 頂点ごとのレベルで物理を正確にシミュレーションすることは、ほとんどの場合、現在実行可能なオプションではありません。ほとんどのゲームでモデルのポリ数が多いこと、および凹面多面体を含む衝突検出の本質的な困難を考えると、提供されているモデルから物理を計算するだけでは簡単ではありません。ほとんどの3Dゲームではありませんが、多くの場合、円柱またはボックスの形のバウンディングボリュームを使用して、衝突検出を簡素化します。このようなレベルの衝突検出も必要です。現在のテクノロジーを考えると、関連する処理レベルでは、ゲームロジックの残りの部分を実行するための余地はあまりありません。NvidiaのPhysXでさえ、物理シミュレーションのために、複雑な凹面の多面体をより単純な凸面の多面体に分解する必要があります。

  • あなたのグラフィックカードは、それが実行する変換でパースペクティブを生み出しています。これは、物理学で実行される変換とは異なります。これは、遠近法とは何の関係もありません。単に、世界の基本的な位置と方向を計算するだけです。MVCについて知っていれば、アプリケーションで保持するデータと、そのデータをどのように提示するかとの間に明確な違いがあることを理解できます。

コンピュータテクノロジ業界はニーズによって推進されており、視覚化はほぼ普遍的なニーズですが、物理シミュレーションは、要件として、またはそれぞれの実装に関して、決して普遍的なものではありません。

ですから、私のアドバイスは、粒子に逆らうことについて心配するのをやめ、レンダリングと物理学という2つの必要なことを行う方法に集中することです。グラフィックカードの処理パイプラインのデータを取得することはできません(CUDA / OpenClは例外です)。三角形とマテリアルデータをプッシュすると、3Dワールドが動画としてポンプで送られます。


最後の余談として、あなたの質問は無意味ではありません。物理学とレンダリングの組み合わせた基礎に対する欲求、および浮動小数点演算が固定小数点よりもはるかに遅い可能性があるという事実は、ボクセル技術が大きな関心の復活を見ている理由を示しています。 、軸整列凸多面体。これにより、主に空間的に分割可能でインスタンス化可能な整数インデックスグリッドで作業するようになるため、物理演算に必要な浮動小数点ベクトル演算の量が減り、パフォーマンスが大幅に向上します。特に同じ2つのサブシステムに異なるグリッド解像度を使用する場合があるため(SVOなどのオクツリーベースのソリューションを使用する場合)、この同じグリッドをレンダリングと物理の両方に使用できます。


3
5番目の箇条書きをさらに強調する必要があります。通常、視覚的なジオメトリとは別の衝突ジオメトリを使用します。
2011

あなたの答えは非常に洞察に満ちています。どうもありがとうございました。物理コードにOpenCLを使用することを考えています。これにより、これまで説明してきた変換の行列演算がGPUで実行され、パフォーマンスが少し向上するはずです。どう思いますか、これはいいアイデアですか?
M.Sameer、2011

3
喜んで。「私たちは小さな効率を忘れるべきです。たとえば、約97%の時間を言います。時期尚早な最適化がすべての悪の根源です」-ドナルドクヌース。ロジックに焦点を当て、必要に応じて最適化します。あなたは、ゲーム開発のごく初期の段階だと私が思うもののパフォーマンスにあまりにも関心があります。CUDA / OpenCLのようにCPUとGPUの間で処理を共有する場合、速度を遅くするのは非常に簡単です。グーグル「CUDA遅い」、あなたは多くの結果を見つけるでしょう。GPUに送信するものは、非常に注意深くバッチ処理する必要があります。数ミリ秒ごとに書き込みを行うなどと期待しないでください
エンジニア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.