31. 10. 2010

Super NES - super emulátor

SNES - Super Nintendo Entertainment System /o pár dní oslávi 20 výročie, v japonsku štart november-listopad 1990/ je poslednou hárdverovo kvalitnou konzolou od nintenda. Na trhu bolo v tých zlatých časoch, keď ešte boli ochotný a schopný vyrobiť, alebo zabezpečiť pre ňu aj dostatok kvalitného softu. V našich zemepisných šírkach jej bezproblémovo herne sekundovala warez Amiga 500-1200, takže drahé kártridže SNESu nikomu nechýbali a herne na tom bola Amiga aj tak rovnako, alebo lepšie /adventúry, stratégie, simulácie/. Dôvod prečo som teda vlastne hľadal spôsob, ako sa ku možnosti na SNESe niečo zahrať bola práve slávna FF7 pre PSone /1997/ a konkrétne hlad po prejdení jej predchádzajúcich dielov. Bohužial exkluzívne iba pre 16 bit SNES. Mraky nad mojou hlavou sa však roztrhli v okamihu, ako mi doma pristálo Pentium 100 /pretaktované na 133Mhz/ a dnes kultoví kodéri zsKnight a _Demo_ vypustili svoj úžasný emulátor SNES mašiny - ZSNES.

ZSNES. Prvá funkčná verzia napísaná pre všetky svoje výkonnostne kritické časti v čistom ručne ladenom x86 asembleri /neskôr sa ukázalo, že porty na RISC stroje sú týmto krokom značne problematické/. Štart 14.10.1997 a to pre starý MS-DOS. ZSNES sa na mojom "133" Pentiu bežal, pri istých kompromisoch pri spracovaní zvuku, pre JRPG hry na akceptovateľných 15-30fps. Upgrejdom na AMD K6-2 300Mhz sa situácia vyriešila úplne a bolo možné sa pustiť aj do hier, ktoré použivali dodatočne čipy pre akceleráciu 3D grafiky alebo dekompresiu dát v reálnom čase, aby sa toho na kartridž napchalo čo najviac. ZSNES je po odchode jeho dvoch hlavných kóderov vylepšovaný už len sporadicky, a posledná známa verzia 1.51 je viac ako tri roky stará /z januára-leden 2007/. Čas pozrieť sa na konkurenciu.

SNES9x. Paralelne a v rovnakom čase bežiaci vývoj prevažne C++ emulátora /až na ASM emuláciu CPU jadra/. Raz mal niečo lepšie ZSNES /ako prvý emuloval DSP, SA-1, S-DD1 čipy/, potom SNES9x a konkurenčný boj takto trval celé roky. Posledná verzia SNES9x 1.52 pochádza zo začiatku tohto roku. Prináša radikálne prepracovaný audio engine /konečne zneje FF6 korektne !!/, nový interfejs, nový quick save file systém a masívne vylepšenú podporu pre dodatočné akceleračné a pomocné koprocesory. Kvôli presnosti emulácie sa dvihli sa aj nároky na systém. SNES9x je dnes jasnou voľbou pre hranie SNES hier pod WinOS. ZSNES ostáva ako záloha pre staré vykopávky triedy Pentium, MMX, PIIka. Ak si však myslíte, že tu už niet veľa čo vymyslieť a emulácie SNESu je vlastne ukončená, ste na omyle.

BSNES. Ultimatívne riešenie hlavne pre budúce platformy vzdialene hoc aj 10 rokov /výkonné mobily, handheldy, konzoly, PC/. Najnovší projekt bežiaci od roku 2004, neustále updejtovaný projekt. Ide o vrcholné dielko, kde je softvérová low-level emulácia hárdvéru SNESu /dokonca aj Super Gameboya/ na prvom mieste, bez ohľadu na hárdverové nároky /sú v porovnaní so ZSNES - značné/. Reverzné inžinierstvo. Skutočné pochopenie práce CPU - SPC7110, audio CPU SPC700, 3D akcelerátora SuperFX na pixel a cyklus presne. Nekompromisne. Žiadne hacky, speedUPs, pre hru špecifické odrbávky, ktorými sú všetky emulátory priam zamorené. V súčasnosti je možné používať tri režimy presnosti emulácie: Accuracy, Compatibility, Performance. Aj ten najmenej presný je podľa autora stále lepší ako hore uvedená konkurencia. Mód Accuracy navyše používa revolučnú technológiu Dot-based rendering. Narozdiel od klasickej scanline metódy, sa fyzicky vykresľuje naraz nie celý raster riadok/čiara, ale každý pixel framebufferu samostatne. Má to zaujímavé herné výsledky. Napríklad v hre Air Strike Patrol, perfektne funkčnej v každom emulátore sa zrazu pod lietadlom objavil jeho tieň, značne uľahčujúci určenie polohy lietadlo voči zemi a nasledne aj načasovanie zhodenia bomby. Dot-based rendering je schopný aj počas vykresľovania riadku v jeho strede /mid-scanline raster effects/ zapísať novú informáciu, ktorú tam počas IRQ prerušenia zapísalo SNES GPU. Klasický emulátor do celého scanline riadku zapísal uniformnú informácie o jase a "nevšimol" si jeho zmenu /de fakto transparency efekt/ a tieň proste zmizol !!



Battle Blaze - ZSNES, SNES9x, BSNES

Iný príklad - hra Battle Blaze intro efekt s "ohňom". Statické obrázky vyzerajú vcelku zhodne. ZNES však obrazom "nevlní", SNES9x tam má meter grafických scanline glitchov a jedine BSNES prechádza testom vďaka Dot-based renderingu bez ztraty cti. A aby toho nebolo dosť. Je schopný manipuláciou pamäťového adresovania /čip MSU-1/ a vlastným debugerom vytvorenie SNES hry s 4GB kártridžom /bežné SNES hry boli 2-4-6 megové vecičky/. Je teda možné spojiť špičkové SNES JRPG - Chronotrigger s kreslenými FMV animačkami z jeho PSone verzie, čo sa už aj vo virtuálnej podobe naozaj stalo. A poslednou záležitosť na ktorej autor pracuje je SNES Preservation Project. Nič iné ako na bit presná záchrana každej vydanej SNES hry vrátane skenu obalu, manuálu, alebo obrázku PCB matičnej dosky hry. Raz až o 15 rokov na svojom mobile s pol-terabajtovou flashkou nebude mať čo robiť, si môžte stiahnuť jeden veľký SNES archív, kde okrem poslednej verzie BSNES bude aj celý herný "život" tejto kultovej hernej platformy.



PCB doska SNES hry Street Fighter 2 alfa a S-DD1 chip

Teraz teda /lepšie večer - lepšia atmosféra/ urobíte nasledovné. Stiahnete si emulátor SNES9x v1.52 /napríklad win32.fix4/. Spustite ho. Ak nehavaruje, opäť program ukončite. Sám si zatiaľ vytvorí folder ROMS, SAVES atakďalej. Do ROMS si uložte FF3 /FF6 bola v amerike vydaná ako FF3/. Opäť spustite emuláciu, v display-settings potvrďte FULL SCREEN možnosť, nahrajte FF3 romku, ESCAPE zapína/vypína hornú pomocnú lištu. Podobný postup s BSNES v070 /pomocná lišta - stlač TAB/. A hrajte JRPG ďaleko lepšie ako FF10-12-13 dokopy. Budete ohromený hĺbkou, hudbou, emóciami, postavami, dĺžkou, a interaktívnou scénkou s kompletným operným predstavením v divadle.

13. 10. 2010

Smrtka zubatá

"Hry na PS4 budú konečne v plnom 1080p rozlíšení na 60 fps a s 4xAA". Tož túto vetu na každom hernom fóre čítam aspoň raz za týždeň. To rozlíšenie je vcelku OK /PS4 však bude mať o rád vykonnejší HW pre zvýšenie rozlišenia z toho nižšieho/, ten framerate je KO /každého bude lákať obrovských a luxusných 33ms na výstavbu jedneho frejmu pri 30 fps hre, tie tu teda ostanú asi navždy/, a na koniec to .. o tom antialiasingu je úplne mimo. Verte mi, že niet komplikovanejšej témy, a keď si laický hráč odfúkne, šak to máme v "hárdverovej" podpore. Ani nevie, ako veľmi je mimo mísu. A mimochodom to 4xAA môže byť v "každej" PS3 hre už dnes.

Dve "základné" typu odstránenie zubatosti v obraze sú vcelku dobre známe. Supersampling a multisample antialiasing - MSAA. Prvý je výrazne kvalitnejši, a s enormne vyššou spotrebou systémových prostriedkov /pamäť, priepustnosť/. Vďaka prepočítaniu frejmu do X-násobne väčšieho rozlíšenia a následne jeho zmenšením na požadovanú veľkosť. Vzorky-sample-prebytočne pixle takto získané, boli použité diabolskym mixovaním matrice /grid, rotated grid, jitter .. atď/ práve ku vyhladeniu hrán v celom obraze - full-scene antialiasing . MSAA bez toho, aby som vás trápil detailami, to robí omnoho-omnoho menej náročnejšie a rovnako aj oveľa horšie, a často iba v niektorých častiach obrazu /kolízia na úrovni alfa máp-transparencie, kolízie na úrovni specular máp, "vnútro" polygónov pri istých okolnostiach/. V preklade na drobné - 4xMSAA antialiasované auto v GT5 vám zahalí dym po gumovačke, na rozhraní karosérie a dymu uvidíte zuby, to isté pri odleskoch na niektorých častiach-lesklých hranách auta, a to bez ohľadu na stupeň MSAA. Je možné si s tým úplne poradiť, ale za cenu ďalšej ztraty výkonu na strane dýchavičného GPU. Meter ďalších vylepšení ako Coverage Sample Anti-Aliasing, Transparency Anti-Aliasing preskočíme, vyžadujú buď o 2-3 roky novšie-výkonnejšie GPU /shader model, fillrate/, ako je RSX v PS3ke. Alebo dokonca ide len o istý druh hacku pre DX9 /DX10 si vie "poriešiť" AA efektívnejšie/. Aj keď je paradoxne PS3 svojimi možnosťami často za možnosťami DX10.x features, RSX bude vždy jasnou brzdou, preto tu máme to "druhé" GPU - výpočetné SPE pole /celkom šesť jadier k dispozícií pre vývojárov/.



alfa-buffer s nizkým rozlíšením + AA "kolízia", vpravo - specular aliasing /veľmi bežné/

Hárdverové MSAA navyše tvrdo narazilo pri používaní najmodernejších deferred /tzv. "odložený-oneskorený" rendering/ postupov, s ktorými je iba veľmi limitovane kompatibilné. MSAA je primárne a vlastne iba určené pre zastaralý-klasický forward "priamy-okamžitý" rendering. Práve preto sa na xcrape "AA je zadarmo" používa antialiasing čim ďalej tým menej /Castlevania, aj keď ide o zúfalú koridorovku ho nemá ani za malý prd/, to však súvisí hlavne s jeho malou eDRAM a dev tím chcel plné 720p rozlíšenie, čo pri efektovo-graficky extenzívnych-HDR hrách na xcrape končí takmer vždy absenciou antialiasingu /sub HD Halo Reach/. Pri návrhu PS3ke však Kutaragi nežral mokrú slamu a nehulil zhnitú ganju.

Aj zlé AA je lepšie ako žiadne. MSAA je, bolo a bude pozliepanou vykopávkou /daň za dávno prekonanú filozofiu renderingu ešte z čias dávno pred prvou verziou DirectX/. Má problém s multiple render-targetmi /alfa, particle, depth, stencil, shadows, HDR, skinning polys/, a s deferred postupmi. Plus veľká spotreba vram a RSX to tak či tak v drvivej väčšine slušne neutiahne /nehovoriac o tom, že na G70ke je simultánny beh AA a HDR a priori nemožný/.



Under Siege, Phyre engine /SPE-AA/

Heavenly Sword nám však ukázal ako spojiť AA+HDR /custom HDR-nAo32 formát/. Phyre engine ako spojiť AA + deferred rendering - 2 x MSAA. Nastal teda čas oprašiť staré algoritmi hľadanie hrán, vážených priemerov, centroidy, softvérový antialiasing. Niečo čo je možné použiť aj na xcrape /moderných GPU/. Niekedy dokonca nutné. Ale vždy si to ukradne čas pracovných cyklov od GPU /ziskom je úspora pamäte a aspoň nejaké AA/. Vieme, že na jeseň tohto roka sa stal SPE-AA algoritmus súčasťou CELL SDK a je k dispozícii všetkým vývojárom. Pretože ide o POSTEFEKT, nemal by kolidovať z ničím hore uvedeným, a ani z ich vlastnými render enginami. God of War 3, Saboteur, LBP2, Under Siege už SPE-AA používajú. Podotýkam, ani tento typ antialiasingu nie je technicky dokonalý /subpixel aliasing, problematická vzdialená geometria, problematické objekty hrúbky jedného pixlu a menej/, ale je možné ho ďalej výkonnostne a vizuálne optimalizovať /dnes vieme dosiahnuť porovnateľnú vizuálnu kvalitu s 8xMSAA, pri niektorých hranách aj 16-32xMSAA !!/. Dokonca sa testuje intenzívne aj pre použitie vo Frostbite 2 engine /Battlefield hry/.



SPE-AA

Je možné ho teda použiť na xcrape /ako na každom CPU-GPU/, a prvé pokusy sa už objavili. Má to iba jeden "malý" háčik. Ak si vyhradíte čas - 5ms na celú tú operáciu v 30 fps hre a teda celkový budget je 33ms /30 ak chcete mať rock solid hru/. Potom 1/6 času sa GPU hrajká iba s AA postefektom, to jest 5 frejmov z 30. O toľko ta hra vlastne nebeží pomalšie, ale ide to na úkor napríklad iného efektu. Menej presný, alebo žiaden motion blur, alebo depth of field, alebo SSAO. Pri PS3 sa presne tých istých 5ms hodí na SPE jednotky /CPU v xcrape je výrazne pomalšie, tento luxus si nemôže dovoliť/. Bodka. RSX dostalo AA skutočne zadarmo. Vychádzam z toho, že žiadna súčasná multiplatformová hra /a iba málo nativných/ využíva CELL na 100%, vždy sú tu nejaké voľné pracovné cykly. Kraviny ako Generic Warfare 2, Biokunda 2, Need for Crack, Dead Game, Flopout 3 a more ďalších sú niekde na 30-50%. Z tohto dôvodu počnúc rokom 2011 - neakceptujem to, aby sa v PS3 verzii nejakého multiplat zvratku /napríklad Castlevania/, neobjavilo SPE-AA /hybridy MSAA-MLAA-temporal AA/, ktorý citujem : "sme to mali rozbehané za jedno poobedie."