物理エンジンとは、コンピューター上で物体の動きを衝突、摩擦、重力などの物理運動法則に従って計算するミドルウェアです。当社では、主に、スウェーデンのAlgoryx社の開発するプロフェッショナルユース物理エンジン「AGX Dynamics」の実装サポートや機械系物理運動シミュレーション構築の技術コンサルティングを行っております。
物理エンジンとは
物理エンジンとは
物理エンジンとは、コンピューター上で物体の動きを、衝突、摩擦、重力などの物理運動法則に従って計算するツール(ミドルウェア)です。
運動方程式の解を省略、簡素化し、「それらしい」動きを再現するものもあれば、スーパーコンピュターなどの高性能コンピュータを用い、高度な数学、コンピュータサイエンスをベースとした正確性を追求したものまで存在し、それぞれの用途の要求に応じて使い分けられています。
一般的に、物理的な正確性を追求すると計算量の増加に伴い計算コスト(計算結果を表示するのに要する時間)が高く(長く)なる傾向があり、正確性とスピードは相反関係にあります。
ゲームや訓練シミュレータなどの用途では、正確性よりもスピードが、研究、開発用途では正確性を重視することが多くなり、それぞれ物理エンジンに求められる役割も変わります。
コンピューター、特にCPUの高速化、GPUを活用した並列処理の使用が拡がっていくに従って物理エンジンを実用的に活用できる範囲が、今後さらに広がっていくことが想定されています。
物理エンジンの種類
オープンソース物理エンジンの中では、Open Dynamics Engine(ODE)が代表的な存在で、2001年に公開されました。
数多くのゲームや映像制作で使用され、また、後に続く物理エンジンも、このOpen Dynamics Engineをベースにして開発されたものもある物理エンジンとして草分け的な存在です。
他にもBullet Physics、Physx(サービス・サポートは有償)などがオープンソースで提供されている一般的な物理エンジンです。
日本でも大学研究室や一部企業では、自身が構築するシミュレータに活用するため内部で物理エンジンを作られていることがあります。
例えば、東京工業大学の長谷川研究室では、ぬいぐるみの動きの再現や、ハプティックス技術開発を目的にSpring Head (http://haselab.net/project_springhead)が開発されており、また、産業技術総合研究所ではヒューマノイドロボットのシミュレータ開発のため、AIST Engineが開発され、ロボットシミュレータ「Choreonoid」上で使用することができます。
一方で、有償で提供される物理エンジンとしては、映画、コンピュータグラフィック用途に広く使用されているHavok、訓練シミュレータ用途や研究開発分野で使用されるAGX Dynamicsや、Vortexが挙げられます。
オープンソースのエンジンとの違いは、それぞれのエンジンで異なりますが、オープンソースエンジンは最もユーザーが多いゲーム製作を目的としているケースが多く、ソルバーを反復法をベースとした簡略なものが多く、スピード重視の傾向が強くなっています。
それに対して商用エンジンは、それぞれの目的に応じてソルバーやモデルが独自に開発されており、オープンソースの物理エンジンで出来ないことをより安定的に、高速に行うことができるケースが多いと考えられます。
商用物理エンジンの活用は、2010年頃からビジネスの世界でも本格化していると考えられ、近年では自社のシミュレータに外部開発の商用物理エンジンを実装して使用する例が増えきています。
物理エンジンの使い分け、選び方
マーケットにはいくつかの物理演算エンジンが存在します。
どの分野・用途に、どのような基準で選ぶと良いのか、お話ししたいと思います。
物理演算エンジンは現在、主には、ゲーム、映画・映像制作、設計・開発、訓練シミュレータの分野で活用をされています。
また、それぞれの物理演算エンジンの特徴は、スピードと正確性によって定義付けられます。(他にも評価軸はありますが、一つの大きな評価軸であるコストを除くと、スピード、正確性の2点から把握することが、それぞれの物理演算エンジンの特徴を的確につかめるように思います)
プレイヤーがコントローラで操作するゲームは、事前にシナリオを作ることができず、プレイヤー操作に対して物理運動の解析を都度行う必要が出てくる、もっともスピードが重視されるカテゴリーになります。
逆に、研究・開発用途では正確性が重視されるケースが多く、高性能コンピュータや並列コンピュータを使い長時間の処理を伴うシミュレーションを実施するケースも多く存在します。
訓練シミュレータは、人間操作が入るという点ではゲームと同様であり、かつ、正確性を欠くと訓練そのものの目的を達することができないため、正確性も要求される、精度とパフォーマンスの両方が求められる用途になります。
また、研究・開発分野においても、モデルベース開発の浸透によって、開発スピードの短縮を図る動きが進んでおり、コンピュータ上で行うことができるシミュレーションの精度、正確性が大きなファクターとして取り上げられることが増えてきており、特に設計等の開発分野ではスピードに対する要望も高まってきています。
さらに、最近では、人工知能の進化とともに、AI用の学習データを物理シミュレーションで得る試みも進められています。
学習データとして使用できるだけの正確さを持っていることを前提に、数百万が必要といわれる学習データをいかに早く作り出すかは、物理エンジンの性能が最も顕著に出る分野ではないかと思います。
用途に応じて、特長の合った物理演算エンジンを選択することが、シミュレーションソフトウェアの性能を向上させる上で重要であると言えます。