STUDIO TAMA

thumbnail

投稿日:2021-12-14

【Grasshopper Tutorial】 Hexagon Pattern

  • #Grasshopper

  • #GH Modeling

  • #Basic

今回は六角形を上画像の様に 4 パターンのオブジェクトを作成しランダムに配置するチュートリアルを作成しました。 難易度は、初級程度ですがデータ構造の理解は必要です。是非挑戦してみてください。テキストですと中々理解が難しいかもしれません、こちらのチュートリアルは動画化してますので難しいと感じたら以下のリンクから動画で確認してみてください。

概要

thumbnail

上画像がコードの全体像です。大まかな流れは以下となります。

  1. 正六角形の作成
  2. パターン 1 つ目作成
  3. パターン 2 つ目作成
  4. パターン 3 つ目作成
  5. パターン 4 つ目作成
  6. 配置箇所作成
  7. 配置箇所をランダムにグループ化
  8. 配置箇所に向かうベクトルの作成
  9. 4 つのパターンを配置箇所に移動
  10. 完成

正六角形の作成

thumbnail
  1. ややめんどくさい方法で正六角形を作成していきます。「Line SDL コンポーネント」で XY 平面に X 方向に向かって長さ 1000 の Line を作成します。
  2. 「Rotate コンポーネント」で作成した Line を π/3 (60 度)回転させます。
  3. 作成した 2 本のラインをそれぞれ「End Points コンポーネント」で終点を取得します。
  4. 「Line コンポーネント」で取得した終点を直線で結びます。
  5. 3 本の直線を「Join Curves コンポーネント」で結合します。正三角形ができたかと思います。
  6. 「Boundary Surfaces コンポーネント」で作成した正三角形にサーフェイスを張ります。
  7. 作成した正三角形のサーフェイスを回転させて正六角形を生成していきます。「Rotate コンポーネント」に正三角形を接続します。
  8. 「Serise コンポーネント」で回転角のリストを作成します。入力端子 N に π/3 (60 度), 入力端子 C に 6 を入力し、「0, 60, 120, 180. 240, 300」のリストができました。
  9. 「Rotate コンポーネント」の入力端子 A に接続します。正六角形の完成です。

パターン1つ目作成

thumbnail
  1. それではパターンを1つ作成していきます。「Area コンポーネント」で正六角形を生成する 6 つ正三角形の中心点を取得します。
  2. 「Move コンポーネント」で取得した中心点を Z 方向に 100 移動させます。
  3. 「Extrude Point コンポーネント」で6つの正三角形を移動させた 6 つの点に向かって押し出します。上画像の様に、正三角形を底面とした正三角錐を 6 つ組み合わせたようなパターンが 1 つ完成しました。

パターン 2 つ目作成

thumbnail
  1. 「Deconstruct Brep コンポーネント」で作成した 1 つ目のパターンを分解し、分解後のサーフェイスを取得します。「正三角錐を分解した 4 面 ×6 個で 24 面サーフェイスが取得できてます。
  2. 底面の正三角形以外の 3 面の中心点を Z 方向に 100 移動させ、その点に向かって各面を押し出すことで、2つ目のパターンを作成していきます。「Area コンポーネント」で取得したサーフェイスの中心点を取得します。
  3. リストから底面の正三角形を消去します。「Sort List コンポーネント」で取得したサーフェイスを面積の小さい順に並べ替えます。入力端子 K に「Deconstruct Brep コンポーネント」の出力端子 F を、入力端子 A に「Area コンポーネント」の出力端子 A を接続します。
  4. 底面の正三角形は他の 3 面と比べて明らかに面積が最大なので、「Cull Index コンポーネント」でリストの最後の値を消去します。インデックスに「-1」を接続します。
  5. 「Area コンポーネント」で取得した各サーフェイスの中心点からも、底面の正三角形の中心点を消去します。「Sort List コンポーネント」を新たに用意し、入力端子 K に「Area コンポーネント」で取得した面積を、入力端子 A に中心点を入力します。
  6. 「Cull Index コンポーネント」でリストの最後の値を消去します。正三角錐の底面の中心点が消去されたリストが取得できました。
  7. 取得した中心点のリストを「Move コンポーネント」で Z 方向に 100 移動させます。
  8. 「Extrude Point コンポーネント」で各サーフェイスを移動させた点に向かって押し出します。パターン 2 つ目が完成しました。

パターン 3 つ目作成

thumbnail
  1. 3つ目パターンは 2 つ目と処理が同じなのでコピペで作成します。2 つ目のパターンを作成した時の「Deconstruct Brep コンポーネント」~「Extrude Point コンポーネント」までを複製します。
  2. 前項の「Extrude Point コンポーネント」の出力端子から得られる 2 つ目のパターンを、複製した「Deconstruct Brep コンポーネント」に接続します。これで 3 つ目のパターンが完成です。
  3. 「Brep コンポーネント」を使用し、2 つ目のパターン・3 つ目のパターンをそれぞれ取得しておきます。「Extrude Point コンポーネント」に「Brep コンポーネント」をそれぞれ接続します。後々のためにそれぞれ「Graft」しておきます。
thumbnail
  1. 同じ処理をそれぞれ「Cluster」しパッケージ化しておきます。「Deconstruct Brep コンポーネント」~「Extrude Point コンポーネント」をそれぞれ選択し、右クリックでメニューを開き「Cluster」を選択します。
  2. 上画像の様にコードがすっきりしました。1 つ目のパターンも「Brep コンポーネント」で取得しておきましょう。

パターン 4 つ目作成

thumbnail
  1. 4 つ目のパターンを作成します。「Integer コンポーネント」で一番最初に Line を作成した時の 1000 を取得します。
  2. 「Polygon コンポーネント」で正六角形を作成します。
  3. 「Area コンポーネント」で正六角形の中心点を取得します。
  4. 「Move コンポーネント」で取得した中心点を Z 方向に 100 移動させます。
  5. 「Extrude Point コンポーネント」で取得した中心点に向かって、正六角形を押し出します。4 つ目のパターン完成です。
  6. 「Brep コンポーネント」で 4 つ目のパターンも取得しておきましょう。

配置箇所作成

thumbnail
  1. 作成した 4 つのパターンを配置する点を作成していきます。「Plane コンポーネント」で最初に配置した XY 平面を取得します。
  2. 「Integer コンポーネント」で最初に設定した 1000 を取得します。
  3. 「Hexagonal コンポーネント」で六角形グリッドを作成します。入力端子 P に取得した XY 平面を、入力端子 S に取得した 1000 を、Ex, Ey には X・Y 方向のグリッドの数を入力します、今回は[ 40, 10]を入力しています。
  4. 「Hexagonal コンポーネント」の出力端子 P から六角形グリッドの中心点が取得できます。出力端子を「Flatten」しておきます。

配置箇所をランダムにグループ化

thumbnail
  1. 取得した 400 点を 100 点ずつランダムに 4 グループに分けていきます。「Jitter コンポーネント」を「Hexagonal コンポーネント」の出力端子 P に接続してリストをランダムに並べ替えます。
  2. 「List Length コンポーネント」で「Hexagonal コンポーネント」の出力端子 P から点の総数を取得します。
  3. 「Division コンポーネント」で取得した総数を 4 で割ります。
  4. 「Partition コンポーネント」でランダムに並べ替えたリストを 4 分割していきます。入力端子 L に「Jitter コンポーネント」の出力端子を、入力端子 S に「Division コンポーネント」の出力端子を接続します。
  5. 「Explode Tree コンポーネント」で 4 グループに分けた点のリストをそれぞれ切り出していきます。「Explode Tree コンポーネント」の出力端子付近で拡大すると、「+」「ー」マークが出てきますので、「+」を押して出力端子 4 つにします。
  6. 「Explode Tree コンポーネント」の各出力端子からランダムにグループ分けした点のリストが取得できました。

配置箇所に向かうベクトルを作成

thumbnail
  1. 各配置点に向かうベクトルを作成します。「Point コンポーネント」で、最初に「Construct Point コンポーネント」で設置した点(0,0,0)を取得していきます。
  2. 「Vector2Pt コンポーネント」を4つ用意し、点(0,0,0)から各点に向かうベクトルを作成します。

4 つのパターンを配置箇所に移動

thumbnail
  1. 4 つのパターンを各配置点に移動させていきます。「Move コンポーネント」を 4 つ用意し、入力端子 G に作成した 4 つのパターンをそれぞれ入力します。
  2. 「Move コンポーネント」の入力端子 T には先ほど作成したベクトルをそれぞれ接続します。移動が完了しました。
  3. 「Custom Preview コンポーネント」と「Colour Swatch コンポーネント」で色付けします。

完成

thumbnail
thumbnail
thumbnail

以上になります。データ構造を理解できていれば簡単かもしれませんが、理解できていないと途中で混乱してしまうかもしれません。「Panel コンポーネント」などでデータの中身を確認しながら実装してみてください。また、こちらのチュートリアルは動画化しているので、難しいと感じたら是非動画で確認してみてください。

【参考文献】

  • Grasshopper Docs : https://grasshopperdocs.com/
  • AppliCraft : https://www.applicraft.com/
目 次