Substance DesignerのPython Editorについて

新バージョンのSubstance DesignerにはPython Editorが搭載されているというのは前にも書きました。
これによっていろいろできるんじゃないか?と思って調べてみたことを今回は書きます。

まあ、ぶっちゃけてしまうと

今のところ使えねぇ!

です。

Python Editor

Substance DesignerのPython Editorは、メニューの[Window]→[Python Editor]から起動することが出来ます。
MayaのScriptウィンドウのような画面が出てくるでしょう。
Mayaと違うのは、上が編集画面、下がコンソール画面ということでしょうか。

ドキュメント

Python Editorの基本的な使い方、プラグインの作成方法はこちらにあります。

Python Editor - Substance Designer - Allegorithmic Documentation

また、APIのドキュメントはインストールフォルダ内にあります。
Python Editorウィンドウの[Help]→[Python API Documentation]をクリックすると開けます。

モジュール

Substance Designer特有のモジュールは sd です。
import sd でインポートできます。
あとはAPIドキュメントと先のSDのドキュメントを読めばとりあえずの機能実装はできるでしょう。

なお、Substance Automation Toolkitで使用できるPythonモジュールは pysbs です。
SDのモジュールとは別物ですね。
この時点で嫌な予感がしませんか?

プラグイン作成方法についてドキュメントを読む

最初はPython Editorの説明、操作方法等です。
How Toからプラグインの作成方法なので、そちらを見てみましょう。

Pythonプラグインの置き場所を設定したらメニューの [File]→[New Plugin]を選択してプラグイン作成ウィザードを立ち上げましょう。
プラグインの名前を決めて保存フォルダなんかも決定したらOKを押すと自動的に基本コードが生成されます。
しかもこの段階でプラグインとして登録されます。
メニューの[Scripts]→[作成したプラグイン名]で実行することが可能です。

APIドキュメントを読む

何ができるか知りたい場合、まずAPIドキュメントに目を通すのがいいでしょう。
作成したプラグインコードには run() 関数が存在し、ここに自前のコードを入力していくことになります。
ここの引数で aContext とありますが、これは sd.context 型です。

この型にはgetter以外の関数は存在しません。
ここで getSDApplication() 命令を実行し、sd.api.sdapplication を取得ます。
そして、getLocationContext()で sd.api.sdlocationcontext を取得すれば、ここから現在編集中のグラフや、選択しているノードの配列を取得することが出来ます。

さて、ここから何をやりましょうか?
というか、何ができるのでしょうか?
APIドキュメントに目を通してみましょう。

…getterがほとんど、設定したり作成したりはほぼ出来ない。
sd.tools.exportには指定したグラフの出力を行う命令がついていますが、出力するグラフと出力ディレクトリくらいしか指定できません。
他になにかないのか!と探しても特に見つからないでしょう。
まあ、つまり、そういうことなんです。

pysbsは使えない?

基本、使えません。
普通にpysbsをpipでインストールした場合、インストール先はSDとは別のPythonになるはずです。
SDにはインストールフォルダにPythonが存在するので、こちらで使えるように手動でインストールすればあるいは使えるかもしれません。

ただ、使えたとしても pysbs でグラフを作成→ファイルで保存→sdモジュールで読み込み、が関の山です。
残念ながら、sdモジュールのコンテキストやグラフに対して使用することは出来ません。

まとめ

今回のバージョンで追加された、ノードを整列する機能は、実はこのPythonプラグインとして作られていたりします。
他にもサンプルがいくつか存在してもいます。
が、現在はそれらのサンプルでできることくらいしか出来ないため、すぐになにか効率よくできる、というわけではないようです。
実はドキュメントのバージョンが古いだけでもっといろんな事ができる、という可能性を否定もしませんが。

もし、ドキュメント以上の機能が見つけた方がいましたら教えていただけるとありがたいです。