物理エンジンとは、特定の物理システム(通常は古典力学、剛体動力学(衝突検出を含む)、軟体動力学、流体動力学など)の近似シミュレーションを提供するコンピュータソフトウェアです。コンピュータグラフィックス、ビデオゲーム、映画(CGI )の分野で利用されています。主な用途はビデオゲーム(通常はミドルウェアとして)であり、その場合、シミュレーションはリアルタイムで行われます。この用語は、高性能科学シミュレーションなど、物理現象をシミュレートするためのあらゆるソフトウェアシステムを指す場合にも、より一般的に使用されることがあります。
物理エンジンには、一般的にリアルタイムと高精度の2種類があります。高精度物理エンジンは、非常に精密な物理演算を行うためにより多くの処理能力を必要とし、通常は科学者や映画などのプリレンダリングされたコンピュータアニメーションで使用されます。ビデオゲームやその他のインタラクティブコンピューティングで使用されるリアルタイム物理エンジンは、ゲームが適切な速度で応答できるように、簡略化された計算と精度の低下を使用します。物理エンジンは基本的に、物理をシミュレートするために必要な数学を実行する大きな計算機です。[ 1 ]
初期の汎用コンピュータの一つであるENIACは、非常にシンプルな物理エンジンとして使用されました。これは、アメリカ軍が様々な質量の砲弾が様々な角度と火薬量で発射された際にどこに着弾するかを推定するための弾道表を作成するために使用され、風による弾道偏向も考慮に入れました。計算結果は一度だけ行われ、印刷された表にまとめられて砲兵指揮官に配布されました。
物理エンジンは、1980年代以降、スーパーコンピュータ上で計算流体力学モデリングを実行するために一般的に使用されており、粒子には力ベクトルが割り当てられ、それらを組み合わせて循環を示します。速度と高精度が求められるため、計算を高速化するためにベクトルプロセッサと呼ばれる特殊なコンピュータプロセッサが開発されました。この技術は、天気予報における気象パターンのモデリング、航空機や船舶、レーシングカーを含む自動車の設計のための風洞データ、ヒートシンクを改善するためのコンピュータプロセッサの熱冷却などに使用できます。コンピューティングにおける多くの計算負荷の高いプロセスと同様に、シミュレーションの精度はシミュレーションの解像度と計算の精度に関係しており、シミュレーションでモデル化されていない小さな変動でも予測結果が大きく変わる可能性があります。
タイヤメーカーは、物理シミュレーションを用いて、新しいタイヤトレッドタイプが、柔軟性の異なる新しいタイヤ素材や、さまざまな荷重条件下で、湿潤状態と乾燥状態の両方でどのように機能するかを検証します。これらのシミュレーションは、タイヤの運用、材料選定、コストを最適化し、時間効率を向上させます。
ほとんどのコンピュータゲームでは、シミュレーションの精度よりもプロセッサの速度とゲームプレイが重視されます。そのため、リアルタイムで結果を生成するものの、現実世界の物理法則を再現するのは単純なケースに限られ、通常は近似値を用いる物理エンジンが設計されています。多くの場合、シミュレーションは真のシミュレーションではなく、「知覚的に正しい」近似値を提供することに重点を置いています。しかし、Sourceなどの一部のゲームエンジンでは、パズルや戦闘シーンで物理法則が用いられています。そのため、例えば物体の運動量で障害物を倒したり、沈みゆく物体を持ち上げたりできるような、より正確な物理法則が必要となります。
過去の物理ベースのキャラクターアニメーションでは、計算が速く容易なため、剛体動力学のみが使用されていましたが、現代のゲームや映画では、軟体物理が使用され始めています。軟体物理は、パーティクルエフェクト、液体、布地にも使用されます。水やその他の液体、および空気中を流れる火や爆発の流れをシミュレートするために、限定的な流体動力学シミュレーションが提供される場合もあります。
ゲーム内のオブジェクトは、プレイヤー、環境、そして互いに相互作用します。通常、ゲーム内のほとんどの 3D オブジェクトは、2 つの別々のメッシュまたは形状で表現されます。これらのメッシュの 1 つは、ゲーム内でプレイヤーに見える非常に複雑で詳細な形状であり、優雅な曲線とループ状の取っ手が付いた花瓶などです。処理速度を上げるために、2 つ目の簡略化された目に見えないメッシュがオブジェクトを物理エンジンに表現するために使用され、物理エンジンは、この花瓶を単純な円柱として扱います。したがって、物理エンジンのモデルは円柱に基づいており、取っ手を認識しないため、花瓶の取っ手の穴に棒を挿入したり、発射物を発射したりすることはできません。物理処理に使用される簡略化されたメッシュは、衝突ジオメトリと呼ばれることがよくあります。これは、バウンディング ボックス、球、または凸包である場合があります。衝突検出の最終形状としてバウンディング ボックスまたはバウンディング スフィアを使用するエンジンは、非常に単純であると考えられています。一般的に、衝突検出の狭い段階でコストのかかるメッシュ間の衝突検出を行う前に、広範囲の衝突検出ではバウンディングボックスを使用して、起こりうる衝突の数を絞り込みます。
離散衝突検出の精度に関わるもう1つの要素は、フレームレート、つまり物理演算が1秒間に実行される回数です。各フレームは他のすべてのフレームとは別個のものとして扱われ、フレーム間の間隔は計算されません。フレームレートが低く、小さな高速移動オブジェクトの場合、オブジェクトが空間を滑らかに移動するのではなく、各フレームが計算されるたびに空間のある点から次の点へと瞬間移動するように見える状況が発生します。十分な速度で移動する発射体は、ターゲットが高速移動発射体の計算されたフレーム間の隙間に収まるほど小さい場合、ターゲットを外れます。この欠点を克服するために、Second Lifeのように、フレーム間の隙間よりも長い目に見えない尾を持つ矢として発射体を表現し、計算されたフレーム間に収まる可能性のあるオブジェクトと衝突させるなど、さまざまな手法が用いられています。対照的に、BulletやHavokのような連続衝突検出では、この問題は発生しません。
バウンディングボックスベースの剛体物理システムを使用する代わりに、有限要素ベースのシステムを使用する方法があります。このようなシステムでは、3D オブジェクトの 3 次元の体積テッセレーションが作成されます。テッセレーションの結果、オブジェクトの靭性、塑性、体積保存などの物理的特性の側面を表す多数の有限要素が生成されます。構築された有限要素は、ソルバーによって3D オブジェクト内の応力をモデル化するために使用されます。応力は、高いリアリズムと独自性で破壊、変形、その他の物理的効果を引き起こすために使用できます。モデル化される要素の数が増えるにつれて、エンジンの物理的挙動をモデル化する能力が向上します。3D オブジェクトの視覚的表現は、 CPU または GPU で実行される変形シェーダーを使用して、有限要素システムによって変更されます。有限要素ベースのシステムは、パフォーマンスのオーバーヘッドと 3D アートオブジェクトから有限要素表現を作成するツールの不足のため、ゲームでの使用には実用的ではありませんでした。高性能プロセッサと、体積テッセレーションを迅速に作成するツールの登場により、リアルタイム有限要素システムがゲームで使用されるようになり、その始まりは、ジェームズ・オブライエン博士が博士論文の一部として開発したアルゴリズムを使用して、木材、鋼鉄、肉、植物の変形と破壊効果にデジタル分子物質を使用したStar Wars: The Force Unleashedでした。[ 2 ]
現実世界では、物理法則は常に作用しています。宇宙のすべての粒子は、力が互いに押し合うことで絶えずブラウン運動による振動を受けています。ゲームの物理エンジンにとって、このような絶え間ないアクティブな精度は限られたCPUパワーを無駄に消費し、フレームレートの低下などの問題を引き起こす可能性があります。そのため、ゲームでは、一定時間内に特定の距離を移動していないオブジェクトの物理演算を無効にすることで、オブジェクトを「スリープ」状態にすることがあります。たとえば、3D仮想世界Second Lifeでは、オブジェクトが床に静止していて、約2秒間に最小距離を超えて移動しない場合、そのオブジェクトの物理計算が無効になり、その場でフリーズします。オブジェクトは、他のアクティブな物理オブジェクトとの衝突が発生して物理処理が再開されるまでフリーズしたままになります。[ 3 ]
ビデオゲームの物理エンジンは通常、衝突検出/衝突応答システムと、シミュレーション対象に作用する力の計算を担当するダイナミクスシミュレーションコンポーネントという 2 つのコア コンポーネントで構成されています。最新の物理エンジンには、流体シミュレーション、アニメーション制御システム、アセット統合ツールも含まれている場合があります。固体の物理シミュレーションには、主に 3 つのパラダイムがあります。[ 4 ]
最後に、上記のパラダイムの側面を組み合わせたハイブリッドな方法も可能である。
物理エンジンのリアリズムにおける主な限界は、アルゴリズムの収束が遅いため、制約解決と衝突結果が近似値となることです。衝突検出の計算頻度が低すぎると、オブジェクトが互いにすり抜け、異常な補正力で反発される可能性があります。一方、反力の近似値は、一般的な投影ガウス・ザイデルソルバーの収束が遅いために発生し、異常な跳ね返りを引き起こします。この問題は、あらゆる種類の自由移動複合物理オブジェクトで発生する可能性がありますが、特に高張力下のチェーンリンクや、アクティブに物理的にベアリング面を持つ車輪付きオブジェクトで顕著に現れます。精度を高めることで位置/力の誤差は減少しますが、計算に必要なCPUパワーが増加します。
物理処理ユニット(PPU)は、特にビデオゲームの物理エンジンにおいて、物理演算を処理するために設計された専用マイクロプロセッサです。PPUが関わる計算の例としては、剛体動力学、軟体動力学、衝突検出、流体動力学、髪や衣服のシミュレーション、有限要素解析、物体の破壊などが挙げられます。これは、GPUがメインCPUの代わりにグラフィックス処理を行うのと同様に、専用プロセッサが時間のかかるタスクをコンピュータのCPUからオフロードするという考え方に基づいています。この用語は、Ageiaが自社のPhysXチップを消費者に説明するためにマーケティングで考案したものです。CPU-GPU分野の他のいくつかの技術もこれと共通する特徴を持っていますが、Ageiaのソリューションは、PPUとしてのみ設計、販売、サポートされ、システムに組み込まれた唯一の完全なソリューションでした。
物理演算処理のハードウェアアクセラレーションは、現在では一般的に、より汎用的な演算をサポートするグラフィックス処理ユニット(GPU)によって提供されており、これは汎用グラフィックス処理ユニット(GPGPU)と呼ばれる概念である。AMDとNVIDIAは、最新のグラフィックスカードで剛体運動計算をサポートしている。
NVIDIAのGeForce 8シリーズは、Quantum Effects Technologyと呼ばれるGPUベースのニュートン力学加速技術をサポートしています。NVIDIAは、GPUへの低レベルおよび高レベルのAPIを提供するCUDA(Compute Unified Device Architecture )技術用のSDKツールキットを提供しています。 [ 5 ] AMDは、GPU向けに同様のSDKであるClose to Metal(CTM)を提供しており、薄型のハードウェアインターフェイスを提供しています。
PhysXは、利用可能な場合にGPGPUベースのハードウェアアクセラレーションを使用できる物理エンジンの例です。