ディスプレースメントマップの仕組みとV-Rayでそれらを最適化する方法 ・パート1

ディスプレースメントマップの仕組みとV-Rayでそれらを最適化する方法 ・パート1

はじめに

この記事では、3dsMax用にV-Rayのディスプレイスメントの設定を最適化する方法をご紹介します。 V-Rayに関しては、互換性のある3Dアプリケーションで動作する場合を前提とします。

ディスプレイスメントマッピングは、手動でモデル化することなく、サーフェスに複雑なジオメトリを追加できる強力なツールです。 これにより、「クラシック」なポリモデリングを超越した、リアル感をモデルに加えることができます。

たとえば、数回クリックするだけで、単純な正方形を、レンガ、石膏、塑像などの彫刻が施された表面に変えることができます。

ディスプレイスメントマッピングは、手動でモデル化することなく、サーフェスに複雑なジオメトリを追加できる
リアルな外観を表現するには、色や反射だけではなく、マテリアルの立体的な表面も再現する必要があります。

まず、バンプや法線マッピングとは対照的に、ディスプレイスメントがどのように機能するかを見てみましょう。

ディスプレイスメント、バンプ、および法線マッピング

それぞれの表面には色や反射だけでなく立体構造があり、滑らかさや粗さなど、私達の目は光がその隆起や引っかき傷でどのように跳ね返るかによってテクスチャを認識します。 素材のこの本質的な特徴が、面白さとリアルさを表現します。

物質の表面を認識するにはこれがとても重要な情報なので、3Dアプリケーションでも、そのような効果を出すツールがマテリアルエディタにすばやく組み込まれました。

1つはバンプマップです。 モデルへの光の配置を考慮して表面の浮彫りを模倣し、影とハイライトを描写してテクスチャと奥行きをシミュレートします。

ただし、バンプマッピングは実際の3D構造を作成するのではなく、 実際には存在しないシミュレートされたフィーチャに光を反射させることで、レンダリングプロセス中に3Dの錯覚を「偽造」します。 それは微小で細かいディテールや、ある角度でのみ発揮されます。 たとえば、オブジェクトの輪郭などの変化はわからないでしょう。 それほど必要性がないように見えるかもしれません。

もう1つの方法は、法線マップ(法線バンプ)です。 バンプマッピングと同じ役割をしますが、サーフェスの角度をエンコードするRGBカラーマップに基づいてディティールが作成されます。 ただし、バンプマッピングと同様に、効果は純粋にレンダリングに基づき、 ジオメトリに実際の詳細は追加されません。 したがって、これは主にコンピュータゲームで使用され、ポリカウントを低く抑えながらモデルにディティールを追加します。

これらの方法とは反対に、ディスプレースメントマッピングは実際の3Dジオメトリを作成するので、実際に影を落とし、あらゆる角度からリアルに見せます。 これは、レンダリングプロセス中にモデルのポリゴンをより高密度のメッシュに分割することで実現され、メッシュは選択したテクスチャに基づいて上下軸で上下します。 この方法の欠点は、処理に大量のRAMを必要とする非常に重いメッシュを作成することです。

ディスプレイスメント、バンプ、および法線マッピング
バンプ、法線バンプ、およびディスプレイスメントは、必要な品質のレベルやコンピューターパフォーマンスの制約に応じて、さまざまな場面で使用できます。

Photoshopで、参照資料の写真を使用してディスプレイスメントマップを作成し、それをスカルプトしてZbrushやMudboxなどのプログラムでベイクするか、CrazyBumpやNormalMapOnlineなどのディスプレイスメントマップなどのツールを使用できます(この記事の最後にあるソフトウェアリストをご確認ください。 )

整数マップまたはフロートマップを使用することもできます。 キャラクター作成や複雑な彫刻を作成しているアーティストは、通常、Zbrushなどのソフトウェアからフロートマップをエクスポートします。 建築ビジュアライゼーションのようなシンプルなモデリングでは、さまざまな表面の画像から作成された整数マップを使用することができます。

3dsMaxとV-Rayでディスプレイスメントを設定する場所

3dsMaxとV-Rayでディスプレイスメントを設定する方法は2つあります。

  • 1つ目は、レンダリング設定(V-Ray)-> 設定 -> マテリアルエディタと組み合わせたデフォルトのディスプレイスメント -> マップ -> ディスプレイス、です。
3dsMaxとV-Rayでディスプレイスメントを設定する



  • 2つ目の方法は、VrayDisplacementModモディファイヤを追加し、マップをマテリアルエディタから「Texmap」スロットに(インスタンスとして)リンクすることです。

3dsMaxとV-Rayでディスプレイスメントを設定する

VRayDisplacementModモディファイヤを使用すると、ディスプレイスメント機能の設定と、レンダリングに必要なリソースの管理が柔軟になります。

ディスプレイスメント機能の設定 – これらはシーンで使用されるレンダリング時間とRAMに影響します。 ディスプレイスされたモデルを正確な外観にするために、具体的な値を設定する必要がありますので、最適化するためにも、適当な値を設定しないでください。以下にリストされている他の設定を参照してください。

品質設定 – これらは、ディスプレイスメントのレベルの詳細、サブディビジョンの数、およびメッシュ密度を設定し、シーンがレンダリングに必要なリソースの数を決定します。これについてはガイドの次の章で最適化していきます。

パフォーマンスおよびその他の設定 – これらはレンダリングパフォーマンスに影響を与える特別な設定で、アーティファクトや異常に高いリソース使用量など、ディスプレイスメントに関連した問題をデバッグするような稀な場合に使用されます。 記事の最後でそれらについて解説します。

V-rayマニュアルによると、VRayDisplacementModには3つのタイプのマッピングがあります。

  • 3Dマッピング – 元のサーフェスジオメトリを取得し、その三角形をより小さなサブの三角形に分割してから変位させる一般的な方法。
  • 2Dマッピング – 事前にわかっているテクスチャマップに基づいてディスプレイスメントを作成します。 変位したサーフェスは、そのテクスチャマップに基づいて、歪曲されたheight-fieldとしてレンダリングされます。 変位したサーフェスはテクスチャのスペースで実際にレイトレーシングされ、結果は3Dスペースにマッピングされます。
  • サブディビジョン – 3Dマッピング方法に似ていますが、エッジにサブディビジョンスキームを適用する点が異なります(MeshSmoothモディファイヤと同様)。 この記事では、その方法をスキップします。

レンダリング設定からのディスプレイスメントが提供するすべてのオプションなどがあり、シーン内のモデルごとに個別にディスプレイスメントオプションを設定できるため、テストにはVrayDisplacementModモディファイヤセットアップを使用します。

以下のシーンのさまざまなバリエーションをテストに使用します。

VRayDisplacementModが追加された3つのボックスが含またてすとし
テストシーンには、VRayDisplacementModが追加された3つのボックスが含まれています。 GIはブルートフォース+ライトキャッシュに設定されています

テストのセットアップ:

ハードウェア:Intel V2プロセッサ、2.80 GHz、128 GB RAM

ソフトウェア:3dsMax 2017 + V-ray 4.10.02

GIはライトキャッシュ+ブルートフォースとしてデフォルトに設定されています。

他のすべての設定はデフォルトのままにしています。

最適化されていないディスプレイスメント設定の典型的な兆候(シーンがRAMを使いすぎる)

  • 3dsMaxがクラッシュまたはフリーズする
  • レンダリングがライトキャッシュの計算/プレサンプリングディスプレイスメント/ジオメトリのアンロードを無限にループする。
  • レンダリングが、「シーンジオメトリのコンパイル」の段階、または「Embree静的アクセラレータの構築」で止まってしまう。
  • CPU使用率が低い、または不規則
  • RAMが不足した場合、3ds Maxはハードドライブをディスプレイスメントデータの追加ストレージとして使用し、HDDとプロセッサ間で交換します。 これにより、シーンのレンダリング時間が大幅に長くなります。

以下のテストと例でV-Rayディスプレイスメントのオプションを確認し、可能な限り最小限でコンピューターのリソースを使用しながら、必要なだけ詳細なレンダリングを出力する方法を見ていきます。

VrayDisplacementModモディファイア-> 3Dマッピング-> [ビューに依存する]がオンになっている

3Dマッピングに設定されたVrayDisplacementModの主な品質設定は、エッジの長さです。これは、デフォルトで、 [ビューに依存する]オプションが有効になっています。

ジオメトリを移動する前に、VRayDisplacementModはオブジェクトの三角形を小さい三角形に分割します。 [ビューに依存する]オプションがオンの場合、[エッジの長さ]の値によって、サブの三角形のエッジの最長がピクセル単位で決まります。

たとえば値1.0は、各サブ三角形の最長のエッジが、画面に投影されたとき(つまり、レンダリングされた画像)に約1ピクセルの長さになることを意味します。

より小さなサブ三角形は、より小さな値で作成されます。 これは、ディスプレイスメントの詳細、レンダリング時間の短縮、そして最も重要な、メモリ使用量の増加を直接意味しています。

この設定がさまざまな値に設定されている場合の、変位したジオメトリの品質と使用されているリソースの数を確認してみましょう。

様々なエッジの長さの値で解像度を変更せずにテスト

ご覧のとおり、エッジの長さの値を短くすると、RAMの使用量が増えますが、より詳細なジオメトリが可能になります。 これは、エッジの長さが短いほど、VRayDisplacementModによって作成されたジオメトリメッシュが密になり、重くなるためです。

シーンのレンダリング時間も不釣り合いに長くなります。 これは、V-Rayで使用されるRAMが120GBの臨界値(この場合は0.25エッジの長さ)に達したときに発生し、3dsMaxがデータを交換するための仮想メモリとしてHDDの使用を開始します。 これはディスプレイスメントを使用してシーンをレンダリングするときには避けたいケースです。

次に、エッジの長さを1pxで一定に保ちながら、さまざまな解像度で画像をレンダリングするとどうなるかを見てみましょう。

様々なエッジの長さの値で解像度を変更せずにテスト

V-Rayが使用するリソースの量は、解像度が高くなるほど大きくなり、VRayDisplacementModで一定のエッジの長さに設定されます。

これは、ビュー依存オプションがレンダリングされた画像ピクセルのメッシュをシーンにキャストするためです。 メッシュは、細分化された三角形の最長のセットの基礎になります。 すべての解像度で同じエッジの長さの値をキープしていても、解像度が大きいほど、ディスプレイスメントメッシュの密度が高くなります。

ほとんどの場合、エッジの長さ= 1pxは高品質の設定ですが、画像の解像度が高いほど、同じエッジの長さの値を使用することで得られるディスプレイスメントの品質が向上することを考慮する必要があります。 これは同様にRAM使用量に影響します。

シーンをサードパーティのレンダーファームに送信する場合、たとえば、エッジの長さ=4pxの4000x4000pxを20Kの解像度でレンダリングするとして、エッジの長さを新しい解像度に調整する必要があります。 (ビュー依存がオンになっている限り。)

これは、エッジの長さの値を低解像度のテストに比例させたためですが、シーンをより高い解像度でレンダリングするように設定すると、シーンがクラッシュしたり、レンダリング時間が長くなったり、コストが高くなります。 これは、クラウドレンダーファームのユーザーによく起きる問題です。

一般的に、解像度をn倍にすると、同じディスプレイスメントの密度を得るには、エッジの長さもn倍にする必要があります。 たとえば、1000x1000の解像度と1pxのエッジの長さで開始し、4000x4000の解像度で画像をレンダリングすることにした場合、前の解像度と同じ量のジオメトリを取得するには、エッジの長さを4pxに設定する必要があります。

置き換えられたモデルが高解像度でまったく同じに見えることを必ずしも意味するわけではありません。 より高い解像度では、1 x 1の正方形と比較した場合、4 x 4ピクセルの正方形のほうがはるかに多くのディティールが表示されます。また、さまざまな解像度で画像をレンダリングするために必要なRAMの量は、ディスプレイスメントのメッシュの密度だけに依存するわけではありません。

以下は、比例的な解像度とエッジの長さのスケーリングの例です。

様々な解像度でエッジの長さを比例してスケーリングしてテスト

ご覧のように、使用されるRAMの量は増えますが、エッジの長さが一定のままの場合ほど速くはありません。 また、レンダリング速度が大幅に低下し始める臨界点には達しませんでした。

この乗数は、より高い解像度でディスプレイスメントを設定するための開始点として、およびRAM使用量とレンダリング時間の大幅な増加を回避する方法としてのみ考慮してください。 希望する外観とコンピュータのRAMの量に応じて、いつでも乗数を微調整できます。

それでは、必要なディティールのレベルでテストシーンをレンダリングするために、必要なRAMの量を最適化する方法を見つけましょう。 この場合、8000x8000pxの解像度で行います。

まず、さまざまなエッジの長さを使用してシーンをレンダリングし、どのようなクオリティになるか、必要なリソースの数を確認します。

様々な解像度でエッジの長さを8K解像度でテスト

画像の領域でレンダリングされたこれらのサンプルに基づいて、目的の品質と使用可能なRAMに最適な設定を選択できるようになりました。 中央のオブジェクトには3番目の列(2.0)、右側のオブジェクトには7番目の列、左側のオブジェクトには11番目の列を選択します。 次に、画像全体のレンダリングに移ります。

様々な解像度でエッジの長さを8K解像度でテスト

これで、最適化された設定により、ほしかった結果が得られました。

ヒント

エッジの長さのパラメータは整数だけでなくどんな数にでもすることができ、ディスプレイスメントの品質をかなり細かくコントロールできることにご留意ください。

ヒント

ファームでシーンの本番の解像度をレンダリングする場合、または本番解像度のディスプレイスメントの品質がわからない場合は、本番レンダリングの前に画像の領域をフル解像度でテストし、適切なエッジの長さを設定するのがベストです。

ビューに依存するエッジの長さがオンになっている3Dマッピングに設定されたVrayDisplacementModの長所と短所:

長所

  • 簡単なセットアップとスケーリング
  • ビューに依存するエッジの長さを設定した3Dマッピングのディスプレイスメントは、ディスプレイスメントを自動的に最適化します。カメラから離れたオブジェクトは、前面のオブジェクトと比較して、サブディビジョンとディテールが少なくなります。

短所

  • 画像をレンダリングする解像度ごとに、エッジの長さの値を個別に設定する必要があります。 これは、ローカルから低解像度の画像をレンダーファームに送信し、それを高解像度でレンダリングする場合に特に重要です。
  • シーンがアニメーション化されている場合、置き換えられたモデルのディティールのレベルは、レンダリングされた画像で占められているスペースに応じて、フレームごとに変化します。 そのため、アニメーション中にオブジェクトの外観がわずかに変化する場合があります。

画像をレンダリングするすべての解像度のエッジの長さの値を再計算したくない場合、またはすべての観点からモデルをまったく同じに見せたい場合は、「ビュー依存」オプションをオフにして、 代わりに、ワールドスケールの単位でディスプレイスメントの品質を設定します。

VrayDisplacementModモディファイア-> 3Dマッピング->ビュー依存をオフ

ビュー依存機能がオフの場合、細分割された三角形のメッシュの最大サイズは、画像の解像度に基づく値ではなく、実際の3D空間で一定の値に設定されます。

ワールドスケールの単位は、[カスタマイズ]タブの[単位設定]ウィンドウで確認および設定できます。 これは、ビューポートに表示される内容を決定するため、表示単位設定の値を変更することと同じではありません。 一方、システムユニットは、実際のジオメトリに影響を与えます。

VrayDisplacementModモディファイア-> 3Dマッピング->ビュー依存をオフ

エッジの長さを実際の単位と同じ値に設定して、RAMの使用量が画像のさまざまな解像度にどのように反応するかを見てみましょう。

エッジの長さを実際の単位と同じ値に設定してテスト

ディスプレイスメントをオフにした場合のRAM使用量と比較すると、標準のRAM使用量は300〜400MBと比較的安定した上昇を示します。 もちろん、主に同じマシンでより大きな画像をレンダリングするため、レンダリング時間が長くなります。

ディスプレイスメントの品質は解像度によって変わりません。 ただし、高解像度の画像では、低解像度では表示されなかったディティールはある程度品質が欠損する場合があります。 このような場合は、エッジの長さを低い値に設定する必要があります。

次に、エッジの長さの値を変更して解像度を維持すると、コンピュータのリソースとディスプレイスメントの品質がどうなるかを見てみましょう。

エッジの長さを実際の単位と同じ値に設定してテスト

エッジの長さが短くなると、レンダリング時間、必要なRAM、およびディティールの品質などすべてが向上します。 非常に長いエッジの長さと最小限のディテール、レンガの表面はモデルにレンダリングされる、なども逆になります。ただし、メッシュは細分化されないため、バンプマッピングと同様の効果が得られます。

同じシーンを異なるカメラアングルからレンダリングしてみましょう。

モデルが画像内の異なる領域を占めるため、レンダリング時間は異なりますが、RAMの使用量はほぼ同じです。

これは、ビュー依存オプションをオフにした場合、VrayDisplacementModによって生成されるジオメトリの量がカメラの位置に応じて変化しないためです。 これは、アニメーションのレンダリングに最適です。 ビュー依存をオフにすると、シーンのどこにレンダリングされるかに関係なく、モデルの外観を修正できます。 一方、ビューに依存する設定を使用すると、モデルのディスプレイスメントの品質も変化します。

したがって、アニメーションの場合、すべてのワールドスケールのエッジの長さを値に設定できます。 コンピュータのRAMが1つのカメラ位置を超えられない場合、他の位置でも超えられません(少なくともディスプレイスメントに関して)。

ただし、カメラが変位したオブジェクトに最も近い場合、ディスプレイスメントの品質がフレームに対して十分であることを確認する必要があります。 ちなみに、カメラが遠くにあるフレームでは品質が良く見えます。

簡単なカメラアニメーションを作成して、ディスプレイスメント設定を最適化してみましょう。

以下は、カメラがこの置き換えられたモデルに最も近く、十分な品質の設定をした、タイムラインで示す3つのテストフレームです。

簡単なカメラアニメーションを作成して、ディスプレイスメント設定を最適化
  • 色付きの立方体のエッジは正確に10単位(cm)です。 同じ単位がエッジの長さの設定に使用されます。
簡単なカメラアニメーションを作成して、ディスプレイスメント設定を最適化

すべてのモデルテストで、他のモデルのディスプレイスメントはオフになりました。 したがって、テストのRAM使用量とレンダリング時間は、ディスプレイスメントが適用された3つのモデルすべてが最終レンダリングで異なります。

  • エッジの長さが10.0および5.0の場合、品質が低すぎて使用できません。
  • エッジの長さ2.0は最遠いモデルにはいいですが、変形した壁になりました。
  • エッジの長さ1.0は、最も遠いモデルには十分でしたが、手前の2つのモデルには十分ではありません。
  • エッジの長さが0.5だと、モデル見栄えが良くなりました。
  • エッジの長さが0.1および0.05では、すべてのモデルにおいてやり過ぎになります。 これらの値はより詳細なディティールを加えますが、このマップの解像度では多すぎます。 実際には、マップまたはディスプレイスメントの設定でマップをぼかす必要があります。

選択したエッジの長さ(1.0および0.5)で画像をレンダリングしました。 テストした3つのポイント以外の位置にカメラを配置した場合、ディスプレイスメントの品質は少なくともテストフレームと同じになります。

以下は、ワールドスケールのエッジの長さ(ビュー依存オフ)で3Dマッピングに設定されたVrayDisplacementModの長所と短所です。

長所

  • RAMの使用量は解像度に依存しません
  • カメラアングル、静止画とアニメーションの距離に関係なく、一貫したディティールの品質
  • この方法を使用すると、たとえばRAMが不十分なためにシーンを低解像度に設定してから、ローカルのレンダーファームやクラウドレンダーファームで高解像度でレンダリングするなどの問題を回避することができます。
  • 実世界の単位(cmなど)は、解像度に依存する単位よりもわかりやすく、適用しやすいです。

短所

  • メッシュが密集していて重い場合、レンダリングは大量のRAMを使用する可能性があります。
  • カメラから離れたモデルの設定でオーバーシュートする場合があります。
  • ディスプレイスメントがあるすべてのモデルに適切なエッジの長さを設定すると、より時間がかかります。

まとめ

ビューに依存するエッジの長さを設定した3Dマッピングは、ディスプレイスメントの品質を設定するために便利な方法です。 カメラに近いオブジェクトは、遠いオブジェクトよりも細かく細分化されます。 欠点は、レンダリングに設定された解像度に応じて設定調整の必要がある場合が多いことです。 低解像度の画像で高品質を適応させる設定をそのままにしておくと、シーンがクラッシュしたり、フリーズしたり、高解像度でのレンダリングが永遠に終わらない可能性があります。

また、サブディビジョンの数は、レンダリングされた画像上のモデルのサイズに基づいて設定されます。 アニメーション中にモデルがカメラに近づいたり遠ざかったりすると、ディティールのレベルが変化します。 場合によっては、変更が不要になることがあります。

[エッジの長さ]設定で[ビューに依存するオプション]をいつでもオフにでき、代わりに、置き換えたモデルのサイズを実際の単位で設定できます。 この場合、ディティールのレベルは解像度に依存しないため、レンダリングする解像度がよく見えるようにすべてのモデルを手動で設定する必要があります。 ただし、解像度が高くなっても、レンダリングのRAM使用量は急増しません。

次回の記事では、VRayDisplacementModで2Dマッピングをテストし、カメラから遠くに配置されたモデルのディスプレイスメントの代わりにバンプを使用して、非表示の面を削除するなど、特定のマッピングモードに接続されていない、さまざまな最適化の方法やヒントを紹介します。

参考

https://www.cggallery.com/tutorials/displacement/

https://docs.chaosgroup.com/display/VRAY3MAX/Displacement+Modifier+%7C+VRayDisplacementMod - V-Ray 3.6 documentation

https://docs.chaosgroup.com/display/VRAY4MAX/VRayDisplacementMod - V-ray 4 documentation

https://forums.chaosgroup.com/forum/ - Chaos Group forums

そしてこれまでの経験と実験

イラストやテストに使用されるテクスチャは、https://www.textures.com/およびhttps://texturehaven.com/から使用しています。

参考リンク

https://pixologic.com - Zbrush (a 3D sculpting tool ideal for creating displacement maps)

https://www.autodesk.com/products/mudbox/overview - Mudbox (a tool similar to Zbrush)

https://cpetry.github.io/NormalMap-Online/ - Free online tool for creating displacement, bump, AO, and normal maps

http://www.crazybump.com - application for automatic creation of all kind of maps from photos, including displacement

https://github.com/kmkolasinski/AwesomeBump - AwesomeBump - a free alternative to CrazyBump

https://www.foundry.com/products/mari Mari - 3D texture painting software

https://3dcoat.com - 3D model texturing software

https://3dbee.it/ - 3DBee Asset Store - high quality 3D assets (models, textures, materials)

元記事

https://garagefarm.net/blog/how-displacement-maps-work-and-how-to-optimize-them-in-v-ray-part-1

>ガレージファームのTOPへ

関連記事

Chat