🐣

BlenderのGeometryNodesで遊ぼう(1) - ランダム配置

2021/03/17に公開

なにか新しいことを覚えたかったので、巷で話題のBlenderのGeometryNodeを
触ってみようとおもいます。

Blenderは2年ほど前にざっくり調べていたのですが、それ以来久々...ぐらいの
初心者なので、他にも良い方法があるかもですが
そのあたりはゆるーく見ていただけると。

まずは、シンプルにオブジェクトをばらまくのをやってみます。

モデルをつくる

まずは最新のBlenderを起動します。

作ったら、シンプルなPlaneを作ります。
このPlaneが実際にオブジェクトを配置したい「地面」になります。

次に、新しいコレクションを作り、その下にバラマキ用のオブジェクトを配置します。

Modifierを適用する

モデルの準備ができたら、GeometryNodesを実際に作っていきます。
GeometryNodesはModifierの一種なので、適応したいオブジェクトに対して
Modifier→Generate→GeometryNodesを適応します。

できました。
できたら、つぎに GeometryNodeEditorを開きます。

ビューポートを2つに分割して、一方のこのアイコンをクリックして、
GeometryNodesを選びます。

最初、このエディタ画面を出す方法がわからずかなり混乱しました。

選択すると、こんな感じのノードエディタが表示できます。

この「Group Input」というのが、Modifierが指定されているオブジェクトのジオメトリで
色々ノードで編集した結果を、Modifierを適応しているオブジェクトに書き戻すようになります。

現状は間になにもないので、入力されたジオメトリがそのままアウトプットされています。

ばらまく

というわけで、この間にばらまくノードを追加してみます。

ノードを追加するAdd画面は、Shift+Aで開けます(最初タブを連打してた)

まずは、地面に対してバラマキポイントを生成します。
生成するには PointDistribute ノードを利用します。

すると、入力Geometry上にポイントが生成できました。
バラマキ密度は Density でコントロールできますが、とりあえずはデフォルトのままにしておきます。

次に、作成したポイントに対してインスタンスを作成します。
インスタンスは Point Instance ノードをつないで、ObjectまたはCollectionで
配置Objectを指定します。
今回はCollectionを指定します。

Whole Collection がONの場合、Collection以下がすべてマージされたものが配置されます。
今回は、Collection以下にあるn個のパターンをランダム配置したかったので
Whole Collectionを外します。

結果。
配置はできましたが大きさがイケてないので調整します。

単純にすべてをスケールしたい場合は、

Point Scale ノードの Type をVectorにして数値を入れます。

結果。
ただこの場合は全部一律になるので、ランダムなサイズになるようにします。

ランダムにしたい場合は、 Attribute Randomize ノードを追加して、
Attributeを「scale」にします。
そして、最大サイズと最小サイズをMin/Maxに入れます。

ランダムになりました。

同様に回転もランダムにしたい場合は、
AttributeRandomizeノードをもう1つ追加して、AttributeをrotationMin/Maxを 0-360にします。

できました。

Modifierに変更用アトリビュートを追加する

一応できましたが、密度などは後からもっとかんたんに編集したい...みたいなことが
起きてくると思います。
そういう場合は、GroupInputに入力パラメーターを追加できます。

GeometryNodeEditorの右上の「Inputs」の+を押します。

追加されたらNameに「Density」、Default 1にします。

すると、Modifierに追加したInputが表示されます。

値を使う場合は、Group Inputに追加されるので、

Point Distributeの Density Max につなぎます。

Modifierに追加されたDensityをいじると、こんな感じに反映されるようになりました。

Modifier指定した以外のObjectのGeometryを取得するには

これでも良さそうですが、GeometryNodesを指定するObjectと実際そこで使うGeometryは
分離して考えたいなーということは多々あるんじゃないかと思います。
そういう場合、どうやってGeometryNodeEditor内で扱えばいいのか?というと

オブジェクトを持ってきたい場合はObjectInfo、Collectionを持ってきたい場合は
CollectionInfoノードを使用して、取得したいObjectを指定します。
すると、任意のObjectを持ってくることができます。

ModifierはMeshに対してしかつけられない?っぽいので、

Cubeを作ってModifierを指定します。
InputGeometryが来ていなければ、Modifierを指定したGeometryはこないので
これで作業場所とそれに使用する素材を切り分ける...みたいなこともできます。

このObjectInfoで指定しているGeometryに、GeometryNodesが指定されていたら
当然、その適応結果GeometryがObjectInfoのGeometryとして取得できます。

また、ObjectInfoや、Instanceなどで指定されているCollectionが非表示でも
GeometryNodesで使用した場合はちゃんと表示されるので、
配置前のオブジェクトはCollectionでまとめてHideしておくようにすれば良さそうです。

まとめ

とりあえずざっくりですが配置することころまでできました。
他のノードの使い方だったり、アトリビュート周りだったり、いまいち構造が
理解できていないことも多いですが、色々遊べそうです。

GitHubで編集を提案

Discussion