โปรไฟล์อวาตาร์ (แผนผังเบลนด์เชปการแสดงสีหน้า)
จับคู่ชื่อการแสดงสีหน้ามาตรฐานของ VRM เข้ากับเบลนด์เชปการแสดงสีหน้าเฉพาะของอวาตาร์
VRC Avatar Viewer จะนำข้อมูลการแสดงออกทางสีหน้าที่รับผ่าน VMC Protocol (ชื่อการแสดงออกตามมาตรฐาน VRM เช่น Joy / A / Blink) ไปกำหนดให้กับเบลนด์เชปการแสดงออกของอวาตาร์โดยอัตโนมัติเพื่อขยับใบหน้า สำหรับอวาตาร์ VRChat ระบบจะกำหนดลิปซิงก์ที่ตั้งไว้ใน Avatar Descriptor ให้อัตโนมัติ ปากจึงขยับได้ทันที อย่างไรก็ตาม หากสร้าง โปรไฟล์อวาตาร์ สำหรับอวาตาร์นั้นโดยเฉพาะ คุณจะกำหนดการจับคู่ได้อย่างละเอียดด้วยตัวเอง
โปรไฟล์อวาตาร์คือไฟล์ข้อความรูปแบบ .toml โดยใช้ 1 ไฟล์ต่อ 1 อวาตาร์ เพียงเลือกจากแผงโหมดสตรีมมิงก็ใช้งานได้ทันที และสลับได้ทุกเมื่อแม้ระหว่างรับ VMC

- คู่มือนี้ถือว่าการเชื่อมต่อโมชันแคปเจอร์ (ขยับอวาตาร์ (แอปจับภาพ)) ทำงานได้ตามปกติแล้ว กรุณาตรวจสอบให้แน่ใจก่อนว่าอวาตาร์ขยับได้
- อวาตาร์ VRM (.vrm) มีการกำหนดเบลนด์เชปอยู่ในตัว VRM เอง ฟีเจอร์นี้จึงมีไว้สำหรับอวาตาร์ VRChat ในรูปแบบ
.avabเป็นหลัก
ตำแหน่งของไฟล์โปรไฟล์
ให้วางโปรไฟล์ไว้ในโฟลเดอร์ avatar_profiles ซึ่งอยู่ในโฟลเดอร์เดียวกับตัวโปรแกรม Avatar Viewer
- เปิด Avatar Viewer แล้วกดปุ่ม สตรีมมิง บนแถบเครื่องมือ
- กด เปิดโฟลเดอร์ ในหัวข้อ "โปรไฟล์อวาตาร์" แล้วโฟลเดอร์
avatar_profilesจะเปิดขึ้นใน Explorer - คัดลอก
sample.tomlในโฟลเดอร์ แล้วเปลี่ยนชื่อเป็นชื่ออวาตาร์ของคุณหรือชื่ออื่น (เช่นmy_avatar.toml) - เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความ (Notepad, VS Code ฯลฯ) แล้วแก้ไข

sample.tomlจะไม่แสดงในรายการโปรไฟล์ จึงเก็บไว้เป็นตัวอย่างอ้างอิงได้เลย- นามสกุลไฟล์ต้องเป็น
.tomlเสมอ - ตั้งชื่อไฟล์ (ส่วนที่ไม่รวมนามสกุล) ได้ตามต้องการ โดยViewerจะใช้ค่าในฟิลด์
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 |
ชื่อ GameObject ของ SkinnedMeshRenderer ที่มีเบลนด์เชปการแสดงออกนั้น | ค้นหาอัตโนมัติ |
min_weight |
ค่าต่ำสุดของน้ำหนักเบลนด์เชปการแสดงออก (0〜100) | 0 |
max_weight |
ค่าสูงสุดของน้ำหนักเบลนด์เชปการแสดงออก (0〜100) | 100 |
- หากเขียน
[[expressions]]หลายบล็อกสำหรับsourceเดียวกัน การแสดงออกเดียวจะขยับเบลนด์เชปการแสดงออกหลายตัวพร้อมกันได้ - บรรทัดที่ขึ้นต้นด้วย
#คือคอมเมนต์ เขียนบันทึกอะไรก็ได้ตามสะดวก
รายชื่อ 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
- เลือกเมชใบหน้าใน Hierarchy (ส่วนใหญ่คือ
BodyหรือFace) - ขยาย SkinnedMeshRenderer → BlendShapes ใน Inspector
- ชื่อที่แสดงอยู่ใช้เป็น
targetได้ทันที และชื่อ GameObject ที่เลือกก็คือค่าของrenderer
วิธี B: ตรวจสอบจากล็อกของ Viewer
หากชื่อ target หรือชื่อ renderer ผิด Viewerจะแสดงล็อกคำเตือน การสร้างโปรไฟล์ด้วยชื่อชั่วคราวแล้วโหลดดู จากนั้นค่อยแก้เป็นชื่อที่ถูกต้องไปพร้อมกับดูล็อก ก็เป็นวิธีที่ใช้ได้จริง
ปรับความแรงด้วย 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 Viewerจะไล่ตรวจ SkinnedMeshRenderer ทั้งหมดในอวาตาร์ตามลำดับ แล้วนำไปใช้กับตัวแรกที่มีเบลนด์เชปการแสดงออกตาม target ที่ระบุ
พฤติกรรมนี้สะดวกก็จริง แต่หากเมชอื่นอย่างชุดหรือผมมีเบลนด์เชปการแสดงออกชื่อเดียวกัน เมชที่ไม่ได้ตั้งใจอาจขยับแทนได้ โดยทั่วไปจึงแนะนำให้ระบุ renderer อย่างชัดเจน
เลือกและใช้งานใน Viewer
- แสดงอวาตาร์ใน Avatar Viewer
- เปิด สตรีมมิง บนแถบเครื่องมือ
- กดปุ่มเลือกของ "โปรไฟล์อวาตาร์" แล้วเลือกโปรไฟล์ที่ต้องการจากรายการ
- เมื่อเปิดการรับ VMC เบลนด์เชปการแสดงออกที่จับคู่ไว้จะเริ่มขยับ

- หากสลับโปรไฟล์ระหว่างรับ VMC ระบบจะผูกการจับคู่ใหม่ให้อัตโนมัติ ไม่ต้องหยุดหรือรีสตาร์ต
- หากเลือก ไม่มี จะกลับไปใช้เฉพาะการกำหนดอัตโนมัติแบบเดิมโดยไม่ใช้โปรไฟล์
- หลังแก้ไขไฟล์ ให้สลับไปโปรไฟล์อื่นสักครั้งแล้วสลับกลับมา การเปลี่ยนแปลงจึงจะมีผล
การแก้ไขปัญหา
-
ไม่มีผลใดๆ เลย
สาเหตุหลักคือสะกด
sourceผิด ใส่ชื่อเบลนด์เชปการแสดงออกที่ไม่มีอยู่จริงในtargetหรือชื่อrendererไม่ตรง กรุณาตรวจสอบชื่อที่ถูกต้องด้วยวิธี A ใน Step 4 -
เมชอื่นขยับแทน
หากละ
rendererไว้ อาจไปจับคู่กับเมชอื่นที่มีเบลนด์เชปการแสดงออกชื่อเดียวกัน กรุณาระบุrendererให้ชัดเจน -
สีหน้าแรงหรืออ่อนเกินไป
ปรับค่าสูงสุดด้วย
max_weightและค่าชดเชยคงที่ด้วยmin_weight -
ต้องการให้การแสดงออกเดียวขยับเบลนด์เชปการแสดงออกหลายตัว
เรียงบล็อก
[[expressions]]ที่มีsourceเดียวกันหลายบล็อก แล้วจะขยับพร้อมกัน -
โปรไฟล์ไม่แสดงในรายการ
ตรวจสอบว่านามสกุลไฟล์เป็น
.tomlและวางไฟล์ไว้ในโฟลเดอร์avatar_profilesโดยตรง ไฟล์ชื่อsample.tomlจะไม่แสดงในรายการ