18. 1. 2013

Herná fyzika


Je tu s nami už od čias úplne prvých 2D hier, aj taká zdanlivá prkotina ako kontrola kolízie sprajtov vlastne patrí práve do tohto chlievika. V 3D svete to chce na jej správnu implementáciu veľmi komplexné znalosti matematiky, fyziky, dokonca chémie. Riešite množstvo náročných kapitol - už spomenutú detekciu kolízie, fyzika tuhých/tekutých/plynných telies, časticová fyzika, animácia/skeletálne modely. Je to úplne bláznivé, a skôr než vám o tom niečo povzbudivého poviem, nadhodím vám túto loptičku na smeč.

Mám pred sebou hypotetickú hru s dokonalou fyzikou. Absolútne korektná, perfektná, božská. To znamená, že v klasickom hernom dizajne by som mal zabudnúť na nasledovné, nereálne vychytávky: tzv. dvojskok, alebo využitie vetríka, prúdu vody, ventilátor alebo unikajúcu paru aby ma to vynieslo vyššie, "neviditeľné" steny, antigravitačné kraviny, mega výskok s dopadom na zem, otriasajúcim všetko dookola, okamžitá otočka o 180 stupňov, bezpečné nárazy v aute v rýchlosti 300kmh, poskakujúce kozy na nehybne stojacej suke, dáždnik použitý ako padák, laser odražajúci sa od každého povrchu, veľká muchotrávka ako trampolína, padajúce budovy bez náznaku tlakovej vlny, stači ak to nespadne rovno na vás.

Tento zoznam môžem predlžiť na niekoľko textom nabitých strán. Môžem rozpitvať antifyzikálne finty používané v každom jednom hernom žánri. Záver však bude jednoduchý - skutočne iba niektoré vybrané hry si môžu dovoliť luxus tzv. božskej všadeprítomnej fyziky. V ostatných to zásadne nabúra alebo úplne zničí základné a zabehené, herné mechanizmy, "prídete o hru".

V tej našej perfektnej hre si musíme uvedomiť, že fyzikálna interakcia prebieha na každej úrovni. Náraz auta do stromu zhodí listie z neho na zem, kus odlietajúceho plechu zabije chodca, výbuch benzínovej nádrže rozbije okno na blízkom baráku. Voda z chladiča zmiešaná z krvou tečie po asfalte do kanála. Podobná simulácia je bezprecedentne náročná na veľkosť pamäte, priepustnosť a presnosť. Asi ste čakali slovo výkon, to tam patrí tiež, ale presnosť je to správne heslo. Dobrá fyzika je na to nesmierne citlivá, nemôžete si dovoliť žiadne "zaokruhľovanie", chybá narastá logaritmicky. Aj veľké pevné objekty potom poskakujú alebo explodujú.



To nebol žart. V starších fyzikálných videách, vidíte často rozbijajúce sa predmety, kilá porcelánových črepov po zemi. Vidíte však aj neprirodzený pohyb niektorých kúskov, ktoré si nevedia "nájsť miesto". Čudne poskakujú. Chyba môže narastať ďalej až zničí celú relevantnú fyzikálnu simuláciu. To vyrieši razantný nárast prenosti výpočtov /a teda aj nutnosť značne vysokého celkového výkonu/. A ešte k tej "explózii". Existujú veľmi rafinované postupy /napr. model podľa Voronoia vo videu nižšie/ ako poriešiť procedurálny rozpad objektu. Avšak pri nižšej presnosti výpočtov môže dojsť ku nárastu vnútornej tenzie do takej miery, že sa objekt rozpadne sám od seba aj pri malom pôsobení energie zvonku, dokonca stačí keď sa bude iba neškodne kotúľať. Skúste vo svojej hre vyladiť každý jej element - fyziku pevných telies, kvapalín, častíc, trenie, deformáciu, živé materiály tak aby nedošlo ku vzniku ani jednej lavínovite sa šíriacej chybičke. Je to takmer nemožné.

Napriek tomu si v ďalšej generácii užijeme ovela viac selektívnej fyziky vo svete komixových, herných zákonitostí. Bude tu teda oveľa viac rozbíjania /hlavne kombinácia fyziky solídnych telies a plastickej deformácie/, o trochu menej fyziky tekutín a plynov. Ak som už spomenul tu náročnosť na presnosť/výpočetný výkon. Je to úloha hlavne pre skutočne mocné CPU /dobrá predikcia vetvení, a singel thread výkon/, GPGPU nám pomôže s akceleráciou iba niektorých operácii. Určite ste počuli o hardverových akcelerátoroch fyziky - Physics Processing Unit /PPU/. Čip jednoúčelovo optimalizovaný presne na mieru typického "fyzikálneho kódu". Komerčne neúspešný, máme predsa kúpené už to drahé GPGPU, nech si nejako poradí. Tu však bojujeme s problémom zvaným zahltenie grafickej pipelajny GPU alebo nedostatočná koherencia a šialené kopírovanie dát tam a späť.

Mám však pre vás jednu dobrú správu ohľadom PS4. Niekoľko zdrojov vrátáne EG.net prisahajú, že na matičnej doske PS4ky sa nachádza okrem CPU, GPU, pämatí, nejakých DSP a podobných kravín aj jeden špeciálny modul práve pre tie naše fyzikálne výpočty. Ako guru toho viem viac ako jeden drbko z eurogamer.net, takže vám poviem, že AMD na podobnej vecičke nielen na HW úrovni pracuje už pekne dlho /začalo to nevinne/ a práve do GPU triedy použitej pre PS4ku zamontovalo špeciálnu fičúru Asynchronous compute engine /ACE/, ktorý dosť výrazne rieši vyššie spomenuté ťažkosti /aj simultánny beh grafických a fyzikálnych výpočtov/. V prípade PS4ky však dostaneme pravdepodobne značne optimalizovaný ACE engine, ktorý nebude súčasťou GPU ale sa posunie niekde bližšie ku CPU. Dôvody sme si už spomenuli monohokrát.

Aká je teda trhová ponuka fyzikálnych enginov ? Prehľadný zoznam máte nižšie. Okrem patologicky známych "firiem" ako Havok, PhysX, DMM alebo Box2D /Angry Birds, hehe/ tu máme aj mojho favorita. Bullet engine. Je open source, teda "zadarmo", je šikovný, majú dobré vzťahy s AMD, je dostatočne výkonný: hry - GTA4, RDR, alebo Free Realms MMO od SONY, filmy - stačí Hancock. A ďalej chcem vašu pozornosť upriamiť na dlho vyvíjanú natívnu SONY fyziku - Sony Physics Effects. O nej bohužiaľ žiadne novšie info ako to video z roku 2009 proste nemám. Ale podobne ako grafický SONY Phyre engine sa na tom pracuje "deň a noc". A to je všetko milé deti, dobre vyladená hra pre PS4 bude proste fajnová pochutina, to vám poviem už teraz.
Profesionálna fyzika s veľmi vysokou presnosťou: