記事の目次

    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

    [[SplitPage]]

    03 Post Flow

    シミュレーション後のフローを解説します。

    シミュレーションの設定が完了したら、SOPでの作業に移ります。DOP I/Oを使って読み込んだ場合は問題ありませんが、そのままDOPから作業する場合は、余分なジオメトリは削除してください【A】。次に、Add SOP【B】を使って、Attributeが同じ値のParticle同士をコネクトしていきます。これでParticleをラインのPolygonに変換することができます。続いてWrangle【C】を使ってUV情報を作成します。UV情報は主に"age"を基に作成します【1】

    その後、UV情報を基に、VOP【D】を使って"pscale"を作成します。これはそのままレンダリングする場合も、これにPolygonでメッシュを貼る場合も、どちらにも必要な情報です【2】。Ramp Parameter VOPなどを使うと、UV情報から簡単に形状を作成できます。そうしたら、いらないAttributeやGroupを削除します【E】。必要に応じて、Resample SOP【F】を使ってラインを均一に分割します。最後にジオメトリをキャッシュして完了です【G】

    04 Operators

    主要ノードを解説します。

    ●POP Object DOP&POP Solver DOP

    POPのフローには必ずPOP Object DOPとPOP Solver DOPを使用します。また、エミットさせる場合には、POP Source DOPも必要になってきます。このかたちは、DOP内における基本形とも言えます。DOPでは必ずObjectという箱が必要です。その箱の中にどんどんデータを蓄積することでシミュレーションが成り立ちます。

    Solverはシミュレーションの精度を司る場所で、いずれは細かな設定が必要になる場所でもあります。簡単なシミュレーションであればあまり設定を変える必要はありませんが、シチュエーションによってはこの場所での設定が非常に重要になってきます。

    今回は主にPOP Source DOPが活躍していますが、これは発生時の条件を司る部分であるため、今回のようにParticleが時間とともに発生する場合などは重要な設定項目がまとまっているノードとなります。また、Particleの量もさることながら、その寿命や勢いなどのParticleにまつわる細かな設定もここで行うため、このノードは、まずはじめにガンガン触って、感触を確かめておく必要があります。パラメータの名称などは、その他のソフトウェアとも共通する部分も多くありますので、そこまで難しいものではないと思います。


    • 「Houdini COOKBOOK +ACADEMY」
      Houdiniを基礎から楽しく学ぶオンライン講座

      公開日程:毎週金曜日公開(予定)
      価格:1,200円(税込)
      ※第一回「Houdiniの基本概念とインターフェイス」は無料公開中
      受講対象:Houdiniをこれから学びたい方、Houdiniの勉強で挫折した方など
      cgworld.jp/special/houdinicookbookacademy