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

Térfogatvizualizáció

  • Upload
    meriel

  • View
    15

  • Download
    1

Embed Size (px)

DESCRIPTION

Térfogatvizualizáció. Szirmay-Kalos László. Térfogati modellek. hőmérséklet sűrűség légnyomás potenciál anyagfeszültség. v(x,y,z). v(x,y,z). tárolás: 3D tömb. Térfogati modell megjelenítése. Megjelenítés átlátszó anyagként (belsejébe belelátunk) - PowerPoint PPT Presentation

Citation preview

Page 1: Térfogatvizualizáció

TérfogatvizualizációTérfogatvizualizáció

Szirmay-Kalos László

Page 2: Térfogatvizualizáció

Térfogati modellekTérfogati modellek

v(x,y,z)

hőmérsékletsűrűséglégnyomáspotenciálanyagfeszültség...

v(x,y,z)

tárolás: 3D tömb

Page 3: Térfogatvizualizáció

Térfogati modell megjelenítéseTérfogati modell megjelenítése

Megjelenítés átlátszó anyagként (belsejébe belelátunk)

Adott szintfelület kiemelése (külsôt lehámozzuk)

Page 4: Térfogatvizualizáció

Átlátszó anyagokÁtlátszó anyagok

L(s + ds) L(s)

dL(s)/ds = - kt · L(s) + ka · Le + f(‘,) Li(‘) d‘

L(s + s) L(s)

L(s + s) = L(s) - kt s · L(s) + Li(s) s

C(s)(s)

Page 5: Térfogatvizualizáció

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

Page 6: Térfogatvizualizáció

Számítás fénysugárkövetésselSzámítás fénysugárkövetéssel

L = 0for(s = 0; s < T; s += s) {

L = (1- (s)) · L + C(s)}

L(s)

L(s + s) = (1- (s)) · L(s) + C(s)

s=0

Page 7: Térfogatvizualizáció

Számítás láthatóság Számítás láthatóság sugárkövetésselsugárkövetéssel

L* = 0for( 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))

Page 8: Térfogatvizualizáció

Térfogat vetítésTérfogat vetítés

L(s)

L(s + s) = (1- (s)) · L(s) + C(s) OpenGL blending

Page 9: Térfogatvizualizáció

Voxel szín és opacitás: Voxel szín és opacitás: Transfer functions: (Transfer functions: (C,C,)=T()=T(vv függv) függv)

Röntgen: (C,)=T(v(x,y,z))

– opacitás = v(x,y,z)– C(0) = 1, egyébként 0

Klasszikus árnyalási modellek– opacitás: v osztályozása– C = árnyalási modell (diffúz + Phong)

normál = grad v opacitás *= | grad v |

Magasabb rendű derivált (görbület) Transzlucens anyagok (subsurface scattering)

Page 10: Térfogatvizualizáció

((C,C,) = T() = T(vv((x,y,zx,y,z))))

Page 11: Térfogatvizualizáció

Maximum intenzitás vetítésMaximum intenzitás vetítés

Page 12: Térfogatvizualizáció

PhongPhong

Page 13: Térfogatvizualizáció

Illusztratív vizualizációIllusztratív vizualizáció

Page 14: Térfogatvizualizáció

Illusztratív vizualizációIllusztratív vizualizáció

Page 15: Térfogatvizualizáció

Transzlucens megjelenítésTranszlucens megjelenítés

Felező vektor

Page 16: Térfogatvizualizáció

Transzlucens megjelenítésTranszlucens megjelenítés

Page 17: Térfogatvizualizáció

SzintvonalSzintvonal

Page 18: Térfogatvizualizáció

SzintfelületSzintfelület

Page 19: Térfogatvizualizáció

Marching cubesMarching cubes

v(x,y,z) < szint

v(x,y,z) > szint

Page 20: Térfogatvizualizáció

Masírozó kockákMasírozó kockák

Szintérték = 110 Szintérték = 60

Page 21: Térfogatvizualizáció

Isosurface ray castingIsosurface ray casting

v(x,y,z) > isovalue

normal = grad v

Page 22: Térfogatvizualizáció

GPU ray-castingGPU ray-casting

Unit cube with 3D texture

eyelookat

rightup

p = lookat + right + up

, are in [-1,1]

pqentry

exit

Page 23: Térfogatvizualizáció

Isosurface ray-castingIsosurface 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 quadInterpolation from the corners

central differences

Clipping

Page 24: Térfogatvizualizáció

GPU GPU Isosurface ray-castingIsosurface ray-casting

CPU program

Vertex shader

Pixelshader

Verticesof thewindow quad

hpos=fullscreentextcoords

volumeeye, isolevel, material/light properties

RasterizationInterpolation

Volume

ray/window

Ray casting

Page 25: Térfogatvizualizáció

CPU program - OpenGL displayCPU program - OpenGL display

void Display( ) {// PASS: non uniform parameters

glBegin( GL_QUADS ); Vector p = lookat - Right + Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(-1, 1, 0);

p = lookat - Right - Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(-1, -1, 0);

p = lookat + Right - Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(1, -1, 0);

p = lookat + Right + Up; glTexCoord3f(p.x, p.y. p.z); glVertex3f(1, 1, 0); glEnd();}

Page 26: Térfogatvizualizáció

Ray castingRay casting: vertex: vertex shadershader

void VertexShader( in float4 hPosIn : POSITION, in float3 wPosIn : TEXCOORD0,

out float4 hPosOut : POSITION, out float3 wPosOut : TEXCOORD0 ) {

hPosOut = hPosIn; wPosOut = wPosIn;}

Page 27: Térfogatvizualizáció

Ray castingRay casting: : fragment shaderfragment shadervoid FragmentShader( in float3 p : TEXCOORD0,

uniform float3 eye, uniform sampler3D volume, uniform float isolevel, uniform float3 lightdir, lightint, kd out float3 color : COLOR )

{ float3 raydir = normalize(p – eye); float2 inUnitCube = Intersect(eye, raydir); float entry = inUnitCube.x, exit = inUnitCube.y; 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;}

}

Page 28: Térfogatvizualizáció

Ray castingRay casting fragment shader cont’dfragment shader cont’d

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 * kd * saturate(dot(lightdir, normal)); }}

Page 29: Térfogatvizualizáció

VideoVideo