TIL - Today I Learned : 아무래도 언리얼 엔진의 블루프린트라는걸 처음 써봐서 어디까지 잘 되었는지에 대한 확신이 없어서 전체를 봐야했기 때문에 안되는 현상의 원인을 찾기 오래 걸렸는데 다음에는 현상을 좀 더 분석해보고 해결 방안을 찾아봐야겠다.
오늘의 진도: Part 2. Animation Ch 2. Locomotion 2_디스턴스 매칭 Ch02-03 ~ Ch 3. Locomotion 3_포즈워핑 Ch03-02. 포즈워핑 문제 수정
디스턴스 매칭 (Distance Matching)이란 애니메이션 시퀀스를 시간 기반 선형 재생 대신 계산된 거리 변수로 구동하는 것이라 한다. 즉 타깃에 대한 캐릭터의 거리를 바탕으로 애니메이션 시퀀스를 구동하는 것이다.
https://docs.unrealengine.com/5.0/ko/distance-matching-in-unreal-engine/
디스턴스 매칭
예시 워크플로 구현을 통해 언리얼 엔진의 디스턴스 매칭에 대해 자세히 알아봅니다.
docs.unrealengine.com
애니메이션 -> 창 -> 애니메이션 모디파이어 -> 모디파이어 추가에서 원하는 모디파이어가 없을 경우

프로젝트 -> 세팅 -> 플러그인 -> Animation Locomotion Library, Animation Warping, Motion Wraping을 추가해준다.


하여 이제 모디파이어를 적용하는데..

눼?...
작업관리자를 켜고 GPU 메모리를 보라는데.. 너무 여유로워보여서 어찌할바를 모르겠당..
https://docs.unrealengine.com/5.3/ko/crash-reporting-in-unreal-engine/
크래시 리포팅
크래시 리포트와 프로젝트에서 크래시 리포터를 사용하는 방법에 대해 살펴봅니다.
docs.unrealengine.com
https://docs.unrealengine.com/5.3/ko/asserts-in-unreal-engine/
어서트
언리얼 엔진의 어서트 함수 기능에 대한 레퍼런스입니다.
docs.unrealengine.com
이것 저것 찾아보다 다시 프로젝트를 여닫기를 반복하다 보니 어느센가 모디파이어가 적용되어있었다...

왜일까....
애니메이션 -> 압축 -< 커브 압축 세팅을 Uniform Indexable Curve로 바꿔두어야 애니메이션 노드에 접근할 수 있다.


엇 강의에 나온 시퀀스 설정이 없어서 당황했지만..
따라~~ 그냥 창이 작아서 안보인거였다.

강의를 열심히 따라가다 보면 스레드 세이프 방식이 아니라고 나온다.
스레드 세이프 방식이란?
멀티 스레드 프로그래밍에서 하나의 공유 자원에 여러 스레드가 동시에 접근을 하여도 프로그래밍 실행에 문제가 없는 상태라 한다.
스레드 세이프를 지키기 위한 방법은 4가지가 있는데
1. Re-entrancy (재진입성) : 어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바로 주어져야 한다.
2. Thread-local storage (스레드 지역 저장소) : 공유 자원을 최소한으로 줄이고 각각의 스레드에서만 접근 가능한 저장소를 사용하여 동시 접근을 막는다.
3. Atomic operation (원자 연산) : 공유 자원에 접근할 때 원자 연산을 이용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현할 수 있다.
4. Mutual exclusion (상호 배제) : 공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 락을 통제한다.

https://docs.unrealengine.com/5.2/ko/property-access-in-unreal-engine/
프로퍼티 액세스
프로퍼티 액세스 노드 함수를 사용합니다.
docs.unrealengine.com
프로페티 엑세스를 사용하여 컴포넌트나 변수를 호출하면 해당 데이터의 스냅샷이 찍히고, 이를 사용하여 애님 그래프, 애니메이션 노드 함수, 블루프린트 스레드 세이프 함수 또는 이벤트 그래프에서 함수 로직을 구동할 수 있다 한다.
디스턴스 매칭을 마무리하고 캐릭터를 조작해보았는데 어김없이 제대로 되지 않았다.
스테이트 머신의 문제일까 이것저것 다시 보고, 입력값을 잘못받았나 이것저것 보다 보니
Idle -> Start -> Walking으로 애니메이션이 전환되긴하여 Walking 애니메이션이 잘못된거 같아
찾아보니 나랑 같은 상황인 사람을 발견하였다.

스테이스 머신의 Walking 애니메이션 루프가 활성화되어있지 않았다... ㅠㅠ
수정은 간단한데 어디서 잘못했는지 찾는게 더 오래걸렸다.
Is UE5 Anim BP broken? Animations that looped in 4.27 don't loop in 5.1 in State Machine
Same issue. I have an animation created in Blender and ported through to UE 5.2. In the character Blueprint the animation loops no issue. I can even put the blueprint in the world and it will loop. As soon as I put it into an animgraph state machine it doe
forums.unrealengine.com
찾아보니 UE5.2 이상 버전에서 그러한 현상이 나오는거 같다라고 해서 이것 저거 또 해봄
결론은 애니메이션에서 루프 체크 후 저장한 다음 스테이트 머신에 기존에 가져온 애니메이션을 삭제후 다시 올리면 루프가 체크된 애니메이션을 가져온다.
역시 삭제 했다 다시하는게..최고인가...
그리고 대부분의 언리얼 엔진은 컴퓨터 껐켰으로 해결되는거 같다...ㅋㅋ
캐릭터를 움직일때 살짝 제자리 걸음을 하는 모습이 모이는데 이는 애니메이션 속도를 이용해서 만드는 디스턴스 매칭 때문이다. 이를 보완하기 위해 포즈 워핑을 한다.
포즈 워핑은 애니메이션 시퀀스 포즈(Animation Sequence Poses)에 워프를 통해 다이나믹한 조정을 가하여 게임 월드 내에서 보다 짜임새 있는 애니메이션 인터랙션을 생성한다고 한다.
https://docs.unrealengine.com/5.0/ko/pose-warping-in-unreal-engine/
포즈 워핑
포즈 워핑은 캐릭터의 애니메이팅된 포즈를 동적으로 워프시켜서 캡슐 무브먼트에 정렬합니다.
docs.unrealengine.com

플레이어의 속도 값과 회전값을 가져와서 방향을 구해 변수로 생성한다. (LocalVelocityAndDirectionAngle)

값에 따라 해당 방향으로 움직일 수 있게 한다.

시퀀스도 FWD Start로 고정하는 것이 아니라 다이나믹으로 설정해준다.

진행 방향에 따라 애니메이션이 선택 되도록 SetStartValue를 수정한다.

제자리 걸음을 해결 하기위해 Stride Warping을 사용한다.


Stride Warping에서 IK Foot Root Bone이 없을 경우 스켈레톤에서 추가해 주도록 한다.
포즈워핑을 모두 끝냈는데 또 이렇다..ㅋㅋ 이젠 당연하듯 보는 쭈구리
무엇이 잘못인지 찬찬히 생각해보자..
'Unreal Engine > Udemy:UE5 C++ 학습하고 게임 만들기' 카테고리의 다른 글
| Unreal Day - 10 - Adding impulse (0) | 2024.03.24 |
|---|---|
| Unreal Day - 9 - Hello, Unreal Engine (0) | 2024.03.22 |
| Unreal Day - 7 - You just activated my trap card (0) | 2024.03.18 |
| Unreal Day - 6 - Run Forrest, Run! (1) | 2024.03.16 |
| Unreal Day - 5 - Conducting Input Mapping (0) | 2024.03.16 |