Houdini 21.0 Height Fieldと地形

マスキング

修正したい領域やディテールを加えたい領域を定義します。

On this page

マスクは、地形処理において最も重要な概念の一つです。 マスクを用いることで、地形を精密に成形できるだけでなく、パラメータやアトリビュートによる制御も可能となります。 マスキング専用のノードが数多く用意されていることからも、その重要性が伺えます。 マスクによって、浸食や段丘形成といった効果を適用する領域を定義することができます。 マスクは常に赤色で表示され、その赤色領域(s)の 内部 にあるすべての要素が影響を受け、修正されます。

Height Fieldを扱う際には、レイヤを操作します。 マスクは基本的にレイヤに他なりません。 複数のマスクレイヤを作成して、用途に応じて異なる名前で保存することができます。 また、複数のマスクを1枚のレイヤに合成したり、HeightField Terrace SOPなどのノードで作成したマスクを再利用して特定の修正領域を指定することもできます。 ブラー処理によって滑らかなマスクを作成することができますが、マスクを再描画することなく拡張、収縮、鮮明化するモードも用意されています。 ブラー処理自体もマスク機能をサポートしており、平滑化効果を適用する範囲を正確に定義することができます。

マスクはペイントすることができます。 他にも、特徴部、ジオメトリ、オクルージョンに基づいてマスクを生成することもできます。 さらには、画像ファイルやHoudiniのCOPネットワークからマスクを読み込むとても便利な方法があります。 この方法だと、お気に入りの画像処理ソフトウェアを使って細かなマスクを描画し、それを取り込むことができます。

Tip

マスクは非常に複雑になってしまうので、複数のマスクを扱う必要が出てくる場合があります。 そのため、マスクやノードには識別しやすい名前を付けることを推奨します。

多くのノード(例えば、HeightField Noise SOPHeightField Layer SOP)には、マスクを接続するための個別の入力が用意されています。 HeightField Layer SOPは、異なる地形を組み合わせることができ、Height Fieldが合成される領域を制御するためのマスクを描画することができます。

前述の通り、マスクを使用してアトリビュートやパラメータを駆動させることができます。 例えば、HeightField Erode SOPには、いくつかのパラメータマスクに対応しています。 そのパラメータのドロップダウンメニューから、そのパラメータを制御するマスクを適用するかどうかを指定します。 そのドロップダウンメニューの初期選択は、 Mask Off になっています。 Mask On を選択すると、マスク入力フィールドが表示されます。 HeightField Erode SOPの2番めの入力にマスクを接続すると、そのマスク入力フィールドが有効になり、マスクの名前を入力することができます。 各マスク入力フィールドの横にあるドロップダウンメニューをクリックしてマスクを選択することもできます。 そこには利用可能なすべてのレイヤが表示されます。

最終的な地形を見やすくしたいのであれば、マスクを削除すると良いでしょう。 これによってリソースの節約にもつながります。 マスクを削除するには、HeightField Layer Clear SOPをネットワークに追加します。 Layer 1 フィールドにmaskと入力してそのマスクを削除します。

マスクのペイントその1

このワークフローでは、マスクのあらゆる特性を完全に制御することができ、 マスクの領域、サイズ、滑らかさ、不透明度を正確に定義することができます。 マスクの形状に満足しなかった場合、ブラシストロークを完全にリセットしたり、特定の部分のみを消去することができます。 Houdiniのペイントツールのすべての機能を活用することができます。

  1. HeightField Paint SOPを追加します。その入力を地形ノードの出力に接続します。 そのHeightField Paint SOPの出力を、マスクを適用したいノードの 2番目 の入力に接続します。

  2. ビューポート上にマウスカーソルを置いてEnterを押して、そのHeightField Paint SOPのブラシモードに入ります。 すると、ブラシとして赤い球体が表示されます。でそのブラシサイズを変更することができます。

  3. を押しながら地形上でマウスを動かしてマスクを描画します。 この操作によって地形上に赤いストロークが生成されます。

  4. マスクの不透明度/透明度を変更するには、HeightField Paint SOPの Opacity 値を調整します。 1の値は完全不透明で、0の値が完全透明となります。

デフォルトの Paint ModeReplace です。 既にマスク処理された領域上で例えば FG Value0.2にしてペイントすると、 ブラシは元のマスクを除去し、それらの領域にその0.2の新しいマスクを作成します。 一方、 Paint ModeAdd に変更すると、マスクにはその新しい値が加算されます。

ブラシを消しゴムとして使用することもできます。 そうするには、 Paint ModeReplace に設定します。 次に、 FG Value0に変更して、修正したい領域をペイントします。

Tip

をクリックしてドラッグすることで、 FG Value を直接制御することができます。 これによって、ビューポートを離れることなく、マスクに微妙なニュアンスを描画することができます。

ライブモードも利用することができます。 標準のセットアップを例にすると、HeightField Noise SOPの青い Display/Render フラグを有効にします。 次に、 HeightField Paint SOP をクリックして、上記手順#2で説明した描画モードを有効にします。 マスクを描画すると、その操作結果がビューポートに直接反映されます。

マスクのペイントその2

一部のHeightField系ノードに Add a Mask Paint ボタンが搭載されていることにお気づきの方もいることでしょう。 そのようなノードの例がHeightField Terrace SOPです。 このボタンは有効な場合と無効な場合があり、残念ながら一貫したルールはありません。 このボタンが無効な場合は、上流ノードの出力を、そのペイントボタンが搭載されたノードの 2番目 の入力に接続してください。

そのボタンをクリックすると、HoudiniがHeightField Paint SOPを追加して自動的に接続します。 これによってマスクのペイントが可能になります。 利用可能なオプションやツールは前述の内容と同じです。

ジオメトリマスク

HeightField Mask by Geometry SOPは、任意のジオメトリを用いてマスクを作成することができます。 そのHeightField Mask by Geometry SOPの 2番目 の入力に接続されたジオメトリが地形に投影され、その断面が表示されます。 Merge SOPを介して複数のジオメトリをマージすることで、複雑で個別の形状のマスクを作成することができます。 HeightField Mask by Geometry SOPには以下の特徴があります:

  • 別途HeightField Blur SOPを使用することなくマスクに直接ブラーをかけることができます。

  • マスクを反転させることができます

  • マスクジオメトリを移動または変形させることで、アニメーションするマスクを作成することができます

  • Combine with ExistingAdd に設定することで、既存のマスクにジオメトリマスクを加算または減算することができます

以下のスクリーンショットは、既存マスクからジオメトリマスクを減算したHeightField Mask Noise SOPによるセットアップの例です。

画像マスク

お気に入りの描画/ペイントアプリケーション内で画像を作成したり、任意の画像を取り込んで、それをマスクとして使用することもできます。 他にも、HoudiniのCOPネットワークでマスクを構築することもできます。 画像ベースのマスクの優れた点は、色が不透明度値に変換されることです。 これによって、地形形成に適用する効果の強さを精密に制御することができます。 また、複雑なパターンを作成することもできます。

  1. ファイルをインポートするには、HeightField File SOPをネットワークに追加して接続します。

  2. Open floating file chooser ボタンをクリックして、ディスクから画像を読み込みます。 この画像はグレースケールである 必要はありません

  3. 画像が薄くなったり、細部がほとんど見えない場合があります。 その場合は、他の Channel を選択してコントラストを上げてみてください。

  4. Type メニューから Mask を選択します。

  5. 画像の寸法は Size ▸ Size で制御します。この値の単位はメートルで、Heightfield SOPの Size パラメータと同じです。

代わりにCOPベースの画像を使用したい場合は、 SourceCOP に設定します。 COP Network パラメータの Open floating file chooser ボタンをクリックして、マスクに変換したいCOPノードを選択します。

既存のマスクと画像ベースのマスクを合成することもできます。 Layering セクションには、いくつかのオプションを備えた Layer Mode メニューがあります。 画像マップの内容は関係なく、Houdiniはあらゆる画像をマスクに変換します。

ノイズマスク

ノイズマスクは、異なるサイズの斑点や領域を持つランダムなマスクを素早く作成する方法です。 基本的にノイズマスクはHoudini内の他のノイズベースのノードや関数と同様に動作します。 ノイズタイプを選択して、様々なパラメータによってノイズパターンを調整します。 他のノード(例えば、Attribute Noise SOP)との主な違いは、 Animation セクションがないことです。

  • ノイズマスクを作成するには、HeightField Mask Noise SOPをネットワークに追加して接続します。

  • Element Size パラメータでノイズパターンのサイズを制御することができます。 値が小さいほど斑点が多くなります。 これはグローバルなサイズ係数であるのに対して、 Scale パラメータは軸方向別に異なる伸縮を適用することができます。

他のタイプと同様に、既存のマスクとノイズマスクを合成することができます。 Combine Method ドロップダウンメニューには、マスクの加算や減算などの複雑なパターン生成のためのいくつかのオプションが備わっています。

Feature(特徴)マスク

地形には高さ、傾斜、曲率など様々な特徴があります。 このような特徴をマスク生成に活用することができます。 特徴マスクは自然の特性を用いるので、説得力のある結果を生成します。 複数の特徴を組み合わせても制御性を失うことはありません。 各特徴には独自のパラメータセットとカスタマイズ可能なランプが備わっています。

Combine with Existing ドロップダウンメニューからどれかのモードを選択することで、既存のマスクと特徴マスクを合成することができます。

合成マスク

マスクベースのたいていのノードには、異なるマスクをマージする方法を指定するための Combine with Existing ドロップダウンメニューが備わっています。 例えば、HeightField Paint SOP(A)とHeightField Mask By Feature SOP(B)という2つのマスクが存在するシーンを想像してみましょう。

そのドロップダウンメニューのデフォルトのメソッドは Replace になっています。 マスクBの青い Display/Render フラグを有効にすると、そのマスクのみが表示されます。 マスクBがマスクAを置換し、そのペイントされたマスクは見えなくなります。

次に、そのドロップダウンメニューから Add を選択します。 これによって、マスクAとマスクBが合成された結果が得られます。 マスクの減算、乗算、ブレンドなどのモードも用意されています。

マスクの値は0から1の範囲に制限する必要はなく、1を超える値も適用することができます。 マスクの強度は、地形やそのアトリビュートに直接影響を与えます。

マスクレイヤ

たいていの場合、1枚のマスクだけでは不十分です。 しかし問題は、HoudiniのHeight Fieldはmaskレイヤを1枚しか持てないことです。 目的別または効果別にマスクを作成したい場合はどうすればよいでしょうか? VEXスクリプトに渡すために様々なタイプのマスクが必要な場合はどうすればよいでしょうか? maskレイヤを新しいレイヤに変換する標準的なワークフローがあります。

まず、デフォルトのmaskレイヤを作成します。 例えば、HeightField Mask by Feature SOPを使用してmaskレイヤを作成します。 そこで、 Mask by Curvature などの特徴の1つを選択します。その後に、その結果を別のcurvatureレイヤに保存したいです。

  1. どれかの特徴のマスクを指定した後に、HeightField Copy Layer SOPを追加して、その入力をマスクノードの出力に接続します。

  2. そのHeightField Copy Layer SOPの Destination フィールドに新しいレイヤの名前を入力します。 ここでは、curvatureとします。

  3. 元のmaskレイヤを上書きしたくない場合は、HeightField Mask Clear SOPを追加します。 このノードは、maskレイヤを削除せず、その値を0に設定します。

その新しいcurvatureレイヤを表示するために、HeightField Visualize SOPを配置します。 そこには9個の Layer パラメータと関連ドロップダウンメニューがあります。 どれかのメニューを開くと、 curvature を選択することができます。 それに呼応した色でそのレイヤがビューポートに表示されるはずです。 色が気に入らないのであれば、もちろん変更可能です。

マスクのクリア

マスクをクリアしても、マスクが削除されるわけではなく、代わりに、各マスクポイントに定数値が割り当てられます。

  1. HeightField Layer Clear SOPをネットワークに追加して、マスクが最後に使用されたノードの 直後 に接続します。

  2. Number of Clears パラメータに、クリアしたいマスクの数を入力します。 このノードは、作業対象の各レイヤ/マスク毎にパラメータセットを作成します。

  3. Layer (n) パラメータにはドロップダウンメニューが備わっています。 ここから適切なマスクを選択することができます。

  4. Value (n) パラメータで、マスクの定数値を決定します。 0と入力すると、マスクレイヤは残りますが、Height Fieldオペレーション(s)に影響しなくなります。

マスクの削除

マスク(またはその他のレイヤ)を削除したいのであれば、Delete SOPを使用します。 例えば、erosionmaskマスクを作成したとします。 これが不要になったため、完全に削除してメモリを解放したいです。

  1. マスクが不要となる箇所のネットワークにDelete SOPを追加して接続します。

  2. Group パラメータの右側にある関連ドロップダウンメニューを開きます。 そこからerosionmaskを選択します。すると、そのエントリが@name=erosionmaskに変わります。

  3. erosionmask のみを残して 他のレイヤ(maskheightを含む)を削除したいのであれば、 Operation パラメータを Delete Non-Selected に設定します。

Note

Delete SOPの代わりに、Blast SOPを使用しても構いません。

パラメータマスク

マスクを使用してパラメータを駆動させることができます。 例えば、HeightField Erode SOPの Hydro セクションにある Erosion Rate パラメータや Deposition Rate パラメータといった一部のパラメータには、関連ドロップダウンメニューが備わっています。 デフォルトでは Mask Off が選択されていますが、 Mask On を選択すると、パラメータの影響を制御するマスクの名前を入力できるようになります。

Height Fieldと地形

生成

  • 地形の生成

    HoudiniのHeight Fieldを用いた基本的なワークフロー。

  • マップからHeight Fieldを生成

    マップからディテールの細かい地形を生成することができます。

  • 単独の山

    必要な場所にカスタムの丘や山を生成します。

  • レイヤ

    レイヤを積み重ねてマスクを適用することで、よりリアルな表現を高めます。

  • 段丘化(Terracing)

    頂上に近いほど段状の地形を生成します。

  • 歪曲(Distortion)

    地形を形作って自然な見た目にします。

  • 地形のペイント

    アーティストの気分で、ご自身で景観をペイントしましょう。

  • 投影

    任意のジオメトリをHeight Fieldの一部に変換します。

  • パッチ(継ぎ合せ)

    パッチ(継ぎ合せ)とカットアウト(切り抜き)を用いて地形を組み立てます。

  • パターン

    基本的なジオメトリパターンからリアルな地形を生成します。

  • リサンプリング

    地形の解像度を段階的に上げます。

  • 様々な特徴部

    地形を変換、エクスポート、特徴豊かにします。

散布

マスク

  • マスキング

    修正したい領域やディテールを加えたい領域を定義します。

  • ライトマスク

    地形上の日照領域からマスクを作成します。

自然現象

VEX

テクスチャ

Shallow Water Solver(浅水ソルバ)