機械系CADとGrasshopperのモデリング手法比較

機械系CADとGrasshopperのモデリング手法比較

はじめに

弊社では3Dモデリングにおいて、RhinocerosおよびそのプラグインであるGrasshopperを主に使用しています。Rhinocerosは履歴(ヒストリー)を保持しないノンヒストリーCADであるため、Solidworksなどの機械系CADのように操作履歴からパラメトリックモデルを構築することはできません。しかしGrasshopperを用いることで、数値や関数を入力して形状を生成・制御できるため、パラメトリックデザインが可能となります。

一方、一般的な機械設計ではSolidworksやCATIA、Creo Parametric、NXなどのヒストリーベースCADが使われています(以降機械系CADと呼びます)。私自身、長年それらを使ってきましたが、Grasshopperを初めて触ったときは正直かなりのカルチャーショックでした。「いつもの操作が全然通じない」。たとえば、ただの直線を描こうとしただけでも手が止まり、「自分はCADを触ったことのない初心者に戻ったのではないか」と感じたほどです。

本記事では、そうした体験をもとに、機械系CADとGrasshopperでパラメトリックモデルを作る上でのモデリング手法の違いを整理し、特に機械系CADユーザーが理解しておくべき視点を紹介します。

機械系CADとGrasshopperの基本的なモデリングの流れ

まず、両者のモデリングの基本プロセスを比較してみます。

  • 機械系CADの場合

    1. フィーチャーの基となるスケッチを平面に描く
    2. そのスケッチを押し出し、スイープ、回転などでフィーチャーを作成
  • Grasshopperの場合

    1. 形状の基となるジオメトリ(線や面など)を作成
    2. そのジオメトリを押し出し、スイープ、回転などでBrep(※)を作成

大きく違うのは(1)の部分です。(2)の「押し出し」や「回転」といった操作は両者で似ていますが、「最初の種」となるジオメトリの作り方が全く異なります。ここが、私を含む多くの機械系CADユーザーが戸惑う最大のポイントだと思います。

file
機械系CADでのモデリングの例

file
Grasshopperでのモデリングの例

※Brepとは3Dモデルにおける形状を表す手法の一つ[1]。機械系CADにおいてサーフェースやソリッドに相当。

「線が描けない」という衝撃

私が最も困ったことは、Grasshopperで線が直接描けないことでした。

機械系CADでのスケッチ操作を分解すると、下記の流れとなります。

  1. スケッチを描く平面を選ぶ
  2. 平面上に線を引き、四角形、円などを大雑把に作成
  3. 線や線を構成する点に寸法や拘束を付与

file
機械系CADで線を書く例

一方、Grasshopperでは「線を引く」という単純な行為が、実は以下のように複数ステップの論理的な操作になります。

  1. 直線の場合

    1. 始点と終点の2つの点をConstruct pointコンポーネント等で作成。Construct pointコンポーネントにはxyz各座標の値を入れる。
    2. 2つの点を用いてLineコンポーネントで直線を作成
  2. 円の場合

    1. 円を描くPlaneを決める(Planeは機械系CADでいう座標軸のようなもの。デフォルトはXYPlane)
    2. CircleコンポーネントにPlaneと半径の値を入れ、PlaneのXY面上に円を作成

file
Grasshopperで線を描く例

上記のように、機械系CADだと"平面上"に大雑把にジオメトリを作成した後に拘束、という流れだったものが、Grasshopperではそもそも平面を作成せず、ジオメトリを作成するための点などの構成要素をあらかじめ作成し(この時点で機械系CADでいう拘束されている状態に相当)、構成要素を用いてジオメトリを作成する、というところに違いがあります。GrasshopperのPlaneは機械系CADの平面ではないこと、1手目で平面を選ばないことに混乱し、機械系CADに慣れていた私は、何をしていいのか全く見当がつきませんでした。機械系CADにも点を作成し、2つの点を結ぶ線を作成する機能はありますが、使う機会がほとんどないことも要因として挙げられます。

※※Grasshopperのコンポーネントとは、プログラムの関数のようなもので、入力した情報に基づいて形状生成などの処理を行うもの。機械系CADのツリーに表示される機能に近い。

「参照をとる」という感覚のすれ違い

線や点を作成する中で、あるエッジを参照し、そのエッジからの距離で点を拘束したい場面は多々あると思います。機械系CADを使用する際は多く使用する機能かと思います。私もこの感覚を持っている中で、同様の操作ができると思っていましたが、ここに大きな壁がありました。

機械系CADで参照をとる場合、

  1. UI上で選択したエッジなどの参照元をスケッチ平面に投影(図では直方体の側面)
  2. 距離拘束等を設定

と数クリックで作成することが可能です。

file

一方、Grasshopperでは上記のようなやり方では簡単にできません。コンポーネントの組合せでできないことはないですが、かなり煩雑になります。いくつかやり方がありますが、同様の方法をやろうとすると、下記が一例となります。

  1. 参照したいCurve(機械系CADのエッジに相当)を特定する。

    • Brepの線の場合は、Deconstruct Brepコンポーネントなどで、Curveリストを抽出し、リストの番号を特定し、List Itemコンポーネントなどで対象のCurveを選択
  2. そのCurveをOffsetコンポーネントまたはMoveコンポーネントなどで拘束したい位置に移動、または、対象のPlanar Surfaceがある場合は、そのsurfaceに投影

  3. 上記Curve上に点を作成し、ジオメトリの構成要素とする。必要であればオフセットした点を作成

上記に一例を出してみましたが、2次元平面状ではなく3次元空間上に構成要素の定義が必要なため、文字で書いてある以上にかなり手間がかかる操作となってしまいます。多くは2次元平面で考える機械系CADのように簡単にはできません。

現実的には無理に平面上に参照を取り直すよりも、新たに定義したい点は、参照したいエッジから、「空間上でどのように定義できるか」(例えば図のように立方体の頂点からのxyz方向の相対距離)を考えて、その定義に適したコンポーネントを使用して点を作成する方が簡単です。機械系CADのスケッチ平面に参照をとることは、Grasshopperでは参照したいCurveをもとに、新たに点などを空間上に定義することになります。

file
Grasshopperで参照をとる例

「穴を開ける」すらも一苦労

次は形状作成に関することです。ようやく立体を作ったあとに穴をあけようとすると、ここにも別の壁がありました。

機械系CADではカット機能などを用いて、平面に開ける穴のスケッチを描き、スケッチ形状で対象物をくりぬくことで、穴をあけることが多いと思います。これらは押し出し機能と同様の操作で作成可能です。

file
機械系CADで穴をあける例

一方、Grasshopperでは直接的にカット機能はなく、機械CADと比べると少し回り道で穴をあける必要があります。大まかな流れは下記です。

  1. カットされる形状を作成
  2. カットしたい形状(穴の場合は円柱など)をカットされる形状に重ねて作成
  3. Solid Differenceコンポーネントでカットされる形状から重なる部分を削除

file
Grasshopperで穴をあける例。図ではわかりにくいが①で直方体と円柱が重なっている。

3の操作は細かく見ると、重複部分の境界線をもとに新たな面を作成し、面をつなぎ合わせて新しい形状を作るものになります[1]。これは機械系CADでも内部ではほぼ同じことが起こっているのですが、ツリー1つで簡単にできてしまうため、このやり方には気づきにくかったです。

操作に差が出る技術的背景

先述した「戸惑いのポイント」がどこから生じるのかを、技術的な観点から整理してみます。結論を言えば、幾何拘束ソルバーの有無に起因します。

幾何拘束ソルバーとは、与えられた点・線・円などの幾何オブジェクトと、距離・角度・接線・平行といった制約条件群に対して、それらを満たす位置や形状を求める仕組みです。コンピューター内部では、寸法や拘束条件を非線形方程式として表し、数値解法により「すべてを同時に満足する配置」を導き出しています。

これはまさに、機械系CADにおけるスケッチ作成や部品のアセンブリと同義であり、多くの機械系CADがこのソルバーを備えているのはそのためです。ユーザーは寸法や拘束を履歴として残しつつ設計を進められ、後から寸法を変更してもモデル全体を一貫して更新できます。

一方でGrasshopperには幾何拘束ソルバーが搭載されていません。その代わりに、ユーザーはコンポーネント同士の接続=データフローを通じてプログラミング的に形状を生成します。言い換えると、入力パラメータを関数に流し込むと、その出力として形状が得られるという仕組みです。機械系CADで「水平拘束」をつけたい場合も、Grasshopperでは「常に水平を維持するようなロジック」を組む必要があります。

Grasshopperの強み

機械系CADはBOM出力や図面生成に加え、CAE・CAM・MBD・PLMとの統合に優れており、量産設計や製造プロセスへの連携に強みを持っています。ここはRhinoceros/Grasshopperが不得手な領域です。

ではGrasshopperの強みは何か。私は大きく以下の二つの点にあると考えています。

  1. パラメトリック探索のしやすさ
    パラメーターを関数に入れることで形状を生成する中で、Grasshopper上ではパラメーターとなるスライダーコンポーネントを左右に動かして値を変えることで、瞬時に形状を変更することができます。これにより様々なバリエーションをスライダー操作で即座に生成・比較することができます。また設定によりパラメーター違いを横並びで確認することも可能です。

  2. 複雑形状の効率的生成
    Grasshopperでは一度作成したデータフローを、複数の対象に適用させることが簡単に可能です。ある関数に複数の引数を入れて同じ動作をさせるような感覚です。例えば線の中点をとるコンポーネントに中点をとりたいCurveリストを入れるだけで、Curveに応じた中点リストが作成されます。

    また、うまく方程式やアルゴリズムを組み立てることで、機械系CADに比べると簡単に自由な形状生成が可能となります。例えば、ラティス構造や、自然界の形態(樹木状フレーム、蜂の巣状セル構造)を模倣した構造の生成など、機械系CADでは手作業で膨大な時間がかかる形状を、短時間でモデル化できます。

こうした特性から、弊社ではGrasshopperをコンセプトデザイン探索や形態最適化に積極的に活用しています。

Grasshopperの詳細については弊社の以前のブログでも紹介していますので、合わせて参照いただくことでより理解が深まるかと思います。

まとめ

上記をまとめると、Grasshopperのモデリングは、下記となります。

  1. ほしい形状をイメージする
  2. その形状の構成要素を「立体→面→線→点」へと分解する
  3. 各要素が空間上でどのように定義されているか見極める
  4. 定義に基づき、構成要素を作成
  5. 作成した構成要素を用いて、「点→線→面→立体」と形状を作成する
  6. 面・立体を組み合わせて最終的な形状を作成する

という流れに整理できます。これはスケッチに拘束を与えるという機械系CADの流れとは根本的に異なる発想です。

両者はどちらが優れているかではなく、得意とする領域が異なるだけです。機械系CADは製造や図面化に強く、Grasshopperは探索型デザインや形態最適化に強い。両者を適切に使い分けることで、設計プロセス全体をより効率的かつ創造的にできると考えています。

おわりに

今回は、機械系CADに慣れていた私がGrasshopperで戸惑った点を例に、Grasshopperでの操作方法を紹介しました。機械系CADユーザーにとってGrasshopperは最初こそ難解に映りますが、その本質を理解すれば強力な設計ツールとなり、機械系CADでは得られない自由度をもたらしてくれます。本記事がこれから挑戦する方の手助けとなり、少しでも学習のハードルを下げるきっかけになれば幸いです。

参考文献

[1] ビギナーのための曲面モデリングセミナー(第4回) https://www.applicraft.com/tips/rhinoceros/series_beginner_4/

Author