GH Basics GH Tutorial Grasshopper Objects

【Grasshopper Tutorial】 Voronoi Vase

今回はVoronoi分割を使用して、上の画像のような穴だらけの花瓶をモデリングしてみます。難易度は高くはないですが、データ構造の理解などが必要です。データ構造があまり理解できていない方は、そちらを理解してからチャレンジするとより理解できるかと思います。
Voronoi分割の説明は割愛しておりますが、ぜひ調べてみてください。
また、こちらのチュートリアルは動画化しておりますので、動画の方がよい方は以下のリンクからどうぞ!

概要

  1. ベースとなる花瓶のサーフェイスをモデル化
  2. モデル化したサーフェイスをVoronoi分割
  3. Voronoi分割をオフセット
  4. Voronoi分割のサーフェイス化
  5. Voronoi分割に厚みを持たせる

ざっくりとした流れになります。それでは順を追って説明していきます。

ベースとなる花瓶のサーフェイスをモデル化

  1. 最初にRhinocerosでZY平面に花瓶の断面線(Profile Curve)をCurveコマンドで書きます
  2. Lineコマンドで、回転軸(Axis)をモデル化します。こちらの回転軸を使ってGrasshopperで花瓶のサーフェイスを作成していきます。
  3. Rhinocerosでの準備は完了です。
  1. 「Curveコンポーネント」に花瓶の断面線・回転軸をそれぞれSetします。
  2. 「Revolutionコンポーネント」断面を回転させていきます。入力端子P(Profile Curve)に花瓶の断面線、入力端子A(Axsis)に回転軸を入力します。入力端子D(Domain)には回転角のDomainを入力しますが、デフォルトで(0~2π)が入力されているので、ここでは特に変更しません。
  3. 上画像のようにベースとなる花瓶のサーフェイスが作成されました。

モデル化したサーフェイスをVoronoi分割

  1. 先ほど作成したベースとなる花瓶のサーフェイス上に、「Populate Geometoryコンポーネント」を使用して、サーフェイスの表面上に指定した数のPointを発生させます。入力端子GにBaseとなるサーフェイスを入力端子NにはNumberSliderを用いて数値を入力します。今回は100を入力し100Point発生させています。
  2. 「Bounding Boxコンポーネント」を使用し、Baseとなるサーフェイスが収まる直方体を生成します。入力端子Cにベースとなるサーフェイスを入力します。
  3. 「Voronoi3Dコンポーネント」を使用し、「Bounding Box」コンポーネントで作成した直方体を「Populate Geometory」で作成した点群を指定し分割していきます。入力端子Pには「Populate Geometory」で作成した点を、入力端子Bには「Bounding Boxコンポーネント」の出力端子Bを入力します。
  4. 「Brep | Brepコンポーネント」を使用し、ベースとなるサーフェイスとVoronoi分割したBrepとの交線を求めます。入力端子Aに「Revolutionコンポーネント」の出力端子、入力端子Bに「Voronoi3Dコンポーネント」の出力端子Cをつなぎます。
  5. 「Discontinuityコンポーネント」を使用し、「Brep | Brepコンポーネント」で求めた交線の頂点を求めます
  6. 「Brep | Brepコンポーネント」と「Discontinuityコンポーネント」以外をPreviewOffし、上画像のようになっていればOKです。

Voronoi分割をオフセット

  1. 「Discontinuityコンポーネント」で求めた頂点を「Polylineコンポーネント」ポリライン化します。入力端子Vに「Discontinuityコンポーネント」の出力端子Pを入力し、入力端子Cは右クリックでメニューを開きInvertすることで、常にPolylineがClosedCurveになるように設定します。
  2. 「Polylineコンポーネント」の出力結果を「Panelコンポーネント」で確認するとInvalid Curveが生成されている場合があります。(断面線の形状によるのでない場合もあります。)InvalidCurveがあると後々エラーを吐きだしてしまうので、「CleanTreeコンポーネント」で削除しておきます。入力端子EをInvertしてTrueにします。入力端子XはデフォルトでTrueかと思います、こちらがTrueだとInvalidな値を削除してくれます。削除後、空のブランチが残るので、入力端子EをTrueにすることで空のブランチを削除してくれます。
  3. 「Filletコンポーネント」を使用しPolylineの頂点をFilletします。入力端子Cには先ほど作成したCleanTreeコンポーネントの出力結果を、RにはFilletの半径を入力します。(今回は50mmで設定しました。)
  4. 「PolygonCenterコンポーネント」を使用し「Polylineコンポーネント」で作成した多角形の中心点を求めます。入力端子PにCleanTreeコンポーネントの出力端子をつなぎます。
  5. 「PolygonCenterコンポーネント」でもとめたCenterポイントを中心にして、それぞれの多角形を「Scaleコンポーネント」で縮小します。入力端子Gに「Filletコンポーネント」の出力端子Cを、入力端子Cに「PolygonCenterコンポーネント」の出力端子Cvをつなぎます。入力端子Fには縮小倍率を入力します(今回は0.9)。
  6. 「Filletコンポーネント」と「Scaleコンポーネント」以外をPreviewOffにして上画像のようになっていればOKです

Voronoi分割のサーフェイス化

  1. 「Loftコンポーネント」の入力端子Cに「Filletコンポーネント」の出力端子Cと「Scaleコンポーネント」の出力端子Gを接続し、曲線の間にサーフェイスを張ります。

Voronoi分割に厚みを持たせる

  1. 最後にLoftしたサーフェイスを「Extrudeコンポーネント」を使用し押し出すことで厚みを持たせていきます。「Loftコンポーネント」の出力端子Lを「Extrudeコンポーネント」の入力端子Bに接続します。
  2. 次にサーフェイスを押し出す方向「Extrudeコンポーネント」の入力端子Dに接続するベクトルを設定していきます。今回はVoronoi分割した各多角形の中心点が、最初にRhinocerosでモデル化した回転軸の中心点から離れていく方向に厚みを持たせていきたいと思います。
  3. 「CurveMiddleコンポーネント」を使用し回転軸の中心点を取得します
  4. 「Vector2Ptコンポーネント」を使用しそれぞれの多角形の中心点と回転軸の中心点をつなぐベクトルを作成します。「Vector2Ptコンポーネント」の入力端子Aに「PolygonCenterコンポーネント」で求めた各多角形の中心点(出力端子Cv)をつなぎ、入力端子Bには「CurveMiddleコンポーネント」の出力端子Mをつなぎます。
  5. 「Amplitudeコンポーネント」でそれぞれのベクトル長さにを再設定します。「Amplitudeコンポーネント」の出力端子を「Extrudeコンポーネント」の入力端子Dに接続します。
  6. 最後に「Custum Previewコンポーネント」「Colour Swatchコンポーネント」を使って好きな色に設定しましょう。
  7. 「Colour Swatchコンポーネント」以外をPreviewOffにして上画像のようになっていればOKです。

完成

以上になります。水の入らない花瓶完成です。ちょっとコードをいじって、Voronoi分割の範囲を上半分のみに変えることで、ちゃんと水の入る花瓶にもできるかと思います。余裕がる方はやってみてください。テキストベースできたのでわかりにくい箇所もあったかもしれません。ぜひチャレンジしてみてください。

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