08/01/2021

Detroit: "Become PC"

David Cage - šéf Quantic Dream /QD/, ktorého poslednou hrou je dobre prijatý Detroit: Become Human /2018/, najnovšie povedal, že ich next gen projekt bude bežať na fungel novom 3D engine. Zdanlivo banálne prehlásenie. A aby som vás dostal trochu do obrazu, tak na PS3ke išli pri renderingu v ťažkotonážnom deferred štýle, lebo tak to vyhovovalo systému postavenom okolo SPE jednotiek so slabým GPU. Pri hre Detroit došlo ku fundamentálnej zmene na forward rendering. Nemusia vás trápiť detaily, ale ide o niečo v jadre veľmi dramaticky odlišné. PS5 je v úplne inej galaxii. Ponúka možnosti ako je plne programovateľná geometrická časť pipelajny /naposledy na PS2ke/, ide o novú paradigmu. Môžte si sami definovať vlastnú softvérovu rasterizáciu mimo fixného GPU HW /naposledy s Pentium a Quake 1 bez "3D" podpory/ a samotný HW PS5 GPU je upravený ad absurdum vo veciach, ktoré PC rieši neurvalým a silovým 300+ watt spôsobom. Podľa mňa budú v QD sedieť minimálne 2 roky na zadku aby ten zázrak zlepili dokopy. Myslím 2 roky čistej práce len na novom 3D engine. Nasleduje zopár motivačných slov ako "ľahko" sa na PC portuje hru z biedneho "notebook" HW PS4ky. 

 
Kara tech demo pre PS3 /GDC 2012/ - koncept video budúcej hry Detroit

Na porte hry Detroit: Become Human pre PC začali pracovať už pár týždňov potom, ako bola hotová PS4 verzia. Práca trvala 18 mesiacov aj s intenzívnou pomocou zo strany AMD. Určite si poviete, prečo tak nelogicky strašná, časová náročnosť, keď ide o banálny prenos hry z jednej AMD platformy na druhú. Dev tím tvrdí, že hra vznikala od začiatku primárne pre PS4 a nepredpokladala sa konverzia pre iné mašiny. Ukázalo sa, že natívne PS4 API so špeciálnymi extenziami a low level prístupom ku HW  je pre PC celkom veľký problém. DirectX alebo OpenGL boli možnosťami ďaleko pozadu. PS4 API odkrývalo funkcie GP, o akých sa PC s DirectX ani len nesnívalo.

Herný engine napríklad super intenzívne využíva možnosti nového, moderného "bindless resources". Je to model odlišný od štandardného "sparse resources" alias brute force prístup. Táto funkcia hovorí o voľnosti prístupu GPU ku dátam, ktoré potrebuje na výstavbu scény. Vyžaduje expozíciu funkcií v GPU skrze API, ktoré proste pri DX11 alebo OpenGL neboli dostupné a výkon 3D enginu pod nimi bol tragický a značne CPU zaťažujúci /CPU je hlava a GPU je krk/. Voľba teda išla smerom DX12 a Vulkan. A pretože Vulkan na rozdiel od DX12 podporoval aj staršie Win7/8 išlo sa jeho smerom.

Rozdiel medzi API ako DX11/12, OpenGL, Vulkan a PS4 /GNM, GNMX/ je hlavne v tom, že ovládače grafickej karty napríklad pri DX11 pred programátorom zakrývajú všetku "magickú" prácu za oponou /neriešite manažment umiestnenia dát v pamäti alebo implementáciu shader kešky, antialiasing, samplovanie textúr/. Je nemožné získať 25-50% výkonu navyše tu a tam ručnou optimalizáciou. S PS4 to je možné na tej najnižšej možnej expertnej úrovni. Vulkan je niekde v strede.

CPU PS4 je anemický Jaguar, na rozdiel od PC má však oveľa rýchlejší prístup ku HW /GPU, pamäť/ a počet "draw calls" /draw calls = objednávka od CPU smerom na GPU - koľko a aké objekty má GPU vykresliť/ je výrazne vyšší ako pri porovnateľnom PC CPU. PS4 CPU ide o 100% nad svoju výkonnostnú úroveň. Jednou z ďalších maličkostí, je možnosť kompilovania shader kódu pre PS4 GPU v off-line režime, lebo poznáte cieľový HW. Pri PC sa to musí robiť priamo počas behu hru, lebo neviete, ktoré GPU alebo jeho verziu ovládača tam akurát máte. Pri Detroite dostali PS4 grafici voľnú ruku a vyprodukovali šialené množstvo vertex/pixel shader kódu a dev tím už tušil, že nielen tu pri porte dosť narazí.

Ukážka aký je problém pracovať s "dynamickým" PC.  Na pracovnej PC stanici cez celú noc off-line ako na PS4ke skompilovali shader kešku, aby ráno progišom šetrili čas. Veľmi si však nepomohli, lebo "málo" robustný ovládač tu musel počas dňa neustále prekladať do natívneho GPU asemblera a to sa neobišlo bez cukatúr a "sekania". V tomto bode ich testy ukázali, že Vulkan funguje oveľa lepšie ako OpenGL. Je to preto, lebo Vulkan nepoužíva bežný vyšší programovaci jazyk HLSL ale iný binárny "medzijazyk" prekladač SPIR-V. Dôvod prečo je hra Detroit tak citlivá a zdĺhavá pri kompiláciu shader kódu je ten, že rendering nebeží v masovo používanom deferred móde ale v zriedkavejšom clustered forward režime, takže materiálové shaders v sebe zároveň obsahujú aj celý nasvetľovací algoritmus /pri deferred je oddelený/ a každý shader sa takto stáva malým inviduálnym kolosom. Náhodný príklad rýchlosti kompilácie: na AMD Threadripper s 64 x HW vláknom trvala istá operácia 2 minúty, na low-end PC podľa špecifikácie hry však až 20 minút. Problém, na ktorom sa tvrdo pracovalo a optimalizovalo. Detroit môže mať v jednom frejme až 4000 textúr a proporčne tomu aj zodpovedajúci počet shaders.
 
Došlo vlastne ku obratenému garde. Keď ste chceli niekedy dostať nejakú hry z high-end mašiny na opačný výkonnostný koniec, museli ste najsť kopu skratiek aby ste slabšiemu CPU/GPU pomohli. Detroit robil to isté v prospech PC, aby port nevyžadoval CPU/GPU "nepríjemne" mnohonásobne silnejšie ako má PS4. PC Detroit PC port používa triple-buffering, delta kompresiu pohybových vektorov roztiahnutých na štyri frejmy v zásobniku aby znižil tlak na GPU a CPU. Nič z toho na PS4ke nie je nutné. Pri PC to však znížilo objem dát ktoré behajú hore a dole o viac ako jeden rád. Nezabudnite, že PC nemá unifikovaná paäť a zbernice nie sú nijako zázračne rýchle. V hre Detroit teda Intel CPU 4 jadro s Nv 1060 stačí v rozlíšení 1080p nakoniec iba na stabilných, synchronizovaných 30fps, presne ako tá PS4. NV 1060ka je však GPU o trošku /flops/ výkonnejšie ako to v PS4 Pro a teda je minimálne 2 krát tak dobré ako GPU v základnej PS4 !!
 
Rozdiel vo vnútornej architektúre GPU pri AMD triedy GCN, RDNA, RDNA2 je na mnohých kritických  miestach úplne zásadný /rozumej pri PC porte narazila kosa na kameň/ a PS4 aj keď z rodiny GCN má množstvo úprav, ktoré nájdete až pri o generáciu alebo dve mladších GPU, API. Pri PC porte však musíte pokryť úplne všetko. Staré, aj mladé, pomalé aj rýchle. Detroit je na PS4ke 1080p/30fps úplne zámerne. Dev tím vedel, že v engine hry bude lietať obrovské množstvo dát a engine sa ušil presne na mieru superýchleho PS4 API a špeciálnych PS4 GPU extenzií. Opäť sa teda pripomenul starý výrok John D. Carmacka z iD software, že ak sa pozeráte na konzolu, nejakú jej špičkovú hru, tak si v duchu vynásobte každý HW parameter tej konzoly dvakrát, aby ste si to na tom PC zahrali aspoň v rovnakej kvalite. Pre PS5 bude platiť to isté. Dnešná veľmi slušná zostava s 8 jadrovým Ryzen, 16 giga RAM a AMD 5700XT vám na ďalších 7 rokov stačiť nebude. A hyperrýchle IOP/SSD PS5ky dokonca ešte dnes bežne na PC trhu ani nie je !!