Deeper Learning

[UE5] 언리얼 엔진 에디터에서 Skeletal Mesh 수정하기 (UE 5.4) 본문

Game Development/Unreal Engine

[UE5] 언리얼 엔진 에디터에서 Skeletal Mesh 수정하기 (UE 5.4)

Dlaiml 2024. 11. 9. 12:07

언리얼 엔진에서 애니메이션 작업을 하다 보면 Skeletal Mesh를 수정하고 싶을 때가 많다. Fab에서 다운받은 캐릭터가 제대로 Rigging이 되어있지 않거나 Root bone이 없는 등 바로 애니메이션을 재생할 수 없는 상태인 경우가 종종 있다.

 

이번 포스팅은 언리얼 엔진 에디터에서 제공하는 Skeletal mesh를 수정할 수 있는 플러그인을 사용법을 다뤄보려 한다. 


Mixamo 또는 Fab에서 다운받은 많은 캐릭터 모델의 Skeleton은 Root bone이 없이 hips 또는 pelvis가 가장 상위의 Root Bone으로 설정되어 있다.

 

루트 모션 애니메이션을 사용할 때 만약 hips, pelvis가 root bone으로 되어있으면 캐릭터가 상체를 회전시키거나 다리를 드는 과정에서 pelvis(hips)의 location, rotation이 우리가 인식하는 캐릭터의 위치와 달라지게 되고 이는 애니메이션 블렌딩, 충돌 판정에서 문제를 일으킨다. (캐릭터가 애니메이션을 실행하고 나서 Idle 애니메이션으로의 전환에서 몸이 기울어지거나 급격하게 미끄러지는 문제가 발생)

 

언리얼 에디터 내에서 Root bone을 추가하면서 skeletal mesh editing tools 플러그인 사용법을 알아보자.

 

 

우선 Edit -> Plugins에서 Skeletal Mesh Editing Tools를 설치하고 재시작한다.

이후 Bone을 추가할 Skeleton의 Skeletal Mesh 애셋에서 상단의 Editing Tools을 클릭하고 좌측의 Edit Skeleton을 클릭하면 Bone을 편집 가능한 창이 나온다.

 

기존 Skeleton, Skeletal mesh를 복사한 뒤, 복사본에서 작업하는 것을 추천한다.
Skeletal Mesh 복사 -> Skeleton 복사 -> 복사한 Skeletal Mesh에 복사한 Skeleton 할당

 

 

Root bone을 추가하고 Hips와 그 하위의 Bone을 모두 새로 만든 Bone 하위로 옮기는 시도를 해보았는데 기존 Skeleton의 가장 상위의 Bone은 삭제 또는 변경이 불가능했다.

 

하지만 복사는 가능하기 때문에 우선 기존 skeleton에서 가장 상위의 bone인 Hips(pelvis)를 우클릭하여 Duplicates Bone을 누른다.

이 때 아래 사진처럼 Hips 하위의 Bone이 보이도록 펼친 상태로 눌러야 복사가 된다. 

 

 

원본 최상위 Bone인 Hips의 이름을 root로 바꾸고 복사한 Bone의 이름을 Hips1을 Hips로 바꾼다.

root의 하위에 있는 Spine 등을 모두 Hips의 하위 본으로 드래그하여 옮기고 Hips를 드래그해서 root의 하위 Bone으로 만들면 Root -> Hips -> Spine으로 이어지는 목표로 한 계층구조를 만들 수 있다.

 

 

기존 Hips 위치에 있던 root bone의 Location을 0, 0, 0으로 수정해준다. Rotation도 마찬가지로 수정해 준다.

 

 

Accept를 눌러 저장해 주면 원하는 Bone Hierarchy 설정이 끝난다.

 

하지만 이대로 애니메이션을 적용해 보면 캐릭터의 허리 부분의 Mesh에 문제가 생기는데 이는 Mesh의 vertex들이 잘못된 Bone에 영향을 받고 있기 때문이다.

 

기존 Hips bone이 허리부분의 vertex를 담당하고 있는데 이 Bone이 Root bone이 되면서 local space (0, 0, 0)으로 위치가 고정되면서 해당 부분의 vertex가 root bone처럼 고정되는 경우가 생길 수 있다.(다른 주변 bone 들의 weight가 훨씬 더 크게 설정되어 있으면 큰 문제가 없을 수도 있음)

 

이를 수정할 수 있는 툴도 같은 플러그인에서 제공한다. 이번엔 Edit Weights를 클릭하자.

 

 

root bone이 어느 vertex에도 영향을 끼치지 않도록 하고 대신 새로 만든 Hips가 허리 부분의 vertex에 다시 영향을 끼치도록 해야 한다.

 

Weight Editing Mode를 보면 직접 weight를 증가, 감소시킬 영역을 칠하는 Brush와 Vertex를 직접 지정하여 weight를 조정할 수 있는 Vertices가 있다.

 

root bone weight

 

위는 새로 만든 root bone의 weight이다. 기존 hips bone의 이름을 바꾼 것이기 때문에 weight가 지정된 것을 확인할 수 있다. Ctrl키를 누른 상태로 Brush를 칠하면 영역의 weight를 감소시킬 수 있다.

 

아래처럼 숨겨진 영역의 weights를 제거하지 않으면 Hips bone을 따라가야 하는 vertex가 local space에서 고정된 root bone에 영향을 받아 캐릭터가 눕거나 점프할 때 문제가 생긴다.

 

root bone vertex weights

 

섬세한 작업이 필요 없기 때문에 Brush 대신 Vertices를 사용하자.

드래그하면 영역에 해당하는 vertices의 평균 weight를 볼 수 있는데 여기에서 바로 수치를 조정할 수 있다.

 

 

root의 Weight에 0을 입력하고 다시 Brush로 돌아와서 보면 흰색 부분이 보이지 않는 것을 볼 수 있다. (색상은 Weight Editing Mode의 Bones 탭의 설정값을 따르기 때문에 환경마다 다를 수 있다)

 

before brushing hips weight

 

이제 Hips Bone을 클릭하고 Brush로 다시 영역을 칠해주면 된다. Ctrl 키를 누르지 않고 마우스로 드래그하면 weight를 입힐 수 있다. Radius와 Strength를 잘 조절해서 기존 weights와 동일하게 만드는 것을 추천한다.

(원본 Skeleton, Skeletal mesh를 복사해 두었다가 창을 띄워놓고 참고하면서 칠했다)

 

 

이렇게 root bone를 추가를 완료하였다.

직접 애니메이션을 재생해보며 weight가 잘 설정되었는지 확인하는 것을 추천한다. 기존 skeleton의 최상위 bone(포스팅에서는 Hips)이 크게 움직이는 애니메이션(눕거나 점프)을 재생하면 쉽게 알 수 있다. 

 

Comments