티스토리 뷰
여러분 안녕하세요!
저번 시간에 우리는 Shape Control 마을의 기초가 되는 세 친구, Local, World, 그리고 Pivot을 만나봤어요.
오늘은 이 친구들이 실제로 어떻게 프로젝트에 적용되는지 확인해보는 시간을 가져보려고 해요.

오늘의 목표는 왼쪽의 빈 토끼에 얼굴과 삽을 추가해서 오른쪽처럼 삽을 들고 일하는 토끼를 만들어보는 거예요
그럼 시작합니다!

토끼에 여러 물체들을 붙여주려면 먼저 토끼를 구성하는 객체들이 무엇이 있는지 알아야 해요.
토끼는 멀리서 보면 큰 뭉치 한덩어리로 이루어진 것 같지만, 실제로는 귀, 머리, 꼬리 등 다양한 객체들의 집합으로 구성되어 있어요.
이 객체들이 개별적으로 움직이기 때문에 토끼가 다양한 움직임을 할 수 있는 것이랍니다.
우리의 목표는 얼굴을 머리에, 삽을 오른손에 붙여서 얼굴과 삽을 머리와 손의 움직임과 같게 하려는 거예요.
머리와 오른손은 이미 움직이고 있으니, 우린 이들을 연결해주기만 하면 되겠죠?
이걸 저번 시간에 소개한 Source - Target 방식의 도식으로 나타내볼게요.

그러면 이렇게
1 : 얼굴(Target) - 머리(Source) 파트 (빨간색)
2 : 삽(Target) - 오른손(Source) 파트 (보라색)
두 가지의 그룹으로 표현할 수 있어요.
이 중 얼굴-머리 그룹은 Local로, 삽-오른손 그룹은 (손이 움직일 때마다 삽까지 같이 움직이면 위험할 수 있으니) Pivot 모드로 붙여서 우리가 원하는 움직임을 만들어 볼게요.
참, 이렇게 서로 연관되어 움직이는 그룹은 앞으로 '파트'라고 부를게요!
그럼 실제로 프로그램에 이 파트들의 정보를 입력해볼까요?

Shape Control 마을에서는 Transform Parent Data라는 객체를 이용해서 이 파트들을 지정할 수 있어요.
이 객체를 이용하면 하나의 뭉텅이(여기서는 토끼와 이를 구성하는 모든 객체들이 되겠네요!)에 적용되는 모든 연결 파트들을 한번에 지정해줄 수 있어요.


저는 첫번째 파트로 'Target은 얼굴, Source는 머리를, 연결을 Local 방식으로 하라'는 명령을 적었고, 두번째 파트로 'Target은 삽, Source는 왼손, Pivot은 토끼 원점, 연결은 Pivot 방식으로 하라'는 명령을 넣었어요.
(이 외에도 다양한 명령을 적을 수 있는데, 이건 다음에 기회가 된다면 알아보도록 해요!)
이렇게 명령을 기반으로 연결을 구성하면 실제 객체가 없어도 연결 데이터를 독립적으로 관리할 수 있는 장점이 있으며, 또 객체가 변경될 때마다 객체의 주소를 바꿔줄 필요 없이 이름만 맞춰주면 된다는 편의성도 얻을 수 있어요.
예를 들면, 이는 요리사가 손님으로부터 직접 주문을 받아 음식을 만드는 방법이 아니라 손님이 주문서에 주문을 작성하면 요리사가 주문서를 보고 음식을 만드는 방법과 비슷하다고 볼 수 있어요. (조금 유식한 말로는 '커맨드 패턴'이라고 해요!)
이러면 음식 재료가 없어도 주문서를 미리 만들어둘 수도 있고, 중간에 요리사가 바껴도 주문서만 있다면 요리를 계속 만들 수 있다는 장점이 있지요.
그럼 우리도 이 주문서를 한번 요리사에게 전달해서 실제 요리를 만들어 볼까요?


토끼마을에서는 이 주문서를 'Transform Parent'라는 객체가 받아서 연결을 수행해요.
Transform Parent는 주문서인 Part와 재료인 Rabbit을 가지고 있는데, Part를 받으면 가지고 있는 Rabbit에서 Part와 같은 이름의 객체를 선택한 뒤 이들을 Part에 써있는 정보대로 연결한답니다.

이렇게 원하는 객체를 선택하여 연결하는 과정을 Bind라고 부르며, Transform Parent의 상태는 Bind가 일어나기 전인 Idle과 Bind가 일어난 후인 Binded로 나뉘어요.
Idle 상태에서 객체는 서로 연결되어 있지 않은 상태이고, Binded 상태에서는 Parts 데이터에 써있는 정보대로 객체가 연결되어 있는 상태라고 할 수 있지요.
그럼 실제로 객체를 Bind해 볼까요?

짠! 이렇게 연결이 잘 된 걸 볼 수 있답니다.
연결을 확인하기 위해 토끼가 두 번 점프를 할 때마다 Transform Parent를 꺼 봤는데, 확실히 잘 작동하는 게 보이죠?
참, 마지막으로 Local 연결과 World 연결, 그리고 Pivot 연결의 차이점을 보여드리려고 해요.
저번 시간에 사진으로 잠깐 보여드렸는데, 아무래도 실제 상황에서 보여드리는 게 체감이 될 것 같아서요.
토끼의 삽을 세 가지 방식으로 한번 연결해볼게요!

먼저 토끼의 위치가 변하지 않을 때의 Local, World, Pivot 연결이에요.
Local 연결은 손의 움직임을 정확히 따라가지만, 나머지 두 연결은 손의 위치만 따라가는 것을 볼 수 있어요.
이렇게 보면 World와 Pivot 연결은 같은 것처럼 보일 수 있어요 - 왜냐면 둘다 Pivot이 움직이지 않는 상황이기 때문이에요!
Pivot 연결의 진가는 Pivot 객체가 움직일 때 드러난답니다.

움직임 변화를 보기 위해 직접 Pivot 객체를 회전시켜 봤습니다.
보면 World 방식으로 연결된 삽은 왼손에 대한 위치만 유지하는 반면, Pivot 방식으로 연결된 삽은 왼손에 딱 맞게 움직이는 걸 볼 수 있죠?
이처럼 세 가지 연결 방식은 각각 특색을 가지고 있답니다.
오늘은 이렇게 실전에서 세 연결 방식을 적용하는 방법에 대해 배워 봤어요.
다음 시간에는 토끼 움직임에 대한 핵심, 모션 확대범에 대해 알아볼게요.
그럼 그때 봐요!
'토끼마을 개발 백서 > Shape Control' 카테고리의 다른 글
| 다음 일지는 11월에 올라와요 (0) | 2024.08.03 |
|---|---|
| Transform Syncer (0) | 2024.07.26 |
| 모션 확대범 (3) | 2024.07.23 |
| 세 가지 위치 표현법 (1) | 2024.07.13 |
| Shape Control 마을 (0) | 2024.07.11 |