【Houdini】自由に形を決められる「らせんカーブ」を作る(2)
HoudiniのSOPマスターになろう企画第二弾!いぇーい。
さてさて、前回は「好きな高さと巻き数のコイルを作る」ってとこまで作りました。
でもどうせみんな、らせんを作るってなったら「竜巻型も作りたい」とか言い出すんでしょ。知ってるよ!!
変形といえばmayaでもお馴染み、デフォーマの出番です。
「bend」ノードを使っていくよ!
mayaのベンドとはちょっと感覚が違うけど、難しくはないので、張り切っていきましょー。
まずは、前回作った「PointVOP」の下へ、bendノードをつなぎます。
線とbendデフォーマの向きと位置を合わせてあげましょう。
まずは向き。
Up Vectorのxを1に、Capture Directionのyを1にします。
向きを合わせただけだと、らせんの長さが変わった時に不都合が生じてしまう(高さが高すぎるとデフォーマからはみ出しちゃう)ので、線の長さに応じて、デフォーマのサイズも可変になるようにします。
考え方としては、デフォーマの端っこは
・初期位置:原点(固定)
・高さ:らせん自体の高さ(可変)
なので
「らせん自体の高さ」の値が常にCaptureLengthに入るようになれば問題解決しそうですね。
オブジェクトの「高さ」とか「横幅」を使いたいときは、「バウンディングボックス」を使うと簡単に済むことが多いです。
「bbox表現関数」っていうのがあるので、ありがたく使わせてもらいましょう。
めちゃくちゃ荒く説明するとbbox(オブジェクト,どの値が欲しいか)って書くと、その値返してあげるよ、って関数です。
http://www.sidefx.com/docs/houdini/expressions/bbox.html
いまの場合、「処理してるオブジェクトの高さちょうだい」なので、
bbox(らせん,D_YMAX)になりますね。
そして、「らせん」を指定するにはオブジェクト名を書いてもいいのですが、後々のことを考えて(らせんじゃなくなった時も使えるように)「このノードの0番入力に刺さってるやつ」って教えてあげるのがよさそうです。
「ここの〇番に入力されてるやつ」の書き方は opinputpath("参照ノードの場所",何番目か) です。
ノードの場所は相対参照です。
パス表記はもうそういうルールなので覚えるしかないので覚えちゃいましょう。
丁寧に解説してくれてるWebサイトさんがいっぱいあります。
このノード(.)の0番入力に刺さってるやつ、は
opinputpath(".",0)
ですね。
実際にcaptureLengthに入れる関数は
bbox(opinputpath(".".0),D_YMAX)
となります。
これでらせんをねじったり、大きくしたり、曲げたりできるようになりました!
試しに「Bend」とか「Taper」とかのスライダを動かしてみましょう~ 。
ちなみに、bendはup方向のほうのデフォーマしか動かないので、下方向も動くようにしたい!という場合はいまのbendノードの下にもう1回bendノードを作ってあげる必要があります。
今度は「らせんの一番高いとこ」が基準点で、キャプチャ方向はYの-1、 lengsは変わらず、「らせんの高さ」です。
今までに作ったものだけで出来ますよ~。
スクショを見ながら作ってみてください・x・
ついでと言っては何ですが、頂点カラーも決められるようにしておきましょう。
カーブのポイントにAlphaを持たせておくと、それを基準に押し出しなどをしたときに、meshにも引き継がれて便利ですよ!!
bend2から「pointVop」をつなげて中に入り、らせんを作った時のように「bind」ノードを使ってcurveuを呼び出しましょう。
curveuの値をrampにしてからAlphaに渡してあげれば狙った結果になりそうです。
が、出力にAlphaらしきものが見当たりません(;ω;)!
でも大丈夫!!!
入力と同じようにデフォルトで用意されてないアトリビュートは、「bind export」ノードで名前を指定してあげると渡すことができます。
デフォルトの入力と出力を全無視するのが若干申し訳ない(笑)
あ、頂点カラーAlphaのアトリビュート名は大文字のAなのでご注意を!
あとは、デフォルトのrampパラメータから出てくる値はVector型(色の情報)なので、Vector to Floatで少数に直してあげるのを忘れずに。
(Ramp自体をFloat型にしてもいいけど、パラメータのUIが見辛いので...)
ちなみに、おまじないというかお約束になってしまうのですが。 頂点カラー(Cd)を指定せずにAlphaだけを指定してしまうと、UE4やUnityでカラーが何をやっても0から変わらなくなってしまうことがあるので、Cd(頂点カラー)には定数(Constant)で「1.0」を入れておきます。
VOPはこんな感じになりました!
最後に、頂点カラーは要る時と要らないときがあるので、Switchノードで「頂点カラーをつけるorつけない」を切り替えられるようにしておきます。
Switchノードに「bendが終わったらすぐSwichに入る」ルートと、「bendのあとpointVOPで処理をしてからSwichに入る」ルートを、それぞれつなげましょう。
※入力部分が●ではなく「うにょーん」と繋がっているノードは、複数の入力を受け付けているよーってことです!
あと、これはお好みになるのですが、処理が一区切りついたらNULL(空白)ノードを作って「ここがゴールだよー」ってわかりやすくしてる人が多いです。
今回も念のため「export_spiral」って名前をつけておきました。
ここまでで「仕組み」を作る工程は終了です!
おつかれさまでした。
名前を付けて大事に保存しておきましょう。
ここまで出来てめでたし、めでたしなんですが...
このチュートリアル(?)には、もうちょっとだけ続きがあるんじゃよ。
だって毎回こんな面倒なネットワークを組むのは時間の無駄だし、そもそも調整のためのパラメータが色んなノードにゴッチャリとしてて、「便利」とは対極くらいの位置にいるし。
次回はそれらをスッキリさせつつ、3秒でこの「らせんカーブ」を呼び出す仕組みを作っちゃいますよ!
Houdiniが本気でデキル子に化けるのはここからじゃー!
おたのしみにぃ!
本日もありがとうございました!
続きは↓↓