pky's creativelog

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

pky's creativelog

SubstanceDesignerパイプライン構築

Substance Designerのパイプライン構築についてです。

あまりこの辺りの情報は見ませんので簡単にまとめたいと思います。

Substance Designerのパイプラインについてはヘルプは以下に載っています。

Pipeline and Project Configuration

https://docs.substance3d.com/sddoc/pipeline-and-project-configuration-170459150.html


私の制作環境はNAS上にSubstanceやHoudini、Maya、Photoshopなど、様々なDCCツールの環境をSVN管理でまとめており、それをデスクトップPCやノートPC2台へ作業コピーを作成して共有して作業するようにパイプライン構築しています。

 

Substance Designerのコンフィグ周りは、Edit>Preferencesで設定します。

f:id:pkyblog:20200317153056p:plain

SBSCFGファイル

これはSubstance Designer内で1つだけ保持できるコンフィグファイルです。
中身はxmlファイルで、登録した複数のProject Configuration (sbsprj)ファイル群の情報を保持しています。

SBSPRJファイル

こちらもxmlファイルで、プロジェクト毎に応じて複数の設定を持たせることが出来るコンフィグです。

https://docs.substance3d.com/sddoc/project-configuration-files-sbsprj-170459750.html

Preferenceの下記のProject以下の設定、3D Viewで使用するデフォルトのシェーダー設定やHDRファイル、ビューワーの設定などから、ライブラリーパスやPythonスクリプトの場所など様々な設定を持たせることが出来ます。

その他、ライブラリーのフィルタ情報もこちらに持たせることが出来ます。

https://docs.substance3d.com/sddoc/creating-library-filters-for-projects-170459772.html

ライブラリーのフィルタでProjectの項目からsbsprjファイルのラベルを選択することで、そのフィルタ設定をsbsprjファイルに保存し共有することが出来ます。

f:id:pkyblog:20200317153421p:plain

パスの解決 Alias

複数人での作業環境の場合、作業フォルダのパスが変わってしまうことは多々ありますが、Substance DesignerにもAliasと相対パスを使って、パスを解決する仕組みが入っています。AliasはWindows環境変数と同じようなものになります。

私の環境の場合、デスクトップPCとノートPCでそれぞれSVNの作業コピーの場所が違いますので、Aliasを使ってパスを解決しています。

f:id:pkyblog:20200317153859p:plain

リソースライブラリの共有

これがメインと言えるかもしれません。よく使う、サブスタンスグラフ(sbs)、アーカイブ(sbsar)、画像ファイルなどを共有することが出来ます。ライブラリーパスに登録しておけばSpace/Tabメニューからの名前を打てばメニューからリソースを読み込むことが出来ます。

f:id:pkyblog:20200317161818p:plain

また、Exclude patternでファイル名のパターンを入れておくと、ライブラリー登録からファイル単位で除外させることも可能です。

Graph Templateの共有

新規グラフを作成する際のテンプレートもsbsprjファイルを使って共有することが出来ます。グラフ作成時のウィンドウの下部にProjectファイルを指定する場所があるので、そこを選択するとプロジェクト毎のテンプレートを絞り込むことが出来ます。

f:id:pkyblog:20200317154149p:plain

Pythonスクリプトの共有

sbsprjファイルの設定で、PythonタブでPythonスクリプトパスを登録しておくことで、スクリプトの共有をすることも出来ます。

f:id:pkyblog:20200317154549p:plain

また、Scriptingタブでsbsファイルを開いた際やファイル保存時に独自処理をかませるようになっており、バージョン管理系の処理やコンバート処理など独自処理をHookする事も可能です。

f:id:pkyblog:20200317154651p:plain

このスクリプト共有を使って独自スクリプトメニューを追加しています。

f:id:pkyblog:20200317154429p:plain

ご参考になれば幸いです。

SDタコのチュートリアルをやってみた

Levelup DigitalのSubstance Designerチュートリアル
Advanced Shape Creation In Substance Designerを年末年始にやってみました。
https://levelup.digital/

このタコ足を初めて見た際はとてもインパクトがあったのを覚えています。
Blizzard EntertainmentのArtistさんという事です。
こういった海外の方から学ぶ事が手軽に出来るようになって凄い事ですね。
学習リソースは世の中に溢れている時代になっていると感じます。

結構前に購入していましたが、時間が取れず放置してありました。
動画は3時間ほどだったと思いますが、一部バリエーションを作成する部分は省略されているところもあり
そこは自分で作業をするのですが、動画を視聴しつつ停止して作業をしながら再確認、
と進めていると、動画時間の1.5倍から2倍くらいは掛かってしまいました。

f:id:pkyblog:20200115224153p:plain

公開されている静止画までの質感を出すには動画のままやっただけでは出なさそうでした。
SSSも使っているように見えますね。

有料チュートリアルなので細かい所の言及は出来ませんが、

  • タコ足を立体的にTwist回転する仕組み
  • 交差するタコ足のめり込みを調整する方法
  • サブグラフに分ける単位


などの部分がとても参考になりました。
グラフの数は13にもなります。


自分は、チュートリアルをやった際はメモを取りながら進めています。
後で、NAS上の自分用のWordpressに、雑多なメモとして画像と共に簡単にまとめています。

凄い!と思った事。
詰まった所。
知らなかった機能。
不便、面倒と思った所。
自分ならこうするという改善案。
などを忘れないようにメモしています。

他にもLevelup Digitalさんのチュートリアルはやったことがあるのですが、良質なものが多いのでお勧めです。
また違うものもやってみたいと思っています。

SD サンプルスクリプトを実行する その1

Substance Designerに初めから付いているプラグインサンプルを確認してみたので
自分の備忘録としてもまとめておきます。
プラグインサンプルですが、以下のフォルダに入っています。

C:\Program Files\Allegorithmic\Substance Designer\resources\python

以下のスクリプトを実行すると、

C:\Program Files\Allegorithmic\Substance Designer\resources\python\run_test_and_samples.py

これらがすべて実行されます。

ただ、数が多いので2つに分けて実行した方が見やすいので、今回はSamplesフォルダのみを実行して確認してみました。

Python Editorから以下のコードで直接実行しました。

import samples.run_all_samples
samples.run_all_samples.main()

実行すると、以下のsbsファイル群がSubstanceDesigner上で作成されます。
これらのsbsファイルは以下にも保存されます。
C:\Users\(user名)\Documents\Allegorithmic\Substance Designer SDK

f:id:pkyblog:20191230162444p:plain

sample_mdl_graph_template_metallic

MDLを使ってシンプルなマテリアルを組むサンプルのようです。
SDでMDLを扱っている人を見たことがないのですが、使われているのでしょうか?
f:id:pkyblog:20191230163233p:plain

sample_sbs_graph

png画像を読み込んでUniform ColorとBlendするグラフを作るサンプル。
f:id:pkyblog:20191230163716p:plain

sample_sbs_graph_icon

別のsbsファイルからインスタンスノードを作成するサンプルで、Alveolusノードを作ってTilingパラメータを設定しています。
f:id:pkyblog:20191230165817p:plain

sample_sbs_graph_inputs

ノードは無いので一見すると分かりにくいですが、グラフにInput Parameterを作成するサンプル。
f:id:pkyblog:20191230164836p:plain

sample_sbs_graph_instance

sample_sbs_graph_iconと似ていますが、Gradient Mapを作成してグラデーションにキーを打って色を設定しています。
また、一つのノードから分岐してNormalを作る部分など分岐して接続する所など参考になりそうです。
f:id:pkyblog:20191230170343p:plain

sample_sbs_graph_objects

フレームやピン、コメントなどをグラフに追加するサンプル。
f:id:pkyblog:20191230170553p:plain

sample_sbs_parameter_function

作成したノードのパラメータに関数を設定するサンプル。
f:id:pkyblog:20191230170813p:plainf:id:pkyblog:20191230170823p:plain

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を見る限りは残念ながらまだ無さそうですので、また違うことを試してみたいと思います。

 

 

AriToolsランチャーメニュー自動生成

こちらはMaya Python Advent Calendar 2017の23日目の記事です。

qiita.com

こんにちは、アドカレ初参加します。
この記事ではMayaPythonを使って、多くのMaya使いの方々が
お世話になってるであろう(私もお世話になってます)、
CG自習部屋 Mayaの時間 さんのスクリプト群をファイル・フォルダ構成を
スキャンしてランチャーメニューをMayaに自動追加します。

すでにpythonにてツールを作られている方には比較的易しい内容かと思われます。

仕様を決める

ランチャーメニュー作成ツールは外部ファイルで所定の書式を決めて
それに従って作るなど実装方法は色々あるかと思いますが、今回はCG自習部屋さんの新しいスクリプトがリリースされた際に、新しいファイルを所定の場所に配置するだけで
メニューも自動で更新されるように、ファイル・フォルダ構成を
スキャンして自動生成する仕様にしました。

 

f:id:pkyblog:20171202155427p:plain

scriptフォルダ以下にこのようなフォルダ構成でスクリプト群を格納します。

  • フォルダ名をサブメニュー名(カテゴリ名)とする
  • カテゴリフォルダ以下には以下のファイルを配置
    スクリプト(mel) アイコン(png) 注釈テキスト(txt)
    ファイル名はすべてmelツール名と同じ
    ※アイコン、注釈の追加はツールにより任意とする

    f:id:pkyblog:20171202160755p:plain

  • スクリプトファイル毎に実行メニューを作成する

 実装

gistb9ee4e691438d733e7ac2de130ce7ec6

最初にフォルダ・ファイルをスキャンして
カテゴリ名をキーとして各スクリプトパスを格納した辞書を作成。
アルファベット順に表示させる為、標準の辞書ではなく、
collections.OrderedDictを使用しています。

scriptのロード

melの為、サブフォルダ格納になるとscriptパスが通ってない為、
sourceコマンドでロードしておく必要があります。
以下のように相対パスで書けば読み込めます。

ただし、一気にsourceをすることになるので、ツール側のグローバル変数名や関数名被りがあると危ないことにはなります。

source "AriTools/Modeling/AriMirror.mel";

menuItemの登録

ツール側がmelの場合、cmdsでmenuItemを作ってしまうと
実行メニューからシェルフへの登録時のコードがPythonObjectとなってしまうために
melコマンドのほうでmenuItemを登録します。

f:id:pkyblog:20171202165202p:plain

これでシェルフへの登録も楽ちんに。

アイコン・注釈

アイコン、注釈用のテキストがあれば登録します。
注釈用のテキストは1行目に入ってるテキストのみを読み取って利用します。
menuItemのAnnotationとして設定します。

Maya画面左下にメニューを選択した際にツール内容の注釈が表示されます。

f:id:pkyblog:20171202165032p:plain

また、Annotationを設定しておくとシェルフに登録した際も
注釈がポップアップされます。

f:id:pkyblog:20171202195752p:plain

Annotationは気づきにくいのでメニュー名に読み取った注釈を足す方法もあります。

ただし、メニューのウィンドウが長くなるので
この辺は好みかと思います。

 f:id:pkyblog:20171202165244p:plain

popupMenu版

Maya本体へのメニュー登録ではなく、ビューポート上での
popup menu方式にすることもできます。

cmds.popupMenu(menuName, ctl=True, button=2, markingMenu=True, p="viewPanes", allowOptionBoxes=1)

 cmds.menuをこちらに切り替えることで、Ctrl+マウス中クリックにて
メニューがポップアップされます。

f:id:pkyblog:20171219000316p:plain

 usersetup.pyへの登録

Maya起動時にメニューを自動登録するように、usersetup.pyで実行させます。
色んなツールを導入されている方は
すでにusersetup.pyが存在しているかもしれません。
その場合はそちらに組み込む必要があります。
サンプルのusersetup.pyもアップしていますので参考にしてください。

github.com

応用編1 ダウンロード&インストーラ

CG自習さんから新たなツールやバージョンアップがあった際に
ツールのzipへのurlをコピペして、プルダウンメニューから各カテゴリの
フォルダを選択してダウンロード&zip解凍して、メニューを再作成する
ようなツールを作れば、Maya再起動することなく
自動インストール&メニュー更新もできそうです。

import os, urllib, zipfile

url = 'http://file.blog.fc2.com/vectrix/mel/AriAnimationCopy.zip'

fileName = os.path.basename(url)

urllib.urlretrieve(url, fileName)

with zipfile.ZipFile(filename, 'r') as myzip:
	myzip.extractall()

これでダウンロード、解凍することができます。

応用編2 pythonツールにも対応する

今はmelにしか対応していませんが、自作のpythonツールにも対応してみます。

f:id:pkyblog:20171216145812p:plain

フォルダ構成は特に変更ありませんが、
各カテゴリフォルダには__init__.pyを配置しておきます。
また各スクリプトは以下のルールに合わせておきます。

  • Pythonの実行関数はmainとする
  • melの実行関数はmelファイル名と同名

実装

変わっている部分はフォルダ・ファイルのスキャン部分で
.mel .pyを含めて取得しています。
またmelかpyかでメニューへの登録で処理を分けました。

menuItemの登録

ツールがpythonの場合、こちらもシェルフへの登録を考慮して
melからpythonを実行する形としてます。

おわりに

いかがでしたでしょうか。
AdventCalendar記事を書かれているような猛者の方々には
少々物足らない内容だったかもしれませんが、
何か参考になれば幸いです。

Pysideポップアップメニュー版も作りたかったのですが
重複起動バグがあるのでまた機会があれば 

f:id:pkyblog:20171222003834g:plain

 

AffinityPhotoとPhotoshopの比較1

まだまだ全然使いきれてませんが、Photoshopとの違いを使いながらメモしておこうと思います。

画像のサイズ変更

  • 画像のサイズ変更は 【ドキュメント】メニュー>ドキュメントのサイズを変更

画像の保存

  • 【ファイル】メニュー>名前を付けて保存 だと .afphoto形式でしか保存できないので、それ以外のフォーマットは【ファイル】>エクスポート

レイヤーのサイズ変更

f:id:pkyblog:20200820055632p:plain

レイヤーのサイズ変更は、移動ツール(Vキー)を選ぶと上のようなバウンディングボックスが出てきて、
移動以外にスケール・回転も出来る。回転は一番上のピンで行う。Shift押しながらだと15度ずつスナップ回転。

f:id:pkyblog:20200820055816p:plain

変換ウィンドウで数値入力での指定も可能。 回転の中心となるピボットは数値入力か、左にあるアイコンでバウンディングボックスの最大、最小、中間点は指定可能。

レイヤーの左右、上下反転

【配置】メニュー>左右反転 または 上下反転

f:id:pkyblog:20200820060150p:plain

【レイヤ】メニュー>反転 は色調の反転。要注意。少しわかりにくい。

塗りつぶし

f:id:pkyblog:20200820060346p:plain

ショートカットは Shift + F5 。Photoshopと違う。 ウィンドウが出てきて塗りつぶす色を選択できるが、 パターンなどは無し。(別機能であるのかまだ不明)

サンプリングされたカラーを選択

Photoshopの色域選択と似た機能です。 指定した色と許容量を設定して、色域で選択範囲を作成できます。

選択>サンプリングされたカラーを選択

f:id:pkyblog:20200820060745p:plain

そのほか、選択範囲はカラー範囲(赤、青、黄)、 色調範囲(中間色、シャドウ、ハイライト)、アルファ範囲など要素毎に選択できる機能もあります。

Affinity Photoのショートカット一覧

Photoshopキラーと言われている?Affinity Photoを購入しました。 キャンペーンで$39.9でお買い得

UIも日本語になっていてしっかり作られている印象です。

PSDファイルもレイヤー毎、読み込みできます。 ちなみにPSDだと300MB超えてたものを読み込んで、 そのままafphoto形式で保存すると130MB程度でした。

以下はショートカットキーのメモです。随時更新します。 (Photoshopと違う部分は注釈つき)

選択

  • すべて選択 Ctrl + A
  • 選択解除 Ctrl + D
  • 選択レイヤーの範囲をすべて選択 Ctrl押しながらレイヤーのサムネイルをクリック

編集

  • 移動ツール V (拡大縮小・回転も出来る)
    • Shift押しながらだと軸固定なのはPhotoshopと一緒
    • カーソルキーでの1ピクセル単位の移動も同様
    • Alt押しながらレイヤー移動すると複製
    • Alt押しながらスケールだと比率固定
  • レイヤーの複製 Shift + J

表示系

  • ドキュメントの表示パン H
  • ズームツール 
    • ズームイン、ズームアウト Ctrl + [+,-]
    • Ctrl + マウス中スクロールでのズームイン、ズームアウトも可
  • 選択レイヤーのみ表示 Alt + レイヤーのアイコンをクリック 表示をもとに戻すには違うレイヤーのアイコンをクリック

ペイント

  • ブラシ B
  • ブラシのサイズ拡大縮小 [, ]
  • 色選択ツール I
  • 塗りつぶし Shift + F5  (Alt + Delete, Alt + BackSpaceは無し)