跳到主要內容

【2026 最新】GPT-6 Astra Blender 教學:三種連線法做出可重跑 3D 資產

最後更新: ·
GPT-6 Astra Blender 三種控制路徑與可重跑 3D 資產教學首圖

GPT-6 Astra Blender 教學真正該交付的,不是一張「看起來很厲害」的圖,而是一套能接受第二次執行驗收的 3D 資產。如果 Agent 最後只說「完成了」,卻沒有留下 .blend、Python 腳本、turntable render 與物件清單,你拿到的只是一次性展示,連最低可稽核交付都還不到。

OpenAI 公開的 Blender 案例確實很亮眼,但它並不是「貼一段 Prompt 就必然得到廣告品質」的證明。這篇會用同一個低多邊形機器人任務,比較背景 CLI、Blender 內即時 Python 與官方 Blender Lab MCP 三條控制路徑;它們不是三種建模演算法,最後都仍是讓 Blender 執行 bpy,差別在互動方式、狀態與權限邊界。

讀完後,你會有一份固定規格、一段能交給 Codex 的完整工作指令、可檢查的 Blender Python 收尾,以及逐階段驗收表。若你還不確定 Chat、Work、Codex 與 API 的資格差異,先看 GPT-6 Astra 四入口教學

本文的兩層驗收公式:最低可稽核交付 = .blend + 生成腳本 + render + 物件清單;功能上可重跑 = 前述四件 + 鎖定版本、命令、Prompt、種子與素材 + 乾淨資料夾第二次執行通過。Prompt 是需求單,腳本是施工圖,render 是驗收照。

先看證據:Astra 的 Blender 展示實際走哪條路?

OpenAI 在 Architectural visualization with Astra 說明,作者在 Codex 使用 Astra,讓它透過 Blender Python API(bpy)建立可編輯場景;它也用 Blender 執行檔的背景模式與 --python 跑腳本,再查看 preview render、修正材質與構圖,並透過 computer use 打開 Blender 檢查。這直接支持「寫腳本 → 執行 → 看 render → 修改」的循環。

但官方也寫明公開 Prompt 為了篇幅與清晰度做過編輯;發布頁的影片是剪輯片段,案例還使用 Poly Haven 的植栽與材質。截至 2026 年 9 月 7 日,這兩個官方頁面沒有附完整腳本、可下載的 .blend、精確環境或乾淨資料夾重跑紀錄。因此它是一個經挑選、反覆迭代的案例,不是成功率測試,更不能推論 MCP 會讓模型品質變高。

先固定任務:不要一開始就挑人臉或完整房子

第一輪請做一個只用 primitives 與 modifiers 的低多邊形機器人。它有頭、身體、左右手腳、兩眼與天線,單位使用公尺,九個零件必須用穩定名稱;材質只准深灰、橘、米白三色。相機輸出 8 張 640×640 turntable PNG,每張相差 45 度。這個任務夠小,可以分辨「連線壞了」與「造型不好」;又有明確輪廓、命名與 render 可驗收。

GPT-6 Astra Blender 背景 CLI、即時 Python 與 MCP 三種控制路徑比較
三條路徑都會回到 bpy;差別是是否保留明確命令、是否依賴目前 UI 狀態,以及工具暴露面有多廣。

最穩定的選擇順序是先 CLI、再即時 Python、最後才 MCP。CLI 先證明「同一份腳本能否從乾淨狀態完成」;畫面不對、需要逐物件查看時,才開 GUI 除錯;只有當你反覆需要 Agent 查詢場景、截圖與修改時,MCP 增加的連線成本才可能值得。切換路徑時不要同時換模型、改規格與重寫幾何,否則成功或失敗都無法歸因。

三種控制路徑怎麼選?先選最少權限的

路線一:背景 CLI,最適合建立可重跑基線

先讓 Codex 只在專案資料夾建立 build_robot.py,你看完修改差異後,再用 Blender 執行它。Blender 5.2 命令列文件說明參數會依順序立即執行,所以錯誤退出設定要放在 --python 前;最後一個 -- 之後才是傳給 Python 的輸出路徑。

"/Applications/Blender.app/Contents/MacOS/Blender" \
  --background \
  --factory-startup \
  --disable-autoexec \
  --offline-mode \
  --python-exit-code 1 \
  --python build_robot.py \
  -- "$PWD/build"

--factory-startup 避免個人 startup file 污染結果,--python-exit-code 1 讓 CLI 腳本例外變成非零 process status。--disable-autoexec 不會限制你明確傳入的 --python--offline-mode 也只是讓遵守設定的 Blender 功能停用連網,不是 egress firewall。執行未信任生成碼仍要靠 VM、container 或作業系統網路規則隔離。Windows 的無介面 EEVEE 另有官方限制;若遇到渲染問題,先改用 GUI 或 Cycles。

路線二:Blender 內即時 Python,適合逐段看畫面

Blender Python quickstart,開一個全新的未儲存檔,切到 Scripting workspace,在 Text Editor 開啟 build_robot.py,按 Run ScriptAlt-P。Text Editor 不會注入 CLI 的 -- /path 參數,因此腳本應把幾何封裝成 main(out_dir):CLI wrapper 從 sys.argv 傳路徑,GUI wrapper 則明寫一個可丟棄的輸出資料夾。確認可用的指令都要回寫到共同 builder。

這條路的代價是「狀態會黏住」:目前選取物件、模式、外掛與上一次執行結果都可能影響下一輪。每一階段先另存 checkpoint,並讓腳本在偵測到已開啟正式 .blend 時停止。想理解為什麼 Agent 需要明確工具、狀態與回復點,可延伸閱讀 AI Agent Harness 是什麼

路線三:Blender Lab MCP,適合查場景與互動修正

官方 Blender Lab MCP不是 Blender 內建功能;它需要 Blender 5.1 以上、Blender add-on、MCP server 與支援 MCP 的客戶端。資料路徑是「Codex ⇄ stdio server ⇄ 本機 TCP socket ⇄ Blender add-on」,而且仍會執行 bpy。官方 server 能列物件、看截圖、查 API、render,甚至另開背景 Blender;這正說明 MCP 是交通層,不是更高品質的建模器。

uv --version
git clone https://projects.blender.org/lab/blender_mcp.git
git -C blender_mcp checkout 4309a39646e644261624bfcd2bca669b343b7621
codex mcp add blender -- \
  uv --directory /ABS/PATH/blender_mcp/mcp run blender-mcp
codex mcp list

這是把 2026 年 9 月 7 日查核的官方 source commit,接到 Codex stdio MCP;先以 uv --version確認已安裝 uv,使用前仍要查看官方是否有新版安全修正。把路徑換成絕對路徑,在 Blender 的 Preferences → System 開啟 Online Access,從 Blender Lab 頁面安裝、啟用 add-on,再到 Preferences → Add-ons → Blender MCP 的 add-on preferences 確認 server 狀態;沒有啟動就按 Start。codex mcp list只證明客戶端有登記,不能證明 Blender-side socket 已連上。截至同一查核日,直接輸入 uvx blender-mcp會解析到同名的社群 PyPI 專案,而不是這個 Blender Lab source checkout。

MCP 安全閘門:Blender 官方明確警告,這個 server 會在沒有資料保護 guard 的情況下執行 LLM 生成程式碼,可能刪除或傳出資料。請只在 VM、專用帳號或沒有敏感資料的機器上運行,socket 維持 localhost,不放金鑰,不開正式專案;每一次允許生成程式碼的 tool call 都要先看內容再批准,因為單次呼叫內就可能寫檔、export、刪除或傳出資料。官方的 weak sandbox 不是安全邊界。

完整走一次:把 Prompt 改成可驗收的工作合約

GPT-6 Astra Blender 可重跑 3D 資產的六項檔案交付結構
四個主要檔案是最低可稽核交付;環境、命令、Prompt、素材與第二次執行紀錄才把它提升為功能上可重跑。

在空白專案資料夾開 Codex,選到 GPT-6 Astra 後貼下面的工作合約。若帳號還沒 rollout、CLI 低於 OpenAI 要求的 0.153.0,先更新或改用目前可用模型;不要把「模型選不到」混成 Blender 連線錯誤。

先把這份逐字規格存成 scene_spec.md,再建立 build_robot.py;先不要執行 Blender。
目標:只用 Blender 5.2 內建 primitives、bpy 與三個程序式材質,
做一個 9 零件低多邊形機器人。名稱固定為 GEO_body、GEO_head、
GEO_arm_L/R、GEO_leg_L/R、GEO_eye_L/R、GEO_antenna;
單位固定 METRIC/METERS,材質只用深灰、橘、米白。

腳本必須:
1. 把建模封裝為 main(out_dir),CLI 與 GUI 各用小 wrapper 傳入路徑;
   拒絕覆寫已開啟的正式 .blend,輸出只進入指定資料夾。
2. 建立相機、兩盞燈與地板,使用 EEVEE,640×640。
3. 儲存 robot.blend;每 45 度輸出 turntable_01.png 到 _08.png。
4. 輸出 objects.json:Blender 完整版本/build、render engine、解析度、
   每個物件的名稱、類型、父物件、transform、尺寸、材質、modifier、mesh counts,
   以及未打包的外部檔案清單。
5. 檢查 save/render operator 回傳 FINISHED;任一失敗就 raise exception。
   CLI 要變成非零 process status;GUI/MCP 要回報 exception/tool error。
6. 不下載素材、不連網、不讀輸出資料夾以外的資料。
7. 建立 run.log,記錄環境、版本、完整命令、成功/錯誤訊號與重試。

完成後只回報修改差異、精確執行命令、預期檔案樹與已知限制;
不要宣稱渲染成功,除非對應路徑的成功/錯誤訊號、8 張 PNG 與 JSON 都通過。

檢查 Agent 產生的檔案時,至少要看到以下收尾。save_as_mainfile負責寫 .blendrender(write_still=True)才會把目前 scene.render.filepath 寫成圖片。物件 JSON 是本文自訂的交付格式,不是 Blender 官方標準。

save_status = bpy.ops.wm.save_as_mainfile(
    filepath=str(out / "robot.blend"), compress=True
)
if "FINISHED" not in save_status:
    raise RuntimeError(f"Save failed: {save_status}")

for index in range(8):
    turntable.rotation_euler.z = math.radians(index * 45)
    scene.render.filepath = str(renders / f"turntable_{index + 1:02d}.png")
    status = bpy.ops.render.render(write_still=True)
    if "FINISHED" not in status:
        raise RuntimeError(f"Render failed: {status}")

turntable.rotation_euler.z = 0
bpy.context.view_layer.update()

manifest = {
    "blender_version": bpy.app.version_string,
    "blender_build_hash": (
        bpy.app.build_hash.decode() if isinstance(bpy.app.build_hash, bytes)
        else str(bpy.app.build_hash)
    ),
    "render": {
        "engine": scene.render.engine,
        "resolution": [
            scene.render.resolution_x,
            scene.render.resolution_y,
            scene.render.resolution_percentage,
        ],
        "film_transparent": scene.render.film_transparent,
        "view_transform": scene.view_settings.view_transform,
        "look": scene.view_settings.look,
        "exposure": scene.view_settings.exposure,
        "gamma": scene.view_settings.gamma,
    },
    "units": {
        "system": scene.unit_settings.system,
        "length_unit": scene.unit_settings.length_unit,
        "scale_length": scene.unit_settings.scale_length,
    },
    "unpacked_external_files": sorted(
        bpy.utils.blend_paths(absolute=False, packed=False, local=False)
    ),
    "objects": [
        {
            "name": obj.name,
            "type": obj.type,
            "parent": obj.parent.name if obj.parent else None,
            "matrix_world": [
                [round(value, 6) for value in row] for row in obj.matrix_world
            ],
            "dimensions": [round(v, 3) for v in obj.dimensions],
            "materials": [s.material.name for s in obj.material_slots if s.material],
            "modifiers": [m.type for m in obj.modifiers],
            "vertices": len(obj.data.vertices) if obj.type == "MESH" else None,
            "polygons": len(obj.data.polygons) if obj.type == "MESH" else None,
            "camera": {
                "lens": obj.data.lens,
                "clip_start": obj.data.clip_start,
                "clip_end": obj.data.clip_end,
            } if obj.type == "CAMERA" else None,
            "light": {
                "light_type": obj.data.type,
                "energy": obj.data.energy,
                "color": [round(v, 6) for v in obj.data.color],
            } if obj.type == "LIGHT" else None,
        }
        for obj in sorted(scene.objects, key=lambda item: item.name)
    ],
}
(out / "objects.json").write_text(
    json.dumps(manifest, ensure_ascii=False, indent=2, sort_keys=True) + "\n",
    encoding="utf-8",
)

執行完不要先看 Agent 的摘要。CLI 看 process status;Text Editor 看是否無 exception 並檢查檔案;MCP 看 tool success/error,再檢查實際檔案。應有 scene_spec.mdbuild_robot.pyrobot.blendobjects.jsonrun.log,以及 renders/turntable_01.pngturntable_08.png。第二次執行要比對 manifest 中的 transform、mesh counts、材質、相機 lens/clipping、燈光 type/energy/color、單位與通用 render/色彩設定;不同 GPU、驅動、Blender patch 或 denoiser 仍可能讓像素不同。

run.log 至少記錄作業系統、Blender 完整版本/build、Codex 版本、模型、reasoning effort、逐字 Prompt、精確命令、隨機種子(本例不用隨機時也寫 none)、開始與結束時間、各路徑的成功/錯誤訊號、重試與 stderr。若加入外部貼圖,再記素材網址、授權、檔名與 SHA-256;如果未打包外部檔案清單不是空的,就不能宣稱證據包自給自足。

本文的執行邊界:文章製作環境沒有安裝 Blender,因此範例只完成 Python 語法檢查與 Blender 5.2 API 對照,沒有把圖片寫成「AlphaLab 已完成的成果」。你本機的乾淨資料夾第二次執行,才是這份 GPT-6 Astra Blender 教學真正的阻擋式驗收。

品質不要一次追:用五道閘門找出崩壞位置

GPT-6 Astra Blender 從 primitives、modifiers、材質到 render 與 rig 的五道品質閘門
每一關只增加一種複雜度並保留 checkpoint;上一關不過,就不要靠更長 Prompt 掩蓋。
  1. Primitives/輪廓:先驗收九個名稱、左右對稱、尺寸與相機 framing。輪廓不對就改比例,不准先加貼圖。
  2. Modifiers/接觸:再檢查 bevel、mirror、物件穿插、手腳是否像真的連在身體上;存成 checkpoint-02.blend
  3. 材質:確認每個 mesh 都有指定材質,沒有未授權外部貼圖,也沒有把 viewport 顏色誤當 render 材質。
  4. 燈光、相機、render:先出低解析 preview;8 個角度不能裁頭、裁腳或長時間只看到背面。將失敗與修正寫入 run log,做法可參考 AI Agent 可觀測性
  5. Rig/動畫:只有前四關穩定才加骨架、權重與動作。這會新增拓樸、關節變形與控制器問題,應當成另一個里程碑,不要塞進第一個 Prompt。

這種「確定性核心、機率性邊緣」的分工很重要:檔名、物件名稱、數量與輸出格式用程式斷言;造型好不好再交給人看。若你想把這個原則套到更多 Agent 任務,可讀 確定性核心與機率性邊緣

為什麼多下 5 次高 effort Prompt,仍不保證做出 hero-quality 人物?

低多邊形機器人、室內硬表面與重複幾何很適合程序式建立,因為比例、座標與規則能寫成數字。寫實人臉、肌肉、衣料摺痕、乾淨 retopology、UV、毛髮與關節變形則需要密集視覺判斷與人工雕模。增加 reasoning effort 可能讓規劃更完整,卻不會自動補上參考圖、專業拓樸與藝術指導。

因此,OpenAI 的建築案例與 Simon Willison 的 pelican-on-a-bicycle 流程值得學的是「腳本、render、視覺批評、再修改」循環,不是把成品品質歸因給某個神奇連線。若目標真的是 hero asset,應把 Agent 用在 blockout、命名、批次檢查與 render automation,讓 3D artist 接手 sculpt、retopo、UV、rig 與最後 art direction。

GPT-6 Astra Blender 教學常見問題

1. 一定要用 MCP 才能控制 Blender 嗎?

不用。OpenAI 案例明確公開的是 bpy 加背景 --python,CLI 也是權限較容易看清楚的起點;MCP 主要增加即時查詢與互動。

2. MCP 會讓 3D 品質比較好嗎?

截至 2026 年 9 月 7 日,前述 OpenAI 建築案例與 Blender Lab MCP 文件都沒有公布 Astra 的 CLI/即時 Python/MCP 受控畫質比較。MCP 改變工具交通與回饋速度,品質仍取決於規格、參考、幾何策略、材質、燈光與迭代。

3. Blender 的 live Python 是遠端連線嗎?

Blender 內建的是 Text Editor、Python Console 與啟動時的 --python;它沒有一個通用、內建的遠端 Python attach。遠端橋接必須具名並另外稽核。

4. 儲存 .blend 就代表素材都在裡面嗎?

不一定。外部貼圖、library 與 cache 可能仍指向別處;物件清單應記錄未打包檔案,使用外部素材還要保存網址、版本與授權。

5. 第二次 render 必須像素完全相同嗎?

功能重跑先要求版本、物件 transform/mesh counts/材質、相機、燈光、單位與通用 render 設定一致。硬體、驅動、renderer 與 Blender patch 仍可能造成像素差異;要比圖時應先鎖環境與容許誤差。

6. 為什麼背景模式沒有畫面或直接失敗?

先看非零 exit code、Blender 版本、參數順序與 renderer;Windows 無介面 EEVEE 有平台限制。保留 stdout/stderr,不要只等 Agent 的自然語言摘要。

7. 官方 Blender Lab MCP 可以放在日常主機嗎?

官方建議 VM 或沒有敏感資料的系統。它能執行生成的 Python;「官方」代表來源可確認,不代表有足以隔離檔案與網路的沙盒。

8. 可以把同一份腳本用在三條路嗎?

可以共用同一個 main(out_dir) builder,但入口 wrapper 要適配路徑:CLI 讀 sys.argv,Text Editor 明寫安全輸出目錄,MCP 保存後再呼叫。不要只留下不可追蹤的臨時 code。

最後記住 5 件事

  1. 三條控制路徑最後都回到 bpy,不要把 MCP 當成畫質外掛。
  2. 第一輪選程序式、可量化的小任務,先建立 CLI 基線。
  3. .blend、腳本、render 與物件清單只是最低可稽核交付;環境與第二次執行也要留證。
  4. 每次只跨過一個品質閘門,保留 checkpoint 與失敗紀錄。
  5. 三條路的 Python 都可能有同一主機帳號權限;MCP 又增加常駐 socket 與自動工具通道,因此暴露面通常更廣。

接著閱讀

左右滑動查看更多推薦

這份 GPT-6 Astra Blender 教學最重要的動作,是先建立空資料夾,把同一份小型規格交給 Agent,以四件最低交付加上版本、命令、Prompt、種子與素材紀錄判斷成功。當第二次乾淨執行也能產生一致的可編輯場景、8 張視圖與物件清單,你才增加貼圖、rig 或更複雜角色。想繼續建立完整工作流,可從 AlphaLab AI 專區免費線上課程開始。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

每週最多三封:一封 Weekly 週報與最多兩封關鍵 Alpha Signal。

我們不會 spam,隨時可退訂。