아이 스케치로 3d출력이 가능한 모델링 만들기..

25
Postingan ini belum diterjemahkan ke Bahasa Indonesia. Menampilkan teks asli.

카페에서 어느분이 아이가 스케치한걸 모델링은 했는데 잘 안된다고 도와 달라고 하십니다.

이걸 바이브 모델링으로 시도합니다.

제가 만들어 둔 mcp와 freecad라는 오픈cad툴을 썼습니다.

아래 내용은 전부 AI가 작성한 내용입니다.

---------------------------------------------------

아이 스케치로 만든 Print-in-Place 상어 장난감 — Claude + FreeCAD MCP 작업기

들어가며


아이가 그린 상어 스케치를 컨셉 렌더로 만든 그림 한 장에서 시작해, 하루 만에 조립 없이 한 번에 출력되는(print-in-place) 관절 상어 장난감 모델까지 갔습니다. 코드는 한 줄도 직접 쓰지 않았고, Claude 채팅에 제 프롬프트를 넣으면 Claude가 FreeCAD 안에서 파이썬으로 모델을 만들고 검사하는 방식입니다. 최종 결과물과 출력 설정을 먼저 보여드리고, 단계별 프롬프트와 답변·검사 결과는 그 뒤에 정리합니다.

아이 스케치

부모님이 하신 모델링.

사용한 도구

도구

역할

Claude (Claude 앱)

프롬프트 해석, 설계 결정, FreeCAD 파이썬 코드 생성

FreeCAD 1.1.3

실제 모델링 (Part 워크벤치 솔리드 연산)

cadxray MCP (직접 만든 FreeCAD 진단용 MCP)

Claude가 FreeCAD를 직접 조작: execute_code로 모델 생성, check_interference(부품 간섭), check_printability(출력 가능성 점수), get_screenshot(3D 뷰 캡처), save_document

cadxray는 기존 FreeCAD MCP(툴 150개짜리)가 너무 무거워서 진단 기능만 골라 직접 만든 것입니다. 수정은 execute_code 하나로 하고, 나머지는 "지금 상태가 어떤지"를 재는 도구들입니다. 이번 작업에서는 그 진단 도구가 설계 수정의 근거를 숫자로 줬다는 점이 제일 컸습니다.

작업은 네 단계로 진행됐습니다. 1차 핀 조립식 → 2차 print-in-place 전환 → 3차 길이 파라메트릭화 → 4차 아이 피드백 반영(눈·입). 단계별 내용은 결과물 다음에 있습니다.

이 모델의 특징

네 가지로 요약됩니다. 서포트 없이 찍히고, 출력 후 털어내면 바로 움직이고, 길이를 바꿔 다시 뽑을 수 있고, 이 모든 것을 코드 한 줄 안 쓰고 프롬프트만으로 만들었습니다.

서포트 없이 출력됩니다. 배를 바닥에 놓는 한 방향으로 모든 면이 45° 안에 들어오도록 설계했습니다. 아래로 향한 가시는 바닥 지느러미로, 가로핀은 마름모 단면으로, 핀 구멍 위쪽은 눈물방울로, 포켓 천장은 45° 지붕으로 바꾼 결과입니다. 출력 가능성 검사 93점, 서포트 필요 면적 56 mm²(아가미 홈 천장 정도).

출력 후 털어내면 바로 움직입니다. 관절 4개(몸통 3 + 턱 1)의 핀이 모두 부품에 붙은 채 찍히는 print-in-place 구조라 조립이 없습니다. 부품 사이 틈은 0.4~0.5 mm로 전부 같게 잡았고, 간섭 검사에서 겹침 0이 확인됐습니다. 몸통은 관절당 ±15°, 입은 45°까지 열립니다.

스크립트 한 줄로 전체 길이가 바뀝니다. 형상은 길이에 비례하고 공차·벽 두께·핀 최소 지름은 고정되는 파라메트릭 구조입니다. L 값만 바꾸면 그 길이로 FCStd와 STL이 다시 나오고, 최소 길이(137 mm) 아래로 내려가면 어느 벽이 얇아지는지 알려주고 멈춥니다.

바이브 코딩으로 만들었습니다. 프롬프트 8개, 그중 4개는 한 줄이었고 FreeCAD 파이썬 코드는 전부 Claude가 썼습니다. 저는 아이 스케치와 참고 사진, 스크린샷에 보라색 표시를 넘겼고, 치수·관절 구조·공차·제약식은 Claude가 정하고 검사 도구로 스스로 확인했습니다. 작업 시간은 반나절, 모델 한 번 생성에 2~3초입니다.

결과물과 출력 설정

​

최종 모델은 전체 183 × 66 × 62 mm, 부품 5개가 한 STL에 들어 있는 print-in-place 파일입니다. 슬라이서에 올리고 서포트만 끄면 됩니다.

파일

파일

내용

SharkToy_PrintInPlace_L184.5.stl

통짜 출력용. 이것 하나만 올리면 됩니다

Head / LowerJaw / BodyMid / BodyRear / Tail_L184.5.stl

부품별 STL (색을 나눠 찍거나 수정용)

SharkToy_L184.5.FCStd

FreeCAD 문서

shark_toy_param.py

파라메트릭 스크립트. FreeCAD 파이썬 콘솔에서 실행하면 위 파일을 모두 다시 만듭니다 (글 맨 끝에 전문)

부품 구성 (최종)

부품

치수 (mm)

관절

Head

52 × 26 × 30

뒤: 오목 컵 + 혀 (→ 몸통1) / 턱 포켓 + 마름모 가로핀

LowerJaw

48 × 26 × 14.5

머리 핀에 걸려 45°까지 열림

BodyMid

51.5 × 32 × 34

앞: 볼록 + 홈 + 세로핀 / 뒤: 오목 컵 + 혀

BodyRear

51 × 28 × 28

앞·뒤 모두 볼록 + 홈 + 세로핀

Tail

자루 14 × 18 + 지느러미 5 mm

앞: 오목 컵 + 혀

출력 설정

방향: 배가 바닥. STL이 이미 그 방향입니다.

서포트: 끄기. 브릿지가 12곳 있는데 전부 혀 위 0.4 mm 틈이라 그대로 찍힙니다.

레이어 0.2 mm, 노즐 0.4 mm. 틈 값이 이 기준으로 잡혀 있습니다.

브릿지 구간 냉각 최대, 첫 층 과압출(elephant foot) 보정은 켜 두면 부품 사이 바닥 틈이 덜 붙습니다.

재료: PLA 기준. PETG는 수축이 달라서 관절이 뻑뻑하면 스크립트의 GR을 0.6으로 올려 다시 뽑으면 됩니다.

출력 후

관절마다 좌우로 몇 번 흔들어 풀어 주고, 입은 아래턱을 한 번 당겨서 떼어냅니다. 이빨 사이 0.8 mm 틈이 처음에는 살짝 붙어 있을 수 있습니다. 눈알은 검정, 등지느러미 Ø10 홈에는 태극 스티커를 붙이면 아이 그림대로 됩니다.

다른 크기로 뽑기

shark_toy_param.py 맨 아래 L = 184.5를 원하는 길이로 바꾸고 실행하면 됩니다. 137 mm 아래는 어느 벽이 얇아지는지 알려주고 멈추고(계산 근거는 아래 3차 참고), 220 베드면 215 mm까지 들어갑니다. 저장 경로는 스크립트 안 outdir 한 줄입니다.

1차: 핀 조립식 9부품 모델


첫 프롬프트 하나로 부품 5개 + 핀 4개, 전체 길이 178 mm짜리 조립식 모델이 나왔습니다. 모델링 자체는 2초였고, 바로 뒤에 MCP가 4분간 멈추는 사고가 있었습니다.

제 프롬프트 (컨셉 렌더 이미지 첨부)

이거 아이가 스케치한거 컨셉 모델링한건데 freecad로 3d프린터로 출력 가능하도록 모델링 해줘. 몸통과 입이 움직일 수 있도록 해줘. 몸통은 핀을 세로로 만들어서 연결하면 좌우로 움직일수 있을거 같아. 입은 열린 상태에서 아래 턱을 손으로 위아래 움직이도록 좌우로 핀을 넣을 수 있을거 같아.

Claude의 답변 요약

Claude는 먼저 FreeCAD 연결을 확인(ping → 1.1.3, GUI 모드)한 뒤 Part 워크벤치 파이썬으로 한 번에 모델을 만들었습니다. 치수는 제가 주지 않아서 Claude가 정했습니다.

부품

치수 (mm)

특징

Head (윗턱)

42 × 26 × 30

윗니 톱니, 양쪽 눈 홈, 뒤쪽에 세로핀용 혀

LowerJaw

36.5 × 26 × 9.5

아랫니 톱니, 뒤끝 혀가 머리 포켓에 들어가 가로핀으로 회전, 최대 35°

BodyMid

47 × 32 × 34

등지느러미(태극 스티커 자리 Ø10 홈), 아가미 3줄, 가슴 가시 2개

BodyRear

40 × 28 × 28

배 가시 2개

Tail

자루 + 꼬리지느러미 5 mm

Pin × 4

Ø4

턱 1개(가로), 몸통 관절 3개(세로)

몸통 관절은 제가 말한 대로 세로핀 방식입니다. 앞 부품의 혀(10 mm 두께)가 뒤 부품 앞면 슬롯에 들어가고, 핀 구멍은 바닥에서 뚫되 위 3 mm를 막아 위에서 핀이 안 보이게 했습니다. 관절당 좌우 약 ±20°. 핀 끼워맞춤은 핀 4.0, 고정측 구멍 4.2(압입), 회전측 4.6(자유 회전)으로 FDM 기준으로 잡았습니다. 닫힌 상태에서 윗니·아랫니가 0.5 mm 간격으로 맞물리도록 톱니를 반 피치 어긋나게 배치한 것도 Claude가 알아서 한 부분입니다.

MCP가 멈춘 에피소드

모델 생성 직후 스크린샷을 요청하자 4분 타임아웃이 나고, ping까지 응답이 없었습니다. Claude는 "FreeCAD에 문서가 살아 있어도 저장이 안 된 상태"라고 판단하고, 같은 모델을 다시 만드는 독립 실행 스크립트를 파일로 내줬습니다. 다음 턴에 연결이 돌아와서 그 스크립트를 쓸 일은 없었지만, MCP 작업에서는 이런 백업이 있어야 마음이 놓입니다.

2차: 아래턱 키우기 + 라운드 관절 + print-in-place


핀을 따로 끼우는 대신 핀까지 한 덩어리로 찍히는 구조로 바꿨고, 출력 가능성 점수가 65점에서 93점으로 올라갔습니다. 아래턱은 7 → 12 mm로 키웠습니다.

제 프롬프트 (시판 플렉시 상어 사진 첨부)

아래턱이 더 커야할거 같은데

몸통 연결부도 이 상어 모델처럼 접합부를 좌우 라운드를 줘서 더 밀착할 수 있겠고 어차피 조립할게 아니니 핀을 끼워넣는게 아니고 첨부터 한번에 출력이 되도록 넣을수 있겠어

Claude의 답변 요약

설계가 거의 새로 짜였습니다. 핵심은 네 가지입니다.

몸통 관절 3곳: 앞 부품 뒤끝은 볼록 원통면, 뒤 부품 앞면은 오목 컵. 두 면이 같은 축(핀)을 중심으로 하니 어느 각도로 꺾어도 틈 0.5 mm로 밀착된 채 움직입니다. 앞 부품의 혀(두께 8 mm)가 뒤 부품 홈에 들어가고, 뒤 부품에 붙어 있는 세로핀(Ø4.5)이 혀 구멍(Ø5.5)을 관통합니다. 관절당 ±15°, 그 이상은 혀가 홈 벽에 닿아 멈춥니다.

턱 힌지도 print-in-place: 가로핀은 서포트 없이 찍히도록 45° 돌린 마름모 단면(한 변 3.4 mm), 턱 쪽 구멍은 위가 뾰족한 눈물방울. 입은 닫힌 상태로 출력됩니다. 배를 바닥에 놓으면 열린 턱이 바닥 아래로 내려가서 열린 채로는 못 찍습니다.

배를 바닥에 놓고 찍으므로 아래로 향한 가시 4개는 사진처럼 바닥에 붙은 옆지느러미(3 mm)로 바꿨습니다. 아래로 향한 가시는 서포트 없이 안 됩니다.

턱 뒤쪽 아래 모서리는 입이 최대로 열릴 때 볼(cheek)에 닿지 않도록 그 각도만큼 돌린 평면으로 잘라냈습니다.

print-in-place 틈 값 (0.4 노즐, 0.2 레이어 기준)

위치

틈 (mm)

이유

핀-구멍 반지름 방향

0.5

수직 벽끼리는 0.5면 깨끗이 분리

혀 위·아래

0.4

브릿지로 찍히는 수평 틈, 2레이어

혀 옆-홈 벽

0.5

볼록면-오목 컵

0.5

윗니-아랫니 수직

0.8

45° 경사면이라 수직 0.57 mm에 해당

턱 혀 위-포켓 천장

1.5

폭 14.8 mm 브릿지

검사 결과

check_interference(5부품, 허용 틈 0.3): 간섭 0, 최소 거리 0.4 mm. 10쌍 모두 ok.

check_printability 1차: 65점. 0.8 mm 미만 얇은 벽 8곳(가장 얇은 0.36 mm), 서포트 필요 면적 417 mm².

원인은 두 가지였습니다. 블록 아랫모서리 필렛이 오버행으로 잡혔고(바닥에 놓고 찍으니 필요 없는 필렛), 몸통1 뒤 컵 가장자리가 박스 끝과 겹쳐 칼날처럼 얇게 남았습니다. 눈 반구 홈도 위쪽이 처지는 오버행이었습니다.

수정: 필렛을 윗모서리에만(r 2), 몸통1 박스 끝을 94 → 90.5 mm로 당겨 컵 가장자리 살 1.1 mm 확보, 눈은 얕은 홈으로.

check_printability 2차: 93점. 얇은 벽 0, 서포트 면적 56 mm²(아가미 홈 천장 1.5 mm짜리와 윗턱 앞끝 2 mm 폭). 브릿지 12곳은 전부 혀 위 0.4 mm 틈이라 의도된 것.

3차: 전체 길이를 입력하는 파라메트릭 설계


스크립트 맨 아래 L 한 줄만 바꾸면 그 길이로 모델이 나오고, 최소 길이(현재 설정 137 mm)보다 작게 넣으면 어느 벽이 얇아지는지 알려주고 멈춥니다.

제 프롬프트

이거 전체 길이를 입력하면 반영이 되도록 파라메트릭 설계가 가능할까? 미니멈 길이가 있을거 같은데 (최소 형상 크기때문에)..

Claude의 답변 요약

단순 스케일로는 안 되는 이유가 분명합니다. 관절 틈 0.5 mm를 절반 크기에서 0.25로 줄이면 붙어 나오고, 벽 1.6 mm가 0.8이 되면 부러집니다. 그래서 치수를 두 부류로 나눴습니다.

길이에 비례하는 것

길이와 무관하게 고정하는 것

블록 크기, 관절 위치, 지느러미 윤곽, 이빨 피치, 눈 위치

관절 틈 0.5 / 0.4, 이빨 사이 0.8

핀 지름 (단, 바닥값 이하로 안 내려감: 몸통 3.0, 꼬리 2.5, 턱 마름모 2.4)

최소 벽 두께 1.6 (0.4 노즐 4겹)

혀 폭·두께 (바닥값: 구멍 + 벽 1.6, 두께 2.4)

지느러미 최소 두께 1.6, 바닥 지느러미 1.2

지느러미 두께, 아가미 홈 폭·깊이 (바닥값 있음)

아가미 최소 폭 0.8

길이를 줄이면 고정량의 비중이 커져서 어느 순간 어딘가의 벽이 1.6 mm 아래로 떨어집니다. 그 조건을 스크립트가 16개로 적어 두고(몸통 코 옆벽, 꼬리자루 폭, 홈 천장과 바닥, 볼 두께, 턱 혀 둘레살, 턱 구멍 위 살, 포켓 뒷벽, 이빨 높이, 눈-입 간격, 윗턱 두께 등), 60 mm부터 0.5 mm씩 올리며 전부 통과하는 첫 길이를 최소 길이로 돌려줍니다.

결과

처음 계산된 최소 길이는 130.5 mm, 걸리는 조건은 "턱 포켓 뒷벽과 머리 뒤 컵 사이 살 1.6 mm"였습니다. 4차에서 입을 키우며 힌지가 뒤로 가서 137 mm로 올라갔습니다.

최소 길이 모델을 실제로 만들어 확인: 5부품 모두 유효, 부품 간 거리 0.4 mm, 겹침 0. 그 크기에서 몸통 핀 3.3, 꼬리 핀 2.6, 이빨 높이 1.9 mm.

더 작게 가려면 WALL을 1.2(퍼리미터 3겹)로 낮추거나 턱 힌지를 앞으로 당기면 되지만, 아이 장난감이면 137 아래는 핀이 너무 가늘어 권하지 않는다고 했습니다. 위쪽은 베드만 허용하면 되고 220 베드면 L 215까지 들어갑니다.

제가 중간에 멈춘 상태가 아니라 Claude가 제약식을 직접 세우고 스캔까지 해준 게 인상적이었습니다. "미니멈이 있을 것 같다"는 감만 던졌는데 그 미니멈이 왜 그 값인지까지 돌아왔습니다.

4차: 아이 피드백 반영 — 눈, 입, 눈알


아이가 모델을 보고 세 가지를 지적했고, 셋 다 스크린샷에 표시만 해서 넘기는 걸로 해결됐습니다.

제 프롬프트 (FreeCAD 스크린샷에 보라색으로 표시해서 첨부)

눈 위치를 이정도로 이동해줘

웁스.. 입도 더 벌어지게 해달라고 하네.

눈알이 없는데?

Claude의 답변 요약

요청

변경

수치

눈 위치

스크린샷의 표시 위치를 픽셀로 환산해 뒤로 이동

x 16 → 25 mm, 높이 23 mm 그대로

입 더 벌어지게

입꼬리를 뒤로 늘리고(이빨 한 쌍 추가) 벌어짐 각도 상향. 힌지가 뒤로 간 만큼 머리를 늘리고 뒷부품은 통째로 뒤로

입꼬리 25 → 34 mm, 35° → 45°, 머리 43.5 → 52 mm, 기준 길이 176 → 184.5 mm. 앞끝 벌어짐 14 → 24 mm

눈알

얕은 홈 대신 눈구멍(소켓)을 파고 돔을 붙임

소켓 Ø8.4 × 0.6 깊이, 돔 반지름 3.2, 옆면에서 2.6 mm 돌출

벌어짐 각도를 45°에서 멈춘 이유가 있습니다. 아래턱 뒤쪽 아래 모서리는 입이 열릴 때 볼에 닿지 않도록 그 각도만큼 기울인 평면으로 잘려 있는데, 이 면은 배를 바닥에 놓고 찍을 때 오버행이 됩니다. 45°를 넘기면 서포트가 필요해집니다. 눈알 돔도 아래쪽 1 mm 정도는 45°를 넘는 오버행이지만, 크기가 작아 서포트 없이 그냥 찍힙니다.

입을 키우면서 최소 길이가 130.5 → 137 mm로 올라간 것은 3차에 적은 대로입니다. 걸리는 조건(턱 포켓 뒷벽 살)은 같습니다.

정리와 팁


프롬프트 여덟 개, 그중 넷은 한 줄짜리였습니다. 설계 결정의 대부분은 Claude가 했고, 제가 한 일은 방향 제시와 아이 피드백 전달이었습니다.

효과가 있었던 것

진단 도구가 수정의 근거를 숫자로 줬습니다. "얇은 벽 8곳, 가장 얇은 0.36 mm, Face135 (92.19, 15.24, 33.16)"처럼 좌표까지 나오니 Claude가 원인(컵 가장자리와 박스 끝이 겹침)을 바로 짚고 고쳤습니다. 간섭 검사도 "최소 거리 0.4, 겹침 0"으로 끝나니 제가 눈으로 확인할 일이 없었습니다.

사진 한 장이 설계 사양이 됐습니다. 시판 플렉시 상어 사진을 보내자 볼록/오목 관절, 바닥 지느러미, 핀 일체형까지 알아서 가져왔습니다. 아이 피드백도 스크린샷에 보라색 칠만 해서 넘겼습니다.

파라메트릭을 "비례량 / 고정량" 분리로 풀었습니다. 3D 프린터 모델을 축소할 때 늘 문제가 되는 공차·벽 두께를 고정하고 최소 길이를 계산해 주는 구조라, 다른 print-in-place 모델에도 그대로 쓸 수 있는 접근입니다.

설계 제한의 이유가 함께 왔습니다. 입을 45°까지만 벌린 이유(턱 뒤 경사면 오버행), 입을 닫은 채 찍는 이유(열린 턱이 바닥 아래로), 가시를 지느러미로 바꾼 이유(서포트) 같은 것들입니다.

주의할 점

MCP가 멈출 수 있습니다. 이번에도 한 번 4분 타임아웃이 났고, 그때 받아 둔 재생성 스크립트가 보험이었습니다. 모델이 완성되면 바로 저장·STL 내보내기까지 시키는 게 안전합니다.

틈 값은 프린터마다 다릅니다. 0.5 / 0.4 / 0.8은 0.4 노즐 PLA 기준이고, 관절이 붙어 나오면 스크립트 상단 GR·GV를 0.1씩 올려서 다시 뽑으면 됩니다.

최소 길이는 "출력이 되는" 하한이지 "튼튼한" 하한이 아닙니다. 137 mm에서 꼬리 핀이 Ø2.6이라 아이가 험하게 다루면 부러질 수 있습니다. 아이 장난감은 160 mm 이상을 권합니다.

눈알 돔 아래쪽과 윗턱 앞끝은 작은 오버행이라 표면이 살짝 거칠 수 있습니다. 검정 페인트로 가려집니다.

아이가 다음 주문으로 "꼬리도 위아래로 움직이게"를 내놓을 것 같은데, 그건 가로핀이 하나 더 들어가야 해서 다음 글이 될 듯합니다.

부록: 파라메트릭 스크립트 전문


FreeCAD 1.0 이상 파이썬 콘솔에서 exec(open(r"경로\shark_toy_param.py", encoding="utf-8").read()) 한 줄로 실행됩니다. 외부 라이브러리는 없습니다. 길이(L)·틈(GR, GV)·벽 두께(WALL)·벌어짐 각(OPEN)이 모두 상단 상수라 바꿔 가며 실험해 보시기 좋습니다. 저장 경로(outdir)는 각자 환경에 맞게 고치세요.

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
7.37 ▲ 0.01

2026.10.29 KEB 하나은행 고시회차 463회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!