Tolvajképző: a Thief mesterséges intelligenciája

Lopakodás mesterfokon...

A Thief: The Dark Project 1998 decemberében jelent meg a belső nézetű akciójátékok már akkor is igen zsúfolt piacán, és néhány zseniális ötletével azonnal műfajt teremtett. A fantasy környezetű játék főhőse nem valami adrenalintól duzzadó, legyőzhetetlen harcos volt, hanem egy árnyakban bujkáló tolvaj, akinek a legfőbb (sőt szinte egyetlen) fegyvere a meglepetés, az észrevétlenség. A sötétben lopakodás, az ellenséges járőrök kijátszása egészen új játékélményt, addig nem tapasztalt izgalmakat adott a játékosnak – nem csoda, hogy a kezdeményezésnek hamarosan követői is akadtak (a saját két folytatása mellett például a Metal Gear Solid vagy a Splinter Cell sorozatok).

Az újszerű játékmenet természetesen más megközelítést igényelt a mesterséges intelligencia irányából is. A Thiefben a megszokottól eltérően nem a harcon (ha odáig fajul a helyzet, a főhősnek gyakorlatilag nem marad esélye, hiszen egy-két csapástól azonnal elhullik), hanem éppen a harc elkerülésén van a hangsúly. Az AI-nak tehát itt elsősorban arra kell összpontosítania, hogy realisztikusan szimulálja az ellenfelek érzékszerveit: mikor, milyen körülmények között veszik észre a játékos karakterét, és mikor nem.

Látjuk...

Hirdetés

A lopakodós játékok karakterei a látásukra és a hallásukra támaszkodnak. Elvileg a szaglás is könnyedén megvalósítható lenne, de ez az a terület, amelyet – még – nem lehet a játékos számára közvetíteni, ezért ezt extrém esetektől eltekintve (vadászjátékok) nem is szokták modellezni.

Mivel az egész lopakodás lényege a fény-árnyék viszonyokon alapszik (illetve a hangokon, de erről később lesz szó), a láthatóságvizsgálatot nem lehet az akciójátékokban megszokott, pofonegyszerű raycasting módszerrel letudni (összekötjük az ellenfelet és a játékost egy vonallal, és ha az nem ütközik tereptárgyba, akkor lát; ha beleütközik, a játékos takarásban van). Ehelyett minden pályára kell generálni egy úgynevezett lightmapet, ami egy szürkeárnyalatos „térkép”, és a pálya adott pontjain a statikus fényviszonyokat hivatott leképezni.

Ezt aránylag könnyű módosítani a dinamikusan változó fényforrások hatásával (hiszen csak egy adott sugarú körben kell a lightmapen a fényerővel arányosan megnövelni a szürke árnyalatát), és máris a kezünkben van az eszköz, amelyik megmondja, hogy a játékos a pálya adott pontján tartózkodva, abszolút értelemben mennyire látható. (Hogy a játék izgalmasabb legyen, a Thief készítői még azt a logikátlanságot is bevezették, hogy a kivont fegyver is növeli a láthatóságot – csak hogy a fegyver elővétele is fontos stratégiai döntés legyen a játékos számára.)


Thief: Gold – az őr még nem lát

Az AI feladata innen már egyszerű: miután az említett raycasting módszerrel kiderítette, hogy takarásban van-e a játékos, csak az ellenfél és a játékos távolságát kell összehasonlítani a játékos aktuális láthatósági értékével. Máris remekül modelleztük a „minél sötétebb helyen bujkálok, annál közelebb kell jönni, hogy észrevegyél” elvet!

Természetesen ezt lehet még finomítani, például azzal, hogy megvizsgáljuk, merrefelé néz az adott ellenfél, és minél nagyobb szöget zár be ezzel az a vonal, aminek a végén a játékos áll, annál inkább lecsökkentik az ellenfél látótávolságát – „ami előttem van, az feltűnőbb, mint amit csak a szemem sarkából látok” effekt. Esetleg extra láthatóságot adnak a mozgásban lévő karaktereknek (a mozgás sebességével arányosat), ezzel is szimulálva az emberi látás egyik jellegzetességét.

Halljuk...

A hallás (ahogy a való életben is) a játékokban is kisebb szerephez jut, mint a látás. Megvalósítani is sokkal egyszerűbb, hiszen az ember minden irányban képes hallani, míg látni, mint tudjuk, nem – adott sugarú körben vizsgálódni pedig jóval egyszerűbb, mint egy körszeletben. Még egy lényeges különbség van: az AI-nak folyton figyelnie kell a láthatóságot, újra és újra végigfuttatni az érzékelő algoritmusokat, mert sosem lehet tudni, mikor és hol bukkan fel valami gyanús elem a látótérben. A zajok ezzel szemben impulzusszerűen jelentkeznek, így meg lehet fordítani a vezérlést. Míg a látásnál azt kell kiértékelnünk, hogy gyanús-e, amit látunk, a hallásnál azt, hogy ha elhangzott egy gyanús hang, azt hallhatja-e valamelyik AI-irányította szereplő.

Az algoritmus alapjáraton roppant egyszerű: minden hangforráshoz definiálni kell egy hallhatósági távolságot, és minden szereplőnek egy hallótávolságot. A zörej elhangzásának pillanatában csak azt kell megnézni, hogy a hangforrás közelebb van-e a „hallgatózó” karakterhez, mint ennek a két távolságnak az összege (tehát az „eddig hallatszik el a hang” köre átfedésben van-e az „eddig terjed a szereplő hallása” körrel).


Thief: The Dark Project – támadás hátulról

Igen ám, csakhogy ez a módszer feltételezi, hogy a hangok és zörejek egymás mellett mind tisztán hallhatók, azaz nem nyomják el egymást adott esetben – ez ugye nem túl életszerű. Valahogy szimulálni kell azt is, hogy például egy hangosan zakatoló gép zúgása „elrejtse” a közelében lévő halkabb zörejeket. Ehhez csupán azt kell kiszámítani, hogy a karaktert az adott pillanatban érő hanghatások közül melyik a legerősebb. Ez egyszerűen megállapítható: minden hang annyira erős, amennyire távol vagyunk attól a határtól, ahol még éppen hallható (vagyis ha egy százméteres körben hallható zaj forrásától 40 méterre állunk, ott 60-as erősségű a hang, az epicentrumban száz, 99 méterre a központtól egyes). Persze ezt is van még hová cifrázni: sokat lendít a valósághűségen, ha például kijelentjük, hogy egy hang csak akkor nyom el egy másikat, ha legalább másfélszeres az ereje az adott pontban (egyébként mindkettőt hallhatónak tekintjük), és így tovább.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

  • Én, a robot

    Chatbotok és társalkodó mesterséges intelligenciák.

Előzmények

Hirdetés