OpenSCAD: 프로그래머를 위한 솔리드 3D CAD 모델러

OpenSCAD the Programmers Solid 3D CAD Modeller

openscad.org ▲ 118 댓글 93 b-man

요약

OpenSCAD는 마우스 대신 코드로 3D 부품을 설계하는 무료 CAD 프로그램입니다.

OpenSCAD 공식 홈페이지가 HN에 올라왔습니다. 마리우스 킨텔이 관리하는 오픈소스 프로젝트이며, 홈페이지에는 새 입문서 'This is OpenSCAD'가 나왔다는 소식도 실려 있습니다.

왜 중요한가

  • 설계가 코드라서 매개변수만 바꾸면 같은 부품을 여러 크기로 다시 뽑아낼 수 있습니다.
  • 예술 작업용인 Blender와 달리 기계 부품처럼 치수가 중요한 설계를 겨냥합니다.

핵심 내용

  • 대화형 편집기가 아니라 컴파일러처럼 스크립트를 읽어 모델을 만들어 냅니다.
  • 모델링에는 CSG(기본 도형을 더하고 빼서 입체를 만드는 방식)와 2D 윤곽 돌출을 씁니다.
  • 3D 모델은 STL·OFF 형식으로 읽고 쓰며, 2D 윤곽은 DXF 파일로 주고받습니다.
  • 리눅스·윈도·맥에서 돌아가는 무료 소프트웨어이며 GNU GPL 2 라이선스로 배포됩니다.

HN 반응

  • 필렛(모서리를 둥글게 다듬는 처리)이 어려워 FreeCAD·CadQuery를 권하는 쪽과, 둥근 기본 도형부터 조합하면 된다는 쪽이 맞섰습니다.
  • C처럼 보이지만 같은 범위 안의 변수는 마지막 값 하나만 갖는 선언형 언어라서 헷갈린다는 지적이 여러 번 나왔습니다.

댓글

30개 표시 · 전체 93개
  1. Mazer23 HN

    저는 Claude Code로 openscad를 꽤 오랫동안 써서 로봇용 캡스턴(로프 구동) 관절을 만들어 보려 했습니다. 잘 되긴 했지만 에이전트 쪽 작업과 속도에 문제가 좀 있었어요. 결국 돌아가는 길을 택해서, openscad가 쓰는 오픈소스 라이브러리 일부를 바탕으로 직접 에이전트형 CAD 모델링 하니스를 만들었습니다. 지금은 이걸 독립된 제품으로 만들어 보려 하고 있습니다. http://partforge.ai 에서 확인해 보세요.

  2. socializer HN

    프로그래머들이 3D 디자인을 프로그래밍으로 환원하려 한 역사는 길어요. 저는 1990년대에 한창 유행했던 POV-Ray가 아직도 기억나요. 하지만 결국 코드를 편집해서 형상을 반복해 다듬는다는 건 정말 불편한 방식이에요. 만화를 SVG로 손수 짜서 그리는 것과 비슷하죠. 힘들이지 않는 상호작용이 최고예요.

    많은 CAD 프로그램이 매개변수 모델링, 스크립트 언어, Scratch 같은 "블록 프로그래밍" 도구를 넣어 두는데, 특정 조립품에 정말 유연성이 필요할 때를 위한 거예요. 그게 있어야 할 자리가 바로 거기고요. 인터랙티브 모델러의 애드온이요. 나선을 그리려고 코드를 쓸 필요는 없지만, 크기를 조절한 사본이 가변적인 개수로 필요하다면 그걸 위한 매개변수 도구가 있죠.

    이런 도구가 LLM에게는 쓸모 있을 수 있겠다 싶어요. UI에서 컴퓨터 사용 작업을 하는 것보다 프로그램을 생성하는 쪽이 비용이 적게 드니까요. 하지만 사람에게 OpenSCAD로 시작하라고 권하지는 않을 거예요.

  3. erjiang HN

    OpenSCAD가 작동하는 방식(CSG) 때문에 "일반" CAD 프로그램에 비해 어려운 일이 많다는 점은 알아 두셔야 합니다. 여러 모서리에 임의로 필렛을 주는 것처럼 흔한 작업조차 표현하거나 처리하기가 그냥 어렵습니다.

    더 강력한 선택지는 오픈소스 Open Cascade 지오메트리 커널 위에서 만들어진 FreeCAD, cadquery, build123d입니다. STEP 파일을 가져오고 내보낼 수 있어서 더 넓은 CAD 생태계와도 호환됩니다. (여러분이 좋아하는 LLM에게 이런 도구를 물어보거나 시켜 볼 수도 있습니다.)

  4. jacquesm HN

    그건 기존 CAD 시스템에서 하던 방식으로 생각하시기 때문입니다. 조각가처럼 작업을 순서대로 하시는 거죠. 덩어리를 하나 잡고 조금씩 깎아 내는 식으로요. OpenSCAD를 효과적으로 쓰는 요령은 조금씩 깎아 나가는 게 아니라 원하는 것을 생성하는 것입니다.

  5. jeffbarr HN

    저는 두 방식을 섞어 쓸 때 가장 잘 되더군요. 어떤 때는 도형을 합쳐서(union) 원하는 모양을 만드는 게 가장 쉽고 실용적이고, 어떤 때는 빼거나(difference) 교집합(intersect)을 구하는 쪽이 가장 쉽습니다.

  6. jacquesm HN

    하지만 그러면 복잡한 형상에는 베벨을 전혀 줄 수 없고, 결국 만들어질 물체를 제대로 기술할 수 없게 됩니다. "좋은" CAD란 컴퓨터 속 표현이 만들려는 물체에 최대한 가까운 것을 뜻합니다. 그래야 후속 시스템이 노즐과 툴헤드를 정확히 골라 원하는 결과물을 만들어 낼 수 있으니까요. 불가능한 물체를 만들어 내면 슬라이서나 경로 계산기가 근사치를 내놓습니다. 그래도 괜찮은 경우가 있긴 하지만, 보통은 물체끼리 맞물려야 하는데 근사치 두 개를 맞물리면 금방 제대로 안 맞는다는 걸 알게 됩니다.

  7. Brian_K_White HN

    필렛 문제든, OpenSCAD에서 꼭 필요한 다른 100가지 흔한 작업이든 해결해 주는 요령 같은 건 없습니다.

    오해는 마세요. 저도 OpenSCAD를 좋아하고 가능한 한 많이 씁니다. 읽을 수 있고, diff도 되고, git으로 관리도 되는 1k짜리 일반 텍스트로 설계 전체를 표현할 수 있다는 것만으로도 탁월하니까요.

    많은 걸 해낼 수 있고, 어떤 작업은 다른 어떤 도구보다 쉽고 간단하게 할 수 있고, 일부는 우회할 수 있고, 어떤 때는 원하는 것에 거의 가까운 정도로 충분히 쓸 만한 결과를 얻을 수 있고, 한계 안에서 쓸 생각만 있다면 특정 종류의 작업에는 사실상 이상적입니다.

    하지만 "한계 안에서 쓰라"는 건 범용 도구가 할 수 있는 말이 아닙니다.

    형상이 우연히 불리언 연산에 잘 맞아떨어지면 필렛이 가끔 쉽게 나오기는 합니다. 예를 들어 구 8개의 hull로 모서리가 둥근 속 빈 상자를 만들고(translate, copy, mirror로 손쉽게 채울 수 있죠) 그보다 작은 사본을 하나 더 잘라 내는 식으로요. 짠, 안쪽과 바깥쪽 필렛이 온갖 종류로 짧은 일반 텍스트 코드 10~15줄이면 끝납니다. 게다가 파일 맨 위에 사람이 알아볼 이름을 붙인 아주 단순한 변수들만 따로 모아 두면 전체가 완전히 매개변수화되고요.

    하지만 그건 아무 의미가 없습니다. 골라 낸 대표 사례일 뿐이고, 현실의 나머지 무한한 경우는 코드 짜기가 고통스러운 수준에서, 코드 짜기도 고통스럽고 컴퓨터도 고통스러운 수준(minkowski)을 거쳐, 아예 불가능한 수준까지 걸쳐 있습니다.

    저는 OpenSCAD를 좋아하지만, 제대로 쓰기만 하면 된다는 식의 암시는 틀렸습니다.

  8. jacquesm HN

    필렛 문제는 문제가 아닙니다. 복잡한 걸 다 만들어 놓은 뒤에 필렛을 적용하려 들면 문제가 되죠. 하지만 이미 필렛이 들어간 프리미티브를 변형해서 생성하면 결과 형상을 훨씬 쉽게 통제할 수 있습니다. OpenSCAD에서 거의 불가능한 건 프리미티브 여러 개를 먼저 합친 다음에 그 결과 형상에 연산을 하나 더 하는 것입니다. 그건 정말 도구와 싸우는 짓이죠. 대신 프리미티브 바로 위에 원하는 모서리 처리가 이미 되어 있는 층을 하나 정의해 두면, 그것들을 합쳐도 필렛은 프리미티브에 있던 자리에 그대로 남습니다. 남는 문제는 필요할 때 그걸 매끄럽게 이어 주는 건데, 아주 간단한 요령을 찾았습니다. 필렛 반지름을 가진 구를 정의하고 그 구들의 묶음마다 hull을 만드는 겁니다. 그러면 틈이 있어도 메울 수 있습니다.

  9. vjvjvjvjghv HN

    어느 정도는 통하지만 금방 문제에 부딪힐 겁니다. 100% 정확하게 맞출 수는 없으니까요. 협업하고 정확한 형상을 만들어 내야 하는 전문 용도로 OpenSCAD를 쓰는 사람은 아무도 없다고 봅니다.

  10. Brian_K_White HN

    틀렸습니다. 당신도 새로운 얘기는 하나도 안 했으니, 제가 이미 한 말을 그대로 반복하겠습니다.

  11. Palomides HN

    약간 동어반복이긴 한데, OpenSCAD는 OpenSCAD가 좋은 용도에서만 좋습니다. 저는 매개변수 의존성이 아주 높은 형상만 빼면 거의 다 FreeCAD를 선호합니다. 게다가 FreeCAD 안에서 OpenSCAD도 쓸 수 있고요.

  12. WillAdams HN

    OpenSCAD의 훌륭한 점은 직육면체, 구, 원기둥으로 모델링하고 이것들을 수학적으로 배치하거나 늘이는 일을 쉽게 해 준다는 것입니다.

    OpenSCAD의 끔찍한 점은 쓰는 사람의 능력이 직육면체, 구, 원기둥을 배치하고 늘이는 데 수학을 얼마나 능숙하게 쓰느냐에 묶여 있다는 것입니다.

  13. jacquesm HN

    저는 수학을 못하는데도 OpenSCAD로는 CAD 업계의 '보통 도구들'로 하면 10배는 걸릴 꽤 근사한 것들을 만들 수 있습니다. 요령을 익히는 데 시간이 좀 걸리긴 했지만, OpenSCAD를 쓸 때 더 큰 문제는 관점의 전환이라고 생각합니다. 겉으로는 프리미티브로 하는 솔리드 모델링처럼 보이지만, 일단 '감을 잡으면' 방식이 완전히 달라집니다. 예를 들어 설명하는 게 아마 더 쉬울 겁니다.

    다른 기어와 맞물려야 하는 복잡한 기어를 만든다면 두 가지 방법이 있습니다. 하나는 원판 두 개를 알맞은 각도로 겹쳐 놓고 이를 깎아 내서 기어를 만든 다음, 비슷한 연산으로 다른 원판에서도 빼내 맞물리는 기어 한 쌍을 만드는 겁니다.

    제 생각에 훨씬 효율적인 다른 방법은, 지지대 역할을 하는 원판만 가지고 시작해서 모든 여유 간극과 접촉면을 고려해 매개변수로 기어 이를 그 위에 더해 가는 것입니다. 이렇게 하면 정말 중요한 면을 매개변수로 기술하기 때문에 훨씬 좋은 기어가 나오고, 모든 곳에 작은 필렛을 주는 것 같은 멋진 일도 할 수 있어서 물체가 최종적으로 제조 공정(기계 가공, 3D 프린팅)에서 나올 결과물에 훨씬 가까워집니다. 매개변수를 전부 정의하는 데 일이 좀 더 들지만, 최종 결과가 훨씬 낫고 결함이 생길 가능성도 훨씬 적습니다. 원하지 않는 것을 제거하는 게 아니라 원하는 것을 생성하기 때문입니다. OpenSCAD로 조각하는 방식도 쓸 수는 있지만, 그게 가장 좋은 사용법은 아닙니다.

  14. RobotToaster HN

    좋은 점도 있어요. 삼각함수 지식을 다시 새로 다지게 됐거든요...

  15. WillAdams HN
  16. dofm HN

    이 시리즈에 새로 나온 물리학 책이 있습니다.

    https://www.makershed.com/products/make-physics?variant=50414688075969

  17. WillAdams HN

    예약 주문 페이지에는 2026년 6월로 나와 있는데, 아무래도 출간이 늦어지고 있나 보네요?!?

  18. dofm HN

    저도 무슨 일인지는 잘 모르겠습니다. 그런데 영국 아마존에서는 종이책과 킨들 모두 재고 있음으로 올라와 있습니다.

  19. WillAdams HN

    고맙습니다!

    바로 주문했습니다.

    적당한 시일 안에 도착하면 좋겠네요.

  20. willis936 HN

    왜 매개변수형 형상만 예외로 두죠? FreeCAD도 매개변수형 CAD 도구인데요. OpenSCAD는 그냥 더 못한 버전이에요. 매크로 기능은 build123d보다 제한적이고, 내보낼 수 있는 건 평면으로만 이루어진 솔리드 바디뿐이잖아요. 진지하게 묻는데, 곡면을 내보내지도 못하는 CAD 도구 얘기를 왜 다들 하는 거죠?

  21. iririririr HN

    저는 예전(8년 넘게 전)에 FreeCAD와 SolidWorks를 쓸 수 있는 환경이었는데도 OpenSCAD로 프로젝트를 엄청 많이 했습니다. FreeCAD의 2D 기능 몇 가지에는 패치도 보냈고요.

    그래도 OpenSCAD를 쓴 이유는 신뢰성이었습니다. vim으로 코드를 쓰는 데 들인 시간이 제조에 보낼 수 있는 쓸 만한 stl 파일로 (헤헤, translate 되어) 이어진다는 걸 알았거든요. 다른 두 가지로는 시간의 절반을 버그, 크래시, 잘못된 내보내기를 상대하는 데 썼습니다.

    물론 편의 도구가 아쉬웠던 건 사실입니다. 대부분은 오픈소스 방법으로 해결할 수 있었을 텐데요(예: 베벨, 이음새를 부드럽게 하는 조이너, 나사산).

  22. loloquwowndueo HN

    이봐요, 8년 전 FreeCAD가 크래시도 잦고 버그투성이였던 건 맞지만 요즘은 훨씬 좋아졌어요.

  23. YuechenLi HN

    공정하게 말하면, 모서리에 임의로 필렛이나 블렌드를 주는 건 Parasolid나 ACIS 같은 커널에서도 일반적으로 어려운 문제입니다. 임의의 위상을 변형해야 하니까요. 본질적으로 꼭짓점, 모서리, 면을 짐작해서 다시 꿰매 붙이려는 일입니다.

  24. WJW HN

    맞는 말이지만, OnShape에서는 클릭 두 번이면 되는 걸 OpenSCAD에서는 항상 최소 20분은 생각하고 이것저것 시험해 봐야 합니다.

    OpenSCAD는 정말 멋지고 간단한 건 이걸로 먼저 하지만, 구멍 몇 개 뚫은 직육면체나 원기둥보다 조금이라도 복잡하면 "일반" CAD 프로그램으로 돌아가게 됩니다.

  25. moebrowne HN

    BOSL2 라이브러리를 쓰면 쉽습니다: https://github.com/BelfrySCAD/BOSL2/wiki/shapes3d.scad#module-fillet

  26. nayuki HN

    저는 3D 모델링의 주력 설계 도구로 OpenSCAD를 씁니다. 일은 해내고 있지만 쉽지 않고, 다른 사람에게 권하기도 어렵습니다. OpenSCAD는 사용자가 수학, 삼각법, 머릿속 시각화, 프로그래밍을 미리 갖추고 있어야 합니다. 포인트 앤 클릭에 더 친화적인 주류 CAD 프로그램과는 다르죠. 모서리에 필렛과 챔퍼를 주는 건 꽤 지루하고, 나사산을 폴리헤드론으로 기술하는 건 악몽이지만 저는 이런 난관을 넘었습니다.

    장점으로는 OpenSCAD의 이런 점이 좋습니다.

    • 소프트웨어가 오픈소스라서 가격이나 불법 복제가 장벽이 되지 않습니다. 원하는 컴퓨터에서 원하는 만큼 원하는 기간 동안 쓸 수 있고, 누가 뺏어 갈 수도 없습니다.

    • 프로그램이 작고 내려받기 쉽습니다. 몇 기가바이트씩 하는 거대한 소프트웨어 패키지가 아닙니다.

    • 매개변수를 변수로 선언하는 법을 아주 일찍 익히게 되고, 처음부터 모든 설계를 매개변수형으로 만드는 게 자연스럽게 느껴진다고 생각합니다.

    • 3D 모델이 텍스트라서 Git 버전 관리를 쓰고, 버전 간 diff를 보고, 일반 프로그래밍에 쓰는 개발자용 도구를 비슷하게 활용할 수 있습니다. 바이너리 파일 형식을 쓰는 CAD 프로그램은 자체 diff 도구와 버전 관리 시스템을 따로 갖춰야 할 것 같습니다.

    • 소스 코드를 읽으면 3D 모델을 어떤 사고 과정으로 만들었는지 따라갈 수 있고, 뒤의 연산들이 의존하는 연산 사슬 중간을 조심스럽게 수정할 수도 있습니다. 포인트 앤 클릭 CAD에서는 사슬 중간을 바꾸는 게 가능한지 저는 잘 모르겠습니다.

    • Manifold 렌더러는 예전 CGAL보다 훨씬 빨라서, 사람이 상호작용하기에 적당한 작업 주기가 나옵니다.

    • 결국 흔한 형상과 용도를 모아 둔 라이브러리를 직접 만들게 됐습니다. 처음에는 공이 들지만, 그 뒤로는 결과물을 계속 재사용합니다.

  27. wren6991 HN

    이걸 보고 "코드로 하는 CAD라는 발상은 정말 마음에 드는데 언어가 좀 더 제정신이면 좋겠다"고 생각하셨다면 CadQuery를 한번 보세요: https://cadquery.readthedocs.io/en/latest/quickstart.html#quickstart

    (쉬운 설치로는 CQ-editor를 추천합니다: https://github.com/CadQuery/CQ-editor/releases/ )

    OpenSCAD와 비슷한 발상이지만 파이썬에 내장되어 있고 더 나은 지오메트리 커널을 씁니다. OpenSCAD에서 상자에 필렛을 주고 싶다고요? 물론 되죠. 구 8개의 convex hull을 구하든지, 상자와 구의 minkowski 합을 구하면 됩니다. CadQuery에서는요? .edges().fillet()입니다.

    지금 파이썬에 반대하는 목소리가 들리는 것 같지만, 다음 OpenSCAD 코드 예시를 한번 생각해 보세요.

        x = 1;
        echo(x);
        x = 2;
    

    대부분의 언어라면 "1"이 출력되리라 기대할 겁니다. OpenSCAD에서는 마지막 대입이 이기기 때문에 "2"가 출력됩니다.

  28. retatop HN

    저도 OpenSCAD에 불만이 확실히 있습니다(주로 지오메트리를 대상으로 연산할 수 없다는 점이요). 하지만 제 생각에 물체를 기술하는 데는 선언형 언어가 완벽합니다. 저는 당신 예시가 기대한 대로 동작하는 걸 원하지 않습니다. 차라리 컴파일이 안 됐으면 좋았을 겁니다.

  29. jacquesm HN

    원하시는 건 실험 빌드입니다. 훨씬 빨라서 '미리보기 모드'를 꺼도 될 정도입니다. 저는 OpenSCAD를 많이 쓰는데, 제 워크플로에 딱 들어맞고 버전 관리도 잘 되며 프로젝트 사이에 모듈을 재사용하기도 좋습니다. 오랫동안 쓰다 보니 부품 라이브러리가 꽤 쌓였고, 뭘 만들든 그것에 맞게 빠르게 커스터마이즈할 수 있습니다. 최근 프로젝트는 Prusa MK3 3D 프린터용 픽 앤 플레이스 머신 개조였습니다(좋게 말해 흥미로운 도전이었죠). 지금은 로봇공학 쪽 작업을 하고 있습니다.

    프로그래머가 OpenSCAD에 대해 가장 먼저 기억해야 할 점은, 프로그래밍하는 것처럼 보이지만 실제로는 지오메트리와 물체를 기술하는 일이라는 것입니다. 그래서 변수 같은 것들이 프로그래머 관점에서 예상하는 방식으로는 잘 동작하지 않습니다.

  30. RobotToaster HN

    프로그래머가 OpenSCAD에 대해 가장 먼저 기억해야 할 점은, 프로그래밍하는 것처럼 보이지만 실제로는 지오메트리와 물체를 기술하는 일이라는 것입니다. 그래서 변수 같은 것들이 프로그래머 관점에서 예상하는 방식으로는 잘 동작하지 않습니다.

    다르게 말하면, 아주 엄격한 의미에서 순수 함수형 언어이고 익숙해지는 데 시간이 걸린다는 겁니다.

Hacker News에서 보기 ↗