Houdini アドベントカレンダー2016 19日目の記事です。
内容は掲題の通りですので……
この時点で「あー、ハイハイ」という方はそっ閉じしていただいたり、
他にもっといい方法知ってたらこっそり教えていただけたりすると嬉しいです。
NodeTypeという当て推量
houモジュールの中を見てみようかなーと思います。
dirで返ってくるリストのうち、「NodeType」が含まれていればそれっぽいような気がするので、
そのように調べてみます。
for i in dir(hou):
if 'NodeType' in i:
print( i )
すると
結構返ってきました。
前半のとか、_swigregisterとかは違いそうです。
「NodeType」と「NodeTypeCategory」がいるのが興味深いですね。
後者の方がよりそれっぽい気がします。
inspect.getmembers
今度は、inspectモジュールのgetmembersを使って見てみます。
import inspect
for i in inspect.getmembers(hou):
if 'NodeType' in i[0]:
print i
NodeTypeCategory系は、軒並み built-in function なようです。
これらの関数は、「NodeTypeCategory」型を返してくれます。
type( hou.sopNodeTypeCategory() )
<class 'hou.NodeTypeCategory'>
NodeTypeCategory
NodeTypeCategory型で、とりあえず名前(name)でも見ようかなと n をタイプしたら、ついでに「nodeTypes」というのもサジェストされました。
sopCategory.name()
'Sop'
sopCategory.nodeTypes()
nameの方は想像通りの結果ですが、
ついでに見つけたnodeTypesの方はこういう感じになりました!
ちょっとギョッとしましたが、これで各ノードカテゴリ内のノードをチェックできそうです。
nodeTypesの中身をカウント
import inspect
for i in inspect.getmembers(hou):
if 'NodeType' in i[0]:
if inspect.isbuiltin(i[1]):
try:
nodetypecategory= i[1]()
except:
continue
nts = nodetypecategory.nodeTypes()
print( nodetypecategory.name(),len( nts ) )
途中のtry-exceptは、swigregisterの人たちがエラーを起こすために設けたものです。
下から2行目で先ほどのnodeTypesの結果である辞書を受け取り、カテゴリ名と共にその辞書の長さをプリントしてみました。
結果……
〜〜Net系はそれぞれ1ノードしかないのはわかるんですが、
SOPとかDOPとかVOPとかそんなに多いものなんですか??? そうですか。
一応結果を貼っておきます。H15.5.632です。
('ChopNet', 1)
('Chop', 103)
('CopNet', 1)
('Cop2', 145)
('Dop', 435)
('Object', 146)
('Particle', 1)
('Pop', 68)
('Driver', 42)
('Shop', 205)
('Sop', 430)
('VopNet', 18)
('Vop', 816)
nodeTypesの中身をカウント(特にCHOP)
比較的数えやすそうなCHOPを比べてみることにしました。
スクリプトの結果が上記のように「103」。
chopNodes = hou.chopNodeTypeCategory().nodeTypes()
sorted( chopNodes.keys() )
Houdini UI上だと……
4列、25行。掛け算くらいできます
「for
」と「popnet
」と「vopchoptype
」の3ノードが、UI上では見当たりません。
でも、H12時点のオンラインドキュメントを見てみると、for
CHOPはありますので、
http://sidefx.jp/doc/nodes/chop/for.html
これらは、過去のシーンデータとの互換性を保つためとかで残してあるものなのだろうなと推察できます。
VOPがすごい量になってるのもそうアレなのでしょうか。
ではスクリプトでそのノードだけフィルタリングするには?
といったあたりは次回の宿題になりそうです。
まとめ
サジェストに助けられました。
便利!!
次は yone80@github さんの「四角ポリゴンに合わせて変形」です。