Rhino7新機能: SubDサーフェスとQuadRemesh

Rhino7ではあらたなオブジェクトとして、[Sub Division サーフェス]が追加されました。
[Sub Division サーフェス]は、高精度の[Catmull-Clark subdivision surface]と呼ばれるオブジェクトで、複数の[SubD オブジェクト]間を、曲率連続性を保ったまま、形状作成・変形が可能です。

[Sub Division サーフェス]は、現時点(2021/3)では、まだ改良・拡張の余地があるようで、系統だった解説は見当たりませんが、ネットでいくつかのチュートリアルムービーがアップされています。ここでは技術的な背景には触れませんが、概念と主な機能を要約して説明します。

[SubDサーフェス]は、[SubD オブジェクト]あるいは、単に[SubD]と表現することもあります。
[SubD]を定義する要素は、[SubDフェイス(面)]、[SubDエッジ]、[SubD頂点]の3つです。
[SubD]は、隣接するエッジと曲率連続性をもって形状が表現されるますが、[エッジ/頂点]を、[クリース(折り目)]のある[エッジ/頂点]に変更することで連続性を解除します。

[SubD]に関するコマンドは、基本の[SubDサーフェス]を作成する[3DFace]コマンド、基本(Primitive)形状を分割数を指定して作成する[SubDlane]、[SubDSphere]、[SubD]コマンド等、Rhinoの[スイープ]や[ロフト]に相当するコマンド[SubDSweep1]、[SubDSweep2]、[SubDLoft]等があります。

[SubDフェイス(面)]、[SubDエッジ]、[SubD頂点]は、それらのループを追加/削除することができます。
[SubDフェイス(面)]は、さらに細分化することが可能です。
1つのペアのフェイスは[Bridge]コマンドで、1つのペアのエッジは、[Stitch]コマンドで滑らかに接続する事ができます。

[QuadRemesh]はRhino7で新たに追加されたコマンドです。
Rhino 6 以前のメッシュは、ポリサーフェスの接合部や、縮退のある場所において三角メッシュで表現されていましたが、[QuadRemesh]コマンドは、既存の[サーフェス]、[メッシュ]、[SubD]から最適化されたトポロジーで、四角メッシュを生成します。
またこのオプションにおいて、四角メッシュからさらに、直接[SubD]に変換することも可能です。
2021年3月時点の、Rhino[Version 7.4.21078.1001]では、[SubD]に関連する機能は修正・拡張の余地があるものと思われますが、十分、強力なモデリングツールであることは間違いありません。

1.SubDサーフェスの基本と選択

今までのNURBSサーフェスでは、サーフェスの数と空間的に閉じているかどうかで[オープンサーフェス]、[閉じたサーフェス]、[オープンポリサーフェス]、[閉じたポリサーフェス]という分類がありましたが、[SubD]では構成要素の数に関わらず[SubD]として認識され、[オープンSubD]か[閉じたSubD]かの分類となります。
[SubD]は3本以上のエッジから1つの[SubDサーフェス]を最小単位として生成します。
Rhinoの今までのNURBSサーフェスにおいて、非トリムサーフェスは2~4つのエッジを境界値として表現され、それ以上のエッジを持つ形状はトリムサーフェスとして表現されています。
すなわち、4辺の非トリムサーフェスを母面とし、トリムエッジによりトリムされて表現されたサーフェスです。[SubDサーフェス]のエッジの数は、3つ以上であれば制限はありません。このオブジェクトは[3DFace]コマンドで生成することができます。
(注;メニューでは、SubD>プリミティブ>3D平面)

1つの[SubD]で表現される形状は、エッジに内接したスムースな形状になりますが、
各[エッジ/頂点]に、[クリース(折り目)]を与えると、頂点を直線で補完した形状になります。
[SubD]同士は、[Stitch]コマンドで接続することができます。
さらに、[3DFace]コマンドのオプションで、エッジを指定し、新たな[SubD]を追加することができます。
(注;メニューでは、SubD>プリミティブ>面をアペンド)
また、[InsertPoint]コマンドで、SubDオブジェクトのエッジの任意の点を補完するエッジを新たに生成して、SubDオブジェクトを分割することが可能です。

[SubD]は、[エッジ/頂点]に[クリース]を与えない限り、隣り合う[SubDサーフェス]とは、曲率連続を保ったスムースな形状となります。
また[SubD]は、[ToNURBS]コマンドによって、通常のRhinoのNURBSサーフェスに変換することができます。

[SubD]を構成するオブジェクトは、以下の3種類になり、その選択方法は3種類の方法があります。
・SubDフェイス(面)
・SubD エッジ
・SubD 頂点

1)CTRL-Shiftキーで選択する方法
SubDオブジェクトを選択する際に、[CTRL]キーと[Shift]キーを同時に押すと上記のSubDに関連したオブジェクトだけを選択することができます

また隣や、離れた[SubD Face]、[SubD Edges]、[SubD Point]を追加選択してダブルクリックをすることでループ選択することが可能です。

Macの場合、[Command]キーと[Shift]キーを同時に押します。
※後述する選択フィルターの”無効”にチェックをいれ、”サブオブジェクト”のチェックを外した状態で操作する必要があります。

2)選択フィルターを使用する。
[選択フィルター]を表示して、ここで必要なオブジェクトだけを選択するようにしておくと[CTRL]キーと[Shift]キーを使用することなく、Rhinoの通常のオブジェクト選択ができます。
       

3)F5キー
F5キーを押すことにより、2)の[選択フィルター]の4つの基本選択を順番にトグルして表示することができます。
4つの基本選択とは、[点/頂点] のみ、[曲線/エッジ] のみ、[サーフェス/面]のみ、全て選択です。
(注F5キーには、初期値で、”!_SelectionFilter Toggle”というコマンドが割り当てられています。)

Macの場合、F5キーに”SelectionFilterToggle”コマンドの割り当てはされていません。選択フィルターのチェックで切り替えます。

2. [SubD]のプリミティブオブジェクト

[SubD]のプリミティブな形状を生成するコマンドとして、[SubDSphere]、[SubDCylinder]等のコマンドがあります。これを生成する際、形状によって細分化して表現する[SubD]の数の指定や、ソリッドの可否、三角エッジ等の指定がでます。

3. [SubD]の細分化と、簡単な編集

[SubDPlane]コマンドで、分割数を指定して、平面を生成することができます。
この[SubDサーフェス]に対して、Z方向に一つの[SubDフェイス(面)]を選択して移動すると、全体が滑らかに変化するのが分かります。

[SubD]は [クリース]を追加しない限り、隣り合う[フェイス(面)]と曲率連続でスムースにつながり、その影響は2つ隣の[フェイス(面)]にまで影響します。
[ExtrudeSubD]コマンドは、指定した[SubDフェイス(面)]に対して、新たな[SubDフェイス(面)]を押し出して生成します。その結果、[SubDフェイス(面)]を移動した[SubD]に比べ、形状の変化は局所的になります。
このように編集した[SubD]を[ToNURBS]コマンドで、NURBSサーフェスに変換することが可能です。

最小単位の[SubDサーフェス]は、[ToNURBS]で変換すると、3次で、UV方向にそれぞれ、7つの制御点を持つ[NURBSサーフェス]に変換されます。隣り合う[SubD]が複数に及ぶ場合は、制御点の数は増加します。[NURBS]に変換された時点のサーフェスは[クリース]が与えられていない限り、隣同士、曲率連続が保たれます。

4.SweepとReflect

[SubD]のうち、Rhinoの[Sweep1]、[Sweep2]コマンドのように生成することができるものがあります。これらのコマンドは、生成する際にレールの方向と、断面カーブの方向の[SubD]のセグメントの数を指定します。
また、[SubD]には[Reflect]というコマンドが機能し、[SubDオブジェクト]を対称形状になるようにモデリングすることができます。
[Reflect]コマンドは、2021年3月時点の、[Version 7.4.21078.1001]ではメニューには存在しません。
アイコンとして、[SubDオブジェクトを反転]と[SubDから反転の対称を取り除く]が存在し、それぞれのアイコンに下記のコマンドが割り当てられています。
[SubDオブジェクトを反転] [! _Reflect]
[SubDから反転の対称を取り除く] [! _Reflect _Pause _RemoveExistingReflectSymmetry]

以下の図は、[SubDSweep2]コマンドで作成した[SubDオブジェクト]を反転して、[SubDエッジ]や[SubDポイント]の位置を編集したモデリングした例です。

5.MultiPipe

[MultiPipe]コマンドは、複数の分岐を持つRhinoのカーブに対してSubDを生成することが可能です。

6.BridgeとStitch

[SubD]は、[Bridge]と[Stitch]コマンドによって、1つのペアの[SubDフェイス(面)]、または[SunDエッジ]を滑らかに補間します。
[Bridge]コマンドは、補間する際にSubDオブジェクトの数を指定することができます。
[Stitch]コマンドは、指定したエッジの[SunDエッジ]のペアの位置を一致させます。

7.[QuadRemesh]

従来の[Mesh]コマンドは、ポリサーフェスのエッジ部分や、球の頂点部分では、三角メッシュに変換していましたが、[QuadRemesh]コマンドは、既存のサーフェス、メッシュ、及びSubDからを四角メッシュに変換します。
[QuadRemesh]コマンドは、変換時にSubDオブジェクトに変換するオプションもあります。
この例では、三角メッシュで表現された、“Q”の文字を、[QuadRemesh]コマンドで、四角メッシュを経て、[SubD]に変換し、さらにエッジを削除し、フェイス(面)、エッジ、ポイントを移動して形状を変形した例です。

8.Grasshopperとの連携

Grasshopperにも、[SubD]関連のコンポーネントが追加されています。
下図の例は、唐草模様を立体で作成するため、いくつかの基本形状を[SubD]で作成し、それをカーブにフロー変形する例です。
実際に、Rhinoのみで行うと下記のような作業が必要になります。
1)変形するオブジェクトの、厚みや幅をRhinoで都度、編集します。
2) [SubD]の構成要素が少ない場合、変形したときに参照カーブに形状が追従しません。
 その場合、[SubD]の構成要素のエッジ等を追加する必要があります。
これらを、全ての参照線にあてはめてフロー変形を行うのは結構な作業量になります。

そこで、上記の作業を短時間で処理できるように簡単なGrasshopperのアルゴリズムを作成してみます。
まず、変形する基本の[SubD]をX、Z方向に任意の値でスケールできるようにしておきます。
次に、変形後に形状が参照線に追従出来ないケースでは、一度[SubD]からメッシュに変換しその密度を調整できるようにしておき、再度メッシュから[SubD]に変形します。