pky's creativelog

UE4を中心にデジタル創作のメモログです

pky's creativelog

Substance Designer Scripts事始め

気づけば2年振りのブログ更新です。

年末はSDノード本2の作成に追われていましたが、やっと完成してリリース出来ました。

また新しい事にチャレンジする時間が出来ましたので、SDスクリプトを試してみています。以前にも試したのですが、すっかり忘れてしまったので、サンプルから見ていました。

ユーザーインターフェースのサンプルは以下のマニュアルにあります。

https://docs.substance3d.com/sddoc/creating-user-interface-elements-172824940.html

SD Scriptでは、ユーザーインターフェースはPyside2を利用することになっています。
MayaやHoudiniユーザーには有難いですね。

ひとまずは、このサンプルを Windows>Python Editorに貼り付けて実行ボタンを押すとサンプルスクリプトを試すことが出来ます。

f:id:pkyblog:20191230005505p:plain

以下は、Creating Dialogsというサンプルの実行結果です。フローティングウィンドウが表示されます。

f:id:pkyblog:20191230005604p:plain

Creating Panelsというサンプルでは、SD本体のウィンドウにドッキング可能なパネルを作成することが出来ます。ただ、パネルにすると、SDが起動する度にパネルが表示されてしまう為、使用頻度が高いものだけに使うほうがよさそうです。

Windows>該当パネル を表示オフにしておけば次回起動時には非表示のままSD起動してくれるようです。

f:id:pkyblog:20191230011934p:plain

まず簡単なところで、現在のグラフの全ノード名を取得して一覧表示するものを試しました。 

f:id:pkyblog:20191230005803p:plain

グラフの全ノードを取得して名前を表示するのは以下のようになります。

import sd
app = sd.getContext().getSDApplication() uiMgr = app.getQtForPythonUIMgr() # 現在のグラフを取得 graph = uiMgr.getCurrentGraph() # グラフ内のノードを全て取得 nodes = graph.getNodes() for node in nodes: definition = node.getDefinition() nodeId = node.getIdentifier() print("node %s, id = %s" % (definition.getLabel(), nodeId))

実行すると、CONSOLEウィンドウに以下のようにプリントされます。

[MSG][2]node Base Color, id = 1213284337

[MSG][3]node Normal, id = 1213284339

[MSG][4]node Roughness, id = 1213284341

[MSG][5]node Metallic, id = 1213284343

[MSG][6]node Height, id = 1279137030

[MSG][7]node Uniform Color, id = 1359211355

[MSG][8]node Normal, id = 1359211383

[MSG][9]node Uniform Color, id = 1359211391

[MSG][10]node Uniform Color, id = 1359211407

[MSG][11]node Uniform Color, id = 1359211415

[MSG][12]node Uniform Color, id = 1359211719

[MSG][13]node Ambient Occlusion, id = 1359211720

[MSG][14]Run finished.

ノードに関する情報の取得に関しては、以下のサンプルコードで様々な情報を取得できるようです。

https://docs.substance3d.com/sddoc/nodes-and-properties-172825056.html

ライトやカメラを操作したかったのですが、APIを見る限りは残念ながらまだ無さそうですので、また違うことを試してみたいと思います。