Skip to main content

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 の数だけループで実行できます。