반응형

UE5 기능이긴한데 카테고리 만들기가 귀찮음으로..

 

로코모션 : 한 지점에서 다른 지점으로 이동하는 행위 또는 움직이는 방법의 정의다

로코모션의 퀄리티는 발이 미끄러지지 않게 처리하는 것이 핵심이다

게임 액터와 애니메이션 재생이 다르거나 블랜딩 할때 차이로 인해 미끄러지는 현상이 발생

 

루트모션이란 : 애니메이션 시퀀스의 루트본 움직임을 게임 앤터의 움직임으로 전환하는 기능이다

 

루트모션의 경우 애니메이션 블랜딩 할때 루트본도 같이 블랜딩 되기 때문에 미끄러짐 현상이 나타난다

 

이를 해결 하기 위해 대스턴스매칭 또는 포즈워핑이 사용된다

 

디스턴스매칭 : 거리를 기반으로 애니메이션 재생타이밍을 조절한다

 

 

디스턴스 매칭 미적용시 (속도가 감속 하는 경우인 경우)

5미터의 거리를 감속하면서 애니메이션을 멈출때 속도가 줄어들어도 3미터 거리 이동으로 이동하면서 정지한다고 하면 

상단 처럼 5미터 이동 발이 하단의 3미터 거리에서도 그대로 적용되어 발이 밀리게 된다

 

 

디스턴스 매칭 => 거리기반 디스턴스 매칭

거리기반 디스턴스 매칭의 경우

 

  1. 거리에 맞도록 애니메이션 시작 타이밍을 변경한다
  2. 5미터의 애니메이션 재생 중에 남은 거리가 3미터라면 3미터를 이동하는 애니메이션으로 재생을 하도록 하여 발이 밀리지 않도록 한다

좌 : 미적용, 우 : 적용

 

 

 

 

 

반복되는 루핑 애니메이션의 경우 거리를 이용할수 없기 때문에 프레임당 이동 거리를 기준으로 애니메이션 재생 속도를 조절하게 된다

 

속도기반 디스턴스 매칭

동일한 애니를 속도에 따라 재생 속도를 달리 한것

왼쪽은 초당 속도 200 미터, 오른쪽은 초당 속도 1000 미터 인 속도기반 디스턴스 매칭

 

 

  1. 디스턴스매칭을 위해 필요한 것은 특정 시점에서 캐릭터가 있을 위치를 예측하는것이 필요한데
    캐릭터가 정지할 위치를 알아야 현재 위치와 정지 위치 사이에 거리를 구하고 거리를 구해야 거리기반 디스턴스 매칭을 작동시킬수 있기 때문 
  2. 각 애니메이션에서 루트본의 이동거리 정보가 필요하다
    디스턴스 매칭에서 이 거리 정보를 기반으로 애니메이션의 시작지점을 결정하거나 애니메이션 재생속도를 결정하기 때문이다

 

 

[사용법 구현] 

우선 현재 캐릭터의 가속 여부를 구현다 HasAcceleration 변수에 매 프레임마다 저장

 

 

HasVelocity : 현재 캐릭터의 속도 여부도 저장한다

 

 

 

 

 

단방향용 로코모션용 애님 스테이트 머신 구성

 

캐릭터가 정지할 위치를 예측하기 위해 사용 되는 노드

입력들은 위에서 구한 것들을 입력해준다

위 출력을 아래 처럼 Vector LengthXY 를 통해 DistanceToTarget 변수에 저장

 

애니메이션이 끝나기 전에 캐릭터가 정지 위치에 도착하게 되면 애니메이션도 멈춰 버리기 때문에 자연스러운 정지를 위해서 DistanceToTarget 값이 0 보다 큰지 봐서 만약 크다면 아직 거리가 남아 있는 것이기 때문에 디스턴스 매칭을 작동시켜야 한다 아래처럼..

그런데 0 보다 작은 경우, 즉 이미 위치에 도달한 경우라면 AdvanceTime 을 이용해서 애니메이션을 원래의 속도로 플레이 시키도록 한다

 

 

 

 

 

스트라이드 워핑과 오리엔테이션 워핑을 조합하면 더 자연스러운 애니를 루트모션에서 만들 수 있다

 

스트라이드 워핑 : 이동 속도에 따라 포폭 조절, 디스턴스 매칭으로 우선 느려질때 애니메이션이 느린 걸로 교체되기 때문에 이때 스트라이드 워핑과 더 잘맞아 떨어짐

 

오리엔테이션 워핑  : 방향에 따라 하체 회전 , 만약 애니가 전,후 , 좌, 우 4방향 밖에 없다면 대각선일때 애니가 이상해지는데   

 

 적용 전 앞-우측 방향 진행시


적용 후 앞-우측 방향 진행

하체가 회전 된걸 볼 수 있다

 

 

ref : https://youtu.be/RFNGB4ZTusQ

ref : https://docs.unrealengine.com/5.0/ko/root-motion-in-unreal-engine/

반응형

+ Recent posts