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

Slides:



Advertisements
Hasonló előadás
L ÁTHATÓSÁG MEGHATÁROZÁSA tavaszi félév.
Advertisements

BSP-fák használata játék- engine fejlesztésében a nagy kiterjedésű zárt terek megjelenítéséhez Előadó: Boromissza Gergely Konzulens: dr. Szirmay-Kalos.
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
 Árnyalási egyenlet  Saját emisszió  Adott irányú visszaverődés.
2D képszintézis Szirmay-Kalos László.
Globális illumináció (GI)
Geometriai Transzformációk
Analitikus (koordináta) geometriai gyorstalpaló
Geometriai transzformációk
Inkrementális 3D képszintézis
Geometriai modellezés
Sugárkövetés: ray-casting, ray-tracing
Inkrementális 3D képszintézis Szirmay-Kalos László.
3D képszintézis fizikai alapmodellje
2D képszintézis Szirmay-Kalos László. Számítógépes grafika feladata képszintézis Virtuális világ modell modellezés Metafórák: 2D rajzolás világ = sík.
Geometriai modellezés
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
3D képszintézis fizikai alapmodellje
Grafikus játékok fejlesztése Szécsi László g11-physics
GPGPU labor V. GPU ray tracing. Kezdeti teendők Tantárgy honlapja, GPU ray tracing A labor kiindulási alapjának letöltése (lab5_base.zip), kitömörítés.
Regresszió számítás Mérnöki létesítmények ellenőrzése, terveknek megfelelése Geodéziai mérések – pontok helyzete, pontszerű információ Lineáris regresszió.
Mozgó Objektumok Detektálása és Követése Robotkamera Segítségével
Másodfokú egyenletek.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, D képszintézis 4. előadás.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
Színek és megvilágítás
A virtuális technológia alapjai Dr. Horváth László Budapesti Műszaki Főiskola Neumann János Informatikai Kar, Intelligens Mérnöki Rendszerek.
2D képszintézis és textúrák
Lineáris algebra.
Koordináta-geometria
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
2. Koordináta-rendszerek és transzformációk
Számítógépes grafika 5. gyakorlat. Előző órán Textúrázási módok Pixel shader használata.
Számítógépes Grafika Megvilágítás Programtervező informatikus (esti)‏
Közös metszéspontú erők
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Fraktálok Szirmay-Kalos László.
Vektorok különbsége e-x = [ex-xx ey-xy ez-xz] e e-x x szempozíció
Fraktálok és csempézések
Sugárkövetés: ray-casting, ray-tracing
2D képszintézis Szirmay-Kalos László.
Analitikus geometria gyorstalpaló
Inkrementális 3D képszintézis Szirmay-Kalos László.
3D képszintézis fizikai alapmodellje Szirmay-Kalos László Science is either physics or stamp collecting. Rutherford.
Inkrementális 3D képszintézis
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
4.6. A Fénysugár-követés módszere (ray-tracing) Mi látható a képernyőn, egy-egy képpontban ? (4.4.LÁTHATÓSÁG) A képponton át a szembe jutó fénysugár melyik.
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
2.2. Az egyenes és a sík egyenlete
Fotorealisztikus képszintézis valós időben Szirmay-Kalos László, Csébfalvi Balázs BME IIT.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Színek és megvilágítás 5. előadás.
Máté: Orvosi képfeldolgozás12. előadás1 Regisztrációs probléma Geometriai viszony meghatározása képek között. Megnevezései: kép regisztráció (image registration),
Máté: Orvosi képfeldolgozás12. előadás1 Három dimenziós adatok megjelenítése Metszeti képek transzverzális, frontális, szagittális, ferde. Felület síkba.
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)
Vizualizáció és képszintézis
Vizualizáció és képszintézis Térfogati fényterjedés Szécsi László.
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése 6.2. Térbeli alakzatok képe 6.3. Térbeli képelemek és modell-adatszerkezetek 6.4. Képelemek.
3D grafika összefoglalás
Vizualizáció és képszintézis
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Árnyalás - a képpontok színe.
Árnyékszerkesztés alapjai
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Vizualizáció és képszintézis
Sugármetszés implicit szintfelülettel
Dijkstra algoritmusa: legrövidebb utak
Dijkstra algoritmusa: legrövidebb utak
Dijkstra algoritmusa: legrövidebb utak
Előadás másolata:

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)=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’)

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

Lokális illumináció absztrakt fényforrásokkal pixel ’l Csak direkt megvilágítás L (w)  Le(w)+Sl rl Ll (’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

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

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

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

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

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

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

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

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

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

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

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

DADT t2 + (EADT+ DAET) t + EAET = 0 A konkrét példában DADT t2 + (EADT+ DAET) t + EAET = 0 DADT = = = 5 EADT = = = 0 DAET = = = 2 EAET = = = -7 3 2 0 0 0 0 0 0 0 0 1 2 0 0 0 -7 1 1 1 1 0 0 3 2 0 0 3 2 0 0 0 0 0 0 0 0 1 2 0 0 0 -7 1 1 0 1 0 1 0 0 0 -7 3 2 0 0 0 0 0 0 0 0 1 2 0 0 0 -7 1 1 1 1 0 0 3 2 0 0 3 2 0 0 0 0 0 0 0 0 1 2 0 0 0 -7 1 1 0 1 0 1 0 0 0 -7 5t2 + 2t - 7 = 0

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 Felületi normális: n vagy „shading normals”

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

Sík-sugár metszéspont 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]

Benne van-e a hszben [0 3 2], [1 1 1], [-1 2 1] [0 2 2/3] ((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

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

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 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) Rekurzív tesszelláció

Transzformált objektumok

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

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

Törési irányból érkező Sugárkövetés Tört sugár Tükör sugár Ll Árnyék sugár L(w) = Le(w)+Sl rl Ll (’l) fr (’l ,) cos ’l + ka La + + kr Lin (wr) + kt Lin(wt) Tükör irányból érkező fény Törési irányból érkező fény

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 Rekurzió

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

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 ) IF ( kt > 0 && RefractDir( ray, refracted ray ) ) color += kt · Trace( refracted ray ) RETURN color ray 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 ) IF ( kt > 0 && RefractDir( ray, refracted ray ) ) color += kt · Trace( refracted ray, d+1 ) RETURN color ray x

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

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)

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

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

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

Reguláris térháló Előfeldolgozás: Minden cellára a metszett objektumok komplexitás: O(n ·c ) = O(n 2) 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 )

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

Nyolcas (oktális) fa 1 2 3 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 1 2 3 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

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