24. 7. 2010

Dynamická tvorba příběhu a umělá inteligence

Na Overwatchově blogu jsem se zúčastnil krátké, ale plodné diskuze o dynamičnosti příběhu ve hrách. V souvislosti s některými poznámkami jsem došel k názoru, že současné hry prakticky neznají pojem "dynamicky se vyvíjející se příběh". Je to naprosto logické, ale říkám si - nešlo by to nějak? Překroutit zajeté dogma a vymyslet něco, co tady ještě nebylo? Samozřejmě - pokud se bavíme o semirealistické simulaci, nevyhneme se bez hlubších znalostí psychologie a sociologie. V tomto oboru jsem bohužel naprosto nevzdělán, ale naštěstí znám Vojtu, který si v podobných věcech libuje. Jelikož ale Vojta je na dovolené nebo co, sepsal jsem pro něj dopis, na který odpoví později. Proto v současném okamžiku nelze text považovat za hotový, ale jen nástřel. Přišlo mi ale škoda se o mnou navrhovaný systém nepodělit již nyní. Čili berte následující text jako rovnání myšlenek bez opírání se o nějaká fakta ze zmíněných oborů. Jde o teorii, která by mohla fungovat. Teda - ona zcela jistě funguje, jenom ještě nebyla vymyšlena tak, jak se snažím níže popsat.

Ahoj Vojto.

Pokusím se sesumírovat svoje myšlenky, ale připrav se na to, že to asi bude delší čtení.

V zásadě bych se pokusil udělat tři základní informační celky, ze kterých pak vyplyne to, co bych rád nechal posoudit tebe, až budeš mít čas. Jelikož si během psaní sám rovnám myšlenky, je docela dobře možné, že budu psát i zcela zjevné věci.

I.

V počítačových hrách se obvykle setkáváme s příběhem, který je vyprávěný lineárně. Má začátek a konec a hráč jej sleduje tak, jak mu jej autoři předkládají. Populární jsou ovšem i hry, kde je příběh nelineární a hráč si v něm vybírá různým způsobem varianty. Faktem ale zůstává, že oba scénáře jsou navrženy scénáristou od začátku do konce, čili nikdy se nemůže stát, že by se stala událost jiná, než ta předepsaná.

V současné době jsme svědky mnoha počítačových her, které sice disponují lineárním příběhem, ale hráči nabízejí masivní svobodu v konání – využívání herních mechanismů. Jde typicky o „sandbox“ hry, jako například Oblivion, GTA4, RDR a další. Je skoro až zajímavé, jakou péči věnují autoři hry samotnému sandboxu, ale přitom globální děj je naprosto statický, neměnný od začátku do konce. Občas sice máme, zejména ve vedlejších misích, zakončovat dílky příběhu dle libosti, ale opět – jde o předpis.

Proto jsem došel k názoru, že dynamická hratelnost, která pružně reaguje na hráčovy činy (střelba, krádež auta, vrážení do lidí za běhu), by se měla rozšířit i o dynamicky vyvíjející se příběh. Na chvíli bych zapomněl na to, že v dané hře nějaký příběh vůbec existuje. Zaměřil bych se pouze na to, že skupina obyvatel v dané buňce má svoje potřeby a svoje touhy, které společně s možností interakce (ať už hráčovy nebo interakce NPC pomocí umělé inteligence) přetvářejí v činy a události.

V podstatě tady hovoříme téměř o simulaci reality. Jak ale z praxe víme, drtivá většina obyvatel má svoje potřeby a touhy naprosto neatraktivní pro účely hry. Práce scénáristy by tedy byla v detailním navrhování charakterů pomocí mnoha proměnných, které by se pak promítaly do hry a vytvářely by děj. Totiž – dobře navržené charaktery se budou potkávat, konftrontovat, ale i kooperovat. A jedním z těchto charakterů by byl i hráč. Ať už by hrál „sám sebe“ nebo by měl předpis jako v RPG hrách (a dle chování by dostával odměnu za správné hraní postavy).

Zásadním problémem je samozřejmě umělá inteligence. Pokud bychom hovořili o vysoce komplexním vyhodnocování akcí, budeme muset přistoupit na nějakou symbolickou úroveň, aby nám stačil výpočetní výkon. Ale nejde jenom o hardware – jde i o tuto samotnou úvahu. Nechceme přece, abychom vymýšleli prakticky nekonečné množství řešení jednotlivého konfliktu či prakticky nekonečné množství interaktivity. Naopak bychom se na to měli podívat prakticky. Proč si ten a ten člověk vybral tu a tu variantu, když mohl udělat to a to?

Z počátku se ale asi symbolismu nevyhneme, pro demonstraci příkladů.

II.

Zatímco hry, které hodně visí na příběhu, jsou adventury, RPG nebo nějaké akční, při své úvaze se na to dívám naprosto opačně. Neexistuje scénář. Existuje jenom situace a jednotliví aktéři mají dispozice k ovlivnění děje. Pokud vyloučíme vliv náhody, měly by správně navržené charaktery odehrát jakousi „dějovou partii“, která bude vždy identická. Avšak právě vklad hráčovy invence by měl změnit děj. Pokud bude například ve hře postava s ambicemi a financemi na ovládnutí světa, měla by tato hra dějově skončit tím, že se postavě povede ovládnout svět. Leč – přijde hráč a začně měnit dispozice oné postavy – a tím svět zachrání.

Dodám ještě, že mi nejde o vytvoření systému, který by dopředu sám nevěděl, „kdo je vrah“ a hráč by to jako detektiv na základě toho, co si všimne a nevšimne, určil. Události se odehrávají v lineárním čase.

Jak jsem naznačil výše – dějová partie mi z hlediska přirovnání nejvíce evokuje prakticky libovolnou strategickou hru. I když se současné hry odehrávají v reálném čase, algoritmy běžící na pozadí jsou jasně krokované, čili pro zjednodušení můžeme hovořit o partii šachu, anebo pro mou úvahu lépe – Battle Isle. V této hře je totiž možné proti sobě postavit dvě umělé inteligence, bez účasti hráče.

V Battle Isle (a samozřejmě ve většině her tohoto žánru) proti sobě stojí dvě armády. Každá má motivaci vyhrát a má k tomu přesně předepsané možnosti. Pohyb, útok, doplnění paliva a munice, stavba nových jednotek. Umělá inteligence používá tyto jasně definované kroky tak, aby zvítězil rozprášením armády. Dobrá umělá inteligence je navíc „lidská“ – občas i chybuje, ale dokáže své chyby napravit. V této konkrétní hře existuje element náhody, ale předstírejme, že tomu tak není. Důležitý závěr je, že vyhodnotit stav bojiště a dle toho se zachovat je funkční mechanismus. Jeho rozšíření stonásobným navýšením dobře navržených prvků tedy bude také fungovat - to je výchozí konstatování.

Představuji si Battle Isle, kdy jednotlivé vojenské jednotky jsou vlastně jednotlivé umělé inteligence. Navíc – jejich motivací není nutně rozprášit nepřítele, snaží se jen dosáhnout nějakého vlastního cíle, který je pro každou jednotku unikátní, ale někdy klidně konfliktní. Každá z padesáti jednotek představuje jednu lidskou bytost, která krom komplexnější statistiky dostane také komplexnější možnosti interakce. Hra přestane být válečným sporem.

Lidská bytost na tomto poli by v prvé řadě potřebovala uspokojit svoje potřeby například dle Maslowovy pyramidy potřeb. Jelikož neuvažujeme nad klonem hry Sims, můžeme celkem s přehledem říct, že první tři úrovně má každá bytost zabezpečené (i když pro příběh hry by bylo zajímavé, kdyby do takové situace vpadla bytost, která nemá zajištěný ani první stupeň pyramidy). Každá bytost potřebuje tedy nějaké uznání a samozřejmě svou seberealizaci.

Pokud bude počet proměnných dostatečně vysoký, dokážeme u jednotlivých bytostí nadefinovat jejich touhy a přání a také styl, jakým svých cílů dosahují. Jak se budou chovat, když jim někdo vstoupí do cesty. Samozřejmě bude velice záviset i na tom, jak která postava zná svého protivníka, v jakém je vztahu vůči němu. A v neposlední řadě bytostem funguje veledůležitá paměť. V tom výsledku bychom měli během sledování této „dějové partie“ zjistit, jaké postavy na sebe změní názor, jaké se vůbec nepotkají a tak dále. Vidím to všechno na té hexové mapě – každý tah bytost vyhodnotí co vidí s tím, kam směřuje, dle stylu chování vyhodnotí, jaké kroky přinesou největší užitek (a i tento „užitek“ bude znamenat pro každou bytost něco jiného) a pak přednese svůj „tah“. A takto se budou bytosti střídat, ovlivňovat a vyvíjet. Jde pochopitelně o obrovské množství proměnných, zejména v případě, že vyloučíme náhodné elementy. Ale zapomeňme na omezení hardwaru. Jsme schopni si představit (dlouhou) sérii algoritmů, které toto dokážou simulovat tak realisticky, že to pouhým okem nerozeznáme od skutečnosti.

III.

A tím jsem se dostal k jadérku věci. Já sám, jako laik, si nedokážu představit, jaké proměnné definují lidskou bytost. To je samozřejmě dost absurdně položená otázka, ale uvažuji, že bychom mohli začít zjednodušenou symbolikou. Na jazyku mám zejména hru Scribblenauts. V této hře je hráč postavený před nějaký problém – musí se někam dostat nebo něco konkrétního udělat. Hráč má obrovskou svobodu v tom, jaké předměty (včetně živých bytostí s jednoduchou inteligencí a vzorci chování) může pouhým napsáním názvu stvořit. Je zřejmé, že počet objektů je konečný (jde přibližně o 10.000 podstatných jmen), leč ono množství dává hráči pocit nespoutanosti a nekonečnosti.

Vtip je ale v tom, že jakýkoliv objekt má poměrně velkou kartotéku vlastností. Nejen, že je ve (v případě Scribblenauts dvourozměrném) světě definován tvarem, rozměry a hmotností. Ale zejména jde o vlastnosti objektu. Například – stetoskop. To je předmět, který slouží k poslouchání pacientova srdce, dá se s ním za jistých okolností něco přivázat a všeobecně jde o nástroj pro doktora. A teď si představ level, kde máš za úkol zjistit zdravotní stav pacienta, přivázat yorkshirského psíka k boudě a věnovat doktorovi chybějící pomůcku. Je zcela jasné, že všechny tři úkoly jdou v dané herní logice vyřešit stvořením stetoskopu. Zároveň je ale naprosto jasné, že každý úkol má více řešení – zdravotní stav pacienta můžeš zjistit třeba pomocí nějaké elektronické sondy, psa můžeš přivázat kusem lana a doktorovi můžeš dát třeba defibrilační jednotku, abys splnil úkoly dané hrou. Záleží jen na hráči, na jeho kreativitě a stylu uvažování, jak bude problémy řešit.

Opět příklad – máš dvě osoby a jedna z nich šikanuje tu druhou. Tvým úkolem je zachránit šikanovaného. Jak to uděláš? Onen agresor má jasně vydefinované, co odvede jeho pozornost (co má raději, než šikanování) od trpitele a zároveň trpitel má definováno, jaké stavy jsou pro něj „svobodné“. Hráč nyní může agresorovi dát peníze (stvořit je přesněji řečeno), nebo mu poslat do cesty sexy ženu, ale také je samozřejmě možné jej jednoduše zastřelit. Pointa je ale v tom, že kdykoli ve hře potkáš postavu jménem „Agresor“, víš, že na odlákání jeho pozornosti, bez ohledu na to, co dělá (samozřejmě - bude-li se agresor zabývat ženou, nenalákáš ho pouhým objektem k šikaně). Stejně tak si jako hráč uvědomíš, že mezi postavami ve hře fungují jednoduché vztahy – při útoku se mohou pokusit o útěk, protiútok nebo se prostě stočí do klubíčka. A experimentem dojdeš k tomu, že stvoříš-li například Godzillu, tak ta sice může zabít agresivního šikanovatele, ale zároveň zabije všechno živé v lokaci. Takže to není řešení problému.

Nyní zpátky k psychologii osobnostem. Ony objekty ze Scribblenauts si představuji, jako jednotlivé charakterové vlastnosti bytostí. Může jít o sebevědomí, žárlivost, důvěřivost, ale i o fyzickou sílu, matematické nadání, zkrátka cokoli – cokoli, co mi poradíš, že je dobrý nápad řešit v prvé řadě. Vtip by spočíval v tom, že každá vlastnost by se dala použít k různým účelům právě podle toho, jaký by byl charakter postavy. Například agresivní silák, dostane-li za úkol (či to bude v jeho pyramidě potřeb) získat nějaký předmět od cizí postavy, zhodnotí, je-li snadné oné cizí postavě prostě rozbít hubu a udělá to. Pokud bude agresivní, ale ne silnější, může se pokusit najít si zbraň (což generuje vedlejší úkol a rozšiřuje dějovou linii o události – dostali jsme se tedy konečně k dynamickému vytváření děje). Pokud bude síla vyrovnaná na obou stranách, dojde patrně ke slovní konfrontaci a dle stylu mluvy je docela možné, že se podaří předmět od cizince získat či potají ukrást. Anebo – půjde-li o ženu, může to postava zkusit přes flirt nebo sex.

Díky tomu, že by mnoho postav mělo tyto základní vlastnosti na stejné úrovni, bylo by zajímavé sledovat, jak postavy dosahují svých cílů. Pravidla hry jsou jasně daná – když mají spolu postavy kladný vztah, spíše se s nimi domluvíš na vlastním prospěchu. A jak si dobře vybudovat vztah? No třeba tím, že budeš plnit nějaké úkoly, přání či sny postav, se kterými chceš navázat dobrý vztah. Toto všechno vede k tomu, že hromada umělých inteligencí by měla být schopna vytvářet události a tedy i příběhy. A to na komplexní úrovni, oproti událostem ve strategických hrách, jako Battle Isle. Počet proměnných je navýšen mnohonásobně a mnoho proměnných mají všechny bytosti společné.

Sám jsem se ale pozastavil nad otázkou, nedojde-li k problému s takzvaným pojmenováváním událostí. Tohle je relativně vážný problém, jelikož počítačové hry mívají jakýsi vypravěčský styl, který komentuje dění na obrazovce. To, že někdo někoho zastřelí je jasně definovaný čin. Ale právě vypravěč z toho udělá „Nájemnou vraždu chráněného svědka, aby zadavatel zakázky byl očištěn před soudem“. Je jasné, že člověk pozorující dějovou partii bytostí výše si při jistém stupni pozornosti sám bude odvozovat události, které se dějí, najde důvody všech činů – nic není náhodné. Pochopitelně takový člověk, či vlastně klidně hráč, bude moci stíhat pozorovat maximálně hrstku obyvatel, ale to je naopak logické a pro účely hry správné. To, že se na pozadí odehrávají matematické výpočty chování desítek či stovek postav neznamená, že hráč bude vědět všechno. Stejně tak mi došlo, že v naší realitě jsou to obvykle média, která dávají názvy událostem a přisuzují jim nějakou hodnotu. Pro mne, jako nezúčastněného pozorovatele došlo k vraždě – někdo někomu ustřelil hlavu. Šlo ale o cizí lidi, které jsem v životě neviděl a tak mi to může být celkem jedno, já do hlavy střelce ani zastřelného nevidím. Z tohoto důvodu se otevřeně vzdávám vypravěče v této hře. Jeho implementace je možná, ale jde o záležitost lingvistiky, kterou bych do toho nyní nerad tahal.

Výsledkem tedy má být svět, ve kterém se budou perzistentně odehrávat události mezi postavami (a konec konců i mezi neživými předměty či zvířaty) a hráč bude zlomek těchto událostí pozorovat a ovlivňovat. Postupem času bude rozšiřovat svou základnu kontaktů a tak se bude vypracovávat blíže ke svému cíli, ať už je jakýkoliv. Pudl je zakopán zde. Jsme schopni sepsat řekněme desítky základních charakterových vlastností a ty nějak ohodnotit, abychom mohli pozorovat chování dvou (časem více samozřejmě, ale začněme dvěmi) nezávislých bytostí? Dá se udělat seznam vlastností, jako seznam předmětů ve Scribblenauts, přisoudit jim vlastnosti, které se budou doplňovat a někdy i křížit? Co bych měl při nějakém prvním krůčku brát v potaz především? Nečekám jednoduchou odpověď, ale kdyby ses nad tím zamyslel, mohlo by to pro teoretickou úvahu znamenat opravdu hodně.

Samozřejmě chceme tvořit hru, takže je dovolená symbolika nebo zkratka, nesnažme se hned od začátku vytvořit dokonalý systém. Vraťme se k Battle Isle – udělat jednoduchý systém, kde se budou dvě postavy chovat „nějak“ a já, jako hráč či pozorovatel, budu schopen jejich chování odvodit a pochopit. Systém, který jsem si vysnil výše, je až konečná fáze toho, co bych rád v této teorii načal.

Závěr

Vytvoření enginu na chování postav by (nejen) pro herní průmysl znamenal revoluci. Nehráčské postavy by si spolu mohly libovolně budovat vztahy a setkání s člověkem na ulici například v GTA4 by dostalo absolutně nový rozměr. Hráč by si zároveň mohl libovolně budovat cestu ke svému cíli, již by nebyl omezen zadáním úkolů a definovaných kroků k jejich splnění. Mohl by vlastní vůlí budovat kontakty, podporu, ale i nepřátele. Hra by v podstatě neměla příběh v takové formě, jak jsme zvyklí dnes. Ale hráč by pozoroval rejdy svého nepřítele numero uno a dumal by, jak se mu dostat na kobylku. Tento nepřítel nebude nic jiného, než unikátně navržená figura spadající pod stejná pravidla. Nezapomínejme na paměť postav a také na to, že náš nepřítel může cítit ohrožení a tak pošle na našeho hrdinu nájemného vraha anebo si najde jinou cestu, jak se proti hráči obrnit. Naprosto zmizí mise a jejich plnění, hra dostane plynulý tok a příběh tvoří hráč (a i nehráčské postavy) svými činy. Neboli opravdu dynamický příběh. Tento engine by se tak zařadil mezi univerzální enginy fyzikální jako Havok, „simulace pudu sebezáchovy“ ála Euphoria a podobně. A je naprosto jasné, že nemusíme zůstat jen u kopie současné reality. Není problém systém adaptovat na komediální hru, sci-fi, fantasy nebo třeba morbidní svět Planescape.

Pochopitelně si každý musí klást otázku nad realizací takového projektu. Možná překvapivě v tom ale nevidím zase zásadní problém. Nejtěžší bude vůbec vytvořit tabulku podstatných charakterových (a fyzických) vlastností, kterých bude muset být pro účely hry jistě desítky, pro realistickou simulaci stovky až tisíce. Jakmile ale bude tato (kdykoliv rozšiřitelná) tabulka hotová, dostane každý specifický designér / scénárista svou kopii a začne ji vyplňovat tak, aby stvořil charakter dle své vize. Po tomto hrubém nástřelu by byla vytvářená postava stavěna před náhodné situace, převážně konfliktního rázu a designér by odpovídal, jak s postava zachová. Pod pojmem "konfliktní" ale nemusíme vidět nutně jen nějakou negativní nebo agresivní událost. Konflikt symbolizuje, že postava chce "něco" dělat. Například sedí u počítače a nudí se. Pustí si film? Co když má ale v počítači porouchaný harddisk - pustí se do opravy? Co když opravu nesvede - zavolá servis? Co když chce servis hodně peněz - zaplatí to? Tady nastane zlom - prvotní konflikt "nuda za kompem" dojde k závěru "zaplatit hodně peněz". Každá postava disponuje i financemi, ale samozřejmě i trpělivostí a tak je docela možné, že se hned po druhém konfliktu rozhodne jít dělat něco jiného a na počítač se lidově řečeno vykašle. To jsou všechno věci, které se zanesou do databáze. Jak jsem naznačil u Scribblenauts - akce "zavolat servis" se zaškatulkuje "volat pomoc zvenčí", akce "opravit harddisk" se zaškatulkuje jako "řešení svépomocí" a tak dále. Odpovídáním na otázky se nejen naplní stávající tabulka, ale zároveň se bude rozšiřovat počet kritérií. Nepochybuji o tom, že podobně vznikal seznam tisíců předmětů ve Scribblenauts. Tímto způsobem lze stvořit libovolnou unikátní postavu, kolem které by se měl hráč či přesněji řečeno "děj" točit.

Ale co ostatní obyvatelé města? I kdyby vytvoření komplexního charakteru mělo trvat několik hodin, vytvořit stovky tisíc obyvatel (v případě New Yorku ale spíše deset milionů) je časově nemožné? Ne tak docela. Stačí se podívat na projekty jako Akinator (kde je každá osobnost definována 20-40 položkami) či obecně „20 otázek“. Za pouhý rok se do tohoto projektu nacpalo tisíce unikátních a existujících osobností právě díky komplexnosti tabulky s otázkami (charakterové vlastnosti) a odpověďmi. S dostatečným počtem sekundárních designérů a scénáristů potrvá jen několik měsíců, aby vytvořili zajímavé šablony osobností, které se pak „naklonují“ a pomocí náhodného zásahu do statistiky postav vytvoříme punc originality. Přiznejme si to – vybraný vzorek populace reflektuje celou společnost a čím větší vzorek máme, tím více lidí svedeme definovat.

Zde si ale musíme uvědomit, jaký je cíl celé hry. V případě, že nám jde o pohyb postav ve městě a hráč je bude potkávat převážně na ulici, určitě nemá smysl definovat u postav to, jestli si samy stříhají nehty nebo vousy. Hráč uvidí realisticky se pohybující dav lidí, který chodí do práce, jí, spí, tráví volný čas v parku, ale kdyby se hráč zaměřil na to, jaké činnosti dělají postavy například v práci, bude překvapen, že sedí nehybně za počítačem. Definice mantinelů předem je velice důležitá. Pro hru, kde by se balily holky na baru, by zase bylo naopak kriticky důležité vyřešit zdánlivé malichernosti místo toho, kam chodí jaká holka konkrétně nakupovat kosmetiku, jelikož se hráč z poza baru nemůže pohnout - holky tak za dveřmi doslova zmizí. Avšak při udržení určité syntaxe se dá říci, že spojením tabulek městského a barového života (a dalších, které budou různí lidé vytvářet pro své projekty) stvoříme monumentální sérii algoritmu, která bude skutečně realisticky simulovat život mnoha bytostí se vším, co k tomu patří. Pochopitelně se to neobejde od výpočetního výkonu, který je v tomto měřítku momentálně nedosažitelný. V menším měřítku to ale nemožné není.

Čili i fyzická realizace připadá v úvahu a to jak pro velké projekty (tvorba více, než rok) nebo pro malé (počet postav do deseti), včetně freeware. V podstatě tady hovoříme o zcela novém herním žánru, neboť možnosti využití dynamického generování událostí jsou nejen dosud nepoznané, ale také doslova neomezené.

P.S.: Napadlo mne, že vypravěče by mohly v jisté formě nahradit právě média – virtuální. Dle důležitosti akcí by informovaly automaticky všechny obyvatele buňky a ti by k tomu zaujali vždy nějaký postoj, mělo by to na ně vliv. Pro hru v městě ála GTA4 to je důležité. Ale jak říkám – lingvistické vyhodnocování událostí – tedy „vdechování života“ – si nechám na jindy. A neříkám, že nemám nápady, jak to zpracovat ;).