Z-Notes

主にZBrush、3dsMax、3d-Coatなどの3DCGアプリに関する覚え書き。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ディスプレースメント・マップのワークフロー(翻訳)

むしろ法線マップ関連の解説のほうが需要があるんだろうか?

以前どこかの法線マップ記事を翻訳したんだけど、あまりにも長文、専門的過ぎて途中で挫折、最近改めて続きを翻訳しようと思ったがそのテキストファイルを紛失してしまった。

あちこち探しまわっていると、やったことも覚えていないような古い翻訳文のテキストファイルがいくつも出てきましたが、目的のファイルは結局まだ見つかっていませんw。

そういえばZBrushにはベクターディスプレースメント・マップ機能もありますね。

ここの画像にある黒人ミュージシャンのモデルはこのサイトを探せばどこかにダウンロードリンクがあります(ZTL形式)。

超ハイポリゴンでファイルサイズも大きいので注意。ここまで来るともう参考にするというようなレベルではないですね。どうなってるのかわかりませんw。


例によってかなり適当な翻訳なのであまり信用しないで参考程度にして下さい。floating-point displacemetは一般的な日本語訳がわからなかったのでとりあえず浮動小数点型ディスプレースメントと訳しました。

また手順の解説は自分に関係ありそうなものだけ翻訳しました。



正確なディスプレースメントのワークフロー

ZBrush、MudboxからV-Ray(Maya、3dsMax、Cinema4D)、Arnold(Maya)へ。



はじめに

このチュートリアルでは正確なディスプレースメントマップを作成し、ZBrushやMudboxからV-Ray for Maya、V-Ray for 3dsMax、V-Ray for Cinema 4D、Arnold for Maya(MtoA)にそれを適用するためのプロセスを詳しく解説して行こうと思います。

ディスプレースメントマップやそれがどのような働きをするかに関してひどく曖昧で誤った情報をよく見かけます。

アーチストたちがディスプレースメントマップをローポリモデルにロードして、そのハイレゾモデルと同じか期待する結果に近づけようと強度やデプスの値をあれこれと調整するのを目にすることもあるでしょう。

しかし、正しいワークフローを用いれば、設定をいじったり「もうこれで十分近づいた」と妥協する必要も無く可能な限り正確にハイレゾモデルと一致した状態から正しく機能させられるでしょう。


まず最初に、フローティング-ポイント(浮動小数点型)・ディスプレースメント・マップがどのように働くか、背後にあるその基本的な概念のいくつかと、あなたが正しい結果を得ているかを確認する方法について解説していきます。

次にアーチストたちがしばしば遭遇するよくある落とし穴とその回避方法のいくつかを解説します。

そして最後にあなたが使用するソフトで正確にディスプレースメント・マップを機能させるための段階的な手順を提供します。


すでに基本的なコンセプトを理解していて段階的な技術的手順のみが必要な場合はここをクリックしてスキップして下さい。



浮動小数点型ディスプレースメント・マップの働き


ディスプレースメント・マッピングは、ハイレゾモデルの情報を取得し、それをローレゾモデルに適用できるようイメージマップにベイクする技術です。

このマップはその後、あなたが使用するレンダーによって可能な限り正確なハイレゾモデルのディテールを再構成します。

適切に作成された浮動小数点型ディスプレースメント・マップは最初からローレゾのジオメトリを非常に正確にハイレゾモデルに一致させます。


それは正しく作成された浮動小数点型ディスプレースメント・マップが非常に論理的な方法(ディスプレースメント・マップのピクセル値が使用する3Dソフトのシーン単位(スケール単位)に直接対応する)で働くからです。

つまり「1.0」のピクセル値は「1.0」のシーン単位によってメッシュを変位させます。

「0.5」のピクセル値は「0.5」のシーン単位でメッシュを変位させ、「0.0」のピクセル値ではメッシュを全く変位させません。全てがとても論理的です。

またディスプレースメント・マップのピクセル値は浮動小数点で保存されるため、「1.0」を大きく超えるピクセル値や「0.0」をずっと下回るマイナスのピクセル値も持つことが出来ます。

これは正確にディスプレースメント情報を保存する優れた方法です。



簡単なテストシーンを使用することでこれを図説することができます。

・垂直軸の異なる位置にある3つの平面、それぞれただひとつのポリゴンで作られ、それぞれに平面UVマップが付けられています。

・一番上の平面は垂直軸で「35.0」単位のところにあります。

・中央の平面は垂直軸の原点(0.0)にあります。

・一番下の平面は垂直軸で「-20」単位のところにあります。


図01。3つの理想的な平面が垂直軸上の異なる位置に置かれています。これを自分でも試してみたいなら複数のフォーマットで作られたこのテストシーンをダウンロードして下さい。


ZBrushやMudboxのようなソフトにこのシーンをインポートし、中央の平面を数回サブディバイドしてその上に簡単なスカルプトを行います。

最初は平面の中央にあるポイントを上にある平面に接するまで引き伸ばし、次に2つのポイントを下の平面に接するまで引き伸ばします。

また表面上に何か追加のディテールを書き加えます。

図02。上下の平面に届くようにスカルプトが加えられた中央の平面。


終わったら(下に記載した手順を使って)中央の平面のディスプレースメント・マップの作成に進むことが出来ます。

これで「Nuke」のような浮動小数点型の画像がネイティブで機能するソフトでこのマップを開いて調べることが出来るようになります。


「Nuke」のビュワーでは作成されたこのディスプレースメント・マップをテストすることが出来ます。

メッシュを一番上の平面に接するように引き上げた部分に相当する画像の中央にマウスカーソルを置くと、「Nuke」は垂直軸にそって置かれた一番上の平面の正確な位置である「35.0」あたりのピクセル値を示します。

またメッシュを下に引き伸ばした2つのポイントのどちらかに対応する部分あたる場所辺りにマウスカーソルを置くと、おおよそ「-20」のピクセル値を示します。

これはまさに垂直軸にそって一番下にある平面の位置でもあります。


図03。

「Nuke」ビュワーでディスプレースメント・マップの各点にマウスカーソルを置くとそれらのピクセル値がわかります。

ここではディスプレースメントに保存するための情報が一つのチャンネルしか必要無いため赤のチャンネルが保存されて赤い画像になります。

また「0.0」以下の負のピクセル値はモニターでは黒になり直接見ることが出来ません。


視覚的な観点からはそのままの状態でディスプレースメント・マップを直接見ることは出来ないでしょうが、そこに含まれるデータは確かにそこに存在し、

実際すべてのディスプレイスメント・マップがディスプレイスメント情報を保存するのに使われる画像です。


垂直軸にそって上下に置かれた平面がどの高さに置かれているかをあらかじめ知っていれば、それが正しく作成されたディスプレイスメント・マップだと推測することができます。

また実際に(下で記述した手順で使う)3Dソフトで中央の平面にディスプレイスメント・マップを適用してレンダリングした時に、

スカルプトソフトで一番上の平面に接触させた中央部分は上に35.0単位、一番下の平面に接触させた離れた位置にある2つのポイントは下に-20.0単位、残りのディテールも正しくディスプレイスされて正確に同じ結果となります。

ディスプレイスメント量、「Shift」、「Middle point」の設定無しでは、設定をいじくり回す必要がありました。これが正しく正確なメッシュのディスプレイスメントの始め方です。


図04。

ディスプレイスメント・マップが中央の平面に適用され、スカルプトソフトで行った変形と正確に一致してレンダリングされる。


極端に大きな値(上方に35.0単位、下方に-20単位)を使ったこの例であっても十分正確な結果になります。

また複数のUVシームがあるもっと複雑なオブジェクトにディスプレイスメントを適用した別の例では、シームが横切っていても正しい結果が得られます。

球体の横にあるボックスはすべての面が5単位の大きさで、正しいディスプレースメント量を視覚的に確認する指標として役立っています。



図05。

より複雑なオブジェクトに適用されたディスプレースメント・マップ、複数のUVシーム上にディスプレースメントがあっても問題はない。


最後に、下は実際のプロダクションで行った浮動小数点型ディスプレースメント・マッピングの設定例です。

右に見えるディテールはノーマルマップやバンプマップを使っていない純粋にディスプレースメント・マップマップからのもので、オリジナルのスカルプトのハイレゾ・モデルと一致しています。


図06。

左、ディスプレースメント・マップが適用されていないベースメッシュ。

右、ディスプレースメント・マップが適用されたベースメッシュ。




よくある落とし穴とその回避策。


UVの重要性。

ディスプレースメント・マップには一般的に、オブジェクトの適切なUVレイアウトを必要とします。

生成されたマップでエラーの原因となるUVの重なりがあってはいけません。

また特にZBrushでは(いくつかの自動UV作成機能で行われる)UVシートのエッジ上にUVが載っている状態を嫌うので、UVを常にUVシートのほんの少し内側に置くようにするのを忘れないで下さい。



ベースメッシュの再確認。


高いサブディビジョン・レベルでスカルプトする時に覚えておくことは、低いサブディビジョンの頂点位置がしばしば影響を受けることです。

なのでスカルプトソフトにインポートされたローレゾ・メッシュはもはやディスプレースメント・マップを作成するのに使われたローレゾ・メッシュとは完全に同じものとは言えないかもしれません。

ディスプレースメント・マップを作成したローレゾ・メッシュとディスプレースメント・マップを適用するメッシュが同じものであるか常に再確認して下さい。




浮動小数点型ディスプレースメント・マップはスケールに依存する。


浮動小数点型ディスプレースメント・マップのピクセル値はシーンの単位と直接対応するので、オブジェクトのスケールは正確なディスプレースメント量を生成するのに重要な要素となります。

すでにディスプレースメント・マップが生成された後で、ローレゾ・メッシュを拡大あるいは縮小すると、ディスプレースメント・マップは新たなスケールのベースメッシュに対して正確な強度値を持たないでしょう。

そのマップは新たなオブジェクトのスケールで再度作成するか、V-Rayでは「Displacement Amount」設定で、Arnoldではディスプレースメントの「Height」設定で相殺するかのどちらかが必要になるでしょう。

例えばオブジェクトを2倍の大きさにした場合、それを相殺するのに「Displacement Amount」を二倍に増加した設定にする必要があります。




浮動小数点型と整数型


下に記述した手順では32bitの浮動小数点型ディスプレースメント・マップについて解説していますが、ドライブスペースを節約するといったような特定の配慮のためにプロダクションの設定では16bitの浮動小数点(ハーフ・フロート)を使うことも出来ます。

これでも事実上はまだ理想的な結果が得られます。しかし16bitの整数型ではなく、確実に16bitの浮動小数点型を使って画像を保存することが重要です。

整数型はこのワークフローでは正しく機能せず、「displacement amount」と「Shift」の全てを機能させるために大混乱する事になるでしょう。

これは整数型では浮動小数点型を使って彫り込まれたエリアを表現する負のピクセル値をサポートしないためです。

どちらを選んだらよいかわからない場合は、32bit浮動小数点型ディスプレイスメント・マップを使った下に記述した手順に従って下さい。




信頼できるディスプレースメントは限られている


理想的な世界では浮動小数点型ディスプレースメント・マップは常にオリジナルのハイレゾ・メッシュと全く違わない正しく、正確な結果になります。

残念ながら3Dソフトウェアはほとんど理想的とは言えず、同様のタスクを遂行するのにそれぞれのソフトウェアが独自の方法を採用する傾向にあります。

時にこのディスプレースメントの精度に微妙な変化をもたらす原因となるところがスムージングアルゴリズムの課題です。

ソフトウェアの中にはカトマル-クラークのようなアルゴリズムでメッシュのスムージングを行うものもあれば、他のソフトウェアではそれとは全く異なる独自の方法を使います。

全てのソフトウェアが同じアルゴリズム(例えばピクサーのオープンサブデビのような - ソフトの会社にこれを実装するよう促すEメールを送りましょう!。)を使うことに賛同できる日が来るまでは

ハイレゾ・メッシュとディスプレースされたローレゾ・メッシュ間にわずかな違いがある可能性があります。

これらの変化は大抵ごくわずかで、ベースメッシュが非常に少ないポリゴンではないかどうかの問題ほどでは無いというのは救いです。

基本的にディスプレースメントが万能であるとは期待しないで下さい。

単純なポリゴンの立方体をディスプレースメント・マップだけでリンゴに変えようとして問題にぶつかっても驚くことではありません。

ローポリ・オブジェクトには適切な形状とポリゴン解像度を与えてから、ディスプレースメントにディテールを持たせましょう。





ディスプレースメントの手順


浮動小数点型ディスプレースメント・マップがどのように働くか、そこから予測されるものについての知識は得られたら、あとは3Dソフトでそれらを正しく作成し、適用するために正しいボタンを押すだけです。

以下にあなたが選んだ主要なスカルプトソフトからどのように浮動小数点型ディスプレースメント・マップを生成し、それをどのように任意のレンダラーに適用するかの段階的な手順を詳しく説明しています。


下のワークフローの設定はどれもが注意深くテストを行った結果です。設定のどれかについて興味があれば各段階の横にある「(?)」をクリックすればその設定が何をしているか何故そのような設定をするか説明が表示されます。




使用するスカルプトソフトを選択する


ZBrush(Multi Map Exporter使用):(プルダウンメニューには他に「ZBrush(Displacemantサブパレット)」と「MudBox」がありますが、内容がほぼ同じ又は持っていないと言う理由で一つだけ翻訳しました。)


01. 複数のサブディビジョン・レベルを持ったハイレゾ・モデルを開くかインポートします。

02. 他のソフトからハイレゾ・モデルをインポートした場合は、「Tool」パレットで「Geometry」を展開し「Reconstruct Subdiv」ボタンを必要な最低サブディビジョン・レベルになるまでクリックしてより低いサブディビジョン・レベルを再構築します。

03. 「ZPlugin」パレットで「Multi Map Exporter」サブパレットを展開し、「Displacement」ボタンがハイライト表示(オンの状態)されているか確認します。

04. 「Map Size」スライダーでマップ解像度を必要とする最適なものに設定します(2048かそれ以上を推奨します)。

05. 「Flip V」をオンにします。(?):「Flip V」設定。これをオンに設定すると「Maya」や「Max」のようなソフトと比較してZBrushが内部で扱うUVマップが水平軸に対して反転しているのを相殺します。

06. 「Export Options」ボタンをクリックすると追加のマップオプションが現れます。

07. 「SubDiv Level」スライダーで必要なローレゾのベースメッシュとなるようにサブデビ・レベルを設定します。

08. 「Adaptive」をオフに設定します。(?):「Adaptive」設定。これをオンにするとより高い品質のディスプレースメント・マップを生成するはずですが、

実験した結果、信頼性がなく高い解像度ではほとんどの場合に必要ない事がわかりました。

09. 「DPSubPix」を「4」に設定する。(?):「DPSubPix」設定。この設定はオブジェクトのために作られたディスプレースメント・マップマップの制度を決定します。

より高い値でより高い品質のディスプレースメント・マップが作成されることになり、作成する時間がより長くなります。

ハイレゾ・モデルが非常に高いポリゴン数(1600万以上)またはディスプレースメント・マップのサイズが低い(2048以下)の場合は、「2」のような低い値に設定することで作成時間を短くすることが出来ます。

10. 「Smooth UV」をオフに設定する。(?):「Smooth UV」設定。これをオフに設定するとローレゾ・メッシュのUVスムージングを無効にします。

ここで使用するレンダラーではディスプレースメントのディテールをマッピングする精度を確保するのにこの設定が適しています。

11. 「Mid」を「0」に設定。(?):「Mid」設定。これを「0」に設定すると、ディスプレイスが適用されていない部分を正確な浮動小数点型ディスプレースメントマップに必要な中間地点とするためにディスプレイス・マップにピクセル値「0.0」を割り当てます。

12. 「3 Channels」をオフに設定。(?):「3 Channels」設定。この設定をオフにすると、生成されたディスプレースメントマップの「赤」チャンネルのみを使ったディスプレースメント情報を保存します。

32bitディスプレースメントで保存するのに必要なのはひとつのチャンネルだけなので、この設定によって必要な情報を失うこと無くファイルサイズを若干減少させることが出来ます。

13. 「32 Bit」と「EXR」をオンにする。(?):「32Bit」設定。この設定をオンにすると、32ビットの浮動小数点型ディスプレースメントマップを有効にします。

14. 「Scale」を「1」に設定。(?):「Scale」設定。この設定は生成されたディスプレースメントマップのピクセル値のスケールを定義します。

正確に1:1で一致させる必要があるのでこの設定はディフォルトの「1」のままにしておきます。

15. 上の設定を確認するためのスクリーンショットがここにあります。

16. 「Create All Maps」ボタンをクリックし、ファイル名とマップを保存するディレクトリを選択します。

(ファイル形式が「TIF」になっていても気にする必要はありません。「EXR」ボタンがオンになっているので実際には「EXR」形式で保存しています。)

17. 「Save」ボタンをクリックしてディスプレースメントマップを作成します。

18. これでディスプレースメントマップを使う準備が出来ました!


ZBrushと「Multimap Exporter」プラグインについての注意:

ZBrush 4R6以前のバージョンでは「Multimap Exporter」プラグインは「Maya」や「3dsMax」で問題になる可能性のある32bitTIFF形式でしかインポートできません。

なのでもし4R6バージョン以前の「Multimap Exporter」プラグインを使う場合は、「Maya」や「3dsMax」で使用する前に「Nuke」や「Photoshop」でその作成された「32bitTIFF」を「EXR」に変換する必要があるでしょう。

「Photoshop」で「EXR」に変換する場合は、問題の原因となる可能性もある「グレースケール」ではなく「RGBカラー」になっているかどうか「イメージ」>「モード」で確認して下さい。




レンダラーを選択する。


V-Ray for 3ds Max(プルダウンメニューには他にも選択肢がありますが、所有している3dsMaxを選んで翻訳しました。V-Rayは持っていないのでV-Ray関連の翻訳は自信ありません)。


01. ローレゾ・メッシュをインポートします。(そのローレゾ・メッシュがディスプレースメントマップを生成したのと全く同じものである事を再度確認して下さい。)

02. メッシュを選択し、「修正」パネルで「UVWアンラップ」モディファイヤをオブジェクトに追加します。

03. 「UVを編集」ロールアウトで「UVエディタを開く」ボタンをクリックします。

04. 「UVを編集」ウィンドウで頂点選択モードを選択しUV全体を選択します(Ctrl+A)。

次に「ツール」>「ブレーク」で全てのUVエッジを分離します。「UVを編集」ウィンドウを閉じます。

(?)ブレークUVの設定。これは3dsMaxがUVのスムージングを防ぐUV機能を持っていないのでその代用です。

05. 「UVWアンラップ」モディファイヤの上に「ターボスムーズ」モディファイヤを追加します。

06. 「反復」を「0」(またはビューポートで求める滑らかさに見える値)に設定します。

07. 「レンダリング反復」にチェックを入れ、その値を「3」に設定します。

(?)これを「3」に設定するとメッシュはできるだけサブディビジョンサーフェースに近い効果を出し、これによってエッジのアーティファクトが出ないようにさせます。

ローレゾメッシュが非常に高いポリゴン数である場合は、この値を「2」にすることでそれを避ける事が出来ます。

08. 「V-Ray DisplacemantMod」モディファイヤをオブジェクトに追加します。

09. 「3D Mapping」にチェックを入れます。

10. 「None」ボタンをクリックし、「Bitmap」を「マテリアル・マップ」ブラウザから選択します。

11. ディスプレースメントマップのあるディレクトリを開き、それを選択します。

「Gamma」グループの「Override」にチェックを入れ、その値が「1.0」であることを確認して「OK」をクリックします。

12. 「Open EXR」の設定ダイアログで「Enable Color Correction」がチェックされていないままであることを確認して「OK」をクリックします。

13. 「Edge Length」はまず「4.0」の設定から始めて必要に応じて(よりレンダリング時間を使う)より高品質なディスプレースメントではより低い値を設定します。

14. 「Smooth UVs」と「Smooth UVs At Borders」のチェックを外します。

(?)「Smooth UVs」設定。これのチェックを外す設定はローレゾメッシュのUVのスムージングを無効にします。

これはZBrushやMudboxでディスプレースメントマップを作成するように設定した場合に適しています。

15. 「Keep Continuity」にチェックを入れます。(?):「Keep Continuity」設定。これにチェックをするとV-Rayはディスプレイスされたポリゴンエッジを分離せずに接続を維持します。

16. 「Texmap Min」と「Texmap Max」には作成されたディスプレースメント・マップで見られる最も大きな正のピクセル値と負のピクセル値以上の値を設定します。

この値は「Nuke」ではここで見られるように「Curves Tool」ノードの「Max Luma Pixel」モードで自動的に判別できます。

「Nuke」が使えない場合はこれらの値をMinで「-1.0」、Maxで「1.0」の値から始めていって試してみることが出来ます。

次にディスプレースメントの極端に高いところと低いところでクリッピングが生じているのに気付いたらそれらの値を大きくしていきます。

(?):「TexMap Min」と「TexMap Max」設定。この値はディスプレースメントの最大値を設定します。なのでクリッピングせずに全てのディスプレイスされたディテールを再現するのに十分大きな値を設定するのが理想です。

これらの設定を必要以上に高く設定するとレンダリングに時間がかかる可能性があります。

17. その他の設定はすべてディフォルトのままにしておきます。

ここに上記の設定を確認するためのスクリーンショットがあります。

18. 3dsMaxの「レンダリング設定ウィンドウを開き、「V-Ray」タブで「Global Switches」ロールアウトを開きます。

「Displacement」の隣のチェックボックスがチェックされているか確認します。

19. すべての設定が終わりました!レンダリングして確かめて下さい。



結びとお礼

あなたがディスプレースメント・マッピングを理解するお役に立てればと思います。もし何か問題が起こったり、理解するのが難しかったり、あるいはこれらのワークフローを改善する良い方法があれば遠慮なくわたしに連絡して下さい。

快くV-Ray for C4Dの手順を提供してくれたRich Nosworth、これらの手順をテストするのを手伝ってくれたScott Dentonには特に感謝します。


翻訳以上



コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://momonchan574.blog65.fc2.com/tb.php/732-0d13377e
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。