>   >  Houdini Cook Book:vol.89 Particle Branch
vol.89 Particle Branch

vol.89 Particle Branch

Particleを利用して分岐を生成します。

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


EDIT_小村仁美 / Hitomi Komura(CGWORLD)



POPの制御

今回も、前回に引き続きParticleの分裂を利用したモチーフを作成します。前回は、衝突の判定を基に分裂する条件をつくりました。今回は、VEXをベースに条件を作成し、自由な制御をしていきたいと思います。Particleはエフェクトで用いられることが多いイメージですが、Houdiniではそればかりとは限りません。むしろHoudiniでは、プロシージャルなモデリングなどに用いることで、より面白く、他のソフトウェアでは表現が難しい領域に手が届きます。

Houdiniにおいては、ParticleもPointと同列に考えることができるため、より簡単にそういった表現が可能になるのです。ただ、Particleの制御は、簡単なものではありません。SOPの特性が十分に頭に入っている人でも、最初はDOPの難解さがハードルになってしまうこともしばしばあります。今回は、そんなParticleの制御を少し掘り下げて、自由に扱えるようになるための足がかりになればと考えています。それほど、HoudiniにとってParticleとは大事な要素のひとつなのです。

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

01 Source Flow

Particleを発生させる前に、まず、SOPで下準備をします。これはもう毎回のことですので、特段解説の必要もないのですが、今回は若干の下準備を施してからシミュレーションに入っていきます。DOPでのシミュレーションは、必ずと言っていいほど、SOPでの下準備が必要になりますが、その準備こそがHoudiniにおいては重要になることが多いです。たとえ、変わったことをしなくとも、ながれとしていったんソースの段階をつくることをおすすめします。

今回はFile SOP【A】でエミットするためのジオメトリを準備していますが、このジオメトリは任意で構いません。今回の場合はPolygonが好ましいです。続いて、シミュレーションで使用するAttributeを作成します。今回は"area"というAttributeをVOP【B】からNoiseを基に生成しています【1】


全ての準備が整ったら、DOP Network SOP【C】を作成し、Input 1に対して接続します。直接コネクトしても良いですし、パスで選択しても構いません。ただ、このようにNetworkを跨ぐ作業をする際には、必ずNull【D】を作成しましょう。これは筆者のクセでもありますが、作業の区切りやNetwork間の行き来がある場合は、Nullに名前を付けてノードを整理しやすくします。こうすることで、入れ替えや後々の選択、デバッグなどが圧倒的にしやすくなります。人為的なミスをなくすためにも、ぜひ、習慣づけることをオススメします。

02 Particle Flow

DOP内で分岐とTrailのフローを組んでいきます。まず、POP Object DOP【A】を作成し、POP Solver DOP【B】も作成します。次に、POP Source DOPを3つ準備します。それぞれがルート【C】、幹【D】、枝【E】の役割を担っています。それらをマージして、Geometry Wrangle DOP【F】を準備します。これは分岐の条件を基にAttributeを作成するものです。続いてSOP Solver DOPを2つ用意します。1つはソースの表面に這うようにするためのもの【G】、もう1つはこの時点での"id"を別の名前で作成し直すものです【H】。これは後々ライン化するために必要ですが、Wrangle等で代用しても構いません。そうして、POP Group DOP【I】を用いて分岐のAttributeを基に、条件下でグループを作成します。これによって枝のPOP Sourceは分岐を判断します。さらに、全体のうねりをPOP Force DOP【J】で作成します。動きは徐々に抵抗が増して減衰するようにPOP Drag DOP【K】を用いて調整します。これらが先端の動きを担うParticleとなります【1】


次に、同じくPOP Object DOP【L】を用意して、POP Solver DOP【M】も別途準備します。そこに、POP Source DOP【N】を作成して先端のParticleを読み込み、そこから動かないParticleを毎フレーム発生させます【2】。Velocityなどを引き継がず、完全に止めています。これで、このStreamをライン化することができます。SOP上でTrail SOPを使用しても同じことを再現可能ですが、DOPの方が軽かったり、後々Attributeを追加することや、Forceで動かしたりすることが容易なので、このように設定しています。あとはもう1つのPOP Object DOPとマージしてシミュレーションすれば完了です。以下にそれぞれのパラメータについて解説します。



●ルート・幹・枝の設定

ルート【C】の設定は、Inpulse Activationを最初のフレームだけ発生させることから始めます【3】。次に、発生の数を設定し【4】、Just Born GroupでこのParticleのグループ名を指定します【5】

【D】の設定は、DOP内のParticle【6】で、自身のオブジェクトを選択し【7】全てのParticleから発生するようにします【8】。Source GroupにはルートのParticleを選択します【9】。発生させるParticleには別のGroup名を設定します【10】。また、Lifeは枝に比べて長めになるように設定しています【11】。元々のAttributeはLife以外を引き継ぐ設定にしています【12】。また、Velocityは新たに四方に広がるようにVarianceを足しています【13】

【E】の設定も、DOP内のParticle【14】で、自身のオブジェクトを選択し【15】全てのParticleから発生するようにします【16】。Source GroupにはPOP Group DOPで【I】作成したグループを選択します【17】。発生させるParticleは幹よりも少し遅れて分岐するように条件を作成し【18】、別のGroup名を設定します【19】。また、Lifeは幹に比べて短くなるように設定し【20】バラツキをもたせています【21】。元々のAttributeはLife以外を引き継ぐ設定にしています【22】。また、Velocityは幹に多少追従しつつ【23】新たに四方に広がるようにVarianceを足しています【24】


●Geometry Wrangle DOP


  • Geometry Wrangle DOP【F】の設定は、幹と枝にのみ適用されるようグループを指定します【25】。VEXPressionは簡単なもので、最大の世代数を決め、常に更新されるようにして、分岐の確率を設定しています【26】。


●POP Group DOP


  • POP Group DOP【I】の設定は、分岐の確率からランダムにセレクトするしくみになっています【27】


●SOP Solver DOP


  • SOP Solver DOP【G】内部では、このStreamのParticle【O】と元々のParticleの発生源のジオメトリ【P】を読み込み、それぞれをVOP【Q】に接続します。

VOP内では、XYZ Distance VOP【R】とPrimitive Attribute VOP【S】を使い、這わせるジオメトリのUVとPrimitive情報を利用して貼り付けます。ただ、そのまま貼り付けるのではなくて、元々のPositionとMix【T】して動きをもたせています。ブレンドの具合は、Attribute【U】やNoise【V】を使って変化させます。


次ページ:
03 Post Flow

その他の連載