Generative Algorithm 021

선형끌개 (Curve Attractors: Wall project)

이제 curve를 끌개로 활용하는 법에 대하여 살펴보도록 하자. 이 예제의 목표는 벽을 만드는 것으로 내부에서 외부를 여러 개의 구멍을 통해 바라볼 수 있게 하는 것이다. 이를 위해서는 먼저 벽이 될 평면과 두 개의 curve, 그리고 불규칙하게 뿌려진 점들이 있어야 한다. 이 점을 중심으로 그려진 사각형이 벽에서 잘려 나가는 부분이 될 것이다. 이 때 사각형의 위치가 무작위로 흩뿌려진 것이 아닌, 두 개의 curve 를 따라 그 주변에 올 수 있도록 하려고 한다. 이 curve는 거시적으로 사각형의 전반적인 위치를 결정하며 미시적으로 사각형의 위치에 무작위성을 부여한다.

<Random>으로 그려진 점들과 이것들의 끌개로 사용될 <curve> (Params > Geometry> Curve)를 준비한다. <random>한 값이 생기는 범위를 R에 <domain>연결하여 설정해준다. 즉 이것은 점이 생기는 X, Y 좌표의 범위가 된다. 이 경우 A는 0으로 설정되어 있으며 B는 <number slider>를 이용하여 설정해준다. <jitter>는 <random>에서 생성된 값의 순서를 한번 더 섞어 <point>의 X,Y 좌표가 다른 값을 가질 수 있게 해준다.

끌개가 점이었을 때는 점들에 생기는 기하체가 끌개점을 향하게만 하면 되었다. 하지만 이것이 curve일 경우에는 먼저 점들이 curve상의 어떠한 위치로 향하게 될 것인지를 설정해주어야 한다. 또한 이 점은 각각의 점들과 1대1의 관계를 가지고 있어야만 한다. 만약 끌개가 자석이라고 가정한다면 이 자석은 점들을 끌개의 가장 가까운 지점으로 잡아 당길 것이다. 이러한 기능을 가진 component 는 바로 <Curve CP>(Curve > Analysis > Curve CP)이다. 즉 어떠한 점과 curve가 있을 때 그 점으로부터 curve상에 있는 가장 가까운 점(closest point)을 찾아주는 것이다. 각각의 끌개와 <Rnd_Pt_Grid>에 <Curve CP>를 연결하여 점들로부터 가장 가까운 끌개상의 점들을 찾아준다.

후에 점들 위에 그려질 기하체들이 끌개로 이동하도록 하기 위해서는 점들로부터 각각의 끌개로 향하는 vector를 정의해줄 필요가 있다. <vector 2pt>의 A에 <Rnd_Pt_Grid>의 점들을, 그리고 B에 끌개 위에 있는 점들을 연결하여 준다.[1]

이제 모든 <Rnd_Pt_Grid>를 두개의 <move>에 연결하여 이 점들이 끌개로 이동하게 해준다. 이 전 단계에서 사용한 <vector 2pt>를 <move>의 t에 연결해줄 경우, 이것은 점들을 모두 끌개 위로 이동시켜 준다. 이 경우 단순히 점들 위에 생성될 기하체를 그저 끌개 위에 가져다 두는 것이 아닌, 원래 있던 점들과 끌개상에 있는 점들 사이의 거리에 따라 마지막 결과물의 위치가 영향을 받게 하는 것이다. <Curve CP>의 output중 하나인 D가 거리 값을 리턴 해준다.
이를 위하여 <function 2>을 이용하여 함수로 X/Log(Y)를 입력한 뒤 X에 거리 값을, Y에는 <number slider>를 연결한다.[2] (log 함수는 <function2>가 리턴하는 값과 거리 사이의 선형적인 관계를 바꿔주게 된다.)
이제 새롭게 만들어진 계수를 이용하여 vector의 크기를 바꿔줄 수 있다. 이를 위하여 <multiply> (Vector > Vector > Multiply)를 이용할 수 있다.[3] 이것은 input으로 들어오는 vector의 크기에 factor 를 곱해주고 그 결과물인 vector를 output의 V로 내보낸다. Y값을 조절함에 따라 <multiply>의 F값을 조절할 수 있다. 이제 이것을 <move>의 T에 연결해준다. <move>는 기하체들을 끌개를 향하여 이동하게 해줄 것이다.

<number slider> 는 끌개의 영향력을 조절하여 객체가 끌개를 향해 이동하는 정도를 나타내게 된다.



이 다음 과정은 바로 직사각형을 생성하는 것이다. <rectangle> (curve > primitive> 을 이용하면 된다. 이것의 input중 하나인 P에 <move>에서 나오는 점을 연결해준다. 이 직사각형의 크기 또한 거리에 영향을 받게 하기 위해서 <rectangle>의 X에 나오는 점들은 모두5로 나누어 주고 Y로 들어가는 값은 25로 나누어 준다. 이제 factor 값을 조절하면 위치와 직사각형의 크기가 바뀌게 된다. 이 5, 25는 각자의 취향에 따라 바꿔줄 수 있다.

변수를 변화시킴에 따라 비례와 형태가 변하게 된다. 이것 중에 디자인 목적에 맞는 것을 골라주면 된다.


마지막 결과물의 model로 직사각형의 개구부를 가진 벽체와 그것이 바닥에 드리운 그림자 이다. 원하는 그림자의 형태에 맞게 factor값을 조절해주면 된다.

 


[1] 역자 주: 즉 A가 시작점이고 B가 끝점인 vector를 만들어준 것이다.

[2] 역자 주: 이것이 끼치는 영향은 일반적인 log 의 그래프를 생각해보면 쉽다. y값이 0과 1사이에 있을 경우 <function 2>의 분모인 log(y)가 1과 0사이의 값이 되기 때문에 이는 값을 크게 만든다. 특히 0으로 가까이 갈수록 그 값이 무한하게 커진다. y값이 1이면 log(y)는 0이 되고 이것은 분모가 0이 되기 때문에 성립하지 않는다. 이 때 <function 2>는 빨간색으로 변하게 된다. 1보다 클 경우 y값이 증가 할수록 분모인 log(y)의 증가폭은 줄어들게 된다. 그렇기 때문에 값이 커져도 기하체의 이동 폭은 매우 작아진다.

[3] 최근 버전의 grasshopper에서는 해당 component가 사라졌다. 일반적인 수식에 활용되는 곱하기 component <multiplication>을 사용해도 같은 결과를 얻을 수 있다. A에 vector를, B에 <function 2>로 부터 나오는 값을 연결해주면 된다.

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