[UE5] Layered Blend Per Bone

kkado·2024년 4월 25일
0

UE5

목록 보기
39/62
post-thumbnail

이전 글에서 재장전 기능을 구현할 때, 장전 애니메이션 출력 시 전신이 모두 해당 애니메이션으로 고정되어 움직임이 부자연스러운 문제가 발생했다.

뼈 단위로 Blend를 수행할 수 있는 'Layered Blend Per Bone' 에 대해서 알아보고, 문제점을 고쳐보자.


Skeletal Mesh와 뼈 개념에 대한 이해

스켈레탈 메쉬는 뼈 단위로 메시를 구현하여, 이후 애니메이션을 구현하기 용이하도록 만든 것을 의미한다.

예를 들어 메쉬의 중심이 되는 척추뼈를 만든다고 하면, 이 척추뼈를 Rotation함으로써 좌우로 몸통을 돌리거나 허리를 숙이고 뒤로 젖히는 등의 애니메이션을 만들 수 있고, 어깨, 팔꿈치, 손목 등으로 팔 움직임을 세분화한다면 팔을 머리 위로 들어서 손은 흔든다거나 하는 애니메이션을 구현하기에 용이해진다.

스켈레탈 메시를 지원하는 에셋을 열어보면 위 사진과 같이 등뼈, 허벅지 뼈를 기준으로 상반신, 하반신을 나누고 그 아래에 어깨, 손목, 심지어는 손가락까지 자세하게 계층 구조를 이루면서 실제 사람의 뼈 구조와 흡사하게 이루어져 있는 것을 살펴볼 수 있다.

Spine 뼈를 앞으로 회전시켜 허리를 숙인 것처럼 보이게 할 수 있는 것이 그 예시이다.


Layered Blend Per Bone

이러한 뼈 구조를 기반으로, 특정한 뼈를 기준으로 두 개의 애니메이션을 blend 할 수 있는 블렌드 노드를 살펴보자.

노드는 하나의 Base Pose를 받고 하나 이상의 Blend Pose를 받는다.
그리고 Blend pose를 블렌드하는 가중치인 Weight 알파 값을 설정할 수 있다.

이 노드를 클릭하고 디테일 패널을 살펴보면 위와 같은 구조를 볼 수 있다.
주목해야 할 곳은 Layer Setup 파트인데 blend pose의 개수만큼 Index가 존재한다. 우리는 장전 중 / 장전중아님 두 가지의 애니메이션만을 블렌드할 것이므로 Index는 하나만 필요하다.

그리고 어떤 조건에 의해 분기할 것인지 필터를 적용할 수 있고, + 버튼을 클릭하여 뼈를 추가한다.

뼈의 이름을 지정해서 블렌드의 기준이 될 뼈를 명시한다.

결과적으로 이 노드는 Base Pose에다 Blend Pose를 섞는데, 이 때 Weight 알파 값이 1.0이므로 온전히 Blend Pose에 명시된 애니메이션만을 재생한다. 그리고 브랜치 필터가 적용된 뼈에만, 즉 Spine_01 뼈에만 블렌딩을 진행한다.

따라서 상반신에만 애니메이션을 적용할 수 있게 되는 것이다.

그러면 우리는 재장전 애니메이션을 설정해서 Blend pose에 연결하면 되고, 일반적 이동 애니메이션을 Base pose에 연결하면 된다.

이것이 '재장전 시의 애니메이션' 이다.

재장전하고 있지 않을 때에는 그냥 일반적 이동만 필요하다.
이를 blend poses by bool 노드로 연결해 준다.

따라서 최종 모습은 이렇게 된다.


이제 이동하면서 재장전하는 모션이 자연스럽게 만들어졌다~~!

profile
울면안돼 쫄면안돼 냉면됩니다

0개의 댓글