| On this page |
Scattering(散布)は、その文字通りで、地形に命を吹き込む重要なテクニックです。 散布を用いることで、風景に数千ものオブジェクトを配置して、リアルなルックを表現することができます。 投影のページで、サイズが変化するボックスを地形上に散布して山脈を生成する基本的な例を既にご覧になっていると思います。 その投影シーンでは、この散布処理の柔軟性を説明しています。 しかしながら、この章ではそれにとどまらず景観、森林、草原、そして完全な生態系の生成を扱います。
散布は植物の追加や森林の作成に役立つだけではありません。 山の垂直面を装飾するのにも活用することができます。 これらの部分は、技術的な理由でHeight Fieldシステムで考慮されていません。 別の発想として、岩、石、砂利を地形の地面に追加すれば良いです。 あるいは、河床を小石で覆うのも良いでしょう。
Tip
現在のところ、Houdini Labsチームは、Height Field用のワールドビルディングシステムを開発中です。
バイオーム システムは自然界の法則と仕組みを利用して、現実的で制御可能な環境を生成します。
このガイドは4ページに分かれています:
-
“散布: SOP”では、シーンの準備方法を説明しています。
-
散布: ポイントの除去では、散布ポイント数を制御する方法を説明しています。
-
散布: アトリビュートでは、
pscaleやorientといったアトリビュートを作成します。 -
散布: Solarisでは、地形をレンダリングする方法を説明しています。
初期の検討事項 ¶
景観にオブジェクトを配置していく前に、全体のシーン作成工程の最終段階であるレンダリングについて、少し時間を取って考えてみましょう。 このような初期段階でそれを考えておくのが良い理由は、HoudiniにはシーンをSolarisに取り込む手段が複数用意されているからです。
おそらく最も便利な方法は、Height Fieldが存在するSOP環境内ですべての散乱処理を完結させることです。 その後、そのシーン全体をSolarisにインポートすることで、HoudiniのKarmaエンジンでそのシーンをレンダリングすることができます。 先ほど言ったとおり便利な方法ではありますが、まったく最善の方法とは言えません。 メモリ、パフォーマンス、シーン構成を考慮すると、ワークフローを分割することを推奨します。 したがって、SOP内で実行可能な(あるいは実行すべき)処理とSolarisで行なう方が良い処理を区別することが重要です。
Note
この例では、地形とポイントはHoudiniの obj レベルで作成されています。
これは、(いつものことですが)シーンを組み立てる一つの方法に過ぎません。
別の一般的な方法は、Solaris内でSOP Create LOPを使用して、すべてを stage レベルで管理できるようにすることです。
スケール ¶
スケールは、散布を考慮する上で最も重要な検討事項の一つです。 デフォルトのHeight Fieldが1000m×1000mのサイズであることを常に念頭に置いてください。 このような巨大なスケールでの作業に慣れていない場合は、大きすぎる木や岩を作成しないように注意してください。
スケールの感覚を把握するために、参照用オブジェクトを追加すると便利です。 例えば、樹木の平均的な高さ、大きな岩の直径、建物の寸法などを示すために、異なるサイズのオブジェクトを作成すると良いでしょう。
基本的なセットアップ ¶
このセットアップに必要なノードはわずか数個です。 このガイドでは、地形の作成からKarmaでのレンダリングまでの手順を説明しています。 また、インスタンス化をSOP内ではなくSolaris内で直接行なう方が(通常では)優れている理由についても学習します。 まずは地形の作成から始めましょう。
-
Houdiniの obj レベルで、⇥ Tabキーを押してタブメニューを開きます。
hfとタイプして、 HeightField を選択すると、事前設定済みのGeometry OBJが作成されます。 そのノードをダブルクリックして中に入ります。 このノードの中には
Heightfield SOPがあります。
-
Heightfield Noise SOPを追加して、 1番目 の入力をそのHeightfield SOPの出力に接続します。 このHeightfield Noise SOPは、以下に示すように丘や谷のある実際の地形を生成します。
散布ポイント ¶
散布ポイントは、プレースホルダのようなもので、インスタンスオブジェクトが出現する位置を定義します。
散布ポイントには、インスタンス/プロトタイプを駆動させるアトリビュート(例えば、orientやpscale)を格納することもできます。
インスタンス化とは、オブジェクトを散布ポイントにコピーする処理のことです。
Heightfield Scatter SOPは、インスタンスオブジェクト(s)を配置するポイントを作成します。
-
散布ポイントは、常に SOPネットワーク 内で作成し、その後に Solaris へ転送します。
-
インスタンス化は、 Solaris 内で直接行なうべきです。
このノードを作成するために、以下の手順に従ってください:
-
Heightfield Scatter SOPを追加します。
-
そのHeightfield Scatter SOPの 1番目 の入力をそのHeightfield Noise SOPの出力に接続します。
-
青い Display/Render フラグを有効にして、その結果を表示します。
これによって、密に覆われた地形が得られます。 Heightfield Scatter SOPには、もっと多くのバリエーションを得るためのパラメータがいくつか用意されています。 Scattering セクションには、ポイント/インスタンスの数を間接的に制御可能な Covering パラメータがあります。 実際のポイント数を指定したいのであれば、 Scatter Method パラメータを Total Points using Mask Layer に設定します。 その後、 Total Point Count パラメータを設定します。
その他のパラメータの説明については、HeightField Scatter SOPのヘルプを参照してください。
マスキング ¶
マスクを使用することで、起こり得る均一な見た目を解消し、密度にばらつきのある領域を作成することができます。
maskレイヤを使用することで、そのマスクで覆われた領域のみにポイントを生成することができます。
マスクの色の濃淡は、ポイントクラウドの密度も決定します。
Houdiniの地形システムで用意されている あらゆる マスキングメソッドを利用することができます。
別の方法としては、VEXスクリプトを記述することで、独自のマスクを作成することができます。
自然な見た目のマスクを手っ取り早く取得する方法として、Heightfield Mask Noise SOPの使用が挙げられます。
-
Heightfield Mask Noise SOPを追加して、その入力を地形を生成するHeightField Noise SOPの出力に接続します。
-
そのHeightfield Mask Noise SOPの出力をそのHeightfield Scatter SOPの 2番目 の入力に接続します。
すると、Heightfield Scatter SOPの Mask Layer パラメータが有効になり、 Add a Mask Paint ボタンをクリックできるようになります。
そのボタンをクリックすると、Houdiniが
HeightField Paint SOPを追加するので、そのノードを使って独自のマスクをペイントすることができます。
Tip
個別に マスクノード を使用したくないのであれば、そのHeightField Noise SOPの出力をそのHeightfield Scatter SOPの 2番目 の入力に接続しても構いません。
これによって、Height Fieldに含まれているデフォルトのmaskレイヤにアクセスすることができます。