Substance Designer 2017.2 の新ノード Flood Fill

最近、ブログを書くのが面倒でほとんどTwitterで済ませてしまっていました。

なんとかブログを書こうという気力がほんのちょっとだけ湧いたので頑張って書いています。

いやまあ、記事を書くこと自体より、画像のコピペができないとかそういうのが面倒ってのが大きいです。

そのうち引っ越すかもしれませぬ…

今回はSubstance Designer 2017.2 が登場したので、そこで追加されているFlood Fillノードについてまとめました。

・Flood Fillとは?

Flood Fillアルゴリズムというものがあります。

これは画像処理アルゴリズムの1つで、画像内の特定アイランドに色を充填するためのアルゴリズムです。

簡単に言ってしまえばPhotoshopのペンキ缶ですね。

SDの[Flood Fill]ノードはこのアルゴリズムを用いてアイランドごとに情報を持たせているものと思われます。

・何ができる?

白黒で何らかのパターンを作るのはSDではよく行われますが、それをそのままハイトマップやノーマルマップにしてしまうとあまりにも整列しすぎていて不自然です。

だからと言って適当なノイズを与えるだけだとそれはそれで不自然だったりします。

出来ればアイランドごとにIDを持たせるような印象で情報を割り振り、それを元にして他のマップを生成したいという場面があります。

[Tile Generator]ノードなどはその手の情報をランダムに生成してくれる機能がありますが、[Cells 3]のようなノイズノードではアイランドごとに情報をランダムに変更する機能はありません。

[Flood Fill]ノードとそれに続くノードを用いることでこのような情報をあとから生成することができるようになった、というのが今回のアップデートの大きなところです。

・使い方

まず、[Flood Fill]ノードに白黒のパターン画像を接続します。

すると、なんだか不可思議な画像が出来上がります。

この画像はこのままでは基本的に使えませんが、ここには各アイランドに関する情報が保存されているようです。

どのような情報が保存されているかは不明ですが、アイランドのバウンディングボックスのサイズなんかは入っているようです。

この[Flood Fill]ノードの出力を[Flood Fill to ~]ノードに繋ぐと、その繋いだノードに合わせた情報を取得することができます。

2017-10-21_18h12_39.png

[Flood Fill]ノードに続くノードは5種類あります。

[Flood Fill to BBox Size]は各アイランドのバウンディングボックスサイズをアイランドに割り当てます。アイランドの大きさを求めることができるわけです。

[Flood Fill to Gradient]は各アイランドにグラデーションをかけることができます。

グラデーションの方向とランダム性を指定することができるため、かなり使い勝手がいいのではないでしょうか?

[Flood Fill to Position]は各アイランドの中心座標を色として割り当てます。

[Flood Fill to Random Color/Grayscale]は各アイランドにランダムにカラー/グレースケールを割り当てます。

これらのノードは[Flood Fill]ノードから繋げなければほとんど意味がないノードです。

かならず[Flood Fill]と一緒に使いましょう。

・作例

以前のSubstance勉強会の時に作った石畳は石の形状を作成するのにちょっと面倒な方法を採用していました。

2017-10-21_22h19_18.png

[Histgram Shift]を用いて無理やりノーマルマップを作り、そこからハイトマップに戻す方法ですね。

勉強会ではこのようなハイトマップを2種類作り、ブレンドしていました。

この方法でも悪くはないのですが、胡散臭い形状ができてしまうこともあって調整が面倒です。

[Flood Fill]を使ってよりスマートで安定的な形状を作る方法がAllegorithmicの公式動画にあります。

2017-10-21_22h38_11.png

[Flood Fill to Gradient]ノードを用いて各アイランドに傾斜をつけます。

この傾斜をそれぞれ別方向で3つ作り、すべてをMinブレンドします。

するとこのようなノーマルマップが生成できます。

2017-10-21_22h41_12.png

安定的な星型の形状ができました。

この状態だとあまりにも綺麗すぎるので、

・[Flood Fill to Gradient]の[Multiply by Bounding Box Size]パラメータを調整して星の中心をアイランドの重心付近から移動させる

・[Flood Fill to Random Grayscale]を使ってマスクを作り、星の足の数をアイランドごとに配置する

などの方法でよりランダム性を出すことができるでしょう。

・不具合?

不具合なのかアルゴリズム的な仕様なのかは不明ですが、[Flood Fill]を使用した場合に一部のアイランドのエッジ部分にノイズが乗ることがあります。

2017-10-21_22h49_29.png

[Flood Fill]の入力にゴミが残っているというわけでもなく、角度的な問題という感じもしませんが、何らかの理由でこのようなノイズが出てしまいます。

形状を変えたりすれば出なくなったりするのですが、出てしまうのがそもそも困るわけで。

対処の方法としては、[Flood Fill]へ入力するノードに[Blur HQ Grayscale]で少しだけブラーをかけてやると出なくなったりします。

ブラーの強度は0.2くらいなら形状に影響も与えず、ノイズ問題も解消できるようです。

ただし、どんな形状に対してもノイズ問題を解決できるかは不明なので注意してください。

以上、[Flood Fill]ノードの紹介でした。