8. 7. 2009

Farba, tvar, číslo

Bokom teraz nechám jediný podstatný atribút hry ako takej. Hrateľnosť. Pár slov o ligotavom obale. Ste sklamaný nad zjavnými problémami súčasnej generácie konzol dosiahnúť stabilných 60 fps v štandardnom rozlíšení 720p ? Priam rozhorčený nad nestabilnými 30 fps, a ešte aj bez antialiasingu. Všetko podčiarknuté primitívnym trilineárnym filteringom, ako v rokoch najväčšej slávy Duran Duran. Zbytočne. Je to iba malé, pomalé nadýchnutie pred veľkým skokom.

Nevyhnutná expedícia do minulosti. PSone : relatívne veľmi slabé CPU, GTE /geometry engine, akcelerované transformácie polygónov, niečo ako fixné funkcie DX 5-7 API/, GPU /rasterizér, pri 2000-5000 polygónoch na frame bez problémovo zvládal svojich 25-30 fps/. Nájdu sa aj "úmyselné" výnimky ako v FF7ke, a jej 15 fps v režime fly-by kamera nad bojiskom. PS2 : opäť relatívne slabé CPU, namiesto GTE - dve mimoriadne výkonné, a flexibilné "future proof" vektor jednotky / každá so samostatným inštrukčným setom, to je tá zlá správa /, fantasticky výkonný rasterizér v podobe GS /Graphics Synthesizer, v špičkových hrách samploval na jeden pixel aj 40 multipass priechodov !!/. PS3 : bang, zasyk relatívne slabé centrálne CPU, sedem extrémne výkonných SPE jednotiek /znovu odlišný inštrukčný set/, "zastaralá" RSX s nedostatočným fillrejtom. Mimochodom to isté v bledoružovom platí aj pre Xcrap. Ako je teda možné, že sa nám niekde po ceste ALU/TEX ratio tak posralo. Teda svalnatý výpočetný versus podvýživený textúrovací/fillrate pomer. Odpoveď je jednoduchá.

Shader model a fyzikálne zákony. Všetko hneď vysvetlím. Dnes je celá grafika hlavne o kvalite povrchov, o nasvietení, postefektoch. Je to o shader kóde. Fragmenty. A progiši sú nenásytní. Chcú ich stále viac, a dlhšie, komplexnejšie, početné vetvenia. Crytek používa aj pojem über shaders. Tento kód však musíte prehnať skrze výpočetné pole v GPU. ALU jednotky. A musí ich byť veľa, a kopa registrov .. veľká kopa, aby tie masívne a automaticky paralelizované výpočty fičali, ako vazelína na kondóme. To všetko však zožerie strašne veľa tranzistorov na čipe, sekundárne aj drahé pamäte a zbernice. Odrežeme to tretie, a druhé /konzola nemôže stáť 1000 USD/, a z 300M tranďákov /RSX/ nám pre textúrovaciu časť a ROPs /Raster Operations Pipeline/ ostane čo ? Správne takmer nič. Kutaragi však nie je blbec. Vedel od začiatku do čoho ide.

Je verejným tajomstvom, že first party SONY tímy /Polyphony Digital/, alebo second party borci /Naughty Dog, Insomniac/ už dávno vedia, že tým úzkym hrdlom PS3ky je práve RSX. Nie CELL, alebo veľkosť RAM. Vertex/pixel operácie sú pomalé. Dnes už bežne viac, ako závratných 30% strojového času GPU zaberá spracovanie postefektov /tam patrí aj SSAO, a kopa ďalších pre kvalitu obrazu kľúčových features, vlastne aj celá KZ2 a jej G-buffer/. Roky už dokážeme veľmi detailne optimalizovať vertex časť renderingu /Psone, PS2, bezchybne aj PS3 - SPE akcelerovaná oklúzia, cullling, skinning, LOD/. Pixel časť beží na GPU viacmenej automaticky. A práve tu sa ukázala genialita návrhu CELL procesora. SPE jednotiek, ako veľmi efektívneho "spracovateľa pixlov", ktorý dokáže obrovskú časť práce /hlavne postefekty/ odobrať z pliec GPU, ktoré sa tak môže venovať veciam na ktoré je optimalizované lepšie. Pár príkladov ako takáto spolupráca vyzerá v praxi, ide de fakto o GPU SLI konfiguráciu.



DOF, SSAO, Volumetric lighting /všetko funkčné Phyre engine ukážky/

Depth of Field. Ak to hodíte iba na RSX, zvládne to kvalitne a načas za 15-20ms. Ak tú istú práciu rozdelíte medzi SPE /preprocesing/, a RSX /gaussian blur/, časomiera sa zastaví na cifrách 1.5-2 ms odobratých zo života SPE, a 3 ms pri RSX. Fantastické, minimálne 500% zrýchlenie. SSAO, 10-15 ms ak použijete iba RSX, 12 ms na SPE, bez RSX !! Deferred lighting bežiaci na 3xSPE + HDR + 2xAA to všetko na 60+ fps, pri 100 svetlách. Z čoho tri dynamicky vrhajú tiene každým smerom. Nestačí, pridajme aj volumetric lighting /vizualizované 3D svetlo plné prachu tancujúce vo svetle prenikajúcom cez okom, pomalé na GPU/. Na 1xSPE .. cca 10-12ms. Ešte viac. Texture sampling atď atď. Rendering, ako taký už nie je v nových knižniciach pre CELL viac problémom. To sa týka aj Phyre enginu, dostupného zadarmo pre každého registrovaného PS3 vývojára.

Rada pre urazeného tlusťocha Gejba Nevella. Dobre poznáme jeho insitné poznámky na adresu PS3, ako platformy nehodnej jeho intelektu. Každá sekunda strávená nad špekulovaním, ako rozbehať "grafický" kód na SPE je podľa neho strata času, a vyhodená investícia. Poviem iba dve slová. Compute shaders /CS/. Blízka, asi 2-4 roky vzdialená budúcnosť, ktorá "čirou" náhodou ako keby z oka vypadla tomu, čo dnes predvádza druhé GPU v PS3ke. SPE jednotky. CS radikálne zmení spôsob akým dáta , operácie, výpočty v GPU tečú, kombinujú sa. Zničí paradigmu - grafika to sú otextúrované trojuholníkovité polygóny a rigidné grafické pixel/vertex pipelajny. Celé sa to výrazne zjednoduší, zároveň zkomplikuje nekonečnými možnosťami. CS už z princípu dokáže vyradiť/obísť celé DirectX API. Narába s GPU, ako s CPU. Je tu možnosť prevziať absolútnu kontrolu nad hádvérom. CS zvládne čokoľvek mu na tanier naložíte. Aj tu fyziku, alebo AI. Niečo z týchto možností sa objaví pokusne už v DirectX11. PS3 ich používa už dnes.