리타게팅 이란?
언리얼 엔진에서는 호환성 설정만 해주면 (스켈레톤의 구조가 크게 다르지 않은 이상) 같은 모션을 활용할 수 있게 해주는 훌륭한 기능을 제공한다. 이를 '리타게팅' 이라고 부른다
1) 모션 공유 리타게팅
먼저 언리얼 엔진에서 뼈대가 비슷한 스켈레톤의 경우 모션을 쉽게 공유할 수 있는 기능이 있다. 그 방법에 대해서 알아보도록 하
스켈레톤 에셋으로가 서 All Hierachy를 켜주면, 뼈대를 구성하는 모든 Bone을 볼 수 있게 된다.
- 위 오른쪽 사진을 보면, 두개의 스켈레톤 에셋을 볼 수 있다.
- 왼쪽은 언리얼 엔진에서 기본으로 제공해주는 스켈레탈 메쉬인 Mannequin의 스켈레톤이고, 오른쪽은 개인적으로 마켓플레이스에서 구매했던 스켈레탈 메쉬의 스켈레톤파일이다. 임시로 WoodMannequin이라고 부르겠다.
- 두 메쉬는 실제로 뼈대 구조와 이름을 짓는 방식이 비슷한 것을 알 수 있다. 하지만 완전히 동일한 뼈대구조를 가지고 있지는 않다.
때문에 호환성 설정을 해주어야만하는데, 가장 첫번째로 간단하게 해주는 방식이 있다.
- 공유를 하고싶은 스켈레톤 파일에서 AssetDetails를 열어준다. 이번에는 Mannequin의 애니메이션을 WoodMannequine에서 사용하고 싶기 때문에, WoodMannequin의 창을 열고 실행한다.
- 그리고 +버튼을 눌러서 공유하고싶은 마네킹의 스켈레톤 파일을 추가한다.
- 완료하고 나면 위처럼 Mannequin의 애니메이션 파일을WoodMannequin에서도 사용할 수 있도록 뜨는 것을 확인할 수 있다.
- 게임에서 활용할 블루프린트 캐릭터의 메쉬를 스켈레톤으로 바꿔보았다. 애니메이션이 적용되긴 한것 같지만 일그러진 것 같은 모습이 보인다.
- ( 만약 위처럼 보이지 않는 다면 AnimClass에서 AnimationBlueprint가 None일 수 있다. 그런 경우 평소에 사용하는 AnimBlueprint를 적용하거나, 기본 마네킹의 AnimBlueprint인 ABP_Manny를 적용해주면 된다.)
- 플레이를 해보면 저렇게 찌부된 상태로 애니메이션이 플레이된다.
ShowRetargeting Options를 켜준다. 그러면 이 캐릭터가 모션이 왔을때 어떻게 붙는지에 대한 옵션들이 여기서 보인다
- 모션이 Animation으로 되있으면 기존에 가져오는 모션을 스케일이나 포지션을 맞춰준다. 이 경우 위 처럼 모션을 매칭하기위해 메쉬를 찌부시키거나 늘려버리는 경우가 생긴다.
- 모션을 스켈레톤으로 설정해주는 것이 가장 정확하게 모션을 리타게팅 해줄 수 있는 방법입니다. Root와 Pelvis는 원본 스켈레톤의 트랜스폼을 그대로 적용해주는 것이 여전히 좋기때문에, 여기는 그대로 놔두고 그 이후 Spine부터 다른 옵션들 은 모두 Skeleton으로 변경해주도록 하겠습니다.
- 하나 하나 변경해주면 번거롭다. 우클릭 후 Reculsively Set Translation Retargeting Skeleton을 선택해주면, Skeleton으로 한꺼번에 변경된다.
- Skeleton으로 선택된 bone들은 스케일이 변경되지 않고 Rotation (회전) 값만 적용되기 때문에 캐릭터 모션만 적용할 수 있다
정상적으로 잘 적용이 된 것을 확인 할 수 있다. 이렇게 뼈대구조가 비슷한 스켈레탈 메쉬의 경우 매우 쉽고 간단하게 캐릭터의 모션을 적용해줄 수 있다.
만약 ABP_Manny를 사용할 경우라면 다리만 안움직 일 수도 있다. 이 AnimationBlueprint에서 IK_Leg라고 하는 다리 IK기능을 실시간으로 사용하고 있기 때문인데, 꼭 이 기능을 사용할 필요가 없다면 제거해서 빠르게 애니메이션을 적용해보다
AnimBlueprint로 가서 IK Rig를 사용하고 있는 부분을 제거하고 플레이를 해주면 정상적으로 다리가 움직일 것이다.
2) IK Rig 리타게팅
IK Rig 설정을 해줌으로서 다른 리타게팅의 모션을 손쉽게 옮겨와서 사용할 수가 있다.
믹사모같은 온라인 모션 라이브러리에서 모션 데이터를 가져와서, 내가 원하는 캐릭터에 바로 적용을 해서 사용하기가 굉장히 수월하고 편해졌다.
이는 뼈대구조가 무슨 역할을 하고 어떻게 전달이 될 것인지 지정해주는 과정이기 때문에, 스켈레톤 정보가 위처럼 비슷하지 않다고하더라도, 어떻게 설정하느냐에 따라서 훌륭하게 애니메이션 데이터를 공유하고 적용할 수 있도록 도와준다.
따라서 방법도 방법이지만 개념을 익히는 것이 중요하다. 이 방법은 수많은 메쉬들에게 다양하게 적용을 하도록 도와주는 훌륭한 기능이기때문에 ,단순히 믹사모에서만 사용하는 것이 아니라 뼈대구조가 다른 메쉬들에게도 모션데이터를 공유할 수 있도록 도와준다.
그래도 연습하고 테스트하기에 가장 좋은 것은 위에서도 말했지만 모션캡쳐 데이터 하면 역시 믹사모다. 믹사모의 애니메이션 데이터를 언리얼 엔진의 마네킹에서 사용할 수 있도록 리타게팅을 해보자.
믹사모에서 캐릭터를 아무거나 선택하고, 애니메이션 데이터를 다운로드 한다
다운로으한 애니메이션 데이터중 하나만 클릭하고 엔진에 드래그엔 드롭으로 import한다, importAnimation옵션이 꺼져있는 경우 true로 체크해준다.
이렇게 애니메이션 데이터와 스켈레탈 메쉬, 스켈레톤 에셋들이 함께 들어온 것을 확인할 수 있다.
- 에셋 하나만 선택한 이유는, 스켈레톤과 스켈레탈 메쉬는 하나만 있으면 충분하기 때문이다.
- Mixamo의 스켈레탈 정보를 따로 관리하기위해 폴더를 만들어준다.
- 그리고 새로운 애니메이션 데이터를 import 할때는 Mesh가 필요가 없으니 import Mes의 체크박스를 해제해 준다. 그리고 스켈레톤 에셋창에서 아까 불러온 스켈레톤으로 설정해주면 된다
- 에니메이션 데이터가 정상적으로 불러와 졌는지 더블클릭 확인해보자
이제 이 스켈레탈 정보에 언리얼엔진에 맞는 뼈대 설정과 IK설정을 해줄것이다
Animation-> Retargeting-> IKRig 에셋을 우클릭하여 생성해주고, Preview Skeletal Mesh를 우리가 가져온 Mixamo로 설정해준다.
- 3인칭 템플릿의 IK_Manequing으로 들어가보면 오른쪽에 IK Retargeting이라고 하는 창이 있다. 거기에 본들의 역할을 지정해주는 것을 볼 수 있다.
- 쉽게말해 시작 Bone과 끝 Bone을 설정하여 , 어디서부터 어디 까지 팔이고, 어디서 부터 어디까지 다리인지설정하는 것이다.
Hip을 Retarget의 Root로 설정해서 모든 리타게팅 정보의 Root가 되도록 설정한다.
이제 다른 Bone을 선택하고 우클릭 AddNewRetargetChain을 눌러 이름을 설정하고 적용해준다.
그러면 왼쪽의 Rig정보에 RetargetChain에 이름이 붙여진 것을 볼 수 있고 오른쪽에 IK Retargeging에서도 같은 이름으로 시작Bone과 끝Bone이 설정된 것을 알 수 있다.
이름은 마네킹의 IK Retargetging 세팅의 이름을 그대로 적용해주었다.
이제 나머지도 그대로 적용해준다.
왼쪽 위 그림처럼 좌우 중에 한쪽만 선택을 하고Chain을 만들고 나면 Mirror 기능을 이용해서 반대쪽도 만들어줄 수 있다.
여기까지만 되어도 애니메이션 데이터를 공유하기 위한 기본적인 설정은 완료한 상황이다.
충분하지만, 이 뼈대애 IK를 적용하여 움직이도록 설정하는 방법이 있으니 알아보도록 하자, 사실 지금 부분에서는 딱히 필요 없어서 넘어가도 좋지만, 알아두면 나중에 적용할 일이 분명 있을 거라고 생각된다.
여기에 FullBodyIK 계산을 추가해두면, 모션이 적용될때 손의 위치나 발의 위치가 정상적으로 적용되지 않으면 소스가 되는 캐릭터의 손이나 발 위치와 맞춰줄때 유용하다.
이후 Goal 설정해선 Solver부분의 FullBodyIK가 항상 선택된 상태에서 해야한다.
Hip으로 가서 SetRootBone to IKSolver 설정을 해줘서 계산할 FullBodyIK의 Root를 설정한다.
그리고 IKController를 적용해줘야한다. 컨트롤러가 필요한 부분에 우클릭해서 NewIKGoal->AssignGoal을 통해 컨트롤러를 추가하겠다.
양 손과 양 발엥 각각 컨트롤러를 추가한다.
잘 적용된 상태면 Controller를 움직일때 몸이 같이 움직일 것이다.
하지만 다리를 움직여 보면 허리가 과도하게 꺾이거나 자연스럽지 않은 동작을 확인할 수 있다. 이런부분들을 수정해주는 것이 좋다.
이제 Hip으로 돌아간다 디테일한 동작 수정을 위해 Hip을 클릭하고 우클릭 ->컨트롤러를 AddSettings to SElected Bone을 이용해 추가할 것이다.
꺾인 허리를 Position과 Rotation의 Stiffness를 이용해서 조절해준다.
Spine 척추에도 컨트롤러를 생성하고 움직임이 자연스러울때까지 후정을 해준다. 그래서 팔을따라서 척추가 움직이더라도 과도하게 꺾이지 않도록 설정을 해줄 수 있다.
팔뚝도 이렇게 꺾이면 안되기 때문에 ForeArm뼈에 컨트롤러를 넣어서 고정을 해주도록 하겠다.
이때는 Preferred Angle을 활용하여 꺾이게 될 축을 설정해줄 수 있다.
어떤 축으로 회전하도록 설정할 것인지는 뼈대에 가까이 가서 XYZ축을 확인해주면 더 좋다.
반대쪽도 해주고 어깨도 너무 과도하게 꺾이지 않기위해서 Controller를 추가해서 고정해주는 작업을 해준다.
마찬가지로 물릎도 적용을 해주면 된다.
여기까지 준비가 되면 IK를 기반으로한 Rig 설정이 완료되었다.
이제 IK Retargeter라는 것을 이용하여 서로다른 두 IK Rig를 연결해주도록 하겠다.
이렇게 Source와 Target을 설정해주고 Offest을 이용해 포즈를 비교해주면 뭔가 이상하게 뼈대가 적용되어 있는 걸 볼 수 있다.
IK 설정을 해준 것이 여기서는 부딛히게 되는 것이기 때문에 이번에는 IK를 빼고 FK를 적용해보도록 하자. 오른쪽 하단 ChainMapping에서 모든 IK Goal들을 선택하고 Detail에서 IK 체크박스를 해제해 주면된다
애니메이션이 재생되지만 위처럼 뭔가 이상하게 재생된다. IK 설정에서 무엇인가 잘못 된 것 처럼 보이게 되는데, 이 문제는 각 스켈레톤의 기본 포즈가 다르기때문이다.
Target이 되는 UnrealMannequin의 포즈를 T-Pose로 변경할 것이기 때문에 Target을 설정한 후 Create를 눌러 새로운 리타게팅 포즈를 생성한다. 그리고 위에서 Edit RetargeingPose를 이용하여 포즈를 수정할 것이다.
왼쪽에 Bone을 선택, 어깨의 경우 LR을 동시에 선택해서 포즈를 맞춰주면 더 좋다.
탑뷰에서 팔뚝도 펴서 맞춰준다. 손도 돌려서 손등과 팔이 수평이 되도록 맞춰준다. 손가락도 다 펴준다. 믹사모에는 손가락을 이용한 모션캡쳐 데이터도 있기 때문에 그런부분에 오프셋이 걸리면 손가락이 이상해진다. 그래서 동일하게 손가락도 똑같이 맞춰주는 것이좋다.
이제 잘 적용되었는지 확인할 시간이다. 애니메이션을 플레이해보자
손가락이 이상한 이유는 Retargeting 설정이 잘못된것이다 마네킹은 손가락 마디 끝에, 손부분에서 손가락의 뼈를 담당하는 마디가 하나씩 더 있다 Metacarpal이라고 하는데, 믹사모에는 이게 없다. 이 부분을 리타게터가 자동으로 매칭을 해주다가 오류가 난것이다.
최종적으로 완료하면 이제 애니메이션이 적절하게 적용되는 것을 알 수 있다. 그리고 손의 디테일한 부분이 아직 어색하다면 Edit모드에서 최종적으로 좀더 수정해주면 된다.
MetaHuman리타게팅
LOD설정을 맞춰줘야 헤어가 사라지지 않으니 기본적인 세팅을 해준다
위와같은 파일이 있
메타휴먼의 SK메쉬가 무엇인지를 먼저 확인해보는 것이 좋다.
메타휴먼의 경우 기본 포즈가 A포즈로 되어있다. 때문에 기존에 A포즈를 가지고 있던 RTG소스를 그대로 사용하는 것이 가장 현명한 방법이다.
포즈가 같기 때문에 크게 변경해줄 것 없이 바로 export 해줄 수 있다.
메타휴먼의 경우 어떤 바대를 선택하냐에 따라서 때때로 애니메이션 모션이 매칭이 안되는 경우가 있을 수 있기 때문에
한번씩은 확인을 더 해주고 export하는 것이 좋다.
3) 리타게팅 PoseFromMesh
이것도 IKRig를 활용한 리타게팅 방식이다. 에니메이션 블루프린트를 활용한 방식인데 AnimationBlueprint에서 지정을 해주면, 실시간으로 Retargeting한다. 즉, 스켈레턴구조가 다르더라도 게임 플레이에서 같은 모션으로 동작하도록 지정을 해줄 수가 있다는 이야기이다.
'테크니컬 아트 > 언리얼 애니메이션' 카테고리의 다른 글
언리얼 애니메이션 Preference 기본설정 (0) | 2024.05.24 |
---|