Raycasting

Tekintsünk minden pixelre úgy, mint egy kis ablakra a világra.

Milyen színértéket vegyen fel ez a pixel? Nézzük meg, mi látszik onnan a világból és az alapján rendeljünk hozzá a pixelhez egy színt!

Az algoritmus

	for each pixel:
		cast a ray into the scene

		for each object in scene:
			check if the ray intersects the object

		set pixel to the color of the closest object

Sugár

A sugárnak van

  • egy kiindulási pontja
  • egy iránya

A parametrikus sugár: ahol (félegyenes).

?, ? sugár kezdőpontja, sugár mögötti részek.

Sugarak indítása

A szempozcióból indítunk sugarakat minden pixel középpontján keresztül

Most: középpontosan szeretnénk vetíteni egy kamerába, a vetítési sík egy négyszögletes részét megfeleltetve a képernyőnek.

Kamera tulajdonságok

  • Szempozíció (eye),
  • Egy pont amire néz (center),
  • Felfele irányt megadó vektor a világban (up),
  • Nyílásszög, amekkora szögtartományt lát (fov),
  • Vetítővászon mérete. Most legyen adott:

Ezek segítségével fogjuk megadni pixel világbeli koordinátáit.

Keressük a kamera saját (jobbkezes) koordináta-rendszerét.

  • Nézzen a kamera irányba!
  • Az tengely legyen merőleges mind -re, mind az irányra!
  • Az tengely merőleges -ra és -re is:

Pixel koordináták

Legyen az pixel középpontja, a vetítősík egységnyi távolságra a nézőponttól!
Ekkor: Ahol

A sugár egyenlete

A sugár egy félegyenes, amit kezdőpontjával és irányvektorával adhatunk meg.

Legyen a sugár kezdőpontja, pedig az irányvektora, ekkor megadja a sugár összes pontját.

Most a sugarak kezdőpontját az előbbieknek megfelelően számolhatjuk, azaz

A sugár irányvektora pedig

Metszések

A sugárkövető programok futásidejük döntő részében metszéseket fognak végezni.

Nézzük meg néhány egyszerű geometriai elemmel vett metszetét a sugárnak.

A sugarak mindig a korábban is látott alakú, ahol feltesszük a továbbiakban, hogy .

Ekkor a sugárparaméter éppen a pont távolsága -tól.

Parametrikus sugár és implicit felület metszéspontja

Legyen adva egy implicit egyenlet, ami meghatározza a metszeni kívánt felületet. ()

A sugarunk egyenlete -re meghatározott egy pontot a térben helyettesítsük be ezt a képletet az implicit egyenletbe!

Tehát a következő egyenletet kell megadnunk -re:

A kapott -től függően a következő esetek állhatnank fenn:

  • Ha , akkor a sugarunk előtt van a felület és metszi
  • Ha , akkor a sugár kezdőpontja a felületen van
  • Ha , akkor a sugár "mögött" van a felület és metszi a sugár egyenese a felületet (de nekünk kell!)

Parametrikus sugár és parametrikus felület metszéspontja

Legyen adva egy parametrikus felület.

Kell találni egy olyan sugárparamétert, amihez létezik , hogy

Ez három ismeretlenes (), három egyenletes ( koordinátáként egy) egyenletrendszer.

A ugyanúgy ellenőrizhető, mint előbb, de most az -re is figyeljünk, hogy a felületünk paramétertartományának megengedett részén van-e (általában kell)!

Sugár és implicit sík metszéspontja

Síkot megadhatunk implicit alakban:

A fenti sugár egyenese metszi a síkot, ha

Ezt -re átrendezve adódik

Látható a sík a nézőpontunkból, ha

Sugár és normálvektoros sík metszéspontja

Legyen a sík egy pontja, a normálvektora.

Legyen ez egyenes egy pontja, az irányvektora.

Az egyenes egyenlete:

A sík egyenlete: minden pontja a síknak kielégíti ezt az egyenletet.

Behelyettesítve -t a helyére:

ha

A sugár metszi a síkot, ha .

Ha , akkor az egyenes párhizamos a síkkal, és így vagy nincs metszéspontjuk, vagy az egyenes a síkon fut.

Sugár és parametrikus sík metszéspontja

Síkot megadhatunk egy pontjával és kifeszítő vektorokkal is:

Metszéspont a sugár egyenesével: keressük és -t úgy, hogy

Beírva a képletet adódik

Átrendezve kapjuk, hogy

Ez három ismeretlenes, három lineáris egyenletből álló egyenletrendszer, ami megoldható, ha lineárisan nem összefüggő.

Mátrix alakban:

Látjuk a síkot, ha (most a felület paramétertartománya, ez teljesülni fog)

Sugár és háromszög metszéspontja I.

A háromszög egyértelműen megadható három csúcsával.

Ha a háromszög csúcsai, akkor a hozzátartozó sík egy parametrikus megadésa

A korábbi jelölésekkel: és

Ez egyben egy baricentrikus megadása is, hiszen átrendezve kapjuk, hogy

ahol az együtthatók -re összegződnek.

Elvégezve tehát a parametrikus síkkal a metszést, megkapjuk a baricentriukus koordinátáit a sugár síkkal való metszéspontjának. A sugárparamétert ne felejtsük el ellenőrizni!

Utolsó lépésként ellenőriznünk kell, hogy a metszéspont a háromszögön belül van-e. Ez pontosan akkor teljesül, ha

Sugár és háromszög metszéspontja II.

A háromszög egyértelműen megadható három csúcsával.

Ha a háromszög csúcsai, akkor a hozzátartozó sík pont-normálvektoros implicit megadásához a sík

  • egy pontja bármelyike
  • normálvektora

ahol a vektorális szorzatot jelöli, és ekkor egységnyi hosszúságú.

Először számítsuk ki az egyenes és a háromszög síkjának metszéspontját, ez legyen (már ha létezik).

Legyenek a pont -re vonatkoztatott baricentrikus koordinátái, úgy hogy

akkor, és csak akkor van a háromszögön belül, ha

Pont a háromszögön vizsgálat

Tudjuk, hogy . Ekkor ill

A gyorsabb számolásértvegyük a fentiek egy síkra vett vetületét.

A koordinátasíkok közül (, vagy ) arra vegyük a háromszög 2D vetületét, amelyre a háromszög vetületének területe a legnagyobb! a héromszög és sík normálisa leginkább "egyálású".

A vetülethez egyszerűen elhagyjuk vagy egyenletét, megfelelően.

Azt a tengelyt kell választani, amelyik mentén a legnagyobb a háromszög normálvektorának abszolút értéke, így biztos nem fordulhat elő, hogy a háromszög merőleges a síkra, és csak egy szakasz marad belőle.

Pl. legyen a a választott tengely. Ekkor

Behelyettesítve -t, és rendezve:

Rendezve -re kapjuk:

A nevező csak degenerált háromszög esetén lehet nulla.

akkor, és csak akkor van a háromszögön belül, ha

Sugár metszése poligonnal

Tegyük fel, hogy a poligonunk csúcsai egy síkban vannak, ekkor a metszés két lépésben történik

  • A sugarat metsszük el a poligon síkjával
  • Döntsük el, hogy a metszőpont a poligonon belül van-e

A másodikat egy síkban érdemes csinálni (vagy a poligon síkjában, vagy a poligon valamely koordinátatengelyre vett vetületének síkjában)

Pont-poligon tartalmazás teszt síkban

A pont a poligonon belül van, ha tetszőleges irányú, belőle indított sugárnak páratlan számú metszéspontja van a poligon oldalaival. (azaz a sugarat a poligon összes oldalszakaszával el kell metszeni)

Konkáv és csillag alakú poligonra is működik.

Sugár metszése szakasszal

A poligon csúcspontjai közötti szakasz parametrikus alakja:

Ezt kell metszeni a alakú sugárral

Most: a pont az a pont, amiről el akarjuk dönteni, hogy a poligonon belül van-e, tetszőleges.

Legyen !

Így a egyenletet csak koordinátára kell megoldani.

Keressük meg, hogy hol metszi a oldal egyenese a sugarat ( melyik -re lesz ?)

Azaz

-t kifejezve:

Innen megkapjuk azt az koordinátát -be behelyettesítve, ahol a sugér metszi a szakaszt.

Ha : a sugár nem metszi a szakaszt (csak az egyenesét).

Ha : a sugár egybeesik a szakasszal, vagy mögötte van a metszéspont.

Sugár és gömb metszéspontja

Az sugarú, középpontú gömb implicit egyenlete:

Ugyanez skalárszorzattal felírva: ahol

Legyen az egyenes egy pontja, az irányvektora.

Ekkor az egyenes egyenlete:

Behelyettesítve a gömb egyenletébe ezt kapjuk:

Kifejtve:

Ez másodfokú egyenlet -re (minden más ismert).

Legyen

  • Ha , két megoldás van, az egyenes metszi a gömböt.
  • Ha , egy megoldás van, az egyenes érinti a gömböt.
  • Ha , nincs valós megoldás, az egyenes nem metszi a gömböt.

Sugárparamétert ezután ellenőrizni kell ().

Másodfokú egyenlet megoldása

Elméletileg a megoldás megkapható esetben:

Gyakorlatilag baj van, ha

  • Átalakítással megkapjuk, hogy formában felírható a két gyök (Citardauq Formula)

Gyakorlatilag akkor is baj van, ha

  • Ekkor , vagyis előjelétől függően vagy vagy pedig elveszít az értékes tizedesjegyeket.
  • Számítsuk ki az egyik gyököt azon az ágon, amelyiken nem vonunk ki egymásból két közrl azonos pozitív számot, a másik gyököt pedig a Viète-formulákból
  • Azaz például ha , akkor és

Sugár és transzformált objektumok metszése

Legyen egy adott objektum transzformációs mátrixa.

Feladat: Keressük sugár és az -mel transzformált objektum metszéspontját!

Probléma: Hogyan transzformálunk egy gömböt? Pontonként? Képletet írjuk át?

Megoldás: transzformáljuk inkább a sugarat!

Tétel: Az sugér és az -mel transzformált objektum metszéspontja az -el transzformált sugár és az objektum metszéspontja.

  • , homogén transzformáció
  • Sugár kezdőpontja:
  • Sugár iránya: . Így nem hat ré az eltolás.
  • Transzformált sugár:

Metszetvizsgálat: használjuk -t!

Metszéspont: , akkor az eredeti térben

Távolságokaz újra kell számolni az eredeti térben!

Normálvektorok: helyett (inverz-transzponált)

Sugér metszése AAB-vel

AAB axis aligned box, olyan téglatest, aminek az oldallapjai a koordinátasíkjainkkal párhuzamosak.

Legyen a sugarunk alakú, ahol
a téglatestet pedig adjuk meg átlójának két pontjával, és segítségével ()!

Tegyük fel, hogy a sugár kiindulópontja a doboztól balra helyezkedik el.

Legyen

Ha : merőleges az -tengelyre (pl. 2D-ben függőleges). Ekkor nincs metszéspont, ha , különben az -koordinátás számításokat kihagyhatjuk.

Ha , akkor legyen

Ha : cseréljük meg -t!

Ha :

Ha :

A fentit végezzük el az és koordinátákra is.

Ha : nem találtuk el a dobozt.

Ha : a doboz mögöttünk van.

Minden más esetben a sugarunk metszéspontjai a dobozzal és -ban lesznek (sorban a közelebbi és távolabbi metszéspontok)

Források