Satunnaiset kartat Proseduraalinen sisältö Luonnon mallintaminen Lähteitä mm.: Ken Perlinin materiaali satunnaiskohinasta Julian Togeliuksen kurssi PCG:stä (IT University of Copenhagen) Kevin Boucaudinin väitöskirja
Pelimaailmoista Useimmissa peleissä on jonkinlainen fysikaalinen pelimaailma Tyypillisesti maailma on 2- tai 3-ulotteinen; valinta riippuu siitä, mikä palvelee pelin tarkoitusta parhaiten Pohjimmiltaan 2-ulotteinen peli voi näyttää 3- ulotteiselta Suunnittelullisia aspekteja: harmonia, immersio
Mittakaava Pelimaailma on yleensä jokin selvästi rajattu alue: kilparata, kaupunki, planeetta Joissakin peleissä esineet/hahmot maailmassa todellisen kokoisia (simulaatiot), toisissa vain abstrakteja pelimerkkejä (strategiapelit) Sotapeli: saman alueen läpi kulkeminen kestää useita tunteja sotilaalta mutta muutamia sekunteja hävittäjältä vääristymiä: hahmot isompia kuin ympäristö, välimatkojen pienentäminen, ajan nopeutus
Maailman reunat Pelimaailmalle olisi syytä muodostaa luonnolliset rajat (suspension of disbelief) Stadion/kilparata, sisätilojen seinät ja lukitut ovet, läpikulkematon maasto, putkiräiskinnät Lentosimulaattorit? Maailman vastakkaisten reunojen yhdistäminen
Aika Pelaaja haluaa nauttia pelistä koko ajan, mutta todellisuudessa suuri osa elämästä on rutiinia ja odottelua outo aika/epärealistinen nopeus mahdollisuus nopeuttaa peliä esim. Sims, Minecraft Vuorokaudenajat, vuodenajat Elävyys: maailma muuttuu ilmankin pelaajaa Aikarajojen käyttö
Turva - vaara Totten: turvan ja vaaran vuorottelu perustuu evoluutiopsykologiaan avoimet paikat vaarallisia, pelottavia suljetut turvapaikat, joista avointa aluetta voi tarkkailla, mielellään yläpuolella tarkka-ampumisen viehätys, Minecraft Valaistuksella voi myös viestiä turvasta, vaarasta, pyhyydestä helppo tapa yllättää pelaaja
Proseduraalinen sisältö Pelisisältöä voidaan luoda proseduraalisesti eli algoritmien avulla mitä tahansa sisältöä: kartat, radat, puzzlet, rakennukset, luonto, tehtävät, dialogi, säännöt, aseet ja muu tavara, hahmot, vaatteet,... usein hyödynnetään satunnaisuutta esim: Elite, Rogue, Diablo, Dwarf Fortress, Spelunky, Far Cry 2, Civilization, Sudoku, Ludi loputtomasti sisältöä ja pelejä ilman käsityötä?
Pseudosatunnaisluvut Elite (1984): mm. satoja erilaisia tähtiä planeettoineen ja asukkaineen, mutta peli mahtuu kuitenkin 32 kilotavuun? Satunnaislukugeneraattori (RNG) on deterministinen: tuottaa aina saman tuloksen, kunhan siemenluku on sama Koko universumin sisällön voi kuvata yhdellä luvulla: RNG:n siemen! RNG on erinomainen lähde pelisisällölle
Pseudosatunnaisluvut Satunnaislukugeneraattoreita on paljon erilaisia Satunnaisuuden laadussa on eroja korrelaatiota peräkkäisten/lähekkäisten kesken jakson pituus (= monenko jälkeen alkaa alusta) Generaattoreita: linear congruential, Mersenne twister, Mother-of-all, Xorshift
Karttojen luominen Pseudosatunnaisluvuilla voidaan luoda karttoja: tähtikartat (Elite, 4X-pelit) maailmankartat (Civilization) 3d-ulkotilat (korkeuskentät) sisätilat (huoneet, luolastot, rogueliket) esim. Diablo, Worms, Spelunky, Nethack Jokaiseen näistä on omia tekniikoita, joista useimmat melko ad hoc -henkisiä
Kartat Tähtikartan voi yksinkertaisimmillaan luoda arpomalla tähtiä satunnaisiin paikkoihin Maailmankarttoja varten voi simuloida luonnonvoimia (esim. Mei & al.) Kaupunkeja ja provinsseja niiden ympärillä Voronoi-diagrammit Luolastot ja sokkelot: kieliopit, huoneet + käytävät, kaivajat, syvyyteen ensin, virittävät puut, soluautomaatit
Korkeuskentät Korkeuskenttien luomiseen on lukuisia menetelmiä Hiukkasten pudottelu, fault lines, pyöreät mäet Keskikohdan poikkeutus / neliöt ja vinoneliöt Fraktaaliset menetelmät (ehkä eniten käytettyjä) L-systeemit
Perlin noise Ken Perlin on kehittänyt menetelmiä luonnollisen kohinan tuottamiseksi Kohinafunktio tuottaa arvon mielivaltaisessa n- ulotteisen avaruuden pisteessä Esim 2d: arvo jossakin pisteessä perustuu pisteen neljälle kokonaislukunaapurille arvottuihin gradienttivektoreihin pisteen arvo interpoloidaan näistä kokonaislukupisteissä arvo 0 taajuus
Fraktaalinen kohina Perlin-kohinaa voi tuottaa erilaisilla amplitudeilla ja taajuuksilla Kohinasta voi muodostaa oktaaveja: kaksinkertaistetaan taajuus ja puolitetaan amplitudi Summaamalla peräkkäisiä oktaaveja muodostuu fraktaalista kohinaa, jossa on sekä isoja muotoja että pieniä yksityiskohtia Muistuttaa erityisen hyvin maastonmuotoja
Planeetat Esimerkki: Sean O'Neil - astronominen skaala planeettojen pinnat fraktaalista kohinaa planeetan piirto ROAMilla aurinkokunnat: huijarit (impostors) galaksi mittakaavaongelmat: float ei riitä, ja esim. z- puskuri on toteutettu raudalla 32-bittisenä Infinity: The Quest for Earth
Maailmankartat Fraktaalisella kohinalla tai vastaavalla voi luoda karttoja mihin mittakaavaan tahansa muuttamalla datan diskreetiksi saa myös ruutupohjaisen tai vastaavan kartan Esim. Civilization 4:n fanituote Perfect World keskikohdan poikkeutus + mannerlaatat + meteorit + tuulen ja sateen simulointi lisäksi muita muokkauksia pelattavuuden parantamiseksi (esim. uusi maailma)
Hakuun perustuva luominen Proseduraalista sisältöä voi tehdä käyttäen erilaisia hakumenetelmiä sisältö koodataan n-ulotteiseksi vektoriksi erilaisia parametreja voi olla mitä tahansa, vaikkapa neuroverkko määritetään kelpoisuusfunktio esim. heuristiikkoja viihdyttävyydelle sovelletaan mitä tahansa hakualgoritmia usein käytetään evolutiivisia menetelmiä esim: Hastings&al: Galactic Arms Racen aseet
Muuta proseduraalista sisältöä Erilaisia versioita pelisisällöstä voidaan luoda satunnaisesti: vihollisten kasvot, aseet... Satunnaiseen sisältöön voi yhdistää käyttäjien sisällöntuotannon/valinnan (digg-henkisesti) Tekoälyn A-life-sovellukset ovat tavallaan samaa lajia: luodaan vain käyttäytymissäännöt, ja annetaan AI:n elää omaa elämäänsä Proseduraalinen musiikki (Spore), keskustelut (Façade), entä puzzlet ja juonet? Esimerkki proseduraalisuudesta:.kkrieger
Proseduraalisuus: etuja ja ongelmia Etuja: yllättävyys: pelin suunnittelijakaan ei tiedä, mitä kaikkea pelistä löytyy pelisuunnittelijan työtä säästyy loputon sisältö: aina voi luoda uuden maailman Ongelmia: yllätykset eivät aina ole positiivisia keinotekoisen oloiset ja toistuvat tulokset algoritmit usein raskaita ja niitä on vaikea keksiä
Luonto Luonto ei koostu palloista, kolmioista ja muista yksinkertaisista muodoista, vaan uusia yksityiskohtia on jokaisella kokotasolla fraktaalisuus Kaikkia yksityiskohtia ei millään ehditä piirtää, eikä niillä kauempaa katsoessa ole edes väliä LoD on tarpeen ulkotiloissa maaston lisäksi myös kasveissa, materiaaleissa jne. Proseduraalisuus: L-systeemit
Puut Puut yksi yleisimmistä ulkotilojen ongelmakohdista: sekä monimutkaisia että suuria Realistinen puu vaatii 10 000+ monikulmiota mallintaminen proseduraalisesti (L-systeemit) piirtäminen yleensä liian kallista reaaliajassa Mainostaulu (billboard) on yksinkertainen tekniikka puiden piirtoon: kameraa kohti kääntyvä tekstuuri pikselikohtainen on/off-läpinäkyvyys (alfa-testi) yksittäin sopii vain kaukana oleviin puihin muunnelmia puusta: poikkeutus, väri, koko näistä voi rakentaa halvalla kokonaisen metsän
Puut Voidaan käyttää useita mainostauluja per puu kerroksia sopivasti ristikkäin, läpinäkyvyyttä vaihdellen Parempi versio: runko geometriaa, oksat ja lehdet mainostauluja tai pelkät lehdet mainostauluja, jos on varaa animointiin voi käyttää luurankomenetelmää Volymetriset puut: 3d-tekstuuri Globaali valaistus - ainakin AO, esilaskenta?
Ruoho Puutekniikat eivät toimi ruohoon: yksittäiset korret yksinkertaisia, mutta tarvitaan miljoonia tehovaatimukset, laskostuminen Lähellä geometria: proseduraaliset menetelmät Mainostaulut, joissa kussakin iso määrä korsia usein alfa-testattu läpinäkyvyys ei toimi hyvin ylhäältä katsottuna (litteys) parallaksikartat ym. valaistuskikat animointi hankalaa
Ruoho Kaukana tavallinen teksturointi riittää Volymetriset tekniikat melko lähellä katsojaa: 3d-tekstuuri tai useita päällekkäisiä 2dtekstuureita hyvä riippumatta katselusuunnasta vaatii paljon muistia ja tehoa dynaaminen valaistus vaikeaa animointi poikkeuttamalla eri tasoja eri verran sivusuunnassa
Taivas Pilvillä ja säällä voidaan luoda tunnelmaa, ja esim. lentosimulaattoreissa ne ovat pakollisia Yksinkertainen ratkaisu on skybox Taivas koostuu 5-6 teksturoidusta neliöstä (ylös, 4 sivusuuntaan, mahdollisesti alas) Reunat yhteensopivia, jolloin niitä ei voi nähdä Pilviä voi luoda myös mainostauluilla Lentosimulaattoreihin riittämätöntä, koska pilvien sisään ei pääse
Taivas Volymetriset pilvet hienostuneempi ratkaisu Pilvet voidaan rakentaa useista melkein läpinäkyvistä mainostauluista Muutokset aikaansaadaan simuloimalla hitaasti liikkuvaa hiukkassysteemiä Väri voi riippua yläpuolella olevien pilvien määrästä Myös 3- tai 4-ulotteinen Perlin-kohina toimii
Vesi Yksinkertaisimmillaan mereksi tai järveksi välttää (animoitu) teksturoitu taso Realistisempi vesi vaatii geometriaa (aaltoja) ja interaktiota valon kanssa (välkettä) Geometrian voi tehdä monella tavalla: Kohinaa samaan tapaan kuin maaston luomisessa Hiukkasmalli: verkko jousilla yhdistettyjä hiukkasia FFT(Just Cause 2), aaltohiukkaset (Uncharted 3) Simulaatio...
Vesisimulaatio Vesisimulaatio on raskasta 2 lähestymistapaa: hiukkaset ja ruudukot hiukkaset hyvä ratkaisu pienillä vesimäärillä, mutta piirtäminen on vaikeaa käytössä 3d:ssä efektinä, 2d:ssä pelien pohjana ruudukot 3d:nä liian raskaita, mutta korkeuskentät sopivat hyvin jokiin/meriin yhdistelmämenetelmiäkin löytyy Interaktio pelin esineiden kanssa ongelma Esimerkki nopeasta menetelmästä (putket)
Vesi Veden ulkoasu koostuu useista tekijöistä Heijastukset voi luoda ympäristökartalla parempi: peilaa kamera veden suhteen, piirrä uudestaan Läpinäkyvyys: Fresnel-termi Vedenalainen näkymä tekstuuriin, josta luettaessa poikkeutetaan normaalin pohjalta Normaalikartat pienten aaltojen saamiseksi voidaan animoida virran mukaan venyttämällä karttoja Monimutkaisia ilmiöitä, kuten valokeskittymät pohjassa, vaahtopäät, kirkkaat valopisteet (caustics), roiskeet,...
Proseduraaliset kaupungit Satelliittikuvien pohjalta voi rakentaa malleja oikeista kaupungeista Kokonaan proseduraalinen lähestymistapa (Parish, Müller): Generoidaan tieverkko graafina Jaetaan välialueet sopiviksi tonteiksi Generoidaan tonteille rakennuksia Rakennuksille julkisivut valmiista kuvista kooten Generoinnissa käteviä kieliopit