どうも篠島です。Volume Trail で遊んでいたらブロッコリーが出来たので紹介します。
今回のサンプルファイルです。
Broccoli.zip
以前の記事で書いたGameDev ROP Vector Field、この記事を書きながら下の画像を見ていて思いました。マッシュルーム、いやこれはブロッコリーだと!
というわけで前回の記事で紹介したVolume Trail SOP で遊び、ブロッコリーが出来るまでの過程を紹介します。ちなみに完成形は下の様になります。このブロッコリー、何気に600万ポリゴンもあるなんとも実用性の無いモデルです。でもこういう風に色々遊べるのがHoudiniの良いところ。茎をカーブだけで作ってるので内部に無駄なポリゴン多数なので、メッシュに変換したり内部のカーブ削除したり何なりすれば相当軽くなると思います。
手順としてはPyroシミュレーションからVelocityを取り出す。Velocityはいい感じに渦を巻いてるフレームを選びましょう。そしてVolume Trail を作る用のベースのポイントを用意します。
ここでTrail Lengthを20等、大きい値にします。Velocityの向きにカーブが作られ・・・あら不思議、まるで木のように!
次にSphereやBox等を組み合わせてSDFを作成。このSDFを元に上の木を切り取る。SDFからポイントのグループ化、Blast SOPでグループ以外削除という流れ。これでブロッコリーの丸っぽい感じができる。
Before、After で見ると一目瞭然。
さらにこのカーブ1本1本に対し、Forループでカーブ毎に0-1の値を設定します。これについては昔書いたこの記事をみてください。さらにカーブの最後のポイントをグループ化。カーブのポイント数が少ないもの、多いものをグループ化。言葉で言うのは難しいのでHipファイルを見てもらえると分かりやすいと思います。
shortとlongのアトリビュートを何に使っているのかというと、PyroのVelocityで渦を巻いてしまっているので、そこを削除。要はSDFを元に木の上部を刈り上げたので、渦を巻いている部分は刈り取られていないのでポイント数は他のカーブに比べて多いハズ・・・ということでその部分を削除しています。でも渦巻くブロッコリーもなんか魔法のブロッコリーみたいで可愛いです。ここはお好みでバイパス。
カーブに0~1の値がついているのでそれを元にランプで色をつけます。そしてノイズも色にのせます。茎が短いので根本だけちょっとだけ伸ばします。これもランプでコントロール。Houdini素晴らしい・・・。0の値が根本、1の値が先っちょです。
カーブの最後のポイントをグループ化してあるので、そのポイントだけ取り出します。そしてPoint Replicate でポイントを増やします。そしてSphereをCopy。これがブロッコリーの上部の丸いつぶつぶになります。
カーブと丸いつぶつぶをMergeして完成。スクリーンキャプチャはベースとなるポイント1000個だったんですが、50000個くらいにポイント増やします。右がローポリ、左がハイポリ。
そして適当にライティングしてレンダリングです。シェーダーはいじってません・・・。茎の影がクッキリしすぎてるので修正したいですが時間がないので放置。ハイポリを若干異なる角度から見てみます。葉っぱと茎の付け根は実際のブロッコリと違いますが葉っぱで隠してしまえばわからない・・・。ということでPyroからブロッコリーを作る紹介でした!