บันทึกการเปลี่ยนแปลง IPL
ประวัติรุ่นของ IPL — Interpretable Pose Latent (ปริภูมิแฝงเชิงท่าทางที่ตีความได้) เรียงจากรุ่นล่าสุดก่อน. แต่ละรุ่นบันทึกสิ่งที่ เพิ่ม เปลี่ยน ชี้แจง และ ปรับถ้อยคำ พร้อมบรรทัด ความเข้ากันได้ ของเวกเตอร์ P (รูปแบบเวกเตอร์, id, ช่วงค่า, ค่าเริ่มต้น). ลิงก์หัวข้อชี้ไปยังข้อกำหนดฉบับปัจจุบัน IPL 1.1.2. หมายเลขรุ่นเป็นไปตามนโยบาย §8: ใน X.Y.Z หลัก X คือ การเปลี่ยนกระบวนทัศน์ หลัก Y คือ การเปลี่ยนแปลงหลัก และหลัก Z คือ การเปลี่ยนแปลงย่อย.
สายรุ่น: 1.0.0 → 1.0.1 → 1.1.0 (การเปลี่ยนแปลงหลัก: นำไวยากรณ์การประกอบเข้ามา) → 1.1.1 → 1.1.2 (ปัจจุบัน).
1.1.2 — 15 ตุลาคม พ.ศ. 2569
การเปลี่ยนแปลงย่อย. ฟังก์ชันผู้ใช้ทำให้ไวยากรณ์การประกอบครบถ้วน; ปรับปรุงนิยามแกนแขนทั้งสามแกน (หน่วย L = 2 · r · d: X อิงความยาวมือ, Y อิงความยาวช่วงตัว, Z อิงความยาวแขน); เอกสารเปลี่ยนชื่อ เปลี่ยนสัญลักษณ์ และใช้สัญญาอนุญาตสองส่วน พร้อมระบุนโยบายหมายเลขรุ่นใหม่เป็น X.Y.Z. แทนที่ 1.1.1.
เพิ่ม
- ฟังก์ชันผู้ใช้
%name(args)(§7.8) — รายการในคลังคำ{name, arity, rules}ที่ถูกขยายเป็นข้อความสคริปต์ในขั้นก่อนแยกโทเค็น ไวยากรณ์โทเค็นจึงไม่มี%เลย. ชื่อตามแบบ[A-Za-z_][A-Za-z0-9_]*ยาวไม่เกิน 64 อักขระ ไม่ซ้ำกันโดยไม่สนตัวพิมพ์; กฎ{pattern, template}เรียงลำดับ 1–200 ข้อ ข้อแรกที่ตรงชนะ; แม่แบบใช้\1–\9,\{1}–\{9}และ\\; arity 0–9 เป็นเพียงข้อมูลกำกับ. ขีดจำกัด: 32 รอบ, 500 การแทนที่ต่อสคริปต์, pattern ≤ 2000 และ template ≤ 4000 อักขระ, ชุดย่อย regex ที่พกพาได้ (ไม่มี backreference, lookaround หรือกลุ่มมีชื่อ; ใช้ได้เฉพาะ(?:).usercallและidentเข้าสู่ EBNF ใน §7.3 ในฐานะขั้นก่อนแยกโทเค็น. - ข้อวินิจฉัยของฟังก์ชันผู้ใช้ (§7.9) — ข้อผิดพลาดขวาง
unknown user function,no rule matches,bad pattern,expansion too deep,expanded too many items. - ดัชนีโครงสร้าง (§7.10) — แถว
user-functionตั้งแต่ 1.1.2 พร้อมตัวอย่าง%num(123) | YEAR.
เปลี่ยน
- ปรับปรุงนิยามแกนแขน (§3.2, §4.1) — ปรับปรุงนิยามของแกนแขนทั้งสามแกน X, Y และ Z (
a_hand_x,a_hand_y,a_hand_z) พร้อมกัน: หน่วยแกน X = 2 · r · ความยาวมือ (ข้อมือถึงปลายนิ้วกลาง), หน่วยแกน Y = 2 · r · ความยาวช่วงตัว (คอถึงสะดือ), หน่วยแกน Z = 2 · r · ความยาวแขน (ไหล่ถึงข้อมือ ขณะเหยียดแขน). แต่ละแกนใช้ระยะอ้างอิงdของตนเองที่วัดระหว่างจุดอ้างอิงร่างกายที่คาลิเบรตแล้วในท่าอ้างอิงคงที่: X =wrist_r→middle_tip_r(มือเปิดในท่า bind), Y =neck→navel(ท่า bind), Z =shoulder_r→wrist_r(แขนเหยียดเต็มที่). หน่วยกายภาพต่อแกนคือL = 2 · r · dโดยrเป็นอัตราส่วนอ้างอิงคงที่ต่อแกนที่นิยามโดยอวาตาร์อ้างอิงทางการ (based) จึงคงสเกลตัวเลขเดิมไว้. ต้องไม่ (MUST NOT) วัดระยะใหม่จากท่าที่กำลังเคลื่อนไหว; ระยะอ้างอิงฝั่งขวากำหนดหน่วยร่วมของแขนทั้งสองข้าง. ความกว้างไหล่เพียงอย่างเดียวไม่กำหนดตำแหน่งแขนอีกต่อไป. - ความสอดคล้อง (§6) — ผู้บริโภคที่สอดคล้องต้อง (MUST) ใช้นิยามแกนอ้างอิงคงที่และการทำให้เป็นมาตรฐานตาม §4.1; ผู้บริโภคที่ไม่มีค่าวัดอ้างอิงที่ใช้ได้ควร (SHOULD) ถอยไปใช้หน่วยความกว้างไหล่แบบเดิมสำหรับแกนนั้นและรายงานว่าขาดการคาลิเบรต (ไม่นับเป็นความสอดคล้องของแกนที่คาลิเบรตสำหรับอวาตาร์นั้น).
- การกำหนดเวอร์ชัน (§8) — ระบุใหม่เป็นนโยบาย X.Y.Z ของ IPL: X = การเปลี่ยนกระบวนทัศน์ (รวมการแก้ทะเบียนแบบไม่เข้ากันทุกกรณี: ลบแกน นำ id กลับมาใช้ซ้ำ หรือนิยามความหมายหรือช่วงค่าใหม่), Y = การเปลี่ยนแปลงหลัก (แบบเพิ่มเติม: แกนใหม่ที่มีค่าเริ่มต้น หัวข้อข้อบังคับใหม่), Z = การเปลี่ยนแปลงย่อย; ไม่นำ id กลับมาใช้ซ้ำภายใน X เดียวกัน; ทุกรุ่นบันทึก แทนที่ และ ความเข้ากันได้. การปรับปรุงนิยามแกนแขนในรุ่นนี้บันทึกไว้เป็นการเปลี่ยนแปลงย่อยที่คงรูปแบบเวกเตอร์, id, ช่วงค่า และค่าเริ่มต้น แม้ตำแหน่งที่เรนเดอร์อาจต่างไป: ความเข้ากันได้ของข้อมูลจัดเก็บไม่ได้หมายความว่าเรขาคณิตจะเหมือนเดิม.
ชี้แจง
- บทนำ §7: ป้าย ตั้งแต่ 1.1.0 / 1.1.1 / 1.1.2 บนโครงสร้างไวยากรณ์ระบุระดับที่โครงสร้างนั้นเข้าสู่ไวยากรณ์; ทั้งสามระดับเป็นส่วนหนึ่งของเอกสารฉบับนี้.
- §7.3: หลังการขยาย สคริปต์ไม่มีการเรียก
%เหลืออยู่; EBNF ทำเครื่องหมายระดับที่เข้ามา (1.1.1,1.1.2, pre-pass). - แก้ถ้อยคำทะเบียนและแบบจำลองให้ตรงกับการใช้งานจริง: §4.3 ระบุขั้ว
curl/foldของนิ้วใหม่เป็น −1 = แอ่นกลับ (hyperextended), 0 = เหยียดตรง, +1 = งอเต็มที่ (0 เป็นค่าปริยายเหยียดตรงมาตลอด; ถ้อยคำเดิมอ่านได้ว่า −1 = เหยียด); §4.8 แจกแจงค่าของeye_lookat; §1 ขอบเขตระบุลำตัว; §3.1 ระบุจำนวนรวม 71 มิติ; แผนภาพ §3.4 แสดงcontactและanchor; แก้value_conventionในทะเบียน JSON; §4.2 ใช้ชื่อกลุ่มwว่า การหันฝ่ามือ ตามเอกสารแนบ 1.0.0 พร้อมระบุกฎข้อบังคับการคำนวณwคืน.
ปรับถ้อยคำ
- ชื่อ: มาตรฐานใช้ชื่อ IPL — Interpretable Pose Latent (ปริภูมิแฝงเชิงท่าทางที่ตีความได้) (ส่วนหน้า, §9) ตรงกับเอกสารแนบท้าย TOR ระยะที่ 1.
- สัญลักษณ์: เวกเตอร์พารามิเตอร์เขียนด้วยอักษรโรมันตัวตรงตัวหนา P ตลอดทั้งเอกสาร (ส่วนหน้า, §2, §3, §9); ฉบับก่อนหน้าใช้อักษรกรีก pi ตัวใหญ่. วัตถุเดียวกัน เปลี่ยนเพียงสัญกรณ์.
- สัญญาอนุญาต: ข้อกำหนดเป็นข้อกำหนดแบบเปิด นำไปพัฒนา เข้ารหัส ถอดรหัส หรือแลกเปลี่ยนได้โดยไม่ต้องขออนุญาตและไม่มีค่าธรรมเนียม; เนื้อความของเอกสาร เว็บไซต์ ipl.signthai.com และฉบับ .docx เป็นลิขสิทธิ์ © 2026 ทีมวิจัยเทคโนโลยีที่ทุกคนเข้าถึงและสิ่งอำนวยความสะดวก (AAT) กลุ่มนวัตกรรมแพลตฟอร์มดิจิทัลสุขภาพการแพทย์ (DHCB) สำนักงานพัฒนาวิทยาศาสตร์และเทคโนโลยีแห่งชาติ (สวทช.) สงวนลิขสิทธิ์ทั้งหมด (ส่วนหน้า, สัญญาอนุญาต).
- §10 ชี้มายังหน้าบันทึกการเปลี่ยนแปลงนี้แทนการบรรจุประวัติไว้ในตัวเอกสาร.
ความเข้ากันได้: additive. รูปแบบเวกเตอร์, id, ช่วงค่า และค่าเริ่มต้นไม่เปลี่ยน; ชุดเงื่อนไขเสริมไม่เปลี่ยน. ตำแหน่งแขนที่เรนเดอร์อาจต่างไปบนอวาตาร์ที่สัดส่วนที่คาลิเบรตต่างจากอวาตาร์อ้างอิง. สคริปต์ที่ใช้ได้ใน 1.1.1 ประกอบได้ผลเหมือนเดิม; % กลายเป็นอักขระสงวน.
1.1.1 — 8 ตุลาคม พ.ศ. 2569
การเปลี่ยนแปลงย่อย. ฟังก์ชันพิเศษและตัวดำเนินการเข้าสู่ไวยากรณ์การประกอบ และการขยับปากกลายเป็นแบบต่อเนื่อง: เงื่อนไขเสริม viseme เปลี่ยนเป็นแมปกระจายเพื่อให้คีย์ปากไล่ข้ามกัน (crossfade). แทนที่ 1.1.0.
เพิ่ม
- บล็อกจุดยึด
$anchor(site){A | B}(§7.7.1) — ประทับเงื่อนไขเสริมanchor(จาก 1.0.1) ลงบนคีย์เฟรมแขนทุกคีย์ที่กลอสในบล็อกเขียนเอง ({l: {site}}/{r: {site}});site∈neck,forehead,mouth,navel,shoulder_l,shoulder_r;neckไม่ประทับอะไร; กลอสfixed_positionและกลุ่มย่อยที่ถูกเติมด้วย!ไม่ถูกประทับ; ใช้ร่วมกับcontactได้โดย contact ยังมีลำดับความสำคัญสูงกว่า. - บล็อกสะท้อน
$mirror(speed,label){A | B}(§7.7.2) — สลับข้างแทร็กและมิติ_l/_r, กลับเครื่องหมายh_yaw,h_roll,b_twist,b_leanและสลับข้างของ eye look-at,contactและanchor; สะท้อนสองครั้งได้ผลเดิม; รับเนื้อบล็อกเดียวเท่านั้น. - ทุ่น
$buoy(speed,label){primary}{secondary}(§7.7.3) — ชุดหลักเล่นตามที่เขียนโดยสมาชิกทุกตัวถือเป็น!; ชุดรองเล่นแบบสะท้อนเต็ม และบนกลุ่มย่อยที่สมาชิกชุดรองไม่ได้ขับ ค่าคีย์เฟรมสุดท้ายของชุดหลักจะถูกคงไว้. - ท่าผสม
$compound(speed,label){P}{S}และรูปย่อP ; S(§7.7.4) — รายการเดียวที่ประกอบจากท่าหลักและท่ารอง; มือเป้าหมาย = ข้างเด่นของท่าหลัก (left_dominant) หรือข้างตรงข้ามเมื่อSเป็นบล็อก$mirror; แทร็กนิ้วของSบนมือเป้าหมายแทนที่ของPส่วนกลุ่มย่อยอื่นใช้เฉพาะที่Pไม่ได้ขับ; ทั้งคู่ยืดเวลาให้เท่ากับตัวที่ยาวกว่า; ซ้อนได้ไม่เกิน 32 ชั้น (compound-limit); กฎตัวถูกดำเนินการรูปปาก พร้อมviseme-too-shortและcompound-noop. - รูปปาก
$viseme(word),$viseme(word,speed)(§7.7.5) — รายการเฉพาะปากที่สร้างจากอักษรไทยหรือคำไทยถอดอักษรโรมัน พกเฉพาะเงื่อนไขเสริมviseme; แบ่งเป็นช่วงด้วยช่องว่างและ-; ละวรรณยุกต์;ๆซ้ำช่วงก่อนหน้า; ขีดจำกัด 512 code point และ 128 พยางค์ (viseme-limit); ข้อวินิจฉัยviseme-guessed/viseme-incomplete(ไม่เกิดพร้อมกัน). - การเชื่อมด้วยช่องว่างต่ำสุด
A || B(§7.7.6) —Bต่อจากAด้วยช่องว่างต่ำสุดmของการประกอบ โดยข้ามการปรับตามระยะและกฎการสะกด;Bต้องเป็นกลอสหรือโครงสร้างบล็อก;||ผิดที่เป็นข้อผิดพลาด. - การเติมท่าพัก
NAME!(§7.7.7) — กลุ่มย่อยทุกกลุ่มที่กลอสไม่ได้ขับถูกใส่คีย์ท่าพักที่เฟรมแรกและเฟรมสุดท้าย พร้อมคีย์ท่าพักเพิ่มอีกหนึ่งคีย์ก่อนrampInเฟรมและหลังrampOutเฟรม (ค่าเริ่มต้นอย่างละ 6) ภายในหน่วยคำบรรยายเดียวกัน;$shiftและ$anchorข้ามกลุ่มย่อยที่ถูกเติม;!เป็นคำต่อท้ายของกลอสเท่านั้น. - อักขระสงวน
; { } !และตัวดำเนินการท่าผสม;(§7.2); คีย์เวิร์ดพื้นฐาน$anchor,$mirror,$buoy,$compound,$viseme(ตัวพิมพ์เล็ก สนตัวพิมพ์); กฎเนื้อบล็อก (§7.7): เครื่องหมาย เนื้อบล็อกว่าง หรือ||ในเนื้อบล็อกเป็นข้อผิดพลาด. - ข้อวินิจฉัย (§7.9) — ข้อผิดพลาดขวาง
bad mirror speed,bad buoy speed,bad compound speed,bad viseme args,bad viseme speed,reserved label,empty block,block member,block arity,unknown anchor site,compound operand,compound shorthand,compound-limit,viseme-limit,viseme unreadable,viseme-too-short,misplaced join; ข้อวินิจฉัยไม่ขวางviseme-guessed,viseme-incomplete,compound-noop. - ดัชนีโครงสร้าง (§7.10) — แถว
anchor,mirror,buoy,compound,viseme,min-gap-join,neutral-fillตั้งแต่ 1.1.1 พร้อมตัวอย่าง$anchor(mouth){EAT} || WATER! | $compound(1,caption){A}{B} | SIGN ; $viseme(sa-wat-dee).
เปลี่ยน
- โดเมนของ
viseme(§4.8) — จาก id รูปปากviseme_*หนึ่งตัวบวกความเข้ม 0…1 เป็นแมปกระจาย (sparse map) จาก idviseme_*ไปยังสัดส่วน เช่น{viseme_PP: 0.7, viseme_aa: 0.3}; id ที่ไม่ปรากฏมีค่า 0,{}คือไม่ขยับปาก, ผลรวมของสัดส่วนต้องไม่เกิน 1; รูปปากหลายรูปทำงานพร้อมกันได้ และเพราะค่าเป็นแบบต่อเนื่อง คีย์ปากสองคีย์จึงไล่ข้ามกัน (crossfade) ตอน interpolate แทนที่จะกระโดด; แมปที่เกินเพดานถูกตัดค่าทีละรายการแล้วหารลงให้ผลรวมเป็น 1. รูปแบบเดิม (id เดียว + ความเข้ม) คือแมปที่มีรายการเดียว. - เดลตาปากขณะขยับปาก (§4.7) — เมื่อมี viseme ทำงาน morph
viseme_*ของศิลปินยังเป็นรูปหลัก และm_*เป็นเดลตาที่มีขอบเขตจากรูปนั้น: ฐานโดยนัยbถ่วงน้ำหนักตามสัดส่วนของส่วนผสม viseme และการถอดรหัสส่งเพียงclamp(b + authored, −1, 1) − b; ค่าที่เขียนเป็นศูนย์ไม่กระทบ viseme ของศิลปิน. ตารางตั้งต้น:viseme_aa → m_jaw +0.7;viseme_PP → m_jaw −0.7, m_press +0.7; คู่อื่นมีค่าโดยนัยเป็นศูนย์จนกว่าจะปรับ. - เส้นเวลา (§7.5) —
$visemeนับเป็นรายการที่มีเวลา; ลำดับความสำคัญของช่องว่างเพิ่มmสำหรับรายการที่เชื่อมด้วย||. - EBNF (§7.3) —
itemเพิ่มรูปoperand ; operand,glossเพิ่ม!ต่อท้าย และเพิ่ม productionanchor,mirror,buoy,compound,cop,viseme,args,site.
ความเข้ากันได้: additive; P ไม่เปลี่ยน (ไม่เพิ่ม ลบ หรือนิยามแกนใหม่). สคริปต์ของ 1.1.0 ประกอบได้ผลเหมือนเดิม. ผู้บริโภคที่อ่านเงื่อนไขเสริม viseme ต้องรับรูปแบบแมป; แมปที่มีรายการเดียวให้ค่าเดียวกับ 1.1.0. เป็นการเปลี่ยนแปลงย่อย: สิ่งที่เพิ่มเป็นโครงสร้างตอนประกอบและการปรับเงื่อนไขเสริม ส่วนการถอดรหัสบริสุทธิ์ของ P ไม่ถูกแตะต้อง.
1.1.0 — 1 ตุลาคม พ.ศ. 2569
นำไวยากรณ์การประกอบเข้ามา. การเปลี่ยนแปลงหลัก และเป็นรุ่นที่เปิดสาย 1.1: ภาษาสคริปต์บรรทัดเดียวที่วางชุดคีย์เฟรมของ P ที่จัดเก็บไว้ — กลอสและการแสดงออก — ลงบนเส้นเวลา กลายเป็นส่วนที่เป็นข้อบังคับของเอกสาร IPL พร้อมโครงสร้างพื้นฐาน. เวกเตอร์ P เองไม่เปลี่ยน. แทนที่ 1.0.1.
เพิ่ม
- ไวยากรณ์การประกอบ §7 (§7) — หัวข้อข้อบังคับใหม่: §7.1 หลักการ (โครงสร้างทำได้เพียงวาง ปรับเวลา เลื่อน สะท้อน คง/เติม หรืออ้างอิงคีย์เฟรมที่มีอยู่; การประกอบเกิดตอนประกอบ; ตัวถอดรหัสไม่จำเป็นต้องแยกวิเคราะห์สคริปต์; ควร (SHOULD) เก็บสคริปต์ไว้คู่กับผลลัพธ์), คำศัพท์ คลังคำ, กลอส, กลุ่มย่อย (
a_l a_r w_l w_r g_l g_r h b f m), แฟล็กกลอส (draft,spelling,fixed_position,left_dominant), ท่าพัก และ เฟรม. - ข้อกำหนดเชิงศัพท์ (§7.2) — แยกโทเค็นด้วย
|ที่ความลึกวงเล็บ/ปีกกาเป็น 0; อักขระสงวน| ( ) [ ] # $ @; ไม่มีคอมเมนต์ การหลีก หรือการใส่เครื่องหมายคำพูด; ตัวเลขทศนิยมธรรมดา; อาร์กิวเมนต์ตามตำแหน่ง คั่นด้วยจุลภาค ละได้ทุกตัว โดยช่องlabelท้ายสุดรับข้อความที่เหลือ; ชื่อกลอสและการแสดงออกไม่สนตัวพิมพ์ คีย์เวิร์ดพื้นฐานเป็นตัวพิมพ์เล็ก. - สรุปไวยากรณ์ (§7.3) — EBNF เชิงข้อมูลสำหรับ
script,item,gloss,name,group,member,run,unit,spell,num4,pause,shift,reset,expr. - การแปลงชื่อ (§7.4) — จับคู่ตรงตัว; รูปแปร
NAME#varที่ถอยไปNAMEได้; ตระกูลรูปแปรแบบไม่ระบุที่สุ่มสมาชิกเท่า ๆ กันทุกครั้งที่ประกอบ (เลือกสมาชิกที่ไม่ใช่ร่างก่อน และคงชื่อเปล่าไว้เมื่อจัดเก็บ);unknown gloss/ambiguous gloss name; กฎเดียวกันสำหรับ@name; ชื่อแทน (alias) (หนึ่งช่วงไปยังกลอสหลัก) และ กลอสประกอบ (composed gloss) (เก็บสคริปต์ + คีย์ที่ประกอบแล้ว ไม่ต่อเป็นสายโซ่ ไม่ใช้ตระกูลรูปแปรแบบไม่ระบุ คีย์ถูกเลื่อนให้เริ่มที่เฟรม 0 การแสดงออกถูกอบลงเป็นclamp(pose ⊕ Σ αᵢ·expressionᵢ)บนh b f mและNAME!เติมจากค่าเริ่มต้นของทะเบียน). - เส้นเวลาและช่องว่างอัตโนมัติ (§7.5) — กลอสที่ความเร็ว
sกินเวลาmax(1, round(native / s))เฟรม; ระหว่างรายการที่มีเวลาและที่หัว/ท้าย ตัวประกอบแทรกgap = min(max(15, m), m + round(4·d))โดยm = max(1, round(minGap))(minGap เริ่มต้น 2) และdคือระยะท่าบนค่า P ที่ทำให้เป็นมาตรฐาน (ทิศข้อมือเทียบเป็น quaternion chord) วัดโดยมีการเลื่อนที่ทำงานอยู่; 3 เฟรมระหว่างกลอสspellingที่ติดกัน; ความยาวเส้นเวลาmax(2, end + 1). - โครงสร้างพื้นฐาน (§7.6): ลำดับ
A | B(§7.6.1); กลอสNAME,NAME(speed),NAME(speed,label)ความเร็ว > 0 เริ่มต้น 1 (§7.6.2); การหยุด$pause,$pause(N)โดย N ≥ 1 และ$pauseเปล่า = 15 เฟรม (§7.6.3); การเลื่อน$shift(x,y,z,twist)/$reset— ออฟเซ็ตแบบมีสถานะa_hand_x_l += x,a_hand_x_r −= x,a_hand_y/z += y/z,b_twist += twistแล้วหนีบ ข้ามกลอสfixed_position(§7.6.4); กลุ่ม[A | B](speed,gap,label)ช่องว่างคงที่เริ่มต้น 3 ไม่ซ้อนกัน (§7.6.5); ชุดสะกดนิ้วมือ$spell(x,y,z,twist,label){A | B | …}การเลื่อนเริ่มต้น (0.1, 0, 0, 0) ปรับสัดส่วน(N − 1 − i)/(N − 1)ต่อตัวอักษร และสถานะการเลื่อนเป็นศูนย์หลังบล็อก (§7.6.6); การแสดงออก@name(alpha,rampIn,rampOut),@none,@breakบนเลนอ้างอิง 3 เลน0 < α ≤ 1ไล่ค่าเริ่มต้น 6 เฟรม ใช้ตอนถอดรหัสเป็นการอ้างอิงบนh b f m(§7.6.7). - ข้อผิดพลาดและข้อวินิจฉัย (§7.9) — ชั้นข้อผิดพลาดขวางกับข้อวินิจฉัย;
unknown gloss,ambiguous gloss name,unknown expression,ambiguous expression name,bad gloss speed,bad group args,bad group gap,bad spell args,bad pause,bad shift,bad expression alpha,bad expression ramp,bad group,empty group,no nested groups,group member,expression lanes,unknown function,nothing to place,variation family in composed gloss,composed gloss chain. - ดัชนีโครงสร้างและตัวอย่าง (§7.10) — แถว
sequence,gloss,variation,alias-composed,auto-gap,pause,shift,group,spell,expressionตั้งแต่ 1.1.0; ตัวอย่าง$shift(0.3,0,0,0.2) | HELLO | MY NAME(0.75) | @smile(0.5) | $spell{ก | ข} | @none | $pause(15) | $reset. ดัชนีโครงสร้างเผยแพร่ในทะเบียน JSON ของแต่ละรุ่นด้วย.
ชี้แจง
- การประกอบไม่เพิ่มมิติปริภูมิแฝง ไม่เปลี่ยนทะเบียน (§4) และไม่นิยามมิติใหม่ (§7.1); ออฟเซ็ตจาก
$shiftใช้กับคีย์เฟรมที่ถูกวางเท่านั้น นิยามของ P ไม่เปลี่ยน (§7.6.4).
ความเข้ากันได้: additive; P ไม่เปลี่ยน — ไม่เพิ่ม ลบ หรือนิยามแกนใหม่; ชุดเงื่อนไขเสริมไม่เปลี่ยน (eye_lookat, viseme, contact, anchor). เวกเตอร์และตัวถอดรหัสของ 1.0.x ทุกตัวยังใช้ได้. เป็นการเปลี่ยนแปลงหลัก (ขยับหลัก Y) เพราะเอกสารได้ความสามารถเชิงข้อบังคับใหม่ที่มีกฎระดับ MUST ไม่ใช่เพราะเวกเตอร์เปลี่ยน.
1.0.1 — 16 กรกฎาคม พ.ศ. 2569
การเปลี่ยนแปลงย่อย. เพิ่มเงื่อนไขเสริม anchor. แทนที่ 1.0.0. การเพิ่มเงื่อนไขเสริมพกไปคู่กับ P โดยไม่เพิ่มแกน (นโยบายเจ้าของ, 2026-07-16; §8).
เพิ่ม
- เงื่อนไขเสริม
anchor(§3.4, §4.8) — เงื่อนไขของการปรับปรุงผลลัพธ์แยกต่อข้างแขน{l?: {site}, r?: {site}}บนจุดอ้างอิงร่างกาย: ตำแหน่งแขน (a_hand_*) วัดจากจุดนั้นแทนคอ. แต่ละรายการอยู่บนคีย์เฟรมของแขนข้างตัวเอง; แขนที่คีย์เฟรมไม่มี anchor จะไม่ถูกขยับ. แก้บนร่างที่ถอดรหัสสมบูรณ์แล้วโดยเลื่อนเป้าแขนข้างที่ anchor ด้วยเดลตาโลก site − neck บนริกที่โพสแล้วและแก้ใหม่; ลำตัวต้อง (MUST NOT) ไม่ขยับ. จุดที่ใช้ได้forehead,mouth,navel,shoulder_l,shoulder_r;neckเป็นค่าเริ่มต้นและไม่มีผล; จุดบนมือใช้ไม่ได้. ลำดับความสำคัญcontact>anchorบนฝั่ง mover ของ contact; จุดที่ถอดไม่ได้ให้ถอยกลับไปวัดจากคอ. - ความสอดคล้อง (§6) — ผู้บริโภคที่รองรับ
anchorต้อง (MUST) แก้ในขั้นการปรับปรุงผลลัพธ์แยกต่อข้างแขน ต้องให้contactมีลำดับความสำคัญบนฝั่ง mover ต้องไม่แก้ไข P และถอยกลับไปวัดจากคอเมื่อจุดถอดไม่ได้.
เปลี่ยน
- นโยบายการกำหนดเวอร์ชัน (§8) — หลักต่ำสุดครอบคลุมการเพิ่มเงื่อนไขเสริมอย่างชัดเจน: เงื่อนไขเสริมพกไปคู่กับ P โดยไม่เพิ่มแกน เวกเตอร์เดิมและตัวถอดรหัสปริภูมิแฝงบริสุทธิ์จึงไม่กระทบ.
ความเข้ากันได้: additive; P ไม่เปลี่ยน. ชุดเงื่อนไขเสริม: eye_lookat, viseme, contact, anchor.
1.0.0 — มิถุนายน พ.ศ. 2569
รุ่นเผยแพร่สาธารณะรุ่นแรก ส่งมอบเป็นเอกสารแนบท้ายนิยาม IPL ของ TOR ระยะที่ 1. ไม่แทนที่รุ่นใด. รุ่นฐาน (baseline).
เพิ่ม
- แบบจำลองการแทนค่า (§3) — เวกเตอร์พารามิเตอร์แบบแบน มีชื่อ ทำให้เป็นมาตรฐาน และไม่ผูกกับริก แบ่งเป็นกลุ่มต่อเนื่องเจ็ดกลุ่ม
a w g h b f m(แขน การหันฝ่ามือ นิ้วมือ ศีรษะ ลำตัว ใบหน้า ปาก) กลุ่มที่มีข้างเป็นคู่_l/_r. - ข้อกำหนดของค่า (§3.2) — ทุกมิติต่อเนื่องอยู่ใน [−1, 1]; bipolar
real = n · max, unipolar(n+1)/2 · max, circular เก็บองศาและวนที่max; กรอบร่างกายยึดคอแบบมือขวา (+x = ขวาของร่าง, +y = ขึ้น, +z = เข้าหาผู้ชม); ซ้าย-ขวามีนัยสำคัญ แกนแบบ x กลับเครื่องหมายสำหรับข้างขวาตอนถอดรหัส. - ท่าทาง ⊕ การแสดงออก (§3.3) — ชั้นการแสดงออกแบบบวกบนกลุ่มที่ใช้ใน latent อารมณ์ได้
h b f m,effective = clamp(pose ⊕ α · expression). - เงื่อนไขเสริม (§3.4, §4.8) —
eye_lookatและvisemeเป็นเงื่อนไขตอนถอดรหัส และcontact{mover, target}เป็นเงื่อนไขของการปรับปรุงผลลัพธ์ที่แก้บนร่างที่ถอดรหัสสมบูรณ์แล้ว บนชุดจุดอ้างอิงร่างกายคงที่ 32 จุด (neck,navel,forehead,mouthและต่อข้างshoulder,elbow,wrist,palm,{thumb,index,middle,ring,pinky}_{base,tip}) โดยออฟเซ็ตของจุดคาลิเบรตต่อริก; mover ต้องเป็นจุดบนมือ; คีย์เฟรมหนึ่งมี contact ได้ไม่เกินหนึ่งช่อง. - ทะเบียนพารามิเตอร์ (§4) — ตารางข้อบังคับ id / side / นิยาม / ขั้ว / dof / ค่าเริ่มต้น ของทุกมิติใน
a w g h b f m. - ข้อกำหนดการเข้ารหัส (§5) — ลำดับทะเบียนเป็นลำดับการจัดเก็บมาตรฐาน; การเข้ารหัส JSON แบบ
id → value; ละเลย id ที่ไม่รู้จัก; มิติต่อเนื่อง interpolate แยกกัน เงื่อนไขเสริมคงค่า; มิติที่ขาดใช้ค่าเริ่มต้นของทะเบียน. - ความสอดคล้อง (§6) — ผู้ผลิตและผู้บริโภคที่สอดคล้อง; ผู้บริโภคอาจ (MAY) ละเลยเงื่อนไขเสริม และผู้ที่รองรับ
contactต้องแก้ในขั้นการปรับปรุงผลลัพธ์โดยไม่ขยับฝั่ง target หรือลำตัว. - การกำหนดเวอร์ชัน (§8) — หมายเลขรุ่นสามหลัก: หลักแรกเมื่อลบแกน นำ id กลับมาใช้ซ้ำ นิยามแกนใหม่ หรือเปลี่ยนแบบจำลองกลุ่ม (ทำให้เวกเตอร์เดิมใช้ไม่ได้); หลักที่สองเมื่อเพิ่มแกน; หลักที่สามสำหรับการแก้ถ้อยคำ. (ระบุใหม่เป็นนโยบาย X.Y.Z การเปลี่ยนกระบวนทัศน์ / การเปลี่ยนแปลงหลัก / การเปลี่ยนแปลงย่อย ใน 1.1.2.)
- ตัวระบุ (§9) — คำในเนื้อความ IPL, เนมสเปซ
signthai.com/ipl, media typeapplication/vnd.ipl+json(เสนอ).
ความเข้ากันได้: baseline. ร่างก่อนเผยแพร่ภายใน 1.0/1.1 ถูกรวบเข้าเป็นรุ่นนี้; 1.0.0 ที่เผยแพร่รวมเงื่อนไขเสริม (eye_lookat, viseme, contact) ไว้แล้ว.