kick the base

Houdiniと、CG技術と、日々のこと。

Houdini: Input/Outputともにコネクトされていないノードを検出するスクリプト

今回は短い記事です。備忘録として。

ほんとにたまになんですが、ノードを繋げたつもりだったのにラインの上に乗ってるだけって状態になることがあります。パッと見きれいに整列されてるのでよほどしっかり見ないと差がわかりません。そこで、入出力ともにどのノードとも繋がっていない離れ小島のノードをチェックし、見つかったらノードの色を赤くするというスクリプトを作りました。

f:id:kickbase:20181121234825p:plain

目次

問題となる状態

本例だと繋げたはずのPopForceのリンクが切れているため、再生するとSphereの表面にパーティクルが発生し、力が加わっていません。試しにPopForceを移動してみると繋がっていなかったことがわかります。

f:id:kickbase:20181121234907g:plain

ツールを使ってみる

シェルフに登録したので使ってみます。使い方は下記のとおりです。

  1. 調査したいノードを選択する(複数可)
  2. スクリプト実行

これだけです。

f:id:kickbase:20181122001254g:plain

コードについて

コードは下記のとおりです。

解説の必要もないと思いますが、一応こんな感じです。

  1. 選択されたノードをhou.selectedNodes()で取得
  2. 上記ノードをひとつづつ評価し、入力数をlen(n.inputs())で、出力数をlen(n.outputs())を取得し、ともにゼロだったらノードの色を赤くします
  3. ノードの選択を解除します(n.setSelected(0)

2のところでノードのシェイプを変化させてもよいですね。コードとしてはn.setUserData("nodeshape", "slash")とかでよさそうです。

hou.selectedNodes()n.inputs()n.outputs()はタプルを返します

追記

管理の関係でノードに色がついちゃうと困るという方は下記コメントアウトを解除するとよいでしょう。

n.setComment("NO I/O connected.")
n.setGenericFlag(hou.nodeFlag.DisplayComment,True)

ノードに「NO I/O connected.」というコメントを付与し、コメント表示フラグをオンにします。*1

まとめ

いかがでしょうか。あまりに単純なコードなんでこっぱずかしい感じもしますが、この問題はハマると意外に時間泥棒になりますのでよかったら使ってみてください。

*1:元からあるコメントは上書きされるので注意