Theppitak's blog

My personal blog.

31 พฤษภาคม 2550

Stem Hinting

ขณะที่ rasterizer พยายามปรับ spline ให้ลงล็อคกับตารางจุดจอภาพนั้น จะต้องมีการขยับจุดต่าง ๆ ซึ่งการ hint เกี่ยวกับความกว้าง stem จะช่วยรักษาระยะห่างระหว่างจุดที่ควรจะไปด้วยกันให้คงที่ เพื่อให้เส้นหนาสม่ำเสมอ hint ที่เกี่ยวกับ stem มีสองส่วน คือ global hint กับ hint ใน glyph

global hint อยู่ใน PS Private ได้แก่ StdHW, StdVW, StemSnapH, StemSnapV โดยแต่ละตัวมีความหมายดังนี้:

  • StdHW และ StdVW หมายถึงความกว้างปกติของเส้นนอนและเส้นตั้งของทั้งฟอนต์ เวลา rasterize ฟอนต์ที่ขนาดเล็ก ๆ ซึ่งความหนาที่ต่างกันเพียงหนึ่งจุดจะมีผลมากนั้น ถ้า stem ไหนความกว้างต่างจากค่าความกว้างปกติเพียงเล็กน้อย ก็จะตบให้เท่าค่าปกตินี้
  • StemSnapH และ StemSnapV เป็นแอร์เรย์ของความกว้าง stem แนวนอนและแนวตั้งที่ปรากฏมากในฟอนต์ตามลำดับ ค่า snap เหล่านี้ จะใช้ตบความกว้าง stem ให้ลงล็อคที่ค่าเหล่านี้ในทำนองเดียวกัน

ส่วน hint ที่อยู่ใน glyph นั้น ก็มีสองชนิด คือ hstem (HHint) และ vstem (VHint) สำหรับกำกับความกว้างของเส้นแนวนอนและแนวตั้งแต่ละเส้นใน glyph ตามลำดับ ซึ่งการใส่ hint เหล่านี้ จะเป็นการกำกับเส้นแต่ละเส้น ว่าตรงไหนเป็น stem บ้าง พร้อมทั้งความกว้างด้วย

ในการปรับตำแหน่ง spline ให้ลงล็อค rasterizer จะอาศัยข้อมูล hstem และ vstem ในการรักษาความกว้างของเส้น และในโพสต์สคริปต์รุ่นใหม่ ๆ จะมีการตบเส้นด้วย global hint ที่กล่าวถึงข้างต้นนี้ด้วย

วิธีการเพิ่มและปรับแต่ง hint ด้วย fontforge อ่านได้จาก คู่มือ อนึ่ง ถ้าจะอ่านข้อมูลอ้างอิง เรื่อง hstem และ vstem ใน Adobe Type 1 Font Format จะอยู่ในบทที่ 6 เรื่อง CharStrings Dictionary

ทิ้งท้ายด้วยเกร็ดนิดหนึ่ง เกี่ยวกับการ hint ฟอนต์ไทยบางฟอนต์ ที่มีลักษณะหัวพยัญชนะล้ำเข้าไปในเส้นตั้ง เช่น Garuda ซึ่งหากสั่ง Autohint แล้ว fontforge จะกำกับ vstem ทั้งเส้นตั้งและด้านในของหัว โดยใช้ hint mask กำกับเพื่อแยก vstem ที่ซ้อนเหลื่อมกัน (สังเกตวงกลมที่วงรอบจุดควบคุม บ่งบอกว่ามี hint mask กำกับ) ผลคือ เส้นขวาสุดของ ว แหวน ในตัวอย่างนี้ จุดบนกับจุดล่างถูก hint แยกกัน ทำให้ในบางขนาด เส้นนี้กลับไม่อยู่ในแนวดิ่ง ทำให้หัวเลอะ ดังตัวอย่าง Garuda Bold ที่ 18 pt:

Garuda Bold witn auto-hinted vstem -- font design Garuda Bold witn auto-hinted vstem -- rendered at 18 pt

เมื่อตัด hint ที่ overlap นั้นออก เส้นก็กลับมาอยู่ในแนวดิ่งอีกครั้ง:

Garuda Bold with head vstem removed -- font design Garuda Bold with head vstem removed -- rendered at 18 pt

เรื่องนี้อาจเป็นเรื่องได้อย่างเสียอย่าง เพราะการได้เส้นที่ตั้งตรงมา ก็แลกกับการที่หัวพยัญชนะบางตัวไม่กลมดิก ซึ่งเรื่องนี้คงไม่มีสูตรสำเร็จตายตัว ต้องพิจารณาเป็นรายฟอนต์ไป ผ่านการทดลองฟอนต์ที่หลาย ๆ ขนาด แล้วหาวิธี hint ที่ดีที่สุดสำหรับฟอนต์นั้น ๆ

ป้ายกำกับ:

0 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem