ビボロク。どこかで誰かのためになるWebのTIPS・ノウハウ。備忘録として残しておきます
   
           

【ジオメトリノード】オブジェクトをカーブに沿って並べて、INDEXで出し分ける方法

  • 投稿日/更新日
  1. home
  2. blender

Blenderで並べたオブジェクトの先頭や末尾を別のオブジェクトにしたいことがあります。例えばマンションだと1階エントランス(先頭)と中間の部屋(配列)と屋上(末尾)といったふうに。通常であれば配列モディファイアを使えば簡単に実現できます。

上記例ではパックマン(先端)とえさ✕3つ(配列)、モンスター(末尾)で並んでいます。

えさのオブジェクトに対して、配列モディファイアーを適用して数を3つ、項目「先端」の「開始のふた」にパックマンを、「終了」にモンスターのオブジェクトを指定するだけです。こういった配列をジオメトリノードで実現する方法を備忘録として残しておこうと思います。

事前準備

まずは「パックマン」「モンスター」「エサ」のオブジェクトを作っておきます。そしてジオメトリノードを作るためのオブジェクトとしてモンキーを置いてみました。このオブジェクトはジオメトリノードによって表示されなくなるので何でもいいです。

カーブを作成してオブジェクトを置く

ジオメトリノードの名前がちょくちょく変わりますが気にしないでください。

モンキーに対してジオメトリノードを作成し、カーブプリミティブからカーブラインを選択して、X軸に0.5mを入力しました。するとオレンジ色の真っすぐの線が生成されるのがわかります。

上記のようにカーブのポイント化を間に繋ぐと、このカーブにはポイントが2つあることがわかります。このポイントは開始位置から整数の番号が振られており、これをINDEXとBlenderでは呼んでいるようです。重要なのは0からスタートすることです。Javascriptでも要素の1つめを0として扱ったりますが、なれない人にはややこしいかもしれません。

このカーブのポイントにオブジェクトを置いてみましょう。ポイントにインスタンスオブジェクト情報を使用して上記のようにつなぎます。ポイントにパックマンが置かれました。

カーブラインカーブリサンプルを繋ぐとポイントを増やすことができます。数を5としたのでポイントが5つに増え、パックマンが5つになりました。

INDEXを用いて意図したポイントにオブジェクトを置く

以上の流れを汲むと、INDEXが0の時にパックマンを、1から3にはエサを、4にはモンスターを置けばいいことになります。入力>インデックスユーティリティー>比較を追加して下記のように繋いでみましょう。この比較ノードは他のノードと同様、中の項目値を変えるとノードの名称まで変わってしまいます。これなんとかならないんですかねぇ。。

比較ノードを「同じ」にして、Bを0に。オブジェクトはパックマン
比較ノードを「同じ」にして、Bを4に。オブジェクトはモンスター
比較ノードを「以上」Bを1,「以下」Bを3。オブジェクトはエサ

エサだけは1以上3以下という条件になるので、And条件ノードが必要です。ユーティリティー>プール演算を利用しましょう。

これを全部ジオメトリ統合で繋ぐと、配列モディファイアーと同じ結果になります。

同じノードは1つにして、可変にしてみる

なるべく同じノードは1つにして、数値などを変えても対応できるようにしてみたのが上記ノードです。これらの設定をベースにすれば、長さを変えたり、複雑なカーブでも自動的に並んでくれるノードが組めると思います。

Endpoint Selection(端を選択)

INDEXで指定するポイントが、カーブの端のみ(または端を含めてN個など)の場合は、端を選択ノードが便利です。

始端サイズを1,終端サイズを0にすれば、最初のポイント1つだけが選択される仕組みです。

                   

備忘録として残しておきます。