관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

유저 캐릭터 애니메이션 만들기 2 - 상하체를 분리하는 애니메이션 몽타주 기능 본문

게임 개발 공부/게임 프로젝트

유저 캐릭터 애니메이션 만들기 2 - 상하체를 분리하는 애니메이션 몽타주 기능

huenuri 2024. 8. 25. 14:57

이제 애니메이션 몽타주를 만들어보려고 한다. 몽타주라는 말은 어디서 많이 들어봤는데 무슨 뜻인지 궁금해졌다. 몽타주는 따로 촬영된 화면을 떼어 붙이면서 새로운 장면이나 내용을 만드는 기법이다. 일반적으로 영화나 사진의 편집 구성의 한 수법으로 간주된다고 한다.

이러한 몽타주를 하게 되면서 영화는 기록 매체에서 스토리 중심의 작품성을 가진 매체로 변화하게 되었다는 말을 언젠가 들은 적이 있다.

 



 

 

애니메이션 몽타주 만들기

애니메이션 몽타주를 선택하여 블루프린트를 만든다. 스켈레톤을 선택하고 AM_으로 시작하는 에셋을 하나 만든다.

 

 

 

에디터에 들어가면 Window창에서 Anim Slot Manager를 클릭한다. 그러면 우측 하단에서 새로운 슬롯을 하나 만들 수 있다. 슬롯 이름을 SwordFire라고 지었다. 왼쪽 메뉴에 보면 Edit Slot에 조금 전에 만들어준 슬롯 이름이 보인다. 그런 다음 몽타주로 만들어줄 애니메이션을 에셋 브라우저에서 검색하여 하단 창에 끌어온다.

 


 

 

Input Action 추가하기

 

참고한 블로그에서는 총을 발사하는 것으로 나와있으나, 내 게임은 총보다는 칼을 사용하기에 이름도 Sword라고 해주었다. 마우스 왼쪽 버튼을 클릭하면 칼을 휘두를 수 있게 만드는 작업을 진행했다. 그리고 Input 폴더에서 블루프린트를 하나 만들어서 IA_Fire라고 이름을 지었다.

 

이 부분은 처음에 만들어질 때 Bool 타입으로 되어 있어 따로 설정할 필요는 없겠다.


 

 

 

BP_Player 설정하기

 

왼쪽 마우스 버튼을 클릭할 때 어떤 동작을 할지 BP_Player에서 설정해 준다. 이벤트 그래프에서 조금 전에 만들었던 IA_Fire를 가져오고, Play Anim Montage 노드를 추가한다.

그런 다음 Aim Montage에서 에셋을 조금 전에 만든 몽타주로 선택한다.

 

AM_Fire에 가서 애니메이션의 End Time 값도 복사해서 넣는다. 그래야 정확한 초수에 애니메이션이 끝나기 때문이다.

이때 애니메이션 바를 선택해야 보인다.

 

 

 

 


 

 

ABP_Player 애님 그래프 작업

 

애님 그래프에서 Slot'DefaultSlot'을 검색하여 추가한다. 그리고 슬롯 이름도 원하는 조금 전에 만들었던 이름으로 설정한다.

 

노드 끝(output)은 new save cashed pose를 검색하고 이름을 Fire로 변경한다. 처음 부분에는(input) Locomotion Cache를 넣는다.

 

cached는 애니메이션에 대한 상태를 저장하는 기능이다.

 

Use cached는 이미 저장한 cached를 사용하는 노드이고, Slot DefaultSlot은 전에 만든 몽타주 Slot을 불러올 수 있다.



 

상하체 애니메이션 적용하기

 

Layered blend per bone

상하체 애니메이션을 따로 적용하기 위해서 사용하는 노드가 바로 이것이다. 이 노드를 추가하고 Locomotion과 Fire 캐시를 추가한다.

 

어느 위치의 뼈를 움직일지 살펴보고 그 부분을 복사한다.


 

 

 

마네킹 스켈레톤 살펴보

지금 사용하고 있는 마네킹 스켈레톤에 들어가서 허리뼈가 어느 위치에 있는지 확인한다.

 

detail 창에 보면 Layer Setup이 있는데 거기서 Bone Name을 움직일 뼈의 이름으로 설정하고, Mesh Space Rotation Blend도 체크해 준다.

 

 

 

 

 

 

그런 다음 Output Pose와 연결한다. 이 설정을 마치면 상하체를 따로 움직일 수 있게 된다.

 

 

 

 

 

 



 

 

 

작업을 마치고

전에 분명히 몇 번 만들었던 작업이라 비교적 간단하게 정리할 수 있을 줄 알았는데 아니었다. 내가 설정한 스켈레톤이 어디 있는지 찾는데도 한참 걸렸고, cached가 무엇인지 알아보는데도 많은 시간을 투자했다. 아직도 제대로 알지 못하는 게 많지만 이젠 적어도 그냥 노드를 연결하지는 않는다. 이 노드가 무엇이고 어디서부터 오는 것인지 생각해 본다.

처음 이 프로젝트 작업을 할 때 그냥 만들기만 했더니 어디서부터 막혔는지 알 수가 없어 힘든 시간을 보냈다. 이젠 작업을 하는 즉시 모두 자료로 정리해서 관리하는 것이 얼마나 중요한지 알게 되었다.