反転フラクタルを使ったポピュレーションのマスキング

この参照画像のように、暖色系の黄色がかった木と寒色系の暗緑色の木のパターンが並置されているように、特定のポピュレーションの別個の区分帯を作成したい場合があります。
場合によっては、2つのポピュレーション間でマスク(『Band_A_Trees』)を共有し、一方のポピュレーションの"Invert density shader"チェックボックスを有効にするだけで、このような結果が得られる場合があります。
しかし、マスクを使用してポピュレーションの"Area length a"と"Area length b"パラメータで定義されたエリア内の仕切られた場所にインスタンスオブジェクトを制限する場合、マスクを反転させると、探している解決策が得られない場合があります。これは、マスクを反転させると、ポピュレーションの"Area length a"と"Area length b"パラメータで定義されたエリアの範囲までインスタンスを生成出来るようになるからです。
2つのほぼ同じ『Power fractal shader』を使用して、必要なマスクを作成する方法を探ってみましょう。特定の樹種を一緒に束ねるために使用する最初のマスクを作成するには、ノードネットワークビューで右クリックし、"Create Shader"->"Colour Shader"->"Power Fractal shader v3"の順に選択します。
作成した『Power fractal shader』ノードをダブルクリックでノードパネルを開き、ノード名を"Band_A_Trees"に変更します。

地形上のマスクを視覚化するために、メインメニューの下にある【Shader】ボタンをクリックして新しいシェーダを追加するために、"Add Layer "->"Surface Layer"を選択します。

"Enable test color"のチェックボックスを有効にすると、シェーダが地形に適用されている場所を正確にすばやく確認する事が出来ます。ノードネットワークビューで、先ほど作成した『Power fractal shader』ノードの出力を『Surface layer』の「Mask by shader」の入力端子にドラッグして繋げます。

まず、粗さが少なくコントラストの高いマスクを作成したいので、『Power fractal shader』の[Colour]タブで、"Color contrast"の値を1に、"Color roughness"の値を0に設定します。 "Color offset"の値は-0.3程度に設定します。

[Tweak Noise]タブで、"Noise flavour"を"Perlin ridges"に設定します。"ridge(隆起")ノイズパターンは、"billow(波状)"パターンの反対で、狭く尖った隆起が丸みを帯びた底へ落ちていくようなパターンです。Power Fractal Shader v3のTweak Noiseタブを参照して下さい。

[Warping]タブで、"Lead-in warp effect"を"1 Octave Perlin warp"に、"Lead-in warp amount"の値を2に設定します。これにより、フラクタルパターンをランダムな波状に歪曲させて配置を変えます。

[Scale]タブで、地形やシーンに合わせて"Feature scale"と"Lead-in scale"を調整します。必要に応じて測定ツールを使用して下さい。

マスクが完成したら、"Band_A_Trees"の『Power fractal shader』ノードをコピー&ペーストで複製します。複製したノードをダブルクリックして"Band_A_Trees"とノード名を変更し、[Colour]タブに移動します。

目的は、フラクタルノイズパターンの色を反転させる事です。まず、"Apply high colour"チェックボックスをオフして無効にします。この効果は、フラクタルパターンの部分と『Power fractal shader』ノードの出力に黒または0の値を渡す事です。次に、"Apply low colour"チェックボックスをオンにして有効にし、パラメータ値値を白または1に設定します。これで、"Band_A_Trees"の真逆のマスクが出来ました。

この複製した"Band_A_Trees"のマスクを可視化するには、2つ目の『Surface Layer』を追加し、1つ目と同じように「Mask by shader」の入力端子にドラッグして繋げます。2つ目の『Surface Layer』の"Enable test color"のチェックボックスを有効にし、カラーをデフォルトのピンク以外に変更します。

この方法のもう1つの利点は、2つのパワーフラクタルを持っているので、一方のパターンのパラメータを微調整して、必要に応じてバリエーションや調整を行う事が出来ます。例えば、"Colour offset"の値を調整してフラクタルパターンの形状を拡大したり縮小したりする事で、1つのポピュレーションのインスタンスオブジェクトがもう一方のポピュレーションのパターンに入り込む事が出来ます。
左の"Band_A_Trees"は元のフラクタルパターン、中央の"Band_B_Trees"は反転フラクタル、右の"Band_C_Trees"は"Colour offset"値を少し変更したものです。

これで2つのマスクが設定できたので、ポピュレーションに適用する事が出来ます。

1つ目のポピュレーションオブジェクトを追加し、インスタンスがどのように分布しているかを正確に可視化できるように、"Spaceacing variation in a,b"と"Maximum Y rotation"の値を0にします。"Use density shader"に作成した"Band_A_Trees"を適用し、[Populate Now]をクリックすると、マスクで定義されたとおりに整列した木の配列が表示されます。

反転フラクタルの"Band_B_Trees"をマスクとして使用して、2つ目のポピュレーションオブジェクトを追加してこの手順を繰り返します。

2つのマスクの区分けが確立し、それらが期待通りに機能している事を確認したら、"Spacing variation in a,b"と回転、最小/最高スケールを任意の値を戻す事で、ポピュレーションをランダム化する事が出来ます。

次に、低木のポピュレーションを追加し、適切なマスクを選択する事で、どの区分けに分布するかを選択する事が出来ます。

下画像は、このチュートリアルの手法を使用した結果を示す、ポピュレーションで作成された森林のレンダリングです。木のポピュレーションのはっきりとした区分けを見る事が出来ます。

このチュートリアルのTerragenプロジェクトファイルを Tutorial_MaskPopulationByInvertedFractals_Yellow.zip からダウンロードします。
最終更新:2020年07月30日 23:16