그래스호퍼로 랜덤 형태 만들기
- 발행
- 2025.01.11
INTRO
저번 9월에서 그래스호퍼가 무엇이며 친숙해지는 시간을 가졌었는데 이번엔 더욱 친숙해질 수 있게 확실한 구동 방법과 거기서 랜덤 컴포넌트를 사용하여 매개변수를 다뤄보겠습니다.

Populate 컴포넌트
저번 시간을 통해서 간단하게나마 컴포넌트의 구성에 대해 친근해졌다고 생각합니다. 이번엔 Populate 라는 컴포넌트를 활용하는 방법에 대해 진행하겠습니다. Populate란 채우다, 거주시키다 라는 뜻을 가지고 있으며 그래스호퍼에서는 공간 내에 랜덤 포인트를 찍어내는 역할을 합니다. Populate의 종류로는 Populate 2D, Populate 3D, Populate Geometry로 세 종류가 있습니다. 여기서 우선은 Populate 3D를 먼저 실습해보겠습니다.
1. 캔버스에 Populate 3D 컨포넌트를 가져옵니다. 전엔 더블클릭과 F4를 통한 명령어로 가져오기만을 알려드렸는데 상단 컴포넌트 바에서 버튼을 찾아 가져올 수도 있습니다. Populate 3D는 Vector -> Grid 에 위치해 있습니다.

여기 좌측 입력(Input)값에서 4가지로 분류되는데, 하나씩 짚어보겠습니다.
-
Region (영역) : 점이 생성될 닫힌 경계를 의미합니다. 이 입력값(닫힌) 내부에서 점들이 무작위 배치됩니다.
-
Count (개수) : 생성될 점의 개수를 의미합니다. 입력값에 값을 부여할 때는 기본적으론 Number Slider를 사용하는데 이것은 컴포넌트 입력창에 숫자를 입력하게 되면 자동으로 슬라이더가 생성이 됩니다.
-
Seed (시드) : 랜덤 값의 패턴을 결정하는 역할을 합니다. 정해진 범위(Region)와 정해진 점의 개수(Count)를 기준으로 패턴을 다르게 하여 점의 배치를 바꾸는 것입니다.
-
Point (기준점) : 기존에 정의된 점들의 위치를 제공합니다. 예를 들어, Region 내부에서 무작위 점을 생성하되 이미 주어진 점들이 있는 특정 위치는 제외하거나, 해당 점을 기준으로 새운 점들이 더 밀집되거나 분산될 수 있습니다.
이 과정을 통해서 나온 좌측 출력값 Population은 입력값 Region.에서 설정된 3D 영역 내에 생성된 점들의 위치 좌표가 저장된 list입니다. 여기서 List 라는 것이 그래스호퍼에서는 정말 중요한 개념으로 존재하는데 깊이 있게는 다음 시간에서 다루겠습니다.

예제로 만들어보겠습니다. 우선 컴포넌트 ‘box’ 지오메트리를 생성한 뒤에 컴포넌트 중앙을 우클릭 -> ‘set one box’클릭 하면 라이노 화면상에서 하나의 박스를 지정하는 명령어가 실행이 됩니다. 프로그램의 맞춰 이행하면 하단 그림과 같이 Box 컴포넌트를 선택했을 때 둘 다 초록색으로 선택되며 표시됩니다. {1000,1000,1000} 규모의 박스를 만들어냈습니다.

이것을 이제 입력값에서 Region (영역)으로 와이어 연결을 하여 Populate 3D의 닫힌 경계로 결속시킨 뒤에 Count 값으론 50을 주기 위해 컴포넌트 명령어 창에 ‘50’을 기입하여 Number slider를 생성한 뒤, 50이 기입된 Number slider의 출력 노드점과 Populate 3D의 Count 입력 노드점을 와이어로 연결하겠습니다.

그러면 위와같이 박스 안에 무작위의 50개의 점이 생성되는 것을 확인할 수 있습니다. 포인트들의 리스트를 확인하기 위에 출력값 Population에 Point list 컴포넌트를 연결하여 리스트 번호를 라이노 상에 표시한 것입니다. 좌측 라이노 상의 포인트 리스트를 보면 49까지 있는데 이유로는 그래스호퍼에서 리스트 나열을 할 시에 0부터 시작하기 때문에 0~49까지 하여 총 50개의 포인트들이 생성된 것을 확인할 수 있습니다.
여기에 컴포넌트 Sphere를 생성해보겠습니다. 컴포넌트 Sphere는 3D 공간 내에서 구를 생성할 수 있습니다. 생성했을 때의 입력값 Base는 생성될 구의 중심점을 설정하는 Point 위치를설정하는 것이며 Radius는 말 그대로 구의 크기를 결정짓는 반지름의 길이를 지정하는 것입니다.
여기에서 Point를 생성하는 Base는 앞서 랜덤하게 생성한 포인트 집합인 Population를 사용할 수 있기에 Pupulate 3D의 출력값 Population 과 Sphere의 입력값 Base를 와이어로 연결합니다. 그리고 Radius는 50을 주겠습니다. 생성된 구체들을 가림업이 보기 위해 처음 만들었던 Box 컴포넌트를 잡고 Ctrl+Spacebar 한 뒤 Disable Preview 하여 꺼놓겠습니다.

그러하면 위와 같이 중심점을 기준으로 반지름 50의 구체들 0~49까지 50가지가 알고리즘에 맞춰져 생성되었음을 확인할 수 있습니다.
여기에서 앞서 말한 나머지 출력값 시드와 포인트를 변경함에 따라 이미 위에 사진같이 정해진 범위와 정해진 개수에서 새로운 패턴이 지속적으로 나옴으로서 그래스호퍼 매개변수의 장점을 보여줍니다.


응용하여 Remap과 Domain을 통한 기준점으로부터 멀어질 때 A범위부터 B범위까지 가지런하게 증가하도록 설정할 수 있습니다.

베이크를 하여 뽑아내면 이런 식의 결과물을 얻을 수 있습니다.

이거 밖에도 Populate에서는 앞서 말한 2D와 Geometry가 있는데3D에 대해 익히셨으니 좀만 컴포넌트를 만져보면 이해할 수 있으며 모두 Region 만 달라진다고 생각하면 됩니다.
컴포넌트 이름만 봐도 알 수 있듯이 2D는 경계가 2D(사각형, 원 서피스) 등을 뜻하며 2d나 3d는 정해진 경계영역의 공허 공간 내에서 xyz 점들이 생성되는 것이라면 Geometry는 생성된 면의 표면에서 랜덤 포인트가 생성됩니다.


OUTRO

프로그래밍을 배울 때 제일 난관인 것은 인터페이스의 차이를 어떻게 익숙하게 만드냐인 것 같습니다. 그 중에서도 그래스호퍼는 많이 차이가 나며 공학적 요소들도 많이 포함되기에 더욱 어색하게 다가오는 것이 당연합니다. 그렇기에 전에 사용법에 이어서 전문지식적으로 풀어내기보다 제일 흥미롭게 만들 수 있는 요소를 소개해봤습니다. 꾸준히 얘기하는 그래스호퍼의 매개변수로 창조되는 파라메트릭 디자인을 활용하여 설계한다면 보다 더 나은 Alt들을 생성할 수 있다고 생각합니다. 다음 아티클로는 더욱 전문화된 그래스호퍼의 리스트와 트리로 돌아오겠습니다.
