Generative Algorithm 026

5_6_On Data Trees

 
이때까지 component와 parameter에 대해서 이야기 해 보았다. 이제 grasshopper의 data 구조 방식 중 하나인 ‘Data Tree’에 대해서 이야기 해보자. 이것은 조금 복잡도가 높은 definition에서 꼭 필요하다.
Generative Algorithm의 가장 큰 잠재력 중 하나는 바로 수백 개의 객체를 한번에 다룰 수 있다는 것이다. 이렇게 많은 양의 객체를 다룰 때 필요한 것은 모든 객체에 하나의 명령어를 한번에 적용시키거나 혹은 특정 객체를 추출하고 그것에만 특정 명령어를 적용시킬 수 있다. 이를 위해서는 data의 구조를 이해하고 이것을 다르게 바꿀 수 있어야 한다.
5개의 curve가 있다. 이것을 각각 10개 등분 한 뒤 2번째 점들을 추출하고 이것을 <interpolate curve>를 이용하여 연결하여보자.

<curve> 를 이용하여 5개의 curve를 연동한 뒤, 이것을 <divide>를 이용하여 10등분 해준다. 이제 index number가 1인 항목들을 <list item>을 이용하여 추출해준다. 이렇게 하면 각 점들의 집합에서 두 번째인 점들을 선택해줄 수 있다. 이 점들을 <interpolate curve>를 이용하여 연결하여 주면 error 표시가 뜨게 되고 아무것도 그려지지 않는다.

이것을 <param viewer>를 이용하여 data 정보를 확인할 수 있다. 이것을 우 클릭 하여 ‘draw tree’를 선택하거나 더블클릭을 하면 data가 어떻게 가지로 분할되어있는지를 확인할 수 있다.
이렇게 <param viewer>를 이용하면 grasshopper 에서 사용되는 ‘data tree’의 개념을 시각화 시킬 수 있다. 위 그림에서 본 것처럼 <curve>는 5개의 항목을 가지고 있지만 이것이 <divide>를 거치면 각각의 curve 위에 11개의 점이 생기게 된다. 즉 하나의 data list 안에 55개의 점이 들어있는 것이 아니라 각각의 가지에 11개의 점이 나눠져 있는 것이다. 즉 55개의 data가 들어있는 ‘tree’가 다섯 개의 ‘가지(branch)’로 나누어 담겨 있는 것이다. 이렇게 되면 각각의 list에 담겨있는 특정 점을 고르기가 훨씬 수월해진다. 즉 <list item>에 1을 선택해주면 각각의 data list에서 고유번호(index number)가 1인 항목을 골라낼 수 있다.

<param viewer>의 draw tree를 이용하여 각각의 component의 data 구조를 볼 수 있다.


이제 왜 <interpolate curve>가 아무런 선도 그리지 않았는지를 살펴보자.

curve와 <list item>의 point 각각의 <Param Viewer> 와 <Panel> 비교


위에 있는 그림에서 <param viewer>와 <curve>는 하나의 가지를 가진 data list를 보여준다. Panel을 살펴보면 모든 data는 {0}이라는 이름을 가진 curve의 list 에 속해있음을 알 수 있다. 즉 다섯 개의 curve모두 하나의 data list 안에 속해있다. <param viewer>에서 보여지는 {0} (N=5)는 {0}이라는 이름을 가진 data list에 5개의 항목이 있다는 의미이다.
아래 그림의 panel을 살펴보면 data들은 {0:0} {0:1} {0:2} {0:3} {0:4} 이라는 이름을 가진 data list 안에 각각 하나의 점들이 속해있음을 알 수 있다. <param viewer>를 보면 다섯 개의 가지를 가지고 있으며 각각의 가지에 (N=1), 즉 1개의 항목을 가지고 있다는 것을 보여준다. 즉 이것은 각 점들이 개별적인 list에 들어있기 때문에 복수개의 점이 하나의 data list에 있을 때 작동하는 <interpolate curve>가 작동하지 않는 것이다.
이제 이것을 해결해 보자.

이것을 해결하기 위해서는 <flatten>(Logic>Tree) 을 이용할 수 있다. 이는 그 이름처럼 복수개의 가지를 가진 data 구조를 하나의 branch로 다시 만들어 주는 것이다. 그 구조의 차이는 <param viewer>에서 확인할 수 있으며 data 항목은 panel을 통해 확인할 수 있다. 이제 {0}에 모여 있는 다섯 개의 point data를 <interpolate>를 이용하여 연결해준다.

정리하자면, grasshopper를 이용하여 작업하다 보면 다양한 위계를 가진 복수개의 객체를 다뤄야 하는 경우가 많다. Tree 구조 내에서 각각의 가지(branch)들은 그 내부에서 위계와 {0:1}과 같은 고유번호를 가진다. 각각의 가지는 독립된 data list를 가지고 있는 것이다. 이러한 개념을 이해하고 이것을 이용하여 data를 다루는 방식을 아는 것은 무척 중요하다. 즉 필요에 따라 <graft tree> 혹은 <flatten>을 이용하여 data list 내부의 위계를 없애거나 만들어가며 작업을 할 수 있어야 한다. 다음 예시를 통하여 data를 다루는 것을 이해해보도록 하자.

'DATA tree'의 data 가지


[1] 하나의 면에는 4개의 edge가 있다. 이 0과 2번의 경우 면을 생성한 방식에 따라 달라질 수 있다.
[2] 역자 주: rhino에서 한 면을 4개의 점으로 정의한다고 생각했을 때 점의 순서는 시계방향 혹은 그 반대방향일 것이다. 그러면 위쪽 edge와 아래쪽 edge의 시작점과 끝점의 위치가 엇갈리게 된다. 그러므로 각 edge의 방향이 다르게 된다.

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