4.6. A Fénysugár-követés módszere (ray-tracing) Mi látható a képernyőn, egy-egy képpontjában ? És az ott milyen színű ? (4.7. Árnyalás)
2
Tárgytér-módszer: Tárgytér: valódi távolságok és szögek (N 0 ! ) SzKR: szem-(kamera-)KR Nézetmező: csonkagúla Közelsík (és távolsík) Mélységvágás Oldalvágás (2D)
A fénysugár-követés módszere Fénysugár-követés (ray-tracing) A tárgytérben (SZKR) Minden K i j képpontban: melyik felület-elem látható? Az ott látott színárnyalat kiszámítása: „megvilágítási módszerrel” „Valószerű képek” (realistic images) egyik módszere fényforrások, árnyékok, fény-visszaverődés, átlátszó testek, stb.
Az FSK eljárás váza Előtte: VKR SzKR (tárgytér), vágás (jelöléssel) Keret, raszter: K i j képpontok Minden képpontra: O - K i j „fénysugár”: X = O + t · (K i j - O) = t · K i j ; O = (0,0,0) minden felülettel: döféspont C i j = {r, g, b}, megvilágítás C 0 ; C i : visszaverődés, árnyékok, átlátszó felületek
A kép kerete A szemtől d (~ 50 cm) távolságra a b (~30 40 cm) oldalú keret K i j képpontok: i = 0,1,…,xmax, j = 0,1,…,ymax x i = - a / 2 + dx y j = - b / 2 + dy for j := 0 to ymax do for i := 0 to xmax do begin … end; A fénysugár: X = t · K i j ; t > 1 > 0
A ciklus magja: // minden i és j-re (minden képpontra): sugár : „ X = t · K i j ” ; t > 1 zxy := zmax; lapxy := háttérlap; // a háttér följegyzése foreach felület do begin „P( x,y,z, u,v,t ) := döféspont”; if (van döféspont) then if z < zxy then begin// közelebb van? zxy : = z; lapxy := lap; // a felület följegyzése end; // if-if end; // felület (háromszög) putPixel(i,j, „a lapxy színe a zxy pontban”); // árnyalás
A metszéspontok kisszámítása Időben kritikus: minden képpontnál - minden lapra Felület-elem: háromszög, gömb, másodrendű, paraméteres felület, stb. Sugár és háromszög metszéspontja: a sugár: X = t · K i j a háromszög: X = Q + u · (P - Q) + v · (R - Q) metszéspont a PQR síkkal: { u, v, t } if ( 0 u, v, 1 – u - v 1 ) then // a háromszögön belül Időben kritikus gyorsítás kell
Gyorsítások foreach y foreach x foreach lap … „vágás”: a kereten kívüliek megjelölése Testek-lapok dobozolása lapok rendezése legkisebb z szerint Szabályos (reguláris) térháló Nyolcasfa BSP-fa
Megjegyzések Láthatóság: (i,j) a K i j -ben látható felület (x, y, z) putPixel(i,j, „a lapxy színe a zxy pontban”); // árnyalás az árnyalási modell szerint: F i j (lap, x, y, z): a képpont színe első közelítés „Láthatóság”: egy FF látható-e az (x.y.z)-ből !
Rekurzív FSK „Első ütközés”: a látott pont, színe: a közvetlen megvilágításból A testek között fény-visszaverődés (és átlátszó testeken fény áthaladás) Milyen fény esik a látott pontba másokról visszaverten? (A testen áteresztve?)
Rekurzív FSK Az ideális visszaverődés törvénye: (LN) szög = (SN) szög; egy síkban A fénytörés törvénye: sin / sin = n k / n b ; egy síkban s1: elsődleges sugár: a néző iránya s2v: másodlagos, visszavert sugár s2a másodlagos, áteresztett sugár; Jöhet-e fény s2v és s2a felől Csak véges számú visszaverést számolunk Csak az ideális visszaverési irányt számoljuk