Accumulate Field ノード解説|LeadingとTrailingの違いから実用例まで

blender
記事内に広告が含まれています。

Blenderのジオメトリノード、Accumulate Field ノードをまとめていこうと思います。

めちゃくちゃ便利ってことはなんとなくわかってるんだけど、曖昧なまま使っている人が多いノードなんじゃないかと思います。自分もそうです。何回か使ってるんだけどすぐ忘れます。

ざっくり言うと、何か数値を足し上げているように見えますが、

  • インスタンスの配置制御
  • ランダムサイズの積み上げ
  • 順序に基づくオフセット処理

といった、順番を扱う処理の中核を担う重要なノードです。

特に重要なのが「Leading」と「Trailing」の違いです。
この2つを理解しているかどうかで、挙動の理解度が大きく変わります。

この記事では、

  • Accumulate Field の基本動作
  • Leading と Trailing の違い
  • 実際の使いどころ

を、できるだけ直感的に整理していきます。

スポンサーリンク

Accumulate Field ノードとは

Accumulate Field ノードは、入力された値をインデックス順に累積(足し合わせ)していくノードです。

基本的な処理は単なる加算ですが、最終的な合計値だけでなく、各要素ごとのその時点までの累積値を出力するのが特徴です。

入力

  • Value(値)…累積する値。

※整数を累積する場合、整数の最大値は約20億です。それを超えるとオーバーフローが発生し、値が負になる可能性があります。

  • Group Index
    • 複数の独立した累積を行うためのグループ分け用インデックス。
    • 各値をどの箱(グループ)に入れるかを指定するイメージです。

※単一の値しかない場合、この入力は影響しません。

出力

  • Leading…各グループにおいて、最初の値から現在までの累積値。
    • 例:右図にインデックス番号0,1,2,3,4のポイントが並んでいる。3のポイントは0+1+2+3=6となる。(自分の値も足す
  • Trailing…各グループにおいて、0から開始した累積値。
    • 例:右図。インデックス番号3のポイントは0+0+1+2=3となる。(自分の値は足さない
    • 0から開始、というのは、最初の値よりも前の初期値(0)から計算を開始し、自分の値の一つ前でストップするという意味
  • Total…各グループ全体の合計値。
    • 例:右図。
      0+1+2+3+4=10となる。

この途中経過をすべて出力するのが、このノードの特徴です。

スポンサーリンク

Leading と Trailing の違い

ここが一番重要なポイントです。

Leading(自分を含めた累積)

値:        [2]   [5]   [3]
Leading: [2] [7] [10]

自分も含めてここまでの合計

Trailing(自分を含めない累積)

値:        [2]   [5]   [3]
Trailing: [0] [2] [7]

自分より前までの合計

実用例:オブジェクトの積み上げ

例えば、ボックスの高さがランダムに決まっているとします。

これをZ方向に積み上げたい場合、自分より前のオブジェクトの高さを足した合計の位置に移動すればいいので
Trailingを使います。

注意:

オブジェクトのスケールなどするとき、原点位置を0に合わせないとズレます。

オブジェクトの原点を中心のまま積み上げるなら、LeadingとTrailingの値をMix(足して割る)すると揃います。

スポンサーリンク

Group Index の役割

Group Index を使うと、累積をグループごとに分けることができます。

マニュアルではインデックス番号をModulo計算してグループ分けしていましたが、Set IDノードでIDをつけてグループ分けすることもできます。

ID 0, 1, 2とつけて3つのグループにわけました。

Group ID入力にIDノードをつなぐと、そのグループごとに累積値などを出してくれます。

スポンサーリンク

応用例

ランダムスケールの連続配置

サイズがバラバラなオブジェクトでも、隙間なく並べられます。

右図:Random Valueノードを使った積み上げ方法(上で紹介したのと同じです。)

インスタンスのオフセット制御

インデックス順に位置をずらすことで、規則的な配置ができます。インデックスだけじゃなく、何か数値を与えておけば、累積的なオフセット配置ができます。

チェーン構造・アーム的な動き

Transform を累積することで、親子関係のような動きを作れる

Accumulate FieldノードにはTransformの値を累積することもでき、それを使うことで積み上げもできます。

また、トランスフォームの値を累積した動きを作ると、親子関係があるようなつながった動きを作ることもできます。

Transformの累積について参考にしたチュートリアルです。

スポンサーリンク

まとめ

Accumulate Field ノードの本質はシンプルで、順番に足していくことができます。

ただし重要なのは、

  • Leading → 自分込み
  • Trailing → 自分抜き

の足し上げという違いです。

特に配置・積み上げがしたいときは、Trailingを使うと前の要素の上に乗ることができるのでうまく積み上げられる、という性質を覚えておくと便利かと思います。(その際原点位置を0の位置にしておくこと)

スポンサーリンク

関連記事

Raycastノードの使い方をまとめた記事

インスタンスの回転、ベクトル回転、回転の補間やクォータニオンなど、回転系ノードの使い方を解説している記事

一連のノードを繰り返し実行できるRepeat Noneノードの使い方を解説。

ジオメトリノードの記事のまとめです。

コメント