'OpenSCAD'에 해당되는 글 2건

  1. 2016.01.06 OpenSCAD 사용 예
  2. 2016.01.03 OpenSCAD를 사용한 3D 모델링

엊그제 OpenSCAD를 처음 사용해본 글을 올렸는데, 오늘은 OpenSCAD를 사용하는 방법을 간단한 예제를 통해 소개하는 글입니다.


먼저... 최종목표. 엊그제 스마트폰 뒤적거리다가 아이디어 상품이라는 글에서 아래 사진을 봤습니다. 스폰지를 꽂아두는 용도랍니다. 귀엽게 생겼죠?


그다지 복잡하지도 않고... 해서 OpenSCAD 연습할 겸 한번 만들어보기로 했습니다.



OpenSCAD는 기본적으로 간단한 도형으로부터 출발해서 합치거나 빼거나 해서 복잡한 물건을 만들어가는 개념입니다. CGS(constructive solid geometry)라고 합니다. 먼저 제가 최종적으로 만든 것부터 보여드리겠습니다. 콧수염이랑 맨 아래쪽이 그림이 이상하지만, 렌더링 문제이므로 그냥 넘어가 주세요.



이제 제일 먼저 얼굴을 만들어보겠습니다. 먼저 아래처럼 구를 두개 만듧니다.

        sphere(r=30, center=true);

        translate([0,40,0])sphere(r=10, center=true);

아래는 그 결과입니다. 위의 명령으로는 원점에 반지름이 30인 구를 만들었고, 아래는 반지름이 10인 구를 만든 다음 y 축으로 40을 이동한 겁니다. 그림 좌측 아래에 보면 x,y,z 축의 방향을 알 수 있습니다.


다음은 hull()을 이용해 이 두개의 구를 완전히 감싸는 표면(convex hull)을 만듭니다. 

    hull(){
        sphere(r=30, center=true);
        translate([0,40,0])sphere(r=10, center=true);
    }  
아래는 그 결과입니다. 얼굴 형태는 이걸로 완성



얼굴을 함수(module)로 저장해둡니다. 모두 이런식으로 모듈로 저장해두면 나중에 사용할 때 편합니다. 다른 것들도 모두 모듈로 저장해 뒀습니다.

module face(){

    hull(){

        sphere(r=30, center=true);

        translate([0,40,0])sphere(r=10, center=true);

    }  

}


다음은 모자를 만들어 보겠습니다. 아래 두 줄로 만들었습니다. 둘다 원기둥입니다. cylinder로 만들어도 되지만, 위는 먼저 원을 만들고 높이를 2만큼 올려서 앏은 원반을 만들었습니다.
    translate([0,0,-1]) linear_extrude(height=2,center=true) 
         circle(r=25);
    translate([0,0,15]) cylinder(h=30, r1=20, r2=25, center=true);
아래 원기둥은 아래쪽 반경은 20, 윗쪽 반경은 25로 해서 위가 더 넓은 모자입니다.


이번엔 귀를 만들어보겠습니다. 귀는 도넛 형태를 하나 만든 다음 가운데를 평면으로 막아주는 방법을 썼습니다.

        rotate_extrude() translate([3.1,0,0])circle(r=3);

도넛처럼 만드는 게 조금 까다로운데요, 일단 먼저 원을 그리고 x축 방향으로 이동을 시킵니다. (모든 점들이 x>0이 되어야 한답니다.) 그러면 아래와 같이 됩니다. (circle이니까 아직 두께가 없는데, openSCAD에서는 1인 것 처럼 그려줍니다.)


그 다음 rotate_extrude를 적용하면 아래와 같이 도넛 형태가 됩니다. 도자기 빚는 물레처럼 생각하면 되는데, 다만, 직접 z 축을 중심으로 회전시키는 게 아니라, y 축을 중심으로 회전을 시킨 뒤, 회전축을 z 축 방향으로 (x 축을 중심으로 90도) 회전시킨다고 생각하시면 됩니다.



그 다음 가운데 부분은 평면으로 막아주고, 이 두 개를 합집합(union)시킨 다음, scale 명령을 사용해 약간 길쭉한 형태로 만들었습니다. 여기에서 union은 따로 쓸 필요가 없답니다. 그냥 함께 있으면 기본이 union으로 처리된다네요.

     scale([1,0.7,0.8]) union() {
        rotate_extrude() translate([3.1,0,0])circle(r=3);
        cylinder(h=4.5,r=2.5,center=true);
    }
아래는 그 결과입니다.


이런 식으로 부분 부분 만들어진 것들을 적당히 회전, 평행 이동시켜 합쳐주면 됩니다. 귀는 좌측과 우측에 대칭되도록 붙여주었습니다.

face();

translate([0,30,0]) rotate([-90,0,0]) hat();

translate([-26,14,0]) rotate([0,0,62]) ear(); //left

translate([26,14,0]) rotate([0,0,-62]) ear(); //right

아래는 그 결과입니다.



다른 것들은 단순한 도형으로 구성이 가능한데, 수염은 형태가 좀 복잡할 뿐 아니라, 동그란 표면위에 붙여야 해서 좀 까다로웠습니다.
먼저 구글에서 moustache dxf로 검색을 해보니 마침 있더군요. 이 파일을 읽어 들여서 높이를 1로 만들었습니다. OpenSCAD는 현재 dxf와 stl 파일만 불러올 수 있습니다.
linear_extrude(height=1) import(file="moustache.dxf", convexity=5);


그 다음 resize()와 translate()를 사용해 이 녀석의 크기와 위치를 조정한 뒤, 얼굴면과의 차이를 구했습니다. 그 결과 아랫부분이 둥글게 되었습니다.

difference() {

            translate([-22.5,-10])resize([45,15,50])

linear_extrude(height=1) import(file="moustache.dxf", convexity=5);

            face();

}



 
그 다음 이녀석을 조금 아래로 내린 후 얼굴면과 교집합. 그래서 아래와 위가 모두 얼굴면을 따라 동그랗게 만들었습니다. 
intersection() {
        face();

        translate([0,0,-10]) difference() {
            translate([-22.5,-10])resize([45,15,50])linear_extrude(height=1)                 import(file="moustache.dxf", convexity=5);
            face();
        }
}


눈은 그냥 구(sphere)로 만들었고, 머리카락은 원기둥으로 만들었습니다. 아래쪽에 있는 스폰지 고정하는 것은 폴리곤을 그리고 offset을 적용한 뒤, mirror를 적용했는데, 자세한 건 생각합니다.


그리고 최종적으로 얼굴과 모자의 아래쪽 반쪽을 제거했습니다. 벽에 붙여야 하니까요.


아래가 최종결과입니다. OpenSCAD에는 랜더링하는 방법이 두가지가 있습니다. Preview(F5)는 빠르지만 부정확하고, Render(F6)는 느리지만, 정확합니다. 아래는 Render로 생성한 것입니다. (색을 지원하지 않는다네요) STL로 출력하기 위해서는 Render를 먼저 해야 하는 것 같습니다.



이 파일은 Thingiverse에 올려두었습니다. STL 파일도 있고, SCAD도 있으니 참고하세요.

http://www.thingiverse.com/thing:1250277


민, 푸른하늘

Posted by 푸른하늘 푸른하늘이

댓글을 달아 주세요

지금까지 3D 프린팅을 위해 3D 모델을 만들때는 거의 Sketchup을 사용해 왔습니다. 


Sketchup의 강점은 무엇보다 쉽다는 것입니다. 대충 마우스로 클릭클릭한 후 Extrusion 도구를 선택하고 드래그만하면 3D 모델이 만들어지니, 간단한 모델이라면 초등학생들도 쉽게 만들 수 있습니다.


그래도 3D 모델을 만드는 것은 쉬운 일이 아닙니다. 특히 Sketchupd으로는 곡면을 만드는 건 거의 불가능에 가깝습니다. 그러다 보니 저를 포함해서 3D 모델링이 쉽지 않은 사람들은 Thingiverse같은 사이트에서 다른 분들이 만들어 놓은 파일들을 찾아 약간 변형해서 사용하는 경우가 많습니다. 


며칠 전부터 제가 찾고 있던 모델은 아래와 같은 겁니다. http://www.thingiverse.com/thing:418207 입니다. 바람이 불때 등등 문이 원하지 않게 닫히는 걸 방지하도록 문 아래에 끼워두는 겁니다. Door Stopper로 검색해 보면 이것 말고도 여러가지 모델을 찾을 수 있습니다.



그런데 이 모델에는 일반적으로 3D 프린팅에 사용되는 .STL 파일외에도 .scad 파일도 함께 들어 있습니다. 잠깐 읽어보니, 3D 모델링한 원본 파일이라고 되어 있더군요. OpenSCAD 라는 오픈소스 3D 모델링 소프트웨어로 모델링한 것이라는 겁니다.



스케치업도 근근히 사용하고 있는 중인데, 새로운 프로그램을 배워야 한다는 게 내키지 않아서 그냥 약간만 읽어보려고 했는데, 이 프로그램이 아주 재미 있었습니다. 스케치업은 형태 위주로 화면에서 직접 편집을 해야 하는데, (아마 다른 3D 소프트웨어도 비슷할 것 같습니다.) 이 OpenSCAD는 프로그램을 짜는 방식으로 3D 모델링을 한다는 점이 완전히 달랐습니다. 예들 들어, 제가 저위에 보여드린 MouseStop.scad 파일은 그냥 텍스트 파일에 불과합니다. 이걸 텍스트 에디터에서 열어보면 아래처럼 생겼습니다. 



그러니까... 프로그램을 짤 줄 아는 사람들은, 특히 java나 C 계통 프로그램을 짜본 사람들은 몇가지 기본 함수만 알면 어렵지 않게 3D 모델을 제작할 수 있습니다. 프로그램을 못짜는 사람들에게는 그림의 떡이겠지만요. ㅎㅎ


기본적으로 OpenSCAD는 구, 육면체, 원기둥 과 같은 간단한 모델(Primitives)을 조합하여 3D 모델을 만드는 방식입니다. 합집합, 교집합, 차집합 등의 연산도 지원하므로 간단한 모델들을 먼저 만든 후, 이를 조합하여 최종적인 3D 모델을 제작할 수 있습니다. 필요하다면 if 와 같은 조건문, 그리고 for와 같은 반복문도 사용할 수 있고요.


그래서 오늘 하루 종일 OpenSCAD를 공부했습니다. 그래서 대충 무엇이 들어 있는지는 이해를 했습니다. 말씀드린 것처럼 프로그램의 원리를 알면 그다지 까다로울 게 없습니다.


그리고 나서는 원래 다운받았던 MouseStop.scad 파일을 약간 수정했습니다. 제일 필요했던게...  원본은 높이가 너무 낮아서 원래 기능을 할 수 없었던 것을 높이를 높여서 해결했고요, 등부분에 골을 파서 미끄럼을 방지했습니다. 수염도 3개로 만들었네요. 이렇게 수정하다보니 원래 모델이 동작하는 부분들을 약간씩 수정했고요. 아래는 그 결과입니다.



최종 파일은 아래에서 다운 받으시면 됩니다.


http://www.thingiverse.com/thing:1242018


아래는 이 모델을 STL로 출력해서 3D 프린터로 제작한 것입니다. 



문틈에 끼워봤습니다. 크기는 잘 맞네요. 우리 마눌님은 귀엽다고 아주 좋답니다. ㅎㅎ 다만 밑바닥이 너무 미끄러워서 뭔가 조치를 해야 할 것 같네요.



다음은 제작과정. 제 Ares 프린터는 TimeLapse 제작기능이 있습니다. 모델을 출력하면 자동으로 동영상이 저장됩니다. 


===

다만, OpenSCAD로는 예술적으로 예쁘게 렌더링 한더던가 하는 기능은 제한적입니다. 그런 기능을 원하면 다른 도구를 찾으라고 되어있네요. 대신 정확한 모델을 만들 때, 예를 들어 기계 부품을 만들 때 등에서는 아주 최고의 도구가 될 수 있습니다.


아무튼 재미있는 도구를 발견해서 기분이 좋네요. 앞으로 스케치업을 사용할 일이 많이 줄어들 것 같습니다. 게다가 오픈소스이니... 어둠의 경로를 살필 필요도 없겠고... 훨씬 더 기분이 좋네요~~ ㅎㅎ


민, 푸른하늘

Posted by 푸른하늘 푸른하늘이

댓글을 달아 주세요