22. 9. 2012

Draw distance

Terminus technicus a zásadný problém pre každý grafický engine od prehistorických čias až po dnešok. V podstate ide o hranicu, za ktorou to váš hardvér konečne vzdá a prestane scénu vykresľovať. Nemá dosť polygónov na jej vystavbu, pamäť na uloženie, fillrate na vykreslenie. S rastúcim objemom/plochou priestoru proste spotreba systémových prostriedkov akceleruje exponenciálne. Niekedy, vlastne často, ten "koniec sveta" proste utopili v milosrdnej hmle.

Pred príchodom PSone alebo 3D akcelerátorov ako tých Voodoo grafík v minulom článku ste si museli v tom lepšom prípade vystačiť s nejakými 1000 polygónmi na frame. Ak si dobre pamätám tak len model prvej Lary Croft ich mal okolo 230 /v roku 1996/. Typická Psone hra medzi 2500-4000 pre celú scénu. Niet divu, že drvivá väčšina jej hier bojovala s krátkou "dohľadnosťou". Neskôr po rutinnom zvládnutí možnosti mašiny prišli na trh hry, ktoré tento problém zdanlivo na 100% eliminovali - Terracon, Vanishing Point.

Dnes sme dospeli do bodu, keď moderné stroje a hry nemajú žiaden problém s nekonečnou draw distance pre exterierové scény /viď terén engine - Just Cause 2 a spol/. Krajina ako taká už viac nedoskakuje, hory sa majestátne týčia na horizonte aj 15 kilákov od nás. Existuje more techník ako toho dosiahnúť, nebudem ich tu rozoberať, je to už bežná rutina. Ak je teda tento problém vyriešený, prečo o ňom píšem.

V skutočnosti sme totiž presne tam, kde bola PSone pred 18 rokmi. Otrasné doskakovanie objektov v tej nekonečnej krajine. Tráva, stromy, kamene, ploty, domy, koše, kytky, stĺpy, NPC, tiene /!!/, textúry a ďalšie stovky maličkosti vám miznú alebo objavujú tesne pod rukami. Fenomén "rýchlo rastúcej trávy", kde ešte pred chvíľou nebolo nič, a je zrazu bujný porast, ktorý vzápätí zalezie pod zeme ak trochu ustúpite dozadu. Ostatne vychutnajte si tento "draw distance" článoček a tweaking parametrov stále ešte novej hry Suckrim. Perlička. Hra im padla na hubu pri maximálnom nastavení, ktoré pritom bolo stále nedostatočné. Ani ninja PC ten nápor nezvládlo /v skutočnosti nesie hlavný podiel viny prd engine Bugthedy/.

aj pri maximalnej 100% draw distance sú tisíce objektov pod vami "neviditeľne", ostali len holé krabice domov a bitmapové stromky

V ďalšej generácii musíme poriešiť vyššiu efektivitu draw calls /konzoly sú tu o rád výkonnejšie ako sebelepšie PC/, fillrejt /ešte lepšie TBDR/, pamäť /veľkosť, rýchlosť, latencia, organizácia/ ale hlavne sa čaká na zrod nového designu programovania, veľká paradigma, ktorá napríklad porieši večný problém s overdraw kataklyzmou. Dosať pixel-texel ratio čo najbližšie ku 1:1 pomeru.

Zoberte si tu doskakujúcu trávu alebo simplifikované stromy až na úroveň  2D bitmáp. Prečo tomu tak je ? Jedným z dôvodom je práve extrémny overdraw. Niekoľkonásobný, v našom prípade alfa-transparentných objektov, čo je ten úplne najhorší prípad. V rozlišení 512x256 /131 000 pixelov/ a pri 60 fps hre potrebuje za sekundu vykresliť 7.8M pixelov. Hovorím teraz o konkrétnej PSone hre. Máme k dispozícii GPU s  výkonom cca 33 megapixelov /4 krát viac ako treba/ . Tak jaký pak copak. Nuž zabúdate na to, že v
3D svete máte objekty bežne za sebou, nie vedľa seba.

Čo tak 16 sklenených tabúľ pokrývajúcich celú plochu /16 násobný overdraw na každý pixel obrazovky/. Kde je teraz tvoj boh. Čo tak 50 transparentných listov stromov v lese. Nemáte žiadnu šancu. A práve toto je jedna z obľúbených hádaniek, ktorú sa snažia progiši a inžinieri už desaťročia vyriešiť. Hrubý výkon je tu ničím, vždy vám ho zožerie stále vyššie a vyššie rozlíšenie /240p-480p-720p-1080p-4Kp/ alebo nutnosť najprv vypočítať farbu tých pixelov /ALU jednotky a budget pre silikón čipu je vždy buď toto alebo tamto, nikdy nie obe naraz/. Ako ste už pochopili, z duše neznášam tento artefakt a každé blbé doskočenie trávičky, kamienka, alebo tieňa /strašne hnusné/ v takmer dokonale fotorealistickej krajine mi silne lezie na nervy. PS4 hry ma de fakto nezaujímajú, nové technické riešenia aj tohto problému - áno /zatiaľ nechám bokom unikátnu Power VR architektúru/.