>   >  Houdini Cook Book:Vol. 102 Vellum Contraction
Vol. 102 Vellum Contraction

Vol. 102 Vellum Contraction

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

その他の連載