日々のいろいろ

日々を綴ったほとんど日記

Blender Geometry Nodeでお家をランダムに配置してみる。(基本編)

まえがき

文字数を増やしたくないので、省けるところは省いてます。
僕もあんまり理解出来てない項目が幾つかありますので、そこについては僕の見解を述べていますが、公式ドキュメントのリンクを貼っておきますので、各自気になった所は調べてみて下さい。(投げやりですみません。)

ジオメトリノードでは同じ事をするのにも、幾つかの方法があったりするので、僕の最適解を書いてます。その他の方法はオマケとして最後の方にまとめておきます。

環境

Blender 2.93.0
(2.92でも内容について理解出来ていれば再現は可能です。)

配置物の作成

お家造り

まず、配置する為のお家を軽く作ります。

簡単なお家の画像

ご覧のように、キューブだけで作成した簡単なお家です。

マテリアル設定

簡単なお家のマテリアル設定

画像のマテリアルは3種類ありますが、どれも内容は同じです。

オブジェクト毎に色をランダムにするため、オブジェクト情報ノードのランダムをカラーランプノードに繋いでいます。

カラーランプの設定はHSV最遠にしています。
上の画像だと、赤色から青色までの色がランダムに出力されるような状態になります。

※赤線の部分はレンダリング時の、影部分をより濃く出す為に使用しています、特にそれ以上の役割はないので、省いても構いません。

ジオメトリノード

ジオメトリノードの追加

お家が完成したので、本題のジオメトリノードを組んで行きます。

ジオメトリノードを追加する為の、オブジェクトを追加します。
今回は元オブジェクトの形状は関係してこないので、僕はExtra Objectsと言うアドオンで頂点だけを追加してます。

次にジオメトリノードを追加します。

ジオメトリノードの追加
グリッドの追加

ジオメトリノードを追加したら、2.93から追加されたプリミティブオブジェクトの項目からグリッドを追加します。(追加、追加うるさいなぁ~)

グリッドの頂点数を6*6にします。
理由は「なんか良い気がする」と曖昧なので、各自お好きに分割して下さい。

属性とポイント

そうしたら、次に属性ランダムノードとポイント回転を追加して行くのですが、その前に属性とポイントについて軽く僕の見解を説明してます。

しっかりと理解していないと躓きます。「つい先日、僕は躓きました」

属性とは?

 公式のドキュメントには、このように書かれています。

属性は、ジオメトリデータ・ブロック内の要素ごとの保存されたデータを記述するための一般的な用語です。たとえば、すべての頂点に番号またはベクトルを関連付けることができます。属性は、属性カテゴリのノードによって変更できますが、他のノードによっては特定の属性の値を変更することもできます。

付録 — Blender Manual

はてさて、分かる方には、この文章でも分かるのでしょうか?

僕にはさっぱりなので、僕の理解しているニュアンスでお伝えします。

頂点座標クリースマテリアル

そんな風に、それぞれがそれぞれのデータを持っています。
そんなデータを取り扱い、管理する為に名付けたモノが属性です。

言い換えるならば、データの名前みたいなものですかね?(違うかも?)

ポイントとは?

こちらは、公式の公開している情報の中に解説が見当たらなかったので、Houdiniのポイントについての記事を参考として貼っておきます。(内容として理解すべき点はBlenderと変わらないため)

www.kickbase.net

非常に分かり易いのですが、読んだ後も?マークは消えてないですよね。「僕だけ?」

とりあえず、頂点ではないけれど頂点みたいなモノ、原点のような、、、不思議な存在?

分からなかった方は追々、理解して行きましょう。

属性ランダムノード

と、まぁ属性とポイントについて少し分かったと思うので、本題を進めます。

属性ランダムノード

属性ランダムノードとポイント回転ノードを追加します。

それぞれ解説します。

まず、属性ランダムノードは名前の通り属性のデータの値をランダムにしてくれます。

ここでは、ベクトルタイプのデータに「RandomRotate」と属性の名前を付けてZの値をを-0.5~0.5でランダムにしています。

ポイント回転ノード

ポイント回転ノードが続いて繋がっています。

ポイントは上述したように、原点のようなモノでもあるので、後にも書くポイントインスタンスノードで他のオブジェクトを配置するための原点の役割を果たしてくれます。

その基準点を回転させるのがポイント回転ノードです、そこに先ほどの属性「RandomRotate」を回転の値として使用することで、Z軸が数値1.0ごとに約60度ほど回転します、今回は±0.5なので、±30度ほどランダムに回転します。

※正確な値は、僕の方では分からないので詳しい方教えてください。

※色々弄っていたら弧度法で変換されてるので、πで180度の回転になります。
2πで360度。

ポイントインスタンスノード

ここで、一度ポイントの動きを確認する為に、ポイントインスタンスノードで実際にお家を配置して確認してみます。「スプレッドシートに値は出てるんだけどね」

ポイントインスタンスノード

ポイントインスタンスノードを追加したら、オブジェクトを選択する項目から配置したいオブジェクトを選択します。

ここで、大抵の場合、スケールを気にせず造ったお家は大き過ぎるので、ポイントスケールノードを間に挟み大きさを調整します。

ポイントスケールノード

算段通り、少しだけZ軸に回転しています、属性ランダムがポイント回転の値として、しっかり使用されている事が確認できます。

「ですが、どうでしょう?」

少しみっちりとお家が詰まり過ぎな気がします、調整して行きます。

お家の密度の調整

属性ランダム(ブーリアン

属性ランダムノード(ブーリアン)

また登場しました、属性ランダムノードですが、今度はタイプをブーリアンにします。

ブーリアンとは、TrueかFalseを値として持つデータなので、言い換えるならOnとOffのような状態を作る事が出来る事を意味しています。

今回は、属性名が同じでも問題なく機能しますが、念のため名前を「RandomPosition」とでもしておきます。

ポイントスケール
ポイントスケールノード
ジオメトリノードの調整

 

ポイントスケールノードを追加して、係数に先ほどの属性「RandomPosition」を使用する事で、右の画像のように存在する所としない所を作成できました。

完成

完成

後はレンダリングするなどして、これで基本編は完了です。
シード値を変更する事で、お家の配置をパラパラと変える事が出来ます。

応用編が出てくるのか、今のとこ僕にも分かりません。

最後にオマケを乗せておきます。体力の残ってる方は見て行ってください。
「文字数も多いですから、僕なら読まない」

では、ここまで長い文章を読んで頂き、ありがとうございました。

オマケ

 属性ランダムを使わないランダム配置

ポイント配置

ポイント配置と言うノードがランダムにポイントを配置してくれるので、それを使い配置するのも1つの方法です。頂点に沿った属性ランダムより手軽に粗密が表せます。

オブジェクトを2種類配置したい時

お家とは別に、例えば木を植えたい場合にも幾つか方法があります。

コレクションを使う方法

ポイントインスタンス

本編のノードを再利用していますが、この方法にはブーリアンでTrue Falseを調整しスケールの係数にする必要がないので、外しています。

重要なのは、ポイントインスタンスをコレクションに変更した部分です。

これで、画像のように木とお家が配置されます。

ポイント分離ノードを使う方法

ポイント分離

こちらも本編のノードを再利用しています。
タイプブーリアンの属性ランダム「RandomPosition」も繋いだままです。

ポイント分離ノードを使い、係数に「RandomPosition」のような属性を指定するとTrueとFalse部分を分けて出力してくれます。

それを、シレっと出てきているジオメトリ統合ノードと言うノードで繋ぐ事で、統合されたモノが出力されます。

こちらの利点としては手間が増える分、各自スケールを調整出来たりします。

密度をもう少し減らしたい時

属性ランダムノード(ブーリアン)

後は「木の密度が高いな」と思ったら。

上のポイント分離した所に、更にタイプブーリアンのランダム属性ノードを使い、分離部分がTrueとFalseに再び分かれます。

その属性をスケールの係数として使用し、木の密度を減らす事ができます。

ご想像の通り、これ以外にも幾つかの方法がありますが、そちらは各自で探してみて下さい。

オマケもこんな所で終わります。ありがとうございました。