본문 바로가기
3D Blender 기초강좌

3D Blender - Array Modifier 기본 원형배열

by 열븐세상 2023. 6. 5.

똑같은 객체를 여러 개 만들 때 [Array] 기능을 많이 사용합니다.

직선 방향으로 흐르는 배열은 매우 간단하지만 원형배열은 간단하지가 않습니다.  그나마도 회전을 하지 않은 객체라면 쉽게 할 수 있는 편이기는 합니다.  문제는 기준이 되는 객체가 기울어져 있을 경우인데요.  이 때는 문제가  복잡 해집니다.  그래서 블렌더의 [Array] 특성을 먼저 이해하는데 초점을 맞추어 보겠습니다.  이어서 다음시간에는 기울어진 객체를 중심으로 원형배열을 하는 방법과 조금은 어려울 수 있지만 [Driver]에 대해 알아보고 자동으로 면을 따라서 움직이는 원형배열도 다루어 보도록 하겠습니다.

 

원형배열의 원리

위와 같이 오브젝트 2개를 준비했습니다.  큐브를 중심으로 스퀘어를 원의 형태로 배열을 하려고 합니다.  눈여겨봐야 할 것은 Origin의 위치입니다.  큐브의 [Origin]은 자신의 중심에 있고, 3D Cursor는 큐브의 Origin과 같은 위치에 있습니다.  스퀘어의 [Origin]은 자신의 중심에 있습니다.  이 상태에서 [Modifier]에서 [Array]를 적용해 보겠습니다.

[Count]는 배열을 할 개수를 의미합니다.  2개가 설정되어 있으니 스퀘어가 2개가 보입니다.  [Relative Offset]이 체크가 되어있고 [Factor]의 X값이 1 이므로 2번째 스퀘어는 스퀘어의 크기와 동일한 거리만큼 X축 방향으로 떨어져 있습니다.

 [Relative Offset]을 체크해제하고 [Object Offset]의 [Object]를 [Cube]로 설정하였습니다.  스퀘어가 하나만 남고 사라졌군요.  [X-Ray Mode]를 켜고 보니 하나는 큐브와 겹쳐져 있습니다.  첫번째 스퀘어는 제자리에 생성이 되고 두 번째 스퀘어는 스퀘어 원점과 큐브 원점의 거리만큼 기준이 되는 큐브의 방향으로 이동하여 생성된 것입니다.

스퀘어를 선택하고 마우스 오른쪽 클릭을 하면 [Object Context Menu]가 나옵니다.  [Set Origin] > [Origin to 3D Cursor]를 선택하여 스퀘어의 Origin이 [3D Cursor] 위치로 이동합니다.  이렇게 되면

첫 번째 큐브는 당연히 제자리에 생성이 되고 두 번째 큐브는 스퀘어 원점과 큐브 원점의 거리가 0이므로 첫번째와 같은 위치에 생성이 되어 마치 하나만 있는 것처럼 보입니다. 이것은 회전배열을 이해하는데 아주 중요한 메커니즘입니다.

스퀘어의 [Z] 축에 30을 입력하였습니다.  우측의 그림을 보면 시계반대방향으로 30도만큼 움직인 것으로 보입니다.  그런데 그것은 틀렸습니다. 

[Array]설정을 하지 않은 상태에서 [Z]축에 30을 입력 했다고 가정해 보세요.  원점을 기준으로 30만큼 이동하는 것이 당연합니다.  그래서 스퀘어가 반시계로 30도만큼 이동한 다음 [Array]에 의해 시계방향으로 다시 30도 위치에 나타난 것입니다. 

[Count]의 값을 늘려 보면 위와 같이 반시계로 나타나는 것을 알 수 있습니다.  물론 [Rotation Z] 값을 [ - ]로 하면 반대 현상이 나오겠군요.

기본적으로 객체에 [Rotation]을 적용하면 양수 일 경우 시계 반대방향 음수 일 경우 시계 방향으로 회전을 합니다.

그런데 회전할 객체에 [Rotation]을 적용해 보니 첫 번째 객체의 위치가 입력한 각도만큼 기호에 맞추어 시작을 하고 두 번째 객체부터 입력한 각도만큼 변화된 방향은 반대로 흘렀습니다.  왜 그럴까요?   이것은 문제가 있습니다.  배열을 할 스퀘어가 지정한 위치에서 시작을 하지 않기 때문에 직관적으로 그리기가 어렵습니다.

 

기준 객체의 회전

기준 객체의 큐브에 [Rotation]을 적용해 보니 스퀘어의 처음 위치는 변화하지 않고 정해진 각도만큼 변화하는 것을 확인하였습니다.  그런데 아쉽게도 이 방법도 문제가 있습니다.  왜냐하면 기준객체가 변하면 안 되니까요.

 

[Empty Object]의 등장

그래서 기준이 되는 객체는 일반객체가 아닌 [Empty]를 사용하게 됩니다.  [Empty]는 일반적인 객체와 거의 유사하게 사용을 하지만 보이지 않는 객체라서 최종 렌더링 시 표시를 해주지 않는 특징을 가지고 있습니다.   기준 객체의 변형이 생기지 않아야 하거나  원형배열 중심에 객체가 없어야 하는 경우가 대부분이기 때문에 [Empty] 객체는 매우 유용하다고 할 수 있습니다.  [Empty]의 종류는 매우 다양합니다.  그 중에서 자신이 사용하기 편리한 것으로 선택하시면 됩니다.

[Arrows] 객체를 추가해 보았습니다.  이 객체는 축의 방향도 표시하고 있고 객체 속에 묻혀 있어도 잘 찾을 수 있어 편리합니다.  스퀘어를 선택하고 [Object Offset]를 [Arrows]로 바꾸어 줍니다.  여기서는 객체의 이름을 [Epy Arrow]로 바꾸어 보았습니다.

[Epy Arrow] 객체가 [Rotation, Z] 값에 따라 잘 회전이 되고 있으며, 스퀘어의 시작위치도 변하지 않고 가운데 있는 기준 객체도 아무런 변화가 없습니다.  스퀘어의 시작위치는 원하는 곳에 위치를 시키면 되며 [Origin]의 위치가 반드시 기준객체의 위치와 동일해야 같은 거리로 회전을 합니다.  오브젝트 모드에서 위치를 바꾸게 되면 [3D Cursor]의 위치도 확인해야 하고 회전될 객체의 [Origin]도 옮겨야 하기 때문에 이용하기 나름이지만 에디트 모드로 변경을 하고 위치나 모양을 변경하는 것이 편하기는 합니다.

 

기준 객체와 원형 배열 객체의 동시 이동, 회전, 크기변경

기준객체, [Empty], 배열을 할 객체를 모두 선택을 하고 변형을 하면 됩니다.  그런데 매번 이렇게 하기 번거로우면 [Parent] 설정을 하는 방법도 있습니다.  기준이 되는 객체를 부모로 놓고 따라가는 객체를 자식으로 설정하는 것입니다.  이렇게 하고 부모가 되는 객체를 변형하면 자식도 똑같이 따라 변형이 됩니다.  (feat. 자식 객체만 움직이면 따로 움직입니다.)

[Origin] 위치는 항상 일치해야 하므로 [Empty] 객체와 큐브를 결합해 보겠습니다.

일반적으로 큐브를 선택해서 움직일 것이기 때문에 큐브가 부모가 되고 [Empty]가 자식이 될 것입니다.  그래서 2개의 객체를 같이 선택하고 <Shift>를 누른 상태로 큐브를 다시 선택해 줍니다.  그러면 큐브는 활성화 객체가 됩니다.  다시 <Ctrl+P>를 누르면 [Set Parent To] 메뉴가 뜨는데 [Object]를 선택해 줍니다.  객체를 왼쪽으로 이동해 보았습니다.

잘 안 되는군요.  그렇습니다. 스퀘어도 묶어 주어야 합니다.  이 때는 부모가 큐브가 되어도 되고 [Empty]이어도 됩니다.  직관적으로 이해하기 쉽게 스퀘어의 회전 기준이 [Empty]이므로 [Empty]를 부모로 설정해 보겠습니다.

[Empty]를 부모로 설정하고 <Ctrl+P>, [Object] 해 보았습니다.  큐브를 왼쪽으로 움직였더니 잘 움직입니다.

이제는 임의로 위치도 바꾸어 보고 회전도 시켜 보았는데 잘 붙어 다니고 있습니다.  스케일 변화에도 동시에 잘 변화합니다.

결론은 모든 객체를 선택하고 기준 객체(예제에서는 큐브)를 활성화객체로 하여 [Parent]하면 됩니다.

 

원형배열의 원리에 대한 정리

[Empty] 객체의 [Transforms] 값과 배열할 객체의 [Transforms]의 값은 서로 밀접하게 연결되어 있습니다.  물론 연결고리는 스퀘어에서 [Modifier, Arrary]를 설정함으로써 연결됩니다.  앞에서 배열을 할 객체인 스퀘어의 [Rotation] 값을 양수로 하면 첫번째 객체는 시계 반대방향으로 이동한 다음 두 번째 객체부터 시계 방향으로 움직인다고 했는데요. 

    (기준 객체의 값<Cube Rotation Z = 0>) - (배열할 객체의 값 <Square Rotation Z = 30>) = -30

결과 값이 음수이므로 시계방향으로 움직인 것 입니다.  마찬가지로 [Transforms]의 연산에 의해 값이 결정되므로 최대한 단순화 시키고 직관성을 높이기 위해 [Origin] 위치를 맞추고 둘 중에 하나는 가급적 초기화 해 주어야 합니다. 

큐브의 스케일을 0.5로 하고 15도 회전한 다음  [X]축으로 2만큼 이동한 그림이며 [그림 1]은 적용 전, [그림 2]는 [Array]만 설정 상태, [그림 3]은 [Origin]만 [Empty]와 일치 시킨 상태입니다.  <Ctrl + A> 하여 [Rotation]과 [Scale]을 초기화 하면 첫번째 그림과 같아 질 것입니다.  이렇게 초기화를 하지 않으면 배열의 개수가 늘어날 수록 제어하기가 힘이 들어 집니다.  제어하기가 힘들 뿐 필요하다면 값을 바꾸어 가며 디자인 해도 상관은 없습니다.  

배열을 할 객체의 [Transforms]을 초기화해야 하는데 만들어 놓은 객체가 변하면 안 되겠지요?

객체의 초기화 [Apply] : 객체 선택 후 <Ctrl + A> => [Rotation & Scale]
객체의 모양이나 방향은 변하지 않으면서 [Rotation]은 모두 [0]으로 바뀌고 [Scale]은 모두 [1]로 바뀝니다.
[Location]은 [Empty]의 [Origin]과 일치시키는 작업을 할 것이기 때문에 굳이 할 필요는 없습니다.

 

원형배열을 하기위한 처리과정 정리

1. 기준 객체의 [Origin] 위치에 3D커서를 옮겨 놓는다. : <Shift + S> => [3D Cursor to Selected]
2. [3D Cursor]에 [Empty] 객체를 생성한다. : <Shift + A> => [Empty]
3. 배열을 할 객체의 [Rotation & Scale] 초기화 : <Ctrl + A>
4. 배열을 할 객체의 [Origin]을 [3D Cursor]에 위치시킨다. : 마우스 우 클릭 => [Set Origin] => [Origin to 3D Cursor]
5. 배열을 할 객체를 선택하고 [Modifier] > [Array]를 생성한다.
6. [Array] 옵션에서 [Relative Offset]과 [Constant Offset]은 체크해제 한다
7. [Array] 옵션에서 [Object Offset]을 체크하고 [Object]에 기준이 될 [Empty] 객체를 설정한다.
8. [Array][Count]에서 배열을 시킬 개수를 입력한다.
9. [Empty]의 [Transform]의 [Rotation]에서 원하는 축의 방향에 원하는 각도를 입력한다.
10. [Empty] 객체를 부모(객체를 활성화)로 하고 배열을 할 객체를 자식으로 하여 [Parent] 시킨다 : <Ctrl + P>
  (배열을 할 객체의 부모로서 기준 객체를 설정해도 된다)
11. 기준 객체가 있다면 이것을 부모로 하고 [Empty] 객체를 자식으로 하여 [Parent] 시킨다 : <Ctrl + P>  
※ [Parent] 해제 : 자식 객체를 선택하고 메뉴에서 [Object] => [Parent] => [Clear Parent] 또는 <Alt + P>

 

360도 정배열하기

[Count] 개수가 3개라면 120도 4개라면 90도를 입력하면 되겠지만 7개라든지 11개라면 계산하기가 힘들 것입니다.

값을 입력할 때 연산자를 사용하여 입력하는 방법이 있습니다.  7개를 정배열 하고 싶다면 [360 / 7], 11개를 정 배열 하고 싶다면 [360 / 11] 이렇게 입력하면 됩니다.

 

다양한 모양으로 응용하기

 

다음 시간을 기대해 주세요.

다음 시간에는 기울어진 면에 사용하는 Array에 대해 알아보겠습니다.

감사합니다.

 

댓글