ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MetaHuman to ALS v4 for UE4 #1
    게임 개발 2021. 5. 26. 00:48

    Advanced Locomotion System에 MetaHuman 지원할거냐고 물어봤는데.. 대답이 없어서...

    그냥 조금씩 해보다가 양이 많아져서 정리를 하게 되었다.

    유튜브들도 참고하긴 했는데 마음에 썩 드는 부분이 없어서 직접 정리하게 되었다.

     

    1. 메타휴먼 준비

    1. MetaHuman Creator (https://metahuman.unrealengine.com/) 에서 캐릭터를 만든다. 사용법은 쉬우니 패스!

    메타휴먼 생성기

    2. 캐릭터를 만들고 나면 QuixelBridge (https://quixel.com/bridge) 에서 설치한다. 

     - 캐릭터 생성이 굉장한 회사의 기술과 노하우이기 때문에 서버에 꽁꽁 숨기기 위해서 그런것 같다.

     - 또한 사용자의 데이터도 모을겸??

     - MetaHuman Creator로 서버에 캐릭터를 저장하고 QuixelBridge에서 download 및 export 하는것이 목적이다.

    3. 기본 캐릭터는 8K만 생성되지만 내가 저장한 캐릭터는 1K도 생성이 된다.

    4. Download 해야 Export 가능하다. 만약 Download할때 FBX를 안받으면 Export할때도 FBX가 안된다. (옵션은 있다.)

    5. 이제 메타 휴먼이 준비되었다!!!

     

    2. 리타겟팅 준비

    1. UE4 Animation Asset은 대부분 기본 마네킹에 맞춰져있다. 따라서 리타게팅을 해야한다.

    2. MetaHumans 샘플을 받는다. 여기서 RetargetPoseMedAvgMale_PoseAsset 만 가져온다. (스켈레톤은 버려야함)

      - 이것은 마네킹 기본 A 포즈다. 본래의 기본 A포즈랑 약간 다르다.

    3. 최초 메타휴먼은 스켈레톤이 동일하지 않기 때문에 대충 가져오면 열리지만 포즈 변환이 안먹히니까 녹화 기능을 이용해서 RetargetPoseMedAvgMale_PoseAsset 애니메이션을 다시 만들고 포즈를 다시 세팅하자. (포즈 애셋에 애니메이션 업데이트 버튼이 있다.)

    4. 메시에 MetaHuman_ControlRig, m_med_nrw_body_Physics, m_med_nrw_animbp 이 있는데 animbp는 체격에 의해서 본의 비율을 바꾸는 역할을 한다. (총 6가지가 있을거임.. (남,여) * (대,중,소))

      - 이것 때문에 IK ... 특히 IK_hand_gun 쪽을 그냥 변환하기 상당히 까다롭다. (위치 맞춰도 회전각도가 잘안맞는다.)

    5. Rig 선택을 하자. Humanoid를 선택한다. 다른건 기본으로 냅두고 (자동 매핑하지마!)

      - spine_01 -> spine_02 / spine_02-> spine_03 / spine_03 -> spine_04 로 바꾼다.

    6. 포즈 변경해서 아까 만들어둔 A포즈로 바꾼다. 포즈보기 <-> 포즈숨김 버튼을 눌러보면 차이가 보인다.

    7. 스켈레톤트리 탭에서 옵션을 보면 "리타게팅 옵션 표시" 를 할 수있다. root에서 스켈레톤 재귀적 설정을 선택한다. root, pelvis, ik 는 Animation으로 바꾼다.

    8. 하지만 ik본은 없다. 다루기 까다로워 그냥 Virtual Bone을 이용해본다. (우클릭, 타겟, 이름 순)

      - root -> root -> Curves

      - VB Curves -> root -> ik_foot_root

      - VB ik_foot_root -> foot_l -> ik_foot_l

      - VB ik_foot_l -> foot_l -> ik_foot_l_Offset

      - VB ik_foot_l -> calf_l -> ik_knee_target_l

      - VB ik_foot_root -> foot_r -> ik_foot_r

      - VB ik_foot_r -> foot_r -> ik_foot_r_Offset

      - VB ik_foot_r -> calf_r -> ik_knee_target_r

      - VB Curves -> foot_l -> ik_target_l

      - VB Curves -> foot_r -> ik_target_r

    9. 정 한다면 fbx로 바꾸고 모션빌더 이용하는게 깔끔하다. 하지만 그것도 깔끔하지 않으니... (나중에 발목잡을 로테이션 문제)

    10. FP_Camera, TP_CameraTrace_R, TP_CameraTrace_L 는 카메라 소켓이다. FP_Camera가 매시 소켓인것은 캐릭터 높이마다 위치를 다르게 주려고 한것 같다. 우린 m_med_nrw_animbp 을 이용하자.

     

    3. 리타게팅 테스트

    1. 이건 그냥 애니메이션 몇개를 리타게팅 해보자. 그럼 감이 온다. 이게 잘되야 다음 단계를 넘어갈수 있다.

    2. 여기서 대충 넘어가면 넘어갈수록 부채가 쌓인다... 그럼 포기하고 싶다.

     

    4. ALS 변환

    1. ALS_AnimBP 를 -> MH_AnimBP로 리타게팅한다. (이름변환, 폴더 변경등을 이용한다.)

    2. MH_AnimBP를 열면 본 에러가 나있다. 하지만 여기서 숨쉬는 모션이 나와야 정상이다. 만약 숨을 안쉬고 본이 굳어 있다면 망한거다. 다시 처음부터 하자. (추적해보니 커브값을 못가져온데 이걸 끝까지 보다가.. 그냥 다시 해보니 되더라.... 매시도 기본 m_med_nrw_body 사용중이고...

      - 에러 고친다고 숨쉬지 않는다. 내가 다 해봤다.

    3. ik_foot을 검색해서 위에서 생성한 VB 로 이름을 모두 바꿔주자.

    4. ALS_AnimMan_CharacterBP 를 MH_Base_CharacterBP 로 복제하자. 적당한 위치로 옮긴다.

    5. MH_Base_CharacterBP에서 LowerLegs 를 찾고 관련 함수 안에 내용을 모두 지운다. 컬러 카테고리 안에 있는 변수를 모두 지운다.

    6. BP_이름 으로 된 메타휴먼을 연다. Root 부터 LODSync 까지 모두 복사한다.

    7. MH_Base_CharacterBP에 붙여놓는다. 뿐만 아니라 변수, 함수 모두 붙여놓는다. (함수가 마지막이다. 모델과 변수가 있어야하니까)

    8. BP_이름 에서  컨스트럭션 과 BeginPlay를 붙여 넣는다. 단, parent 를 먼저 호출해야한다. (parent가 없다면 추가 할 수 있다.)

    9. Body 레퍼런스를 찾아서 Mesh(CharacterMesh0)으로 변경한다. Body의 내용을 Mesh 쪽으로 옮긴다. 트랜스폼 위치는 (-4, 0, -90) 이고 회전은 (0, 0, -90) 이다.

    10. Mesh를 Body라고 생각하고 동일하게 구성한다. (얼굴,몸통,다리,발)

    11. 변수에 Mantle, Roll, Get Up에 관계된 Animation이 있는데 모두 리타겟팅된걸로 다시 세팅한다.

     

    다음 : MetaHuman to ALS v4 for UE4 #2 :: 게임개 발로그 (tistory.com)

    '게임 개발' 카테고리의 다른 글

    URP 약어  (0) 2021.06.05
    MetaHuman to ALS v4 for UE4 #2  (0) 2021.06.01
    S3, DXT, BC  (0) 2021.01.06
    previousViewProjectionMatrix 를 가져오고 싶을때  (0) 2020.10.08
    Compute Shader에서 Dispatch와 numthreads의 관계  (0) 2020.09.23

    댓글

Designed by Tistory.