はじめに
徐々にPDGで出来ることを増やしていこうとしています!
今回は、
Node Pattern : マッチしたノードに基づいてワークアイテムを生成
Wedge : アトリビュート値を色々と変えながらワークアイテムを生成
Python Script : Pythonスクリプトを実行するワークアイテムを生成
上記3つを使ったBoxのランダムな配置をやってみます
OBJレベルノード構成
Boxを何個か作ってMergeし、TOP Networkを作成してください
このBoxのパラメーター CenterにPDGでランダムな値を自動で入れる仕組みを作ります
topnetのノード構成
Node Pattern
Root Node : 今回はパラメータを入れたいboxの親のノードを選択
Node Pattern : boxでそのまま単語を使用すると、名前の部分文字列検索
('Box でノードタイプでパターンマッチ アポストロフィでタイプ検索になるのを初めて知った!)
Wedge
Work Item Order : ここを Group By Wedgeに変更すると、作成したアトリビュートがすべて異なる値になってくれます
Random Samples : ここにチェックをいれると指定した範囲のランダムな値が入るようになります
Python Script
import hou
attrib = work_item["attr"] #Work Item に格納された、Wedgeで作成したattrアトリビュートを取得
node_path = work_item["nodepath"][0] #Work Item に格納されたNode Patternで作成したnodepathアトリビュートを取得
node :hou.SopNode = hou.node(node_path) #nodepathごとのノードを取得
#node.parmTuple("t").set((0,0,0)) #原点に移動
node.parmTuple("t").set((attrib[0],attrib[1],attrib[2])) #ランダムに移動
ここで注意するべきなのは、このときのattribはvector4型だということです
どういうことかというと、入力できるパラメータの枠が4つあります

この4つの値をそのまま3つの値しかないCenterに入れようとするとエラーになります

だからわざわざスライスで3つの成分を明示的に取り出しています
node.parmTuple("t").set((attrib[0],attrib[1],attrib[2]))
まとめ
とにかくやって慣れるしかないので、色々やっていきます
今回は位置を変えたかったので
node.parmTuple("t").set((attrib[0],attrib[1],attrib[2]))
としましたが
書き出しをしたいときは Node Patternで出力するノードを選択して
node.parm("execute").pressButton()
とすればテクスチャでもfbxでも書き出せます。






