ForEachの使い方
SOKARIS の ForEach ノードは、特定の Prim に対してや、指定の回数分、バリアントセットにたいして その名の通り繰り返しを実行したい場合に使用するノードです。
ノードを作成すると、このように Begin/End ノードが作成されます。 このノードの間に追加されたノードを、End ノードでの指定した数だけ繰り返すようになります。
基本
Prim の数だけ繰り返す
まずは基本として、シンプルなシーンを作ります。
シーンには A B C の 3 つの Prim があります。 この 3 つに対して何かを処理したい場合。
ForEach で指定の数だけ Python で処理を実行します。
ForEach の条件は End ノード側にあります。 指定が必要なのは Iteration Method、これはその名の通り何を対象に繰り返すのか。 今回は Input に接続されたノードの数だけ繰り返します。
Primitives は、IterationMethod で入力された Stage のうち、対象となる Prim を何にするかを指定します。 *の場合は、無条件ですべての Prim に対して繰り返します。
node = hou.pwd()
stage = node.editableStage()
print(hou.contextOption("ITERATIONVALUE"))
print(hou.contextOption("ITERATION"))
Python ノードの中身はこのようにします。 ForEach で繰り返しているときの何回目か、であったり、現在の PrimPath は ContextOption で取得できるので hou.contextdOption を使用すれば Python ノード内で使用できます。
その結果がこちら。 すべてのノードの数だけ Python ノードを実行できました。
文字列分だけ繰り返す
Iteration Method には For Each String in Parameter があるので、Iterate OverStrings を指定することで
strings の数だけ繰り返すような処理を作れます。
書き方は、スペースで区切ることで複数の文字列を指定できます。
スペースが欲しい場合は ダブルクォートにすると、スペースアリの文字列も作ることができます。
Variant
ある Prim の Varinat に対して処理をする場合も、ForEach ノードで指定できます。
サンプルで KitchenSet の Cup を試してみます。
子のアセットは、1つの Prim に対して複数の VarinatSet があります。
ForEach の IterationMethod には、Variant は「Variant」と「Variant Set」と似たようなものが 2 種類あります。
Variant Set というのは、shadingVariant や modelingVariant のような
Prim に指定された VariantSet の数だけ繰り返します。
Variant は、VariantSet 内にある選択肢の数だけ繰り返します。
なので、すべての Variant を繰り返したいのであれば、ForEach をネストさせます。
繰り返し中の現在の値は contextOption に入ります。
ネストする場合は、同じ名前だと上書きされてしまうので、Value Option Name を VARINAT_SET にして、
内側の ForEach は、 For Each Variant in First Input にして、VariantSet を @VARIANT_SET にします。
これで、すべての VariantSet の数だけループで実行できます。