初心者でもわかりやすい!!!Zbrushでディスプレイスメントマップを作成してMayaで適用する方法まとめ。

はじめに。

こんにちはマサ@annoonblogです。今回はZbrushでのディスプレイスメントマップの作成とMayaアーノルドレンダラーでの適用方法をまとめたいと思います。ディスプレイスメントマップってなんとなく工程が複雑だなと思っている方に向けてわかりやすくひとつひとつ進めていくので安心してくださいね!!それでは素晴らしいディテールをゲットする為にに早速いってみましょう!!

1.Mayaでベースとなるモデルを作成し、UV展開する

まずはモデルを作成します。今回はシンプルにシリンダーの形を作りました。

次に UV展開を行います。Zbrushでディスプレイスメントマップを作成する際、書き出されるマップはテクスチャと同様にモデルのUVに基づいたものになる為、忘れずにUV展開をしましょう。今回はこんな感じで展開しました。

Zbrushで読み込む為にobj形式で書き出します。

ここまでのおさらい・Mayaでベースモデルを作る
・UV展開をする
・obj形式で書き出す

2.Zbrushに読み込む

Toolにあるinportからmayaで作成したobjを読み込みましょう。

3.Morph targetで最初の形状を保存する

ディスプレイスメントマップのワークフローはローポリのモデル(今回の場合はmayaで作成したシリンダー)とハイポリのモデル(今回はZbrushでスカルプトしたもの)の差から白黒の画像を作成し、その画像の情報からローポリのモデルにハイポリモデルの凹凸の形状を再現するといったフローになります。

Zbrushで細分化(divide)を行い、高いレベルからDivid1に戻すとオリジナルの形状が少し違う形に変化してしまう事があります。そこで、正確なディスプレイスメントマップを作成する為にStoreMTの機能を使ってSDiv1の形状をオリジナルと一致する様にします。

オリジナルの形状

Divideした後Divid1に戻した形状

やり方はとても簡単で、mayaからローポリモデルをインポートした後Store MTボタンをクリックするだけです。これで元の形状が記憶されました。

StoreMTが終わったらスカルプトする為にCtrl + dでモデルを細分化しましょう。今回はSDiv7まで細分化しました。

細分化が終わったら好きな様にスカルプトを行います。今回はディスプレイスメントの結果を検証する為にシマシマの模様と薄いヒビをいれて、表面をザラザラにしてみました。

ここまでのおさらい・ZbrushにMayaで作成したモデルをインポートする(Tool→Import)
・Store MTでオリジナルの形状を保存する
・Ctrl+Dで細分化してスカルプトを行う

4.ディスプレイスメントマップの書き出し

スカルプトが終わったらいよいよディスプレイスメントマップの作成になります。先述の通りSDiv7からSDiv1に戻すとオリジナルの形状が微妙に変わってしまうのでここでMorph Targetのswitchボタンを押して形状を元に戻します。

これでSDiv1がMayaで作ったローポリモデル、SDiv7がZbrushでスカルプトしたハイポリモデルという状態になりました。ディスプレイスメントマップはローポリとハイポリの差を元に作られるのでこれで書き出す準備は完了です。

Zplugin→Multi Map Exporterと進みクリックしましょう。今回の書き出しは最終的に下記の様な設定で行いました。解像度等は任意で変更して下さい。

Map Size 書き出されるDisplacement mapの解像度。
FlipV mayaではUVの向きが逆さまなのでオンにする。
SubDiv level ローポリモデルに適用したいハイポリモデルのレベル。今回は7です。
Adaptive オンにするとより高精細なmapが書き出されると言われているが、書き出し時間がかなり長くなる上に結果も大差ないので基本的にオフで問題ないです。
Smooth UV アーノルドでの設定と合わせる為に今回はオフにしました。
3 Channels 32bit Displacement mapはredチャンネルの情報があれば十分なのでオフにしました。これによって少しだけファイルサイズを軽減できます。
Scale pixel valueの大きさを決定する。基本的に1のままで問題ありません。
Mid 0の時は背景が黒(value0) になり、0.5にすると灰色(value0.5)で書き出される。0にする。
32bit exr 32 bit exrにする事によって通常クランプされてしまう様な0以下や1以上の数値を保存する事ができ、ディティールの再現の質が上がるので必ずオンにしましょう。

これでディスプレイスメントマップ書き出しの設定は終わりです。Create All Mapsを押しましょう!!今回はこの様なmapが書き出されました。

midの値を0に設定したDisplacement map
midの値を0.5に設定したDisplacement map(参考)
ここまでのおさらい・Morph targetのswitchボタンでSDiv1の形状をオリジナルに一致させる
・Multi map exporterでDisplacement mapの設定を行う
・Create All mapsを押してDisplacement mapを書き出す

5.Mayaで書き出したディスプレイスメントマップを読み込んで適用する

さて、ついに最終章です!!Mayaでベースのローポリモデルに書き出されたDIsplacement mapを適用してディテールを再現してみましょう。最終確認としてMayaで作成したローポリモデルとZbrushで作成したハイポリモデルのUVが同じである事を必ず確認してください。

Hypershadeを開き、aiSrtanderdSurfaceを作成しましょう。

StandardSurfaceSGノードが出来上がるのでDisplacement matの右の部分(赤い注釈)をクリックします。

続いてFileをクリックします。

するとFileノードが出来上がるのでImage nameのところからZbrushで書き出したDisplacement mapを選択します。

Displacement mapのかかり具合はdisplacementShaderノードのscaleの値で調整できます。

早速レンダリングしてみましょう!!

ローポリモデルにハイポリモデルのディティールが再現されました!!!しかしよく見てみると輪郭部分の凹凸が再現されていない上に、エッジ部分にアンビエントオクルージョンの様な黒い影が出てしまっています。

実はこれはディスプレイスメントマップのメッシュの解像度が不足しているからなんです。そこでArnoldサブディビジョン機能を使います。
モデルを選択した状態でAttribute editorのshapeタブの中にあるArnord→Subdivisionと進みます。そこで設定を図の様に調整します。

Type catclarkに設定します。
Iterations 数値をあげる程ハイクオリティになりますが、レンダリング時間が増大するのでバランスを見ながら設定しましょう。
UV smoothing Zbrushのdisplacement map書き出し設定でオフにしたのでそれに合わせてlinearを選択してsmoothingがかからない様にします。

すぐ下にあるheightの値を調整すればモデル毎にDisplacementがかかる具合を調整できます。前述のai standard shader内のscaleの値は適用しているモデル全てのDisplacementに影響するので、個別に調整したい場合はこちらのheightの値を変更してください。

そして再度レンダリングしてみます。

今回はしっかりと輪郭部分の凹凸まで再現されています。ついにローポリモデルでハイポリモデルのディテールが表現できました。

ここまでのおさらい・ローポリモデルとハイポリモデルのUVが同じである事を確認する
・aiSrtanderdSurfaceを作成する
・StandardSurfaceSGノードにZbrushで書き出したDisplacement mapを適用する
・Arnoldサブディビジョン機能を設定して細かいディティールが再現される様に調整する

番外編

その1 ディスプレイスメントマップを適用したモデルが浮いてしまう時

せっかくなのでここからはディスプレイスメントマップに関する補足の情報をいくつか紹介させていただきます。
ここでは一枚の平面に地面のテクスチャとディスプレイスメントマップを適用して実験してみました。

平面のモデル
地面のテクスチャとディスプレイスメントマップを適用

ただの平面が見事にゴツゴツした石で覆われた地面になりました。すばらしいですね!!
しかしたまにディスプレイスメントマップを適用すると以下の図の様にモデルが元の位置から少し浮いた状態になってしまう事があります。

これはディスプレイスメントマップの背景を灰色で書き出してしまっているからなんです。Zbrushからマップを書き出す時の設定にmidという項目がありましたよね!!それがマップの背景の色を設定する機能です。ディスプレイスメントマップのワークフローでは黒=value0つまり凹凸なしとなり、そこから上の数値になるほど(白に近づくほど)押し出しが強くなります。

しかし、もう一度Zbrushに戻って書き出し直すのが少し面倒な時もありますよね。そんな時はDisplacement Attributesの中にあるScalar Zero Valueを調整します。前述のheightの項目のすぐ近くにあるパラメーターです。

デフォルトは0になっていますが、これは黒(value0)がベースになる事を意味しています。なのでここを例えば0.5に変更すると灰色がベースになるのでそれがマップの背景の灰色部分と同じ色になっていれば上記の様なモデルが浮いてしまう問題を解消する事ができます。

その2 Zbrushのでスカルプトした細かいディティールが再現されない時

もうひとつ一応頭に入れておいた方が良い情報としてBounds Paddingという項目があります。このパラメーターは自分のディスプレイスメントマップの最大値と最小値がクリッピングされない様に設定できるパラメーターです。なので例えばvalue0以下やvalue1以上となる様な情報の部分が再現されないと感じた時はそこの数値を調整する事でうまくいかなかったディティールが再現される可能性があります。覚えておくといざという時にトラブルシューティングのヒントになるかもれません。

最後に。

ディスプレイスメントマップはフローが少し複雑だと感じる方も多いと思いますが、ひとつひとつのステップは難しくないと思うのでこの機械に頭を整理してしっかりと習得してしまいましょう!!実際に映画のCG制作の現場でも多用されていますし、使わなくてはならない機会は頻繁に訪れます。この記事が少しでも皆さんの役にたてば嬉しいです。

今後も役立つ情報を発信していくのでTwitterフォロー是非よろしくお願いします!!!

関連書籍

アニメ面白ネタまとめ記事もありますので、仕事で疲れた時は楽しんでみてください!!笑

800円で見られる上級編チュートリアル

SpeedTreeチュートリアル上級編/垂れ下がったツタを作る

ブログランキング・にほんブログ村へ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です