東洋の建築のようなものを作る時に大変なことの一つに
曲面状に反った屋根に瓦を並べるといったことがあります
軒が角に向かって反り上がっているほか 斜面も真直ぐではないのが見てとれるかと思います
こういった複数の曲面でできた面上への配列を
Blenderのジオメトリノードで作成する方法を検討したいと思います
Blender 4.2での作例になります
まずは 水平方向の曲線を表すカーブと斜面を表すカーブを使って
単純に配列をさせた例を作ってみます 「カーブをポイント化」で等間隔のポイントに変換しています
配置しただけの状態なので 瓦の回転が
・斜面の角度に沿っていない
・軒の曲面にも沿っていない
また全体として
・屋根の頭頂部(棟)は直線状なのに 配置した瓦は軒と同じ反りになっている
といったことが見て取れます これらを調整していきたいと思います
曲面状に配置
まず 一本のカーブに合わせて配置する時に回転させるのは単純です
「カーブのポイント化」の時にカーブの傾きに合わせた回転の要素が出力されているので
「ポイントにインスタンス」の回転要素に利用するだけです
回転の出力についている「回転を回転」は
90度回転されて配置されるのを調整するためのものです
同様に斜面方向もカーブに合わせて配置と回転をかけてみます
どうやら「ポイントにインスタンス」の回転は インスタンスの回転情報を加算する挙動のようです
「回転を回転」は回転の方向を意図した方向に調整するためのものです
カーブの方向次第では 180度足したり引いたりした値になるかもしれません
とりあえず方向のカーブに沿わせることまではできましたので多くの場合にはこれで足りるかもしれません
2つの要素をブレンドする
さて、軒先は指定した曲線で 棟部分は直線に並ぶようにしたい場合
座標を計算で求めるしかなさそうです
屋根全体で滑らかな曲面を作るには 直線状に並べた場合と曲線上に並べた場合との間をブレンドする計算がいります
カーブ位置から係数
カーブでは 「スプラインパラメーター」のノードでカーブ上の点が スプライン上のどの位置にあるのか
0.0-1.0の間の値で取得できます
属性キャプチャと 名前付き属性格納を使うことでポイントや その後に作成したインスタンスに値を伝えることができます
水平方向を直線状に配置したものと 曲線状に配置したもの 両方のデータを作成して tの値でブレンドするとこうなります
軒側が曲がるようになる場合には 曲がり方を指定するカーブを編集モードで「向きを反転」するか
ミックスノードのABへ説測するものを逆にします
元のカーブを直線状にするのは 「カーブリサンプル」でポイントが始点と終点だけの状態にしてしまうことで作れます
直線でなく 別の曲線に遷移させたい場合には2つ目の形状を別のカーブを使って作るのもいいかもしれません
Blender3.3等で再現するヒント
今回は 4.2で作成て インスタンストランスフォームのマトリクス情報をミックスノードで合成しましたが
3.3ではミックスノードが存在していません
ミックスノードの2つの値 A, B ブレンドする計算は、ブレンド係数 t(0から1の範囲)を使用した 線形補間を使って行われています
(1 - t) * A + t * B
t = 0 のとき、結果は完全に A。 t = 1のとき、結果は完全に B 。
t = 0.5 のときA とBが等しく混ざった中間値。 となる計算です
「位置」の要素のブレンドを3.3でも利用できる要素で作成するとこういった感じになります
また、「回転を回転」のノードもないので 4.2では廃止予定となっている「オイラー回転」ノードを利用します
屋根のような曲面を作成する一例を書いてみました
座標等の計算の方法はこれだけではないので参考にしていただければと思います