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で設定します。
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ファイルに保存し共有することが出来ます。
パスの解決 Alias
複数人での作業環境の場合、作業フォルダのパスが変わってしまうことは多々ありますが、Substance DesignerにもAliasと相対パスを使って、パスを解決する仕組みが入っています。AliasはWindowsの環境変数と同じようなものになります。
私の環境の場合、デスクトップPCとノートPCでそれぞれSVNの作業コピーの場所が違いますので、Aliasを使ってパスを解決しています。
リソースライブラリの共有
これがメインと言えるかもしれません。よく使う、サブスタンスグラフ(sbs)、アーカイブ(sbsar)、画像ファイルなどを共有することが出来ます。ライブラリーパスに登録しておけばSpace/Tabメニューからの名前を打てばメニューからリソースを読み込むことが出来ます。
また、Exclude patternでファイル名のパターンを入れておくと、ライブラリー登録からファイル単位で除外させることも可能です。
Graph Templateの共有
新規グラフを作成する際のテンプレートもsbsprjファイルを使って共有することが出来ます。グラフ作成時のウィンドウの下部にProjectファイルを指定する場所があるので、そこを選択するとプロジェクト毎のテンプレートを絞り込むことが出来ます。
Pythonスクリプトの共有
sbsprjファイルの設定で、PythonタブでPythonスクリプトパスを登録しておくことで、スクリプトの共有をすることも出来ます。
また、Scriptingタブでsbsファイルを開いた際やファイル保存時に独自処理をかませるようになっており、バージョン管理系の処理やコンバート処理など独自処理をHookする事も可能です。
このスクリプト共有を使って独自スクリプトメニューを追加しています。
ご参考になれば幸いです。
SDタコのチュートリアルをやってみた
Levelup DigitalのSubstance Designerチュートリアル、
Advanced Shape Creation In Substance Designerを年末年始にやってみました。
https://levelup.digital/
このタコ足を初めて見た際はとてもインパクトがあったのを覚えています。
Blizzard EntertainmentのArtistさんという事です。
こういった海外の方から学ぶ事が手軽に出来るようになって凄い事ですね。
学習リソースは世の中に溢れている時代になっていると感じます。
結構前に購入していましたが、時間が取れず放置してありました。
動画は3時間ほどだったと思いますが、一部バリエーションを作成する部分は省略されているところもあり
そこは自分で作業をするのですが、動画を視聴しつつ停止して作業をしながら再確認、
と進めていると、動画時間の1.5倍から2倍くらいは掛かってしまいました。
公開されている静止画までの質感を出すには動画のままやっただけでは出なさそうでした。
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
sample_mdl_graph_template_metallic
MDLを使ってシンプルなマテリアルを組むサンプルのようです。
SDでMDLを扱っている人を見たことがないのですが、使われているのでしょうか?
sample_sbs_graph
png画像を読み込んでUniform ColorとBlendするグラフを作るサンプル。
sample_sbs_graph_icon
別のsbsファイルからインスタンスノードを作成するサンプルで、Alveolusノードを作ってTilingパラメータを設定しています。
sample_sbs_graph_inputs
ノードは無いので一見すると分かりにくいですが、グラフにInput Parameterを作成するサンプル。
sample_sbs_graph_instance
sample_sbs_graph_iconと似ていますが、Gradient Mapを作成してグラデーションにキーを打って色を設定しています。
また、一つのノードから分岐してNormalを作る部分など分岐して接続する所など参考になりそうです。
sample_sbs_graph_objects
フレームやピン、コメントなどをグラフに追加するサンプル。
sample_sbs_parameter_function
作成したノードのパラメータに関数を設定するサンプル。
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に貼り付けて実行ボタンを押すとサンプルスクリプトを試すことが出来ます。
以下は、Creating Dialogsというサンプルの実行結果です。フローティングウィンドウが表示されます。
Creating Panelsというサンプルでは、SD本体のウィンドウにドッキング可能なパネルを作成することが出来ます。ただ、パネルにすると、SDが起動する度にパネルが表示されてしまう為、使用頻度が高いものだけに使うほうがよさそうです。
Windows>該当パネル を表示オフにしておけば次回起動時には非表示のままSD起動してくれるようです。
まず簡単なところで、現在のグラフの全ノード名を取得して一覧表示するものを試しました。
グラフの全ノードを取得して名前を表示するのは以下のようになります。
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日目の記事です。
こんにちは、アドカレ初参加します。
この記事ではMayaPythonを使って、多くのMaya使いの方々が
お世話になってるであろう(私もお世話になってます)、
CG自習部屋 Mayaの時間 さんのスクリプト群をファイル・フォルダ構成を
スキャンしてランチャーメニューをMayaに自動追加します。
すでにpythonにてツールを作られている方には比較的易しい内容かと思われます。
仕様を決める
ランチャーメニュー作成ツールは外部ファイルで所定の書式を決めて
それに従って作るなど実装方法は色々あるかと思いますが、今回はCG自習部屋さんの新しいスクリプトがリリースされた際に、新しいファイルを所定の場所に配置するだけで
メニューも自動で更新されるように、ファイル・フォルダ構成を
スキャンして自動生成する仕様にしました。
scriptフォルダ以下にこのようなフォルダ構成でスクリプト群を格納します。
- フォルダ名をサブメニュー名(カテゴリ名)とする
- カテゴリフォルダ以下には以下のファイルを配置
スクリプト(mel) アイコン(png) 注釈テキスト(txt)
ファイル名はすべてmelツール名と同じ
※アイコン、注釈の追加はツールにより任意とする
- スクリプトファイル毎に実行メニューを作成する
実装
gistb9ee4e691438d733e7ac2de130ce7ec6
最初にフォルダ・ファイルをスキャンして
カテゴリ名をキーとして各スクリプトパスを格納した辞書を作成。
アルファベット順に表示させる為、標準の辞書ではなく、
collections.OrderedDictを使用しています。
scriptのロード
melの為、サブフォルダ格納になるとscriptパスが通ってない為、
sourceコマンドでロードしておく必要があります。
以下のように相対パスで書けば読み込めます。
ただし、一気にsourceをすることになるので、ツール側のグローバル変数名や関数名被りがあると危ないことにはなります。
source "AriTools/Modeling/AriMirror.mel";
menuItemの登録
ツール側がmelの場合、cmdsでmenuItemを作ってしまうと
実行メニューからシェルフへの登録時のコードがPythonObjectとなってしまうために
melコマンドのほうでmenuItemを登録します。
これでシェルフへの登録も楽ちんに。
アイコン・注釈
アイコン、注釈用のテキストがあれば登録します。
注釈用のテキストは1行目に入ってるテキストのみを読み取って利用します。
menuItemのAnnotationとして設定します。
Maya画面左下にメニューを選択した際にツール内容の注釈が表示されます。
また、Annotationを設定しておくとシェルフに登録した際も
注釈がポップアップされます。
Annotationは気づきにくいのでメニュー名に読み取った注釈を足す方法もあります。
ただし、メニューのウィンドウが長くなるので
この辺は好みかと思います。
popupMenu版
Maya本体へのメニュー登録ではなく、ビューポート上での
popup menu方式にすることもできます。
cmds.popupMenu(menuName, ctl=True, button=2, markingMenu=True, p="viewPanes", allowOptionBoxes=1)
cmds.menuをこちらに切り替えることで、Ctrl+マウス中クリックにて
メニューがポップアップされます。
usersetup.pyへの登録
Maya起動時にメニューを自動登録するように、usersetup.pyで実行させます。
色んなツールを導入されている方は
すでにusersetup.pyが存在しているかもしれません。
その場合はそちらに組み込む必要があります。
サンプルのusersetup.pyもアップしていますので参考にしてください。
応用編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ツールにも対応してみます。
フォルダ構成は特に変更ありませんが、
各カテゴリフォルダには__init__.pyを配置しておきます。
また各スクリプトは以下のルールに合わせておきます。
- Pythonの実行関数はmainとする
- melの実行関数はmelファイル名と同名
実装
変わっている部分はフォルダ・ファイルのスキャン部分で
.mel .pyを含めて取得しています。
またmelかpyかでメニューへの登録で処理を分けました。
menuItemの登録
ツールがpythonの場合、こちらもシェルフへの登録を考慮して
melからpythonを実行する形としてます。
おわりに
いかがでしたでしょうか。
AdventCalendar記事を書かれているような猛者の方々には
少々物足らない内容だったかもしれませんが、
何か参考になれば幸いです。
Pysideポップアップメニュー版も作りたかったのですが
重複起動バグがあるのでまた機会があれば
AffinityPhotoとPhotoshopの比較1
まだまだ全然使いきれてませんが、Photoshopとの違いを使いながらメモしておこうと思います。
画像のサイズ変更
- 画像のサイズ変更は 【ドキュメント】メニュー>ドキュメントのサイズを変更
画像の保存
- 【ファイル】メニュー>名前を付けて保存 だと .afphoto形式でしか保存できないので、それ以外のフォーマットは【ファイル】>エクスポート
レイヤーのサイズ変更
レイヤーのサイズ変更は、移動ツール(Vキー)を選ぶと上のようなバウンディングボックスが出てきて、
移動以外にスケール・回転も出来る。回転は一番上のピンで行う。Shift押しながらだと15度ずつスナップ回転。
変換ウィンドウで数値入力での指定も可能。 回転の中心となるピボットは数値入力か、左にあるアイコンでバウンディングボックスの最大、最小、中間点は指定可能。
レイヤーの左右、上下反転
【配置】メニュー>左右反転 または 上下反転
【レイヤ】メニュー>反転 は色調の反転。要注意。少しわかりにくい。
塗りつぶし
ショートカットは Shift + F5 。Photoshopと違う。 ウィンドウが出てきて塗りつぶす色を選択できるが、 パターンなどは無し。(別機能であるのかまだ不明)
サンプリングされたカラーを選択
Photoshopの色域選択と似た機能です。 指定した色と許容量を設定して、色域で選択範囲を作成できます。
選択>サンプリングされたカラーを選択
そのほか、選択範囲はカラー範囲(赤、青、黄)、 色調範囲(中間色、シャドウ、ハイライト)、アルファ範囲など要素毎に選択できる機能もあります。
Affinity Photoのショートカット一覧
Photoshopキラーと言われている?Affinity Photoを購入しました。 キャンペーンで$39.9でお買い得
UIも日本語になっていてしっかり作られている印象です。
PSDファイルもレイヤー毎、読み込みできます。 ちなみにPSDだと300MB超えてたものを読み込んで、 そのままafphoto形式で保存すると130MB程度でした。
以下はショートカットキーのメモです。随時更新します。 (Photoshopと違う部分は注釈つき)
選択
- すべて選択 Ctrl + A
- 選択解除 Ctrl + D
- 選択レイヤーの範囲をすべて選択 Ctrl押しながらレイヤーのサムネイルをクリック
編集
- 移動ツール V (拡大縮小・回転も出来る)
- レイヤーの複製 Shift + J
表示系
- ドキュメントの表示パン H
- ズームツール Z
- ズームイン、ズームアウト Ctrl + [+,-]
- Ctrl + マウス中スクロールでのズームイン、ズームアウトも可
- 選択レイヤーのみ表示 Alt + レイヤーのアイコンをクリック 表示をもとに戻すには違うレイヤーのアイコンをクリック
ペイント
- ブラシ B
- ブラシのサイズ拡大縮小 [, ]
- 色選択ツール I
- 塗りつぶし Shift + F5 (Alt + Delete, Alt + BackSpaceは無し)