블렌더/블렌더 팁

[blender tips] 07. 블렌더 Modifier - Array 사용하기 (7)

노루3759 2022. 10. 31. 23:28
반응형

커브에 맞춰 배열하기

지금까지는 아래 그림처럼 Array modifier에 curve modifier를 함께 사용해서 커브에 오브젝트를 배열했다. 하지만 정확하게 말하자면 이 방법은 커브에 오브젝트를 배열하는 것이 아니라, 배열된 오브젝트를 커브에 맞춰 deform(변형)하는 방법이다. 

 

아래 두 배열을 비교해 보면 차이를 명확하게 알 수 있다. 1번에서는 커브를 따라 배치된 박스 오브젝트들이 변형되었다. 2번은 박스 오브젝트들이 커브를 따라 배치되었지만 그 모양은 변형되지 않고 박스 모양을 유지하고 있다. 말 그대로 커브를 따라 배열만 된 것이다. 

지금까지 살펴본 대로 Array modifier에 curve modifier를 함께 사용해 오브젝트를 커브에 배열하면 1번처럼 박스 오브젝트에 변형이 일어난다. 당연하게도 curve modifier은 deform 계열의 모디파이어이기 때문에 오브젝트를 변형시킨다. Array된 배열을 curve modifier을 함께 사용해서 마치 커브를 따라 배열이 된 것처럼 보이게 만든 것이지, 실제로 커브를 따라 배열한 것은 아니다. 

그래서 오브젝트를 커브를 따라 배치시킬 때, 2번처럼 오브젝트의 변형을 피하고 싶다면 몇 가지 작업을 더 해주어야 한다. 

 

 

 

 

Object Properties >>> Instancing

 

이 방법을 사용하기 위해 먼저 알아야 할 옵션이 있다. 부모 오브젝트에 자식 오브젝트를 복사하여 보여주는 Instancing 옵션을 사용할 것이다. 먼저 오브젝트의 부모 자식 관계를 설정할 오브젝트를 만들어 준다. 부모가 될 평면을 하나 만들어 parent object로 이름 지어주고, 자식이 될 원숭이를 하나 만들어 child object로 이름 지어 준다. 

 

 

이제 parent object와 child object를 선택해서 set parent(단축키 ctrl + p) 명령을 사용한다. set parent에도 여러 가지 옵션이 있지만 일단 Object 옵션을 선택한다. 아래 그림처럼 parent object가 활성화 된 상태로 set parent를 해서 parent object가 child object의 부모 오브젝트가 되게 설정해야 한다.

레이어 창에서 parent object 하위에 child object가  배치된 걸 알 수 있다. parent object가 부모 오브젝트, child object가 parent object의 자식 오브젝트로 설정되었다. 이 레이어를 보면서 오브젝트 간의 관계 설정이 어떻게 되었는지 파악할 수 있다.

 

부모 자식 관계가 설정되었을 때 부모 오브젝트를 움직이면 자식 오브젝트가 같이 움직인다. 자식 오브젝트를 움직이면 부모 오브젝트는 움직이지 않는다. 

 

이 상태에서 부모 오브젝트를 선택하고 아래 그림처럼 instancing 메뉴에서 Faces를 체크해 준다. 

 

그러면 아무 변화도 없는 것처럼 보이지만, 편집 모드에서 면들을 더 만들어 보면 차이를 알 수 있다. parent object의 편집모드로 들어가 extrude 명령을 사용해 아래 그림처럼 면을 더 만들어주면, 새로 생긴 면들 위에 자식 오브젝트가 자동으로 만들어지는 것을 알 수 있다. 이 Instancing 옵션은 바로 부모 객체의 각 면에 하위 객체, 즉 자식 오브젝트의 복사본(instance 복사)을 만들어서 각 면에 배치해 주는 옵션이다. 

 

부모 오브젝트에 면들을 많이 만들어 보면, 부모의 면 위에 자식 오브젝트가 instance 되어서 나타나는 걸 알 수 있다.

 

Vertices를 선택하면 아래 그림처럼 부모 오브젝트의 각 vertex 위에 자식 오브젝트가 생긴다. 

 

 

면에 배치할 때 원숭이의 방향을 바꾸길 원한다면 아래 그림처럼 면을 수동으로 수정해야 한다. 

 

 

 

instancing 사용하여 배열하기

 

조금 번거로운 작업이 되겠지만 이 Instancing 복사 방법을 사용해서 아래 그림처럼 배치할 것이다. 먼저 plane을 만들어서 Array modifier와 Curve modifier를 사용해 커브를 따라 배열한다. 그리고 box를 만들어서 이 plane과 부모 자식 관계로 instance 복사를 해 줄 것이다. 

 

과정이 조금 복잡하기 때문에 처음부터 하나씩 만들어 보도록 하겠다. plane 하나와 커브 하나를 만들어 준다. 그리고 우리가 실제로 커브를 따라 배치하려고 하는 box 오브젝트도 하나 준비한다. 

 

그리고 커브와 plane의 오리진을 맞춰주고, 아래 그림처럼 Array modifier, Curve modifier를 적용해 준다. 

이전 글들에서 살펴본 것처럼 plane이 커브에 맞게 잘 배열된다. 하지만 배열된 plane이 커브의 모양에 맞춰 변형되었다. 

 

이제 plane과 box를 선택해서 set parent(단축키 ctrl + p)를 명령을 사용한다. plane이 활성화 된 상태로 set parent를 해서 plane이 box의 부모 오브젝트가 되게 설정해야 한다. 

 

레이어 창에서 Plane 오브젝트 하위에 Box 오브젝트가 배치된 걸 확인하자. plane 오브젝트가 부모 오브젝트, box 오브젝트가 plane의 자식 오브젝트로 설정되었다. 

 

이 상태에서 plane을 선택한 다음, object properties 항목에서 아래 그림과 같이 Instancing >>> Faces 항목을 체크해 준다. 그러면 아래 그림처럼 오브젝트가 배치되는 걸 알 수 있다. 

 

box와 plane의 위치가 어긋나는 것은 복사하기 전 box와 plane의 origin 위치가 다르기 때문이다. box와 plane의 차이만큼 box가 복사되는 것은 당연한 일이다. 

 

이전에 살펴봤던 align tools를 이용해서 오브젝트를 쉽게 정렬할 수 있다.

 

그러면 아래 그림처럼 box가 잘 배열된다. box가 실제로 커브를 따라 배열된 것이 아니고, box의 instance된 복사본들이 plane의 각 면 위에 복사되어 있는 상태라는 것을 기억해야 한다. 실제 커브를 따라 배열된 것은 plane array이다. 

 

레이어 창에서는 box를 꺼주고, 옵션 창에서는 plane의 show instancer 메뉴의 viewport 항목을 꺼준다. 그러면 아래 그림처럼 배열된 오브젝트만 남는다. 

 

Instancing에서 None을 눌러 이 옵션을 꺼주면 아래 그림처럼 박스들이 사라지는 걸 알 수 있다. 

 

 

이제 아래 두 그림을 비교해 보면 명확한 차이를 알 수 있다. 1번은 단순히 박스에 Array modifier + Curve modifier를 사용해서 배열하였다. 2번은 박스를 대신해 plane을 먼저 커브에 배열해놓고, 그 plane의 면 위에 instance 복사한 박스를 배치하는 방법을 사용하였다. 그러면 마치 박스를 커브 위에 배열한 것처럼 보인다. 

 

 

또는 아래 그림처럼 커브를 Mesh로 Convert 해서 메쉬로 바꿔주고, 두 오브젝트를 부모 자식 관계로 바로 만들어 사용해도 된다. 

 

그러면 커브의 점들을 기준으로 박스를 복사해서 배치해 준다. 

 

하지만 이때는 커브가 더 이상 curve object로 동작하는 게 아니라 메쉬로 동작하기 때문에 많은 점들을 일일이 수정해 주어야 해서 불편하다. curve object 상태일 때는 커브의 점 몇 개만 조절해 주면 곡선이 잘 표현되는 것과는 비교된다. 그리고 점이 적어지면 곡선이 부드럽게 표현되지도 않는다. 

 

 

 

 

이런 방식으로 오브젝트 모양을 찌그러트리지 않고 커브를 따라 배열할 수 있다. 과정이 너무 복잡하다고 느껴질 수 있지만, 작동하는 원리를 알고 나면 그렇게 복잡하지도 않다. Array modifier나 curve modifier가 작동하는 원리를 자세히 설명해 놨으니 보면서 따라 해보면 쉽게 이해할 수 있을 거라고 생각한다. 

 

그래도 이 방법이 너무 번거롭게 느껴진다거나, 좀 더 디테일한 배열을 원한다면 수동으로 하나씩 오브젝트를 배치하는 것도 하나의 방법이다. 혹은 블렌더 개발자에게 Array modifier에 커브를 따라 배열하는 기능을 자체적으로 추가해 달라고 메일을 보내는 것도 좋은 생각인 거 같다. 

 

 

 

 


07. 블렌더 Modifier - Array & Curve - 연결된 글입니다. 

 

07. 블렌더 Modifier - Array (1)

07. 블렌더 Modifier - Array (2)

07. 블렌더 Modifier - Curve (3)

07. 블렌더 Modifier - Curve (4)

07. 블렌더 Modifier - Array 사용하기 (5)

07. 블렌더 Modifier - Array 사용하기 (6)

07. 블렌더 Modifier - Array 사용하기 (7)


 

반응형