T rfogatvizualiz ci
This presentation is the property of its rightful owner.
Sponsored Links
1 / 29

Térfogatvizualizáció PowerPoint PPT Presentation


  • 49 Views
  • Uploaded on
  • Presentation posted in: General

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)

Download Presentation

Térfogatvizualizáció

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


T rfogatvizualiz ci

Térfogatvizualizáció

Szirmay-Kalos László


T rfogati modellek

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

Té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)


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

(s)

C(s)


F nyemitt l f nyelnyel anyag

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


Sz m t s f nysug rk vet ssel

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

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

L(s)

s=0

L = 0

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

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

}


T rfogatvizualiz ci

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

L*(s)

(s)

L*(s-s)=L*(s)+(1- (s)) · C(s)

(s-s)=((s)) · ((s))

L* =  0

for( s = T; s >0 ; s -= s ) {

L* += (1- ) · C(s)

(1- ) · ((s))

if (break

}


T rfogat vet t s

Térfogat vetítés

L(s)

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


Voxel sz n s opacit s transfer functions c t v f ggv

Voxel szín és opacitás: Transfer functions: (C,)=T(v 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)


T rfogatvizualiz ci

(C,) = T(v(x,y,z))


T rfogatvizualiz ci

Maximum intenzitás vetítés


T rfogatvizualiz ci

Phong


T rfogatvizualiz ci

Illusztratív vizualizáció


T rfogatvizualiz ci

Illusztratív vizualizáció


T rfogatvizualiz ci

Transzlucens megjelenítés

Felező vektor


T rfogatvizualiz ci

Transzlucens megjelenítés


Szintvonal

Szintvonal


T rfogatvizualiz ci

Szintfelület


Marching cubes

Marching cubes

v(x,y,z) > szint

v(x,y,z) < szint


Mas roz kock k

Masírozó kockák

Szintérték = 110

Szintérték = 60


Isosurface ray casting

Isosurface ray casting

normal = grad v

v(x,y,z) > isovalue


Gpu ray casting

GPU ray-casting

right

up

lookat

eye

p

q

entry

p = lookat + right + up

, are in [-1,1]

exit

Unit cube with 3D texture


Isosurface ray casting1

Isosurface ray-casting

Full screen quad

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

}

Interpolation

from the corners

Clipping

central differences


T rfogatvizualiz ci

GPU Isosurface ray-casting

volume

eye, isolevel, material/light properties

Ray casting

Pixel

shader

CPU

program

Vertex shader

Rasterization

Interpolation

Vertices

of the

window

quad

ray/window

hpos=fullscreen

textcoords

Volume


T rfogatvizualiz ci

CPU 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();

}


T rfogatvizualiz ci

Ray casting: vertexshader

voidVertexShader(

in float4 hPosIn : POSITION,

in float3 wPosIn : TEXCOORD0,

out float4 hPosOut : POSITION,

out float3 wPosOut : TEXCOORD0 )

{

hPosOut =hPosIn;

wPosOut = wPosIn;

}


T rfogatvizualiz ci

Ray casting: fragment shader

void FragmentShader( in float3 p : TEXCOORD0,

uniform float3 eye,

uniform sampler3D volume,

uniform float isolevel,

uniform float3 lightdir, lightint, kd 

out float3color : 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;

}

}


T rfogatvizualiz ci

Ray castingfragment 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));

}

}


Video

Video


  • Login