📑

【Houdini】クリーチャー系の卵の作成

2022/04/14に公開

こんにちは。Houdiniで遊んでいる者です。
先日、以下のようなモデル(洞窟の中の卵)をHoudini・UE5を使って作成しました。

今回は本作品の制作手順を簡単にご紹介できたらと思います。モデリング部分の解説となります。

なお、Houdini初心者の記事となっておりますので、間違い・他の効率的な手段等、至らぬ点が多々あるかと思います。気づいた点ありましたらご指摘いただけると幸いです!

↓↓↓使用したデータです。↓↓↓(未整理でかなり乱雑なままです...)
https://github.com/Kuru-teo/HoudiniCollection/tree/master/EggOfCave

【Vellumについて】

最初に、本作の肝となるVellum機能について簡単に紹介します。(この機能を使い、ツタや蜘蛛の巣を制作しました。)
vellum機能を使用するためにはvellum objectと vellum sourceを vellum solverに入力する必要があります。
vellum object ・・・演算に必要なデータをもったオブジェクト
vellum source ・・・ geometryやコンストレインとを内包したもの

また、本作のような動的にコンストレイントを作成する必要のない場合はvellum専用のSOPの組み合わせだけで上記必要なものを揃えることが可能です。(図1)

これらノードを経由して作成したGeometry・コンストレイント・コリジョンオブジェクトをvellumsolverに入力してシミュレーションを行います。

詳しいことは以下の Indyzone さんの非常に丁寧なvellum解説動画がありますので、そちらを参考にしてみてください。
https://www.youtube.com/watch?v=YQ4LE-211CQ&t=1s

個人的に、重要そうなアトリビュートをいくつか紹介します。

rest length・・・ポイント間の元々の距離。1より小さくすることできゅっと引っ張られる表現が可能。
substep・・・1フレームの中をさらに分割する量。2以上が好ましい
constraint iteration・・・各サブステップ内で拘束を実行する回数多いほど正確かつ重い
mass・・・ 重さ。POPフォースや他のVellumジオメトリのピースによるポイントの挙動と拘束の強度に影響。
stiffness strechとbend・・・ 剛性のことを指す。二つを見合わせることで、糸や布の方さを表現
pscale・・・シミュレーション時のポイントのコリジョンの大きさ

それでは、実際に本作品がどのような流れで制作されているかを説明します。全体的な流れは以下の通りです。

【球体部分】

以下のディスカッションにある、VoronoiFractureで分割したサーフェスからエッジだけ取り出す方法で、ベースのジオメトリを作成しています。
https://forums.odforce.net/topic/24474-sharper-voronoi-noise-with-varying-cell-sizes/
その後neighbourcountで交差点のポイントを抽出し、その一部をpinとしてvellumのシミュレーションに利用します。最後にVDB from particleを使用してポリゴン化しています。(図2)

【ツタ(大)】

こちらは単純にポリラインを作成した後、ピンとなるポイントに回転のアニメーションをキーフレーム化して置くことによって、シミュレーションで巻き付くツタを作成しました。(図3)

restlengthを1以上にすることによって弛みができるようにしています。
このようにwire solver や vellumsolverでは、入力するポリラインのポイントをアニメーションさせることでそれに対応したシュミレーションを行うことが可能です。


ちなみにこのポリライン作成を実行するうえで、wrangleの「並列処理」という特性を知っておいて損はないと思います。run overがポイントの時、各ポイントを番号順にに処理するのではなく、入力されたポイントそれぞれ同時に処理を行うため、add point のような関数でポイントが増えたとしても不自然な挙動になることはありません。
もし、point 順に処理を行う必要があるのであればrun overをdetailにしてfor文で@ptnumをループさせると良いでしょう。


【ツタ(小)】

適当にscatterされたポイントを結び情報量を増やしていきます。また球体の下にぶら下がっている巣のようなものもは以下の図のように作成しました。(図4)

①ポリラインを構成するポイント2点に対し黒白のカラーを割り当→resample
②グラデーションをもとにpointjitter
resampleでポイントを分割した時、ポイントはその地点の色をサンプルしてくれるため、グラデーションのpscaleを作成しやすくなります。

【蜘蛛の巣】

https://vimeo.com/289131079?embedded=true&source=vimeo_logo&owner=3584572
簡単な流れは以下の通りです。(図5)

重要なwrangleの解説をしておきます。(図6)

  1. それぞれのポイントで追加の糸(以下コネクター)を作成するかどうかランダムに決めます。
  2. コネクターを追加するポイントであれば、自身の所属する糸以外の糸から指定した距離範囲で一番近いポイントをラインで結びコネクターを作成します。
  3. 1,2の手順をすべてのポイントで繰り返します。

ちなみに、vellumコンストレイントは連続して追加やマージすることが可能です。マージの際は一度vellumpackでパックしましょう
https://cgworld.jp/feature/201812-cgw245-houdini.html

①ベースカーブのキャッシュ → ②popでparticleをちりばめる →③Particle Fluid Surfaceでポリゴン化。スムーズのイテレーションを増やしてやることでいい感じに仕上がります。

【床・壁】

特に複雑なことはしていません。

  1. sortSOP等でで中央からのグラデーションを作成
  2. グラデーションをもとにchrampでノイズの乗る位置を調節
  3. ポリ数節約のためにノイズ部分以外はリダクション
  4. vopでノイズを乗せてディスプレイス
    (図8)

あとは、パラメーターを調節して納得いく形や情報量になったら一旦完成です。切りがいいので、UE5でのレンダリングは次回(後編)にまわします。ここまで読んでいただきありがとうございました!

Discussion