Houdini勉強回。
今回はSpare Inputについて。
“Spare Input”とは、ざっくり言うと「ノード参照のための追加パラメータ」です。
たしか、Houdini16くらいから付いた機能だったかと思います。
使い方
“Spare Input”は次のようにして作成、使用します。
例として、Spare Inputを使用してジオメトリの下にグリッドを配置します。
あらかじめシーン内にGrid(SOP)とTestGeometry(ぶた)を用意いておきます。
Spare Inputを使用して、TestGeometry(ぶた)のジオメトリ情報を取得し、Gridの位置を制御します。
1:Spare Inputパラメータを追加する
まず、Spare Inputパラメータを追加します。
ここではGrid(SOP)にSpare Inputを追加します。
パラメータ右上にあるギアアイコンをクリックし、メニューから”Add Spare Input”を選択します。
するとパラメータの下の方に、”Spare Input 0″というパラメータが追加されます。
これが”Spare Input”です。
Spare Inputにはノードのパスを指定して使います。
2:Spare Inputに参照するノードのパスを設定する
Spare Inputに参照したいノードを指定します。
ここではテストジオメトリ(ぶた)のノードを指定します。
ここではドラッグ&ドロップでノードを放り込んで指定しました。
Spare Inputにパスが設定されると、指定されたノードとの間に紫色のラインが繋がれます。
3:エクスプレッションでノードパスにSpare Inputを指定する
Spare Inputはエクスプレッションでのノード参照に使用できます。
ここではSpare Inputを追加した、Grid(SOP)のパラメータCenterのYに次のようなエクスプレッションを記述しました。
bbox(-1, D_YMIN)
結果はこんな感じに、テストジオメトリの下に接する位置にグリッドが移動します。
bbox()関数の一つ目の引数に、ここでは-1と記述してあります。
この-1が、先ほど作成したパラメータ”Spare Input0″を指しています。
なのでこのエクスプレッション“bbox(-1, D_YMIN)”は下のエクスプレッションと同義と言えます。
bbox("/obj/geo1/testgeometry_pighead1", D_YMIN)
(エクスプレッションbbox()関数は、参照先ノードのBounding box情報を取得する関数です。
bbox関数についての詳細はマニュアル参照)
Spare Inputのメリットとか特徴とか
1:エクスプレッションのパス表記を簡略化できる。
Spare Inputを使うことで、“長ったらしいパスの記述が-1という短い単語に置き換えられる”、というのが個人的には魅力を感じるところです。
使用感覚としては、npoints(0)とかって自分自身を指定する際の0とか、Attribute Wrangleの4つの入力を参照する際の数字と同様の感じかと。
2:Spare Inputはたくさんつくれる。
Spare Inputはいくつでも増やすことが出来ます。
増やしたSpare Inputは上から順に0,1,2,3,…..と、名前の末尾にナンバリングがされています。
エクスプレッション側で参照する際には、上から順に-1,-2,-3,-4,….とマイナスの値が対応しています。
つまり、「Spare Input0=-1」、「Spare Input1=-2」という風に。
数字が一致していないのは気持ち悪いですが、仕様なので受け入れます。
パラメータ名にマウスを合わせると出てくるヘルプに、そのSpare Inputを参照する際の番号が書かれています。
3:応用
ノードパスが数字で置き換えられるというのは、思いのほか使い道があるもので、次のような切り替えが簡単に出来ます。
エクスプレッション中にある、Spare Inputの数字を別パラメータで制御することで、複数のSpare Inputを切り替えるSwitchの機能を付けています。
4:事の起こり
Spare Inputはコンパイルブロックを使用する際の、制限事項を緩和するために実装された機能だとか、・・・そうじゃないとか。
コンパイルブロックは、制限事項がたくさんあります。
その中でもよく困るのが、「名前によるジオメトリの参照の不可」と「ノードの直接入力の不可」です。
「名前によるジオメトリの参照の不可」は例えば、npoints(“/obj/sphere1”)のように、ノードパスを指定しジオメトリ情報を取得するヤツです。
「ノードの直接入力の不可」は例えば、npoints(0)って書いて一番目の入力からジオメトリ情報を取得するヤツです。
これを封じられたら、エクスプレッションでのノードの参照はほぼ不可能と言っても過言ではないかと。
このままでは出来ないことが多すぎるってんで、対策として用意されたのが”Spare Input”だとか、・・・そうでないとか。
Spare Inputを使うことで、無事、他のノードからジオメトリ情報を読み込め、それをエクスプレッションでも利用できるようになったと。
めでたしめでたし。
斯様に、エクスプレッションを使わずにノード参照するために、追加されたSpare Inputですが、コンパイルブロック以外で使っても何の問題もないので、私は時々使っています。
パスの記述を簡略できるってのは、結構ありがたいです。
(※コンパイルブロック内では別にすべての参照エクスプレッションが使えないわけではないです。チャンネル参照とか使えます。例:ch(“../sphere1/tx”) )
以上!
間違い不足等ありましたら、ご指摘を!
「参考」
http://www.sidefx.com/docs/houdini/network/spare.html
Houdini16.5.405
コメント