Skip to main content

메타휴먼과 캐릭터 애니메이션 적용하기

Views 170약 11분생성형 AI 활용

캐릭터가 살아 움직이는 순간

게임을 처음 만들 때 가장 신기한 순간은 캐릭터가 화면 안에서 걷고 뛸 때입니다. 그런데 그 다음 단계에서 많은 사람이 멈춥니다. 캐릭터가 움직이긴 하지만 어딘가 게임 같지 않고, 말은 하지만 눈빛이 비어 있고, 공격은 하지만 몸이 장면과 따로 노는 것처럼 보입니다.

이 장에서 다룰 주제는 바로 그 간극입니다. 모델이 있는 상태에서 끝나는 것이 아니라, 캐릭터가 실제로 그 세계에 살고 있는 것처럼 보이게 만드는 과정입니다. 언리얼 엔진에서는 이 영역을 메타휴먼, 애니메이션 블루프린트, State Machine, Blend Space, Motion Matching, 페이셜 애니메이션 같은 시스템으로 다룹니다.

처음 들으면 복잡해 보입니다. 하지만 코드를 이미 아는 독자라면 이렇게 생각하면 됩니다. 캐릭터 애니메이션은 거대한 if 문 덩어리가 아닙니다. 현재 상태를 읽고, 가장 알맞은 동작을 고르고, 부드럽게 섞어 보여주는 런타임 시스템입니다. 그리고 AI는 이 과정을 외우게 해주는 선생님이 아니라, 반복적인 연결 작업과 구조 점검을 도와주는 페어 작업자입니다.

이번 장의 목표는 하나입니다. 고품질 메타휴먼 캐릭터를 프로젝트에 넣고, 기본 이동 애니메이션을 붙이고, 간단한 NPC 대화 상호작용까지 연결할 수 있는 최소 경로를 익히는 것입니다.

메타휴먼과 캐릭터 애니메이션 적용하기

UE 5.6 이후의 메타휴먼: 엔진 안으로 들어온 디지털 휴먼 제작

예전의 메타휴먼 워크플로우는 약간 바깥을 맴도는 느낌이 있었습니다. 웹 기반 MetaHuman Creator에서 캐릭터를 만들고, Quixel Bridge나 관련 다운로드 흐름을 통해 프로젝트로 가져오고, 언리얼 안에서는 가져온 결과물을 사용하는 방식이었습니다. 즉, 캐릭터를 만드는 공간과 게임을 만드는 공간이 분리되어 있었습니다.

UE 5.6 흐름에서 중요한 변화는 MetaHuman Creator가 언리얼 엔진 안으로 들어왔다는 점입니다. 에픽의 MetaHuman 5.6 릴리스 설명에서도 생성, 애니메이션, 스타일링 영역이 확장되었고 MetaHuman Creator가 언리얼 엔진과 함께 제공되는 방향으로 진화했다고 밝히고 있습니다.1 이것은 단순히 메뉴 위치가 바뀐 정도의 변화가 아닙니다. 캐릭터를 만들고, 스타일을 조정하고, 프리뷰하고, 프로젝트에 배치하는 사고방식이 엔진 중심으로 옮겨왔다는 뜻입니다.

Unity에서 넘어온 독자라면 이렇게 비유할 수 있습니다. 예전 방식이 외부 캐릭터 생성기에서 FBX와 텍스처를 준비한 뒤 Unity 프로젝트로 가져오는 느낌이었다면, UE 5.6 이후의 흐름은 에디터 안에서 캐릭터 프리팹과 리그, 머티리얼, 애니메이션 적용 가능성을 동시에 확인하는 느낌에 가깝습니다. 캐릭터가 더 이상 별도의 납품 파일이 아니라, 프로젝트 안에서 계속 수정하고 검증하는 게임 오브젝트가 되는 셈입니다.

메타휴먼 제작의 기본 흐름은 대략 다음과 같습니다.

  1. 프로젝트에서 메타휴먼 관련 플러그인과 필요한 콘텐츠 데이터를 활성화합니다.

  2. Content Browser에서 MetaHuman Character 계열 에셋을 생성합니다.

  3. 프리셋을 고르거나 얼굴, 체형, 피부, 헤어, 의상 스타일을 조정합니다.

  4. 캐릭터를 프리뷰하면서 게임 카메라 거리에서 잘 보이는지 확인합니다.

  5. 리그와 텍스처를 준비해 실제 레벨에 배치 가능한 블루프린트 형태로 사용합니다.

여기서 중요한 것은 처음부터 완벽한 주인공을 만들려고 하지 않는 것입니다. 메타휴먼은 현실적인 얼굴과 고품질 리그를 제공하기 때문에, 초보자는 외형 커스터마이징에 너무 많은 시간을 쓰기 쉽습니다. 이 책의 전략은 반대입니다. 먼저 템플릿에 가까운 캐릭터를 빠르게 만들고, 애니메이션과 상호작용까지 연결한 뒤, 마지막에 외형을 다듬습니다.

게임 개발에서 캐릭터는 조각상이 아니라 행위자입니다. 예쁘게 서 있는 캐릭터보다, 어색해도 걷고 보고 반응하는 캐릭터가 훨씬 빨리 게임을 완성하게 해줍니다.

첫 메타휴먼을 프로젝트에 배치하기

이제 메타휴먼을 프로젝트에 추가했다고 가정해봅시다. Content Browser를 보면 캐릭터 이름 아래에 여러 폴더와 에셋이 생깁니다. 처음에는 이 구조가 부담스럽습니다. 얼굴, 몸, 헤어, 머티리얼, 스켈레톤, 애니메이션 블루프린트가 따로 보이고, 어디를 건드려야 할지 감이 오지 않습니다.

메타휴먼을 이해할 때는 전체 구조를 세 덩어리로 나누면 좋습니다.

영역역할초보자가 먼저 볼 것
Blueprint캐릭터를 레벨에 배치하는 껍데기컴포넌트 목록, Mesh, Face, Body
Skeletal Mesh와 Skeleton뼈대와 메시 데이터어떤 스켈레톤을 쓰는지, 애니메이션 호환성
Animation Blueprint런타임 애니메이션 로직Idle, Walk, Run, Jump가 어디서 결정되는지

레벨에 메타휴먼을 배치하는 것은 간단합니다. 캐릭터 블루프린트를 Viewport로 끌어다 놓으면 됩니다. 그러나 플레이어 캐릭터로 쓰려면 한 단계 더 생각해야 합니다. 언리얼에서 조종 가능한 캐릭터는 보통 Character 클래스를 기반으로 하고, Capsule Collision, Character Movement Component, Skeletal Mesh, Controller 연결을 갖습니다. 메타휴먼 블루프린트가 이미 복잡한 외형 구조를 가지고 있더라도, 게임플레이 입장에서는 결국 입력을 받고 움직이는 Character여야 합니다.

가장 안전한 초보자 경로는 Third Person 템플릿 캐릭터를 기반으로 삼고, 그 외형을 메타휴먼으로 교체하는 방식입니다. 이미 입력, 카메라, 이동, 점프가 연결되어 있기 때문입니다. 이 방식은 Unity에서 이미 움직이는 Player 프리팹의 Mesh Renderer와 Animator만 바꿔 끼우는 느낌과 비슷합니다.

NPC로 쓸 때는 더 단순합니다. 메타휴먼 블루프린트를 레벨에 배치하고, 필요하다면 AIController를 연결한 뒤, 대기 애니메이션이나 간단한 몽타주만 재생해도 됩니다. 이때부터 메타휴먼은 배경 인물이 아니라 플레이어와 상호작용하는 액터가 됩니다.

실습에서는 두 가지 배치를 추천합니다. 첫째, 빈 기본 맵에 배치해 구조를 관찰합니다. 둘째, Game Animation Sample Project에 넣어 고급 애니메이션 예제를 확인합니다. 에픽 문서에 따르면 Game Animation Sample Project는 모션 캡처 애니메이션 세트와 Motion Matching 사용법을 학습할 수 있는 예제 프로젝트입니다.2 즉, 기본 맵은 해부학 실습실이고, Game Animation Sample Project는 실제 경기장입니다.

메타휴먼 블루프린트 해부하기

메타휴먼 블루프린트를 열면 Components 패널이 먼저 눈에 들어옵니다. 여기에는 보통 Body, Face, Hair 또는 Groom, 의상 관련 메시, 여러 보조 컴포넌트가 들어 있습니다. 초보자는 이 목록을 보며 겁을 먹기 쉽지만, 지금 단계에서 모든 것을 이해할 필요는 없습니다.

먼저 확인할 것은 세 가지입니다.

  • 어떤 컴포넌트가 몸 애니메이션을 담당하는가

  • 어떤 컴포넌트가 얼굴 애니메이션을 담당하는가

  • 어떤 Animation Blueprint가 각 컴포넌트에 연결되어 있는가

몸과 얼굴이 분리되어 있다는 점은 메타휴먼의 핵심입니다. 일반적인 단순 캐릭터는 하나의 Skeletal Mesh에 하나의 Animation Blueprint만 붙어 있는 경우가 많습니다. 반면 메타휴먼은 몸의 걷기, 달리기, 점프와 얼굴의 표정, 입 모양, 눈 움직임을 서로 다른 계층에서 처리할 수 있습니다.

이 구조는 복잡해 보이지만 장점이 큽니다. NPC가 걸어가면서 말할 수 있고, 대화 중에 손짓을 하면서 표정을 바꿀 수 있으며, 몸은 Idle 상태인데 얼굴만 놀라거나 웃는 연출도 가능합니다. 게임 속 인간형 캐릭터가 살아 있는 것처럼 보이는 이유는 대부분 이 분리와 조합에서 나옵니다.

코더 관점에서는 이렇게 이해하면 됩니다. 몸 애니메이션은 캐릭터의 물리적 상태를 반영합니다. 속도, 지면 접촉 여부, 점프 중인지, 웅크렸는지 같은 값이 중요합니다. 얼굴 애니메이션은 대화와 감정 상태를 반영합니다. 말하는 중인지, 어떤 감정인지, 플레이어를 바라보는지 같은 값이 중요합니다. 같은 캐릭터 안에 있지만 입력 데이터와 갱신 주기가 다른 두 개의 상태 시스템이 공존하는 셈입니다.

Animation Blueprint는 캐릭터용 런타임 프로그램이다

Animation Blueprint를 처음 열면 노드가 많고 그래프가 넓어서 당황스럽습니다. 하지만 본질은 단순합니다. Animation Blueprint는 매 프레임 캐릭터 상태를 읽고, 그 상태에 맞는 포즈를 출력하는 프로그램입니다.

일반적인 블루프린트가 게임플레이 이벤트를 처리한다면, Animation Blueprint는 포즈 계산을 처리합니다. 예를 들어 캐릭터 블루프린트가 입력을 받아 앞으로 이동시키고, Character Movement Component가 실제 속도를 계산합니다. Animation Blueprint는 그 속도를 읽어 Speed 변수를 갱신하고, Speed가 0에 가까우면 Idle, 일정 값 이상이면 Walk 또는 Run 포즈를 출력합니다.

이 구조를 코드로 상상하면 다음과 같습니다.

if IsFalling:
    Play Jump 또는 Fall 상태
else if Speed > RunThreshold:
    Blend toward Run
else if Speed > WalkThreshold:
    Blend toward Walk
else:
    Play Idle

물론 실제 Animation Blueprint는 이렇게 단순한 if 문 하나로 끝나지 않습니다. 방향, 가속도, 회전, 착지 시간, 무기 장착 상태, 상체 몽타주, 피격 반응 등이 겹칩니다. 하지만 출발점은 언제나 같습니다. 현재 캐릭터 상태를 변수로 만들고, 그 변수에 따라 어떤 애니메이션을 재생할지 결정합니다.

Animation Blueprint 안에서 자주 만나는 핵심 도구는 State Machine과 Blend Space입니다. State Machine은 캐릭터가 지금 어떤 상태인지 관리합니다. Idle, Locomotion, JumpStart, Falling, Land 같은 상태를 만들고, 상태 사이를 어떤 조건에서 이동할지 정합니다. Blend Space는 여러 애니메이션을 숫자 값에 따라 섞습니다. 예를 들어 Speed가 0이면 Idle, 200이면 Walk, 600이면 Run에 가까워지도록 자연스럽게 보간합니다.

여기서 중요한 감각은 애니메이션을 하나씩 재생하는 것이 아니라, 애니메이션 선택 규칙을 만든다는 점입니다. Unity의 Animator Controller를 써본 독자라면 State와 Transition, Blend Tree를 떠올리면 됩니다. 언리얼의 Animation Blueprint는 여기에 블루프린트 그래프와 더 깊은 런타임 계산 능력이 붙어 있다고 보면 됩니다.

State Machine으로 대기, 이동, 점프 만들기

가장 기본적인 캐릭터 애니메이션은 대기, 이동, 점프입니다. 이 세 가지만 자연스럽게 연결되어도 캐릭터는 게임 속 행위자로 보이기 시작합니다.

우선 Animation Blueprint의 Event Graph에서 필요한 변수를 갱신합니다. 대표적으로 Speed, IsFalling, Direction 같은 변수가 있습니다. Speed는 캐릭터 속도 벡터의 길이입니다. IsFalling은 Character Movement Component에서 가져올 수 있는 지면 이탈 여부입니다. Direction은 캐릭터가 바라보는 방향과 실제 이동 방향의 차이를 나타냅니다.

그 다음 AnimGraph에 State Machine을 만들고, 다음과 같은 상태를 둡니다.

  • Idle/Move: 지면에 붙어 있을 때의 대기와 이동

  • JumpStart: 점프를 시작하는 짧은 동작

  • Falling: 공중에 떠 있는 동안의 반복 동작

  • Land: 착지하는 짧은 동작

Idle과 Move를 별도 상태로 나누는 방법도 있지만, 초보 단계에서는 하나의 Locomotion 상태 안에 Blend Space를 넣는 편이 쉽습니다. Speed가 0이면 Idle, 값이 커질수록 Walk와 Run으로 섞이게 하면 됩니다.

전이 조건은 간단하게 시작합니다. Locomotion에서 IsFalling이 true가 되면 JumpStart 또는 Falling으로 이동합니다. Falling에서 IsFalling이 false가 되면 Land로 이동합니다. Land 애니메이션이 거의 끝나면 다시 Locomotion으로 돌아옵니다.

처음부터 완벽한 애니메이션 전이를 만들려고 하면 시간이 끝없이 들어갑니다. 따라서 첫 목표는 자연스러움이 아니라 정확성입니다. 서 있을 때 서 있고, 움직일 때 움직이고, 점프할 때 공중 상태가 되는지 확인합니다. 자연스러운 블렌딩은 그 다음입니다.

이 과정에서 AI에게 도움을 요청할 수 있습니다. 단, "애니메이션 블루프린트 만들어줘"라고 말하면 너무 넓습니다. 대신 상태와 변수를 명확히 주어야 합니다.

UE 5.6 Animation Blueprint에서 Character Movement Component를 기준으로 Speed와 IsFalling 변수를 갱신하려고 해. Locomotion, JumpStart, Falling, Land 상태를 가진 State Machine을 만들 때 필요한 변수, 전이 조건, 디버깅 순서를 Unity Animator 경험자 입장에서 설명해줘.

이런 프롬프트는 AI가 막연한 노드 이름 나열 대신 구조를 설명하게 만듭니다. UnrealClaude 같은 에디터 통합형 도구는 UE 5.7 문맥과 프로젝트 정보를 읽고 블루프린트나 Animation Blueprint 편집을 보조하는 기능을 내세우지만, 일부 기능은 아직 실험적일 수 있으므로 결과를 그대로 믿기보다 사람이 구조를 검증해야 합니다.3

Blend Space: 숫자로 애니메이션을 섞는 법

Blend Space는 애니메이션 초보자가 반드시 익혀야 하는 도구입니다. 캐릭터 이동에서 가장 흔한 문제는 속도 변화가 계단처럼 보이는 것입니다. Idle에서 갑자기 Run으로 튀면 캐릭터는 살아 있는 사람이 아니라 애니메이션 클립을 갈아 끼우는 마네킹처럼 보입니다.

Blend Space는 이 문제를 해결합니다. 하나의 축에 Speed를 두고, 0 지점에는 Idle, 중간에는 Walk, 높은 값에는 Run을 배치합니다. 그러면 런타임에 Speed 값이 변할 때 엔진이 포즈를 부드럽게 섞어줍니다.

2D Blend Space를 쓰면 방향까지 다룰 수 있습니다. X축은 Direction, Y축은 Speed로 놓고 전진, 후진, 좌우 이동 애니메이션을 배치할 수 있습니다. 다만 처음부터 2D로 시작하면 디버깅이 어려울 수 있습니다. 이 책의 실습에서는 1D Speed Blend Space로 먼저 감각을 잡고, 이후 전투 이동이나 스트레이프 이동이 필요할 때 2D로 확장하는 흐름을 추천합니다.

메타휴먼이라고 해서 이 원리가 달라지지는 않습니다. 얼굴과 몸이 고품질이고 리그가 복잡하더라도, 걷고 뛰는 로직은 여전히 Speed, Direction, IsFalling 같은 변수로 관리합니다. 고급 캐릭터일수록 더 마법 같은 시스템이 필요할 것 같지만, 실제 게임 애니메이션의 핵심은 단순한 상태값을 얼마나 잘 정리하느냐에 있습니다.

Motion Matching: 애니메이션을 고르는 방식의 변화

전통적인 State Machine 방식은 개발자가 상태를 직접 설계합니다. Idle 상태, Walk 상태, Run 상태, Jump 상태를 만들고, 어떤 조건에서 이동할지 지정합니다. 이 방식은 명확하고 디버깅하기 쉽습니다. 대신 동작이 많아질수록 전이가 폭발적으로 늘어납니다. 걷다가 멈추기, 뛰다가 방향 틀기, 왼쪽으로 돌며 멈추기, 뒤로 물러나다가 회전하기 같은 동작을 모두 직접 설계하면 그래프가 금세 복잡해집니다.

Motion Matching은 접근이 다릅니다. 개발자가 모든 상태 전이를 손으로 짜기보다, 많은 애니메이션 데이터베이스에서 현재 캐릭터의 상황과 앞으로의 이동 의도에 가장 잘 맞는 포즈를 검색해 재생합니다. 쉽게 말해 "지금 입력과 속도, 방향을 봤을 때 가장 자연스러운 다음 동작은 무엇인가?"를 엔진이 애니메이션 세트 안에서 찾는 방식입니다.

Game Animation Sample Project가 중요한 이유가 여기에 있습니다. 이 프로젝트는 모션 캡처 기반 애니메이션 세트와 Motion Matching 사용 예시를 통해 최신 캐릭터 이동 시스템이 어떤 감각으로 구성되는지 보여줍니다.2

State Machine과 Motion Matching의 차이는 다음처럼 정리할 수 있습니다.

구분State MachineMotion Matching
사고방식상태와 전이를 사람이 설계데이터베이스에서 적합한 포즈 검색
장점구조가 명확하고 디버깅이 쉬움동작이 많을수록 자연스러움이 좋음
단점상태가 늘면 그래프가 복잡해짐데이터 준비와 튜닝 개념이 필요함
입문 추천도반드시 먼저 익힐 것예제 프로젝트로 감각부터 익힐 것

입문 단계에서 Motion Matching을 바로 완전히 이해할 필요는 없습니다. 중요한 것은 방향성입니다. 앞으로의 캐릭터 애니메이션은 사람이 모든 전이를 직접 손으로 만드는 방식에서, 좋은 모션 데이터를 준비하고 엔진이 적절히 고르게 하는 방식으로 점점 이동하고 있습니다.

하지만 그렇다고 State Machine을 건너뛰면 안 됩니다. Motion Matching을 쓰더라도 캐릭터가 전투 중인지, 대화 중인지, 피격 중인지, 사망 상태인지 같은 큰 상태 관리는 여전히 필요합니다. 즉, State Machine은 캐릭터의 큰 문맥을 관리하고, Motion Matching은 그 안에서 자연스러운 이동 포즈를 고르는 역할을 맡는다고 이해하면 좋습니다.

메타휴먼을 Game Animation Sample Project에 연결하기

메타휴먼을 Game Animation Sample Project에 넣는 실습은 매우 좋은 학습 루트입니다. 이미 준비된 고품질 이동 시스템에 내 캐릭터를 태워보는 경험이기 때문입니다. 이때 핵심은 "내 메타휴먼이 어떤 스켈레톤과 애니메이션 시스템을 따라야 하는가"입니다.

실무에서는 캐릭터 교체 작업을 할 때 다음 순서로 점검합니다.

  1. 예제 캐릭터의 Skeletal Mesh와 Animation Blueprint 구조를 확인합니다.

  2. 메타휴먼의 Body 컴포넌트가 어떤 Skeleton을 사용하는지 확인합니다.

  3. 필요한 경우 IK Retargeter나 리타기팅 설정으로 애니메이션 호환성을 맞춥니다.

  4. 캐릭터 블루프린트에서 Mesh를 교체하거나 메타휴먼 외형을 붙입니다.

  5. Play In Editor에서 이동, 회전, 정지, 점프, 카메라 충돌을 확인합니다.

리타기팅은 초보자에게 가장 난해한 단어 중 하나입니다. 뜻은 단순합니다. 한 캐릭터용으로 만들어진 애니메이션을 다른 캐릭터의 뼈대에 맞게 옮기는 작업입니다. 사람마다 팔 길이와 어깨 위치가 조금씩 다르듯, 3D 캐릭터도 뼈대 구조와 비율이 다릅니다. 리타기팅은 "이 캐릭터의 팔 움직임을 저 캐릭터의 팔 움직임으로 어떻게 해석할 것인가"를 맞추는 과정입니다.

AI에게 이 작업을 물어볼 때도 구체적으로 요청해야 합니다.

UE 5.6에서 Game Animation Sample Project의 캐릭터 애니메이션을 내 MetaHuman Body에 적용하려고 해. 먼저 확인해야 할 Skeleton, IK Retargeter, Animation Blueprint, Character Blueprint 항목을 체크리스트로 만들어줘. 존재하지 않는 메뉴 이름은 만들지 말고, 버전 차이가 있으면 확인 방법을 함께 알려줘.

마지막 문장이 중요합니다. AI는 종종 예전 버전 메뉴나 존재하지 않는 옵션을 자신 있게 말합니다. "존재하지 않는 메뉴 이름은 만들지 말라", "버전 차이가 있으면 확인 방법을 알려달라"는 조건을 붙이면 환각을 줄일 수 있습니다.

얼굴이 살아야 NPC가 살아난다

몸이 자연스럽게 움직여도 얼굴이 굳어 있으면 캐릭터는 금방 어색해집니다. 특히 메타휴먼은 얼굴 품질이 높기 때문에, 표정이 없을 때의 부자연스러움도 더 크게 느껴집니다. 고품질 캐릭터일수록 작은 표정 변화가 중요합니다.

MetaHuman Animator는 배우의 얼굴 연기와 뉘앙스를 메타휴먼 페이셜 애니메이션으로 빠르게 변환하는 도구입니다. MetaHuman 공식 소개에서는 배우의 연기에서 미묘한 뉘앙스까지 포착해 설득력 있는 얼굴 애니메이션을 만들 수 있다고 설명합니다.4 또한 메타휴먼이 Early Access를 벗어난 뒤에는 대부분의 웹캠이나 스마트폰 같은 모노 카메라 기반 캡처와 실시간 흐름도 강조되었습니다.5

이 장에서는 복잡한 영화 제작 파이프라인까지 들어가지 않겠습니다. 게임 입문자에게 먼저 필요한 것은 NPC가 말할 때 최소한 다음 세 가지를 할 수 있게 만드는 것입니다.

  • 플레이어를 바라본다.

  • 대사 분위기에 맞는 표정을 짓는다.

  • 말하는 동안 입과 얼굴이 어느 정도 반응한다.

시선 처리는 가장 비용 대비 효과가 큽니다. NPC가 대사를 하지 않아도 플레이어를 바라보기만 하면 상호작용성이 생깁니다. Look At 노드나 Control Rig, 혹은 블루프린트에서 머리와 눈 방향을 제어하는 방식으로 구현할 수 있습니다. 처음에는 완벽한 눈동자 추적보다 머리 방향만 부드럽게 돌려도 충분합니다.

표정은 감정 상태와 연결하면 관리하기 쉽습니다. NPC 상태에 Neutral, Happy, Angry, Worried 같은 값을 두고, 대화 결과나 퀘스트 상태에 따라 표정 몽타주나 페이셜 애니메이션을 재생합니다. 여기서 중요한 것은 AI가 감정을 직접 움직이게 하지 않는 것입니다. AI는 "친절하게 답변", "불안한 반응", "경고" 같은 의도를 반환하고, 언리얼은 그 의도를 검증 가능한 Enum이나 태그로 바꿔 애니메이션을 트리거해야 합니다.

입 모양과 음성 동기화는 프로젝트 규모에 따라 선택지가 나뉩니다. 간단한 실습에서는 TTS 음성을 재생하고 기본 표정 애니메이션을 섞는 정도로 충분합니다. 더 나아가려면 ARKit 호환 커브나 오디오 기반 페이셜 애니메이션 시스템을 사용할 수 있습니다. 예를 들어 NVIDIA ACE 문서에서는 MetaHuman의 Face_AnimBP에 얼굴 애니메이션 노드를 추가하고 ARKit 포즈 매핑 앞단에서 커브를 적용하는 방식의 흐름을 설명합니다.6 여기서 핵심은 특정 서비스 이름이 아니라 구조입니다. 음성 또는 얼굴 캡처 데이터가 얼굴 커브로 변환되고, Face Animation Blueprint가 그 커브를 읽어 표정을 만든다는 점입니다.

AI 대화 NPC: 대사는 AI에게, 상태는 언리얼에게

이제 이 장의 마지막 실습 목표로 갑시다. 메타휴먼 NPC에 ChatGPT API나 대화형 AI 서비스를 연결해 간단한 대화 상호작용을 만드는 것입니다. 많은 튜토리얼이 "ChatGPT와 메타휴먼 연결 성공!" 같은 결과 화면을 보여주지만, 입문자가 진짜 배워야 할 것은 연결 자체보다 책임 분리입니다.

대화형 AI NPC를 만들 때 가장 흔한 실수는 AI에게 모든 것을 맡기는 것입니다. "플레이어가 말을 걸면 알아서 답하고, 표정도 바꾸고, 퀘스트도 주고, 애니메이션도 해줘"라는 식입니다. 이렇게 만들면 처음에는 마법처럼 보이지만 곧 디버깅할 수 없는 시스템이 됩니다. 어느 순간 NPC가 엉뚱한 퀘스트를 주거나, 존재하지 않는 아이템을 언급하거나, 대사와 애니메이션이 맞지 않아도 어디서 고쳐야 할지 알 수 없습니다.

따라서 구조를 나눠야 합니다.

책임담당예시
대사 생성ChatGPT, Claude, Convai 등플레이어 질문에 대한 자연어 답변
게임 상태 판단Unreal Blueprint/C++퀘스트 가능 여부, NPC 상태, 거리 조건
UI 표시UMG Widget대화창, 선택지, 입력창
음성 재생TTS 또는 오디오 시스템생성된 답변을 음성으로 출력
애니메이션 실행Animation Blueprint/Montage인사, 고개 끄덕임, 설명 제스처

대화형 AI 서비스 중에는 Convai처럼 MetaHuman과의 통합, 립싱크, 액션 시스템을 제공하는 도구도 있습니다. Convai의 커스텀 액션 흐름에서는 플레이어의 자연어 명령이 등록된 액션 라벨에 매핑되고, 언리얼 블루프린트가 해당 Animation Montage를 실행하는 방식이 소개됩니다.7 이 구조는 우리가 직접 ChatGPT API를 연결할 때도 참고할 만합니다. 자연어를 곧바로 애니메이션 실행으로 보내지 말고, 중간에 "검증 가능한 액션 이름"으로 바꾸는 것입니다.

예를 들어 플레이어가 "길 좀 알려줘"라고 입력했다고 합시다. AI는 다음처럼 응답할 수 있습니다.

대사: 저 문을 지나 왼쪽 계단으로 올라가세요. 하지만 위쪽 복도에는 경비 드론이 있어요.
감정: Worried
액션: PointLeft
퀘스트힌트: DroneWarning

언리얼은 이 결과를 그대로 믿지 않습니다. 먼저 Action이 등록된 값인지 확인합니다. PointLeft 몽타주가 존재하면 재생하고, 없으면 기본 Talk 제스처로 대체합니다. Emotion이 허용된 Enum인지 확인하고, Worried 표정이 있으면 적용합니다. QuestHint도 현재 플레이어 진행도에서 보여줘도 되는 정보인지 검사합니다.

이렇게 만들면 AI는 창의적인 문장을 만들 수 있고, 언리얼은 게임 규칙을 지킬 수 있습니다. 둘이 각자 잘하는 일을 맡는 구조입니다.

간단한 대화형 메타휴먼 NPC 설계

실습용 NPC를 하나 정해봅시다. 이름은 리아입니다. 리아는 폐허 입구를 지키는 안내자입니다. 플레이어가 가까이 가서 E 키를 누르면 대화창이 열리고, 질문을 입력하면 리아가 답합니다. 리아는 대답할 때 플레이어를 바라보고, 짧은 제스처를 재생하며, 감정에 따라 표정이 바뀝니다.

구성은 다음과 같이 나눕니다.

  1. BP_NPC_Ria: 메타휴먼 외형과 상호작용 충돌을 가진 캐릭터 블루프린트

  2. WBP_Dialogue: 플레이어 입력과 NPC 답변을 보여주는 UMG 위젯

  3. BP_AIChatComponent: API 요청과 응답 파싱을 담당하는 Actor Component

  4. ABP_RiaBody: Idle, Talk, Gesture 몽타주를 처리하는 몸 애니메이션 블루프린트

  5. ABP_RiaFace: 기본 표정과 말하기 상태를 처리하는 얼굴 애니메이션 블루프린트

플레이 흐름은 단순합니다. 플레이어가 리아의 상호작용 범위에 들어오면 Interact 가능 상태가 됩니다. E 키를 누르면 WBP_Dialogue가 열립니다. 플레이어가 문장을 입력하면 BP_AIChatComponent가 API로 요청을 보냅니다. 응답이 오면 텍스트를 UI에 표시하고, 감정과 액션 필드를 읽어 애니메이션을 실행합니다.

여기서 꼭 비동기 처리를 기억해야 합니다. API 요청은 즉시 돌아오지 않습니다. 네트워크가 느리거나 실패할 수 있습니다. 게임 스레드를 멈추면 안 됩니다. 따라서 요청 중에는 NPC 상태를 Thinking으로 바꾸고, 작은 대기 애니메이션이나 "음…" 같은 임시 대사를 보여주는 편이 좋습니다. 응답에 실패하면 "지금은 통신이 불안정해. 다시 말해줄래?" 같은 로컬 fallback 대사를 사용합니다.

이 구조를 AI에게 설명시키고 싶다면 다음 프롬프트를 사용해보세요.

Unreal Engine 5.6에서 MetaHuman NPC 리아를 만들고 있어. ChatGPT API는 대사 생성만 담당하고, Unreal은 UI, NPC 상태, Animation Montage, 감정 Enum을 관리하게 만들고 싶어. Blueprint 기준으로 컴포넌트 구조, 이벤트 흐름, 실패 처리, 디버깅 포인트를 단계별로 설계해줘.

좋은 답변이라면 API 키 보관, 비동기 콜백, 응답 파싱, 허용된 액션 검증, 네트워크 실패 fallback을 언급해야 합니다. 만약 AI가 "Tick에서 매 프레임 API 호출" 같은 답을 한다면 즉시 폐기해야 합니다. AI가 답을 했다고 해서 좋은 아키텍처가 되는 것은 아닙니다. 좋은 질문과 검증 가능한 구조가 함께 있어야 합니다.

Animation Montage로 대화 제스처 붙이기

NPC 대화에서 모든 제스처를 State Machine에 넣으면 금방 복잡해집니다. 인사하기, 손짓하기, 고개 끄덕이기, 놀라기 같은 짧은 동작은 Animation Montage로 처리하는 편이 좋습니다. Montage는 특정 애니메이션을 원하는 타이밍에 재생하고, Blend In과 Blend Out으로 부드럽게 섞을 수 있는 애셋입니다.

예를 들어 리아가 플레이어에게 길을 알려줄 때 PointLeft 몽타주를 재생한다고 합시다. 몸 전체를 움직일 수도 있지만, 대화 중에는 상체만 움직이는 것이 자연스러울 때가 많습니다. 이때 Slot을 나누고 Layered Blend per Bone 같은 방식을 사용하면 하체 Idle은 유지하면서 상체 제스처만 재생할 수 있습니다.

처음에는 다음 세 가지 몽타주만 만들어도 충분합니다.

  • Greet: 처음 말을 걸 때 짧게 인사

  • Talk: 일반 대화 중 손과 어깨가 살짝 움직이는 반복 제스처

  • Point: 특정 방향이나 목표를 가리키는 설명 제스처

AI 응답의 Action 값은 이 몽타주 이름과 직접 연결하지 않는 것이 좋습니다. 중간 매핑 테이블을 둡니다. 예를 들어 AI가 Explain이라고 반환하면 현재 상황에 따라 Talk 또는 Point를 선택합니다. 이렇게 하면 나중에 애니메이션 이름이 바뀌어도 AI 프롬프트를 전부 수정하지 않아도 됩니다.

자주 만나는 문제와 해결 감각

메타휴먼과 애니메이션을 다루다 보면 거의 반드시 몇 가지 문제를 만납니다.

첫 번째는 캐릭터가 T 포즈나 A 포즈로 굳는 문제입니다. 대부분 Animation Blueprint가 제대로 지정되지 않았거나, 스켈레톤이 맞지 않거나, 리타기팅이 실패한 경우입니다. 이때는 애니메이션 에셋 자체를 열어 재생되는지 확인하고, 그 다음 Skeletal Mesh의 Anim Class를 확인합니다.

두 번째는 몸은 움직이는데 얼굴이 굳는 문제입니다. 메타휴먼은 몸과 얼굴 애니메이션 경로가 분리되어 있기 때문에, Body 쪽만 확인하면 원인을 놓치기 쉽습니다. Face 컴포넌트의 Animation Blueprint, 관련 커브, 표정 애셋이 제대로 연결되어 있는지 확인해야 합니다.

세 번째는 대화 AI 응답은 오는데 애니메이션이 실행되지 않는 문제입니다. 이 경우 대부분 문자열과 액션 매핑이 어긋나 있습니다. AI가 Point_Left라고 보냈는데 언리얼 쪽에서는 PointLeft만 허용하고 있을 수 있습니다. 따라서 응답은 반드시 정규화해야 합니다. 알 수 없는 액션이 오면 로그를 남기고 기본 액션으로 대체합니다.

네 번째는 캐릭터가 너무 무거워 프레임이 떨어지는 문제입니다. 메타휴먼은 품질이 높은 만큼 비용도 큽니다. 화면에 많은 메타휴먼을 동시에 배치할 때는 LOD, Groom 품질, 그림자, 텍스처 해상도, 애니메이션 Tick 옵션을 확인해야 합니다. NPC가 멀리 있을 때도 얼굴 애니메이션을 정밀하게 계산할 필요는 없습니다.

다섯 번째는 AI가 너무 그럴듯한 거짓말을 하는 문제입니다. 예를 들어 아직 열리지 않은 문을 열 수 있다고 말하거나, 존재하지 않는 NPC를 언급할 수 있습니다. 해결책은 프롬프트만 강화하는 것이 아닙니다. 게임 상태를 구조화해서 넘기고, 응답을 언리얼 쪽에서 검증해야 합니다.

캐릭터 애니메이션을 바라보는 새로운 관점

이 장에서 우리는 메타휴먼을 만들고, 프로젝트에 배치하고, Animation Blueprint로 기본 상태를 관리하고, Motion Matching의 개념을 살펴보고, 얼굴 애니메이션과 대화형 AI NPC 구조까지 연결했습니다. 다룬 용어는 많지만 핵심은 단순합니다.

캐릭터는 메시가 아닙니다. 캐릭터는 상태를 가진 시스템입니다. 몸 상태, 얼굴 상태, 대화 상태, 게임플레이 상태가 서로 영향을 주고받을 때 비로소 살아 있는 것처럼 보입니다.

AI 시대의 장점은 이 복잡한 시스템을 혼자 외우지 않아도 된다는 것입니다. AI에게 State Machine 설계를 설명시키고, 리타기팅 체크리스트를 만들게 하고, 대화 응답 포맷을 검토하게 할 수 있습니다. 하지만 최종 책임은 언리얼 프로젝트 구조에 있습니다. 어떤 상태를 허용할지, 어떤 애니메이션을 실행할지, 어떤 대사를 게임 세계의 사실로 인정할지는 개발자가 정해야 합니다.

다음 장에서는 지금까지 배운 입력, 캐릭터, 머티리얼, 라이팅, 메타휴먼, 애니메이션을 한데 묶어 3D 액션 어드벤처 미니게임을 완성합니다. 이제 우리는 장면을 예쁘게 만드는 법도 알고, 캐릭터가 움직이게 하는 법도 압니다. 남은 일은 이 모든 조각을 하나의 플레이 경험으로 엮는 것입니다.

참고

1MetaHuman 5.6 Release - Epic Developer Community Forums

2Adding a MetaHuman to the Game Animation Sample Project

3UnrealClaude GitHub Repository

4MetaHuman Digital Humans

5MetaHuman leaves Early Access with a feature-packed new release

6NVIDIA ACE Unreal Plugin Character Animation

7How to Add Custom Actions and Animations to AI MetaHuman Avatars in Unreal Engine with Convai

책 목록

클로드와 함께 배우는 언리얼 엔진 5: Unity 개발자를 위한 AI 페어 프로그래밍 입문

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기