Apple iPhone 및 iPad의 최신 모델은 사용자의 얼굴에서 50개가 넘는 구체적인 근육의 위치, 위상과 움직임을 구분하는 정교한 얼굴 인식 및 모션 트래킹 기능을 제공합니다. iOS 디바이스에 뎁스 카메라와 ARKit 기능이 탑재된 경우 에픽게임즈에서 무료로 제공하는 라이브 링크 페이스 앱을 사용하여 복잡한 얼굴 애니메이션을 휴대 전화와 엔진에서 실시간으로 녹화하며 언리얼 엔진에서 3D 캐릭터로 구현할 수 있습니다.
이 페이지에서는 라이브 링크 페이스 앱을 사용하여 라이브 퍼포먼스를 3D 캐릭터의 얼굴에 적용하는 방법과 결과적인 얼굴 캡처 시스템이 전체적인 프로덕션 촬영의 맥락에서 작동하도록 하는 방법에 대해 설명합니다.
라이브 링크 페이스는 에픽게임즈 런처의 학습(Learn) 탭에 있는 페이스 AR 샘플(Face AR Sample) 에서 사용되는 것과 동일한 ARKit 기능을 사용합니다. 하지만 페이스 AR 샘플은 iOS를 위해 컴파일해야 하며 이 경우 Mac 및 Apple 개발자 계정이 필요합니다. 라이브 링크 페이스 앱을 사용하면 얼굴 애니메이션을 모든 언리얼 엔진 프로젝트에서 적절히 구성된 캐릭터에 즉시 적용할 수 있습니다.
전제조건:
- 이 페이지의 머티리얼은 언리얼 엔진의 여러 다양한 툴과 기능 영역을 지칭합니다. 다음과 같은 머티리얼이 이미 익숙하다면 최상의 결과를 얻을 수 있습니다.
- ARKit 및 뎁스 API를 지원하는 iOS 디바이스가 있어야 합니다.
시작하기
이 섹션의 지침에 따라 언리얼 엔진 프로젝트를 구성하고 라이브 링크 페이스 앱을 연결하고 앱으로 녹화되고 있는 데이터를 3D 캐릭터에 적용하세요.
-
프로젝트에 대해 아래의 플러그인을 활성화합니다.
- 라이브 링크
- ARKit
- ARKit Face Support
-
ARKit의 얼굴 인식에 의해 생성된 얼굴 블렌드 셰이프와 일치하는 블렌드 셰이프 세트로 캐릭터를 구성해야 합니다. 일반적으로는 Autodesk Maya와 같은 서드파티 리깅 및 애니메이션 툴로 이를 수행한 다음 캐릭터를 언리얼 엔진으로 임포트해야 합니다.
캐릭터가 지원해야 하는 블렌드 셰이프 목록은 Apple ARKit 문서를 참조하세요.
자체 캐릭터가 준비되지 않은 경우에는 에픽게임즈 런처 학습 탭의 페이스 AR 샘플 에 있는 소년을 사용할 수 있습니다.
캐릭터의 블렌드 셰이프는 ARKit 블렌드 셰이프와 동일한 이름을 사용하지 않아도 됩니다. LiveLinkRemap 에셋에서 커스텀 블루프린트 함수를 생성하여 ARKit 블렌드 셰이프 이름을 캐릭터가 사용하는 이름으로 변환할 수 있습니다. 자세한 지침은 페이스 AR 샘플 문서를 참조하세요. 하지만 최상의 결과를 위해서는 캐릭터의 얼굴 블렌드 셰이프가 ARKit 블렌드 셰이프와 동일한 얼굴 영역을 덮도록 해야 합니다.
-
언리얼 엔진에서 Live Link Pose 노드를 포함하는 애니메이션 블루프린트를 사용하여 캐릭터를 구성합니다. 예를 들어 페이스 AR 샘플의 소년과 관련된 애니메이션 블루프린트의 경우:
나중에 이 노드를 사용해 휴대 전화로부터 전송되고 있는 애니메이션 데이터를 캐릭터에 적용하게 됩니다.
-
컴퓨터의 IP 주소를 가져옵니다. 이 주소는 라이브 링크 페이스 앱 연결에 필요합니다.
일반적으로 IP 주소는 컴퓨터의 제어판이나 설정에서 찾을 수 있습니다. 또는, 대부분의 Windows 플랫폼에서는 ipconfig 명령줄 유틸리티를 사용하면 됩니다.
- 컴퓨터가 인터넷에 연결되어 있는 경우 네트워크 내에서만 표시되는 로컬 IP 주소, 그리고 개방형 인터넷에서 본인을 식별해 주는 공용 IP 주소 둘 다가 있을 수도 있습니다. 그런 경우에는 로컬 IP 주소를 선택합니다. 로컬 IP 주소는 일반적으로
10.
또는192.168.
로 시작됩니다. - 또한 컴퓨터에 여러 어댑터에 대한 복수의 IP 주소가 구성되어 있을 수도 있습니다. 예를 들어 각각의 주소가 있는 유선 이더넷 어댑터와 무선 어댑터가 있을 수 있습니다. 컴퓨터에서 해당 디바이스와 동일한 네트워크에 연결하는 데 사용하는 어댑터의 IP 주소를 선택해야 합니다.
- 컴퓨터가 인터넷에 연결되어 있는 경우 네트워크 내에서만 표시되는 로컬 IP 주소, 그리고 개방형 인터넷에서 본인을 식별해 주는 공용 IP 주소 둘 다가 있을 수도 있습니다. 그런 경우에는 로컬 IP 주소를 선택합니다. 로컬 IP 주소는 일반적으로
-
Apple App Store에서 에픽게임즈의 무료 앱인 라이브 링크 페이스 를 찾아서 휴대 전화에 설치합니다.
-
휴대 전화를 컴퓨터와 동일한 무선 네트워크에 연결하거나, 이더넷 케이블을 사용하여 Lightning Ethernet 어댑터로 휴대 전화를 컴퓨터에 직접 연결합니다.
라이브 링크를 사용하려면 네트워크 데이터 소스가 필요하므로 USB로 휴대 전화를 컴퓨터에 연결하는 것은 적합하지 않습니다.
-
디바이스에서 라이브 링크 페이스 앱을 실행합니다. 새 녹화를 개시할 수 있는 홈 화면에서 시작됩니다.
원본 이미지를 보려면 클릭하세요.
처음 시작하면 ARKit 얼굴 인식 시스템에 의해 생성된 트라이앵글 메시로 오버레이된 카메라 사진이 보입니다. 위의 이미지에 보이는 것처럼 자기 얼굴만 보려면 프리뷰 메시(Preview Mesh) 세팅을 꺼서 오버레이를 비활성화하면 됩니다. 아래의 라이브 링크 페이스 앱 컨트롤 섹션을 참조하세요.
-
왼쪽 상단의 아이콘을 탭하여 앱 세팅을 엽니다. 적어도 라이브 링크(Live Link) 세팅에 들어가야만 컴퓨터에 연결이 가능합니다.
원본 이미지를 보려면 클릭하세요.
라이브 링크(Live Link) 세팅 페이지에서 타깃 추가(Add Target) 를 탭하고 컴퓨터의 IP 주소를 입력합니다.
애니메이션을 여러 개의 언리얼 에디터 인스턴스에 브로드캐스트해야 하는 경우, 여기서 여러 개의 IP 주소를 입력할 수 있습니다. 아래의 여러 사용자와 작업 섹션도 참조하세요.
라이브 링크 페이스 앱과 관련하여 사용 가능한 다른 모든 세팅에 대한 자세한 내용은 아래 섹션을 참조하세요.
-
언리얼 에디터의 메인 메뉴에서 창(Window) > 라이브 링크(Live Link) 를 선택하여 라이브 링크(Live Link) 패널을 엽니다. 그러면 이제 디바이스가 서브젝트로 나열되어 있어야 합니다.
-
캐릭터의 애니메이션 그래프에서 Live Link Pose 노드를 찾아 해당 서브젝트를 디바이스를 나타내는 서브젝트로 설정합니다.
-
애니메이션 블루프린트를 컴파일(Compile) 및 저장(Save) 합니다.
-
캐릭터를 선택합니다. 디테일(Details) 패널에서 스켈레탈 메시(Skeletal Mesh) 카테고리의 에디터에서 애니메이션 업데이트(Update Animation in Editor) 세팅이 활성화되어 있는지 확인합니다.
-
라이브 링크 페이스로 돌아와서 앱이 얼굴을 인식하고 얼굴 움직임 트래킹을 시작할 때까지 휴대 전화의 카메라를 자신의 얼굴로 향합니다.
이 시점에서 언리얼 에디터의 캐릭터가 실제 얼굴과 매칭되도록 실시간으로 얼굴을 움직이기 시작하는 모습을 확인할 수 있어야 합니다.
-
퍼포먼스를 녹화할 준비가 되면 라이브 링크 페이스 앱에서 빨간색 녹화(Record) 버튼을 탭합니다. 그러면 디바이스에서 퍼포먼스가 녹화되기 시작하고 언리얼 에디터에서는 테이크 레코더도 실행되어 엔진의 캐릭터 애니메이션 데이터를 녹화하기 시작합니다.
녹화 버튼을 다시 탭하면 테이크가 중지됩니다.
머리 회전 구성하기
라이브 링크 페이스 앱의 데이터를 사용하여 머리 회전을 액터에 적용하려면, 먼저 이벤트 그래프와 애님 그래프에서 블루프린트를 구성하여 머리의 조인트를 구동해야 합니다.
머리 회전 블루프린트 - 이벤트 그래프
이 블루프린트는 캐릭터 애님 블루프린트의 이벤트 그래프에 배치됩니다. 이 블루프린트는 라이브 링크 퍼포먼스에서 요와 롤, 피치 데이터를 가져와서 캐릭터 릭의 적절한 본에 적용합니다.
원본 이미지를 보려면 클릭하세요.
- 블루프린트에서 우클릭하고 Event Blueprint Update Animation 노드를 추가합니다. 이를 통해 움직임이 있는 각 프레임의 머리 위치가 업데이트됩니다.
- 다음으로, 내 블루프린트(My Blueprint) 패널에서 HeadRoll, HeadYaw, HeadPitch 라는 이름의 float 변수 3개를 생성합니다. 각 변수를 블루프린트로 드래그하고 메뉴에서 Set 옵션을 선택합니다.
- Event Blueprint Update Animation 노드를 드래그하여 Evaluate Live Link Frame 노드를 생성합니다. 이 노드는 라이브 링크 소스로부터 float 변수에 저장될 데이터를 제공합니다.
- 서브젝트(Subject) 드롭다운 메뉴를 사용하여 디바이스를 나타내는 서브젝트를 선택합니다.
- 롤(Role) 드롭다운 메뉴를 열고 LiveLinkBasicRole 을 선택합니다.
- Evaluate Live Link Frame 근처를 클릭하고 Get Property Value 노드 3개를 생성합니다. 이 3개의 노드는 라이브 링크 앱으로부터 요와 롤, 피치를 가져오는 데 사용됩니다. 각 노드의 프로퍼티 이름(Property Name) 박스를 사용하여 하나는 headYaw, 다음은 headRoll, 그리고 마지막은 headPitch 로 설정합니다.
- Evaluate Live Link Frame의 Valid Frame 출력을 위의 이미지에서처럼 Set 변수에 연결합니다.
- 마지막으로, 각 Get Property Value 노드의 Value 출력을 해당하는 Set 변수 노드의 float 입력에 연결합니다.
머리 회전 블루프린트 - 애님 그래프
이제 앱에서 들어오는 머리와 목의 회전 데이터를 사용하여 애님 그래프에서 캐릭터의 릭에 적용할 수 있습니다.
원본 이미지를 보려면 클릭하세요.
위에 표시된 섹션은 애님 그래프 끝, Output Pose 노드 바로 앞에 추가됩니다.
- Output Pose 노드에서 Result 를 드래그하여 Component To Local 노드를 생성합니다.
- 다음으로, 회전 데이터의 영향을 받을 캐릭터 스켈레톤의 각 머리 본과 목 본에 대한 Transform (Modify) Bone 노드가 필요합니다. 페이스 AR 샘플 프로젝트의 카이트 보이(Kite Boy)를 사용하는 경우, 두 개의 노드가 필요합니다.
- 각 노드를 블루프린트에서 클릭하고 디테일 패널에서 수정할 본(Bone to Modify) 세팅을 올바른 본 이름으로 설정합니다. 카이트 보이의 경우, 해당 본 이름은 neckRoot 와 head 입니다.
- 위 이미지에서처럼 첫 번째 노드의 출력을 다음 노드의 Component Pose 입력에 연결합니다.
- 각 Transform (Modify) Bone 노드에서 이동 스페이스(Translation Space) 옵션 드롭다운을 클릭하고 본 스페이스(Bone Space) 로 변경합니다.
- Transform (Modify) Bone 노드의 디테일 패널에서 회전(Rotation) 섹션을 찾아 회전 모드(Rotation Mode) 를 기존 항목에 추가(Add to Existing) 로 변경하고, 회전 스페이스(Rotation Space) 옵션을 본 스페이스(Bone Space) 로 변경합니다.
- 이제 이벤트 그래프에서 수집하고 있는 요와 피치, 롤 데이터를 가져와 머리 본과 목 본의 회전을 업데이트하는 로테이터(Rotator)를 생성합니다. 앞서 생성한 각 float 변수 사본을 드래그하여 메뉴에서 Get 을 선택합니다.
- 각 변수의 출력을 드래그하여 Float x Float 노드를 생성합니다. 피치(Pitch)에 15, 요(Yaw)와 롤(Roll)에 -15를 곱합니다. 원하는 결과를 얻기 위해 요, 피치, 롤 배수를 조정해야 할 수도 있습니다. 회전이 제대로 되도록 양수와 음수 값을 사용해 봐야 할 수 있습니다.
- 배수를 설정했으면 로테이터를 생성할 차례입니다. 블루프린트 패널을 우클릭하고 Make Rotator 노드를 생성합니다.
- 요 배수의 출력을 Make Rotator 노드의 X (Roll) 입력에 연결합니다.
- 피치 배수를 Z (Yaw) 에 연결합니다.
- 마지막으로 롤 배수를 Y (Pitch)에 연결합니다.
- Make Rotator 출력을 각 Transform (Modify) Bone 노드의 Rotation 입력에 연결합니다.
- Live Link Pose 노드를 생성하고 라이브 링크 서브젝트 이름(Live Link Subject Name) 을 해당 디바이스로 설정하여 시퀀스를 완료합니다. Live Link Pose 노드의 출력을 드래그하여 Local to Component 노드를 생성합니다.
- 이 노드의 출력을 첫 번째 Transform (Modify) Bone 노드의 Component Pose 입력에 연결합니다.
올바른 회전을 달성하기 위해 요, 피치, 롤 연결을 조정해야 할 수도 있습니다. 회전을 확인하는 가장 좋은 방법은 시퀀스가 완료되면 라이브 테스트를 진행하는 것입니다. 캐릭터가 사용자와 함께 움직여야 합니다. 사용자가 머리를 왼쪽으로 기울이면 캐릭터도 똑같이 왼쪽으로 기울여야 합니다.
에디터에서 플레이(Play in Editor)를 눌러 머리 회전 구성을 테스트합니다. 이제 캐릭터의 머리가 라이브 링크 앱에서 녹화되는 것과 똑같이 회전해야 합니다.
라이브 링크 페이스 앱 컨트롤
라이브 링크 페이스 앱의 홈 화면에서는 다음과 같은 컨트롤을 제공합니다.
원본 이미지를 보려면 클릭하세요.
1 | 세팅(Settings) 대화 상자를 엽니다. |
2 | 모든 라이브 링크 타깃으로의 얼굴 애니메이션 데이터 전송을 전환합니다. 초록색으로 하이라이트된 경우 앱이 애니메이션 데이터를 전송 중임을 나타냅니다. 라이브 상태에서는 앱 세팅에서 구성된 타임코드 소스에서 판독되고 있는 현재의 타임코드 값도 나열됩니다. |
3 | 비디오 디스플레이 및 얼굴 트래킹을 켜고 끕니다. |
4 | 새로운 테이크의 녹화를 시작 및 중지합니다. |
5 | 앱에서 이전에 녹화한 테이크 목록을 엽니다. |
6 | 현재의 슬레이트 및 테이크, 그리고 라이브 링크 서브젝트 이름을 표시합니다. 탭하여 현재 슬레이트의 이름을 변경하거나 테이크 번호를 변경합니다. |
7 | 초록색으로 하이라이트된 경우 ARKit 얼굴 캡처 시스템이 현재의 카메라 뷰에서 얼굴을 성공적으로 탐지할 수 있음을 나타냅니다. |
라이브 링크 페이스 앱 세팅
홈 화면 왼쪽 상단의 아이콘을 탭하여 세팅 페이지로 이동합니다. 여기서는 앱의 행동을 환경설정할 수 있습니다.
세팅 | 설명 |
---|---|
라이브 링크(LiveLink) | 언리얼 엔진을 실행 중인 컴퓨터에 연결되도록 앱을 환경설정합니다. 그러면 앱이 라이브 링크를 통해 애니메이션 데이터를 전송하고 녹화를 제어할 수 있습니다. |
타임코드(Timecode) | 라이브 링크 페이스 앱의 타임코드 소스를 구성합니다. 자세한 내용은 아래의 타임코드 소스를 참조하세요. |
OSC | 라이브 링크 페이스 앱과 외부 OSC 컨트롤러 및 디바이스 간의 연결을 구성합니다. 자세한 내용은 OSC를 통한 라이브 링크 페이스 제어를 참조하세요. |
캘리브레이션(Calibration) | 캘리브레이션 메뉴를 엽니다. |
머리 회전 스트리밍(Stream Head Rotation) | 앱이 라이브 링크 연결을 통해 ARKit에서 머리 회전(요/피치/롤) 데이터를 전송하도록 할지 결정합니다. 이 옵션은 휴대 전화를 고정된 삼각대에 설치하고 라이브 링크 페이스 앱을 사용하여 본인이 휴대 전화를 기준으로 머리를 위아래 그리고 양옆으로 움직일 때 가상의 머리가 움직이도록 하려는 경우에 유용할 수 있습니다. 라이브 링크 페이스 앱을 바디 모션 캡처 구성과 함께 사용하는 경우에는 이 세팅이 필요 없을 가능성이 높습니다. 대신에, 일반적으로 디바이스가 항상 얼굴 정면에 위치하도록 커스텀 헬멧을 사용하여 디바이스를 머리에 장착하고 바디 모션 캡처 시스템이 위아래 및 양옆으로 움직이는 머리를 녹화하도록 합니다. |
프리뷰 메시(Preview mesh) | 홈 화면에서 ARKit 얼굴 인식 시스템에 의해 생성된 트라이앵글 메시로 카메라 사진을 오버레이할지 결정합니다. |
녹화 버튼(Record button) | 홈 화면에 빨간색 녹화 버튼을 표시할지 결정합니다. |
블렌드 셰이프 데이터(Blendshape data) | 모든 얼굴 블렌드 셰이프에 대해 ARKit 얼굴 인식 시스템에 의해 생성되고 있는 데이터 값을 홈 화면에 표시할지 결정합니다. 이 정보는 보통 디버깅 용도에 관련된 경우에만 유용합니다. |
테이크 레코더(Take Recorder) | 현재의 슬레이트 이름과 테이크 번호 또는 현재의 녹화에 사용할 파일 이름을 홈 화면에 표시할지 결정합니다. |
오버레이(Overlay) | 라이브 링크 페이스 앱의 메인 화면을 항상 표시할지, 아니면 터치스크린과 상호작용할 때까지 페이드아웃 처리할지 결정합니다. |
비디오 퀄리티(Video Quality) | 레퍼런스 비디오를 인코딩하는 데 사용되는 JPEG 압축 퀄리티를 결정합니다. 퀄리티가 높을수록 이미지가 더 선명하지만 그만큼 디바이스에서 차지하는 저장 공간도 늘어나게 됩니다. |
스토리지(Storage) | 디바이스의 여유 공간, 그리고 라이브 링크 페이스에 의해 사용되고 있는 공간을 표시합니다. 이 화면을 사용하여 이전에 녹화한 테이크를 삭제할 수도 있습니다. |
리셋(Reset) | 라이브 링크 페이스 앱을 초기화하여 앱 설치 이후에 변경한 모든 세팅을 취소할 수 있습니다. |
정보(About) | 앱에 대한 법적 정보를 표시합니다. |
원시 얼굴 녹화
라이브 링크 페이스 앱에서 새로 녹화를 개시할 때마다 캡처는 디바이스에서 두 개의 파일로 녹화됩니다.
-
.mov
파일에는 카메라에 의해 녹화된 레퍼런스 비디오가 포함됩니다.비디오 프레임은 JPEG 코덱을 사용하여 압축되지만 시간 압축 없이 프레임이 정확합니다. 이 파일에는 오디오 및 타임코드가 포함되며 녹화 후에 애니메이션 퍼포먼스를 작업해야 할 수도 있는 애니메이터를 위한 레퍼런스 용도로 사용됩니다.
-
.csv
파일에는 녹화 도중 ARKit에 의해 캡처된 원시 애니메이션 데이터가 포함됩니다.iOS 디바이스에서 이 .csv 파일을 익스포트하여 테이크 레코더에서 녹화한 것처럼 언리얼 엔진으로 임포트할 수 있습니다. 아래 섹션에 라이브 링크에서 .csv 녹화를 추출하고 이를 사용하여 언리얼 엔진에서 페이셜 애니메이션을 구동하는 방법이 나와 있습니다. 이 파일의 원시 데이터는 얼굴 캡처에 관한 추가 툴을 빌드하고자 하는 개발자에게도 유용할 수 있습니다.
iOS 디바이스에서 .csv 얼굴 녹화 추출하기
iOS 디바이스에서 .csv
포맷으로 원시 라이브 링크 얼굴 녹화를 추출하는 방법은 두 가지입니다. 가장 쉬운 방법은 라이브 링크 앱 자체 내에서 테이크를 공유하는 것이지만, iOS 파일 앱에서 .csv
파일을 탐색하고 이를 수동으로 전송하거나 공유할 수도 있습니다.
라이브 링크 앱 내에서
-
메인 화면 왼쪽 하단의 테이크 브라우저(Take Browser) 아이콘을 탭합니다.
-
선택(Select) 을 탭한 다음 디바이스에서 추출하려는 테이크(Takes) 를 선택합니다.
-
공유(Share) 아이콘을 탭하고 AirDrop이나 메일 같은 내장 iOS 공유 기능 중 하나를 사용합니다.
AirDrop은 디바이스에서 라이브 링크 테이크를 공유하는 가장 믿을 만한 옵션입니다. 다수의 테이크나 긴 테이크를 추출하면 Google Drive 같은 서드파티 서비스에 문제가 발생할 수 있습니다. iOS 공유 기능은 통합된 비 Apple 서비스에서 사용 시 자주 버그가 발생합니다.
iOS 파일 앱
iOS 파일 앱은 iOS 디바이스에서 파일을 추출하는 몇 가지 대안을 제공합니다. iOS 디바이스와 컴퓨터 간 파일 전송에 대한 Apple 문서를 읽어보세요.
라이브 링크 앱은 iOS 디바이스의 Files > Browse 폴더의 Live Link Face 폴더에 원시 얼굴 녹화를 저장합니다.

Live Link Face > takes 를 연 다음 공유하려는 테이크의 폴더를 탭합니다. 해당 폴더 안에 원시 .csv
파일이 있습니다.
원본 이미지를 보려면 클릭하세요.
.csv
파일을 탭하고 컨텍스트 메뉴에서 공유 옵션 중 하나를 선택하여 파일을 공유할 수 있습니다.
언리얼 엔진에서 .csv 얼굴 녹화 사용하기
이 프로세스를 위해서는 이 문서 위쪽의 시작하기 섹션에 나열된 세 개의 플러그인 모두와 LiveLinkFaceImporter 베타 플러그인이 필요합니다.
-
편집(Edit) > 플러그인(Plugins) 으로 이동하여 플러그인 브라우저를 엽니다. LiveLinkFaceImporter 플러그인을 검색하여 활성화합니다. 진행하기 전에 에디터를 재시작합니다.
-
콘텐츠 브라우저(Content Browser) 에서 임포트(Import) 를 클릭하고 사용하려는 라이브 링크
.csv
파일을 임포트합니다. -
새 레벨 시퀀스(Level Sequence) 에셋이
.csv
파일과 같은 이름으로 콘텐츠 브라우저에서 생성됩니다. -
이 에셋을 더블클릭하여 시퀀서(Sequencer) 에서 레벨 시퀀스를 엽니다. 트랙 이름 옆에 있는 드롭다운 캐럿을 클릭하면 모든 다양한 얼굴 블렌드 셰이프의 키프레임 데이터를 볼 수 있습니다.
원본 이미지를 보려면 클릭하세요.
메타휴먼 캐릭터에 .csv 적용하기
캐릭터에 레벨 시퀀스를 사용하려면 시퀀서에서 레벨 시퀀스를 연 다음 라이브 링크 소스가 구성된 모든 곳에서 서브젝트로 설정합니다. 레벨 시퀀스가 옵션으로 표시될 것입니다. 메타휴먼 애니메이션을 재생하려면 메타휴먼 블루프린트를 선택한 다음, 디테일(Details) 패널의 라이브 링크(Live Link) 섹션에서 다음 세팅을 환경설정하면 됩니다.

- 체크박스를 선택하여 ARKit 페이스 사용(Use ARKit Face) 을 활성화합니다.
- ARKit 페이스 서브젝트(ARKit Face Subj) 드롭다운 메뉴에서 임포트한
.csv
와 일치하는 서브젝트를 선택합니다.
이러한 세팅은 메타휴먼 블루프린트의 이벤트 그래프에서도 액세스할 수 있습니다.
원본 이미지를 보려면 클릭하세요.
이제 시퀀서에서 레벨 시퀀스를 재생하면 얼굴 애니메이션이 메타휴먼 캐릭터에 바인딩됩니다.
캘리브레이션
얼굴 트래킹 퀄리티를 개선하기 위해 중립적인 '휴식' 얼굴 포즈 이미지를 캡처하여 얼굴 변화에 더 잘 반응하도록 라이브 링크 페이스 앱을 보정할 수 있습니다.
캘리브레이션을 활성화하려면, 라이브 링크 페이스 앱이 열릴 때 왼쪽 상단의 세팅 아이콘을 연 다음, 캘리브레이션(Calibration) 을 탭합니다. 이제 캘리브레이션 메뉴가 보일 것입니다. 이 메뉴에서 활성화(Enable) 버튼을 탭하여 기능을 활성화할 수 있습니다.

필요에 따라 카운트다운(Countdown) 프로퍼티도 활성화할 수 있는데, 이를 통해 보정 이미지를 개시할 때 3초 타이머가 활성화됩니다.
이제 메인 라이브 링크 페이스 화면으로 돌아가면 새 캘리브레이션(+) 버튼이 화면 오른쪽 하단에 표시될 것입니다. 이 버튼을 탭하면 특별 '캘리브레이션 모드'가 활성화되고 녹화 버튼 기능이 캘리브레이션 캡처로 전환됩니다.

얼굴을 보정하려면 캘리브레이션 버튼을 탭합니다. 다음으로, 얼굴을 디바이스 카메라로 향하게 하고 무표정한 얼굴을 한 다음 녹화 버튼을 누릅니다. 보정 이미지가 즉시 캡처되거나, 캘리브레이션 세팅에서 카운트다운 을 활성화한 경우 3초 카운트다운 이후 이미지가 캡처됩니다.
보정 이미지를 캡처한 다음에는 이미지를 저장(Save) 할 수도 있고 버리기(Discard) 후 다시 시도할 수도 있습니다. 이미지를 저장한 다음, 캘리브레이션 버튼을 다시 탭하면 재보정(Recalibrate) 후 새 이미지를 캡처하거나 보정을 제거(Remove) 하는 옵션이 표시됩니다.
녹화 모드 및 결과
디바이스의 라이브 링크 페이스 앱에서 또는 라이브 링크 페이스 앱의 OSC 인터페이스를 통해 녹화를 개시할 때마다 이전 섹션에서 설명한 것처럼 퍼포먼스가 휴대 전화에 녹화됩니다. 언리얼 엔진의 인스턴스에 연결되어 있지 않은 상태에서도 이러한 방식으로 녹화가 가능합니다.
라이브 링크 페이스 앱에서 또는 OSC 인터페이스를 통해 녹화를 시작하는 시점에 라이브 링크를 통해 언리얼 엔진의 인스턴스에 연결되어 있으면 언리얼 엔진의 모든 연결된 인스턴스에 대해 테이크 레코더 역시 실행됩니다. 애니메이션 퍼포먼스가 디바이스, 그리고 컴퓨터의 테이크 레코더 둘 다에서 녹화됩니다.
라이브 링크를 통해 언리얼 엔진의 인스턴스 하나 이상에 연결되어 있고 디바이스 또는 OSC 인터페이스에서 녹화를 개시하는 대신 언리얼 에디터 인터페이스의 테이크 레코더에서 녹화를 개시하는 경우에는 퍼포먼스가 디바이스에 저장되지 않습니다 . 컴퓨터의 테이크 레코더에만 퍼포먼스가 녹화됩니다.
여러 사용자와 작업
좀 더 복잡하고 현실적인 프로덕션 맥락에서는 여러 작업자가 언리얼 엔진에서 동시에 작업하며 멀티 유저 편집을 사용하여 동일한 가상 환경에서 실시간으로 협업할 수 있습니다. 이러한 경우에는 모든 작업자가 실행하는 모든 언리얼 엔진 인스턴스에 연결되도록 라이브 링크 페이스 앱을 환경설정하는 것이 좋습니다. 그러면 앱이 퍼포먼스 캡처를 모든 엔진 인스턴스에 멀티캐스트합니다. 이 경우 모든 작업자가 지연시간이 최소화된 상태로 들어오는 관련 애니메이션 데이터를 확인할 수 있습니다.
타임코드 소스
실제 프로덕션에서는 라이브 링크 페이스가 훨씬 더 큰 퍼포먼스 캡처 구성의 일부에 불과할 가능성이 높습니다. 따라서 오디오, 라이브 비디오, 기타 바디 캡처 데이터, 카메라 트래킹 데이터 등과 같은 다른 요소를 동시에 녹화해야 할 가능성이 높습니다. 이러한 별개의 녹화를 완벽한 정확도로 동기화할 수 있으려면 모든 녹화에서 일관된 타임코드 값을 포함하도록 보장해야 합니다.
라이브 링크 페이스는 타임코드 소스를 위한 세 가지 옵션을 제공하며, 이러한 옵션은 세팅 패널에서 환경설정할 수 있습니다.
-
시스템 타이머(System Timer)
기본적으로 라이브 링크 페이스의 타임코드 값은 디바이스의 시스템 타이머를 기반으로 합니다. 이 타이머는 마지막 시스템 재부팅 이후의 경과된 시간에 기반합니다. 이는 자체적으로 정확한 기본 옵션을 제공하지만 이 타임코드를 다른 디바이스에서 이루어진 녹화에 연결하기는 쉽지 않을 수 있습니다.
-
NTP 서버(NTP Server)
시간대에 따라 일관된 타임코드를 얻을 수 있는 한 가지 방법은 NTP(네트워크 타임 프로토콜)를 통해 시간 값을 제공하는 서버에 의존하는 것입니다. 이 옵션을 선택했을 경우의 기본 서버는 time.apple.com 이며, 이는 Apple이 디바이스의 시간대를 동기화하기 위해 사용하는 것과 동일한 서버입니다. 하지만 다수의 프로덕션에서 스테이징 디바이스의 타임코드 동기화를 위해 사용하듯이 커스텀 NTP 서버를 사용하는 경우에는 서버 이름과 IP 주소를 입력하면 됩니다.
-
Tentacle Sync
Tentacle Sync는 블루투스를 통해 디바이스가 스테이징 마스터 클럭과 동기화할 수 있게 해주는 서드파티 하드웨어 디바이스입니다. 이는 가장 전문적인 타임코드 옵션일 가능성이 높으며 고급 프로덕션은 보통 촬영 도중의 타임코드 동기화를 위해 마스터 클럭에 의존합니다. 자세한 내용은 Tentacle Sync를 참조하세요.
OSC를 통한 라이브 링크 페이스 제어
라이브 링크 페이스 앱은 오픈 사운드 컨트롤(OSC) 프로토콜을 통한 양방향 통신을 지원합니다.
-
OSC 디바이스를 사용하여 라이브 링크 페이스를 원격으로 제어할 수 있습니다. 예를 들면 외부 디바이스를 사용하여 앱 녹화를 원격으로 시작할 수 있습니다.
-
또한 활동에 관한 알림을 다른 OSC 디바이스로 전송하도록 라이브 링크 페이스를 환경설정할 수도 있습니다. 예를 들면 앱이 새로 녹화를 시작할 때마다 다른 디바이스에서 액션을 트리거할 수 있습니다.
OSC를 설정하려면 앱 세팅을 엽니다.
-
리스너(Listener) 섹션에는 디바이스의 현재 IP 주소, 그리고 들어오는 OSC 메시지와 관련하여 라이브 링크 페이스 앱이 수신 중인 포트가 표시됩니다. OSC 원격 제어 디바이스가 이 IP 주소 및 포트로 명령을 전송하도록 해야 합니다.
-
라이브 링크 페이스에서 OSC 명령을 전송하여 다른 디바이스를 제어하도록 하려면 타깃(Target) 섹션에서 해당 디바이스의 IP 주소와 포트를 입력하세요.
라이브 링크 페이스 앱은 다음 OSC 명령을 지원합니다.
명령 | 설명 |
---|---|
/OSCSetSendTarget <IP:string> <port:int32> |
지정한 IP 주소 및 포트로 OSC 전송 타깃을 설정합니다. 앱은 /OSCSetSendTargetConfirm 명령으로 새로운 OSC 전송 타깃에 회신합니다. |
/AddLiveLinkAddress <IP:string> <port:int32> |
앱이 블렌드 셰이프 데이터를 브로드캐스트하도록 새 라이브 링크 타깃을 추가합니다. |
/ClearAllLiveLinkAddresses |
모든 라이브 링크 타깃을 제거합니다. |
/LiveLinkSubject <name:string> |
라이브 링크 서브젝트 이름을 설정합니다. |
/LiveLinkStreamStart |
모든 라이브 링크 타깃에 대한 데이터 스트리밍을 시작합니다. |
/LiveLinkStreamStop |
라이브 링크 타깃에 대한 데이터 스트리밍을 중지합니다. |
/BatteryQuery |
디바이스의 배터리 잔량을 요청합니다. 앱은 /Battery <level:float32> 로 OSC 전송 타깃에 회신합니다. |
/ThermalsQuery |
디바이스의 열 상태를 요청합니다. 앱은 /Thermals <state:int32> 로 OSC 전송 타깃에 회신합니다. |
/Slate <name:string> |
지정한 이름으로 슬레이트를 설정합니다. |
/Take <number:int32> |
지정한 값으로 테이크 번호를 설정합니다. |
/ARSessionStart |
비디오 및 AR 트래킹을 켭니다. 앱은 /ARSessionStartConfirm 으로 OSC 전송 타깃에 회신합니다. |
/ARSessionStop |
비디오 및 AR 트래킹을 끕니다. 앱은 /ARSessionStopConfirm 으로 OSC 전송 타깃에 회신합니다. |
/RecordStart <slate:string> <take:int32> |
지정한 슬레이트 및 테이크 번호로 녹화를 시작합니다. 앱은 /RecordStartConfirm <timecode:string> 으로 OSC 전송 타깃에 회신합니다. 이때 타임코드는 항상 00:00:00.000 입니다. |
/RecordStop |
녹화를 중지합니다. 앱은 /RecordStopConfirm <timecode:string> <blendshapesCSV:string> <referenceMOV:string> 으로 OSC 전송 타깃에 회신합니다. 아래의 /Transport 명령에 두 개의 문자열을 사용하여 디바이스의 데이터를 복사할 수 있습니다. |
/Transport <IP:port:string> <path:string> |
위의 /RecordStopConfirm 명령에 의해 반환된 경로를 사용하여 앱이 파일의 콘텐츠를 지정한 IP 주소 및 포트로 전송하도록 요청합니다. 앱은 해당 주소 및 포트에 대한 TCP 연결을 엽니다. 먼저 대규모 엔디언 포맷으로 파일의 총 크기가 포함된 int32 를 전송한 다음 파일의 콘텐츠를 전송합니다. |
/VideoDisplayOn |
비디오 디스플레이를 켭니다. |
/VideoDisplayOff |
비디오 디스플레이를 끕니다. 트래킹 및 녹화가 계속 진행될 수 있습니다. |
/AppActivated |
휴대 전화에서 앱이 활성화되면 앱이 이를 OSC 전송 타깃으로 전송합니다. 즉, 처음에 시작되었을 때, 포그라운드로 가져왔을 때 등입니다. |
/AppDeactivated |
휴대 전화에서 앱이 비활성화되면 앱이 이를 OSC 전송 타깃으로 전송합니다. 즉, 종료되었을 때, 백그라운드로 보내졌을 때 등입니다. |