Ray casting , raycasting , a "casting rays" ( eng. ray casting - casting rays) módszere a számítógépes grafika egyik renderelési módszere , amelyben a jelenetet a sugarak és a renderelt felület metszéspontjának mérése alapján építik fel. A kifejezést először a számítógépes grafikában használták Scott Roth 1982-es publikációjában , aki a CSG - modellek megjelenítési módszerének leírására használta [1] .
Bár a "ray casting" és a "ray tracing" kifejezéseket gyakran felcserélhetően használták a korai számítógépes grafikai irodalomban [ 2] , ezek a kifejezések a modern számítógépes grafikában különböznek egymástól, és különböző technikákat írnak le, amelyekben azonban sok a közös [3] .
A Raycasting a következőkre utalhat:
A raycasting nem egyet jelent a sugárkövetéssel (ray tracing), de felfogható a sugárkövetési algoritmus lerövidített és lényegesen gyorsabb változataként. Mindkét algoritmus „képsorrend”, és a számítógépes grafikában a 3D-s jelenetek 2D-s képernyőre történő megjelenítésére használják a néző szeméből egy fényforrásra vetített vetítősugarak segítségével . A sugáröntési módszer nem számítja ki a fénysugarak új érintőit, amelyek akkor következnek be, ha a szemből a fényforrásra vetített sugár metszi a felületet. Ez a funkció lehetetlenné teszi a visszaverődések, fénytörések és az árnyékok természetes vetületének pontos visszaadását sugársugárzással. Mindezek a tulajdonságok azonban hozzáadhatók "hamis" (megtévesztő, közelítő) technikákkal, például textúratérképek vagy más módszerek használatával. A nagy számítási sebesség a raycastot kényelmes renderelési módszerré tette a korai valós idejű 3D számítógépes játékokban.
A valódi természetben egy fényforrás fénysugarat bocsát ki , amely a térben "utazva" végül valamiféle akadályba "botlik", amely megszakítja ennek a fénysugárnak a terjedését. A fénysugarat a sugárvektor mentén mozgó fotonáramként ábrázolhatjuk . Az út bármely pontján három dolog bármilyen kombinációja megtörténhet a fénysugárral: abszorpció , visszaverődés és fénytörés . Egy felület egy vagy több irányban visszaverheti a teljes fénysugarat vagy annak csak egy részét. A felület a fénysugár egy részét is elnyelheti, ami a visszavert és/vagy megtört sugár intenzitásának elvesztését eredményezheti. Ha egy felület rendelkezik az átlátszóság tulajdonságaival , akkor megtöri magában a fénysugár egy részét, és megváltoztatja terjedési irányát, elnyelve a sugár spektrumának egy részét (vagy egészét) (és esetleg megváltoztatja a színét). Az abszorpció, fénytörés és visszaverődés miatt „elveszett” fénysugár teljes intenzitásának pontosan meg kell egyeznie ennek a sugárnak a kimenő (kezdeti) intenzitásával. A felület például nem tudja visszaverni a bejövő fénysugár 66%-át, és nem törheti meg az 50%-át, mivel ezeknek a részeknek az összege 116%, ami több, mint 100%. Ebből következik, hogy a visszavert és/vagy megtört sugaraknak más felületekhez kell "csatlakozniuk", ahol a beérkező sugarak számítási eredményei alapján ismét kiszámítják elnyelő, visszaverő és törési erejüket. A fényforrás által generált sugarak egy része az űrben terjed, és végül a látómezőre (az emberi szemre, egy fotó- vagy videokamera lencséjére stb.) esik. A fény terjedésének fizikai folyamatának szimulálása a fénysugarak számítógépes nyomon követésével túlzottan pazarló, mivel a fényforrás által generált sugarak csak elenyésző töredéke éri a látóablakot.
A rendereléshez használt első raycasting algoritmust (nem sugárkövetést) Arthur Appel vezette be 1968-ban [5] . A sugársugárzás azon az elképzelésen alapul, hogy a megfigyelő "szeméből" sugarakat bocsátanak ki, pixelenként egy sugarat , és meg kell találni a legközelebbi objektumot, amely blokkolja ennek a sugárnak az útját. Az anyagtulajdonságok és a jelenetben lévő fény hatásának felhasználásával a sugársugárzó algoritmus meg tudja határozni egy adott objektum árnyékolását. Az egyszerűsítésben az a feltételezés, hogy ha a felületet a fény elé helyezzük, akkor a fény eléri a felületet, és nem blokkolja vagy árnyékolja. A felületi árnyékolás kiszámítása hagyományos 3D számítógépes grafikai árnyékoló algoritmusokkal történik. A raycasting egyik előnye, hogy könnyen kezelhető nem sík felületek és szilárd testek, például gömb vagy kúp. Ha egy matematikai felületen egy sugár áthaladhat, akkor az sugársugárzással renderelhető. Szilárdtest-modellezési technikákkal összetett objektumok hozhatók létre, és könnyen renderelhetők.
A számítógépes grafikai sugárzást először a Mathematical Applications Group, Inc. tudósai használták. (MAGI) Elmsfordból, New Yorkból ( angolul Elmsford, New York ). Ezt a társaságot 1966-ban alapították, hogy radiológiai ökológiai számításokat végezzen az Egyesült Államok Védelmi Minisztériuma számára . A MAGI fejlesztőszoftvere nemcsak azt számította ki, hogy a gamma-sugarak hogyan verődnek vissza a felületekről (a sugárzás céljára történő sugárzást már az 1940-es években végezték), hanem azt is, hogyan hatolnak be és törnek meg az anyagokon belül. Dr. Philip Mittelman vezetésével a tudósok egy módszert dolgoztak ki képek előállítására ugyanazon szoftver alapján. 1972-ben a MAGI kereskedelmi animációs stúdió lett. Raycasting segítségével 3D számítógépes animációt készített televíziós reklámokhoz, oktatófilmekhez és végül játékfilmekhez. A Tron című sci-fi film animációinak nagy részéért a MAGI a felelős . Az animáció elkészítéséhez csak a raycasting módszert használtuk. 1985-ben a MAGI csődbe ment.
A Wolfenstein 3D világa egyenletes magasságú falak és sima tömör padlók és mennyezetek négyzetrácsára épül. A játék szintjének megrajzolásához a látómezőből egy sugarat "lőnek ki", amely áthalad a képernyő minden pixeloszlopán. Ezután az algoritmus ellenőrzi, hogy a sugár áthaladt-e a falon, és ha igen, akkor ennek megfelelően választja ki és méretezi a fal textúráját, aszerint, hogy a sugár a szinten hol "ütközött" a fallal, és mennyit tett meg korábban. Ezután egy egydimenziós puffer jön létre, amelyben skálázott sprite-ok találhatók, amelyek ellenségeket, bónuszokat és tárgyakat képviselnek [6] .
A rácson alapuló szintek létrehozásának két célja volt: a gerenda és a fal ütközését gyorsabban lehetett megtalálni, mivel az esetleges ütközések kiszámíthatóbbá válnak, és csökken a memóriafelhasználás. A nyitott terek kezelése azonban nehézkessé válik.
A Comanche sorozat játékaihoz a NovaLogic külön motort fejlesztett ki Voxel Space néven . Ez a motor egy sugarat követ a képernyő pixeleinek minden oszlopán, és minden sugarat a magasságtérkép pontjaihoz viszonyít. Ezután a motor a magasságtérkép minden elemét pixeloszloppá alakítja, meghatározza, hogy ezek közül melyek láthatók, és azokat a megfelelő színnel rendereli, amelyet a textúratérképről vesz [7] .