【集中講座】Grasshopperコンポーネント基礎:4Point Surface

Grasshopperコンポーネント基礎講座では、Grasshopper Indexページで紹介されているコンポーネントを解説していきます。
第18回目は「4Point Surface」コンポーネントをご紹介します。

①4Point Surface コンポーネントってなあに?・・・・・・・・・コンポーネントを簡単にざっくり説明 
②実際に使ってみよう!・・・・・・・・・・・・・・・・・・・基本的な使い方を解説
③動画でチェック!・・・・・・・・・・・・・・・・・・・・・説明文だけでは解り難いという方へ
                              今回使ったコンポーネント一覧も確認できます

①4Point Surface コンポーネントってなあに?

[4Point Surface]は3点または4点の点を指定し、サーフェスを作成するコンポーネントです。
A端子→B端子→C端子→D端子と、入力された順にサーフェスが貼られます。

順番が異なるとサーフェスがねじれて作成される場合があります。

②実際に使ってみよう

三角形の中点・端点・中心点を利用してサーフェスを貼り、以下のようなパターンを作成してみます。

Step1

まず[Trianglar]コンポーネントでベースとなる三角グリッドを作成します。
[Trianglar]はP端子に平面を、S端子にグリッドのセルサイズを、Ex端子・Ey端子にはx方向・y方向のセル数を入力する事で三角グリッドを展開するコンポーネントです。
今回は[Number Slider]コンポーネントを使用し、S端子に”11″、Ex端子に”20″、Ey端子に”7″と入力します。

作成した三角形の中心点を取るために[Area]コンポーネントを使います。[Area]はG端子に入力したジオメトリの、面積(A端子)と、中心点(C端子)を出力するコンポーネントです。[Trianglar]コンポーネントのC端子を[Area]コンポーネントのG端子に入力します。
これで三角形の中心点が出力されました。この中心点を[Move][UnitZ]コンポーネントを使って”2.4″上に持ち上げておきます。

Step2

次に各辺の中点を取るために[Explode]コンポーネントで三角グリッドを分解します。[Explode]はC端子に入力した曲線の、線セグメント(S端子)と、頂点(V端子)を出力するコンポーネントです。[Trianglar]コンポーネントのC端子を[Explode]コンポーネントのC端子に繋ぎます。

これで三角形から線分と端点を出力できました。
次に、各線分の中点を取ります。中点は[Evaluate Curve]コンポーネントを使って出力します。[Evaluate Curve]は曲線とパラメータ値を入力することでカーブ上の点や接線ベクトルを出力するコンポーネントです。[Explode]コンポーネントのS端子を[Evaluate Curve]コンポーネントのC端子につなぎます。t端子にはパラメータ値(曲線の長さではなく、曲線の全長を0〜1に置き換えた場合の範囲)を入力します。今回は中点を取りたいので”0.5″と入力します。
また、実際の値ではなくパラメータ値で定義する場合、必ず入力する値(この場合は[Evaluate Curve]のC端子)を”Reparameterize”してパラメータ値に対応できるようにします。

パターン形状を作るために、出力された中点を三角形の内側に移動させます。
まず移動のベースとなるカーブを[Line]コンポーネントで作成します。[Line]はA端子・B端子に入力された点の間に曲線を作成するコンポーネントです。A端子・B端子にそれぞれ、各辺の中点・Step1[Area]コンポーネントで出力した中心点を入力します。

結果を確認すると、望む位置に曲線がないことがわかります。[Panel]コンポーネントで出力された各点のデータを確認すると、階層数が異なっているためA・Bの組み合わせがずれていることがわかります。階層を合わせるために[Area]コンポーネントのC端子をGraftし、Bに入力する階層構造をAと揃えます。これで望む結果通りに曲線が出力されました。

作成した曲線を、先ほどと同様に[Evaluate Curve]コンポーネントに入力し曲線上の点を出力します。t値は”0.26″と入力します。これで中点を内側に配置できました。

[Panel]コンポーネントで出力された点データを確認すると、0〜2までの3つのデータが出力されていることがわかります。一見問題はありませんが、最終的にサーフェスを貼る際に、この中点は隣り合う三角形と共有する必要があります。

▲青・橙のそれぞれのサーフェスの頂点として共有

このままでは対応する中点の数が少ないので、[Duplicate Data]コンポーネントを使って点データを複製し増やします。[Duplicate Data]は入力したデータを、指定した数だけ複製するコンポーネントです。”True”でリスト全体を順番通りに複製し、”False”でアイテムごとにデータを複製します。
[Evaluate Curve]コンポーネントのP端子を[Duplicate Data]コンポーネントのD端子に入力します。N端子には”2″、O端子には[Boolean Toggle]コンポーネントで”False”を入力します。
これで中点のデータを複製できました。

Step3

次に三角グリッドの端点のデータを編集していきます。
端点はStep2[Explode]コンポーネントの”V端子”から既に出力済みです。しかし、出力結果を[Panel]コンポーネントで確認すると、インデックス0番と3番の点が重複した位置にあることがわかります。

[Cull Index]コンポーネントを使って不要な3番のインデックスを削除します。[Cull Index]は入力したリストから指定したインデックスのアイテムを取り除くコンポーネントです。L端子にはリストを入力するので、[Explode]のV端子を繋ぎます。I端子にはインデックスを入力するので”3″と入力します。
これで重複したアイテムが削除されました。

さらにStep2と同様、端点も隣り合う三角形と共有するため[Duplicate Data]コンポーネントで複製します。

複製した点データのインデックス順では、きれいに一巡せず、サーフェスを貼る際にパターンに影響する為、[Shift List]コンポーネントを使ってを並び替えます。[Shift List]はリストのインデックスを、指定した数だけずらすコンポーネントです。[Duplicate Data]コンポーネントのD端子を[Shift List]コンポーネントのL端子に入力します。S端子にはシフト数を”1″と入力します。
これでインデックス0番と5番は同じ位置の点を取るよう並び替えられました。

Step4

これで三角グリッドの中心点・中点・端点が揃いました。
最後に[4Point Surface]にそれぞれの点データを入力して完成です。


Advance

出来あがったパターンを、Rhinoで作成したグラスにモーフィングし加飾として利用します。

グラスの作成手順はこちら

1-Rectangleコマンドを実行します。オプション”中心点”を利用し、長さ・幅45.5の正方形を2つ、長さ・幅71.5の正方形を作成します。
小さい正方形の一方をZ方向に100移動し、Rotateコマンドで6.5度回転させます。もう一方をZ方向に−16移動します。

2-曲線を全て選択しLoftコマンドを実行し、ロフトスタイル”直線セクション”でサーフェスを貼ります。EdgeSrfコマンドで底面にサーフェスを貼り、Joinコマンドで結合します。

3-手順1の曲線をOffsetコマンドで全て”1.5”内側にオフセットします。
一番下のカーブをZ方向に2移動させます。

▲赤いカーブがオフセットしたカーブ

4-オフセット・移動した曲線を3つ選択しLoftコマンドでサーフェスを貼ります。EdgeSrfコマンドで底面にサーフェスを貼り、Joinコマンドで結合します。

5-BlendSrfコマンドを実行し、2つのポリサーフェスのエッジ間にサーフェスを作成します。

5-手順1で作成した一番下の四角形をZ方向へ-12コピー移動します。移動させた四角形をScale2Dコマンドで、矩形の中心点を基点にスケール率0.4でスケールします。2つの曲線にLoftコマンドを実行し、直線セクションでサーフェスを貼ります。


6-スケールした四角形をZ方向に-74の位置と-148の位置にそれぞれコピー移動します。
-74の位置に配置した四角形を45度回転させます。さらにScale2Dコマンドで、矩形の中心点を基点に0.3スケールします。3つの曲線を選択しLoftコマンドを実行し、スタイル:ノーマルでロフトサーフェスを作成します。

7-作成した2つのロフトサーフェスをJoinコマンドで結合し、Capコマンドで蓋をします。これがグラスのステム部分になります。


8-TopビューでRectangleコマンドを実行します。コマンドオプション中心点を使い、原点を中心にそれぞれ50、72、104の幅の正方形を1つずつ作成します。
Rotateコマンドを実行し、サイズ72の正方形は原点を中心に5度、サイズ104の正方形は原点を中心に10度回転します。

9-3つの矩形をステムの底面に移動させます。矩形を3つとも選択し、Moveコマンドを実行します。基点は0、移動先の点をステム底面の中心点にします。
ガムボールを使ってサイズ72の正方形をZ方向に-4、サイズ104の正方形をZ方向に-8移動させます。

10-矩形を3つとも選択しExtrudeCrvコマンドを実行します。ソリッド=はいでZ方向に-5押出します。ここがプレート部分になります。
ステムとプレートを選択しBoolean Unionコマンドを実行します。これでグラスの完成です。


グラスからモーフィングしたい部分のサーフェスを取り出します。取り出したサーフェスを[Surface]コンポーネントに”Set Multiple Surfaces”でセットします。

[Surface Morph]コンポーネントを使ってパターンをモーフィングします。[Surface Morph]は、オブジェクトの変形の参照となるボックスと、モーフするサーフェス、そのサーフェスのUVWの範囲を入力し、オブジェクトを貼り付けるコンポーネントです。
[Surface Morph]のG端子に[4Point Surface]のS端子を入力します。
R端子には貼り付けるオブジェクトの参照ボックスを入力するので[Bounding Box]コンポーネントを使います。[Bounding Box]は入力されたジオメトリを覆うボックスを作るコンポーネントです。右クリックでオブジェクトごとに覆う”Per Object”・複数オブジェクトをまとめて覆う”Union Box”を切り替えられます。[Bounding Box]のC端子に[4Point Surface]のS端子を入力します。コンポーネントを右クリックし”Union Box”にチェックを入れます。※Union Boxにしてもボックスが一つにならない場合、[4Point Surface]の端子を”Flatten”します。
さらに、今回は同じパターンをサーフェス4面に貼り付けたいので[Repeat Data]コンポーネントを使って[Bounding Box]の出力結果を増やします。[Repeat Data]は入力されたデータのアイテムを指定数繰り返すコンポーネントです。[Repeat Data]のD端子に[Bounding Box]のB端子を入力します。L端子には”4”と入力します。[Surface Morph]のR端子に[Repeat Data]のD端子を入力します。

S端子には先ほど取り出したグラスのサーフェスを入力します。
U・V・Wには貼り付けるサーフェスの範囲を入力するので、[Construct Domain]コンポーネントを使います。[Construct Domain]はA端子・B端子に入力された値を0〜1の範囲として出力するコンポーネントです。適宜、値を調整しU・V・W端子に入力します。
パラメータ値の入力となる為、[Surface]コンポーネントを”Reparameterize”します。また、[Surface]コンポーネントのデータを確認すると、4枚のサーフェスが同じ階層に格納されているので”Graft”し、各サーフェスを別々の階層に分けておきます。

次に、[Deconstruct Brep]コンポーネントを使ってモーフしたパターンから底面のカーブを取り、それぞれ内側に押し出します。[Deconstruct Brep]は入力されたBrepの構成要素である面・エッジ・頂点を出力するコンポーネントです。[Deconstruct Brep]のB端子に[Surface Morph]を入力します。出力されたエッジのデータから、底面のカーブに対応しているインデックス番号を確認・出力するために[List Item]コンポーネントを使います。[List Item]はリストから指定したインデックスのアイテムを出力するコンポーネントです。L端子に[Deconstruct Brep]のE端子を入力し、i端子にはインデックスに対応する値を[Number Slider]で入力します。

出力されたカーブデータは4面全てのカーブが格納されている為、[Split Tree]コンポーネントで1面ずつデータを切り取ります。[Split Tree]は入力したデータの、指定した階層名に格納されたデータと、それ以外のデータを、それぞれ出力するコンポーネントです。
まず、出力されたカーブデータは階層が多いので”Simplify”で不要な階層を取り除き、[Split Tree]コンポーネントのD端子に入力します。M端子には”{0;*}”と階層名を入力した[Panel]コンポーネントをつなぎます。これで先頭が0から始まる階層名のデータを取り出すことができました。

取り出したカーブを[Extrude][Unit X](または[Unit Y])を使って”1”押し出します。

他の面のカーブにも同様の手順を繰り返し、各カーブをグラス内側方向に押し出します。

モーフしたサーフェスと、押し出したサーフェスをBakeし、Joinコマンドで結合します。結合したポリサーフェスをグラス本体とBoolean Unionコマンドを実行します。

最後にお好みでレンダリングして完成です。

③動画でチェック!

▼Grasshopperコンポーネント基礎⑱:4Point Surface を動画でチェック

※Macで操作していますが、Windowsでも手順は同じです。

▼今回使ったコンポーネントの一覧はこちら▼