언리얼 디스턴스매칭

달봉·2024년 4월 17일

언리얼엔진5

목록 보기
4/12

이전 작업에서 모션 블렌딩을 통한 애니메이션 재생을 해봤으니 이번엔 거리별,속도별 디테일로 발 미끄러짐을 최소화 할 차례가 왔습니다

이러한 애니메이션 디테일은 공이 많이 들어가는 작업인데 언리얼에서는 생각보다 쉽게 적용할 수 있습니다

디스턴스 매칭(Distance Matching)

디스턴스 매칭을 사용하면 애니메이션의 재생되는 시간을 진행한 거리에 비례해 조절해줄 수 있습니다


준비물 : Animation Locomotion Libary 플러그인, 루트모션 애니메이션 및 맞게 루트가 설정된 스켈레톤매시
※루트모션 애니메이션이 있어야 작업을 수월하게 할 수 있습니다 (저는 없어서 수동으로 데이터를 넣어줬습니다)

  1. 애니메이션에 시간에 따라 이동한 Distance정보를 넣어줘야 합니다

    Animation Data Modifiers 창에서 DistanceCurveModifier를 추가해줍니다 추가가 안된다면 Root Motion 설정에서 EnableRootMotion 설정을 체크해주면 모디파이어 적용이 가능해집니다

만약 준비한 애니메이션과 스켈레톤매시가 루트애니메이션 설정이 되어있다면 DistanceCurve가 값을 찾아주지만 그렇지 않기 때문에 DistanceCurve를 수동 설정 해주었습니다 (1초를 기준으로 어느정도 속도로 나아갈지 계산)

데이터 세팅이 되었다면 애니메이션 압축 모드를 Indexable 로 변경해야 애니메이션에서 해당 커브 데이터를 읽어올 수 있습니다
압축 설정에 미리 만들어둔 설정이 없다면 새로 생성한다음 Edit를 눌러 Uniform Indexable로 변경하고 저장해주면 됩니다
※꼭 압축적용을 해주어야 적용이 됩니다


기존에 사용하던 BlendSpace 대신 Sequence Evaluator에 시퀀스애니메이션을 지정해주고
해당 시퀀스의 Update 함수에 디스턴스 매칭으로 시간 진행(Advance Time By Distance Matching) 노드를 사용했습니다
+tip 해당 시퀀스 애니메이션을 Dynamic으로 지정하고 Update함수 내부에서 Set Sequence with Inetial Blending으로 시퀀스를 지정하면 시퀀스애니메이션을 상황에 맞게 여러개로 변경하며 사용할 수 있습니다

디스턴스 매칭으로 시간 진행노드에서 재생중인 시퀀스 애니메이션의 DistanceCurve 데이터와 매 프레임 이동한 거리를 기반으로 애니메이션 속도가 조절됩니다.

  • 일반적인 블렌드 애니메이션
    속도에 따라 애니메이션을 바꿔서 재생할 뿐이어서 점진적인 속도 변화를 캐치하지 못하고 발일 밀리는 모습을 볼 수 있습니다

  • Distance Matching이 적용된 애니메이션
    매 프레임 이동한 거리와 애니메이션에 압축되있는 DistanceCurve 데이터를 기준으로 재생속도가 조절되는걸 볼 수 있습니다
profile
개발 블로그

0개의 댓글