3D 트랙 · 멘토용 심화 자료 — Codex로 Blender 깊게 쓰기
⌂ 스터디 허브 내 학습
심화
3D 트랙 · 멘토용 심화 자료

Codex로 Blender 깊게 쓰기

멘토용 심화 · 3D 트랙 전체에서 참고
✅ 2026-09-14 멘토 맥에서 직접 돌려본 결과 기준 — macOS 26 · Blender 5.0.1 · blender-mcp 1.30.0 · Codex CLI 0.144.6

한 줄 요약

Codex가 Blender를 다루는 방법은 세 가지다. 보면서 고칠 땐 MCP, 많이·빨리·똑같이 반복할 땐 스크립트, 버튼으로만 되는 기능은 화면 조작. 어느 방법으로 하든 결과는 전부 파일로 남는다.


1. 세 가지 방법

                ┌─ ① MCP ─────────────────▶ 열려 있는 Blender 장면을 실시간으로 조작
나 ── Codex ────┼─ ② 백그라운드 스크립트 ──▶ .py 작성 → 화면 없이 Blender 실행 → .blend · .png · .glb
                └─ ③ 화면 조작 ────────────▶ 보이는 Blender 창을 직접 클릭·입력
① MCP ② 백그라운드 스크립트 ③ 화면 조작
속도 한 번에 한 동작 가장 빠름 — 부품 3개 모델 + 렌더 + 저장 + GLB까지 1.5초 (검증) 가장 느림
눈으로 보임 ✅ 열린 창에서 바로 ❌ 끝난 뒤 파일로 확인 ✅
똑같이 다시 만들기 어려움 (과정이 대화에 흩어짐) 스크립트만 다시 실행하면 똑같이 어려움
여러 개 한 번에 느림 변형 20개도 반복문 하나 사실상 불가
망했을 때 ⌘Z 스크립트 고쳐서 다시 실행 (원본은 멀쩡) 되돌리기 어려움
Codex 샌드박스 영향 없음 — 읽기 전용 모드에서도 됨 (검증) Blender 실행은 샌드박스 밖에서 — 안에서는 GPU 초기화 중 종료 (검증) 별도 권한 필요
딱 맞는 일 형태 잡기, 보고 고치기, 수업 실습 일괄 생성·렌더·내보내기, 턴테이블 API 없는 애드온 버튼, 메뉴 위치 보여주기
수업에서 01~04주차 기본 03주차 "잘 된 코드 저장", 05주차 렌더 멘토 시연 (선택)

2. ① MCP 깊게

연결 구조

Codex ──▶ uvx blender-mcp (MCP 서버, Codex가 켬) ──▶ 포트 9876 ──▶ Blender 안 애드온 ──▶ 장면
  • 애드온이 켜져 있으면 Blender를 열 때 9876 포트 서버가 자동으로 켜진다. 사이드바(N) BlenderMCP 탭에 Running on port 9876.
  • MCP 서버는 Codex 샌드박스 밖에서 돈다. 그래서 Codex를 읽기 전용(-s read-only)으로 켜도 장면을 읽을 수 있었다.

도구 28개를 여섯 묶음으로

실제 연결해서 받은 도구 목록 기준이다.

묶음 도구 하는 일 주의
읽기 get_scene_info get_object_info 오브젝트 목록·위치·크기·재질 안전
눈 get_viewport_screenshot 뷰포트를 캡처해서 AI가 직접 봄 안전
손 execute_blender_code Blender 안에서 파이썬 실행. 만들고 고치는 건 전부 이걸로 한다 ⚠️ 뭐든 할 수 있음
에셋 Poly Haven: get_polyhaven_categories search_polyhaven_assets download_polyhaven_asset set_texture · Sketchfab: search_sketchfab_models get_sketchfab_model_preview download_sketchfab_model · Poly Pizza: search_polypizza_models download_polypizza_model 모델·HDRI·텍스처 검색하고 받기 인터넷 필요
AI 생성 Hyper3D Rodin: generate_hyper3d_model_via_text generate_hyper3d_model_via_images poll_rodin_job_status import_generated_asset · Hunyuan3D: generate_hunyuan3d_model poll_hunyuan_job_status import_generated_asset_hunyuan Blender 안에서 바로 3D 생성 키·크레딧
상태 get_addon_status get_polyhaven_status get_hyper3d_status get_sketchfab_status get_polypizza_status get_hunyuan3d_status disable_telemetry record_trajectory_feedback 연결·기능 켜짐 확인, 사용 통계 끄기 안전

에셋·AI 생성은 기본으로 꺼져 있다. 처음 연결했을 때 get_polyhaven_status 가 "disabled"라고 답했다. BlenderMCP 탭에서 켠다.

켜는 것 체크박스 추가로 필요한 것
Poly Haven Use assets from Poly Haven 없음 (무료 CC0)
Hyper3D Rodin Use Hyper3D Rodin 3D model generation API 키 또는 Set Free Trial API Key 버튼
Sketchfab Use assets from Sketchfab Sketchfab API 키
Hunyuan3D Use Tencent Hunyuan 3D model generation Tencent SecretId · SecretKey

blender-mcp 1.30.0 에서는 get_scene_info 가 user_prompt 값을 요구한다. Codex는 알아서 채우니까, 직접 MCP를 부를 때만 신경 쓰면 된다.

승인은 이렇게 동작한다

상황 동작
대화형 Codex (앱·CLI) 도구를 쓰기 전에 허용할지 물어봄 → 허용
자동 실행 codex exec 물어볼 수가 없어서 자동 취소 → user cancelled MCP tool call (검증)

읽기 전용 도구만 안 묻게 하기 — ~/.codex/config.toml 에 추가:

설정 파일 · TOML
[mcp_servers.blender.tools.get_scene_info]
approval_mode = "approve"

[mcp_servers.blender.tools.get_object_info]
approval_mode = "approve"

[mcp_servers.blender.tools.get_viewport_screenshot]
approval_mode = "approve"

한 번만 시험할 땐 설정 파일을 안 고치고 명령에 붙여도 된다 (이 방법으로 codex exec 가 장면 읽기에 성공함):

터미널
codex exec -c 'mcp_servers.blender.tools.get_scene_info.approval_mode="approve"' "블렌더 장면에 뭐가 있어?"

⚠️ execute_blender_code 는 자동 승인하지 않는다. 파이썬이라 파일 삭제, 인터넷 요청까지 할 수 있다. 매번 코드를 보고 허용한다.

MCP로 잘 시키는 대화 패턴

① 읽기 → 계획 → 실행 → 눈으로 확인

프롬프트
먼저 장면을 읽고, 무엇을 어떻게 바꿀지 계획을 3줄로 말해줘. 내가 좋다고 하면 실행하고, 끝나면 뷰포트 캡처로 확인해줘.

② 코드 먼저 보기 — execute_blender_code 승인 전에

프롬프트
실행하기 전에 실행할 파이썬 코드를 먼저 보여줘.

③ 캡처로 스스로 검사

프롬프트
캡처를 보고 이 세 가지를 스스로 체크해줘: 바닥(Z=0)에 붙었나 / 부품 이름이 다 붙었나 / 전체 높이가 45cm인가. 틀린 게 있으면 고치고 다시 캡처.

④ 잘 된 걸 스크립트로 저장 — ②로 넘어가는 다리

프롬프트
지금까지 한 작업을 처음부터 다시 만들 수 있는 파이썬 스크립트로 정리해서 scripts/make_lamp.py 로 저장해줘. 경로는 스크립트 위치 기준으로.

⑤ 긴 작업은 쪼개기 — 한 번에 1~2분 넘게 걸리는 요청은 중간에 끊긴다.


3. ② 백그라운드 스크립트 깊게

실제로 돌려본 것 (2026-09-14)

Codex(workspace-write 모드)에게 이렇게 시켰다:

프롬프트
현재 폴더에 scripts/make_lamp.py 를 만들어. Blender 파이썬(bpy)으로 높이 45cm 스탠드 조명(원판 받침, 원기둥 기둥, 원뿔 갓, 부품마다 이름)을 만들고, blend/lamp.blend 로 저장하고, renders/lamp.png (512x512, BLENDER_WORKBENCH 엔진, 카메라와 조명 포함)로 렌더하고, exports/lamp.glb 로 내보내게 해. 경로는 스크립트 파일 위치 기준으로.
단계 결과
Codex가 스크립트 작성 ✅ 132줄. 치수 계산 주석, 부품 이름, 재질 함수, 카메라 조준까지
Codex 샌드박스 안에서 Blender 실행 ❌ 파이썬 실행 전 GPU(Metal) 초기화 단계에서 종료
같은 스크립트를 샌드박스 밖 터미널에서 실행 ✅ 1.5초 만에 lamp.blend · lamp.png · lamp.glb 생성

Codex가 스크립트로 만든 45cm 스탠드 조명 렌더

실행 명령

Mac

터미널
/Applications/Blender.app/Contents/MacOS/Blender -b --factory-startup -P scripts/make_lamp.py

Windows (설치 위치에 따라 경로가 다름)

PowerShell
& "C:\Program Files\Blender Foundation\Blender 5.0\blender.exe" -b --factory-startup -P scripts\make_lamp.py
옵션 뜻
-b 화면 없이 백그라운드로
--factory-startup 내 설정·애드온을 무시하고 깨끗한 상태로 → 누가 돌려도 같은 결과
-P 파일.py 파이썬 스크립트 실행
-- 값… 맨 뒤에 붙이면 스크립트가 sys.argv 로 받음 (높이·색 바꿔 넣기)
파일.blend -a 그 파일의 애니메이션 전체 렌더 (턴테이블)

샌드박스 문제, 이렇게 푼다

Codex 기본 샌드박스는 파일 쓰기는 되지만 Blender를 켜면 GPU 초기화에서 꺼진다.

방법 어떻게 추천
A. 작성은 Codex, 실행은 나 "스크립트만 만들고 실행 명령을 알려줘" → 내가 터미널에서 실행 ⭐ 수업 추천. 가장 안전하고 무슨 일이 일어나는지 보임
B. 그 명령만 샌드박스 밖 허용 대화형 Codex가 샌드박스 밖 실행을 요청하면 그 명령만 허용 편함. 명령을 읽고 허용할 것
C. 샌드박스 끄기 전체 권한 모드 수업용 노트북에선 쓰지 않기

Codex가 만든 스크립트에서 배울 점

좋은 Blender 스크립트의 조건이 다 들어 있었다.

  1. 경로를 스크립트 위치 기준으로 — 어디서 실행해도 같은 폴더에 저장
  2. 시작할 때 장면 비우기 — 다시 돌려도 중복 안 생김
  3. 치수를 미터로 계산하고 주석 — 0.03 + 0.29 + 0.13 = 0.45 m
  4. 부품 이름 + 빈 오브젝트(Empty)로 묶기 — Lamp_45cm_Assembly 아래 Base_Disc, Stand_Pole, Cone_Shade
  5. 재질을 함수로 — 색·금속감·거칠기를 숫자로
  6. 카메라가 대상을 바라보게 계산 — 손으로 각도 안 맞춤
  7. 저장 → 렌더 → 내보내기 순서, GLB엔 모델만 골라서 — 카메라·조명이 딸려 가지 않게
  8. 마지막에 결과 경로 출력 — 제대로 됐는지 바로 확인

뼈대만 추리면:

파이썬
from pathlib import Path
import bpy

PROJECT = Path(__file__).resolve().parent.parent
BLEND, RENDER, GLB = PROJECT / "blend/lamp.blend", PROJECT / "renders/lamp.png", PROJECT / "exports/lamp.glb"
for p in (BLEND, RENDER, GLB):
    p.parent.mkdir(parents=True, exist_ok=True)

bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()                                   # 1. 장면 비우기

# 2. 부품 (단위 m): 받침 0.03 + 기둥 0.29 + 갓 0.13 = 0.45
bpy.ops.mesh.primitive_cylinder_add(radius=0.11, depth=0.03, location=(0, 0, 0.015))
base = bpy.context.object; base.name = "Base_Disc"
# … 기둥, 갓, 재질, 카메라, 조명 …

scene = bpy.context.scene                                 # 3. 렌더 설정
scene.render.engine = "BLENDER_WORKBENCH"
scene.render.resolution_x = scene.render.resolution_y = 512
scene.render.filepath = str(RENDER)

bpy.ops.wm.save_as_mainfile(filepath=str(BLEND))          # 4. 저장 → 렌더 → 내보내기
bpy.ops.render.render(write_still=True)
bpy.ops.export_scene.gltf(filepath=str(GLB), export_format="GLB", use_selection=True)
print("Saved:", BLEND, RENDER, GLB)

스크립트라서 가능한 것

하고 싶은 것 Codex한테 이렇게
크기·색 바꿔서 여러 버전 스크립트 맨 위에 HEIGHT, SHADE_COLOR 변수를 만들고 명령줄에서 값을 받게 바꿔줘. 높이 30·45·60cm 세 버전을 renders/lamp_30.png 식으로 뽑는 run_variants.sh 도 만들어줘. 실행은 내가 할게.
변형 비교 시트 renders/ 의 PNG를 한 장에 격자로 모아 compare.png 만드는 스크립트 만들어줘.
턴테이블 blend/lamp.blend 에 5초 선형 회전 카메라를 넣고 MP4로 뽑는 스크립트 만들어줘. 렌더는 해상도 50%.
폴더 통째 정리 exports/ 안의 GLB를 전부 불러와서 폴리곤을 50%로 줄이고 exports/low/ 에 다시 저장하는 스크립트 만들어줘.

4. ③ 화면 조작

Codex에게 물어보면 스스로 제안하는 방법이다. 컴퓨터 사용 기능으로 화면에 보이는 Blender 창을 직접 클릭하고 입력한다.

이번에는 검증하지 않았다. 실제로 마우스를 움직이는 방식이라 멘토 화면에서 따로 시험해볼 것.

좋은 곳 나쁜 곳
API가 없는 애드온 버튼 누르기 느림
"이 메뉴가 어디 있는지" 화면으로 보여주기 창 크기·위치가 바뀌면 실패
사람이 따라 하는 데모 같은 결과를 다시 만들기 어려움

쓸 때 규칙

  • Blender 창 하나만 띄우고 다른 앱은 닫기
  • 진행 중에 마우스·키보드 건드리지 않기
  • 시작 전에 저장

5. 섞어 쓰는 흐름 (추천)

① MCP로 형태 잡기 ─────── 보면서 대화로
      │  "잘 됐으면 처음부터 다시 만드는 스크립트로 저장해줘"
      ▼
② 스크립트로 변형·렌더·내보내기 ─── 실행은 내가 터미널에서
      │  renders/ 보고 고르기
      ▼
① MCP로 고른 것 열어서 세부 수정

결과물은 전부 파일로 남는다

lamp-project/
├── AGENTS.md     ← Codex한테 주는 이 프로젝트 규칙
├── scripts/      ← .py   레시피 — 이것만 있으면 언제든 다시 만든다
├── blend/        ← .blend 작업 파일
├── renders/      ← .png · .mp4
└── exports/      ← .glb · .stl

스크립트는 레시피, .blend는 완성된 요리, 렌더는 사진. 레시피를 남겨두면 사진이 날아가도 다시 만든다.


6. AGENTS.md — Codex한테 Blender 규칙을 한 번에 주기

Codex는 작업 폴더의 AGENTS.md 를 읽고 시작한다. 매번 "단위는 미터, 이름 붙여, 저장은 blend/에"를 말할 필요가 없어진다.

마크다운
# Blender 작업 규칙

## 환경
- Blender: /Applications/Blender.app/Contents/MacOS/Blender (5.0)
- 열린 Blender 연결: MCP 서버 이름 blender (포트 9876)

## 작업 방식
- 보면서 고치는 작업은 MCP로, 여러 개·렌더·내보내기는 scripts/ 의 파이썬 스크립트로
- Blender 실행 명령은 내가 직접 실행한다. 스크립트를 만들면 실행 명령만 알려줘
- execute_blender_code 를 쓰기 전에 코드를 먼저 보여줘

## 3D 규칙
- 단위 미터, Z가 위, 바닥은 Z=0
- 오브젝트 이름은 영어로: 물건_부품 (Lamp_Base)
- 대칭은 Mirror, 반복은 Array, 모서리는 Bevel 0.5cm
- 기존 모델을 고칠 땐 원본을 숨기고 복사본(_edit)에서

## 저장
- 작업 파일 blend/, 렌더 renders/, 내보내기 exports/ — 경로는 스크립트 위치 기준
- 파일 이름 끝에 버전: _v01, _v02
- 테스트 렌더는 해상도 50%, Workbench 또는 EEVEE

7. Codex 권한 모드와 Blender

모드 파일 쓰기 Blender MCP Blender 직접 실행
읽기 전용 (-s read-only) ❌ ✅ 장면 읽기 됨 (검증) ❌
작업 폴더 쓰기 (-s workspace-write) 작업 폴더만 ✅ ❌ GPU 초기화에서 종료 (검증)
전체 권한 어디든 ✅ 샌드박스가 없어서 될 것으로 보임 (미검증) · ⚠️ 수업용 비추천

8. 막힐 때

증상 원인 해결
user cancelled MCP tool call 자동 실행(codex exec)은 승인을 못 받음 대화형 Codex에서 하거나, 읽기 도구만 approval_mode = "approve"
Codex가 Blender를 켜자마자 꺼짐 (Metal·GPU 오류) 샌드박스가 GPU 접근을 막음 스크립트만 받고 실행은 터미널에서 직접
연결 거부, 9876 포트 Blender가 안 켜졌거나 애드온이 꺼짐 Blender 켜기 → BlenderMCP 탭 Connect to MCP server
도구가 "disabled"라고 답함 에셋·AI 생성 체크박스가 기본으로 꺼져 있음 BlenderMCP 탭에서 체크
MCP가 자꾸 끊김 다른 AI 앱에도 blender MCP가 연결돼 있음 한 번에 한 프로그램만 연결
스크립트는 돌았는데 파일이 없음 경로가 "실행한 위치" 기준 Path(__file__) 로 스크립트 위치 기준
GLB에 카메라·조명까지 들어감 전부 선택된 채 내보냄 모델만 선택하고 use_selection=True
백그라운드 렌더가 새까맣게 나옴 장면에 카메라(scene.camera)나 조명이 없음 스크립트에서 카메라 지정, 조명 추가
내 컴퓨터에서만 결과가 다름 개인 설정·애드온이 섞임 --factory-startup
경로 오류 한글·띄어쓰기 경로 프로젝트 폴더·파일 이름은 영어로

9. 수업 주차별로 어디에 쓰나

주차 방법 이유
01 말로 움직이기 ① MCP 결과가 바로 보여서 대화 흐름을 익히기 좋음
02 생성하기 ① MCP + 웹 생성기 조립은 MCP, 유기적 형태는 Tripo
03 프롬프팅 ① MCP → 마지막 5분에 "잘 된 코드 저장" 시연 ②로 넘어가는 다리
04 고치기 ① MCP, 여러 모델 한 번에 정리는 ② 시연 반복 작업은 스크립트가 압도적으로 빠름
05 렌더 ① MCP로 연출 → 턴테이블은 ② 렌더하는 동안 Blender 화면이 안 멈춤
멘토 시연 ③ 화면 조작 (선택) 메뉴 위치를 보여줄 때

출처