unreal 5기

250808 언리얼엔진 본캠프 5일차 TIL 캐릭터 애니메이션을 적용해보자 with Game Animation Sample (2)

parkjinnam 2025. 8. 8. 14:56

어제는 언리얼엔진에서 제공되는 Game Animation Sample의 다양한 애니메이션을 구현하기 위해서 분석하는 시간을 가졌다. 어제에 이어서 오늘도 열심히 달려보자

어제에 이어서 다 만들었다

 

각도별로 애니메이션 시퀀스를 생성했으니 어제 하던 것에 이어서 BS파일을 완성해 보자

그래프의 상하를 Pitch, 좌우를 Yaw로 지정해준다

 

모든 설정을 따라서 구현하면서 어떤 역할을 하는지 알아보는 게 중요하다 무턱대고 따라 하는 게 아닌 이게 무슨 역할인지 찾아보고 이해하는 것이다.

 

타임라인에 각도에 해당하는 애니메이션 시퀀스를 배치해준다! 사전에 Snap to grid를 활성화해서 정확하게 위치하기 편안하다
일단은 구현해보았다

 

자 이제 BS를 만드는 데 성공했으니 다시 애님 그래프로 넘어가서 연결을 해보자

Blendspace Player로 생성해줘서 연결해주자

 

이 노드들은 카메라와 캐릭터가 설정된 임계값 내에 정렬될 때 캐릭터가 카메라가 향하는 방향을 바라보도록 하는 노드라고 한다 그렇기에 각 Pitch, Yaw 값 별로 애니메이션 시퀀스가 필요했고 그것을 하나로 묶어주는 Blendspace를 활용하는 것으로 보인다. 특히 여기에는 Dead Blending 노드를 사용하는데 이것은 블렌드 곡선을 지원하며 블렌드 인 시 팝핑 없이 조준 오프셋을 재설정하는 데 사용된다고 한다. 이 설정은 블렌드가 매끄럽게 진행되도록 보장하며 이걸 활용 안 하면 문제가 생긴다고 적혀있다.

 

또 다른 블렌드 스페이스를 요구한다

 

이번에는 BS1D_Additive_Lean_Run라는 블랜드 스페이스가 있다 GAS에서 이것도 한번 찾아보자

이름만 보면 뛸 때 옆으로 기우는 애니메이션 인거 같다

 

사용되는 애니메이션은 3개 아까보다는 쉽다 그래프는 x축 하나만 사용하며 LeanLR 즉 LeanRun의 기울기 정도를 표현하는 것 같다. 그럼 각 애니메이션을 한번 살펴보자

이 중에서 Run_Lean_Pose_(Base, Right, Left)가 쓰인다

 

일단 해당 애니메이션은 리타게팅을 이용하여 프로젝트로 가져와보자

연습용 프로젝트에 엑스포트 했다

 

이제 BS1D_Additive_Lean_Run으로 BS1D(일반 블렌드 스페이스가 아닌 Legacy의 BlendSpace 1D다!)ㅠ를 하나 생성해 주고 아까와 처럼 똑같이 구현해 보자

 

뭐 한번 해보니 이정도는 이제 가뿐하다

 

자 다시 애님 그래프로 돌아가서 추가해 준 BS1D 노드를 생성해 연결해 보자

 

고마워요 구글번역! 2

 

예측했던 대로 캐릭터의 기울기를 조절해 주는 듯하다 이제 사진대로 Two Way Blend 노드를 연결해 주고 다음으로 넘어가자

 

압도적이게 긴 코멘트 아무래도 중요한 노드인거 같다

 

해당 노드는 모션 매칭 시스템에서 포즈 선택을 담당하는 주요 AnimGraph 노드라고 한다 모션 매칭을 위해서는

포즈 검색 데이터베이스, 포즈 히스토리 노드라고 한다. 포즈검색 데이터베이스는 노드가 선택을 위해 사용할 애니메이션 데이터를 포함하며 포즈 검색 데이터베이스 에셋은 선택에 사용되는 포즈 및 궤적 데이터를 정의하는 포즈 검색 스키마 에셋을 사용한다고 하며, 포즈 히스토리 노드는 애니메이션 데이터를 쿼리하고 매칭하는 데 사용될 포즈 및 캐릭터 궤적 데이터가 포함되어 있다고 한다.

그리고 두 가지 정도의 함수를 사용하는데 이는 다음에 함수를 구현하면서 다시 살펴보도록 하겠다 다음 노드를 보자

이쪽도 만만치 않은 강적이다

 

일단 Experimental이라는 단어가 눈에 띈다 당장은 실험적인 시도라는 의미로 버그가 발생할 가능성이 높다고 볼 수 있다. 왜 그럴까? State Machine의 제어 가능성, Choosers의 유연성, Motion Matching의 강력함과 Blend Stack의 동작을 결합하여 아티스트 친화적이고 제어하기 쉬운 확장 가능한 이동 시스템을 구축하는 것을 목표로 하는 매우 실험적인 설정이라는 것이 그 설명이다.

라고 한다

 

"아래 상태 머신은 순전히 논리적 상태 머신으로 사용되며 포즈를 출력하지 않습니다. 이 상태 머신의 역할은 상태 입력 애니메이션 노드 함수를 사용하여 블렌드 스택에 데이터를 쓰는 것입니다. 양방향 블렌드는 블렌드 스택 포즈만 전달하지만, "항상 자식 노드 업데이트"로 설정되어 상태 머신의 로직이 블렌드 스택보다 먼저 업데이트될 수 있도록 합니다.

이 설정의 주요 목적은 향후 도구 개발에 대한 정보를 제공하고 "상태 머신이 내부적으로 블렌드 스택을 사용하고 상태 재진입을 쉽게 처리할 수 있다면 어떻게 할 수 있을까?"와 같은 워크플로우 질문을 실험하는 것입니다. 현재 워크플로우가 이상적인 것은 아니지만, 어쨌든 이 워크플로우를 선보이는 것이 좋겠다고 생각했습니다."

라는 것이 개발자의 코멘트이다. 아직은 어려운 내용으로 다가오지만 좀 더 분석해 보면서 이해보도록 하자

 

전체적인 노드 설정은 끝났으나 이게 끝은 아니다

 

전체적인 노드 설정은 끝마쳤지만 아직 큰 것이 나왔다 각 노드별로 참조하는 변수나 함수의 구성이 전혀 되어있지 않기 때문이다. 하나하나 봐가면서 하나씩 만들어 보자 일단 함수와 변수부터다

저거 하나하나 열어보면 굉장히 많다(...)

 

기나긴 여정일 거 같지만 일단 변수부터 하나하나 해보도록 하자. 다음 주에 이어서 하겠다