>   >  Houdini Cook Book:Vol.90 Particle Fracture
Vol.90 Particle Fracture

Vol.90 Particle Fracture

Packを利用して破片を制御します。

TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
日本でも指折りのHoudini アーティスト。
手がけてきた作品は数々の賞を受賞している。
代表作に、HIDETAKE TAKAYAMA『Express feat. Silla(mum)』など。
www.transistorstudio.co.jp
blog.junichiakimoto.com


EDIT_小村仁美 / Hitomi Komura(CGWORLD)



Packの制御

今回は、Particleの制御の応用として、Packを使ったシミュレーションを試みたいと思います。Pack Objectは、言い換えれば1つのPointとして見ることができます。そのため、POP、すなわちParticleの代用として使用することができます。もちろん、シチュエーションは限られますが、通常のParticleを使用するよりも、より高度なシミュレーションが可能になります。

具体的なポイントは、今回のアプローチの要となる衝突判定にあります。通常のParticleは、Pointのシミュレーションの後に、インスタンスやコピーなどでパーツに置き換えるのが主流ですが、それだと、パーツ同士の干渉などはシミュレーションできません。パーツ同士をしっかり衝突判定させるためにはRBDなどを用いる必要がありますが、それは非常に負荷が高くなるのも事実です。また、動きの制御も難しくなります。そこで今回は、それらのハイブリッドなシミュレーションを実現すべく、Packを利用したアプローチを検証していきたいと思います。Packは、Pointであるため、その制御がしやすい上、シミュレーションのコストも低いので、今回のシチュエーションにはうってつけです。

今回のHoudiniプロジェクトデータはこちら

01 SOP Flow

まず、Packの準備から始めます。ソースとなるジオメトリ【A】を準備して、それをVDB from Polygons SOP【B】からVDBへ変換します【1】。それを、VDB Reshape SDF SOP【C】を使って、Erodeで内側へ侵食させて細らせ【2】、さらにVDB Smooth SDF SOP【D】で滑らかにします。これをConvert VDB SOP【E】でPolygonに変換して、コリジョン用のジオメトリとします。

次に、基のジオメトリからVDBに変換したSDFと、細らせて滑らかにしたSDFにVDB Combine SOP【F】を使ってその差分【3】を取得し、Polygonに変換します。これにより、外殻だけを残した状態をつくり出すことができます【4】。外殻のVDBをConvert VDB SOP【G】を使って、VDBのClassをSDFからFogに変更します。

これに対して、Scatter SOP【H】でPointを散布して、外殻部分のみにPointが来るようにします。次に、Voronoi Fracture SOP【I】を使って外殻のジオメトリを細かく分解します。これにAssemble SOP【J】を使い、それぞれのピースをPackに変換します【5】。これでPackの下準備は完了です【6】

今回は、ジオメトリの外殻を作成するためにVDBを使用していますが、この限りではありません。ピースがそれぞれに"name"のアトリビュートをもっており、さらにそれぞれがPackに変換されているというところが最も重要です。

ここまで完了したら、ジオメトリをあらかじめキャッシュしておくと良いでしょう【K】。特にVDBやVoronoi Fractrureなどは、クッキングに時間を要することが多いので、ふとした瞬間にクッキングが再開してしまわないよう、区切りを付けておくと作業がしやすくなります。

02 Pack Flow

Packを用いたシミュレーションを解説します。


DOP内にPackのセットアップをしていきます。まず、Pack Object DOP【A】を作成し、SOPで、キャッシュした状態のPackジオメトリを選択します。続いて、Rigid Body Solver DOP【B】を作成して接続します。その後、SOP Solver DOP【C】を作成し、その中にPointをアクティブ化するためのしくみを作成します。


まず、Object Merge SOP【D】でキャッシュしたPackのジオメトリを読み込み、Add SOP【E】などでPointに変換します。これは必須ではありませんが、可視化【F】をしやすくするための準備になります。Sphere SOP【G】を作成し、アクティブにさせるスタート地点を決めます。半径を調整することで、より範囲を見やすくします。次に、このSphereに対してAttribute Create SOP【H】で"active"のアトリビュートを作成し、値を1にしておきます。これも名前は任意で構いませんが、わかりやすい名前にしておきましょう。これをAttribute Transfer SOP【I】を使って基のジオメトリに転送します【1】。この際に、SphereのRadiusとDistance Thresholdをリンクさせることで、より制御がしやすくなります。これを、DOP内のPack【J】にAttribute Copy SOPを使ってコピーすることで、シミュレーションにアクティブの制御を加える下準備ができました。


SOP Solver DOPの準備ができたら、次は、POP Axis Force DOP【L】を使って、渦のフォースを加えます。この際、VEXPressionsを用いて、activeを使った制御ができるようにコーディングします【2】。POP Force DOP【M】を使って、ノイズを加える際も同じです【3】。このように、Packを使ったシミュレーションではありますが、ForceなどはPOPのものを使用しています。また、PackがPointとして扱えるからこそ、アクティブなアトリビュートの作成などが簡単に行えます。

後は、コリジョンとなるオブジェクト【N】を配置して完了です【4】。このように、Packを使うことで、Rigid BodyをあたかもParticleを扱うようにセットアップすることが可能になります。これも、Packという独特の使用法の賜物です。シミュレーションも非常に軽く、説得力のあるものが作成できます【5】

次ページ:
03 Operators

その他の連載