Grasshopper

[그래스호퍼] 그래스호퍼 Anemone 아네모네 루프 사용하기

wwrww 2021. 8. 15. 13:06

스크립팅을 하면서 루프를 사용하는 일이 많은데, 그래스호퍼 애드온 중에 하나인 Anemone를 사용하면 그래스호퍼에서 파이썬 스크립팅 필요 없이 간단하게 루프를 구현할 수 있다. Anemone는 food4 rhino에서 구할 수 있다. Anemone food4 rhino 링크는 하단에.↓

 

https://www.food4rhino.com/en/app/anemone

 

Anemone

Take a look at our Grasshopper Group Website. If you want to support the development of the Anemone,

www.food4rhino.com

 

이번 포스트에서 다룰 내용은 아네모네를 사용해서 보로노이 패턴을 자동적으로 발생시키고 색을 입혀서 시각화하는 간단한 스크립팅이다.

 

(1) 아네모네 루프의 구성

 

위 이미지에서 볼 수 있는 것처럼 아네모네 루프는 Loop start 와 Loop end 두 가지 컴포넌트로 구성되어있다. Loop start에서는 반복할 횟수(Repeat)와 Trigger(루프 촉발제), Data(루프를 돌릴 데이터) 세 가지 인풋과 몇 번째 인풋인지 알 수 있는 Counter, 출력되는 데이터 두 가지 아웃풋으로 이루어져 있다. 

 

Loop start 와 Loop end는 서로 연결되어야만 루프가 시작되는데, 두 컴포넌트를 연결할 때는 >, < 를 통해서 연결해주면 된다. Loop end 컴포넌트는 루프를 종료할 때 촉발되는 Exit, Loop start로부터 나오는 Data를 받는 Data 인풋, Loop end를 통해 출력되는 Data 아웃풋으로 이루어져 있다.

 

위 스크립트는 루프가 어떻게 돌아가는 지를 확인할 수 있는 간단한 예제로, Loop start 의 카운터가 Loop end의 Data로 들어갔을 때 총 10번의 Concetenate 명령이 반복되는 것을 확인할 수 있다.

 

이번에는 좀 더 단순하게 Loop 라는 Data 가 반복되는 스크립트로, Loop라는 텍스트 데이터가 10번 반복되는 것을 Loop end 아웃풋을 통해 확인할 수 있다.

 

(2) 아네모네 루프를 이용해 2D 보로노이 패턴 자동 생성하기

이 포스트에서는 이 보로노이 컴포넌트와 아네모네 루프를 사용해서 정해진 영역 안에서 보로노이 패턴이 점점 더 자잘하게 형성되고, 보로노이 패턴 면에 그라디언트 색상을 주는 간단한 시각화를 해본다.

 

보로노이 패턴 만들기

Voronoi 컴포넌트는 그래스호퍼의 내장 컴포넌트로 포인트와 사각형을 인풋으로 넣어주면 보로노이 패턴을 만들어준다. 우리의 목표는 보로노이 패턴이 루프가 진행됨에 따라 점점 더 자잘하게 만들어지는 것이기 때문에 보로노이 패턴의 인풋인 포인트의 개수를 조절해줘야 한다.

 

랜덤으로 형성된 포인트 고르기

보로노이 패턴을 만들 인풋 포인트는 영역 안에서 자동적으로 랜덤 포인트를 형성해주는 Populate 2D 컴포넌트를 사용한다. 이렇게 만들어진 랜덤 포인트 중에서 몇 개를 골라 보로노이 패턴을 만들 인풋 포인트로 사용을 해야하는데, 이때는 포인트의 인덱스 값으로 포인트를 골라낼 수 있도록 하는 List item 컴포넌트를 활용한다.

 

아네모네 루프 만들기

 

우리가 원하는 것은 루프가 진행됨에 따라 보로노이 패턴이 세밀해지는 것이기 때문에 보로노이 인풋 포인트가 루프의 횟수에 따라서 많아져야 한다는 것을 알 수 있다. 그럼 아네모네 루프를 통해 구현해야 하는 기능은 루프가 돌아감에 따라 List item을 하는 인덱스 리스트의 길이가 하나씩 증가하는 기능인데, 이는 루프 최초의 데이터 0을 한 번의 루프가 돌아갈 때마다 +1을 하는 단순 덧셈으로 구현할 수 있다.

 

이렇게 하면 0,1,2,3 ... 순으로 증가하는 loop 결과를 얻을 수 있는데 이 숫자를 List item을 하는 인덱스 리스트의 총길이로 사용하고 인덱스 숫자를 만드는 Series 컴포넌트의 Count 인풋으로 넣으면 매 루프마다 인덱스의 길이가 하나씩 증가하며 출력되는 포인트도 하나씩 늘릴 수 있다.

 

루프 종료 조건문

그런데, 어느 순간, 즉 랜덤 생성한 포인트의 총 갯수가 List item을 하는 인덱스 리스트의 길이와 같아지는 순간 루프는 자동적으로 종료가 되어야 한다. 이렇게 루프를 종료시키는 명령은 Loop end 컴포넌트의 End input에 True 가 입력되면 되는데, 이런 조건문은 Larger than 컴포넌트를 사용해서 쉽게 구현할 수 있다.

 

즉 루프를 통해 들어온 값이 랜덤 생성한 포인트의 총 갯수의 -1을 넘어서는 순간 Larger than 컴포넌트는 True 값을 Loop end의 end 인풋 불리언 값으로 호출되면서 루프는 자동적으로 종료된다.

 

보로노이 패턴에 색 입히기

 

완성된 보로노이 생성 스크립트에 마지막으로 보로노이 패턴 별로 그라디언트 색상을 입혀줘야하는데, 이때는 그래스호퍼 내장 Gradient 컴포넌트를 사용한다. Gradient는 0~1 범위 컬러 range를 인풋 숫자의 range에 맞게 컬러를 할당해주는 역할을 하는데, 이를 위해서는 인풋 숫자 역시 0~1 범위로 조작해주어야 한다.

 

위 스크립트의 경우 보로노이 패턴을 형성할 때 만든 포인트의 y 좌표를 0~1 범위로 Remap 을 한 이후 각 컬러를 보로노이 면에 입혀주는 스크립트이다.

 

보로노이 패턴 시각화하기

각 보로노이 패턴에 색을 입히는 것까지 스크립팅이 완료됐다면 정말 마지막은 각 패턴을 라이노 디스플레이에 표현하는 작업이다. 이 작업은 간단하게 Custom preview 컴포넌트를 활용하여 할 수 있고, 별도로 보로노이 패턴의 아우트라인을 표현하기 위해서 Human의 custom preview lineweights 컴포넌트도 사용했다.

 

(3) 결과

 

아네모네를 이용한 자동 보로노이 패턴 생성기