コンテンツへスキップ

Blender Geometry Nodes 手始め

これは覚え下記のメモです。メモを残しておく理由は共有と忘却防止のためかな

Geometory Nodesの第一印象

日本語の情報でわかりやすくまとめられてるものが紙媒体でもないので、メモを残しておかないとわかりにくいから。また、いろんなチュートリアルはあったり記事情報もあるのですが、体系で上手にまとまって公開されてるものは少ないような気がしてる。そんなことですね。

第一印象は

Geometry Nodes=ヴィジュアルプログラミング

ということかな。だから、プログラミングで注意しなきゃいけない点がそのまま生かされるかな。

Geometry Nodes = モディファイアー

だから、Blenderのモディファイアといえば、ベベルなんてよく使うけど、ベベルみたいなものを自前で用意できるってことかな。

これは、

あるオブジェクト→ジオメトリノードで作ったモディファイアに掛ける→新しいオブジェクト

という流れで生成されるってことかな。これはプログラミングで関数を作ってるのと同じなんですね。この点を踏まえてくと、扱いの方針が見えてきた。よく使うミラーモディファイアやベベルモディファイアをイメージしておくといいかな。

Geometry Nodesを使う方針

個人的な方針で、他者がどう考えるか知らない・・・

  • シンプルにする
  • モジュールごとにわかりやすくまとめておく
  • オブジェクトの一部分だけに作用させることを考えない

とりあえずはこんなところ。最初の2つの方針はより洗練された使い方をするときには改造やメンテナンスが不可欠なんですが、そこで大切な考え方です。まさにビジュアルプログラミングだから、プログラム作成でたいへん嫌われるスパゲティプログラムになりがちなんですが、それを避けるためです。

3つ目はできるかどうかよくわかってないけど、一部だけに作用させるというのは結構面倒な操作が必要で汎用性のあるモディファイアとして作る価値はさほどないかなってことから。いろんなオブジェクトにいろんな扱いができるという抽象化ができるのが魅力なんです。それは次の画像から説明するね。

これはシンプルなジオメトリノードで作成したものをつかってるんですね。一つはキューブに、球体を作用させてる。もう一つは円柱にコーンを作用させてる。作用のさせ方は同じジオメトリノードなんですね。どんなことをやってるかは次に説明するね。

Geometry nodesのお作法

ジオメトリノードエディタをブレンダで開くとまっさきに出てくるのは次のようなものです。

こんなところかな。Group input から Group Outputを繋いだものです。各パーツの名称は詳しくわかってないけど、ノードとノードを線で結んでるだけです。

ここでは、Inputであるオブジェクトを入れたら、何もせずにそのオブジェクトがOutputされるというものです。入力があって出力があるってだけのこと。

ここではフレームというもので囲んでるけど、このフレームというパーツもShift Aから追加できます。これにはNをおして、メニューでタグをかけるので、そこで基本形と追加している。このフレームというのは通常のプログラミングで言うコメントと同じものです。もちろんタグなのでかけることは複雑ではないですが、後々に見直すときに手助けになるんですね。あるいは他人に見てジオメトリノードを読んでもらうときに理解の支援にできるということです。これを疎かにすると複雑なジオメトリノードは扱えなくなります。だから最初からフレームとタグをこまめに使う癖をつけておくほうが良いです。

最初の第一歩

プログラミングで最初の第一歩といえば、Hello World!を出力するプログラムとなりますが、それよりは複雑ですがあるオブジェクトの表面に別のオブジェクトをつけてみましょう。

それは、次のようにします。

Group Input, Group Outputは折りたたんでいます。

ここでは1. インプットからそのオブジェクトを直接アプトプットさせる線 と 2.オブジェクトの表面に別のオブジェクトをくっつけるというものを出しています。

ここでは、Distribute Points on Faces(面にポイントをランダムに散布させる。)そして、Instance on Points(ポイント上のインスタンス)というものです。インスタンスはここではオブジェクトを指しています。ここではIco Sphere(球体)のオブジェクトを指定しています。

最後に、Join Geometryに繋いでいますが、このJoin Geometryはよく使うノードです。複数の結果を出すためのノードなんです。

入力からメッシュ情報をDistribute~に与えて、そこで、密度5.0の濃さでポイントをつくる。そのポイントをInstance~に渡しているのです。じゃあどんなインスタンスをポイントにするの?というのがIco Sphereをインスタンスにするよってのがここで紐で繋いでるのです。

この結果は以下の通りになる。ここではBlenderの初期起動で得られるキューブをそのまま入力に使ってます。(このときにGeometry Nodesエディタを起動してるってこと)

こんな感じになる。キューブの表面に球体を散布させた立体ができるんです。

ちょっと拡張してみる

ここでは球体もIco SphereとUV Sphereがあるので、両方を立方体の表面に散布させましょ。どうするかというと次のようになります。

こんなかんじです。見てわかるように上と下のフレームはIco SphereとUV Sphereの違いだけです。簡単に言えば、Shift Dで下のフレーム部分全体をコピーして、Ico SphereとUV Sphereを変えただけに見えますが、一つ注意点がある。Distribute Points on FacesのSeedの値です。散布には乱数が使われているのですが、同じSeedにすると同じ値を使うことになるん出るね。乱数の系列が同じになる問題が起きるのです、だからSeedの値を0と1に変えています。それでこのようになります。

見てもわかるように、2つの球体オブジェクトの散布がされた立方体になりました。

抽象化

ジオメトリノードはモディファイアなんですが、だから違っても良いのは最初に触れたとおりです。その結果だけは再び見せておきます。

ま、こんな感じです。今日の私的メモはこれでおしまい。