Displacement

JSplacement からのディスプレイスメント テクスチャ マップ
イメージの上にカーソルを合わせると、ディスプレイスメントなしで表示されます

 

ディスプレイスメント マップは、標準のモデリング方法を使用すると非常に長い時間がかかるサーフェスのディテールを追加するための優れたツールです。 ディスプレイスメント マッピングは、ジオメトリを変更し、正確なシルエットやセルフ シャドウイングの効果があるという点で、バンプ マッピングとは異なります。 入力のタイプに応じて、ディスプレイスメントは 2 つの方法で発生します。浮動小数点、RGB、および RGBA 入力は法線に沿ってディスプレイスメントを行い、ベクトル入力はベクトルに沿ってディスプレイスメントを行います。

上記の例では、ディスプレイスメント マップを追加した単純なプレーンが、単調なシーンを興味深く見せる方法を示しています。

ベース メッシュ ジオメトリに十分な数のポリゴンがあることを確認する必要があります。そうしないと、ディスプレイスメントされた低解像度のジオメトリとその生成元である高解像度のメッシュの間に微妙な差が生じる可能性があります。

必ず 32 ビットまたは 16 ビットの浮動小数点形式を使用してイメージを保存し、整数形式は使用しないでください。整数形式は正しく機能しません。 これは、整数形式が負のピクセル値をサポートしないためです。一方、浮動小数点のディスプレイスメント マップでは負のピクセル値を使用します。

MtoA でディスプレイスメントを使用するシーンの例については、こちらを参照してください。

左: レンガ テクスチャ -> ディスプレイスメント ノード -> Ai Standard Surface シェーダのシェーディング グループ。 右: aiImage -> Displacement (出力カラー R)。

 

ディスプレイスメント ノードは、ディスプレイスメントを必要とするメッシュに割り当てられたマテリアルのシェーディング グループのディスプレイスメント アトリビュートに接続する必要があります。

 

 

ディスプレイスメント マッピングでは、常に最高品質のテクスチャ マップを使用してください。 Arnold は、マップが maketx ユーティリティで前処理されている限り、高解像度マップを適切に処理します。マップを .tx ファイル(タイルされ、ミップマップされたファイル)に変換します。 maketx ユーティリティと .tx ファイルについては、当該ページを参照してください。

Maya (2017)のカラー管理を使用する場合、ディスプレイスメント マップは RAW に設定する必要があります。 詳細については、こちらを参照してください。

 

Subdivisions

サブディビジョンの反復を 8 に設定。 サブディビジョンの種類を Catclark に設定。

 

サブディビジョン タイプを Catclark またはリニア サブディビジョン ルールのいずれかに変更し、反復の値を大きくすると、ディスプレイスメントの品質が向上します。 この例では、サブディビジョンの反復は 8 に増やされています。

サブディビジョンの反復の数を増やすときには注意する必要があります(反復のたびにジオメトリが 4 倍になります)。 レイがオブジェクトのバウンディング ボックスに当たると、このサブディビジョンがレンダリング時に発生します。 これは、DCC ソフトウェア内のメッシュのサブディビジョンを増やす(この場合、テッセレーションされたジオメトリがレンダラに送信されます)ことと比較すると、より適切な選択肢です。

Arnold のディスプレイスメント アトリビュート

ディスプレイスメントは面単位またはオブジェクト単位で設定できます。 ただし、ディスプレイスメント ノードの Arnold アトリビュートに入力された値によって、それらの設定はオーバーライドされます。 オブジェクトごとに複数のディスプレイスメント シェーダを使用する場合、オブジェクトは境界パディングの値を 1 つだけ持つことができるため、Arnold はすべての中から最大値を選択します。 パディングと同様に、自動バンプでも同じ問題が生じます。そのため、少なくとも 1 つのディスプレイスメント シェーダが自動バンプを有効にしている場合、Arnold はこれを有効にします。 

 

ディスプレイスメント シェーダと同様に、MtoA にもオブジェクト単位のディスプレイスメント オプションがあります。 つまり、メッシュ上で作成されたディスプレイスメントに対する変更により、既定のディスプレイスメント シェーダのアトリビュートが変更されます。 これは、2 つのオブジェクトで同じシェーダが設定されているけれども、異なるシェイプ ディスプレイスメントの値が必要なシーンなどで役立ちます。 また、複数のシェーダが設定されているけれども、以下の例のような異なる 2 つの高さの値が必要なオブジェクトなどにも役立ちます。

2 つのメッシュに同じディスプレイスメント シェーダが割り当てられているけれども、右側のメッシュのオブジェクト単位の高さは 2 です

 

オブジェクト単位の MtoA ディスプレイスメント アトリビュートは、次のグループに分割されます。

Height

ディスプレイスメントの量を制御します。 ディスプレイスメントの高さには正の値または負の値を指定できます。 このアトリビュートは通常のディスプレイスメントとともにのみ適用されます。 書き出されるディスプレイスメント マップと低解像度のジオメトリの間の矛盾を相殺するために、この値を使用できます。

Bounds Padding

パディングは、ディスプレイスメント シェーダからの追加のディスプレイスメントを含めることができるように、オブジェクトのバウンディング ボックスを拡張する度合いを定義します。 レイが初めてバウンディング ボックスにヒットしたときに、ディスプレイスメントが計算されます。そのため、意味もなく高い値を設定すると、レンダリングの効率が低下します。 一方、値が低いと、ディスプレイスメントされたメッシュのクリッピングが行われる可能性があります。

Arnold で適切なディスプレイスメントのワークフローを実行するには、シェーダに最終ディスプレイスメント値を指定してから、Bounds Padding アトリビュートを使用してバウンディング ボックスのオフセットを設定することをお勧めします。


左側のメッシュの Bounds Padding の値は 0.5 で、右側の値は 1 です(オブジェクトごとに設定)。

 

次に、Bounds Padding を設定する必要のある別の例を示します。 チェッカー テクスチャが、球に割り当てられたディスプレイスメント シェーダに接続されています。 左側のイメージでは、レンダリングの一部が黒に塗られています。 これは、移動するメッシュの Bounds Padding を大きくする必要があるためです。 Bounds Padding を 3 に増やすと、問題が解決されます。 移動するオブジェクトのスケールと使用したディスプレイスメントの量に応じて、この効果は増加または減少します。

 

 

Scalar Zero Value

これは、ディスプレイスメント量にシフトとして適用される浮動小数点値です。 ゼロのディスプレイスメントと見なされるディスプレイスメント マップの値を定義します。 この値はディスプレイスメント マップが生成された方法によって異なります。

Scalar Zero Value の説明に使用するシーンは、こちらにあります。

 

Autobump

自動バンプは、高周波のディスプレイスメント マップをバンプ アトリビュートに組み込んで、その数のサブディビジョンの反復値が必要にならないようにします。 自動バンプは既定でのみカメラ レイに表示されます。表示パラメータにより、自動バンプを他のレイで表示することができます(例: Specular および Transmission)。ただし、レンダリングに要する時間が増えます。

自動バンプ アルゴリズムがサーフェス接線を計算するには UV 座標が必要です。 ポリメッシュに UV セットが適用されていることを確認してください。

 

技術情報:

自動バンプを有効にすると、Arnold はディスプレイスメントの前にメッシュのすべての頂点をコピーします(これを「参照」メッシュまたは Pref と言います)。 ディスプレイスメントされるサーフェス P 上のいくつかのサーフェス ポイントでシェーディングする前に、そのポイントの同等の Pref が、ディスプレイスメントされていないサーフェス上で検出されます。ディスプレイスメント シェーダはそこ(Pref)で評価され、極端に高いテッセレーション レートでポリメッシュをサブディバイドしていた場合は、P における同等の法線が推定されます。

Arnold の自動バンプと、バンプ マッピングにディスプレイスメント シェーダを使用することの主な違いは、自動バンプは Pref にアクセスするのに対し、bump2d は Pref にアクセスすることはなく、ディスプレイスメント量を増やすことができる既にディスプレイスメントされたポイントでディスプレイスメント シェーダを実行します。

追加のストレージは、ディスプレイスメントの前に P をコピーする目的でのみ使用できます。 ディスプレイスメント マップの解析はありません。Arnold は、高周波スパイクに「当たる」かどうかに関係なく、頂点がディスプレイスメント マップ(またはプロシージャル)のどこに「配置」されているかに基づいてのみ頂点をディスプレイスメントします。

次の per-object アトリビュートを調整する場合は IPR を更新する必要があります(Displacement Shader アトリビュートを調整するは不要)。

シェーダ ディスプレイスメントとオブジェクト単位のディスプレイスメント

これらの両方のアトリビュートを同時に使用する場合は注意を払ってください。 ディスプレイスメント シェーダとオブジェクト単位のメッシュ ディスプレイスメントの間の関係は、レンダリング時に変化します。 違いは以下のとおりです。


Height

いくつかの Displacement Scale が既に設定されている場合にオブジェクト単位の Height の値を大きくすると、ディスプレイスメントに乗算効果が表れます。 たとえば、シェーダで Displacement Scale を 0.1 に設定し、オブジェクト単位の Height を 1 から 2 に増やすと、Displacement Scale は 2 倍のサイズの 0.2 になります。

メッシュのディスプレイスメントの高さを 2 に設定すると、ディスプレイスメント スケールの効果は 0.1 から 0.2 の 2 倍になります。


Bounds Padding

レンダリング時に使用される値は、最大のアトリビュート値です。


Scalar Zero Value

いくつかの Displacement Scale が既に設定されている場合にオブジェクト単位の Scalar Zero Value を大きくすると、ディスプレイスメントに加算効果が表れます。 たとえば、シェーダで Scalar Zero Value を 0.2 に設定し、オブジェクト単位の Scalar Zero Value を 0.2 に設定すると、Scalar Zero Value は 2 倍のサイズの 0.4 になります。

Auto Bump

ディスプレイスメント シェーダで自動バンプを有効にすると、それ以降は常に有効になります。 ディスプレイスメント シェーダで自動バンプを無効にすると、MtoA がシェイプ オートバンプ アトリビュートを読み込んで、書き出します。

 

  • No labels