| On this page |
概要 ¶
Houdiniには、Height Fieldを用いてリアルな地形を生成するための多様なノードとツールが用意されています。 Height Fieldは、頂点やポリゴンといった古典的なジオメトリで構成されていません。 Height Fieldは、セルを持つ2次元のグリッドと考えると良いでしょう。 そのグリッドの交点には、地形の高さ情報が含まれています。
この手法によって、異なる種類の地形を組み合わせたり積み重ねたりすることが可能になります。
例えば、岩盤の上に地層を積み重ねることができます。
これらの層のことを Heightレイヤ と呼び、ベースレイヤ(ここでは岩盤)は常にheightという名前になります。
レイヤは、Height Field全般において重要な役割を果たし、目的の結果を得るためにはレイヤのスタッキング(積み重ね)と操作が鍵となります。
この手法の利点は、完全に人為的コントロールを維持できる点にあります。
例えば、レイヤを一時的にオン/オフしたり、各レイヤを個別に編集したり、ネットワークの任意の箇所に新規レイヤを追加することができます。
ほとんどのTerrain系ノードには、そのノードで地形を修正する領域を制御するためのマスクレイヤを指定可能な第二の入力が備わっています。
デフォルトのマスクレイヤ名はmaskになっています。
Heightレイヤと同様に、ジオメトリストリーム内に複数の異なる名前のマスクレイヤを含めることができます。
これによって、侵食や段丘の適用など、使用したいマスクレイヤを指定することができます。
Houdiniビューポートは、2Dのheightフィールドを3Dサーフェスとして可視化することができて、maskフィールドはその3Dサーフェス上に赤色で表示されます。
Height Fieldは、巨大な地形だけでなく、小規模な景観、河川敷、海底、砂漠、その他多くの地質構造も生成することができます。
また、独自のマップを描画して、複雑で細かいディテールの地形生成のベースとしてそのマップを使用することもできます。
おそらく最も現実的な手法は、実際の景観から変位マップを読み込んで、それをHeight Fieldに変換することです。
Note
Height Fieldの特殊な形態として、Shallow Water Solverがあります。 これは、広範囲の領域を素早く浸水させたり、岩や亀裂に水を流すことができます。
制限事項 ¶
前述の通り、Height Fieldは平坦な2Dグリッドであり、すべての高さ情報がそのグリッドのポイントに格納されています。
これが原因で、地形の垂直な領域を操作することができません。
この例を挙げると、HeightField Project SOPで得られる垂直部分がそうです。
このHeightField Project SOPは、通常のジオメトリを受け取って、それを2Dグリッド上に投影します。
マスクもこれに非常に似た現象を生成してしまいます。
以下の画像は、空っぽのHeight Fieldに投影された球体です。
その垂直部分は、Y軸に沿って引き伸ばされているだけです。
その垂直部分にディテールを加えたい場合は、地形を浸食させるか、または、Height Fieldを実ジオメトリに変換すると良いでしょう。 他には、その垂直な領域上にオブジェクトを散布して構造物を作成する方法もあります。
もちろん、HoudiniのKarma CPUやKarma XPUのレンダリングエンジンはHeight Fieldに対応しています。 いずれにせよ、Height Fieldをレンダリングする前に、それをポリゴンに変換するべきです。 SolarisでHeight FieldをインポートするとHoudiniは自動的にその地形を変換してくれるので、この手順は必須ではありません。 とはいえ、手動による変換の方がジオメトリをより細かく制御することができます。 例えば、地形にカラーやレイヤをベイクしたい場合がそうです。
ノイズタイプ ¶
色々なノイズタイプは、Height Fieldと組み合わせて中心的な役割を果たし、地形生成、マスキング、歪曲、パターンなどのあらゆる場面で活用することができます。
特にHeightField Noise SOPの多様なノイズタイプは、地形の特性を素早く変更するのに最適です。
滑らかな丘陵地帯、鋭い尾根と急勾配がある山岳地帯といった様々な景観を生成することができます。
一見すると、 Chebyshev Cellular F2-F1 のようなノイズタイプは奇妙なパターンを生成するかもしれません。 しかし、適切な歪曲とノイズタイプの積み重ねによって、非常にディテールの細かい地形を生成することができます。 次に山岳地帯に浸食を適用することで、リアルな外観が得られます。
異なるノードのノイズ設定には、いくつかの共通パラメータがあります。 おそらく最も重要なパラメータは、 Amplitude と Element Size でしょう。 Amplitude は、地形の最大高さを定義します。 一方、 Element Size は、ノイズパターンのサイズを定義します。 Height Fieldに関して言えば、小さい値ではスパイクや凹凸が増え、高い値ではより滑らかな表面が生成されます。
Amplitude と Element Size の比率も重要です。
-
Element Size が小さい場合、通常は Amplitude を下げます。
-
Element Size が大きい場合、地形は平坦になり、おそらくたいていの場合は Amplitude を上げることになります。
以下の画像は、 Element Size と Amplitude を変化させるだけで様々な種類の地形を表現できることを示しています。
ゼロからHeight Fieldを生成する方法 ¶
基本的なHeight Fieldを作成するには、わずか数個のノードのみで済みます。 ノードのパラメータによって景観の形を精密に定義し、遠方の丘陵にはディテールを落とし、散布用の高解像度地面オブジェクトを作成することができます。 通常では、ごく少数のパラメータを変更するだけで、まったく異なる外観が得られます。
Height Fieldは、ジオメトリ系SOPノードによって作成するので、すべてはHoudiniの obj レベルから始めます。
まず obj レベルで⇥ Tabキーを押してタブメニューを開きます。
そこから、景観用コンテナとなるGeometry OBJを作成します。
そして、そのノードをダブルクリックして中に入ります。
Height Fieldの土台 ¶
-
HeightField SOPを配置します。 このノードは、シーンの原点を中心に ZX 平面の向きで大きな平面を生成します。
最も重要なパラメータは、 Size と Grid Spacing です。 前者のパラメータは、地形全体のスケールを決定します。
デフォルトのサイズは、1000×1000平方メートル(つまり、1平方キロメートル)です。
一方、 Grid Spacing は、Height Fieldの解像度を定義します。
この値がボクセルのサイズと考えることができます。
デフォルト値の2は、2つのグリッドポイント間の距離を2メートルにします。
これによって、土台のHeight Fieldは500×500ボクセルになります。
また、 Division Mode を By Axis に変更することで、グリッドポイントの数を直接設定することができます。
Heightfieldノイズ ¶
ランダムな地形から始めるために、まず最初にHeightFieldノードにHeightField Noise SOPを接続します。
タブメニューからHeightField Noise SOPを追加し、その1番目の入力をHeightField SOPの出力に接続します。
これで、いくつかの丘陵がある岩石地帯が表示されます。
もっとディテールが必要であれば、前述のHeightField SOPの Grid Spacing パラメータを下げると良いでしょう。
このHeightField Noise SOPでは、地形の外観を変更します。
Note
下記で説明するノイズパラメータは、HoudiniのHeight Fieldテクノロジー全般において重要な部分です。 したがって、それらの設定のほとんどが他のノードでも見受けられ、その動作モードは常に同じです。
Amplitude は、地形の最大高さを変更します。
この値は、メートル単位で指定するもの ではなく 、デフォルト値の500は、適切な高さの丘を生成しないことに注意してください。
Amplitude は、各グリッドポイントの変位値に適用されるスケール係数です。
Center Noise が有効な場合、この係数はY軸のプラス方向とマイナス方向の両方に適用されます(Height FieldがXZ平面の向きに配置されている場合)。
Element Size は、ノイズパターンのサイズを決定します。 値が小さいほど、スパイクがたくさんあるノイズの多い表面が得られます。 一方、値が大きいほど、ディテールが粗い滑らかな表面が得られます。 Element Size は、ノイズ周波数の逆数です。
Scale パラメータは、ノイズをその方向に沿って引き伸ばすことができます。 たいていの場合、ここにはXコンポーネントとZコンポーネントに値を入れることになるでしょう。 そもそも、高さ軸は考慮されません。高さは Amplitude で制御されるからです。
また、様々な Combine Mode 設定を試すのも面白いです。 例えば、 Maximum は、0未満の値をすべて切り捨て、島や海岸線のある海面を生成します。 一方、 Minimum は、侵食された峡谷のような構造を生成することができます。
Noise Settings セクションには Roughness パラメータが用意されています。
設定値を高くすると、より多くの微細なスパイクが生成され、よりノイズの多い表面となります。
Roughness は非常に感度が高いため、0.05単位の小さなステップで値を変更してください。
また、様々な Noise Types も利用可能です。 Perlin、Sparse Convolution、Simplexのノイズタイプは、地形にディテールを加えます。 一方、CellularとAlligatorのノイズタイプは、地形の基本構造を定義するのに最適です。 その後、Sparse Convolutionノイズや歪曲によって、その地形を微調整します。 地形により多くのディテールやより細かい構造が必要な場合は、 Lacunarity の値を上げることを検討してください。
Height Fieldマスク ¶
マスクは、効果を特定の領域に制限します。
Height Fieldと組み合わせて使用することで、地形を出現させたい領域を定義することができて、そのマスク外の領域は平坦なままとなります。
⇥ Tabキーを押してタブメニューを開いてhfmaskと入力すると、マスクの作成と操作を行なうための多数のノードが表示されます。
基本概念を説明するために、まずはノイズマスクから始めましょう。
Tip
マスクに関する詳細情報は、Height Fieldマスクのページを参照してください。
基本的なHeight Fieldを既に作成済みの場合は、その既存のネットワークでそのまま進めて構いません。 Height Fieldのスケールや見た目は問題ありません。 以下に、作成予定のネットワークのプレビューを載せます。
-
タブメニューから
HeightField Mask Noise SOPを配置します。
-
効果を確認するために、この新しいマスクノードを既存のHeightField SOPとHeightField Noise SOPノードの間に配置してください。 このマスクノードを以下のように接続します。
-
1番目 の入力をHeightField SOPの出力に接続し、
-
出力をHeightField Noise SOPの 2番目 の入力に接続します。
-
-
マスクノードのパラメータを確認すると、HeightField Noise SOPと同じパラメータ( Amplitude 、 Element Size 、 Noise Settings セクション)があるのがわかります。これらのパラメータを調整することで様々な見た目を表現することができます。 なお、 Amplitude はHeight値の乗数として機能します。
マスクの実際の見た目を制御するために、マスクノードの青い Display/Render フラグを有効にしてください。 すると、赤と白のパターンが表示され、山はその 赤 の領域にのみ生成されます。
Tipsとメモ ¶
-
Terrain デスクトップには、地形作業用に設計された専用のシェルフセット、Radialメニュー、独自のペインレイアウトが用意されています。
-
適切なノードを検索する際、
height fieldではなくheightまたはhfと入力することで、⇥ Tabメニューのスマート補完機能を活用することができます。 例えば、hfnoiseと入力すると、利用可能なすべてのHeightField Noise系ノードの一覧が表示されます。 -
Height Fieldとマスクは通常のHoudiniボリュームであり、ボリュームを扱うあらゆるジオメトリ(SOP)ノードを使用して編集することができます。
サブトピック ¶
生成 ¶
-
HoudiniのHeight Fieldを用いた基本的なワークフロー。
-
マップからディテールの細かい地形を生成することができます。
-
必要な場所にカスタムの丘や山を生成します。
-
レイヤを積み重ねてマスクを適用することで、よりリアルな表現を高めます。
-
頂上に近いほど段状の地形を生成します。
-
地形を形作って自然な見た目にします。
-
アーティストの気分で、ご自身で景観をペイントしましょう。
-
任意のジオメトリをHeight Fieldの一部に変換します。
-
パッチ(継ぎ合せ)とカットアウト(切り抜き)を用いて地形を組み立てます。
-
基本的なジオメトリパターンからリアルな地形を生成します。
-
地形の解像度を段階的に上げます。
-
地形を変換、エクスポート、特徴豊かにします。
散布 ¶
-
地形を風景に変換します。
-
散布ポイントを完全制御します。
-
アトリビュートを使用して、インスタンスの散布を制御します。
-
Height FieldをSolarisに取り込んで、Karmaでレンダリングします。
マスク ¶
自然現象 ¶
-
山を塵に変換します。
-
山が崩れて岩になる時。
-
(山から流れ落ちていく)Flowフィールドを生成します。
VEX ¶
-
VEXによって、地形、マスク、レイヤをカスタマイズします。
-
風と砂で地形を形成します。
-
Abelian Sandpile Model(アベリアン砂山モデル): 基本編
砂によるHeight Fieldの侵食。
-
Abelian Sandpile Model(アベリアン砂山モデル): 上級編
砂と風によるHeight Fieldの侵食。
-
娯楽向けの3Dフラクタル。
テクスチャ ¶
Shallow Water Solver(浅水ソルバ) ¶
-
Shallow Water Solver(浅水ソルバ): 入門
洪水のHeight Field
-
Shallow Water Solver(浅水ソルバ): フィールド
Shallow Water Solverで魅力的な効果を生成します。
-
Shallow Water Solver(浅水ソルバ): 最適化
浅水シミュレーションの設定と最適化。
-
Shallow Water Solver(浅水ソルバ): 出力
浅水シミュレーションの保存と変換。