こんにちは、篠島です。今回はRigid Bodyで使われるソルバーの中のODEについて簡単に見てみたいと思います。
今回のサンプルファイルです。
ODE.zip
ODEソルバーはオープンソースのリジッドボディのソルバーで、プリミティブ等の単純なオブジェクトしか計算することはできませんが高速に動作します。が、今ではBulletソルバーに主役を奪われODEを使う必要性はほぼ無いと言って良いでしょう。ですが、一応知識として頭に入れておきましょう! ODEソルバーを使うにはRigid Body Solver DOPからODEを選ぶだけですが、これはODE Solverノードを使った場合と全く同じです。
ODEソルバーを使う時に気をつけなければならないのが、RBD Object等のノードでデフォルトで Enable ODE Data が無効になっています。これがOFFだとシミュレーションがまったくされません。ONにすると、Object Typeからコリジョン用のジオメトリを指定します。
下のGIFアニメーションはObject TypeをBoxにしたものです。コリジョンオブジェクトが単純すぎて、ジオメトリの特徴をうまく表現できていません。
複雑な形状のオブジェクトを扱うには、プリミティブを使って大まかな形のオブジェクトを作り、これをコリジョン用オブジェクトとして指定します。Object TypeからCompositeを選び、Composite Objectでコリジョン用のオブジェクトを指定します。
試しにDisplay ODE Primitiveでコリジョンジオメトリを確認してみると、きちんと読み込まれているのが確認できます。
すると下のようにきちんとシミュレーションされます。
コリジョン用のジオメトリを用意する時に気をつけるのが、Primitive TypeをPrimitiveにするということです。Boxに関してはPrimitiveが無いのでPolygonのままで大丈夫です。
試しにコリジョンジオメトリの一部を、Primitiveではなく普通のポリゴンにしてみます。RBD Object上でコリジョンジオメトリを確認するときちんと読み込まれているのでちゃんとシミュレーションしてくれると思いきや・・・
ポリゴンに変えたところはコリジョンとして全く機能していません。下のGIFアニメではBoxで作った部分だけがコリジョンとして動いています。