【集中講座】Grasshopper – 複数データを繋ぐ際の注意 – Mergeを使った管理

  • Grasshopperの階層データの処理を理解したい人向け
  • Grasshopperで複数データを入力する時に
  • Grasshopper基礎
  • ミスのない理解しやすいアルゴリズムを作成できる
  • 見えにくい入力順を視覚化
  • 複数データを繋ぐMergeコンポーネントの働きと利点を学ぶ

 このページでは、入力端子に複数のデータを繋ぐ際、注意する点について記述しています。


Rhinoで作成した曲線3本(上・中・下)をGrasshopperで[Loft]コンポーネントに繋ぎ、下図のようなサーフェスを作成してみます。
Grasshopperのアルゴリズムのおおよその流れは下記となります。

1.[Curve]コンポーネントの上で右クリックして、[Set One Curve]からRhinoの曲線を1本ずつ読み込む
2.[Curve]の出力を[Loft]コンポーネントのC端子に、Shitキーを押しながら複数繋ぐ

です。

確認すると特に問題なく上・中・下の3本の曲線を繋ぐLoft面が作成されています。

続いてその下にある[Loft]コンポーネントを確認してみると、使用しているコンポーネント・接続端子が同じにも関わらず、作成されるLoft面の形が異なるのが分かります。

これはどういうことなのでしょうか?理解を深めるために、別の例も確認してみます。


次に紹介するアルゴリズムは、下記のような考え方で作成されています。

1.[Panel]コンポーネント4つにそれぞれ、”This”,”is”,”a”,”pen”と記述
2.[Text]コンポーネントに複数接続し、記述したデータをまとめる
3.まとめたデータを[Text Join]コンポーネントに繋ぎ、入力した文字同士の間にJ端子に入力した文字を加えて結果を出力する

です。

例では[Text Join]コンポーネントのJ端子に” ”(スペース)を入力したので、 最終結果が“This is a pen” となります。

ただし下図の例ではさきほどの[Loft]の例と同じく、使用しているコンポーネント・繋いだ端子は同じにも関わらず、結果が異なり “This is a pen” ではなく “a is pen This”となっています。

これは
・Grasshopperの端子にShiftキーを押しながら複数のデータを接続した時は、データを繋いだ順番を記録しているから
になります。

上の例では、”This”→”is”→”a”→”pen”の順に接続したのではなく、”a”→”is”→”pen”→”This”の順に接続されたということです。

この仕様は[Relay]コンポーネントで、データをまとめた時なども同様です。

これでは入力したデータと出力される結果が視覚的に異なるため、アルゴリズムを修正するのが非常に難しくなります。また同じ入力データを繋いでも、接続し直すたびに結果が変わる可能性があります。


〇対策方法

こういった時は、[Merge]コンポーネントを使うことで、入力と出力の関係を理解しやすくできます。

[Merge]コンポーネントには、

1.同じ階層値のデータをまとめる
2.同じ階層値のデータが複数ある場合、入力端子の上から順に(D1→D2→,,)データを並べる

という働きがあります。

詳細は下記リンクを参照ください。
https://www.applicraft.com/ghcp_sets/#merge

”This”,”is”,”a”,”pen”がそれぞれD1,D2,D3,D4に繋がっているため、キャンバスに並んだ順に入力されるため、アルゴリズムが理解しやすくなります。また途中のテキストを変更した際も、入力の順番と一致しているため変更・確認が容易となります。


では、最初の[Loft]の例に戻ります。

[Loft]の場合も同様に[Merge]を使って曲線の順番を、D1,D2,D3にそれぞれ繋ぐことで、曲線を上から順にLoftした面を作成することができます。

またMergeコンポーネントは、ズームして近づくことで、+,-アイコンから入力端子の増減を行うことができます。この機能により入力する順番を任意に変更してアルゴリズムを作成することもできます。

作成したときは問題なく動くので[大丈夫だ]と判断しても、一か月も経つと自分が何を作成したのか忘れてしまうことも多いかと思います(個人差もあると思いますが、)。

 その場しのぎで作成していると、本質的なアルゴリズムの理屈ではなく、端子に接続した順番を再現できないため修正ができない、ということにもなりえます。

ぜひ分かりやすいアルゴリズム作成を心がけて頂けたらと思います。


補足1:

Rhinoの[Loft]コマンドやGrasshopperの[Loft]コンポーネントは、曲線の選択順により面の法線方向やUVの向きが変わることがあります。

下図は、左側は上から順に曲線を選択したLoft、右側は下から順に選択したLoftです。
Rhinoの[Dir]コマンドで確認すると白い矢印・法線方向が異なるのが分かります。こういった点を踏まえても、[Merge]コンポーネントを使って選択順を変化させない方が、作成するアルゴリズムに矛盾が生じないと思われます。


補足2:

 [Merge]コンポーネントは、まず[階層が同じものをまとめる]働きをします。なので階層が異なるデータは階層ごとに分けられ、入力データ全てを1つにまとめることができません。

下の例では 上と中の曲線が{0}、下の曲線が{1}という階層値なので、それぞれの階層ごとにLoftが行われ意図した通りにLoftできていません。

こういった場合は、入力する階層を事前に変更することで対応できます。下の例では、入力端子それぞれにFlattenオプションを追加しています。

もっと簡単に行うのであれば、[Entwine]コンポーネントを使い、階層値を変更させつつデータをまとめて入力し、出力時にFlattenをつける方法もあります。

 [Entwine]コンポーネントの使い方は、下記リンクを参照していただけたらと思います。
https://www.applicraft.com/ghcp_sets/#entwine