STEP 4:地表に岩を配置する
<STEP 3>で作成した土台のサーフェスに岩を配置します。HeightField Erodeは、形状を作る以外にも様々なアトリビュートが作られます。STEP 3・手順【5】に載せたパラメータ中に表示されているのは「flow」という名のアトリビュートです。これと、地形の傾き具合を利用し、より凹んだところと面が平らな所に対して、より多くの岩が配置されるように「density」アトリビュートを作成します。こうすることで物理的に説得力のある岩の配置が行えます。
【1】地形の傾き具合は、上向きのベクトル{0,1,0}と法線の内積を取ることで取得できます。その値とflowアトリビュートを混ぜ、さらにRampで制御できるようにすることでアートディレクタブルなコントロールが可能です。
【2】スキャッタでポイントを配置します「Density Attribute」にチェックを入れることで、深度(Density)アトリビュートの強度を分布に使用できます。
【3】このポイントにcopy to pointsで岩を配置します。ポイントに大きさpscaleと回転orientの値をもたせておきます。STEP 3・手順【1】に載せたノードツリー中にある「pscale1」にて、以下の値を設定します。
@pscale = fit01(pow(rand(@ptnum),10),0.4,1) * 4;
【4】本来はヒーロー的な岩をいくつか用意し、バラバラにStampで配置するのが望ましいのですが、今回はカメラからの距離を考慮し、すでに物理的に説得力のある分布ができているので全て同じ形状の岩【画像上段】をサイズと回転をランダムにするだけで十分な結果が得られました【画像下段2枚】。これで土台部分の完成です。レンダリングを実行する際は、1.上側部分、2.土台のサーフェス、3.Scatterされた小さな岩という3つの構成要素をMergeせずに別々にBgeoで書き出した方が何かと効率的です。全てMergeしてしまうと、1つのネットワークの変更があった場合にすでに完成した部分をその都度Mergeするという、非効率なつくりになってしまうからです。冒頭に載せた4枚のイメージは、一番最初のシルエットを決める形状を配置したScatterのシード値を変えただけで自動的にバリエーションが作成されています。
「アートディレクタブルなアセット制御のしくみをプロジーシャルに構築する<2> ~岩石の多様化~」につづく
info.