Game Develop

[UE5] 리타겟팅(Retargeting) (루트모션 정상적으로 적용하기) 본문

UnrealEngine5/이것저것

[UE5] 리타겟팅(Retargeting) (루트모션 정상적으로 적용하기)

MaxLevel 2023. 1. 10. 05:55

프로젝트에 사용할 캐릭은 에픽게임즈스토어에 무료로 풀린 파라곤 에셋 캐릭터들 중 하나를 구입해서 사용했다. 

애니메이션같은 경우는 에픽게임즈스토어에서 애니메이션팩을 유료로 구입했다.

즉, 서로 다른 스켈레톤이기 때문에 리타겟팅을 해줘야 했다.

 

일단 Walk 애니메이션시퀸스를 먼저 리타겟팅을 해 봤다.

이 Walk 애니메이션시퀸스는 기본적으로 루트모션이 아니고, 조금씩 전진하는 파일이다.

그대로 캐릭터에 적용할 경우 그냥 가만히 냅둬도 조금씩 전진한다음 다시 처음으로 돌아오게되고 이걸 계속 반복한다.

그렇기 때문에 반드시 루트모션을 적용해줘야 한다.

 

좀 더 이유에 대해 첨언하자면, 조금씩 전진할 때 루트캡슐컴포넌트는 같이 전진하지않고 시작위치에 그대로 있기 때문에 의도치 않은 버그들을 유발할 수 있다. 캐릭터가 벽에닿으면 어떤 애니메이션을 진행하던 메쉬가 벽을 뚫으면 안되는데, 루트모션이 아니라면 루트컴포넌트는 그대로 벽에 부딪혀 가만히있고 메쉬는 벽을 뚫고 애니메이션을 진행해버리는 상황이 발생한다. 그렇기 때문에 이런 상황을 의도하고 싶은게 아니라면 반드시 루트모션을 적용해줘야 한다.

 

https://devjino.tistory.com/276

 

[UE5] Animation Retargeting 방법

UE5에서는 UE4와 리타겟팅 하는 방법이 많이 바뀌었으며 그 과정을 정리하였습니다. Frank 애니메이션을 언리얼 마네킹으로 리타겟을 해보겠습니다. 소스 : SK_Frank_FS3_Meshes_Skeleton 타겟 : SK_Mannequin_Sk

devjino.tistory.com

 

일단 나같은 경우, 위 방법대로 리타겟팅한다음에 루트모션을 활성화했더니 부자연스러운 결과가 나왔다.

루트모션을 활성화 하지 않으면 상관없지만, 반드시 루트모션을 사용해야했기에 문제를 해결해야했다.

아직 언리얼엔진에 대해서는 초보자인 입장이라, 내가 모르는 여러 변수들이 있을거라 생각했다.

 

1. 리타겟팅은 잘 됐는데 내가 모르는 어떤 기능을 활성화를 안했다던가

2. 리타겟팅 자체가 잘못됐다던가

 

꼼꼼히 체크해본 결과 리타겟터파일의 뷰포트에서는 잘 적용된게 확인 됐지만, 실제로 추출한 후에 추출된 애니메이션 시퀸스파일의 뷰포트를 보니까 루트모션을 활성화 시켰는데도 불구하고 조금씩 전진을 하는 모습이 보였다.

조금의 전진도 있으면 안된다. 제자리에서 재생할 경우,몇번을 하든 자연스럽게 그 자리에서 걸어야 한다.

조금이라도 전진한다면 다시 처음부터 재생할 때 처음위치로 순간이동하기때문이다. 아마 이러한 결과를 원하고 적용하려는 사람은 없을것이다.

이동량의 차이만 있을 뿐, 사실상 루트모션이 아닌 것이다.

 

아래는 추출된 애니메이션 시퀸스파일의 뷰포트이다.

 

놀랍게도 위 캡처본은 루트모션을 활성화한 상태에서의 뷰포트 캡처본이다.

정확히는 위 포스팅방법대로 한 이후의 캡처본이 아닌, 좀 더 이전에 시도했던 방법으로 리타겟팅 한 후의 캡처본이다.

근데 말했다시피 이동량의 차이만 있을 뿐, 같은 결과물이라 이 캡처본을 사용했다. 포스팅방법대로한 이후의 파일은 삭제해버려서...

 

ik_foot_r이 출발지점에 고정되어 있으며, 캐릭터와 ik_foot_r 사이에 이어져있는 bone은 pelvis(골반)이다.

제대로 리타겟팅이 됐다면 저 ik_foot_r 지점의 위치에서만 모션이 재생되어야 한다.

위의 결과물을 보고 리타겟팅자체를 잘못했다는걸 확신할 수 있었다.

 

여기저기 구글링 한 후 해결할 수 있었고, 내가 해결한 방법은 아래와 같다.

아래 방법은 위 방법을 따라한 후에 했다는 가정하에 쓴것이다.

 

 

 

일단 아래는 리타겟팅할 Source 메쉬인 언리얼마네킹의 Rig파일이다. (보통 에픽게임즈스토어의 애니메이션팩 캐릭터들은 언리얼 기본마네킹이다)

 

 

좌측상단의 Hierarchy과 우측하단의 IK Retargeting 패널을 똑같이 설정해보자.

 

1. 좌측상단의 Hierarchy패널에서 pelvis가 아닌 'root'를 Retarget Root로 설정해준다.

2. 우측하단의 IK Retargeting 패널에서 캡처와 똑같이 설정해준다.

    캡처를 보면 root가 추가되어있을것이고, Start Bone은 root이고 End Bone은 pelvis로 되어있으니 놓치지 말자.

 

이 설정은 Source Rig파일과 Target Rig파일 둘 다 똑같이 설정해준다.

 

 

위 캡처는 Target Rig파일인데, Source Rig파일과 설정이 같다는걸 확인할 수 있다.

 

이후 Retargeter 파일을 연다.

 

1. Chain Mapping 패널에서 root를 클릭한다.

2. 그러면 바로 위패널인 Details에 위와같이 각 패널들이 표시된다.

3. FK Adjustments패널에서 Translation Mode를 Globally Scaled로 설정한다.

 

이러면 끝. 이후 Asset Browser패널에서 원하는 애니메이션을 선택 후 추출하고 RootMotion을 활성화시킨다음 뷰포트를 보면 잘되는걸 확인할 수 있다.

 

잘 된다.

 

 

이 문제를 처음 접하고나서 구글링 하다보니까 생각보다 많이 비슷한 문제를 겪는 사람이 많다는걸 알게됐다.

해결법들도 조금씩 비슷비슷하긴해서 따라하기는 크게 무리없다고 생각한다.