Displacementは最近かなり手軽に使えるものになってきました。
CGでディテールのあるリアルなものを表現するには必須な項目とも言えるのではないかと思います。
このページではDisplacementとは何かのお話と、Maya,Arnoldでの使い方を紹介していきます。
使用ソフトウェアとデータ
Maya 2022.5
Arnold MtoA5.3.3.1
Model Data digital emily 2
https://vgl.ict.usc.edu/Data/DigitalEmily2/
モデルはこちらからお借りしてます。
Displacementとは
Displacementとはオブジェクトにテクスチャを張ることにより、ビューポート上のポリゴンよりもかなり高い解像度でディテルを再現することができるCGのシェーダー表現です。
Normal Map、Bump Mapはライトの影響をシェーディングに反映させるだけですが、Displacementは形状変化までできます。
上の画像は左がNormal Map、右がDisplacement Mapをアサインしている球体です。
Displacementのほうがシルエットが崩れてるのがわかるかと思います。
Displacement Mapの種類
Displacementはグレースケール(一色)のもの、Vector Dispalacementと呼ばれる3色のものの二種類があります。
この記事では一旦ベクターは置いておきます。別記事で紹介します。
グレースケールのDisplacementにも大まかに二種類あります。
それは中間値が0か0.5かというものです。
Displacementは中間値を基準にそれより明るければふくらみ、それより暗ければへこみます。
上の岩っぽいレンダー画像で使ったDisplacement画像がこちらです。
これは中間値(mid)0.5のものになります。
ディーテルを追加するときによく使われるBump Mapと同じ仕様です。
上の画像は中間値0のものです。
この画像はDigital Emilyのモデルに付属してるDisplacementマップです(ここに張るように1kに落としてjpegですが見た目はこんな感じです。)
exrの32bit Floatという形式であればマイナス値や1以上の値も格納できますのでこういった見た目の画像になります。
マイナス値の確認は通常のビューワーではできないので少しわかりにくいですが、黒く見える部分にも情報が入っています。
Nukeで確認するとこんな感じです。マイナス値が入っていることがわかります。
次の項で中間値の設定も含めた使い方を紹介します。
Maya,Arnoldでの使い方
それではMaya,Arnoldでの使い方を見ていきましょう。
今回は↑で紹介してるDigital Emilyさんを使わせていただきます。
Displacementを入れてないとこんな感じのレンダリングになります。
それでは設定しましょう。
①Displacement Shaderを作成
tabから検索してもいいですし、上記の画像の場所から呼び出すこともできます。②Shaderにつなぐ
ジオメトリにアサインしてるシェーダーのSG(Shading Engine)のDisplacement Shaderの差し込み口に刺します。Displacement Shaderを作った際にできたSGは捨てて大丈夫です。
③Displacement MapのMidの確認
Displacementのシェーダーの中間値の設定は↓の画像の通りです。
デフォルトでチェックが入っているAuto Bumpはこのまま入れておいて大丈夫です。
Auto Bumpの細かい説明はまた別記事で紹介します。
④Displacement MapをDisplacement Shaderにつなぐ
Displacement MapをHyperShadeに読み込んでOut Color RをDisplacement ShaderのDisplacementに刺します。
Out Color Rをつなぐ方法のほかにAlpha is luminaceにチェックを入れてOut Alphaでつなぐ方法もあります。
こだわりが無いのならOut Color Rでつなぐ方が見た目もシンプルですし、エラー確認もしやすいのでオススメです。
Displacement MapのテクスチャのColor Spaceの設定はRawです。Ignore Color Space File Rulesはチェックを入れておくと事故が減ります。
⑤Geometry(モデル)のSmooth設定
Displacementをかけるgeometry(モデル)にも必要な設定をします。
Arnoldタブ→Subdivisionタブで設定していきます。
パラメーターは↓で紹介します。
---------------------------------------------
Type catclarkにします。
Iterations 今回は4にしています。数字を大きくするほどDisplacementの精度は上がりますが重くなります。コストとクオリティのバランスを見ながら設定します。
UV Smoothing 今回はpin_cornersにしました。スカルプトなど自分で作成したDisplacement Mapをアサインする際は作成方法に合わせた設定が必要です。
⑥レンダリングする
ここまで設定してレンダリングするとこうなります。
ディテールが入ってるのがわかりますね!Displacementを使いこなすことでかなり表現の幅が広がるんじゃないかと思います。
SSSとの組み合わせで考えることや、今回細かく触れなかった設定などまだまだDisplacementは紹介すべき項目があります。
乞うご期待!