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

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ó
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
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.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, D képszintézis 4. 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
Fejlett grafikai algoritmusok Megvilágítási modellek
4.7. Textúra A felület anyagszerűsége Sík-képek ráborítása a felületre
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
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)‏
csillagász távcsövek fotoobjektív vetítőgép
AAO Csink László november.
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ó.
Sugárkövetés: ray-casting, ray-tracing
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.
Programozás I. Típus algoritmusok
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)
Excel programozás (makró)
Vizualizáció és képszintézis
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.
Gömbtükrök Fizika 8. osztály. Elnevezések a gömbtükörnél Gömbtükör: a gömb külső, vagy belső felülete tükröző G:Gömbi középpont O: optikai középpont (a.
3D grafika összefoglalás
Global Illumination.
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.
Vizualizáció és képszintézis
Á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
C/C++, hobbi játékprogramozás
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ó

Lokális illumináció pixel L (V)  L e (V)+  l  r l  L l (L l ) f r (L l,V) 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 LlLl

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

Absztrakt fényforrás modellek 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

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

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

 +  +  -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

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”

Á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

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)

Ray-casting képek Lokális illumináció Lokális illumináció + árnyékok

Rekurzív sugárkövetés LlLl Árnyék sugár Tükör sugár Tört sugár L (V)  L e (V)+  l  r l  L l (L l ) f r (L l,V) 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

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 rücskös és ideális visszaverődésekből/törésekből származó sugársűrűségek összegzése Rekurzió

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

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

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

DirectLightsource DirectLightsource( x, vdir ) color = k a L a FOR each lightsource l DO shadowray = x to lightsource[l] (t,y) = 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 y

Sugárkövető program typedef struct{double x,y,z}vec;vec U,black,amb={.02,.02,.02}; struct sphere{ vec cen,color;double rad,kd,ks,kt,kl,ir}*s, *best,sph[]={0.,6.,.5,1.,1.,1.,.9,.05,.2,.85,0.,1.7,-1.,8.,-.5,1.,.5,.2,1.,.7,.3,0.,.05,1.2,1.,8.,-.5,.1,.8,.8, 1.,.3,.7,0.,0.,1.2,3.,-6.,15.,1.,.8,1.,7.,0.,0.,0.,.6,1.5,-3.,-3.,12.,.8,1., 1.,5.,0.,0.,0.,.5,1.5,};yx; double u,b,tmin,sqrt(),tan();double vdot(A,B)vec A,B; {return A.x*B.x+A.y*B.y+A.z*B.z;}vec vcomb(a,A,B)double a;vec A,B; {B.x+=a* A.x;B.y+=a*A.y;B.z+=a*A.z;return B;} vec vunit(A)vec A;{return vcomb(1./sqrt( vdot(A,A)),A,black);}struct sphere *intersect(P,D)vec P,D;{best=0;tmin=1e30; s= sph+5;while(s-->sph)b=vdot(D,U=vcomb(-1.,P,s->cen)),u=b*b-vdot(U,U)+s->rad*s ->rad,u=u>0?sqrt(u):1e31,u=b-u> 1e-7?b-u:b+u,tmin=u>=1e-7&&u<tmin?best=s,u: tmin;return best;}vec trace(level,P,D)vec P,D;{double d,eta,e;vec N,color; struct sphere*s,*l;if(!level--)return black;if(s=intersect(P,D));else return amb;color=amb;eta=s->ir;d= -vdot(D,N=vunit(vcomb (-1.,P=vcomb(tmin,D,P),s->cen )));if(d sph)if((e=l ->kl*vdot(N, U=vunit(vcomb(-1.,P,l->cen))))>0&&intersect(P,U)==l)color=vcomb(e,l->color,color);U=s->color;color.x*=U.x;color.y*= U.y;color.z*=U.z;e=1-eta* eta*(1-d*d);return vcomb(s->kt,e>0?trace(level,P,vcomb(eta,D,vcomb(eta*d-sqrt (e),N,black))): black,vcomb(s->ks,trace(level,P,vcomb(2*d,N,D)),vcomb(s->kd, color,vcomb(s->kl,U,black))));} main(){printf("%d %d\n",32,32);while(yx<32*32) U.x=yx%32-32/2,U.z=32/2-yx++/32,U.y=32/2/tan(25/ ), U=vcomb(255., trace(3,black,vunit(U)),black),printf("%.0f %.0f %.0f\n",U);}/*minray!*/

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

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 )

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

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