今回は Grasshopper のプラグインで、物理演算が行える Kangaroo2 を使用して上画像の様なドームを作成していきたいと思います。Kangaroo2 を用いることができれば、デザインの幅も更に広がるかと思います。是非参考にしてください。こちらのチュートリアルは動画化しておりますので、動画の方がよい方は是非以下のリンクからのぞいてみてください。(※事前に
から Kangaroo2 をインストールしておいてください。メジャーバージョンが 2 以降のもの(Kangaroo2.○.○)をインストールしてください。それ以前は Kangaroo1 となり機能が異なります。)
概要
上画像がプログラムの全体像となっております。
それでは各グループごとに説明していきたいと思います。
ベースとなるメッシュ作成
- 「Circle コンポーネント」で半径 20m の円を作成します。
- 「Divide Curve コンポーネント」で作成した円を分割します。上画像では 5 分割しています。
- 「Cull Pattern コンポーネント」で取得した分割点から特定の点を取得します。入力端子 P で右クリックを押し、Set Multiple Booleans で「False,True,False, True, True」で 0 番目と 2 番目を消去したリストを取得します。
- 「Polyline コンポーネント」で取得した点からポリラインを作成します。入力端子 C を「Invert」して閉じた曲線にします。
- 「TriRemesh コンポーネント」で三角形メッシュで分割します。入力端子 Iters にはメッシュの細かさを入力します。今回は 10 を入力しておきます。
- 「Mesh Edge コンポーネント」で作成したメッシュのエッジを取得します。
荷重の作成
- メッシュに掛ける荷重を作成します。「Mesh Edge コンポーネント」の E2 端子から「Curves コンポーネント」でメッシュの内部のエッジを取得します。
- 「Discontinuity コンポーネント」で取得したエッジの頂点を取得します。
- 「Load コンポーネント」で荷重を作成します。先ほど取得したエッジの頂点を入力端子 P に接続し「Flatten」します。この点に荷重をかけていきます。
- 「Load コンポーネント」入力端子 FV(Force Vector)に荷重をかける方向を入力します。今回は Z 方向に荷重をかけていきます。
- 「Load コンポーネント」入力端子 W(Weighting)にスカラー値を入力します。今回は 20 を入力しています。
変形させるオブジェクトの指定
- 「Show コンポーネント」で結果を出力させたいオブジェクトを指定します。「TriRemesh コンポーネント」で作成したメッシュを指定します。
メッシュエッジをスプリング化
- メッシュのエッジに弾性力を持たせます。「Mesh Edge コンポーネント」で取得したエッジから E1(外周部)と E2(内部)のエッジを「Merge コンポーネント」でまとめておきます。
- 「Length コンポーネント」でエッジに弾性を与えていきます。
拘束する点を決定する
- 「Curves コンポーネント」で「Mesh Edge コンポーネント」の E1 端子から外周部のエッジを取得します。
- 「Join Curves コンポーネント」で取得したエッジを結合します。
- 「Discontinuity コンポーネント」で結合したエッジの頂点を取得します。上画像の黄色 ○ 箇所が取得できるかと思います。
- 「Anchor コンポーネント」で取得した頂点を拘束します。入力端子は「Flatten」しておきます。
演算の実行
- 「Merge コンポーネント」に「Show コンポーネント」・「Load コンポーネント」・「Length コンポーネント」・「Anchor コンポーネント」をまとめておきます。一番上 D1 に「Show コンポーネント」がくるように接続し、入力端子はすべて「Flatten」しておきます。
- 「BouncySolver コンポーネント」を使用して物理演算を行っていきます。GoalObjects に「Merge コンポーネント」の出力端子を接続します。
- 「BouncySolver コンポーネント」の入力端子 Reset に「Button コンポーネント」を接続して Bool 値を入力できるようにします。ボタンを押して True が入力されると、演算がリセットされます。
- 「BouncySolver コンポーネント」の入力端子 On にも「Button コンポーネント」で Bool 値を入力できるようにします。このボタンを押し続けている間(True が入力されている間)は演算がされます。
- 「BouncySolver コンポーネント」の入力端子 On のボタンを押して(押し続ける)演算を開始してみましょう。上画像の様になれば OK です。リセットのボタンを押せば、リセットされます。
演算結果を複製
- 「List Item コンポーネント」の 0 番目で演算後のメッシュを取得します。
- 「Rotate コンポーネント」で回転させながら複製させていきます。入力端子 P に入力する回転中心は、Anchor させたポイントから「List Item コンポーネント」で1ポイント取得してきます。
- 「Serise コンポーネント」で回転角のリストを作成します。Step で 60 度ずつ増やし、Count6 とします。
- 「Radians コンポーネント」で角度を弧度法に変換し、「Rotate コンポーネント」に接続します。上画像の様になれば OK です。
メッシュエッジを立体化
- 「Face Boundaries コンポーネント」で「Rotate コンポーネント」の出力端子かか変形後のメッシュのエッジを取得します。
- 「Area コンポーネント」で各三角形メッシュの中心点を取得します。
- 「Scale コンポーネント」で三角形メッシュのエッジを取得した各中心点を基準に縮小します。今回は 0.8 倍しています。
- 「Ruled Surface コンポーネント」で縮小前と後のエッジの間にサーフェイスを張ります。
- 「Extrude コンポーネント」で取得したサーフェイスを Z 方向に押し出します。
完成
上画像の黄色 ○ 箇所を変更してみます。円の分割数を 8、回転する基点をリストの 3 番目にしてみました。
上画像の様になりました。変数を変更していろんな形状を試してみてください。
以上になります。Kangaroo2 はたくさんの方がいろんなチュートリアルを作成していますので、他にも試してみてください。
【参考文献】