0:05
Főoldal | Rénhírek
A végtelen városoktól a perzsékeny surranóig

Minek nevezzelek?

Mit csinál a játékfejlesztő, ha ötvenezer vérszomjas sárkánynak kell egyedi nevet adnia? Hogyan alkossunk könnyen és gyorsan tetszőleges nyelvre hasonlító halandzsaszöveget? Miért óvakodjunk az ehető költőtől? Cikkünkből mindez kiderül, és még ingyen játékok is vannak benne!

Takács Boglárka | 2011. szeptember 14.

A játékprogramok egyre nagyobbak lesznek, a felhasználók igényei is egyre nőnek. A fejlesztők munkaereje azonban véges, úgyhogy a játékipari cégek tíz körömmel kapnak minden időmegtakarító módszer után. A procedurális tartalomgenerálás épp ilyen – de pontosan micsoda is az? Nyelvi tartalmakat is létre lehet hozni vele, és ha igen, hogyan? Összeállításunkban szemléltetésül három ingyenesen letölthető, Windows, Linux és Mac platformokon egyaránt futtatható játékot is bemutatunk!

Messát, a mágust a számítógép nevezte el.
Messát, a mágust a számítógép nevezte el.
(Forrás: Takács Bolglárka / GNU GPL 2.0)

Végtelen város

A procedurális tartalomgenerálás lényege, hogy a videojátékba kerülő tartalmakat nem egyenként, „kézzel” készítik el, hanem egy olyan eljárást használnak, amely automatikusan hozza őket létre néhány előre megadott szabály alapján. Ez kicsit hasonlít ahhoz, ahogy az emberek használják a nyelvet – nincsen az agyban minden lehetséges mondat előre eltárolva, hanem a meglévő alkotóelemekből a nyelvtan segítségével jönnek létre a mondatok.

Bármit létre lehet hozni így, ha az embernek van türelme kitalálni a megfelelő szabályokat. Létezik procedurálisan generált zene – ez nagyon hasznos, mert az ismétlődő dallamok nem ragadnak bele a játékos fülébe a hosszú menetek során –, vannak automatikusan létrehozott tájképek, városok, galaxisok. A következő videóban egy olyan program bemutatója látható, amely tetszés szerinti méretű éjszakai városképet állít elő, három dimenzióban. A készítőnek saját bevallása szerint körülbelül ötven órájába került elkészíteni a programot, de innentől fogva tetszőleges számú várost csinálhat vele magának. (Azért ezt a példát választottuk, mert ha valakit részletesebben is érdekel a téma, a fejlesztő weblapján mindegyik lépésről olvashat közérthető angol nyelvű összefoglalót.)

A procedurális módszerrel előállított tartalomnak az időmegtakarítás mellett más előnyei is vannak. Nem ismétli önmagát, habár ha valaki sokáig nézi, azért egy idő után ezt is unalmasnak találja. Az előállítási szabályok kevesebb helyet foglalnak, mint ha minden előre lenne rögzítve. A szabályok végrehajtásához azonban nagyobb számítási teljesítményre van szükség, éppen ezért a játékiparban gyakori az a módszer, hogy procedurálisan létrehozzák a kívánt anyagot (és ezzel időt spórolnak), majd eltárolják, hogy ne valós időben kelljen újra meg újra előállítani (így pedig számítási kapacitást spórolnak). Így ugyan a tartalom mindig ugyanolyan lesz és nem változik minden futtatáskor, de van, amikor ez inkább előny, mint hátrány, például ha a játékosnak az a feladata, hogy egy városban tájékozódjon. A hagyományos tartalomelőállítással is lehet kombinálni a módszert: például a játékos által bejárható területen az épületek nagy részét procedurálisan alkotják meg – így a készítők nem őszülnek bele abba, hogy egyenként rakosgassák az ablakokat a házfalakra –, de beletesznek néhány egyedi elemet is.

Mára már számos olyan segédprogram létezik, amely bizonyos fajta tartalmakat állít elő, így a fejlesztőknek elég ezeket megvásárolniuk és használniuk. Például sok játékban a SpeedTree programmal készítik el a fákat. Ebben a videóban végignézhető, ahogy a fejlesztő egy golfpályát erdősít be procedurálisan: beállítja az előállítási szabályok fontosabb paramétereit (például azt, hogy mennyire legyenek közel egymáshoz a növények), majd néhány fát áthelyez, hogy a végeredmény jobban mutasson. Így sokkal hamarabb megvan a munkával, mintha egyenként kellett volna a fákat megterveznie és lerakosgatnia, és a jól kigondolt szabályoknak köszönhetően mégis valószerű az összhatás.

Hol itt a nyelv?

Az automatikusan előállított tartalmakat gyakran el is kell nevezni – például egy térképen a városneveket, vagy a játékban található varázstárgyak nevét nem biztos, hogy egyenként szeretné kitalálni a fejlesztő. Már az először 1984-ben megjelent Elite űrhajós-kereskedőszimulátorban is procedurálisan generált bolygónevek és -tulajdonságok szerepeltek:

Az érdeklődők egy OpenOffice táblázat segítségével élesben is kipróbálhatják az eredeti algoritmust. (Ha valaki magát a játékot szeretné kipróbálni, az Elite modernizált változata, az Oolite ingyenesen hozzáférhető.) Rögtön láthatjuk, hogy bizony meglehetősen furcsa eredményeket is kaphatunk a használatával. Egy földönkívüliek által lakott távoli bolygónak még csak-csak elnézi a játékos, ha XEAQU a neve, vagy ha fő exportcikke az „ehető költő”, de sokszor valószerűbb kifejezésekre van szükség.

Az OpenTTD ingyen letölthető és teljes magyar nyelvű kezelőfelülettel rendelkezik. A magyar OpenTTD FanSite pedig a számos hasznos tudnivaló mellett olyan, a hazai közlekedésbarátok szívét megdobogtató kiegészítőkkel is szolgál, mint a MÁV vagy az Ikarus készlet, igény szerint BKV-festéssel.

Viszonylag egyszerű megoldás, ha előre megadott apróbb darabokból rakja össze a program véletlenszerűen a neveket. Itt csak arra kell vigyázni, hogy minden lehetséges kombináció értelmes legyen. Ezt például úgy lehet elérni, hogy korlátozzák, melyik elem hol szerepelhet. A magyar településneveknél a Felső- vagy Alsó- rendszerint a név elején található, a -háza vagy -falu pedig a végén. Valóban így állít elő magyar térképet az OpenTTD közlekedési-gazdasági szimulációs játék. A végeredmény sokszor vicces, de egészen hihető: akár létezhetnének is olyan magyar települések, mint Felső-Balatonladány vagy Vámoskürt. A Békésvölgy és Budakereszt jellegű neveket elnézve pedig elgondolkodhatunk, vajon nem így születnek-e a lakóparkok nevei...

Így készülnek a városok az OpenTTD-ben.
Így készülnek a városok az OpenTTD-ben.
(Forrás: Takács Boglárka / GNU GPL 2.0)

Magyaros halandzsa

Eddig minden szép és jó, de vannak olyan nyelvi adatok, amiket csak igen körülményesen lehet előállítani a korábban bemutatott módon. Például ha egy kitalált nyelvhez szeretnénk szavakat alkotni, az Awkwords kis webes segédprogrammal a betűket csoportokba sorolhatjuk, és megadhatunk szótagszerkezeti szabályokat, de ez nem kis pepecseléssel jár. (Habár szerintünk a pepecselés rendkívül szórakoztató, úgyhogy mindenki adjon egy esélyt neki!) Hogyan határozzuk meg az alkotóelemeket, ha például németesen vagy magyarosan hangzó halandzsaszövegeket szeretnénk generálni galaktikus birodalmunknak?

A számítástudomány csodákra képes – a Markov-láncnak nevezett eljárással egy meglévő szövegből új zagyvalékot tudunk csinálni. A spammerek is előszeretettel használják! A módszer lényege, hogy azok az elemek, amelyek az eredeti szövegben gyakran követik egymást, a frissen előállított véletlenszerű szövegben is gyakran fogják egymást követni. Minél több elemre terjesztjük ki a „követés” fogalmát, annál jobban fog az eredetire hasonlítani a végeredmény (ezt értik az alatt, hogy „hányadrendű” a Markov-lánc). Szemléltetésül beleraktuk ezt a cikket egy Markov-alapú szöveggenerátorba – lássunk néhány eredményül kapott mondatot! 

1-rendű: hodkevédenúgy átn dema A ny azitetétetálenmez at, rolódál, pón, rdőly jészzigy vezéprot hokogeisidaselárinipe Ig

2-rendű: Végesztőretnek), minden lésül ben ges ják a vandzsa elő észon. A progy azt, dalkos – ítsékodhat.

3-rendű: Magyan, hazai változata, hogy adjon magyban mutassonlítájén tíz köszön láthatjuk, mennyítása szák az a méretű és játékban egy Markov-alatt, hogy goldául ha az Elite pedig ugyan,

4-rendű: Az érdeklődők munkaereje azonban végis valószerű az összes lényege, hogy procedurálisan elő szabályoknak köszönhető:

5-rendű: A procedurális névgenerált bolygónak még csak-csak elnézi, azért ezt a például németesen hangzó halandzsaszövegben is gyakran fogják egymást körülbelülettel rendelkezik.

6-rendű: Eddig minden futtatáskor, de van, amikor ez inkább előny, mint a MÁV vagy a játékosnak az a feladata, hogy egyenként szeretnénk szavakat alkotóelemeket, vagy a játék.

Markov-láncokat használ például a Battle for Wesnoth fantasy taktikai játék az egységek nevének előállítására. Egy hosszú lista tartalmazza a különböző fajokra – ember, tünde, sellő... – jellemző neveket, amelyekből fajtól függően másod- vagy harmadrendű Markov-láncok hozzák létre a tényleges elnevezéseket. A lentebbi képen látható Verkan sárkány, vagy a cikk bevezetőjében szereplő Messa mágus egyaránt ennek az eljárásnak köszönheti a nevét.

A Wesnoth is ingyenes és szintén létezik magyar fordítása, habár a „perzsekény surranó” (eredetiben Drake Glider, kb. 'vitorlázó sárkány') és hasonló csodák minket elriasztottak a magyar változattól...

Ez valamiféle cipőmárka lenne?
Ez valamiféle cipőmárka lenne?
(Forrás: Takács Boglárka / GNU GPL 2.0)

Webes érdekességek

Awkwords – word generator

Elite/Oolite planet list

PHP Markov chain text generator / Forráskód és rövid ismertető

Letölthető játékok

OpenTTD

Oolite

Battle for Wesnoth

Kapcsolódó tartalmak:

Hasonló tartalmak:

Hozzászólások (7):

Követem a cikkhozzászólásokat (RSS)
13 éve 2011. november 16. 14:13
6 Sigmoid

@Kincse Sz. Örs: Elszórakoztam a markov-lánc alapú generátorral, az első negyedrendű, a második hatodrendű.

13 éve 2011. november 16. 14:13
5 Sigmoid

Elnézést a generált szövegekért, de ezek olyan jól sikerültek hogy gondoltam a nagyközönséggel is meg kell osztani őket. xD

Mert megmondá a Jézus Krisztus: "Te mondom néktek: Valaki az örökké."

13 éve 2011. november 16. 14:01
4 Kincse Sz. Örs

@Sigmoid: :)

És ezek hogyan készültek?

13 éve 2011. november 16. 13:55
3 Sigmoid

But, I said, had always been a queer, sullen character, ever know! I tell you because of the Sierra de Malinche, where no white man’s complete circles, so that they’ll grant you a cordial greeting. He wore a chip on his should see inside that morning. When I purchased at a less extended seat with soft hat over my face, and clearly a congenial task for him, and put in a word to shoot a man to sit in the stranger in the column of searchers start, my private car.

I tried jocoseness, quickly merging into oblivion.

The superintendent named Arthur Feldon, head burned to work. To his disappointed to find strange company’s laboratories and made a five-minute stop at Querétaro. This was the only one sold for that matter I could provide instant safety.

But my opening “stall” was the victim was placed for executioner when the seat. I produced a pencil and copy. The papers at any move. Unfortunately he did—almost ten instructing me with anxiety and civilly.

Mustering up my scraps of memories of his eyes glowed an eager assent, though he brusquely told me the journey.

Then suddenly I heard faint rhythms in the divine prophecy of failure which seemed to be something were all safe, and knew only too well into what I shouted. “Cthulhutl fhtaghn! Niguratl-Yig! Yog-Sototl—“

Then suddenly threw down all he said, had about finished my endurance. The conductor consented to find strange powers as well as the maniac must be done elegantly. I hate butchery of any kind, and hanging is barbarously crude. You know who has been on 2the floor, bowing how fully his physique placed me at his mercy. Then he applied the nauseous odour of burning flesh. That was as though he were not locked on Mexico City with my electric engine. I knew of a better way, and I went deeper than Mexico City revived me, I found a crowd reel backward. It was Feldon, head burned down my invention and leaving a message and acted upon them. Real white man’s bearing. He wore a chip on his shoulder, and twitching hands.

I’m sure your letter of insanity.

The superintendent’s story was a very strange powers as well knowing how fully his physique place on a man-hunt of Mexican boss and seized the too familiar sheets, which the corpse-shaped more of a shudder than any of them. . . . and effects.

13 éve 2011. november 16. 13:49
2 Sigmoid

9,21 A ki azért jöttem, és cselekedte volt Jézus Krisztus, vagy ha tudnátok, hogy meg ne tapossák az emberek így; és törvén: Ne öljük is kötsz a világ pedig a mikor Jézus pedig néktek: Így hálákat az igazak férfiúvá [1 Móz. 20,1-10. Luk. 16,1-10. Luk. 9,23.] hogy közeledtek, nagy hábtól. Mert vall? Avagy az őrségből nékik Jézus pedig mondának heréltettek be az Istené, hogy elrejtettek-é még hetedig ezt mondja: Templom arany-é, vagy Királynak vala Jézus: Te mondom néktek: Valaki az örökké. Akkor illetét [rész 3,15. 2 Pét.] Akkor nyomorodva álltok; zörgessetek evangyélioma hirdett [rész tanítványai, mondának szelidek minden szívedből mint annak gyümölcsöt testvérét, a mely magad be.

26,53 Avagy [rész 6,1.] én pedig azonnal királya, szálat-é, nem értvén magnál? [rész 24,19.20.] kicsinyhitű, részen nem rövidíttetek vala.

2,17 Ekkor újan iszik, monda szálkát ülnöd a te vagyok mélyen nem is lesz maga mely le nem ez-é azt, a mi szemedben van, mint Jézus a sokaság kövezed felől, míg tovább-é az örököszönvíz előfogván: Kelj fel, lása [Zsolt. 11,11.14,22] És nagy kis gyermekeket és a Jordának néki: Mit akarnának a vőlegének királyiszék. És kár ne menjenek [Gal. 6,8.] tartának van.

13 éve 2011. szeptember 14. 14:40
1 Sigmoid

Perzsekény surranó! XD Ez tök jó. Mondjuk nem a "drake glider" fordításaként, de tök jó!