2022-07-17

【Geometry Nodes】Distribute Points on Faces(面にポイント配置)ノード【Blender】

面上のランダムな位置に点を生成するDistribute Points on Facesを解説。

Article Image
使用ソフトウェアバージョン備考
Blender3.2

Distribute Points on Faces

日本語:面にポイント配置

Distribute Points on Facesノード外観

概要

例えば板ポリがあるとすると

ただの板ポリ

この面の上にランダムな点を生成するノード

点を生成

Cubeのような場合も同様、各面にポイントが生成される。

Cubeで行った例

これで生成した点の上にInstance on Points等で更に別のジオメトリを生成するというのが良くある例。

Instance on Pointsの例

キューブ上に配置した点から円柱を生やした例。

ノード

出し方

Points => Distribute Points on Faces

基本の使い方

ベースとなるメッシュをDistribute Points on Facesに入力するだけ。

最小構成のノード例

実行結果

Join Geometryを使っている理由

Pointsソケットから出力されているデータには元のメッシュが含まれない。

つまりJoin Geometryで元のメッシュを合成しないと

ポイントだけ表示

このように点だけの表示になる。

元のメッシュは描画せず、面上の点だけ欲しい場合はこのままでよい。

点はレンダリングされないので注意

上の作例のままレンダリングしても何も映らなくなるので注意。

Distribute Points on Facesで出力される点は一時的にプレビューされているだけなので、実際に点を点としてレンダリングしたい場合はInstance on Pointsを使ってメッシュを配置しよう。

ノード例

実行結果

DensityとSeed

Density(密度), Seed(シード)

DensityとSeed

  • Densityを増やせば点の数が増える
  • Seedの値を変えるとランダムのパターンを変化させる。

Densityはフィールドなので、場所に応じて密度を変化させることも可能。

上に行くほど密度を上げるノード

実行結果

Selection

こちらはTrue/Falseを入れることにより各ポイントについて明示的に表示させるか消去するかを操作できる。

Selectionに次のノードを入れてみると

SelectionにPosition Zを入れる

実行結果

Blenderでは0より大きい値はTrue、0以下はFalseと扱われるため上のような結果になる。

Selectionの概念がわからなければ次の記事を参照。

【Geometry Nodes】Selection(選択)って何【Blender】 | 謎の技術研究部

Poisson Diskモード

日本語:ポアソンディスク

Poisson Diskモードに変更すると少し細かい設定が使えるようになる。

Poisson Diskモードの設定場所

Density Maxは名称が変わっているがDensityと同じだと思っておけば良い。

Distance Min

日本語:最小距離

Distance Minの入力場所

この数値を上げていくとDensityを上げてもこれ以上の距離くっつかなくなる。

例えば、次のように密度を上げすぎると

重なりが発生

球同士が重なってしまっている。

しかし、密度は落としたくないという場合にDistance Minを球の直径と同じにしてみると

重複なし

ある程度密度を保ちつつ、球同士が密着しなくなる。

Densityを下げるだけじゃだめなの?

Distance MinではなくDensityを下げるだけではだめなのかというと、次のような状態になる。

低密度でも重複

Density Factor

日本語:密度係数

Density Maxの値にこのDensity Factorが掛けられた値が最終的な密度になるような動きをする。

あまり使い道がわからないので詳しく解説出来ないが、入力がフィールドになっているため上で解説したように特定の範囲で密度を変化させたい時に使うのが主な目的か?

Normal, Rotationアウトプット

Rotation(回転)

Normal, Rotationアウトプット外観

このノードにはNormal/Rotationのアウトプットがある。

これは単純にベースとなっている面の法線と角度が出ているだけである。

しかし、このソケットは正確に理解するのが難しいので上級者向けだと考えて良い。

簡単な例を示す。

Rotationを使った例

たとえば

球体をベースにキューブを配置

実行結果

このノードの組み方では全てのキューブが同じ方向になっている。

そこでRotationを接続すると、面の方向が引き継がれるので

Rotationを接続したノード

実行結果

このように面にそってキューブも回転する。

Normalを使った例。

Normalは法線の方向が出ているので、点をズラすときに便利。

法線をMultiplyする

こんな風にNormalを演算してSet Positionでズラしてやると

面から法線方向に離れた位置にキューブ

こんな風に面からポイントを法線方向に引き剥がしてやることも可能。

RotationNormalは相互に変換が可能なので厳密には同じものとして考えても良い。

可能性は無限

Rotate EulerとAlign Euler to Vector

Rotate EulerAlign Euler to Vectorのノードを挟むことにより方向に変化を持たせて更に複雑な作例も作れそうだ。

ただ、これ以上は難しすぎて解説できないのでここまでとする。

注意点

あくまで元のジオメトリとなった面の表面だけに点が生成されるので、その内側は空洞になるので注意。

例えば閉じた円柱にDistribute Points on Faces

円柱

この円柱のフタ(円)の部分をカットしてみると

中が空洞

空洞になっている。

空洞にしたくない場合は内側にも複雑なメッシュを置くなど別の工夫が必要。

さいごに

最後に少しだけ手を加えた作例を掲載しておく。

最後の作例

Distribute Points on Facesあんまり関係なくなっちゃった。



謎の技術研究部 (謎技研)