PySideのノード描画ライブラリ

最近よく見掛けるようになった気のする、ノードグラフ表示。
どこかにライブラリが転がってないかな…と探していたら、PySideで描画してみたよ。っていうライブラリがあった。
描画させてみた。という感じの機能なので、ツール化しようとするといろいろ足りなくて大変だと思うけど、そのぶん小規模なのでノードを描画をさせる際の参考になりそう。

Python3 & PySide2には対応してないコードなので、そっちの環境で動かすには、まずバージョン差異で動かない部分を修正する必要もあり。

cb109/qtnodes

コードをちょっと手直しして、こんな感じに出してみた。(勉強ついでに、PySide2 & Python3で動くようにしてみたけど、やっぱノード名称のラベル(ノードの型名じゃないやつ)が欲しいですね)

その後ラベル付けたら、こんな感じになった。基本的に構造を表示させる目的のものなので、そういう機能はないんだけど…これで簡単なノードプログラミング環境を作ろうとすると、アトリビュートエディタみたいな値編集機能や、ノードの持つ値や接続を辿って取得する機能も必要ですね。考えるとちょっと楽しくなってきた。

他には、こんなのもあった。

>pyQt4 or pyQt5 or pySide or pySide2で動くというもの。こっちは先のものよりも随分と実用的な感じ。
LeGoffLoic/Nodz

>PySide2ベースのオサレUI
jchanvfx/NodeGraphQT

>Qt5ベース C++記述のもの。そこそこ良さそう。
paceholder/nodeeditor

>D言語で書いて、C++にしたもの。Qt5版と断っているのとそうでないものがあるので、断ってないのはQt4系かな?
QNodesEditor – Qt nodes/ports-based data processing flow editor

>Maya用のノードエディタ。ICE的な感じ?(PySide2専用っぽい)
Qt node editor 1.0.0 for Maya (maya script)
IlgarLunin/PyFlow

>実行ファイルやコードとか見当たらないけど、見た目重視にするとこんな感じなのかな、ちょっと凝り過ぎな気もするけど。
PyQt4 Node Editor

>C++14ベースのノードエディタ。「ブループリントのエディタみたいなやつ」と書かれているimgui系統。使い易さは判らないけど、これもオサレUI。
thedmd/imgui-node-editor

ちなみに、最近のMayaのノードエディタのノードのスタイルはめっちゃオーソドックスな感じ。

Yetiのストランドの置いてきぼりを検出

そういう事例があって、調べた結果のメモ。

 Groomノードはストランドの情報をノード内部に記録していて、ストランドの初期位置などは内部情報なのでそこを基準に検出するには対象meshに対してのストランドの追従計算方法が判らないと厳密に計算出来そうになかった。

 これはリーダーから助言戴いたことなので自分の調べた内容ではないが、Groomノードのバウンディングボックスを調べることで検出できそうなことが判った。
 というのが、一部のストランドが置いてきぼりになるということは、対象を動かすことでバウンディングボックスの大きさが明らかに変動する。
 なので、対象meshを動かす前後のバウンディングボックスの大きさの変化をみれば、結果的に置いてきぼりの有無を検出できる。

 実際にはストランドの位置関係で、追従したとしても必ずしも対象meshを動かす前後のバウンディングボックスが完全には一致しなかったので、「対象meshの移動量に対して変動が少ないものは問題ない」という判別を行う必要があった。

ちなみに

 Groomノードからストランドをカーブに変換するメソッドがあるので、対象mesh移動前・移動後でストランドをカーブに変換した上で両者のカーブについて移動がみられないものがあれば、それは「置いてきぼりになっている」ことになるので、厳密にはその方法が確実に検出できる。
 ただカーブすべてをチェックしないといけないのはコストが掛かる。前述のGroomノード単体のバウンディングボックスで基本的な判定をした上で、変化のあったものに対してのみ必要に応じて厳密なチェックを行うほうが処理的に適切だろう。

 カーブ単位で検出する利点は、問題のカーブがどこに存在するかを知ることが出来る点にある。