1 / 40

Sugárkövetés: ray-casting, ray-tracing

Sugárkövetés: ray-casting, ray-tracing. Szirmay-Kalos László. Képszintézis. pixel. Lokális illuminációs módszer. L (x, w )= L e ( x, w )+  L ( h ( x,- w) , w ) f r ( ’ ,x,  ) cos ’ d w ’. A jobb oldali radiancia: fényforrások emissziója

bell
Download Presentation

Sugárkövetés: ray-casting, ray-tracing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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(x,w)=Le(x,w)+L(h(x,-w),w)fr (’,x,) cos ’dw’ • A jobb oldali radiancia: • fényforrások emissziója • Fényforrások fényének egyszeri visszaverődését számítjuk L(x,w)=Le(x,w)+Llightsource fr (’,x,) cos ’dw’  Le(y,w’)

  4. Absztrakt fényforrás modellek: az integrálást megspórolják • Ambiens fényforrás: La constant • ambiens visszaverődési modell: Lref = La ka • konstans égbolt fény modell: Lref = La a(x, view dir) • 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 • Pozicionális fényforrás: egyetlen pontból sugároz, az intenzitás a távolság négyzetével csökken d irány pozicionális

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

  6. Ambiens tag Lokális illumináció + ambiens tag L(w) Le(w)+SlrlLl (’l)fr (’l,) cos ’l+ka La

  7. Lokális illuminációs algoritmusok pixel • Láthatóság számítás a szemből • Fényforrás láthatóság számítás a látható pontbó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)*r0 + t*r1 ; 0 < t < 1 0 < t r(t) = r0 + t*(r1 - r0); 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 |r - center |2 = R2 r R center Nincs gyök 1 gyök 2 gyök |ray(t) - center |2 = R2 (v ·v) t 2 + 2 ((eye-center) ·v) t +((eye-center) ·(eye-center))- R2 = 0 Wanted: minimum pozitív megoldás Felületi normális: (ray(t) - center)/R

  11. Kvadratikus felületek x y z 1 Másodfokú egyenlet Kvadratikus felület: [x,y,z,1] A = 0 Végtelen kúp x2 y2 Ellipszoid x2 y2 z2 Végtelen henger x2 y2  +  +  -1=0  +  - 1=0  +  - z2=0 a2 b2 a2 b2c2 a2 b2

  12. Példa: sugár metszéspontja kvadratikus felülettel • Felület egyenlete legyen • Ugyanez mátrixformában 3x2+ 2xy + z2 + 2z - 7= 0 x y z 1 320 0 0 0 0 0 0 012 0 0 0-7 x y z 1 = 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) = ex + dxt = 0 + 1t = t y(t) = ey + dyt = 1 + 1t = 1 + t z(t) = ez + dzt = 0 + 0t = 0 másodfokú egyenlet (-b √(b2-4ac))/2a 3x2+ 2xy + z2 + 2z - 7= 0 3*t*t+ 2*t*(1+t) + 0*0 + 2*0 - 7= 0 3t2 + 2t2 + 2t -7 = 0 5t2 + 2t - 7 = 0 t = [-2√(2*2 - 4*5*(-7))] /(2*5) = [-2√144]/10 = [-212]/10; t1= -1.4, t2 = 1 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) = ex + dxt = 0 + 1t = t = 1 y(t) = ey + dyt = 1 + 1t = 1 + t = 2 z(t) = ez + dzt = 0 + 0t = 0 = 0

  15. a 4edik mindig legyen 1 Eh = 1, Dh = 0 Ugyanez a számítás mátrixműveletekkel x y z 1 320 0 0 0 0 0 0 012 0 0 0-7 x y z 1 = 0 X A XT XAXT=0 sugáregyenlet kezdőpont irány X(t) = E + tD

  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 EAET + tEADT + tDAET + t2DADT = 0 DADT t2 + (EADT+ DAET) t + EAET = 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. A konkrét példában DADT t2 + (EADT+ DAET) t + EAET = 0 DADT = = = 5 EADT = = = 0 DAET = = = 2 EAET = = = -7 320 0 0 0 0 0 0 012 0 0 0-7 1 1 0 0 1 1 0 0 3 2 0 0 1 1 0 0 320 0 0 0 0 0 0 012 0 0 0-7 1 1 0 0 1 1 0 0 0 0 0 -7 0 1 0 1 320 0 0 0 0 0 0 012 0 0 0-7 0 1 0 1 0 1 0 1 3 2 0 0 1 1 0 0 320 0 0 0 0 0 0 012 0 0 0-7 0 1 0 1 0 1 0 1 0 0 0 -7 0 1 0 1 5t2 + 2t - 7 = 0

  18. Metszéspont számítás: háromszög r3 p r1 r2 r1 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 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 -1]×[-1 -1 -1] = [1 2 -3] Ax + By + Cz + D = 0 x + 2y - 3z + D = 0 1+ 2 - 3 + 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 0 + 2 - 3t = 0 t = 2/3 [0 2 2/3]

  21. [0 3 2], [1 1 1], [-1 2 1] [0 2 2/3] 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 [1 -2 -1]×[-1 1 -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

  22. Árnyaló normálok N N2 N1 (X1, Y1, Z1 ) N3 N = A X + B Y+C A, B, C N1 = A X1+ B Y1+C N2 = A X2+ B Y2+C N3 = A X3+ B Y3+C 3 változós lineáris egyenletrendszer

  23. r(0,0) r(0,0.5) r(0.5,0) r(0,1) r(1,0) r(0.5,0.5) r(1,1) 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ó

  24. Transzformált objektumok T1 T1-1 T2 T2 -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 Tört sugár Tükör sugár Ll Árnyék sugár L(w) = Le(w)+SlrlLl (’l)fr (’l,) cos ’l+ka La+ + krLin (wr) + ktLin(wt) Törési irányból érkező fény Tükör irányból érkező fény

  28. Rekurzió Sugárkövetés lépései • 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

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

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

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

  32. DirectLightsource DirectLightsource( x, vdir ) color = ka La FOR each lightsource l DO shadowray = x to lightsource[l] t = FirstIntersect( shadowray ); IF (t < 0 || 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 Material Le, kd, ks, shine kr, kt, n BRDF ReflectDir RefractDir Object Scene Light transform La Le, pos Primitive( ) Define Render FirstIntersect DirectLightsource Trace(Ray) Dir(Point) Intens(Point) Primitive Intersect(Ray) Normal(Point) Camera Ray XRES, YRES vrp, vpn, vup eye, ww, wh Sphere Mesh dir, start Center, radius vertices[ ] Dir Start GetXRes( ) GetYRes( ) GetRay(int,int) Intersect(Ray) Normal(Point) 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 objektumok Elő- feldolgozás Sugár követés Térpartícionáló adatstruktúra Első metszéspont • 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

  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(n2)

  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 • kezdetben változás ebben a cellában vagyunk Ix = Ex/ Cx Tx= (Ix+1)Cx/Dx Ix += 1 Tx+= Cx/Dx ennél a t értéknél lépünk Tx, Ty, Tz; kiválasztjuk a legkisebbet frissítjük I-t és T-t

  39. 1 2 3 3 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 2 1 3 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 Octree

  40. 1 2 3 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 2 1 3 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

More Related