라이브 링크(Live Link)의 목적은 DCC 툴 또는 모션 캡처 서버 같은 외부 소스에서 언리얼 엔진으로 애니메이션 데이터를 스트리밍하고 처리하는 공용 인터페이스를 제공하는 것입니다. 라이브 링크는 언리얼 플러그인을 통해 확장할 수 있도록 디자인되었기 때문에 서드 파티가 새로운 기능을 개발할 때 언리얼 엔진에 변경사항을 적용하거나 유지해야 하는 필요성을 최소화했습니다.
라이브 링크는 MotionBuilder 같은 DCC 툴을 통해 애니메이션을 외부에서 편집하면서 작업의 프리뷰를 언리얼 엔진에서 실시간으로 확인할 수 있게 해줍니다. 모션 캡처 시스템 또한 실시간 프리뷰가 가능하도록 라이브 링크를 사용하여 데이터를 엔진으로 스트리밍합니다.
라이브 링크 클라이언트
라이브 링크의 허브는 라이브 링크 플러그인이 프로젝트에서 활성화될 때 생성되는 라이브 링크 클라이언트 입니다. 이 라이브 링크 클라이언트는 두 가지 주요 역할을 수행합니다.
- 소스 관리: 여기에서 소스는 데이터 소스를 가리키며, 대부분 동일한 머신에서든 네트워크를 통해서든 라이브 링크에 데이터를 제공하는 다른 애플리케이션과의 연결을 나타냅니다.
-
서브젝트 관리: 여기에서 서브젝트는 클라이언트 내의 개별 데이터 스트림을 나타냅니다. 예를 들어 하나의 애니메이팅 캐릭터는 하나의 서브젝트가 됩니다.
서브젝트는 다음과 같은 데이터로 구성됩니다.
- 이름
- 변경되지 않는 스태틱 데이터(애니메이션 역할의 스켈레톤 등)
- 하나 이상의 데이터 '프레임'(애니메이션 역할의 본 트랜스폼 등)
또한 클라이언트는 언리얼 엔진에서 사용할 다음과 같은 데이터 프레임 빌드도 담당합니다. 이는 마지막으로 수신된 데이터의 직접 사본이거나 수신 데이터를 버퍼링하고 사용자 정의 가능한 딜레이로 재생하여 생성된 보간 프레임일 수 있습니다.
역할
라이브 링크는 들어오는 데이터의 사용 방식을 정의하는 역할 개념을 활용합니다. 이를 통해 언리얼 엔진 내에서 데이터를 타깃 액터에 보다 쉽게 매핑할 수 있습니다. 지원되는 역할에는 카메라, 라이트, 캐릭터, 트랜스폼 및 기본 역할(일반 데이터의 경우)이 있습니다.
소스
소스는 데이터가 라이브 링크 클라이언트에 연결되는 방식을 가리킵니다. 소스는 플러그인 내에서 정의될 수 있으므로 서드 파티가 엔진 코드를 변경하지 않고도 자체 소스를 빌드할 수 있습니다. 소스는 애니메이션 데이터를 수신하는 방식을 관리합니다. 예를 들어 네트워크 프로토콜을 통해 수신하거나 머신 자체에 연결된 디바이스의 API에서 읽어서 수신할 수 있습니다. 각 소스는 클라이언트에 대한 레퍼런스로 처리되며 여기에 데이터를 전달할 수 있습니다. 에픽게임즈는 라이브 링크 플러그인 내에서 메시지 버스 소스(Message Bus Source) 라는 자체 소스를 정의하고 있으며, 이는 언리얼 메시지 버스 연결에서 데이터를 읽어옵니다. 에픽게임즈는 이를 사용하여 MotionBuilder용 라이브 링크 플러그인을 빌드했습니다.
UDP 메시징
라이브 링크 메시지 버스 소스를 사용하는 경우, 해당 소스는 내부적으로(기본적으로) UDP 메시징을 사용하며 발견한 첫 번째 네트워크 어댑터를 사용합니다. 네트워크 어댑터가 머신에 두 개 이상 있으면 특정 어댑터에서 데이터를 수신하려고 할 때 문제가 발생할 수 있습니다. 특정 네트워크 어댑터에서 UDP 데이터를 수신하려면 편집(Edit) > 프로젝트 세팅(Project Settings) > UDP 메시징(UDP Messaging) 을 유니캐스트 엔드포인트(Unicast Endpoint) 로 수정해야 합니다.

예를 들어 어댑터가 다음과 같이 두 개 있는 경우를 가정할 수 있습니다.
- 어댑터 A: XX.X.XXX.123
- 어댑터 B: XXX.XXX.X.53
네트워크 어댑터 B의 라이브 링크 메시지 버스 소스에서 데이터를 수신하려면 '유니캐스트 엔드포인트'를 XXX.XXX.X.53:0으로 설정해야 합니다.
':0'은 모든 포트가 수신해야 한다는 것을 나타냅니다.
UDP 메시징은 인게임에서 기본적으로 활성화되지 않습니다. UDP 메시징을 활성화하려면 패키징된 게임에서 -messaging
을 추가해야 합니다(출시 타깃은 지원되지 않음).
라이브 링크 활성화하기
라이브 링크 플러그인은 '플러그인(Plugins)' 창(편집 > 플러그인)을 열고 애니메이션(Animation) 카테고리에 있는 '라이브 링크'의 활성화됨(Enabled) 을 선택하여 활성화할 수 있습니다.

라이브 링크 연결 창
활성화하면 창 메뉴에서 라이브 링크 클라이언트에 액세스할 수 있습니다.

라이브 링크 옵션 선택 시 라이브 링크 연결(Live Link Connection) 창이 열리며, 여기에서 소스 타입 및 서브젝트를 추가할 수 있습니다.

위에서는 플러그인을 실행 중인 Maya 인스턴스에 대해 열린 연결이 있는 라이브 링크 클라이언트를 볼 수 있습니다(왼쪽 상단 섹션). 이 인스턴스는 3개의 서브젝트를 에디터로 전송합니다. 즉, 2개의 카메라 서브젝트('EditorActiveCamera' 및 'camera1')와 'TestCube'라는 트랜스폼 데이터를 포함하는 서브젝트가 바로 그것입니다(왼쪽 하단 섹션).
소스 추가하기
+ 소스(+ Source) 버튼을 통해 라이브 링크와 연결할 소스 타입을 선택하여 소스를 추가할 수 있습니다.

외부 애플리케이션은 라이브 링크를 통해 언리얼 엔진으로 데이터를 푸시하도록 구성해야 연결할 소스로 표시됩니다. 자세한 내용은 라이브 링크 플러그인 개발 페이지를 참고하세요.
메시지 버스 소스를 통해 데이터를 수신하는 것 외에도 라이브 링크는 Magic Leap 같은 디바이스를 위해 핸드 트래킹 소스를 지원하며, 여러 서브젝트를 하나의 '가상 서브젝트'로 결합하는 가상 서브젝트 생성 기능도 제공합니다. 예를 들어 캐릭터 A의 하반신과 캐릭터 B의 상반신을 결합하여 새 서브젝트를 만들 수 있습니다. 또는 한 소스에서 카메라 트래킹 데이터를 사용하고 다른 트래킹된 오브젝트의 이동만 결합하여 수동으로 제어할 수도 있습니다.
'소스(Sources)' 패널에서는 연결된 모든 소스를 관리할 수 있습니다. 소스 옆에 있는 휴지통(Trashcan) 아이콘을 클릭하여 소스를 삭제할 수도 있습니다.
프리셋(Presets) 버튼을 클릭하여 이전에 저장된 프리셋을 저장하거나 로드할 수도 있습니다.

프리셋은 콘텐츠 브라우저(Content Browser) 내에 에셋으로 저장되며, 이전 환경설정을 빠르게 로드할 수 있도록 지원합니다.
서브젝트 패널
'라이브 링크 연결' 창의 서브젝트(Subjects) 패널은 연결된 소스와 스트리밍되는 서브젝트를 나타냅니다.

이 패널은 각 서브젝트의 이름, 할당된 역할, 상태 표시기를 보여주며 상태 표시기가 녹색이면 데이터를 수신 중인 것입니다. 소스에 연결되어 있지만 일정 기간 동안 데이터를 수신하지 않으면 노란색으로 표시됩니다. 기간은 '프로젝트 세팅'에서 환경설정할 수 있으며, 디폴트는 0.5ms입니다.
연결 세팅
활성 연결을 구성한 후에는 다음과 같은 세팅을 사용하여 연결 파라미터를 정의할 수 있습니다.
프로퍼티 | 설명 |
---|---|
평가 모드(Evaluation Mode) | 프레임 스냅샷을 생성하는 방법을 결정합니다.
|
유효한 엔진 시간(Valid Engine Time) | 프레임이 ValidTime보다 오래되었으면 이를 버퍼 목록(초)에서 제거합니다. |
엔진 시간 오프셋(Engine Time Offset) | 시간으로 평가 시 현재 시간으로부터 얼마나 이전까지 버퍼를 읽어야 하는지(초)를 나타냅니다. |
타임코드 프레임 레이트(Timecode Frame Rate) | 타임코드로 평가 시 타임코드의 예상 프레임 레이트입니다. |
유효한 타임코드 프레임(Valid Timecode Frame) | 프레임 타임코드가 ValidTimecodeFrame보다 오래되었으면 이를 버퍼 목록(TimecodeFrameRate)에서 제거합니다. |
타임코드 프레임 오프셋(Timecode Frame Offset) | 타임코드로 평가 시 현재 타임코드로부터 얼마나 이전까지 버퍼를 읽어야 하는지(TimecodeFramerRate) 나타냅니다. |
버퍼링할 최대 프레임 수(Max Number of Frame to Buffered) | 메모리에 유지할 최대 프레임 수를 정의합니다. |
소스 디버그 정보(Source Debug Infos) | 소스에서 전달되는 디버깅 정보 컬렉션입니다. |
보간 세팅
서브젝트를 추가한 후 프리 프로세서(Pre Processor), 보간(Interpolation) 메서드 또는 트랜슬레이터(Translator) 를 선택된 서브젝트에 할당할 수 있습니다.

프로퍼티 | 설명 |
---|---|
프리 프로세서 | 들어오는 데이터를 지정된 프레임에 대해 서브젝트로 푸시하기 전에 처리하는 데 유용합니다. 한 가지 가능한 사용 사례는 수신 트랜스폼의 축을 다른 축으로 전환하는 축 전환 입니다. |
보간 | 프레임 블렌딩에 사용되는 보간 메서드의 타입을 정의합니다. |
트랜슬레이터 | 데이터의 역할을 변경할 수 있습니다. 예를 들어 데이터를 스켈레톤에서 트랜스폼으로 변경해야 할 수 있습니다. 캐릭터의 힙 위치만 바꾸고 싶은 경우 등에 유용하게 사용할 수 있습니다. 이는 데이터를 올바른 역할로 변경합니다. |
에디터 통합
현재 애니메이션 에디터에는 라이브 링크와의 통합 기능이 내장되어 있습니다. 이 통합 기능은 프리뷰 씬 세팅(Preview Scene Settings) 탭의 프리뷰 컨트롤러(Preview Controller) 프로퍼티에서 액세스할 수 있습니다.

라이브 링크 플러그인이 활성화되어 있는 경우 '프리뷰 컨트롤러' 옵션을 라이브 링크 프리뷰 컨트롤러(Live Link Preview Controller) 로 변경할 수 있습니다. 선택하면 다음과 같은 옵션을 설정할 수 있습니다.
- 서브젝트 이름(Subject Name): 라이브 링크에서 프리뷰 메시를 적용할 서브젝트의 이름입니다.
- 카메라 동기화 활성화(Enable Camera Sync): 언리얼 에디터 카메라와 외부 에디터의 동기화를 활성화합니다. 내부적으로 이는 라이브 링크에서 EditorActiveCamera 라는 서브젝트를 찾습니다. 에픽게임즈에서 내부적으로 개발한 MotionBuilder용 플러그인은 모두 이를 지원합니다.
- 리타깃 에셋(Retarget Asset): 프리뷰 메시에 적용되는 라이브 링크 데이터에 적용할 리타깃 에셋을 지정합니다.
라이브 링크 컴포넌트
라이브 링크 컨트롤러(Live Link Controller) 와 라이브 링크 스켈레탈 애니메이션(Live Link Skeletal Animation) 컴포넌트는 액터에 추가되어 연결된 외부 소스에서 라이브 링크의 파라미터를 제어할 수 있습니다.
이러한 컴포넌트를 사용하려면 컴포넌트 추가(Add Component) 버튼을 클릭하고 라이브 링크 컨트롤러 또는 라이브 링크 스켈레탈 애니메이션 컴포넌트를 사용합니다.

라이브 링크 컨트롤러의 경우 디테일 패널에서 서브젝트 표현(Subject Representation) 프로퍼티를 사용하여 연결된 서브젝트 중에서 선택할 수 있습니다. 서브젝트에 따라 역할이 자동으로 할당됩니다(필요한 경우 변경 가능). 제어할 컴포넌트(Component to Control) 는 라이브 링크를 통해 실제로 제어할 컴포넌트입니다. 아래 예시에서는 라이브 링크 컨트롤러 컴포넌트가 있는 시네 카메라 액터를 통해 MotionBuilder에서 카메라를 움직이고 초점 길이를 변경합니다. 또한 스켈레탈 메시에서 라이브 링크 스켈레탈 애니메이션 컴포넌트를 사용하여 애니메이션 데이터를 스트리밍합니다. 이를 위해 애니메이션 블루프린트에 Live Link Pose 노드를 추가하고 서브젝트를 선택했습니다.
라이브 링크 컨트롤러는 애니메이션을 제어할 수 있지만 최고의 결과를 얻기 위해서는 애니메이션에 라이브 링크 스켈레탈 애니메이션 컴포넌트를 사용하는 것이 권장됩니다.
블루프린트의 라이브 링크
블루프린트 함수 호출을 사용하여 라이브 링크 데이터에 액세스할 수도 있습니다. 아래에서 Evaluate Live Link Frame 함수는 지정된 서브젝트에서 지정된 역할(아래의 경우 서브젝트 'camera1'과 카메라 역할이 액세스됨)을 사용하여 라이브 링크 프레임을 구하려고 시도합니다.

그런 다음 데이터 결과에서 프레임 데이터를 구할 수 있으며, 이 경우 서브젝트에서 트랜스폼 정보를 구합니다. 이 정보는 블루프린트 내에서 시네 카메라의 상대적 트랜스폼을 업데이트하는 데 사용됩니다.
라이브 링크 리타기팅
라이브 링크 리타기팅은 현재 에셋을 리타기팅하여 수행됩니다(베이스 클래스 ULiveLinkRetargetAsset). Live Link Pose 노드에는 사용할 리타깃 에셋을 지정하는 핀이 있습니다. 아주 간단한 리맵 에셋(ULiveLinkRemapAsset)을 통해 라이브 링크에서 USkeleton으로 트랜스폼 매핑을 지원합니다. 다음은 리타깃 에셋을 구현하는 예시입니다.
라이브 링크 리타깃 에셋에는 오버라이드해야 하는 함수가 하나 있습니다.
BuildPoseForSubject(const FLiveLinkSubjectFrame& InFrame, TSharedPtr<FLiveLinkRetargetContext> InOutContext, FCompactPose& OutPose, FBlendedCurve& OutCurve)
이 함수는 다음을 취합니다.
LiveLinkSubjectFrame
: 라이브 링크에서 보는 트랜스폼/스켈레톤으로, 필요에 따라 버퍼링 및 보간됩니다.FLiveLinkRetargetContext
: 인스턴스 데이터 리타기팅을 허용합니다. ULiveLinkRetargetAsset은 각 사용에 대해 인스턴스화되지 않기 때문입니다(CreateRetargetContext을 오버라이드하여 커스터마이징 가능).FCompactPose
: 리타기팅의 출력 포즈로, 애니메이션을 평가하는 동안 사용하는 포맷입니다.FBlendedCurve
: 출력 커브 데이터입니다. ULiveLinkRetargetAsset에는 헬퍼 함수 BuildCurveData가 있으며, 제공된 라이브 링크 데이터에서 이것을 채웁니다.
리타깃 에셋은 블루프린트에서도 구현할 수 있으므로 사용자가 에디터에서 로직을 지정할 수 있습니다(가능한 경우). 이 함수 기능은 리맵 에셋에 의해 사용되며, 에디터에서 본 이름을 변환할 수 있도록 지원합니다.
라이브 링크 리맵 에셋
에디터에서 새 리타깃 에셋을 생성하는 데 필요한 항목의 예시는 /Engine/Plugins/Animation/LiveLink/Source/LiveLink의 다음 클래스에서 찾을 수 있습니다.
ULiveLinkRetargetAsset
ULiveLinkRemapAsset
에디터에서 리맵 에셋은 LiveLinkRemapAsset 클래스 타입을 사용하여 생성할 수 있습니다.

리맵 에셋 내에서 함수 Get Remapped Bone Name 을 오버라이드할 수 있습니다.

이를 통해 에디터에서 본 이름을 변환할 수 있습니다.

위 예시에서는 Maya의 스켈레탈 메시에서 본 이름 정보를 취합니다. 그런 다음 데이터가 수정되고 언리얼 엔진의 본 이름 명명 규칙에 매핑됩니다.
예를 들어 Maya에서 명명 규칙은 본 이름을 CharacterName:BoneName 으로 명명하지만 언리얼 엔진에서 스켈레톤 에셋은 BoneName 부분만 사용합니다. Maya에서 언리얼 엔진 스켈레톤으로 데이터를 스트리밍하기 위해 리맵 에셋을 사용하고 콜론 부분에서 문자열을 분할하여 콜론 뒷부분의 스트링 정보만 취하도록 Get Remapped Bone Name 함수를 오버라이드합니다. 이렇게 하면 CharacterName:BoneName 대신 BoneName 만 취합니다.
그런 다음 프리뷰 씬 세팅 창에서 리타깃 에셋을 사용하도록 지정합니다.

애니메이션 블루프린트
라이브 링크의 데이터를 애니메이션 블루프린트 내에서 직접 적용할 수 있습니다.

이렇게 하려면 애니메이션 블루프린트의 애님 그래프에서 Live Link Pose 노드를 생성하면 됩니다. 이 노드에는 다음과 같은 두 가지 프로퍼티가 있습니다.
- 서브젝트 이름: 데이터를 스트리밍해 올 라이브 링크의 서브젝트 이름입니다.
- 리타깃 에셋: 라이브 링크의 데이터를 애니메이션 블루프린트에서 사용하는 스켈레톤에 적용하기 위해 사용할 리타깃 에셋입니다.
Live Link Pose 노드의 출력은 애님 블루프린트의 다른 포즈 노드와 같이 일반 포즈이며, 따라서 다른 포즈처럼 모디파이어 또는 블렌드 노드에 피딩하는 방식 등으로 조작할 수 있습니다.
에디터에서 Live Link Pose 노드 없이도 애니메이션을 제어할 수 있지만, 런타임에서 애니메이션을 제어하려면 Live Link Pose 노드를 애니메이션 블루프린트에서 구성해야 합니다.
플러그인 개발
라이브 링크와 통합하려면 다음과 같은 두 가지 접근법을 사용할 수 있습니다.
- 새 소스를 라이브 링크에 노출하는 언리얼 엔진 플러그인을 빌드합니다.
이는 이미 자체 스트리밍 프로토콜이 있는 경우 권장되는 접근법입니다.
- 메시지 버스 엔드포인트를 서드 파티 소프트웨어에 통합하여 내장 메시지 버스 소스에 대한 데이터 전송자로 사용합니다.
이는 에픽게임즈가 MotionBuilder 플러그인에 사용한 접근법입니다.
자세한 내용은 라이브 링크 플러그인 개발 페이지를 참고하세요.
MotionBuilder 라이브 링크 플러그인
MotionBuilder 플러그인은 Maya 플러그인과 동일한 기능을 제공하며, 에디터에서 비슷한 방식으로 연결된 것으로 표시됩니다. 또한 스트리밍 관리를 위한 커스텀 UI도 제공합니다.

현재 씬에서 오브젝트를 선택하여 스트리밍되는 목록에 추가할 수 있습니다(위 참고). 그런 다음 서브젝트 이름 열에서 이름을 설정하고 스트림 타입(카메라, 스켈레톤 등)을 설정할 수 있습니다. 여기에서 서브젝트에 대한 스트리밍을 활성화 및 비활성화할 수도 있습니다.
MotionBuilder 라이브 링크 플러그인 바이너리는 언리얼 엔진 4 GitHub Repository에서 다운로드할 수 있습니다.
MotionBuilder 라이브 링크 플러그인 구성을 위한 단계별 가이드는 라이브 링크를 사용하여 언리얼 엔진을 MotionBuilder에 연결하기 하우투 가이드를 참고하세요.