아바타 프로필(표정 블렌드셰이프 맵)
VRM 표준 표정 이름을 아바타 고유의 표정 블렌드셰이프에 할당하기
VRC Avatar Viewer는 VMC 프로토콜로 수신한 표정 데이터(Joy / A / Blink 등 VRM 표준 표정 이름)를 아바타의 표정 블렌드셰이프에 자동으로 할당해 움직입니다. VRChat 아바타는 Avatar Descriptor에 지정된 립싱크를 자동으로 할당하므로 입이 움직입니다. 다만 아바타 전용 아바타 프로필을 만들면 대응 관계를 직접 세세하게 지정할 수 있습니다.
아바타 프로필은 .toml 형식의 텍스트 파일로, 아바타 1개당 파일 1개를 준비합니다. 스트리밍 모드 패널에서 선택하기만 하면 적용되며, VMC 수신 중에도 언제든지 전환할 수 있습니다.

- 이 가이드는 모션 캡처 연동(아바타 움직이기(캡처 앱))이 기본적으로 동작하는 것을 전제로 합니다. 먼저 아바타가 움직이는 것까지 확인해 주세요
- VRM 아바타(.vrm)는 VRM 자체에 블렌드셰이프 정의가 있으므로, 이 기능은 주로
.avab형식의 VRChat 아바타를 위한 것입니다
프로필 파일 위치
프로필은 아바타 뷰어 본체와 같은 폴더에 있는 avatar_profiles 폴더에 넣습니다.
- 아바타 뷰어를 실행하고 툴바의 스트리밍 버튼을 누릅니다
- "아바타 프로필" 항목의 폴더 열기를 누르면 탐색기에서
avatar_profiles폴더가 열립니다 - 폴더 안의
sample.toml을 복사해 자신의 아바타 이름 등으로 이름을 바꿉니다(예:my_avatar.toml) - 텍스트 에디터(메모장, VS Code 등)로 열어 편집합니다

sample.toml은 프로필 목록에 표시되지 않습니다. 참고용으로 그대로 남겨 두어도 괜찮습니다- 확장자는 반드시
.toml로 해 주세요 - 파일 이름(확장자를 뺀 부분)은 자유입니다. 뷰어에서는
name필드의 값이 표시 이름으로 사용됩니다
TOML 파일 작성법
최소 구성은 파일 맨 앞의 name과, 필요한 만큼의 [[expressions]] 블록을 나열하는 것뿐입니다.
name = "マイアバター"
[[expressions]]
source = "Joy"
target = "face_happy"
renderer = "Body"
[[expressions]]
source = "Blink"
target = "eye_close"
renderer = "Body"
[[expressions]]
source = "A"
target = "mouth_a"
renderer = "Body"
각 필드의 의미는 다음과 같습니다.
| 필드 | 설명 | 생략 시 |
|---|---|---|
source |
수신하는 표정 이름(Joy / A / Blink 등) | 필수 |
target |
아바타의 표정 블렌드셰이프 이름 | 필수 |
renderer |
표정 블렌드셰이프를 가진 SkinnedMeshRenderer의 GameObject 이름 | 자동 검색 |
min_weight |
표정 블렌드셰이프 웨이트의 하한(0~100) | 0 |
max_weight |
표정 블렌드셰이프 웨이트의 상한(0~100) | 100 |
- 같은
source에 대해[[expressions]]를 여러 개 작성하면, 하나의 표정으로 여러 표정 블렌드셰이프를 동시에 움직일 수 있습니다 #으로 시작하는 줄은 주석입니다. 자유롭게 메모를 적어도 됩니다
사용할 수 있는 source 이름 목록
source에 지정할 수 있는 표정 이름은 VRM 표준을 따르는 아래 카테고리입니다. 대소문자는 구분하지 않습니다.
| 카테고리 | source 이름 |
|---|---|
| 표정 | Joy / Angry / Sorrow / Fun / Surprised / neutral |
| 립싱크 | A / I / U / E / O |
| 눈 깜빡임 | Blink / Blink_L / Blink_R |
| 시선 | LookUp / LookDown / LookLeft / LookRight |
| 눈썹 | browDownLeft / browDownRight / browInnerUp / browOuterUpLeft / browOuterUpRight |
- 여기에 없는 표정 이름(예: VRCFaceTracking의 세밀한 입꼬리·볼·혀 파라미터)은 아바타 프로필로 다룰 수 없습니다. 이런 파라미터를 움직이고 싶다면 스트리밍 모드의 "페이스 트래킹"을 VRCFaceTracking으로 바꾸고, 아바타 쪽 FX 레이어에서 대응시켜 주세요
target(표정 블렌드셰이프 이름) 확인 방법
target에는 아바타에 실제로 들어 있는 표정 블렌드셰이프 이름을 그대로 적습니다. 이름은 제작자나 명명 규칙에 따라 크게 다르므로 미리 확인해야 합니다.
방법 A: Unity에서 확인하기(익스포트 전)
- Unity에서 아바타를 엽니다
- 하이어라키에서 얼굴 메시(대부분
Body또는Face)를 선택합니다 - 인스펙터의 SkinnedMeshRenderer → BlendShapes를 펼칩니다
- 나열된 이름을 그대로
target으로 쓸 수 있습니다. 선택한 GameObject의 이름이 그대로renderer가 됩니다
방법 B: Viewer 로그 확인하기
target 이름이나 renderer 이름이 틀리면 뷰어가 경고 로그를 출력합니다. 임시 이름으로 프로필을 만들어 불러온 뒤, 로그를 보면서 올바른 이름으로 고쳐 나가는 방법도 실용적입니다.
min_weight / max_weight로 강도 조정하기
수신한 표정의 강도(0.0~1.0)는 min_weight와 max_weight 사이에서 선형 보간되어 표정 블렌드셰이프에 반영됩니다. 생략하면 0~100(=100%까지 움직임)입니다.
# 笑顔を少し控えめにしたい
[[expressions]]
source = "Joy"
target = "face_happy"
renderer = "Body"
max_weight = 60
# 常に少しだけ口角を上げておきたい(下駄を履かせる)
[[expressions]]
source = "neutral"
target = "face_smile_slight"
renderer = "Body"
min_weight = 20
max_weight = 40
- 수신 값이 0일 때도
min_weight값이 적용되므로, 항상 조금씩 적용해 두는 기본 오프셋으로도 쓸 수 있습니다 - 표정이 너무 요동칠 때는 먼저
max_weight를 낮춰 보는 것이 가장 효과적입니다
renderer를 생략할 때의 주의점
renderer를 적지 않으면 아바타 안의 모든 SkinnedMeshRenderer를 차례로 확인해, 지정한 target 표정 블렌드셰이프를 가진 첫 번째 것에 적용합니다.
이 동작은 편리하지만, 의상이나 머리카락 등 다른 메시에 같은 이름의 표정 블렌드셰이프가 있으면 의도하지 않은 메시가 움직일 수 있습니다. 기본적으로는 renderer를 명시하는 것을 권장합니다.
Viewer에서 선택해 적용하기
- 아바타 뷰어에 아바타를 표시합니다
- 툴바의 스트리밍을 엽니다
- "아바타 프로필"의 선택 버튼을 누르고, 목록에서 사용할 프로필을 고릅니다
- VMC 수신을 켜면 매핑된 표정 블렌드셰이프가 움직입니다

- VMC 수신 중에 프로필을 바꾸면 자동으로 다시 바인딩됩니다. 중지하거나 다시 시작할 필요는 없습니다
- 없음을 선택하면 프로필을 사용하지 않는 기존 자동 할당만으로 돌아갑니다
- 파일을 편집한 뒤에는 한 번 다른 프로필로 바꿨다가 다시 되돌리면 변경 사항이 반영됩니다
문제 해결
-
전혀 반영되지 않는다
주된 원인은
source의 철자 오류,target에 존재하지 않는 표정 블렌드셰이프 이름,renderer이름 오류입니다. Step 4의 방법 A로 올바른 이름을 확인해 주세요 -
다른 메시가 움직인다
renderer를 생략하면 같은 이름의 표정 블렌드셰이프를 가진 다른 메시에 적용되는 경우가 있습니다.renderer를 명시해 주세요 -
표정이 너무 강하거나 약하다
max_weight로 상한을,min_weight로 상시 오프셋을 조정해 주세요 -
하나의 표정으로 여러 표정 블렌드셰이프를 움직이고 싶다
같은
source를 가진[[expressions]]블록을 여러 개 나열하면 동시에 움직입니다 -
프로필 목록에 표시되지 않는다
확장자가
.toml인지,avatar_profiles폴더 바로 아래에 있는지 확인해 주세요.sample.toml이라는 이름의 파일은 목록에서 제외됩니다