はじめに
MCPについてあまりにもXに情報が流れてくるので、キャッチアップがてらMCPを使って何か遊べないかなと思い、Blender MCPを使った簡単な3Dモデルを作成してみました。
PythonとBlenderを組み合わせたワークフローに興味を持っている方や、そもそもMCPで何ができるのかよくわからないけど視覚的に操作できるものならちょっと触って遊んでみようかなという方は、ぜひ参考にしてみてください。設定から最初の3Dモデル作成まで30分もあれば充分にいけると思います。
この記事を通して私が試したVisual Studio Code (VSCode) から直接Blenderを操作できる「Model Context Protocol (MCP)」の設定方法と使い方、作ってみた3Dモデルについて順を追って紹介出来ればと思います。
また、今回使用した「blender-mcp」は、VSCodeとBlenderを連携させるための実装で、Githubの"Ahuja/blender-mcp"リポジトリを参考にしています。ただ"Ahuja/blender-mcp"リポジトリを含めVscodeを使用した実装に関する情報は調べてもヒットしなかったため、自分で試して見ようと思い今回の発信に至りました。
※ちなみにおまけで、Cursorでの設定方法についても書いています。
※MCPを使えば個人で少し遊ぶレベルだとBlender本体を操作することはほとんどないのでBlenderの説明やその使い方の解説などはしないのでご容赦ください。
MCPとは?
MCPについては巷にたくさんの分かりやすい記事が出ているのでここではあまり説明しませんが、Model Context Protocol (MCP) は、AIとソフトウェア間でやり取りするためにコードを送受信するためのハブみたいなイメージです。
環境構築
1. 必要なソフトウェアの準備
- Blender
- Visual Studio Code
- CursorでもOK(ただ今回はVScodeでの使用がメインです)
2. Blender側の設定
2.1. Blender MCPのaddon.pyファイルのダウンロード
GitHub(Ahuja/blender-mcp)からaddon.pyファイルをローカルにダウンロード
2.2. Blenderを起動しアドオンを設定
2.3. 設定の確認
3. VSCodeの設定
3.1. uvのセットアップ(Cursorでも共通)
-
Windowsの場合はPowerShellを開き、uvパッケージマネージャーをインストール
# Windowsの場合 powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# Macの場合 $ curl -LsSf https://astral.sh/uv/install.sh | sh
-
uvパッケージマネージャーをPATHに追加
set Path=C:\Users\nntra\.local\bin;%Path%
-
念のため、以下も実行
pip install uv
3.2. VSCodeプロジェクトの作成
- 作業フォルダを作成(なんでもいいですが私は"blender-craft"といフォルダを作成しました)
- VSCodeでこのフォルダをワークスペースとして開く
- .vscodeフォルダを作成し、その中にmcp.jsonファイルを作成
- .vscode\mcp.jsonの内容(.vscode\mcp.jsonへのコピペ用)
{ "servers": { "blender": { "command": "uvx", "args": ["blender-mcp"] } } }
4. おまけ(Cursorを使う場合)
- 作業フォルダを作成(なんでもいいですが私はVScodeと同じ"blender-craft"フォルダを使いました)
- Cursorでこのフォルダをワークスペースとして開く
- .cursorフォルダを作成し、その中にmcp.jsonファイルを作成
- .cursor\mcp.jsonの内容(.cursor\mcp.jsonへのコピペ用)
{ "mcpServers": { "blender": { "command": "cmd", "args": [ "/c", "uvx", "blender-mcp" ] } } }
Blenderとの接続
1. VSCode(またはCursor)でMCPサーバーを起動
VSCodeの場合
Cursorの場合
2. Blender側で接続を確立させる
-
Blenderの3DビューポートでNキーを押してサイドパネルを表示
-
「BlenderMCP」タブをクリック
AIのエージェントモードを使ってBlenderで3Dモデルを作成
VSCode(またはCursor)とBlenderの接続が成功したらAIのエージェントモード(私はVScodeではGitHub Copilotのエージェントモードを主に使用)を活用することで、チャット感覚で自然言語で指示すればBlenderでオブジェクトを生成できます!
GitHub Copilotの設定(参考:VScode用)
自然言語のみで指示して作成できた3Dモデル
ビルと青い屋根の家はCursorから、それ以外はVScodeから指示をMCPを起動してチャットのやり取りのみで作成しました。Blenderは一切いじっていないです。
エージェントモードに設定したAIが私の指示をPythonコードに変換し、MCPを通じてBlenderに送信してくれています。
Pythonコードの実行方法(これは興味のある方だけでいいので飛ばしてOKです!)
AIとのチャットでの指示以外にも、直接Pythonコードを書いて実行することもできます。
新しいPythonファイル(なんでもいいですがここでは"first_script.py")を作成し、以下のコードを入力しました。
import bpy
# 既存のオブジェクトをクリア(任意)
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
# キューブを作成
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 1))
cube = bpy.context.active_object
cube.name = "MyCube"
# マテリアルを作成して適用
mat = bpy.data.materials.new(name="BlueMaterial")
mat.use_nodes = True
principled = mat.node_tree.nodes.get('Principled BSDF')
principled.inputs[0].default_value = (0.0, 0.3, 0.8, 1.0) # 青色
# マテリアルをオブジェクトに適用
if len(cube.data.materials) == 0:
cube.data.materials.append(mat)
else:
cube.data.materials[0] = mat
# ビューポートの表示モードをマテリアルに変更
for area in bpy.context.screen.areas:
if area.type == 'VIEW_3D':
for space in area.spaces:
if space.type == 'VIEW_3D':
space.shading.type = 'MATERIAL'
print("青いキューブを作成しました!")
スクリプトの実行については以下の方法で実施してみてください。
- ファイル全体を選択し、Shift+Enterを押す
- コードの一部を選択してShift+Enterを押す
- 右クリックメニューから「MCP: Run Selection」を選択する
これでコードが実行されると、Blenderにそのコマンドが送信されてオブジェクトを作成できます。
エディター側で通常のターミナルからPythonを直接実行しようとすると「ModuleNotFoundError: No module named 'bpy'」というエラーが発生するので必ずMCPを経由して実行するようにしてください。
まとめ
VSCode(Cursorも可)とBlenderのMCPサーバーを使って、ほぼBlenderをいじることなく簡単な3Dモデルのオブジェクトを作成することができました。
全体的な感想としては、抽象的な指示をすると、例えば「家を作ってください」みたいな指示だとただシンプルな板を重ね合わせただけのようなものしか出力してくれませんでした。
以下のように少し具体的に書くことで精度が高くなっていきました。
1軒目の家(House1)
- 暖色系のカラースキームで作成(ベージュの壁、赤茶色の屋根)
- 位置:ビルから東側に約15m、北側に約10m離れた場所
- 8m×6mの広さで、1階と2階、三角屋根がある
- 前面にはポーチがあり、周囲には芝生の庭がある
- ドア、窓、煙突なども追加してほしい
また、私は指示が上手くできなかったのですが、人間のような細かいオブジェクトも作成にはテクニックが必要そうです。
トータル的にみてMCPがどのようなものかを試す分には視覚的に見えるのでとてもよい勉強ツールだと思いました。また、技術のキャッチアップをしながらも十分遊べるのでその点でもよかったのかなと思います。
ここまで読んでいただきありがとうございました。