- Grasshopperでモデリングを行う初級~中級の方向け
- 曲線・サーフェス・平面の向きがそろわない時
- Grasshopper基礎
- Grasshopperで自動化してアルゴリズムでモデルを作成できます
- Rhinoによる向きの手動修正が不要
- 断面の向きを設定するなど、細かいモデリングテクニックをアルゴリズムに反映できます
Grasshopperでアルゴリズムを作成する際、曲線やサーフェス、平面の向きがそろわないため、その後のアルゴリズムに上手く動かない時があります。以下、対処法を確認してみたいと思います。
このページで使用したghファイルはこちらからダウンロードできます。
曲線の向きに関して
まずRhinoでは[Dir]コマンドを使うことで、曲線の向きを白い矢印で確認することができます。白い矢印の向いている方向が曲線の向きとなります。[Dir]コマンドで矢印を表示中にクリックないし、[Flip]コマンドを使用することで向きを反転することができます。


しかしGrasshopperでは元々持っている曲線の向きが反映されるので、Rhinoで正しく作成できた面がGrasshopperでおかしな結果になることが起こりえます。

あらかじめRhinoで[Dir]コマンドを使うことで、曲線の向きをそろえることもできますが、Grasshopperで作成した曲線の場合は、一度RhinoにBakeする必要が生じます。次に、Grasshopperのアルゴリズムの中で向きを一定に揃える方法を確認してみます。

Grasshopperでは、[Flip Curve]コンポーネントを使用することで、曲線の向きを反転することができます。
通常の使用方法だとCurve端子に入力した曲線を反転するため、反転させたい曲線を一本ずつ[List Item]などで指定することになります。これだと曲線の数が任意に変わるアルゴリズムでは、都度コンポーネントを繋ぎ直さなければ対応できません。

もう少しシンプルな方法として、Guide端子に入力した曲線の向きにCurve端子に入力した曲線の向きを合わせる方法もあります。下記の例は、Indexが0の曲線に向きをあわせ、[Loft]で面を作成した例です。

また[Contour]などのコンポーネントを使用して外形線を複数取得した際も、一部の曲線が反転することがあります。こういった時も[Flip Curve]のGuideを使って曲線の向きを合わせることができます。



サーフェスの向きに関して
サーフェスの向きもRhinoで[Dir]コマンドを使うことで、白い矢印で法線を確認することができます。白い矢印の向いている方向がサーフェスの表の向きとなります。曲線と同様に、[Dir]で矢印を表示中にクリックないし、[Flip]コマンドで反転することができます。

曲線ほど頻度は高くないかもしれませんが、サーフェスの向きをアルゴリズムの中で修正する例を見てみます。

[Flip]コンポーネントを使用することで、サーフェスの向きを反転することができます。基本的な使い方は曲線と同じく、一枚ずつ反転するサーフェスを指定もできますし、[Guide]端子に入力したサーフェスの向きに合わせることもできます。下記の例は、Indexが0のサーフェスに向きを修正して[Offset Surface]した例です。

平面の向きを他の平面にそろえる
平面の向きも曲線やサーフェスと同じく、反転することができます。ただし平面を反転する[Flip Plane]は、X・Y軸の向きや平面自体の向きをTrueやFalseで任意に反転することはできても、他の平面の向きに合わせることはできません。
サーフェスから取得した複数のIsoカーブの始点に平面を作成して、その向きを合わせるアルゴリズムをサンプルに平面の向きを合わせる方法を確認してみます。

まず[Range]で値を複数作成し、[Iso Curve]コンポーネントを使って、サーフェスからIsoカーブを複数本取得します(下記左図)。[Perp Frame]コンポーネントで、取得した曲線の始点箇所(t=0)に曲線に垂直な平面を作成(下記右図)。ただこの時点では、曲線の向きに従い平面が作成されるため、平面の向きが一定ではありません。


[Orient]コンポーネントでXY平面にある断面曲線を曲線上の平面に配置しましたが、平面の向きが一定ではないため、断面の向きも一定に配置されません(下記左図)。[Sweep1]コンポーネントで面を作成していますが、断面の向きが一定ではないため、作成される形状もひっくり返った形になっています(下記右図)。


次に[Align Planes]コンポーネントを使用して、Planes端子に入力した平面の向きを、Master端子に入力した平面の向きに合わせてみます。

平面の向きが一定になりました(下記左図)。向きが一定になることにより[Orient]で配置される断面の向きも一定になります。それにより作成される形状も同じ向きで作成することができます(下記右図)。


平面の向きをそれぞれベクトルにそろえる
最後に平面の向きを、ベクトルの向きにそろえる方法を確認してみます。基本的な考え方は上のアルゴリズムと変わりません。ただし[Orient]で配置する平面をサーフェスの法線ベクトルに、[Align Plane]コンポーネントで平面の向きを合わせています。
さきほど使用した[Align Planes]は、Planes端子に入力した平面の向きを、Master端子の平面の向きに合わせるという働きでした。
次に使用する[Align Plane]は、Direction端子に繋いだベクトルをX軸とするように、平面の向きを変更します。ここでは断面をサーフェスに垂直に配置することにして、サーフェスの法線ベクトルに向きを合わせてみます。

[End Points]で曲線の始点を取得(下記左図)。[Surface ClosestPoint]と[Evaluate Surface]でサーフェス上の法線ベクトルを取得(下記右図)。ベクトルを確認するため、ここでは[Vector Display]を使用しています。


作成した法線ベクトルを[Align Plane]のDirection端子に入力して、平面の向きを修正してみます。修正前(下記左図)と修正後(下記右図)。入力した法線ベクトルをX軸とするように平面の向きが修正されています。


[Orient]で断面配置(下記左図)。配置した断面で[Sweep1]で面を作成した例(下記右図)。


いかがでしたでしょうか?
今回ご紹介した曲線やサーフェス、平面の向きを揃える方法と以前ご紹介した
などについて理解が進むと、Grasshopperでのアルゴリズムを使ったモデリングが柔軟に行えるようになるかと思います。
是非、上記内容を併せてご理解いただければと思います。