본문 바로가기

인공지능/Toy Projects

현실의 춤을 가상공간으로 매핑하기_1 (using 3D human pose estimation)

Introduction

내가 좋아하는 노래의 춤을 내가 좋아하는 캐릭터가 추는 것을 보고 싶은 마음은 덕질하는 사람이면 누구나 한 번쯤 생각해봤을만한 내용이다.

하지만 춤과 관련된 내용을 한번도 다뤄본적이 없고 아바타또한 다뤄본적이 없기 때문에 앞으로 난관이 많을 것으로 생각된다.

잠깐 가상공간에서 춤추는 것에대해 찾아봤을때 코딩공부를 처음했을때의 느낌이 들 만큼 너무 새로운정보가 많아서 무엇부터 시작해야할지 몰랐다.

우선 현실세계에서의 춤이 가상공간으로 매핑되는 과정이 단순하다고 생각되지는 않기 때문에 여러가지 알아보고 준비해야할 내용이 많았다.

현재 가상공간의 아바타를 춤추게 만드는 방법은 많겠지만 많이 찾아본 결과, 가장 많이 사용되는 툴은 아무래도 MMD라고 생각된다.

많은 사람들이 예전부터 사용해왔던만큼 쌓여있는 데이터와 정보가 많고, 찾아보면 모션팩, 모션DL들도 이미 많이 만들어져 있어서 엑조디아가 가능한 것으로 보인다.

그래서 우선은 MMD를 적용해 현실의 춤을 가상공간으로 매핑하는 작업을 시작해보려한다.

 

Method

우선 현실공간의 춤을 가상공간으로 매핑하기위해서 필요한 작업에 대해 정리해봤다. (아는정보가 적어 틀릴 수 있음)

현실공간의 춤을 가상공간으로 매핑하는 작업 work flow

 

위의 work flow가 정답이 아닐 수도 있지만, 현재 지식과 며칠간 찾아본 내용으로는 위의 내용 정도면 충분히 가상공간으로 매핑이 가능할 것으로 생각되어 이대로 진행해보려고 한다.

original video에서 2d, 3d pose estimation을 하는 작업은 아래 깃헙을 참조했다.

https://github.com/Vegetebird/StridedTransformer-Pose3D

 

GitHub - Vegetebird/StridedTransformer-Pose3D: [TMM 2022] Exploiting Temporal Contexts with Strided Transformer for 3D Human Pos

[TMM 2022] Exploiting Temporal Contexts with Strided Transformer for 3D Human Pose Estimation - GitHub - Vegetebird/StridedTransformer-Pose3D: [TMM 2022] Exploiting Temporal Contexts with Strided T...

github.com

 

해당 코드에서는 원본이미지에서 3d로 매핑된 좌표를 제공하지 않고 단순히 보여주기만 해서 중간에 코드를 수정하여 3d coordinates를 frame 별로 저장하게끔 했다.

3d 좌표는 프레임당 17point로 이를 VMD(MMD에서 사용하는 모션 파일)로 변환을 해야하는데 아무리 찾아봐도 해당 작업을 한 코드가 하나뿐이 없었다.

https://github.com/ddddwee1/MMD_3D_POSE_Converter

 

GitHub - ddddwee1/MMD_3D_POSE_Converter: Convert 3D Human Pose to VMD file

Convert 3D Human Pose to VMD file. Contribute to ddddwee1/MMD_3D_POSE_Converter development by creating an account on GitHub.

github.com

 

변환된 VMD 파일을 아바타(PMX)와 합치는 작업은 Blender를 이용한 방법과 MMD tool을 이용한 방법으로 할 수 있다.

Blender에 MMD를 적용하기 위해서는 애드온을 추가해야한다

https://github.com/powroupi/blender_mmd_tools

 

GitHub - powroupi/blender_mmd_tools: mmd_tools is a blender addon for importing Models and Motions of MikuMikuDance.

mmd_tools is a blender addon for importing Models and Motions of MikuMikuDance. - GitHub - powroupi/blender_mmd_tools: mmd_tools is a blender addon for importing Models and Motions of MikuMikuDance.

github.com

 

Blender가 좀 더 부드러울 것이라고 생각되서(매우 주관적) Blender로 시작 했고, 이후에 MMD tool을 적용해봤다.

 

Results

비디오에서 3d pose estimation한 결과이다.

 

MMD에서 기본이 되는 아바타인 미쿠 아바타를 가져와서 3D pose estimation한 모션을 VMD 포맷으로 변환하여 적용해봤다.

 

 

뭔가 자세가 이상하다.

모션이 잘못된 것인지, 아바타가 잘못된 것인지, 아니면 Blender의 문제인것인지 검증이 필요했다.

우선 Blender가 문제인지 확인하기위해 MMD에서 아바타와 모션을 열어봤다.

MMD에서도 뭔가 이상하다.

왼쪽에 bone에서 확인해보니 3d pose coordinate가 매칭이 제대로 되지 않은 것 같았다. (MMD에 대한 지식이 전무해서 확실하지 않음)

 

혹시 아바타의 문제일 수 있어서 원신에서 무료로 제공하는 다른 아바타 모델을 가져와봤다.

똑같은걸 보니 아바타의 문제는 아닌거 같고 모션의 문제인 것 같다.

3d pose coordinate를 VMD로 바꿔주는 과정에서 뭔가 매핑이 잘 못 된거 같다고 생각했다.

그래서 MMD 3D pose converter를 이용해 VMD 파일을 파싱해서 매핑이 어떻게 이루어지는지 확인했다.

실제로 잘 작동되는 모션아무거나 가져와서 비교해봤다.

잘 작동되는 모션 (좌), 변환한 모션(우)

일본어로 되어있어 무슨소리인지 몰랐지만 구글 번역기의 힘으로 bone name을 의미한다는 것을 확인했다.

왼쪽의 잘 작동되는 모션의 경우 프레임당 100개가 넘는 bone들이 존재하고 각자의 좌표들이 존재하는데, 오른쪽의 변환한 모션의 경우 프레임당 11개 정도 bone밖에 없다.

변환한 모션의 경우 머리가 90도 인사를 하고 있고, 다리의 좌우가 바뀐것 처럼 보이는데 아마 3d pose를 VMD로 변환하는 과정에서 뭔가가 잘못 된 것처럼 보인다.

 

Conclusion & Discussion

일단 설계한 workflow의 절반도 진행되지 않은 상태(3d motion data)이고, 이 부분을 해결하는 것이 우선과제이다.

두가지 방법을 생각했는데, VMD converter를 수정해서 다리의 좌우를 바꾸고 머리를 곧추 세울수 있게끔 head bone을 추가(head bone이 없어서 머리가 땅으로 박혀있는 것이라고 생각)하는 방법과 3d pose coordinate를 motion capture format으로 바꿔서 아바타에 retargeting하는 방법이 있을 것 같다.

물론 위 생각들 또한 내가 3d modeling에 있어서 기반지식이 전혀 없는 상태로 며칠동안 찾아봐서 얻은 결론이기 때문에 실제 문제 해결방향과 다를 수 있다.

우선 먼저 해볼 것은 VMD converter의 내용을 수정하는 것이다.

motion capture의 경우 입력 format으로 FBX, BVH가 있는 것으로 확인했는데, FBX는 3d pose coordinate에서 변환하는 방법을 찾지 못한상태이고, BVH의 경우 github을 뒤지다가 3d pose에서 변환하는 코드를 찾아서 맞게 수정해볼 생각이다.

BVH 데이터를 만들면 rokoko 애드온을 이용해 bone들끼리 retargeting을 진행할 것이다.