Houdini備忘録: DOPシミュレーションを使ってみてつまずいた所

はじめに

Houdiniの学習にあたっての備忘録になります。
Houdini 18を使用してます。
今回は、DOPを使った物理シミュレーションをやってみました。
その際につまった所、勘違いしていた所などを書いていきます。

もくじ:

  1. DOPって?

  2. 作ったもの

  3. つまった所

  4. 宿題

1. DOPって?

Houdiniでジオメトリ同士の衝突や重力運動などをシミュレーションするための機能という認識をしています。

ちなみにDOPはDynamic Operatorsの略だそうです。

参考ページ:
https://www.sidefx.com/forum/topic/43515/?page=1

2. 作ったもの

今回は、コインを作成し、DOPで落下させました。

f:id:yuyasaltcanyon:20200130225956p:plain:w600


コイン

コインはCircleを押し出して、
別々に作った縁部分と内側部分をマージしています。
f:id:yuyasaltcanyon:20200130231042p:plain:w600

散りばめる

テーブルの真上あたりで、GridをScatterした後に
各PointのNormalとPositionをランダムな値にしてます。
あとは、各ポイントにコインを配置すると、バラバラな位置、方向を向く状態になります。
f:id:yuyasaltcanyon:20200130232254p:plain:w600

重なっているコイン

テーブル上に重なっているコインも置いてみました。
ただし、障害物としてブタちゃんたちがあるので、それらを避けて配置します。
Grid上で、ブタちゃんたちと被っているPrimitiveをGroup化して、削除しています。
f:id:yuyasaltcanyon:20200130232930p:plain:w600

上で処理したGridを元にScatterを行うと
ブタちゃんたちと被らないポイントが出せたので、それらのポイントにコインを配置しています。
コインを積む部分はCopyToTransformです。
f:id:yuyasaltcanyon:20200130232958p:plain:w600

コインを落とすテーブル

今回は、Gridをテーブルの天板とし、
ブタちゃんとラバートイを障害物として使用しました。
f:id:yuyasaltcanyon:20200130231510p:plain:w600

落とす

DOPシミュレーションで、散りばめたコインを落とします。
散りばめたコインと重ねたコインをマージし、DOP Importに通しました。
f:id:yuyasaltcanyon:20200130233706p:plain:w600

DOP Network内は、
StaticObjectとして、テーブルやブタちゃんたちを持ってきています。
f:id:yuyasaltcanyon:20200130233922p:plain:w600

DOP Import以降では、
テーブルから溢れたコインの削除をしています。
f:id:yuyasaltcanyon:20200130234155p:plain:w600

3. つまった所

  • DOP Importノード
    てっきり、DOP Importノードは、DOP Networkに対して、情報を渡すノードだと思っていましたが
    正しくは、DOP Networkのシミュレーション結果を渡してくれるノードだった。

4. 宿題

  • SurfaceCollisionを利用しているはずだが、不自然な空間がある
    DOP Network内の各StaticObjectのCollision Detectionを
    Use Surface Collisionsにしているけど
    不自然な隙間ができる...
    何これおもてたんと違う...
    f:id:yuyasaltcanyon:20200131000046p:plain:w600

    解決!(追記:2020/02/01)

    記事を公開後にSidefx_jp様より、ご助言頂きまして、不自然な隙間がなくなりました!
    Sidefx_jp様、ありがとうございます!


f:id:yuyasaltcanyon:20200201003235p:plain:w600

教えて頂いた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の学習を進める中で、
自分の学習を備忘録として、これから記録していければと思ってます。