Ray casting , raycasting , "casting rays" -menetelmä ( eng. ray casting - casting rays) on yksi tietokonegrafiikan renderöintimenetelmistä , jossa kohtaus rakennetaan mittausten perusteella säteiden ja renderoidun pinnan leikkauspisteestä. Termiä käytettiin ensimmäisen kerran tietokonegrafiikassa Scott Rothin vuonna 1982 julkaisemassa julkaisussa , joka käytti sitä kuvaamaan CSG - mallien renderöintimenetelmää [1] .
Vaikka termejä "ray casting" ja "ray tracing" käytettiin usein vaihtokelpoisina varhaisessa tietokonegrafiikkakirjallisuudessa [2] , nämä termit eroavat nykyaikaisessa tietokonegrafiikassa ja kuvaavat erilaisia tekniikoita, joilla kuitenkin on paljon yhteistä [3] .
Raycasting voi tarkoittaa:
Raycasting ei ole synonyymi säteenseurantalle (ray tracing), mutta sitä voidaan pitää lyhennetynä ja huomattavasti nopeampana versiona säteenseurantaalgoritmista. Molemmat algoritmit ovat "kuvajärjestystä", ja niitä käytetään tietokonegrafiikassa 3D-kohtausten renderöimiseen 2D-näytölle käyttämällä projisointisäteitä, jotka heijastetaan katsojan silmästä valonlähteeseen . Säteenvalumenetelmä ei laske valonsäteiden uusia tangentteja, jotka syntyvät sen jälkeen, kun silmästä valonlähteeseen projisoitu säde leikkaa pinnan. Tämä ominaisuus tekee mahdottomaksi heijastaa tarkasti heijastuksia, taittumista ja varjojen luonnollista projisointia raycasting-tekniikalla. Kaikki nämä ominaisuudet voidaan kuitenkin lisätä käyttämällä "fake" (petollinen, approksimaatio) tekniikoita, esimerkiksi käyttämällä pintakuviokarttoja tai muita menetelmiä. Suuri laskentanopeus teki raycastingista kätevän renderöintimenetelmän varhaisissa reaaliaikaisissa 3D-tietokonepeleissä.
Todellisessa luonnossa valonlähde lähettää valonsäteen , joka "matkalla" avaruuden halki lopulta "kompastuu" jonkinlaiseen esteeseen, joka katkaisee tämän valonsäteen etenemisen. Valosäde voidaan esittää fotonivirtana , joka liikkuu sädevektoria pitkin. Missä tahansa kohdassa polkua, mikä tahansa kolmen asian yhdistelmä voi tapahtua valonsäteelle: absorptio , heijastus ja taittuminen . Pinta voi heijastaa koko valonsäteen tai vain osan siitä yhteen tai useampaan suuntaan. Pinta voi myös absorboida osan valonsäteestä, mikä johtaa heijastuneen ja/tai taittuneen säteen intensiteetin menettämiseen. Jos pinnalla on läpinäkyvyyden ominaisuudet , se taittaa osan valonsäteestä itsessään ja muuttaa etenemissuuntaansa absorboiden osan (tai koko) säteen spektristä (ja mahdollisesti muuttaa väriä). Absorption, taittumisen ja heijastuksen vuoksi "menetetyn" valonsäteen kokonaisintensiteetin on oltava täsmälleen yhtä suuri kuin tämän säteen lähtevä (alku)intensiteetti. Pinta ei voi esimerkiksi heijastaa 66 % tulevasta valonsäteestä ja taittaa 50 %, koska näiden osien summa on 116 %, mikä on yli 100 %. Tästä seuraa, että heijastuneiden ja/tai taittuneiden säteiden tulee "liittyä" muihin pintoihin, joissa niiden absorboivat, heijastavat ja taittovoimat lasketaan jälleen tulevien säteiden laskelmien tulosten perusteella. Osa valonlähteen tuottamista säteistä etenee avaruudessa ja putoaa lopulta katselualueelle (ihmissilmä, valokuva- tai videokameran linssi jne.). Valon etenemisen fyysisen prosessin simulointi seuraamalla valonsäteitä tietokoneella on liian tuhlausta, koska vain pieni osa valonlähteen tuottamista säteistä osuu katseluporttiin.
Arthur Appel esitteli ensimmäisen renderöimiseen käytetyn sädelähetysalgoritmin (ei säteenseurantaa) vuonna 1968 [5] . Raycasting perustuu ajatukseen säteiden lähettämisestä tarkkailijan "silmistä", yksi säde pikseliä kohden , ja lähimmän kohteen löytäminen, joka estää tämän säteen polun. Sädelähetysalgoritmi voi määrittää tietyn kohteen varjostuksen materiaalin ominaisuuksien ja valon vaikutuksen avulla. Yksinkertaistuksen oletus on, että jos pinta sijoitetaan valon eteen, niin valo saavuttaa pinnan eikä tukkeudu tai varjosta. Pinnan varjostus lasketaan perinteisillä 3D-tietokonegrafiikkavarjostusalgoritmeilla. Yksi raycastingin eduista on kyky käsitellä helposti ei-tasomaisia pintoja ja kiinteitä kappaleita, kuten palloa tai kartiota. Jos säde voi kulkea matemaattisen pinnan läpi, se voidaan renderöidä käyttämällä sädelähetystä. Monimutkaisia objekteja voidaan luoda kiinteän kehon mallinnustekniikoilla ja renderöidä helposti.
Raycasting-lähetystä tietokonegrafiikassa käyttivät ensin Mathematical Applications Group, Inc :n tutkijat. (MAGI) Elmsfordista, New Yorkista ( englanniksi Elmsford, New York ). Tämä yritys perustettiin vuonna 1966 suorittamaan radiologisia ekologisia laskelmia Yhdysvaltain puolustusministeriölle . MAGI:n kehitysohjelmisto ei ainoastaan laskenut kuinka gammasäteet pomppaavat pinnoilta (säteilyä varten tehtiin säteilyä jo 1940-luvulla), vaan myös kuinka ne tunkeutuvat ja taittuvat materiaalien sisällä. Tohtori Philip Mittelmanin johdolla tutkijat kehittivät menetelmän kuvien luomiseksi samaan ohjelmistoon perustuen. Vuonna 1972 MAGIsta tuli kaupallinen animaatiostudio. Hän on käyttänyt raycastia luodakseen 3D-tietokoneanimaatioita televisiomainoksiin, opetuselokuviin ja lopulta kokoelmiin. MAGI on vastuussa suurimmasta osasta Tron -scifi-elokuvan animaatioita . Animaation luomiseen käytettiin vain raycasting-menetelmää. Vuonna 1985 MAGI meni konkurssiin.
Wolfenstein 3D :n maailma on rakennettu tasakorkeiden seinien neliömäiselle ruudukolle ja sileille massiivisille lattioille ja katoille. Pelitason piirtämiseksi "laukaistaan" näkökentästä säde, joka kulkee ruudun jokaisen pikselisarakkeen läpi. Seuraavaksi algoritmi tarkistaa, onko säde ylittänyt seinän, ja jos on, valitsee ja skaalaa seinän tekstuurin sen mukaan, missä tasolla säde "törmäsi" seinään ja kuinka pitkälle se oli kulkenut aiemmin. Seuraavaksi luodaan yksiulotteinen puskuri, jossa sijaitsevat skaalatut spritet, jotka edustavat vihollisia, bonuksia ja esineitä [6] .
Tasojen luomisella ruudukon pohjalta oli kaksi tavoitetta - säteen ja seinän törmäykset löydettiin nopeammin, kun mahdolliset törmäykset muuttuvat ennustettavimmiksi ja muistin kulutus vähenee. Avointen tilojen käsittely on kuitenkin vaikeaa.
Comanche - sarjan peleille NovaLogic on kehittänyt erillisen moottorin nimeltä Voxel Space . Tämä moottori jäljittää säteen jokaisen näytön pikselien sarakkeen läpi ja testaa jokaista sädettä korkeuskartan pisteisiin nähden. Seuraavaksi moottori muuttaa jokaisen korkeuskartan elementin pikseleiden sarakkeeksi, määrittää, mitkä niistä ovat näkyvissä ja renderöi ne sopivalla värillä, joka on otettu pintakuviokartalta [7] .