โปรไฟล์อวตาร (แมปบเลนด์เชปสำหรับใบหน้า)

กำหนดชื่อใบหน้ามาตรฐานของ VRM ให้ตรงกับ BlendShapes ของอวตารแต่ละตัว

หน้านี้แปลด้วยเครื่องและอาจมีข้อผิดพลาด
ในคู่มือนี้ แอปแสดงอวตารของ VRC Avatar Viewer จะเรียกว่า "แอปวิวเวอร์" และแอปจับการเคลื่อนไหว (Motion Capture for VRC Avatar Viewer) จะเรียกว่า "แอปแคปเจอร์"

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

อวาตาร์โปรไฟล์คือไฟล์ข้อความในรูปแบบ .toml โดยเตรียม 1 ไฟล์ต่อ 1 อวาตาร์ เพียงเลือกจากแผงโหมดสตรีมมิ่งก็สามารถใช้งานได้ทันที และสามารถสลับเปลี่ยนได้ตลอดเวลาแม้ระหว่างรับสัญญาณ VMC

เลือกอวาตาร์โปรไฟล์ในโหมดสตรีมมิ่ง
เลือกอวาตาร์โปรไฟล์ในโหมดสตรีมมิ่ง
ข้อกำหนดเบื้องต้น
  • คู่มือนี้อ้างอิงการทำงานพื้นฐานของการรับสัญญาณ VMC (การเชื่อมต่อ Motion Capture) กรุณาตรวจสอบให้แน่ใจว่าอวาตาร์เคลื่อนไหวได้ก่อน
  • สำหรับอวาตาร์ VRM (.vrm) เนื่องจาก VRM มีนิยาม BlendShapes ในตัวเอง ฟีเจอร์นี้จึงมีไว้สำหรับอวาตาร์ VRChat รูปแบบ .avab เป็นหลัก
1

ตำแหน่งของไฟล์โปรไฟล์

วางโปรไฟล์ไว้ในโฟลเดอร์ avatar_profiles ซึ่งอยู่ในโฟลเดอร์เดียวกับตัว VRC Avatar Viewer

  1. เปิด VRC Avatar Viewer แล้วกดปุ่ม โหมดสตรีมมิ่ง บนทูลบาร์
  2. กด เปิดโฟลเดอร์ ในหัวข้อ "อวาตาร์โปรไฟล์" จะเปิดโฟลเดอร์ avatar_profiles ใน Explorer
  3. คัดลอก sample.toml ในโฟลเดอร์ แล้วเปลี่ยนชื่อเป็นชื่ออวาตาร์ของคุณ (เช่น: my_avatar.toml)
  4. เปิดด้วยโปรแกรมแก้ไขข้อความ (Notepad, VS Code เป็นต้น) แล้วแก้ไข
เปิดโฟลเดอร์ avatar_profiles
เปิดโฟลเดอร์ avatar_profiles
Tips
  • sample.toml จะไม่แสดงในรายการโปรไฟล์ สามารถเก็บไว้เป็นไฟล์อ้างอิงได้
  • นามสกุลต้องเป็น .toml เท่านั้น
  • ชื่อไฟล์ (ส่วนที่ไม่รวมนามสกุล) เป็นอิสระ ฝั่ง Viewer จะใช้ค่าของฟิลด์ 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 ชื่อ BlendShapes ของสีหน้าอวาตาร์ จำเป็น
renderer ชื่อ GameObject ของ SkinnedMeshRenderer ที่มี BlendShapes ของสีหน้า ค้นหาอัตโนมัติ
min_weight ค่าขั้นต่ำของน้ำหนัก BlendShapes ของสีหน้า (0〜100) 0
max_weight ค่าขั้นสูงของน้ำหนัก BlendShapes ของสีหน้า (0〜100) 100
Tips
  • หากเขียน [[expressions]] หลายบล็อกสำหรับ source เดียวกัน จะสามารถขยับ BlendShapes ของสีหน้าหลายรายการพร้อมกันด้วยสีหน้าเดียว
  • บรรทัดที่ขึ้นต้นด้วย # คือคอมเมนต์ สามารถเขียนได้อิสระ
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) ไม่สามารถจัดการได้ในอวาตาร์โปรไฟล์ หากต้องการขยับส่วนเหล่านั้น ให้เปลี่ยน "Face Tracking" ในโหมดสตรีมมิ่งเป็น VRCFaceTracking แล้วรองรับผ่าน FX Layer ฝั่งอวาตาร์
4

วิธีค้นหา target (ชื่อ BlendShapes ของสีหน้า)

ใน target ให้เขียนชื่อ BlendShapes ของสีหน้าที่มีอยู่จริงในอวาตาร์ตามที่เป็น ชื่ออาจแตกต่างกันมากขึ้นอยู่กับผู้สร้างและกฎการตั้งชื่อ จึงต้องตรวจสอบล่วงหน้า

วิธี A: ตรวจสอบใน Unity (ก่อนการ Export)

  1. เปิดอวาตาร์ใน Unity
  2. เลือก Mesh ของใบหน้า (ส่วนใหญ่คือ Body หรือ Face) จาก Hierarchy
  3. ขยาย SkinnedMeshRendererBlendShapes ใน Inspector
  4. ชื่อที่แสดงสามารถใช้เป็น target ได้โดยตรง และชื่อ GameObject ที่เลือกนั้นจะใช้เป็น renderer

วิธี B: ตรวจสอบจาก Log ของ Viewer

เมื่อชื่อ target หรือ renderer ไม่ถูกต้อง Viewer จะแสดง Log คำเตือน วิธีที่ใช้งานได้จริงคือสร้างโปรไฟล์ด้วยชื่อชั่วคราวแล้วโหลด จากนั้นดู Log และแก้ไขเป็นชื่อที่ถูกต้อง

5

ปรับความเข้มด้วย min_weight / max_weight

ความแรงของสีหน้าที่ได้รับ (0.0〜1.0) จะถูกแทรกเชิงเส้นระหว่าง min_weight และ max_weight แล้วสะท้อนไปยัง BlendShapes ของสีหน้า เมื่อละเว้นจะเป็น 0100 (เคลื่อนไหวได้ถึง 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 ดังนั้นสามารถใช้เป็นค่า "offset" ที่ทำงานตลอดเวลาได้
  • เมื่อสีหน้าเคลื่อนไหวรุนแรงเกินไป วิธีที่ได้ผลดีที่สุดคือลด max_weight ลงก่อน
6

ข้อควรระวังเมื่อละเว้น renderer

หากไม่ระบุ renderer ระบบจะตรวจสอบ SkinnedMeshRenderer ทั้งหมดในอวาตาร์ตามลำดับ และนำไปใช้กับตัวแรกที่มี BlendShapes ของสีหน้าที่ระบุใน target

พฤติกรรมนี้สะดวก แต่หาก Mesh อื่น เช่น ชุดหรือผม มี BlendShapes ชื่อเดียวกัน อาจทำให้ Mesh ที่ไม่ต้องการเคลื่อนไหวได้ โดยพื้นฐานแนะนำให้ระบุ renderer อย่างชัดเจน

7

เลือกและนำไปใช้ใน Viewer

  1. แสดงอวาตาร์ใน VRC Avatar Viewer
  2. เปิด โหมดสตรีมมิ่ง บนทูลบาร์
  3. กดปุ่มเลือกใน "อวาตาร์โปรไฟล์" แล้วเลือกโปรไฟล์ที่ต้องการจากรายการ
  4. เปิดการรับสัญญาณ VMC แล้ว BlendShapes ของสีหน้าที่ map ไว้จะเคลื่อนไหว
หน้าจอเลือกอวาตาร์โปรไฟล์
หน้าจอเลือกอวาตาร์โปรไฟล์
Tips
  • หากสลับโปรไฟล์ระหว่างรับสัญญาณ VMC จะทำการ binding ใหม่โดยอัตโนมัติ ไม่จำเป็นต้องหยุดหรือรีสตาร์ท
  • หากเลือก ไม่มี จะกลับไปใช้การกำหนดอัตโนมัติแบบเดิมโดยไม่ใช้โปรไฟล์
  • หลังจากแก้ไขไฟล์ ให้สลับไปโปรไฟล์อื่นแล้วกลับมา การเปลี่ยนแปลงจะถูกนำไปใช้

การแก้ไขปัญหา

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