あまり知られていませんが、Substance Painter のビューポートでは カスタマイズした glsl シェーダーを動かす事ができます。といっても 制限のあるフラグメントシェーダーだけしか動かせませんが、、ベースカラー・ハイト・メタルネスなどの PBR 系、ユーザー追加チャンネルの画像データ、さらには事前べイク系の AO や Cavity なども簡単にアクセスできたり、いじるのはなかなか楽しいです。
先日はフローマップのシェーダーを書いていたのですが、主要な部分はとりあえずできたものの、Unity のように現在の時間を表す変数を使ってアニメさせる方法がわかりません。調べたところ、現在の時間が渡されるような仕組みは現在 (Ver. 2019.2.0) のところ 残念ながら無いようです。
オフィシャルのフォーラムの投稿に関連投稿がありました。QML を使って作るプラグイン側から強制的にアニメさせる事ができるようです。
https://forum.substance3d.com/index.php/topic,27203.msg109316/highlight,shader+time.html#msg109316
シェーダーの変数をintervalで更新してあげる感じですね。ということで、そちらを参考に、もうちょっと汎用的なプラグインを作りました。
- 複数のシェーダーの速度をまとめてコントロールできる
- FPSも可変にできる
- シェーダーの変数名も可変にできる
といった物です。QML を扱うのは初めてで、UI の余白の取り方などがよくわかりません。が、とりあえずちゃんと動いてはいます。Vimeo https://vimeo.com/360284919 に動作のキャプチャー動画を置きました。Vimeo 埋め込めないのかQiita。いやそもそもYoutubeも埋めこめないんだっけ。。
github にコードはあがっています。
https://github.com/harayoki/SubstancePainterPluginAnimShaderControl
サンプルシェーダー側に難しいことは何もありません。QML側のコードは ここ にありますが、 やはり難しいことはありません。サブスタンスのプラグインの作り方の参考にはなるかと思います。
Windows なら、C:\Users\{Username}\Documents\Allegorithmic\Substance Painter\plugins
みたいなフォルダの下に AnimShaderControl
フォルダを丸ごとコピーすればツールバーが表示されるようになります。サンプル glsl シェーダーは C:\Users\{Username}\Documents\Allegorithmic\Substance Painter\shelf\shaders
の下に置きます。あくまでサンプルなのでイケてるシェーダーは各自で用意してください。
自作のフローマップシェーダーもこのプラグインにつなぐ予定です。
日記みたいな投稿ですが、誰かの役に立つ気はします。
以上です。
おまけ
せっかくなので海外向けに使い方の記事も書きました。( medium デビュー )
https://medium.com/@harayoki/create-animated-shader-for-substance-painter-4e0e2f3b089f