Intro to Computational Design

2026 | Computational design | Rhino / Grasshopper / Python

0. 準備

0.1 Rhinoceros

0.2 Autodesk Fusion


1. 概要

1.1 ゴール

1.2 概念整理

フォーカスするポイントの異なる様々な言葉があります。⚠️使う人や文脈によって意味が変わります。

用語 定義
CAD (Computer Aided Design) コンピューターを用いた設計・デザイン手法全般。
Computational Design 計算能力や数理的アプローチをデザインプロセスに統合する手法の総称。
Algorithmic Design 論理的・数理的手順(プロセス)を組み立てることに着目。
Procedural Design 大体同じ。
Parametric Design (アルゴリズムを組んだ上で)パラメーター操作で形状を制御することに着目。
Generative Design 制約条件とゴール(荷重、重量、製造要件等)を設定し、アルゴリズムやAIに最適解を自律探索・生成させる手法。

Parametric Architecture

  • 一般的には… 単なる「Grasshopper等を用いた複雑・有機的な建築造形」
  • 「日照、風向、構造負荷等の多角的環境パラメーターを統合した最適化プロセス」と主張する人もいる
  • ザハ・ハディド・アーキテクツのパトリック・シューマッハ氏が21世紀の建築様式「Parametricism」として提唱(参考:A simple guide to parametricism

Generative Design

1.3 モデリングアプローチ(Rhinoの例)


2. Grasshopperの構造と概念

2.1 コア概念

2.2 主要操作の要点

  1. 起動・ファイル: コマンド Grasshopper / 拡張子 .gh
  2. コンポーネントの呼び出し: メニュータブ選択、またはキャンバスダブルクリックによるキーワード検索(例:Sphere で球体生成、10.0 でスライダー生成、// でパネル生成等)。
  3. ノード操作:
    • 通常ドラッグで接続
    • Shift + ドラッグで複数接続(上書き防止)
    • Ctrl + ドラッグで接続解除
  4. コンポーネントの制御(右クリック):
    • Enabled / Disabled: 処理の有効化/無効化
    • Preview: ビューポートでの描画ON/OFF
    • Bake: ジオメトリのRhinoオブジェクト化
  5. Bake(ベイク):
    • Gh上で操作中のジオメトリは「一時的なプレビュー表示」に過ぎない。
    • Bakeを実行することで、通常のCAD要素として空間に「焼き付け」される。
    • 注意点: Bake後の要素はGh側のパラメーター変更と連動しなくなる。
  6. 端子(入力・出力)の動的制御(ズーム操作):
    • 端子の増減(Merge, Entwine, Python 等):
      • コンポーネントに一定以上近づく(ズームインする)と、端子付近に「+ / 」アイコンが表示される。
      • +」をクリックで接続ポイントを追加、「」で削除が可能。
    • 端子の設定・カスタマイズ(端子を右クリック):
      • データ構造の直接変更(Flatten, Graft, Simplify 等のデータプリセット適用)。
      • 端子名(変数名)の変更や、入力データ型の指定(Type Hinting)。

2.3 データ構造(データツリー)

他プログラミング言語の「多次元配列」「ネストされたリスト」に相当するGh独自の概念です。初めは分かりにくいですが、使っているとなんとなくわかってきます。

Find Component: コンポーネントを Ctrl + Alt を押しながらクリックすると、そのコンポーネントが上部タブのどこにあるかを赤い矢印で視覚的に教えてくれる。

Grasshopper参考:

AIを使った学習:

  • Grasshopperはドキュメントが豊富でコミュニティも活発なため、多くの場合AIに質問することで適切な回答を得ることができます。
  • Grasshopper定義を通常の.ghではなく.ghx形式(XMLベースのプレーンテキスト)で保存すると、AIが解析できるようになります。

3. Rhino Script

3.1 環境の起動と実行手順

Rhino上ではバッチ処理・自動化、Grasshopper上ではノード機能の補完・パラメトリックなデータ処理としてスクリプトを利用します。

3.2 主要ライブラリ

Rhino機能の操作、および外部データ処理を行うための主要ライブラリです。

バイブコーディング:

  • 試行環境(例: Rhino 8 / Python 3)とライブラリ(rhinoscriptsyntax)を指定
  • エラー発生時はエラーメッセージを返しデバッグ

3.3 Rhinoスクリプト環境の構造とアーキテクチャ

ライブラリの階層関係と役割

レイヤー コンポーネント 役割・技術スタック
最上層 (ユーザー記述) スクリプト Python 3 / C#: ユーザーやAIが記述するコード領域。
高レベル処理 rhinoscriptsyntax Pythonラッパー: RhinoCommonを初心者向けに簡易化した関数群。
共通API層 RhinoCommon .NET Core API: Rhinoの全機能にアクセスする公式クロスプラットフォームAPI。
最下層 (コアエンジン) Rhino Kernel C++ ネイティブエンジン: 幾何演算・描画を高速処理するRhino本体。

動作言語と環境

言語 特徴・用途 Rhinoでの位置付け
Python 3 (CPython) AI/LLMとの親和性が極めて高く、外部ライブラリ統合が容易。 現在の推奨標準環境 (Rhino 8〜)
Python 2 (IronPython) 旧Rhino 7までの標準(.NET上で動作するPython実装)。 互換性維持目的の旧環境
C# 高度なプラグイン・カスタムコンポーネント開発用。 開発者向けネイティブ環境
VBScript 旧世代のRhinoScript。 非推奨

3.4 スクリプトデモ例:フラクタルツリー(再帰処理)

再帰関数と乱数を用いた幾何生成デモです。同一ロジックを Grasshopper(動的パラメーター制御)と Rhino単体(直書きワンショット実行)の両方で検証できます。

  1. Grasshopper上での実行手順
    • キャンバスに Python 3 Script コンポーネントを配置。
    • 端子設定(右クリック)
    • コンポーネント内にコードを貼り付け、Inputにスライダーを繋いでライブ操作。
      名前 設定
    Input gen Integer 世代数制限
      angle Float 分岐角
      scale Float 縮小比
    Output Lines Line アウトプット
  2. Rhino単体上での実行手順
    • メニュー → ツール → スクリプト → 編集 でエディタを開き、コードを貼り付けて直接実行。
  3. Pythonコード(Rh/Gh共通)
import rhinoscriptsyntax as rs
import random

# 入力変数の初期化 (Rhino単体実行用)
gen = globals().get('gen', 6)
angle = globals().get('angle', 25.0)
scale = globals().get('scale', 0.8)
seed = globals().get('seed', 42)

random.seed(seed)
Lines = []

# 幹の生成
A, V = [0, 0, 0], [0, 0, 1]
B = rs.PointAdd(A, V)
Lines.append(rs.AddLine(A, B))

# 再帰分岐関数
def Grow(pt, v, s, a, g):
    if g >= gen: return
    v = rs.VectorScale(v, s)
    plane = rs.PlaneFromNormal(pt, v)
    circle = rs.AddCircle(plane, 0.1)
    t = rs.CurveClosestPoint(circle, A)
    rot_axis = rs.VectorCreate(pt, rs.EvaluateCurve(circle, t))

    for sign in [-1, 1]:
        V_next = rs.VectorRotate(v, sign * a + random.uniform(-3, 3), rot_axis)
        pt_next = rs.PointAdd(pt, V_next)
        Lines.append(rs.AddLine(pt, pt_next))
        Grow(pt_next, V_next, s, a, g + 1)

Grow(B, V, scale, angle, 0)

3.5 スクリプトのコマンドボタン化

作成した .py スクリプトをRhinoのコマンドにできます。

  1. 保存: コードを .py 形式でローカル(任意フォルダ)に保存し、ファイルの絶対パスをコピー。
  2. ボタン作成: ツールバーの空白領域で右クリック → 新規ボタン を選択。
  3. マクロ設定: コマンド欄に ! _-RunPythonScript "ファイルの絶対パス" と入力して保存。
    • (注: _- はダイアログをスキップして即時実行させるための記述)

4. モデリングアプローチ比較

項目 手動操作 Grasshopper スクリプト
概要 CLI・マウスによる個別操作 ノード接続(ビジュアル言語) テキストコード(Python/C#)
強み 直感的、事前のロジック設計不要 構造視認性が高い、リアルタイム検証 バッジ処理、ループ/条件分岐
弱み・リスク 大量処理・仕様変更時の工数大 複雑化によるスパゲッティコード 構文・APIの習得コスト
AI(LLM)親和性 極めて低い 低い(グラフ構造生成の難しさ) 極めて高い(コード生成領域)

効率化の思考フレーム: The 5-Step Algorithm (Elon Musk)

Ghやスクリプトで自動化する前に… 「自動化する必要がないことを自動化していないか?」

  1. 要件を疑え: 前提仕様そのものの不必要性を検証する。
  2. プロセスを削除せよ: 不要な工程を破棄する。
  3. 単純化・最適化せよ: 残った工程をシンプルにする。
  4. サイクルタイムを加速させよ: 処理速度を向上させる。
  5. 自動化せよ: 上記を経た上で最終手段として自動化を導入する。

5. MCP(Model Context Protocol)と最新動向

5.1 概要とトレンド変化

5.2 主要ツールの最新動向

ソフト MCPツール 主な特徴・機能 リンク
Rhino Rhino MCP (McNeel公式) GitHubにて公式プラットフォーム開発が進行中。レイヤー操作やスクリプト動的実行ツールを展開。 Rhino MCP Platform
Rhino 3rd party サードパーティ開発者によるMCPサーバープラグイン。プラグインコミュニティFood4RhinoやGitHubなどで公開。 例:rhinomcp (by ccc159)
Grasshopper Raven Grasshopperのグラフ構造(ノード配置・配線)自体をAIに自動生成・最適化させるプラグイン。 Raven
Autodesk Fusion Fusion MCP Anthropicとの共同開発。自然言語指示(パラメーター変更、フィーチャー操作等)でAPIを実行しモデリングを完了。アドイン開発のペアプログラミング用途でも活用。 Fusion MCP
Blender Blender MCP Python APIとの親和性の高さを活かし、オブジェクト配置、マテリアル・ライティング設定まで会話型で自動化するアドオンがコミュニティ主導で急増。 MCP Server

5.3 Rhino MCP のシステム構成・通信フロー

レイヤー 主要コンポーネント 役割と通信プロトコル
クライアント層 AIクライアント (Claude / Cursor / Gemini 等) ユーザーの自然言語指示を受け取り、ツール呼び出し(Tool Call)を生成するUI/エディタ環境。
中継・変換層 MCPサーバー (Python / FastMCP 等のローカルミドルウェア) 標準規格(stdio / JSON-RPC)を解釈し、AIからの要求をCAD専用の命令形式に変換・中継する橋渡し役。
エンドポイント層 Rhinoプラグイン (C# RhinoCommon / Python 常駐リスナー) ローカル通信(TCP Loopback / Socket / 127.0.0.1:10501)でメッセージを受信し、Rhino側で常駐待機する受信用ソケット。
実行層 Rhino / Grasshopper Kernel 受信した命令に基づき、Rhino/Grasshopper内部でスクリプトの動的実行やジオメトリの直接生成・操作を実行。
  1. AIクライアント: ツール仕様(JSON Schema)に基づき、プロンプトを解釈して実行命令を発行。
  2. MCPサーバー: AIのJSON要求とCAD側の通信プロトコルを相互翻訳・中継。
  3. Rhinoプラグイン: 受信した命令をRhinoのメインスレッド上で動的実行し、結果(成功/エラー/状態)を返答。

5.4 課題とインプリケーション