นักพัฒนาที่สร้างฟอนต์พิกเซล 175 แบบด้วย Rust
(chevyray.dev)- 175 Pixel Font Megapack ที่เปิดตัวในเดือนธันวาคม 2023 เป็นโปรเจกต์ฟอนต์พิกเซลที่ใช้ toolchain Rust ที่สร้างเองในการสร้างฟอนต์ ทดสอบคุณภาพ และจัดจำหน่าย
- แพ็กก่อนหน้ามีฟอนต์ 12 แบบในปี 2016 และ 40 แบบในปี 2018 ส่วนแพ็กใหม่นี้เริ่มต้นด้วยเป้าหมายที่จะยกระดับ คุณภาพ·สไตล์·การรองรับภาษา·ระบบอัตโนมัติในการจัดจำหน่าย ไปพร้อมกัน
- ฟอนต์ใหม่ก้าวข้ามข้อจำกัดเดิมที่รองรับเฉพาะ ASCII โดยรองรับตัวอักษรละตินเสริม 176 ตัวสำหรับ EFIGS แต่ตัดภาษาเอเชียและตัวอักษรที่ไม่ใช่ละตินออกไปเนื่องจากปัญหาด้านคุณภาพและเวลาการผลิต
- เครื่องมือ Rust ชื่อ pifo สร้างเส้นขอบ glyph, kerning อัตโนมัติ, TTF, tilesheet และ texture atlas แบบแพ็ก จาก PNG tilesheet และการตั้งค่า TOML และประมวลผลฟอนต์ทั้ง 175 แบบได้ภายในไม่กี่วินาที
- ภาพตัวอย่างขนาดใหญ่, kerning อัตโนมัติ และสคริปต์จัดจำหน่าย
butlerสำหรับ itch.io ช่วยลดภาระการตรวจทาน·แก้ไข·อัปโหลดด้วยมือ ทำให้ปรับปรุงคุณภาพฟอนต์เกือบ 200 แบบได้อย่างรวดเร็ว
จากแพ็กฟอนต์พิกเซลก่อนหน้า สู่ Megapack
- แพ็กฟอนต์แรกในปี 2016 เป็นชุดฟอนต์ 12 แบบที่ทำขึ้นในช่วงเริ่มทำงานกับ Ikenfell
- นำฟอนต์ที่ทำไว้สำหรับเกมมาขัดเกลาและเพิ่มอีกสองสามแบบ แล้วขายบน itch.io
- ถูกนำไปใช้ในเกมอินดี้หลายเกม และได้รับเสียงตอบรับที่ดี
- แพ็กที่สองในปี 2018 เพิ่มเป็น ฟอนต์ 40 แบบ และคุณภาพก็ดีขึ้นมาก
- สร้างตาราง kerning เพื่อให้การเรนเดอร์ประโยคดูดีขึ้น
- มีรูปแบบที่ build ไว้ล่วงหน้าให้ใช้งานง่ายในเกมเอนจินหลายตัวด้วย
- โปรโมตด้วยวิธีนำฟอนต์ของตนไปใส่ในภาพสกรีนช็อตเกมของนักพัฒนาอินดี้ให้ดู
- แพ็กก่อนหน้าถูกใช้ในเกมอินดี้หลายร้อยเกม และยังถูกใช้ใน Cadence of Hyrule ของ Nintendo ด้วย
- ฟอนต์หลายแบบยังถูกใช้ใน Get in the Car, Loser ของ Love Conquers All Games ด้วย
- หลังจาก Ikenfell วางจำหน่าย แม้จะมีช่วง burnout ยาวนาน แต่ก็พัฒนาทักษะ Rust ต่อไป และทำงานด้านฟอนต์ต่อเนื่องเพื่อสักวันหนึ่งจะสร้างแพ็กฟอนต์พิกเซลใหม่
เป้าหมายของ Megapack
- เป้าหมายเริ่มต้นของแพ็กใหม่คือฟอนต์ 100 แบบ แต่ผลลัพธ์สุดท้ายคือ ฟอนต์พิกเซล 175 แบบ
- แพ็กก่อนหน้ามี 12 แบบและ 40 แบบตามลำดับ
- แพ็กใหม่นี้ตั้งเป้าให้มีฟอนต์ที่ใช้ได้กับหลากหลายแนว เช่น ไซไฟ แฟนตาซี สยองขวัญ ฟาร์ม และเกม cozy
- คำขอและข้อร้องเรียนที่ใหญ่ที่สุดเกี่ยวกับแพ็กก่อนหน้าคือ รองรับเฉพาะอักขระ ASCII
- แพ็กใหม่เลือกใช้ชุดตัวอักษรละตินเสริมเพื่อรองรับ EFIGS ซึ่งหมายถึง English, French, Italian, German, Spanish
- ชุดอักขระสุดท้ายมี 176 ตัว
- ภาษาเอเชียหรือภาษาที่ไม่ได้ใช้ตัวอักษรละตินถูกตัดออก เพราะเป็นชุดตัวอักษรที่ไม่คุ้นเคย ทำให้ยากที่จะได้คุณภาพตามต้องการ และต้องใช้เวลาผลิตเพิ่มขึ้นมาก
- UI เกมจำเป็นต้องมีลำดับชั้นทางสายตา จึงต้องการทำให้แต่ละฟอนต์ไม่ใช่สไตล์เดียว แต่เป็น font family
- ตัวอย่างเช่น font family Virtue มีสไตล์ 20 แบบ
- นักพัฒนาสามารถปรับขนาดและน้ำหนักตัวอักษรได้โดยไม่ต้องผสมฟอนต์ที่มีบรรยากาศต่างกัน
- Kerning เป็นปัจจัยที่กินเวลามากในการทำแพ็กก่อนหน้า
- หากรองรับอักขระ 176 ตัว คู่ kerning ที่เป็นไปได้อาจเพิ่มขึ้นได้สูงสุดถึง
176²คู่ - เพื่อไม่ต้องกรอกทุกคู่ด้วยมือ จึงเลือกวิธีคำนวณส่วนใหญ่แบบอัตโนมัติ และกรอกด้วยมือเฉพาะส่วนที่อัลกอริทึมยังทำได้ไม่พอ
- หากรองรับอักขระ 176 ตัว คู่ kerning ที่เป็นไปได้อาจเพิ่มขึ้นได้สูงสุดถึง
- การควบคุมคุณภาพและการจัดจำหน่ายก็เป็นเป้าหมายของระบบอัตโนมัติด้วย
- ก่อนหน้านี้เมื่อแก้ข้อผิดพลาดของพิกเซลหรือบั๊ก kerning แล้ว ต้อง export ใหม่ ทดสอบ และอัปโหลดไป itch.io ด้วยตนเอง
- toolchain ใหม่ตั้งเป้าให้สร้างข้อความตัวอย่างและการแสดงผล kerning เพื่อค้นหาปัญหาได้เร็ว และตรวจสอบผลการแก้ไขได้ทันที
การเตรียมตัวเพื่อยกระดับคุณภาพการออกแบบฟอนต์
- แม้จะมีประสบการณ์ด้าน pixel art และฟอนต์พิกเซลมาก แต่ไม่เคยศึกษางาน ออกแบบตัวอักษร แบบดั้งเดิมอย่างจริงจัง
- ระหว่างทำงานได้อ้างอิง Design School: Type ของ Richard Poulin
- ใช้เป็นหนังสือเบื้องต้นที่ช่วยให้เรียนรู้ศัพท์และแนวปฏิบัติของการออกแบบตัวอักษร
- ยังรวบรวมภาพถ่ายข้อความที่พบรอบตัวเป็น reference ด้วย
- ป้ายร้านเล็ก ๆ พิพิธภัณฑ์ แกลเลอรี เทศกาล โปสเตอร์งานท้องถิ่น และปกหนังสือ กลายเป็นวัสดุอ้างอิง
- ไม่ได้ทำเพื่อคัดลอกฟอนต์ แต่เพื่อศึกษารูปทรงตัวอักษร ตัวอักษรที่ลงต่ำกว่า baseline และความแตกต่างระหว่างตัวอักษรบางกับกว้าง
- จากการสังเกตฟอนต์ตกแต่งที่เห็นกลางแจ้ง ได้เรียนรู้ว่าฟอนต์ที่ “หรูหรา” จำนวนมากไม่ได้ประดับตัวอักษรทุกตัวมากเกินไป แต่เน้นการตกแต่งที่ตัวพิมพ์ใหญ่ และจัดการตัวพิมพ์เล็กอย่างละเอียดอ่อนกว่า
บทบาทของเครื่องมือ Rust pifo
- เพื่อบรรลุเป้าหมาย จึงเขียนโปรแกรม Rust ของตัวเองชื่อ
pifo - การออกแบบฟอนต์เองทำในเครื่องมือ pixel art ทั่วไป
- อินพุตคือ PNG tilesheet และไฟล์ TOML สำหรับตั้งค่า
- ตัวอย่างคำสั่งอยู่ในรูป
pifo --all --output "Faraway" --input "Faraway*"
pifoตัดภาพอินพุตเป็นไทล์ glyph แยกกัน สร้างเส้นขอบ glyph คำนวณคู่ kerning อัตโนมัติ แล้ว export เป็นไฟล์ TTF- สร้างรูปแบบอื่น ๆ สำหรับใช้โดยตรงในเอนจินหลายตัวควบคู่กันด้วย
- งานของ glyph แต่ละตัวถูกทำแบบขนาน ทำให้ฟอนต์หนึ่งแบบประมวลผลได้แทบจะทันที
- แม้จะประมวลผลฟอนต์ 175 แบบทีละตัว ก็ใช้เวลาเพียงไม่กี่วินาที
- Rust crate หลักที่ใช้มีดังนี้
กระบวนการสร้างเส้นขอบ glyph
- ฟอนต์ชีตแต่ละชุดประกอบด้วย tilesheet และไฟล์ตั้งค่า TOML
- การตั้งค่ามี
version,baseline,line_gap,spacing,metrics,auto_kerning,auto_kerning_min,manual_kerning,skip_kerning_left,skip_kerning_rightเป็นต้น - ขนาดกริดอาจแตกต่างกันได้ แต่ต้องเป็นกริดที่สม่ำเสมอเสมอ และอักขระต้องอยู่ในตำแหน่งที่กำหนด
- เครื่องมือประมวลผลเฉพาะพิกเซลสีขาว 100% เท่านั้น ส่วนพื้นหลังลายตารางและ baseline ใช้เป็นเพียงไกด์
- การตั้งค่ามี
- TrueType glyph ประกอบด้วย เส้นขอบ (contour) หนึ่งเส้นขึ้นไป
- ในฟอนต์พิกเซล ต้องสร้างเส้นขอบให้กับแต่ละกลุ่มพิกเซลที่เชื่อมต่อกัน หรือแต่ละ cluster
- ตัวอย่างเช่น ถ้าตัวพิมพ์เล็ก
tมีพิกเซลสองก้อนที่แยกจากกัน ก็ต้องมีเส้นขอบสองเส้น
- การสร้างเส้นขอบดำเนินเป็นหลายขั้นตอน
- เลือกเฉพาะพิกเซลสีขาวจาก
RgbaImageแล้วรวบรวมเป็นHashSetของโครงสร้างPoint - เริ่มจากพิกเซลใดก็ได้ ทำ flood fill ไปยังพิกเซลที่อยู่ติดกัน และทำซ้ำจนไม่เหลือพิกเซลที่ยังไม่ถูกเยี่ยมชม เพื่อหา cluster
- ในแต่ละ cluster เก็บด้านที่ไม่มีพิกเซลข้างเคียงเป็น edge ที่เปิดออก
- เชื่อม head และ tail ของ edge เพื่อสร้างเส้นทางปิด แล้วแปลงเป็นเส้นขอบ
- เลือกเฉพาะพิกเซลสีขาวจาก
- Cluster ที่มีรูสามารถสร้างเส้นขอบได้หลายเส้น
- เส้นขอบด้านนอกวนตามเข็มนาฬิกา ส่วนรูด้านในวนทวนเข็มนาฬิกา
- ความต่างของทิศทางนี้สอดคล้องกับวิธีที่ TTF ใช้แสดงรู
- จุดกลางบนเส้นตรงต่อเนื่องจะถูกลบออก
- เป็นการปรับแต่งเพื่อลดขนาดไฟล์และเพิ่มความเร็วในการ rasterize
ระบบอัตโนมัติสำหรับตาราง kerning
- สิ่งที่ต้องมีถัดจากเส้นขอบในการสร้าง TTF คือ ตาราง kerning
- ตาราง kerning จะดึงคู่ตัวอักษรบางคู่ไปทางซ้าย เพื่อให้คำดูเป็นธรรมชาติมากขึ้น
- ตัวอย่างเช่น ถ้าดึงคู่
Va,ltไปทางซ้าย 1 พิกเซล ก็จะดูดีขึ้น
- Kerning แบบกำหนดเองระบุใน
manual_kerningของ TOML- ใช้รูปแบบเช่น
{ left = "V", right = "a", kern = -1 } - รองรับตัวเลือก
alts = trueเพื่อไม่ต้องกำหนดอักขระมีเครื่องหมายกำกับทุกตัวแยกกัน - แมปอักขระทางเลือกอย่าง
àáâãäåกับaเพื่อใช้ kerning เดียวกัน
- ใช้รูปแบบเช่น
- Kerning อัตโนมัติคำนวณโดยเลื่อน glyph ด้านขวาไปทางซ้ายทีละ 1 พิกเซล
- หา ตำแหน่งที่ใกล้ที่สุดที่ไม่แตะกับ glyph ด้านซ้าย
- การสัมผัสกันที่มุมก็ถือว่าแตะกันด้วย
- ในตัวอย่าง
LVสามารถดึงVได้ 1 พิกเซล แต่ 2 พิกเซลจะทำให้พิกเซลแตะกัน ดังนั้นค่า kerning คือ-1
- การคำนวณ kerning อัตโนมัติเคารพค่าที่กำหนดเองและการตั้งค่ายกเว้น
- ใช้
skip_kerning_left,skip_kerning_rightเพื่อยกเว้น glyph ในทิศทางใดทิศทางหนึ่งได้ - ใช้
rayonเพื่อคำนวณคู่ kerning ทั้งหมดแบบขนาน
- ใช้
รูปแบบการ export
- PIFO ไม่ได้สร้างแค่ TTF แต่ยังสร้าง tilesheet และ texture atlas แบบแพ็กด้วย
- ไฟล์ TTF เป็นไฟล์ไบนารีที่ประกอบด้วยตารางหลายชุด
- เครื่องมือ export เติมตาราง
head,hhea,maxp,OS/2,hmtx,cmap,loca,glyf,kern,name,post - แต่ละตารางต้องบันทึกตำแหน่ง ความยาว และ checksum และจัดการด้วย
begin_table()กับend_table()
- เครื่องมือ export เติมตาราง
- ขนาดพื้นฐานของฟอนต์พิกเซลกำหนดเป็น 16
- เมื่อเรนเดอร์ที่ขนาด 16 พิกเซลจะตรงกับ
1 pxพอดี - หากต้องการขยายโดยไม่สั่น ให้เรนเดอร์เป็นเลขคูณของ 16 เช่น
32,48,64
- เมื่อเรนเดอร์ที่ขนาด 16 พิกเซลจะตรงกับ
- การ export tilesheet จะเรียงตามลำดับ Unicode codepoint ต่างจากชีตอินพุต
- ไฟล์ข้อมูลที่สร้างมาด้วยกันมีแถว·คอลัมน์ ขนาดไทล์ baseline ระยะห่างบรรทัด ความกว้างช่องว่าง metrics ของ glyph และตาราง kerning
- ใช้
serdeเพื่อ serialize เป็นหลายรูปแบบ เช่น JSON, XML, TOML
- สร้าง atlas แบบแพ็กด้วย
- ใช้ crate แพ็กสี่เหลี่ยมที่สร้างเองชื่อ crunch
- เมื่อแพ็กให้แน่น ข้อมูลตำแหน่งเดิมจะหายไป จึงมีข้อมูลเพิ่มเติมสำหรับการเรนเดอร์ เช่น
x,y,w,h,off_x,off_y,adv
การทดสอบคุณภาพและภาพตัวอย่าง
- เพื่อให้ได้คุณภาพตามต้องการ ได้เพิ่มฟีเจอร์ สร้างภาพตัวอย่างขนาดมหึมา เข้าไปใน PIFO
- ภาพตัวอย่างประกอบด้วยบล็อกทดสอบหลายส่วน
- ตัวอักษรทั้งหมดและประโยคทดสอบบางประโยค
- บางส่วนจากเรื่องสั้น They're Made out of Meat ของ Terry Bisson
- คำทดสอบที่ใช้กลยุทธ์จาก Text for Proofing Fonts: A farewell to The Quick Brown Fox
- ชุดตัวเลขทั้งหมดและสัญลักษณ์สกุลเงิน
- คู่ kerning ของตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก และตัวพิมพ์ใหญ่เล็กผสมกัน
- เครื่องหมายวรรคตอนหลากหลายแบบ
- ระหว่างทำงานสามารถสร้างภาพตัวอย่างได้ทันที จึงค้นหาและแก้ปัญหาได้เร็ว
- กระบวนการนี้ช่วยยกระดับคุณภาพโดยรวมและความเรียบร้อยของฟอนต์เกือบ 200 แบบ
ระบบอัตโนมัติสำหรับการจัดจำหน่ายบน itch.io
- ผลลัพธ์สุดท้ายคือ ฟอนต์พิกเซล 175 แบบ และเลือก itch.io ที่เคยใช้อยู่เป็นร้านขายออนไลน์สำหรับดาวน์โหลด
- งานที่ยุ่งยากที่สุดคือการสร้างโปรเจกต์ itch แยกสำหรับแต่ละฟอนต์
- งานนี้ต้องทำเพียงครั้งเดียวต่อฟอนต์
- หลังจากนั้น การอัปโหลดและบำรุงรักษาสามารถจัดการด้วยสคริปต์บรรทัดคำสั่งได้
- สคริปต์จัดจำหน่ายประกอบด้วยสามขั้นตอน
- คอมไพล์ PIFO ในโหมด release
- build asset ของฟอนต์ที่ต้องการ
- อัปเดตโปรเจกต์ itch ของแต่ละฟอนต์ด้วย asset ใหม่
- แพตเทิร์นอินพุตอย่าง
--input "Faraway*"จะค้นหาสไตล์ที่มี prefix เดียวกัน เช่นFaraway - Regular,Faraway - Boldแล้วรวมเป็นแพ็กเกจ font family เดียว - การอัปโหลดขั้นสุดท้ายใช้เครื่องมือจัดจำหน่ายบรรทัดคำสั่ง
butlerที่ itch มีให้- จัดจำหน่ายด้วยรูปแบบ
butler push ../distro/faraway chevyray/pixel-font-faraway:assets - Butler ติดตามไฟล์ที่เปลี่ยนแปลงและอัปเดตเฉพาะส่วนที่จำเป็น จึงไม่ต้องทำ file hashing หรือการจัดการเวอร์ชันพิเศษแยกต่างหาก
- จัดจำหน่ายด้วยรูปแบบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เป็นฟอนต์ที่เจ๋งมาก และบทความก็น่าสนใจ
เห็นเกมปลอมตรงมุมขวาบน https://chevyray.dev/blog/creating-175-fonts/old_previews.pn... แล้วก็คิดว่าอยากให้มันเป็นเกมจริง ๆ
ชอบเพราะให้บรรยากาศคล้าย “Wonder Boy in Monster World สำหรับ GBA”
แต่ดูจากไลเซนส์แล้ว ดูเหมือนว่า ไม่อนุญาตให้ใช้ TTF ในโปรเจกต์ซอฟต์แวร์โอเพนซอร์ส จึงควรระวังไว้
ไม่ใช่ทนายความ แต่ข้อสุดท้ายอ่านแล้วเหมือนห้ามไว้อย่างชัดเจน: https://github.com/ChevyRay/pixel_font_megapack_license/blob...
ฉากในม็อกอัปนั้นอ้างอิงจากฉากเปิดของ Celeste
เจตนาดูชัดว่าให้ใช้กับ เกมในขั้นผลิตภัณฑ์สุดท้าย ซึ่งโอเพนซอร์สพบได้น้อยกว่า มากกว่าจะใช้กับเกมเอนจินหรือเทมเพลต
อ่านบทความนี้แล้วก็นึกถึงกรณีขอบเขตลิขสิทธิ์แบบอื่น ๆ ด้วย คือในสหรัฐฯ แบบตัวอักษร (typeface) ไม่ถือเป็นสิ่งที่ได้รับความคุ้มครองลิขสิทธิ์
ฟอนต์ได้รับความคุ้มครองในฐานะโปรแกรมคอมพิวเตอร์ แต่แบบตัวอักษรและฟอนต์บิตแมปธรรมดาไม่ได้รับ
ดังนั้นเวิร์กโฟลว์นี้จึงเหมือนกับการสร้าง TTF ที่มีลิขสิทธิ์จากไทล์ชีตต้นฉบับที่ไม่มีลิขสิทธิ์ แล้วก็ย้อนกลับไปเป็นไทล์ชีต/แอตลาสผลลัพธ์ที่ไม่มีลิขสิทธิ์อีกครั้ง
น่าประทับใจจริง ๆ
การทำชุดฟอนต์ที่สมบูรณ์อาจใช้เวลาได้ง่าย ๆ ถึง 1 ปี
ต้องทำกลิฟทั้งหมดตั้งแต่ 'A' ถึง 'Z' ตัวพิมพ์ใหญ่/เล็ก วงเล็บ แอมเพอร์แซนด์ เครื่องหมายอัศเจรีย์ และถ้าเป็นไปได้ก็ต้องทำรูปแบบแปรผันอย่างตัวหนา/ตัวเอียงด้วย
ถ้าไม่มีรูปแบบแปรผันเหล่านี้ การใช้งานฟอนต์ก็จะถูกจำกัด
โดยเฉพาะสิ่งที่แยกฝีมือคือ kerning หรือระยะห่างระหว่างตัวอักษร ซึ่งถ้าจะหมกมุ่นก็หมกมุ่นได้ไม่รู้จบ
ในเนื้อหาบทความก็บอกว่า หากรองรับ 176 ตัวอักษร จะต้องป้อนคู่ kerning ได้สูงสุด 176² = 37,976 คู่ จึงตัดสินใจสร้างเครื่องมือเองเพื่อกึ่งอัตโนมัติส่วนใหญ่ และป้อนด้วยมือเฉพาะส่วนที่อัลกอริทึมยังไม่พอ
หากต้องการรองรับภาษาอื่น แม้แต่ภาษาที่ใช้ตัวอักษรละตินอย่างฝรั่งเศส สเปน อิตาลี โปรตุเกส ก็ยังต้องมี ตัวอักษรเพิ่มเติม
จากนั้นก็อาจเริ่มอยากรองรับอักษรกรีก ซีริลลิก ญี่ปุ่น จีน ต่อไปอีก
ตัวอย่างเช่น ตาม Wikipedia ระบุว่า “ฟอนต์ Noto รองรับมากกว่า 77,000 ตัวอักษร ซึ่งคิดเป็นประมาณครึ่งหนึ่งของ 149,186 ตัวอักษรที่นิยามไว้ใน Unicode 15.0”
อะไร ๆ ก็หมกมุ่นได้ไม่รู้จบทั้งนั้น
สาขาอย่างภาษา การเขียน ดนตรี การประดิษฐ์อักษร ก็ดูเหมือนจะดึงดูดคนที่มีแนวโน้มหมกมุ่นได้มากเป็นพิเศษ
ประเด็นคือคำพูดแบบนี้ฟังเหมือนเป็นการ สร้างกำแพงกั้นการเข้ามา
คำพูดที่ทำให้คนซึ่งกำลังจะเข้ามาใหม่ในสาขาใดสาขาหนึ่งรู้สึกท้อ มักฟังดูอ่อนไหวอยู่เสมอ
ดีมาก
สิ่งหนึ่งที่สงสัยคือทำไมถึงเลือกชุดย่อยนี้จากบรรดา อักขระพิเศษของสแกนดิเนเวีย
ภาษาสวีเดนมี äöå ส่วนภาษานอร์เวย์/เดนมาร์กมี æøå แต่ฟอนต์นี้มี æ ทว่าไม่มี ø
ถ้าอย่างนั้น แม้ตัด æ ออกก็ยังคงรองรับภาษาสวีเดนได้ และถ้าเพิ่ม ø ก็จะรองรับภาษานอร์เวย์กับเดนมาร์กได้ด้วย
เลยสงสัยว่าเป็นการตกหล่นธรรมดา หรือมี locale ที่ใช้ æ แต่ไม่ใช้ ø อยู่หรือไม่
อนึ่ง ไม่ได้สับสน æ กับลิเกเจอร์ œ ซึ่งเป็นกลิฟแยกที่ใช้ในภาษาฝรั่งเศส
อย่างไรก็ตาม Æ ก็ยังใช้ในข้อความภาษาอังกฤษโบราณอย่าง “encyclopædia” หรือในรูปพหูพจน์ของคำที่มาจากภาษาละตินอยู่บ้าง: https://en.wiktionary.org/wiki/Category:English_plurals_in_-...
อันที่จริง หลังจากโปรเจกต์เดินหน้าไปค่อนข้างมากแล้ว ถึงได้รู้ว่าในชุดตัวอักษรของผม ไม่มี ø
การเพิ่มกลับเข้าไปในทุกฟอนต์แล้วออกแพตช์นั้นทำได้แน่นอน แต่กำลังรอดูว่ามีความต้องการมากพอให้ทำงานขนาดนั้นหรือไม่
ถึงอย่างนั้น ถ้ารองรับได้เพิ่มอีกสองภาษาก็น่าจะเจ๋งไม่น้อย
ชอบฟอนต์บางตัวที่ใช้ในไซต์และการจัดสไตล์แบบเรียบง่ายด้วย
โชคดีที่มีบทความแยกเผยแพร่ไว้: https://chevyray.dev/blog/how-this-site-is-made/#catppuccin-...
น่าสนใจ
ก่อนหน้านี้ไม่รู้เลยว่าเวลานำฟอนต์พิกเซลไปเข้ารหัสเป็น TTF จะต้อง แปลงเป็นเวกเตอร์
สำหรับคนที่โหลดไปใช้กับ text renderer ที่เหมาะสม ก็น่าจะทำให้ขยาย/ย่อได้ลื่นขึ้นในระดับหนึ่ง
แน่นอนว่าเอนจินเกมที่ใช้ฟอนต์พิกเซลแทบจะ 1:1 อาจเป็นข้อยกเว้น
เครื่องมือเหล่านี้ไม่มีแนวคิดของ ฟอนต์พิกเซล ดังนั้นถ้าใช้ TTF ที่ปิด hinting และ anti-aliasing ก็จะนำไปใช้ในแอปเหล่านั้นได้
เจ๋งมาก
ดีด้วยที่งานนี้ช่วยคนทำในเชิงการเงินได้
ชื่อ Chevy Ray นี่จำได้จากแวดวงเกมอินดี้ แต่จำไม่ออกแน่ชัดว่าเขาทำอะไรไว้
น่าจะเป็นอะไรสักอย่างในกระแสเดียวกับ VVVVVV, Nidhogg หรือ Canabalt ราว ๆ ปี 2010–2012
Beacon ก็ยอดเยี่ยมเหมือนกัน — ทำให้นึกถึงวันเก่า ๆ และคิดถึงเกมอินดี้
ยอดเยี่ยม
เวลาเห็น บุคคลแบบดาวินชี อย่างผู้เขียนบทความนี้ ก็ทำให้นึกถึงยุคที่ศิลปินกับวิศวกรไม่ได้แยกกันชัดเจน แต่เป็นคนคนเดียวกัน
ไม่ใช่บทความแนว “10 อันดับสิ่งประดิษฐ์ของดาวินชี”
ในความเป็นจริง ระหว่างสองด้านนั้นมีเส้นแบ่งค่อนข้างใหญ่
ผมเองก็สามารถโมเดลยานอวกาศที่จะไปถึง Alpha Centauri ใน Maya ด้วยไดนามิกส์น่าสงสัยที่ยังไม่ผ่านการพิสูจน์ได้เหมือนกัน
แต่นั่นยังห่างไกลจากการสร้างมันขึ้นมาจริง ๆ แล้วส่งออกไปสู่อวกาศระหว่างดวงดาว
ภาพวาดก็สวยและเต็มไปด้วยจินตนาการดี
ใน Rust การทำให้งานแบบนี้ รันบนหลายคอร์ นั้นง่ายจนน่าสนใจ
แค่แทรกการเรียกหนึ่งครั้งเข้าไปใน chain ของฟังก์ชันก็อาจเพียงพอแล้ว
ภายใต้สมมติฐานว่าทำตามกฎที่ภาษากำหนด มัลติเธรดดิ้ง ก็แทบจะ “ฟรี”
กฎของ Amdahl ยังมีผลอยู่ แต่ อย่างน้อยแอปก็ไม่ระเบิดต่อหน้าต่อตา
Scala และ Java ก็รองรับความสามารถแบบนี้เป็นพื้นฐานเช่นกัน
เป็นงานที่ยอดเยี่ยมจริง ๆ และบทความก็ดีด้วย
ถ้าใช้เทคนิคบางอย่าง ก็น่าจะทำให้อัลกอริทึมจำนวนมากเร็วขึ้นได้
เท่าที่อ่านมา จุดชี้ทางอาจเป็นการเปลี่ยนแฮชแมปในการวาดตัวอักษรและการแมปตัวแปรของ ASCII ให้เป็น บิตแมปกับอาร์เรย์ดัชนีแบบไบต์
แน่นอนว่าตอนนี้มันเร็วพออยู่แล้ว จึงไม่ได้สำคัญมากสำหรับโค้ดนี้
ในเว็บไม่มีโค้ดทั้งหมด แต่จริง ๆ แล้วมีการจัดสรรและโคลนสตริงกับโครงสร้างข้อมูลค่อนข้างมาก
จุดที่เห็นชัดก็เขียนโค้ดให้เหมาะสมที่สุดแล้ว ส่วนอย่างการคัดลอกบิตแมปหรืองานที่ขนานได้ง่ายนั้นเร็วถึงขั้นเสร็จแทบจะทันที จึงไม่ได้ลองปรับแต่งส่วนอื่นด้วยซ้ำ
แต่ถ้าจะทำก็ทำได้
เป็นเรื่องง่ายที่จะลืมไปว่าภาษา ที่ใกล้ระดับล่าง อย่าง Rust, C++, Go นั้นเร็วแค่ไหน และยิ่งเมื่อใช้เครื่องมือพื้นฐานสำหรับมัลติเธรดดิ้งกับคิวงาน ฯลฯ ก็ยิ่งเป็นแบบนั้น
คนที่สนใจฟอนต์ควรลองดู https://tomorrow.type.today/ ด้วย
เป็น สตูดิโอไทโปกราฟี ที่ทำฟอนต์ต้นฉบับและเชิงทดลองที่ยอดเยี่ยม
ในทีมเรามีคนหนึ่งที่หลงใหลไทโปกราฟีมาก จึงกำลังสร้างคอลเลกชันงานของพวกเขาไว้ที่ https://play.soot.com/tomorrowtypetoday