Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.

Hasonló előadás


Az előadások a következő témára: "Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László."— Előadás másolata:

1 Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László

2 Képszintézis pixel

3 Lokális illuminációs módszer l A jobb oldali radiancia: –fényforrások emissziója l Fényforrások fényének egyszeri visszaverődését számítjuk L (x,  )=L e (x,  )+  L lightsource f r (  ’,x,  ) cos  ’d  ’  L e (y,  ’) L(x,  )=L e (x,  )+  L(h(x,- ,  ) f r (  ’,x,  ) cos  ’d  ’

4 Absztrakt fényforrás modellek: az integrálást megspórolják l Ambiens fényforrás: L a constant –ambiens visszaverődési modell: L ref = L a k a –konstans égbolt fény modell: L ref = L a a(x, view dir) l Irány fényforrások: egyetlen irányba sugároz, a fénysugarak párhuzamosak, az intenzitás független a pozíciótól l Pozicionális fényforrás: egyetlen pontból sugároz, az intenzitás a távolság négyzetével csökken iránypozicionális d

5 Lokális illumináció absztrakt fényforrásokkal pixel L (  )  L e (  )+  l  r l  L l (  ’ l ) f r (  ’ l,  ) cos  ’ l Pont, irányfényforrásokból származó megvilágítás Csak direkt megvilágítás 0/1: Fényforrás láthatóság ’l’l

6 Ambiens tag L (  )  L e (  )+  l  r l  L l (  ’ l ) f r (  ’ l,  ) cos  ’ l + k a L a Lokális illumináció + ambiens tag

7 Lokális illuminációs algoritmusok pixel l Láthatóság számítás a szemből l Fényforrás láthatóság számítás a látható pontból l A fényforrás fényének visszaverése a nézeti irányba: felületi normális

8 Sugár egyenlete Szakasz egyenlete Félegyenes egyenlete r(t) = (1-t)*r 0 + t*r 1 ; 0 < t < 1 0 < t r(t) = r 0 + t*(r 1 - r 0 ); 0 < t r0 ból r1be mutató vektor (a sugár iránya) (normalizálatlan) sugár kezdőpontja r(t) = e + t*d; 0 < t

9 Láthatóság a szemből pixel ray(t) = eye + v ·t, t > 0 FirstIntersect(ray  t, iobject, x) t = FLT_MAX; FOR each object tnew = Intersect( ray, object );// < 0 if no intersection IF (tnew > 0 && tnew < t ) t = tnew, iobject = object ENDFOR IF (t < FLT_MAX) x = eye + v ·t; RETURN (t, iobject, x); RETURN „no intersection” END

10 Metszéspont számítás gömbbel |ray(t) - center | 2 = R 2 Felületi normális: (ray(t) - center)/R center R |r - center | 2 = R 2 r (v ·v) t ((eye-center) ·v) t +((eye-center) ·(eye-center))- R 2 = 0 Wanted: minimum pozitív megoldás Nincs gyök 1 gyök 2 gyök

11  +  +  -1=0 Kvadratikus felületek xyz1xyz1 [x,y,z,1] A = 0Kvadratikus felület: Másodfokú egyenlet Ellipszoid x 2 y 2 z 2 a 2 b 2 c 2  +  - z 2 =0 Végtelen kúp x 2 y 2 a 2 b 2 Végtelen henger x 2 y 2 a 2 b 2  +  - 1 =0

12 Példa: sugár metszéspontja kvadratikus felülettel Felület egyenlete legyen Ugyanez mátrixformában 3x 2 + 2xy + z 2 + 2z - 7 = x y z 1 xyz1xyz1 = 0

13 Sugár egyenlete A sugár kezdőpontja legyen E = [0 1 0] és az iránya D = [1 1 0] Írjuk vissza ebbe: x(t) = e x + d x t = 0 + 1t = t y(t) = e y + d y t = 1 + 1t = 1 + t z(t) = e z + d z t = 0 + 0t = 0 3x 2 + 2xy + z 2 + 2z - 7 = 0 3*t*t + 2*t*(1+t) + 0*0 + 2*0 - 7 = 0 3t 2 + 2t 2 + 2t -7 = 0 5t 2 + 2t - 7 = 0 t = [-2  √(2*2 - 4*5*(-7))] /(2*5) = [-2  √144]/10 = [-2  12]/10; t 1 = -1.4, t 2 = 1 másodfokú egyenlet (-b  √(b 2 -4ac))/2a ebből a legkisebb pozitív t=1

14 Metszéspont Sugár egyenletébe t=1 A metszéspont [1 2 0]ban van x(t) = e x + d x t = 0 + 1t = t = 1 y(t) = e y + d y t = 1 + 1t = 1 + t = 2 z(t) = e z + d z t = 0 + 0t = 0 = 0

15 Ugyanez a számítás mátrixműveletekkel x y z 1 xyz1xyz1 = 0 XXTXT A XAX T = 0 X(t) = E + tD sugáregyenletkezdőpontirány a 4edik mindig legyen 1 E h = 1, D h = 0

16 Behelyettesíve (E+tD)A(E+tD) T = 0 Matrixszorzás linearis művelet: (összeg szorzata a szorzatok összege) EA(E+tD) T + tDA(E+tD) T = 0 EAE T + tEAD T + tDAE T + t 2 DAD T = 0 DAD T t 2 + (EAD T + DAE T ) t + EAE T = 0 a felület mátrixából, és a sugár kezdőpontjából és irányából számítható együtthatók másodfokú egyenlet t-re

17 DAD T t 2 + (EAD T + DAE T ) t + EAE T = 0 DAD T = == 5 EAD T = == 0 DAE T = == 2 EAE T = == -7 A konkrét példában t 2 + 2t - 7 = 0

18 Metszéspont számítás: háromszög 1. Síkmetszés: (ray(t) - r1) ·n = 0, t > 0 normál: n = (r2 - r1) x (r3 - r1) 2. A metszéspont a háromszögön belül van-e? ((r2 - r1) x (p - r1)) ·n > 0 ((r3 - r2) x (p - r2)) ·n > 0 ((r1 - r3) x (p - r3)) ·n > 0 r1 r2 p r3 Felületi normális: n vagy „shading normals”

19 Példa: hsz-sugár metszéspont Sugár kezdőpont [0 2 0], irány [0 0 1] Háromszög csúcsai: –[0 3 2], [1 1 1], [-1 2 1] Hsz síkjának egyenlete –normál –síkegyenet –egyik csúcsot [1 1 1] beírva kapjuk Dt n = ([1 1 1] - [0 3 2])×([-1 2 1] - [0 3 2]) = [ ]×[ ] = [1 2 -3] Ax + By + Cz + D = 0 x + 2y - 3z + D = D = 0;D = 0;x + 2y - 3z = 0

20 Sík-sugár metszéspont Sík Sugár Sugár beírva a síkba Metszéspont (t vissza a sugáregyenletbe) x + 2y - 3z = 0 x = 0 + 0t = 0 y = 2 + 0t = 2 z = 0 + 1t = t t = 0 t = 2/3 [0 2 2/3]

21 Benne van-e a hszben ((r2 - r1) x (p - r1)) ·n > 0 ((r3 - r2) x (p - r2)) ·n > 0 ((r1 - r3) x (p - r3)) ·n > 0 [0 3 2], [1 1 1], [-1 2 1] [ ]×[ /3] = [5/3 4/3 -1] [5/3 4/3 -1]·[1 2 -3] = 5/3 + 8/3 + 3 > 0 stb… ha mind igaz, a pont bent van a hszben ha nem, a sugár nem metszi a hszt [0 2 2/3]

22 Árnyaló normálok N1N1 N2N2 N3N3 N N = A X + B Y + C (X 1, Y 1, Z 1 ) N 1 = A X 1 + B Y 1 + C N 2 = A X 2 + B Y 2 + C N 3 = A X 3 + B Y 3 + C 3 változós lineáris egyenletrendszer A, B, C

23 Parametrikus felületek r(u,v), u,v in [0,1] ray(t) = eye + v ·t, t > 0 r(u,v) = ray(t) Egyenlet megoldás: u,v,t Teszt: 0< u,v < 1, t > 0 Rekurzív tesszelláció r(0.5,0.5) r(0,0) r(0,1) r(1,1) r(1,0) r(0,0.5) r(0.5,0)

24 Transzformált objektumok T1T1 T2T2 T 1 -1 T 2 -1

25 CSG modellek Különbség: gömb tégla Reguláris halmazművelet a szakaszokra:

26 Ray-casting képek Lokális illumináció valós idő Lokális illumináció + árnyékok 0.1 sec … 1 sec

27 Sugárkövetés LlLl Árnyék sugár Tükör sugár Tört sugár L (  ) = L e (  )+  l  r l  L l (  ’ l ) f r (  ’ l,  ) cos  ’ l + k a L a + + k r L in (  r ) + k t L in (  t ) Tükör irányból érkező fény Törési irányból érkező fény

28 Sugárkövetés lépései l A szembe a pixel irányából érkező sugársűrűség –Adott irányba látható felületi pont és normálvektor –A felületi pontból látható fényforrások –A felületi pontban a tükör és törési irány –A tükör irányból érkező sugársűrűség –A törési irányból érkező sugársűrűség –Az árnyalási egyenlet kiértékelése Rekurzió

29 Render( ) for each pixel p Ray r = ray( eye  pixel p ) color = Trace(ray) RGB = ToneMapping(color) WritePixel(p, RGB) endfor end ray RGB p p Sugárkövetés (Ray-tracing)

30 Sugárkövetés: Trace függvény Color Trace( ray ) IF (FirstIntersect(ray  object, x)>0 ) RETURN L a ENDIF color = L e (x, -ray.dir) color += Direct Lightsource(x, -ray.dir) IF ( k r > 0 ) THEN ReflectDir( ray, reflected ray) color += k r · Trace( reflected ray ) ENDIF IF ( k t > 0 && RefractDir( ray, refracted ray ) ) color += k t · Trace( refracted ray ) ENDIF RETURN color ray x

31 Sugárkövetés: Trace függvény Color Trace( ray, d) IF d > dmax THEN RETURN L a IF (FirstIntersect(ray  object, x) > 0) RETURN L a ENDIF color = L e (x, -ray.dir) color += Direct Lightsource(x, -ray.dir) IF ( k r > 0 ) THEN ReflectDir( ray, reflected ray) color += k r · Trace( reflected ray, d+1 ) ENDIF IF ( k t > 0 && RefractDir( ray, refracted ray ) ) color += k t · Trace( refracted ray, d+1 ) ENDIF RETURN color ray x

32 DirectLightsource DirectLightsource( x, vdir ) color = k a L a FOR each lightsource l DO shadowray = x to lightsource[l] t = FirstIntersect( shadowray ); IF (t |x - lightsource[l].pos|) color += Brdf(ldir, x, vdir) cos  l ' lightsource[l].Intensity ENDIF ENDFOR RETURN color árnyék pixel x

33 Ray-tracer osztálydiagram SceneObject SphereMesh Primitive( ) Intersect(Ray) Normal(Point) Intersect(Ray) Normal(Point) Define Render FirstIntersect DirectLightsource Trace(Ray) Light Dir(Point) Intens(Point) LatransformLe, pos Camera XRES, YRES vrp, vpn, vup eye, ww, wh GetXRes( ) GetYRes( ) GetRay(int,int) Ray Dir Start dir, start Material Le, kd, ks, shine kr, kt, n BRDF ReflectDir RefractDir Center, radiusvertices[ ] Primitive Intersect(Ray) Normal(Point)

34 Sugárkövetés: eredmény Számítási idő  Pixelszám x Objektumszám x (Fényforrás szám+1)

35 Befoglaló térfogat (Bounding Volume) double IntersectBV( ray, object ) // < 0 ha nincs IF ( Intersect( ray, bounding volume of object) < 0) RETURN -1; RETURN Intersect( ray, object ); END

36 Térpartícionáló módszerek Adatstruktúra: Ha ismert a sugár, akkor a potenciális metszett objektumok számát csökkenti Ha a potenciálisak közül találunk egyet, akkor a többi nem lehet közelebb Elő- feldolgozás objektumok Térpartícionáló adatstruktúra Sugár követés Első metszéspont

37 Sugárkövetés: FOR each cell of the line // line drawing Metszés a cellában lévőkkel IF van metszés RETURN ENDFOR átlagos eset komplexitás: O(1 ) Reguláris térháló Előfeldolgozás: Minden cellára a metszett objektumok komplexitás: O(n · c ) = O(n 2 )

38 Cellák bejárására algoritmus Nyilvántartjuk, mely t sugárparaméternél lépjük át a következő x,y,z irányú cellahatároló síkot, (Cx, Cy, Cz) a cellaméret –kezdetbenváltozás I x =  E x / C x  T x = (I x +1)C x /D x ebben a cellában vagyunk ennél a t értéknél lépünk I x += 1 T x += C x /D x T x, T y, T z ; kiválasztjuk a legkisebbet frissítjük I-t és T-t

39 Sugárkövetés: FOR összes sugár által metszett cellára Metszés a cellában lévőkkel IF van metszés RETURN ENDFOR Nyolcas (oktális) fa Faépítés( cella ): IF a cellában kevés objektum van cellában regisztráld az objektumokat ELSE cellafelezés: c1, c2, …, c8 Faépítés(c1); … Faépítés(c8); ENDIF Octree

40 Binary Space Partitioning fa (kd-fa) Faépítés( cella ): IF a cellában kevés objektum van cellában regisztráld az objektumokat ELSE sík keresés cella felezés a síkkal: c1, c2 Faépítés(c1); Faépítés(c2); ENDIF Sugárkövetés: FOR each cell intersecting the line Metszés a cellában lévőkkel IF van metszés RETURN ENDFOR kd-tree


Letölteni ppt "Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László."

Hasonló előadás


Google Hirdetések