![見出し画像](https://assets.st-note.com/production/uploads/images/72146933/rectangle_large_type_2_4e4b4f2e9a9e3f2c2e42db6cdd8dcc52.png?width=1200)
【Blender】Geometry Nodesの「フィールド」について
突然ですがこの画像を見てください
![](https://assets.st-note.com/img/1644681781267-dg7ouq8ybY.png)
よく見るとソケットの形状が丸いものとひし形のものがありますが、
これらの違いが説明できますか?(説明できるならこの記事を読む必要はないです)
この2つの違いは「フィールド」という概念に関連しています
丸いソケットはフィールドが使えません
ひし形のソケットはフィールドが使えます
フィールドとそうでないものの例
フィールドとはなんでしょうか?
例えば以下のオレンジで囲んだものはフィールドです
![](https://assets.st-note.com/img/1644684569556-VhovUk7Ekm.png?width=1200)
一方、次の例はフィールドではありません
![](https://assets.st-note.com/img/1644687416619-ycC2OILw04.png?width=1200)
UI上の違いとしては、
「位置」ノードはひし形、「ベクトル」ノードは丸いソケット
そこから伸びている線はフィールドの場合破線、フィールドではない場合実線
「追加」ノードなどのひし形はフィールドの場合点がなく、フィールドではない場合点付き
という違いが見てとれます
つまるところ、フィールドとは
フィールドとは「関数」です
先述の例の場合は「ICO球の各頂点の位置が引数になって、位置設定ノードに値を返す関数(フィールド)」です
引数(この場合は各頂点の位置)が変われば動的に値が変わります
一方でフィールドではないものは「定数」です
先述の例の場合は「位置設定ノードに(0, 0, 0)を返す定数」です
引数がそもそも存在せず、値は静的で変動しません
![](https://assets.st-note.com/img/1644690193768-pdNV9y78ZV.png?width=1200)
![](https://assets.st-note.com/img/1644690413694-2QZdLippMv.png?width=1200)
フィールドを複数箇所で使う場合について
突然ですがクイズです
まずこちらの画像を見てください
![](https://assets.st-note.com/img/1644690193768-pdNV9y78ZV.png?width=1200)
これは先程貼った画像と全く同じものです
フィールドによって球がz方向に1m動いています
ここからが問題です、ノードを次のように、位置設定ノードを増やしてそれぞれに繋いだら今度はどうなるでしょうか?
![](https://assets.st-note.com/img/1644691119238-QlF7dG4EaQ.png?width=1200)
同じ値ノードからつながってるので結果は変わらず「1m上がる」
1m上がるフィールドが2回分あるので「2m上がる」
答えはどちらでしょうか
…
…
では答えです
![](https://assets.st-note.com/img/1644691560602-LFuavFKzTO.png?width=1200)
答えは 2. の「2m上がる」、です
もちろん、3回分繋げば「3m」上がります
![](https://assets.st-note.com/img/1644691737767-fZaSk6pQS8.png?width=1200)
つまり、同じ頂点に対して同じフィールドから線がつながっているからといって同じ値が流されるというわけではないということです
フィールドの値は、都度評価されます
2つ位置設定ノードがあれば2回評価されますし、
3つ位置設定ノードがあれば3回評価されます
「属性キャプチャ」ノード
しかし、場合によってはこの毎回評価されるという仕様が都合が悪いケースもあるでしょう
そんなときは「属性キャプチャ」ノードが役に立ちます
![](https://assets.st-note.com/img/1644696539067-OlhUaF6OM3.png?width=1200)
2つの位置設定ノードがあるが、2mではなく1mだけ上がるようになった
このように属性キャプチャノードを位置設定ノードの手前に挟み、
適切な型(今回はベクトル)を選択し、入力に位置ノードを設定した上で、
属性キャプチャの「属性」ソケットを引数とするフィールドを組みます
するとこのように2回とも同じ位置座標が参照されるようになりました
次の例では属性キャプチャノードを3つある位置設定ノードのうち2番目のものの手前に配置しました
![](https://assets.st-note.com/img/1644696835985-OHiGif0vHX.png?width=1200)
3つの位置設定ノードがあるが、2mだけ上がった
すると、2m上がるようになりました
こうすることで3つ目の位置設定ノードは2つ目の位置設定ノードが実行される直前の位置を参照できるというわけです
まとめ
フィールドの出力は動的に変化することに注意が必要
特に、フィールドから入力を受けているノードではその都度フィールドの値を評価しているため、同じ出力からつながっていてもそれぞれ違う値を指している場合がある
フィールドが扱えるソケットはひし形
フィールドが扱えないソケットは丸い
ひし形のソケットにフィールドが入力されていないときはドット付きになる
フィールドになっているとき、ノード同士は実線ではなく破線で結ばれる
都度評価されてしまうと困る場合は「属性キャプチャ」ノードを使うと良い
参考
Blender Manual 「Fields」
CGiNTEREST「Blender 3.0 のジオメトリノードのフィールドについて」
この記事が気に入ったらサポートをしてみませんか?