언리얼 가상본과 오리엔테이션 워핑

달봉·2024년 4월 19일

언리얼엔진5

목록 보기
5/12

이동 거리에 따라 움직임의 매칭은 해보았는데 이제 이동 방향에 따라 움직임을 맞출 시간입니다
언리얼에서 제공하는 포즈워프 기능 중 오리엔테이션 워프를 사용하면 현재 재생중인 루트 애니메이션을 이동하는 방향에 맞게 다리 IK본을 워프시켜 줄 수 있습니다

※루트 애니메이션, 스켈레톤매시의 IK세팅이 되어있어야 수월합니다 여기서는 둘 다 없는 상황의 작업을 진행합니다


-준비물

가상본(virtual bone)

오리엔테이션 워핑을 적용하려고 보니... 스켈레톤매시에 IK 세팅이 안되어있습니다...
블랜더에서 다시 모델을 수정해올까 생각하겠지만 사실 그럴 필요가 없습니다
언리얼엔진에서 가상본 만들기를 제공하거든요 심지어 아주 간단합니다


스켈레톤매시를 열어서 원하는 본에 AddVirtualBone을 추가하고 타겟을 지정해줍니다

오리엔테이션 워핑

애니메이션 노드에서 오리엔테이션 워핑을 추가합니다
모드를 Graph로, Spine Bones에 허리에서 연결된 본들을, Foot IK를 맞게 지정해줍니다
그리고 움직이는 방향에 맞게 전 프레임의 좌표에서 지금 좌표로 움직인 각도를 구해 넣어줍니다
이러면 끝!
이면 좋겠지만 Graph모드에서는 루트모션에서부터 읽어온 이동에 관한 값이 있어야 작동합니다 흑흑 Manual로 변경 후 각도를 직접 구해서 넣어주어야 합니다

현재 기본 축에 대해서 변경될 각도로 Degree를 원하고 있습니다

double dAcosDot = vFowardDirection.Dot(vChangeDirection)
double dRadian FMath::Acos(dAcosDot);
float fChangingDegree = FMath::RadiansToDegrees(dRadian);
*외적으로 -+ 방향 판별 필요

Degree 각도를 구해서 UFUNCTION(BlueprintCallable)을 통해 애니메이션 블루프린트로 전달해줍니다

적용해보면 뭔가 움직이는게 이상할 수 있습니다

오리엔테이션 워핑노드에 회전영향 제한이 되어있어서 0.5에 맞게 전방, 후방을 따로 넣어주던지 1.0(풀각도)로 돌리고 하나로 사용할것인지 세팅해야 합니다.

오리엔테이션 적용전 / 후 애니메이션이 방향을 맞추는게 아닌 회전 각도에 따라 하체를 돌려버린거라 훨씬 자연스러운 각도가 나오는 모습

최소 4개이상의 각도에 따른 애니메이션이 필요한 블렌딩과 다르게 오리엔테이션워핑 적용시 전진 후진 단 2개의 애니메이션만 사용했습니다
필요한 리소스도 적고 더 자연스럽기까지..?

profile
개발 블로그

0개의 댓글