GrasshopperでSort Listについてお探しですね。
広告
Grasshopperでデータを思い通りに並べ替える「Sort List」の使い方
Grasshopperでパラメトリックモデリングをするとき、たくさんのデータを思った通りにコントロールできるかどうかが、すごく大事になってきます。
その中でも特に重要なのが、「Sort List」というコンポーネントを使ったデータの並び替えです。
モデリングを進めていると、取得した点や曲線、面などの順番がバラバラになってしまって、その後のLoft(面を張る操作)やSweep(断面を押し出す操作)でエラーが出たり、形が崩れたりすることってよくあるんです。
普通に手でモデリングするなら目で見て直せますが、プログラムで自動化するGrasshopperでは、データを論理的な順番に整理するスキルが欠かせません。
この記事では、面積や長さ、座標といった具体的な数値を基準にして、データを正確に並び替える「Sort List」の仕組みと、実際の制作での使い方について詳しく説明していきます。
Sort Listの基本的な仕組み
Grasshopperの「Sort List」コンポーネントは、データを特定の基準に沿って小さい順(昇順)に並び替えてくれる、とても便利なツールです。
このコンポーネントには、「K(Key)」と「A(Value)」という2つの大事な入力端子があります。
K端子には並び替えの基準となる数値(面積とか、長さとか、座標の値とか)を入れて、A端子にはその数値に対応する実際の形(点、曲線、面、立体など)を入れます。
Sort Listのすごいところは、K端子に入れた数値の順番が並び替わると、それに完全に連動してA端子に入れた形も同じ順番で並び替わるという点です。
例えば、バラバラの順番で入っている複数の曲線があって、それぞれの長さを計算してK端子に入れ、曲線そのものをA端子に入れたとします。
すると、出力されるデータは「一番短い曲線から一番長い曲線」へと順番がきれいに整理されたリストになるんです。
この仕組みを理解すれば、文字や数字だけじゃなく、あらゆる3D形状を好きなルールで自由に並び替えられるようになります。
さらに、Sort Listコンポーネントはズームインして「+」マークをクリックすると、A端子の数を増やすことができます。
これを使えば、1つの基準(Key)に対して、複数の関連データ(例えば元の形と、その形に付いている色情報やテキストなど)を同時に同じ順序で並び替えることもできます。
シンプルなんだけど、Grasshopperでプログラムを組む上では絶対に欠かせない、超重要な機能なんです。
面積や長さを基準にした並び替え
すでにある3Dモデルをバラバラにして特定の部分だけを取り出したり、複雑な形から必要なパーツだけを抜き出したりするとき、面積(Area)や長さ(Length)はすごく使いやすい並び替えの基準になります。
例えば、建物の壁のモデルから「表面」と「裏面」の大きな面だけを取り出したい場合を考えてみましょう。
Deconstruct Brepというコンポーネントで立体を個別の面に分解すると、出てくるリストの中には側面の細長い面とか上下の小さな面とかがごちゃ混ぜになって入っています。
ここでSort Listの出番です。
それぞれの面の外周の長さを計算して、それをK端子に、面そのものをA端子に入れて並び替えます。
Sort Listはいつも小さい順に並べてくれるので、List Itemというコンポーネントをつなげて番号を指定すれば、欲しい面をピンポイントで取り出せます。
例えば、番号「0」を指定すれば一番外周が短い(面積が小さい)面が取れるし、「-1」や「-2」を指定すれば、リストの後ろから順に、つまり一番外周が長いメインの表面や裏面を抜き出せるわけです。
こんな感じで、面積や長さを使った並び替えは、目で選ぶのが難しいたくさんの要素の中から、条件に合うものを自動的に見つけ出す第一歩になります。
それに、大きさで部品を分けたり、特定の面積以上のパネルだけに違う模様を付けたりと、デザインの条件分岐を論理的に作る上でもすごく役立つテクニックです。
面積の重心も一緒に計算するAreaコンポーネントは重たくなることがあるので、場合によっては外周の長さ(Length)を代わりに使うのも実践的な工夫の一つですよ。
座標やパラメータを使った順番の整理
曲線を使って面を作るとき、データの順番がバラバラだと意図しない形ができてしまうことがあります。
これを防ぐために、空間上の座標(X、Y、Z)や曲線のパラメータ(t値)を基準にした並び替えがよく使われます。
例えば、Rhinoの画面上で複数の曲線をまとめて選んでGrasshopperに読み込んだ場合、選んだ順番によってリストの中の順番がバラバラになっていることがよくあります。
そのままLoftで面を張ろうとすると、面が交差して変な形になっちゃいます。
これを解決するには、それぞれの曲線の始点や中心点の座標を取得して、特定の座標軸(例えばY座標)をキーにしてSort Listで並び替えます。
Y座標の低い順(または高い順)に曲線がきれいに整理されるので、その結果をLoftに入れれば、一方向にきれいに面が作られます。
同じようにZ座標を使えば、建物の床のような階層構造を正確に下から上へと順番付けできて、各階のレベルに応じた処理がやりやすくなります。
また、座標だけじゃなく、曲線上の位置を示す「t値」を使った並び替えもすごく実用的です。
例えば、円周上にランダムに置かれた点の集まりを滑らかな曲線でつなぎたい場合、そのままNurbs Curveなどでつなぐと線が交差してジグザグになっちゃいます。
そこで、元になる円に対する一番近い点(Curve Closest Point)のt値を取得して、それをK端子に入れて点を並び替えると、円をぐるっと一周する正しい順番に点が整理できます。
空間的な位置関係を数値にしてSort Listに渡すことで、直感的で正確な形のコントロールが実現するんです。
実際の設計での活用法とデータ管理
建築設計やプロダクトデザインの実際の仕事では、データの並び替えは、作りやすさを考えた合理化や複雑なプログラムの制御にも直結します。
代表的な使い方が、閉じた曲線を使ったSweep処理での「継ぎ目(Seam)」の最適化です。
複数の閉じた断面曲線を使って面を作るとき、それぞれの曲線の継ぎ目の位置がずれていると、できあがる面がねじれてしまいます。
Rhino上では手動でドラッグして直せますが、パラメトリックなモデルでは自動化したいですよね。
この場合、断面曲線の折れ点とレール曲線の距離を計算して、その距離をキーにしてt値をSort Listで並び替えます。
一番距離が近い(リストの0番目の)t値をSeamコンポーネントに入れて新しい継ぎ目として設定し直すことで、すべての断面の向きと開始点が揃って、ねじれのないきれいな面を作ることができます。
それに、この考え方はパネルの最適化やコストダウンの検討にも応用できます。
形が似ている無数の部材を長さや面積で並び替えて、特定のサイズの範囲内でグループ分け(Partition Listなどで階層を分割)することで、部材の種類を減らして金型のコストを抑えるといった、実際のものづくりに近いデータ整理ができるようになります。
Sort Listは単に順番を変えるだけのシンプルなコンポーネントに見えますが、何を基準(Key)にして、何を連動させる(Value)かというアイデア次第で、その使い方は無限に広がります。
ツリー構造の管理やランダムな値を使ったリストの分割など、他のデータ操作コンポーネントと組み合わせることで、Grasshopperの力を最大限に引き出すことができます。
ぜひ、いろんな数値をキーにした並び替えを試して、自分のモデリングのやり方をワンランク上のレベルに引き上げてみてください。
広告
