20240514_notes - h4us/maebashi-it-architectual-informatics-I GitHub Wiki
第5回 Blender / Geometry Nodes 応用 1
Geometry Nodes でモデリングをしてみる 2
サンプルファイル
(一部修正したバージョン、基本的には同じ内容ものです。)
サンプルファイルの基本構成は前回と同じです。オブジェクトの対応関係は下記の通りです。
- 1_volume_test(_001) <--> 1_volume_test
- 2_noise_texture(_001) <--> 2_noise_texture
- 3_repeat-zone_spiral-cubes(_001) <--> 3_repeat-zone_spiral-cubes
- 4_fractal_tree(_001) <--> 4_fractal_tree
1_volume_test / volume component test
前回までの講義内で、使用されてこなかったコンポーネント(ジオメトリタイプ)の残りである Volume (Volume Grids) 関連のノードを使ってみます。
アプローチ・解説
もとになるメッシュデータを Mesh to Volume ノードで変換したのち、Distribute Points in Volume ノード、 Instance on Points ノードを経て、再度メッシュに変換して形状をつくる、単純なサンプルです。
途中の Volume コンポーネントに変換されている箇所で、密度(Density)等の変更をできるようにしてあるほか、変換元の形状のプリセットを切り替えられるようにしてあります。
密度の設定値を上げると、処理がそれなりに重くなります。上げ過ぎるとBlenderがフリーズしたりクラッシュしたりする場合もあるので注意してください。 高い密度を試してみたい場合は、必要に応じて Bake ノードて途中経過をBakeしておくのが安全です。
2_noise_texture / texture to form
アルゴリズミックな形状や自然物などの有機的なものを模した形状をコンピューター上でモデリングする際に、ランダムな要素を取り入れることはよくあります。
以前のサンプルで Random Value ノードを使っていたことはありましたが、Blender / Geometry Nodes で他にランダムな要素を取り込む方法として、Shader Nodes 由来の(ノイズ)テクスチャー系のノードを活用する方法が挙げられます。
アプローチ・解説
Volume コンポーネントのプリミティブとして使える Volume Cube ノードの Density 入力ソケットに対して、ノイズ生成器としてTexture系のノードを接続し、ボクセル(Volume コンポーネントの体積を表す単位のようなもの。3次元のグリッドようなイメージ)にランダムな密度を与えることで、スポンジのような構造をモデリングできます。
Group Input の隣にある Node Group の子階層には、Geometry Nodes で使えるテクスチャー生成用のノードを格納し、切り替えられるようにしてあります。
Color Ramp ノードは値をマッピングするための若干特殊な使い方です。 Map Range ノードなどでも代用できます。
3_repeat-zone_spiral-cubes / spiral cubes
前述のランダマイズやノイズを取り込むことに加えて、繰り返し処理も重要な役割を果たすことが多いです。
Blender / Geometry Nodes で繰り返し処理を実現するための機能である Repeat Zone を活用してモデリングを行ってみます。
アプローチ・解説
Blender / Geometry Nodes で繰り返し処理を行うための機能である、Repeat Zone を使ったサンプルです。
Repeat Zone 内でのインクリメント(処理を繰り返すごとにある値を一定ずつ増やす操作)を利用して、特定のステップでサインおよびコサインの位相を変化させ、インクリメント値をx、コサインをy、サインをz として算出された値分移動させた位置に新しく Cube プリミティブを配置する、という操作を繰り返しています。
4_fractal_tree / fractal tree
3_repeat-zone_spiral-cubes / spiral cubes で試した繰り返し処理の発展形として、フラクタル構造を持つツリー状の形態をモデリングしてみます。
アプローチ・解説
初めに、原点の位置に Count プロパティを「1」に設定した Points ノードと、Points to Verticies ノードで単一の点を配置しています。
この点を繰り返し処理の起点に入力し、 Repeat Zone 内処理の最後にある Extrude Mesh ノードによって特定の方向に押し出すメッシュを生成し、Duplicate Elements ノードと Join Geometry ノードでを繰り返し経由することで、枝分かれの構造を実現しています。
他のノードに関しては基本的に、Extrude Mesh の際、「どの方向に」「どのくらいの長さ」押し出すかを決めるための処理です。Node Group 内で Random Value ノードなども併用することで、ある程度全方向に枝分かれするようにしています。