14. 7. 2014

Pomalý, rýchly a škaredý


Psone /1994/ je nespochybniteľným pionerom 3D grafiky v konzoláckom segmente a herne série ako MGS, GT, Spyro, Crash, NFS, Wipeout, Tekken suverenným spôsobom prezentovali prechod z blé, fuj 2D /Atari 2600, NES, SNES/ do glória, alelujá 3D grafiky - polygóny a textúry, tieto veci. Niečo podobné tak skoro dnes nezažijete. O dva roky sa prirútila N64 /1996/ a aj technicky analfabeti si už museli všimnúť, že IQ /image quality/ PSone hier na prvý pohľad "nejakým" spôsobom, ktorý laik ani nevie správne pomenovať, zaostáva za N64 /nebojte sa, aj ten mal more vlastných grafických problémov/.

ach mein gott !!

Psone je prvá, pravá, smiešne lacná 3D konzola /Sega Saturn je primárne 2D mašina s frankenštejnsky prišitým "quad poly" sprite 3D jadrom/ - dostupná iba rok po čiste softvérovom PC DOOM 1 a hravo predbiehala vtedajšie mainstreamové warez IBM šunky o 75D prsia /i386-486 s "integrovanou" grafikou/. SONY inžinieri na to išli fikane, zadarmo to nebolo. Psone je totiž ladená na výkon /best performance/, oveľa modernejšia N64 zas na vzhľad-IQ /best appearance/. Psone HW teda obsahuje iba základnú, esenciálnu množinu grafických fines, ktoré sa snaží vykonať čo najrýchlejšie /najlacnejšie/, N64 zas veľmi často umieralo na krásu s mizernou performance. Výsledkom na strane SONY je typická podoba PSone hier - nezbedne poskakujúce, zubaté textúry s "kostičkami", nepresné polygóny, nezarovnané vertexy, preblikajúce švíky medzi nimi, často aj nižšia paleta farieb, dithering a more ďalších technických nedostatkov. Uvediem však tri hlavné neduhy, ktoré sa nevyskytujú pri N64 konkurencii a iste ich dobre poznáte, aj keď ste netušili, na čo sa vlastne pozeráte.

HW Z-buffer rieši všetky problémy .. vlastne ani nie

Z- buffer: klasicky a technicky ide na prvom mieste o zásobník - RAM /a na tu je zavesený aj patrične komplexný pomocný HW/, kde sú uložené Z koordináty vašich pixelov. Hĺbka. V 3D scéne pri vykresľovaní objektov je dobré vedieť - kto sa kde a hlavne pred kým a za kým sa nachádza. V meste nepotrebujete GPU zaťažovať 98 domami, stromami a autami, keď sú prekryté  hneď pred vami stojacou inou veľkou budovou. Psone nemá hardvérový Z-buffer /N64 áno a jeho použitie je voliteľné/ a teda ani časť pamäte preňho vyhradený, išlo o úmyselnú úsporu /Z-buffer navyše decimuje pixel fillrate, texture mapping rate, priepustnosť do vram pri tak starých, anemických systémoch/, problém bol čiastočne riešený softvérovou cestou, ani ten HW Z-buffer však nie je všespásny a pri zaokrúhľovaní to občas "nedá". Minimum je použitie Z-buffera s 16 bit presnosťou, avšak aj 24-32 bit /spotreba ram, šírka zbernice - to zabolelo/ v mnohých hraničných situáciach pronto vyhodí nejakú chybičku - grafický artefakt, Z-fighting viď obrázok vyššie atď.

PSone Colin McRae Rally 2.0, famózna hra, vľavo krivý PS1 originál, vpravo emu zázrak

Perspektívna korekcia: je správne nanesenie textúry na polygón so zachovaním korektnej perspektívy, pretože však PSone nemá Z-buffer a šetrilo sa naozaj všade, tak sa použila veľmi rýchla a nepresná /heh/ lineárna interpolácia. V hernej praxi ide práve o to zvláštne "zalamovanie" textúr, hlavne vo vašej bezprostrednej blízkosti. Nemilé ale roztomilé. Opäť je možné tento problém pekne zahladiť plne softvérovou cestou /CPU sa zapotí, v starom PC Qvak 1 sa s tým dalo dobre pohrať/ alebo pomocou GPU /N64, 3Dfx/, v prípade PSone je balanc systému nastavený tak, že by performance penalta na sociálnom MIPS R3000/33Mhz CPU bolo príliš veľká, takže na to rýchlo zabudnite.

ostré alebo rozplizlé

Bilineárny filtrovanie textúr: ak sa v starej hre DOOM približujete ku stene s textúrou tak vidíte stále väčšie a väčšie "kostičky". Nejde o grafickú chybu ale o dokonalý príklad pixel/texel ratia. Rozlíšenie hry bolo vtedy povedzme 320x240 pixelov a aby sme to mali jednoduchšie, tak textúra suda, steny, impa bude mať presne toto isté rozlíšenie. V istej optimálnej vzdialenosti od vás teda máte 1:1 mapovanie - 1 texel textúry na 1 pixel obrazu. Ak sa od vás imp/sud/stena vzďaluje počet pixelov obrazu ostáva pochopiteľne rovnaký, mení sa počet texelov. Bitmapa obludky uteká preč a už má iba 64x64 alebo 32x32, 8x8 pixelov. To by až taký problém nebol a o subpixel nuansách tu teraz hovoriť nebudem.

Čo sa však stane, ak beži imp smerom ku vám ? Texely jeho bitmapy sú fixne dané a jej rozlíšenie sa zázračne samo od seba nezlepší, jeden texel teda začne pokrývať viac a viac pixelov. Začne sa ako keby zväčšovať a "kostička" nám rastie pred očami, v krajnom prípade môže jeden texel pokryť celý display, všetkých 320x240 pixelov. No a práve preto aby sme to macroblocking "kockatenie" trochu vylepšili použijeme algoritmus na výpočet dodatočných pixelov bilineárnou interpoláciou a zrazu sú prechody o kus plynulejšie a kostičky takmer neviditeľné /rozhodne však pomáha vysoké, východzie rozlíšenie textúr a kvalitný mipmapping/. Psone GPU na toto HW podporu nemá, softvérové CPU riešenie je samozrejme opäť možné ale veľmi systémovo náročné.

Ak ste niekedy hrali PSone hru pod emulátorom, tak prvá, priam reflexná vec, ktorú urobíte /okrem zvýšenia rozlíšenia krát 4 až nekonečno, eventuálne trochu AA/ je práve "zapnutie" bilineárneho filteringu. Hra okamžite vyzerá "skoro" ako keby išlo o 3Dfx Voodoo 1 /1997/ akcelerovanú PC verziu. Skoro, lebo stále nám obraz kazí absencia perspektívnej korekcie textúr. V tomto bode boli emulátory v podstate bezradné, lebo pravdepodobne nie je možné naprogramovať univerzálny a vždy bezchybne fungujúci emu kód, ktorý by dokázal prekonať originálne hardwired grafické jadro PSone bez HW Z-buffera atď.

gpuBladeSoft plugin - pozrite si aj ďalšie videá na ich YT konte

"The target is to make a plugin, which emulates the PSX GPU with maximum precision, and using of all the methods of grapics improvement." Nemožné ale pokúsiť sa o to môžeme. Rusáci a gpuBladeSoft plugin použitelný v PSone emulátoroch sa snaží o naprogramovanie veľmi presného virtuálneho Psone GPU s mnohopočetnými vylepšeniami. Dlhá cesta a CPU nároky budu značné. Vyššie máte video, lepšie ako tisíc slov. Postupne tam chcú mať najskôr asi per-game aj úpravu draw distance /vykresľovanie objektov nekonči 2 metre pred vami/, widescreen hack, 24 bit farby /namiesto origo15 bit/, teseláciu, textúrovanie/skladanie vertexov s vyššou presnosťou, experimentuje sa s 30-60 fps a tris-quad polygón konverziou, pixel shader postefektami /motion blur, bloom/ a mnoho ďalšieho. Ak si to všetko predstavíte v 1080p s kopou dobrého AA, tak sa vlastne vaše PSone premenilo na PIII s Voodoo 5. Nuž, ale tam ešte nie sme - ide o dobrovoľnú prácu, dlhodobý projekt a fašista soviet je často a poriadne namol opitý. Každopádne na niečo tie smiešne i7ky intel vyrábať musí a týmto sa bude o také 2 roky krmiť do sýtosti, až na zadrhnutie. Ak sa teraz niekto spýta na emuláciu novšej PS2, tak mi verte, že ešte nikto nevyrobil CPU, ktoré by to utiahlo pri non-hack low level emulácii ako títo rusáci alebo šialený Higan /SNES/.