플러그인 사용 방법
이 가이드는 MetaHuman 캐릭터에 Runtime MetaHuman Lip Sync를 설정하는 과정을 안내합니다.
참고: Runtime MetaHuman Lip Sync는 MetaHuman과 커스텀 캐릭터 모두와 함께 작동합니다. 이 플러그인은 다음과 같은 다양한 캐릭터 유형을 지원합니다:
- 인기 있는 상용 캐릭터 (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe 등)
- FACS 기반 blendshapes를 가진 캐릭터
- ARKit blendshape 표준을 사용하는 모델
- Preston Blair 음소 세트를 가진 캐릭터
- 3ds Max 음소 시스템
- 얼굴 표정을 위한 커스텀 morph targets를 가진 모든 캐릭터
위의 모든 표준에 대한 viseme 매핑 참조를 포함한 커스텀 캐릭터 설정에 대한 자세한 지침은 커스텀 캐릭터 설정 가이드를 참조하세요.
필수 조건
시작하기 전에 다음을 확인하세요:
- MetaHuman 플러그인이 프로젝트에서 활성화되어 있습니다 (참고: UE 5.6부터는 MetaHuman 기능이 엔진에 직접 통합되어 이 단계가 더 이상 필요하지 않음)
- 최소 하나 이상의 MetaHuman 캐릭터가 다운로드되어 프로젝트에서 사용 가능합니다
- Runtime MetaHuman Lip Sync 플러그인이 설치되어 있습니다
표준 모델 확장 플러그인
표준 (더 빠른) 모델을 사용할 계획이라면 확장 플러그인을 설치해야 합니다:
- Google Drive에서 표준 Lip Sync 확장 플러그인을 다운로드하세요
- 다운로드한 아카이브에서 폴더를 추출하여 프로젝트의
Plugins
폴더에 넣으세요 (해당 폴더가 없으면 생성하세요) - 프로젝트가 C++ 프로젝트로 설정되어 있는지 확인하세요 (C++ 코드가 없더라도)
- 프로젝트를 재빌드하세요
- 이 확장은 표준 모델을 사용하려는 경우에만 필요합니다. 리얼리스틱 모델만 필요하다면 이 단계를 건너뛸 수 있 습니다.
- 플러그인을 수동으로 빌드하는 방법에 대한 자세한 정보는 플러그인 빌딩 튜토리얼을 참조하세요
추가 플러그인
- 오디오 캡처(예: 마이크 입력)를 사용할 계획이라면 Runtime Audio Importer 플러그인을 설치하세요.
- 내 플러그인과 함께 텍스트 음성 변환 기능을 사용할 계획이라면(자체 맞춤형 TTS나 다른 오디오 입력이 있을 수 있음), Runtime Audio Importer 플러그인 외에 다음도 설치하세요:
- 로컬 TTS의 경우 Runtime Text To Speech 플러그인.
- 외부 TTS 제공업체(ElevenLabs, OpenAI)의 경우 Runtime AI Chatbot Integrator 플러그인.
설정 과정
1단계: 얼굴 애니메이션 Blueprint 찾기 및 수정
- UE 5.5 및 이전 버전 (또는 UE 5.6+의 레거시 MetaHumans)
- UE 5.6+ MetaHuman Creator 캐릭터
MetaHuman 캐릭터의 얼굴 애니메이션에 사용될 Animation Blueprint를 수정해야 합니다. 기본 MetaHuman 얼굴 Animation Blueprint는 다음 위치에 있습니다:
Content/MetaHumans/Common/Face/Face_AnimBP
립 싱크 기능을 구현하는 데는 여러 옵션이 있습니다:
- 기본 애셋 편집 (가장 간단한 옵션)
- 복제본 생성
- 사용자 정의 Animation Blueprint 사용
기본 Face_AnimBP
를 직접 열어 수정합니다. 모든 변경 사항은 이 Animation Blueprint를 사용하는 모든 MetaHuman 캐릭터에 영향을 미칩니다.
참고: 이 접근 방식은 편리하지만 기본 Animation Blueprint를 사용하는 모든 캐릭터에 영향을 미칩니다.
Face_AnimBP
를 복제하고 설명적인 이름을 지정합니다- 캐릭터의 Blueprint 클래스를 찾습니다 (예: "Bryan" 캐릭터의 경우
Content/MetaHumans/Bryan/BP_Bryan
에 위치) - 캐릭터 Blueprint를 열고 Face 컴포넌트를 찾습니다
- Anim Class 속성을 새로 복제한 Animation Blueprint로 변경합니다
참고: 이 접근 방식을 사용하면 다른 캐릭터는 변경하지 않고 특정 캐릭터에 대한 립 싱크를 사용자 정의할 수 있습니다.
필요한 얼굴 뼈대에 접근할 수 있는 모든 Animation Blueprint에서 립 싱크 블렌딩을 구현할 수 있습니다:
- 사용자 정의 Animation Blueprint를 생성하거나 기존 것을 사용합니다
- Animation Blueprint가 기본 MetaHuman의
Face_Archetype_Skeleton
(모든 MetaHuman 캐릭터에 사용되는 표준 스켈레톤)과 동일한 얼굴 뼈대를 가진 스켈레톤과 작동하는지 확인합니다
참고: 이 접근 방식은 사용자 정의 애니메이션 시스템과의 통합을 위한 최대의 유연성을 제공합니다.
UE 5.6부터 기존의 Face_AnimBP
애셋 없이 캐릭터를 생성하는 새로운 MetaHuman Creator 시스템이 도입되었습니다. 이러한 캐릭터의 경우 플러그인은 다음 위치에 있는 얼굴 Animation Blueprint를 제공합니다:
Content/LipSyncData/LipSync_Face_AnimBP
이 Animation Blueprint는 플러그인의 콘텐츠 폴더에 위치하며 플러그인 업데이트마다 덮어쓰여집니다. 사용자 정의 내용을 잃지 않으려면 반드시 다음을 권장합니다:
- 이 애셋을 프로젝트의 Content 폴더로 복사합니다 (예:
YourProject/Content/MetaHumans/LipSync_Face_AnimBP
) - 복사한 버전을 캐릭터 설정에서 사용합니다
- 복사한 버전에 모든 수정을 가합니다
이렇게 하면 플러그인 업데이트를 거쳐도 립싱크 설정이 유지됩니다.
플러그인의 Face Animation Blueprint 사용하기:
- MetaHuman Creator 캐릭터의 Blueprint 클래스를 찾습니다
- 캐릭터 Blueprint를 열고 Face 컴포넌트를 찾습니다
- Anim Class 속성을 플러그인의
LipSync_Face_AnimBP
로 변경합니다 - Runtime MetaHuman Lip Sync 기능을 구성하기 위해 2-4단계를 계속 진행합니다
대체 옵션:
- 레거시 지침 사용: 레거시 MetaHuman으로 작업 중이거나 기존 워크플로우를 선호하는 경우 위의 UE 5.5 지침을 따라갈 수 있습니다
- 사용자 정의 Animation Blueprint 생성: MetaHuman Creator 스켈레톤 구조와 작동하는 자신만의 Animation Blueprint를 생성합니다
참고: UE 5.6+를 사용 중이지만 레거시 MetaHuman(MetaHuman Creator를 통해 생성되지 않은 것)으로 작업하는 경우 "UE 5.5 및 이전" 탭의 지침을 대신 사용하세요.
중요: Runtime MetaHuman Lip Sync 블렌딩은 기본 MetaHuman의 Face_Archetype_Skeleton
에 있는 얼굴 뼈를 포함하는 포즈에 접근할 수 있는 모든 Animation Blueprint 애셋에서 구현될 수 있습니다. 위 옵션에 제한되지 않습니다 - 이들은 단지 일반적인 구현 접근법입니다.
2단계: 이벤트 그래프 설정
Face Animation Blueprint를 열고 Event Graph
로 전환합니다. 오디오 데이터를 처리하고 립싱크 애니메이션을 생성할 생성기를 만들어야 합니다.
- 표준 (더 빠른) 모델
- 리얼리스틱 (더 높은 품질) 모델
- 아직 존재하지 않는다면
Event Blueprint Begin Play
노드를 추가합니다 Create Runtime Viseme Generator
노드를 추가하고 Begin Play 이벤트에 연결합니다- 출력을 변수로 저장하여 (예: "VisemeGenerator") 그래프의 다른 부분에서 사용합니다
- 아직 존재하지 않는다면
Event Blueprint Begin Play
노드를 추가합니다 Create Realistic MetaHuman Lip Sync Generator
노드를 추가하고 Begin Play 이벤트에 연결합니다- 출력을 변수로 저장하여 (예: "RealisticLipSyncGenerator") 그래프의 다른 부분에서 사용합니다
- (선택사항) Configuration 매개변수를 사용하여 생성기 설정을 구성합니다
- (선택사항) Realistic MetaHuman Lip Sync Generator 객체에서 Processing Chunk Size를 설정합니다

참고: 사실적 모델은 MetaHuman 캐릭터에 특화되어 최적화되었으며, 커스텀 캐릭터 타입과는 호환되지 않습니다.
구성 옵션
Create Realistic MetaHuman Lip Sync Generator
노드는 생성기의 동작을 사용자 정의할 수 있는 선택적 Configuration 매개변수를 허용합니다:
모델 타입
Model Type 설정은 사용할 사실적 모델의 버전을 결정합니다:
모델 타입 | 성능 | 시각적 품질 | 노이즈 처리 | 권장 사용 사례 |
---|---|---|---|---|
Highly Optimized (기본값) | 최고 성능, 최저 CPU 사용량 | 양호한 품질 | 배경 노이즈나 비음성 소음에서 눈에 띄는 입 움직임이 나타날 수 있음 | 깨끗한 오디오 환경, 성능이 중요한 시나리오 |
Optimized | 우수한 성능, 중간 CPU 사용량 | 높은 품질 | 노이즈가 있는 오디오에서 더 나은 안정성 | 균형 잡힌 성능과 품질, 혼합된 오디오 조건 |
Original Unoptimized | 최신 CPU에서 실시간 사용에 적합 | 최고 품질 | 배경 노이즈와 비음성 소음에서 가장 안정적 | 고품질 프로덕션, 노이즈가 많은 오디오 환경, 최대 정확도가 필요할 때 |
성능 설정
Intra Op Threads: 내부 모델 처리 작업에 사용되는 스레드 수를 제어합니다.
- 0 (기본값/자동): 자동 감지 사용 (일반적으로 사용 가능한 CPU 코어의 1/4, 최대 4개)
- 1-16: 수동으로 스레드 수 지정. 값이 높을수록 멀티코어 시스템에서 성능이 향상될 수 있지만 더 많은 CPU를 사용함
Inter Op Threads: 서로 다른 모델 작업의 병렬 실행에 사용되는 스레드 수를 제어합니다.
- 0 (기본값/자동): 자동 감지 사용 (일반적으로 사용 가능한 CPU 코어의 1/8, 최대 2개)
- 1-8: 수동으로 스레드 수 지정. 일반적으로 실시간 처리를 위해 낮게 유지됨
구성 사용하기
생성기를 구성하려면:
Create Realistic MetaHuman Lip Sync Generator
노드에서 Configuration 매개변수를 확장합니다- Model Type을 선호하는 옵션으로 설정합니다:
- 최고 성능을 위해 Highly Optimized 사용 (대부분의 사용자에게 권장)
- 균형 잡힌 성능과 품질을 위해 Optimized 사용
- 최대 품질이 필수적인 경우에만 Original Unoptimized 사용
- 필요한 경우 Intra Op Threads와 Inter Op Threads를 조정합니다 (대부분의 경우 자동 감지를 위해 0으로 유지) 성능 권장 사항:
- 깨끗한 오디오가 있는 대부분의 프로젝트에서는 최상의 성능을 위해 고도로 최적화됨을 사용하세요
- 배경 소음, 음악 또는 비음성 소리가 포함된 오디오를 작업하는 경우 더 나은 안정성을 위해 최적화됨 또는 원본 비최적화 모델을 고려하세요
- 고도로 최적화됨 모델은 모델 생성 시 적용된 최적화 기술로 인해 비음성 오디오 처리 시 미세한 입 움직임을 보일 수 있습니다
- 원본 비최적화 모델은 더 많은 CPU 리소스를 필요로 하지만 현대 하드웨어에서 실시간 애플리케이션에 여전히 적합하며 까다로운 오디오 조건에서 가장 정확한 결과를 제공합니다
- 성능 문제가 발생하거나 특정 최적화 요구 사항이 있는 경우에만 스레드 수를 조정하세요
- 더 높은 스레드 수가 항상 더 나은 성능을 의미하지는 않습니다 - 최적의 값은 특정 하드웨어 및 프로젝트 요구 사항에 따라 다릅니다
처리 청크 크기 구성: 처리 청크 크기는 각 추론 단계에서 처리되는 샘플 수를 결정합니다. 기본값은 160 샘플이며, 이는 16kHz(내부 처리 샘플 레이트)에서 10ms의 오디오에 해당합니다. 이 값을 조정하여 업데이트 빈도와 CPU 사용량 사이의 균형을 맞출 수 있습니다:
- 더 작은 값은 더 빈번한 업데이트를 제공하지만 CPU 사용량을 증가시킵니다
- 더 큰 값은 CPU 부하를 줄이지만 립싱크 응답성이 감소할 수 있습니다
처리 청크 크기를 설정하려면:
Realistic MetaHuman Lip Sync Generator
객체에 접근하세요Processing Chunk Size
속성을 찾으세요- 원하는 값을 설정하세요
160의 배수인 값을 사용하는 것이 권장됩니다. 이는 모델의 내부 처리 구조와 일치합니다. 권장 값에는 다음이 포함됩니다:
160
(기본값, 최소 권장)320
480
640
- 등
160
샘플의 기본 처리 청크 크기는 16kHz에서 10ms의 오디오에 해당합니다. 160의 배수를 사용하면 이 기본 단위와의 정렬을 유지할 수 있으며, 이는 처리 효율성을 최적화하고 다양한 청크 크기에서 일관된 동작을 유지하는 데 도움이 될 수 있습니다.
Realistic Model의 안정적이고 일관된 작동을 위해서는 비활성 기간 후 새로운 오디오 데이터를 입력하려고 할 때마다 Realistic MetaHuman Lip Sync Generator를 재생성해야 합니다. 이는 ONNX 런타임 동작으로 인해 침묵 기간 후 제너레이터를 재사용할 때 립싱크가 작동을 멈출 수 있기 때문입니다.
예시 시나리오: TTS 립싱크를 수행한 후 중단했다가 나중에 새로운 오디오로 다시 립싱크를 수행하려는 경우, 기존 제너레이터를 재사용하는 대신 새로운 Realistic MetaHuman Lip Sync Generator 를 생성하세요.
3단계: 오디오 입력 처리 설정
오디오 입력을 처리할 방법을 설정해야 합니다. 오디오 소스에 따라 여러 방법이 있습니다.
- Microphone (Real-time)
- Microphone (Playback)
- Text-to-Speech (Local)
- Text-to-Speech (External APIs)
- 오디오 파일/버퍼에서
- Streaming Audio Buffer
이 접근법은 마이크에 말하는 동안 실시간으로 립싱크를 수행합니다:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Audio Importer를 사용하여 Capturable Sound Wave 생성
- 오디오 캡처를 시작하기 전에,
OnPopulateAudioData
델리게이트에 바인딩 - 바인딩된 함수에서 Runtime Viseme Generator의
ProcessAudioData
호출 - 마이크에서 오디오 캡처 시작
Realistic Model은 Standard Model과 동일한 오디오 처리 워크플로우를 사용하지만, VisemeGenerator
대신 RealisticLipSyncGenerator
변수를 사용합니다.
Standard Model에 표시된 각 예제에서 간단히 다음을 교체하세요:
VisemeGenerator
를RealisticLipSyncGenerator
변수로- 함수 이름과 매개변수는 두 모델 간에 동일하게 유지됩니다
이 접근법은 마이크에서 오디오를 캡처한 후, 립싱크와 함께 재생합니다:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Audio Importer를 사용하여 Capturable Sound Wave 생성
- 마이크에서 오디오 캡처 시작
- 캡처 가능한 사운드 웨이브를 재생하기 전에, 해당
OnGeneratePCMData
델리게이트에 바인딩 - 바인딩된 함수에서 Runtime Viseme Generator의
ProcessAudioData
호출
Realistic Model은 Standard Model과 동일한 오디오 처리 워크플로우를 사용하지만, VisemeGenerator
대신 RealisticLipSyncGenerator
변수를 사용합니다.
Standard Model에 표시된 각 예제에서 다음을 간단히 교체하세요:
VisemeGenerator
를 여러분의RealisticLipSyncGenerator
변수로- 함수 이름과 매개변수는 두 모델 간에 동일하게 유지됩니다
참고: 더 반응적인 Lip Sync를 위해 더 작은 청크로 오디오 데이터를 처리하려면 SetNumSamplesPerChunk
함수의 계산을 조정하세요. 예를 들어, 샘플 레이트를 100으로 나누는 대신(10ms마다 스트리밍) 150으로 나누면(~6.67ms마다 스트리밍) 더 빈번한 Lip Sync 업데이트를 제공합니다.
- Regular
- Streaming
이 접근 방식은 텍스트에서 음성을 합성하고 Lip Sync를 수행합니다:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Text To Speech를 사용하여 텍스트에서 음성 생성
- Runtime Audio Importer를 사용하여 합성된 오디오 임포트
- 임포트된 사운드 웨이브를 재생하기 전에, 해당
OnGeneratePCMData
델리게이트에 바인딩 - 바인딩된 함수에서 Runtime Viseme Generator의
ProcessAudioData
호출
Runtime Text To Speech 플러그인에서 제공하는 로컬 TTS는 현재 ONNX 런타임 충돌로 인해 Realistic model과 호환되지 않습니다. Realistic model을 사용한 텍스트 음성 변환의 경우, 외부 TTS 서비스(예: Runtime AI Chatbot Integrator를 통한 OpenAI 또는 ElevenLabs)를 사용하거나 대신 Standard model을 사용하는 것을 고려하세요.
참고: 더 반응적인 Lip Sync를 위해 더 작은 청크로 오디오 데이터를 처리하려면 SetNumSamplesPerChunk
함수의 계산을 조정하세요. 예를 들어, 샘플 레이트를 100으로 나누는 대신(10ms마다 스트리밍) 150으로 나누면(~6.67ms마다 스트리밍) 더 빈번한 Lip Sync 업데이트를 제공합니다.
이 접근 방식은 실시간 립 싱크와 함께 스트리밍 텍스트-음성 합성을 사용합니다:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Text To Speech를 사용하여 텍스트에서 스트리밍 음성을 생성합니다
- Runtime Audio Importer를 사용하여 합성된 오디오를 임포트합니다
- 스트리밍 사운드 웨이브를 재생하기 전에, 해당
OnGeneratePCMData
델리게이트에 바인딩합니다 - 바인딩된 함수에서 Runtime Viseme Generator의
ProcessAudioData
를 호출합니다
Runtime Text To Speech 플러그인에서 제공하는 로컬 TTS는 현재 ONNX 런타임 충돌로 인해 Realistic 모델과 호환되지 않습니다. Realistic 모델을 사용한 텍스트-음성 변환을 위해서는 외부 TTS 서비스(예: Runtime AI Chatbot Integrator를 통한 OpenAI 또는 ElevenLabs)를 사용하거나 Standard 모델을 대신 사용하는 것을 고려해보세요.
참고: 더 반응적인 립 싱크를 위해 더 작은 청크로 오디오 데이터를 처리하려면 SetNumSamplesPerChunk
함수의 계산을 조정하세요. 예를 들어, 샘플 레이트를 100(10ms마다 스트리밍) 대신 150(약 6.67ms마다 스트리밍)으로 나누면 더 빈번한 립 싱크 업데이트를 제공합니다.
- Regular
- Streaming
이 접근 방식은 Runtime AI Chatbot Integrator 플러그인을 사용하여 AI 서비스(OpenAI 또는 ElevenLabs)에서 합성 음성을 생성하고 립 싱크를 수행합니다:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime AI Chatbot Integrator를 사용하여 외부 API(OpenAI, ElevenLabs 등)를 통해 텍스트에서 음성을 생성합니다
- Runtime Audio Importer를 사용하여 합성된 오디오 데이터를 임포트합니다
- 임포트된 사운드 웨이브를 재생하기 전에, 해당
OnGeneratePCMData
델리게이트에 바인딩합니다 - 바인딩된 함수에서 Runtime Viseme Generator의
ProcessAudioData
를 호출합니다

Realistic Model은 Standard Model과 동일한 오디오 처리 워크플로우를 사용하지만, VisemeGenerator
대신 RealisticLipSyncGenerator
변수를 사용합니다.
Standard Model에 표시된 각 예제에서 간단히 다음을 교체하세요:
VisemeGenerator
를 여러분의RealisticLipSyncGenerator
변수로- 함수 이름과 매개변수는 두 모델 간에 동일하게 유지됩니다
참고: 더 반응적인 Lip Sync를 위해 더 작은 청크로 오디오 데이터를 처리하려면 SetNumSamplesPerChunk
함수의 계산을 조정하세요. 예를 들어, 샘플 레이트를 100으로 나누는 대신(10ms마다 스트리밍) 150으로 나누면(~6.67ms마다) 더 빈번한 Lip Sync 업데이트를 제공합니다.
이 접근 방식은 Runtime AI Chatbot Integrator 플러그인을 사용하여 AI 서비스(OpenAI 또는 ElevenLabs)에서 합성된 스트리밍 음성을 생성하고 Lip Sync를 수행합니다:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime AI Chatbot Integrator를 사용하여 스트리밍 TTS API(예: ElevenLabs Streaming API)에 연결
- Runtime Audio Importer를 사용하여 합성된 오디오 데이터 임포트
- 스트리밍 사운드 웨이브를 재생하기 전에, 해당
OnGeneratePCMData
델리게이트에 바인딩 - 바인딩된 함수에서 Runtime Viseme Generator의
ProcessAudioData
호출
Realistic Model은 Standard Model과 동일한 오디오 처리 워크플로우를 사용하지만, VisemeGenerator
대신 RealisticLipSyncGenerator
변수를 사용합니다.
Standard Model에 표시된 각 예제에서 간단히 다음을 교체하세요:
VisemeGenerator
를 여러분의RealisticLipSyncGenerator
변수로- 함수 이름과 매개변수는 두 모델 간에 동일하게 유지됩니다
참고: 더 반응적인 립 싱크를 위해 더 작은 청크로 오디오 데이터를 처리하려면 SetNumSamplesPerChunk
함수의 계산을 조정하세요. 예를 들어, 샘플 레이트를 100(10ms마다 스트리밍) 대신 150(~6.67ms마다 스트리밍)으로 나누면 더 빈번한 립 싱크 업데이트를 제공합니다.
이 접근 방식은 미리 녹음된 오디오 파일이나 오디오 버퍼를 사용하여 립 싱크를 수행합니다:
- 표준 (더 빠른) 모델
- 리얼리스틱 (더 높은 품질) 모델
- Runtime Audio Importer를 사용하여 디스크나 메모리에서 오디오 파일을 가져오기
- 가져온 사운드 웨이브를 재생하기 전에, 해당
OnGeneratePCMData
델리게이트에 바인딩 - 바인딩된 함수에서 Runtime Viseme Generator의
ProcessAudioData
호출 - 가져온 사운드 웨이브를 재생하고 립 싱크 애니메이션 관찰
리얼리스틱 모델은 표준 모델과 동일한 오디오 처리 워크플로우를 사용하지만, VisemeGenerator
변수 대신 RealisticLipSyncGenerator
를 사용합니다.
표준 모델에 표시된 각 예제에서 간단히 다음을 교체하세요:
VisemeGenerator
를RealisticLipSyncGenerator
변수로- 함수 이름과 매개변수는 두 모델 간에 동일하게 유지됩니다
참고: 더 반응적인 립 싱크를 위해 더 작은 청크로 오디오 데이터를 처리하려면 SetNumSamplesPerChunk
함수의 계산을 조정하세요. 예를 들어, 샘플 레이트를 100(10ms마다 스트리밍) 대신 150(~6.67ms마다 스트리밍)으로 나누면 더 빈번한 립 싱크 업데이트를 제공합니다.
스트리밍 오디오 데이터를 버퍼에서 처리하려면 다음이 필요합니다:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- 스트리밍 소스에서 사용 가능한 float PCM 형식의 오디오 데이터 (부동 소수점 샘플 배열)
- 샘플 레이트와 채널 수
- 오디오 청크가 사용 가능해질 때마다 Runtime Viseme Generator의
ProcessAudioData
를 이러한 매개변수와 함께 호출
다음은 스트리밍 오디오 데이터에서 립 싱크를 처리하는 예시입니다:
참고: 스트리밍 오디오 소스를 사용할 때는 왜곡된 재생을 방지하기 위해 오디오 재생 타이밍을 적절히 관리해야 합니다. 적절한 스트리밍 오디오 관리에 대한 자세한 내용은 Streaming Sound Wave 문서를 참조하세요.
Realistic Model은 Standard Model과 동일한 오디오 처리 워크플로우를 사용하지만, VisemeGenerator
대신 RealisticLipSyncGenerator
변수를 사용합니다.
Standard Model에 표시된 각 예제에서 다음을 간단히 교체하세요:
VisemeGenerator
를RealisticLipSyncGenerator
변수로- 함수 이름과 매개변수는 두 모델 간에 동일하게 유지됩니다
참고: 스트리밍 오디오 소스를 사용할 때는 왜곡된 재생을 방지하기 위해 오디오 재생 타이밍을 적절히 관리해야 합니다. 적절한 스트리밍 오디오 관리에 대한 자세한 내용은 Streaming Sound Wave 문서를 참조하세요.
참고: 더 반응적인 립 싱크를 위해 더 작은 청크로 오디오 데이터를 처리하려면 SetNumSamplesPerChunk
함수의 계산을 조정하세요. 예를 들어, 샘플 레이트를 100으로 나누는 대신(10ms마다 스트리밍) 150으로 나누면(~6.67ms마다 스트리밍) 더 빈번한 립 싱크 업데이트를 제공합니다.
Step 4: Anim Graph 설정
Event Graph 설정 후, Anim Graph
로 전환하여 생성기를 캐릭터의 애니메이션에 연결하세요:
Lip Sync
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- MetaHuman 얼굴이 포함된 포즈를 찾습니다 (일반적으로
Use cached pose 'Body Pose'
에서 가져옵니다) Blend Runtime MetaHuman Lip Sync
노드를 추가합니다- 포즈를
Blend Runtime MetaHuman Lip Sync
노드의Source Pose
에 연결합니다 RuntimeVisemeGenerator
변수를Viseme Generator
핀에 연결합니다Blend Runtime MetaHuman Lip Sync
노드의 출력을Output Pose
의Result
핀에 연결합니다
오디오에서 립 싱크가 감지되면 캐릭터가 동적으로 애니메이션됩니다:
- MetaHuman 얼굴이 포함된 포즈를 찾습니다 (일반적으로
Use cached pose 'Body Pose'
에서 가져옵니다) Blend Realistic MetaHuman Lip Sync
노드를 추가합니다- 포즈를
Blend Realistic MetaHuman Lip Sync
노드의Source Pose
에 연결합니다 RealisticLipSyncGenerator
변수를Lip Sync Generator
핀에 연결합니다Blend Realistic MetaHuman Lip Sync
노드의 출력을Output Pose
의Result
핀에 연결합니다
Realistic Model은 더 자연스러운 입 움직임으로 향상된 시각적 품질을 제공합니다:
참고: Realistic Model은 MetaHuman 캐릭터 전용으로 설계되었으며 커스텀 캐릭터 유형과는 호환되지 않습니다.
웃음 애니메이션
오디오에서 감지된 웃음에 동적으로 반응하는 웃음 애니메이션을 추가할 수도 있습니다:
Blend Runtime MetaHuman Laughter
노드를 추가합니다RuntimeVisemeGenerator
변수를Viseme Generator
핀에 연결합니다- 이미 립 싱크를 사용 중인 경우:
Blend Runtime MetaHuman Lip Sync
노드의 출력을Blend Runtime MetaHuman Laughter
노드의Source Pose
에 연결합니다Blend Runtime MetaHuman Laughter
노드의 출력을Output Pose
의Result
핀에 연결합니다
- 립 싱크 없이 웃음만 사용하는 경우:
- 소스 포즈를 직접
Blend Runtime MetaHuman Laughter
노드의Source Pose
에 연결합니다 - 출력을
Result
핀에 연결합니다
- 소스 포즈를 직접
오디오에서 웃음이 감지되면 캐릭터가 동적으로 애니메이션됩니다:
얼굴 및 신체 애니메이션과 결합
기존 바디 애니메이션과 사용자 정의 얼굴 애니메이션(표정, 감정 또는 기타 얼굴 움직임)을 오버라이드하지 않고 립싱크와 웃음을 함께 적용하려면:
- 바디 애니메이션과 최종 출력 사이에
Layered blend per bone
노드를 추가합니다.Use Attached Parent
가 true인지 확인하세요. - 레이어 설정 구성:
Layer Setup
배열에 1개의 항목 추가- 레이어의
Branch Filters
에 3개의 항목을 다음Bone Name
으로 추가:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- 사용자 정의 얼굴 애니메이션에 중요:
Curve Blend Option
에서 **"Use Max Value"**를 선택하세요. 이를 통해 사용자 정의 얼굴 애니메이션(표정, 감정 등)이 립싱크 위에 제대로 레이어링될 수 있습니다. - 연결 구성:
- 기존 애니메이션(예:
BodyPose
) →Base Pose
입력 - 얼굴 애니메이션 출력(립싱크 및/또는 웃음 노드에서) →
Blend Poses 0
입력 - Layered blend 노드 → 최종
Result
포즈
- 기존 애니메이션(예:
작동 원리: 브랜치 필터는 얼굴 애니메이션 본을 분리하여 립싱크와 웃음이 원본 바디 애니메이션을 보존하면서 얼굴 움직임과만 블렌딩되도록 합니다. "Use Max Value" 커브 블렌드 옵션은 커브를 가산적으로 블렌딩하는 대신 각 커브의 최대값을 취하므로, 사용자 정의 얼굴 애니메이션(표정과 감정 등)이 충돌 없이 립싱크와 적절하게 결합될 수 있습니다. 이 는 자연스러운 통합을 위한 MetaHuman 얼굴 릭 구조와 일치합니다.
참고: 립싱크와 웃음 기능은 기존 애니메이션 설정과 비파괴적으로 작동하도록 설계되었습니다. 이들은 입 움직임에 필요한 특정 얼굴 본만 영향을 미치며 다른 얼굴 애니메이션은 그대로 유지합니다. 이는 애니메이션 체인의 어느 시점에서든 안전하게 통합할 수 있음을 의미합니다 - 다른 얼굴 애니메이션 전에(해당 애니메이션이 립싱크/웃음을 오버라이드하도록 허용) 또는 후에(립싱크/웃음이 기존 애니메이션 위에 블렌딩되도록 허용) 적용할 수 있습니다. 이러한 유연성을 통해 립싱크와 웃음을 눈 깜빡임, 눈썹 움직임, 감정 표현 및 기타 얼굴 애니메이션과 충돌 없이 결합할 수 있습니다.
립싱크 동작 미세 조정
기본 립싱크 기능을 설정한 후 프로젝트 요구사항에 더 잘 맞도록 입 움직임의 특정 측면을 미세 조정할 수 있습니다.
혀 내밀기 제어
표준 립싱크 모델에서는 특정 음소 발음 동안 과도한 전방 혀 움직임을 확인할 수 있습니다. 혀 내밀기를 제어하려면:
Blend Runtime MetaHuman Lip Sync
또는Blend Realistic MetaHuman Lip Sync
노드 다음에Modify Curve
노드를 추가합니다Modify Curve
노드를 우클릭하고 Add Curve Pin을 선택합니다CTRL_expressions_tongueOut
이라는 이름의 커브 핀을 추가합니다- 노드의 Apply Mode 속성을 Scale로 설정합니다
- Value 매개변수를 조정하여 혀 내밀기 정도를 제어합니다 (예: 0.8로 설정하면 20% 덜 내밀어짐)
턱 벌림 제어
리얼리스틱 립 싱크는 오디오 콘텐츠와 시각적 요구사항에 따라 지나치게 반응적인 턱 움직임을 생성할 수 있습니다. 턱 벌림 강도를 조정하려면:
- 립 싱크 블렌드 노드 다음에
Modify Curve
노드를 추가합니다 Modify Curve
노드를 우클릭하고 Add Curve Pin을 선택합니다CTRL_expressions_jawOpen
이라는 이름의 커브 핀을 추가합니다- 노드의 Apply Mode 속성을 Scale로 설정합니다
- Value 매개변수를 조정하여 턱 벌림 범위를 제어합니다 (예: 0.9로 설정하면 턱 움직임이 10% 감소함)
구성
립 싱크 구성
- Standard (Faster) Model
- Realistic (Higher Quality) Model
Blend Runtime MetaHuman Lip Sync
노드는 속성 패널에 구성 옵션이 있습니다:
속성 | 기본값 | 설명 |
---|---|---|
Interpolation Speed | 25 | 비주얼 사이의 립 움직임 전환 속도를 제어합니다. 값이 높을수록 더 빠르고 갑작스러운 전환이 일어납니다. |
Reset Time | 0.2 | 립 싱크가 재설정되는 시간(초)입니다. 오디오가 중단된 후에도 립 싱크가 계속되는 것을 방지하는 데 유용합니다. |
Blend Realistic MetaHuman Lip Sync
노드는 속성 패널에 구성 옵션이 있습니다:
속성 | 기본값 | 설명 |
---|---|---|
Interpolation Speed | 30 | 위치 사이의 립 움직임 전환 속도를 제어합니다. 값이 높을수록 더 빠르고 갑작스러운 전환이 일어납니다. |
Reset Time | 0.2 | 립 싱크가 재설정되는 시간(초)입니다. 오디오가 중단된 후에도 립 싱크가 계속되는 것을 방지하는 데 유용합니다. |
웃음 구성
Blend Runtime MetaHuman Laughter
노드는 자체 구성 옵션이 있습니다:
속성 | 기본값 | 설명 |
---|---|---|
Interpolation Speed | 25 | 웃음 애니메이션 사이의 립 움직임 전환 속도를 제어합니다. 값이 높을수록 더 빠르고 갑작스러운 전환이 일어납니다. |
Reset Time | 0.2 | 웃음이 재설정되는 시간(초)입니다. 오디오가 중단된 후에도 웃음이 계속되는 것을 방지하는 데 유용합니다. |
Max Laughter Weight | 0.7 | 웃음 애니메이션의 최대 강도를 스케일링합니다 (0.0 - 1.0). |
립 싱크 모델 선택하기
프로젝트에 사용할 립싱크 모델을 결정할 때 다음 요소들을 고려하세요:
고려 사항 | 표준 모델 | 리얼리스틱 모델 |
---|---|---|
캐릭터 호환성 | MetaHumans 및 모든 커스텀 캐릭터 타입 | MetaHumans 전용 |
시각적 품질 | 효율적인 성능과 좋은 립싱크 | 더 자연스러운 입 움직임으로 향상된 사실감 |
성능 | 모바일/VR을 포함한 모든 플랫폼에 최적화 | 약간 더 높은 리소스 요구 사항 |
사용 사례 | 일반 애플리케이션, 게임, VR/AR, 모바일 | 시네마틱 경험, 클로즈업 캐릭터 상호작용 |
엔진 버전 호환성
Unreal Engine 5.2를 사용 중이라면, UE의 리샘플링 라이브러리 버그로 인해 리얼리스틱 모델이 제대로 작동하지 않을 수 있습니다. UE 5.2 사용자 중 안정적인 립싱크 기능이 필요한 경우, 대신 표준 모델을 사용해 주세요.
이 문제는 UE 5.2에 특화된 것이며 다른 엔진 버전에는 영향을 미치지 않습니다.
대부분의 프로젝트에서 표준 모델은 가장 넓은 범위의 캐릭터 타입을 지원하면서도 품질과 성능의 훌륭한 균형을 제공합니다. 리얼리스틱 모델은 성능 오버헤드가 덜 중요한 상황에서 MetaHuman 캐릭터를 위한 최고의 시각적 충실도가 필요할 때 이상적입니다.