Erosion

Fractal procedural erosion shader(フラクタル・プロシージャル・浸食シェーダー)

これはterragenのSDKを使用して開発された無料のプラグインです。現時点ではWindows版のみ動作し、Mac OSは未対応です。
公式フォーラム参照


シェーダ処理は、侵食された地形を入力/出力します。しかしそれは、侵食されずに入力された地形に基づいて、侵食された風景シンセサイザーとして解釈した方がよいかもしれません。

非常に見映えの良い結果を達成するには、加工されていない地形がどのようにデザインされたかに拠ります。オリジナルの地形には多くの小さなディティールを持つ必要がないため、しばしアルゴリズムを狂わせる事があります。他の多くの場合、通常小さなディティールは完全に削り取られ、アルゴリズムは、独自のディティールを生成します。そのため、オクターブのより小さな数を使ってオリジナルのランドスケープをより速く生成する事が出来ます。

1つはプロシージャルのアルゴリズムから予期出来るとして、現在シェーダは正確に無限の領域を処理しません。実際にはおよそサイズの四角形の領域を処理します。中心(0,0)として、(1000 × 侵食スケール)^2 デフォルト設定では(1000km × 1000km)。より大きなサイズの対応は今後計画中です。

シェーダは、作業中に大容量のRAMキャッシュを使用し、数ギガバイトまで独占するかもしれません。シェーダが使用出来るRAMの容量をコントロールする事は出来ますが、実際、より多くのRAM容量を持っているほど、特にアニメーションのレンダリング時はより早くプラグインは作動します。

1つのポイントのアルゴリズムの数値を求めるには、次の文脈領域を評定する必要があります。オリジナル領域をサンプリングし、排水網を構築します(実際にはレンダリング前、またはプレビューを更新開始直前に顕著な遅延が生じます)。しかし、すべてのデータはキャッシュされているので、2番目のポイントの数値を求める時間は、1番目よりずっと短縮されます。ポイント間が短距離ほど新たなデータの数値を求める時間を必要としません。従って初期の遅延レンダリングは徐々に高速になります。アニメーションの場合も後半のフレームにつれ高速になります。しかし、侵食キャッシュが膨大になり限度値を超えた時、キャッシュは一度消去され、シェーダは再度データの再構築をする必要があります。

インストール方法

動作条件:Terragen 3.3以降
Terragenをインストールしたフォルダのサブフォルダ"Plugins"の中に"dkerosion.tgp"ファイルをコピーして下さい。(例 "C:\Program Files\Planetside Software\Terragen 3\Plugins")
32ビット用、64ビット用が用意されています。あなたのマシン環境に合わせてどちらかをコピーします。
Terragenを起動し、《Shader》タブの『Displacement Shader』のポップアップ内で『erosion shader』を見つける事が出来ます。


パラメータの手引き

Scaleタブ

Scale(スケール):侵食機能の最大サイズ(最大分水嶺間の平均的な距離)を設定します。全般により大きなスケールほど地形を侵食します。大きな山脈には、2k以上の数値が望ましい。
Scale = 400 Scale = 1000 Scale = 2000
Large-scale attenuation(大規模な減衰量):『Power Fractal Shader』の"Feature scale"パラメータの動作と多少近似しており、初めとわずかに第二オクターブを減衰させます。最大の谷間を突出させずに作り上げる事に役立ちます。
Large-scale attenuation = 0.0 Large-scale attenuation = 0.7
Octaves(オクターブ):フラクタルオクターブの数を設定します。

Dynamically reduce the number of octaves(動的にオクターブ数を削減):より高いオクターブがあまりに少なくて見えないならば、アルゴリズムがより少ないオクターブを計算するのを可能にします。例えば遠距離のビューにおいてレンダリングを極めて加速します。
技術的に連続して侵食プラグインを積み重ねたい場合、このパラメータは必須です。この場合、最後を除くすべてのインスタンスのためにそれをオフに設定する必要があります。

Non-rendering octaves(非レンダリングオクターブ):これは"Non-rendering context octave(非レンダリング・コンテキスト・オクターブ)"の省略です。ポピュレーションに使われるオクターブ数です。
文面通り、通常パフォーマンスを向上させるためのオプション"Dynamically reduce number of octaves"を有効にすること事をお勧めします。この場合、遠方の領域はオクターブのより小さい数を使って数値を求めるので、レンダリングされたオクターブの実際の数は、カメラの位置に依存します。ポピュレーションを使用する場合、この機能は誤動作をするため、侵食シェーダはこのオプションと"Octaves"パラメータを無視し、代わりに"Non-rendering octaves"を使用します。


Settingタブ

Hardness(硬度)Rock removal(岩除去):共に(降雨時の流水に浸食されて出来た)小峡谷の輪郭に影響します。「Hardness」は小峡谷のある程度の斜面を制御し、「Rock removal」は小峡谷全体の浸食効果、変化する深度を制御します。
Hardness = 0.3, Rock removal = 1.0 Hardness = 0.8 Rock removal = 0.4
小峡谷の縦断面に関するこれらのパラメータ効果の図解

Deposition amount(堆積量)は堆積をコントロールします。1.0より高い数値の設定が可能です。最初の投稿からの川の流れの例では、1.5に設定された堆積量を使用しました。
Deposition amount = 0.5 Deposition amount = 0.8
Deposition floor(堆積底)は、堆積底よりも低い高度からなる、すべての場所を含む堆積物のグローバル層を作成します。

Smooth ridges(滑らかな尾根)。代わりに鋭利な丸みを帯びた隆起部が生成されますが、その効果はより高いオクターブによってさらに生成する事で減少します。

Limited gullies length(小峡谷範囲の制限)。小峡谷の範囲を制限する事で、長い構造を形成しません。

Gullies sharpening(小峡谷の鋭化)。原点となる小峡谷を鋭化する量を設定します。

Smooth surface(滑らかな外観)。制限されたオクターブの画像を生成する必要がある場合は、"Smooth surface"は効果的かも知れません。


Mapsタブ

『Erosion shader』はディスプレースメントだけでなく、他のシェーダをマスクするために使用するカラーの2D画像を生成する事も出来ます。これら画像をマップと呼びます。

Enable maps(マップを有効)を使うには、パラメータにチェックを入れるだけ。たったそれだけで、『Erosion shader』を他シェーダのマスクの入力端子と関連付ける事が出来ます。出力するデフォルトマップは"Deposition map(堆積マップ)"です。

下図の例では、deposition layer(堆積層)に影を付けたいので、『Surface layer』を追加し、そのマスクの入力端子に『Erosion shader』を関連付けました。

よほど有用ではないが(ただし、堆積土砂の厚さを示す事が出来ます)、"Deposition Map(堆積マップ)"は滑らかで曖昧なエッジを有します。従って、『Colour adjust shader』を追加し、"White point"を0.01に設定しました。これは鋭いエッジとして十分です。

また、"erosive flows(土石流)"を示す2つ目のマップを追加したい場合。『Erosion shader』は同時に最大3つのマップ出力が出来るように色分けを使用します。希望するマップを、"Red(レッド)"、"Green(グリーン)"、"Blue(ブルー)"のパラメータから選択する事が出来、カラー・コンポーネントを使って出力されます。

必要なマップをRGB出力から抽出するためには、シェーダの"Function->Convert"項目中の『Red to scalar』、『Green to scalar』、『Blue to scalar』機能を使用する必要があります。

従って、"Deposition map"と"Flow map A"のためにグリーンとブルーのコンポーネントを使用しました。

シェーダ内にAとB、2つの"Flow map"があります。"Flow map A"は陰影に、"Flow map B"は流量に基づいたディスプレースメントを発生させる事が出来ます。これは川底の作成に有用ですがディスプレースメント(例えば『Displacement shader』や『Surface shader』など。そして"Displacement amplitude"に負の値を設定。)を生成するシェーダのディスプレースメント機能の入力端子に、この2つ目のマップを関連付ける必要があります。"Flow map B"は、川のための重要な変更不可の特性:より小さな流量は、より小さな深さにするためにスケーリングされます。"Flow map A"は、すべての流量のために等しい強度を使います

両方の"Flow map"のためのオクターブ数を制限する事が出来ます(通常は1で十分です。3オクターブは川用です)。マップオクターブのパラメータと、(滑らかな川底のために有用な)"smoothing(滑らかにする)"パラメータを使って、"Flow map"のスムージングを設定します。


Mask(マスク)タブ

『Erosion shader』は、他シェーダによってマスクする事が出来るため、侵食効果の制限に役立ちます。

通例の"Mask by shader"と"Invert mask"パラメータ、そして3種類のマスクモードがあります。

以下はオリジナルの地形と完全な侵食による処理:

全てのモードをオフにしたマスキング地形:

Limit erosion to mask(マスクによる侵食制限) - このモードは、たとえマスクが真っ黒や真っ白であってもマスクの縁に目立った変わり目が付く事無く、マスク内の侵食を維持します。侵食効果はマスクから若干はみ出します。

Mask as blend(マスクのブレンド) - 一般的なブレンドモードは、マスクを侵食効果に乗算(グレー色により変位を減衰)します。

Mask as rock removal(岩石除去用のマスク) - このモードは斜面を保持するため、場合によっては"Mask as blend"モードよりも自然に見えます。

これら3つのモードは、組み合わせる事が出来ます。