그래스호퍼, LIST와 TREE 1편

INTRO

그래스호퍼는 앞선 포스트에서 다뤘다시피 3D 모델링을 하는 라이노를 보필하여 컴포넌트의 연결과정으로 매개변수를 패턴화하며 복잡하게 만들어냅니다. 이렇게 복잡하게 알고리즘이 생성될 시 그 안에는 수많은 도형들이 존재하며 이들을 분류하고 나열해야 하고자하는 디자인과 가깝게 도출할 수 있습니다. 이것을 그래스호퍼에선 list와 tree를 가지고 분류 작업을 할 수 있습니다. list는 단일 개체들의 순서번호를 관리하며 tree는 이들을 그룹화시킬 수 있습니다. 이번 글에서는 이 list와 tree를 사용하는 방법에 대해 알아보겠습니다.

 

그래스호퍼에서 리스트와 트리란?

그래스호퍼에서 Populate 컴포넌트로 랜덤하게 지정하여 여러 부재들이 배열되어 모양을 만들어낼 때도 각각의 부재마다 번호를 가지고 순서를 이루며 지어집니다. Seed값의 변화로 그 순서에 변화를 줄 수 있으나 번호들이 전체적으로 어떻게 이루어져있고 어떤 것과 그룹화되어 있으며 어떻게 연결되고 변형될 것인지 이해할 필요가 있습니다. 이러한 순서표를 가지는 리스트와 트리의 확인은 컴포넌트들이 연결될 때 직관적으로 보이지 않으며 캠퍼스 상에서 패널을 열면 확인할 수 있습니다. 패널은 컴포넌트 명령어창에 ‘Pannel’이나 “를 기입하여 열 수 있으며 컴포넌트의 입출력에 와이어 연결을 하면 컴포넌트가 가지고 있는 리스트를 열람할 수 있습니다.

 

 

좌측 사진이 기본적으로 패널을 생성했을 시의 모습입니다. 더블클릭하여 수를 기입할 수도 있습니다. 우측 사진을 보면 ‘Dmain’이라는 컴포넌트를 활용한 모습입니다. 이 컴포넌트는 수의 범위를 지정해주는 컴포넌트로서 입력값에서 시작을 1로 끝을 10으로 한 범위를 생성한 것입니다. 그렇기 때문에 출력값 도메인에 패널을 연결해보면 리스트는 하나만 존재하며 그 하나의 리스트의 내용은 ‘1 to 10, 1부터 10까지’ 라는 범위가 확실히 생성되었다는 것을 확인할 수 있습니다. 이런 식으로 패널은 컴포넌트의 실행이 제대로 실행되었으며 이상이 있다면 어느 리스트에서 잘못 찍힌 것인지 확인할 수 있습니다.

 

List

그래스호퍼의 큰 장점이라고 하면 수많은 자료를 동일한 알고리즘 또는 로직으로 한꺼번에 처리할 수 있다는 점입니다. 리스트는 그래스호퍼에서 자료를 처리 및 관리하는 기본 개념이자 방식, 즉 자료 구조입니다. 이것을 얼마나 사용하기 쉽게 리스트 정리를 하였냐에 따라서 매개변수가 효율적으로 구동될 수 있습니다.

 

 

그래스호퍼 상단 패널에서 Sets 항목으로 들어가게 되면 ‘List’라는 컴포넌트들이 묶여있는 항목이 존재합니다. 이 리스트 항목들 중에서 먼저 알아볼 것은 ‘List Length’ 컴포넌트입니다. 이 List Length 컴포넌트는 말 그대로 리스트의 길이를 측정하는 역할을 합니다.

 

 

이 리스트의 길이를 측정한다는 말을 쉽게 풀어보자면 입력값에 리스트 목록을 입력을 하면 출력값으로 리스트 안에 몇 개의 아이템들이 존재하는 것언지 알려줍니다.

 

예시로 Interger 매개변수 컴포넌트를 생성해보겠습니다. 이 컴포넌트를 우클릭하여 ‘Set Multiple Integers’를 열면 정수값을 기입할 수 있는 창이 뜹니다. 여기에 1,2,3,4,5를 넣어보겠습니다. 하나하나 기입할 때마다 엔터로 줄을 바꿔주며 아이템을 분류하겠습니다.

 

 

제대로 입력되었다면 컴포넌트에 마우스를 가져갔을 때 우측 사진과도 같이 1,2,3,4,5가 리스트로 만들어진 걸 확인할 수 있습니다.

 

이것을 이제 List Length 컴포넌트의 입력값에 연결해보겠습니다. 그러고서 출력값에는 패널을 연결하겠습니다.

아래 사진과도 같이 Integer의 패널을 넣어보며 리스트는 아이템이 분류되어 직관적으로 어떤 아이템이 담겨져 있는지 확인할 수 있고 List Length 컴포넌트의 출력값 패널에선 아이템의 개수가 몇 개였는지에 대한 정보가 도출됨을 확인할 수 있습니다.

 

 

List Length로 기초적인 리스트 운용에 대해 자세히 설명했으니 좀 더 응용된 리스트 컴포넌트를 소개해보겠습니다. 다음으론 ‘Reverse List’입니다.

 

말 그대로 리스트의 순서를 뒤집는 역할을 합니다. 컴포넌트를 생성하고 앞서 사용했던 1~5까지의 Integer와 연결해보겠습니다.

 

 

위 사진과도 같이 패널로 확인하였을 때 순서가 뒤집힌 것을 확인할 수 있습니다.

 

 

다음으론 ‘Shift List’입니다. 이 컴포넌트는 리스트의 순서를 밀어주는 역할을 하며 개수의 변화는 없습니다.

위 사진에서 Shift List는 입력값이 3가지로 분류되며 List에는 기존에 넣고자 하는 리스트를 기입하고 Shift엔 얼마나 수를 뛰어넘을 것인지, Wrap엔 Boolean을 넣어 밀려서 끝난 아이템 숫자에서 끝낼 것인지를 결정합니다. Boolean Toggle을 false로 유지하면 아이템은 0;4,1;5로 멈추며 2;1,3;2,4;3은 없어지게 됩니다.

 

다음으로 리스트 중에서 중요한 컴포넌트인 ‘List Item’입니다. 입력값에 리스트 목록을 기입하고 Index에 몇 번째 아이템을 선택할 것인지 연결하면 출력값으로 리스트에서 해당 아이템을 도출해줍니다. 즉, 리스트중에서 원하는 아이템을 선택해주는 컴포넌트입니다.

아래 사진과도 같이 Index에 ‘3’을 연결하니 리스트 중에서 3번째 아이템인 4가 도출됨을 확인할 수 있습니다.

 

 

이 컴포넌트가 중요한 이유는 생성된 리스트 아이템 중에서 본인이 원하고자 하는 아이템만 골라서 다룰 수 있기에 중요한 역할을 합니다.

 

여기에서 입력값 Wrap 같은 경우엔 Boolean으로 다룰 수 있습니다. 불린을 False 상태로 유지할 시엔 List 목록에 존재하지 않는 Index 값을 입력하면 에러가 발생하거나 빈 값이 반환됩니다. (Null) 하지만 불린을 True 상태로 유지할 시엔 인덱스가 리스트 길이를 초과해도 리스트의 시작으로 다시 돌아가서 순환을 합니다. 음수 인덱스도 허용되며, 리스트 뒤에서부터 값을 가져오게 됩니다.

 

 

리스트를 선택하는 예제를 해보겠습니다. 이전 시간에 했던 Puplate 컴포넌트와 연결시켜보겠습니다.

 

 

위 사진과도 과도 같이 Populate 3D로 랜덤한 점을 생성하였고 출력값에 Sphere를 연결하니 모든 리스트가 중심점이 되어 구가 형성되었음을 확인할 수 있습니다.

 

 

여기에 Sphere와 Populate 3D 사이로 List Item을 넣어보겠습니다. Populate 3D의 출력값은 랜덤하게 생성된 점들의 리스트 목록으로서 List Item의 입력값 List와 연결해줍니다.

 

그 이후 Index로 Populate 3D의 리스트 아이템 중에서 원하는 점의 아이템 번호를 골라서 Integer 컴포넌트에 기입하여 Index와 연결합니다. 그러면 위 사진과도 같이 선택한 아이템의 점만 따로 분류되는 것을 List Item을 클릭시 확인할 수 있습니다.

 

이 리스트 아이템들을 Sphere 컴포넌트와 연결하여 그저 랜덤하게 만들어낸 점 뿐만이 아닌 랜덤한 형태 속에서도 원하는 점을 골라서 디자인할 수 있습니다.

 

이외에도 Sort, Split, Sub 등의 List 컴포넌트가 존재하며 모두 리스트 내의 아이템을 가져오고 나누는 등의 정리 과정을 가지는 컴포넌트입니다. 모델링을 하며 부재들의 분류별 정리를 하기 위한 선택 방법이기에 정말 중요합니다.

 

마지막으로 이 모든 것을 활용한 예제를 해보겠습니다.

라이노에서 Z값이 다른 원 두 개를 생성한 뒤 그래스호퍼에서 Circle로 지정해보겠습니다.

이 Circle Curve를 Divde Curve 컴포넌트로 분할해보겠습니다.

 

 

Z값 다르게 분할되어 생성된 점들을 Line 컴포넌트로 위 아래 점들을 연결시켜줍니다.

 

 

여기서 하단 사진과 같이 리스트 포인트를 켜고 확인해보면 리스트 아이템 번호와 대응하여 선들이 연결되어있음을 확인할 수 있습니다.

 

 

그런 뒤에 앞서 배웠던 Shift List 컴포넌트를 활용하겠습니다. Divide Curve 컴포넌트 중 하나의 출력값 포인트 리스트를 Shift List 컴포넌트 입력값 리스트와 연결합니다.

 

그런 뒤에 Shift를 2를 준 뒤에 다시 Line의 입력값과 연결하겠습니다. 그러면 하단 사진과 같이 번호가 맞대응하던 선들이 점의 번호가 2씩 밀린대로 선이 연결되며 변화한 것을 확인할 수 있습니다.

 

 

이렇듯 얼마나 Shift 하여 점들을 대응시키냐에 따라 선들이 점점 더 꼬아지거나 풀어지는 것을 유도할 수 있습니다.

 

 

점차 번호가 미뤄지며 더 꼬아지는 형태를 보입니다. 이런 형태가 더욱 복잡해질수록 리스트 정리에 진가를 더욱 발휘해낼 수 있습니다.

 

OUTRO

 

간단하게 표현된 리스트를 정리하는 방법에 대해서 알아봤습니다. 이 리스트가 더욱 복잡화될수록 이런 리스트의 꼼꼼한 정리는 디자인의 퀄리티를 더욱 올려주며 더 많은 파라메트릭 디자인의 방향성을 도와줍니다. 기본부터 천천히 다뤄보며 컴포넌트 운용에 이해도를 올린 뒤에 하나씩 컴포넌트를 중첩시켜 보면서 라이노 상에서 디자인이 어떻게 도출될 수 있는지 매개변수를 다뤄보면 금방 그래스호퍼에 친숙해질 수 있습니다. 이런 단순한 리스트의 선택 뿐만이 아닌 더욱 상위 개념으로서 브런치와 트리를 다룹니다, 이는 다음 시간에서 더욱 자세히 알아보도록 하겠습니다. 감사합니다 !