2022年3月12日土曜日

【Grasshopper_61】Tree関連コンポーネントの各種機能について仕組みを調べてみました


Grasshopperのノードを組む上で、パスの階層を調整する際にお世話になるTreeについて、使い方や機能の中身を簡単な事例とともに調べてみました。

頻繁に使うものもあれば滅多に使わないものもあり、多種多様な機能が存在しますが、知っておくと効率良くノードを組んでいけると思いますので、気になるものがあれば試してみてください。

1.Shift Paths & Path Mapper

・1枚の適当なサーフェスに、XY平面上に作成した四角形をZ方向に投影し、立体を作る事例について考えてみます。

・GrasshopperではProjectコンポーネントを使って投影すると、パスの階層が1段階深くなるようになっています。上の図では、4つのLine-like Curveが1つのパスに含まれていますが、投影すると階層が1段階深くなり、カーブ1本ごとのパスになってしまいます。このあとの工程を考えて元の4つずつのパスに戻したいと考えた時に便利なのがShift Pathsコンポーネントです。

・浅くする階層の分だけ、マイナス値にしてo入力につなぎます。今回は1段階浅くするため、-1をつないでいます。

このパスの階層を変更する機能をさらに拡張したものがPath Mapperです。

・アルファベットと数字を使って規則性を表現する方法です。

・例えば、今回のケースに当てはめる場合、{A;B}→{A}とすることにより、Bの部分がなくなりAに統合されるという考え方です。文字は何でもいいので、上の図の真ん中の事例のように、{e;B}→{e}でも同じ結果になります。また、右側のように、数字を指定するとその数字を固定としてパスが更新されます。

2.Trim Tree

・続いて、Trim Treeです。こちらのサンプルは、Pipeコンポーネントを使って曲線に沿って円筒サーフェスを作るサンプルです。

・Projectコンポーネントと同じく、Pipeもパスの階層が1段階深くなります。Trim Treeコンポーネントの機能はShift Pathsとほぼ同じで違いがわかりません。なぜ似たような機能が二つあるのか、もう少し調べてみるつもりです。

・Trim Treeの指定の仕方はShift Pathsとは異なり、マイナス値にはしませんので注意が必要です。

3.Entwine & Merge

ノードをガツガツ組んでいくといつのまにか複雑怪奇な状態になりがちなんですが、メンテナンスやバグの修正のことを考えると、ノードツリーをなるべくシンプルな構成にすることを心がけることが重要となります。パスの階層をなるべく浅くするとともに、複数のコンポーネントをなるべく一つのノードにまとめることを常に考える必要があります。その際に有効なコンポーネントがEntwineとMergeです。ここでは、下の図のように正方形、円、六角形をそれぞれ別々に組み上げたものを一つにまとめる事例を考えてみます。

・まとめる機能としては合計3種類あり、上の図の例では上から順にEntwine(Graft)、Entwine(Flatten)、Mergeです。それぞれ、機能が異なりますので、後の工程の都合に合わせていずれかを選択します。

・Entwine(Graft)は、入力したデータの各パスをそれぞれ1段階深くしてから一つのノードにまとめるコンポーネントです。すべての入力データを1つずつのパスにしてからまとめる時に使います。

・Entwine(Flatten)は逆に、入力したデータをflattenによりいずれのパスもいったん{0}にしてから、それぞれのパスを{0;0}、{0;1}のように分けて一つのノードにまとめる機能です。

・最後に、Mergeはそれぞれ入力したデータのパスが同一のところにまとめる機能です。Entwineとは異なり、入力データすべてに対し、パスが合致する部分に一緒くたにまとめてしまいます。本来のデータを1ノードにまとめるという意味ではMergeの使い勝手が非常に良いのですが、前の工程でパスの階層をしっかり整理しておく必要があります。

4.Explode

・パスをバラバラにする時に使うのがExplodeコンポーネントです。パスの一部を取り出す時の最終手段として使う場合があるかなという印象です。ちなみに、Explodeでばらしたあと、Mergeコンポーネントにつなぐとそのまま元のパスの構造に戻ります。

5.Flip Matrix

・パスの階層とリストの長さを入れ替えるコンポーネントです。行と列の入れ替えみたいなものです。この機能の考え方は少々難しいかもしれませんが、使う場面は上の図のように縦横に並べたオブジェクトの縦と横の階層を入れ替える場面がほとんどだと思いますので、イメージとして上の図のような使い方を覚えておくといいかもれません。

6.Clean Tree

・パスの中身を綺麗にする機能です。

・使いどころとしては、Point in Curveなどを使ってパターンの一部を取り出す時、対象外となる個所のデータは除外されるため、空白のパスがそのまま残ってしまいます。後の工程を考えると空白のパスは無くした方がいい場合がありますので、Clean Treeを使って綺麗に整理します。

・空白のパスの除去のほかにもInvalid Surfaceなど形が不正なオブジェクトの除去やNullオブジェクトの除去にも有効です。それらの機能は、N、X、Eの各入力口にToggleをつなげてTrue/Falseで切り替えます。

7.Tree Statics & Split Tree

・Tree Staticsコンポーネントはパスの各種情報を調べるための機能です。パスの数値やその長さ、個数などの数値を取り出すことができます。

・Split Treeコンポーネントは指定したパスに相当する部分とそれ以外の部分の二つに分離する機能です。

・上のサンプルは、Tree Staticsコンポーネントを使ってパスを調べた後、Seriesコンポーネントを使って分離する片方のパスを連番で求め、それをSplit TreeコンポーネントのM入力につなげて分離しています。

8.Construct Path

・パスの記号を作る機能です。

・上の図のように、FlattenとGraftの設定で、それぞれ出力結果が異なります。

9.Replace Path

・パスを別の記号に置き換える機能です。

・使いどころとしては、二つのノードをMergeコンポーネントを使って一つにまとめる際、両方ともにパスが{0}だと1つに統合されてしまうので、片方のパスを{0}から{1}に変更することで、Mergeを通しても{0}と{1}に分かれた状態でまとめることができます。

10.Stream Filter & Stream Gate

・Stream Filterは複数個つないだノードを切り替える機能です。切り替えスイッチみたいなイメージです。複数ある形状を切り替えて見せたい時とかに使えると思います。上の図では、六角形と四角形をそれぞれ切り替えて表示する事例です。

・Stream Gateは出口が複数あり、それらを切り替える機能です。同じデータを、別々の処理をさせたい時とかに有効な機能です。

11.Unflatten Tree

・名前の通り、Flattenとは逆の動作をさせる機能です。

・G入力に、ガイドとなるパスをつなぐと、そのパスの階層やリストの長さに合わせてくれる機能です。

12.Match Tree

・データの中身はT入力につないだノード、パスの構造はG入力につないだノードを使って新しくパスの中身を作りだす機能。使いどころが難しいかもしれません。

・上の図の事例では、{0}から{146}までのパスに含まれる点と{73}から{219}までのパスを使って新しくノードを作っているものです。

・T入力とG入力につなぐノードのパスの長さは両者ともに同じにしないと動作しません。

13.Tree Branch

・パスを剪定(切り取る)機能。

・P入力に指定するパスの記号をつなぎます。モードが2種類あり、Maintainの方が指定したパスのみ残す、Renumberの方が指定したパスを切り落とす方式です。

・7で紹介したSplit Treeと似たような機能ですので、どちらか使いやすい方でいいかなと思います。

14.Tree Item

・具体的なパスの記号とインデックス番号を指定して、ピンポイントでデータを取り出す機能です。

15.Prune Tree

・パスごとのリスト長さを調べて、指定した範囲内の個数に相当するパスのみ取り出す機能。

・上の図では、パスごとに1個~5個まで点のデータが含まれていますが、その中から2個~4個までのものを取り出して球体を作っている事例です。

0 件のコメント:

コメントを投稿

【Grasshopper_98】SporphとSurface Morphingの特徴、違いなどについて

今年もまたGWに突入しましたね。コロナ明けに円安、インバウンド特需のおかげで東京から郊外に出かけると例年以上に混雑に巻き込まれそうなので、昨年と同様、連休中は家に籠ってブログを更新します。今回のテーマは、Surface MorphingとSporphの違いについてまとめてみました。