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

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.

Hasonló előadás


Az előadások a következő témára: "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."— Előadás másolata:

1 Térfogatvizualizáció Szirmay-Kalos László

2 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 tömb

3 Térfogati modell megjelenítése l Kocka megjelenítése ??? l Megjelenítés átlátszó anyagként (belsejébe belelátunk) l Adott szintfelület kiemelése (külsôt lehámozzuk)

4 Átlátszó anyagok L(s + ds) L(s) dL(s)/ds = - kt · L(s) + ka · L e +  f(  ‘,  ) L i (  ‘) d  ‘ L(s +  s) L(s) L(s +  s) = L(s) - kt  s · L(s) + Li(s)  s C(s)  (s)

5 Fényemittáló, fényelnyelő anyag

6 Számítás fénysugárkövetéssel L = 0 for(s = 0; s < T; s +=  s) { L = (1-  (s)) · L + C(s) } L(s) L(s +  s) = (1-  (s)) · L(s) + C(s)

7 Számítás láthatóság sugárkövetéssel L* =  0 for( s = T; s >0 ; s -=  s ) { L += (1-  ) · C(s)  (1-  ) · (  (s)) if (  break } L*(s)  (s) L*(s-  s)=L*(s)+(1-  (s)) · C(s)  (s-  s)=(  (s)) · (  (s))

8 Térfogat vetítés L(s) L(s +  s) = (1-  (s)) · L(s) + C(s)

9 Voxel szín és opacitás: Transfer functions l Röntgen: –opacitás = v(x,y,z) –C(0) = 1, egyébként 0 l Klasszikus árnyalási modellek –opacitás: v osztályozása –C = árnyalási modell (diffúz + Phong) l normál = grad v l opacitás *= | grad v |

10 Különböző árnyalási modellek, szegmentálás

11 Phong árnyalás

12 Maximum intenzitás vetítés

13 Marching cubes v(x,y,z) < szint v(x,y,z) > szint

14 Masírozó kockák Szintérték = 110 Szintérték = 60

15 Isosurface ray casting v(x,y,z) > isovalue normal = grad v

16 GPU ray-casting Unit cube with 3D texture eye lookat right up p = lookat +  right +  up ,  are in [-1,1] p q entry exit

17 Isosurface ray-casting For each pixel Find pixel center p raydir = normalize(p – eye); Find exit and entry for(t = entry; t < exit; t+=dt) { q = eye + raydir * t; if (volume[q] > isovalue) break; } normal vector estimation; illumination } Full screen quad Interpolation from the corners central differences Render a cube and store the image in a texture

18 GPU Isosurface ray-casting CPU program Vertex shader Pixel shader Vertices of the window quad hpos=fullscreen textcoords volume, entry, exit texture ids eye, isolevel, material/light properties Rasterization Interpolation volume entrytex exittex Interpolated textcoords Ray casting

19 CPU program - OpenGL display void Display( ) { cgGLSetParameter3f(eye, 10, 20, 30); cgGLSetParameter3f(lookat, 3, 5, 6); cgGLSetParameter3f(right, Right.x, Right.y, Right.z); cgGLSetParameter3f(up, Up.x, Up.y, Up.z); // PASS: non uniform parameters glBegin( GL_QUADS ); Vector p = lookat - Right + Up; glTexCoord2f(0, 0); glVertex3f(p.x, p.y, p.z) p = lookat - Right - Up; glTexCoord2f(0, 1); glVertex3f(p.x, p.y, p.z) p = lookat + Right - Up; glTexCoord2f(1, 1); glVertex3f(p.x, p.y, p.z) p = lookat + Right + Up; glTexCoord2f(1, 0); glVertex3f(p.x, p.y, p.z) glEnd(); }

20 Ray casting: vertex shader void VertexShader( in float3 position : POSITION, in float2 uv : TEXCOORD0, out float4 hPosition : POSITION, out float2 ouv : TEXCOORD0, out float3 p : TEXCOORD1 ) { hPosition = float4(uv.x * 2 – 1, 1 – uv.y * 2, 0, 1); ouv = uv; p = position; }

21 Ray casting: fragment shader void FragmentShader( in float3 uv : TEXCOORD0, in float3 p : TEXCOORD1, uniform float3 eye, uniform sampler2D entrytex, exittex, uniform sampler3D volume, uniform float isolevel, uniform float3 lightdir, lightint, kd ) : COLOR { float entry = tex2d(entrytex, uv); float exit = tex2d(exittex, uv); float raydir = normalize(p – eye); float dt = (exit – entry) / STEPS; bool found = false; float3 q; for(t = entry; t < exit; t += dt) { if ( !found ) { q = eye + raydir * t; if (tex3D(volume, q).r > isolevel) found = true; }

22 Ray casting fragment shader cont’d float3 color = float3(0, 0, 0); // background color if ( found ) { float3 normal; normal.x = tex3d(volume, q + float3(1/RES,0,0)) – tex3d(volume, q - float3(1/RES,0,0)); normal.y = tex3d(volume, q + float3(0,1/RES,0)) – tex3d(volume, q - float3(0,1/RES,0)); normal.z = tex3d(volume, q + float3(0,0,1/RES)) – tex3d(volume, q - float3(0,0,1/RES)); normal = normalize( normal ); color = lightint * saturate(dot(lightdir, normal)); } return float4(color, 1); }

23 Video


Letölteni ppt "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."

Hasonló előadás


Google Hirdetések