참치김밥은 최고의 한식이다

[Unity] Final IK Tutorial 정리 - Interaction System Basics (1) 본문

Unity

[Unity] Final IK Tutorial 정리 - Interaction System Basics (1)

l__j__h 2023. 6. 19. 13:52

목적 : 여러 오브젝트와의 상호작용에 맞게, 기존의 애니메이션을 유동적으로 변형시킬 수 있음
예시 : 문 열기, 공 던지기, 공 잡기 등

 

STEP 1 : 아바타에 Final IK 컴포넌트 추가하기 :

아바타 오브젝트에서 Animator와 같은 계층에

(1) Full Body Biped IK

(2) Interaction System

2 개의 컴포넌트를 추가한다.

 

STEP 2 : 상호작용할 오브젝트 생성하기

*본문에서는 테스트를 위해 Sphere를 생성하였음

상호작용할 오브젝트를 생성 또는 임포트한 후, Interaction Object 컴포넌트를 추가한다.

 

STEP 3 : Interaction Object 컴포넌트 값 조정하기

① Weight Curves 의 size를 (일단) 1만큼 늘리고, Curve를 클릭한다.

② Curve 그래프를 아래와 같이 조절한다.

왜 위 과정을 거치냐면..!

(내가 본 바로는) 위 그래프의 가로축은 시간, 세로축은 Weight 이다.

즉, 이 Interaction Object가 아바타의 Full Biped IK에 영향을 주는 정도를 그래프로 지정할 수 있는 것이다.

쉬운 이해를 위해서, 위의 ∩ 형태 그래프를 예시로 들어보자면,

처음(x=0)에는 weight(y) = 0이었다가, 중간에(x=0.5) weight = 1, 마지막에(x=1) weight=0이 된다.

즉, 이 Interaction Object는 아바타의 Full Biped IK에 처음에는 영향을 주지 않다가, 중반부에 완전히 애님을 바꾸고, 그리고 마지막쯤엔 다시 원래 애님으로 복귀한다는.. 뜻이다.

 

더 쉽게 풀어서 쓰자면,

Interaction Object = 문(door) 이고,

Interaction Object가 문을 여는 애니메이션을 발동시킨다고 하자.

우리의 아바타는 문 앞에서 Idle 애니메이션을 반복 재생하고 있다.

위의 그래프에 따르면, 이 아바타가 문을 여는 동작을 (문을 클릭하든, 버튼을 누르든) 시행하면,

처음에는 idle에 가까운 애니메이션을 하고 있지만, 문을 여는 동작의 피크. 중간 지점(문고리를 잡고 돌리는 동작)에선 완전히 Interaction Object에 Full Biped IK의 주도권을 넘겨버리고, 마지막에는 다시 idle로 원상복귀 한다는 뜻이다.

 

물론, ∩ 형태 그래프가 아닌, 다른 형태 그래프라면 해당 그래프의 x, y축 값의 흐름에 따라 애님이 변화할 것이다.

 

이 Weight Curves(위에서 계속 언급한 "그래프")는 바로 밑의 Multipliers를 통해 다른 방식에도 적용할 수 있다.

아래 사진을 보자

(1) Weight Curves의 Type(사진의 0)을 지정

(2) Multipliers 에서 인풋으로 쓸 Weight Curves의 Type을  Curve(사진의 1)에 지정

(3) 최종적으로 어디에 영향을 줄 것인지를 Result(사진의 2)에서 고르기

 

위 사진대로라면,

Position Weight 타입인 0번째 Weight Curves를 인풋으로,

Rotate Bone Weight 와  Poser Weight에도 똑같이 영향을 줄 것으로 예상할 수 있다.

 

STEP 4 : 상호작용 테스트해보기

Interaction System Test GUI를 추가한 후, (아무데나 추가해도 될 것 같긴 한데, 영상에서는 아바타의 Interaction System과 같은 계층에 추가하였다.)

Interaction Object, Effectors를 적절히 선택하고,

Play 버튼을 누른 뒤 게임 뷰의 좌상단에 나타나는 버튼을 눌러보며 아바타가 잘 상호작용하는지 확인해보자

 

여기까지 따라했다면, 어? 작동은 잘 하는데.. 좀 어색하네..;; 싶을 것이다.

애니메이션의 정확도를 위해, Final IK에서 제공하는 컴포넌트(Interaction Target)를 추가해야 한다. 간단하니까 잘 따라해보장

 

STEP 5 : 원하는 손 모양 본뜨기

(*어떤 애님을 만드냐에 따라 손이 될 수도, 발이 될 수도 있다. 영상에서는 일단 손으로 진행함)

 

(1) 플레이 버튼을 누른 뒤, 씬 뷰에서 아바타의 손 모양을 원하는 대로 조작해 놓는다. 아래와 같이 손가락도 세밀하게 조절하면 애니메이션이 더 섬세해질 것이다.

(2) 본인이 조작한 부위의 오브젝트만 클릭해서 ctrl + c 로 복사한다.

(3) 플레이 버튼을 눌러 플레이를 종료한다.

(4) Interaction Object의 자식으로 복사한 부위를 붙여넣는다.

 

(5) 복사한 부위의 root 오브젝트에 Interaction Target 컴포넌트를 추가한다.

 

(6) Effector Type을 본인이 조작한 부위에 맞게 선택한다.

(* 영상에서는 Right Hand를 선택함)

 

(7) 원본 아바타의 똑같은 부위로 가서, Hand Poser 컴포넌트를 추가한다.

 

STEP 6 : 드디어 다시 테스트해보기!!!

플레이 버튼을 누르고, 다시 좌상단의 버튼을 눌러 보면, 본인이 조작한 대로 손 모양이 이쁘게 나올 것이다 !

 

사실 여기까지만 해도 참 좋지만..

캐릭터가 조금만 측면/반대측에서 상호작용을 하면..

위 사진처럼 손이 꺾여버린다..

 

그래서 아래의 마지막 스텝만 따라하면 정말 정말 자연스러운 애니메이션을 만들 수 있다..!

고정된 위치에서만 상호작용한다면 아래의 스텝을 따라할 필요는 없다.

 

STEP 7 : Pivot 오브젝트 생성하기

 

Interaction Object의 자식으로,

(1) 빈 오브젝트를 생성한다.

(2) Position, Rotation 값을 모두 0으로 초기화한다.

(+) 빈 오브젝트의 이름을 Target Pivot 등으로 설정한다.

 

(3) 조작한 부위 전체를 Pivot의 자식으로 옮겨버린다.

 

(4) Interaction Target의 Pivot에 Target Pivot을 끌어다 할당한다.

(5) 위 사진의 Rotate Once 옵션을 off한다 (끈다) 사실 이 부분은 왜인지 아직 모르겠다 자세히 찾아보진 못했음

 

STEP 마지막 !! : 다시 플레이 해보기!!!!!!!

짠~~~ ! 이제 캐릭터가 어디에서 누르든, 손 동작이 매우 매우 자연스러워졌다~~!@ 젠장 이거 진짜 사람 아니냐고 어이-

 

Interaction Systems 2편에서 다른 응용 방법도 정리하겠음~!

728x90