[Unreal] Lyra - Anim Blueprint (1)

개요

Lyra Sample Project에서 캐릭터 애니메이션을 어떻게 처리했는지 분석하면서 자연스러운 애니메이션 처리에 대해 공부해본다.

Animation Blueprint의 Comment를 #1부터 따라가면서 분석한다.

ABP_Mannequin_Base

AnimBP Tour #1

Lyra에서는 Animation Blueprint에서 어떤 로직도 처리하지 않는다고 한다.

이벤트 그래프의 로직은 Game Thread에서 실행되고 이벤트 틱마다 실행되므로 성능저하가 발생하기 때문

따라서 BlueprintTreadsafeUpdateAnimation function을 사용한다고 한다.

My Blueprint 탭에서 해당 내용을 볼 수 있다.

 

사용 데이터

보통 EventGraph에서는 애니메이션 제어에 사용할 정보를 추출(변수로 만들어서)하는 용도로 사용한다.

BlueprintTreadsafeUpdateAnimation function을 어떻게 구현 했는지 보단 어떤 정보들을 추출하는지를 중점으로 분석하자.

UpdateLocationData()

WorldLocation : 현재 Actor의 World Location

Displacement Since Last Update : 업데이트 전 World Location과 현재 World Location의 차이 -> 첫 프레임이면 0

Displacement Speed : DeltaTime(걸린 시간)으로 나눠줘 얻은 이번 Update에서의 속도 -> 첫 프레임이면 0

UpdateRotationData()

WorldRotation : 현재 Actor의 Rotation

Yaw Delta Since Last Update : 이전 Rotation과 현재 Rotation의 Yaw의 차이 -> 첫 프레임이면 0

Yaw Delta Speed : Yaw Delta Since Last Update / DeltaTime으로 얻은 순간 각속도

Additive Lean Angle :  Yaw Delta Speed에 따른 기울어짐 정도  -> 첫 프레임이면 0

UpdataeVelocityData()

Was Moveing Last Update : 속도가 0이면 false

World Velocity : 3D 속도 -> 전체 월드에서 어느쪽으로 가는지

World Velocity 2D : X축 Y축으로의 속도

Local Velocity 2D :  2D 속도  ->실제 Actor를 기준으로 어느쪽으로 가는지

Local Velocity Direction Angle : 2D에서 Actor를 기준으로 움직이는 방향( -180(뒤) ~ -90(왼) ~ 0(앞) ~ 90(오른) ~ 180(뒤) )

Local Velocity Direction Angle with Offset : Local Velocity Direction Angle에서 Root Yaw Offset을 빼준 값 (?)

Local Velocity Direction: 이전 Enum값을 기준으로 Enum 으로 방향이 left, right, forward, backward 인지

Local Velocity Direction No Offset: 이전 Enum값을 기준으로 Enum 으로 방향이 left, right, forward, backward 인지  

Has Velocity : Velocity의 Length가 0에 가까우면 false

World Velocity, Local Velocity 개념

더보기

만약 Actor를 Yaw로 45도 회전한 상태에서 Actor기준 앞으로 갈 때 로컬 Velocity는? -> 1, 0, 0

이를 월드 기준으로 본다면? -> 월드에서 봤을 땐 대각선으로 움직이는 것으로 보인다, 로컬 Velocity에서 45를 돌린 방향이 World Velocity, 0.5, 0.5, 0

 

만약 Actor를 Yaw로 45도 회전한 상태에서 월드 기준으로 앞으로 갈 때 월드 Velocity는? -> 1, 0, 0

이를 로컬 기준으로 본다면 -> Actor기준으로 -45도 방향으로 움직인다. 월드 Velocity에서 -45를 돌린 방향이 Local Velocity, 0.5, -0.5, 0

UpdateAccelerationData()

World Acceleration 2D : 월드 기준 가속도

Local Acceleration 2D : 로컬 기준 가속도

Has Acceleration : 가속도가 0에 가까우면 false

Pivot Direction 2D : (?) 피봇을 위해 구하는 값

Cardinal Direction from Acceleration : (?) 피봇을 위해 구하는 값

UpdateCharacterStateData

OnGround State

  • IsOnGround : 땅에 있는지

Crouch State

  • IsCrounching : 앉은 상태인지
  • CrouchStateChanged : 이전과 비교해서 앉은 상태가 변화했는지

ADS State

  • ADSStateChanged : 이전과 비교해서 조준 상태가 변화 했는지
  • Was ADSLastUpdate : 현재 GamePlay Tag가 ADS인지

Fire State

  • Tims Since Fired Weapon : Fire 상태에서 얼마나 시간이 지났는지

In Air State

  • Is Jumping : Movement에서 Falling이며 z velocity가 0 이상
  • Is Falling : Movement에서 Falling이며 z velocity가 0 이하

UpdateBlendWeightData()

Upperbody Dynamicc Additive Weight : Montage가 플레이 중이거나 OnGround이면 1,  0으로 보간

UpdateAimingData()

Aim Pitch : Aim의 피치값 (-180~ 180)

UpdateJumpFallData()

Time to Jump Apex : Jumping 이면 0, 최고점에 도달하는 시간 t = v0 / g(중력가속도) -> 현재 velocity에서 최고점까지 남은 시간

UpdateWallDetectionHeuristic

Is Running Into Wall : 벽으로 뛰어가고 있는지 bool값

 

AnimBP Tour #3

Anim Graph도 애니메이션을 직접 참조하지 않는다.

Montage와 Linked Animation Layer가 그래프의 특정 지점에서 플레이 하는 enry point만 지정

Anim Graph의 목적은 entry 포인트들을 blend하는 것

이 방식의 장점은 필요할 때 필요한 Montage와 Linked Animation Layer만 로드 가능

e.g  B_WeaponInstance_Shotgun은 Montage와 Linked Animation Layer에 대한 참조 보유

       B_WeaponInstance_Base는 무기를 위한 애니메이션 Layer를 링크해줌

 

<해석 추가하기>

'Unreal' 카테고리의 다른 글

[Unreal] Lyra - Slot 구조  (0) 2025.01.28
[Unreal] Lyra - Animation Layer Interface  (0) 2025.01.27
[Unreal C++] Game Flow  (0) 2025.01.23
[Unreal] DataTable  (0) 2025.01.22
[Unreal C++] Enhanced Input System  (0) 2025.01.21