金属の質感を作る場合、ただ単にMetallicを設定しただけだと金属らしく見せることができません。やはりMetallicだけではなく、Basecolor、Normal、Roughnessを適切に作っていく必要があります。
今回の記事では鉄の質感に焦点を当てて、Substance 3D Painterでどのように質感を作っていくとらしく見えるのかを説明します。あくまでも自分のやり方なので、参考程度に読んでいただけると幸いです。鉄と題名には書きましたが、金属っぽさという意味では汎用的な工程になりうるかなと思います。
今回は作例ファイル(Substance3DPainterのプロジェクトファイル)を用意しましたので以下からダウンロードしていただけます。
金属反射
PBRでは金属反射をグレースケールのMetallicマップとして扱います。1.0(白)が金属、0(黒)で非金属です。中間値も設定できるのですが、解釈によっては0か1であるべきという説と、0.5など中間値でも構わないという説があります。個人的には中間値をとってもいいのかなと思いますが、使う先(ゲームエンジンやレンダラー)のレギュレーションに合わせましょう。
試しにFilllayerを用意し、Metallicを1にします。
これでPBR上の解釈では金属としての反射を持つことになります。この状態でRoughnessを0にすると、鏡面金属のような表現になり背景のHDRIが反射しています。
しかし、この状態では金属らしいとはあまり思えないかもしれません。
金属らしく見せるためには、素材感を感じさせる必要があります。硬そう、重そうという感覚です。たとえば、鉛とアルミニウムを並べてみた時、おそらく持たなくてもどちらが重いか目から伝わってくると思います。(合っているかどうかは別として)
この素材感は、反射、素材についている傷、色などから判断しています。特に金属表面の傷(微細な傷も含む)からはかなり素材感を判断しているのではと思います。素材についた傷の状態から硬さ(からくる重さも)を無意識に想像しているようです。そのため重そうな金属、硬そうな金属というのは「見た目」として表現が可能ということになります。
ハードエッジを持っているモデルの場合、高度に工業的に加工された状態を想起させるため、やや素材感を感じさせるのが難しい場合があります。作例ではハードエッジをもった立方体ですが、形状による素材感の重要性も感じてもらえたらと思います。
基本的な金属質感の作り方の工程
「見た目」から素材感を感じさせるために、主には金属表面の傷と傷にまつわる汚れを作っていく行程になります。(傷や汚れの無い金属はどう表現するのかという点については、別途記事にしたいと思います)
参照用のレイヤーを作る
ここではアンカーポイントによる参照をやりやすくするために、User0チャンネルを使用します。TEXTURE SET SETTINGSからChannelsの+アイコンをクリック→ドロップダウンリストの一番下のUser Channels→User0を選択してチャンネルを有効にしてください。
レイヤーリストの一番したにFillLayerを追加して、referenceという名前にします。Fillを追加しGrunge Dirt Scratchedを選択します。
※レイヤー名などは識別しやすければなんでも構いません
さらにreferenceレイヤーにアンカーポイントを追加して、名前をreferenceにしておきます。
これで、User0チャンネルからアンカーポイントを通じて複数個所から参照しやすくなります。
表面質感を表現するNormalを作成する
FillLayerを一つ追加して名前をbase_metalにしておきます。Normalにnormalジェネレーターを追加します。normalジェネレーターはnormalマップを簡単に作れるように作成したジェネレーターです。使わなくてもできますが、画像から楽にnormalマップを作成できます。以下からダウンロードできます。
ダウンロードしたsbsarファイルをASSETペインにドラッグアンドドロップするとインポートできます。インポート先は任意で構いません(もし継続的に使用されるならyour Assetにインポートするとどのプロジェクトからでも使えるようになります)
normalジェネレーターのGrayscale input→ANCHOR POINTタブ→refarenceを選択して、Referenced channelをUser0に変更します。
これで先ほど、referenceレイヤーのUser0に設定したGrange Dirt Dcratchedを参照し、Normal化できます。normalジェネレーターのintensityパラメータを0.2程度にしてNormal量を調整しておきます。
Normalによる細かな陰影が入ったことで素材感が感じられるようになり、金属らしさが増したと思います。しかし、まだ鉄のような重さは感じにくいかもしれません。
Roughnessを調整する
今度はRoughnessで反射具合を調整して、より鉄のように感じる質感を目指しましょう。
base_metalレイヤーのRoughnessチャンネル→ANCHOR POINTタブ→refarenceを選択して、Referenced channelをUser0に変更します。さらにLevelを画像のような状態にします。
Normalの元になっている画像を参照しているので、Normalの陰影に沿って、やや鈍い反射になったと思います。徐々に重量感を感じてきているでしょうか。
この後Normalを参照したいので、base_metalレイヤーにアンカーポイントを設置し、normalという名前にしておきます。
汚れを作る
Filllayerをひとつ追加しdirtという名前にしておきます。鉄の表現というよりは、汚れの表現になりますが、素材を素材らしく見せるための演出道具としての汚れは表現上非常に重要です。dirtレイヤーでは鉄らしい汚れを作ってきます。
金属に限りませんが、汚れは閉塞された部分に溜まることが多いです。つまり穴のような場所に溜まりやすく、触れやすい平坦な部分には溜まりにくいと思います。そのためNormalの凹の中に汚れがあると、よりらしく表現ができると思います。そのためにAmbient Occulusionマップを元に動作するambientOcculusionジェネレーターを使います。
dirtレイヤーにBlackMaskを追加し、マスクを選択してAdd generator→ambientOcculusionジェネレーターを選択し追加します。
Ambiento OcculusionジェネレーターのパラメータのUse Micro DetailsをTureにし、Micro Normalでnormalアンカーポイントを参照し、Refarenced ChannelをNormanlにします。
これでAmbiento Occulusionジェネレーターはbase_matalレイヤーのNormalに基づいて計算されるようになります。Ambiento Occulusionジェネレーターの効果量を調整するために、GlobalBalanceを0.2程度にしておきます。
dirtレイヤーのBase colorを
373329
くらいの色(暗めの黄土色っぽい感じ)に設定します。汚れの色は適宜調整してみてください。これでNormalの凹に部分に汚れが入り込んだような表現が得られると思います。よりらしい見た目になってきているでしょうか。
さらに、dirtレイヤーのRoughnessチャンネルは使わないのでOFFにしておきます。(Normalチャンネル、User0チャンネルもOFFにしていますが、本記事の内容には特に関係ないので任意で構いません)
金属色を調整する
ある程度鉄らしくは見えてきていますが、まだ重量感が不足しているように感じます。これはおそらく色からくる印象だと思われるので、base_metalレイヤーにて表面色をより細かく調整していきましょう。
base_metalレイヤーのBasecolorチャンネルにFractal Sum Baseを追加します。
さらにAdd FilterでGradientフィルターを追加し、color1、Color2、Color3の色をそれぞれ
4D5054
61666D
868B92
ぐらいにします。(やや青みがかった灰色の階調です)
Gradientフィルターは元になっている画像の階調域に設定した色を反映するフィルターなので、Fractal Sum Baseの階調域に先ほど設定した色がつくことになります。これで、やや鈍い色がついたため、より重量感を感じられるようになったのではないかと思います。
まとめ
鉄の質感をつくる基本的な工程について紹介しました。Normalの元になっている画像やNormal量を変更すると印象がかわり、どのような画像を使うとどのような表現ができるのかわかりやすいですので、ぜひ試してみて下さい。かなり初歩的な工程なので、まだまだ詰めるべき部分はいろいろあります。
しかしながら、ある程度少ないレイヤー数でそれなり金属を表現しえる可能性を感じてもらえたのではと思います。特にNormalをアンカーポイント参照して陰影を活用するテクニックは金属に限らず、Substance3DPainterでの常套手段になりますので、ぜひ覚えておいてほしいと思います。