🔖

④[生成AI][ChatGPT][Blernder]Blernder MCPを使わずpythonスクリプトを生成する。

に公開

第1回 [環境構築]Blender MCPのはじめかた。(Blender MCP x Claude Desktop)
第2回 [環境構築]Blender MCPのはじめかた。(Blender MCP x Github Copilot)
第3回 [環境構築]Blender MCPのはじめかた。(Blender MCP x Cursor)
第4回 Blernder MCPを使わずpythonスクリプトを生成する。
第5回 [環境構築]VSCodeでBlernder5.0のpythonスクリプトを実行する。
第6回 ChatGPTでPythonスクリプト生成→アルファベットアニメ生成をやってみた。

Blernder MCP ってすごいやんって思って始めたんだけど、なんかそんなでもない気がしてきた。ChatGPTに質問するとpythonコード出力してくれて。なんだ ClaudeとかGithub Copilotとかいらんやん。って気づいてしまった。

Abstract

ChatGPTで Blender pythonスクリプトコードを作ってもらう方法

必要なもの

ChatGPTアカウント
Blender
Python 3.10~
VSCode
※ChatGPTアカウントは,Googleアカウントを持ってると簡単です。
※VSCodeのインストール方法は、いろんなサイトに書いてくれてるのでここでは割愛。

手順概要

  1. Blenderのインストール
  2. Python3.10のインストール
  3. ChatGPTにログイン
    3. VSCodeのインストール
    ※VSCodeはただの気休め。VSCodeで作ってもBlender pythonは実行できないし。

1.Blenderのインストール

Blernder何はともあれ3DCGを扱うので、Blenderをインストールします。
ココからインストーラをダウンロード。

特段迷うことなくインストール完了するかと。

2. Python3.10のインストール

Python3.10をインストールします。全然難しくないです。下記から"python-3.13.9-amd64.exe"をダウンロード→インストールするだけですね。迷うこともないかと。python-3.13.9とバージョンが異なりますが、Python3.10より新しければ何も問題ないです。

3. ChatGPTにログイン

ココからログインしてね。

ChatGPTにBlenderのpythonスクリプトをお願いする

アルファベット3文字TKSを使って起承転結の展開のわかる物語性のある15秒程度の3DCGアニメーションをBlenerで実行するpythonスクリプトを作ってほしいっす。

で、出てきたコードがこれ。
これをBlenderのpythonスクリプトで実行すると

import bpy
import random
import math

# -----------------------------------------------------------
# ユーティリティ
# -----------------------------------------------------------
def safe_active_object():
    return bpy.context.view_layer.objects.active

# -----------------------------------------------------------
# 初期化:シーン内の全部を削除
# -----------------------------------------------------------
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)

# -----------------------------------------------------------
# 1. テキスト作成
# -----------------------------------------------------------
bpy.ops.object.text_add(enter_editmode=False, location=(0, 0, 0))
txt = safe_active_object()
txt.data.body = "GEC"
txt.name = "GEC_Text"

# 高さ・フォント設定(必要なら)
txt.data.extrude = 0.15
txt.data.bevel_depth = 0.02

# -----------------------------------------------------------
# 2. メッシュ化
# -----------------------------------------------------------
bpy.ops.object.convert(target='MESH')
mesh_obj = safe_active_object()

# -----------------------------------------------------------
# 3. 文字を破片ごとに分離
# -----------------------------------------------------------
bpy.ops.object.editmode_toggle()
bpy.ops.mesh.separate(type='LOOSE')
bpy.ops.object.editmode_toggle()

pieces = [obj for obj in bpy.context.scene.objects if obj.type == 'MESH']
print(f"Created {len(pieces)} mesh pieces.")

# -----------------------------------------------------------
# 4. 全破片にランダム位置を設定(開始地点)
# -----------------------------------------------------------
start_frame = 1
end_frame = 80

for i, p in enumerate(pieces):

    bpy.context.view_layer.objects.active = p
    p.select_set(True)

    # ランダム初期位置・回転
    p.location = (
        random.uniform(-5, 5),
        random.uniform(-5, 5),
        random.uniform(3, 10)
    )
    p.rotation_euler = (
        random.uniform(0, math.pi * 2),
        random.uniform(0, math.pi * 2),
        random.uniform(0, math.pi * 2)
    )

    # 開始位置でキーフレーム
    p.keyframe_insert(data_path="location", frame=start_frame)
    p.keyframe_insert(data_path="rotation_euler", frame=start_frame)

# -----------------------------------------------------------
# 5. 終了位置(元のロゴ位置)へ移動アニメーション
# -----------------------------------------------------------
for p in pieces:
    bpy.context.view_layer.objects.active = p
    p.select_set(True)

    # 終了位置:中央へ集約
    p.location = p.location = (0, 0, 0)
    p.rotation_euler = (0, 0, 0)

    p.keyframe_insert(data_path="location", frame=end_frame)
    p.keyframe_insert(data_path="rotation_euler", frame=end_frame)

print("Shatter → Gather animation created successfully!")

出来た!!
なんか起承転結ってお願いしたのに、"起"しか作ってくれてないけど、まーいいや。

これで、ちょっとしたアニメーションを作れそう。

以上です。
お役に立ちますように。。。

Discussion