【ジオメトリノードの選択を使いこなす】任意の制御点にオブジェクト出し分ける方法(カーブ編)
- 投稿日/更新日
Blenderのジオメトリノードにおいて、カーブの任意の制御点にオブジェクトを配置したい時などがあると思います。例えば特定の角度のみの制御点だけに出したい、といったことがあるのではないでしょうか。メッシュ編で取り扱ったように、メッシュの扱いは比較的わかりやすいのですが、カーブにおいては諸々を計算しないと取得できないこともあって大変です。
名称の再確認
カーブの場合は制御点(Control point)とハンドル(Handle)、そしてセグメント(Segment)があります。制御点(Control point)は制御頂点(Control vertices)とも書かれていたりしますが、本稿では制御点で統一します。
基本のカーブとインデックスについて
本稿で使用するベースのカーブです。基本的には開始の制御点が0となり、順番に1増えていきます。ちなみにグリッドは1m間隔です。
始まりと終わり(+α)の制御点だけを選択したい
端を選択ノード
を利用します。始端サイズ
は始点からいくつの制御点を対象にするか、終端サイズ
は終点からいくつの制御点を対象にするかを数値で設定します。上図では始点から3つを対象に、終点から1つを対象にしています。
インデックス番号で制御点を指定したい
特定のインデックス番号のみ表示させたい場合は、値ノード
、インデックスノード
、比較ノード
を使用します。上図での比較ノードは「同じ
」を指定していますので、インデックスが値「3」の制御点にインスタンスが表示されています。比較ノードで以上や以下など様々な条件を使うことができます。
ランダムに制御点を選択したい
ポイントにインスタンスノード
の選択にランダム値ノード
を繋ぎます。この選択はそもそも、各制御点でインスタンスを表示させるかどうかを真偽(True/False)で判断しています。なので0か1かをランダムで生成して繋げれば、ランダムでインスタンスが表示される仕組みです。シードの値を変更することでお好みのランダムになります。
一定の長さで制御点を制御したい
スプラインパラメーターノード
の「長さ」を使用します。この長さは、始点からのカーブの距離が累計で蓄積されています。上図では始点から10(m)以下の制御点を対象として表示という意味になります。
分かりやすいように名前付き属性格納で「長さ(length)」を設定していますので、シートにも長さが表示されているのが上図です。累計になっていますね。
スプラインパラメーターノード
には係数というのもあります。始点を0,終点を1として正規化した場合の各制御点の位置になります。0から1で表現されるので、例えば半分の位置で何らかの制御をしたい場合は0.5になります。
角度によって制御したい
上図は角度が90度の制御点にのみICO球を設置する例です。
カーブの角度を算出する方法は別記事で解説しています。ノードはシンプルなんですが計算方法はしっかり理解したほうがよさそうです。このノードを少し改造すると、制御点と制御点の間が特定の長さの時のみ、といった制御もおそらく可能でしょう。
制御点の傾きで選択したい
カーブ傾き
、度へ(数式)
、以上(比較ノード)
を使用した例です。90度以上の傾きを持つ制御点にのみ円柱を表示させています。
傾きは編集モードにおいて、トランスフォームの項目内にあります。
半径で制御したい
編集モード時のトランスフォーム内にある半径の項目値で出し分けするやり方も、傾きと同じ考え方です。
上図のようなノードになります。
他にも制御できる方法がありそうですが一旦以上です。
備忘録として残しておきます。