使用ソフトウェア | バージョン | 備考 |
---|---|---|
Blender | 3.4 |
2023/06/02:「出し方」のカテゴリが変更されているので修正。
このノードは上級者向け。
こちらの記事を読む前にSample Nearest
(最近接サンプル)ノードを理解しておいたほうが良い。
Sample Nearest(最近接サンプル)を解説【Blender - Geometry Nodes】 | 謎の技術研究部
日本語:最近接表面サンプル
別メッシュと比較して、最も近い場所のValue
を取ってくるノード。
頂点や面など指定できず、その表面上であればどこでも最近接と認識される。
出力されるValue
もその地点で補完して出力される。
このノードはv3.3
までのTransfer Attribute
が廃止され、その代わりに3つのノードのうちの1つ。
追加されたのは次の通り。
Sample Nearest Surface
(最近接表面サンプル)Sample Nearest
(最近接サンプル)Sample Index
(インデックスサンプル)Mesh
(メッシュ) > Sample
(サンプル) > Sample Nearest Surface
(最近接表面サンプル)
このノードはMesh
カテゴリに分類されているが、似ているノードのNearest Surface
(最近接表面サンプル)はGeometry
に入っているので注意。
このノードの実用的な例がいまいち思いつかないため、私も使いこなせていない。
よって今回は最低限の使い方が分かるレベルの解説に留める。
非常にわかりにくいので例で解説する。
まず、Ico球があるとする。
これを次のようなノードにするとIco球の中にCubeが出来るのは分かると思う
このIco球を変形させてCubeにシュリンクラップのような効果を出したい。
こんなときにSample Nearest Surface
(最近接表面サンプル)が使える。
最終的に次のようなノードにすれば良い。
この時Sample Nearest Surface
(最近接表面サンプル)のMesh
ソケットに繋ぐのはCubeなのか、Ico球なのか混乱するユーザーも多いと思う。
この件に関してはGeometry Proximity
についているTarget
ソケットと全く同じ考え方で良いので、次の記事を参考にしてもらいたい。
【Geometry Nodes】Geometry Proximity(ジオメトリ近接)ノード【Blender】 | 謎の技術研究部
実行結果は次のようになる。
これはもともとIcoだった頂点それぞれがCube上にある最も近い位置に移動したためこうなっている。
日本語:ジオメトリ近接
このノードは新しく追加された3種とは別の(以前より実装されていた)Geometry Proximity
に非常によく似ている。
次の記事も合わせて読んでもらえたらと思う。
【Geometry Nodes】Geometry Proximity(ジオメトリ近接)ノード【Blender】 | 謎の技術研究部
したがって、上の例であれば次のようなノードを組んでも全く同じ動作となる。
むしろこちらのほうがノード数が少なくて済む上にDistance
値も取れるおまけ付き。
Sample Nearest Surface
(最近接表面サンプル)にはValue
という入力がある。
ここに自由にデータを設定できるのが強み。
つまりGeometry Proximity
(ジオメトリ近接)はPosition
しか取ってこれないのに対してこちらは別の値も取ることができる。
次は試しにIco球の各頂点それぞれから見てCube上のどのIndex
が近いかを取ってみる。
この状態でスプレッドシートを見ると最も近いIndex
の値が記録されているのが分かる
ということは各ポイントに自由な値を格納しておき、別のメッシュからそれを取得できると考えて良さそうだ。
上の例でCubeの頂点は98個しかないのにIndex
で300番代が出ているのはFace Corner
が384あるからだと思われる。
そもそもSample Nearest Surface
という名称からも予想がつくように近接の対象は単純に頂点ではないようなので注意。
Index
を取っているがInteger
をFloat
にすると小数点が出てくるので、曖昧な箇所の値は新しく補完される?
公式では次のような一文がある。
Non-face attributes are interpolated across the surface.
意訳:ノンフェイスアトリビュートはサーフェス上で補完されます。
このノードはその名前にSurfaceとある通り面や頂点のような明らかなポイントではなくその中間に存在する曖昧な箇所も再近接として認識している(たぶん)
つまりメッシュの表面上であれば頂点や面は関係なく、どこでも「最近接」になる可能性がある。
そうなると「そこのValue
は明示的に記録されていないけどどうするの?」という疑問が湧く。
これは上の読み飛ばし欄に書いたがその曖昧な値はノードによって補完され中間のデータが返ってくると思われる。
よって上のIndex
を取ってくる例では、本来小数点をもたないIndex
が少数を含んで帰ってくる。
各頂点などに保存されているデータを正確に取得したい場合はSample Nearest
(最近接サンプル)を使おう。
わからん人向けに比較動画を作った。
Sample Nearest
(最近接サンプル)を使って最近接のポイント(赤玉)に線を結ぶノードを組む。
かならずCubeの頂点が近接として処理されている(設定で面や辺にも変えられる)
同じノードの組み方でSample Nearest Surface
(最近接表面サンプル)を使うと
頂点が存在しないCubeの面上も最近接と認識され、そこに赤玉が落ちている。
この仕組みについてはあくまで私の実験からの予想なので違っている可能性に注意してほしい。
それなりに高度なジオメトリノードを組まない限り出番はなさそうだ。
しかしながらTransfer Attribute
が廃止された代わりに追加されたノードなので「そんなのあったな」ぐらいには覚えておかないと後々困ると思われる。