Houdini 20.0 マテリアル

VOPでのループと条件文

VOPネットワークでノードのループと条件ブロックを作成する方法。

On this page
Since 15.0

概要

Houdiniは、あるノード/関数の出力を次の入力へ送りながら、VOPネットワークをVEXプログラムにコンパイルします。 ブロックVOPにより、ノードのチェーンをループ(for, while, for…each, do…until)させたり、一定の条件(if, break if)でのみネットワーク内へ入れたりすることができます。

“if”がない場合、ネットワークの1つの分岐の結果が、一定の条件がtrueの時にのみ適用されるように、ネットワークを構築することができます。 例えば、ポイント値を平均することによりブラーを計算するが、Switch VOPを使用して、例えば、重心から一定の距離にあるポイントだけにその結果を適用します。 問題は、生成されたVEXがブラーを 常に 計算し、 それから その結果を使用するかどうかを決定することです。 “if”ブロックにより、全体の計算を条件文にすることができます。これにより、特に内部ループの場合、複雑なオペレーションの速度を大幅に上げることができます。

If block

  1. VOPネットワークで、⇥ Tabメニューを開き、 If block を選択します。

    Houdiniは、Block Begin IfBlock Endをペアで作成します。 これらのノード間に接続したすべてのものが、条件付で実行されます。

  2. 値を開始ノードの“condition”入力内へ接続します。この値がtrueの場合(0ではない場合)のみ、ブロックが実行されます。

繰り返し

  1. VOPネットワークで、⇥ Tabメニューを開き、 For loop を選択します。

    Houdiniは、Block Begin ForBlock Endをペアで作成します。これらのノード間に接続したものは、すべて繰り返されます。

  2. 繰り返しの数を設定するには、開始ノードで“length”入力を接続します。

    • 0以外の指数から開始するには、“index”入力を接続することもできます。

    • lengthとindexは、ブロック開始ノードで出力としても使用できるため、ブロック内部のノードへの入力として使用することができます。

  3. 開始および終了ノード間にループさせたいノードを接続し、必要なループ変数をセットアップします。

  4. ブロック終了ノードの出力から他のネットワークへ接続して、ループの最終結果を使用します。

配列内の項目のループ

  1. VOPネットワークで、⇥ Tabメニューを開き、 For-each loop を選択します。

    Houdiniは、Block Begin ForBlock Endをペアで作成します。 これらのノード間に接続したものは、すべて配列の各メンバーに対して実行されます。

  2. 配列値を開始ノードの最初の入力内へ接続します。

    • 0以外の指数から開始するには、“index”入力を接続することもできます。

    • arrayとindexは、ブロック開始ノードで出力としても使用できるため、ブロック内部のノードへの入力として使用することができます。

    • “element”出力は、各反復で配列内の“current”項目になります。

  3. 開始および終了ノード間にループさせたいノードを接続し、必要なループ変数をセットアップします。

ループから結果を取得するには、ループ変数をセットアップして、そのループ変数の最終値を結果として使用してください。

ループ変数

ブロック内でノードの中に値を接続することができますが、その値は各反復で常に同じになります。 ループの反復にわたって変化する値が必要な場合は、ブロックノードをセットアップする必要があります。

ループの反復間で 変化しない 値に関しては、ループの外側にある他のノードから(例えば、Globalsノードから)接続することができます。

ループの反復にわたって 変化してほしい各変数に関しては 、開始および終了ノードで行をセットアップする必要があります:

  1. その初期値をブロック開始ノードの“next”入力内へ接続します。

  2. 開始ノードのパラメータで、 Output n name フィールドにその変数に対する名前を入力します。

  3. 対応する出力を使用して、ブロック内での反復ネットワークのノードを接続します。次に、その結果をブロック終了ノードの“next”入力内へ接続します。

  4. 終了ノードのパラメータで、 Output n name フィールドに同じ名前を入力して、開始ノードでの同じ変数と一致させます。

Houdiniは、終了ノードの出力から開始ノードの入力へ戻る点線を描き、その値が各反復でループ内へ返されることを示します。

Note

変化する変数に名前を割り当てない場合、Houdiniは、開始および終了ノードの行を順番に一致させます(つまり、開始ノードの1番目の変数行が終了ノードの1番目の変数行に一致することになります)。 これは便利なこともありますが、1つのノードを変更して、他のノードを変更しない場合、エラーが起こる可能性があります。

条件に基づいたループ

  • Do While ブロックには、終了ノードに“condition”入力があります。ループは常に1回以上実行され、条件がtrueである(0でない)限り、繰り返されます。

  • For Loop UntilFor Each Loop Until のブロックは、 For LoopFor Each Loop ブロックと同じですが、“condition”入力を持っている点が異なります。ループは常に1回実行され、条件がtrueである(0でない)場合、 停止 します。

  • While Loop ブロックには、開始ノードと終了ノードの両方に“condition”入力があります。

    • 開始ノードの条件は、ブロックがループを開始する前にチェックされます。ループは、条件がtrueである(0でない)場合のみ実行されます。

    • 各反復の後、 終了 ノードの条件がチェックされ、条件がtrueの場合のみループが繰り返されます。

    このループでは、終了条件は、変更の可能性がある値を持ったループ変数です。ブロック内からその値を取得するようにしてください。 例えば、この値は反復にわたって変化しないため、(ブロックの外側の)開始条件と同じノードから接続することはできません。

Tips

  • ループが実行されない場合(例えば、反復数が0、または“while”条件が開始時にfalseの場合)、終了ノードのループ変数出力は、開始ノードの該当する入力からそれらの値を通過させます。

  • ループでノードを取り囲んでいるブロブ(枠)のカラーは、Block BeginとBlock Endのノードのカラーから生成されます。これらのノード内の1つのノードのカラーを変更して、ブロブ(枠)のカラーを変更します。

  • ブロブ(枠)を非表示/表示するには、Block Beginノードを右クリックして、 Flags ▸ Descriptive Parameter を選択します。

ノード

See also

マテリアル

マテリアルの使い方

テクスチャとUV

マテリアルの作成

導師レベル

他のレンダラー