- อัลกอริทึม Slug สำหรับการเรนเดอร์ฟอนต์แบบ อิงเส้นโค้ง Bézier บน GPU ทำการ เรนเดอร์ข้อมูลเวกเตอร์โดยตรงโดยไม่ใช้เท็กซ์เจอร์ และถูกใช้งานในหลากหลายอุตสาหกรรม เช่น เกม, CAD, การตัดต่อวิดีโอ, อุปกรณ์การแพทย์ เป็นต้น
- ได้สละสิทธิ์ผูกขาดตั้งแต่วันที่ 2026/3/17 ทำให้ สิทธิบัตรถูกปล่อยสู่สาธารณสมบัติอย่างสมบูรณ์ และใครก็สามารถใช้งานได้อย่างเสรี
- เวอร์ชันล่าสุดได้ปรับปรุงประสิทธิภาพและประสิทธิผลของโค้ด ด้วย การนำ band split optimization และ supersampling ออก, การทำให้วิธีเรนเดอร์อีโมจิง่ายขึ้น เป็นต้น
- การเปลี่ยนแปลงที่ใหญ่ที่สุดคือฟีเจอร์ dynamic dilation ซึ่งคำนวณการขยายขอบเขตที่เหมาะสมที่สุดโดยอัตโนมัติตามขนาด glyph และมุมมอง
- ใคร ๆ ก็สามารถนำไปใช้งานได้อย่างอิสระผ่าน โค้ด shader อ้างอิงบน GitHub ที่เผยแพร่ภายใต้สัญญาอนุญาต MIT
การพัฒนาและการขยายการใช้งานของอัลกอริทึม Slug
- Slug ถูกพัฒนาขึ้นในช่วงฤดูใบไม้ร่วงปี 2016 และเผยแพร่เป็นบทความ JCGT ในปี 2017
- หลังจากนั้น Slug Library 1.0 ก็ถูกนำออกสู่เชิงพาณิชย์ และให้สิทธิ์ใช้งานแก่บริษัทหลัก ๆ เช่น Activision, Blizzard, Ubisoft, Adobe
- ถูกใช้งานในหลากหลายสาขา เช่น เกม, การทำภาพวิทยาศาสตร์, CAD, การตัดต่อวิดีโอ, อุปกรณ์การแพทย์, ท้องฟ้าจำลอง
- เดิมทีถูกพัฒนาขึ้นเพื่อการเรนเดอร์ข้อความคุณภาพสูงของ C4 Engine และภายหลังก็นำไปใช้กับ Radical Pie โปรแกรมแก้ไขสมการ ด้วย
- ใช้แสดงองค์ประกอบกราฟิกเวกเตอร์ เช่น สมการ, วงเล็บ, ลูกศร ให้มีความละเอียดสูง
วิวัฒนาการของวิธีการเรนเดอร์
- Slug ทำการ เรนเดอร์ข้อมูลเส้นโค้ง Bézier บน GPU โดยตรงโดยไม่ต้องใช้เท็กซ์เจอร์ที่คำนวณล่วงหน้า
- ทนทานต่อความคลาดเคลื่อนของ floating-point และคงไว้ทั้งเส้นโค้งที่เรียบลื่นและมุมที่คมชัด
- band split optimization เคยช่วยเพิ่มความเร็วใน glyph ขนาดใหญ่ แต่ในฟอนต์ขนาดเล็กกลับทำให้ประสิทธิภาพลดลงและเพิ่มความซับซ้อน จึงถูกนำออก
- ส่งผลให้ pixel shader เรียบง่ายขึ้น และ ขนาดเท็กซ์เจอร์ข้อมูล band ลดลงครึ่งหนึ่ง
- adaptive supersampling เคยถูกใช้เพื่อลด aliasing ในฟอนต์ขนาดเล็ก แต่เนื่องจากผลลัพธ์มีจำกัดและถูกแทนที่ด้วยเทคนิคการขยายแบบใหม่ จึงถูกนำออก
- การเรนเดอร์อีโมจิหลายสี ถูกเปลี่ยนเป็นวิธีที่จัดการแต่ละเลเยอร์เป็น glyph อิสระ ทำให้ประสิทธิภาพดีขึ้นและโค้ดง่ายขึ้น
Dynamic Dilation
- เดิมทีการขยายขอบเขตของ glyph ต้อง กำหนดระยะคงที่ด้วยตนเอง
- ในฟอนต์ขนาดเล็กจะเกิดการสูญเสียขอบเขต ส่วนในฟอนต์ขนาดใหญ่จะสิ้นเปลืองพื้นที่โดยไม่จำเป็น
- dynamic dilation จะถูก คำนวณอัตโนมัติใน vertex shader เพื่อกำหนดระยะขยายที่เหมาะสมที่สุดทุกครั้งที่เรนเดอร์ glyph
- ใช้ เมทริกซ์ MVP และขนาด viewport เพื่อขยายขอบเขตในระดับครึ่งพิกเซล
- สามารถใช้ระยะ dilation ที่ต่างกันในแต่ละ vertex ตามการเปลี่ยนแปลงของมุมมอง
- ในเชิงคณิตศาสตร์ จะได้มาจากสมการกำลังสองที่ใช้หาระยะ d ซึ่งทำให้ ตรงตามเงื่อนไขการขยายครึ่งพิกเซลใน viewport space
- คำตอบสุดท้ายอยู่ในรูป (d = \frac{s^3t \pm s^2\sqrt{u^2 + v^2}}{u^2 + v^2 - s^2t^2})
- เลือกเครื่องหมายบวกเพื่อให้เคลื่อนที่ไปทางด้านนอก
- เพื่อคงขนาดของ glyph เอาไว้ ยังมีการ ปรับแก้พิกัด em-space ด้วย และเก็บเมทริกซ์ Jacobian ผกผันไว้ในแต่ละ vertex
การยกเลิกสิทธิบัตรและการประกาศเปิดให้ใช้
- อัลกอริทึม Slug ได้รับ สิทธิบัตรสหรัฐฯ (US10373352B1) ในปี 2019 แต่ได้ สละสิทธิ์ผูกขาดที่เดิมมีถึงปี 2038 ตั้งแต่วันที่ 17 มีนาคม 2026
- ดำเนินการสละระยะเวลาคุ้มครองที่เหลือของสิทธิบัตรอย่างเป็นทางการผ่าน การยื่นแบบฟอร์ม SB/43 ต่อ USPTO และชำระค่าธรรมเนียม
- ด้วยเหตุนี้ ทุกคนจึงสามารถ นำอัลกอริทึม Slug ไปพัฒนาและใช้งานได้อย่างเสรี
- อนุญาตทั้งเพื่อวัตถุประสงค์เชิงพาณิชย์และไม่เชิงพาณิชย์ โดยไม่ต้องกังวลเรื่องการละเมิดทรัพย์สินทางปัญญา
- มีการเผยแพร่ GitHub repository (https://github.com/EricLengyel/Slug) เพื่อใช้อ้างอิงการพัฒนาจริง
- ให้ใช้งานภายใต้ สัญญาอนุญาต MIT และมีทั้ง pixel shader ที่ปรับปรุงจากบทความ JCGT รวมถึง vertex shader ที่มี dynamic dilation
ความสำคัญของ Slug
- Slug ได้กลายเป็น หนึ่งในตัวอย่างสำคัญของการเรนเดอร์ฟอนต์เวกเตอร์บน GPU
- ตลอด 10 ปีที่ผ่านมา มีการพัฒนาให้ดีขึ้นทั้งในด้าน ประสิทธิภาพ, ความเรียบง่าย, และคุณภาพ
- การปลดสิทธิบัตรทำให้เกิด โอกาสในการนำไปใช้และต่อยอดได้อย่างเสรีในอุตสาหกรรมโดยรวม
2 ความคิดเห็น
เป็นข่าวที่ยอดเยี่ยมมากครับ
ความเห็นจาก Hacker News
ตอนนี้เขานำมันไป อุทิศให้เป็นสมบัติสาธารณะ หลังผ่านไประยะหนึ่งแล้ว ถือเป็นเรื่องที่น่าขอบคุณมาก ถ้าวันหนึ่งได้ทำเทอร์มินัลอีมูเลเตอร์ขึ้นมา ก็อยากลองใช้อัลกอริทึมนี้เพราะเสน่ห์เชิงสุนทรียะของโค้ด
เป็น โปรแกรมแก้ไขสมการแบบมืออาชีพ สำหรับ Windows 10/11 ใช้ Slug เป็นเอนจินเรนเดอร์ และมีราคา 60 ดอลลาร์ น่าจะเป็นสิ่งที่เขาใช้ตอนเขียนหนังสือ FGED
ถึงอย่างนั้นก็เป็นทางเลือกแทน MathType ที่ยอดเยี่ยม และก็น่าประทับใจที่ รองรับการทำงานร่วมกับ OLE จึงแทรกลง Word ได้ดี
คิดว่าเป็นจุดสูงสุดของวิศวกรรมซอฟต์แวร์เลย ขอบคุณผู้เขียนที่บริจาคสิ่งนี้ให้เป็นสมบัติสาธารณะ
อยากให้มีกรณีแบบนี้มากขึ้น
อีกอย่าง สิทธิบัตร Loop-Blinn ของ Microsoft (สำหรับเส้นโค้งกำลังสาม) ก็กำลังจะหมดอายุในไม่ช้า ซึ่งอาจทำให้วงการการเรนเดอร์ข้อความเปลี่ยนไปมาก
ตอนนั้นใช้วิธีประมาณเส้นโค้งด้วยสามเหลี่ยม แต่ไม่รู้ว่าตอนนี้ยังเป็นแบบนั้นอยู่หรือเปล่า
วิธีแบบ texture atlas หรือ SDF ในอดีตดูเหมือนเป็นเพียงทางออกชั่วคราว และคุณภาพก็ลดลงเมื่อสเกลเปลี่ยน
พอ Slug ถูกเปิดให้ใช้งานแล้ว ก็หวังว่าไลบรารีหลักๆ หรือเกมเอนจินต่างๆ จะหันมาใช้ วิธีเรนเดอร์คุณภาพสูง กันมากขึ้น
ไม่รู้มาก่อนเลยว่าเขายังทำงานในสายนี้อย่างแข็งขันอยู่