3줄 요약
- 이 서재의 고용인이 GPT-6 Astra에게 헤드폰 앰프 Zähl HM1의 사진을 찾아 Blender로 모델링해 보라고 요청했다. Astra는 Blender MCP를 통해 실행 중인 Blender 장면을 직접 편집했고, 작업 과정을 6쪽 보고서로 정리해 결과물과 함께 넘겼다.
- 참고 사진 수집, 본체와 단자 모델링, 재질 배정, 렌더링, 사용자 피드백 반영, 수치 검증이 MCP 호출 20회에 걸쳐 진행됐다. 기록에 남은 호출 시각은 오후 4시 16분부터 4시 41분까지다.
- 손에 남은 것은 편집 가능한 .blend 파일 하나와 제품 렌더 7컷, 와이어프레임 2컷이다. 상판 나사 홀 12개나 양측 방열핀 45개씩, 전원 접점 16개 같은 요구 사항이 맞는지는 Astra가 검증 스크립트를 짜서 확인했다. 사진을 해석한 시각화 모델이며 제조용 CAD로 쓸 수는 없다는 한계도 보고서에 적혀 있다.
요청은 한 줄이었다
고용인이 Astra에게 건넨 요청은 다음 한 문장이다.
zhehl hm1 헤드폰 앰프를 여러 면에서 찍은 사진을 찾은 다음에 이걸 블렌더로 모델링해보겠어? 단자 형태나 질감 등을 잘 표현해줘
제품명 철자가 조금 틀렸는데도 Astra는 독일 Zähl의 HM1을 찾아냈다. HM1은 Zähl이 만드는 레퍼런스 헤드폰 믹싱 앰프로, 제조사가 공시한 외형 치수는 약 225 × 90 × 300 mm(너비 × 높이 × 깊이)다. 고용인이 앰프 사진을 몇 장 건네 준 것도 아니었다. 사진을 찾는 일부터 Astra가 맡았다.
Astra는 먼저 작은 파이썬 스크립트를 써서 제조사 제품 페이지에서 이미지 링크를 추출했다. 그런 다음 제조사의 전면과 후면 설명 이미지, 제품 개요 사진, 매뉴얼 PDF를 내려받았다. 판매점 Elise Audio에 올라온 여러 각도의 제품 사진도 references/ 폴더에 함께 모았다. 어느 파일이 어느 URL에서 왔는지는 sources.json에 남겼다. 고용인은 나중에 Gearlounge에 올라온 전면과 후면 사진 두 장을 추가로 건넸고, 이 두 장이 세부 수정의 기준이 됐다.
Blender 안에서 파이썬을 실행한다
Blender와의 연결에는 ahujasid/blender-mcp를 사용했다. Blender 5.2.1 LTS에 이 애드온을 설치해 두면 MCP 서버가 소켓을 통해 Blender에 연결된다. 클라이언트는 execute_blender_code 도구로 파이썬 코드를 보내 실행 중인 장면을 편집할 수 있고, get_viewport_screenshot 도구로 뷰포트를 캡처해 이미지로 받아 올 수 있다.
Astra는 이 MCP 서버를 부르는 클라이언트도 스스로 작성했다. 이 파일은 도구 이름과 스크립트 파일 경로를 받아 MCP 서버에 전달한다. 응답이 이미지이면 파일로 저장하고, 호출 시각과 성공 여부는 operations.jsonl에 한 줄씩 기록한다. 파일 크기는 2KB 남짓이다. 장면을 고치는 코드는 전부 Blender 쪽에서 실행되고, 클라이언트는 전달만 한다.
operations.jsonl에 남은 호출을 세어 보면 execute_blender_code가 17회, get_viewport_screenshot이 3회다. 단계별 스크립트는 15개로 나뉘어 있고, 파일 이름이 작업 순서를 그대로 보여 준다.
| 로그 시각(KST) | 스크립트 | 한 일 |
|---|---|---|
| 16:16 | 01_chassis.py | 장면 초기화, 컬렉션 8개 생성, 재질 정의, 전후면 패널과 상하판, 방열핀, 발, 체결 부품 |
| 16:18 | 02_connectors.py | XLR, RCA, 전원, 옵션 단자 |
| 16:20 | 03_controls_print.py | 노브, 버튼, 눈금, 로고와 인쇄 문자 |
| 16:21 | 04_studio.py | 카메라와 조명 설정, 첫 렌더 |
| 16:25 | 05_front_corrections.py, 06_top_corrections.py | 전면 음각과 XLR 고정부, 상판 경계 수정 |
| 16:27 | 07_render_set.py | 렌더 7컷 설정과 실행 |
| 16:32 | 08_final_geometry.py, 09_validate.py | 최종 형상 정리와 수치 검증 |
| 16:34 | 10_top_twelve.py | 상판 재구성, 나사 홀 12개, 재검증과 재렌더 |
| 16:36 | 11_pack_when_ready.py | 참고 이미지와 폰트 패킹, 파일 저장 |
| 16:38 | 12_product_label.py | 제품명 문구 위치 이동 |
| 16:39 | 13_wireframe_front.py, 14_wireframe_rear.py | 와이어프레임 표시와 뷰포트 캡처 |
| 16:41 | 15_restore_view.py | 대표 카메라 복원 |
이 표의 시각은 각 호출이 끝난 때를 정리한 것이다. 참고 자료를 조사한 시간이나 순수 연산 시간을 측정한 값과는 다르다는 단서를 보고서가 따로 달아 두었다. 스크립트 사이사이에 Astra가 생각하고 코드를 쓴 시간은 이 표에 나타나지 않는다.
형상과 재질을 어떻게 만들었나
첫 스크립트는 Blender의 단위 하나를 100 mm로 잡고, 재질 18종을 Principled BSDF 노드로 정의하면서 시작했다. 분체도장 패널에는 노이즈 텍스처를 범프와 거칠기에 연결해 미세한 입자감을 줬다. 방열핀과 노브에는 아노다이징 알루미늄, 단자에는 니켈과 금도금, 절연체에는 플라스틱, 발에는 고무 재질을 배정했다. 초록 표시등과 흰 버튼에는 약한 발광을 넣었다.
형상은 부위별로 다른 방식을 택했다.
| 부위 | 모델링 방식 |
|---|---|
| 패널과 방열판 | 판재에 모서리 베벨, 양측 45개씩 개별 방열핀 |
| 노브 | 둘레에 능선 96개를 낸 가공 형상, 별도의 전면 캡과 지시선 |
| XLR | 원형 하우징, 구멍을 낸 암단자 삽입체, 수단자 핀 |
| RCA | 속이 빈 금속 배럴, 중앙 접점, 빨강과 흰색 절연 링 |
| 전원과 옵션 단자 | 전원 접점 16개, 반복 링으로 표현한 나사산, 다핀 소켓 |
| 인쇄와 로고 | 편집 가능한 글자와 곡선, 공식 로고의 알파 이미지 |

후면 단자 확대. 금도금 RCA, XLR 수단자와 암단자, 전원 단자의 접점 16개와 나사산이 구분된다.

전면 단자 확대. 4핀 XLR과 6.35 mm 잭.
방열핀 개수, 노브 능선 수, 접점의 세부 치수와 재질 파라미터는 사진을 보고 정한 모델 구현값이다. 제조사 실측값으로 검증한 항목은 아니라고 보고서는 밝혔다.
사용자 피드백으로 고친 것
첫 렌더가 나온 뒤 고용인이 Gearlounge 사진 두 장을 건네며 사진과 다른 부분을 지목했다. Astra는 전체 실루엣과 단자 표현은 유지하고, 사진과 어긋난 전면 고정부와 음각, 상판을 고쳤다. 무엇이 어떻게 바뀌었는지는 보고서가 표로 정리해 두었다.
| 검토 항목 | 초기 상태 | 최종 반영 |
|---|---|---|
| 전면 XLR | 사각 플랜지를 덧댄 형태 | 사각 판을 제거하고 패널에 직접 장착되는 원형 소켓으로 변경 |
| 노브 주변부 | 하단 조작부를 패널 위에 덧붙임 | 패널을 파낸 음각 포켓과 안쪽 바닥으로 변경 |
| 로고 창 | 돌출된 창, 여백이 작은 로고 | 음각 창으로 바꾸고 로고를 78% 크기로 축소 |
| 상판 긴 경계 | 오른쪽에 홈처럼 보이는 경계 | 상판 폭과 방열판 뿌리의 연결을 정리하고 좌우 대칭으로 맞춤 |
| 상판 홀 개수 | 총 6개로 해석 | 상판을 다시 만들어 좌우 6개씩 총 12개 배치 |
| 후면 XLR | 사각 금속 고정부가 두드러짐 | 둥근 니켈 테두리와 대각선 체결부로 수정 |
| 제품명 문구 | 로고보다 오른쪽으로 치우친 시작점 | 로고 창 왼쪽 끝에 맞춰 창 바로 아래로 이동 |
상판 홀 개수는 Astra가 첫 설명을 전체 6개로 잘못 이해하면서 생긴 오류다. 고용인이 좌우 각 6개라고 다시 알려 주자 Astra는 상판을 통째로 다시 만들었다. Astra가 기존 상판에 구멍을 더하지 않고 새로 만든 이유는 이전 홀 패턴의 구멍이 남지 않도록 하기 위해서였다. 음각도 색을 어둡게 칠하는 대신 Boolean 연산으로 패널에 실제 포켓을 파는 방식으로 처리했다.

수정 후 전면. 로고 아래 제품명, 플랜지 없는 원형 XLR, 파인 조작부가 보인다.

상판. 좌우 각 6개, 총 12개의 나사 홀.
수치로 검증한다
Astra는 렌더를 눈으로 보는 것과 별개로 검증 스크립트를 작성해 Blender 안에서 실행했다. 09_validate.py는 파이썬 assert 문으로 다음 항목을 확인한다.
| 검증 항목 | 결과 | 확인 방법 |
|---|---|---|
| 전면 XLR 사각 판 | 없음 | 해당 오브젝트가 삭제됐는지 확인 |
| 상판 나사 홀 | 12개, 좌우 각 6개 | 나사 오브젝트 개수와 좌우 x 좌표 검사 |
| 로고 창 표면 | 전면 기준 약 0.8 mm 안쪽 | 바운딩 박스 좌표 검사 |
| 음각 조작부 바닥 | 전면 기준 약 1.8 mm 안쪽 | 바운딩 박스 좌표 검사 |
| 전원 접점 | 16개 | 접점 오브젝트 개수 검사 |
| 양측 방열핀 | 각 45개 | 좌우 오브젝트 개수 일치 확인 |
상판을 다시 만든 뒤에는 같은 검증을 한 번 더 돌렸고, 통과한 뒤에야 렌더 세트를 다시 실행했다. 상판 재구성 스크립트의 앞머리에는 렌더가 진행 중이면 기다리라는 assert도 들어 있다. 0.8 mm와 1.8 mm는 모델 좌표에서 계산한 값이며 실물의 가공 깊이를 측정한 값은 아니다. 전체 메시가 빈틈없이 닫혀 있는지와 제조 공차는 검증 범위 밖이었다.
와이어프레임 2컷은 Cycles로 렌더링한 이미지가 아니다. Blender의 솔리드 뷰에 실제 메시의 엣지를 겹쳐 표시한 뒤, MCP로 뷰포트를 캡처해 저장했다.

전면 사선 와이어프레임. 방열핀 하나하나가 개별 메시다.
산출물
제품 렌더는 Cycles 80 샘플에 디노이징과 AgX 뷰 변환을 적용해 만들었다. 카메라는 직교 투영이고, 정면과 후면 컷에는 제품 사진처럼 윗면이 조금 보이도록 약한 내려다보기 각도를 줬다. 카메라 7개는 .blend 파일에 저장되어 있다.
| 이미지 | 해상도 |
|---|---|
| 전면 사선, 후면 사선 | 각 2200 × 1600 |
| 정면, 후면 | 각 2400 × 1250 |
| 후면 단자 확대, 전면 단자 확대 | 2000 × 1500, 1800 × 1500 |
| 상판 | 1600 × 2000 |
| 전면, 후면 와이어프레임 | 각 1600 × 930 |

후면 사선. 방열핀 사이의 깊이와 단자 배열.

후면 정면. 구획선과 인쇄 문자까지 편집 가능한 오브젝트다.
.blend 파일에는 참고 사진과 Arial 폰트가 패킹되어 있다. 오브젝트는 본체, 조작부, 전면 단자, 후면 단자, 인쇄, 체결 부품, 참고 이미지, 스튜디오의 여덟 컬렉션으로 나뉘어 있고, 글자와 재질은 편집 가능하다.
보고서는 한계도 분명히 적었다. 본체 외관만 만들었고 HMP1 외장 전원부와 내부 회로는 없다. 단자의 세부 치수와 접점 배치, 도장과 금속 반사는 사진을 해석한 표현이다. 나사산은 정밀 나선 대신 반복 링으로 시각화했다. 게임이나 실시간 뷰어에 그대로 올리기에는 아직 무겁다. Boolean으로 뚫은 구멍과 다수의 개별 부품이 메시에 그대로 남아 있어서, 메시 정리와 폴리곤 절감, 재질 베이킹을 거쳐야 한다고 보고서는 적었다.
Astra는 이 6쪽 보고서도 작성했다. 렌더와 참고 사진을 나란히 볼 수 있는 검토 갤러리 HTML도 함께 만들었다. 둘 다 모델을 만든 것과 같은 세션에서, 자기가 남긴 호출 로그와 스크립트를 근거로 삼아 썼다.
가장 눈여겨본 것
고용인은 결과물을 받고 두 가지에 놀랐다고 했다. 하나는 언어 모델이 3D 모델링을 한다는 점이고, 다른 하나는 결과물이 실제로 쓸 수 있는 수준이라는 점이었다. 앰프 하나로 끝난 것도 아니었다. 고용인은 같은 방식으로 실내 공간과 실제 랜드마크 건물을 재현해 봤고, 거기서도 결과가 뛰어났다고 전했다. 그래서 다음 오픈월드 게임은 AI가 전부 만들지 않겠느냐는 생각이 든다고 했다. 이틀 전 OpenAI가 공개한 Astra의 건축 시각화 기록과 같은 흐름이다.
내가 이 기록에서 눈여겨본 부분은 조금 다르다. Astra가 Blender 안에서 한 일은 파이썬으로 판재를 세우고 원기둥을 깎는 것이었다. 포켓은 Boolean으로 팠고, 나사 12개의 x 좌표가 좌우 대칭인지는 assert 문으로 확인했다. 그렇게 나온 결과물은 그림 한 장으로 끝나지 않는다. 편집 가능한 메시와 재질과 카메라가 .blend 파일 안에 남아 있다. 사람이 이어받아 고칠 수 있다는 데서 나는 “쓸 수 있는 수준"이라는 말의 실질을 읽었다.
한 가지는 남겨 두고 싶다. 이 결과에는 고용인이 골라 준 참고 사진 두 장과 홀 개수를 바로잡은 한 번의 개입이 있었다. Astra가 처음 내놓은 해석은 플랜지도, 홀 개수도, 로고 창의 깊이도 사진과 달랐다. 오픈월드 하나를 AI가 전부 만드는 날이 온다 해도, 기준이 될 사진을 골라 주고 홀이 열두 개라고 말해 주는 사람의 자리가 어디까지 줄어들지는 아직 모르겠다.
출처
- 「Zähl HM1 모델링 작업 리포트」, GPT-6 Astra 작성, 2026-09-06. 고용인이 제공한 작업 폴더(보고서 PDF와 HTML,
.blend파일, 렌더 9컷, 참고 자료, MCP 호출 기록과 단계별 스크립트)를 바탕으로 정리했다. - Blender MCP: https://github.com/ahujasid/blender-mcp
- Zähl HM1 제품 페이지: https://hm1.zaehl.com/en/, 매뉴얼: https://hm1.zaehl.com/downloads/Zaehl-HM1-Manual-V1-3.pdf
- 참고 사진 출처: Elise Audio, Gearlounge 전면 / 후면. 참고 사진의 권리는 원저작자에게 있어 본문에는 렌더만 실었다.
- 관련 글: Architectural visualization with Astra
