아바타 프로파일(표정 블렌드셰이프 맵)

VRM 표준 표정명을 아바터 고유의 표정 블렌드셰이프에 할당하기

이 페이지는 기계 번역되었으며 부정확한 내용이 포함될 수 있습니다.
본 가이드에서는 VRC Avatar Viewer의 아바타 표시 앱을 「뷰어 앱」, 모션 캡처 앱 (Motion Capture for VRC Avatar Viewer)을 「캡처 앱」이라고 부릅니다.

VRC Avatar Viewer는 VMC 프로토콜로 수신한 표정 데이터(Joy / A / Blink 등 VRM 표준 표정명)를 아바타의 표정 블렌드셰이프에 자동으로 할당하여 움직입니다. VRChat 아바타의 경우 Avatar Descripter에 지정된 립싱크를 자동으로 할당하므로 입이 움직입니다. 다만, 아바터 전용으로 아바타 프로파일을 만들면 직접 대응 관계를 세부적으로 지정할 수 있습니다.

아바타 프로파일은 .toml이라는 형식의 텍스트 파일로, 1개 아바타당 1개 파일을 준비합니다. 스트리밍 모드 패널에서 선택하기만 하면 적용되며, VMC 수신 중에도 언제든지 전환할 수 있습니다.

스트리밍 모드에서 아바타 프로파일 선택하기
스트리밍 모드에서 아바타 프로파일 선택하기
전제 조건
  • 이 가이드는 VMC 수신(모션 캡처 연동)의 기본적인 동작을 전제로 하고 있습니다. 먼저 아바타가 움직이는 부분까지 확인해 주세요
  • VRM 아바타(.vrm)는 VRM 자체가 블렌드셰이프 정의를 가지고 있기 때문에, 본 기능은 주로 .avab 형식의 VRChat 아바타용입니다
1

프로파일 파일의 위치

프로파일은 아바타 뷰어 본체와 같은 폴더에 있는 avatar_profiles 폴더에 둡니다.

  1. 아바타 뷰어를 실행하고 툴바의 스트리밍 모드 버튼을 누릅니다
  2. "아바타 프로파일" 항목에 있는 폴더 열기를 누르면 탐색기에서 avatar_profiles 폴더가 열립니다
  3. 폴더 내의 sample.toml을 복사하여 자신의 아바타 이름 등으로 이름을 변경합니다(예: my_avatar.toml)
  4. 텍스트 에디터(메모장, VS Code 등)로 열어서 편집합니다
avatar_profiles 폴더 열기
avatar_profiles 폴더 열기
Tips
  • sample.toml은 프로파일 목록에 표시되지 않습니다. 참고용으로 그대로 남겨두어도 괜찮습니다
  • 확장자는 반드시 .toml로 해주세요
  • 파일 이름(확장자를 제외한 부분)은 자유입니다. 뷰어 측에서는 name 필드의 값이 표시명으로 사용됩니다
2

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
Tips
  • 같은 source에 대해 여러 [[expressions]]를 작성하면, 하나의 표정으로 여러 표정 블렌드셰이프를 동시에 움직일 수 있습니다
  • #으로 시작하는 줄은 주석입니다. 자유롭게 적을 수 있습니다
3

사용 가능한 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
Tips
  • 여기에 없는 표정명(예: VRCFaceTracking의 세부적인 입꼬리·볼·혀 파라미터)은 아바타 프로파일에서 다룰 수 없습니다. 그것들을 움직이고 싶다면, 스트리밍 모드의 "페이스 트래킹"을 VRCFaceTracking으로 전환하고 아바타 측의 FX 레이어에서 대응시켜 주세요
4

target(표정 블렌드셰이프 이름)을 확인하는 방법

target에는 아바타에 실제로 포함되어 있는 표정 블렌드셰이프의 이름을 그대로 작성합니다. 이름은 제작자나 명명 규칙에 따라 크게 달라지므로 사전 확인이 필요합니다.

방법 A: Unity에서 확인하기(내보내기 전)

  1. Unity에서 아바타를 엽니다
  2. Hierarchy에서 얼굴 메쉬(대부분 Body 또는 Face)를 선택합니다
  3. Inspector의 SkinnedMeshRendererBlendShapes를 펼칩니다
  4. 나열된 이름을 그대로 target으로 사용할 수 있습니다. 선택한 GameObject의 이름이 그대로 renderer가 됩니다

방법 B: 뷰어의 로그 확인하기

target 이름이나 renderer 이름이 잘못되었을 때는 뷰어가 경고 로그를 출력합니다. 임시 이름으로 프로파일을 만들어 불러온 다음, 로그를 보면서 올바른 이름으로 수정해 가는 방법도 실용적입니다.

5

min_weight / max_weight로 강도 조절하기

수신한 표정의 강도(0.0~1.0)는 min_weightmax_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
Tips
  • 수신 측이 0일 때도 min_weight 값이 적용되므로, 항상 적용되게 하고 싶은 "기본값(下駄)"으로도 사용할 수 있습니다
  • 표정이 과도하게 작동할 때는 우선 max_weight를 낮춰보는 것이 가장 효과적입니다
6

renderer를 생략했을 때 주의사항

renderer를 작성하지 않은 경우, 아바타 내의 모든 SkinnedMeshRenderer를 차례로 조사하여 지정한 target 표정 블렌드셰이프를 가장 먼저 가지고 있는 것에 적용합니다.

이 동작은 편리하지만, 의상이나 머리카락 등 다른 메쉬에도 같은 이름의 표정 블렌드셰이프가 있으면 의도하지 않은 메쉬가 움직여 버릴 수 있습니다. 기본적으로는 renderer를 명시하는 것을 권장합니다.

7

뷰어에서 선택하여 적용하기

  1. 아바타 뷰어에서 아바타를 표시합니다
  2. 툴바의 스트리밍 모드를 엽니다
  3. "아바타 프로파일"의 선택 버튼을 누르고 목록에서 사용하고 싶은 프로파일을 선택합니다
  4. VMC 수신을 켜면 매핑된 표정 블렌드셰이프가 움직입니다
아바타 프로파일 선택 화면
아바타 프로파일 선택 화면
Tips
  • VMC 수신 중에 프로파일을 전환하면 자동으로 다시 바인딩됩니다. 중지하거나 재시작할 필요는 없습니다
  • 없음을 선택하면 프로파일을 사용하지 않는 기존의 자동 할당만으로 돌아갑니다
  • 파일을 편집한 후에는 한 번 다른 프로파일로 전환했다가 돌아오면 변경 사항이 반영됩니다

문제 해결

  • 전혀 반영되지 않는다 source의 철자 오류, 존재하지 않는 target 표정 블렌드셰이프 이름, renderer의 이름 차이가 주요 원인입니다. Step 4의 방법 A로 올바른 이름을 확인하세요
  • 다른 메쉬가 움직여 버린다 renderer를 생략하면 같은 이름의 표정 블렌드셰이프를 가진 다른 메쉬에 적용되는 경우가 있습니다. renderer를 명시해 주세요
  • 표정이 너무 강하거나 너무 약하다 max_weight로 상한을, min_weight로 상시 오프셋을 조정해 주세요
  • 하나의 표정으로 여러 표정 블렌드셰이프를 움직이고 싶다 동일한 source를 가진 [[expressions]] 블록을 여러 개 나열하면 동시에 움직입니다
  • 프로파일 목록에 표시되지 않는다 확장자가 .toml인지, avatar_profiles 폴더 바로 아래에 있는지 확인해 주세요. sample.toml이라는 이름의 파일은 목록에서 제외됩니다