Generative Algorithm 037

Chapter_8_Fabrication

최근 들어 computer를 이용한 제작(Computer Aided Manufacturing)과 digital fabrication이 큰 관심을 끌고 있다. 이러한 Design process의 변화와 새로운 trend는 design 영역에서 가지고 있는 기존의 생산 개념을 ‘digital fabrication’으로 바꿔놓았다. 즉 digital modeling을 통하여 design에  관한 사항들을 결정하고 다른 scale에서의 fabrication과 조합을 시험해볼 수 있게 되었다. 이러한 변화 현장에서 전통적으로 사용되었던 건설기술 뿐만 아니라 다양한 생산방식이 적용될 수 있게 하였다. 예를 들어 CNC machine은 요즘에도 사용하고 있는 새로운 생산방식 중 하나이다. 또한 이것을 가능하게 하는 다양한 기술과 생산기계들이 계속해서 발명되고 있다.
이것을 design process에 적용하기 위해서는 먼저 다양한 재료에 따른 fabrication의 과정을 간략하게나마 이해하는 것이 중요하다. 우리가 design 하려는 결과물과 재료에 따라 그것의 조립 방식(assembly logic)이나 이동(transportation), 크기(scale) 등이 달라지기 때문이다. 원하는 결과물을 얻기 위해서는 그것에 적합한 data를 생성하고 생산에 알맞은 기계를 선택하여야 한다. 이때까지의 생산이 평면, 단면, 그리고 디테일 도면에 의해서였다면 이제는 data 와 code를 통해 생산에 대한 정보를 기계에 바로 입력할 수 있기 때문이다.
중요한 점은 designer 도한 이러한 data를 다룰 줄 알아야 한다는 것이다. 이러한 것이 design의 과정과 결과에 끼치는 영향이 더더욱 커지고 있기 때문이다. Designer는 때때로 fabrication의 결과물을 참고하여 data를 재조정 하여야만 한다. 또한 design 결과물이 기계나 조립 과정에서 가질 수 있는 제약으로 인하여 변해야 할 수 있기 때문이다.
지금부터는 grasshopper를 이용하여 design과 fabrication을 통합적으로 다룰 수 있는 방법을 보도록 하겠다. 먼저 데이터 준비(data-preparation) 단계에서 해야 할 일을 살펴보고 design에서 필요한 data를 추출(extraction)하는 과정을 살펴보도록 하겠다. 이 뿐만 아니라 기술적인 내용과 이것에 사용되는 기계, 재료까지 살펴보도록 하자.

8_1_Datasheets

객체를 생성하기 위한 data로는 기본적으로 ‘치수’, ‘각도(angle)’, ‘좌표(coordinates)’ 등과 같은 수치 data가 필요하다. Grasshopper에는 이러한 객체의 치수, 객체간의 거리, 각도 등을 입력하고 추출하기 위한 여러 가지 component들이 있다. 중요한 것은 design 목적에 맞는 정보를 적재적소에 input으로 활용하는 것이다. 이를 위해서는 먼저 결과물이 되는 객체의 기하학적 생성원리를 이해하는 것이 중요하다. 그 다음으로는 제작(fabrication)을 위하여 필요한 data와 그렇지 않은 data를 구분하는 것이다. Algorithm의 과정에서 많은 data가 생성되지만 그 중에는 마지막 fabrication 단계에서 필요 없는 경우가 많다. 마지막으로 필요한 것은 3d software에서 data를 spreadsheet과 datasheet로 추출하여 우리가 원하는 방향으로 수정하는 것이다.

종이띠를 이용한 fabrication (Paper Strip Project)

이번 예시는 필자의 개인 project의 일부이다. 종이조각들이 조립되는 논리를 이해하기 위해서 먼저 실재 종이를 잘라 간단한 모델을 만들어보았다. 이러한 간단한 physical modeling은 3d model이 생성되는 논리를 쉽게 이해할 수 있고 또 향 수 발생할 수 있는 문제를 예측해볼 수 있는 과정이다. 첫 번째 종이모형의 경우 만드는 과정에서 지나치게 복잡해졌고 또 원하는 결과물이 나오지 않았다.

종이띠, 첫 번째 결과물


다음 단계에서는 digital modeling에 참고하기 위하여 좀 더 간단한 모형을 만들어 보았다.  바로 digital modeling을 시작하기 보다는, 간단한 physical model을 만들어 보면서 그릴 대상의 지하학적인 주성 원리를 이해해보는 것이 중요하다.
여기서는 세 개의 종이끈이 사용되었고, 이것의 각 끝을 연결하여 아래와 같은 모양을 만들었다. 즉 가운데 종이가 양쪽보다 더 짧은 것을 볼 수 있다. 이러한 기본 module이 조합되며 더 큰 surface를 만들어낼 것이다.

연결과 논리를 이해하기 위한 간단한 종이띠 module

Digital modelling

물리적으로 module이 만들어지는 방식을을 이해한 뒤, module을 digital tool을 이용하여 이 module을 modeling 해보자. 먼저 매우 간단한 curve를 그린 뒤 이것을 중심에 두고서 이를 일정한 간격으로 나눈다. 그 위에 생기는 점들을 한 점은 취하고, 다른 한 점은 버리는 방식으로 점을 솎아내어 준다. 이 때 취하는 점들을 중심이 되는 curve의 양 옆으로 이동시킨다. 이렇게 생성된 point들을 두 interpolated curve를 생성하는 점으로 사용한다. 마지막으로 중앙에 있는 curve와 양쪽의 두 interpolated curve를 extrude하면 종이로 만든 model과 유사한 형상을 얻을 수 있다.

중심선과 양쪽의 interpolated curve를 이용한 modeling


완성된 모델은 간단하지만 같은 크기와 형태가 계속 반복되고 있는 것을 볼 수 있다. 여기에 각 모듈의 크기를 변화시킬 수 있는 가능성을 주도록 하자. 이제 Grasshopper를 이용하여 같은 것을 modeling 해보자. 여기서 기본적인 개념을 설명하여보도록 하겠다.

중심이 되는 띠를 Rhino에서 그린 뒤 이것을 <curve>를 이용하여 grasshopper와 연결시킨다. 이 선의 길이를 나눌 때 그 간격을 일정한 것이 아닌 점점 감소하도록 해보자. 먼저 <range>를 이용하여 0과 1사이의 수를 일정한 간격으로 나눠준다. 이렇게 나온 수의 data list를 <graph mapper> (Params > Special > Graph Mapper)에 연결해주도록 하자. 여기서 graph의 종류는 pop-up menu의 ‘graph type’ 항목을 통하여 선택할 수 있다.[1] 이 값을 <evaluate curve>에 연결하면 앞서 그린 중심 curve상에 있는 점들 중에서 <graph mapper>에서 나오는 값에 해당하는 parameter를 가지는 점들을 표시해줄 수 있다. (위 경우 <receiver>가 <curve>를 <evaluate curve>에 연결해주고 있다.

이제 각 점들 사이의 중간 점을 찾아주도록 하자. 원리는 간단하다. <graph mapper>로 부터 얻어진 수들 사이의 평균값을 parameter로 하는 curve상의 점을 찾아주면 된다. 두 수의 평균은 각 수를 더한 뒤 이것을 2로 나누면 되는 것이다. 이것을 위해서는 먼저 <graph mapper>에서 나오는 data list를 더해지는 두 수중 첫 번째 값의 list 그리고 두 번째 값의 list로 나누어 주면 된다. 첫 번째 값의 list의 경우에는 마지막 수가 필요가 없으므로 이것을 버려줘야 한다. 먼저 <list length>를 이용하여 data의 개수를 찾아준다. 이 수는 마지막 번째 data의 수와 일치한다. 이것을 <cull Nth>에 연결하면 이 값에 해당하는 data를 버릴 수 있다. 더해지는 두 번째 값의 list는 원래 <graph mapper>에서 나오는 값 중 가장 앞에 있는 값을 필요로 하지 않으므로 이 수를 버려주어야 한다. 이제 이 두 data list를 <f2: (x+y)/2>로 연결하여 matching 시켜주면 각 중간점에 해당하는 parameter를 얻을 수 있다. 이 수를 다시 <evaluate curve>에 연결하여 curve상에서 중점을 찾아주도록 하자.

이제 이 중간점을 curve 의 바깥으로 움직여보자. 이때 움직이는 방향은 각 점들의 법선 방향을 취해주면 된다. 중간점들의 parameter에 연결된 <evaluate curve>의 output은 점뿐만 아니라 각 점에서의 접선 vector (tangent vector)를 얻을 수 있다.
이 때 이용할 수 있는 것이 바로 벡터의 외적(Vector Cross product)[2]이다. 이것은 두 vector가 있을 때 이 두 vector 모두에 수직으로 만나는 하나의 vector를 찾아주는 연산이다. 예를 들어서 unit Z vector는 모두 unit X vector와 unit Y vector에 수직으로 만난다. 이것의 개념은 아래 그림을 참조하도록 하자. 이 경우 각 점에서의 Z 방향 vector와 tangent vector의 cross vector product를 찾아주면 이것이 바로 각 점에 수직으로 만나는 vector가 된다. 또한 이것은 중심이 되는 curve가 속해있는 평면 위에 있게 된다. <XProd>가 바로 이러한 연산을 해주는 component이다. 이 때 <cull Nth>에서 나오는 값을 <multiplication>을 이용하여 곱해주면 <unit Z>에 입력하면 이것의 크기를 조절할 수 있다. 이 값이 클수록 <XProd>가 내보내는 vector의 크기도 늘어나게 된다. 이것을 <move>의 T에 연결하여 주자. [3]
이 때  <graph mapper>의 graph type을 바꿔주면 다양한 결과를 얻을 수 있다.

위 그림은 Vector Cross product을 설명해주고 있다.  즉 Vector A와 Vector B가 base plane을 정의하고 이 plane에 수직으로 만나는 Vector C를 찾아주는 것이다.
Vector Cross product의 개념은 위와 같다. 즉 Vector A와 Vector B가 base plane을 정의하고 이 plane에 수직으로 만나는 Vector C를 찾아주는 것이다.

이제 중심이 되는 curve 위에서 찾아줬던 point의 data list와 위에서 움직여준 중간 점을 <weaver>를 이용하여 연결하여 준다. (<weave>의 사용 개념은 위에서 살펴보았다.) 이것의 결과물을 이용하여 <interpolate curve>를 만들어 주면 위와 같은 결과를 얻을 수 있다.

다른 한 쪽은 <Mirror Curve> (XForm > Morph > Mirror Curve) 를 이용하여 그려줄 수 있다. 즉, <interpolate curve>를 중심이 되는 curve를 기준으로 mirror를 해주는 것이다. 위 그림의 <receiver>는 중심이 되는 <curve>와 연결되어 있다. G는 mirror가 되는 기하체(geometry)를 의미한다.

이제 중심이 되는 curve와 양 옆에 생긴 curve들을 Z 방향으로 <extrude> 해주면 처음에 의도했던 결과물을 얻을 수 있다.

Rhino상에서 처음 그렸던 curve를 변형시켜주면 최종 결과물의 형태를 바꿔줄 수 있다. 혹은 <number slider>를 이용하여 이것이 extrude 되는 정도를 조절해줄 수 있다.
3d modeling을 마친 뒤 여기서 찾아진 정보를 이용하여 종이띠 model을 만들어 보자. 그릴 위해선 먼저 만들어진 model의 치수정보를 추출해야 한다. 물론 laser cutter를 이용하면 아래와 같은 내용 없이도 physical model을 만들 수 있다. 하지만 위에서 일반화된 data를 추출하면 단지 한 종류의 기계나 하나의 방식에 의존하지 않아도 된다.
먼저 중심이 되는 종이띠와 왼쪽과 오른쪽 종이띠 모두 다른 길이를 가지고 있는 것을 볼 수 있다. 그리고 이것들이 각각 만나는 지점이 다르다. 각 길이를 계산하고 이 지점을 각 종이 띠에 표시하여주면 이것을 이용하여 정확한 physical 모델을 만들 수 있다. 이제 grasshopper를 이용하여 이러한 길이정보와 접점의 위치정보를 추출하도록 하자.
이 경우 우리는 curve를 가지고 작업을 하였으므로 그 치수를 찾는데<distance>는 도움이 되지 않는다. 각 접점들이 펼쳐진 curve 위에서 위치하는 지점을 찾아줘야 하기 때문이다.
위에서 작성한 algorithm으로 돌아가 필요한 정보를 찾아보도록 하자.

위 그림에서 볼 수 있는 것처럼 <evaluate curve>의 L은 각 점들이 선위에서 시작점으로부터 가지는 길이정보를 보여준다. 위 그림에서 가장 위쪽에 있는 <evaluate curve>의 경우 처음 입력된 중심이 되는 <curve>와 연결되어 있으며 각 점들이 시작점으로부터 떨어진 길이를 보여주고 있다. 오른쪽에 있는 <evaluate curve>의 경우 조금 다르다. 이는 <interpolate curve>의 input으로 사용된 점을 그것의 결과물인 curve와 <curve closest point>를 통해 data matching을 하여 각 점의 길이를 찾아준 것이다. 즉 curve 위에 점을 다시 올려놓은 뒤 이것의 parameter를 추출하고 이것을 다시 <evaluate curve>에 연결하여 각 점들이 가지는 길이 정보를 찾아준다. 이것을 다른 쪽 curve에도 똑같이 적용시켜준다.
이 때 중심이 되는 curve와 두 interpolate curve의 방향이 같도록 해줘야 한다. 즉 이 세 curve가 가지는 시작점의 위치(길이 계산의 기준점)이 같아야 하는 것이다.
 
 


 
[1] 이 경우 <range>에서 나오는 수는 (0.0, 0.1666, 0.3333, 0.5, 0.6666, 0.8333, 1.0)이다. 또한 graph의 x축, y축의 범위도 0 to 1로 설정되어 있다. 이 경우 위 <range>에서 나온 값들을 X좌표로 가지는 graph 상의 점들이 가지는 y 좌표 값이 바로 graph의 output이 되며 그 수 또한 0과 1사이에 있게 된다. 이 output은 실시간으로 graph의 형태에 따라 변하게 된다.
[2] vector cross product에 관한 내용은 다음 link를 참고하기 바란다. http://geometricmind.wordpress.com/2010/11/18/essential-mathematics-for-computational-design-09/
[3] 혹은 <XProd>에서 나오는 값을 <Amplitude>를 이용하여 크게 해줄 수 있다.
 

One thought on “Generative Algorithm 037

  1. Pingback: Generative Algorithm 037 | Pop+kitectural META

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s