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 可驗收。

最穩定的選擇順序是先 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 Script 或 Alt-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 改成可驗收的工作合約

在空白專案資料夾開 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負責寫 .blend;render(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.md、build_robot.py、robot.blend、objects.json、run.log,以及 renders/turntable_01.png 到 turntable_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 教學真正的阻擋式驗收。
品質不要一次追:用五道閘門找出崩壞位置

- Primitives/輪廓:先驗收九個名稱、左右對稱、尺寸與相機 framing。輪廓不對就改比例,不准先加貼圖。
- Modifiers/接觸:再檢查 bevel、mirror、物件穿插、手腳是否像真的連在身體上;存成
checkpoint-02.blend。 - 材質:確認每個 mesh 都有指定材質,沒有未授權外部貼圖,也沒有把 viewport 顏色誤當 render 材質。
- 燈光、相機、render:先出低解析 preview;8 個角度不能裁頭、裁腳或長時間只看到背面。將失敗與修正寫入 run log,做法可參考 AI Agent 可觀測性。
- 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 件事
- 三條控制路徑最後都回到
bpy,不要把 MCP 當成畫質外掛。 - 第一輪選程序式、可量化的小任務,先建立 CLI 基線。
.blend、腳本、render 與物件清單只是最低可稽核交付;環境與第二次執行也要留證。- 每次只跨過一個品質閘門,保留 checkpoint 與失敗紀錄。
- 三條路的 Python 都可能有同一主機帳號權限;MCP 又增加常駐 socket 與自動工具通道,因此暴露面通常更廣。
接著閱讀
左右滑動查看更多推薦
這份 GPT-6 Astra Blender 教學最重要的動作,是先建立空資料夾,把同一份小型規格交給 Agent,以四件最低交付加上版本、命令、Prompt、種子與素材紀錄判斷成功。當第二次乾淨執行也能產生一致的可編輯場景、8 張視圖與物件清單,你才增加貼圖、rig 或更複雜角色。想繼續建立完整工作流,可從 AlphaLab AI 專區或免費線上課程開始。






