Houdini 21.0 Height Fieldと地形

ライトマスク

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

On this page

太陽光が照射されている領域を特定し、その結果をマスクレイヤとして保存することができます。 この情報は、散乱効果、テクスチャリング、煙霧や霧のような大気現象に役立ちます。 基本的な考え方は、光源の方向を取得して、それが地形上のどこに当たって照射しているのかを調べることです。 下図では、マスクされた領域に散布ポイントがあるのが分かります。

Note

この解は、地平線からの太陽の高度などのいくつかの要素が考慮されていないので、近似値に過ぎません。 かといって、それらを考慮する方法は存在するものの、より複雑な手法が求められてしまいます。

任意のHeight Fieldを作成します。 ここでは、地形の高低差は問題ではありません。 地形データの作成方法について学びたいのであれば、Height FieldイントロダクションのゼロからHeight Fieldを生成するの章をお読みください。

光源

マップを計算するには光源も必要になります。 これは物理的な光源ではなくて、光線の方向を決定する単なるオブジェクトです。

  1. Sphere SOPまたは任意のジオメトリを追加します。

  2. Center パラメータで、そのオブジェクトの位置を設定します。 このパラメータをアニメーションさせることで、時間の経過に伴ってマップがどのように変化するのかを確認することができます。

  3. そのオブジェクトがシーン内で特定しにくい場合は、 Uniform Scale パラメータを上げてください。

スクリプト

以下のスクリプトは、volumegradient関数によって地形の法線を計算します。 法線ベクトルと光源方向を用いて内積を計算します。 その内積は、2つのベクトル間の角度を算出し、スカラー値を返します。 そのスカラー値を用いてマスクを定義することができます。

以下のスクリプトを適用するために、まずHeightField Wrangle SOPを配置します。 その 1番目 の入力を、地形を生成したノード(例えば、HeightField Noise SOPHeightField Erode SOP)の出力に接続します。 次に、⌃ Ctrl + C⌃ Ctrl + Vを使用して、以下のスクリプトをそのHeightField Wrangle SOPの VEXpression パラメータにコピー&ペーストします。

// カスタム光源パラメータ
vector light_pos = chv("light_pos");
float light_intensity = chf("light_intensity");

vector pos = @P;

// 光源の方向を取得します。
vector to_light = normalize(light_pos - pos);

// Height Fieldの法線と照明を計算し、
// その最大値のみを使用します。
vector normal = volumegradient(0, "height", pos);
float illumination = max(0, dot(normal, to_light));

// 照明と強度を乗算します。
// マスクを反転させて、日照領域を取得します。
@mask = 1 - illumination * light_intensity;

カスタムパラメータのlight_poslight_intensityを作成するために、そのHeightField Wrangle SOPの Create spare parameters for each unique call of ch() ボタンをクリックします。 Light Pos パラメータには、光源の Center 値を転送するのが良いでしょう。

  1. Sphere SOPの Center パラメータを右クリックします。 コンテキストメニューから Copy Parameter を選択します。

  2. 次に、HeightField Wrangle SOPの Light Pos パラメータを右クリックして、 Paste Relative References を選択します。 この選択によって、その球体の位置をその Light Pos パラメータに転送するエクスプレッションが追加されます。 球体の位置を変更すると、その Light Pos パラメータも自動的に更新されます。

Light Intensity パラメータは、マスク値をスケールさせる係数です。

マスクの処理

マスクの柔らかさやサイズを制御できるように、HeightField Mask Blur SOPをネットワークに追加することを推奨します。

また、HeightField Copy Layer SOPを使用してカスタムマスクを新規レイヤ(例えば、lightmap)に保存することもできます。 これによって、a)マスクを分離して上書きを防ぐこと、b)必要に応じてレイヤを可視化することができます。

Height Fieldと地形

生成

  • 地形の生成

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

  • マップからHeight Fieldを生成

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

  • 単独の山

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

  • レイヤ

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

  • 段丘化(Terracing)

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

  • 歪曲(Distortion)

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

  • 地形のペイント

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

  • 投影

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

  • パッチ(継ぎ合せ)

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

  • パターン

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

  • リサンプリング

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

  • 様々な特徴部

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

散布

マスク

  • マスキング

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

  • ライトマスク

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

自然現象

VEX

テクスチャ

Shallow Water Solver(浅水ソルバ)