직조(織造)알고리즘 (The Loom Algorithm)

본 번역은 원작자인 Zubin M Khabazi 와의 합의에 의해 이루어진 일입니다. 번역과 동시에 연재의 형식으로 포스팅 될 것입니다. 번역이 모두 끝나면 pdf 형식으로 합본을 배포하게 될 것입니다. 번역에 모자라는 부분이 있다면 댓글 형식으로 수정을 제안해주시기 바랍니다.

 

알고리즘을 시작하기에 앞서 전반적인 과정과 이에 필요한 data들을 살펴보도록 하자. 먼저 알고리즘의 input이 될 NURBS곡면이 있어야 한다. 이 위에 날실은 U 방향으로, 씨실은 V방향으로 생성될 것이다. 이 날실과 씨실들은 싸인 그래프의 곡선과 같은 형태를 가질 것이며 이러한 곡선을 그리기 위해서는 그것의 인풋이 되는 점들이 필요하다. 이 점은 번갈아가며 면의 위 아래로 이동하여 연결될 것이며 이때 점이 이동하는 방향으로는 각 점에서 input surface가 가지는 법선벡터와 그 반대 방향을 취할 것이다.

 

  1. 날실이 면 위의 점에서 시작한다면 그 옆의 날실은 면 아래의 점에서 시작해야만 한다. 이는 씨실도 마찬가지이다. 그래야만 파동형의 선이 번갈아가서 생기며 교차하며 면을 만들 수 있다.

 

  1. 면 위의 한 점을 이동시킬 때 법선의 방향으로 +A 만큼 이동시킨 점을 날실이 지난다면 –A 만큼 이동시킨 점은 씨실이 지나야 한다. 혹은 이 반대가 되어야만 면을 생성시킬 수 있다.

 

위와 같은 개념에 기초하여 Grasshopper에서의 알고리즘은 다음과 같이 생성될 수 있다.

Fig.2 4 위에서 언급한 것처럼 알고리즘을 시작하기 위해서는 먼저 결과물의 전체적인 형상을 결정할 ‘NURBS 곡면’이 필요하다. 이를 위해서 <surface>를 이용하여 Rhino상의 곡면을 Grasshopper에 연결시켜 준다. 이것의 이름을 <Target_surface>로 변경하였다.
 
 

Fig.2 5 <Subdivide>를 이용하여 <Target Surface>를 원하는 씨실과 날실의 수만큼 나누어 준다. 이 때 <input>이 되는 수를  <number slider>를 이용하여 입력하여 주자.[1] <Subdivide>을 이용하면 면이 UV수로 나눠져서 생긴 점(P: point)들과 그 점들에서 생긴 면들의 법선(N: normal) 그리고 각 점들의 UV 좌표값(UV: UV coordinates)을 얻을 수 있다.[2]
 
 

Fig.2 6 위에서 언급한 것처럼 파동형의 날실과 씨실을 만들기 위해서는 면에 생성된 점들을 면의 아래 위로 이동시켜야 한다. 이를 위해서는 같은 절대값을 가지는 음수와 양수가 하나씩 생기는 수의 data list가 필요하다.  <F1:-x>을 이용하여  <corrugation_height>에서 나오는 값을 음수로 만든 뒤 이 둘을 <weave>에 연결해주면 두 값을 하나의 data list로 묶어줄 수 있다.
 
 
 

2_3_1_날실의 생성(Warp Generation).

 

Fig.2 7 날실의 생성(Warp Generation). <Repeat>은 말 그대로 이것에 입력되는 data를 반복하여 생성해주는 것이다. <weave>에서 나오는 양수와 음수의 data list를 연결하여 이것을 씨실(weft)의 수만큼 반복 생성시켜주자. (날실을 생성하는데 사용되는 점의 수는 씨실의 수와 일치하기 때문이다.) 이 값을 <amplitude>를 이용하여 각 점이 가지는 법선(normal)값과 data matching을 시켜준다. <amplitude>는 ‘벡터(V: vector)’에 입력벡터를 ‘강도(A: amplitude)’에 입력된 값만큼의 크기로 변환해준다. 이것을 <move> 연결하면 면 위의 점들 원하는 만큼 이동시켜 줄 수 있다. <repeat>에서 나오는 값을 <F1: -x>를 이용하여 변환시킨 뒤 또 하나의 <amplitude>와 <move>에 입력시켜준다.
 
 

Fig.2 8 모든 점들이 면의 아래 위로 이동한 것을 확인할 수 있다. 이 때 두<move> 중에 하나를 선택하면 점이 어떻게 이동하였는지를 확인할 수 있다. 두 <move>가 각기 따로 아래 위로 점을 이동시켰다.
 
 

Fig.2 9 이렇게 <move>가 된 점들을 <interpolate curve>에 연결하면 같은 위치에서 mirror된 것처럼 보이는 곡선을 생성할 수 있다. 이제 이 두 선들을 <cull>을 이용하여 하나씩 번갈아서 선택하여 주자.
 
 

Fig.2 10 이 때 주의해야 할 것은 <interpolate curve>에서 생성된 data list는 트리구조를 가지고 있다는 것이다. 이를 <Param Viewer>를 통하여 확인할 수 있다. <cull>을 하기 위해서는 이 data list의 트리구조를 없애고 모든 data를 하나의 list 안에 정렬시켜주어야 한다.[3] 이러한 기능을 가진 것이 <flatten>이다. 이제 <cull>에 입력되는 Boolean data의 패턴(P: pattern)을 편집하여 주자.[4]
 
 

Fig.2 11 완성된 ‘날실의 생성(warp generation)’ 알고리즘

 
 
 

2_3_2_씨실의 생성(Weft Generation)

 

Fig.2 12 이 다음으로는 씨실을 생성해줘야 한다. <Subdivide>에서 생성되는 data가 U방향으로 생성되므로[5] 씨실을 생성하기 위해선 이것의 방향을 V방향으로 바꿔줘야 할 필요가 있다. 여기서는 이러한 문제를 해결할 수 있는 방법 중 가장 쉬운 것을 소개하겠다. 먼저 rhino상에서 그려진 <Target_Surface>를 같은 위치에 복사에 넣은 뒤 이것의 UV 방향을 바꿔주면 된다. 이를 하기 위한 과정은 다음과 같다.
 
1. <Target surface>를 선택한다.
 
2. 아래와 같은 순서로 명령어를 입력해준다.
 

      Copy (enter)

      I (enter)

      Dir (enter)

      S (enter)

      (enter)

 
이는 먼저 선택된 surface를 복사(copy)한 뒤 같은 위치에 (i) 만들어주고, 이것의 UV방향을 돌려준(s: swapping)해준 것이다. 이러면 같은 surface의 UV 방향만을 바꿔줄 수 있다.
 
3. 이제 이렇게 생성된 rhino상의 surface를 Grasshopper에서 <surface>와 연동시킨 뒤 <Swap: UV_Target_surface>로 명명해준다.[6]
 
 

Fig.2 13 여기서 또한 surface가 <subdivide> 된다. 이 때 <swap: UV_Target_surface>는 <Target_surface>의 UV 방향을 바꾼 것이므로 <subdivide>의 U(U: u direction)에 씨실(weft)의 수를, V(V: V direction)에 날실(warp)의 수를 연결시켜주어야 한다. 나머지 알고리즘은 ‘날실의 생성(Warp Generation)’ 알고리즘과 일치한다.
 
 

Fig.2 14 씨실과 날실의 생성에 사용된 알고리즘은 모두 같다.
 
 

Fig.2 15 이때 <cull>의 P에 입력되는 Boolean data를 위와 같이 바꿔주자. 모든 설정을 마치면 왼쪽 그림과 같은 결과를 얻을 수 있다.
 
 

Fig.2 16 이제 거의 마지막이다. <number slider>를 이용하여 이렇게 생성된 씨실과 날실의 곡선들에 적용할 두께 값을 설정해주자. 이것을 <Yarn_Thickness>로 명명하였다.
 
 

Fig.2 17 <cull>에 의해서 솎아낸 씨실과 날실의 곡선들을 모두 <pipe>에 연결해주자. 물론 씨실과 날실을 각각 다른 <pipe>에 연결하여 다른 두께 값을 주는 것이 가능하다.
 
 


Fig.2 18 직조 알고리즘을 이용한 Digital Textile의 생성 ‘평직(平織: plain weave)’,
 
 


[1] 역자 주: 해당 tutorial에 사용된 <receiver>는 0.8.0010버전 이후의 grasshopper에서는 존재하지 않는다.
[2] 역자 주: 0.8.0010버전에서는 <Subdivide>의 S를 우클릭 한 뒤 이를 ‘reparameterize’를 해야 UV 좌표값을 얻을 수 있다.
[3] 역자 주: 트리구조를 가지는 data에 관한 자세한 내용은 generative algorithm 의 5_6_On Data Trees 를 참고하기 바란다.
[4] 역자 주: P를 우클릭 한 뒤 ‘manage boolean collection’을 선택하면 Boolean data를 편집하여 줄 수 있다. 이 때 true와 false는 영문으로 입력해줄 수도 있고 false를 의미하는 ‘0’이나 true를 의미하는 ‘1’을 입력해줄 수도 있다.
[5] 역자 주: Grasshopper에서 생성되는 data는 일반적으로 U 방향으로 그 순서를 유지하며 생성된다. 이것의 방향을 바꾸기 위해선 매우 복잡한 과정을 거쳐야 하는데 이 튜토리얼에서 저자는 rhino의 input을 조절하여 매우 쉽게 이 문제를 해결하고 있다. 이처럼 어떠한 결과물을 그릴 때 rhino에서 input되는 기하체와 grasshopper에서 만들어지는 algorithm 둘을 적절하게 섞어서 만드는 것이 무척 중요하다.
[6] 역자 주: 날실을 생성하는 알고리즘을 모두 복사한 뒤 그것에서 <Target_surface>의 이름만 변경해주면 된다. 이 때 처음에 같은 절대값의 음수와 양수를 반복 생성하는 <F1: -x>과 <weave>는 공유하여 씨실과 날실이 같은 진폭(amplitude)를 가질 수 있도록 하자.

6 thoughts on “직조(織造)알고리즘 (The Loom Algorithm)

  1. 제목을 달리 생각하면 제목느낌이 좋으다. ‘직조의 알고리즘’ 제목만 보고 알수 없는 인생의 복잡함이 묘하게 느껴지더군,,풋

    • ㅎㅎㅎ 두 번째 편은 훨씬 더 복잡하다. 나도 거의 직관적으로 뭉뚱그려서 그럴 것이다 라고 이해하는 수준인데 풀어 설명하기가 쉽지 않을 듯

  2. Pingback: 직조(織造)알고리즘 (The Loom Algorithm) | 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