Substance 2018の3Dノイズについて

Spring has come!

は~るで~すよ~(弾幕
というわけで暖かくなって花粉が飛びかう春が来ましたね。

春といえば!
Substance Designer/Painterのアップデートです!
というわけで双方とも2018.1が来ていますので、サクッとアップデートしちゃいましょう。
まあ、不具合はあるかもしれませんがね。

今回のアップデートではパフォーマンス向上が結構重要です。
特にSubstance Painterではシェルフのアイテム読み込みが驚くほどに速くなってます。
さすがに一瞬ということはありませんが、今までのように下手すると数分待たされるということはなくなりました。
特にSPで作業をする人にとっては朗報じゃないでしょうか。
また、UIもかなり変わっていますね。

Substance DesignerはUDIMのベイクに対応しています。
パフォーマンス向上はランダムシードの変更時にわかりやすいと思います。

さて、双方に共通しているアップデート内容として3Dノイズの追加が挙げられます。
この3Dノイズはかなりの可能性を秘めていると個人的には思うので、少し詳しく書きます。

プロシージャルにおけるノイズ

ノイズという単語は音楽の中に入ってくるプツプツといったもの、雨音のようなものなどを指す言葉として使われるのが一般じゃないかと思います。
映像系であれば8mmフィルム特有の線が入ったりとか、写真の場合はISO感度を高くしすぎた場合のざらつきなどでしょうか。

プロシージャルにおけるノイズは非常に重要で、SDならプロシージャルマテリアルの起点、ディテール作成など様々な分野で活躍します。
これらのノイズは完全に不規則なものではなく、ある程度の規則性を持ったランダムな画像になります。
ランダムなのに規則性とはこれいかに?という疑問もあるかもしれませんが、Perlin Noiseなどは特にわかりやすいのではないかと思います。

f:id:monsho:20180317010737p:plain

白と黒を凹凸と考えると、凹凸の場所自体に規則性はないものの、凹凸への変化は滑らかです。
SDのノイズのほとんどは規則性を持ったランダムノイズなので、タイリングも正しく行われますし、それらを如何様にブレンドしてもタイリングの原則は確保されるという便利な代物です。

しかし、これらのノイズ画像は2Dの画像ですので、平面ではその恩恵を受けられますが、3Dモデルに適用しようとすると問題が出てきてしまうのです。

3D空間で2Dノイズを使用する

手始めに球を出してみます。UV展開は以下のようになっています。

f:id:monsho:20180317011408p:plain

これに通常のノイズ代表として、[Cells 1]を貼りつけてみましょう。

f:id:monsho:20180317011553p:plain

2Dビューポートを見ると規則性のあるランダムになっていることがわかりますね。
しかし3Dビューポートは一律にランダムが適用されているように見えません。
中心部の胴体部分はノイズが横に伸びているように見えますし、球の頭頂部などはひどい有様です。

f:id:monsho:20180317011835p:plain

これを避ける方法として Tri-planar で貼りつける方法もあります。
Fill Layer のプロパティで Projection の項目を Tri-planar projection を選びます。

f:id:monsho:20180317012438p:plain

結果はこのようになります。

f:id:monsho:20180317012605p:plain

一見するとうまくいっているように見えますが、中心付近からY字型にラインが入っているように見えませんか?
これは Tri-planar の特徴です。

UVマップでのテクスチャ貼りつけは、1枚のテクスチャで球を包み込むような形になりますが、Tri-planar はXYZそれぞれの軸に垂直に6枚のテクスチャを貼りつけるようにします。
それぞれの軸に向いた面に対しては正しく貼りつけられるのですが、中間部分(斜め45度向き)では複数軸から貼りつけた内容をブレンドすることになります。
上の画像のY字型のラインはまさにこのブレンドされている部分です。
Tri-planar はある程度のクオリティは確保してくれるので使い物にならないわけではないのですが、連続性が微妙な部分が出てきてしまうのは避けられません。

3Dノイズを使用する

3Dノイズは2D空間にしか適用されなかったノイズを3D空間に拡張したものです。
つまり、奥行き方向にも連続性を持ったランダムが適用されるというわけです。

SPではシェルフ内の [Procedurals] カテゴリにまとめられています。

f:id:monsho:20180317015022p:plain

これをFill Layerに適用してみましょう。

f:id:monsho:20180317015115p:plain

Tri-planar の時と同じ場所をスクリーンショット撮影しているのですが、Y字のラインは見当たりませんね。
これは3Dノイズが3次元的な連続性を持っているからであり、連続性を持った面に対して連続性持ったノイズを提供してくれているのです。

ただし1点だけ注意を。
3Dノイズを使用する場合、ノイズの参照データとして Position Map が必要になります。
こいつはちゃんとベイクするようにしましょう。
SDで使う場合もメッシュを読み込んでその Position Map を生成しないと役に立ちません。