Ohníček

Efekt údajně poprvé vytvořil (zveřejnil) Javier Arevalo v roce 1993 a dospěl k němu z větší části náhodou, od 28.12.2004 je k dispozici na pouët.net. Spolu s webovou reimplementací (kterou si můžete prohlédnout na www.iguanademos.com/Jare/files/Fire/; 4.5.2013) ji autor umístil do společného repozitáře FiredemoHTML5. Používá způsob výpočtu odlišný od Ohníčku (jiné vychládání).

Na různé varianty (například ve „spořiči“1 obrazovky) jsem často narážel u dosových aplikací na počátku milénia, kdy jsem (spíše ze zájmu než skutečné potřeby) experimentoval s vývojem v assembleru pro DOS.2 Poměrně jednoduchým výpočtem vzniká zajímavý a pestrý grafický efekt. V angličtině se nejčastěji nazývá fire, v češtině oheň nebo plamen (přestože se obvykle skládá z mnoha plamenů). Mně se nejvíce líbí ohníček, i kvůli shodě názvu s legendárním časopisem, s nímž jsem nohužel přišel do styku jen okrajově.

Stránky, ze ktarých jsem o efektu četl původně, se vesměs zjevně nedochovaly. Z českých, stále provozovaných, šlo o Plamínek v x86 assembleru a Builder.cz: Generování ohně.3 I později vznikaly stránky se mu věnující, například The Old-School Fire Effect and Bare-Metal Programming (30.12.2017).

Svou původní implementaci v assembleru se mi sice zatím nepodařilo dohledat (přišel jsem o část starých záloh), efekt se mi ale vždycky líbil (vývojář obvykle postupně vytváři „typickou“ sadu aplikací (kalkulačku, evidenci,…)) a znovu nastal čas Ohníčku. Předpokládám, že později přibydou implementace v dalších technologiích (prozatím rozpracované).

Abych docílil dobového vzhledu a umožnil další experimentování, lze u Ohníčku volit velikost bodu (šířka virtuálního bodu ohníčku v pixelech; všechny body se kreslí do plátna, nepoužívá se žádné nespolehlivé škálování) a „okraj paliva“ (tedy jak daleko od okraje plátna už ohníček živit nebudeme). Rychlým zvětšováním a zmenšováním okraje můžete „soustružit“ zajímavé tvary, například ohnivou (téměř)kouli. Kliknutí do plátna pozastaví (spustí) animaci, rychlost animace měníte odstupem snímků.4 Palivo (poslední dva řádky bodů) se do výsledné animace obvykle nekreslí (slouží pouze k výpočtu ohně), zde jej pro ilustraci ponechávám.

Efekt obvykle vypadá jako pás mnoha překrývajících se plamenů, táhnoucí se po celé šířce plátna (nejvýraznější při bodech velikosti 1, „bez dodatečného čtverečkování“, kdy vidíte hodně detailních, poměrně pekelně působících plamenů). Změna velikosti bodu vede ke spuštění nového ohníčku,5 podobně jako obnovení stránky. V jiných implementacích lze samozřejmě vytvořit i izolované plameny, případně strukturu různě fantaskně deformovat a obarvovat nereálnou paletou. Paleta barev Ohníčku vychází z palety Javiera Arevala, ale je detailnější.

Ohníček vypočítává teplotu bodu dle T-formace (celkový průměr teplot skupiny tří bodů o řádek níže a jednoho bodu o dva řádky níže), pracuje s palivem (některé implementace palivo nepoužívají) – náhodně generovanými body s nulovou čí maximální teplotou na posledních dvou řádcích a počítá oheň směrem od spodního k hornímu okraji plátna. Nepoužívá žádné pokročilejší animační rozhraní, v nakonfigurovaném intervalu vygeneruje nové palivo, vypočítá nové teploty bodů a s použitím palety převede teploty bodů na barvy pixelů plátna.


  1. Vzhledem k přavažující lokalizaci v nižších částech CRT obrazovky šlo spíše o podívanou, než skutečné šetření.↩︎

  2. Vývoj v Assembleru je sám o sobě zajímavý a z pohledu jazyků vyšší úrovně netradiční, ale v reálném módu procesoru v DOSu, kde je povolen například přímý přístup k periferiím (případně přímo v zavaděči bez operačního systému), je ještě zajímavější. Programátor se tak nevěnuje jen optimalizaci klíčových částí, případně programování jednočipu bez grafického výstupu, ale má možnost kompletně řídit rozmanitý hardware i s multimediální odezvou. Tou dobou ještě nebyly tak masově rozšířené NT systémy (které část původní funkcionality zakázaly nebo neúplně nahradily a některé dosové aplikace tak buď limitovaly nebo jejich použití přímo znemožnily), i pod Windows 95/98 stále leccos z „typických přístupů“ fungovalo.↩︎

  3. Builder.cz poměrně nepochopitelně zachoval články, ale často bez odkazovaných obrázků a příloh ke stažení. Přílohu jsem našel ve staré záloze, kód byl poměrně neuspořádaný.↩︎

  4. Při velmi nízkých hodnotách (jednotky ms) můžete narazit na problémy, Ohníček je v rané fázi (zejména kvůli celkové neohrabanosti technologií okolo Javascriptu) a například nekontroluje, zda výpočet předchozího kroku při požadavku na nový už skončil (kroky spouští časovač) i proto, že výpočet probíhá velice rychle.↩︎

  5. Nespouští složité přepočítávání obsahu plátna stávajícího rozměru na nový – při zvyšování počtu bodů by vedlo k „zamlženému“ snímku nebo zbytečně komplikovanému výpočtu.↩︎