GH Basics GH Tutorial Grasshopper Objects

【Grasshopper Tutorial】 Origami Fold

今回は、上画像の様に折り紙で折ったような球体を作成していきます。折り紙のチュートリアルはGrasshopperでは定番ですが、Kangarooがよく使用されているかと思います。今回はKangarooを使用せずに実装していきたいと思います。こちらのチュートリアルは動画化してますので、動画の方がよい方は以下のリンクからどうぞ!

概要

上画像がプログラムの全体像となっております。

三角形で構成された球体において、三角形の各接点を拘束・移動させ変形させていく、といった流れになります。

各グループごとに解説していこうと思います。

ベースとなる曲線を作成

  1. ベースとなる曲線を作成します。「Arcコンポーネント」でXZ平面に半円を描いていきます。入力する角度は「-π /2 to π/2」とします。上画像の緑色の円弧ができるかと思います。
  2. 「Rotateコンポーネント」で回転させながら複製させていきます。「Rangeコンポーネント」で「0~360」までの範囲で30等分した角度のリストを取得します。
  3. 「Cull Indexコンポーネント」取得した角度のリストは0度と360度が同一位置になってしまうので、最後の360をリストから消去します。
  4. 「Radiansコンポーネント」で角度のリストをラジアン変換し「Rotateコンポーネント」に接続します。
  5. 上画像の様に曲線が球状に複製されていればOKです。

ベースとなる曲線の分割

  1. 先ほど作成したベースとなる曲線を「Dispatchコンポーネント」で1本飛ばしで半分取得します。
  2. 「Divide Curveコンポーネント」で取得した曲線を分割します。今回は12分割しています。
  3. Vector 2Ptコンポーネント」できゅうの中心点から各分割点へのベクトルを取得します。

拘束する点を決める

  1. 拘束する点を決めていきます。「List Lengthコンポーネント」「Vector2Ptコンポーネント」に接続し、分割した点の個数を取得します。
  2. 「Repeatコンポーネント」で「1」を分割点の個数だけ繰り返したリストを取得します。
  3. 「Seriseコンポーネント」で0から始まり分割点の個数まで1ずつ増えていくリストを作成します。上画像では0~12までのリストが取得できています。
  4. 「Dispatchコンポーネント」で偶数のみを取得します。
  5. 「Replace Itemsコンポーネント」で先ほど「Repeatコンポーネント」で作成したリストの偶数番目を0に置き換えます。0と1が交互に並んだリストが取得できました。このリストでの0が拘束点になり、1は移動点になります。

分割点の移動

  1. 分割点を移動させていきます。「Multiplicationコンポーネント」で先ほど作成した0と1のリストに移動距離を掛けていきます。今回は内側に変形させてい野で「-32」を入力しています。
  2. 「Amplitudeコンポーネント」で中心点から各分割点までのベクトルの長さを作成した移動距離のリストで再設定します。
  3. 「Moveコンポーネント」で分割点を移動させます。画像では分かりにくいかもしれませんが、移動する点と拘束する点が交互になっています。

一連処理の複製

  1. 「Divide Curveコンポーネント」~「Moveコンポーネント」までの処理を複製し、「Dispatchコンポーネント」の出力端子Bから取得できる、もう半分の曲線に対して一連の処理を適用していきます。

三角形サーフェイスの作成①

  1. 「Shift Listコンポーネント」で分割点のリストを1つずらします。入力端子Wrapは「Invert」してFalseします。上画像黄色矢印の様に、曲線に沿って1つずれた点を取得できました。
  2. 「Relative Itemコンポーネント」で今度はブランチごとずらします。入力端子Tに「Moveコンポーネント」で取得できる点を入力し、「Simplify」します。入力端子O(Offset)に{1}と入力します。これでブランチが1つずれました。入力端子Wp(Wrap)は「Invert」してFalseにしておきます。上画像青矢印の様に、各曲線の分割点が次の曲線の位置にずれる動きとなっております。
  3. もう半分の曲線の分割点にも同様の点を取得します。変更箇所としては。「Relative Itemコンポーネント」の接続元が「Shift Listコンポーネント」になっていて、ブランチのオフセットが{-1}となっています。

三角形サーフェイスの作成②

  1. 「4Point Surfaceコンポーネント」を4つ用意し、作成した点のリストを接続していきます。上画像が1つ目です。
  1. 上画像が2つ目です。
  1. 上画像3つ目です
  1. 4つ目になります。
  1. 作成したサーフェイスを「Mergeコンポーネント」でまとめて「Custom Previewコンポーネント」で色付けします。ベースは完成しました。ここから折り紙で折ったような形状にしていきたいと思います。

拘束点・移動点のパターン作成

  1. すべての曲線の半分に対して、拘束する点と移動する点のパターンを作成します。
  2. 「Stream Filterコンポーネント」でパターン作成します。0番目には「Boolean Toggleコンポーネント」でTrueを入力、1番目はFalse、2番目「True, False」, 3番目「False, True」としています。入力端子Gには「Value Listコンポーネント」で0~3までのリストを作成し入力します。
  3. 「Dispatchコンポーネント」の入力端子Pに接続します。

完成

  1. 変数を変えていろんな形状を試してみます。半分の曲線に対して、分割点をすべて移動点とした場合。
  1. 次は半分の曲線をすべて移動点とした場合。
  1. 曲線の半分は偶数番目の点を拘束、もう半分は奇数番目の点を拘束するパターン
  1. 半分の曲線の分割数を変化させたパターン
  1. 他にも最初に設定したRangeコンポーネントで複製する曲線の数を変えれば、より細かくなりますし、ベクトルの移動距離や曲線の半径を変えれば大きくなったり小さくなったりしますので、試してみてください。

以上になります。さほど難しくはないですが、どの点がどのように移動したいるのかを把握しながら実装する必要があると思います。「Point listコンポーネント」などでインデックス番号を可視化しながら実装してみてください。

-GH Basics, GH Tutorial, Grasshopper, Objects
-, ,