6P by GN⁺ 19일전 | ★ favorite | 댓글 2개
  • OpenSCAD를 이용해 간단한 배터리 홀더를 설계하며 코드 기반 CAD의 기본 개념을 탐구한 사례
  • 기존에는 Autodesk Fusion으로 AA·AAA 배터리용 파라미터화된 상자를 만들었으나, 이를 OpenSCAD로 재구현하며 학습 진행
  • 코드에서 numRows, numColumns, batteryType 등의 변수만 바꾸면 맞춤형 홀더를 생성할 수 있고, 비싼 CAD 소프트웨어 없이도 동일한 결과를 얻을 수 있음
  • difference()translate()를 이용해 박스와 구멍을 반복적으로 생성·제거하는 구조로, 단순하지만 효율적인 설계 방식
  • 복잡한 모델에는 한계가 있으나, 스페이서·베어링 드리프트 등 단순 기하 구조 제작에 유용한 도구로 평가됨

OpenSCAD로 배터리 홀더 설계

  • AA 및 AAA 배터리를 위한 기본 상자형 오거나이저를 Autodesk Fusion에서 설계한 후, 이를 OpenSCAD로 다시 구현
    • 기존 Fusion 모델은 변수 조정으로 배터리 크기, 행·열 수를 바꿀 수 있는 파라미터화 구조
    • 완성된 모델은 Printables에 업로드됨
  • OpenSCAD는 코드를 작성해 3D 객체를 생성하는 CAD 도구로, 단순한 구조의 모델 학습에 적합
    • 작성자는 OpenSCAD 튜토리얼 일부를 참고하며 약 한 시간 동안 실습 진행
    • 결과물은 battery_holder_generator.scad 파일로 공개됨

코드 구조와 작동 방식

  • 주요 변수로 AA, AAA, heightCompartment, thicknessWall, numRows, numColumns, batteryType 등을 정의
    • widthBox, lengthBox, depthBox는 각 변수 조합으로 계산
  • difference() 함수로 기본 박스(cube) 를 생성한 뒤, 내부에 배터리 구멍을 반복적으로 빼내는 구조
    • for 루프와 translate()를 이용해 구멍의 위치를 계산하고, cube()로 각 구멍을 생성
    • let()을 사용해 startColumn, startRow를 루프 내에서 정의해야 하는 부분이 혼란스러웠다고 언급

OpenSCAD와 Fusion 비교

  • 동일한 모델을 Fusion과 OpenSCAD에서 각각 생성 후 슬라이서에서 비교
    • 결과적으로 출력물은 사실상 동일하며, OpenSCAD는 가벼운 코드 기반 접근으로 빠른 수정 가능
    • 고가의 CAD 소프트웨어 없이도 동일한 수준의 결과물을 얻을 수 있음

활용 가능성과 한계

  • 복잡한 설계에는 적합하지 않지만, 스페이서·베어링 드리프트 등 단순 기하 구조 제작에는 매우 유용
    • 실제 생활에서 자주 필요한 단순 부품 제작 자동화에 강점
  • OpenSCAD의 코드 중심 설계 방식이 반복적이고 규칙적인 구조 생성에 효율적임

결론

  • OpenSCAD는 간단한 3D 모델을 빠르게 생성할 수 있는 코드 기반 CAD 도구로 평가
    • 작성자는 “단순히 박스를 그리고 구멍을 뚫는 것뿐이지만 꽤 멋지다”고 표현
    • 향후 간단한 설계 작업에서는 Fusion보다 OpenSCAD가 더 실용적일 수 있음

저는 freecad 를 강력추천합니다

Hacker News 의견들
  • OpenSCAD는 프로그래머 사고방식에 딱 맞는 CAD 도구임
    모든 요소를 매개변수화할 수 있어서, 한 번 만든 프로젝트 인클로저를 변수 몇 개만 바꿔서 다양한 버전으로 생성할 수 있음
    최신 nightly 빌드에서 Manifold 백엔드를 설정하면 렌더링 속도가 분 단위에서 초 단위로 줄어듦
    공식 2021 릴리스는 너무 오래되어 사용하기 힘듦
    BOSL2 라이브러리는 필렛, 라운딩, 부착 같은 기능을 추가해 OpenSCAD를 장난감 수준에서 실용적인 설계 도구로 만들어줌
    Git 친화성도 뛰어나서, Fusion 360의 바이너리 파일보다 .scad 파일의 변경점을 훨씬 쉽게 비교할 수 있음

  • OpenSCAD의 한계를 느껴서 Python으로 SDF(서명 거리 함수) 기반 3D 메쉬 생성 라이브러리 sdf를 직접 만들었음
    Python의 자유로운 로직을 활용해 모델을 구성할 수 있고, 기존 3D 메쉬를 불러와 침식, 확장, 절단, 중공화 같은 작업을 수행할 수 있음
    이 프로젝트에는 아직 할 일이 많지만, 이 분야에 관심이 많다고 생각함

    • 다른 Python 기반 모델링 도구인 Build123dCadQuery와 어떤 점이 다른지 궁금함
      STL은 비트맵처럼 삼각형 좌표를 저장하지만, STEP은 벡터 아트처럼 모델 생성 명령을 저장함
      대부분의 GUI CAD는 STEP 기반이라 호환성이 좋음
      SDF가 STL만 생성한다면, GUI CAD와의 호환성을 생각하면 Build123d나 CadQuery를 배우는 게 낫지 않을까 생각함
      Build123d는 Fusion360이나 FreeCAD처럼 2D 스케치 후 3D 변환하는 개념이라, GUI와 코드 기반 CAD를 오가기에 편함
    • 이 라이브러리가 테이퍼드 가변 피치 헬릭스 문제를 해결해줄지도 몰라 기대됨
    • PythonSCAD도 libfive를 통해 SDF를 지원함 — 예시 페이지 중간쯤에서 “sdf”를 검색하면 됨
    • 메타볼(blobby) 스타일의 블렌딩을 쉽게 구현할 수 있는 점이 특히 인상적임
    • 기존 STL 파일을 불러와 구멍을 뚫거나 다른 오브젝트를 합치는 기능이 흥미로움
      Meshlab 같은 툴은 오류 메시지가 난해해서 실패했는데, 이 방식이라면 훨씬 직관적으로 작업할 수 있을 듯함
  • 최근 OpenSCAD를 쓰기 시작했는데, 대부분의 CAD가 수많은 기능을 배우게 하는 반면 OpenSCAD는 A4 한 장짜리 치트시트로 설명 가능함
    2021 릴리스 대신 git master 버전을 쓰면 훨씬 빠르고 최신 기능을 쓸 수 있음
    BOSL2 라이브러리를 쓰면 전통 CAD의 복잡한 기능을 직접 구현하지 않아도 되고, 내부 구현을 볼 수 있어 배우는 재미가 큼

    • 나도 OpenSCAD 덕분에 3D 프린팅 설계의 정밀도를 얻었음
      GUI CAD에서는 0.25mm 수정에도 모든 구멍과 컷아웃을 다시 조정해야 해서 좌절했는데, 코드 기반 접근으로 그런 문제를 피할 수 있음
      BOSL2의 center origin 기본값 덕분에 변환 작업이 훨씬 쉬워짐
    • git master 버전은 렌더링 속도가 구버전보다 수십 배 빠름
    • 치트시트 링크를 요청함
    • 하지만 날카로운 모서리 제거 같은 작업은 여전히 어렵다는 한계가 있음
    • BOSL2는 정말 강력하고 유용한 라이브러리임
  • OpenSCAD에 객체 개념이 없어서 box1.width 같은 접근이 불가능한 게 아쉬움
    Build123d를 써봤지만 버그가 많고 문서화도 부족함. 언젠가 개선되길 바람

  • OpenSCAD의 장점은 구, 원기둥, 큐브를 수학적으로 조합해 모델링하기 쉬운 점임
    단점은 그 수학적 조합 능력에 모델링 한계가 걸린다는 것임
    Python을 지원하는 PythonSCAD 포크가 곧 메인 릴리스에 통합될 예정임

    • OpenSCAD는 절대 좌표 기반이라 상대적 배치나 솔리드 간의 관계를 표현하기 어려움
      볼트 같은 모델을 만들려면 각 부분을 따로 만들고 겹치게 해야 함
      실제 부품과 정렬하려면 많은 수동 계산이 필요하고, 하드코딩된 치수는 수정이 어려움
      최신 베타 버전의 렌더러는 훨씬 빠르니 꼭 써볼 만함
    • OpenSCAD에는 hullminkowski 합도 있어서 익히면 강력한 도구가 됨
    • 브라우저에서 실행되는 JavaScript 버전 OpenJSCAD도 있음
      GitHub 저장소 참고
    • Java 기반의 Bowler Studio도 추천함. Clojure 지원과 물리 시뮬레이션 기능이 내장되어 있음
    • 점 좌표를 직접 정의해 복잡한 형상을 만들 수도 있지만, 순서가 까다로워 MENSA 테스트처럼 느껴짐
  • 나는 가벼운 3D 모델러로서 OpenSCAD의 단순함이 좋음
    거대한 GUI CAD 대신, 그래픽 프로그래밍처럼 기본 도형과 변환만으로 모델을 만들 수 있음
    오랜만에 코드를 열어도 몇 줄만 보면 바로 이해할 수 있음

    • 예전엔 OpenSCAD를 많이 썼지만, 실제로는 전통 CAD가 더 직관적인 경우가 많다고 느낌
      수학적 계산이 필요한 제약 조건은 GUI CAD의 스케치 기능이 훨씬 간단함
      CAD는 단계별로 되돌아가며 구조를 볼 수 있어서, 스크립트를 해석할 필요가 없음
  • OpenSCAD는 자체 에디터 대신 외부 에디터를 쓸 수 있음
    외부 에디터에서 저장하면 자동으로 미리보기가 갱신됨
    외부 에디터 설정 가이드

  • 예전에 OpenSCAD 입문용으로 “10가지 핵심 개념” 튜토리얼을 작성했음
    튜토리얼 링크

  • 팁: $fn 변수를 설정해 해상도 조절 가능함
    $fn = $preview ? 32 : 64;

    • 단, FEM 해석용으로 내보낼 때는 너무 높은 $fn 값을 쓰면 메시 성능이 떨어질 수 있음
      시각적 부드러움보다는 해석 정확도가 중요하므로 32~64 정도가 적당함
  • 현실적으로 유용한 모델을 만들려면 손이 많이 가지만, 2KB짜리 텍스트 파일로 완전한 파라메트릭 모델을 표현할 수 있다는 점이 너무 매력적임
    Git diff도 의미 있게 작동하고, 커스터마이저 패널로 모델을 앱처럼 조정할 수 있음
    FreeCAD의 거대한 XML 파일보다 훨씬 효율적임

    • 나는 주로 단일 부품 수정이나 변형을 자주 하는데, Python을 이용하면 이런 반복 작업이 훨씬 쉬움
    • 수학적으로 모델을 기술하는 게 나에게는 더 자연스러움
      다만 모따기(chamfer)라운딩 같은 기능이 기본 제공되지 않아, cone이나 sphere를 이용한 minkowski 연산으로 구현해야 하는 점이 번거로움