9. 3. 2011

CELL - vyhodíš dverami, príde oknom

Po piatich rokoch a s veľkou slávou močom pachnúce PC - flexibilitou grafickej pipelajny dobehlo a mierne predbehlo konzoly. Vďačí za to DX 11 API. Malým problémikom je nepoužiteľnosť posledných asi 5 modelov od Nvidie a ATI z dôvodu nechutného príkonu ich GPU. Ztrátové teplo, nechutný príkon, idiotské dvoj a trojslotové riešenia, 80 dB, 300w+ kraviny. Opäť to teda dnes skúsim čo najzrozumitelnejšie /vysvetľovať SPE soft coarse oklúziu vám určite nebudem/. Chcem, aby ste pochopili, kde vlastne dnes vývoj grafického renderingu smeruje. Prečo je CELL požehnanie z nebies, a prečo sa "65 wattová" PS3 rehotá do zaprdeného ksichtu dnešného PC herného mainstreamu. Následuje nevyhnutné a stručné teoretické minimum.

Forward rendering /FR/ - vhodný pre jednoduché scény s veľmi nízkym počtom svetelných zdrojov /2-4-8/, geometriu je nutné spracovať opakovane pri každom novom svetle dopadajúcom na váš polygón, neefektívny light culling /"prestaň svietiť, aj tak tam práve teraz nevidím"/, vysoké nároky na pamäť /všetky render targets musia sedieť rezidentne v pamäti/, neefektívny rendering malých polygónov. Killzone 3 realizovaný touto technickou by vyžadoval brute force prístup v štýle NV 580 SLI. Deferred rendering /DR - lighing+shading/ - oddelenie svetla od geometrie. Počet svetiel /200-1000/ per frame v porovnaní s FR ovplyvňuje celkový výkon enginu neporovnateľne menej, vysoko efektívny light culling, nižšie nároky na pamäť prepočítane per polygón/svetlo, povinné vytvorenie G-bufferu s MRT - multiple render targets umožňujúce extrémne flexibilnú manipuláciu s obrazom a svetlom. Problémy - nároky na priepustnosť, inkompatiblita s HW MSAA /svetlá sú "oddelené" od geometrie/, malá materiálová variabilita, malá ale predsa výkonová penalizácia pri prekrývajúcich sa svetelných zdrojoch /daň za ich vysoký počet/. Čiastočne riešenia - deferred lighting, light pre pass. Definitívne riešenie v teréne dnešných vedomostí a dostupného hárdveru - TILE BASED DEFERRED RENDERING /TBDR/.

Povinná odbočka. Alfou a omegou celého tohto rozprávania nebude ospevovanie ako CELL blazeovane chrlí milióny pixelov /soft rasterizácia - fp16 HDR, teda rovnaký formát ako pri RSX/. Nie. Pôjde o pixely a polygóny, ktoré nikdy neuvidíte. Vysvetlenie. V štandardnom PS3 grafickom móde 720p /xcrap je doma v subHD/ obsahuje tienidlo vášho LCD monitor cca 1 milión pixelov. Ak teda aj zoberieme polygón o veľkosti jedneho pixla, viac ako 1 melón by naraz viditeľný nikdy nemal byť. RSX má udávaný triangle performance setup na úrovni 250mega polygónov za sekundu /cirka jedna miliarda vertexov/. Pri 30fps hre to teda robí 8Mpolys na frame. A obrazovka ma iba jeden milión pixelov. Problém vyriešený, výkon dostatočný. Bohužiaľ nie.



typická Battlefield 3 scéna, PS3 SPA /SPE pipelining assembler/ je jasný víťaz

Obludnú časť toho výkonu stratíte pri spracovaní geometrie za tými časťami obrazu, ktoré z pohľadu hráča nevidíte. Za múrom je iný múr, za ním ulica, na nej auta, v nich panduľáci. Cieľom dokonalého enginu je odstrániť ABSOLÚTNE všetko/polygóny a to aj vrátanie spracovania vyžiareného svetla/tieňov, ktoré vy ako hráč zo svojej perspektívy nevidíte. Engine teda musí zistiť ČO vlastne vidíte, a urobiť to s čo najnižšími nárokmi na systémové prostriedky. Je to celá veda. A práve to sa skrýva pod tými pojmami ako oklúzia, culling, clipping. Celá pointa totiž je naozaj iba v tom, aby ste ich /polygóny, svetlá, animáciu, čokoľvek/ vyradili z grafického pipelajnu čo naskôr. Aby ani malý zlomok práce RSX/CELL nepadol na niečo, čo sa do vášho zorného poľa v danej chvíli nedostane. Verte mi - je to alfa a omega dnešného skutočne výkonného konzoláckeho enginu. A CELL je v tomto "odtraňovaní", a riešení viditeľnosti neskutočne výkonný. Neuveriteľne a svinsky. Light culling urobí ďaleko lepšie ako špecializovaný grafický hárdvér - RSX, NV 8800GT. Pri odstraňovaní polygónov svojou efektivitou hravo zničí xcrap, alebo PC intel i7 a to o aj stovky percent.



quadtree klasika vs TBRD moderna, nad 128 svetiel je to jasné

TBDR - ide v tom ako toho urobiť čo najviac tým, že toho urobím "málo" ešte ďalej. Rozrezanie frejmu na tiles a subtiles, malé grafické entity - SPE kód teda beží riešiť iba naindexovanú "dlaždicu", kde jej nahlásia "nežiadúci objekt" alebo "oblasť záujmu" a nelieta po celom obraze ako splašený zajac /platí aj pre riešenie transparentných plôch, alebo rasterizácie/, vytvorenie svetelných skupín, špičkový light culling /odskok od klasického DR rastie s počtom svetiel/, masívna paralelizácia, ideálne pre SIMD monštrá ako CELL, vyriešená materiálova pestrosť, výrazne znížené nároky na priepustnosť, AA poriešený ako screen space postefekt /MLAA, SRAA - subpixel informácie z G-bufferu/, na PC všetko via DX11.



deferred rendering: štandardka vs tiled, pre forward renderer by graf na výšku nestačil

Ide o absolútne moderné a najnovšie riešenie tej pravej efektívnosti grafickej pipelajny. Iba vďaka tomu dnes graficky špičkové natívne PS3 hry vyzerajú, ako keby tam snáď ani nebolo to 5 rokov staré NV GPU. Čim sa konečne dostávame ku firme DICE, a enginu Frostbite 2 /bude použitý v kilometroch EA hier a hlavne v Battlefield 3ke/. Všetko o čom som pri TBDR a DR písal je vo FB2 implementované. Pri PS3 verzii ide BEZPRECEDENTNÉ využitie CELLu ako DRUHÉHO grafického čipu /deferred lighting aj shading, aj port DX11 Compute shader PC kódu/, na pomery third-party vývojára niečo nevídané. Dokonca som milo prekvapený, že z C++ zliezli až na najnižšiu úroveň programovania. Mega výkonné SPE ASM programovanie. Third party firmy, tie vyvolené, zarábajú viac prachov na multiplatformách, ako only tituly a zákonite si môžu zaplatiť aj viac človeko-hodín a vývoj enginu na úrovni /alebo za ňou / tých najlepších natívnych first party produktov. Je to niečo, čo som avizoval už pred rokom.

Ďalej. Zmena organizácie dát, tak aby ich SPE prežuli čo najrýchlejšie z klasického AoS /Array of Structs/ na SoA /Structs of Arrays/. Ide o efektívnejšie spracovanie vektorizovaného kódu pre SIMD hárdvér, ktorým SPE jednotky objektívne sú. Cieľom je zvládnutie 4 "vektorov" naraz namiesto klasiky tj. jeden, po druhom - sériovo /SPE zvládne v jednom takte práve 4 x 32 bit "slová"/. Keď pred dvoma rokmi Ready at Dawn /super špičkoví kóderi na PSP, God of War séria/ povedali, že im je fyzicky zle z tých prašivých PC centrických enginov/middleware násilne portovaných na konzoly. Ukazovali prstom hlavne na posrané Unreal 3.x, alebo Gamebryo /Fallout/. Frostbite 2 /PS3/ je určite splnením ich sna. Ready at Dawn mimochodom pracuje na vlastnom super engine pre domáce konzoly.

Ako to teda pri porovnaní hry Battlefield 3 medzi PS3 a xcrap verziou dopadne ? Bude mať PS3 podľa všetkých predpokladov jasne navrch ? Podľa šéfprogamátorky Frostbite 2 enginu celkom jasne áno, povedané jemne diplomaticky. Ja vás však upozorním na klasické fekálne odmedzenia zo strany xcrapu. Celá hra je ladená na posrate malú veľkosť jeho eDRAM /4xRT + Z buffer sa rovná 20 mega pre G-buffer, KZ 2-3 ho má okolo 30 mega+ /. Tých 20 mega, tá "malosť" je spôsobená snahou nemať na xcrape za žiadnu cenu viac ako dve framebuffer tiles /eDRAM má 10 mega, G-buffer teda potrebuje 2 tiles, furikovanie dát medzi eDRAM + UMA, navyše nutnosť spracovať zbytočne časť dát - dvakrát, aj trikrát/. Akýkoľvek iný/vyšší počet posiela ten bill šmejd výkonnostne do totálneho hajzlu /penalizácie za spracovanie prekrývajúcej sa geometrie a shaders/. Xcrap nikdy nebol navrhnutý so zreteľom na deferred rendering. Parita s PS3 sa však z komerčných dôvodom musí zachovať - takže počet svetiel, počet objektov, počet MRT, počet partiklov, množstvo textúr. Všetko je podriadené tomu zasratému bill šmejdu so slabým CPU, bez HDD, s debilným 6.8 giga DVD. Mimochodom špičkové TBDR je v PSP 2 GPU vpálené na HW úrovni ako dedičstvo Power VR architektúry /celé roky - model od modelu vylepšované/.