プロシージャルにOverwatch風の建物を作る
前回に引き続き、自分用の解説を挟みながらSimon Houdiniさんのチュートリアルをやってみます。重要な機能や考え方がギュッと詰まっていて良い動画です。
やや長いので何回かに分けます。
※ 記事の内容は元のチュートリアルから変えている部分もあります。
MultiParamBlockを作成する
階層ごとに大きさを変更するため、MultiParamBlockという仕組みを作成します。MultiParamBlockのTabを作成すると、要素を増やすごとにタブとその中身も追加でき、項目数を可変できる自由なパラメーター群を作成できます。
パラメーターをリンクする
最初に作成したForEachNumberのカウント数をHDAのFloors(タブで増やす階層の数)に関連付けます。
さらにBox SOPのSpere Input 0を表示して、Spere Inputにforeach_countをリンクします。Spere Inputはノード参照を簡単に行うための仕組みです。Spere Inputにより、foreach_countのアトリビュートは引数-1で参照できるようになります。
strcatは文字列の連結です。iterationの数に1を足して、x_#の値を参照します。Houdiniは文字列の連結が少し煩わしいですね…
ch(strcat("../x_",detail(-1,"iteration",0)+1))
階層を重ね合わせる
Block End の Gather Method を Merge Each Iteration から Feedback Each Iteration に変更します。Merge Each Iteration は ループの終わりにジオメトリを合成しますが、 Feedback Each Iteration は ループの処理ごと合成します。
今回は階層を重ねるために前の階層の天面に新しく作った床面をスナップさせたいので Feedback Each Iteration に設定します。
さらにBlock Begin の Method も Fetch Feedback に変更します。これにより、Block Begin は一つ前の処理を返すことになります。
MatchSize SOP で前の階層の天面に新しく作った床面をスナップさせます。