프롬프트 하나에서 네 개의 숏으로 된 Blender 시네마틱까지
12초짜리 숏 시퀀스라고 하면 작아 보입니다. 하지만 Blender에서는 할 일이 많습니다. 스테이징, 키프레임, 카메라 무빙, 피사계 심도, 그리고 천이 아니라 종이처럼 휘어야 하는 종이 한 장까지. 대부분은 뷰포트에서 한 번에 한 클릭씩 이루어집니다.
그래서 이 작업 전체를 에이전트에게 맡겼습니다. Eigent의 Gemini 4와 함께, 프롬프트 하나가 Cozy Kitchen 장면을 네 개의 숏으로 된 시네마틱으로 바꿔 놓았습니다. 외풍이 레시피 카드를 받침대에서 들어 올려 주방을 가로질러 나르고, 딸기 타르틀레트 위에 살포시 걸쳐 놓습니다. Gemini 4는 Blender 창을 한 번도 열지 않았습니다. Blender Python을 작성하고, 헤드리스로 실행하고, 스스로 결과를 점검하고, 찾아낸 문제를 고쳤습니다.
전체 워크플로 한눈에 보기
장면과 브리프만 준비하면 됩니다. 나머지는 Gemini 4가 커맨드라인에서 처리합니다. 단계마다 파일이 남기 때문에 어느 시점에서든 작업을 확인할 수 있습니다.
| 단계 | 하는 일 | 얻는 결과 |
|---|---|---|
| 읽기 | 장면을 헤드리스로 열고 작업 데이터 불러오기 | 카드 시작 지점의 테스트 렌더 |
| 스테이징 | 레시피 받침대, 커튼 봉, 바람 단서 추가 | 외풍의 출처가 눈에 보이는 세트 |
| 제작 | 레시피 카드 모델링과 텍스처링 | 직접 그린 레시피 카드가 있는 얇은 양면 시트 RecipePage |
| 애니메이션 | 경로를 따라가는 궤적과 타르틀레트 위 드레이프 맞추기 | 부드러운 비행과 받쳐진 안착 주름 |
| 촬영 | 카메라 네 대를 배치하고 컷에 연결 | 숏 2와 3에 피사계 심도가 있는 4숏 편집 |
| 검증 | 브리프의 모든 규칙을 측정하고 실패한 부분 수정 | work/에 남는 재실행 가능한 검증 스크립트 |
| 전달 | 스틸과 스토리보드 렌더, 숏 리스트 작성 | sequence.blend, shotlist.csv, storyboard.png, 스틸 9장 |
이제 직접 해 보는 방법을 단계별로 소개합니다. 다음번에는 다르게 설정하고 싶은 한 가지도 함께요.
최종 결과물
- 편집 가능한 Blender 프로젝트 -
sequence.blend, 13 MB. 모든 이미지가 패킹되어 있고 링크된 라이브러리는 없습니다. 열어서 바로 이어서 작업하세요. - 숏 리스트 -
shotlist.csv. 숏마다 한 줄씩, 프레임 범위, 카메라, 액션이 들어 있습니다. - 스토리보드 -
storyboard.png. 라벨이 붙은 640×480 패널 9개를 3×3 그리드로 배치했습니다. - 스틸 이미지 9장 - 프레임 1, 48, 73, 120, 145, 192, 217, 264, 288.
- 영상과 미리보기 페이지 -
sequence.mp4와preview.html. 짧은 후속 요청 한 번으로 만들었습니다.
시작하기 전에
- 컴퓨터에 Eigent를 설치합니다.
- Gemini 4 - Eigent Cloud를 통하거나 본인의 Gemini API 키로 사용합니다.
- 같은 컴퓨터에 Blender. Gemini 4가 커맨드라인으로 조작하므로 창은 필요 없습니다. 저희는 Blender 5.2 LTS를 설치해 두었습니다. 샌드박스에서 돌리고 싶다면, 작업 패키지에
bpy5.2.2를 고정한 Docker 이미지도 들어 있습니다. - 작업 패키지. 저희가 쓴 것은 3D 코딩 환경 중 하나인 "recipe-page mishap"입니다.
| 파일 | 에이전트에게 주는 것 |
|---|---|
PROMPT.md | 브리프 - 보내는 메시지는 이것뿐 |
agent_environment/input/kitchen.blend | 준비된 Cozy Kitchen 장면 |
agent_environment/input/subjects.json | 딸기 타르틀레트를 이루는 오브젝트 |
agent_environment/input/action.json | 카드의 시작 지점과 프레임 120, 168, 192에서의 비행 경로 |
agent_environment/input/presentation.json | 스틸과 스토리보드 설정 |
agent_environment/input/source_overview.png | 손대지 않은 장면의 미리보기 |
agent_environment/scripts/ | presentation.py(스틸과 스토리보드 렌더)와 review.py |
Gemini 4 선택하기
Eigent Cloud에서 - API 키가 필요 없습니다.
- 홈 화면에서 입력창 아래의 모델 선택기를 엽니다.
- Eigent 아래에서 Gemini 4 Argon을 선택합니다.
본인의 Gemini API 키로:
- Settings → Models를 엽니다.
- Gemini를 찾아 설정을 엽니다.
- API key를 붙여 넣습니다.
- model type을
gemini-4-argon으로 설정합니다. - Save를 클릭한 뒤, 모델 선택기의 Gemini에서 선택합니다.
사고 강도는 기본값으로도 충분합니다. 저희는 Single Agent, Full access로 실행해서 Blender 실행과 파일 쓰기를 멈춰서 묻지 않고 진행하게 했습니다.
프로젝트 폴더 준비하기
Eigent에서 프로젝트를 만들고, 다음 두 가지만 들어 있는 폴더를 지정합니다.
showcase-kitchen-draught/
PROMPT.md
agent_environment/
input/ # kitchen.blend, subjects.json, action.json, presentation.json, source_overview.png
scripts/ # presentation.py, review.py
그 밖의 것은 넣지 마세요. 특히 채점기, 레퍼런스 실행 결과, 과거 결과에 대한 메모는 빼 두세요. 이유는 아래에서 설명합니다.
프롬프트 붙여 넣기
아래 브리프를 Cowork with 입력창에 복사해 그대로 보냅니다.
Animate the recipe-page mishap
Create a twelve-second cinematic in /app/input/kitchen.blend: a draught lifts a recipe page, carries it across the work area and leaves it draped on the strawberry tartlet identified in /app/input/subjects.json. Preserve the warm illustrated kitchen. Show the calm setup, motivated lift, flight, contact and settling through four connected shots, with visible, consistent wind clues and readable page motion.
## Action and photography
- Scene Sequence runs at 24 fps, frames 1–288, with camera-bound cuts at 1, 73, 145 and 217. Preserve visible source surfaces, material identity and world transforms within 2 mm; keep existing set pieces visible. Add the page, wind clues and staging as needed.
- RecipePage is an editable thin two-sided sheet, 0.13–0.17 m long and 0.09–0.12 m wide, with 100–12,000 native vertices, finite UVs and readable recipe marks.
- Use /app/input/action.json for the start plane and flight corridor. At frame 1, the page is within 10 mm of the start plane and its centroid within 20 mm of the start point. Through frame 48 the centroid stays within 8 mm of its initial pose; by 120 it moves at least 0.10 m. At frames 120, 168 and 192 it follows the corridor within 35 mm.
- Page centroid motion is at most 16 mm per frame, with successive displacement changes at most 5 mm. After best rigid alignment with frame 1, shape deformation is at least 4 mm RMS at one flight frame and 2 mm RMS at rest. Show convincing paper flutter, stiffness and supported contact folds, without penetration or stretched print.
- Throughout frames 241–288, at least 15% of page surface samples are within 8 mm of the actual selected strawberry-tartlet surface. Centroid variation over 264–288 is at most 3 mm; surface motion from 276 to 288 is at most 4 mm.
- Use four distinct cameras. Shot 1 may be orthographic; shots 2–4 use 35–85 mm perspective lenses. Shots 2 and 3 use depth of field focused within 25 mm of the page centroid at each shot's start, midpoint and end.
- At frames 120, 168, 192 and 264, frame the page in front of the active camera within the central 80%, with projected height 8–65% of the image. Within shots, camera motion is at most 25 mm and 4° per frame, with translation changes at most 8 mm; cuts are exempt.
- Compose purposeful shots with coherent screen direction, controlled focus, anticipation and a clear final reveal. Avoid disconnected poses, arbitrary camera moves or unreadable action.
## Handoff
Save sequence.blend, shotlist.csv, storyboard.png and stills/frame_NNN.png for frames 1, 48, 73, 120, 145, 192, 217, 264 and 288 in /app/output. The CSV columns are shot,start,end,camera,action, matching the native four-shot edit. Use labelled 640×480 panels in a 3×3 storyboard. Stills and storyboard match the saved scene under /app/scripts/presentation.py CPU settings with luminance SSIM ≥0.93; use that helper or equivalent images.
Keep the native project editable and below 192 MiB, with finite nondegenerate geometry, all used material/world images packed and no linked libraries. It must replay with Python auto-execution disabled; native constraints and ordinary driver expressions are allowed. Keep /app/input unchanged; use /app/work for work files. Blender Python, headless rendering and command-line tools are available.
이 프롬프트는 Docker 컨테이너용으로 작성되어 경로가 /app으로 시작합니다. 저희 Mac에서 실행했을 때 Gemini 4는 이를 알아서 프로젝트 폴더(agent_environment/input, work/, output/)에 매핑했습니다.
이 브리프에서 핵심 역할을 하는 부분은 다음과 같습니다.
- 형용사 대신 숫자. "시네마틱하게 만들어 줘"는 분위기일 뿐입니다. "프레임 168에서 경로로부터 35 mm 이내"는 에이전트가 측정하고 달성할 수 있는 목표입니다.
- 규칙만이 아닌 이야기의 흐름. 차분한 도입, 동기가 있는 떠오름, 비행, 접촉, 안착. 숫자는 움직임을 정직하게 지키고, 흐름은 그것을 이야기로 만듭니다.
- 주방은 그대로. 원래 오브젝트는 2 mm 이내로 유지되고 머티리얼도 그대로입니다. 에이전트는 장면에 더할 뿐, 다시 만들지 않습니다.
- 진짜 넘겨받을 수 있는 결과물. Python 자동 실행을 꺼도 재생되는, 패킹되고 편집 가능한
.blend. 내일 열어서 바로 애니메이션을 이어 갈 수 있는 파일입니다.
에이전트에게 맡기기
프롬프트를 보냅니다. Gemini 4가 작업을 계획한 뒤 Blender Python으로 하나씩 처리합니다. 저희 실행은 첫 파일 읽기부터 마지막 자체 감사까지 약 50분이 걸렸습니다. 만든 것을 순서대로 보면 다음과 같습니다.
- 장면 읽기.
kitchen.blend를 헤드리스로 열고, 타르틀레트와 경로 데이터를 불러오고, 시작 지점의 테스트 뷰를 렌더했습니다. - 세트 꾸미기. 시작 지점 아래에 작은 나무 레시피 받침대를 두고, 주방 창문을 가로지르는 커튼 봉을 달았습니다.
- 바람 단서 추가. 커튼 타이백, 새틴 리본, 받침대의 태그. 모두 같은 방향으로 펄럭이게 해서 외풍의 출처가 보이도록 했습니다.
- 카드 만들기.
RecipePage는 0.136 × 0.094 m, 버텍스 1,218개의 양면 시트로, 직접 그린 레시피 카드 "Recipe No. 14, Strawberry Tartlet"이 붙어 있습니다. 셰프 메모는 저희가 요청하지 않은 한 줄로 끝납니다. "Keep recipe cards away from open kitchen window draughts!" - 움직임 계획. 경로 체크포인트를 지나는 부드러운 궤적을 만들고, 타르틀레트의 실제 표면에 맞춘 안착 드레이프를 준비했습니다.
- 카메라 네 대 배치. 차분한 도입은 42 mm, 떠오름은 f/5.6 피사계 심도의 48 mm, 비행은 52 mm 트래킹 숏, 착지는 58 mm 히어로 숏. 타임라인 마커로 각 카메라를 프레임 1, 73, 145, 217의 컷에 연결했습니다.
- 스스로 점검. 브리프의 측정 가능한 규칙마다 검증 스크립트를 작성해 실행하고, 찾은 문제를 고쳤습니다. 카드의 인쇄면이 카메라 반대쪽으로 기울어 있어 피치를 뒤집었습니다. 커튼에 주름을 더하고, 안착한 카드를 옆 타르틀레트에서 살짝 떼어 놓고, 마지막 카메라를 올려 공개 장면을 더 깔끔하게 만들었습니다.
- 결과물 전달.
presentation.py로 스틸과 스토리보드를 렌더하고,shotlist.csv를 작성하고, 최종 감사를 실행했습니다. 원래 오브젝트는 모두 그대로 있었고, 움직이지 않았으며, 원래 머티리얼을 유지했습니다.
숏 리스트 읽기
output/shotlist.csv를 엽니다. 카메라당 하나씩, 숏은 네 개입니다.
| 숏 | 프레임 | 카메라 | 액션 |
|---|---|---|---|
| 1 | 1–72 | Cam_Shot1 | 나무 레시피 받침대에서의 차분한 도입. 창가 리본이 불어오는 외풍에 펄럭이며 레시피 카드를 들어 올린다 |
| 2 | 73–144 | Cam_Shot2 | 외풍이 펄럭이는 레시피 카드를 받침대에서 높은 비행 경로로 실어 올린다 |
| 3 | 145–216 | Cam_Shot3 | 카드가 주방 작업대를 가로질러 날아가 2단 디저트 스탠드 쪽으로 활공한다 |
| 4 | 217–288 | Cam_Shot4 | 카드가 내려앉아 딸기 타르틀레트 위에 단단하게 받쳐진 아치 모양으로 자리 잡는다 |
이어서 storyboard.png를 엽니다. 9개의 프레임이 카드가 놓여 있다가, 떠오르고, 주방을 가로지르고, 타르틀레트 위에 내려앉는 이야기 전체를 한눈에 보여 줍니다.
숫자 확인하기
Gemini 4의 검증 스크립트는 work/에 남아 있어서, 저장된 프로젝트에 언제든 다시 실행할 수 있습니다. 최종 sequence.blend에서 측정한 결과는 다음과 같습니다.
| 항목 | 브리프 요구 사항 | 결과 |
|---|---|---|
| 프레임 1의 시작 지점 | 20 mm 이내 | 1.03 mm |
| 프레임 48까지 정지 유지 | 최대 8 mm 이동 | 6.69 mm |
| 프레임 120까지 이동 거리 | 최소 0.10 m | 0.152 m |
| 프레임 120, 168, 192의 비행 경로 | 35 mm 이내 | 0.00 mm |
| 카드 속도 | 프레임당 최대 16 mm | 9.35 mm |
| 비행 중 펄럭임 | 최소 4 mm RMS | 11.07 mm |
| 타르틀레트와의 접촉, 프레임 241–288 | 카드의 최소 15% | 22.9% |
| 카드의 타르틀레트 관통 | 없음 | 겹치는 삼각형 0개 |
| 안착, 프레임 264–288 | 최대 3 mm | 0.37 mm |
| 피사계 심도 초점, 숏 2와 3 | 카드에서 25 mm 이내 | 0.19 mm 이하 |
| 가장 빠른 카메라 회전 | 프레임당 최대 4° | 0.71° |
이는 브리프에 대한 에이전트 자체의 검증 결과입니다. 작업 패키지에는 별도의 채점기도 들어 있습니다. 23개의 측정 규칙에 더해, 스토리, 완성도, 종이 질감을 평가하는 시각 심사가 있습니다. 공식 점수가 필요하다면 실행이 끝난 뒤 에이전트 폴더 밖에서 직접 결과물에 grader/grade.sh를 실행하세요.
재생해 보기
브리프가 요구하는 것은 영상이 아니라 Blender 프로젝트입니다. 그래서 같은 프로젝트에서 후속 메시지를 한 번 보내, Gemini 4에게 시퀀스를 MP4로 내보내고 브라우저 미리보기를 만들어 달라고 했습니다.
돌아온 결과물은 sequence.mp4(288 프레임, 640×480 H.264, 3 MB)와 preview.html입니다. 미리보기 페이지에서는 시네마틱을 재생하며 실시간 프레임 번호를 볼 수 있고, 네 개의 숏으로 한 번에 이동할 수 있으며, 아래에는 전체 스토리보드가 있습니다.
다음에는 다르게 설정할 부분
저희 프로젝트 폴더에는 에이전트에게 필요한 것보다 많은 것이 들어 있었습니다. PROMPT.md와 agent_environment/ 외에도 작업의 README.md, grader/, 그리고 이전 모델들의 reference_runs/가 함께 있었습니다.
이건 중요합니다. Gemini 4의 검증 스크립트는 카드 인쇄면을 5% 늘어남 한도로 테스트합니다. 이 숫자는 프롬프트에 없습니다. README에, 이전 실행들이 어떻게 실패했는지에 대한 메모 옆에 있습니다. Gemini 4의 스크립트가 채점기나 레퍼런스 실행 결과를 읽은 적은 없지만, README가 목표치에 영향을 줬다고 보는 것이 타당합니다.
그러니 저희 실행은 벤치마크 점수가 아니라 쇼케이스로 봐 주세요. 공정한 테스트를 하려면 에이전트에게 PROMPT.md와 agent_environment/ 딱 두 가지만 주고, 채점기는 보이지 않는 곳에 두세요.
나만의 방식으로 활용하기
같은 패턴은 어떤 Blender 장면에도 적용됩니다.
- 감각을 숫자로 바꾸세요. 프레이밍, 속도, 초점 거리, 접촉. 측정 가능한 목표가 있으면 재생 버튼을 누르기 전에 에이전트가 스스로 점검할 수 있습니다.
- 경로를 정해 주세요. JSON 파일에 체크포인트 몇 개만 두면, 키프레임 하나 손으로 찍지 않고도 액션을 이끌 수 있습니다.
- 진짜 결과물을 요구하세요. 패킹되고 편집 가능한
.blend, 숏 리스트, 스토리보드. 렌더 결과만이 아니라 계속 작업할 수 있는 프로젝트를 받게 됩니다. - 검증하게 하세요. 이번 실행의 최고의 순간은 Gemini 4가 카드의 인쇄면이 카메라 반대쪽을 향한다는 걸 알아차리고, 저희가 보기도 전에 고친 것이었습니다.
12초의 애니메이션은 예전엔 뷰포트에서 보내는 오후 한나절을 뜻했습니다. 이제는 프롬프트 하나면 됩니다. 그리고 열어 보고, 다듬고, 내 것으로 만들 수 있는 프로젝트가 남습니다.
크레딧: Gemini 4와 Eigent로 제작. 장면: Nicole Morena의 "Cozy Kitchen"(Blender 3.5 스플래시), CC-BY-SA. 파생 장면과 렌더는 저작자 표시와 ShareAlike 조건을 따릅니다. 브리프와 작업 데이터: Eigent 오리지널. 음악: The Soundlings의 "Quirk n Twerk"(YouTube Audio Library).



