เจาะลึกเบื้องหลัง: เทคนิคการแก้ปัญหาสระลอยและระบบวรรณยุกต์ไทยใน Game Engine
หนึ่งในความท้าทายที่ยิ่งใหญ่ที่สุดของนักม็อดเกมภาษาไทย คือการที่ตัวเกมต่างประเทศส่วนใหญ่ถูกออกแบบมาสำหรับตัวอักษรละติน (Latin) หรือตัวอักษรความกว้างคงที่แบบเอเชียตะวันออก (CJK) ซึ่งมีการจัดวางอักขระในแนวนอนระดับเดียว แต่ภาษาไทยเป็นภาษาที่มี 4 ระดับความสูง (Four Vertical Levels) ประกอบด้วย สระล่าง, พยัญชนะหลัก, สระบน, และวรรณยุกต์
1. ต้นเหตุของปัญหาสระลอยและวรรณยุกต์จม
เมื่อเอนจินเกมไม่มีระบบคอมโพสิตอักษรแบบ OpenType Shaping (GSUB / GPOS) ที่สมบูรณ์แบบสำหรับภาษาไทย สิ่งที่เกิดขึ้นคือ:
- สระลอย (Floating Vowels): วรรณยุกต์ (เอก, โท, ตรี, จัตวา) ลอยสูงเกินไปจนชนกับบรรทัดด้านบน หรือลอยห่างจากพยัญชนะอย่างผิดธรรมชาติ
- วรรณยุกต์จม (Colliding Tone Marks): เมื่อมีทั้งสระบนและวรรณยุกต์ซ้อนกัน เช่น คำว่า "ที่", "น้ำ", "ขึ้น" วรรณยุกต์จะตกลงมาทับซ้อนกับสระบนจนอ่านไม่ออก
- หางพยัญชนะแทงทะลุ (Ascender Clashing): พยัญชนะที่มีหางชี้ขึ้น เช่น ป, ผ, ฝ, ฟ จะแทงทะลุเข้าไปในสระบนหรือวรรณยุกต์
• ระดับที่ 1 (ล่างสุด): ุ, ู, ฺ
• ระดับที่ 2 (ระดับฐาน): ก, ข, ค, ... ง
• ระดับที่ 3 (สระบน): ิ, ี, ึ, ื, ั, ็
• ระดับที่ 4 (วรรณยุกต์บนสุด): ่, ้, ๊, ๋, ์
2. แนวทางแก้ปัญหาด้วยระบบ PUA (Private Use Area)
เพื่อแก้ปัญหานี้โดยไม่ต้องแก้โค้ดแกนกลางของเอนจินเกม ทีมงาน NodNuat Translator ได้นำเทคนิค Unicode Private Use Area (PUA) ร่วมกับการปรับจูนระดับพิกเซลมาประยุกต์ใช้:
- การสร้าง Glyph วรรณยุกต์ระดับลดรูป (Shifted Down Glyphs): ทำการสร้างตัวอักษรจำลองในโซน PUA (รหัส Unicode
0xF700 – 0xF71A) ให้มีระดับความสูงและตำแหน่ง X-offset แตกต่างกัน 3 ชุด:- ชุดวรรณยุกต์ระดับต่ำ (สำหรับวางบนพยัญชนะไม่มีสระบน เช่น "ก้า", "พ่อ")
- ชุดวรรณยุกต์ระดับสูง (สำหรับวางซ้อนบนสระบน เช่น "กิ๊ก", "ดื่ม")
- ชุดวรรณยุกต์เยื้องซ้าย (สำหรับพยัญชนะมีหาง เช่น "ป่า", "ฟื้น")
- การปรับจูนระดับพิกเซล (+160 Units Tuning): ในเอนจิน RE Engine (Capcom) เราพบว่าการดันระดับ Glyph ขึ้นไป +160 หน่วยในตาราง Ascent Metric ของ TrueType Font ช่วยขจัดปัญหาช่องว่างระหว่างบรรทัดและการทับซ้อนของกล่อง UI ได้อย่างหมดจด
- สคริปต์ประมวลผลข้อความล่วงหน้า (Pre-processing Shaper): ทุกประโยคก่อนแพ็คเข้าไฟล์ของเกมจะถูกส่งผ่านสคริปต์ตรวจจับพยัญชนะข้างเคียง และแทนที่รหัส Unicode มาตรฐานด้วยรหัส PUA ที่ปรับระดับแล้วโดยอัตโนมัติ
3. ผลลัพธ์ที่ได้และความสมบูรณ์แบบในตัวเกม
ด้วยเทคนิค PUA Font Engine นี้ ส่งผลให้เกมที่แปลโดย NodNuat Translator เช่น Dragon's Dogma 2, Ace Combat Series, S.T.A.L.K.E.R., และ Call of Duty แสดงผลตัวหนังสือภาษาไทยได้อย่างคมชัด ตัวอักษรเรียงตัวสวยงาม ไม่มีวรรณยุกต์ลอยหลุดบรรทัด และไม่กระทบต่อประสิทธิภาพ (FPS) ของตัวเกมแม้แต่น้อย