Blednerには配列(Array)モディファイアが存在し、様々な微調整とともにオブジェクトを連続で並べることができる。コピーする個数もしくは繰り返し配置した結果の長さを指定できるが、長さで指定した場合はそれを超えない繰り返し回数のコピーが行われ、指定した長さちょうどにはならない。
という事で、長さを指定した結果、2.3個コピーという端数を処理できるArrayモディファイアをgeometryノードで作成したので記事にしておく。個人的な制作に必要となりそうだったので作成した。
処理結果画面

モディファイア適用前

モディファイア適用後
サルのオブジェクトは合間を詰めて、手前のでこぼこした板オブジェクトは元々の長さのままぴったりオブジェクトを繰り返している。

それぞれ繰り返し回数が端数になっているのがわかる。(5.3回と6.94回)
※なおノードグラフを作るのが面倒なので現在Y軸方向の繰り返しのみしか対応していない。そのうち必要になったら更新するかもしれない。
geometryノードのパラメータ

- 繰り返した結果の長さ
- 繰り返し幅のオフセット(小さくすると合間が詰まる)
- 端数をやめて繰り上げた回数の繰り返しにする ※
- 繰り返し後にこの長さより近い頂点を結合する
※ これは内部処理でメッシュのBooleanを行っているが整数倍近くの特定の長さで上手く切り抜きが行われない事があるため、それを緩和するために用意したもの。通常のArrayモディファイアは繰り下げた繰り返し回数に丸め込まれるので、丸め方が異なる。
geometryノードのノードグラフ
ArrayしてBooleanするだけでいいかと思っていたが、Array処理を行うノードがないので複雑となった。ArrayモディファイアとBoolenモディファイアを2つ使う事でもやりたいことは成し遂げられられるがBooleanのためのBOXオブジェクトを用意する必要があり手間なので、がんばって作った。


内部でBoolean処理をしているがBoolean処理は2つのオブジェクトの境界の頂点位置がXYZどれかでピッタリ同じ数値だと失敗するので、XとZ方向は十分に大きく、Y軸方向はコピー開始方向は少しオフセットを銜える対応をしている。コピー終了方向側はどうしても境界がピッタリになってしまい結果が崩れる(既知の不具合)事があるのでユーザーがパラメータで何とかする運用。

Y軸の最小値で位置合わせする処理もノードグラフで書くと複雑になるので子グループ化しておいた。コードが書けるノードが存在すれば楽になるのだが。
この後さらにニッチな処理をくわえているのだが、一般的に需要がなさそうなのでここまでのものを公開する。
ダウンロード
上記ノードグラフを含むBlendファイルとディスプレイスモディファイアに使っているテクスチャがダウンロードできる。








