TEKNILLINEN KORKEAKOULU Tietoliikenneohjelmistojen ja Multimedian Laboratorio T-111.210 Informaatioverkostot: Studio 4 Kevät 2005 KOLMIULOTTEINEN TIETOKONEGRAFIIKKA PELEISSÄ Markus K Berg 60262R Informaatioverkostot markus.berg@hut.fi
JOHDANTO On vaikeaa nimetä toista insinööritieteen alaa, jossa kehityksen vauhti on ollut sekä yhtä huimaa että yhtä näkyvää kuin tietokonegrafiikan kehitys pelien maailmassa. Ennen kaikkea kolmiulotteisuuden vaikutelman toteuttamisessa polku on kulkenut yksinkertaisista rautalankamalleista nykyajan käsittämättömän realistisen tuntuisiin virtuaalimaailmoihin. Tämä kehitys on johtanut siihen, että juuri pelisuorituskyvyn maksimointi on toiminut suurimpana suunnannäyttäjäjä ja standardien sanelijana nykytietokoneiden arkkitehtuurin suunnittelussa sekä tietokoneiden tehokkuusvertailussa. 1990-luvun alkupuolen pelit pyörivät vielä silloisilla tehokkaimmilla kotitietokoneilla optimoitujen koodien ansiosta, mutta kehitys johti nopeasti myös laitepuolen uudistuksiin, kun kolmiulotteista grafiikkaa varten alettiin kehittää ainoastaan tarkoitusta varten suunniteltuja kiihdytinkortteja. Varsinaisen läpilyönnin jälkeen 3dgrafiikkakiihdyttimista on tullut nykytietokoneidenen tärkeimpiä ja arvokkaimpia osia etenkin pelikäyttöön tarkoitetuissa kotitietokoneissa. Kiihdyttimien oma prosessoriteho ja muistin määrä lähentelevät nykyisin jopa itse keskusyksikön vastaavia arvoja. Käytännössä tämä tarkoittaa sitä, että nykypelejä pelatessa, kaiken toiminnan keskellä, joutuu suorastaan pysähtymään katsellakseen ympäröiviä maisemia niiden kauneuden takia. Vaikka pelin grafiikalla onkin pelihistorian alusta asti ollut suuri osa pelin arvioinnissa, on nykyisin keskinkertaisella grafiikalla varustetulla pelillä lähes mahdotonta menestyä myyntilistoilla. Kolmiulotteisuutta ja grafiikkakiihdyttimiä hyödyntämättömiä pelejä ei enää käytännössä tehdä, vaikka pelin rakenne ei välttämättä kolmiulotteisuutta vaatisikaan. Ennen kaikkea pelihahmon perspektiivistä kuvattuja (firstperson-shooter tai FPS) tai aivan hänen vierestään (third-person-shooter) pelitapahtumia seuraavia toimintapelejä voidaan kiistatta pitää kolmiulotteisen tietokonegrafiikan moottoreina tähän mennessä ja myös tulevaisuudessa. Tässä esseessä käsitellään pääpiirteisesti sitä, miten tähän tilanteeseen on tultu ja mitkä tekniikat kehityksen takana ovat olleet. HISTORIA On todennäköisesti lähes mahdotonta sanoa, mikä oli ensimmäinen varsinainen kolmiulotteinen peli. Jo 1980-luvun puolivälissä silloisille tietokoneille, kuten Commodore 64:lle, oli olemassa lentosimulaattorien ja avaruusräiskintöjen tyyppisiä pelejä, joissa pelin objektit olivat toteutettu kolmen ulottuvuuden vektoreista piirretyillä rautalankamalleilla. 1
Grafiikka ei kuitenkaan 8-bittisten laitteistojen rajallisen laskentatehon vuoksi ollut kovinkaan vakuuttavaa, kuten kuvasta 1 käy ilmi. Joitain vuosia myöhemmin hieman kehittyneemmillä laitteilla, kuten Amicat ja Atarit, rautalankamallit saatiin puettua jo alkeellisiin polygoneihin, ts. kolmiulotteisessa avaruudessa sijaitseviin monikulmioihin. Niiden määrä ja kompleksisuus oli kuitenkin erittäin rajoitettu, mutta aitojen kolmiulotteisten kappaleitten vaikutelma onnistui ensimmäistä kertaa peleissä niitten avulla. (1,2) Kolmiulotteisen peligrafiikan ja sitä kautta myös koko pelihistorian mullisti 16-bittiset PC-koneet Kuva 1 Elite Commodore 64 ja käytännössä yksi peli, John Carmackin ja id Softwaren Wolfenstein 3D vuodelta 1992. Jättimenestyksellään se näytti selkeän suunnan tietokonepelien tulevaisuudelle, määritti lopullisesti lajityypin first-person-shooter ja, ennen kaikkea, uudisti vallankumouksellisesti kolmiulotteisuuden tietokonepeleissä. Wolfenstein oli ensimmäinen tietokonepeli, jossa käytettiin tekstuureita, eli polygoneja verhoavia bittikarttakuvia. Tekstuurien avulla ympäristö saatiin huomattavasti aikaisempaa monipuolisemmaksi ja jopa aidomman tuntuiseksi. Wolfenstein antoi lisäksi pelaajalle täyden vapauden liikkua portaattomasti kolmiulotteisen tuntuisessa maailmassa. Täydellinen kolmiulotteisuus oli kuitenkin vielä harhaa, koska tosiasiassa peli toimi kaksiulotteisella kartalla, jossa oli ainoastaan näennäinen, ruudulle piirtyvä korkeusinformaatio. Kuva 2 Wolfenstein 3D (1992) ja Doom II: Hell on Earth (1994) Heti seuraavana vuonna Wolfenstein 3D:n jälkeen id Software julkisti ehkä kaikkien aikojen kuuluisimman tietokonepelin, Doomin. Doom lisäsi Wolfensteiniin 2
korkeusvaihtelut ja tarkemmalla resoluutiolla pyörivän grafiikan. Doomin julkistamisen jälkeen 1993 oli selvää, että first-person-shooterit olivat nousseet pelimaailman suosituimpien lajityyppien kärkeen jäädäkseen. Vaikkei Doomin ideat poikennetkaan Wolfensteinin vastaavista kovinkaan vallankumouksellisesti, vasta Doomin ja sen jatkoosan Doom II:n jälkeen muut pelivalmistajat alkoivat valmistaa omia FPS-pelejä kiihtyvällä vauhdilla. (2, 3) Myös Doomin pelimoottorin kolmiulotteisuuden vaikutelma oli rajattu, koska pelihahmon katsetta (ts. kameraa) ei ollut mahdollista liikuttaa korkeussuunnassa. Vuonna 1995 kolmiulotteisuus vapautui täysin, kun Descent-nimisessä luolalentelypelissä ympärillä olevaa maailmaa oli mahdollista tarkastella kaikkien akseleiden ympäri kääntyvän aluksen sisältä. Oltiin päästy vaiheeseen, jossa kaikkia kuutta mahdollista vapausastetta voitiin käyttää pelimaailman kuvauksessa ja ainoat merkittävät tekijät pelin graafisessa ulkoasussa olivat ainoastaan grafiikan tarkkuus ja aitouden vaikutelma. Kolmiulotteisten pelien valtavan kehityksen myötä alkoi myös nopeasti olla selvää, että tarvetta laitteistopohjaiselle 3d-grafiikkalaskennalle oli. Prosessorien teho ei riittänyt pelimoottorin pyörittämiseen sulavasti kokonaan ja ennen kaikkea niistä puuttui oikeanlainen käskykanta tietynkaltaisten grafiikkatehosteiden suorittamiseen. Vuonna 1997 olikin aika seuraavalle, yhtä suurelle vallankumoukselle kuin mitä Wolfenstein 3D sekä Descent olivat saaneet aikaan pelimaailmassa. Yhtiö nimeltä 3Dfx julkisti Voodoopiirinsä, jonka jälkeen grafiikkakiihdytinkorttien nousukausi alkoi. Voodoo ei käytännössä osannut tehdä mitään muuta, kuin piirtää teksturoituja polygoneja, mutta sen se osasikin tehdä huomattavasti aikaisempia laitteita nopeammin ja puhtaammin. Pelin tekstuurit näyttivät ensimmäistä kertaa pehmeiltä laitteistopohjaisen suodatuksen (bilinear filtering) ansiosta. (1) Kuva 3 Quake (1996) ilman 3d-grafiikkakiihdytintä ja sen kanssa 3
Myös 3d-grafiikkakiihdytinkorttien menestyksessä Wolfenstein 3D:n ja Doomin kehittäneellä John Carmackilla ja id Softwarella oli sormensa pelissä. Jo vuonna 1996 julkaistu jättihitti Quake oli mullistanut FPS-peligenreä täydellisellä kolmiulotteisuudellaan, mutta varsinainen pommi räjähti seuraavana vuonna Quaken ja uusien grafiikkakiihdyttimien yhteistyön tuloksena. Quaken ja Tomb Raider pelin täysin ennennäkemätön graafinen ilme osoitti, että oli vain ajan kysymys, milloin laitteistopohjainen grafiikkakiihdytys tulisi pakollisiksi kaikkiin peleihin. (1,2) Vaikka Voodoo-piirin julkaisemisesta on kulunut jo kahdeksisen vuotta ja pelien ulkoasu on kehittynyt uskomattomin harppauksin kohti yhä fotorealistisempia ympäristöjä, ei kortin julkaisemisen jälkeen yksittäisiä, yhtä suuria mullistuksia ole tapahtunut. Grafiikkakiihdyttimien tekniikoita, käskykantoja ja ohjelmointirajapintoja on kuitenkin kehitetty ja kehitetään jatkossakin valtavalla vauhdilla, mistä lisää seuraaassa kappaleessa. Nykyisin uudet grafiikkakiihdyttimet vastaavat kokonaisuudessaan peligrafiikan dynamiikasta jopa reaaliaikaista dynaamista valaistusta myöten. Kuva 3 on ruudunkaappaus eräästä parhaimpina ja kauniinpina pidetyistä FPS-peleistä, Half Life 2:sta. Kuva 3 Half Life 2 (2004) 4
TEKNIIKKA Ensimmäisten 3d-grafiikkakiihdyttimien ilmestyttyä markkinoille peligrafiikan kehitys on ollut tasaista, mutta nopeaa. Tässä kappaleessa perehdytään hieman niihin keskeisimpiin tekniikoihin, jotka ovat mahdollistaneet valtavan kehityksen Quaken jo sinällään vakuuttavasta graafisesta ulkoasusta esimerkiksi Half Life 2:n, Doom 3:n ja Far Cryn kaltaisiin suorastaan taideteoksiin. Vaikuttaakseen edes etäisesti aidolta, kolmiulotteisen maailman tulee osata näyttää valaistus oikein. Toisin sanoen tietystä suunnasta tulevan valon pitää heijastua objektien ja niitten osien pinnoilta eri intensiteeteillä riippuen polygonien suunnasta valoon ja katsojaan nähden. Suoraan ylhäältä tuleva valo heijastuu kirkkaasti ainoastaan objektin päältä, ei alapuolelta. Helpoiten tämä on toteutettavissa normaalilla, polygonikohtaisella tasaisella varjostuksella (flat shading). Tässä jokaiselle polygonille lasketaan oma valoisuus ja näytetään sellaisenaan. Tuloksena on kuitenkin kovin karkean näköinen jälki, jossa yksittäiset polygonit näkyvät selvästi etenkin pyöreiltä pinnoilta. (1) Tasaista varjostusta selvästi pehmeämmän tulos on toteutettavissa joko Gouraud- tai Phong-tekniikoilla. Gouraud-varjostuksessa jokaiselle verteksille eli polygonin kulmapisteelle lasketaan oma valaistusarvo ja itse polygonin valoisuusarvo interpoloidaan näistä verteksien valaistusarvoista. Tuloksena on jo lähes aidon näköinen pinta (ks. kuva 4) ja tämä varjostus onkin yleisesti pelimoottorien käytössä. Phong-varjostuksella saadaan täydellisesti jakautunut valaistus laskemalla jokaiselle objektin pikselille valaistusarvot, mutta hyöty Gouraud-varjostukseen ei ole niin suuri kuin sen vaatima laskentateho suorittimelta, joten reaaliaikaisessa piirtämissä sitä ei juurikaan käytetä. Sen sijaan Gouraud-varjostus ei vaadi kovinkaan runsaasti laskentatehoa ja on toteutettavissa jopa ilman grafiikkakiihdyttimiä. (1) Kuva 4 Tasainen, Gouraud- ja Phong-varjostus 5
Varjostuksen lisäksi erittäin tärkeää objektien ulkonäön kannalta on mahdollisuus liittää polygonien pinnoille bittikarttakuvia eli tekstuureita. Ensimmäisen kerran tämä oli aidosti toteutettu Quakessa ja Descentissä, koska Wolfenstein 3D:n tai Doomin kaltaisia pelejä ei voida määritelmän mukaan pitää täysin aitoina kolmiulotteisina peleinä. Ennen kaikkea suuremmilla resoluutioilla teksturointi vaatii kohtalaisesti laskentatehoa, joten se oli ensimmäisten grafiikkakiihdyttimien ainoita tehtäviä tekstuurisuodatuksen lisäksi. (1) Ensimmäiset grafiikkakiihdytinkortit jättivät itse kolmiulotteisen ympäristön laskemisen vielä itse koneen prosessorille. Seuraava askel kolmiulotteisen grafiikan tekniikassa oli niin sanotut T&L-yksiköt (transform & lightning), joiden avulla ympäristön objektien ja niiden valaistuksen laskenta siirrettiin kokonaan näytönohjaimen vastuulle. Näin prosessorin ainoaksi tehtäväksi jäi itse pelimekaniikan laskenta. T&L-yksiköt eivät paranna pelin ulkoasua mitenkään, mutta hajautetun laskentatehon ansiosta niiden vaikutus pelien nopeuteen on huomattava. (1) Edellä mainittujen tekniikoiden ilmestymisen jälkeen suuria mullistuksia tekniikoissa ei ole tapahtunut. Kuitenkin pienten lisäominaisuuksien mukana, niiden kehittyessä ja ennen kaikkea laskentatehon kasvaessa uusimmat näytönohjaimet ovat lähestymässä kovaa vauhtia fotorealistista grafiikkaa. Seuraavassa muutamia tekniikoita, joita aivan uusimmat näytönohjaimet käyttävät kolmiulotteisen grafiikan piirtoon. Kuvan 4 pallojen reunoilla on selkeästi havaittavaa sahalaitaisuutta, joka on tietokonegrafiikassa hyvin yleinen, resoluutioon liittyvä ongelma. Koska pikselit ovat rajoittuneet ruudukoihin, ei vinojen reunojen tai viivojen esittäminen tasaisesti ole mahdollista kahdella värissä. Tätä tarkoitusta varten on jo pitkään ollut olemassa reunanpehmennystekniikka eli antialiasointi. Kuitenkin vasta viime vuosien uusimmat näytönohjaimet ovat laskentateholtaan ja arkkitehtuuriltaan niin kehittyneitä, että reaaliaikainen reunanpehmennys on mahdollista. Nykyisin käytössä oleva multisämpläystekniikka perustuu siihen, että jokaisen pikselin peittämä alue jaetaan osapikseleihin, ja varsinaisen pikselin väri perustuu näitten osapikselien keskiarvoväriin.tällöin esimerkiksi musta sahalaitainen reuna valkoisella pohjalla ikäänkuin sumenee harmaaksi jolloin silmä näkee reunan tasaisena ja pehmeänä. (4) Reunanpehmmennyksen lisäksi aitouden tunnetta nykypeleihin tuodaan uudentyyppisellä tekstuurisuodatustekniikalla. Aikaisemmat suodatustekniikat (bilinear, trilinear) eivät ottaneet huomioon sitä tosiasiaa, että tekstuurit näyttävät oikeilta vain suoraan edestäpäin katsottuna. Uuden anisotrooppinen suodatuksen myötä tekstuurit saadaan näyttämään huomattavasti aidommilta näytteistämällä pikseleitä tekstuureista niin, että katsojaan nähden vinot pinnat eivät sumeudu entiseen malliin. Anisotrooppinen suodatus on hyvä esimerkki siitä, miten valtavasti laskentatehoa vaativia operaatioita on mahdollista suorittaa reaaliajassa vain tiettyä asiaa varten kehitetyillä suorittimien käskykannoilla. (5) 6
Aivan uusimpia ominaisuuksia näytönohjaimissa ovat pikseli- ja verteksivarjostinyksiköt. Käytännössä verteksinvarjostinyksiköt mahdollistavat T&L-yksikön toimintojen korvaamisen ja niiden muuttamisen täysin ohjelmoitaviksi. Tämä mahdollistaa esimerkiksi reaaliaikaisen dynaamisen valaistuksen ja varjojen piirtämisen reaaliaikaisesti. Pikselivarjostinyksiköllä muutetaan jo valmista kaksiulotteista kuvaa muokkaamalla esimerkiksi pintojen väriä ja tekstuuria. Tällaiset efektit ovat ennen olleet käytännössä mahdottomia ja ovat tärkeässä roolissa muun muassa Doom 3:n ja Half Life 2:n graafisessa loistossa. Varsinkin maallikon silmin on vaikeaa nähdä tulevaisuudessa syntyvän uusia suuria, käänteentekeviä keksintöjä kolmiulotteisen tietokonegrafiikan saralla. Sen sijaan on täysin varmaa, että kehitys jatkuu pienin harppauksin uusien tekniikoiden ja ennen kaikkea tehokkaimpien laitteiden myötä. Huimaa vauhtia jo kymmenisen vuotta kestänyt kehitys tuntuu edelleen jatkuvan nopeana ja onkin erittäin mielenkiintoista seurata, minkälaisia pelejä julkaistaan muutaman vuoden päästä, puhumattakaan tulevien vuosikymmenten vaikutuksesta kolmiulotteisen peligrafiikan suhteet. Niihin aikoihin verrattuna, nykyiset huippugrafiikat näyttänevät alkeellisilta töherryksiltä. 7
LÄHTEET 1. Artikkeli Brief Glimpse into the Future of 3D Game Graphics - Michal Necasek, 2002 Saatavissa osoitteesta http://www.justadventure.com/articles/3d/3dgraphicstrens.shtm 2. 3D Engines in games Introduction - Michal Valient, 2001 Saatavissa osoitteesta http://www.dimension3.sk/mambo/component/option,com_docman/task,doc_dow nload/gid,4/ 3. Wikipedia-artikkeli First-person shooter Saatavissa osoitteesta http://en.wikipedia.org/wiki/first-person_shooter 4. Artikkeli Grafiikan turboahtimet Vertailussa DirectX9-näytönohjaimet Ville Suoranta, Henrik Kärkkäinen Mikrobitti 4 / 2004 5. Artikkeli Grafiikkaloiston kulissien takana - Ari Rantanen Saatavissa osoitteesta http://www.mikrobitti.fi/nettijatkot/2004/11/nayttikset/ 6. Todellista tehoa - Ville Suoranta, Matti Erikkilä http://www.mikrobitti.fi/nettijatkot/2004/06/naytonohjaimet/ KUVALÄHTEET kuva 1: http://www.frontierastro.co.uk/frontier/bigbeeb.html kuva 2: http://www.wolfenstein3d.co.uk/jjress1.jpg ja http://www.combatfolk.ru/games/doom/mastersofdoom/doom2-screens/doom-2- screenshots-10.jpg kuva 3: http://games.tiscali.cz/hardware/tema/3dfxhistorie1/quake-split.jpg kuva4: http://www.justadventure.com/articles/3d/3dgraphicstrens.shtm 8