篠島です。今回はコンパイルブロックを使う上で、外部ノードを指定する時に使う Spare Input についてです。
サンプルファイルです。
SpareInput.zip
前回は For ループ を使った所で終わりました。今回はこれにコンパイルブロックをつけます。
下の図の様にForループをコンパイルブロックで囲みます。Forループの Block Begin SOP が2つあるので、同様に Block Begin Compile SOP も2つ繋げます。すると、ネットワークビューでは特にエラーも警告も出ていませんが、ビューポートを確認すると、全ての Box に対して同じ分割の Subdivide SOP が適用されてしまっています。なぜでしょうか。
Subdivide のところで detail() を使ってForループのメタデータをパスで指定していました。しかし、コンパイルブロックを使ってしまうと、コンパイルブロック内部からノードをパスで指定して参照することが出来ないという制限があります。
そこで、パラメーターウィンドウのギアアイコンから、Add Spare Input という項目をクリックします。するとパラメーターの一番したにスペアインプットができます。スペアインプットは複数追加する事ができます。
Spare Input の上にマウスを載せると説明がでてきます。Spare Input 0 だとエクスプレッション内部で -1 の様にしてスペアインプットで指定したノードを参照することが出来ます。もし Spare Input 1 が合った場合は -2 で参照します。
Subdivide SOP で使っているエクスプレッションをスペアインプットを使った物に変更します。
スペアインプットを指定すると、ネットワークビューでどのノードがスペアインプットに指定されたかが紫色の矢印で表示されています。
スペアインプットを使うことで、Box がランダムに分割されるようになりました。