HoudiniBBAの台所

Houdiniを覚えたいリアルタイム系VFXババァが覚えたことをいろいろと残しておくブログ。

【Houdini】自由に形を決められる「らせんカーブ」を作る(3)

HoudiniのSOPマスターになろう企画第三弾!いぇーい。
第一弾と第二弾の続きなので、急にこの記事にたどり着いてしまった方は過去記事もよろしくね!!!

houdini-kitchen.hateblo.jp

houdini-kitchen.hateblo.jp

 

今回はHoudiniの最強機能なんじゃないかと呼び声高い(?)もののひとつ、HDA(HoudiniDegitalAsset)化!について!です!

音声だと「エイチディーエー」っていう人が多いかな?
「デジタルアセット」って言う人もいますが、両方同じものを差しています。

HDAは、乱暴に言ってしまうと「カスタムノード」。
自分で作ったネットワークを「自分特製のノード」として保存しておいて、 あとから繰り返し使いたい時にtabからすぐ呼びだせるよ!っていうものです。

私はまだまだHoudiniを使い始めたばかりなので手札が少ないのですが、 師匠は「指定のフォルダに〇〇って命名規則でfbxエクスポート」とか、「シミュレーションのキャッシュを作って余計なデータを省いて圧縮して呼び出し」とかを作ってHDA化してました。

感覚としてはPhotoshopのアクションとか、ゲームのマクロみたいな感じです。
Max使いの人は「あー、欲しいプラグインを自分で作って保存できる感じね」って言ってました。

長年Houdiniを使い続けた人であればあるほど、「あぁー、その処理ね。HDA化してあるからすぐだわー」と秒速で仕事を終わらせていくのです。
あなおそろしや。

もちろん環境をそろえてあげれば他の人が作ったHDAを呼び出して使うことができるので、作ったHDAをスタジオやチーム内で共有しちゃえば、命名規則やらお決まりのルーチンやら〇〇さんしか作れないあれやこれやから解放されてみんなハッピー、という寸法です。最高かよ!

ではでは早速、つくりかたを見ていきましょう。

 

 Step1.HDA化したいノードをサブネットワークにつっこむ

必要な部分をネットワークウィンドウで選択します。
今回はひとつの処理しか作ってないので全選択しちゃいます。
この状態で右上の箱のアイコンを押すと、選択したネットワークが「subnet」というノードの中に収納されます。

f:id:houdini_kitchen:20181010234925p:plain

 

Step2.サブネットワークのプロパティをカスタムする

らせんの高さや巻き数などを調節できるようにしていきましょう。
ノードのプロパティの右上の歯車アイコンから「Edit parameter Interface...」というメニューを選ぶと、ひとまわり小さい設定ウィンドウが開きます。

f:id:houdini_kitchen:20181010235009p:plain

左側のエリアの「From Nodes」タブから「subnet1」を選び、circle1>Arc Angeles>endangle を選んで右向きの矢印ボタンを押してみましょう。
真ん中のエリアに何やら項目が追加されます。
(テスト用に余分なジオメトリ作ってるので、記事を見ながら制作してくださっている方とはちょっと見た目が違うと思います。ここの見た目がちょっと違っていても特に問題はないです。) 

f:id:houdini_kitchen:20181010235050p:plain


下の方の「Apply」ボタンを押してから、先ほどサブネットワークの階層に戻ってみると、「Arc Angles End」というプロパティが増えています。 スライダを動かすと、もちろん結果も反映されます。

f:id:houdini_kitchen:20181010235123p:plain

もうひとつの方法として、各チャンネルの項目名を直接ドラッグ&ドロップしても、同じようにパラメータを追加することができます。(入り組んだ構造じゃなければこっちのほうが楽かも)

f:id:houdini_kitchen:20181010235143p:plain

間違った項目入れちゃった!!」という時もご心配なく。
選択して「Delete」キーで削除ができます。

 

ちなみに、最初から存在している「Imput#1~~」という項目は、サブネットワークの入力の0番~3番です。
今回のらせんの場合はこのデフォルトの4項目はいらないので、Interface Options の「Invisible」のチェックを入れてしまいましょう。非表示にしてくれます。

f:id:houdini_kitchen:20181010235229p:plain

操作が分かったところで、どんなパラメータを作ればよいか洗い出しをしてみましょう。
今回いろいろと調整したいのは、下記のとおり。

1)ベースのかたちについて
 ・らせんの半径(CircleのRadius)
 ・らせんの高さ(PointVOP1のhight)
 ・コイルの巻き数(CircleのArcAnglesEnd)
 ・ラインの分割数(CircleのDivisions)

2)デフォームについて
 ・上側のテーパ(bend1のTaper)
 ・上側のベンド(bend1のBend)
 ・下側のテーパ(bend2のTaper)
 ・下側のベンド(bend2のBend)

3)頂点カラーについて
 ・そもそも頂点カラーあり?なし?(SwitchのSelectInput)
 ・頂点カラーのRamp(PointVOP2のRamp)

どんどん項目をEdit parameter Interfaceウィンドウに放り込んでも良いんですが、 「半径」とか「巻き数」は、そのままの値をパラメータにすると若干操作性が悪そうなので、すこし元のデータを改造してみます。

まず「ベースの円の半径」。
円が正円じゃないこともあるといえばある気もしますが、私の場合は常に正円であることを想定しているので、RadiusXとRadiusYは常に同じ値を入れることになります。

「必ず○○と同じ」や「○○の1/2」など、何かに関係するパラメータにはエクスプレッションを使うと便利です。

今回は「RadiusX」の値を使いたいので、RadiusXのチャンネルボックスの中で右クリック>Copy Parameter を選択します。

f:id:houdini_kitchen:20181010235447p:plain


続けて、「RadiusY」のボックスの中身をすべて消してから右クリック>Paste Relative References を選択すると「ch(“radx”)」という式がはいるので、そのままEnterを押します。

f:id:houdini_kitchen:20181010235501p:plain

f:id:houdini_kitchen:20181010235519p:plain

これで、RadiusXに入れた値がRadiusYにも、そのまま反映されるようになりました!

 

次に「巻き数」。
設計した側の人間からすると、360°で円が一周するので、デフォルトで360としたいところですが、初見の状態で「巻き数」と聞かれたら「1で1巻き」になっていた方が気持ちいいですね。
(半円でいい場合も、0.5巻きとかにすればいいし)

なので、それ用のパラメータを増やしちゃいましょう。

サブネットワークにパラメータを増やしたときと同じく、Circleノードのプロパティの右上の歯車アイコン>Edit parameter Interface から、設定ウィンドウを開きます。

今度は新しく追加するパラメータなので、「By Type」ウィンドウから「Float」を選びましょう。

後から何のパラメータなのか分かりやすいように、Name(変数の名前)とLabel(UIに出すときの名前)に「Coil」と入力します。
「Range」で値の範囲も決められますが、0~10のデフォルトで良さそうです。

f:id:houdini_kitchen:20181010235706p:plain

あとは初期値がゼロになっているので、「Channels」タブでデフォルト値を1に変更してApplyすればOK!

f:id:houdini_kitchen:20181010235732p:plain

さらに、この「巻き数」に対して360をかけた数が「ArcAnglesEnd」に入ればいいので、「Coil」をCopy Parameterして、ArcAnglesEndのボックスの中身をすべて消してから右クリック>Paste Relative Referencesでエクスプレッションを貼り付けます。
今回は、この結果に360をかけたいので、入力された式の後ろに「*360」を追加しましょう。

f:id:houdini_kitchen:20181010235855p:plain

これで、「Coil」のスライダを動かすと、それに応じて巻き数が変わるようになりました!

 

改めて、各チャンネルをサブネットワークのパラメータに入れていきましょう。

ラベルやRange、デフォルトの値に気を付けながらどんどん追加していきます。
Alphaのように「あり?なし?」の二択のときは、Typeを「Toggle」にするとチェックボックスタイプのUIになるので、変な数値が入ってくることも無く安心です!

f:id:houdini_kitchen:20181011000014p:plain

チェックが期待してた挙動と逆になっちゃった場合はラベルを変えるか、Switchノードに入力する順番を変えてみてくださいね。

すべての項目を追加し終わったら「Accept」を押してサブネットワークを見に行ってみましょう。
きちんとパラメータが並んでますね。 ...若干見づらいけど。

f:id:houdini_kitchen:20181011000049p:plain

 ここからは正直好みの話になってしまうのですが、あとちょっとだけ見やすくしましょう!
この「入力させる部分」、だれかに使ってもらうときに分かりやすいことはめっちゃ大事だから!!!

もう一度右上の歯車マークから「Edit parameter Interface...」を選びます。
左側の「By Type」タブから「Folders」を選んで、追加してみてください。
普通のファイルブラウザと一緒で、フォルダの中に任意のパラメータを追加できます。 まずは「BaseShape」と「Deform」と「PointAlpha」のグループに分けてみました。 この状態でAcceptしてみると...

f:id:houdini_kitchen:20181011000308p:plain

じゃじゃん。 項目ごとにタブ分けされました!

 

さらに、フォルダとフォルダの間に「Separator(セパレータ、仕切り線)」を追加してあげると...

f:id:houdini_kitchen:20181011000358p:plain

タブを保ったまま、項目が縦に並びました

 

あとはLabelで項目名を補足してみたり、Folderの中にさらにSeparatorを追加してあげたりして、最終的にこんな感じにしてみました。

f:id:houdini_kitchen:20181011000424p:plain

後から使いまわすことを考えて、きっちりUIまで設計できるようになっている...
Houdiniさんマジぱないの!どこぞのm〇lとは大違いじゃ!!!!!←

 

Step3.いよいよHDA化。

やり方はとっても簡単!

サブネットワークのノードを右クリック→Create Digital Assetを選ぶだけ!

f:id:houdini_kitchen:20181011000607p:plain

保存先とかいろいろ聞かれますが、基本はデフォのままAcceptで大丈夫です。
(ヘタにいじると、そのシーン専用とかになっちゃうらしいので)
名前だけはしっかりつけましょう。
あとで思い出せるように、分かりやすくね!!

f:id:houdini_kitchen:20181011000620p:plain

さっそく新しくGeometryを作ってHDAを呼び出してみましょう。
tabキーに先ほどのHDAの名前(私の場合は「createSpiral」)を入力すると...

f:id:houdini_kitchen:20181011000716p:plain

らせんが出ましたー!
パラメータも正しく動いています!やったぁあああ!

ちなみに、HDAは基本的にそのノードのパラメータのみを変更するだけで良いように作られているものが多いので、中身のネットワークはロックされています
1発でうまくいかなかったり、あとから何か修正したいときは、ノードを右クリックして「Allow Editing of Contents」を選ぶと、ロックが解除されます。

f:id:houdini_kitchen:20181011000831p:plain

f:id:houdini_kitchen:20181011000844p:plain

ネットワークの中身を更新しおわったらHDAの階層まで戻って、もういちどノードを右クリックし、出てきたメニューの「Match Current Definition」を選ぶとHDAの内容が更新されます

f:id:houdini_kitchen:20181011000910p:plain

まさかの3記事にわたる超大作になってしまいましたが、「らせんカーブのHDA作成」これにて完結です!
おつかれさまでした!!!

...ちなみにこんなに素敵ならせんができたら、このカーブに沿って板ポリゴンとか十字ポリゴンとか張りたくなりませんか...?
このカーブに沿って自動でMeshを作るHDAの紹介記事も鋭意制作中です。
もう少々おまちください...!

本日もありがとうございました!