基本的なHeight Fieldを作成して、他のノードを使用してその外観を調整することができます。 その後、ディスプレイスメントマップをインポートして、そのベースグリッドを隆起させることもできます。 別の方法として、Houdini内で直接Height Fieldをペイントする方法もあります。 Height Fieldのペイントは、特定の領域における溝、河床、標高の作成に最適です。 高さ情報の代わりに、特定の領域を変更対象から除外するマスクをペイントすることもできます。 これによって、例えば道路をペイントすることができます。
Height Fieldをペイントする際、通常は細部まで細々と描き込みません。 代わりに基本的な形状をペイントした後、ノイズや侵食などの処理を加えて地形を自然な見た目に仕上げます。
サンプル: 河床 ¶
以下の基本的な例では、乾いた河床をペイントして、様々なノードで表面のディテールを加える方法を説明します。 このシーンでは、Houdiniのペイント機能を使用して地形と、段丘が出現する位置を定義したマスクをペイントします。 また、このマスクを侵食処理の制御にも再利用します。
まず地形から始めましょう。
-
obj レベルで、⇥ Tabを押してタブメニューを開きます。そこから
Geometry OBJを作成します。そのノードをダブルクリックして中に入ります。
-
HeightField SOPを配置して、十分なディテールを得るために Grid Spacing を
1に変更します。 -
HeightField Paint SOPを追加して、その入力をそのHeightField SOPの出力に接続します。
-
Layer パラメータに移動します。デフォルトでは、このノードは
maskをペイントできるようになっていますが、ここでは河床を作成したいです。 そのパラメータのドロップダウンからheightを選択して、デフォルトのエントリを置換します。 凹みを形成するために FG Value パラメータに-60と入力します。プラスの値を設定すると、丘や隆起をペイントすることができます。 -
ビューポート上にマウスカーソルを置きます。Enterを沿いてペイントモードに入ると、球状のブラシが表示されます。
を上にスクロールするとブラシサイズが大きくなり、下にスクロールすると小さくなります。
-
ペイントモードを抜けるには ⎋ Escを押します。
ペイント操作の結果は即座に反映され、峡谷のような構造が確認できます。 ストロークは何度でも追加可能で、新しいストローク毎にブラシサイズを変更したり、 Opacity などのパラメータを調整することができます。
ブラー ¶
河床をよく見ると、 Soft Edge が既に1に設定されているにもかかわらず、底部が平坦な領域であることがわかります。
-
これらのエッジを修正するために、
HeightField Blur SOPを追加します。 1番目 の入力をそのHeightField Paint SOPの出力に接続します。
-
Method パラメータを Box Blur に変更します。このモードでは、特に底部の鋭いエッジ部分で、より良好な結果が得られます。
-
Radius スライダを右にドラッグして、エッジが完全に滑らかになるまでその値を上げてください。
構造の追加 ¶
現在、地形には表面構造がまったく足りていません。 プロシージャルなノードベースシステムの利点は、ネットワーク内の任意の場所にノードを追加できることです。 Height Fieldも例外ではなく、複雑な地形を作成するために必要なノードをいくつもチェーン接続することができます。 Height Fieldのレイヤシステムでは、マスクを使用することで、選択した部分のみを操作することもできます。
この例では、歪曲、段丘、ノイズ、浸食を追加します。 マスクを使用することで、溝の斜面部分のみに浸食効果を適用することができます。
ノイズと歪曲 ¶
地形生成において、ノイズが最も基本的なメソッドとなります。 この例では、溝の形状を保つためにノイズを控えめに設定するべきです。 設定を高くすると溝が歪んでしまい、広い平坦な台地を削り取った河床の印象が損なわれてしまいます。
-
HeightField Noise SOPを追加して、 1番目 の入力をそのHeightField Blur SOPの出力に接続します。
-
地形を粗くするために、 Amplitude を
40、 Element Size を75に設定します。 -
次に、
HeightField Distort by Noise SOPを配置して、 1番目 の入力をそのHeightField Noise SOPの出力に接続します。
-
この目的は、地形にさらなる構造を加えつつ、その特徴を保つことです。 適度に Amplitude を
4、 Element Size を50に設定すると、良好な結果が得られます。
マスク ¶
この手順では、段丘化と浸食を制御するための共通マスクをペイントします。 マスクのペイント手順は、地形ペイントとほぼ同様です。
-
さらにHeightField Paint SOPを配置し、その入力をそのHeightField Distort SOPの出力に接続します。 最初のHeightField Paint SOPとの違いは、ペイントの対象が
heightレイヤではなくmaskレイヤである点です。 -
ビューポート上にマウスカーソルを置いてEnterを押してペイントモードに入り、以前と同様にペイントを開始します。作業が終わったら ⎋ Escを押してペイントモードを抜けます。
-
HeightField Mask Blur SOPを追加して、 1番目 の入力をその新しいHeightField Paint SOPの出力に接続します。必要に応じて Radius を変更て、より滑らかなマスクを生成します。
以下にその結果の例を示します。 後の段丘化の手順で生成する予定の平らな台地部分(Mesa)が侵食されるようにマスクされています。
段丘化 ¶
次に追加する構造は段丘です。 自然界では、下層の岩石は上層の岩石によって圧迫されるため、より硬くなります。 柔らかい上層部はより早く侵食され、段丘を形成します。 Houdiniでは、この効果を模倣することができます。
-
HeightField Terrace SOPを追加して、 1番目 の入力を上流のHeightField Distort by Noise SOPの出力に接続します。 同様に、 2番目 の入力を上流のHeightField Mask Blur SOPの出力に接続します。 これによって、段丘は赤い領域内のみに出現します。
-
Compute Range ボタンをクリックします。このボタンは、段丘が発生する高さ範囲を計算するので、地形の垂直方向の寸法を把握するのに役立ちます。 Min Height パラメータと Max Height パラメータを使用して、段丘を作成したい位置を決定します。
-
Max Step Size パラメータは段丘の数を変更します。値を小さくすると段数が増えます。
-
ハードエッジを除去するには、 Smooth Edges を上げればよいですが、この効果を過剰に適用しないでください。 後で侵食を適用すると、その段丘までも滑らかになってしまいます。
-
他にも、段丘から地形にかけて急な遷移があります。滑らかな遷移を得るには、 Terracing セクションを展開して、 Fade Ramp を調整します。
Presets ボタンをクリックすると、事前定義されたカーブのリストが表示されます。 この地形には Valley プリセットが最適です。 このカーブは最上段と最下段の段丘を滑らかにしつつ、中間レイヤの形状を保持します。
浸食のマスク ¶
侵食は、水、風、温度といった外的要因によって生じます。 風や水は堆積物を運び去ります。 その動きによって石は次第に砕け、最終的に砂になります。 砂は水よりも重いので、河床では、丸石や溝の近くに砂が堆積している様子がよく見受けられます。 この密度差により砂は沈降し堆積します。 一方、陸地では砂は風によって運ばれ、障害物に遭遇すると堆積します。これが砂丘の形成につながります。
このシーンでは、既存のマスクを通じて、浸食を溝の斜面のみに制限します。
-
⇥ TabメニューからHeightfield Mask Expand SOPを追加します。 このツールは、事前設定済みのHeightField Blur SOPであり、 Method は Expand に設定されています。 1番目 の入力をそのHeightField Terrace SOPの出力に接続します。
Blur Layer パラメータのデフォルトのエントリが
maskとなっています。 既にそのHeightField Terrace SOPからマスクを指定しているので、このデフォルトのままにします。 -
マスクの拡張を制御するために Radius パラメータを上げます。 マスクは小さなMesa(平坦な台地)部分も覆うことができます。 このシーンでは
15の値を使用しています。 -
HeightField Erode SOPを配置して、 両方 の入力をそのHeightfield Mask Expand SOPの出力に接続します。 調整は以下で行なうことにします。
浸食の制御 ¶
Houdini21の新機能であるHeightField Erode SOPには、浸食をより細かく制御できるように幅広いパラメータが備わっています。 ここでは、良い感じの段丘をすべて浸食させたくないため、わずかな変更のみ加えることにします。
-
HeightField Erode SOPを選択し、 Solver タブが開いていることを確認します。
-
Erosion Feature Size パラメータを
3まで下げます。 この値の単位はメートル、比較的狭い排水路を生成します。 設定値が高いと、細かい構造物がすべて洗い流されてしまいます。 -
Flow Force パラメータに
0.5の値を入力します。 これは、水による浸食の強度です。1より小さい値では、溝の深さはそんなに深くなりません。
ご覧の通り、段丘は浸食処理を“生き延び”ましたが、完全ではなく、その形状をまだ推測することができます。
ディテールの追加 ¶
-
HeightField Mask Clear SOPを配置して、その入力をそのHeightField Erode SOPの出力に接続して、すべての
mask値をゼロに設定します。 -
さらにHeightField Distort by Noise SOPを追加して、 1番目 の入力をそのHeightField Mask Clear SOPの出力に接続します。
-
Amplitude パラメータを適度に
6程度の値に設定します。 -
Element Size パラメータを上げて、やや大きめのノイズパターンを作成します。
120程度の値で良好な結果が得られるはずです。
さらにHeightField Erode SOPを追加して少し滑らかさを増すことで、以下の画像のように地形をより自然な見た目にすることもできます。