Generative Algorithm 024

5_5_On Object Proliferation in Parametric Space

Rhino에서 그려진 Surface는 Grasshoppper의 input으로서 기하체들을 그 위에 늘어놓는데 사용될 수 있다. 먼저 이러한 surface를 panel화 시키는 것이 가능하다. 혹은 기하체들을 surface 상의 특정 위치에 늘어놓을 수 있다. Rhino에서 Surface의 형상을 바꾸면 이것이 grasshopper definition에 반영되고 다시 이것이 rhino상의 preview에 반영된다. Surface를 input으로 사용할 수 있는 방법은 많이 있는데 간단한 예시를 통하여 이를 살펴보도록 하자.
자유로운 형태를 가진 surface와 box가 있다. 어떻게 하면 box를 surface 위에 늘어놓을 수 있는지 살펴보자.
먼저 surface를 원하는 수로 나눈 뒤 각각의 나뉘어진 surface 위에 box를 생성하고 이것을 조절해주는 것이다. 즉, 전체적인 형태(Macro scale)를 조율하기 위해서는 surface의 형상을 바꿀 수 있고 국지적으로 (micro scale) 박스의 크기를 바꾸거나 회전시킬 수 있다.
Surface 위에 원하는 위치를 생성하는 것은 매우 쉽다. 우리가 원하는 수치정보를 입력해주면 그것에 따라 surface를 나눈 뒤 나눠진 지점에 point가 표시된다. 이 점을 기준으로 box를 생성한 뒤 국지적으로 box를 회전시키거나 이동, 혹은 크기 조절을 하게 된다.

원하는 형태의 surface를 rhino에서 그린 뒤 이것을 grasshopper와 연동시킨다. 그리고 이것을 <evaluate surface>에 연결하고 S를 우클릭 하여 reparameterize를 해준다. <range>의 경우 domain 은 0 to 1 이고 N에 <number slider>를 연결하여 원하는 수를 입력해준다. 이렇게 하면 0과 1 사이를 30등분한 결과값이 data list로 생성된다. 이것을 <XYZ point> X와 Y값으로 넣어주면 나오는 그 결과값은 <evaluate surface>에 필요한 uv좌표 값으로 사용될 수 있다. (위 경우 이 전 chapter에서 사용한 방식을 그대로 사용하였지만 <divide surface>를 이용할 수 있다.)

<evaluate surface>는 위 UV좌표에 근거하여 생긴 모든 `점(point)들과 그 점들의 ‘법선(normal)’과 ‘평면(plane; frame)’값을 output으로 준다. 이제 이 평면에 의하여 생긴 frame들을 <center box> (surface>primitive> center box) 의 중심점 B에 연결해준다. 그리고 중점으로부터의 거리를 X, Y, Z를 <number slider>를 이용하여 정의해줄 수 있다.[1]
이 box들을 국지적으로 조절하여 보자. <rotate>의 input은 ‘기하체(G)’, ‘각도(A)’, ‘평면(P)’ 이다. 회전은 이 평면의 중심점을 기준으로 하게 된다. 이를 위하여 각 점에 <Plane XZ>를 연결하여 각 점을 중심점으로 하는 XY평면을 생성한 뒤 이것을 P값에 연결한다.[2]

Box의 국지적인 회전



이렇게 하면 box들들 각 점을 중심으로 XZ 방향으로 회전시킬 수 있다. 각도의 경우 <random>을 이용하여 무작위로 생성해준다. 이때 나오는 값들의 수는 box의 개수와 일치하여야 한다. <Box>에 <list length>를 연결하여 Box의 개수를 찾아준 뒤 이것을 <random>의 N에 연결하여 이 개수만큼의 random한 값들을 만들어준다. 이렇게 나온 값을 <rotate>의 A에 연결해준다.[3]

최종 결과물


위의 경우 비슷한 logic에 ‘각도 값’을 random이 아닌 ‘끌개<attractor>’로부터 각 점까지의 거리 값을 각도로 치환한 것이다. 이러한 끌개는 결과물에서 국지적인 회전에 영향을 끼치게 된다. 위에서 배운 것들을 이용하면 위와 같은 결과물을 얻을 수 있다.
 


[1] 즉 각 box의 변의 실제 길이는 input값의 두 배가 된다.
[2] 만약 surface 위의 점 p를 그대로 <rotate>의 p에 연결하면 각 점을 원점으로 하는 xy 평면에서 회전이 된다.
[3] <random>의 경우 R을 0.0 to 180.0 으로 바꿔주고 <rotate>의 A에는 rad(A)를 입력하여주면 0도와 180도 내에서 box의 개수 만큼의 값을 무작위로 추출해낼 수 있다.
 
 

2 thoughts on “Generative Algorithm 024

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