A deep dive into ASCII rendering
Vegyük az eredeti, 128 code-point ASCII-t. Ebből gyakorlatilag a hasznos, látható rész csupán az alábbi karakterek:
!”#$%&’()*+,-./0123456789:;<=> @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Hosszú a története, honnan jött az, hogy ezekkel a karakterekkel minél izgalmasabb ábrákat, logókat készítsenek emberek. (Akit érdekel a teljes történelem, itt olvashat róla, de ez is egy jó áttekintés.)
A vizsgálódásunk szempontjából elég tudni, hogy a ‘90-es években a telekommunikáció elterjedésével jelentek meg széles körben az ezt használó kreatív kifejezések, amiket még kézzel szerkesztettek:
Kitérő (a teljesség kedvéért)
Ha továbblépünk a fenti 95 látható (printable) karakteren és elkészítjük a 256 szimbólumos változatot, elérkezünk például az MS-DOS-on, illetve a PC kompatíbilis gépeken megjelenő híres Code Page 437 szetthez:
Tényleg csak említés szinten: Commodore 64-en ott volt a PETSCII (ASCII leszármazott, de nem kompatíbilis), és Amigán egy teljesen nem szabványos valami, Mac-en volt a MacRoman (ASCII compatible) és így tovább.
Az ANSI (szervezet) szabványosította az ASCII spec-et. Hovatovább ők szabványosították még a terminálokon használt “escape control sequence”-et, ami leírja, hogyan lehetséges a Terminálra érkező byte streamben pozícionáló, színező stb. utasításokat elhelyezni.
Az MS-DOS ezt a szabványt implementálta le az ansi.sys driverrel, ami képes volt leképezni ezt vizuálisan, ebből jöttek ezek a szép színes ábrák, amiket a scene köznyelv végül, nem felróható módon, “ansi”-nak nevezett el. A BBS-ek bejelentkező képernyői képesek voltak ANSI streamet megjeleníteni, innen aztán egyenesen jött, hogy kinek van minél szebb/jobb bejelentkező képernyője.
Presztízs és ázsió volt a legjobb grafikusok képeit kirakni, akik még inkább rámentek arra, hogy minél látványosabb, érdekesebb grafikák várják a board-ra érkezőket. A hajunk leégett, ahogy soronként megjelentek ezek a színes ábrák. (Aki szeretne ebben a világban jobban elveszni, itt nézelődjön.)
De visszatérve a 7 bites ASCII-re: van annak valamiféle bája, hogy az eredeti betűkkel képezzünk le ábrákat. Az izlandi Alex Harri belemászott abba, hogyan lehet még jobb 7 bites ASCII renderert írni. Interaktív, long-form posztjában mutatja be a gondolkodást felépítve teljesen az elejétől, részletesen elmagyarázva, hogyan készül el a még sokkal tökéletesebb közelítés.
Nem tudtam azonos méretben a posztban meglátni, de ez az ábra jól mutatja be, honnan hová jutott el:
Nagyon tetszett, hogy legelejéről kezdi: vegyünk egy vektoros ábrát és raszterizáljuk. A raszterizálás folyamata mindösszesen annyi, hogy cellákra bontjuk fel a képet és megnézzük (“mintavételezzük”) a közepén levő pontot: ha fehérre esik, akkor találatnak vesszük, ha nem, akkor feketének.
Ebből aztán egyenesen következik, hogy lesz egy “nearest neighbor downsampled” képünk:
Ha valaki veszi a fáradtságot és összenézi, láthatja, hogy a kis karikák a fenti ábrán pontosan kiadják ezt a fekete-fehér pixel kört. A poén az, hogy egy kockában vehetünk nem egy, de több értéket is. Legyen mondjuk négy. Egy másik példán keresztül:
Most mondjuk azt, ha 4 találat van egy mezőn belül, akkor fehérnek tekintjük, ha 3 találat, kicsit szürkébbnek, ha 2, akkor még szürkébbnek, ha 1, akkor geci szürkének, és ha nincs találat, akkor feketén hagyjuk!
Íme ugyanaz a ferde vonal, csak beszínezve a cellák (vegyük észre, hogy a két kép pontosan ugyanazt a végeredményt adja):
Vagy ha leszedjük ezeket a vizuális jelölőket:
Baszó, nem?
De ez még mindig nem a 7 bites ASCII renderer, csak az intro. Ezzel ugyanis raszterizáltunk egy vektoros ábrát, de ezt még át kell fordítanunk karakterekre. A legtöbben egyébként itt állnak meg (mint harkály felső erdőhatáron), hiszen egészen egyszerűen azt mondják, hogy, a 4 színnél maradva, legyen mondjuk ez a ramp:
. = % @Ennek segítségével elkésztve a fentieket máris megvan a 7 bites ASCII renderer!
Nem így Alex Harri. Ő ugyanis azt mondta, hogy magának a 95 betűnek az alakját is figyelembe lehet (kéne!) venni, melyik betűforma hogyan képezi le legszebben a cellán belüli mintavételeket. Azzal ugyanis, ha növeljük a cellán belüli mintavételek számát, nem érünk el megfelelő eredményt, hiszen a legvégén csak egy értékre átlagolódik ki minden teljesen figyelmen kívül hagyva a betűk alakját.
És itt még csak a posztjának kb. harmadánál tartunk, kurva anyját!
Innentől azt csinálja, hogy felbontja körökre a cellákat, azokon belül 6 dimenziós shape vektorokat készít és úgy közelíti rá a betűkre, hogy még tökéletesebb legyen a végeredmény. GIGA NÖRDIZMUS VESZI KEZDETÉT A POSZTBAN! Olyan mély szintű kocka recskázás, hogy öröm olvasni.
Nézzük meg, hogy milyen szépen “folyik” a kockának a széle, ahogy az algoritmus a legtökéletesebben választja ki a megfelelő betűket:
Tényleg gyönyörű.












el kell ismernem a pixelbuzerias posztok kozul ez most erdekelt/tetszett