2021年2月13日土曜日

【Grasshopper_40】キルティングパターンの改良


以前作ったキルティングの立体形状を見直し、さらに進化させて見ました。

細かい部分まで再現しようとするほど、ノード構成が複雑になっていくようです。


Step.1 サーフェスを準備する

今回は上の図のように三枚が連続するサーフェスをRhinoで準備します。以降、このサーフェスを基準面という名称で使います。

Step.2 近似面を準備する

先ほどの基準面を1枚化した物を別途、用意します。ポリサーフェスではなく、完全に1枚の状態です。

XY平面上に作った曲線をマッピングするために使う物です。基準面がアントリム状態であればMergedSrfコマンドで結合したり、トリム状態でれば補助線を引いて新しく張りなおすのがいいかなと思います。

マッピングした曲線は、最終的には基準面に投影するので、多少、誤差があっても大丈夫です。

マッピングで張り込む範囲になるので、基準面よりも小さくする分には問題ないです。

これ以降、この1枚面を近似面と呼びます。

Step.3 近似面の2D展開

先ほど作った近似面を、Squishコマンドを使って2D展開します。これがいわゆる、Grasshopper上で作りこむXY平面上のパターン範囲になります。

展開したサーフェスは1次サーフェスとなっていてそのままでは勝手が悪いので、枠線を抽出し、新たに1枚のサーフェスを張りなおします。
※今回のように基準面が単純な長方形であれば面積がほぼ同じ長方形をRectangleコンポーネントを使って作る方法でもOKです。

Step.4 ひし形曲線を作る

展開して張りなおしたサーフェスに、LunchBoxプラグインの中にあるDiamond Panelsコンポーネントを使ってひし形を配置します。

その後ろで、Brep Edgesを使って4辺を取り出します。それぞれ識別しやすいように、1、2、3、4という番号を振っておきます。

Step.5 キルティングの側面の傾きを調整する部分

次に、上の図のようなものを事前に作っておきます。

キルティングの側面の傾きを調整するためのものです。GraphMapperを使って、感覚的に調整できるようにします。

GraphMapperは直感的に調整ができる利点がある一方で、厳密な数値を決めることができないのが欠点です。そこで、今回はGraphMapperで求めた湾曲カーブによる数値が左右対称になるよう、上の図のように一工夫します。

Step.6 分割点を求める

Step.4で求めたひし形の4つの辺ごとに、分割点を求めます。

どこまで細かく作るかはそれぞれの好みもあると思いますが、今回は参考として上の図のような感じにしてみます。

Step.7 すべての点と曲線を求める

Step.6で求めた点を使って、すべての構成線と分割点を求めます。

参考として、上の図のようなノード構成にしてみます。

縦線と横線をそれぞれ、A、Bとして分けて作っていきます。

Step.8 マッピングする

次はいよいよマッピングです。

XY平面上の曲線と点をStep.2で作成した近似面にマッピングします。曲線と点で、それぞれマッピングする方法が異なります。

サーフェスのUVの向きが合わない場合は、Adjust UVコンポーネントをつないで切り替えると便利です。
※UVの向きを調整する物はほかにもあるので、お好みの物を使ってください。

曲線をマッピングするときは、必ずRebuild Curveコンポーネントをつないで、CVの数をそれなりに大きな数値に変換します。これをしないと、マッピングした曲線が近似面に沿わず、隣り合うサーフェスのエッジがくっつかないことになります。どれぐらいの数にするかは近似面の湾曲具合によるので一概には言えませんが、今回は20で設定しています。

Step.9 マッピングした曲線を基準面に投影する

マッピングした曲線を、基準面に投影します。

投影する方向は、今回のケースでは、近似面の中心の法線方向を使っています。

基準面は、Brep Joinコンポーネントを使い、3枚のサーフェスが1つのBrepになっていれば成功です。1つにならない場合はサーフェス間のギャップが大きいので、新しく精度良く基準面を作り直すか、表示オプションの単位の項目にある絶対許容差の数値を少し大きくします。

Step.10 面直方向に移動させる点の選別

Step.7で求めた点のうち、面直方向に移動させる点を選別します。

階層構造に合わせた作り方が必要になってきます。今回のケースでは、A群とB群でそれぞれ同じノードを使いまわしていきます。

法線方向は、基準面三枚それぞれの最短距離点における法線ベクトルを求め、その中で最も距離が短い物を選ぶノードを組み込んでいます。

Step.11 高さの徐変量を求める

続いて、高さの数値を求めていきます。

冒頭に作った、展開面とひし形を使う方法が簡単です。

外周から内側に向かってじわじわ変化させる場合は、Nudibranchプラグインに含まれる、CurveValuesコンポーネントを使うやり方が簡単でおすすめです。

まずは上のように組んでみます。

Step.12 高さを少し変化させる

ここの工程は省略可です。

今回のケースでは、一つのひし形につき、中央にある3x3の点を面直に移動させますが、真ん中と両端の点群の移動量に若干の差をつけるため、上の図のように追加します。

ただし、マイナス値になるのは避けるため、Maximumコンポーネントを組み込み、0と比較してマイナスになる数値はすべて0に置き換えます。

Step.13 点の移動

Step.10で選別した点群を、Step.11とStep.12で求めた高さに合わせて面直方向に移動させ、元の点群の列に置き換えます。

階層構造が複雑なため、リストの処理が少々複雑ですが、一つ作った物は使いまわしができます。

Step.14 曲線の作成

Step.13で求めた点群を使って曲線を作成します。

Step.15 面化

Step.14で求めた曲線を使い、Network Srfコンポーネントを使ってサーフェス化します。

Step.16 外側の面を分割

外側の部分もBrep Splitコンポーネントを使って分割し、Step.15で面化した部分と合体させます。

Step.17 完成


0 件のコメント:

コメントを投稿

【Grasshopper_98】SporphとSurface Morphingの特徴、違いなどについて

今年もまたGWに突入しましたね。コロナ明けに円安、インバウンド特需のおかげで東京から郊外に出かけると例年以上に混雑に巻き込まれそうなので、昨年と同様、連休中は家に籠ってブログを更新します。今回のテーマは、Surface MorphingとSporphの違いについてまとめてみました。