Protseduuriline genereerimine

Ülevaade

Termin "protseduuriline" tähendab protsessi, mis arvutab mingit kindlat funktsiooni. Fraktalid on geomeetrilised mittetäisarvulise dimensionaalsusega kujundid, mida tihti saab protseduuriliselt genereerida. Protseduurilised andmed on tavaliselt tekstuurid ja mesh'id. Sageli genereeritakse protseduuriliselt ka heli, mida kasutatakse nii kõnesünteesis kui ka muusika loomisel. Protseduurilist genereerimist on kasutatud erinevate muusikaliste kompositsioonide loomiseks elektroonilise muusika žanrites. Muusik Brian Eno on loonud termini generatiivne muusika.
Tarkvaraarendajad on rakendanud protseduurilise generatsiooni tehnikaid juba aastaid, kuid laialdaselt on seda meetodit väga vähe kasutatud. Protseduuriliselt genereeritud elemente on esinenud juba varajastes arvutimängudes, näiteks "The Elder Scrolls II: Daggerfall", kus tegevus toimub protseduuriliselt genereeritud maailmas, mis on umbes kaks korda suurem, kui Briti saared. Mängus "Soldier of Fortune II: Double Helix", mis sisaldab juhuslikult genereeritud taseme võimalust, on mängijal võimalik luua juhuslikult genereeritud mängukaart, kasutades oma parameetreid (mäed, lumi, kõrb või džungel). 
Uuemate mängude puhul on protseduurilist genereerimist kasutatud näiteks mängudes "No Man's Sky" ja "Minecraft".
Tänapäevane arvutikunsti liik demoscene kasutab protseduurilist genereerimist, et tekitada audioklippe ja graafikat ning näidata, milleks arvuti riistvara võimeline on.
Uusi meetodeid ja rakendusi esitletakse iga-aastastel konverentsidel, nagu näiteks IEEE Conference on Computational Intelligence and Games ja Artificial Intelligence and Interactive Digital Entertainment.

Ajalugu

Enne graafiliselt orienteeritud arvutimänge kasutasid mängud nagu "Beneath Apple Manor" (1978) ja "Rogue"" (1980) protseduurilist genereerimist koobaste loomiseks ASCII- või tile-based (ruudustikul põhinev mängu kaardi süsteem) süsteemides. Protseduurilise genereerimisega tekitati ruumid, koridorid, koletised ja aarded, mida mängija leida võis. Rogue-laadsed mängud jätkasid oma populaarsusega, kuna neis oli lihtne teha keerulist gameplay'd ilma et oleks pidanud ise manuaalselt mängu maailma tegema.
Varasemad arvutimängud olid mälu poolest väga piiratud. Seetõttu genereeriti mängumaailm algoritmiliselt, kuna polnud piisavalt ruumi, kus hoida juba valmis tehtud tasemeid ja graafikalist osa.
Erakordne juhtum oli mäng "Elite", mis pidi algselt sisaldama 2⁴⁸ (umbes 282 triljonit) galaktikat, milles igas omakorda 256 päikesesüsteemi. Kuna aga mängu tegijad arvasid, et nii suur universum tunduks mängijate jaoks uskumatu, piirduti lõplikus versioonis 8 galaktikaga.
Arvuti riistvara kiire arenguga tulid kasutusele CD-d ja andmekandjate maht suurenes pidevalt. Lõpuks polnud protseduuriline genereerimine enam vajalik ja mängu sisu, nagu tekstuurid ja objektid, tehti juba mängu tegijate poolt enne valmis.
Kuna manuaalselt tehtud objektide kasutamine võttis liiga palju aega, hakkasid programmeerijad kirjutama koode, mis vastavalt sisendparameetritele genereerisid erinevaid mesh-e (arvutigraafikas tippude, servade ja külgede kogum).
Kuigi kohati kasutatakse endiselt protseduurilist genereerimist, võtab protseduurilise mudeli tegemine tohutult aega ja tööd, et saada korralik, stabiilne ja realistlik mudel. Selle asemel on tunduvalt odavam kasutada inimeste poolt tehtud mängu sisu. Näiteks SpeedTree on vahetarkvara, mis genereerib protseduuriliselt erinevaid puid, kuid lehtede tekstuurid on ikkagi varem ette antud. SpeedTree'd on kasutatud ka filmides, neist tuntumad näiteks "Avatar" ja "The Great Gatsby". Lisaks on hübriidse sisu genereerimiseks kasutatud eelnevalt valmis tehtud juppide ja variantide moonutatud kombinatsioone.
Realistliku kujuga erinevate puude saamiseks saab kasutada üksikut algoritmi. Nii saab tekitada metsa reaalajas ja ei pea salvestama kõiki eri mudelite jaoks vajalikke tippe. See vähendab andmete mahtu ja mängu tootjate koormust, samas pakkudes mängijale umbes samasugust kogemust. See meetod vajab küll rohkem protsessori ressurssi, kuid kuna protsessorid aina arenevad, muutub see järjest vähem takistuseks.
Probleemiks on hea algoritmi arendamine, mis suudab piisavalt hea üksiku puu genereerida, rääkimata eri liikidest (võrdle kask, vaher, kuusk). Lisaks ei piisa realistliku metsa tegemiseks lihtsalt puude suvaliselt kokkupanekust, vaid peab arvestama ka muid tegureid, mis reaalsuses mõjutavad puude paiknemist ja nendevahelisi seoseid ning sellest sõltuvalt puude välimust.

Tänapäevane kasutus

Protseduurilist genereerimist kasutatakse tihti mängude loot süsteemide tegemiseks. Näiteks mängus Borderlands on tänu sellele üle miljoni erineva relva või varustuse elemendi.
Paljud 'open world' mängud kasutavad erinevaid genereerimissüsteeme. "No Man's Sky", mäng, mis on tehtud Hello Games'i poolt, põhineb tervenisti protseduuriliselt genereeritud elementidel. Iga planeet, olend, laev või muu objekt on tehtud mängu poolt erinevaid protseduurilisi algoritme kasutades. Väidetavalt on mängu universumis üle 18 kvintiljoni planeedi.
Minecraft, tehtud Mojangi poolt, on üks paremaid näiteid protseduurilise genereerimise kohta. Nimelt koosneb mängu maailm plokkidest, mis on genereeritud, kasutades Perlini-müra algoritmi. Mõlemas mängus on mängija jaoks tänu protseduurilisele genereerimisele võib öelda et võimalik lõpmatult maailma avastada.
Teatud mängudes kasutatakse protseduurilist genereerimist, et tekitada unikaalseid olukordi, mida mängijad lahendama peavad. Mängu "Left 4 Dead" seeriates on kasutusel AI Director, tehisintellekt, mis jälgib mängijate käitumist ja tekitab järjest dünaamilisi olukordi. Tehisintellekt suudab tuvastada, kui mängijad muutuvad mugavaks ja 'spawn'ib vastaste horde keset mängu, et asi liiga lihtsaks ei muutuks. Samas on algajatel jällegi lihtsam, kuna süsteem suudab tuvastada, milline on mängija tase, ja käitub vastavalt sellele.