Attribute Wrangle(Point Wrangle/Primitive Wrangle/etc...)、使ってますか?Houdinistなら作らない日はないんじゃないかと思うほど使用頻度の高いノードですよね。
そう。始まりはこのツイートでした。
PointWrangle作ろうとしてPointWeld作っちゃってアアアアアアアってなりません?
— めんたいこ (@kickbase) February 18, 2020
僕はよくなります。
ここを起点にさまざまな知見が集まりましたので、感謝と後人のご参考を兼ねてまとめておきます。
目次
pwr
派
3文字ですがPoint WrangleとPrimitive Wrangleまで絞り込めるのはよいですね。会話でも出ましたがAttribute WrangleはPoint WrangleとPrimitive Wrangle、どちらの性質も持っています(というよりそれらはAttribute Wrangleのオプション違い)のでひとつで事足りるのですが、Point WrangleやPrimitive Wrangleを使用するとノード名でRun Overが明示されるのでよりネットワークの意図が伝わりやすくなります。
atw
派
Attribute Wrangleに集約する方法です。左手だけで入力できるというのはメリットですね。またよりタイプが少ないaw
派もおられました。
ホットキー設定派
こちらが今回のお話のメインです。 作り方としてはシェルフにToolを作成し、Hotkeysタブからホットキーを設定します。
シェルフにToolを登録する方法については以前書いた記事をご参考ください。
またノードの作成をホットキーに登録する汎用的な方法はUnlimitedEffectWorks (@ijiVFX)さんがまとめてくださっていましたのでご紹介しておきます。
Houdiniでノードのキーボードショートカットの作り方 #Houdini pic.twitter.com/gdVcnE9BXC
— UnlimitedEffectWorks (@ijiVFX) February 18, 2020
拙作Tools
面白そうなので作ってみました。
01: create_attribute_wrangle.py
シンプルなやつ。
コードは下記のとおりです。
動画をご覧の通り複数ノード選択時の挙動が微妙ですね。その際はまとめてAttribute Wrangleに入力してほしいものです。
02: create_attribute_wrangle_multi.py
01を改良したもの。
コードは下記のとおりです。
Attribute Wrangleの入力上限4つまで勝手に繋いでくれます。またノードの生成位置ですが、選択したノード(群)のポジションを利用し、横方向は平均値を、縦方向は一番下の位置から少し下あたりに置いてます。
上記コードの注意点
ノードを選択していない状態の空振り対策は入っていますが、コンテキストが異なっていてAttribute Wrangleが作れない場所で実行してしまうとエラーが出ます。
回避するためにはコンテキスト判定のコードを入れるか、雑にtry
~except
を挟んで上げても良いでしょう。ちょっと大げさなのとコンテキスト違いでの操作は想定しにくいので入れていませんが、一例をあげると下記のような感じでしょうか。
selNodes = hou.selectedNodes() INPUT_LIMIT = 4 if(selNodes): try: attribWrangle = selNodes[0].parent().createNode("attribwrangle") pos = [] for i, node in enumerate(selNodes): if i < INPUT_LIMIT: attribWrangle.setInput(i, node) pos.append(node.position()) posX = sum([x[0] for x in pos])/len(pos) posY = min([x[1] for x in pos]) attribWrangle.setPosition(hou.Vector2(posX, posY-1)) panel = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor) panel.setCurrentNode(attribWrangle) except: pass
soptoolutils
を利用する
こちらは初めて知ったのですが、非常に便利なモジュールだったのでご紹介しておきます。
短いコードで実装されていますね!そしてコンテキスト違いでの使用時(例えばobjレベル)にもエラーを吐かず気を利かせた挙動をしてくれます。
すばらしい。
soptoolutilsについては大翔士 (@d658t) さんが解説してくださいました。勉強になります!
ちなみにType PropertiesのInteractive > Shelf Tools > Scriptに書かれてるのが、Tabから作成する時に走るスクリプトです。
— 大翔士 (@d658t) February 19, 2020
ここを見るとデフォルトでsoptoolutilsが登録されてるのを確認する事が出来ます!
soptoolutils自体は$HFS/houdini/python2.7libsにあるので、中を見てみると面白いですよ😁 pic.twitter.com/SMn3xPyQT4
まとめ
ツールを作っておいてアレですが、ぼくは基本デフォルト厨なのでatw
派に落ち着きそうですw
しかしHoudiniのシェルフは非常にポータブルなのでツールをガンガン作っても良いですし、思考実験としてこのようなツール・効率化談義は非常に有用かと思います。(soptoolutilsなども今回はじめて教えていただきましたし)
Houdiniは操作速度を競うようなツールではありませんが、日々のストレスが減るのであればもちろん改良すべきです。
Houdini: ホットキーをカスタマイズして快適になった話の記事で設定したCopy parameter
とPaste Rerative References
などはデフォルトでアサインしていただきたいくらい便利です。
みなさんもカスタマイズとメンテナビリティをバランスよく、快適なHoudiniライフを!