Our site uses cookies 🍪

Cookies enable the website to work as intended.
You can find more information about cookies from here.

Miten Raytracing toimii? ━ Kaappo Raivio


Tässä artikkelissa ohjelmoijamme Kaappo Raivio käy läpi Raytracingia, miten se toimii ja mitä Raytracing mahdollistaa. Raivio on tehnyt aiheesta vapaa-ajalla videon jonka linkki löytyy artikkelin lopusta. Kuten Raivio, ohjelmoijiamme yhdistää palava into ohjelmistokehitykseen ja he tekevät paljon projekteja myös vapaa-ajallaan. 


Oletko ikinä miettinyt, miten tietokoneilla voi olla mahdollista renderöidä fotorealistisia kuvia? Äkkiseltään kysymys tuntuu järjenvastaiselta – tietokoneet ovat nimittäin deterministisiä ja diskreettejä koneita, jotka a) päätyvät samoilla parametreillä aina samaan tulokseen ja b) pystyvät mallintamaan oikean maailman prosesseja vain äärellisellä tarkkuudella. Lähes kaikkien luonnonilmiöiden lopputulemilla taas on äärettömän monta mahdollista arvoa – toisin sanoen ne ovat jatkuvia – ja lisäksi ne ovat monesti hyvin satunnaisia (tai kausaalisten parametrien määrä on epäkäytännöllisen suuri). 

Tyypillisin tapa renderöidä kolmiulotteisia kuvia perustuu monikulmioihin ja koordinaattimuunnoksiin, jotka mallintavat tilassa olevien esineiden geometrioita kameran perspektiivistä. Tätä lähestymistapaa käytetään sovelluskohteissa, joissa reaaliaikaisuus on välttämätöntä: esimerkiksi tietokonepeleissä, 3d-mallinnusohjelmmissa ja niin edelleen. Vaikka monikulmiopiirtäjät pystyvät luomaan uskottavan illuusion kolmiulotteisesta tilasta suhteellisen vähin resurssein, aidoksi sellaista ei uskoisi juuri kukaan. Ongelma on, että lähestymistavan erotessa näin paljon tosimaailmasta tärkeiden mutta monien hienovaraisten ilmiöiden mallintamisesta tulee todella hankalaa. Esimerkiksi valon heijastumista, taittumista tai diffraktiota on lähes mahdotonta mallintaa pelkästään kolmioiden avulla.

Jos käyttökohde ei vaadi reaaliaikaisuutta, monikulmiolähestymistavalle on olemassa vaihtoehto: säteenseuranta (engl. ray tracing). Säteenseurannassa tavoite on mallintaa lukuisten valonsäteiden vuorovaikutusta mallinnettujen kappaleiden kanssa: valonlähteestä lähtee valonsäde, joka esimerkiksi törmää kameran näkemään palloon. Pallon pinnalta osa valonsäteestä absorboituu pallon pintaan, osa taituu ja jatkaa pallon läpi, ja osa heijastuu tulokulmasta riippuvassa heijastuskulmassa eteenpäin. Lopulta jotkin valonsäteet päätyvät kuvittelliseen kameraan, ja muodostavat osan piirrettävästä kuvasta. Prosessia pitää tietenkin toistaa miljoonilla säteillä, mutta ennen pitkää piirretyn kuvan väriarvot asettuvat. 

Säteenseurannan ylivoimainen vahvuus on sen mahdollisuus mallintaa lähes kaikkia valon ilmiöitä, jotka aikaansaavat todellisen maailman ulkonäön: valon heijastumista, imeytymistä tai sirontaa pinnasta, varjoja ja erilaisia valonlähteitä, kaustiikkaa, ja niin edellen. Videolla esittelen edellisistä tärkeimmät, sekä näytän hieman lähempää itse piirtämisen yksityiskohtia.

Linkki Kaappo Raivion tekemään videoon aiheesta: Kaappo Raivio - Miten Raytracing toimii