본문 바로가기
Unreal 게임 개발/Unreal Tool 활용

Unreal Control Rig

by daisy0461 2023. 2. 21.

Animation을 공부하는 중 자연스러운 움직임 구현을 위해서 Control Rig를 공부하게 되었다.

 

다음과 같이 Control Rig를 만들 수 있다.

 

만든 것을 눌러서 켜보면 Event Graph와 비슷하게 생긴 창이 하나 나타나게 된다.

이 창에서 Inverse Kinematics에 사용되는 계산들을 계산하게 된다.

 

일단 Skeleton을 지정하기 위해서 캐릭터의 Skeleton을 살펴보자

현재 캐릭터의 Skeleton 창이고 Bone 하이러키에 ik가 붙은 것들이 있는 것을 확인할 수 있다.

이 ik가 붙은 bone들은 Mesh를 가지고 있지 않기 때문에 움직이거나 돌려도 캐릭터의 생김새에는 영향을 주지 않는다.

하지만 ik들은 IK를 사용할 때 사용된다.

 

왜 그냥 Bone이 아니라 IK Bone을 사용하는가??

IK Bone이 Mesh가 없다고  했다. 이 IK Bone을 통해서 계산을 끝낸 후에

실제로 Mesh가 적용된 Bone을 움직인다. 

 

 

지금 캐릭터 Skeleton에는 ik bone들이 있지만 자신이 선택한 캐릭터가 ik bone들이 없다면

virtual bone을 생성하면 된다.

하이러키에서 우클릭을 한 후 Add Virtual Bone을 선택한다.

그리고 Pick Target Bone이 있는데 여기서 어떤 Bone에 관해서 Virtual bone을 만들것인지 정하면 된다.

예를 들어 hand_l과 관련해서 만들고 싶으면 VB_hand_l이 만들어지고 이것은 Mesh는 없지만 IK에서 사용할 수 있는 ik bone이 만들어지는 것이다. 

 

다음과 같이 foot_l에 관련해서 만들면 foot_l 위치에 virtual bone이 생성된다.

 

다음과 같이 ik bone이 있는걸 확인하거나 virual bone을 생성했다면

Control Rig로 와서 Import Hierarchy를 클릭해서 알맞은 Mesh를 고른다.

그러면 하이러키에 쫙 뜨게 된다.

 

이제 우리가 하고 싶은 작업인 Sphere trace를 구현해보자.

Sphere trace는 발보다 살짝 높은 위치에서 발보다 살짝 아래의 위치로 Sphere를 쏴서 땅에 닿는 거리를 계산하는 것이다.

 

My Blueprint로 가서

Function을 추가해준다.

Function의 완성은 이렇게 되고

간단하게 Bone의 위치를 받아서 살짝 높은 위치를 Start, 살짝 낮은 위치를 End로 하는

즉, 밑으로 발사하는 Sphere trace를 만들어서 Return으로 Sphere trace 의 Hit Location을 하는 것이다.

 

그리고 Control Rig에서 다음과 같이 설정을 해주면 된다.

간단하게 설명을 하면

  1. Sphere Trace를 통해 오른쪽 or 왼쪽 IK Bone이 얼마나 내려가야하는지 LTarget, RTarget에 저장한다.
  2. LTarget과 RTarget에 순간적으로 가게되면 어색할 수 있다. 그렇기에 L, R이라는 값으로 보간을 해준다.
  3. 그리고 L과 R중에 작은 값을 고른다. 그리고 해당 값과 관련해서 골반을 작은 값과 관련해서 위치를 조정해주기 위해Pelvis라는 값에 저장한다.
  4. L, R, Pelvis로 얻은 값을 ik foot_l, r에 적용시킨다. ik에 먼저 적용시키는 이유는 위에 적어놓았다.
    Pelvis는 직접 실제 Mesh가 있는 곳에 적용한다.
  5. 마지막엔 Full Body IK를 사용하는데 이 노드가 매우 많은 작업을 대신해준다.
    여기서는 Effectors만 건들였는데 +를 통해 추가를 하고 추가를 해서 나온 Bone엔 실제로 움직이는 Mesh가 있는 Bone을 넣고 Transform에는 어떤 것에 영향을 받아 Transform을 움직일 것이냐는 것이다.
    그렇다면 계산이 끝난 IK를 넣는 것이 올바르다고 생각될 것이고 그게 맞다.
    IK Bone을 Get Transform으로 받아서 Full Body IK에 L, R을 각각 넣어주면 된다. 

이렇게 Control Rig를 만들고 난 후 Animation Blueprint에서 Control Rig 노드를 만들고 해당 Control Rig를 넣어주면 적용이 된다.

 

경사면과 알맞게 무릎이 접히는 것을 확인할 수 있다.