ディスプレースメント


背景

ディスプレースメントは、事前に計算されたジオメトリを使用せずにサーフェスに大きな形状とディティールを与えるために使用する手法です。つまり、比較的少ないポリゴンで構成されたオブジェクトを取得して、さらにディティールを追加する事が出来ます。レンダリング中に、地形やオブジェクトなどのシーンのエレメントがマイクロポリゴンに分割されます。ディスプレースメントは、より詳細な形状を作成するために、これらのマイクロポリゴンを3D空間で作動するために使用されます。

ディスプレースメントは、Terragenレンダリングエンジンの基本的な部分です。全ての地形は、ハイトフィールドを使用している場合でも、ディスプレースメントを基礎となる惑星の滑らかな球に適用する事によって作成されます。ディスプレースメントは、山脈規模から小さな小石までの容貌を作り出す事が出来ます。ディスプレイスメントは、岩石やインポートされた3Dモデルのオブジェクト等のシーンの他の部分にも適用する事が出来ます。

多くのユーザーは、バンプマッピングに精通しているでしょう。バンプマッピングは、サーフェスにより詳細な外観を与えるために使用出来る別の技術です。バンプテクスチャを使用して、より多くの形を持つサーフェスの効果を与える照明効果をシミュレートする、または「凸凹効果」を与えます。ディスプレースメントとバンプマッピングの違いは、ディスプレースメントが実際の3Dジオメトリを作成するのに対して、バンプマッピングは外観を偽装する事です。ディスプレースメントによって、平坦な表面が実際に3D形状に形を置き換えます。すべての視野角から見ても立体に見えます。バンプマッピングでは、平坦な表面は平坦なままであり、どの視野角から見ても明らかであり、特に側面から見ると平面のままです。

ディスプレースメントは、基本的にレンダリング時にシェーダによって実行される数学的計算を使用して生成されます。ディスプレースメントによって生成されたジオメトリは、プロジェクトファイルに保存したり、地形またはオブジェクトファイルによってエクスポートする事は出来ません。

ディスプレースメントの使用

上述したように、ディスプレースメントは、非常に大きい、または非常に小さい特徴を生成するために使用する事が出来ます。大きな特徴は、表層と言うよりは地形の一部として作成する必要があります。表層として使用する事は可能ですが推奨しません。最良の結果を得るには、ノードネットワーク上の『Compute Terrain』ノードに大きな配置転換を発生させるどんなシェーダでも接続する必要があります。

ディスプレースメントを発生させる事が出来るシェーダの大部分は、それをコントロールするための共通のパラメータセットを備えています。これらのパラメータの仕組みの概要は以下の通りです:
  • ディスプレースメントの方向:ディスプレースメントを適用する方向をポップアップメニューで選択する事が出来ます。ポップアップリスト内のオプションに表記されている"(requires computed normal)"は、ネットワーク内のノード上のどこかで接続された『Compute Terrain』または『Compute Normal』が動作する事が必要となります。ポップアップには以下のオプションがあります:
    • Along vertical:ディスプレースメントは、基底となるオブジェクト(すなわち惑星やモデル)の法線に沿ったいかなる変位も適用せずに、関連付けしたサーフェスの垂直軸に沿って生じます。
    • Along normal:ディスプレースメントは、関連付けしたサーフェスの法線に沿って生じます。
    • Vertical only (requires computed normal):ディスプレースメントは、基底となるオブジェクト(すなわち惑星やモデル)の法線に沿ってのみ生じます。変位は、オブジェクト法線とサーフェス法線の差で縮尺されます。法線間の角度が90度に近づくにつれて変位量は減少します。
    • Lateral only (requires computed normal):ディスプレースメントは横方向の平面でのみ、言い換えると基底のオブジェクトの法線に沿って垂直に飲み生じます。
    • Lateral normalized (requires computed normal):これは"Lateral only"と同じですが、法線は正規化されて計算における法線の長さが1.0になり、平均値に対する個々の法線の影響度が均等になります。

  • ディスプレースメントの係数:これは変位関数入力からくる変位値を乗算します。値が1の場合は変位値は不変のままで、値が2の場合は変位値は2倍になります。値が0.5の場合は半分となり、負の値は変位を反転させる事が出来ます。

  • ディスプレースメントのファンクション:このパラメータは、階層用として変位を発生させるために使用されたノードを接続する入力端子です。スカラー値の入力を推定しています。これは、変位そのものを作成するノードによっては、予想通りの結果が得られない可能性があります。これは、これらのノードが別のノードで変位を生成するために使用できる値を出力するのではなく、シーンのジオメトリを直接変位させるためです。また、スカラー関数だけでなく色を生成するノードを接続する事も出来ます。色は自動的にスカラー値として変換されます。
    この様な例として、『Simple Shape Shader』を使用して別のノードに変位を生成する方法があります。『Simple Shape Shader』のノードパレットにある"Apply displacement"を有効にしただけでは接続されているノードには変位は生じません。"Apply colour"を有効にする事で初めて変位の効果を確かめる事が出来ます。
    TG 2.4以降は、Functionの"Displacement Shader to Vector"ノードを使用して、ディスプレースメントシェーダの出力を変位関数入力に接続可能なベクトルに変換する事が出来ます。ベクトルはスカラーに変換する事が出来ます。

  • ディスプレースメントのオフセット:この値は、"Displacement multiplier"パラメータで乗算された後に受け取る変位値に加算されます。これにより、"Displacement direction"で選択した方向に沿った設定量だけ変位を相殺する効果が生じます。正の値は変位を押し出すので、座っている台座の様に見えます。負の値は、サーフェスを変位によって押し沈めます。これは変位を逆転させるのではなく、サーフェスに穴を作り、穴の底に変位を加える様なものです。

粗く、棘だらけのようなディスプレースメントを備えたサーフェスが、ショベルカーに掘り削られたような縁を残したり、レイトレーシングの陰影にギャップが生じるなどの問題が発生する事があります。『Planet』のようなノードには、これを改善するのに役立つ"Displacement tolerance"パラメータを備えています。このパラメータを変更する事は、レンダリング時間を大幅に増やす事になるので、特に差し迫った場合にのみ変更して下さい。デフォルト値は1です。問題がある場合は2に増やして結果を確認して下さい。問題が改善されても完全な解決に至らない場合は少し増やてみて下さい。ただし、一般的には4または5を超えると運用的には有用ではありません。