16. 1. 2012

Pamäte nie je nikdy dosť

Minule sme si prebrali, prečo režim 1080p/60fps na PS4ke štandardom nebude. Tiež to aké sú hrubé kritéria pre výber jeho GPU. To je tá relatívna slabina všetkých doterajších playstation konzol. Naopak je pre ne typické veľmi výkonná a flexibilná CPU časť použiteľná na čokoľvek. Teda rovnaká filozofia ako pri 8 bitovom spektre. Problém, ktorý je však zdanlivo hrubou silou veľmi ťažko riešiteľný je veľkosť pamäte. Opäť platí, že každá playstation by rozkvitla, ak by jej mala raz toľko - PS1 z 2 na 4 mega, PS2 z 32 na 64, PS3 z 512 na 1 gigabajt. Pri PS4 je nami vysnívané množstvo ná úrovni 4+1 giga čo by presne zodpovedalo indexu rastu 10-12:1 medzi jednodlivými generáciami. Pre prípad, že by SONY podhodila niečo ako 2+1, alebo 3+1 variantu mám pripravený tento plán B.

Určite ste si všimli, že iba maličké percento PS3 hier používa hárdverový MSAA antialiasing. V preklade to znamená, že milióny tak vzácnych GPU tranzistorov ležia nepoužité ladom, a namiesto toho sa míňa strojový čas SPE jednotiek pre softvérový antialiasing. Je ďaleko rýchlejší, a minimálne rovnako dobrý. Ak sa pýtate, čo má do pekla spoločný CELL a výpočetné jednotky vôbec /ALU v GPU/ s úsporou pamäte, lebo o tom tu bude reč. Tak sledujte toto - na stole sa mi zišli tri veľmi pekné prenášky na rovnakú tému, ako poslať tangenciálne vektory, bipoláry a podobne vypečenosti do hajzlu. Zásadná úspora /30-50%/ hlavne mesh pamäte , menej interpolátorov, jasne prehľadnejšia teselácia a manipulácia s povrchom, trochu aj úspora textúrovacej pamäťe.

Nebojte sa technických výrazov. Vec je značne jednoduchá. V skutočnosti ide o novú metodiku pre lacnejšie riešenie nám dobre známych a všadeprítomných normálových máp. Neštruktúrovana mriežka, polygonový mesh je kostra zložená z vrcholov /vertex/, hrán /edge/, plošiek /face/ potiahnutá textúrov. Normálová mapa simulyhe virtuálne nerovnosti /bez skutočnej geometrie/ manipuláciou so svetlom. Normála alebo normálový vektor je učivo strednej školy, možno si niečo vybavíte aj o perpendikulárných vektoroch kolmých na normálové vektory. Je ich mimochodom nekonečné množstvo. Ak vám to nehovorí vôbec nič. Nevadí. Normálová textúra proste potrebuje vlastný súradnicový systém /svetlo robí ten pseudo priestorový trik/ a z tých hore spomenutých blbosti si musíte vybudovať tangenciálny priestor /tangent space/. Aby ste dosiahli to správne postavenie-orientáciu svetla voči normálovej textúre tak normalizovaný smer svetla od bodu svetla ku trojuholníku mesha vašej ploche násobíte matricou, kde máte pekne uložené vektory normály, tangentu, binormály /X,Y,Z/. Výpočty bežia ďalej napríklad vynásobením farby pozadia, ambientu. Na to sa však teraz vyserieme.

Otázka zneje, ako sa práve týchto vektorov a matríc zbaviť. Je možné týmto spôsobom dosiahnúť úsporu pamäte, zachovať kvalitu a rýchlosť ? Odpoveď sa volá derivovaná mapa a čo je najdôležitejšie za vlasť podobne ako pri tom softvérovom antialiasingu padne výpočetný výkon ALU jednotiek /napríklad v GPU/. Téoria derivovaných máp je prekliato zložita, stačí vám vedieť, že ide o projekciu gradientu výškovej mapy do jednoduchého 2D poľa, vzhľadom na jej skalárny charakter, ide vlastne o polievku 2D vektorov orientovaných v smere najväčej zmeny. Dĺžka vektoru zodpovedá stupňu zmeny. Najdôležitejším záverom je, že nepotrebujete tangent vektory /space/ uložený v istom značne veľkom priestore /redukujeme mesh pamäť/. Úspora miesta ide na úkor hrubého výkonu našej GPU, alebo CPU /CELL/. Nasledujúca tabuľka ukazuje časovú náročnosť spracovania normálovej versus derivovanej mapy. Nezabudnite, pri tej derivovanej ste už ušetrili hafo pamäte.



Rýchlosť spracovania derivovanej mapy je teda rovnako rýchla ako pri pôvodnej normálovej mape, nutnosť extra shader inštrukcií je kompenzovaná tým, že sa nemusíte zaťažovať výpočtom tangent space systému súradnic, alebo vertex interpolátorov. Je tu ešte vyšší počet "textúrovacích" inštrukcií /2 páry akcelerovaných ddx/ddy koordinátov + jedna pre rozmery textúry/. Aj táto "strata" je skrytý v ALU redundancii a vo vlastnosti ALU jednotky spracovať naraz v jednom cykle ALU aj textúrovaciu inštrukciu naraz. Výsledný čas je teda pri spracovaní normálovej aj derivovanej texúry identický /rozdiel do 0.5 %/. Zaujíma nás kvalita. Derivovaná textúra tie správne vektory predsa len iba odhaduje. Môžem vás však potešiť, ostatne obrázky máte dole, že pri použití derivovaných máp v druhom slede, teda nie pri mipmap úrovni najbližšej ku hráčovi je výsledok úplne dostatočný a pri konzolách si aj tak nemôžme príliš vyberať. Vždy ide o toľko pamäte ušetríme. Mimochodom Naughty Dog má túto technológiu už rozpracovanú pravdepodobne pre budúce použitie na DX11+ PS4 železe.



vľavo "lacná" derivovaná, vpravo "drahá" normálová mapa