2 poin oleh GN⁺ 3 jam lalu | Belum ada komentar. | Bagikan ke WhatsApp
  • Font fixed-width ultra-kecil yang menempatkan semua karakter di dalam kotak 5 piksel dan menyesuaikannya agar bisa digambar dengan aman pada grid 6x6, dirancang untuk layar kecil dan lingkungan dengan memori terbatas
  • Ukuran 5x5 menyelesaikan masalah representasi E, M, dan W yang kurang memadai pada 4x4, dan juga memastikan pembedaan visual dengan menggambar sebagian besar huruf kecil 1 piksel lebih kecil daripada huruf besar
  • Seluruh font hanya berukuran 350 byte, sehingga cocok untuk mikrokontroler 8-bit seperti AVR128DA28, dan memberi efisiensi piksel yang besar pada layar kecil seperti 160x128 atau OLED 128x64
  • Bahkan dibandingkan dengan font vektor yang dirender pada ukuran serupa, hasilnya tetap kalah dari font buatan tangan 350 byte ini meski menggunakan anti-aliasing serta data kode dan font yang jauh lebih besar
  • Juga dilakukan eksperimen hingga ukuran yang lebih kecil seperti 3x5, 3x4, 3x3, 2x3, 3x2, 2x2; 3x5 masih cukup mudah dibaca, 3x2 lebih baik daripada 2x3, tetapi 2x2 pada dasarnya runtuh hingga mendekati level kode rahasia

Font piksel 5x5

  • Dirancang agar semua karakter muat di dalam kotak 5 piksel dan bisa digambar dengan aman pada grid 6x6
    • Dasarnya adalah font-inline.h 5x6 milik lcamtuf, dan font ini dipengaruhi oleh font 8x8 ZX Spectrum
    • 5x5 dipilih sebagai ukuran minimum yang tidak merusak keterbacaan
  • 2x2 tidak memungkinkan dan 3x3 secara teknis mungkin tetapi sulit dibaca, sementara 4x4 tidak cukup untuk menggambar E, M, dan W dengan baik
    • Pada 5x5, masalah ini terselesaikan
  • Pada 5x5, sebagian besar huruf kecil bisa digambar 1 piksel lebih kecil daripada huruf besar sehingga dapat dibedakan secara visual
  • Varian yang lebih sempit seperti 4x5 dan 3x5 juga memungkinkan, tetapi harus mengorbankan M, 0 bertitik, serta keterbedaan U/V/Y
  • Menyamakan semua karakter ke lebar tetap membuat pemrograman lebih mudah
    • Di layar, panjang string selalu dihitung sebagai 6 kali jumlah karakter
    • Tidak perlu khawatir "8978" menjadi lebih panjang daripada "1111" hingga membuat tata letak meluap
  • Ukuran total font hanya 350 byte, sehingga cocok untuk mikrokontroler 8-bit seperti AVR128DA28
    • Dalam teks disebutkan bahwa AVR128DA28 memiliki RAM 16kB
    • Chip seperti ini murah, hemat daya, dan tangguh, tetapi ruang untuk pemrosesan grafis sangat terbatas
  • Bahkan layar 384x288 pun memiliki sekitar 110 ribu piksel, terlalu besar untuk dimuat ke memori AVR
    • Sebagai gantinya, layar yang lebih kecil seperti 160x128 atau OLED 128x64 lebih praktis dan murah
    • Pada layar seperti ini, font yang efisien secara piksel dan digambar tangan lebih unggul
  • Font vektor yang dirender pada ukuran serupa juga dibandingkan
    • Font vektor tersebut sebenarnya memiliki tinggi 6 piksel, tetapi hurufnya lebih sempit
    • Bahkan dengan anti-aliasing, kode beberapa megabyte, dan data font 1MB, hasilnya tetap kalah dari font buatan tangan 350 byte

Eksperimen pada layar nyata dan ukuran yang lebih kecil

  • Piksel nyata tidak benar-benar berbentuk persegi sempurna, jadi tampilannya di layar tidak persis sama dengan render di bagian atas
    • Efek pseudo-drop-shadow yang dibuat oleh subpiksel dinilai positif
    • Pada layar hitam-putih efek ini tidak ada, tetapi tetap terlihat lebih halus daripada perkiraan
  • Jarak antar piksel membuat e dan g tampak lebih meyakinkan
    • Berdasarkan efek yang sama, kemungkinan font yang lebih kecil juga dieksplorasi lebih lanjut
  • 3x5 bukan resolusi minimum tanpa kompromi, tetapi masih terbaca dengan cukup baik
    • Pada ukuran ini ada 32.768 glif, dan 27.904 di antaranya dapat dibedakan satu sama lain
    • M, W, dan Q mengalami kerugian, tetapi O dan 0 masih bisa dibedakan
    • Ini bisa menjadi pilihan saat perlu memuat 50% lebih banyak kolom di layar
  • Pada 3x4, font masih bisa dibaca tetapi dengan batasan yang lebih besar
    • Ada 4.096 glif, dan 3.392 di antaranya dapat dibedakan satu sama lain
    • Pada ukuran ini huruf besar dan huruf kecil tidak bisa dibedakan, sehingga dipilih satu gaya yang paling cocok untuk ruang terbatas
    • Daya ekspresi angka juga memburuk, tetapi masih bisa berfungsi
  • Pada 3x3, kehilangan terbesar terjadi pada angka
    • Ada 512 glif, dan 400 di antaranya dapat dibedakan satu sama lain
    • Huruf masih bisa dikenali sampai tingkat tertentu tanpa duplikasi
    • Saat ditampilkan pada perangkat keras nyata, font ini menjadi jauh lebih baik
  • 2x3 sudah mendekati tingkat yang terlalu dipaksakan
    • Ada 64 glif, dan 44 di antaranya dapat dibedakan satu sama lain
    • Sebagian besar huruf sulit dikenali dan banyak yang tumpang tindih
    • Baris paling bawah adalah "Hello World"
  • 3x2 dengan rasio aspek terbalik jauh lebih baik daripada 2x3
    • Pada ukuran ini juga ada 64 glif, dan 44 di antaranya dapat dibedakan satu sama lain
    • Huruf yang membutuhkan detail horizontal seperti M, W, N, Q, G, P lebih banyak daripada yang membutuhkan detail vertikal seperti E, F, sehingga lebih menguntungkan
    • Baris paling bawah adalah "you can probably read this", dan masih bisa dibaca jika dilihat sambil menyipitkan mata atau diperkecil
  • 2x2 hanya tersisa sebagai pembanding demi kelengkapan
    • Secara teori ada 16 gambar 2x2 yang mungkin, tetapi satu adalah spasi kosong dan lima lainnya merupakan salinan dengan menggeser glif lain, sehingga pada praktiknya hanya tersisa 10
    • Ini cukup untuk merepresentasikan seluruh angka, tetapi karena tidak mirip bentuk aslinya, hasilnya lebih mendekati kode rahasia daripada font

Materi terkait

  • mcufont.h berisi data font 5x5
  • test.c menyertakan program untuk pratinjau font
  • font-inline.h milik lcamtuf ditautkan sebagai font asli
  • Lebih banyak contoh font ultra-kecil juga disediakan melalui tautan moonbench.xyz

Belum ada komentar.

Belum ada komentar.