Et spill som tegner seg selv i ASCII
Et C++-spill laget under en folkehøyskole-game-jam, med en CUDA-akselerert ASCII-shader mellom rendereren og skjermen. Shaderen plukket det beste tegnet for hver pikselflekk i sanntid, og den samme kjernen kunne lese webkameraet og gjøre ansiktet ditt om til typografi.
Ideen
En "kodesone" i spillet vekslet rendereren til ASCII-modus. Ikke det vanlige lyshets-binningstrikset, men en treff-per-flekk mot et lite tegnatlas som kjørte på GPU-en, så det holdt seg på frame-rate.
Hvordan shaderen virker
- Framebufferen deles i flekker på størrelse med en tegncelle.
- Hvert tegn i atlaset er forhåndsrendret til en tensor i samme størrelse.
- For hver flekk vurderer kjernen hvert tegn ut fra strukturell likhet og velger det beste treffet.
- Hvis en flekk er hvit bare langs underkant, lander den på
_, fordi det er tegnet hvis massefordeling matcher.
Trikset var å gjøre dette billig nok til å kjøre per bilde. CUDA, scoring per blokk og et lite atlas fikk det godt under et millisekund ved 1080p.
Webkameramodus
Kjernen bryr seg ikke om innholdet, så å gi den et webkamerabilde i stedet for framebufferen fungerer rett ut av esken. Live ASCII-selfie:
Live ASCII-webkamera, drevet av samme kjerne.
Hva jeg ville sett på igjen
Matchingen er rent strukturell. Den vet ikke at O og
0 ser nesten like ut. Et lite perseptuelt ledd, eller å kjøre
scoringen mot et kantkart, ville rydde opp i typografien. Atlaset var også
bare monospace. Med en proporsjonal font og en smartere pakker er det mer visuell
variasjon å hente.