14 puan yazan GN⁺ 7 일 전 | 3 yorum | WhatsApp'ta paylaş
  • Tüm karakterleri 5 piksellik bir kare içine sığdıran ve 6x6 ızgara üzerinde güvenle çizilebilecek şekilde ayarlanmış, küçük ekranlar ve sınırlı bellek ortamları için tasarlanmış ultra küçük sabit genişlikli bir fonttur
  • 5x5 boyutu, 4x4'te yetersiz kalan E, M, W gösterim sorununu çözer; ayrıca çoğu küçük harfi büyük harflerden 1 piksel daha küçük çizerek görsel ayırt edilebilirlik de sağlar
  • Tüm font yalnızca 350 bayt olduğundan AVR128DA28 gibi 8 bit mikrodenetleyicilere çok uygundur ve 160x128 ya da 128x64 OLED gibi küçük ekranlarda piksel verimliliği sağlar
  • Benzer boyutta render edilen vektör fontlarla karşılaştırıldığında bile, anti-aliasing ve çok daha büyük kod/font verisi kullanılmasına rağmen sonuç 350 baytlık el yapımı fonttan daha kötü kalır
  • Daha küçük 3x5, 3x4, 3x3, 2x3, 3x2, 2x2 boyutları da denenmiştir; 3x5 oldukça okunabilir, 3x2 ise 2x3'ten daha iyidir, ancak 2x2 neredeyse bir gizli kod düzeyine kadar bozulur

5x5 piksel font

  • Tüm karakterlerin 5 piksellik kare içine sığması ve 6x6 ızgara üzerinde güvenle çizilebilmesi için tasarlanmıştır
    • Temeli lcamtuf'un 5x6 font-inline.h dosyasıdır; bu font da ZX Spectrum'un 8x8 fontundan esinlenmiştir
    • 5x5, okunabilirliği bozmayan en küçük boyut olarak belirlenmiştir
  • 2x2 mümkün değildir ve 3x3 teknik olarak mümkün olsa da okumak zordur; 4x4 ise E, M, W harflerini düzgün çizmek için yetersiz kalır
    • 5x5'te bu sorun çözülür
  • 5x5, çoğu küçük harfi büyük harflerden 1 piksel daha küçük çizebildiği için görsel olarak ayırt edilebilirlik sağlar
  • Daha dar 4x5 ve 3x5 de mümkündür, ancak bunun karşılığında M, noktalı 0 ve U/V/Y ayrımı feda edilir
  • Tüm karakterleri sabit genişlikte tutmak programlamayı kolaylaştırır
    • Ekranda bir dizenin uzunluğu her zaman karakter sayısının 6 katı olarak hesaplanır
    • "8978" ifadesinin "1111" ifadesinden daha uzun olup düzeni taşırması konusunda endişelenmeniz gerekmez
  • Fontun toplam boyutu yalnızca 350 bayt olduğundan AVR128DA28 gibi 8 bit mikrodenetleyiciler için çok uygundur
    • Metinde AVR128DA28'in 16kB RAM'e sahip olduğu belirtiliyor
    • Bu tür çipler ucuz, düşük güç tüketimli ve dayanıklıdır, ancak grafik işleme açısından fazla pay bırakmaz
  • 384x288 ekran bile yaklaşık 110 bin piksel içerdiğinden AVR belleğine sığdırmak için fazlasıyla büyüktür
    • Bunun yerine 160x128 ya da 128x64 OLED gibi daha küçük ekranlar daha pratiktir ve daha ucuzdur
    • Bu tür ekranlarda elle çizilmiş, piksel açısından verimli fontlar avantaj sağlar
  • Benzer boyutta render edilmiş vektör fontlar da karşılaştırılmıştır
    • İlgili vektör font aslında 6 piksel yüksekliğindedir, ancak karakterler daha dardır
    • Anti-aliasing, birkaç megabayt kod ve 1MB font verisi kullanmasına rağmen sonuç 350 baytlık el yapımı fonttan daha kötü kalır

Gerçek ekran ve daha küçük boyut deneyleri

  • Gerçek pikseller kusursuz kareler olmadığından ekrandaki görünüm üstteki render ile tam olarak aynı değildir
    • Alt piksellerin oluşturduğu sahte gölge efekti olumlu değerlendirilmiştir
    • Siyah beyaz ekranlarda bu etki olmasa da yine de beklenenden daha yumuşak görünür
  • Pikseller arasındaki boşluk, e ve g harflerinin daha inandırıcı görünmesini sağlar
    • Aynı etkiden yola çıkılarak daha küçük font olasılıkları da ayrıca incelenmiştir
  • 3x5, tavizsiz en düşük çözünürlük olmasa da oldukça iyi okunur
    • Bu boyutta 32.768 glif vardır ve bunların 27.904'ü birbirinden ayırt edilebilir
    • M, W, Q zarar görür, ancak O ile 0 hâlâ ayırt edilebilir
    • Ekrana %50 daha fazla sütun sığdırmanız gerektiğinde bir seçenek olabilir
  • 3x4 boyutunda hâlâ okunabilir, ancak kısıtlar artar
    • 4.096 glif vardır ve bunların 3.392'si birbirinden ayırt edilebilir
    • Bu boyutta büyük ve küçük harf ayrımı yapılamaz; sınırlı alanda en iyi uyan tek bir stil seçilir
    • Sayıların ifade gücü de zayıflar, ancak yine de kullanılabilir durumdadır
  • 3x3 boyutunda kayıp en çok rakamlarda görülür
    • 512 glif vardır ve bunların 400'ü birbirinden ayırt edilebilir
    • Harfler çakışmadan bir ölçüde tanınabilir
    • Gerçek donanımda gösterildiğinde bu font ciddi biçimde iyileşir
  • 2x3 neredeyse aşırı bir seviyeye yaklaşır
    • 64 glif vardır ve bunların 44'ü birbirinden ayırt edilebilir
    • Çoğu harfi tanımak zordur ve çakışma da fazladır
    • En alttaki satır "Hello World" ifadesidir
  • En boy oranı ters çevrilmiş 3x2, 2x3'ten çok daha iyi sonuç verir
    • Bu boyutta da 64 glif vardır ve bunların 44'ü birbirinden ayırt edilebilir
    • M, W, N, Q, G, P gibi yatay detay gerektiren harfler, E, F gibi dikey detay gerektirenlerden daha fazla olduğundan daha avantajlıdır
    • En alttaki satır "you can probably read this" ifadesidir; gözlerinizi kısarak ya da küçültülmüş hâline bakarak okunabilir
  • 2x2, yalnızca tamamlayıcılık için karşılaştırma konusu olarak kalır
    • Olası 2x2 görseller teorik olarak 16 adettir, ancak biri boşluktur ve beşi diğer gliflerin kaydırılıp kopyalanmış hâlidir; bu yüzden gerçekte yalnızca 10 tane kalır
    • Tüm rakamları gösterecek kadar yeterlidir, ancak özgün biçimlerine benzemediğinden bir fonttan çok gizli koda yakındır

3 yorum

 
tangokorea 6 일 전

İyi bilgi için teşekkürler. Bir anda çok istedim.

 
tangokorea 6 일 전

Buraya Koreceyi nasıl sığdıracağız TT öf

 
GN⁺ 7 일 전
Hacker News yorumları
  • Subpixel rendering kullanılırsa 1x5 bile gayet mümkün olabilir https://www.msarnoff.org/millitext/

  • 5x5 epey iyi ve 3x5 de fena değil, ama ikisi de tam ASCII kümesinin tamamını içermiyor
    Gerçek boyut konusunda da hafif bir göz yanılması var; harf aralığını da ekleyince aslında pratikte 6x6 ya da 4x6 grid gerekiyor
    Bu yüzden https://github.com/fcambus/spleen içindeki Spleen'i oldukça seviyorum
    Burada tam ASCII desteği veren 5x8 bir font var ve çoğu glif aslında yatay aralık dahil edilmiş 4x8 gibi davranıyor
    Kendi projemde bunu değiştirip tüm glifleri 4x8'e sabitledim; böylece 5x9 grid üzerinde her karakter arasında yatay ve dikey 1 piksel boşluğu her zaman korurken yine de hoş görünen bir render elde ettim

    • 1980'lerin başındaki Apple II için bazı kelime işlemciler, varsayılan 40 sütunlu ekranda grafik modunda 5x5 font kullanarak 60 sütun sağlıyordu ve bu bir satış noktasıydı
      Donanımla çözmek isterseniz 80 column card alıp gerçek 80 sütunlu metin kullanabiliyordunuz, tabii monitörünüzün bunu desteklemesi şarttı
  • Çoğu ultra küçük font, 1:1 ölçekte hızlıca okumaya çalışınca gerçekten berbat oluyor
    Eskiden bir oyun modu yaparken çok küçük ve sıkı bir fonta ihtiyacım olmuştu; 3x3, 3x5, hatta 2x5 dahil pek çok şeyi denedim ama hepsini okumak çok zordu
    Sonunda zephram'ın yaptığı Gremlin-3x6'yı buldum; yüksekliği 1 piksel fazla olsa da yatayda hâlâ çok kompakt kalıyordu
    En önemlisi, standart Latin harfleri birbirinden iyi ayırt ediliyordu ve çok büyütmeden de okunabiliyordu
    Ne yazık ki zephram FontStruct hesabını silince fontlar da tamamen kayboldu, ama ben kendi mod deposunda bir kopyasını ve CC0 lisansını tuttum; gerçek render'ı da ekran görüntüsünde görebilirsiniz
    [0] - https://fontstruct.com/fontstructions/show/1488093
    [1] - https://codeberg.org/janAkali/isaac-extended-icons-mod/src/branch/master/assets/fonts
    [2] - https://codeberg.org/janAkali/isaac-extended-icons-mod/media/branch/master/assets/screenshots/screenshot.png

    • [0] şu anda 404 veriyor
  • CJK karakterleri tarafında da benzer bir tartışma vardı
    https://chinese.stackexchange.com/questions/16669/lowest-pixel-resolution-needed-to-support-chinese

  • Yazar bunu görürse, küçük harf t için yatay çizginin üstüne bir piksel daha eklemek iyi olabilir
    Şu anki şekli büyük T ile fazla benziyor
    Yine de genel olarak çok iyi iş çıkarmış, paylaştığın için teşekkürler

    • Ben olsam küçük harf t'yi şöyle yapardım
      x
      xxx
      x
      xx
    • Küçük harf l de sanki daha çok şöyle görünmeli
      xx
      x
      x
      x
      xx
  • 4x4'ün E, M, W'yi düzgün çizmek için yetersiz olduğu söylenmişti ama aslında 5x5 de e'yi düzgün çizmek için yetersiz
    Küçük harfleri büyük harflerden daha alçak yapmak istiyorsanız en az 6 dikey piksel gerekiyor; descender'ları da düzgün vermek isterseniz bunun en az 7 olması lazım
    Teknik olarak, g ve y'nin baseline'a oturup aynı zamanda yatay descender'ı ayırt edebilmesi için 8 daha iyi olurdu ama burada biraz taviz verilebilir gibi görünüyor
    Ayrıca pratikte, harflerin altında ve yanında görünür boşluk bırakmak istiyorsanız karakter başına en az 8x6 piksel gerekiyor

    • Fontu o kadar küçültebiliyorsam, muhtemelen ilk vazgeçeceğim özellik küçük harf yüksekliğinin büyük harflerden düşük olması gerektiği kuralı olurdu
    • Örnekteki real pixels tarafındaki e bana aslında daha iyi görünüyor
      Bana göre üstteki boşluğu bir miktar doldurarak okunabilir hale geliyor ve uzun cümlelerde bağlam sayesinde rahatça anlaşılır
      Tabii kusursuz değil; üstteki büyütülmüş temiz piksel örneğinde tuhaflığı daha belirgin görünüyor
  • Pikselleri sadece açık/kapalı iki durumla sınırlamayıp çok seviyeli grayscale kullanırsanız daha küçük boyutlarda da okunabilir metin üretmek mümkün olabilir
    Ama burada önemli nokta letters değil text olması
    Tek tek harfler fazla bulanık olsa bile insan bağlamdan ne yazdığını çıkarabiliyor
    Hatta bu yöntem için özel olarak tasarlanmış bir font da şart değil
    Örnek: https://imgur.com/a/text-80-characters-per-line-240-pixels-wide-AlYrnSS
    Burada harfler arası boşluk dahil ortalama karakter genişliği yalnızca yaklaşık 3 piksel

  • LINC mini bilgisayarının LAP6 işletim sisteminde 4x5 font vardı ama küçük harf yoktu

  • Eskiden C64 üzerinde yazılımla 80 sütun elde etmeye çalışma işlerini hatırlatıyor
    3x7 piksel grid kullanılıyor ama bir satır ile bir sütun boşluk için ayrılıyordu; bazı ticari ürünlerde gerçekten kullanılmıştı
    https://www.pagetable.com/?p=901
    4×8 karakter setini hem okunaklı hem hoş göstermek kolay değil ve karakterler arasında 1 piksel boşluk gerektiği için pratikte karakter genişliği sadece 3 piksele düşüyor
    Bu yüzden özellikle M ve N gibi harfler zorlayıcı oluyor

  • M'den, noktalı sıfırdan vazgeçilir ve U/V/Y ayrımı da zayıflatılırsa 4x5 ya da 3x5 mümkün denmişti; ama bence 3x5 gayet kullanışlı
    https://robey.lag.net/2010/01/23/tiny-monospace-font.html