Unreal Engine

Motion Capture - 02

Rapids. 2024. 4. 30. 10:10

[ 마야에서 언리얼 엔진으로 Export ]

1. Maya에서 리깅된 캐릭터 Export

메시와 루트 본 잡고 Game Exporter로 사용하여 추출하기

파일 탭에서 게임 익스포터가 안보인다면 플러그인에서 gameFbxExporter 켜주기

Export Selection으로 바꾸어주고, Skinning, Blendshapes나 Animation을 필요에 따라 클릭해주기

경로를 지정해주어야 하는데, 언리얼엔진 프로젝트 폴더가 있다면 해당 폴더로 경로를 잡아서 언리얼에서 사용 될 소스를 모두 저장해놓으면 좋다. (회사마다 방식이 다르므로 참고만)


<언리얼에서 스켈레탈 메시 Import>

블랜드쉐입을 들고 올때는 모프타깃 임포트를 항상 켜주어야 가져올 수 있다.

 

스켈레탈 메시를 레벨에 바로 올려도 되지만 캐릭터에 효과, 악세사리의 추가 등의 활용을 편리하게 하기 위해서 

액터 블루프린트를 생성해서 스켈레탈 메시를 추가해 이를 레벨에 올려 사용하게 된다.

 


2. Maya에서 캐릭터에 적용된 애니메이션 Export

본에 애니메이션이 적용된 상태이고 언리얼에 캐릭터 스켈레탈 메시가 이미 있는 상태라면

본만 선택하고(export Selection 옵션 사용 시 루트 본이 아니라 모든 본 잡아주기) Game Exporter.

이번에는 Animation Clips 탭에서 +버튼을 추가하여 애니메이션 클립 이름과 키프레임 범위를 지정해준다. 

키프레임 범위에 따라 애니메이션을 따로 추출도 가능하다(플러스 버튼으로 추가)

0~20 걷기, 21~50 뛰기라면 두개의 Clip을 생성해서 범위를 나눠주고 한 번에 추출해주면 된다. (FBX가 분리되어 저장)

본만 잡고 추출한 FBX를 언리얼에 불러오면 자동으로 애니메이션 임포트로 인식을해서

임포트 옵션이 애니메이션 임포트로 뜬다.

스켈레톤을 미리 임포트했던 (캐릭터에 쓰인) 스켈레톤과 연결해준다. 애니메이션이 스켈레톤에 종속되므로 중요!

* 가끔 FBX가 멀쩡함에도 임포트 오류가 생기면 애니메이션 길이 부분을 변경해줘본다. 예전에 해당 옵션에 오류가 있었음.

 

임포트 시 애니메이션 시퀀스가 생성되며 불러와진다.

 

애니메이션 시퀀스를 열어보면 해당 애니메이션이 재생되는 것을 볼 수 있다.

 


[ 모듈형 캐릭터 활용 : 액터 블루프린트 ]

각 파츠를 나누어서 갈아끼울 수 있도록 모델링 작업을 한 캐릭터

 

 

각 파츠는 같은 본의 형태를 가지고 있으며 스켈레탈 메시로 들어와있다. 

 

파츠를 합치기 위해서는 액터 블루프린트를 활용한다

원하는 스켈레탈 메시를 모두 잡아 액터 블루프린트에 드래그 앤 드롭으로 가져올 수 있다.

 

불러온 스켈레탈 메시는 틈틈히 이름 정리를 해준다.

 

애니메이션 시퀀스를 적용하는 법.

레벨에 불러온 액터 블루프린트에서 스켈레탈 메시를 선택하고 디테일 창에서 애니메이션 모드를 Use Animation Asset으로 바꾸어준 후 플레이할 애님에 애니메이션 시퀀스를 적용해준다. 

이 때 적용해준 파츠만 움직이는 것을 볼 수 있다. 이와 같은 방식은 효율적이지 못하므로 블루프린트에서 한번에 움직이게 설정해주어야한다.

상, 하체가 분리된 모습

 

<모듈형 캐릭터 한번에 애니메이션 시퀀스 적용하기>

블루프린트에서 하이어라키 맞춰주기, 이번 예시에서는 하체에 따라서 나머지는 따라가도록 설정할 것이기 때문에 애니메이션을 주로 사용하는 부분이 될 하체가 제일 상위에 존재하도록 해주고 그 밑으로 종속 관계에 따라 정리해준다. 

 

이벤트 그래프의 경우 플레이 버튼을 누름 또는 이벤트 발생에 따라 시작되는 동작 등을 세팅하는 곳이므로, 이번에는 Construction Script를 활용해준다. 

 

Construction Script는 레벨에 올라가는 순간 & 컴파일을 누르는 순간 적용되는 부분이기 때문에 여기서 하체에 나머지 부분이 따라가도록 설정해준다.

 

*노드를 검색할 때 뜨는 창에서 '컨텍스트에 따라'를 체크하면 쓰임새에 따라서 필터링된 노드 목록이 뜬다.

Set Leader Pose Component 노드를 생성해준다. 

 

하체(Pants)부분이 Leader가 되고, 나머지 액터들이 Target이 되도록 꽂아준다.

 

아까와 달리 하체에만 애니메이션을 적용했을 때 다른 부위가 같이 따라가는 것을 알 수 있다.

 

이후에 악세사리 등의 스켈레탈 메시를 블루프린트에 추가 했을 때도 Construction script 부분에서 추가해주어야하는 것을 잊으면 안된다.


<라이브로 사용 시 추가 설정>

플러그인에서 Livelink, livelink curve debug ui, livelink camera 켜주기

 

live link skeletal animation 컴포넌트를 추가해준 후 컴파일 저장해준다.

이 컴포넌트를 추가해주면 플레이버튼을 누르지 않아도 실시간으로 움직임을 인식하여 edit 상태에서도 뷰포트에서 움직이게 된다. 그냥 추가만 해놓으면 된다.

 

 

<악세사리 추가하기 : 스태틱메시 추가와 소켓>

스태틱메시의 경우에는 본이 없고 바인딩이 되지 않은 상태이므로 블루프린트의 노드로는 연결 시킬 수 없으므로, 스켈레탈에 '소켓'을 추가하여 본을 따라 움직일 수 있도록 설정해주어야한다.

 

연결시킬 스켈레탈 메시의 에디터를 열어준다.

 

우측 상단에 뼈다귀 아이콘을 선택하면 스켈레탈 메시에 연결된 스켈레톤으로 이동하게 된다.

 

무기를 오른손에 붙일 것이므로 가까운 본인 hand_r 본을 찾아서 우클릭 - 소켓추가를 해준다.

만약 소켓을 추가했는데 보이지 않는다면 뷰포트 메뉴에서 캐릭터 - 본그리기 - 소켓을 추가해준다.

소켓이 추가되면 다이아몬드 모양의 소켓이 추가된 것을 볼 수 있다. 

 

소켓은 선택한 본 아래 종속되지만 따로 움직여줄 수도 있다.

무기가 손바닥 부분에 붙을 수 있도록 소켓 위치를 맞춰준다. 저장.

다시 액터 블루프린트로 돌아와서, hand 스켈레탈메시 아래 손에 들고 있을 악세사리 스태틱메시를 추가해준다.

추가된 스태틱메시를 선택하고 디테일 창에 소켓 - 부모 소켓에 앞서 스켈레톤에 만든 소켓을 찾아 연결해준다.

(만약 소켓의 위치에서 벗어나게 스태틱 메시가 배치되었다면 트랜스폰을 리셋한 후 적용해줘본다)

소켓의 위치로 이동 후 트랜스폼을 살짝 수정하여 위치를 추가로 맞춰줄 수 있다.

악세사리가 추가된 결과

 

<사용하지 않는 메시 숨기기>

1. 블루프린트 해당 메시 디테일 패널 - 렌더링 - 표시 체크해제

 

2. 노드로 세팅해주기 ( 외부로 노출시키기)

액터 블루프린트 - Construction script에서 Branch 노드 생성

Branch노드는 조건문을 생성해주는 노드

 

조건문에 조건을 달아주기 위해 변수가 필요

왼쪽 하단 내 블루프린트 창에서 변수 - +버튼 눌러 생성( 조건은 기본 부울 형태 )

변수를 선택하고 디테일패널을 보면 하단에 기본값에서 디폴트 상태를 설정해줄 수 있다.

 

변수를 끌어다 Get으로 가져오고 Condition에 연결.

set visibility : 표시 옵션을 조절하는 노드

표시 옵션을 조절하고 싶은 스태틱메시를 끌어다 놓고 Set visibility 노드의 Target에 연결해준다. 

New visibility가 체크 되어있으면 표시 on, 체크 해제되어있으면 표시 off란 의미.

 

레벨에 올린 블루프린트의 외부 디테일 창에서 조절할 수 있도록 하기 위해서

블루프린트에서 앞서 생성한 acc_on 변수를 누른 상태에서 디테일 패널 - 인스턴스 편집가능 체크

컴파일 저장. 

레벨로 나가보면 레벨에 올라간 블루프린트의 디테일창에 Acc_on 옵션이 생긴 것을 볼 수 있다.

 

<여러 메시의 on/off 추가하기>

여러 조건을 한번에 연결하기 위해서는 sequence 노드를 추가할 수 있다. +버튼 핀추가로 원하는 만큼 추가 가능하다.

 

자켓 메시를 on/off 하는 노드와 변수를 앞선 방식과 같이 구성하고 sequence의 다른 핀에서 뽑아 추가 연결.


<옵션 원격 조절 컨트롤러 생성 : Remote Control>

플러그인에서 Remote Control API를 활성화. 재시작.

 

* 라이브 진행 시 Play 버튼을 누른 후 라이브를 하게 되는데, 라이브 상태에서는 다운될 우려가 있어서 어셋을 직접 클릭하여 디테일 창의 옵션을 건드리지 않는다.

 

그래서 옵션을 컨트롤 하기 위해서 remote control을 생성하게 된다.

 

Content Drawer에서 우클릭 - 원격제어 - 리모트 컨트롤 프리셋 생성

 

리모트 컨트롤 프리셋을 열어보면 창이 하나 뜨면서 어셋들의 디테일 창 옆에 눈 모양의 아이콘들이 생긴다.

눈을 키면 컨트롤러에 연동이 되고 컨트롤러에서 옵션을 조절할 수 있게된다.

 

레벨에 올라온 캐릭터 블루프린트들의 옵션도 한번에 추가 해줄 수 있다. 또는 라이트, 기타 어셋들 모두 추가 가능.

 

// Play 시 Remote Control로 조절할 수 있도록 하려면

액터 블루프린트에서 visibility 조절 부분을 복사해서 Event Graph에서 Event Tick에 연결해주면 된다. 

Event Tick이란 Play 버튼을 눌렀을 때 지속해서 실행되는 부분이라고 생각하면 된다.


< 키보드를 인풋으로 옵션을 조절하는 방법 >

이벤트 그래프 검색에서 input을 치고 연결할 단축키를 입력 ( 예시에서 J 사용 ) Pressed는 키를 눌렀을 때 작동하는 거고, Released는 키를 누른 후 뗄 때 작동하는 것. 둘 중 하나만 연결해도 된다.

 

Filp Flop 노드 : A와 B를 번갈아서 출력해주는 노드 ( 토글방식 구현 시 많이 사용 )

Pressed에 Filp Flop을 연결해주고 A와 B에 visibility가 끄고 켜지는 걸 연결 시켜준다.

 

기본적으로 단축키를 사용하려면 블루프린트 디테일 세팅에서 입력 - 입력 자동 수신을 Player 0로 바꾸어 준다.

 

다시 뷰포트로 돌아가서 Play를 누르고 Play 상태에서 뷰포트를 한 번 클릭한 이후부터 키보드 입력 가능해진다.

왼쪽 위로에 이 상태로 바뀌어 있어야 키보드 사용 가능 상태라는 뜻. 마우스 컨트롤로 바꾸려면 다시 Shift + F1을 누르면 된다.


<라이브링크 연결>

다시 이번에는 Head가 상위로 가도록 하이어라키 재조절 (편의를 위한 재조정 단계)

 

스켈레탈 메시 우클릭 - Create - anim blueprint 생성

* 스켈레탈 메시에 기반해서 생성되지만 애님 블루프린트가 생성될 때 스켈레톤이 있는 폴더에 생성되므로 주의!

폴더가 불편하다면 원하는 장소에 옮겨도 상관은 없다.

 

생성된 애님 블루프린트를 액터 블루프린트의 최상위에 위치시켰던 Head 스켈레탈 메시의 디테일 창에서 Animation - Anim class에서 적용 시켜준다. 컴파일 저장. (Animation Mode는 Use Animation BluePrint로 지정) 

 

애님 블루프린트의 경우 최종 노드가 될 Output pose 노드만 생성되어있는 것이 기본 상태이다.

 

라이브링크로 작업 시 보통 얼굴용과 바디용을 나누어서 Live Link Pose 노드를 두 개 붙여준다. 컴파일 저장.

 


<Apple ARKit를 이용한 라이브링크 세팅>

cmd 창을 열어 ipconfig 검색. 밑에 뜨는 IPv4 옆에 쓰여진 숫자를 아이폰 또는 아이패드 라이브링크 페이스 앱 설정 - 스트리밍 - 타깃에 추가해준다. ( Apple기기와 언리얼 작업 중인 컴퓨터가 같은 네트워크에 연결되어있어야 한다)

 

플러그인에서 LiveLink와

Apple ARKit, Apple ARKit Face Support를 켜준다.

 

이후 앞서 배운 액터블루프린트와 애님 블루프린트를 연결하고 LiveLink Pose 노드에 불러와진 Subject를 연결시켜주면 작동된다.

*혹시 애님 블루프린트에서 프리뷰가 되지 않는다면 결과 노드에 연결된 선을 끊고, 컴파일을 다시한 후, 다시 연결, 다시 컴파일 해주면 재생된다.

 

*LiveLink Camera 플러그인을 이용하면 뷰포트의 이동과 Apple 기기의 움직임을 연동시켜 오프라인에서 카메라를 찍는 것과 같은 효과를 낼 수 있다.

 

*혹시 애님 블루프린트에 다른 노드들과 연결을 같이 한다면 라이브 링크는 맨 앞에 위치시켜주는 것이 좋다.

 


<라이브 링크 페이셜 추가 응용>

LiveLink Pose 노드 뒤로 Modify Curve 노드를 달아준 후 노드를 우클릭 - Add Curve Pin 을 선택하면 캐릭터가 가지고 있는 모프타깃 목록을 볼 수 있다. 여기서 원하는 것을 적용.

 

 

적용하면 입력 핀이 생기는데 입력핀에서 선을 끌어다 놓으면 Promote to variable를 찾을 수 있다.

Promote to variable를 눌러주면 해당 핀에 연결되는 변수가 생성된다.

 

해당 변수를 이용하면 Modify Curve에서 적용한 모프타깃을 기존에 사용하는 LiveLink 페이셜 모프타깃 이름과 연결 시켜줄 수 있다. ( 캐릭터에 적용되어있는 블랜드쉐입이 LiveLink의 목록과 일치하지 않을 때 유용한 방법 )

 

애님 블루프린트의 Event Graph로 넘어가서 Event Blueprint Update Animation에 Evaluate Live Link Frame을 연결해준다. 

Evaluate Live Link Frame : Live Link 어플을 통해 들어오는 값을 실시간으로 평가해주는 노드

 

Subject를 다시 애플 기기로 적용하고 Data Result에 Get Property Value를 연결해준다.

Get Property Value를 연결하면 Data Result 중 원하는 값만 얻을 수 있다.

Property Name에 기존 LiveLink에서 들어오는 모프타깃 목록 중 하나를 적어준다. ( 입력값으로 사용되어지는 모프타깃)

 

* 팁 : Get Property Value에서 나오는 값을 눈으로 확인하고 싶을 때 Print String을 달아주면 뷰포트에서 수치값을 볼 수 있다. 

 

이제 Get Property Value에서 얻어낸 값과 앞서 변수로 바꾸었던 값(캐릭터가 가지고 있는 모프타깃)을 연결하기 위해서

변수를 Set으로 끌어다 놓고 Get Property Value에서 나오는 Value값을 인풋핀에 연결해준다. 컴파일 저장.

(Print String은 디버깅용이므로 없어도 된다)


* 라이브링크를 통해 들어오는 값의 그래프를 보기 위해서 Tools - Debug - Live link Curve Debugger를 켜주면 된다.

플러그인에서 Livelink curve debug ui 활성화 해주기.


* 블루프린트 작성 시 창 - 팔레트를 켜주면 즐겨찾기 해놓은 노드 등을 모아서 볼 수 있다.


*언리얼 프로젝트 중에 중요한 폴더

Config, Content, 언리얼 프로젝트 실행 파일, 

추가적으로 Source 폴더나 Plugins 폴더 등이 있다. 기타는 임시파일들이다.

 

*기본 언리얼 엔진 사용 시 플러그인이 깔리는 경로

C:\Program Files\Epic Games\UE_5.3\Engine\Plugins

또는 프로젝트마다 Plugins 폴더를 생성한 후 각 프로젝트에 사용될 플러그인만 넣을 수도 있다.


<라이브링크 사용 공식 문서>

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/recording-face-animation-on-ios-device-in-unreal-engine?application_version=5.3

 

언리얼 엔진에서 iOS 디바이스로 얼굴 애니메이션 녹화하기

라이브 링크 페이스(Live Link Face) 앱, ARKit 및 라이브 링크(Live Link)를 사용하여 얼굴 애니메이션을 캡처하여 언리얼 엔진의 캐릭터에 적용합니다.

dev.epicgames.com


< 페이셜 라이브링크 데모 프로젝트 >

https://github.com/Rokoko/Unreal-Demo-Project/tree/master

 

GitHub - Rokoko/Unreal-Demo-Project: Rokoko Studio Unreal Virtual Production Sample Project

Rokoko Studio Unreal Virtual Production Sample Project - Rokoko/Unreal-Demo-Project

github.com


< 페이셜 모션캡처 참고영상: 메타휴먼을 이용한 방식 >

https://www.youtube.com/watch?v=8qfBHbBIy_U

 

'Unreal Engine' 카테고리의 다른 글

생성형 AI - 04  (0) 2024.05.03
Unreal Material - 05  (0) 2024.05.02
Unreal Lighting - 04  (0) 2024.04.29
생성형 AI - 03  (0) 2024.04.26
Unreal Material - 04  (0) 2024.04.25