記事の目次

    Vellumを使用した拘束のアプローチを紹介します。

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


    EDIT_小村仁美 / Hitomi Komura(CGWORLD)



    Contraction

    今回は、Vellumの中でも少しイレギュラーなアプローチを解説していきたいと思います。「Contraction」とは「収縮」を意味します。Vellumは、場合によってはConstraintのRestlengthを変えることで、Point間の拘束距離の調整は簡単にできますが、今回取り扱う内部構造をもつようなものに対しては、それだけだと上手くいきません。

    今回紹介するのは、収縮を行うための基礎的な知識を学んでもらうためのアプローチですが、表現のために少々複雑な手順を踏んでいます。収縮のために必要なフローはわずかですが、それを使ってVellumのシミュレーションに命を吹き込むためには、SOPによるセッティングが重要になってきます。また、DOP内でのセッティングも重要になりますので、その大きな2つのポイントをしっかりと押さえていただければと思います。Vellum自体の扱いは非常に簡単ですが、それだけでは面白いものを作るのはやはり難しいので、SOPによる補足が必要不可欠です。

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

    01 Base Setup

    ベースジオメトリのセットアップを解説します。


    まず、Vellumに渡すためのベースジオメトリを作成します。元となるジオメトリを読み込みます【A】【1】。これをVDB【B】を使って、簡略化したジオメトリに変換します【2】

    Attributeを作成しやすいように、Remesh SOP【C】でリメッシュします【3】。これに対して、Paint SOP【D】を使い、変形させるエリアをペイントします【4】

    同様に何パターンかの変形をさせるためのペイントをします【E】【5】。今回は、底の部分と触手の左右それぞれをペイントしています。


    続いて、Normalを作成していきます。底の部分用に、内側に入り込むようなNormalをComb SOP【F】を使ってコームしていきます【6】。触手の部分は、Poly Frame SOP【G】を使ってTangent方向のNormalを作成し、それを利用します【7】

    次に、POPを使って触手それぞれの変形を切り替えるためのParticleを作り、スイッチ用のAttributeを作成します【H】。これは、変化から次の変化までをAgeを使って値を作りたかったため、簡単にこのようなかたちにしていますが、切り替えさえできればこのフローは何でも問題ありません。色を使って触手を可視化すると、切り替えができていることが確認できます【8】

    これらを利用して、VOP【I】でNormalをスイッチ【J】していきます。ペイントしたエリアにNormalが入るようにして、Attributeを利用した切り替えを行なっています。

    このNormalを"materialW"というVectorに変換します【K】。このAttributeは後々VellumのConstraintを作成する際に使用します【9】

    実際にシミュレーションするジオメトリは、Remesh SOP【L】を使って、レゾリューションを決定します。この際、形状が崩れる可能性もあるので、VOP【M】で元の形状にフィットするように設定します。これを、Solid Confrom SOP【N】を使って、Tetrahedronへ変換します。最後に、作成した"materialX"などのAttributeを移行して完了です【O】

    02 Vellum Flow

    Vellumのフローを解説します。

    ソースの準備が完了したら、ジオメトリをCopy Stamp SOP【A】を使ってレイアウトします。この際に、idなど、それぞれを切り分けられるAttributeをつけておくと便利です【1】

    これらのジオメトリをVellum Constraintからを使ってConstraintを作成します。まずは、Distance Along Edgeを使ってTetrahedronのEdgeから距離を保つためのConstraintへ変換します【B】。次に、Vellum ConstraintのTetrahedral Volumeで、Tetrahedronの体積を維持するためのConstraintを作成します【C】。最後に、Vellum ConstraintのTetrahedral Fiberを使って、各Point上に作成した"materialW"の方向に沿って伸縮するためのConstraintを作成します【D】

    Vellumの準備ができたら、Vellum Solver【E】を使ってシミュレーションします。この際に、Null【F】を挟んで置くことで、後々のセッティングを楽にします。

    Solver内では、SOP Solver DOP【G】を使用して、ConstraintGeometryに対して、AttributeをCopyしてきます【H】。CopyするAttributeは、"materialW"によって生成された、restvector【2】というもので、これが伸縮する方向になります。SOP Solver DOPのData NameをConstraint Geometry【3】に指定することで、Constraintのジオメトリに対して処理を行うことができます。

    次に、Vellum Constraint Property DOP【I】で、Tetrahedral FiberのConstraintに対して、Stiffnessの値を調整します。この際、InputタブでInput3をSOP PathでAttributeを読み込むTargetを指定します【4】。こうすることで、直接SOPからAttributeを読み込むことができます。これによって、VEXPessionでAttributeから計算することが可能になります【5】

    最後に、キャッシュしたVellumのシミュレーション【6】を使って、ディテールアップのフローを作成します。VellumのパーツごとにForを使って分解して、Point Deform SOP【J】を使って、元々のジオメトリをシミュレーションに沿って変形させます【7】。これですべてのフローの完了です。

    次ページ:
    03 Operators

    [[SplitPage]]

    03 Operators

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

    ●SOP Solver

    今回紹介するノードは、SOP Solverです。

    これまでも何度か登場しているオペレータですが、今回は、指定するDataをGeometryからConstraintGeomtryに変更した使用方法をご紹介しました。

    Vellumのように、Geometryとは別にConstraintのような特殊なものがある場合、このようにDataを指定することで、SOPのジオメトリとして扱うことが可能になります。また、SOPのように、アニメーションしているものをそのまま読み込んでくることができない場合などに非常に重宝する使い方です。


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

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