4.ทะเบียนพารามิเตอร์ (เป็นข้อบังคับ / normative)
ทะเบียนคือรายการมิติทุกตัวที่ถือเป็นต้นฉบับ. แต่ละแถวคือหนึ่งมิติ (มิติที่มีด้านมีเป็นคู่ _l/_r
ที่ใช้นิยามที่ระบุร่วมกัน). ค่า default คือค่ากลางแบบบรรทัดฐาน.
| คอลัมน์ | ความหมาย |
|---|---|
รหัส (id) | ตัวระบุเครื่องที่คงที่ (เช่น a_hand_x). id ที่มีด้านต่อท้าย _l/_r. ต้องไม่นำกลับมาใช้ซ้ำหรือนิยามใหม่ภายในเวอร์ชันกระบวนทัศน์เดียวกัน (X, §8). |
ข้าง (side) | L/R (คู่) หรือ none (แนวกลาง). |
ความหมาย (definition) | นิยามหนึ่งประโยคที่มนุษย์อ่านเข้าใจ. |
−1 … +1 | ความหมายของสองขั้ว (ค่าหน่วยจริง max ในวงเล็บ). |
องศาอิสระ (dof) | องศาอิสระ. |
ใช้ใน latent อารมณ์ (affect) | มิตินี้ใช้ใน latent อารมณ์ได้หรือไม่ คือรับเดลตาการแสดงออก (h b f m เท่านั้น). |
ค่าปริยาย (default) | ค่ากลางแบบบรรทัดฐาน. |
4.1.แขน (arm)
ตำแหน่งมือในกรอบยึดคอ โดยแต่ละแกนมีมาตราส่วนความยาวที่คาลิเบรตแยกกัน บวกการกางข้อศอก.
ทั้งหมดเป็น bipolar ยกเว้น a_spread (unipolar).
| แกน | ระยะอ้างอิงที่คาลิเบรต d |
|---|---|
| X | wrist_r ถึง middle_tip_r: ข้อมือถึงปลายนิ้วกลาง ขณะมือกางในท่า bind |
| Y | neck ถึง navel: คอถึงสะดือ ขณะลำตัวอยู่ในท่า bind |
| Z | shoulder_r ถึง wrist_r: ไหล่ถึงข้อมือขณะเหยียดแขนเต็มที่ โดยคงทิศข้อมือเดิม |

คำอธิบาย: เส้นที่วาดแต่ละเส้นคือระยะอ้างอิง d ของแต่ละแกน — X wrist_r → middle_tip_r (มือกาง ท่า bind) · Y neck → navel (ท่า bind) · Z shoulder_r → wrist_r (เหยียดแขนเต็มที่ คงทิศข้อมือเดิม). หน่วยของแกนคือ L = 2 · r · d ไม่ใช่ความยาวที่วาดโดยตรง; ค่าบรรทัดฐาน n เลื่อนมือ n × max × L ตามแกนของกรอบร่างกาย. ด้านขวากำหนดหน่วยให้ทั้งสองแขน; ไม่วัดระยะใหม่จากท่าขณะเคลื่อนไหว.
ระยะต้อง (MUST) วัดระหว่างจุดบนร่างกายที่คาลิเบรตแล้ว รวมออฟเซ็ตท้องถิ่นของกระดูก ในท่าอ้างอิงคงที่. ต้องไม่ (MUST NOT) วัดใหม่จากท่าทางขณะเคลื่อนไหว: การงอศอก การงอนิ้ว หรือการหมุนลำตัวต้องไม่เปลี่ยนหน่วย. ระยะอ้างอิงของด้านขวากำหนดหน่วยร่วมของแขนทั้งสองข้าง; เครื่องหมายตำแหน่งซ้าย/ขวายังคงเป็นไปตาม §3.2. เมื่อจุดที่คาลิเบรตหรือรูปทรงมือจริงเปลี่ยน ต้องคำนวณระยะอ้างอิงที่ได้รับผลใหม่.
สำหรับแต่ละแกน หน่วยกายภาพคือ โดย d คือระยะอ้างอิงที่คาลิเบรตข้างต้น
และ r เป็นอัตราส่วนอ้างอิงคงที่ต่อแกนที่นิยามโดยอวาตาร์อ้างอิงทางการ (based) จึงคงขนาดตัวเลขเดิมไว้.
ดังนั้น หน่วยแกน X = 2 · r · ความยาวมือ (ข้อมือถึงปลายนิ้วกลาง), หน่วยแกน Y = 2 · r · ความยาวช่วงตัว
(คอถึงสะดือ) และหน่วยแกน Z = 2 · r · ความยาวแขน (ไหล่ถึงข้อมือ ขณะเหยียดแขน); ไม่มีแกนใดใช้ความยาว
นั้นโดยตรงเป็นหน่วย. พิกัดแขนบรรทัดฐาน n ให้ระยะเลื่อน ตามแกนในกรอบร่างกาย
ก่อนแก้ anchor/contact. ในทางเทียบเท่า ผู้บริโภคที่ใช้หน่วยความกว้างไหล่จะคูณแกนนั้นด้วย
. ดังนั้นความกว้างไหล่เพียงอย่างเดียวไม่ได้กำหนดตำแหน่งแขนข้ามอวาตาร์
อีกต่อไป. รหัส ค่า max และค่าปริยายในทะเบียนด้านล่างไม่เปลี่ยน.
ผู้บริโภคที่ไม่มีระยะอ้างอิงที่ใช้ได้ควร (SHOULD) ใช้หน่วยความกว้างไหล่แบบเดิมสำหรับแกนนั้น และรายงานว่าขาดการคาลิเบรต. การถอยกลับนี้ไม่ถือว่าอวาตาร์นั้นสอดคล้องกับข้อกำหนดหน่วยแกนที่คาลิเบรตแล้ว.
| รหัส | ข้าง | ความหมาย | −1 … +1 | องศาอิสระ | ค่าปริยาย |
|---|---|---|---|---|---|
a_hand_x | L/R | ตำแหน่งมือซ้าย-ขวา ในหน่วย L_X = 2 · r · ความยาวมือ (ข้อมือถึงปลายนิ้วกลาง) ที่คาลิเบรตแล้ว | −1 = ข้ามไปฝั่งตรงข้าม · +1 = ออกพ้นไหล่ตัวเอง (max 1.5) | 1 | 0.333 |
a_hand_y | L/R | ความสูงมือ ในหน่วย L_Y = 2 · r · ความยาวช่วงตัว (คอถึงสะดือ) ที่คาลิเบรตแล้ว | −1 = ต่ำ/ระดับสะโพก · +1 = สูงเหนือหัว (max 1.5) | 1 | −0.933 |
a_hand_z | L/R | ระยะยื่นมือไปหน้า ในหน่วย L_Z = 2 · r · ความยาวแขน (ไหล่ถึงข้อมือเมื่อเหยียดเต็มที่) ที่คาลิเบรตแล้ว | −1 = ชิดตัว · +1 = ยื่นสุด (max 1.5) | 1 | 0.35 |
a_spread | L/R | การกางข้อศอก | 0 = หุบชิดซี่โครง · +1 = กางออก (unipolar, max 1) | 1 | 0.4 |
4.2.การหันฝ่ามือ (palm facing)
การวางแนวข้อมือเป็นส่วนเวกเตอร์ของควอเทอร์เนียนหน่วยแบบ global ในกรอบร่างกาย (w
สร้างกลับตอนถอดรหัส); ไม่มี gimbal. เอกลักษณ์ (0,0,0) = ฝ่ามือหันไปหน้า นิ้วชี้ขึ้น. มือขวากลับด้าน
ข้ามระนาบซากิตทัล. ค่าเริ่มต้นแทน "มือห้อยตามท่อนแขน ฝ่ามือหันเข้าตัว".

คำอธิบาย: เอกลักษณ์ (0,0,0) = ฝ่ามือหันเข้าหากล้อง (+z) นิ้วชี้ขึ้น (+y) แสดงด้วยมือขวา (นิ้วโป้งอยู่ซ้ายของผู้ดู). w_qx หมุนรอบแกน x (ก้มเงย), w_qy รอบแกน y (คว่ำหงาย), w_qz รอบแกน z (หมุน); แกนเป็นไปตามรูปที่ 2.
ผู้บริโภคต้อง (MUST) คำนวณองค์ประกอบ w คืนจากเงื่อนไขความยาวหนึ่งหน่วย:
หากผลรวมกำลังสองของส่วนเวกเตอร์เกิน 1 ต้อง (MUST) ย่อสเกลส่วนเวกเตอร์ลงให้ความยาวไม่เกิน 1 ก่อนคำนวณ
และควร (SHOULD) จำกัดไว้ต่ำกว่า 1 เล็กน้อย (เช่น 0.98) เพื่อเลี่ยงภาวะเอกฐานใกล้ w = 0. การกำหนดให้ w ≥ 0
เสมอยังทำให้การแทนการหมุนไม่กำกวม (q และ −q คือการหมุนเดียวกัน).
| รหัส | ข้าง | ความหมาย | −1 … +1 | องศาอิสระ | ค่าปริยาย |
|---|---|---|---|---|---|
w_qx | L/R | ควอเทอร์เนียน x (แกนก้มเงย) | −1 … +1 (max 1) | 1 | 0.885 |
w_qy | L/R | ควอเทอร์เนียน y (แกนคว่ำหงาย) | −1 … +1 (max 1) | 1 | −0.093 |
w_qz | L/R | ควอเทอร์เนียน z (แกนหมุน) | −1 … +1 (max 1) | 1 | −0.429 |
4.3.นิ้ว (fingers)
ต่อหนึ่งนิ้วมี curl / fold / side ทั้งสองมือ; นิ้วโป้งเพิ่ม DOF ที่ 4 (roll). นิ้วโป้งถูกผูกหมุน
~90° ดังนั้น fold = การหุบเข้าหาฝ่ามือ (opposition) และ side = การกางเข้า/ออกระนาบฝ่ามือ.
g_thumb_roll มักสังเกตไม่ได้จากท่าทาง 2 มิติ; ผู้ผลิตที่ประเมินค่าไม่ได้ ต้อง (MUST) ส่งค่าปริยาย (0). ทั้งหมด bipolar,
max 1, default 0.

คำอธิบาย: คอลัมน์ −1 · 0 · +1. Curl (แถวบน; จุดคือข้อนิ้ว): −1 = นิ้วโค้งแอ่นไปด้านหลังตามข้อกลางและข้อปลาย · 0 = เหยียดตรง · +1 = งองุ้มเข้าหาฝ่ามือ. Fold (แถวกลาง; จุดคือจุดหมุนที่โคนนิ้ว): ทั้งนิ้วที่เหยียดตรงหมุนรอบข้อโคนนิ้ว — −1 = ยกไปด้านหลัง · 0 = ตรง · +1 = พับลงเข้าหาฝ่ามือ (≈ 90°). Side (แถวล่าง ไฮไลต์นิ้วชี้): −1 = ไปทางโป้ง · +1 = ไปทางก้อย.

คำอธิบาย: มือขวา ฝ่ามือหันเข้าหากล้อง; คอลัมน์ −1 · 0 · +1. โป้ง fold = หุบขวางฝ่ามือ (แถวบน): −1 = กางออกห่างฝ่ามือ · +1 = ขวางฝ่ามือไปฐานนิ้วก้อย. โป้ง side = กางเข้า/ออกระนาบฝ่ามือ (แถวล่าง): −1 = เข้า แนบฝ่ามือ · +1 = ออกจากระนาบฝ่ามือ เข้าหากล้อง. ไม่ได้วาด roll ของโป้ง.
| รหัส | ข้าง | ความหมาย | −1 … +1 | องศาอิสระ | ค่าปริยาย |
|---|---|---|---|---|---|
g_{thumb,index,middle,ring,pinky}_curl | L/R | งอปลายนิ้ว (PIP/DIP เข้าฝ่ามือ) | −1 = กรีดนิ้ว (แอ่นไปด้านหลัง) · 0 = เหยียดตรง · +1 = งอสุด | 1 | 0 |
g_{index,middle,ring,pinky}_fold | L/R | พับโคนนิ้ว (MCP) | −1 = พับไปด้านหลัง · 0 = เหยียดตรง · +1 = พับเข้าหาฝ่ามือ | 1 | 0 |
g_thumb_fold | L/R | โป้งหุบขวางฝ่ามือ (ไปฐานนิ้วก้อย) | −1 = ออกห่าง · +1 = ขวางฝ่ามือ | 1 | 0 |
g_{index,middle,ring,pinky}_side | L/R | กางนิ้ว | −1 = ไปทางโป้ง · +1 = ไปทางก้อย | 1 | 0 |
g_thumb_side | L/R | โป้งกางเข้า/ออกระนาบฝ่ามือ | −1 = เข้า · +1 = ออก | 1 | 0 |
g_thumb_roll | L/R | โป้งหมุนอุ้งนิ้ว | −1 = อุ้งออกจากฝ่ามือ · +1 = อุ้งเข้าฝ่ามือ | 1 | 0 |
4.4.ศีรษะ (head) (ใช้ใน latent อารมณ์ได้)
มุมออยเลอร์ของศีรษะ (เก็บเป็น bipolar องศา). ใช้ใน latent อารมณ์ได้.
| รหัส | ข้าง | ความหมาย | −1 … +1 | องศาอิสระ | ใช้ใน latent อารมณ์ | ค่าปริยาย |
|---|---|---|---|---|---|---|
h_yaw | none | หันซ้าย-ขวา | ±80° (max 80) | 1 | yes | 0 |
h_pitch | none | ก้มเงย | ±60° (max 60) | 1 | yes | 0 |
h_roll | none | เอียงหัว | ±50° (max 50) | 1 | yes | 0 |
4.5.ลำตัว (body) (ใช้ใน latent อารมณ์ได้)
การเคลื่อนลำตัวกระจายตามกระดูกสันหลัง (องศา). ใช้ใน latent อารมณ์ได้.
| รหัส | ข้าง | ความหมาย | −1 … +1 | องศาอิสระ | ใช้ใน latent อารมณ์ | ค่าปริยาย |
|---|---|---|---|---|---|---|
b_twist | none | บิดตัวซ้าย-ขวา | ±60° (max 60) | 1 | yes | 0 |
b_bend | none | ก้มเงยตัว | ±50° (max 50) | 1 | yes | 0 |
b_lean | none | เอียงตัว | ±40° (max 40) | 1 | yes | 0 |
4.6.ใบหน้า (face) (ใช้ใน latent อารมณ์ได้)
มิติการแสดงออกแบบ bipolar; แต่ละตัวขับช่อง morph ชื่อ ARKit หนึ่งช่องขึ้นไปต่อทิศทาง. ทั้งหมด max 1, default 0. ใช้ใน latent อารมณ์ได้.
| รหัส | ข้าง | ความหมาย | −1 … +1 | องศาอิสระ | ใช้ใน latent อารมณ์ | ค่าปริยาย |
|---|---|---|---|---|---|---|
f_brow_inner | none | คิ้วด้านใน | −1 = ขมวด (โกรธ) · +1 = เลิก | 1 | yes | 0 |
f_brow | L/R | คิ้วด้านนอก | −1 = ลง · +1 = ขึ้น | 1 | yes | 0 |
f_eye | L/R | เปลือกตา | −1 = หลับ · +1 = เบิ่ง | 1 | yes | 0 |
f_squint | L/R | หยีตา | 0 = ปกติ · +1 = บีบตา (plus เท่านั้น) | 1 | yes | 0 |
f_nose | none | ย่นจมูก / เชิดจมูก | 0 = ปกติ · +1 = ย่น (plus เท่านั้น) | 1 | yes | 0 |
4.7.ปาก (mouth) (ใช้ใน latent อารมณ์ได้)
รูปปาก/ช่องปากแบบ bipolar; แต่ละตัวเรียก morph ARKit หลายช่องต่อทิศทางเพื่อให้สุดขั้วไปถึงรูป ISWA ที่เข้ม (หาว จูบ โชว์ฟัน). แก้ม ลิ้น ฟัน เป็นอวัยวะช่องปากจึงจัดไว้ที่นี่. ทั้งหมด max 1, default 0. ใช้ใน latent อารมณ์ได้.
| รหัส | ข้าง | ความหมาย | −1 … +1 | องศาอิสระ | ใช้ใน latent อารมณ์ | ค่าปริยาย |
|---|---|---|---|---|---|---|
m_mouth | L/R | มุมปาก | −1 = คว่ำ · +1 = ยิ้ม | 1 | yes | 0 |
m_jaw | none | ขากรรไกร | −1 = กัด · +1 = อ้า (หาว) | 1 | yes | 0 |
m_lips | none | ห่อปาก | −1 = ห่อ (funnel) · +1 = จู๋ (pucker) | 1 | yes | 0 |
m_wide | none | ความกว้างปาก | −1 = แคบ (/u/) · +1 = กว้าง (signed) | 1 | yes | 0 |
m_roll | none | ม้วนริมฝีปาก | −1 = ล่างทับบน · +1 = บนทับล่าง | 1 | yes | 0 |
m_press | none | เม้มปาก | −1 = คลาย-แยก · +1 = เม้ม/เกร็ง (signed) | 1 | yes | 0 |
m_fwd | none | ยื่นปาก/ขากรรไกร | 0 = ปกติ · +1 = ยื่นหน้า (plus เท่านั้น) | 1 | yes | 0 |
m_cheek | none | แก้ม | −1 = ตอบ · +1 = ป่อง (signed) | 1 | yes | 0 |
m_tongue | none | แลบลิ้น | 0 = เข้า · +1 = ออก/เลีย (plus เท่านั้น, best-effort) | 1 | yes | 0 |
m_teeth | none | โชว์ฟัน (เปิดริมฝีปาก) | 0 = ปกติ · +1 = โชว์ฟัน (plus เท่านั้น) | 1 | yes | 0 |
เมื่อ mouthing ทำงาน morph viseme_* ของศิลปินยังเป็นรูปหลัก และ m_*
เป็น delta ที่มีขอบเขตจากรูปนั้น. ส่วนผสม viseme ที่ normalize แล้วให้ baseline โดยน้ำหนัก
b; ตอนถอดรหัสจะส่งเฉพาะ ไปยังช่องปาก ARKit.
ดังนั้นค่า authored เป็นศูนย์จะไม่เปลี่ยนรูปปากของศิลปิน, การปรับทิศเดียวกันใช้ได้เฉพาะช่วงที่เหลือ,
และการปรับทิศตรงข้ามหักล้างกันได้. ตารางเริ่มต้นแบบระมัดระวังคือ viseme_aa → m_jaw +0.7
และ viseme_PP → m_jaw −0.7, m_press +0.7; คู่อื่นมี baseline เป็นศูนย์จนกว่าจะปรับจูน.
4.8.เงื่อนไขเสริม (hyper conditions)
ช่องเงื่อนไข/ไม่ต่อเนื่องที่พกไปพร้อมเวกเตอร์ต่อเนื่อง — ดู §3.4. (เปลี่ยนชื่อหมวดจาก "4.cat ช่องเชิงหมวดหมู่" ในร่างก่อนเผยแพร่; id เดิมทั้งหมด.)
| รหัส | โดเมน | กลุ่มเจ้าของ | ขั้นที่ใช้ | ความหมาย |
|---|---|---|---|---|
eye_lookat | enum | face | ถอดรหัส | เป้าหมายการมอง (มองหน้าตรง / มองมือซ้าย / มองมือขวา / ชำเลืองซ้าย ขวา บน ล่าง). |
viseme | แมปกระจาย viseme_* → 0…1 | mouth | ถอดรหัส | การขยับปาก: แมปกระจาย (sparse map) จาก id รูปปาก viseme_* ไปยังสัดส่วนของรูปนั้น เช่น {viseme_PP: 0.7, viseme_aa: 0.3} — id ที่ไม่ปรากฏมีค่าเป็น 0, {} คือไม่ขยับปาก และผลรวมของสัดส่วนต้องไม่เกิน 1. รูปปากหลายรูปทำงานพร้อมกันได้ (แต่ละ id เป็นช่อง morph ของตัวเอง ตอนถอดรหัสจึงกำหนดค่าสัดส่วนลงช่องนั้นตรง ๆ) และเพราะค่าเป็นแบบต่อเนื่อง คีย์ปากสองคีย์จึงไล่ข้ามกัน (crossfade) ตอน interpolate แทนที่จะกระโดด. แมปที่เข้ามาเกินเพดานจะถูกตัดค่าทีละรายการให้ไม่เกิน 1 ก่อน แล้วหารลงให้ผลรวมเป็น 1. |
contact | จุด mover → จุด target | arm (ฝั่ง mover) | การปรับปรุงผลลัพธ์ | จุด mover ไปสัมผัสจุด target บนร่างที่ถอดรหัสสมบูรณ์แล้ว; target ไม่ขยับ (§3.4). |
anchor | จุดอ้างอิงต่อข้างแขน | arm (ต่อข้าง) | การปรับปรุงผลลัพธ์ | แขนข้างที่ anchor วัดตำแหน่งจากจุดของตนแทนคอ; แขนที่คีย์ไม่มี anchor ไม่ขยับ; ฝั่งที่ contact ทำงาน contact ชนะ (§3.4). |