pky's creativelog

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

pky's creativelog

SideFX Labs / Substanceプラグイン応用と実例

こちらの記事は、Houdini Apprentice Advent Calendar2020 / 15日目の記事になります。

qiita.com

はじめに

9日目の記事では、SideFX Labs/Substanceプラグインの基本的な使い方についてご紹介しました。
pkyblog.hatenablog.com

今回は応用的な使い方として、入力画像を使ってテクスチャ生成するタイプのsbsarの使用方法
Photoshopとの連携についてご紹介いたします。


また、実例として以下の2つについても解説します。

  • Low/Highモデルからのベイクテクスチャを使った岩のテクスチャジェネレータの例
  • Nodevember2020の13日目で作成したモザイクタイルの例

f:id:pkyblog:20201213144355p:plainf:id:pkyblog:20201213144123p:plain

最後のモザイクタイルの例はサンプルシーンを配布します。

画像入力を伴うsbsarファイルの使い方

マスク画像を使ってテクスチャ生成するシンプルなsbsarを作成する

分かりやすく、シンプルなグラフで例を示します。
3つのマスク画像を入力してそれぞれに色を付けてベベルを掛けてテクスチャを生成するグラフを用意します。
f:id:pkyblog:20201205174653p:plain

上記の画像では、3つのInputノードには分かりやすいように数字のマスクを挿入しています。

InputノードのIdentifierは、それぞれ input_1, input_2, input_3 としています。
Labelは、入力マスク1, 入力マスク2, 入力マスク3となっています。

f:id:pkyblog:20201205174824p:plainf:id:pkyblog:20201206065521p:plain

これをsbsarファイルとしてパブリッシュし、Houdini上で使います。

HoudiniでSubstance Material SOPで読み込む

f:id:pkyblog:20201206070038p:plain

Houdini上でsbsarファイルを読み込むと、3つのInputノードの欄がSubstance Parametersの一番上に並びます。
Substance Designer上で設定したLabel名デフォルト値として設定されるようです。

ここに設定する名前は何を示すのかというと、COPネットワークのチャンネル名(Image Plane名)になります。

f:id:pkyblog:20201206070518p:plain

COP INPUT(optional) という所に入力画像用の別のCOPネットワークパスを設定する箇所があるので、
別途作成したCOPネットワークをここに入れて使用する事になります。

入力画像用のCOPネットワークを作成/Photoshop連携

入力画像を読み込む為のCOP2 Networkノードを作成します。

f:id:pkyblog:20201206072747p:plain

COPネットワーク内に入ったらFileノードを作成します。

f:id:pkyblog:20201206073032p:plain

これで、外部から画像を読み込んできますが、入力マスクは3枚必要です。

1枚ずつ作成して、Fileノードで読み込んでも良いのですが、
Photoshopを使うとレイヤーを使って簡単に複数チャンネルを扱えるようになっています。

f:id:pkyblog:20201206073437p:plainf:id:pkyblog:20201206073448p:plain

psdファイルだと、レイヤー名がHoudini上でチャンネル(Image Plane)別に読み込まれる為、
レイヤー名をinput_1, input_2, input_3として、このようなテキストが書かれたpsdファイルを用意します。

これを先ほどのCOPネットワークのFileノードで読み込むと、3つに分かれて読み込まれました。

f:id:pkyblog:20201206073700p:plain

入力用のCOPネットワークが出来ましたので、これをLabs Substance Material SOPで使用します。

先にImage Plane名を入力マスク1,2,3の欄へ記述しておきます。

f:id:pkyblog:20201206074233p:plain

そしてCOP INPUTへ先ほど作ったCOPネットワークのパスを設定

f:id:pkyblog:20201206074320p:plain

これでpsdファイルから入力したマスク画像3つを使ってsbsarからテクスチャが生成されます。

f:id:pkyblog:20201206074638p:plain

Labs Substance Material SOP内では、COPの中でFetchノードを使って、
別のCOPをフェッチして入力画像を取り込んでいる形になっています。

f:id:pkyblog:20201208091640p:plainf:id:pkyblog:20201208091650p:plain

作例: ベイクテクスチャを使った岩ジェネレータの例

ここでは、モデルからの各種ベイクテクスチャを使った岩テクスチャジェネレータをLabs Substanceプラグインで使う制作例を紹介します。
まず、Houdini上でLowモデル、Highモデルの岩を用意します。岩の制作については、ここでは割愛致します。
ご参考までにいくつか岩のチュートリアルリンクを貼っておきます。

モデルを用意したら、Labs Maps Bakerでモデルからテクスチャをベイクします。

f:id:pkyblog:20201208093601p:plainf:id:pkyblog:20201208093609p:plain

今回のテクスチャジェネレータに必要なのは、Normal, AO, Thickness, Curvatureの4つになります。

イカーは今回はHoudiniのLabs Maps Bakerを使っています。一応、Substanceに必要な各種ベイクテクスチャは大体揃っていますが、
ここはSubstance Automation Toolkitを使ってSubstanceのベイカーでテクスチャを作るという方法も考えられます。
(ただし、現状では標準でSubstance Automation Toolkitと連携する術は無い為、独自のツールやHDAを作る事になります)

ベイクしたテクスチャが出来たら、それをSubstance Material SOPへ入力する為のCOP2Netoworkを作っておきます。

f:id:pkyblog:20201208095226p:plain

Fileノードで4つのベイクテクスチャを読み込み、RenameノードでそれぞれCからAmbient OcclusionやNormalなど
ベイクの種別ごとの名前を付けておき、最後にMergeノードでまとめてNullノードで出力としています。

注意点として、ノーマルマップ、マスク系のテクスチャはFileノードのImage Color SpaceLinearとしておきます。
f:id:pkyblog:20201208131259p:plain

こういったテクスチャをサンプリングして値を使うテクスチャはLinearスペースにしておかないと、
sbsarで生成するテクスチャの結果が異なってきますので、注意が必要です。

f:id:pkyblog:20201208131507p:plain

あとは、Labs Substance Material SOPにベイクテクスチャを格納したCOPのパスと、チャンネル名を指定すれば
ベイクテクスチャを使ってsbsarがテクスチャを生成してくれます。

f:id:pkyblog:20201213144355p:plain

作例: Nodevember2020参加作品13日目 モザイクタイルの例

今年、Nodevemberに参加した13日目のモザイクタイルの例を使って、説明用に簡略化したもので作成の流れを紹介しながら、
さらにLabs Substanceプラグインを使った簡単に応用した作例を紹介します。

まず、Houdini上でマスク画像からTraceでモデルを起こします。
f:id:pkyblog:20201211085032p:plainf:id:pkyblog:20201211083319p:plain

このロゴをボロノイ分割する為の母点はロゴの流れに沿って分割したかったので
Labs Straight Skeleton 2Dを使ってロゴの中央を通るポリラインを生成しています。

f:id:pkyblog:20201211085053p:plainf:id:pkyblog:20201211083430p:plain

ただ、それだけでは綺麗な四角なタイルが並ぶだけになってしまう為、そのポリラインに対して
Scatterでポイントを散布して追加し、それぞれPoint Jitterで少しランダムさを追加して母点としています。

外側はTraceでは生成できなかった為、Gridを使ってロゴ部分をブーリアンし、
同じようにボロノイ分割ておき、バーテックスカラーを2色ランダムに追加しています。

f:id:pkyblog:20201211085504p:plainf:id:pkyblog:20201211085516p:plain

Labs Maps BakerでVertex Colorをベイクし、これをIDマップとして
Labs Substance Material SOPへ入力してテクスチャを生成しています。
f:id:pkyblog:20201213141026p:plainf:id:pkyblog:20201213141153p:plain


この解説用のSubstance Graphは、IDカラーからColor to Maskノードでマスクを作り、色を付けてベベルを掛け亀裂を簡単に入れた、シンプルなものです。
f:id:pkyblog:20201213141350p:plain

Nodevember2020の作例ではこれとは全く違うのですが、
実際はLevel Up Digitalのチュートリアルで学んだものをベースに改変したSubstance Graphで作っています。

levelup.digital

Houdiniの方も、実際の作例ではボロノイ分割もノイズを使いdensityアトリビュートを与えて均一にならないように調整したり、
ボロノイ分割とIDカラー付加を合わせてHDA化して、色数や色調整がしやすくしています。

f:id:pkyblog:20201211092304p:plainf:id:pkyblog:20201211092754p:plain

Nodevemberの時には、この作例でLabs Substanceプラグインは使っていませんでした。

これだけでは単純にHoudiniからベイクしたIDマップからテクスチャを生成してグリッドに貼り付けているだけなので、
Labs Substance プラグインを使う意味は殆ど無くて、Substance Designerへ更新したIDマップを渡すのと大差ありません。

その為、多少無理やりですが連携してみます。

ハイトマップを使ってタイルのミゾに草を生やす

f:id:pkyblog:20201213142256p:plain
GridモデルにAttribute from MapでLabs Substance Material SOPのCOPからハイトマップを参照して
floatのdensityアトリビュートとして転写します。

そのまま転写するのではなく、Remapを使って階調反転したりコントラスト調整しています。

f:id:pkyblog:20201213142306p:plainf:id:pkyblog:20201213142315p:plain

その後、blastでdensityが0の箇所だけ削除し、細切れになった部分はLabs Delete Small Partsで除去しています。

f:id:pkyblog:20201213142623p:plainf:id:pkyblog:20201213142629p:plain

こうして抽出したミゾ部分だけのモデルに対して、Houdini18.5から追加された
Scatter and Alignノードでポイントを散布します。

Scatter and Alignはポイントの散布方法が複数選択出来たり、また回転やスケールなどのアトリビュートを追加してくれたりといった
調整機能が色々付いている便利なノードです。これまでは、Scatterした後に自分で色々とアトリビュートを追加したりしていましたが
このノードでCopy to pointsのコントロールがもっと簡単になっています。

f:id:pkyblog:20201213143154p:plain

これで草のモデルをCopy to Pointsで配置することで、Substance Archiveが生成したハイトマップから
ミゾの部分を特定し、プロシージャルに草のモデルを散布する事が出来ます。

f:id:pkyblog:20201213143348p:plain

おわりに

細かな説明は省略しておりますが、以下でモザイクタイルの制作例は
この記事で紹介したシーンをダウンロード頂けます。

pky.booth.pm

※配布シーンでは草ではなく、Tubeを散布しています。また、SubstanceロゴではないSに差し替えています。


何かご参考になれば幸いです。
Houdini/Substance Designerの制作例が増えたら嬉しいです。

見て頂いて有難うございました。

SideFX Labs / Substanceプラグインの基本的なところ

こちらの記事は、Houdini Apprentice Advent Calendar2020 / 9日目の記事になります。

qiita.com

はじめに

Substanceと言えばPBRテクスチャ時代になってからは、業界のデファクトスタンダートなテクスチャ作成ツールと言っても良いでしょう。
そんなSubstanceをHoudini上にインテグレートしてくれるのがSideFX LabsのSubstanceプラグインです。

まだ、各ノードには(Beta)と名前が付いていてベータ版扱いですが、以前に比べて完成度も安定感も上がってきています。
こちらの記事では、SubstanceDesignerとHoudiniを繋いでくれるSideFX Labs/Substanceプラグインの基本的なところについて解説します。

動作環境は以下で確認しています。

  • Houdini Indie 18.5.408
  • Substance Designer 2020.2.1

SideFX Labs | Substanceプラグイン

www.sidefx.com

Substance Archive(sbsar)形式のファイルをHoudini上で読み込んで扱えるようにするプラグインです。
HoudiniのCOP上でsbsarを読み込み、BaseColor, Normalなど各種チャンネルを分離して扱えて、
これらのテクスチャをHoudini上のあらゆる部分で利用可能になります。

Labs Substance Material (SOP)ノード

モデルに対してSubstance Archiveで生成したテクスチャを使ってマテリアルを割り当ててくれるノードです。

f:id:pkyblog:20201204094516p:plain

以下のような、Substance Designerで作成した森の地面マテリアルをsbsarとして出力し、
f:id:pkyblog:20201204124532p:plainf:id:pkyblog:20201204094530p:plain

Labs Substance Material SOPで読み込み、パラメータを設定すると
Substance Archiveを使ったマテリアルがモデルに割り当てられます。

f:id:pkyblog:20201204124555p:plain

注意点として、Metallicは必要ない場合でも真っ黒の単色を入れてsbsarの方にOutputを作成しておきましょう。
Metallicが無いsbsarをSubstance Material SOPで読み込むと、テカテカになってしまいます。

また、Material Settings内に各種オプションがあります。
DirectX Normalであれば、Flip Normal Yにチェックを入れておきます。

f:id:pkyblog:20201208065133p:plain

ハイトマップがあるなら、Enable Texture Displacementにチェックを入れるとモデルをディスプレイスメントすることが出来ます。
ただし、これはPrincipled ShaderのDisplacementで、レンダリング時やビューポート表示では凹凸が付いていますが、
実際のモデルの頂点位置を変えている訳ではありませんので注意が必要です。

Principled Shader

こちらのPrincipled ShapderのDisplacementの項にも書かれていますが、
『デプスの外観を作成しますが、実際に、ジオメトリの修正やオブジェクトの輪郭の変更は行ないません』とあります。

f:id:pkyblog:20201208065141p:plain

青く表示されたポイントがモデルで、Gridから変化していません。
後ほどの作例でハイトマップを使ってモデルの頂点位置を変位させる方法についての一例をご紹介します。

Labs Substance Material SOPHDAとして作成されており、ダブルクリックすれば中を見ることが出来ます。
f:id:pkyblog:20201204131301p:plain

右クリックでAllow Editing of Contentsで編集可能状態にして中を見てみましょう。

f:id:pkyblog:20201204131416p:plain

中を見ると、COP2 NetworkMaterial Networkがあり、入力モデルに対してMaterialノードでマテリアルを割り当てているシンプルな物です。
この中で核になっている部分は、COP2 Networkです。
こちらもダブルクリックして中に入って見ると、次の項で紹介するLabs Substance Archive (COP)ノードを使って、
sbsarファイルを読み込み、各種チャンネル毎にテクスチャを抽出しています。

f:id:pkyblog:20201204132239p:plain

COPでsbsarを読み込み、各種チャンネル毎に分離しておき、
Material Network内のPrincipled ShaderにBaseColorやNormalなど各種テクスチャを設定しています。

f:id:pkyblog:20201204132714p:plain

つまり、Labs Substance Material SOPはHDAにして簡単にsbsarを使ってモデルに
Substance Materialを割り当てられるようにラップしているノード
という事になります。

Principled Shaderを使っている為、Labs Substance Material SOPを使う時には、
Substance Designerで作るsbsarファイルは、PBR(Metallic/Roughness)ワークフローで作っておく必要があります。

Labs Substance Archive (COP)ノード

 
こちらがSubstanceプラグインの実体と言っても良いと思います。
COP上でのみ利用できます。

sbsarファイルを読み込むと、各種チャンネル別に読み込まれます。
デフォルトではSubstance DesignerのOutputノードのラベル名がチャンネル名(Image Plane名)となります。

f:id:pkyblog:20201204232105p:plainf:id:pkyblog:20201204232817p:plain

Base Colorというチャンネル名になっています。

ラベル名はどのように付けられているか、作者によってばらける可能性があります。
ベースカラー と日本語で書く人も居るかもしれません。
統一されていないと問題が出るので、基本的にはLabs Substance Archiveノードのオプションにある
Name Image Plane from Usageにチェックを入れておきましょう。

f:id:pkyblog:20201204233021p:plainf:id:pkyblog:20201204233044p:plain

これで、チャンネル名がUsageである、baseColorに変更されます。
f:id:pkyblog:20201204233415p:plain

ただし、このままだとHoudini上で扱うには少し扱いづらくなっています。
COP上では画像のチャンネル名は

  • C (カラーチャンネル)
  • A (アルファチャンネル)

という規定の名前で扱われています。

先ほど紹介したSubstance Material SOPノード内のCOP2 Networkの中が参考になりますので、もう一度見てみましょう。

f:id:pkyblog:20201204234157p:plainf:id:pkyblog:20201204234213p:plain

Base Colorを取り出し、Renameノードで、baseColor から C にチャンネル名(Image Plane名)を変更しています。

また、オプションとしてGamma Correctionを掛けられるようにGammaノードで1/2.2である0.45をかけています。
これはSwitchノードで有効無効を切り替えられるようになっています。

Substance Archive COPを使う場合は、このように色々と仕込みが必要になってきますので注意が必要です。

f:id:pkyblog:20201205001855p:plain

COPノードの各チャンネルは、Composite Viewから見ることが出来るようになっています。

Substance Archive COPを使う場合は、sbsarファイルから各種チャンネル毎に画像を取り出して、
COPノードを使って自由に処理を挟むことが出来る為、SubstanceマテリアルからHoudini上で更に加工することも可能です。
簡単な例をご紹介します。

作例:Heightマップを取り出しCOPで加工してディスプレイスメント

下記の例では、ハイトマップをHoudini上でCOPのContrastノードを使ってコントラスト調整し、モデルに対してディスプレイスメントで頂点を変形した例です。

※RenameノードでHeightをC(カラーチャンネル)に変更していますが、Rチャンネルだけに入って、G,Bは黒になるようです。

f:id:pkyblog:20201205002332p:plain

f:id:pkyblog:20201205002446p:plainf:id:pkyblog:20201205002449p:plain

Attribute VOPでハイトマップを参照し、バーテックスカラー(R)へ入れておいて、
それを使ってAttribute Wrangleで頂点を変形しています。

f:id:pkyblog:20201205003149p:plain
COPではC(カラーチャンネル)にリネームしてから参照しましたが、
参照パスに{height}とチャンネル名を書くことで直接参照する事も可能です。

Labs Substance Material SOPのようにHDAにする場合は、
COPネットワークパスの参照部分はopfullpath関数を使って相対パスを用いて指定します。
また、文字列として展開するため、バッククォートで囲う必要があります。
https://www.sidefx.com/ja/docs/houdini/expressions/opfullpath.html

f:id:pkyblog:20201205002816p:plain

ハイトマップからバーテックスカラーを焼き付けるのにVOPを使っていますが、
Attribute from Mapでも可能です。こちらの方がパス指定だけで済む為、お手軽です。

f:id:pkyblog:20201209065442p:plain

あとは、Attribute Wrangleで法線方向にハイトマップから格納したバーテックスカラーの値を使って
オフセットさせる事でディスプレイスメントになります。

f:id:pkyblog:20201205002831p:plain

f:id:pkyblog:20201208064134p:plain

このように、Labs Substance Archiveを使ってsbsarファイルを読み込み、各種チャンネル毎に取り出し、
COP上でHoudiniのノードを使って更に画像処理することが出来る
ので、大変、自由度が高い仕組みとなっています。

おわりに

記事を読んで頂いて有難うございました。
Houdini/Substance Designerをお使いの方は是非使ってみてください。

または、Substance Designerをお持ちでなくとも、フリーで配布されているsbsarファイルがあれば利用出来ます。
Substance ShareやSubstance Sourceにもフリー素材がありますので試してみてはいかがでしょうか。

15日目の記事では、Substanceプラグインの応用や実例について書く予定ですので、
宜しければ、続きも見てみてください。


また今年、Houdini/Houdini Engine/UE4/Substance Designerを使った書籍、
『背景アーティストのためのHoudiniプロシージャルモデリング実践入門』をBoothに出しました。

こちらのSubstanceプラグインについても触れていますので、ご興味がありましたら見て頂けますと嬉しいです。

Nodevember2020参加・振り返り

今回、Nodevember2020に初めて参加しました。
後半、モチベーションも下がったりしましたが、なんとか30日分欠かさず無事に参加できました。
皆勤賞を目指しては居ましたので、目標は達成できました。

今後、参加を考える方の為にも、どんなイベントなのか紹介しつつ、自分の制作過程など振り返ってみます。

Nodevemberとは

f:id:pkyblog:20201208064310p:plain

https://nodevember.io/


プロシージャルアートの奨励促進のために毎年11月に行われるイベントです。

公式サイトにはこう書かれています。

自分自身に挑戦して、プロシージャル制作スキルを向上させ、披露してください。
プロシージャルは何でも大歓迎です。それをノードと呼ぶことができれば、Nodevemberと呼ぶことができます!
必要なプロシージャル/ノードベースのソフトウェアを使用してください。
これは、新しいソフトウェアを学ぶことに挑戦する絶好の機会でもあります。

作品は、例えば

  • シェーディング/テクスチャリング
  • モデリング
  • 音楽/音の合成

など。

自身の参加作品

f:id:pkyblog:20201201001130p:plain

以下にもまとめています。
1日のお題で複数作品投稿している場合もありますが、以下ではすべて掲載されています。

Artstation

ArtStation - PKY .

Twitter モーメント

Nodevember2020

参加作品の多くは開催期間中に作った新しいものが殆どですが、時間が無い時は過去に作ったものを流用して手を加えて作った作品もあります。
作業時間は1日の取れる時間に限りもあるので、大体は1~3時間程度で、たまに時間が掛かったものでは4,5時間使ったものもあるかもしれません。

他の参加された方々の作品群

twitterタグ #Nodevember #Nodevember2020で検索したら多くの作品が出てきます。
twitter.com

また、Artstationの方でも同様のタグで多くの作品が上がっています。
www.artstation.com

日々、他の参加者の方々の作品群を見ていたのですが、全体的にBlenderSubstance Designerによる作品が多かった印象が強いです。
特にBlenderはあまり知識が無いので、こんなことも出来るんだ・・という驚きがあって、見ていて楽しかったです。
海外のBlender使いの方も多い事を実感しました。

参加意図とモチベーション

与えられたお題に対して様々な物を作ることで、Substance Designer/Houdiniを使った
プロシージャルワークフローのスキルの幅を広げたかった
、というのが大きなモチベーションでした。

結果的には、お題があることで、自分自身が普段は作らないであろうモチーフを作ったりしたので、良い刺激にもなりました。

お題が与えられて、自分自身で作る題材を選び、それを1日で作れる範囲の作業に落とし込んで作る、という行為は
とても実践的で仕事の訓練にもなる
ので、特に学生の方には参加されると良いのではないだろうか?
と思いました。
様々なものを作るので、ソフトの学習にも大変良いですね。

ただし、毎日作品を作るというのはとても大変です。
忙しかったり、体調が悪い時もあったので、モチベーションを維持するのも大変でした。
そして発想力をもっと鍛えねばならない、とも感じました。難しいお題がたまにあって作るものを決めるのが大変なことも。。。
その為、常にNodevemberの事が頭をよぎっていましたし、作るものが思い浮かばないときは暇があればリファレンス収集などをして捻りだしていました。

HoudiniのNodevemberと同様の1か月毎日作品をアップするイベント『Houly』に参加されていた方々は動画を作っている方も多く、
そのクオリティの高さを見て、すごい事を毎日されていたのだと実感しました。

参加作品の振り返り

Food / Day1~5

f:id:pkyblog:20201201085007p:plain

はじめはSubstanceDesigner中心で行こうかと思ったのですが、2日目からHoudiniの勉強にも活かそうと思い、
モデルはHoudini、テクスチャをSubstanceDesignerという構成に変えました。
やってみた感触としては、シンプルなマテリアルで構成出来るモチーフの1つのプロップなら
1日の限られた時間でもなんとか作れる印象を持ちましたが、食べ物というモチーフだったからかもしれません。
また、HoudiniはVolumeとポリゴンを自由に行き来出来るので、こういった食べ物のようなモチーフはとても作りやすいです。
他の3Dソフトだと厳しかったと思います。ただし、Blenderでもよく食べ物をプロシージャルで作って居られる方が
沢山いらっしゃるので、Blenderも得意な部類かもしれません。

Textures / Day6~10

f:id:pkyblog:20201201085017p:plain

6日目の水墨画風ジェネレータは作っていて楽しかったですが、やってみた感触としては、写真から本物のような水墨画を作るのは難しそうです。
f:id:pkyblog:20201201092126p:plain

7日目では、購入して数えるほどしか使っていないMarvelousDesignerを使ってプリントクッションを作りました。大阪万博キャラクターいいですよね。
名前はなんていうんでしょうか。検索するとTwitterなどで『コロシテ』くんというあだ名が・・・w

8日目のパフェは、なかなか思ったようなクオリティを出せず、時間が掛かってしまった作例です。それでも満足できる見た目まで行く事はできませんでした。
難しいモチーフを選んでしまった、失敗した、、と思った1品ですが、Twitterでの反響はAllegorithmic公式の方のリツイートもあったせいか、まずまず反応がありました。

9日目は、子供が大事にしてるぬいぐるみを参考に作ってみたものの、アウトプットしたものが可愛いところまで行けずにリファレンスに完全に負けた・・・
ちゃんと作ってみたいモチーフではあります。毛の流れはHoudiniでハイモデル、ローモデルを作り、SubstanceDesignerでWorldSpaceDirectionをベイクして、
それをベースに加工してモデルに沿って毛の流れを制御しています。
f:id:pkyblog:20201201092242p:plain

はじめはHoudiniでFurを使ってみようかとも思いましたが、使った事の無い機能では検証も必要なので、
1日で作るには厳しいものがあると思い直してSubstanceDesignerでの表現としました。

Time / Day11~15

f:id:pkyblog:20201201085026p:plain
この週は、個人的にとても楽しんで作っていた記憶があります。前半3つがHoudiniを使って、これまであまりHoudiniでは
作っていないタイプのものを作りました。ハニワとモアイはNodevemberに参加しなければ今後も作っていなかったと思いますね・・・

こちらもVDBを多用して作っています。基本はプリミティブの組み合わせで、VDB化してノイズを加えていったりしてモデリングしています。
f:id:pkyblog:20201201091833g:plain

13日目のモザイクタイルは、Level Up Digitalで学んだ Mosaic Creation Techniques with Substance Designerで得た知識をアレンジして作成したものです。
画像からボロノイ分割をうまく制御するのがSubstance Designerでは難しそうと思ってHoudiniを使いましたが、後から思えばSubstance Designerでも出来そうですね。

15日目のネオン看板では、SubstanceDesignerでのハイトマップでの立体化では階層構造のものは表現できませんが、2枚の板モデルを使うことで階層構造を実験的に作ってみました。

Nature / Day16~20

f:id:pkyblog:20201201085039p:plain

16日目では、WorldMachineで作った地形のハイトマップを使ってSubstanceDesignerでテクスチャリングするという初めての試みを行いました。
森林のモコモコを出すのが難しいですね・・・
f:id:pkyblog:20201201092640p:plain

ポリゴンが細かいほうが良さそう、リアルタイムは厳しいとおもってHoudiniでのレンダリングにチャレンジしましたが、
知識が無く、あまり質感設定など出来ずに良い結果になりませんでした。
レンダリング周りの知識が無いので、色々と検証などが必要そうで、短い時間での制作では難しかったです。

17日目では、球体ポリゴンにディスプレイスメントしてキノコの立体を作りました。シンプルだったので手短に作成できたので、
余った時間で以前に作成した森の地面マテリアルの倒木にキノコを生やしました。
f:id:pkyblog:20201201092855p:plain

18,19は体調がすぐれず、以前に作ったものの流用で凌ぎました・・・
Growthでは、PONさんのジェネレータDaisy Chain』を使わせて頂き、伸びる蔦を作りましたが、
蔦の質感までは詰め切れませんでした。Daisy Chainはとても良く出来ているジェネレータです。

gumroad.com

f:id:pkyblog:20201201093323p:plain
煉瓦は昔作ったものを流用しています。

Humanity / Day21~25

f:id:pkyblog:20201201085047p:plain

21日目はサイン波を使ったコンクリ建造物を作りました。
SideFX Labsに、Labs Sine Waveというノードがあったので初めて使いました。
f:id:pkyblog:20201201094618p:plain
Side FX Labsもどんどん追加されていて、知らないノードだらけで把握するのも大変です!しかし便利ですね。

22日目は、ビルの街を作ろうとしましたが、さすがに1日で出来る限界があるため、かなりローポリゴンのビルで、Substance Sourceにある
ビルのテクスチャ群を活用しました。夜にしてディティールが見えないような見せ方にしてごかましていますね・・昼間ではクオリティが出なかった為です。
f:id:pkyblog:20201201094924p:plain
13日目のモザイクタイルと同じように、Substanceロゴ画像からボロノイ分割使って区画のベースを作って、ビルを立ち上げる為の土台を作り出しています。

23日目のSignのかに道楽は、カニの手足を作るグラフを別で作っておいて、それをパラメータ編集して本体のグラフで使っています。
f:id:pkyblog:20201201094216g:plain

Patterns / Day26~30

f:id:pkyblog:20201201085055p:plain

26日目は、ボロノイ分割を活用した、よくあるGeometricデザインの動物を作りました。
ロックバンドのMAN WITH A MISSIONをモチーフとしたものも作りましたが、全くもって上手く作れませんでした・・・
またリベンジしたいものです。
f:id:pkyblog:20201201130113p:plain

Fractalでは、ひまわりを作りました。
f:id:pkyblog:20201201131012p:plain

Substance Designer FX-Mapテクニカル本でも取り扱った、フィボナッチ配列上にパターンを配置するジェネレータを使っていますが、
Splatter Circularノードでも同じような表現はきっと出来るでしょう。ハイトを使った立体モデルでは、花びらがペラペラにしかならないので、
手前だけHoudiniでモデルを別で作ってみましたが、奥のひまわりと表現が違うので馴染みが悪かったですね。

pky.booth.pm

最終日のIllusionはお題がとても難しく、頭を悩ませました。錯視、幻覚、という意味ですが、錯視なんて生まれてこの方、作ったことが無かったので、
錯視について色々調べたりして勉強になりました。作ったものは全然錯視になっていなかったので、なんとも締りが悪い終わり方となってしまいました!

おわりに

今回初めて参加してみて、1日で作れる分量やモチーフなどについて、なんとなくの感覚が掴めました。
しかし、とても大変だったので、今後、似たようなイベントに毎日参加するかというと微妙ではありますが、
Houlyがまた有るのならタイミングが合えば参加してみたいとは思いました。

今回やってみてよかったと思う事をまとめると、

  • お題があることで、様々なモチーフを作るきっかけとなり、色々な面で鍛えられる
  • 締め切りがあることで、緊張感を持って制作できた
  • お題が発表されたら、近い日程の題材について、案だしを早めにしておいたのが良かった
  • 順調に制作が終わったら、翌日、翌々日のものまで手を付けておくと余裕が持てた
  • 海外参加者が多く、色んな国の方に作品を見て頂けるきっかけとなる

Allegorithmic公式Twitterの方で、1日ごとの作品をまとめた画像を取り上げてくれていたのですが、
そこで自分の作品が載っていると嬉しいですしモチベーションにもなりました。感謝しております。
f:id:pkyblog:20201201132049j:plain
こうやってコミュニティを盛り上げてくれるコミュニティマネージャを置いてるソフトウェアの存在って大きいですね。
SideFXさんやEpic Gamesさんなどもその存在が大きいように思います。(自動机さんは無いのかな・・)

今後、Nodevemberへ参加される方のご参考になれば幸いです。
見て頂いた方々、有難うございました。

sbsrenderを使ってsbsarファイルを一括レンダリングする

Substance Designerで作成したsbsarファイルから一括で画像を出力したい事があると思います。


例えば、

  • テクスチャをサムネイルで確認できるようにサムネイル一覧を作成したい。
  • 一括でフィルタ処理を入れたので全部再出力したい。
  • グラフ内で使用していたsbsarファイルが更新されたので、一括でテクスチャを再出力したい。

などなど。

 

こういった自動化に対しては、

Substance Automation Toolkit | Substance 3D

という専用のソフトウェアが用意されています。

www.substance3d.com



その中の一部のソフトウェアは、Substance Designerに標準で付いています。

  • sbscooker
  • sbsupdater
  • sbsrender

sbsarファイルをレンダリングする、sbsrenderも入っています。

これを使うと、複数のsbsarファイルをバッチ処理で一括レンダリングすることが出来ます。

sbsrender - Substance Automation ToolKit



これらはコマンドラインから実行するUIが無いツールで、コマンドを打ち込んで実行する為、慣れていないとやや敷居が高いと思います。

基本的な使い方

"C:\Program Files\Allegorithmic\Substance Designer\sbsrender.exe" render --input "C:\Test\test.sbsar"


このようにsbsarファイルのパスを書いてコマンドプロンプトから実行すると、sbsarファイルがあるフォルダ以下にsbsar内の全outputノードの出力テクスチャpngフォーマットで256x256サイズで出力されます。


ただし、これでは複数のsbsarファイルを一括レンダリングは出来ないので、バッチファイルで簡単なスクリプトを記述する事になります。

 

フォルダ以下のsbsarファイルのbasecolor出力を一括レンダリングする

@echo off

for /r %%a in (*.sbsar) do (
echo Render : %%a
"C:\Program Files\Allegorithmic\Substance Designer\sbsrender.exe" render --input %%a --output-path %~dp0 --output-format "jpg" --set-value $outputsize@9,9 --input-graph-output "basecolor" --output-name "{inputName}_{outputNodeName}"
)

 

このように記述したバッチファイルへ、sbsarファイルが入ったフォルダを投げ込むと、サブフォルダを含めてすべてのsbsarファイルのbasecolor出力を512 x 512サイズのjpgファイルでバッチファイルと同じフォルダへ一括出力します。
f:id:pkyblog:20201013202452g:plain

出力サイズはSubstanceDesignerでの指定と同じく、2の累乗指定なので、9だと512、10だと1024といった具合です。

出力ファイル名は{}で囲ったパターンがいくつか使用できるようになっています。
この場合だと、sbsarファイル名_outputノード名となります。
 

これらオプションの詳しい説明はsbsrenderのヘルプページをご覧ください。
sbsrender command line options - Substance Automation ToolKit


上記のサンプルバッチファイルは以下からダウンロード頂けます。

sbsar_render_dir.bat - Google ドライブ


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

 

 

SD複数ノードパラメータ一括編集プラグイン Multi Node Editor

Multi Node Editorとは?

Substance Shareで公開されている、Substance Designer用のプラグインです。

f:id:pkyblog:20200820061624p:plain

 Substance Desingerでは、複数ノードのパラメータ同時編集が出来ないので、サブグラフとしてエクスポーズして複数ノード間でパラメータを共有したり、またはValueピンを使ってパラメータをリンクしたり、関数で共有したり、などなど・・・
一工夫しないことにはパラメータ値を同期することが出来ません。

しかしながら、どの方法にも一長一短があり、面倒くさいのは否めません。


パラメータが多くなればなるほど面倒で、特にTile Samplerなどでこの問題は謙虚に出てきます。

これらを解消する手段として、Multi Node Editorでは比較的簡単に複数ノードに対して同じパラメータを設定する事が出来るようになっています。

インストール方法

f:id:pkyblog:20200820062111p:plain

Multi Node Editorは、pythonで書かれたプラグインなのでzipを解凍して出来た、sd_multinode_editorフォルダを以下にコピーしてSubstance Designerを起動すると自動でロードされます。

 

C:\Users\ユーザー名\Documents\Allegorithmic\Substance Designer\python\sduserplugins以下

 

Substance Designerを起動すると、すでにMulti Node Editorのパネルが組み込まれた形で起動するかと思います。Toolsメニュー>Plugin ManagerからMulti Node Editorのチェックをオフにすると、起動時にプラグインを読み込まず任意のタイミングでオン・オフ出来ます。

f:id:pkyblog:20200820062640p:plain

または、ウィンドウの表示・非表示については、Multi Node EditorはSubstance DesignerのウィンドウにドッキングできるDock Widgetとして作成されていますので、Windowsメニューから表示のオン・オフが出来ます。

f:id:pkyblog:20200820062210p:plain

 

使用方法

使い方はシンプルで、編集したいノードを複数選択し、Multi Node EditorのLoadボタンを押すとパラメータが表示されます。

f:id:pkyblog:20200820062846p:plain

編集したいパラメータにEnableのチェックを入れて、数値を入力し、最後にSetボタンを押すと設定したパラメータがノードに反映されます。

f:id:pkyblog:20200820063114p:plain

この例では、Tile SamplerのAmountを16 -> 8に変更しましたが、無事に2つのノードがAmount 8に変更されました。

f:id:pkyblog:20200820063242p:plain

種類の違うノードを複数選択した場合

f:id:pkyblog:20200820064417p:plain

種類が違うノードの場合は、OutputSizeやTiling Modeなどの共通パラメータだけ表示されます。Tilingをオフにする、といった事も複数ノードで一括編集できるので大変便利です。

 

 

これで、サブグラフにしてパラメータをエクスポーズしたり、関数で同期したり、Valueノードを使ったりするまでも無いようなものが簡単に複数ノードパラメータ編集が出来るようになって大変便利です。

ツールのデフォルト機能として、このようなパラメータの同期や同時編集は入って欲しいところではありますが・・・このツールにより、ワークフローが少し改善されました。

 

また、同じ作者の方の Shortcut Manager という、ショートカットで様々なノードを作成可能にするプラグインも、簡単操作でノードとショートカットを登録出来て大変便利です。

https://share.substance3d.com/libraries/5511


こちらもお勧めのプラグインですので、是非一度ご利用ください。

 

UE4 LandscapeのSculptでレイヤーを使用する

UE4のLandscapeでレイヤーを使った非破壊フローのメモです。


Landscapeを作成する際に、Enable Edit Layersにチェックを入れておく。

f:id:pkyblog:20200702130323p:plain

そうすると、Edit Layersタブでスカルプトをレイヤー単位で分けて管理できる。

f:id:pkyblog:20200702130353p:plain

各レイヤーのAlphaを調整すると、ブレンドすることも可能。

f:id:pkyblog:20200702130443p:plain

f:id:pkyblog:20200702130435p:plain

レイヤーのハイライト表示

VisualizersのLayer Contributionをオンにすると、各レイヤーをハイライト表示可能。

f:id:pkyblog:20200702130536p:plain

選択したレイヤー毎に赤くハイライト表示される。

f:id:pkyblog:20200702130613p:plain

 

Substance Functionを共有して簡単に再利用できるようにする

作業をしていると、よく使用するSubstance Functionがいくつか出てくるかと思います。そういったものは、ライブラリーへ登録しておくと、いつでも簡単に呼び出せて便利です。

 

新規でsbsファイルを作成します。

SubstanceGraphが作成されてしまいますが、これは必要が無いので削除しておき、Substance Functionだけを格納しておきます。

f:id:pkyblog:20200618085802p:plain

f:id:pkyblog:20200618085210p:plain

このsbsファイルをライブラリーの場所へ設置しておくと、Function Graph内でメニューから簡単にSubstance Functionを呼び出せるようになって便利です。

f:id:pkyblog:20200618085313p:plain

SD標準のパッケージだと、functions.sbsがこのようなデータとなっています。

"C:\Program Files\Allegorithmic\Substance Designer\resources\packages\functions.sbs"

f:id:pkyblog:20200618085412p:plain

このようにカテゴリ別にフォルダに分けて管理しておくと良さそうですね。