티스토리 뷰

토끼마을 개발 백서/Shape Control

모션 확대범

-크리에이터- 2024. 7. 23. 21:51

안녕하세요! 오늘은 '모션 확대범'에 대해 알아볼 거예요.

이름만 들어도 무시무시할 것 같은 이 친구는 사실 Shape Control 마을 기술의 정수로, 다양한 토끼의 모션 구현을 가능하게 해주는 핵심적인 역할을 하는, 이른바 한 집의 가장같은 친구랍니다.

그럼 시작합니다!

 

모션

 

여기 어떤 모션이 있습니다. 우리는 이 모션을 두 배로 '확대'해서 표현하고 싶어요.

제가 한번 지금까지 알아본 물체의 연결 방식을 통해서 모션을 두 배로 확대해볼게요.

 

모션 확대?

 

저는 원래 모션의 공을 Source로, 새로운 모션의 공을 Target으로 설정한 뒤 Target의 위치를 Source의 위치의 2배에 해당하는 지점으로 연결했어요.

이렇게 하면 확실히 모양이 두 배 늘어난 것처럼 보이긴 해요. 하지만 전체적인 느낌은 왠지 모르게 비슷한데, 왜일까요?

맞아요! 두 공의 움직이는 거리가 같기 때문이에요. 따라서, 이 방법은 모션을 '확대'하는 방법으로 사용하기에는 무리가 있어요.

그렇다면 대체 뭘 해야 모션을 '확대'할 수 있을까요?

 

모션 확대의 원리

 

모션 확대에는 여러 방법이 있는데, Shape Control 마을에서는 Source 객체의 '나중 위치'에서 '처음 위치'를 뺀 벡터를 n배하여 Target 객체의 '처음 위치'에 더하는 방법으로 모션을 확대하기로 했어요.

이 밖에 모션의 양상을 벡터함수로 표현한 후 수학적인 방법을 통해 확대하는 방법도 생각해볼 수 있지만, 이는 복잡한 모션이나 손으로 만든 모션에 적용하기에는 무리가 있어서 Shape Control 마을에서는 어떤 모션이든 확대할 수 있는 위의 방법을 사용하게 되었어요.

참, '나중 위치'에서 '처음 위치'를 뺀 벡터를 앞으로는 '위치 델타'라고 표현할게요!

 

모션 확대

 

이 방법을 적용하여 처음의 모션을 확대해보았답니다.

어때요? 확실히 2번째보다 3번째 예시가 모션이 제대로 확대된 것처럼 보이죠?

 

지금까지 모션을 확대하는 원리에 대해 알아보았어요.

여기서 끝은 아니고, 이 모션 확대의 방법은 놀랍게도 세 가지 방법으로 구현할 수가 있답니다.

어떤 방법이 있을까요? - 앞에서 세 가지 위치 표현법을 알아보았죠? 이 세 표현법을 각각 적용하여 위치를 확대할 수가 있어요. 한번 보여드릴게요.

Local 방법

 

먼저 Local 방법에 대해 보여드릴게요.

Local 방법은 Source 객체의 Local Position을 기준으로 위치 델타를 정하는 방법이에요.

이는 객체의 실제 Parent를 위치 선정의 기준으로 하기 때문에 유니티 사용자들에게 친숙한 적용법일 수 있어요.

이렇게 얻은 위치 델타는 원하는 만큼 곱해져 Target 객체의 Local Position에 적용된답니다.

 

Local 방법 모션 확대

 

이렇게 Local을 기준으로 모션을 확대하면, 위치 선정 기준이 객체의 실제 Parent가 되기 때문에 Parent의 움직임에 대해 상대적으로 작용하는 모션 확대를 구현할 수 있어요.

때문에 대부분의 모션 확대 케이스에서는 Local 확대 방법이 사용된답니다.

 

그럼 나머지 두 방법은 무엇일까요?

남은 건 World 방법과 Pivot 방법이 있는데, 먼저 World 방법에 대해 알아볼게요.

 

World 방법

 

World 방법은 Source의 World 좌표를 기준으로 위치 델타를 정하는 방법이에요.

이 방법은 위치 선정의 기준이 World이기 때문에 Local 방법과 다르게  좌표계의 기준이 필요 없다는 특징을 가지고 있어요.

어떻게 보면 가장 간단한 모션 확대 방법이라고 볼 수도 있겠네요.

 

World 방법 모션 확대

 

방법이 간단한 만큼 World 방법은 모션 확대도 직관적으로 이루어져요.

다음은 Pivot 방법에 대해 알아볼게요.

 

Pivot 방법

 

Pivot 방법은 제 3의 객체인 Pivot을 위치 선정 기준으로 하는 모션 확대 방법이에요.

World 방법 모션 확대와 Pivot 방법 모션 확대는 World 방식 연결과 Pivot 방식 연결의 특징을 공유하는데, 바로 Pivot 객체가 고정된 상태로 존재한다면 Pivot 표현법으로 정의된 모션과 World 표현법으로 정의된 모션이 완전히 같다는 점이에요.

이 때문에 차이점을 보려면 역시 Pivot 객체가 움직이는 상황을 봐야 되겠죠?

Pivot 방법 모션 확대

 

오른쪽을 World 방법, 왼쪽을 Pivot 방법으로 해서 모션을 확대한 후 각각 Pivot을 움직여봤어요.

보면 World 방법은 난해한(?) 움직임을 보이고 있지만, Pivot 방법은 일정한 움직임을 보이는 걸 볼 수 있죠?

이처럼 Pivot 방법은 Pivot 객체의 관점에서 볼 때 모션이 World 방법과 같아지게끔 표현된다는 특징이 있는데, 이 때문에 Pivot 방법은 Local 방법 다음으로 많이 쓰이는 모션 확대 방식이 된답니다.

 

여기서 한가지 질문: 그럼 대체 World 방법 모션 확대는 언제 사용될까요?

정답은 - 사용되지 않습니다! 객체가 한 자리에 고정되어 있다면 World 표현법도 쓸모가 있겠지만, 대부분의 객체는 World상에서 움직이기 때문에 이 표현법이 직접적으로 적용될 자리는 찾기 어려운 게 사실이에요.

 

하지만  World 표현법 자체는 쓸모가 있을 때가 있답니다. 바로 Pivot 모션을 정의할 때에요!

이 세 친구들의 특징 중 서로가 서로의 표현법으로 변환될 수 있다는 점이 있는데, 이 점을 활용하면 위치, 회전, 스케일이 제각각인 Pivot 객체를 신경쓰지 않고 World 좌표를 통해서 복잡한 Pivot 좌표를 직관적으로 한방에 설정할 수 있어요.

 

이 특징은 지금 다루기에는 조금 추상적일 수 있어서, 다음에 Transform Syncer 객체를 다룰 때 한번에 보여드릴게요.

그럼 그때 다시 만나요!

'토끼마을 개발 백서 > Shape Control' 카테고리의 다른 글

다음 일지는 11월에 올라와요  (0) 2024.08.03
Transform Syncer  (0) 2024.07.26
Transform Parent  (2) 2024.07.16
세 가지 위치 표현법  (1) 2024.07.13
Shape Control 마을  (0) 2024.07.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함