시작해요 언리얼 2024 3주차

groot616·2024년 5월 27일
0

언리얼2024 정리용

목록 보기
3/3

캐릭터 애니메이션 작업 관련 정리

1. 시퀀서

언리얼에서의 시퀀서와 시퀀스의 개념 정리

  • 시퀀서
    언리얼 엔진에서 시네마틱 작업을 할 수 있는 툴 세트
  • 시퀀스
    캐릭터가 움직일 수 있도록 본의 시간에 따른 트랜스폼 데이터를 키 값으로 저장하고 있는 에셋

시퀀스는 애니메이션을 리타게팅할 때 발생하는 애니메이션의 부자연스러움을 수정할 때 키값을 추가하여 본의 트랜스폼을 수정하는 것이라고 이해하면 될 것 같다.

1.1 시퀀서 생성

언리얼 엔진의 멀티 트랙 에디터로, 시네마틱 시퀀스를 실시간으로 제작하고 미리보는데 사용된다.
먼저 시퀀서를 추가하기 위해 상단에서 영화버튼 -> Add Level Sequence 를 선택하거나
적당한 위치에 우클릭 -> Cinematics -> Level Sequence 를 통해 추가한 후
레벨에 적당히 배치시킨다.
한번 배치시켜둔 시퀀서는, 생성할 때 상단의 영화버튼에 나타나므로 필요하다면 적당히 안보이는 곳에 숨겨둬도 괜찮다.

1.2 시퀀서에 캐릭터 추가

우선 시퀀서를 선택한 상태에서 Details 패널의 Open Level Sequence 를 선택하면 시퀀서의 기본 에디터 창이 열리게 된다.
시퀀서에 캐릭터를 추가하기 위해 캐릭터 블루프린트를 레벨에 배치시키고
액터가 선택된 상태에서 시퀀서 에디터창의 Add -> Actor to Sequencer -> Add BP_BLUEPRINTNAME 을 선택한다.
시퀀서에 캐릭터를 추가하면 뭔가 이것저것 많이 추가된 것을 확인할 수 있다.
언리얼에서는 Control Rig 라는 것을 지원한다.
Control Rig 란 캐릭터에 Riging 및 애니메이션 작업을 언리얼 엔진에서 할 수 있는 애니메이션 세트이다.

  • Rig
    캐릭터가 움직일 수 있도록 본을 생성하여 할당하고 일부 본의 움직임을 절차적으로 구현하는 과정
    해당 강의 프로젝트에서는 Control Rig 를 이용한 키 에니메이션이 아닌 모션 캡쳐를 통한 데이터 또는 외부에서 얻은 애니메이션 데이터를 사용할 예정이므로 Control Rig 를 사용하지 않기에 CR_Mannequin_Body 를 지워준다.

1.3 캐릭터에 애니메이션 추가

이제 캐릭터에 애니메이션을 추가해줄 차례이다.
시퀀서 에디터창에 추가된 캐릭터의 SkeletalMesh -> + 아이콘 클릭하여 필요한 애니메이션 선택한다( Manny_01 ).

단축키를 이용하여 좀더 편안하게 타임라인을 이용할 수 있다.

  • Shift + 휠스크롤
    타임라인 영역 좌우 이동
  • Ctrl + 휠스크롤
    타임라인 범위조절

애니메이션 길이의 수정이 필요한 경우에도 단축키를 이용하여 시작지점과 종료지점을 정해줄 수 있다.

  • [
    지정된 타임라인에 재생 시작 바 배치
  • ]
    지정된 타임라인에 재생 종료 바 배치

전체 애니메이션이 재생되도록 수정한다.

이외에도 유용한 단축키 모음

  • Space Bar
    시쿼넛 재생 및 일시정지
  • S
    선택된 오브젝트의 트랜스폼 키를 생성
  • Enter
    선택된 트랙에 키를 생성
  • ,
    선택된 트랙에서 이전 키 값의 위치로 점프
  • .
    선택된 트랙에서 다음 키 값의 위치로 점프

1.4 키 추가

재생된 애니메이션은 누워있는 상태 -> 앉은 상태 -> 일어난 상태 이므로 소파에 배치하는 것이 괜찮아 보이니, 위치를 소파로 옮긴다.
이때 블루프린트 액터 자체의 트랜스폼 변경과 블루프린트에서 사용하는 스켈레탈 메시의 트랜스폼 변경 두가지를 선택할 수 있는데 여기서는 스켈레탈 메시의 트랜스폼을 변경할 것이다. TODO
스켈레탈 메시를 옮길 때 애니메이션의 시작 부분 기준으로 옮기는 것이 아니라, 애니메이션의 주요 포인트지점을 기준으로 옮기는 것이 더 효율적일 수 있다.
Manny_01 애니메이션의 경우 누워 있다가 옆으로 몸을 돌린 후 일어나는 애니메이션이다.
옆으로 몸을 돌린 부분을 기준으로 스켈레탈 메시의 트랜스폼을 변경할 경우 기존에 누워있는 상태에서 트랜스폼 변경보다 더 효율적일 수도 있다.
(누워있는 상태 기준으로 트랜스폼 변경 시, 옆으로 몸을 돌릴 때 소파 위에 떠있는 상황이 발생할 수도 있음.)
트랜스폼 변경 상태에서 S 키를 통한 키 추가 또는 SkeletalMesh -> + 클릭 -> Transform 을 통해 키를 추가한다.
다음 포인트는 앉으면서 발바닥이 땅에 닿는 시점에 키를 추가한다.
해당 애니메이션은 모션 캡쳐 폴리싱 이 진행되지 않은 애니메이션이기에 앉은 상태에서 발이 땅에 닿는다 하더라도 일어날 때 발의 위치가 달라진다.
그러므로 다음 포인트는 앉은 상태에서 일어설 때 발바닥이 땅에 닿도록 키를 추가한다.

  • 모션 캡쳐 폴리싱
    스캔 받은 애니메이션 데이터에서 노이즈나 불필요한 키를 제거하고 미흡한 구간에 키를 수정하거나 추가하여 애니메이션 데이터를 다듬는 작업
    모션 캡쳐 폴리싱이 진행되지 않은 애니메이션이라 일어날 때 발의 위치가 달라지는 것을 확인할 수 있다.

여기까지 작업하였다면 캐릭터의 z축을 확인하도록 한다.

시퀀서 에디터창에서 fps 옆의 그래프 모양을 클릭하면 Sequencer Curves 창이 뜬다.
여기서 Transform -> Location -> Z 를 클릭하면 z축의 변화를 확인할 수 있는데, 캐릭터의 움직임이 위와 같을 경우 문제가 있다.
(단순히 소파에 누워있는 경우 캐릭터의 z축 움직임은 필요가 없음)

선택한 키 타이밍을 변경하기 위해서 키를 선택하고 드래그하여 옮겨준다.
앉아 있는 상태에서의 키를 복사하여 그대로 일어나기 직전으로 붙여넣으면 z축 위치가 앉아있는 z축 기준으로 고정되므로 뷰포트와 동일한 단축키인 Alt + 드래그 를 이용해 복사하여 붙여넣어준다.
수정된 z축 트랜스폼은 위와 같다.

  • 첫번째 키에서 옆으로 누워있는 z축 기준 위치 시작
  • 두번째 키에서 앉을 때 z축 트랜스폼 변경
  • 세번째 키에서 일어날 때 z축 트랜스폼을 앉아 있을 때의 z축 트랜스폼으로 고정
  • 네번째 키에서 일어날 때 z축 트랜스폼이 변경되므로 키를 추가하여 변경

1.5 마커 추가

마커를 추가하여 두 캐릭터가 검을 맞대며 격돌하는 것과 같이 캐릭터들 애니메이션 같에 싱크를 맞출 수 있다.
마커를 추가할 위치에서 우클릭 -> Add Mark 를 통해 마크를 추가할 수 있다.
우클릭을 통해 마크의 이름을 지정해 줄 수도 있다.
동일하게 가위바위보가 끝나는 지점에도 마크를 추가해 주고
작업 도중 마크의 이동을 방지하기 위해 타임라인 우클릭 -> Locked 활성화를 시켜준다.

1.6 캐릭터 저장

저장하기 전에 블루프린트 우클릭 -> Convert to Spawnable 를 선택한다.
작업이 끝나면 아이콘 옆에 번개 모양이 추가된다.

  • Spawnable
    시퀀서가 애니메이션이 필요한 오브젝트를 직접 생성/삭제하는 모드

해당 작업을 하는 이유는 캐릭터를 레벨에 배치하고, 레벨에 있는 캐릭터의 타임라인을 수정한 것이므로 시퀀서가 단순히 키값만 가지게 되기 때문이다.
이런 포제서블 방식(레벨이 이미 배치된 오브젝트에 시퀀서가 애니메이션만 적용하는 모드)으로 진행할 경우 다른 레벨에서는 수정된 값들이 적용되지 않는다.
즉 원본의 수정이 아닌 레벨에 배치된 액터의 수정이므로 원본에는 적용되지 않는다는 의미이다.
마지막으로 저장을 누르면 시퀀서가 저장된다.

2. 필요한 애니메이션 데이터를 구해서 언리얼 엔진으로 가져오기

2.1 애니메이션 다운로드

어도비의 Mixamo 라는 사이트에서 여러 애니메이션을 무료로 제공한다.
해당 사이트에서 layinig 을 검색하고 Laying Idle 애니메이션을 다운로드 한다.
Skin 옵션에 두가지 선택지가 있다.

  • With Skin
    애니메이션과 캐릭터 메시를 모두 포함한 데이터 제공
  • Without Skin
    본 정보와 애니메이션 데이터만 제공

첫 애니메이션 다운로드일 경우 반드시 With Skin 을 선택해야 한다.
다운로드한 FBX 파일을 import할 경우 옵션창이 뜨게 된다.
With Skin 옵션을 포함하도록 설정하였으므로 Skeletal Mesh 체크표시가 활성화 되어있는 것을 확인할 수 있다.

  • Skeleton
    본의 구조에 대한 정보만을 저장하는 언리얼 엔진의 에셋. 언리얼에는 스켈레톤이라는 별도의 뼈대만 가진 에셋이 있고 애니메이션들이 여기에 귀속되므로, 스켈레톤만 공유하면 다른 캐릭터여도 애니메이션 공유가 가능함.

이 상태 그대로 import를 진행하면 Material , SkeletalMesh , Physics , Skeleton 파일이 import된다.
이제 다른 애니메이션을 다운로드할때는 Without Skin 옵션을 선택하고 다운로드 가능하다.

2.2 Animaiton Retargeting

동일한 스켈레톤 에셋을 비율이 크게 다를 수 있는 캐릭터 간에 애니메이션을 재사용할 수 있는 기능이다.
해당 기능을 사용하면 FullBody IK 기능을 통해 다른 캐릭터에게 현재 사용중인 애니메이션을 그대로 재활용가능하게 해준다.
리타게팅할 애니메이션을 우클릭한 후 Retarget Animation 을 선택한다.
Target Skeletal Mesh 에서 사용할 캐릭터인 SKM_Manny 를 선택하고, 리타게팅할 애니메이션인 DancingRunningMan , HipHopdancing , Laying_Idle 을 선택해준 다음 우측 하단의 Export Animation 을 진행한다. 언리얼 5.3에서 일일히 체인을 생성해서 진행하던 방식과 다르게 매우 간편해졌다.
또한 자동으로 진행되기 때문에 루트본이 없는 Mixamo 의 애니메이션이라도 높은 퀄리티로 애니메이션 리타게팅이 가능하다.

2.3 애니메이션 수정

이제 리타게팅한 애니메이션을 시퀀서에 적용시킬 차례이다.
다시 시퀀서 에디터창으로 돌아와서 Animation 옆의 + 아이콘을 클릭후, Laying Idle 애니메이션을 선택한다.
두 애니메이션이 적용되면 위와 같이 캐릭터의 위치가 이상하게 변경된다.
이는 언리얼 엔진에서 두 애니메이션의 root를 정렬시킨 상태에서 pelvis 방향을 합쳐버리기 때문이다.
Laying Idle 애니메이션의 경우 머리방향이 소파에 수직이기 때문에 합쳐진 45도로 캐릭터가 기울게 되는 것이다.실제로 기존의 Animation을 좌측의 표시금지 아이콘을 활성화시킨 상태로 확인해보면 Laying Idle 애니메이션이 소파에 수직인 상태로 재생되는 것을 확인할 수 있다.
기존의 Animation을 수정하기 위해 선택후 우클릭 -> Edit -> Trim Section Left 를 선택해 왼쪽 부분은 지워버린다.
빈 공간은 카메라 컷신으로 표현할 것이므로 크게 신경쓰지 않아도 된다.

이제 Laying_Idle 애니메이션에 키를 추가하여 회전시킬 차례이다.
반드시 뷰포트의 캐릭터 선택이 아닌 시퀀서 에디터창의 SkeletalMesh 를 선택하고 S 키를 통한 키를 추가하여야 한다.
애니메이션에 수정이 있었으므로 키값을 다시 잘린 애니메이션의 가장 앞부분으로 옮겨준다.
Laying_Idle 애니메이션의 끝부분에도 동일하게 키를 복사해서 넣어준다.
또는 Sequencer Curves 탭에서 앞의 키들을 모두 선택후 Constant Interpolation 을 선택하면 다음 키에서 값이 변하기 전까지 현재의 키값이 고정된 채로 유지시킬 수 있다.

번외1: 애니메이션 블렌딩

필요에 따라 다른 애니메이션 두개를 자연스럽게 연결시켜서 재생시킬 필요가 있을 수 있다. 애니메이션 블렌딩은 서로 다른 애니메이션을 가진 애니메이션 클립을 겹치고 가중치를 조절해서 자연스럽게 모션이 연결되도록 할 수 있게 한다.
1. 두 애니메이션을 겹치게 한 상태에서 Weight 값을 조절하는 방법

2. 두 애니메이션을 같은 트랙에 겹쳐 트랜잭션 타임을 생성
해당 구간을 우클릭한 후 Option 을 선택하면 다양한 방식으로 애니메이션 변환을 선택할 수 있다.

  • 트랜잭션
    애니메이션과 애니메이션 사이에 전환이 일어나는 구간

번외2: 발 기준 블렌딩

보통은 root bone 기준으로 블렌딩을 진행하지만, 착치하는 애니메이션과 착지후 달려나가는 애니메이션을 블렌딩한다고 가정할 경우 발을 기준으로 블렌딩을 진행해야 할 필요가 생긴다.
뒤쪽의 애니메이션을 우클릭하고 Math With This Bone in Previous Clip 에서 foot_l 을 선택하면
애니메이션이 블렌딩될 때 왼발 기준으로 블렌딩이 진행되는 것을 확인할 수 있다.
(Skeleton 표시는 트랙의 애니메이션 노드 우클릭후 Show Skeleton 활성화)


참고로 특정 본과 매치시키는 기능은 기본적인 root와 pelvis의 방향과 위치가 동일해야 최대한의 효과를 볼 수 있으니 주의해야 한다.

2.4 테이블 트랜스폼 적용

지금까지의 방법을 토대로 애니메이션을 더 추가한다.
Manny_02 를 추가하고
애니메이션의 앞부분에 Transform -> + 를 통한 키를 추가한 후
앞의 키를 우클릭하고 상수 보간을 진행한다.
마지막으로 캐릭터의 위치를 SkeletalMesh 클릭 후 적당한 위치에 옮겨준다.
해당 애니메이션은 발을 테이블 위로 올리는 애니메이션인데 테이블의 위치와 발의 위치가 맞지 않는다.
시네마틱 애니메이션이므로 중간중간 화면전환이 발생하기 때문에 테이블을 앞으로 당겨와도 문제가 없다.
동일하게 테이블 선택후 시퀀서를 추가한다.
테이블은 스포너블이 아닌 포제서블 방식을 채택한다. 왜냐하면 시퀀서가 종료되는 순간 테이블도 사라지기 때문이다.
먼저 적당한 앞부분에 Transform 키를 주어 테이블의 원래 위치를 기억하도록 한다. 동일하게 상수 보간을 하여 컷이 바뀔 때 테이블이 위치가 딱 바뀌도록 한다.
애니메이션에 맞춰 테이블의 트랜스폼을 변경시킨 후 키를 추가하고 키를 애니메이션 가장 앞으로 당겨 애니메이션 시작시 테이블의 위치가 변경되도록 한다.

2.5 레이어드 컨트롤 리그로 캐릭터 애니메이션 수정

컨트롤리그란 캐릭터에 리깅 및 애니메이션 작업을 언리얼 엔진에서 할 수 있는 애니메이션 툴 세트이다.
기존의 IK와 FK 방식보다 매우 간편하다.

  • IK(Inverse Kinematics)
    하위 본의 움직임에 맞춰서 상위 본들이 움직이는 방식, 손을 원하는 위치에 배치하면 자동으로 발꿈치와 어깨가 손에 맞게 움직여서 애니메이션을 생성하낟.
  • FK(Forward Kinematics)
    상위 본부터 하위 본으로 움직이는 방식, 어깨>팔꿈치>손목 순서대로 움직여서 애니메이션을 생성
    자세히 보면 발이 테이블과 겹쳐져 있는 것을 확인할수 있다.
    이부분을 수정하기 위해 시퀀서 에디터창의 SkeletalMesh -> + -> Control Rig -> Layered 활성화 -> 하단의 Control Rig Class 에서 CR_Mannequin_Body 선택한다.
    CR_Mannequin_Body 는 언리얼 엔진5에서 사전 제공되는 인간형 컨트롤리그인데, 마네킹과 동일한 구조의 캐릭터에 바로 적용 가능하다.


    우선 오른발을 올릴 때 발뒤꿈치가 테이블과 살짝 닿는 부분을 해결하려고 한다.
    먼저 오른발을 선택하고 변경전 키를 추가한다.
    발을 때기 전까지는 기존의 키값을 유지시켜야 하므로 때기 직전에도 동일하게 키를 추가한다.발을 올리다가 발뒤꿈치가 테이블에 닿는 타이밍에 발의 위치를 살짝 조정하고 키값을 추가한다.


    참고로 IK를 이용하여 발을 고정시킬 수도 있지만 캡쳐모션에는 추천하지 않는다. 캡쳐모션의 경우 자연스러운 모션이 주 목적이므로 실제 사람처럼 약간의 흔들림이 발생할 수도 있지만 IK로 고정시킬 경우 자연스러운 흔들림이 사라지기 때문이다.
    Absolute 를 선택할 경우 IK를 이용할 수 있다.
    컨스트레인트에서 고정할 옵션을 선택하고 고정시킬 대상을 지정하면 된다.

4842 FK로 허벅지 옮기기

0개의 댓글