입 모양은 표정의 절반 이상을 담당하며, 음성과 완벽하게 결합될 때 휴머노이드의 신뢰도를 결정합니다. 특히 “말은 하는데 입이 미묘하게 안 맞는다”는 순간, 사용자는 로봇을 '성능이 낮은 기계'로 바로 인지하게 됩니다.
개발팀에서 수년간 휴머노이드 페이스를 제작하며 립싱크 최적화에 매달렸던 경험을 바탕으로, 이 글은 얼굴 로봇에서 가장 자연스러운 입 모양을 생성하기 위한 핵심 파이프라인과, Viseme 기반 설계 기준을 실제 구현 수치와 함께 정리합니다.

핵심 요약
- 립싱크 제어는 보통 Viseme 15~20개 단위로 입 모양을 표준화하여 제어하는 것이 가장 효율적입니다.
- 저희가 사용하는 파이프라인은 음성 입력 → 음소/Viseme 추정 → 강도(가중치) → 모터 각도로 이루어져 있으며, 각 단계의 딜레이 관리가 핵심입니다.
- 최소 구조는 모터 3개만으로도 '기본적인' 립싱크는 가능하지만, 결국 품질은 기구부 정밀도, 정밀 보정, 그리고 타이밍 제어 능력에서 갈립니다.
- 전환 지연은 0.2초(200ms) 이하를 반드시 목표로 잡아야 사용자가 어색함을 체감하지 않습니다. 100ms에 가까울수록 좋습니다.
1) 음성-입 모양 생성의 기본 개념과 Viseme의 중요성
- Phoneme(음소): 언어학적 관점에서 의미를 구별하는 최소 발음 단위입니다. (예: '곰'의 'ㄱ', '오', 'ㅁ')
- Viseme(시각 발음 단위): 입 모양이 시각적으로 비슷한 음소들을 묶은 “시각적 그룹”입니다.
- 개발 경험: 사람은 수많은 음소를 정확히 구분하여 보지 않고, Viseme 수준의 입 모양 패턴을 먼저 인지합니다. 따라서 로봇은 '모든 음소 1:1' 매핑보다 Viseme 그룹(15~20개)으로 제어하는 것이 데이터 관리와 동작 효율성 면에서 압도적으로 유리합니다.
2) Viseme 15~20개 세트 구성과 제어 전략
구현 과정에서 우리는 15~20개 Viseme를 정의하고, 이 표준 위치 사이를 가중치(Weight)로 보간(Interpolation)하여 부드러운 움직임을 생성합니다. 이것이 '딱딱 끊기는' 움직임을 방지하는 핵심입니다.
| Viseme 그룹(예시) | 시각 특징 | 대표 발음(예시) | 필요 제어 축(실제 적용 예시) |
|---|---|---|---|
| 닫힘(Closed) | 입 완전 닫힘 | m, b, p | 턱 하강 0 + 입술 상하 압착 |
| 벌림(Open) | 입 크게 벌림 | a 계열 | 턱 하강 (가장 큰 변위 축) + 입술 분리 |
| 둥글림(Round) | 입술 원형(오, 우) | o, u 계열 | 입술 돌출 + 입꼬리 수축 (볼 근육 사용) |
| 펴짐(Spread) | 입꼬리 옆으로(이) | i, e 계열 | 입꼬리 강력 당김 (광대뼈 움직임 연동) |
| 치조/치찰(Teeth) | 치아 노출/마찰 | s, z, t, d | 입술 얇게 + 턱 미세 제어 (0.5mm 정밀도 요구) |
| 아랫입술-치아(Lip-Teeth) | 아랫입술 접촉 | f, v | 아랫입술 상승 + 턱 고정 (오직 아랫입술만 움직임) |
3) 립싱크 파이프라인 5단계: 지연 관리가 핵심
우리의 휴머노이드 시스템은 아래 5단계를 최대 200ms 이하로 처리하는 것을 목표로 설계되었습니다.
- 1단계: 음성 입력 확보
마이크 입력 또는 TTS(Text-to-Speech) 엔진에서 생성된 오디오 스트림(또는 음소 타이밍 정보)을 확보합니다. - 2단계: 음소/Viseme 추정
ASR(자동 음성 인식) 또는 AI 모델을 통해 실시간으로 음소를 추정하고 이를 정의된 Viseme 그룹으로 매핑합니다. TTS를 사용할 경우, 음소 타이밍 정보가 가장 정확합니다. - 3단계: Viseme 가중치 생성
한 시점(프레임)에서 1개 Viseme만 사용하는 것은 비효율적입니다. 2~3개의 Viseme을 혼합(가중치)하여 다음 동작으로 부드럽게 이어지도록 스무딩 데이터를 생성합니다. (예: 닫힘 50% + 둥글림 50%) - 4단계: 모터 목표값으로 변환
Viseme별로 사전에 정의된 모터의 목표 각도(또는 변위) 테이블을 참조하고, 3단계의 가중치를 곱하여 최종 모터 구동 목표값(Pulse Width)을 계산합니다. - 5단계: 가감속 적용 후 출력
모터에 목표값을 바로 전송하면 '딱딱' 끊기는 점프 동작이 발생합니다. 목표값 전환 시 30∼80ms 범위의 가감속(Ramp up/down)을 적용하여 물리적인 스무딩 효과를 만들어냅니다.
4) 모터 3개 최소 구조의 현실과 제약
저희가 초기 프로토타입을 제작할 때, 가장 최소한의 립싱크는 모터 3개로도 '구현 가능'했습니다. 그러나 "가능"과 "자연스러움"은 전혀 다른 차원의 문제라는 것을 깨닫게 됩니다.
3모터 구성(예시)
- 모터 A: 턱 하강(개구)
입 벌림의 70% 이상을 담당하는 핵심 모터입니다. 가장 큰 토크와 내구성이 요구됩니다. - 모터 B: 입꼬리 좌우 당김
'펴짐(이)' 계열을 단순 구현합니다. - 모터 C: 입술 돌출/수축
'둥글림(오, 우)' 계열을 단순 구현합니다.
3모터로 커버 가능한 범위 및 제약
- 가능: 기본적인 모음(아/이/오/우) 계열의 '큰 차이'는 확실하게 표현 가능합니다.
- 제약: 'f/v', 's/z'와 같은 치아 접촉이나 마찰이 필요한 자음 표현은 모터 3개로는 구현이 사실상 불가능합니다. 이런 경우, 립싱크의 품질 목표를 '기본 대화' 수준으로 낮추거나, 모터를 5개 이상으로 확장해야 합니다.
5) 품질을 올리는 수치 목표 4가지와 개발자 팁
휴머노이드 립싱크 개발은 예술이 아닌 철저한 수치 관리의 영역입니다. 다음 4가지 수치를 관리하면 체감 품질을 확실하게 올릴 수 있습니다.
- 전환 지연: 0.2초(200ms) 이하를 반드시 목표로 설정합니다. 저희 팀의 경험상 150ms 이하로 내려가면 사용자가 지연을 거의 인지하지 못했습니다.
- 프레임 업데이트: 50Hz∼120Hz의 제어 주기를 목표로 해야 표정이 '끊김 없이' 부드럽게 이어집니다. 30Hz 이하는 체감적으로 끊김이 느껴집니다.
- 입술 위치 정밀도: 모터의 정밀도가 0.5mm 수준의 반복 정확도를 유지해야 합니다. 1mm만 넘어가도 'm' 발음 후 입이 완벽하게 닫히지 않는 등의 사소한 오류가 누적되어 품질을 저해합니다.
- 가감속 시간: 30ms∼80ms 구간의 스무딩을 적용하면 모션이 부드러워지며 “딱딱한 로봇” 느낌을 줄일 수 있습니다. 이 수치는 모터의 토크와 기구부의 무게에 따라 달라집니다.
6) 개발 현장에서 겪은 실패 사례 4가지와 해결 전략
| 실패 사례 | 현상/원인 | 해결 전략 (경험 기반) |
|---|---|---|
| 실패 1) 말과 입이 어긋남 (지연 체감) | 원인: 오디오 파이프라인 자체 지연, 버퍼 누적, 모터 제어 주기 느림 | 해결: 오디오 타임스탬프를 기준으로 모션 동기화 (Audio-Driven Sync)를 최우선으로 확보하고, 모터 제어 주기를 50Hz 이상으로 끌어올립니다. |
| 실패 2) 입이 “딱딱” 끊김 (각짐) | 원인: Viseme를 단일 위치 선택(One-hot)으로만 적용하고 보간을 생략했을 때 | 해결: 2∼3개 Viseme의 가중치 혼합을 필수적으로 적용하고, 30ms 단위의 보간(스무딩) 알고리즘을 추가합니다. |
| 실패 3) 특정 발음에서 입 모양이 이상함 | 원인: 언어별 Viseme 세트 미구성 (한국어/영어/일본어의 Viseme 차이가 큼) | 해결: 언어별로 완전히 분리된 Viseme 목표값 테이블을 구축하고, 전문 성우의 발음을 레퍼런스로 재학습하는 과정을 거칩니다. |
| 실패 4) 장시간 구동 시 입 모양 드리프트 | 원인: 케이블 장력 변화, 기구 유격 증가, 열로 인한 모터/부품 팽창 | 해결: 구동 전후로 자동 기준점 리셋(Home Position) 기능을 주기적으로 실행하고, 온도 센서를 활용한 보정 루틴을 추가합니다. |
7) 실전 체크리스트
- Viseme 15∼20개 테이블이 한국어 발음 기준으로 정의되어 있습니까?
- Viseme 간 전환을 2∼3개 가중치 혼합으로 처리합니까?
- 실제 측정 기반으로 전환 지연이 200ms 이하로 유지됩니까?
- 모터 제어 주기가 50Hz 이상으로 안정적으로 유지됩니까?
- 3모터 구조라면 '치아/마찰' 표현 제한을 인지하고 UX/UI에서 보완책을 마련했습니까?
- 장시간 구동(예: 3시간 연속) 후에도 기준점(Home) 위치가 유지됩니까? (드리프트 확인)
- 대화 거리(30cm)에서 모터 소음이 대화 내용을 방해하지 않습니까?
8) 관련 글
- 휴머노이드 얼굴 턱 관절의 진짜 같은 움직임 만들기
- 휴머노이드 얼굴 표정과 음성 연동 AI 설계
- 휴머노이드 얼굴 전체를 제어하는 펌웨어 구조
- 휴머노이드 얼굴의 언어별 발화 차이 대응
- 휴머노이드 얼굴의 소리-표정 불일치 문제
9) 결론: 개발자로서의 제언
입 모양 생성은 단순히 '모터 움직임'이 아니라 '데이터 파이프라인의 동기화' 문제입니다. Viseme 15∼20개 단위로 분류하고 가중치로 합성하는 방식이 데이터 효율성 면에서 최적의 해결책입니다.
최소 구조는 모터 3개로도 가능하지만, '로봇 티를 없애는' 자연스러움은 전환 지연(≤200ms)과 모션 스무딩에서 결정된다는 점을 명심해야 합니다. 가장 효율적인 접근은 구현 전후로 오디오-모션 싱크 지연(ms)을 수치로 측정하고 관리하는 것입니다.
Q&A
Q1) 왜 음소가 아니라 Viseme로 제어합니까?
- 개발 편의성과 인간의 시각 인지 패턴 때문입니다. 사람은 수십 가지의 음소를 일일이 구분하기보다, 입 모양이 비슷한 그룹(Viseme) 단위로 먼저 인지합니다. 따라서 Viseme 기반 제어가 시각적 자연스러움을 높이는 동시에 시스템 복잡도를 낮춥니다.
Q2) 모터 3개로도 립싱크가 충분합니까?
- 기본 모음 중심의 립싱크는 가능합니다. 하지만 치아/마찰이 필요한 정교한 자음(s, f, v 등) 표현은 극도로 제한적입니다. 높은 품질을 목표로 한다면 5개 이상의 축 확장이 필수적입니다.
Q3) 입이 끊기는 느낌을 줄이는 가장 쉬운 방법은 무엇입니까?
- Viseme를 2∼3개 가중치로 혼합하고, 모터 제어 단계에서 30ms∼80ms 범위의 가감속(스무딩)을 의무적으로 적용하는 것입니다. 이 간단한 프로세스가 동작의 '딱딱함'을 가장 효과적으로 제거해줍니다.
Q4) 립싱크에서 가장 치명적인 문제는 무엇이며, 어떻게 해결했습니까?
- 오디오-모션 지연(싱크 불일치)입니다. 200ms를 넘어가면 사용자는 즉각적으로 '어색하다'고 느낍니다. 저희는 오디오 재생의 타임스탬프와 모터의 목표 구동 시점을 엄격하게 동기화하여 지연 시간을 150ms 이하로 줄이는 데 성공했습니다.
Q5) 최소 테스트 1가지만 한다면 무엇을 추천합니까?
- 문장 10개를 재생하며 “오디오 시작 시점부터 립싱크 동작 시작까지의 지연(ms)”을 측정하는 테스트를 추천합니다. 이 수치가 이 프로젝트의 성패를 가늠하는 핵심 지표입니다.
'휴머노이드 얼굴 > 6. 발화 및 입술 움직임 제어 기술' 카테고리의 다른 글
| 휴머노이드 얼굴의 언어별 발화 차이 대응: 같은 말인데 입이 다르면, 신뢰가 흔들립니다 (0) | 2025.12.26 |
|---|---|
| 휴머노이드 얼굴의 입술 움직임 정밀도 향상 기술: Lip Corner Puller 3축과 0.5mm 기준으로 립싱크 품질을 올립니다 (0) | 2025.12.12 |
| 휴머노이드 얼굴 턱 관절의 진짜 같은 움직임 만들기: 개구 20~35°와 단일축·복합축 설계 기준 (0) | 2025.12.11 |