 Árnyalási egyenlet  Saját emisszió  Adott irányú visszaverődés.

Slides:



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

Árnyalás – a felületi pontok színe A tárgyak felületi pontjainak színezése A fényviszonyok szerint.
2D képszintézis Szirmay-Kalos László.
Globális illumináció (GI)
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
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
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
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
 Gauss szűrő uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; void main(){
 Nincs szinkronizáció és kommunikáció  Csővezeték alkalmazása  Párhuzamosítás Proc 2Proc 1 Csővezeték Proc 1 Proc 21 Proc 22 Párhuzamosság.
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.
Programozás I. Horváth Ernő.
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
2D képszintézis és textúrák
Fejlett grafikai algoritmusok Megvilágítási modellek
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)‏
AAO Csink László november.
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
Fraktálok Szirmay-Kalos László.
Sugárkövetés: ray-casting, ray-tracing
Térfogatvizualizáció
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
Térfogatvizualizáció
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.
Textúrák Grafikus játékok fejlesztése Szécsi László g07-texture.
Többmenetes renderelés Grafikus játékok fejlesztése Szécsi László g11-multipass.
Rekurzív algoritmusok
GPGPU labor III. Iteratív algoritmusok. Kezdeti teendők Tantárgy honlapja, Iteratív algoritmusok A labor kiindulási alapjának letöltése (lab3base.zip),
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
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.
Számítógépes grafika DirectX 5. gyakorlat. Emlékeztető Háromdimenziós alapok befejezése Textúrázás.
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
Jeni László Attila Klár Gergely
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Színek és megvilágítás 5. előadás.
Web-grafika (VRML) 1. gyakorlat Nyitrai Erika Varga Balázs alapján Kereszty Gábor.
Készült a HEFOP P /1.0 projekt keretében
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
Szécsi László 3D Grafikus Rendszerek 10. előadás
Vizualizáció és képszintézis
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
Vizualizáció és képszintézis
Vizualizáció és képszintézis
Alapok Model betöltés Anyagjellemzők Fényforrások Shaderek
Sugármetszés implicit szintfelülettel
Előadás másolata:

 Árnyalási egyenlet  Saját emisszió  Adott irányú visszaverődés

 Rekurzív sugárkövetés  Saját sugárzás és ambiens visszaverődés  Tükörirányból jövő radiancia  Törési irányból jövő radiancia  Fényforrás láthatósága

pixel ray(t) = eye + v·t, t > 0 FirstIntersect(ray  t, iobject, x) t = FLT_MAX; FOR each object tnew = Intersect( ray, object );// < 0 ha nincs metszés 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 eye

|ray(t) – center| 2 = (ray(t) – center)  (ray(t) – center)=R 2 Felületi normális: (ray(t) – center)/R center R |r – center| 2 = R 2 r (v  v)t 2 +2 ((eye – center)  v)t +((eye – center)  (eye – center))–R 2 = 0 Wanted: a pozitív megoldások közül a kisebb Nincs gyök 1 gyök 2 gyök ray(t) = eye + v·t

(,, )  ( x-x*, y-y*, z-z* ) = 0  A felület pontjai: f(x,y,z) = 0 vagy f(r) = 0  A sugár pontjai: ray(t) = eye+v·t  A metszéspont: f( ray(t) ) = 0,  1 ismeretlenes, ált. nemlineáris egyenlet: t*  (x*,y*,z*) = eye+ v·t*  Normálvektor = grad f  0=f(x,y,z) = f(x*+(x-x*),y*+(y-y*),z*+(z-z*))  f(x*,y*,z*) + (x-x*)+ (y-y*)+ (z-z*) fxfx fyfy fzfz fxfx fyfy fzfz Az érintősík egyenlete: x*,y*,z*

 +  +  -1=0 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

1. Síkmetszés: (ray(t) - r1)  n = 0, t > 0 normál: n = (r2 - r1)  (r3 - r1) 2. A metszéspont a háromszögön belül van-e? ((r2 - r1)  (p - r1))  n > 0 ((r3 - r2)  (p - r2))  n > 0 ((r1 - r3)  (p - r3))  n > 0 r1 r2 p r3 Felületi normális: n vagy árnyaló normálok (shading normals) p r3 r2 t = (r1- eye)  n v  n ray(t) = eye + v·t (r – r0)  n = 0

LlLl Árnyék sugár Tükör sugár R T V Tört sugár L (V)   l  L l (L l )*(k d  (L l  N) + +k s  ((H l  N) + ) shine )+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 Fresnel 1-Fresnel

Render( ) for each pixel p Ray r = ray( eye  pixel p ) color = Trace(ray) WritePixel(p, color) endfor end ray color p p eye

Color Trace( ray ) IF (FirstIntersect(ray  obj, x) < 0) RETURN L a ENDIF color = DirectLightSource(x, ray.v, obj) IF ( obj.mirror ) ReflectDir( ray, reflected ray) color += obj.k r * Trace( reflected ray ) ENDIF IF ( obj.refractive && RefractDir( ray, refracted ray ) ) color += obj.k t * Trace( refracted ray ) ENDIF RETURN color ray x

Color Trace( ray, d ) IF (d > dmax) RETURN L a IF (FirstIntersect(ray  obj, x) < 0) RETURN L a ENDIF color = DirectLightSource(x, ray.v, obj) IF ( obj.mirror ) ReflectDir( ray, reflected ray) color += obj.k r * Trace( reflected ray, d+1 ) ENDIF IF ( obj.refractive && RefractDir( ray, refracted ray ) ) color += obj.k t * Trace( refracted ray, d+1 ) ENDIF RETURN color ray x ray.v-2  N  (N  ray.v) ray.v/n+N  ((N  ray.v)/n-  1-(1-(N  ray.v) 2 )/n 2 )

DirectLightSource( x, v, obj ) color = obj.k a *L a FOR each lightsource l DO shadowray.eye = x; shadowray.v = light[l].pos – x; (t,y) = FirstIntersect( shadowray ); IF (t |x-light[l].pos|) color += light[l].Intensity * (obj.k d  (L l  N) + + obj.k s  ((H l  N) + ) obj.shine ) ENDIF ENDFOR RETURN color árnyék x y v

 Sugár p = o + td ▪ p – pont [x y z 1] ▪ o – sugár kezdőpont [o x o y o z 1 ] ▪ d – sugár irány [ d x d y d z 0 ] ▪ t – sugárparaméter  Kvadratikus felület (quadric) pAp T = 0 a x 2 + b xy + c xz + d x + e yx + f y 2 + … = 0

(o + td)A(o + td) T = 0 (oA + tdA)(o + td) T = 0 oAo T + oAtd T + tdAo T + tdAtd T = 0 dAd T t 2 + (oAd T + dAo T ) t + oAo T = 0 másodfokú egyenlet t-re

 Kvadratikus felület  Felületek metszete t min t max t min t max t min t max

 visszaadja a két metszéspont t-jét sorrendben  ha kilóg a tMinMax.x és tMinMax.y közötti tartományból akkor levágja  visible true, ha nem kellett levágni vec2 intersectQuadric( mat4 A, vec4 o, vec4 d, vec2 tMinMax, out bvec2 visible)

float a = dot(d * A, d); float b = dot(d * A, o) + dot(o * A, d); float c = dot(o * A, o); float det = b*b - 4 * a * c; if(det < 0) return tMinMax.yx; vec2 t = (-b.xx + sqrt(det) * vec2(1, -1)) / (2 * a); if(t.x > t.y) t = t.yx; visible = bvec2(true, true); if(t.x < tMinMax.x) { t.x = tMinMax.x; visible.x = false; } if(t.y > tMinMax.y) { t.y = tMinMax.y; visible.y = false; } return t; }

 Kvadratikus felület  pAp T = 0 – Izofelület  Normálvektor = Gradiens

vec3 trace(inout vec4 o, inout vec4 d, inout float contrib) { bvec2 visible; vec2 t = intersectQuadric(quadrics[0], o, d, vec2(0, 10000), visible); if(t.x > t.y) return vec3(0, 0, 0); vec4 p = o + d * t.x; vec3 normal = normalize((p * quadrics[0] + quadrics[0] * p).xyz); vec3 lightDir = normalize(vec3(-1, 1, 1)); return dot(normal, lightDir).xxx; } N L in L out

 Objektumok  Quadricok metszetei  Feltesszük hogy a két metszéspont között van mindig a belseje (kúpra, hiberboloidra ez hibás eredményre fog vezetni)  Anyagtulajdonságok minden quadricra

 Anyagtulajdonság alapján illumináció  Sugárparaméterek módosítása vec3 result = contrib * texProc(p.xyz, materials[quadric].xyz) * (clamp(dot(normal, lightDir), 0, 1) + 0.3); float kr = materials[quadric].w; if(kr >= 0) { contrib *= kr; o = p; o.xyz += normal * 0.01; d = vec4(reflect(d.xyz, normal), 0); }

if(kr < 0){ vec3 rdir = refract(d.xyz, normal, -(backFacing?(kr):(1/kr))); if(dot(rdir, rdir) > 0.001) { contrib *= 0.99; o = p; o.xyz -= normal * 0.01; d = vec4(rdir, 0); } else kr = 1;// total internal relfection }  Anyagtulajdonság alapján illumináció  Sugárparaméterek módosítása

uniform int nRecursions = 2; void main() { vec4 o = vec4(eye, 1); vec4 d = vec4(normalize(viewDir), 0); outcolor = vec4(0, 0, 0, 1); float contrib = 1; for(int iReflection=0; iReflection 0.01; iReflection++) outcolor.xyz += trace(o, d, contrib); }