H16新機能 コンパイルブロック 8


こんにちは、篠島です。Forループの説明もした所で、以前の記事でもコンパイルブロックの簡単な使い方を説明しましたが、今回はもうちょっと深く解説していきます。

 

下の画像のような Box 毎に異なる分割をするにはどうすればいいか?

 

 

今まで通りに作るならば Copy SOP で簡単にできますね。ポイント毎に異なるアトリビュートを作り、それを元にスタンプ機能によって分割をコントロールさせればいいわけです。Subdivide SOP のDepth パラメーターの所でスタンプエクスプレッションを使っています。

 

 

しかし、これでは並列処理されません。次にコンパイルブロックで並列処理するために、Copy Stamp SOP で作っていたものを For ループを使って作り直さなくてはいけません。この記事でコンパイルブロックの制限について書きました。その制限の一つが 「stamp() エクスプレッションが使えない」 というものでした。なので Copy Stamp SOP ではなくて、 Copy to Points SOP を使い、ボックスを単純にポイントにコピーします。それに Copy Stamp SOP はコンパイルに対応していないので使いたくても使えません。

まずはコンパイルブロックは考えずにForループだけ作ります。Forループの記事でも説明しましたが、Forループのメタデータを元に、現在のループのイテレーションによりランダムな値を生成して Subdivide SOP のパラメーターを設定しています。

 

ここで一つ注目してほしいのが、Copy to Points SOP はインプットが2つあります。Forループの Block Begin と Block End は一つづつあります。これでエラーにはなりませんが、下の図のように Block Begin をインプットの数だけ作ってやるとネットワークが見やすくなるし、コンパイルブロックで囲んだときにも後々のエラーを防ぐことにもなります。新しく追加した Block Begin の Method はFetch Input にするのを忘れずに。Fetch Input とはループの度にただ単純にインプットのデータを渡してるだけです。

 

次回はコンパイルブロックで囲んでいきます。