STUDIO TAMA

thumbnail

投稿日:2021-12-23

【Grasshopper Tutorial】 Origami Fold

  • #Grasshopper

  • #GH Modeling

  • #Basic

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

概要

thumbnail

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

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

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

ベースとなる曲線を作成

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

ベースとなる曲線の分割

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

拘束する点を決める

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

分割点の移動

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

一連処理の複製

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

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

thumbnail
  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}となっています。

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

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

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

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

完成

thumbnail
  1. 変数を変えていろんな形状を試してみます。半分の曲線に対して、分割点をすべて移動点とした場合。
thumbnail
  1. 次は半分の曲線をすべて移動点とした場合。
thumbnail
  1. 曲線の半分は偶数番目の点を拘束、もう半分は奇数番目の点を拘束するパターン
thumbnail
  1. 半分の曲線の分割数を変化させたパターン

  2. 他にも最初に設定した Range コンポーネントで複製する曲線の数を変えれば、より細かくなりますし、ベクトルの移動距離や曲線の半径を変えれば大きくなったり小さくなったりしますので、試してみてください。

thumbnail
thumbnail

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

目 次