Raycasting

:*Raycasting kan også referere til en algoritme for å løse [[punkt i polygon]]-problemet.*
**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 å rendre CSG-modeller.

## Bruk

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å rendres 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 strålesporing som kun prosjierer primærstråler, eller
* En direkte volumrendringsmetode, også kalt volumbasert raycasting

Selv om raycasting og strålesporing 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 strålesporing kan gjøre dette.
## Konsept

Raycasting er ikke synonymt med strålesporing, men kan tenkes som en forenklet og mye raskere versjon av algoritmen for strålesporing. Begge benyttes innenfor datagrafikk for å syntetisere 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 gjengi 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 bildesyntetiseringsmetode 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, absorpsjon 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, absorpsjon 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 raycastingalgoritmen brukt til bildesyntese ble presentert av Arthur Appel i 1968 for å forbedre visualiseringen av maskin- og arkitekturmodeller ved å la skyggelegging gjengi perspektiver og relative posisjoner. 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 syntetiseres på en enkel måte.

## Fotnoter

## Se også

* Volumbasert raycasting
* 2,5D

## Referanser