1 คะแนน โดย GN⁺ 2025-12-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Unscii คือ ชุดฟอนต์ Unicode แบบบิตแมป ที่อ้างอิงจากฟอนต์ของระบบคลาสสิก ออกแบบมาให้เหมาะทั้งกับงานศิลป์แบบ character cell art และสภาพแวดล้อมของเทอร์มินัลกับการเขียนโปรแกรม
  • เวอร์ชันหลักคือ unscii-8 (8×8 พิกเซล) และ unscii-16 (8×16 พิกเซล) พร้อมสไตล์ทางเลือกหลายแบบ และรุ่นย่อย ‘full’ ที่เติม glyph ที่ขาดหายไป
  • มีการออก Unscii 2.0 เพื่อรองรับการเพิ่มตัวอักษรหมวด ‘legacy computing’ ใน Unicode 13.0 โดยมีทั้งการแก้ข้อผิดพลาดเดิม ปรับปรุงความอ่านง่าย และเพิ่มตัวอักษรใหม่
  • มีการศึกษาลักษณะทางภาพของ ฟอนต์ระบบคลาสสิก เช่น Amiga, Commodore 64, IBM PC เพื่อสร้างรูปทรงที่เป็นกลางและสม่ำเสมอ
  • เป็นเครื่องมือที่ เชื่อมงานศิลป์ตัวอักษรแบบดั้งเดิมเข้ากับสภาพแวดล้อม Unicode สมัยใหม่ และมีบทบาทสำคัญต่อการสร้าง ASCII art และกราฟิกบนเทอร์มินัลขึ้นใหม่

ภาพรวมของ Unscii

  • Unscii คือ ชุดฟอนต์ Unicode แบบบิตแมป ที่สร้างบนพื้นฐานของ ฟอนต์ระบบคลาสสิก
    • เหมาะกับงาน character cell art และสามารถใช้งานในเทอร์มินัลและสภาพแวดล้อมการเขียนโปรแกรมได้
  • มี 2 รุ่นหลัก: unscii-8 (8×8 พิกเซล) และ unscii-16 (8×16 พิกเซล)
    • unscii-8 มีสไตล์ทางเลือกหลายแบบ
    • unscii-16-full รวม glyph ที่ขาดหายจาก Fixedsys Excelsior และ GNU Unifont
    • unscii-16-full ใช้สัญญาอนุญาต GPL ส่วนรุ่นอื่นเป็น สาธารณสมบัติ
  • ผู้สร้างคือ Viznut

Unscii 2.0

  • ใน Unicode 13.0 (2020-03-10) มีการเพิ่มอักขระกราฟิกสำหรับ ‘legacy computing’ จำนวน 214 ตัว
    • รวมถึงอักขระที่เคยขาดหายไปของ PETSCII, Teletext/Videotex เป็นต้น
    • อักขระที่มีอยู่แล้วใน Unscii 1.x ได้รับการแมปเข้ากับ Unicode อย่างเป็นทางการ
  • Unscii 2.0 ออกมาโดยมีเหตุผลหลักคือการรองรับการแมปนี้
  • นอกจากนี้ยังมีการ แก้ข้อผิดพลาด ของอักขระบางตัว, ปรับปรุงความอ่านง่าย, และ เพิ่มอักขระใหม่
  • มีภาพทดสอบของอักขระที่ใช้งานได้ใน Unicode ปัจจุบันให้ดู

ตัวอย่าง (EXAMPLES)

  • Amiga ANSI art: Divine Stylers ของ Hellbeard เรนเดอร์ด้วย unscii-16
  • PC ANSI art: Ansi Love ของ Rad Man เรนเดอร์ด้วย unscii-16
  • ภาพ PETSCII ของ Commodore 64: I Has Floppy ของ Redcrab, The First Ball ของ Dr.TerrorZ, Gary ของ Mermaid
  • ในแพ็กเกจซอร์สโค้ดมี ตัวแปลงบิตแมป→Unscii รวมอยู่ด้วย
    • มีตัวอย่างการแปลง unscii-8 โดยใช้พาเลต xterm 256 สี

ดาวน์โหลด (DOWNLOADS)

  • รูปแบบบิตแมปจริงมี 2 แบบคือ HEX และ PCF
    • HEX คือรูปแบบเฮกซ์ดัมป์อย่างง่ายแบบเดียวกับโครงการ Unifont
    • TTF, OTF, WOFF เป็นเวอร์ชันที่แปลงเป็นเวกเตอร์แล้ว
  • เวอร์ชัน PCF ไม่รวมอักขระที่เกิน U+FFFF
    • แต่อักขระกราฟิกใหม่มีให้ในช่วง PUA (Private Use Area)
    • ข้อมูลการแมปอยู่ในไฟล์ <uns2uni.tr>

เบื้องหลัง (BACKSTORY)

  • Unicode มี อักขระ pseudographic อยู่แล้ว แต่แทบไม่ถูกใช้ใน ANSI art
    • แม้แต่ใน MUD เป็นต้น ก็มักใช้เฉพาะอักขระบล็อกจาก MS-DOS code page 437
  • เพราะฟอนต์ Unicode ที่มีอยู่เดิม รองรับอักขระกราฟิกที่ไม่ใช่ CP437 ได้ไม่สมบูรณ์
    • Unicode Consortium ไม่ได้ให้ความสนใจกับการทำ pseudographic มากนัก
    • จึงเกิด วงจรอุบาทว์ แบบ “ไม่มีฟอนต์ก็ไม่มีงานศิลป์ และไม่มีงานศิลป์ก็ไม่มีฟอนต์”
  • เพื่อแก้ปัญหานี้ จึงพัฒนา Unscii ให้เป็น ฟอนต์ Unicode ที่เข้ากันได้กับงานศิลป์

พื้นฐานการออกแบบ

  • ฟอนต์ระบบขนาด 8×8 แบ่งได้เป็นแบบเส้นหนา 1 พิกเซลและ 2 พิกเซล
    • Unscii เลือกใช้ แบบ 2 พิกเซล เพราะมีความคล้ายคลึงกันสูงระหว่างระบบคลาสสิกต่าง ๆ ทำให้สร้างรูปทรงที่เป็นกลางได้ง่าย
  • ระบบที่เป็นพื้นฐานทางภาพของเวอร์ชัน 8×8:
    • Amiga (Topaz-8), Amstrad CPC, Atari 8-bit/Arcade/32-bit, BBC Micro, Commodore 64, IBM PC (CGA/VGA 80×50)
  • เวอร์ชัน 8×16 ขยายจาก 8×8 ตามหลักการแปลง
    • ฟอนต์อ้างอิง: Windows Fixedsys, IBM PC VGA, X Window 8x13/9x15, Macintosh Monaco, Digital VT420, DejaVu Sans Mono, Lucida Console, Inconsolata
  • ให้ความสำคัญกับ รูปทรงที่เป็นกลาง เป็นหลัก แต่จะปรับเมื่อจำเป็นต่อการเชื่อมต่อของงานศิลป์หรือความอ่านง่าย
    • เช่น /\\XY เพื่อคงการเชื่อมต่อใน ASCII art และปรับ serif ของ iIl ให้ยาวขึ้น
  • glyph 8×16 ที่ไม่ได้กำหนดไว้จะถูกแทนด้วย เวอร์ชันขยายความสูง 2 เท่าของ 8×8

รุ่นย่อยเพิ่มเติมและการแมปอักขระ

  • มีการศึกษาฟอนต์เกมและฟอนต์เส้นบางเพื่อสร้าง unscii-8-thin, unscii-8-mcr, unscii-8-fantasy
  • มีการแมปอักขระหลายร้อยตัวที่ไม่มีใน Unicode ไว้ใน พื้นที่ PUA
    • U+E080..E0FF: โมเสกบล็อกของ Teletext/Videotex
    • U+E100.. : PETSCII, โมเสกแบบนุ่มของ Videotex, เฉดสีเพิ่มเติม, มุมโค้ง เป็นต้น
    • U+E800.. : ลายเส้นตัดกัน เส้นทแยง และแพตเทิร์นไม่เป็นเส้นตรงที่ไม่เป็นทางการแต่มีประโยชน์
    • U+EC00.. : อักขระเฉพาะทาง เช่น บิตแมปที่เน้นงานเกม
  • หลัง Unicode 13.0 อักขระบางส่วนได้ถูกรวมเข้า Unicode อย่างเป็นทางการแล้ว แต่ ยังคงการแมปใน PUA ไว้เพื่อความเข้ากันได้

1 ความคิดเห็น

 
GN⁺ 2025-12-16
ความคิดเห็นบน Hacker News
  • ออกนอกประเด็นไปนิดหน่อยแต่ก็เกี่ยวข้องกัน
    ตอนก่อนหน้านี้ที่ผมทำเกมแนวอินเวเดอร์ด้วย HTML + Canvas ผมตามหาฟอนต์ IBM PC OEM แล้วก็ไปเจอ The Ultimate Oldschool PC Font Pack ของ VileR
    ความทุ่มเทในการกู้คืนฟอนต์ OEM และ เวอร์ชันดัดแปลง จาก ROM จำนวนมหาศาลนี่น่าทึ่งมาก
    ตัวเว็บไม่ใช่แค่มีคลังข้อมูลละเอียดเท่านั้น แต่ยังมีฟีเจอร์อย่าง พรีวิวแบบสด และการปรับอัตราส่วนภาพด้วย ทำให้ไล่ดูเพลินมาก
    ผมเคยใช้เวลาหลายชั่วโมงอยู่ในนั้นเพื่อเทียบฟอนต์ OEM หลายตัวและหาตัวที่เหมาะที่สุดสำหรับโปรเจกต์ของผม

    • ผมใช้ฟอนต์ Px437 Verite 9x6 จากแพ็กนี้เป็นฟอนต์หลักของเทอร์มินัลมาหลายปีแล้ว
      มันเหมาะกับ งานสไตล์เรโทร อย่าง ANSI art มาก และก็เข้ากับสภาพแวดล้อมสมัยใหม่ได้อย่างสมบูรณ์แบบ
  • ผมเคยใช้ เครื่องมือ live coding ด้านภาพ/เสียง IBNIZ ที่ Viznut สร้างขึ้นในการแสดงสด
    มันเป็นประสบการณ์ที่เดือดมากจริงๆ
    ลิงก์ IBNIZ

    • Viznut ทำโปรเจกต์น่าทึ่งไว้เยอะมากจริงๆ
      รายชื่อผลงานของเขาดูได้จาก โปรไฟล์บน Pouet
    • ผมชอบเดโมนี้มาก
      ผมอิจฉาทั้ง ความเพี้ยนและความอัจฉริยะ ของมัน และหวังว่าดูไปแล้วผมจะติดอะไรแบบนั้นมาบ้างสักหน่อย
  • Nerd Font ที่ผมใช้ในเครื่องยังไม่รองรับ graphic glyph บางตัว
    ถ้ามีเพิ่มส่วนนี้เข้ามาก็คงดี

    • ผมได้ ผลลัพธ์ที่ถูกต้องเป๊ะ บนเทอร์มินัล st ที่ใช้ Iosevka Nerd Font
      พอเช็กด้วย lsof ก็พบว่ามีหลายฟอนต์ถูกใช้เป็น fallback
      มีทั้ง DejaVuSans, DroidSansFallback, Segoe UI Symbol และฟอนต์อื่น ๆ ปนกันไป จนสุดท้ายเรนเดอร์ออกมาได้สมบูรณ์แบบ
    • ประเด็นที่เกี่ยวข้องอยู่ใน GitHub #1959
    • ผมมองว่า Nerd Font ไม่ค่อยดีเพราะมัน ไม่ใช่มาตรฐาน
  • ตอนนี้ผมกำลังทำ MUD อยู่ และฟอนต์พวกนี้ก็คือสไตล์ที่ผมอยากได้พอดี
    ขอบคุณที่แชร์ได้ถูกจังหวะมาก

  • ตอนนี้พอเทอร์มินัลเริ่ม รองรับ Sixel กันในที่สุด
    ก็ให้ความรู้สึกเหมือนหมุนกลับมาครบรอบ 40 ปีตามที่เห็นใน วิกิของ Sixel

    • แต่จริง ๆ แล้ว Sixel ถูกนำมาใช้กับเทอร์มินัลตั้งแต่ปี 1988 แล้ว
      การส่งข้อมูลแรสเตอร์สีแบบไม่บีบอัดผ่านลิงก์ซีเรียล 9600bps เป็นไอเดียที่แย่มาก
      ทุกวันนี้อยู่ในยุคกิกะบิตแล้ว เลยเสียเวลาผู้ใช้น้อยลงก็จริง แต่ก็ยัง เปลือง CPU และเพิ่มความซับซ้อน อยู่ดี
      ผมอยากให้เว็บเบราว์เซอร์รองรับ FTP หรือ Gopher มากกว่าเสียอีก
  • ฟอนต์ cnxt ของ Constantine Bytensky ก็อยู่ในสายคล้ายกัน
    ถ้าชอบ unscii ก็น่าจะชอบ cnxt ด้วย
    CNXT ย่อมาจาก “Constantine’s Nine x Twenty”

  • ตอนนี้เว็บเปิดไม่ได้แล้ว แต่ผมเคยทำ side project ที่ใช้ได้กับ ฟอนต์ monospaced แบบไหนก็ได้
    มันแปลงไบนารีเป็นยูนิโค้ดแล้วแปลงกลับได้ พร้อมแทนที่อักขระควบคุมด้วยสัญลักษณ์ที่เกี่ยวข้อง
    โปรเจกต์ printable-binary
    อักขระ UTF-8 หนึ่งตัว (1~3 ไบต์) จะตรงกับข้อมูลนำเข้า 1 ไบต์ ทำให้ขนาดเพิ่มขึ้นเฉลี่ยราว 70%
    แต่ก็ได้ ความเป็นอิสระของข้อมูลไบนารี บนสื่อใดก็ตามที่เข้าใจ UTF-8

    • เป็นไอเดียที่เจ๋งมาก
      แต่ในการใช้งานจริง base64 เพิ่มขนาดแค่ 33% เลยอาจมีประสิทธิภาพกว่าก็ได้
  • ฟอนต์พวกนี้เท่มากจริง ๆ
    ผมคิดถึง อารมณ์แบบ ASCII art เลยเอาไปใส่เป็นแบนเนอร์ในแพลตฟอร์มบล็อกของผม lmno.lol

  • Unscii เยี่ยมมาก
    เมื่อก่อนผมเคยทำ Unscii art editor แบบง่าย ๆ ที่ใช้บนมือถือได้ด้วย
    unicode-drawing-club.netlify.app

  • favicon ดูเหมือนหรืออย่างน้อยก็คล้ายกับโลโก้ของ The Grate Book of Moo มาก
    สำหรับ Hacker News นี่อาจเป็นการอ้างอิงที่เฉพาะทางเกินไปหน่อย แต่ก็น่าจะมีคนจำได้อยู่บ้าง