Substanceのインディー版を去年のブラックフライデーか何かで購入しました。
インディーライセンスではSubstance Automation Toolkitも使えるので試してみました!
Substance Automation Toolkitって?
Pythonを使ってノード作ったり、もろもろ自動化できます!(ざっくり)
詳しくは、ボンデジさんのページがわかりやすいです!
Substance Automation Tool kitとは – Born Digital サポート
インストール方法
こちらもボンデジさんのサポートページが一番わかりやすかったです。
セットアップとはじめに – Born Digital サポート
サンプルコード
以下はUniform Colorノードを2つ作り、
Outputノードと接続しSBSファイルとして保存するシンプルなコードを作ってみました。
※ Pysbs-2020.2.2を利用しています。
# coding: utf-8
import os
from pysbs import context
from pysbs import sbsenum
from pysbs import sbsgenerator
def createSBSGraph(aDestFileAbsPath):
aContext = context.Context()
startPos = [48, 48, 0]
xOffset = [192, 0, 0]
yOffset = [0, 192, 0]
try:
# ファイルと"SimpleMaterial"グラフをを作成する
sbsDoc = sbsgenerator.createSBSDocument(
aContext,
aFileAbsPath = aDestFileAbsPath,
aGraphIdentifier = 'SimpleMaterial'
)
# SimpleMaterialグラフを取得する
aGraph = sbsDoc.getSBSGraph(aGraphIdentifier = 'SimpleMaterial')
# BaseColor用のUniformカラーノードを作成する
baseColor = aGraph.createCompFilterNode(
aFilter = sbsenum.FilterEnum.UNIFORM,
aParameters = {sbsenum.CompNodeParamEnum.OUTPUT_COLOR: [1, 0, 0, 1]},
aGUIPos = startPos
)
# Metallic用のUniformカラーノードを作成する
metallic = aGraph.createCompFilterNode(
aFilter = sbsenum.FilterEnum.UNIFORM,
aParameters = {
sbsenum.CompNodeParamEnum.COLOR_MODE: sbsenum.ColorModeEnum.GRAYSCALE,
sbsenum.CompNodeParamEnum.OUTPUT_COLOR: 0.6
},
aGUIPos = baseColor.getOffsetPosition(yOffset)
)
# BaseColorのアウトプットノードを作成する
outBaseColor = aGraph.createOutputNode(
aIdentifier = 'BaseColor',
aGUIPos = baseColor.getOffsetPosition(xOffset),
aUsages = {
sbsenum.UsageEnum.BASECOLOR: {
sbsenum.UsageDataEnum.COMPONENTS:sbsenum.ComponentsEnum.RGBA
}
}
)
# Metallicのアウトプットノードを作成する
outMetallic = aGraph.createOutputNode(
aIdentifier = 'Metallic',
aGUIPos = metallic.getOffsetPosition(xOffset),
aUsages = {
sbsenum.UsageEnum.METALLIC: {
sbsenum.UsageDataEnum.COMPONENTS:sbsenum.ComponentsEnum.RGBA
}
}
)
# Uniform ColorノードとOutputノードを接続する
aGraph.connectNodes(aLeftNode = baseColor, aRightNode = outBaseColor)
aGraph.connectNodes(aLeftNode = metallic, aRightNode = outMetallic)
# sbsファイルに書き込む
sbsDoc.writeDoc()
return True
except BaseException as error:
raise error
def main():
destFileAbsPath = os.path.join(os.path.dirname(__file__), 'sample/resultDemoHelloWorld.sbs')
createSBSGraph(destFileAbsPath)
if __name__ == "__main__":
main()
感想
うーん、便利かもしれませんが…使うかは微妙です。
バリエーションを複数出力したい時は便利かもしれません。
例えば、水玉模様の色違いを1000枚自動出力する時とか。
色違いで素材集を作る時とか便利かもしれませんね。
ただ、実戦にならないと使う機会はないと感じました。
どのような状況下で費用対効果が高くなるかは今後の経験次第かもしれません。
コメント