Showing posts with label Codemaster. Show all posts
Showing posts with label Codemaster. Show all posts

22/06/22

Housemarque: from Zero to Hero

Už ste určite videli nejaké grafické demo /demoscéna , 64KB kultovka/ pre 8 bity, PC alebo dokonca pre konzolu. Fínska herná firma Housemarque, ktorú SONY nedávno kúpilo - má tiež takú demo-kóderskú minulosť. Títo progiši vo všeobecnosti dokázali v demách na danom HW veci často proste nemožné a jeden sa mohol iba opýtať, čo z toho by vedeli dostať aj do hry. Viď fínsku, voxeloidnú hru Resogun, primárne pre PS3. Inak sa tu už motkajú pomaly 30 rokov /Stardust, 1993, Amiga/ a vždy s takými malými AA srandami. Pod SONY sa však vytiahli so svojou prvou AAA /dva a pol podľa mňa/ hrou Returnal pre PS5. Digitálny download si pre seba na SSD zoberie minimálne 56 GB /celkom dôležité čislo, o chvíľku uvidíte/. Hra beží interne v 1080p rozlíšení na 60 fps /podozrivo nízke rozlíšenie pri ich expertíznej zručnosti/ s temporálnym upscale na 1440p a nakoniec je to "checkerboardované" na 4K frame. Komplikované.

V hre nevidím nič, čo by drancovalo 8 jadrové Ryzen CPU, takže grafický engine robi na GPU zjavne niečo výpočetne náročné pod priemerne výkonným Unreal Engine 4.x. Na ten vlastný engine Housemarque nemalo dosť času ani peňazí a sami sa posťažovali, že nemali ani presné informácie o PS5 /RT - aké vlastne bude ?/, keď sa Returnal nachádzal vo fáze úvodných strategických rozhodnutí v kapitole grafické technológie. Hodili to teda na istotu a skončili na UE4 s jedným vtedy super čerstvým GI konceptom iných high-end fínov z Nvidia a Remedy. Nižšie si už aktuálne slajdy Housemarque, ktoré o úpravách toho kódu rozprávajú.

 

   celá prednáška /pozor je veľmi suchá a technická/

Takmer 25% bajtového objemu  hry tvoria nejaké "GI dáta". Príšerne veľke číslo. Vlastnú globálnu ilumináciu totiž vyriešili cez použitie iradiačných sond. Engine to teda neráta na pixel presne a z nuly v reálnom čase, ale pomáha si predpočítanými hodnotami uložených v sondách, ktorých sú v každej cimre na tisíce. Ako teda váš avatar plave prostredím, tak sa engine opiera práve o najbližšie sondy, požičiava si ich hotové kalkulácie, aproximuje a nasvetľuje. V slajdoch vidíte aj to, že tie prvotné výpočty môžu trvať aj hodiny na HW o výkone veľkých profi grafických staníc. Výhoda je, že to funguje a dáte to aj na 60 fps. Nevýhoda je, že sa základná geometria prostredia nesmie zmeniť, lebo dáta sú rátané napevno na to, čo tam stálo v momente výpočtov na tom Xeon servere a dynamický prepočet na PS5ke reagujúci na novú neplánovanú situáciu /"nejaká" stena preč, celý les preč, nová diera do zeme/ sa teda nekoná. Tie GI gigabajty si ináč na PS5ke tvrdo odmakalo PS5 SSD ! Pri PC verzii, ak by ste sa tomu chceli vyhnúť,  by ste ich teoreticky mohli uložiť do VRAM, ale nič tak veľké ešte na trhu roky nebude. A keď to hodíte do systémovej pamäte, potom sa pripravte na 32 GB ako odporúčané množstvo. Takže rýchle SSD potrebujete aj na PC.

Aj preto som tu minule písal o inom postupe, o práci jedného kódera z Embark Studios /exDICE utečenci/, ktorý sa vrhol v čase osobného voľna na oveľa novší GI algoritmus fy Nvidia - ReSTIR a ktorého bombastické videá, ukazujú ako tá GI funguje zhruba na GPU triedy PS5 v 1080p/60+ režime, ale v oveľa dynamickejšom, interaktívnejšom režime. Teoreticky vám teda nič nebráni zhodiť tu stenu preč a svetlo si s tým poradí. Housemarque už povedalo, že chce ostať v AAA priestore a ich ďalšia hra by mala byť ešte ambicióznejšia. Mám však taký pocit, že veľké softvérové domy dnes predvádzajú grafické kúzla, ktoré sme niekedy nemali ani v tých grafických demách, samozrejme proporčne k svojej dobe. Zjavne si môžu zaplatiť najlepšie mozgy na svete a naopak bývalí demokodéri ako fínski chlapci s tým už technicky nestíhajú držať krok. Každopádne veľmi rýchlo postupujeme k úplne dynamickej GI /s RT/ už na tejto generácií konzol. Hlavne pre malé firmy je to veľké plus. Extrémne to zrýchľuje a teda zlacňuje grafické odladenie hry. Takže nás čaká veľa priemerných, ale prenádherne nasvietených gamesiek !

30/03/22

Obraz v rekonštrukcii

Pred 40 rokmi zmätene čítam o televíznych normách PAL/NTSC/SECAM, Rozlíšenie obrazu, pixelíky, elektrónové delo, refresh, overscan, párne a nepárne raster riadky. Dnes to zjednoduším z didaktických dôvodov na PAL frame o 640x480 pixeloch  na 25 fps /a interlaced srandy už nebudem riešiť vôbec/. Ako vlastník ZX Spectra som v manuále našiel niečo o štandardnom rozlíšení 256x192 pixeloch a jasne som videl okolo hernej plochy veľký "border", teda okraj kde sa grafika nezobrazovala. Logicky tam museli byť tie "zvyšné" pixely. Potom som zhliadol niečo na C64 a Atari a nedalo sa nevšimnúť, že ich grafika bola výrazne "hrubšia", pixely tučnejšie ako na spectre. Na C64ke síce veľa farieb per pixel, ale v rozlíšení iba 160x200. Farby a veľké rozlíšenie sa rovná obrovská spotreba kapacity RAM, jej priepustnosti a tlak na GPU plniť to pixelami aka fillrate, takže plnofarebné 320x240 alebo rôzne interlaced hires 640x512 srandy sme videli až na Amiga 500. PC prišlo s novou kvalitou a to natívne progresívne zobrazenie na monitore bez trikov s párnými a nepárnymi snímkami.

DOOM 1 na PC beží v 320x200px/35hz iba na najvýkonnejšom HW svojej doby, takže priemerný hráč, aby to dostal na hrateľnú rýchlosť si musel zmenšiť veľkosť herného okna a čumel na veľké okraje /ako ja na spektre/ alebo to nechal tak a znížil rozlíšenie pixelov v jednej osi na polovicu /ako na C64ke/. Zo starých herných časopisoch po 1993, keď už PC u nás dominovalo si pamätám stále dokola jednu opakujúcu sa vetu - ohromenie nad kolapsom rýchlosti snímkovania pri prepnutí z VGA /320x200/ do SVGA /640x400/. Ak DOOM 1 na VGA pixely potreboval i486DX66, tak zákonite ďalšie podobné "DOOM" hry v SVGA na tej iste 486ke padli na hubu /Cybermage, viď prvý odsek/. Bežte si po Pentium. Hrubá sila. Čiastočným riešením boli aj "medzi režimy" ako RPG Ravenloft v 320x400 pixel.

Rozlíšenie hier však nakoniec odštartovalo prudko smerom na sever - 800x600, 1028x768 /neuveriteľná ostrosť/, 1600x900 a fenomenálnych 1920x1080. V zhode s tzv. Full HD LCD telkami a cieľový štandard aj dnes pre ešte stále najrozšírenejšiu konzolu PS4. Na PS5 sa teda čakal postup ku 1440p, 1620p, 1800p alebo 2160p alias 4K rozlíšeniu. Pozorujeme však skôr presný opak. PS5 sa cíti najlepšie niekde okolo 1440p a chystaný UE5 engine to posúva smerom nadol ku 1080p, dokonca ešte nižšie. Laik by povedal, že lepšia grafika chce proste svoje, ale chýba tomu "vnútorná" logika, predsa každá generácia konzol /povedzme PS mašín/ jasne v tomto bode o triedu poskočila - povedzme, že PS1 je 240i konzola, PS2 - 480i, PS3 - 720p, PS4 -1080p. PS5 stagnuje alebo dokonca cúva, ak zohľadníme minimálne 10 násobný nárast výkonu na strane GPU oproti PS4.

 
na PS2 gameplay stačí PS2 grafika - v 8K120 režime

Problém, na ktorý sme narazili je pritom jednoduchý a to - počet kalkulacií na jeden úspešne vykreslený pixel rastie v exponente nie lineárne ako výkon vášho GPU /alebo priepustnosti RAM/. Pri PS1 ste zobrali jeden pixel /texel/ textúry a napasovali ho na obrazovku /to môže byť jeden fyzický pixel, niekoľko pixelov, dokonca iba subpixel/. Tento proces sa vlastne volá rasterizácia a pri DOOM 1 v 1993 ho na PC robilo samo CPU. PS1 už pre to má HW podporu /aj stará 3Dfx Voodoo grafika/. Do rasterizácie teda išlo kopu silikónu až do momentu, kým neprišiel prvý pixel shader, ktorý predtým než ta rasterizácia to texel-pixel mumbo jumbo urobí, tak pixel shader hodnotu /farbu/ toho pixela musí najprv spočítať. Chcete peknú grafiku, per-pixel efekty, všetky tie lesklé, odrazivé a dynamické hry so svetlom. Takže počítame. Desať výpočtov na pixel. Sto. Tisíc. Desať tisíc. Na PS4 zistíte, že rasterizačná časť GPU sedí na zadku a čaká, kým to "compute" časť vyráta. Nie je teda problém na PS5 natívny 4K obraz premaľovať aj 100 krát za sekundu. Nemáte, ale čo vykresľovať. Tie pixely nie sú pripravené a ťažkosti tu zďaleka nekončia.

Extrémne výkonný rasterizér /140 miliárd pixelov za sekundu/ čaká za pomalšou SIMD compute  časťou /shader kód/ a ta zas za ešte pomalším Raytracing modulom. Ak to chcete polopate, tak oldschool raster grafiku dá PS5 natívne 4K/120fps bez záváhania, ale už iba na 4K/30 fps, ak chcete shader kód na, ktorý sa dá aspoň trochu pozerať a iba 4K a menej ako 15 fps ak tam pridáte aj RT efekty. Prvé čo vás napadne je posilniť v ďalšom GPU práve tú RT časť. Myslite však na to, že tranzistorový budget vášho APU pri GPU sa delí na rasterizačnú, compute a RT časť a ekonomika vás nepustí do väčšieho čipu, ale iba do prerozdelenia už existujúcich tranďákov. Väčšinou sa teda obetuje rasterizačná časť a napchá sa to do RT hárdvéru.

 
UE5 a pathtracing - veľmi pekné ale výpočetne mimoriadne náročné pixely

Musíme si priznať, že proces výpočtu jedného pixelu sa zmenil na nočnú moru /asi ako keď renderujete 3D CG grafiku na Amiga 500/ a to nám to tlačí finálne rozlíšenie smerom nadol. A v dohľadnej dobe sa s tým nedá zdanlico nič urobiť. Dnes na PS5 ste presne v situácií ako s tým spomenutým Cybermage v úvode. Ak vás napadne nahradiť výpočty prostým vrstvením "hlúpych" raster pixelov, aj na to sa myslelo ale watt spotreba vás rýchlo uzemní. Je to možné ale príšerne neefektívne, energiu žravé, neflexibilné, uživateľsky-game editor pre dev tím krajne neprívetivé. A spotreba VRAM by bola obzvlášť fantasticky zlá.

Renesancia rekonštrukčných algoritmov /obludne veľká téma a začať môžem už s 16 bitovým SEGA Megadrive/. Tu je odpoveď na otázku, čo s tým budeme robiť. HW to spočíta natívne v 2K rozlíšení a mágia to preklopí do žiadúceho 4K. Nvidia DLSS, AMD FSR, Intel XeSS alebo propriétne pokusy ušité pre daný enginy konkrétnym dev tímom ako TSR od EPICu. Umelé zvýšenie rozlíšenia sa zas až tak filozófiou nelíši od čarovania pri kompresii 2D videa. Herný G-buffer /pri najrozšírenejšom deferred renderingu/ neustále drží v pamäti veľké množstvo informácii o jednodlivých pixeloch. Ich farba /albedo, difúzna, spekulárna žložka, PBR energia povrchu/, normály, depth buffer, motion vektory. Engine alebo rekonštrukčný kód teda vie, kde sa pixel v troch osiach nachádza a kde sa v priestore pohybuje. Akými pixelami je obklopený alebo bol/bude v ďalšej milisekunde. Či ide o ostré kontrasty, polotieň, tieň bez detailov. Komplikovaný rekonštrukčný kód sa potom snaží uhádnuť tie nové pixely aj podľa kontextu celého obrazu.

 4:30 min - softvérový UE TSR 4K upscaler je v statike na nerozoznanie od natívneho 4K

Budúce APU pre konzoly teda bude musieť naásť miesto na ploche chipu aj pre ML logiku /okrem už spomenutej rasterizácie, compute a raytracingu/ !! Rekonštrukciu obrazu môžte urobiť aj bez HW pomoci ML, ale nerobím si ilúzie o tlaku Nvidie na ďalšie aplikácie ML logiky. Napríklad interpolácia frejmov pri fyzike. Čo môže byť ďalšia oblasť pri fejkovaní v hrách. Hlavný avatar a blízke okolie na 1:1 fyzike a všetko ostatné hlavne vo väčšej vzdialenosti na ML fake rekonštrukcii, kde bude engine reálne počitať iba každých 2-3-4 frame s interpoláciou /tehly v pohybe, vlasy, šaty, laná, autá, vodu/.

Osobne má na tom všetkom teraz "trápi" hlavne ta redundancia na strane grafiky. UE5 engine dynamicky v engine skáče zo 100% softvérovej na 100% HW rasterizáciu podľa komplexnosti toho, čo sa na scéne deje. HW rasterizér je v UE5 o 300-400% pomalší pri renderingu malých /veľmi malých/ polygónov. Pri PS6 skončíte opäť na nejakom stredne veľkom 350 mm2 APU, čo je pomerne malá vecička a ešte to musí stáť pod 100 euro. A potrebujete tam dostať 4 hlavné "gfx" bloky - raster, compute, RT, ML. Určite bude treba prijať nejaké zásadné rozhodnutie a to už na úrovni veľkých grafických middleware /EPIC + GPU vendors/ a urobiť skokovú zmenu a nechať v ďalšej generácií konzol iba rudimentárnu rasterizáciu a vraziť ušetrené prostriedky do compute, RT, ML. Niečo podobné, ako keď sa z PS4 s pomalým, notebookovým 5400 RPM HDD skočilo na najvýkonnejšie herné SSD IOP všetkých čias pri PS5, o roky pred bežným herným PC. Rozhodne si myslim, že práve konzoly určia ďalšiu veľkú hernú paradigmu /gameplay, grafika, fyzika/ už v ďalšej generácii. Presnejšie, že sa konečne zbavíme toho MS-DOS/PS2 dedičstva - celá scéna je statický Potemkin, AI tupá a celá gameplay je uhýbanie a pižlanie nožky bossa so znižovaním jeho HP.

15/02/22

Full Motion Video

FMV má na strane koncového uživateľa dve dôležité fázy. Dekódovať zabalené dáta - mimoriadne CPU naročné a potom tie pixely rýchlo vykresľovať. Ak nemáte dobré GPU, tak je všetko na pleciach CPU. Kapitálny problém v roku 1993 s i286-386 procákom. Beh 3D hry je v tomto smere veľmi podobný. Transformácia vertexov na scéne - CPU na kolenách. Rasterizácia bez dobrého GPU - opäť všetko odmaká definitívne porazené CPU. Ak teda vaša i386/SX nezvláda DOOM v 320x240 pixel na 35 fps, tak nedá tutovo ani to FMV video v tej istej kvalite. Rozbehať DOOM, Quake alebo Crysis na všetkom od kľúčenky s displayom po inteligentnú ladničku patrí aj dnes medzi otrepaný herný foklór. Ide o hry, ktorá každá vo svojom čase výrazne prekračovala nárokmi HW vybavenie bežného hráča. Preto ten humbug. Menej pozornosti sa už dnes venuje /vlastne žiadna/ schopnosti prehrať FMV cez celú plochu obrazu - 25 pekných obrázkov za sekundu pri plnom pokrytí všetkých viditeľných pixelov. V čase DOOMa to bola ďalšia neriešiteľná vec. Hráč mal ledva procák triedy i386/SX33 alebo i386/DX40 s 8-16 bit ISA grafikou a tie v CD hre s FMV videami ako Star Wars: Rebel Assault /1993/ úplne prepadali. Recenzenti si to v 1993-1994 všimli tiež. Nutná bola nemožné drahá i486/DX66 na high tech 32 bitovom grafickom VESA LB slote. Aj toto monštrum by však okamžite havarovalo po kontakte s MPEG štandardom. Tento audio/videok kodek potreboval minimálne Pentium pri pokuse zvládnuť to softvérovo bez patričnej a na to určenej HW podpory /ilustračne dcérska "FMV MPEG" doska pre Amiga CD 32 konzolu veľká ako stôl a drahá ako volvo/.

Najjednoduchšie možné FMV video si predstavte ako sled obrázkov v plnom rozlíšení /bez kompresie a teda bez nutnosti dekompresie/, ktoré rýchlo hádžete na obrazovku. A každý obrázok je jedinečný. Rozlíšenie obrazu krát farebné rozlíšenie krát počet snímkov za sekundu a hneď zistíte, že vaše i386 CPU tie pixely tak rýchlo na obraz neprenesie. CPU je pomalé, zbernice sú veľmi pomalé, grafická karta je iba RAM s DAC. Nie je to GPU, nie je tam HW podpora pre nič. Fillrate /počet pixelov generovaných za sekundu/ je maličký a nestačí ani na plynulý skroling 2D grafiky v hre čo je invertovane to isté ako to plynulé 2D video. Rebel Assault však aj tak na tej i386 nejako beží. Dosiahne sa to jednoducho tým, že každú premennú rovnice razantne upravíme smerom nadol. Rozlíšenie sa stiahne napríklad na 1/4 a tie pixely sa potom nasilu roztiahnú na veľkú plochu. Je to teda príšerne kockaté a bez detailov, z hicolor 65K palety zlezieme na 256 farieb, alebo ešte nižšie a z 25 fps na polovicu alebo aj pod 10 fps. Je to teda hnusné a hýbe sa to prískokmi. Nečudujte sa teda šokovaným výrazom na tvárach hráčov, keď v intre Resident Evil 1 na PS1 uvideli plynulo prehrávané ľudské tváre v skvelom rozlíšení. PS1 mala nielen GPU s podporou pre 3D T@L ale aj HW dekodér pre dáta v MPEG formáte. PS1 s CPU na 33MHz teda bola o celú generáciu pred nastupujúcimi hernými PC.

 
 The 7th Guest (1993, PC) - miliónove predaje, "CD FMV" killer app !!

V rozlíšení 320x240 v 8 bit palete je na jeden snímok potrebné asi 80 KB dát. Jedna sekunda videa na 25 fps teda chce 2 megabajty /taký dátový tok z floppy mechaniky a ani z CD v 1993 nedostanete/. Jedna minúta videa je 120 megabajtov a jedna hodina šokujúcich 7200 mega. Ak to teda dobre rátam. Na jedno bežné CD a dokonca ani DVD sa to nezmestí. MPEG kompresia to zmáčkne na malé zlomky tohto množstva a vystačí si aj s pomalou CD mechanikou /v prípade PS1 - double speedka/. Bohužiaľ na ošéfovanie MPEG formátu potrebujete buď dekompresný HW modul alebo ninja CPU. Amiga alebo bežné PC, konzola /SNES, MD/ v DOOM ére nič podobné nemala.

O viac ako 25 rokov neskôr tu je ZX Spectrum Next, ktoré pomaly finalizuje svoju HW podobu ako najvýkonnejší 8 bit všetkých čias a tá podpora pre MPEG tam nie je tiež. Nemá ju preto, lebo to už niet kde na FPGA vopchať /vybrali si lacný a nie veľký chip, semantický rozdiel je vám jasný/. Kapitolu či to zvládne "DOOM", už máme za sebou. Urobil sa až jeden pokus, dnes sa vážne nechce nikomu kódovať len tak pre radosť. Prišiel čas zmáknuť aj to FMV. Next je natívne napojené na radič s flashkou a má na 8 bit platformu veľmi rýchlu "2D" grafickú kartu. Plnohodnotný DOOM ZX Spectrum Next nikdy nezvládne ale 2D SHMUP hru rozbehá asi lepšie ako poctivá i386/DX40ka. Starý dobrý StarGunner /1996, PC/ mal v minimálnych HW specs uvedenú i486/8MB RAM pre rozlíšenie 320x240 na 60fps a nechcem strašiť, ale Next to dá na 30 fps už v prvej generácií svojich hier v obdobnej kvalite. Teoreticky. Prakticky sa to nikdy nestane. Malá základňa.

Šialený dav však chce na Nexte aj CD "flash SD" FMV hry ako ten Rebel Assasult alebo FMV aj s projekciou skutočných 3D meshov alebo sprajtov do videa. Je to možné ? Áno a to priamo "day one" z krabice. Podľa dev tímu výkon SpecNext 2D jadra, DMA a flash SD radiča stačí bez problémov zásobovať pixelami základné "legacy" rozlíšenie 256x192 pixel aj 25 snímkami za sekundu v 256 až 512 farbách. Rozhodne v lepšej kvalite ako tá hnusne kockatá cukatúra na i386 v FMV CD hrách. Problém s takým nekomprimovaným videom je, že každá sekunda je asi 1.2 mega dát a jedna minúta teda 72 mega, desať minút zas 720 mega. Niekoľko šikovných a veľmi strašne šikovných speccy kóderov preto rozpracovalo zopár nápadov, ako si s tým poradiť.

Kev Brady ešte pred asi troma rokmi na starej verzii 2D Next jadra /iba rozlíšenie 256x192 pixel, dnes je to až 640x256/ a na polovičnej rýchlosti systému /CPU, GPU, DMA na 14Mhz/ ukázal video v širokouhlom rozlíšení 320x180 pixel s akceptovateľnou kvalitou a rýchlosťou. A išlo o komprimované video s dekompresiou v reálnom čase. Toho chlapíka žeriem, ide o jedného z najlepších žijúcich speccy ASM kodérov na svete. To 320 pixelové rozlíšenie po horizontálne dosiahol tak, že využil HW sprajty a vľavo a vpravo mimo hlavnej zobrazovacej plochy nimi v vertikálnych stripoch natiahol obraz do šírky a do adresného priestoru tých sprajtov /sú vo vlastnej extra RAM mimo hlavný systém/ namapoval pixely toho videa. Je to blázon. Klikni na video v komentároch o dĺžke 2:38 minúty 

Použil delta enkódovanie dát vo forme rozdielov /delty/ v sekvenčnom slede snímkov, skôr ako prácu s celými snímkami si teda všíma zmenu medzi dvoma snímkami. Ide sa až na úroveň jednotlivých scanline - riadkov obrázku. Túto prácu si urobíte na PC. Dekódovanie už beží na Nexte. A ide ešte ďalej. Veľmi špinavo /ako je na spektre zvykom/ využíva scroll HW registre v osi X a Y na pomoc s počítaním a uložením "motion" vektorov pohybu pixelov na obrazovke. Používa vlastné sofistikované softvérové kešky, double-buffering a pre-buffering /poznáte aj z YT videa/. Pozná to variabilný bit rate a variabilný dithering medzi snímkami. Používal v našom konkrétnom prípade 24 bitové PC video konvertované vlastným enkóderom do 9 bitovej palety Nextu /to je 512 farieb/. Next paletu bolo možné nastaviť individuálne pre každý frame osobitne. V jeho formáte má 10 minút videa s mono 15KHz zvukom asi 140 megabajtov. Dosahuje kompresiu okolo 6:1, čo je skvelé. Povedal tiež, že sa kódu od vtedy nedotkol a na novom jadre /turbo DMA, MMX inštrukcie/ s oveľa vyššou rýchlosťou to dokáže v ešte lepšej bravado kvalite, teraz však robí na konverzii hry z PC na Next. 

Jari Komppa a jeho "very slow" video prehrávač pre ZX Spectrum Next,
   možné použitie aj v hrách s predpočítanou trajektóriou pohybu

Najnovšie "work in progress" info na poli FMV pre Next. Oveľa menej talentovaný Jari Komppa sa pokúša o to isté ako Kev Brady, ale na najnovšej verzii HW Nextu. Ako oveľa horší kóder sa dopredu ospravedlňoval nech nečakáme zázraky. Prehrávač mu zatiaľ funguje iba v základnom rozlíšení 256x192 pixel, zvuk tam nemá /ale pracuje na tom/. Používa jednoduchú strátovú 1:2 kompresiu, nemá variabilný bitrate, nemá variabilný dithering, blending, plávajúce palety. Nemá vlastne skoro nič. Je to proste naivné cvičenie začiatočníka. Do procesu teda vstúpil špičkový kóder speccy demoscény pod nickom ped7g a pomohol mu extrémnnym spôsobom ten bordeľ aspoň zrýchliť. Stále je to "hlúpy" ale už aspoň veľmi rýchly kód a v alfa 0.6 verzii zvládne pekné kúsky a dá sa cez neho núdzovo prehnať aj celý Ghostbusters /1984/. Ak vaša hra nutne potrebuje animačku, intro, game over outro tak to rýchla cosplay s postefektami a jeden mobil s Jari Komppa softom dostane do Nextu. Má to celé v kompletnom balíku /enkóder, dekoder, streaming API, knižnica pre OS/. Čakám na verziu so zvukom, lepšou kompresiou, demátko ala Rebel Assault. Bonus - celosvetovo beží populárna FMV súťaž ako dostať toto referenčné Bad Apple !! video na systémy, kde FMV nemá čo robiť. Zamachrovať, ultra low level nakódovať a ohromiť svet.

17/01/22

Švédske stoly : Digital Illusions - DICE - Embark Studios

Robert "Patrick" Söderlund bol výkonný riaditeľ v Electronic Arts /EA/ a negatívne sa preslávil výrokom “If You Don’t Like it, Don’t Buy it.” To keď internet povedal, že Battlefield 5 /2018, DICE pod EA/ je grécka tragikomédia. Velil hernej produkcii, aj hernému dizajnu. Jadro DICE tvorila švédska demoskupina The Silents /Amiga, C64/ a tá v 1992 založili hernú firmu Digital Illusions /tie slávne amigácke pinbally/. V roku 2000 Digital Illusions akvirovali iných švédov z Refraction Games /Codename Eagle/, ktorí mali rozpracovaný nový herný koncept neskôr známy ako Battlefield 1942. Takto EA prišlo ku Battlefield IP v roku 2006 po úplnom pohltení Digital Illusions /ďalej už ako DICE/.  EA sa snaží vo svojej divízií Frostbite Labs vyvíjať aj vlastný výkonný engine Frostbite /od roku 2008, ideovo za ním stoja progiši z DICE/, ktorý poháňa hlavne Battlefield hry. Bola snaha ho natlačiť aj do iných projektov, ale engine nie je uživateľsky komfortný pre nikoho iného ako kóderov z DICE. Dnes EA neťahá víťaznú šnúru. BF hrám sa stále nedarí, Frostbite zastaráva. Pre vlastné hry nakupujú Unreal Engine a BF hráči s hrôzou utekajú ku CoD konkurencii. Robert "Patrick" Söderlund sa teda rozhodol zdvihnúť kotvy.

V lete 2018 opúšťa EA a ešte v jeseni toho istého roku zakladá videoherné Embark Studios /to embark = aj ako nalodiť sa, eh/. Robert je milionár a mimo iného vlastnil v roku 2016 oficiálne cca 11 mega USD v EA akciách. Dev tím oslávil nedávno tretie výročie a robia na dvojici hier. Kooperatívna scifi akcia Arc Riders /Unreal Engine s ich vlastnými modifikácimi/ a nemenovaná PvP mulťák hra. Podobne ako DICE pracujú s kódom na expertnej úrovni. DICE svojho času s AMD zahviezdilo s veľmi výkonným grafickým API Mantle /výkonnejšie ako DX alebo OGL/ a dnešné používané Vulkan API je vlastne jeho derivátom. Embark chcú ísť ešte ďalej !!

Už dlhšie hovorim, že na produkciu skutočnej next gameplay potrebujeme samozrejme aj vhodné softvérové vývojárske prostredie, middleware, knižnice, interoperabilitu, jazyk. To dnes nemáme a 30 TFlops na NV GPU je vám k ničomu. Potrebujeme niečo čo zvládne prepojiť shader jazyk GPU s C++ jazykom CPU. Naozaj funkčne a flexibilne a tiež grafiku s fyzikou. Všetci už chceme opustiť tú PS2 gameplay mizériu, však. Embark sa rozhodol s projektom pod nazvom Rust vytvoriť presne toto. Revolučný next gen open-source programovací jazyk pre GPU /alebo heterogénne CPU-GPU pod OpenCL, Rust-CUDA, časom možno chcú nahradiť aj SPIR-V/, čo vydrží ďalších 40 rokov /citácia !/ a prenesie nás do hernej budúcnosti. Robí na tom zatiaľ malý tím cca od roku 2016 a práce je ešte pred nimi more.

 

 
Embark Studios, Kajiya renderer GI + RT /ReSTIR je Nvidia algoritmus pre GI/

To ale neznamená, že nejakú funkčnú ukážku už nemajú hotovú. Je to "experimentálny" hybridný renderer Kajiya /Rust/. Hybridný v renderingu znamená, že používate mix softvéru a hardvéru v generovaní obrazu. Niečo podobné ako Lumen pri UE5. Kajiya používa HW rasterizér, softvérový compute rasterizér a raytracing v HW, ak ho GPU podporuje. Globálna iluminácia je samozrejmosť. Exekúcia je však komplikovaná /voxelizácia, GGX aproximácia, konverzie specular-diffuse po prvom odrazem atď./. Na jednoduché riešenie a teda, že všetko spočíta GPU presne, ako má podľa známych rovníc nám ešte chýba zopár desiatok teraflops. Video vyššie v rozlíšení 1080p /Vulkan API/ pod AMD 6800 XT beží na 10ms na frame, čo je cca 100 fps. Ak máte problém s obývačkou, tak si tam predstavte Silent Hill alebo Resident Evil asety. Aj s celou hernou logikou a trochou fyziky to PS5 musí dať na 30 fps so svetelnými fenoménmi ako vo filme - podobný výkon ako PS5 v Matrix deme na UE5.

Na koniec sa ešte na chvíľku vrátim ku DICE a ich Frostbite enginu. Ak si poviete, že utrpeli útekom časti kóderov do Embarku zásadnú stratu, tak opak je skôr pravdou. A kde sa dvaja bijú, tam máme tri štandardy. EA má niečo ako vedecko výskumnú základňu pod názvom SEED. Jeden z ich šéf kóderov - Henrik Halen pracoval pod DICE aj na Frostbite engine a s Andreas Brinck /Digital Illusions veterán !/ nedávno prezentovali superrýchle riešenie GI vo videoprednáške -  GIBS /Global Illumination Based on Surfels/. Princíp je jednoduchý. Potrebujeme zjednodušiť počet GI kalkulácií na hrateľnú úroveň. Surfel je parametrická 2D machuľa a bežne je väčšia ako jeden pixel a dáta vie derivovať z existujúceho G-buffera /čo je 95% dnešných AAA hier /. Aplikačne si surfely predstavte ako farby troch vertexov-vrcholov polygónu interpolované na celú plochu polygónu /nerátate otrocky všetky pixely toho trojuholníka/. 

Surfely kód enginu rozhodí po všetkých objektov /ID indexácia, aby sa ušlo každému/. Bližšie objekty - viac surfelov, menšie surfely, viac svetelných detailov. Vzdialenejšie objekty oveľa menej surfelov, menej svetelných výpočtov. Počet surfelov na frame /screen space !!/ je blízko pojmu konštantný, dostanete teda dobre kontrolovanú záťaž GPU, bez ohľadu na komplexnosť scény. Podobne ako Kajiya renderer Embarku sa tam chystajú zapracovať aj dynamickú geometriu /nová diera v stene, ešte novšia diera v zemi/. Všetky doteraz vymenované technológie smerujú už na súčasnú generáciu konzol PS5+XSX. Veľmi dobrej dynamicky nasvietenej grafiky nielen v EA hrách, ak hra bude mať slušný budget, bude habadej. Nemôžem však to isté povedať o modernejšej animácií a fyzikálnej interakcii. Nechcené deti, potrebujú oveľa viac skutočne kreatívnej práce. Nabudúce snaď aj o nich.

03/01/22

Raffaele Cecco

Britský vývojár, kóder, grafik starej školy, ktorý stojí aj za hrou First Samurai /1991/ a práve s ňou začínam preto, lebo si dobre pamätám na preview text z BITu v 1992, kde ospevovali unikátny prístup ku animácií meča /sú zdôraznené všetky jeho animačné fázy/ a ku zvukovým efektom /sfx jingle sú často veľmi efektné orch-hits a pridali aj bombastické "Hallelujah" chorály pri otvorení truhlice s pokladom/. Samuraj bola hra hlavne pre farebné a dobre ozvučené 16 bity /Amiga, Atari ST, SNES/ ale vopchala sa tam aj výborná verzia pre C64ku. Druhý diel dokonca sám kódoval pre Sega Megadrive /Motorolu 68000ku si veľmi pochvaľoval /. ZX Spectrum však utrelo sople do rukáva. Ak však dnes navštívite Rafaelov twitter, tak v hlavičke má nejakú šmejd speccy grafiku a nie amiga HAM 4096 farebné módy a v texte hrdo hovorí o spectrum minulosti a na prvých miestach spomína speccy hry Exolon a Cybernoid.

Exolon - dokonalá grafika, pixel art, zvuk, hratelnosť. Harmónia ale iba na spektre

Je tomu tak preto, lebo on je speccy borec. Ako decko dostal na narodeniny Sinclair ZX81 a začal programovať v BASICu. V 1986 pod fy Mikro-Gen vydal svoju prvú, krabičkovú hru Exuinox /napísal si sám aj príbeh hry, manuál, one-man army, tak sa to vtedy robilo/. Bohapustá a zjednodušená kópia starého a vtedy celkom revolučného Underwurlde /1984/. Ďalej simplexný Cop-Out /na voľnej nohe po odchode z Mikro-Gene, 1986/ ako jasný Virtua Cop klon alebo spolu s Probe konverziu automatovky Solomon’s Key /1987/. Malá slabina Rafaela - je skvelý kóder ale poslabší herný dizajnér. Originálne fláky teda nečekajte. Hneď ďalšia hra mu však prinieslo svetlo reflektorov a zápis do histórie. Exolon /1987, fy Hewson/. Fantastická záležitosť, ktorú hrajem aj dnes, sem-tam si hodím zopár miestností. Je to run@gun akcia /demo ešte bez názvu ukázal šéfovi Andrew Hewson a ten aj prišiel s názvom hry - Exolon/, ktorá nejakým zázrakom presne trafila ten zábavný rytmus hrateľnosti. Hra neskroluje, snažíte sa akčne vyriešiť izbu po izbe. Pohyb, animácia, skákanie, streľba, exoskelet s protimínovou ochranou /mimoriadne uspokojujúca chôdza po mínach je malá časť celkového zážitku/. A neuveríte je tam aj pokus  o speccy podobu tých "orch-hits" ako na amige vo First Samurai. Tá grafika v pozadí jeho twitter konta je práve z Exolona. Všetci sme na tu gamesu pyšný a bolo portovaná úplne na všetko vrátane Amstrad CPC, C64, Atari ST, Amiga. Dokonca existuje aj moderný WinOS remake.

Raffaele Cecco - "Live long and prosper"

V 1987-1988 vypustil stále pod Hewson dvojicu vesmirných strieľačiek Cybernoid 1 a 2. Stále prudko neoriginálne ale technické bravúrne a topíte sa v množstve sprajtov. Oproti Equinoxu to vyzerá, ako keby niekde zobral celú vaňu výkonu navyše, kódersky sa neskutočne zlepšil. Ako celebritu ho následne oslovil aj legendárny herný spektrácky časák Crash a tam aj začal od jara 1988 prispievať počas tvorby svojej ďalšej hry, prvej skrolujúcej  - Stormlord /1989/, neskôr aj druhý diel Deliverance: Stormlord II /1990/. S dvojkou Stormlorda sa následne s Hewson rozlúčil.

Asembler Stormlordov ťukal na IBM PC v cross-asm prostredí a výsledný produk po kompilácií hádzal cez paralelný port do spektra. Grafika sa robila na Atari ST v Advanced Art Studio programe. Nečudujem sa im, potrebovali maximálnu efektivitu a komfort pri tvorbe. Čas = prachy. Spectrum však v roku 1986 dostalo vlastný špičkový, grafický editor The Artist 2 vrátane modulov pre tvorbu sprajtov, fontov, kompresiu grafiky atakďalej aj s podporou pre nové Kempston myš rozhranie. Nad kódom pre skroling si dlho lámal hlavu. Nielenže je ťažké také niečo vôbec nakódovať, ale veľké ťažkosti robí hlavne atribútový systém farieb, ktorý ako keby skroluje paralelne s pixel artom pod ním. V lete 1988 si sťažuje na to, ako sa tvorba hier profesionalizovala. Niekedy na to stačil jeden prográmátor s kamošom a dnes /v jeho času/ stráca celé dni vyjednávaním s marketingom, tlačenou reklamou, uzávierky zámestnavateľa, PR /čítaj pí ár/ kecy, grafici, muzikanti a ďalší. Kontrakty, zmluvy.

Rozpitval kód hry Zynaps, ktorej neuveriteľný dobrý skroling veľmi obdivoval a prišlo mu neskutočné, že také niečo je možné aj bez HW podpory. Kamoš Nick Jones prišiel na magickú fintu ako značne zrýchliť skrolovací kód Stormlorda výmenou za mierne obmedzenie flexibility práce z grafickými dátami. Výsledkom je krásne plynulo skrolujúci "exolon" s variabilnejšou grafikou. Stormlord 1 a Stormlord 2. Rafaelo mal v tej dobe aj tento speccy TOP 3 hier mimo vlastnej tvorby a to Knight Lore /revolučný, inovatívny, 3D izometrický engine/, Jet Pac /rýchla a nesmierne chytľavá hrateľnosť/, Commando /super skroling, kopa sprajtov a skvelá hrateľnosť/. Podobný TOP list mal aj pre herné mašiny: ZX Spectrum, Amiga /predbehla dobu, super CPU/, SNES /hlavne kvôli hrám a Mode 7 gfx režimu, heh/.

V ére po 8 bitovom spektre a amige sa ešte hodnú chvíľku motal okolo Playstation 1 - napríklad Agent Armstrong /60 fps na PS1, 1997/ alebo GrooveRider: Slot Car Thunder pre PS2 /2003/, ale nikdy už nešlo o autorskú prácu ako pri Exolone, Cybernoide, či Stormlorde a presúval sa skôr na dozorujúceho prácu "staršieho" šefa programovania, aby nakoniec na staré kolená skončil úplne mimo gamebizu ako dátový analytik pre londýnsku burzu. Vlastne nie tak celkom. V roku 2016 sa cez Kickstarter pokúsil oživiť svojú hernú kariéru s projektom Super Samurain: Temple of Time, avšak neúspešne, záujem nebol, peniažky sa nenazbierali.

Ak vás zaujíma, čo hovorí na dnešnú situáciu, nič prekvapujúce vám nepovie. Je to pragmatický veterán a vidí veci také aké sú. Programátor ako malé koliesko v mašinérií veľkej firmy. Fazuľky rátajúci kravaťáci pri stole riaditeľov. Drakonická kontrola rozpočtu a témy hry a obmedzenie inovácií. Chaos na mobilnom trhu, desaťtisíce hier, kde jedna dobrá hra sa ľahko utopí v mori tých zlých, nekonečné in-game reklamy, mikroplatby, generačná zmena návykov hráčov a zabúdanie na minulosť. Nádej ešte žije. Má dcéru a tá vyhrala národný šampionát v Minecrafte, takže aspoň takto nepriamo sleduje hernú scénu ďalej a keby Super Samurai prerazil, tak by sa na PS4 a Xbox opäť vrátil. Dnes má 55 rokov, nie je senilný, občas niečo zahraje ako Rayman Legends alebo Monument Valley a hovorí, že tú akčnú iskru ala Exolon má stále v sebe.

29/12/21

Softvér > hardvér

Aktuálna generácia konzol je prvá s HW podporou pre raytracing /RT/. Raytracing je budúcnosť hernej grafiky, lebo individuálne riešenie každého svetelného fenoménu pomocou HW rasterizácie je už technicky nemožné. Herná grafika je dnes už príliš komplikovaná. Programátorsky mimo HW teda musíte ošetriť nespočetné grafické situácie. Ladenie scény, početné iterácie pri použití rasterizácie sú nesmierne časovo prácne a teda nákladné. Komplexné a kompletné riešenie "svetla" v HW je toho času za rozumné peniaze nemožné. Neexistuje jeden jednoduchý šrubovák na všetky šrubky na svete. HW sa teda navrhne "univerzálne" a softvérový prílepok ide následne krvopotne na mieru. Pri PS5 a XSX bol celý laický internet absolútne presvedčený, že ich HW nezvládne vo veľkej hre naraz dynamickú GI /globálna iluminácia kvality radiosity/ spolu s RT. Unreal engine 5 to dokázal, ale tomu hernému HW paradoxne za veľa nevďačí. Posledné Matrix UE5 demo je významne technologicky vylepšené oproti tomu prvému jaskynnému pre PS5. Kecať o detailoch tejto práce je zbytočné, proste mi verte, a je pred nimi ešte kvantum ďalšej práce /Nanite si nerozumie s dynamickou geometriou, Lumen RT s trasparenciami atď./ Aj Lumen, aj Nanite modul sa však priebežne masívne vylepšujú.

Amiga a 100% SW 3D renderer - ako si to urobíte, tak to máte

UE5 je viacnásobný softvérový renderer, čo beží na GPU. Je to presne ako 25 rokov starý Quake engine, ktorý ak treba nemusí mať nič spoločné s HW akceleráciou na GPU /bez 3dfx Voodoo GPU bežala aj rasterizácia iba na CPU/. Natívne UE5 na PS5 môže bežať kompletne v "softvére", čo umožňuje dokonale kustomizované riešenie grafickej pipelajny /otrasne komplikovaná časť ich enginu/. Ich softvérová rasterizácia je bežne o 200-400% rýchlejšia pre malé polygóny Nanite ako natívny HW rasterizér. PS5 GPU v SW by teda ľahko porazila aj Nv3090ku v HW. UE5 je podľa potreby hybridný softvérový/HW rasterizér a na RT efekty môžte použiť aj prítomný HW modul. Pointa je však jasná - veľká časť hardvéru desiatky rokov kľúčového pre beh hier je kompletne nahradená softvérovou variantou a špičkoví kóderi z iných dev tímov, by najradšej vyhodili úplne všetko a nechali tam iba čistý kód, lebo HW v dnešných grafických kartách je proste na draka.

Typický dnešný problém. Pre súčasný Nvidia RT modul a DX RT API platí to isté, čo pre HW rasterizér v UE5. Je príšerne primitívny, neflexibilný a pochopiteľne pomalý /API aj HW/. Logika veci hovorí, že to proste zrýchlime tak, že väčšiu plochu čipu nabudúce vyhradíme pre viac RT jednotiek. A to je Hlava 22 dilema a čo napíšem mám od skutočne špičkových soft/HW inžinierov. Nikto netuší, kde vlastne potreby herného RT budú o 5-10 rokov a akým smerom vlastne RT interne rozpracovať. Kto to má urobiť ? Kto z výrobcov GPU grafík sa má ako pionier, brodiaci stopu snehom, obetovať. Namnožiť RT jednotky navyše nemá zmysel, potrebujeme totiž rýchlejšie generovanie BVH na čipe. BVH je index zjednodušujúci streľbu RT lúčov proti trojuholníkom na scéne. Zatiaľ, ale stále riešime ako to urobiť efektívne a opäť netušíme, čo vlastne budú potrebovať grafické herné enginy o 2-4-6 rokov. Nižšie máte >jeden< z návrhov smeru, ktorým sa môžte vybrať na budúcich GPU, napríklad na triede Nv4xxx. Je to však správna úvaha, ktohovie ? Dnes je HW RT na úrovni číslo tri.

Level 0 – klasická rasterizácia
Level 1 – softvérový raytracing na CPU/GPU
Level 2 – testovanie intersekcií ray/box a ray/triangle v RT HW
Level 3 – Bounding Volume Hierarchy (BVH) akcelerácia v RT HW
Level 4 – akcelerácia BVH  a spracovanie koherencie v RT HW
Level 5 – akcelerovaná BVH a koherencia plus generátor hierarchie objektov na scéne v RT HW

Ak sa vám zdá stále nemožné, že PS5 zvládne dynamickú globálnu ilumináciu spolu s raytracingom, tak vedzte, že je za tým špičková práca kóderov /softvérový renderer a softvérové riešenie BVH/ nie práca toho grafického HW. Otázka potom zneje, na čo to vlastne na tom silikóne vôbec máme. A môžte ísť ešte hlbšie - otvorené sa hovorí, že Tensor jednotky - TU /ML logika/ na Nvidia GPU sa ledva pretáčajú, aj keď na nich beží nadoraz DLSS. Na GPU teda máte slabo využité TU /aké dot produkty ML vlastne budeme potrebovať v ďalších rokov?/, nedopečené RT /tie isté otázky/, na UE5 doslova vypnuté HW ROPs /čo s ním ďalej, softvérovo na GPU sa toho bude riešiť ešte oveľa viac/ a jediné čo beží naplno je vlastne rozsiahle SIMD pole /tie FLOPs a stovky wattov tepla/, lebo sa snažíte veci riešiť softvérovo, po starom. SIMD by ale chceli lokálne oveľa viac vlastnej RAM v štýle Infinite RAM v AMD grafikách. Hovoríme však o potrebných stovkách megabajtov, nie desiatkach a opäť ide o stávku do lotérie. Na PC je zas problém efektívne /latencia, energia, prachy/ obehať systémovú RAM, grafickú RAM a eventuálnu pol gigabajtovú SIMD RAM. Ak do mašiny vrazíte špecializovaný HW, tak čakáte, že to urobí lepši, ako keby bežal v bežnom kóde na CPU alebo GPU. Nie sme však čase hry Quake a táto stará pravda zrazu prestáva platiť.

AMD je pri dizajne svojich GPU konzervatívnejšie /mešká s ML, jednoduchšie RT/, Nvidia progresívnejšia a je jasný líder v silových novinkách. Na príchod Nv4xxx sériu sa všetci tešia, hlavne po relatívnom fiasku s Nv3xxx /nedostupné, drahé, na natívne 4K/60/RT bez DLSS zabudnite/. Kríza s nedostatkom kapacít pre výrobu čipov však bude pokračovať podľa mňa až do roku 2023. A informačné úniky skôr naznačujú, že menší výrobný proces pri GPU sa preleje do viac tranzistorov a tie mechanicky do vyššieho počtu akýchkoľvek výkonných jednotiek. Menej jemnej práce /ako som povedal, kto má vedieť ako vlastne grafický HW špecializovať !/ a viac hrubého výkonu s stovkami wattov odpadného tepla. Skutočná veda a výskum teda bude bežať na konzolách limitovaných fixným HW a 200 watt TDP budgetom a odtiaľ sa bude prelievať do dizajnu budúcich PC GPU. Osobne sa mi teda Nv4xxx javí ako "viac všetkého" za veľké peniaze a aspoň 850 watt PC zdroj, aby som tu nádheru uživil. Nepôjde podľa mňa o to pravé orechové. PS5DE alebo PS5DE Pro bude vhodnejšia na preklenutie tohto obdobia, než lepiť dokopy neperspektívne 2500 eurové PC zostavy do príchodu PS6. Za B do roku 2040 chce EU stopnúť vykurovanie domov fosilnými palivami. Je iba otázka času, kedy si došliapne aj na terawatty krypto baníkov alebo na high-end PC zostavy. Musíme sa to naučiť robiť oveľa efektívnejšie per watt. Konzoly berte ako školu, kde vás to naučia.

10/12/21

Unreal Matrix

S príchodom každej novej generácie konzol sa tešíme na skokové zlepšenie technologickej stránky hier, ktoré nás nezadržateľne približuje ku "fotorealizmu" /grafického, fyzikálnemu, AI/. Na štylizovanej grafike alebo animácií samozrejme nie je nič zlé, ale v podvedomí sa snažíme v hre prekonať samotnú realitu. V hre na rozdiel od skutočnosti, je možné urobiť úplne čokoľvek, podobne ako v Matrix svete. Posledné Matrix herné koncept demátko na UE5 engine paradoxne nie je adekvátnou ukážkou potenciálu next gen konzol. To je ta horšia správa. Tá lepšia je, že na ňom robil malý tím s limitovaným časovým budgetom a ide vlastne o prezentáciu toho, čo je možné na UE5 /Nanite polygóny, Lumen svetlo, Niagara častice, Chaos fyzika, Mass AI/ urobiť doslova cez víkend. Ukazuje teda ako budú vyzerať bežné hry. Štandard. V budúcnosti na PS6ke, ako som opakovane avizoval, priam varoval, nás čaká integrácia filmového workflow do herných enginov s masívným využitím filmových asetov, hercov, profesionálov z réžie, scenáristov. Bude to chcieť nesmierne navýšenie rozpočtu pre AAA-AAAA hry a miliardové investície do vývojárských nástrojov. Dneškom začala budúcnosť.

Môj osobný tech-nerd názor na tu ukážku. Nechcem cynicky povedať, že som sklamaný alebo unudený. Až príliš dobre viem, ako tieto veci fungujú a čo dokáže aktuálny 200 wattový HW v konzolách. Toto demo má luxus 33ms/30fps časového okna pravdepodobne v rozlíšení okolo 1440p. Ulice prepchaté ľudmi, autami, plná vertikalita, 60fps, 1440p, RT reflexie - ľahko zvládneme v cross-gen hre už rok aj bez pomoci Unreal enginu. Svetlo je nadradené geometrii. A UE5 Lumen dokáže scénu nasvietiť výborne, dynamicky a v kvalite globálnej iluminácie. Masívna geometria /mnohonásobné instancie/ na novej RDNA2 s vhodným softvérom je úplná rutina. Tisíce panduľákov alebo áut nech vás už viac neprekvapujú. Je to plne v možnostiach moderných GPU s vhodným API. A spomeňte si na Eights Days pre PS3. Video s merakom snímkov za sekundu ukazuje nesmierne problémy Matrix dema udržať stabilne 30fps a akýkoľvek náznak "fyziky" a akcie ako búračky áut a výbuchy posúvaju framerate aj pod 20 fps. Typický Unreal Engine - práca s nim je pohodlná, prehľadná a rýchla ale daňou za to je veľmi zlý celkový výkon. S matrix demom pomáhali aj nejakí ľudkovia z The Coalition /Gears IP/, nech vás teda neprekvapí skorá a rýchla "garážová" konverzia práve do tejto franšízy, viď nižšie.

"Celé mesto, modely, moduly, bez licencovaných postáv Neo a Trinity bude súčasťou knižnice asetov v UE5, ktorý bude komerčne dostupný na budúci rok. Použite to ako matricu pre vlastnú závodnú hru alebo čokoľvek iné." - Unreal engine dev tím.

14/11/21

David Crane, Pitfall a 4K

 V roce 1982, kdy se do popředí začínaly tlačit osmibitové počítače vybavené desítkami kilobajtů paměti, zde stále bylo staré dobré Atari 2600 s jeho 128 bajty RAM v I/O čipu a až (!) 4 kilobajty ROM v cartridge. Jedna z nejprestižnějších firem vydávající hry pro tuto konzoli – americká Activision, rozhodla zrealizovat koncept „běžícího muže“ jednoho z jejích nejtalentovanějších programátorů, a zároveň spoluzakladatele, Davida Crane. Hra Pitfall fascinovala na tehdejší poměry obrovským světem džungle, který se skládal z 255 místností. To vše na holém Atari VCS a standardní 4 kB cartridge. Pojďme se nyní podívat, jak to filuta David dokázal.

Jedinou možností, jak reprezentovat rozsáhlý svět na tak limitovaném hardware, bylo neukládat jej celý do paměti, ale naživo vytvářet kódem v průběhu hry. Dnes bychom toto asi nazvali procedurálním generováním (procedural generation). David Crane jakožto všichni programátoři Atari 2600 byl navyklý na velké limity konzole a trénovaný ždímat veškerý potenciál za hranice představivosti. Každý bajt paměti měl cenu zlata a nepřicházelo do úvahy jakékoliv plýtvání s jakýmkoliv bitem.

Pitfall jako hra se odehrává pouze v horizontální perspektivě a je možno jít oběma směry. Crane se rozhodl, že každá obrazovka bude reprezentována jako jedno osmibitové číslo, tedy bajt. Jeden a tentýž bajt v paměti, který popisuje, co se nám vykreslí za scénu. Bajt může z principu jakožto jednotka vždy nabývat hodnot od 0 do 255 a každé toto decimální číslo je reprezentováno jako kolekce 8 bitů. Bity nejsou nic jiného než elementární jednotky počítačové paměti, které odpovídají stavu elektrického signálu 0 = vypnuto, 1 = zapnuto. Bajt velikosti 0 bude mít kolekci osmi nulových bitů. Bajt s hodnotou 255 kolekci osmi bitů s hodnotou 1.


Crane vylaboroval vlastní rutinu, která stručně řečeno generuje pevně danou sekvenci 255 hodnot s hodnotami 196, 137, 18, 37, 75 atd. Při pohybu místnostmi doprava posune bity v našem „obrazovkovém“ bajtu doleva, a navíc na bitech 3, 4, 5 a 7 s výstupem do bitu 0 provede tzv. XOR neboli exkluzivní OR, což je v podstatě operace kdy dvě stejné hodnoty vždy končí výstupem 0, různé hodnoty pak jedničkou. Tento algoritmus navíc vytvoří každou kombinaci 8 bitů s výjimkou všech nul – proto 255 místností protože vypadává možnost s hodnotou 0. Základ úspěchu byla však rutina druhá, která se použije pro pohyb doleva. Tato v podstatě provádí přesný opak té první a bity jsou naopak posunuty doprava, resp. se navrací na hodnotu jaká by byla na pozici předešlé – nezapomínejme, že se neprovádí jen posun bitů ale i XOR operace jejíž výsledek plní bit 0. Tím je zajištěno to nejdůležitější: že jsme vždy schopni v obou směrech jít po stejné posloupnosti hodnot, a tedy náš svět je napevno definován. Tedy, téměř. Jinde v kódu je ošetřeno, kde se má např. zobrazit zeď, a samozřejmě je také v paměti nutné definovat samotné objekty, které se budou zobrazovat.


Jak už jsme si uvedli, hra používá jeden bajt, jehož hodnota rozhoduje o tom, co se v dané místnosti zobrazí. Zde vidíme na schématu rozdělení bajtu na 3 resp. 4 sekce: bity 0-2 určují, jaké objekty mohou být zobrazeny, bity 3-5 pak rozhodnou o tom, jaký typ jámy a překážky bude stát hrdinovi v cestě, bity 6-7 slouží pro výběr pozadí se stromy a bit 7 navíc zda bude případná zeď zobrazena vlevo či vpravo.


Suma sumárum je spotřeba tohoto geniálního postupu paměťově tak nízká, že se hra s 255 místnostmi vlezla do pouhé 4 kB cartridge, bez potřeby bank switchingu. Otázkou zůstává, jak zábavná je hra, která možná až příliš striktně drží všechny objekty na stejném místě, kde by možná neškodilo trochu více náhodné volby. Buď jak buď, Pitfall byl revoluční a jeho následovník Pitfall II Lost Caverns, již s využitím bank switchingu, přinesl násobně rozmanitější svět.


A teď si představte, že máte k dispozici počítač s 65 536 bajty, anebo 67 108 864, anebo… no raději stop. Možná nebudu daleko od pravdy, když pronesu, že dnešní hry jako No Man’s Sky více či méně používají podobnou filozofii jak dostat do omezeného paměťového prostoru neomezené světy. Jak neomezené nebo naopak omezené jsou, samozřejmě záleží na představě programátorů a celkové implementaci. Myslím si, že v budoucnu bude význam procedurálního generování nadále stoupat, aby tak nahradil neúměrně vysoké nároky na lidskou sílu při tvorbě nejen herních světů.


Odkazy:

08/10/21

Revolučné inovácie pre AA hry, zastaralá rutina pre AAA odpad

Konzola Sega Saturn nedokáže voľne manipulovať koordinátmi textúr /UV mapovanie/ na objekte v reálnom čase v hardvéri jeho grafickej karty /PS1 alebo N64 to zvládne/. Existuje zopár fínt s extrémne limitovaným použitím, ale ako hovoria špičkoví kóderi, nestojí to za reč. Na PS1 a N64 je možné ľahko zrealizovať efektné efekty ako pseudo enviromentálne odrazy /viď odlesky na autách v Gran Turismo/. Na Saturne bohužiaľ nie, snáď trošku hej a to softvérovou cestou cez CPU, zožerie to však kopu pracovného času, takže sa to nedá prakticky použiť v živej hre, iba ako technická zaujímavosť niekde v menu hry ako názorne predvádza lesklé logo Sonic R vo videu v odkaze.

Ak niečo nie je možné, tak zákonite hľadáme spôsob ako to možným urobiť - ďalšie video. Ten rotujúci sonic tam beží na 50-60 fps podla TV normy s enviromentálnym mapovaním a v HW GPU, bez asistencie CPU. Tento zázrak sa dosiahol geniálne jednoduchým postupom. Saturn má HW podporu pre Gouraudovo tieňovanie /podobne ako PS1 a N64/. Ide o netextúrovací postup s podporou pre presné koordináty umiestenia farby na objekte a práve toto potrebujeme. Farebná paleta je v saturne umiestnené v špeciálnej oddelenej RAM /CRAM/. S paletami sa robia psie kusy už od čias amiga 500 /jeho copper procák je na to zvlášť navrhnutý/. Na saturne to urobíme rovnako. Použitím HW pre gouraud tieňovanie a jeho koordinátov pre farby tieto premapujeme na koordináty pre textúry. Samozrejme tu sú nejaké drakonické obmedzenia. Rozlíšenie farieb nie je dosť dobré pre rozlíšenie textúr a CRAM nie je dosť veľká pre objem potrebných textúr. Aj na to však existuje kopa postupov, ktorá vyplývajú z merita veci. Časť textúr /časť farebnej informácie textúry/, na ktoré nie je v novom systéme miesto urobíme po starom a HW umožňuje streaming nových /maličké množstvá/ dát do malej CRAM počas pohybu objektu. Konečne čas na zdrvujúcu praktickú "hernú" ukážku na saturne údajne nemožnej grafickej fičúry.

To čo tám vidíte je narýchlo upravený engine pre FPS hry na Sega Saturn s autom s enviro mapovaním, pričom tá lesklá odrazová textúrka je prebratá priamo z GT2ky pre PS1 !! Ako som povedal, tak nejde o natívnu HW podporu pre tento typ efektov ako pri PS1, kde je to úplná trivialita s nastavením UV mapovania textúr pre ľubovoľný vertex polygónu. Na saturne to robíte cez inú časť HW, ktorá na to nie je primárne určená a obmedzenia sú značné /toho času "textúra" do veľkosti 32x32 pixel, "textúrovacia" RAM do 4KB atakďalej/. Ide však o novú, doslova pár dňovú programovaciu techniku a čaká sa na ďalšiu optimalizáciu celého procesu a ďalšie praktické testy. Sledujem a doručím, aby ste sa tiež pokochali.

Nie je to po prvýkrát, čo bol herný HW použitý za iným účelom ako bolo pôvodne dizajnované. Pozná to ZX Spectrum s floating bus grafickými trikmi, Atari Falcon s audio DSP /ako geometrický procák pre Quake !!/ alebo staršie konzoly PS3-Xbox 360 s MSAA HW, ktorý zneužívali tiež na úplne iné účely. Pri PS5 to bude časom podobné a už teraz sa berie jeho RT /raytracing/ HW ako "všeobecný" modul pre akceleráciu výpočtov, matíc - pre čokoľvek čo sa nám v hre hodí. Dizajn HW PS5 ide ešte oveľa ďalej. Celé compute shader výpočetné GPU pole je zámerne urobené tak, aby ste sa mohli úplne vykašlať na definované HW limity fixnej grafickej pipelajny. Problémom ostáva časová a kapitálová pasca. Doslova nikto nemá toľko času a peňazí aby si v tejto slobode  na zelenej lúke a z nuly pre rizikové AAA-AAAA hry urobil vlastný graficky/fyzikálny/AI engine mimo všetkých zažitých, archaických, zastaralých štandardov. Takého pravé next gen middleware by zožralo mnoho rokov vývoja a raz takú dlhú dobu aj ladenie nových, prevratných herných mechaník. Hovorím o desaťročnom projekte. Uzatváram to teda ako akademický problém, zbytočné mentálne cvičenie a vraciam sa pokorne ku hernej PS1-PS2 nude v "novej" 2K-4K-8K grafike.

03/07/21

RenderWare - "DirectX pre PS2"

Takéto birmovné meno dostal na PS2ke tento neuveriteľne flexibilný engine, ktorý poháňal všetky Grand Theft Auto hry. Tiež Burnout sériu. Technicky výnimočný Black. Battlefield 2. Call of Duty. Rayman. Športy. Lietadielka a dokonca aj jedno či dve MMO. Používalo ho cez 250 herných štúdií a v jednom momente mal na triku naraz 1/4 všetkých hier na konzolách, handheldoch, arcade kabinetoch a PC. V roku 2004 absolútne dominantný hegemónom. O dva roky neskôr však prakticky mŕtvy a následne rýchlo zabudnutý engine. Ako je to možné ?


RenderWare /RW/ aj keď dnes dobre známy ako herný engine fy Criterion v skutočnosti vznikol ako malý, výskumný projekt niekde okolo roku 1991 v spoločnosti Canon Inc. Prvá prakticky použiteľná verzia v 1993. Akurát v čase Windows 3.1. Efektívne desktopové Direct3D alebo OpenGL bola ešte vzdialená budúcnosť, aj prvá veľká 3D RW hra pre PC - Scorched Planet v 1996. RW bol na začiatku súbor multiplatformových pokročilých, grafických knižníc pre softvérový 3D rendering /C, C++, ASM pre x86, MIPS, PowerPC, ARM/. Pokus o všeobecný 3D gfx štandard. O niečo podobné sa snažili ultra retro 3D špecialisti z Argonaut Games s BRender alebo RenderMorphics od Reality Lab /neskôr pohltený Microsoftom a ich kód transformovaný na Direct3D/.

RW sa všeobecne skôr spája s Criterion Games /založený v 1990/. Herný "Criterion" je pritom jedna z divízií Criterion Software a tých vlastní práve Canon Inc. RW mal práve skrze hry ukázať svoju silu a komerčný, licenčný potenciál. A práve Canon neskôr predali Criterion Games v 2004 do EA, zároveň s licenciou na RW engine. Zdá sa na prvý pohľad, že neslávny koniec RW má asi niečo spoločné s EA.

Poďme však na začiatok. Hlavní dvaja kóderi RW boli geniálny žid Rabin Ezra /RIP 2005/ a Adam Billyard /tiež technický riaditeľ v Criterion Software Ltd/. Rabin Ezra je ten vyvolený, čo stál ako žulový pilier za výkonom a potenciálom RW enginu. Pre Criterion pracoval až do jej predaja v 2004 a v 2005 za zamestnal v SCEE /Sony Technology Group/ a makal na štarte Playstation 3. Ešte v tom istom roku bohužiaľ zomrel na následky zápalu pľúc počas služobnej cesty /ako lekár to hodnotím ako krajne podozrivé, smrť mladého chlapa na na pneumóniu je čudná, snáď nemal terminálny AIDS/. Rabin s PhD titulom pochopil, ako funguje "grafický stroj" PS2 a portoval RW na túto otrasne komplikovanú SONY platformu a prinieslo mu to aj kopu patentov /asembler pre vektorové jednotky PS2, nové textúrovacie techniky atď./ Dokonca pomáhal s RW demom pre SONY GScube /Antz demo/. On stojí za dych vyrážajúcim technologickým "tour de force" Burnout IP. Vo svojich kruhoch bol známy ako programátorský guru a tzv. posledné útočisko, to keď si už nikto nevedel dať s problémom rady.

V 2004 roku teda EA za smiešne peniaze, cca 50M USD, kupuje Criterion. Táto udalosť šokovala celý gamebiz. Atari, Ubisoft, Konami, SEGA, Activision, SONY, Rockstar, Microsoft, Capcom mali v pláne vývoj nových hier na RW engine, ktorého sa teraz zmocnila EA. Okamžite padali mnohé otázky. Bolo zjavné, že EA kúpilo skôr tie herné IP, nie engine ako taký. Zisky z predaje RW hier prekračovali prosté zisky z licencovania RW enginu. Už na druhý deň po akvizícií sa pýtali EA, či natlačia do RW potrebné investície a udržia ho v špičkovej forme aj v ďalších rokoch. A ak to urobia, budú sa o to deliť aj s nimi, alebo si to nechajú iba pre vlastné hry ?

Obavy sa rýchlo naplnili. Vývoj najnovšej verzia RendeWare 4 pre nastupujúcu generáciu PS3 a XBox 360 bola veľmi rýchlo ukončený, embargo na informácie, RW licencovanie stopnuté a všetci existujúci zákaznici prešli do režimu pasívnej podpory. Posledný klinec do rakve bola nová dohoda s Epic Games o licencovaní novej vychádzajúcej hviezdy - Unreal 3 enginu. Určite si poviete, čo je to za zradu a kúpili Criterion naozaj iba kvôli tým hrám ? Nie je to celkom pravda. EA sa skutočne snažilo s "next gen" Renderware 4 niečo urobiť, ale Criterion nebol schopný patrične kvalitný výsledok doručiť a  očividne za Unreal enginom zúfalo zaostávali. Dnes už na RW aktívne beží snáď iba jeden väčší projekt a to MMO Active Worlds /od štartu tohto MMO už ubehlo viac ako 25 rokov !/. Burnout zomrel v 2008 a zbytky Criterionu robia na nejakej novej Need for Speed hre.

Je všeobecne akceptovaný fakt, že RenderWare zachránilo vývojárov pred príliš komplikovanou PS2. Ušetrilo im more peňazí a času a vďaka tomu utopili PS2 vo veľkom množstve fantastických hier. Skutočne šťastný okamih a geniálny Rabin Ezra. Za RW stali veľmi talentovaní ľudia. RW zároveň po bezvýraznom PC období zažilo vďaka PS2ke novú renesanciu. Stratou ľudskej kvality sa ale vytratilo aj RW. Budúcnosť grafických mutiplat enginov leží pravdepodobne už len v jednom kanditátovi - Unreal Engine. Už to stojí príliš veľa peňazí a potrebné remeslo ovláda iba úzka skupina ľudí. Vývoj musíte premyslieť na desaťročia dopredu a navyše treba mať cit pre odhad budúcich trendov a dobré kontakty na výrobcov grafického HW. A to nás ešte čaká veľmi bolestivý progres v hernej fyzike a AI, nielen relaxovanie pri odlaďovaní herného vizuálu, kde ak máte prachy a čas, tak to ide mechanicky na autopilota. Pred nami je éra závodov v zbrojení titánských mega enginov: UE, RAGE od Rockstar, Anvil/Snowdrop Ubisoftu, IW engine od Activision. Pri Unity pochybujem, že s nimi udrží krok. A SONY, ktorá stratila kontakt s AAAA hrami, už zo zoznamu definitívne vypadla.

18/06/21

Jak funguje reverse image search... nejspíš

Jak funguje "reverse image search" neboli vyhledávání podle obrázku ve vyhledávačích jako Google nebo TinEye můžeme jen hádat. Pravděpodobně vychází z dostupných veřejných technologií. TinEye byl první známější vyhledávač obrázků s touto funkcí a byl spuštěn v roce 2008. Google vyhledávání ubrázků spustil v roce 2001, avšak funkci vyhledávání podle obrázku přidal až v roce 2011, shodou okolností se v této době stal trendem thread v programovací části redditu, kde diskutující řešili, jak nejspíš TinEye funguje. Toho si autoři TE všimli a jejich odpověď byla "TinEye is Magic!". Abychom se dostali k jádru tohoto kouzla a jak nejspíš podobné vyhledávače, ale i technologie na to napojené fungují, musíme si ujasnit pár základních pojmů. Jako co je to bit, byte, integer a hash. Předpokládám že to víceméně všichni znají, ale pro připomenutí... (experti mohou přeskočit)


Bit Byte

Bit je 1 nebo 0 a takto se vyjadřují čísla v binární(dvojkové) soustavě. Byte (bajt) je 8 bitů, např. 10011101, což je v desítkové soustavě číslo 157 a v hexadecimální(šetnáctkové) je to 9D (9 x 16 + 13 = 157 (13 je protože hex soustava počítá 0-9 a pak ABCDEF místo 10 – 15, takže D je 13). Počítačová paměť umí uložit jako nejmenší fragment jeden byte(8 bitů).

Integer

Integer znamená latinsky celý a je to tedy pouze celé číslo a využívá se při programování. "signed a unsigned" znamená že je možné číslo vyjádřit se znaménkem - a nebo bez něj. Budeme se zabývat jen tím s kladnou hodnotou. Bežně užívaný nezkrácený integer Int32 je 32 bitů dlouhý kus v paměti, tj. 4 bajty a jeho maximální hodnota je tak 32 jedniček v binárním kodu. Nebo FFFFFFFF v hexadec. soustavě a 4 294 967 295 v decimální.

(Jen pro zajímavost uvedu, že YouTube muselo poprvé kvuli korejské písničce Gangnam Style přejít ze signed 32 inteegeru počítání views na 64bit z důvodu že skladba mířila k přesažení max hodnoty signed int32 tj. 2147483647 a při přetečení by to začalo počítat od minimální hodnoty -2147483648)


Hash

Hash je prakticky integer o různých délkách bitů 64, 128, 256... Získává se ze vstupních dat pomocí nějaké funkce a výstupem je číslo. Nejčastejší užití je při šifrování internetové komunikace HTTPS, nebo při komunikaci s modemem přes WiFi. Jsou různé druhy a užití, nemá prakticky žádné hranice. Některé hashe jsou reverzní, tj. že z jeho hodnoty lze dopočítat původní data a z některých nikoliv, takové slouží například k ukládání hesel do databáze aby heslo na přihlášení na web nebylo uloženo jako prostý text. Když se uživatel někam přihlašuje tak je heslo převedeno na hash a na serveru se porovnávají hashe aniž by šlo zjistit co je původní slovo. Teoreticky se může stát, že dvě rozdílá vstupní data mají hash stejný, ale nevím zda tomu může být i u hesel, nejspíš se počítá s pravděpodobností jako u klíčů a zámků, že existují duplikáty ale není pravděpodobné že se potkají se správným zámkem.

Image Search

(Tím jsem se dostal k samotnému hledání. Dále popíšu základ a spekulaci jak to nejspíš může a nemusí u známých vyhledávačů fungovat v principu)

Nahrajete obrázek na Google nebo TinEye a vytvoří se z něj na straně serveru takzvaný "perceptual hash" (narozdíl od výpočtu hashe hesla, výpočet hashe obrázku probíhá u nich na serveru, aby nikdo nevěděl jak hash počítají). Takže v tomto případě zde nemusí být angažována žádná AI, ani machine learning. Perceptual hash je vlastně orientační hash jak daný obrázek vypadá pro lidské oko. Hash lze vytvořit více způsoby. Já popíšu ten, se kterým jsem dělal pokusy, tj. Difference hash.

Jak už vám asi došlo, vyhledávání obrázků probíhá porovnáváním těchto hashů. Perceptual hash musí být odolný na jemné změny v obrázku jako změna barev, ořez, vodoznak a nebo rozdílný poměr stran. Nemůžou se zde využít již existující typy využité při šifrování hesel a připojení, protože my potřebujeme aby podobné obrázky měly velmi podobné hashe. U šifrovacích hashů by tak stačilo zmenit jediný pixel a vyšlo by uplně jiné číslo. 

Zmiňovaný difference hast vypočteme tak, že si to celé zjednodušíme tím, že zdrojový RGB obrázek převedeme do černobílé barvy, tím se docílí odstranění rozdílů v barevné saturaci a zároveň obsáhneme i černobílé verze obrázku a rychleji se počítají následující výpočty, protože místo tří barevných kanálu máme jen jeden. Dále se v mé metodě obrázek zmenší na 8x8 pixelů. Tím nám vznikne mžížka s 64 pixely v odstínech šedé. Jeden pixel má v paměti velikost 1 byte a může mít hodnotu 0 – 255 (0 = černá, 255 = bílá).

V mé metodě toto 2D 8x8 pole převedu na 1D pole o 64 hodnotách. Takže máme 64 bytové(bajtové) pole, to je 512 bitů. Nám to ale stačí převést na 64 bitů aby obrázek vyjadřoval jeden 64 bitový integer. Zárověň nás nezajímá přímá hodnota pixelů v obrázku, protože ta se může lišit pokud například někdo zmenil jas nebo kontrast. Náš zajímají rozdíly mezi sousedy (proto difference hash). Takže si prakticky projdeme to 1D pole s 64 byt hodnotami a vždy porovnáváme dva sousedící byty. Metody se můžou lišit ale při vytváření databáze a následném hledání je potrebné použít vždy stejné postupy a to i v případě zmenšování (a vlastně i tím resamplování) obrázku a konvertování stejně tak, aby v případě zmeny techniky přesamplování (cubic, nearest, bilinear) nedošlo k jiné miniatuře a jiným poměrům mezi pixely a následné nekompatibilitě s již vytvořenou databází.


Příklad

V příkladu na následujícím obrázku máme obrázek A, 4K screenshot z nedávno remasterované verze Terminátor 2.  B je HD Bluray neremasterovaná verze. C je lehce jinak oříznutá verze B ale v 240p s artefakty od komprese a logem televize. D nemusím vysvětlovat. Obrázek se transformuje na poměr stran 1:1, což probehne současně se zmenšením na 8x8 pixelů a následně se obrázek převede do černobílé. 

Hash získáme z černobílé miniatury tak, že porovnáváme hodnoty sousedních bytů(pixelů) 1 – 64 a nakonec 64 s 1. Například pokud je byte[1] > byte[2] zapíše se do výsledku 0 a pokud byte[1] < byte[2] zapíše se 1. Tímto nám vznikne binární číslo o 64 bitech 1 a 0, které se pro zkrácení a čitelnost zobrazuje v hexa decimálním formátu. Hash screenshotu A je tak v binárním kodu 0001 1001 1101 1001 1101 1101 0001 1101 0001 1001 0001 1001 0001 1101 000 11101 a v hexadecimálním 19d9dd1d19191d1d. 

Tento kód je uložen v nějaké databízi spolu s odkazem na daný obrázek a pak už je jen na vyhledávači zda si pro další účely nechá i originál, ale není to potřeba. Takže informace o podobě jednoho obrázku zabírá pouhých 8 bytů(bajtů). Porovnávání se dělá porovnáním binárních hashů za pomocí Hammingovy vzdálenosti, prakticky pouhý součet rozdílných bitů. 

Na obrázku tak lze vidět že pokud bereme A jako startovní obrázek v databázi (např. v Google), tak B se liší o 4 bity, lehce oříznuté C s kompresí a malým tozlišením se liší o 6 bitů, ale jen o pouhé 2 od obrázku B (modře) a D je rozdílný obrázek a tam se liší 35 ze 64 bitů. Hodnota kde se rozdíl pohybuje kolem 50% je vlastně absolutně nestejný obrázek, protože kdyby se blížila 100% tak by nám vycházelo že se jedná o invertované barvy téhož obrázku. Dle článků které jsem četl se dají obrázky považovat za podobné cca do hodnoty 10 rozdílných bitů ze 64 což je cca 15%.


Další užití a závěr

Terminátor 2 má 137 minut, odečteme titulky 7 min. 130m x 60s je 7800 sekund a při 24 snímcích za sekundu dostaneme 187200 snímků, ze kterých se skládá film. 187200 x 8 bytů = 1462,5 kb hash informací na celý film. Pokud bychom hashovali jen každý druhý frame jsme na 731 kb a optimalizovat by se dalo dál, jako třeba mazat hashe kde není rozdíl vetší než 3 bity. Věřím že bychom se tak dostali až na nějakých 25-50 kb. A teď jsem popsal jak nejspíš funguje Content ID na YouTube. Máte hash tabulku o velikosti pár kb a jste z ní schopni poznat celý dvouhodinový film bez AI.

Závěrem bych chtěl dodat, že když jsem si kolem této problematiky hledal materiály, byl jsem překvapen, jak je to v principu jednoduché. Samozřejmě se v praxi používají i složitější hashovací funkce, ta mnou uvedená je dle testů asi nejblbější. V odkaze naleznete porovnání s dalšími hashovacími funkcemi.

A zde jako zajímavost je článek jak někdo používá AI na reverzní výpočet obličejů z 256 bit (16x16) hashe.


17/06/21

Uni-Engine

V poslednom článku som povedal A a teraz musím aj B. Špecializované bloky na "HW" podporu všetkého možného vznikli nielen na to, aby sa dosiahol vyšší výkon celého systému, ale hlavne pre uľahčenie práce kóderom. Nie všetci sú totiž rovnako dobre kvalifikovaní a zruční. Atari ST nemá blitter, ale je možné /a vlastne aj nutné/ túto funkciu vyriešiť softvérovo, ak to teda dokážete. Nemá ani hardvérové sprajty alebo skrolovanie. Amiga to má a život je tam o toľko jednoduchší. Obrovský problém je v tom, že podobne špecializovaný HW nedrží dlho krok s dobou alebo so špecifickými potrebami tej ktorej konkrétnej hry. Chýba mu totálna flexibilita ručného kódu. Epic takto "ručne" navrhol nové spracovanie svetla a geometrie a "zistil", že časti HW v GPU na to určené sú priliš pomalé. Strašne pomalé.

A situácia eskaluje. Epic investoval more peňazí a času do vývoja tejto novej paradigmy a sú pritom prinajlepšom ešte len v polovici. Plné vybavená UE5 podľa ich predstav bude mať hodnotu väčšiu ako celý budget pre nasledujúce GTA a ten bude gigantický. Sledujete, čo sa vám snažím naznačiť ? Trhová dvojka - Unity engine asi bude chcieť s UE5 držať krok. Majú však vôbec na to ? Dosť váham a zároveň viem, že s bežiacim časom sa nám počet kvalitných multiplatformých enginov /middleware, až mainframe/ rýchlo blíži ku čislu 1 /slovom : jeden/. Zákonitá hegemonizácia trhu vzhľadom na nepríčetne veľkú ekonomickú náročnosť toho také niečo vyvíjať, držať pri živote a ďalej zlepšovať.

Uni-Engine je moja vlastný pracovná hypotéza stará viac ako 15 rokov, že príde čas, keď si skutočne komplexný, robustný engine triedy AAAA /grafika, audio, fyzika, AI, online/ bude môcť dovoliť v prípade multiplat prostredia až jeden jediný vývojár. A bude sa musieť vymyslieť nový biznis model, čo s tým a ako do zlepšovacieho kolotoča zapojiť aj ostatných mimo materskú firmu. A do tohto bodu sa vlastne dostávame práve teraz. Nemôžte čakať, že si stovka malých AA dev tímov sadne pri PS5 /mega PS6/ na zadok a podobný engine si do leta na kolene urobí. Zvládnu maximálne niečo vhodné pre obligátnu "PS2 gameplay" a v konzole sa budú potiť akurát tak ROPs jednotky, aby tu "oldschool" parádu dostali do 4-8K rozlíšenia.

Quake Rally a tiež Quake Battle Chess, Quake DOTA, Aliens alebo TPS pohľad ala Lara Croft

Metodika uni-engine musí byť aplikovaná aj na úrovni veľkých softvérových veľmocí ako SONY, MS, Ubisoft, T2, Activision. Teda jeden modulárny engine pre všetko. Snowdrop engine /Ubisoft/ by mal zvládnuť WRPG sandbox hru. TPS, FPS pohľad na herný svet. V tom istom RPG lesíku vymeníte za behu kone za rally autá alebo bociany za motorizované rogalá. Od úrovne mora až na mesiac. SONY má isté skúsenosti s vlastným enginom Phyre /multiplatformový/ a teraz sa jemne pretláča do popredia Decima engine holanďanov z Guerrilla Games, Nič viac zatiaľ zrejmé nie je. PS5 Returnal použil núdzovo UE4 lebo vlastný engine bol mimo síl malého dev tímu a SONY nič vhodné neponúklo.

Všetci chcete natívne PS5 hry v maximálnom možnom technickom prevedení. Zabudnite, ale potom na to, že si 20 herných SONY štúdií bude robiť každá vlastne middleware na úrovni UE5 alebo dokonca za ním. Vyslovene som zvedavý ako sa Naughty Dog, Santa Monica, SONY Bend, Guerrilla Games, Sucker Punch, Insomniac Games a ďalší budú snažiť túto situáciu efektívne vyriešiť. Inak môže dojsť k tomu, že third party giganti s hrubým kapitalovým vankúšom si budú robiť s trhom /aj mimoherným/, jeho smerovaním, technickou, hernou vyspelosťou, čo len chcú. SONY in-house hry budú tí chudobnejší príbuzní a pomyselné rozdielové nožnice sa budú rýchlo roztvárať ešte viac.

16/06/21

Konzoly - optimalizácia HW jeho úplným ignorovaním

Grafická karta Voodoo 1 od 3Dfx bola jedna z prvých, výborných a cenovo dostupných 3D akcelerátorov na trhu. Čo ma zmiatlo bolo to označenie 3D akcelerátor. Už som vtedy čo to o grafike vedel a čakal som HW podporu pre spracovanie geometrie a nasvietenia, aby sa odľahčilo CPU. Voodoo 1 však nič také neobsahuje. Akceleruje proces rasterizácie, čo je niečo úplne iné a nejde primárne o nejakú 3D grafiku. Proste marketingové hry, lepšie to na krabici vyzerá. Rasterizáciu dovtedy robilo tiež CPU a ide vlastne o projekciu herného 3D sveta na 2D maticu obrazovky. Príšerne komplikovaný proces náročný na pracovné CPU cykly. V HW podobe na GPU nespočetne krát priebežne masívne vylepšovaný. Ide o čiernu skrinku každého GPU. Posvätný blok silikónu, ku ktorému má prístup iba výrobca toho HW a poskytuje ho ako obetu bohom skrze ovládače ku grafickej karte. Manuálne prevzatie kontroly nad rasterizáciou je už roky tabu.

Ešte pred zopár rokmi napríklad Nvidia povedalo toto: "Rýchlosť spracovania vertexov na GPU teraz rastie rýchlejšie ako spracovanie pixelov a v blízkej budúcnosti očakávame nástup tzv. veľmi pokročilých geometrických algoritmov. Vylepšenia procesu rasterizácie ako je nový režim konzervatívnej rasterizácie umožní okrem iného aj rýchlejší nástup raytracingu a globálnej iluminácie." Dnes je však realita dramaticky odlišná. Epic hovorí, že HW rasterizácia je mŕtva a je na otázka dňa, či ju nevypustiť z návrhu dizajnu budúcich GPU úplne a neinvestovať takto uvoľnený silikón na užitočnejšie veci. Softvérový rasterizér Epicu bežiaci na GPU v UE5 je totiž v priemeru o 300% výkonnejší ako jeho HW konkurencia na tom istom GPU v ich konkrétnom engine. Ak teda v týchto podmienkach beží po PS5 GPU "novom" a NV 3090 po "starom", tak Nvidia skonči v poli porazených.

Raytracing. Často čítam herných laikov ako nadávajú na RT HW v next gen konzolách. Neberú ho vážne a podceňujú ho. Je možné ho "oklamať", zrýchliť podobne ako tú HW rasterizáciu ? Samozrejme, že áno. A nielen tak, že RT reflexie dáme vypočítať v 4 krát menšom rozlíšení a rozdiel do vyššej kvality získame napríklad CB /checkerboard/ upscale algoritmom ala Ratchet pre PS5 alebo nám pomôže rasterizácia pre časti obrazu, kde sa dá použiť "screen space" pracovný priestor alebo traceovanim lúčov proti silne zjednodušenej proxy /zástupnej/ geometrii skutočných objektov ako to robí aj UE5 a mnoho ďalších. Ukážem vám jeden luxusne didaktický príklad ako postupovať pri RT HW konzol efektívne, so zdravým sedliackým rozumom.

Tiene. Tie veci, ktoré vznikajú, keď do cesty fotónom vstúpi nejaký objekt a nastane ich oklúzia. Priame tiene, ak medzi zdrojom a tieniacim objektom sa už nič okrem vzduchu nenachádza a nepriame, keď tieň vznikne cestovaním lúča, ktorý sa už minimálne raz niekde odrazil. Je teda výrazne oslabený, farebná hodnota/energia môže byť zmenená a roztyl na hranách tieňa už značný. Výpočetne náročnejšie /tzv. AO, ambientná oklúzia/. Rasterizované >priame< jasne viditeľné tiene boli v hrách vždy jedným z klasických problémov. Tragické rozlíšenie /shadow mapa je textúra a kvalita sa rovná obrovské objemové nároky/, stabilita, vykresľovacia vzdialenosť, uhlové artefakty. RT tiene to všetko elegantne riešia ale sú zároveň minimálne o rád pomalšie. Čo s tým ?

Použijeme Toy Engine /na ilustráciu, bezvýznamný, multiplatformový engine/, Intel HD 4000 laptop, ďalej klasickú scénu na testovanie grafiky - Sponza Atrium. Všetko v rozlíšení 1280×720 pixelov. Najprv tam hodíme tieň získaný bežnou rasterizáciou s tieňovou mapou o bežnom rozlíšení 1024x1024. Sledujte nižšie na obrázku obrysový tieňový aliasing. Zubatosť je značná, aj keby ste dvihli rozlíšenie tieňu na 4K. Objem dát ide strmo nahor. Náš intel laptop tie 1K tiene dáva za 3.7ms. Obratená hodnota lomeno 1000 sa rovná 270 fps. OK. Teraz raytrace podoba v podobnom rozlíšení. Tieň je peknučký a čo nie je na statickom zábere vidieť, tak je aj extrémne stabilný, bez ohľadu na uhol pohľadu, sklon normál povrchu alebo vzdialenosť. Doba renderingu je 92.2ms a teda 10.8 fps. Koniec rozprávky, ten HW na to naozaj nestačí, alebo ?

vľavo "škaredka" 1K tiene ako bežné shadow mapy /rasterizácia/, vpravo krajšia raytrace verzia

Alebo zapojíme mozog a znížime renderovací čas RT tieňov na nejakých 13 ms /77 fps !!/ s prakticky úplným zachovaním kvality RT tieňov, aj keď pôjde o rasterizačne-RT hybrid techniku. Ako sme to urobili ? Ak si ešte raz pozriete vyššie ten raster a RT tieň, tak spoločný prienik majú v tej čiernej mase v strede tieňov a líšia sa kvalitou na ich okrajoch. Myšlienková konštrukcia. Čo tak nechať rasterizáciu vypočítať ten "stred" a RT HW aplikovať iba na "okraje" ? A to je aj správna odpoveď. Zníženia počtu pixelov /trojuholníkov/, ktoré musí RT HW otestovať klesne dramaticky a simultánne s tým stúpne výkon. Asi vás neprekvapí, že keď na to príde jeden šikovný kóder, tak to objavia časom aj ostatní.

 maskovanie okrajov tieňov, to "biele" má na starosti HW RT a finálna hybridná raster-RT kompozícia

A presne to sa aj stalo a AMD to dokonca oficiálne ponúka ako vhodné riešenie pre rýchle a kvalitné tiene. Morálne ponaučenia, ktoré z toho vyplýva je - vždy sa to dá urobiť lepšie. Epic v UE5 je prvý pokus veľkej firmy o zásadné, "softvérové" prepracovanie klasickej HW renderpipeline cesty GPU, ako ju poznáme desaťročia. Ich softvérový rasterizér a raytracer sú mimoriadne výkonné. GPU v PS5 a XSX sú prvé také komerčne dostupné a masovo rozšírené mašiny, ktoré takúto bezprecedentnú flexibilitu umožňujú aj prakticky v hrách. Vo veľkých AAA hrách, nie ako malé cvičenie doma na PC pre projekt na vysokej škole. Práve next gen konzoly odpália renesanciu nového programovania s presahom do ďalšej generácie, kde sa už budú žať úžasné plody tohto základného výzkumu. Naivný "brute force" postup nevedia nikam ako ukázalo HW riešenie úplného RT v Cyberpunk 2077, ktoré zloží Nv 3090 pri 60 fps do rozlíšenia pod 900p. Chce to použiť filipa. Neupgrejdovateľné 200 wattové konzoly to opäť zachránia.