Houdini備忘録: DOPシミュレーションを使ってみてつまずいた所
はじめに
Houdiniの学習にあたっての備忘録になります。
Houdini 18を使用してます。
今回は、DOPを使った物理シミュレーションをやってみました。
その際につまった所、勘違いしていた所などを書いていきます。
もくじ:
DOPって?
作ったもの
つまった所
宿題
1. DOPって?
Houdiniでジオメトリ同士の衝突や重力運動などをシミュレーションするための機能という認識をしています。
ちなみにDOPはDynamic Operatorsの略だそうです。
参考ページ:
https://www.sidefx.com/forum/topic/43515/?page=1
2. 作ったもの
今回は、コインを作成し、DOPで落下させました。
コイン
コインはCircleを押し出して、
別々に作った縁部分と内側部分をマージしています。
散りばめる
テーブルの真上あたりで、GridをScatterした後に
各PointのNormalとPositionをランダムな値にしてます。
あとは、各ポイントにコインを配置すると、バラバラな位置、方向を向く状態になります。
重なっているコイン
テーブル上に重なっているコインも置いてみました。
ただし、障害物としてブタちゃんたちがあるので、それらを避けて配置します。
Grid上で、ブタちゃんたちと被っているPrimitiveをGroup化して、削除しています。
上で処理したGridを元にScatterを行うと
ブタちゃんたちと被らないポイントが出せたので、それらのポイントにコインを配置しています。
コインを積む部分はCopyToTransformです。
コインを落とすテーブル
今回は、Gridをテーブルの天板とし、
ブタちゃんとラバートイを障害物として使用しました。
落とす
DOPシミュレーションで、散りばめたコインを落とします。
散りばめたコインと重ねたコインをマージし、DOP Importに通しました。
DOP Network内は、
StaticObjectとして、テーブルやブタちゃんたちを持ってきています。
DOP Import以降では、
テーブルから溢れたコインの削除をしています。
3. つまった所
- DOP Importノード
てっきり、DOP Importノードは、DOP Networkに対して、情報を渡すノードだと思っていましたが
正しくは、DOP Networkのシミュレーション結果を渡してくれるノードだった。
4. 宿題
- SurfaceCollisionを利用しているはずだが、不自然な空間がある
DOP Network内の各StaticObjectのCollision Detectionを
Use Surface Collisionsにしているけど
不自然な隙間ができる...
何これおもてたんと違う...
解決!(追記:2020/02/01)
記事を公開後にSidefx_jp様より、ご助言頂きまして、不自然な隙間がなくなりました!
Sidefx_jp様、ありがとうございます!
Bullet Solver を使っているのであれば、衝突物である RBD Object の Collisions 以下のところを調整すると良いかもしれません。 pic.twitter.com/mE1S8bjJqk
— Sidefx_jp (@Sidefx_jp) 2020年1月31日
教えて頂いたGeometry RepresentationをConcaveに変更したのみで、
ここまでキレイになりました!
公式ドキュメントのGeometry Representation以下のConcaveの欄を見てみると
https://www.sidefx.com/docs/houdini/nodes/dop/rbdobject.html
The Bullet Solver will convert the geometry to polygons and create a concave collision shape from the resulting triangles.
This shape is useful when simulating concave objects such as a torus or a hollow tube. However, it is recommended to only use the concave representation when necessary, since the convex hull representation will typically provide better performance.Bullet Solverは、ジオメトリをポリゴンに変換し、結果の三角形から凹型の衝突形状を作成します。
この形状は、トーラスや中空チューブなどの凹面オブジェクトをシミュレートするときに役立ちます。 ただし、凸包表現は一般にパフォーマンスが向上するため、必要な場合にのみ凹表現を使用することをお勧めします。
とのことです。
あまり精度を求めないシミュレーションであれば、使用しないなど、
多用しすぎない方が良さそうな印象です。
調べること
そもそもCollisionの設定方法が間違えてる可能性ブタちゃんたちにより掛かるコインは、計算で置いてしまう形にする
さいごに
Houdiniの学習を進める中で、
自分の学習を備忘録として、これから記録していければと思ってます。