Blenderいじり /GeometryNode編(2)

カラフルな球体配置の次は、デコボコな家をランダムに配置してみる。
配置の向きがあるのと、別パーツの屋根を載せてるところが、球体と違うところ。
パーツの境界が分かるようにWireFrame表示を重ねてみた。
赤い屋根の下の、斜めになっている壁のあたりが、別パーツになってる。
下側は高さ2のCubeに台座と窓っぽい変形を追加したもので、原点はCubeの底に移動してある。屋根パーツも底の部分が原点。

まずはGeometryNodeで、建物と屋根をうまく並べてみる。
建物の下部分のModifierなので、GroupInputはCube。
[A]左上のFrame内: 平面のMeshにNoiseを与えて、建物の位置(x,y)を発生。
  noiseは0~1なので、0.5を引いて変動幅(ここでは10)を掛けてる。上下には動かしたくないので、multiplyのzはゼロにしておく。

[B]左下のFrame内: 建物の高さをNoiseTextureから発生。Frame数で伸び縮みする。
  valueノードに#frameと打っておくと、Frame数が出力される。動きが速すぎるので100でDevide。この値をNoiseTextureのWに入力して、ぐにゃぐにゃと伸び縮みさせるためのNoiseを発生。伸び縮みは上下だけなので、x,yはゼロとしてMultiply。zは振幅。振幅に1を足しておかないと、高さゼロまで振れてしまう。1をAddしたものが必要なScale値。

[C]ふたつのFrameの間: 建物の向きをNoiseから発生。
  ほぼ[A]と同様。Muliplyはz軸回転なので、x,yをゼロ。接続先のRotationはRadianなので2π(6.28)をzに設定。同じ出力を2つのInstanceOnPointsに接続。これで、家の下側のCubeと屋根のパーツが同じ向きに揃う。

[D]上側の緑のライン: InstanceOnPointsで家の下側のCubeをランダム配置。
  Points/ Rotation/ Scaleは、それぞれ [A]/ [C]/ [B]から接続。配置するInstanceは、ここではModifierをAttachしているCubeなので、GroupInputから接続。

[E]下側の緑のライン: 屋根のパーツを家の高さに応じた場所に配置。
  [B]から出ているScaleの値に、台座のCubeモデルの高さ(2.0)をかけてSetPositionのOffset入力に接続。あとはいつものようにInstanceOnPointsで別パーツのRoofを配置。
[F]最終段: JoinGeometryで、並べた家の下部品と、同じ位置に並べた屋根部品を合体。まとめた形状を、GroupOutputに出力。

ここまでで形状は完成。
ちなみに、SpreadSheetEditor画面にすると、座標などのデータが確認できる。Zがゼロなのが家の下のパーツ。屋根のZは高さに応じて別々の値が入っているのが分かる。

最後にMeterial設定。
壁の色を、ColorRampで設定した白~茶色にランダムに割当てる。
下のShaderEditor画面で、WhiteNoiseTextureを4Dで使っていて、入力のWにObjectInfoのLocationから演算した値を接続している。ObjectInfoのRandomをそのままつなぐと、上下で壁の色が揃わなかったからなんだけど・・・実際は、4Dではなく2Dとすれば上下の色は揃う。
Vectorから単一数値を生成するのに、VectorMathのDotProduct(=x1*x2+y1*y2+z1*z2) を初めて使ったけど、実際は必要なかった。ちょっと回り道だったけど、Ramdonではなく、配置に応じたMaterial設定したくなるCaseはありそう。

 

座標の値を調整するのに、[E]のSetPositionの存在に気が付くまでに結構苦しんだけど、位置や向きを指定して配置できるようになった。球体配置では不要だったけど、これで自分の作った形状を意図したように配置できるようになった、と思う。

[B]でアニメーションさせるために、Valueノードに設定した #frameは、たまたま、どこかの動画で知ったけど、お手軽で便利。探したら他にも使えるKeywordがあるのかもしれないと思って調べてみたら、下記がHITした。いまいち分かりにくい。

https://docs.blender.org/manual/en/latest/animation/drivers/drivers_panel.html#simple-expressions

Mathノードで複数入力を基に、指定した任意の式で計算できるといいのに。
見つけられてないのか、サポートされてないのか・・・。

使い方ばかり覚えても仕方ないけど、できることが限られてストレスが溜まると、結局、紙と鉛筆に戻ってしまうので、遊びながらもう少し頑張ってみる。