Raycasting

Fra Wikipedia, den frie encyklopedi
Gå til: navigasjon, søk

Raycasting er en metode for å løse et antall problemer innen datagrafikk. Teknikken gjør det mulig å finne ut hvilke virtuelle objekter i en scene befinner seg innenfor en stråle som sendes ut fra et punkt, vanligvis kamerapunktet. Teknikken ble først beskrevet av Scott Roth i en tekst fra 1982 som beskrev en metode for å rendrere CSG-modeller.

Bruk[rediger | rediger kilde]

Raycasting kan referere til:

  • Å finne ut hvilket objekt som først blir truffet av en stråle
  • En teknikk for å finne ut hvilke objekter som må rendreres ved å se hvilke objekter som skjules ved hjelp av en raycasting fra 'øyet' og ut gjennom hver piksel i bildet.
  • En ikke-rekursiv variant av raytracing som kun prosjierer primærstråler, eller
  • En direkte volumrendreringsmetode, også kalt volumbasert raycasting

Selv om raycasting og raytracing ofte ble brukt om hverandre i tidlig datalitteratur, forsøker mer nylig bruk å skille mellom de to. Distinksjonen er så enkel som at raycasting aldri sporer sekundære stråler, mens raytracing kan gjøre dette.

Konsept[rediger | rediger kilde]

Raycasting er ikke synonymt med raytracing, men kan tenkes som en forenklet og mye raskere versjon av raytracing algoritmen. Begge benyttes innenfor datagrafikk for å rendrere tredimensjonelle scener til todimensjonelle bilder ved å følge lysstråler fra et virtuelt øye til en lyskilde. Raycasting regner ikke ut hvilken retning en lysstråle vil kunne ta etter å ha truffet en overflate på sin vei fra øyet til en lyskilde. Dette gjør det umulig å kunne rendrere refleksjoner, refraksjon, eller naturlige skygger, men alle disse elementene kan til en viss grad 'jukses' frem ved hjelp av kreativ bruk av teksturer eller andre metoder. Den raske beregningen gjorde at raycasting var en hendig rendreringsmåte i tidlige 3D spill.

I naturen sender en lyskilde ut en stråle av lys som beveger seg til den treffer en overflate. En kan tenke på denne strålen som en strøm av fotoner som beveger seg langs samme bane. Idet strålen treffer overflaten, kan en kombinasjon av tre ting skje; refleksjon, absorbsjon eller refraksjon. Overflaten kan reflektere alt eller deler av lysstrålen, i en eller flere retninger. Den kan også absorbere deler av lyset, noe som fører til en reduksjon i intensiteten til det reflekterte (eller refraksjonerte) lyset. Hvis overflaten er helt eller delvis gjennomsiktig, kan den også refraksjonere en del av lyset inn i seg selv, samtidig som noe (eller hele) lysspekteret kan bli absorbert, noe som muligens endrer fargen til lyset. Av kombinasjonen refraksjon, absorbsjon og refleksjon må hele lysmengden medregnes, og ikke mer. En overflate kan for eksempel ikke reflektere 66% av en lysstråle samtidig som den refraksjonerer 50%, siden de to andelene ville bli 116%. Fra dette punktet kan de reflekterte eller refraksjonerte strålen treffe andre overflater, hvor beregningen gjentas. Noen av disse strålene vil til slutt nå øyet, noe som gjør det mulig for oss å se bildet. Å simulere denne prosessen fullt ut i en datamaskin kan betegnes som svært bortkastet, siden bare en liten mengde av lyset som faller på en scene vil faktisk nå øyet.

Den første raycasting (i motsetning til raytracing) algoritmen brukt for rendrering ble presentert av Arthur Appel i 1968. Ideen bak raycasting er å sende ut stråler fra øyet, en stråle per piksel, og finne det nærmeste objektet som blokkerer den strålens bane. Dette blir da objektet øyet normalt ser igjennom den pikselen. Ved hjelp av materialet og effekten av lyskiler i scenen, kan denne algoritmen regne ut skyggeleggingen av dette objektet. Det forenklede resonnementet er at hvis et objekt er vendt mot et lys, vil det lyset nå objektets overflate, og ikke bli blokkert eller ligge i skygge. En viktig fordel raycasting ga ovenfor eldre Scanline algoritmer er dens evne til å kunne håndtere ikke-planare overflater, slik som koner og sfærer. Hvis en matematisk overflate kan bli truffet av en stråle, kan den rendreres ved hjelp av raycasting. Komplekse objekter kan skapes med modelleringsteknikker, og rendreres på en enkel måte.

Se også[rediger | rediger kilde]

Referanser[rediger | rediger kilde]