2021年4月17日土曜日

【Grasshopper_42】Grasshopperプラグイン「Kangaroo」を使った六角形の変形パターン


今回は、Grasshopperの物理演算プラグイン「Kangaroo」を使った六角形の変形方法をご紹介します。

サンプルとして用意されているものがベースとなりますが、使いやすいように工夫を加えています。

物理演算というと主にエンジニア業界で使われているソフトウェアであり、デザイン分野ではあまりなじみがないのですが、パターンを少し激しめにくずしてみたいという要望に対し、通常の変形ではなかなか再現できない場合があります。そんなときにこの手のソフトを使うとおもしろい結果につながるんじゃないかなと思います。

今回ご紹介するサンプルは、直線をバネに見立てて、学校の物理の授業で習った、「フックの法則」に従って直線の長さを変形させるものです。

すべての直線の長さを連続的に伸び縮みさせることで、上の図のように六角形の辺が場所によって長くなったり短くなったりして、全体的に変化のある形状になります。

ちなみにKangarooにはKangaroo1とKangaroo2の二種類がありますが、今回はKangaroo1のほうを使います。

ダウンロードは以下のリンクからどうぞ。

Step.1 XY平面上に六角形を配置する

・まずはHexagonalコンポーネントを使って六角形をXY平面上に配置します。

・大きさとか数はお好みで。

Step.2 変形させる部分を抽出する

・Step.1で作った六角形のうち、実際に変形させる部分を取り出します。

・上の図の緑色の部分を切り取れるようRhino上で四角形の曲線を作り、それをGrasshopperに取り込んだうえ、Region Intersectionコンポーネントを使って相関部分を取り出します。

・取り出した相関部分は閉曲線になっているので、Brep Edgesを使ってバラバラの直線にします。

Step.3 アンカーポイントの作成

・つぎに、アンカーポイントの作成に進みます。アンカーポイントは、簡単に言うと拘束点のことです。変形させず、かならずその場所から動かさない点のことです。

・Step.2で作った六角形を使って、両端の点を求め、Kangarooプラグインの中にあるremoveDuplicatePtsコンポーネントを使って、ダブり点を除去します。

・同時に、六角形のすべての辺をBounding Box、及びBrep Edges、Join Curvesコンポーネントを使って外枠を求め、それを内側に若干量オフセットさせた曲線に対し内側か外側かを判別させ、上の図の緑色の点を取り出します。この点群をアンカーポイントとします。

Step.4 六角形の密度を濃くする部分と粗くする部分の点を配置する

・Rhino上で、パターンを濃くしたい個所、粗くしたい個所を示す点を打ちます。

・点の数や場所はお好みですが、今回はそれぞれ3点ずつにします。

Step.5 変形後の直線の長さの目標値を求める

・次に、六角形を変形させた後の長さの数値を求めていきます。

・Step.4で作った、点を3個ずつ、Grasshopper上に取り込み、Step.2で求めた、六角形のバラバラにした辺の中点との距離を求めます。

・変形後の長さは、元の長さに対する変化の割合を求め、それを元の長さに足し合わせることで変形後の長さを求めます。

そこで、まずはさきほど求めた距離の逆数を計算します。密度を濃くするところは元の長さより短くしたいので-1で割り、粗くするところは元の長さよりも長くしたいので、1で割ります。

・次に、求めた逆数に対し、掛け算を行うことで長さの変化量を調整します。六角形の変形量を変更する場合はまずここの数値を調整します。

・その後ろで、Mass Additionコンポーネントにつなげ、6つの点との間の距離の逆数の総和を求めることで、六角形の辺1本ごとの変化の割合(元の長さに対する倍率)が求まります。

・boundsコンポーネントを使って計算した総和の範囲を見てみます。数値が大きすぎると変形が激しく、形が壊れてしまうため、規制をかける必要があります。上の図のようにMinimumとMaximumコンポーネントを使って上限の数値と下限の数値を設定し、越えてしまう数値はすべて置き換える処理をしておきます。今回は伸び方向で0.5倍、縮み方向で0.8倍に設定しました。

Rhino上で作った点の周囲の形がおかしい場合は、ここの数値を調整します。

・求めた割合を、六角形の辺の長さにかけ合わせて、長さの変化量を求め、元の長さに足し合わせることで変形後の長さが求まります。

Step.6  バネの設定

・続いて、バネの設定を行います。

・Kangarooの中にある、SpringsFromLineコンポーネントを使います。Connection入力は、今回変形させるすべての直線をつなぎます。Flattenの設定は忘れずにつけておきます。

・Stiffnessはバネの両端にかかる荷重です。これが弱いと、目標となる長さに到達しません。ですが、単位がよくわからないので、とりあえず適当な数値を入力し、結果を見ながら調整したほうがいいかなと思います。

・Dampingは減衰です。細かい説明は省略しますが、適宜、結果を見ながら調整します。Plasticityも同様です。

・Unary Forceは特に今回の平面上の変形では必要ないとは思いますが、一応、設定しておきます。いわゆる重力の設定で、Zマイナス方向にかかる荷重の設定です。

Step.7 ソルバーの設定

・次に、ソルバーのコンポーネントにつなげます。いわゆる、計算プログラムの部分です。

・つなげ方は上の図のとおりです。入力はすべて、Flattenにします。

・計算のON/OFFは、Boolean Toggleで切り替えます。

・計算に要する時間はTimerコンポーネントで行います。

Step.8 完成

・後はお好みで加工したら完成です。

2 件のコメント:

  1. こんにちは、初めてコメントさせていただきます。当方は横浜市で試作モデル製作をしています「株式会社オウル・クラフト」です。グラスホッパーで検索をしていたところ、Akemi様のブログを参照しまして、コメントさせていただきました。
    現在、グラスホッパーを勉強中で、業務にてグラスホッパーのモデリングが必要となりました。もし、可能ならばAkemi様に製作の依頼、またはご指導をしていただけないかの相談でコメントしました。ご返答頂ければ幸いです。ご返答は弊社のHPをご覧いただき、会社メアドにてお願いいたします。
    お忙しいところ恐縮ですが、よろしくお願いいたします。

    返信削除
  2. 先にコメントさせて頂いたオウル・クラフト土肥です。メール、s.dohi@owl-craft.comへお願い致します。お手数をお掛けしますが、どうぞよろしくお願いいたします。

    返信削除

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

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