19. 11. 2014

AI : "Učiňme človeka na svoj obraz a podľa svojej podoby"


Assassin: Unity. Ubisoft /vlastným slovami/ dostal z PS4 a XO každý gram ich výkonu. Samotná "grafika" im vraj v testoch bežala okolo 100fps, avšak v praxi je hra prakticky nehrateľná, aj podľa nich limitovaná výkonom CPU /nie GPU/ a "exceluje" na PS4ke v intervale 18-20fps vždy, keď je v dohľade dav ľudí /ale aj keď beháme po strechách a okolo niet nikoho !!/, dokonca XO bojuje s 5-6 fps v coop misiách. Je snáď problémom ta kopa francúzskych NPC ? Podľa mňa jednoznačne nie /pozn. Ubisoft to tvrdí tiež/. PS4 je schopné renderovať aj 50 000 panduľákov naraz, vlastne kľudne aj 1 000 000 na level ak treba. Problémom bude a to naprieč platformami pravdepodobne zle manažovaný beh desiatok úloh na CPU /task scheduler/ a ešte pravdepodobnejšie zle dizajnovaný AI modul tých NPC a podľa mňa jedna jeho konkrétna časť - pathfinding a visibility.

"We could be running at 100fps if it was just graphics, but because of AI, we're still limited to 30 frames per second." - Assassin Unity, Ubicrap.

Pathfinding - jadro realistickej AI. Váš agent hľadá cestu z bodu A do B cez C a D, tak aby pohyb vyzeral vierohodne, prirodzene a počas presunu vedel reagovať na dynamicky sa meniace prostredie, kde rátame aj fyzikálne vplyvy /spláchne ho vlna, odfúkne ho vietor, spadne naňho barák/. Ak si preklepnete internet vypadnú na vás technické termíny ako klasická metóda A* /čítaj ako A-star/, grid, nodes, navigation meshes /časť mapy po ktorom sa dá chodiť/, waypoints. Riadený a neriadený pohyb /ako myš, čo pokus omyl hľadá cestu z bludiska/ prostredím. Autonómne sa učiaci kód - ANN /Artificial Neural Networks/ alebo GA /Genetic Algorithms/. Tak či onak - je to značne až príšerne náročné na CPU výkon, ram a technicky nemožné na dokonalé odladenie. Na skutočne next gen sandbox mape s premenlivým prostredím /denný cyklus, počasie, deštrukcia - teda zmena navigačného meshu, kľúčových bodov atd./ si koledujete o mnoho bezsenných nocí, preto sa to v drvivej väčšine prípadov hádže cez palubu a stále narážate na AI nie lepšiu ako na PS2ke. Úroveň čerstvo narodeného teliatka - a to aj v našej Assassin: Unity.

"However, the AI have X-ray vision and can see me through shrubs and vegetation." - cryengine, Crysis sračka séria.

Visibility /perception/ - blbá AI sleduje okolie, počúva, vníma. Ilúzia človeka. Riešenie tohto problému je iná liga. Možno vás to v prvej chvíli nenapadne ale ide de fakto o "raytracing", raycasting ak chcete. Naše vlastné oči vidia iba tie objekty, od ktorých sa odrazí svetlo a dopadne na sietnicu. Pri AI teda robíte niečo veľmi podobné. Ak je tých očí veľa, terén je komplexný a podmienky značne dynamické, položíte na kolená sebelepší systém. Nezabudnite aj na nuansy, že ak vy ako hráč zajdete napríklad za stĺp, tak si tá AI musí - mala by "pamätať", že aj keď vás v danej chvíli nevidí, tak tam niekde predsa len ste !! Samozrejme tieto výpočetné a pamäťové príšernosti sa opäť osierajú. AI vás teda registruje iba vo svojom maličkom 20-50-100 metrovom sektore a mimo neho o vás stráca záujem, AI vidí aj cez foliage /tráva, kríky, listy stromov/ lebo je ďaleko menej náročné netestovať či v ceste AI pohľadu nie je nejaká prekážka a ďalšie radosti, ktoré robia z Crysis 1 /lebo o nej hovorím/ jednu šialenú komédiu. Alebo má AI k dispozicií všetky dáta o vašom pohybe a teda neriešime jej schopnosti, ale iba ako veľmi podvádza. Achtung. Pre sluch tej AI platí to isté v ružovom, ďalšie zmysly nás už nezaujímajú, dosť problémov aj bez nich.

Na PS4ke nie je žiadnou výhrou hodiť všetko toto a mnoho ďalšieho na jeho 8 jadrového, vypelichaného jaguára. Čo tak skúsiť GPU, ktoré je objektívne mierne premotorované nad úroveň výkonu tohto "notebookového" CPU. Tak hladko to však nepôjde. Fyzika a AI bežia hystoricky a prakticky lepšie práve na CPU /rýchly náhodný prístup do RAM, vynikajúci branching, vysoký výkon na jedno vlákno, AI sa v paralelnom spravovaní necíti dobre - synchronizácia viacerých vláken je peklo/. GPU je viacmenej pravým opakom. A obe musia mimoriadne rýchlo komunikovať /čo je problém najmä na PC s oddelenými mem bankami, zbernicami a vlastne aj oboma výpočetnými centrami/.

Zdá sa teda, že hUMA, HSA PS4 APU by malo byť tým úžasne všespásným riešením. Všetky dáta sú v jednej ram, hUMA /heterogeneous Uniform Memory Access/ znamená že CPU a GPU môže pristupovať na jednu adresu v jednej mem banke /zbohom virtualizované prostredie DirectX API a WinOS/, v okamihu ako jeden z nich dokončí svoj diel práce, bez presúvanie tých dát hore a dole po zbernici napríklad do lokálnej vram a HSA /Heterogeneous Systems Architecture/ zas kontextové, mimoriadne rýchle prepínanie aplikácie na v danej chvíli čo najvhodnejší procesor /CPU, GPU, iné/. Pamäť hUMA je navyše plne cache koherentná, obe čipy vidia tie isté dáta v RAM, aj keď ich ten druhý pred očami mení a stará hodnota sa ešte nachádza v ich keškách. V cache nekoherentných systémoch, musí druhý čip dať prvému najprv vedieť, že dáta zmenil, aby ten spláchol svoju už neaktuálnu kešku do hajzlu a začal od znova /stratu času, cyklov, latencia, framerate padá/. PS4 má v každom z tých bodov špeciálne HW úpravy, ktorý by to mali teoreticky značne uľahčovať.

Advanced RAGE AI versus Mad Stray Cat

Bohužiaľ to vyžaduje totálnu zmenu filozofie a postupov programovania pravých next-gen enginov o akej sa vám ani nesníva a drahý, základný výzkum na ďalších 3-5 rokov. Pravdepodobne budeme schopný prehodiť riešenie AI visibility na PS4 GPU, možno aj v async direct compute móde ale to množstvo práce si viem len ťažko predstaviť. Ide o pole neorané, síce nájdete desiatky pekných pdf o týchto algoritmoch bežiacich na GPU, nič z toho sme však ešte aplikačne vo veľkej mainstreamovej hre nevideli.Osobne si myslím, že kým si to nebude žiadať sám herný mainstream /eh, lol/ a neutiahne to mašina bez špekulovania iba brute force postupom /aspoň sociálnych 10-15 FLOPs výkonu, 1 terabajt priepustnosti v RAM/ nikoho táto téme veľmi zaujímať nebude. Herná fyzika /rigid, fluid, rope, cloth, termodynamika/ a teda interakcia, nová herná mechanika na tom nebude o nič lepšie.

A oplatí sa v tom hrabať dnes na PS4ke, GPU s GCN 2.0 architektúrou ? Predsa poznáme už zľudovelé tvrdenie veľkého Gabena, že "každá sekunda strávená dolovaním výkonu z CELL je iba strata času". Pozrime sa na to pragmaticky. PSone prišla s HW akceleráciou transformácií a nasvietenia /HW T@L/ dávno predtým, než sa to objavilo v drahých PC grafikách. Emotion Engine poskytol PS2ke značnú future proof rezervu a priniesol napríklad plne programovateľné vertex operácie triedy DX9 opäť dávno pred PC šmejdami. PS3 CELL, SPE jednotky a "neperspektívny" heterogénny model je to, čomu aktuálne hovoríme DX11+ direct async computing. Tak neviem gaben na tie triviálne hry čo robíte vy, určite stačí aj ten starý "DX7 koncept" - to jest jedno dobré CPU a výkonný rasterizér, zvyšok sveta sa ale snaží posunúť zadkom trošku ďalej od vyžratého stola.